PageSourceSearch

https://streetify.com/_nuxt/CgcBXQaH.js

js streetify.com collected 2026-10-02 00:02:45 UTC 14,199 bytes, 1 lines download raw bytes

1import ee from"./bjZkKBy5.js";import{_ as te}from"./Dt0JLW-9.js";import{_ as se}from"./-TY-d4DB.js";import{_ as oe}from"./B-sNwosc.js";import{_ as le}from"./CHjvqlDf.js";import{_ as re}from"./Caz4cs2_.js";import{e as ae,G as ne,r as x,f as ie,g as V,h as M,i as de,c as d,a as t,b as c,w as y,j as g,v as C,k as o,l as E,m as j,n as ue,F as B,p as z,d as b,t as u,q as D,o as m,s as N}from"./wYx4X3Ud.js";import"./B6ze2Sp9.js";import"./u_Qu_4Id.js";import"./CnTdNGz-.js";const me={class:"min-h-screen bg-gray-50"},pe={class:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8"},ce={class:"mb-6"},xe={class:"bg-white rounded-lg shadow-md p-6 mb-6"},fe={class:"flex flex-col md:flex-row md:items-center md:justify-between gap-4"},ye={class:"flex-1"},ge={class:"bg-white rounded-lg shadow-md overflow-hidden"},be={key:0,class:"p-8 text-center"},ve={key:1,class:"p-8 text-center"},_e={key:2,class:"overflow-x-auto"},we={class:"min-w-full divide-y divide-gray-200"},he={class:"bg-white divide-y divide-gray-200"},ke={class:"px-6 py-4 whitespace-nowrap"},Ue={class:"text-sm font-medium text-gray-900"},Ce={class:"text-sm text-gray-500"},$e={class:"px-6 py-4 whitespace-nowrap"},Ae={class:"px-6 py-4 whitespace-nowrap"},Se={class:"px-6 py-4 whitespace-nowrap text-sm text-gray-500"},Ve={class:"px-6 py-4 whitespace-nowrap text-right text-sm font-medium"},Me=["onClick"],Ee=["onClick"],De=["onClick"],Ne={key:3,class:"bg-white px-4 py-3 flex items-center justify-between border-t border-gray-200 sm:px-6"},Te={class:"flex-1 flex justify-between sm:hidden"},Pe=["disabled"],Fe=["disabled"],Le={class:"hidden sm:flex-1 sm:flex sm:items-center sm:justify-between"},Re={class:"text-sm text-gray-700"},je={class:"font-medium"},Be={class:"font-medium"},ze={class:"font-medium"},He={class:"relative z-0 inline-flex rounded-md shadow-sm -space-x-px"},Ie=["disabled"],Je=["onClick"],qe=["disabled"],Oe={class:"flex items-center gap-3"},Ge={class:"w-10 h-10 rounded-full bg-purple-100 flex items-center justify-center"},Qe={key:0,class:"space-y-4"},We={class:"grid grid-cols-2 gap-4"},Ye={class:"bg-gray-50 rounded-lg p-3 text-sm"},Ke={class:"grid grid-cols-2 gap-2 text-gray-600"},Xe={class:"ml-1 font-mono text-xs"},Ze={class:"ml-1"},et={key:0},tt={class:"ml-1 text-blue-600"},st={class:"flex justify-end gap-3"},$=20,ft={__name:"users",setup(ot){var R;ae();const H=(R=ne().value)==null?void 0:R.id,T=x(!0),P=x(!1),F=x([]),v=x(""),_=x("all"),n=x(1),w=x(!1),r=x(null),h=x(!1),k=x({title:"Success!",description:"Your action was completed successfully."});ie(async()=>{await A()});const A=async()=>{T.value=!0;try{const{users:s}=await $fetch("/api/admin/users");F.value=s}catch(s){console.error("Error fetching users:",s),V().$toast.add({title:"Error",description:"Failed to fetch users",color:"red"})}finally{T.value=!1}},U=M(()=>{let s=F.value;if(v.value){const e=v.value.toLowerCase();s=s.filter(a=>{var p,f;return((p=a.email)==null?void 0:p.toLowerCase().includes(e))||((f=a.full_name)==null?void 0:f.toLowerCase().includes(e))})}return _.value!=="all"&&(s=s.filter(e=>{switch(_.value){case"regular":return!e.store&&!e.council&&!e.is_admin;case"store":return!!e.store;case"council":return!!e.council;case"super_admin":return e.is_admin;default:return!0}})),s}),S=M(()=>Math.ceil(U.value.length/$)),I=M(()=>{const s=(n.value-1)*$,e=s+$;return U.value.slice(s,e)}),J=M(()=>{const s=[];let a=Math.max(1,n.value-Math.floor(2.5)),p=Math.min(S.value,a+5-1);p-a+1<5&&(a=Math.max(1,p-5+1));for(let f=a;f<=p;f++)s.push(f);return s}),q=s=>s.is_admin?"Admin":s.store?"Store Owner":s.council?"Council Rep":"Regular User",O=s=>s.is_admin?"bg-red-100 text-red-800":s.store?"bg-blue-100 text-blue-800":s.council?"bg-green-100 text-green-800":"bg-gray-100 text-gray-800",L=s=>new Date(s).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"}),G=s=>{var e,a,p;r.value={id:s.id,email:s.email,full_name:s.full_name,mobile_number:((e=s.profile)==null?void 0:e.mobile_number)||s.mobile_number||"",postcode:((a=s.profile)==null?void 0:a.postcode)||s.postcode||"",profile_type:((p=s.profile)==null?void 0:p.profile_type)||s.profile_type||"user",created_at:s.created_at,email_confirmed_at:s.email_confirmed_at,
1store:s.store,council:s.council},w.value=!0},Q=async()=>{var s;P.value=!0;try{await $fetch(`/api/admin/users/${r.value.id}`,{method:"PATCH",body:{full_name:r.value.full_name,email:r.value.email,mobile_number:r.value.mobile_number,postcode:r.value.postcode,profile_type:r.value.profile_type}}),await A(),w.value=!1,k.value={title:"User Updated!",description:"The user details have been updated successfully."},h.value=!0}catch(e){console.error("Error updating user:",e),V().$toast.add({title:"Error",description:((s=e.data)==null?void 0:s.statusMessage)||"Failed to update user",color:"red"})}finally{P.value=!1}},W=async s=>{try{await $fetch(`/api/admin/users/${s.id}`,{method:"PATCH",body:{profile_type:"super_admin"}}),await A(),k.value={title:"Admin Created!",description:`${s.email} is now an admin.`},h.value=!0}catch(e){console.error("Error making user admin:",e),V().$toast.add({title:"Error",description:"Failed to make user admin",color:"red"})}},Y=async s=>{try{await $fetch(`/api/admin/users/${s.id}`,{method:"PATCH",body:{profile_type:"user"}}),await A(),k.value={title:"Admin Removed!",description:`Admin privileges removed from ${s.email}.`},h.value=!0}catch(e){console.error("Error removing admin:",e),V().$toast.add({title:"Error",description:"Failed to remove admin privileges",color:"red"})}};return de([v,_],()=>{n.value=1}),(s,e)=>{const a=ee,p=te,f=se,K=oe,X=le,Z=re;return m(),d("div",me,[t("div",pe,[t("div",ce,[c(p,{to:"/admin",class:"text-purple-600 hover:text-purple-700 flex items-center mb-4"},{default:y(()=>[c(a,{name:"heroicons:arrow-left",class:"h-4 w-4 mr-2"}),e[14]||(e[14]=b(" Back to Admin Dashboard "))]),_:1}),e[15]||(e[15]=t("h1",{class:"text-3xl font-bold text-gray-900"},"User Management",-1)),e[16]||(e[16]=t("p",{class:"mt-2 text-gray-600"}," View and manage all users on the platform ",-1))]),t("div",xe,[t("div",fe,[t("div",ye,[e[17]||(e[17]=t("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Search Users",-1)),g(t("input",{"onUpdate:modelValue":e[0]||(e[0]=l=>E(v)?v.value=l:null),type:"text",placeholder:"Search by name or email...",class:"w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-purple-500 focus:border-purple-500"},null,512),[[C,o(v)]])]),t("div",null,[e[19]||(e[19]=t("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Filter by Type",-1)),g(t("select",{"onUpdate:modelValue":e[1]||(e[1]=l=>E(_)?_.value=l:null),class:"px-4 py-2 border border-gray-300 rounded-md focus:ring-purple-500 focus:border-purple-500"},e[18]||(e[18]=[ue('<option value="all">All Users</option><option value="regular">Regular Users</option><option value="store">Store Owners</option><option value="council">Council Representatives</option><option value="super_admin">Admins</option>',5)]),512),[[j,o(_)]])])])]),t("div",ge,[o(T)?(m(),d("div",be,[c(a,{name:"svg-spinners:pulse-3",class:"h-8 w-8 text-purple-600 mx-auto"}),e[20]||(e[20]=t("p",{class:"mt-2 text-gray-600"},"Loading users...",-1))])):o(U).length===0?(m(),d("div",ve,e[21]||(e[21]=[t("p",{class:"text-gray-600"},"No users found",-1)]))):(m(),d("div",_e,[t("table",we,[e[22]||(e[22]=t("thead",{class:"bg-gray-50"},[t("tr",null,[t("th",{class:"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider"}," User "),t("th",{class:"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider"}," Type "),t("th",{class:"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider"}," Status "),t("th",{class:"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider"}," Joined "),t("th",{class:"px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider"}," Actions ")])],-1)),t("tbody",he,[(m(!0),d(B,null,z(o(I),l=>(m(),d("tr",{key:l.id},[t("td",ke,[t("div",null,[t("div",Ue,u(l.full_name||"N/A"),1),t("div",Ce,u(l.email),1)])]),t("td",$e,[t("span",{class:N([O(l),"px-2 inline-flex text-xs leading-5 font-semibold rounded-full"])},u(q(l)),3)]),t("td",Ae,[t("span",{class:N([l.email_confirmed_at?"text-green-600":"text-yellow-600","text-sm"])},u(l.email_confirmed_at?"Verified":"Pending"),3)]),t("td",Se,u(L(l.created_at)),1),t("td",Ve,[t("button",{onClick:i=>G(l),class:"text-purple-600 hover:text-purple-900 mr-3"}," Edit ",8,Me),l.is_admin?l.id!==o(H)?(m(),d("button",{key:1,onClick:i=>Y(l),class:"text-red-600 hover:text-red-900"}," Remove Admin ",8,De)):D("",!0):(m(),d("button",{key:0,onClick:i=>W(l),class:"text-blue-600 hover:text-blue-900"}," Make Admin ",8,Ee))])]))),128))])])])),o(S)>1?(m(),d("div",Ne,[t("div",Te,[t("button",{onClick:e[2]||(e[2]=l=>n.value--),disabled:o(n)===1,class:"relative inline-flex items-center px-4 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 disabled:opacity-50"}," Previous ",8,Pe),t("button",{onClick:e[3]||(e[3]=l=>n.value++),disabled:o(n)===o(S),class:"ml-3 relative inline-flex items-center px-4 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 disabled:opacity-50"}," Next ",8,Fe)]),t("div",Le,[t("div",null,[t("p",Re,[e[23]||(e[23]=b(" Showing ")),t("span",je,u((o(n)-1)*$+1),1),e[24]||(e[24]=b(" to ")),t("span",Be,u(Math.min(o(n)*$,o(U).length)),1),e[25]||(e[25]=b(" of ")),t("span",ze,u(o(U).length),1),e[26]||(e[26]=b(" results "))])]),t("div",null,[t("nav",He,[t("button",{onClick:e[4]||(e[4]=l=>n.value--),disabled:o(n)===1,class:"relative inline-flex items-center px-2 py-2 rounded-l-md border border-gray-300 bg-white text-sm font-medium text-gray-500 hover:bg-gray-50 disabled:opacity-50"},[c(a,{name:"heroicons:chevron-left",class:"h-5 w-5"})],8,Ie),(m(!0),d(B,null,z(o(J),l=>(m(),d("button",{key:l,onClick:i=>n.value=l,class:N([l===o(n)?"z-10 bg-purple-50 border-purple-500 text-purple-600":"bg-white border-gray-300 text-gray-500 hover:bg-gray-50","relative inline-flex items-center px-4 py-2 border text-sm font-medium"])},u(l),11,Je))),128)),t("button",{onClick:e[5]||(e[5]=l=>n.value++),disabled:o(n)===o(S),class:"relative inline-flex items-center px-2 py-2 rounded-r-md border border-gray-300 bg-white text-sm font-medium text-gray-500 hover:bg-gray-50 disabled:opacity-50"},[c(a,{name:"heroicons:chevron-right",class:"h-5 w-5"})],8,qe)])])])])):D("",!0)])]),c(X,{modelValue:o(w),"onUpdate:modelValue":e[12]||(e[12]=l=>E(w)?w.value=l:null),ui:{width:"sm:max-w-lg"}},{default:y(()=>[c(K,null,{header:y(()=>[t("div",Oe,[t("div",Ge,[c(a,{name:"heroicons:user",class:"h-5 w-5 text-purple-600"}
1)]),e[27]||(e[27]=t("div",null,[t("h3",{class:"text-lg font-medium text-gray-900"},"Edit User"),t("p",{class:"text-sm text-gray-500"},"Update user information")],-1))])]),footer:y(()=>[t("div",st,[c(f,{color:"gray",variant:"outline",onClick:e[11]||(e[11]=l=>w.value=!1)},{default:y(()=>e[39]||(e[39]=[b(" Cancel ")])),_:1}),c(f,{color:"primary",onClick:Q,loading:o(P)},{default:y(()=>e[40]||(e[40]=[b(" Save Changes ")])),_:1},8,["loading"])])]),default:y(()=>{var l;return[o(r)?(m(),d("div",Qe,[t("div",null,[e[28]||(e[28]=t("label",{class:"block text-sm font-medium text-gray-700 mb-1"}," Full Name ",-1)),g(t("input",{"onUpdate:modelValue":e[6]||(e[6]=i=>o(r).full_name=i),type:"text",placeholder:"John Smith",class:"w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:ring-purple-500 focus:border-purple-500"},null,512),[[C,o(r).full_name]])]),t("div",null,[e[29]||(e[29]=t("label",{class:"block text-sm font-medium text-gray-700 mb-1"}," Email Address ",-1)),g(t("input",{"onUpdate:modelValue":e[7]||(e[7]=i=>o(r).email=i),type:"email",placeholder:"[email protected]",class:"w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:ring-purple-500 focus:border-purple-500"},null,512),[[C,o(r).email]]),e[30]||(e[30]=t("p",{class:"mt-1 text-xs text-gray-500"}," Changing email will update both auth and profile. User won't need to re-verify. ",-1))]),t("div",We,[t("div",null,[e[31]||(e[31]=t("label",{class:"block text-sm font-medium text-gray-700 mb-1"}," Mobile Number ",-1)),g(t("input",{"onUpdate:modelValue":e[8]||(e[8]=i=>o(r).mobile_number=i),type:"tel",placeholder:"+44 7123 456789",class:"w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:ring-purple-500 focus:border-purple-500"},null,512),[[C,o(r).mobile_number]])]),t("div",null,[e[32]||(e[32]=t("label",{class:"block text-sm font-medium text-gray-700 mb-1"}," Postcode ",-1)),g(t("input",{"onUpdate:modelValue":e[9]||(e[9]=i=>o(r).postcode=i),type:"text",placeholder:"SW1A 1AA",class:"w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:ring-purple-500 focus:border-purple-500"},null,512),[[C,o(r).postcode]])])]),t("div",null,[e[34]||(e[34]=t("label",{class:"block text-sm font-medium text-gray-700 mb-1"}," User Type ",-1)),g(t("select",{"onUpdate:modelValue":e[10]||(e[10]=i=>o(r).profile_type=i),class:"w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:ring-purple-500 focus:border-purple-500"},e[33]||(e[33]=[t("option",{value:"user"},"Regular User",-1),t("option",{value:"admin"},"Admin",-1),t("option",{value:"super_admin"},"Super Admin",-1)]),512),[[j,o(r).profile_type]])]),t("div",Ye,[t("div",Ke,[t("div",null,[e[35]||(e[35]=t("span",{class:"text-gray-500"},"User ID:",-1)),t("span",Xe,u((l=o(r).id)==null?void 0:l.slice(0,8))+"...",1)]),t("div",null,[e[36]||(e[36]=t("span",{class:"text-gray-500"},"Joined:",-1)),t("span",Ze,u(L(o(r).created_at)),1)]),t("div",null,[e[37]||(e[37]=t("span",{class:"text-gray-500"},"Status:",-1)),t("span",{class:N(["ml-1",o(r).email_confirmed_at?"text-green-600":"text-yellow-600"])},u(o(r).email_confirmed_at?"Verified":"Pending"),3)]),o(r).store?(m(),d("div",et,[e[38]||(e[38]=t("span",{class:"text-gray-500"},"Store:",-1)),t("span",tt,u(o(r).store.name||o(r).store.domain),1)])):D("",!0)])])])):D("",!0)]}),_:1})]),_:1},8,["modelValue"]),c(Z,{modelValue:o(h),"onUpdate:modelValue":e[13]||(e[13]=l=>E(h)?h.value=l:null),title:o(k).title,description:o(k).description},null,8,["modelValue","title","description"])])}}};export{ft as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.