PageSourceSearch

https://mercury-retrograde.org/assets/index-pbghk2YR.js

js mercury-retrograde.org collected 2026-10-06 07:57:43 UTC 16,457 bytes, 1 lines download raw bytes

1import{u as e,x as m,y}from"./main-Cy8p_WHu.js";import{w,x as R}from"./use-translation-BPaMUu1y.js";import{B as S}from"./button-Djzf_qlD.js";import{S as le,A as O,a as z,u as oe,T as ce,e as ie,f as F,d as de,g as _,b as me,c as H,h as ue}from"./table-C90UMwdE.js";import{P as he,a as xe,b as k,e as ge,c as pe,d as je}from"./pagination-GHBrA0m6.js";import{D as M,e as L,a as $,c as Q,d as K,b as N}from"./dropdown-menu-BAfopcg9.js";import{S as fe}from"./settings-2-Cp5qhcpY.js";import{C as be}from"./check-BPmKGfua.js";import{I as we}from"./input-CPvRfAIl.js";import{S as U,d as I,e as E,b as T,c as x}from"./select-B7HawjZ3.js";import{X as Ne}from"./x-BTPXnrPT.js";import{S as ye}from"./switch-BDtuJbTN.js";import{A as W,h as Se,c as X,f as G,g as Z,d as ee,e as se,b as ae,a as re}from"./alert-dialog-D752X6tu.js";import{a as B}from"./authClient-OfxkBOK1.js";import{C as ve}from"./copy-rt8SkEDo.js";import{A as q}from"./arrow-down-fTSgQVU0.js";import{c as ne}from"./createLucideIcon-CTa0zEvC.js";import"./cn-DeUeD3zY.js";import"./chevron-left-_e5jpqtJ.js";import"./chevron-right-GRYRuJVb.js";import"./index-BPD2sb2x.js";import"./index-B6raQJ7N.js";import"./index-jC8Ely8L.js";import"./index-EltEJMgK.js";import"./index-BczYJW2r.js";import"./index-C1ubNF8h.js";import"./index-C74oqVXl.js";const Ce=[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]],De=ne("ellipsis",Ce);const Pe=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"19",x2:"19",y1:"8",y2:"14",key:"1bvyxn"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]],Ae=ne("user-plus",Pe);function Ve({table:a}){const{t:s}=w(),r=["id","phoneNumber","emailVerified","createdAt","updatedAt"];return e.jsxs(M,{children:[e.jsx(L,{asChild:!0,children:e.jsxs(S,{variant:"outline",size:"sm",className:"ml-auto h-8",children:[e.jsx(fe,{className:"mr-2 h-4 w-4"}),s.admin.users.table.search.view]})}),e.jsxs($,{align:"end",className:"w-[180px]",children:[e.jsx(Q,{children:s.admin.users.table.search.toggleColumns}),e.jsx(K,{}),a.getAllColumns().filter(n=>typeof n.accessorFn<"u"&&r.includes(n.id)).map(n=>e.jsxs(N,{className:"flex items-center justify-between",onSelect:c=>{c.preventDefault(),n.toggleVisibility()},children:[e.jsx("span",{className:"capitalize",children:s.admin.users.table.columns[n.id]}),n.getIsVisible()&&e.jsx(be,{className:"h-4 w-4"})]},n.id))]})]})}function Re(){const{t:a}=w(),s=new URLSearchParams(typeof window<"u"?window.location.search:""),[r,n]=m.useState(s.get("searchValue")||""),[c,i]=m.useState(s.get("searchField")||"email"),[u,g]=m.useState(s.get("role")||"all"),[h,j]=m.useState(s.get("banned")||"all"),p=m.useCallback(d=>{const b=new URLSearchParams(window.location.search);return Object.entries(d).forEach(([v,C])=>{C===null?b.delete(v):b.set(v,C)}),b.toString()},[]),l=d=>{const b=window.location.pathname;window.location.href=`${b}?${p(d)}`},o=()=>{l({searchValue:r||null,searchField:c,role:u==="all"?null:u,banned:h==="all"?null:h,page:"1"})},t=d=>{i(d),n("")},P=d=>{g(d),l({role:d==="all"?null:d,page:"1"})},f=d=>{j(d),l({banned:d==="all"?null:d,page:"1"})},A=d=>{d.preventDefault(),o()},V=()=>{n(""),i("email"),g("all"),j("all"),l({searchValue:null,searchField:null,role:null,banned:null,page:"1"})};return e.jsxs("form",{onSubmit:A,className:"flex items-center gap-2 flex-1",children:[e.jsxs(U,{value:c,onValueChange:t,children:[e.jsx(I,{className:"w-[120px]",children:e.jsx(E,{placeholder:a.admin.users.table.search.searchBy})}),e.jsxs(T,{children:[e.jsx(x,{value:"email",children:a.admin.users.table.columns.email}),e.jsx(x,{value:"name",children:a.admin.users.table.columns.name}),e.jsx(x,{value:"id",children:a.admin.users.table.columns.id})]})]}),e.jsx(we,{placeholder:a.admin.users.table.search.searchPlaceholder.replace("{field}",c),value:r,onChange:d=>n(d.target.value),className:"w-[250px]"}),e.jsx(S,{type:"submit",size:"icon",className:"shrink-0",children:e.jsx(le,{className:"h-4 w-4"})}),e.jsx(S,{type:"button",variant:"outline",size:"icon",className:"shrink-0",onClick:V,children:e.jsx(Ne,{className:"h-4 w-4"})}),e.jsx("div",{className:"mx-2 h-4 w-px bg-border"}),e.jsxs(U,{value:u,onValueChange:P,children:[e.jsx(I,{className:"w-[130px]",children:e.jsx(E,{placeholder:a.admin.users.table.search.filterByRole})}),e.jsxs(T,{children:[e.jsx(x,{value:"all",children:a.admin.users.table.search.allRoles}),e.jsx(x,{value:"admin",children:"Admin"}),e.jsx(x,{value:"user",children:"User"})]})]}),e.jsxs(U,{value:h,onValueChange:f,children:[e.jsx(I,{className:"w-[130px]",children:e.jsx(E,{placeholder:a.admin.users.table.search.banStatus})}),e.jsxs(T,{children:[e.jsx(x,{value:"all",children:a.admin.users.table.search.allUsers}),e.jsx(x,{value:"true",children:a.admin.users.table.search.bannedUsers}),e.jsx(x,{value:"false",children:a.admin.users.table.search.notBannedUsers})]})]})]})}const J=a=>
1a?(typeof a=="string"?new Date(a):a).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"N/A",Y=({column:a,title:s,t:r})=>{const n=a.getIsSorted();return e.jsxs(M,{children:[e.jsx(L,{asChild:!0,children:e.jsxs(S,{variant:"ghost",className:"h-auto p-0 font-medium hover:bg-transparent hover:text-accent-foreground flex items-center",children:[s,e.jsx("div",{className:"ml-2 flex flex-col",children:n==="asc"?e.jsx(O,{className:"h-3 w-3"}):n==="desc"?e.jsx(q,{className:"h-3 w-3"}):e.jsx(z,{className:"h-3 w-3"})})]})}),e.jsxs($,{align:"start",children:[e.jsxs(N,{onClick:()=>a.toggleSorting(!1),children:[e.jsx(O,{className:"mr-2 h-4 w-4"}),r.admin.users.table.sort.ascending]}),e.jsxs(N,{onClick:()=>a.toggleSorting(!0),children:[e.jsx(q,{className:"mr-2 h-4 w-4"}),r.admin.users.table.sort.descending]}),e.jsx(K,{}),e.jsxs(N,{onClick:()=>a.clearSorting(),children:[e.jsx(z,{className:"mr-2 h-4 w-4"}),r.admin.users.table.sort.none]})]})]})},ke=({value:a,userId:s})=>{const{t:r}=w(),[n,c]=m.useState(!1),[i,u]=m.useState(a),g=async()=>{const{error:h}=await(i?B.admin.unbanUser({userId:s}):B.admin.banUser({userId:s,banReason:"No reason provided"}));if(h){y.error(h.message||r.admin.users.messages.operationFailed),console.error("Error updating user status:",h);return}u(!i),c(!1),y.success(i?r.admin.users.table.dialog.unbanSuccess:r.admin.users.table.dialog.banSuccess)};return e.jsxs(W,{open:n,onOpenChange:c,children:[e.jsx(Se,{asChild:!0,children:e.jsx("div",{className:"flex items-center",children:e.jsx(ye,{checked:i,onClick:h=>{h.preventDefault(),i?g():c(!0)}})})}),e.jsxs(X,{children:[e.jsxs(G,{children:[e.jsx(Z,{children:r.admin.users.table.dialog.banTitle}),e.jsx(ee,{children:r.admin.users.table.dialog.banDescription})]}),e.jsxs(se,{children:[e.jsx(ae,{children:r.actions.cancel}),e.jsx(re,{onClick:g,children:r.actions.confirm})]})]})]})},Ue=({currentRole:a,userId:s})=>{const{t:r}=w(),n=async c=>{const{error:i}=await B.admin.setRole({userId:s,role:c});if(i){y.error(i.message||r.admin.users.table.dialog.updateRoleFailed),console.error("Error updating user role:",i);return}y.success(r.admin.users.table.dialog.updateRoleSuccess)};return e.jsxs(U,{defaultValue:a,onValueChange:n,children:[e.jsx(I,{className:"w-[100px]",children:e.jsx(E,{placeholder:r.admin.users.form.placeholders.selectRole})}),e.jsxs(T,{children:[e.jsx(x,{value:R.ADMIN,children:R.ADMIN}),e.jsx(x,{value:R.USER,children:R.USER})]})]})},Ie=({user:a})=>{const{t:s,locale:r}=w(),[n,c]=m.useState(!1),i=async()=>{const{error:u}=await B.admin.removeUser({userId:a.id});if(u){y.error(u.message||s.admin.users.messages.deleteError),console.error("Error deleting user:",u);return}c(!1),y.success(s.admin.users.messages.deleteSuccess),window.location.reload()};return e.jsxs(e.Fragment,{children:[e.jsxs(M,{children:[e.jsx(L,{asChild:!0,children:e.jsxs(S,{variant:"ghost",className:"h-8 w-8 p-0",children:[e.jsx("span",{className:"sr-only",children:s.admin.users.table.columns.actions}),e.jsx(De,{className:"h-4 w-4"})]})}),e.jsxs($,{align:"end",children:[e.jsx(Q,{children:s.admin.users.table.columns.actions}),e.jsx(N,{onClick:()=>{window.location.href=`/${r}/admin/users/${a.id}`},children:s.admin.users.table.actions.editUser}),e.jsx(K,{}),e.jsx(N,{onClick:()=>c(!0),className:"text-red-600 focus:text-red-600",children:s.admin.users.table.actions.deleteUser})]})]}),e.jsx(W,{open:n,onOpenChange:c,children:e.jsxs(X,{children:[e.jsxs(G,{children:[e.jsx(Z,{children:s.admin.users.deleteDialog.title}),e.jsx(ee,{children:s.admin.users.deleteDialog.description})]}),e.jsxs(se,{children:[e.jsx(ae,{children:s.actions.cancel}),e.jsx(re,{onClick:i,className:"bg-red-600 hover:bg-red-700 focus:ring-red-600",children:s.actions.delete})]})]})})]})},Ee=a=>[{accessorKey:"id",header:a.admin.users.table.columns.id,cell:({row:s})=>{const r=s.getValue("id"),n=async()=>{try{await navigator.clipboard.writeText(r)}catch(c){console.error("Failed to copy User ID:",c)}};return e.jsxs("div",{className:"group relative",children:[e.jsxs("div",{className:"font-mono text-sm max-w-[100px] truncate cursor-pointer",title:r,onClick:n,children:["#",r.slice(-8)]}),e.jsx("div",{className:"absolute z-50 hidden group-hover:block top-full left-0 pt-1",children:e.jsxs("div",{className:"bg-popover text-popover-foreground shadow-md rounded-md border p-2 text-xs font-mono min-w-max",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"select-all",children:r}),e.jsx("button",{className:"p-1 hover:bg-accent rounded",onClick:n,children:e.jsx(ve,{className:"h-3 w-3"})})]}),e.jsx("div",{className:"text-xs text-muted-foreground mt-1",children:a.admin.users.table.actions.clickToCopy})]})})]})},enableSorting:!1},{accessorKey:"name",header:a.admin.users.table.columns.name,cell:({row:s})=>{const r=s.getValue("name");return e.jsx("div",{className:"font-medium text-foreground",title:r||a.common.notAvailable,children:r||a.common.notAvailable})}},{accessorKey:"email",header:a.admin.users.table.columns.email,cell:({row:s})=>{const r=s.getValue("email");return e.jsx("div",{className:"text-sm text-muted-foreground max-w-[200px] truncate",title:r||a.common.notAvailable,children:r||a.common.notAvailable})}},{accessorKey:"role",header:a.admin.users.table.columns.role,cell:({row:s})=>{const r=s.getValue("role"),n=s.getValue("id");return e.jsx(Ue,{currentRole:r,userId:n})}},{accessorKey:"phoneNumber",header:a.admin.users.table.columns.phoneNumber,cell:({row:s})=>{const r=s.getValue("phoneNumber");return e.jsx("div",{className:"text-sm text-muted-foreground",title:r||a.common.notAvailable,children:r||a.common.notAvailable})}},{accessorKey:"emailVerified",header:a.admin.users.table.columns.emailVerified,cell:({row:s})=>{const r=s.getValue("emailVerified");return e.jsx("div",{className:"text-sm",children:r?e.jsx("span",{className:"text-green-600 font-medium",children:a.common.yes}):e.jsx("span",{className:"text-muted-foreground",children:a.common.no})})}},{accessorKey:"banned",header:a.admin.users.table.columns.banned,cell:({row:s})=>{const r=s.getValue("banned"),n=s.getValue("id");return e.jsx(ke,{value:r,userId:n})}},{accessorKey:"createdAt",header:({column:s})=>e.jsx(Y,{column:s,title:a.admin.users.table.columns.createdAt,t:a}),cell:({row:s})=>{const r=s.getValue("createdAt");return e.jsx("div",{className:"text-sm text-muted-foreground",children:J(r)})},enableSorting:!0},{accessorKey:"updatedAt",header:({column:s})=>e.jsx(Y,{column:s,title:a.admin.users.table.columns.updatedAt,t:a}),cell:({row:s})=>{const r=s.getValue("updatedAt");return e.jsx("div",{className:"text-sm text-muted-foreground",children:J(r)})},enableSorting:!0},{id:"actions",cell:({row:s})=>{const r=s.original;return e.jsx(Ie,{user:r})}}];function Te({data:a,pagination:s}){const{t:r}=w(),n=m.useMemo(()=>Ee(r),[r]),c="admin-users-column-visibility",[i,u]=m.useState({id:!1,phoneNumber:!1,emailVerified:!1,createdAt:!0,updatedAt:!1}),[g,h]=m.useState([]);m.useEffect(()=>{const l=localStorage.getItem(c);if(l)try{u(JSON.parse(l))}catch(o){console.error("Failed to parse saved column visibility:",o)}},[]),m.useEffect(()=>{localStorage.setItem(c,JSON.stringify(i))},[i]),m.useEffect(()=>{const l=new URLSearchParams(window.location.search),o=l.get("sortBy"),t=l.get("sortDirection");o&&t&&h([{id:o,desc:t==="desc"}])},[]);const j=oe({data:a,columns:n,getCoreRowModel:ue(),onColumnVisibilityChange:u,onSortingChange:l=>{const o=typeof l=="function"?l(g):l;h(o);const t=new URLSearchParams(window.location.search);o.length>0?(t.set("sortBy",o[0].id),t.set("sortDirection",o[0].desc?"desc":"asc")):(t.delete("sortBy"),t.delete("sortDirection")),t.set("page","1"),window.location.href=`${window.location.pathname}?${t.toString()}`},state:{columnVisibility:i,sorting:g},manualSorting:!0,enableSorting:!0}),p=l=>{const o=new URLSearchParams(window.location.search);o.set("page",l.toString()),window.location.href=`${window.location.pathname}?${o.toString()}`};return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between gap-4",children:[e.jsx(Re,{}),e.jsx(Ve,{table:j})]}),e.jsx("div",{className:"rounded-md border bg-card",children:e.jsxs(ce,{children:[e.jsx(ie,{children:j.getHeaderGroups().map(l
1=>e.jsx(F,{children:l.headers.map(o=>e.jsx(de,{children:o.isPlaceholder?null:_(o.column.columnDef.header,o.getContext())},o.id))},l.id))}),e.jsx(me,{children:j.getRowModel().rows?.length?j.getRowModel().rows.map(l=>e.jsx(F,{"data-state":l.getIsSelected()&&"selected",children:l.getVisibleCells().map(o=>e.jsx(H,{children:_(o.column.columnDef.cell,o.getContext())},o.id))},l.id)):e.jsx(F,{children:e.jsx(H,{colSpan:n.length,className:"h-24 text-center",children:r.admin.users.table.noResults})})})]})}),s&&e.jsx(he,{children:e.jsxs(xe,{children:[e.jsx(k,{children:e.jsx(ge,{onClick:()=>p(s.currentPage-1),className:s.currentPage<=1?"pointer-events-none opacity-50":"cursor-pointer",label:r.actions.previous})}),Array.from({length:s.totalPages}).map((l,o)=>{const t=o+1;return t===1||t===s.totalPages||t>=s.currentPage-2&&t<=s.currentPage+2?e.jsx(k,{children:e.jsx(pe,{isActive:t===s.currentPage,onClick:()=>p(t),className:"cursor-pointer",children:t})},t):t===s.currentPage-3||t===s.currentPage+3?e.jsx(k,{children:e.jsx("span",{className:"flex h-9 w-9 items-center justify-center",children:"..."})},t):null}),e.jsx(k,{children:e.jsx(je,{onClick:()=>p(s.currentPage+1),className:s.currentPage>=s.totalPages?"pointer-events-none opacity-50":"cursor-pointer",label:r.actions.next})})]})})]})}function is(){const{t:a,locale:s}=w(),[r,n]=m.useState(null),[c,i]=m.useState(!0),[u,g]=m.useState(null),[h,j]=m.useState(1),p=10;if(m.useEffect(()=>{(async()=>{i(!0);const t=new URLSearchParams(window.location.search),P=Number(t.get("page"))||1;j(P);const f=new URLSearchParams({limit:p.toString(),offset:((P-1)*p).toString()}),A=t.get("searchField"),V=t.get("searchValue");V&&A&&(f.set("searchField",A),f.set("searchValue",V));const d=t.get("role");d&&d!=="all"&&f.set("role",d);const b=t.get("banned");b&&b!=="all"&&f.set("banned",b);const v=t.get("sortBy"),C=t.get("sortDirection");v&&C&&(f.set("sortBy",v),f.set("sortDirection",C));try{const D=await fetch(`/api/admin/users?${f.toString()}`);if(!D.ok)throw new Error("Failed to fetch users");const te=await D.json();n(te)}catch(D){g(D instanceof Error?D.message:"Error")}finally{i(!1)}})()},[]),c)return e.jsx("div",{className:"container mx-auto py-10 px-5",children:e.jsxs("div",{className:"animate-pulse",children:[e.jsx("div",{className:"h-8 bg-muted rounded w-48 mb-4"}),e.jsx("div",{className:"h-64 bg-muted rounded"})]})});if(u)return e.jsxs("div",{className:"container mx-auto py-10 px-5",children:[e.jsx("h1",{className:"text-2xl font-bold mb-4",children:a.admin.users.title}),e.jsx("p",{className:"text-red-500",children:a.admin.users.messages.fetchError})]});const l=Math.ceil((r?.total||0)/p);return e.jsxs("div",{className:"container mx-auto py-10 px-5",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsx("h1",{className:"text-2xl font-bold",children:a.admin.users.title}),e.jsx("a",{href:`/${s}/admin/users/new`,children:e.jsxs(S,{children:[e.jsx(Ae,{className:"mr-2 h-4 w-4"}),a.admin.users.actions.addUser]})})]}),e.jsx("div",{className:"flex flex-col gap-4",children:e.jsx(Te,{data:r?.users||[],pagination:{currentPage:h,totalPages:l,pageSize:p,total:r?.total||0}})})]})}export{is as component};

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.