PageSourceSearch

https://sunset-spike.up.railway.app/assets/users-Dzp6GWaE.js

js sunset-spike.up.railway.app collected 2026-10-03 12:15:24 UTC 36,937 bytes, 1 lines download raw bytes

1import{cd as Ee,cy as Pe,cz as Le,u as $,j as e,U as Te,b$ as Ae,_ as ie,bV as ae,bc as R,bZ as Oe,bh as xe,bi as je,bj as ge,bk as be,bl as K,cA as Re,cB as qe,af as ne,cC as Ve,b5 as Ke,b7 as $e,b9 as w,ba as S,bb as C,bf as O,bd as P,b8 as k,bg as ke,cj as W,B as A,al as B,cD as ze,cE as _e,cF as ee,cG as se,cH as Be,cI as re,cJ as Qe,aq as M,bv as Ye,a4 as He,a6 as We,a7 as Je,a8 as Xe,bL as Ze,bo as ve,bp as ye,bq as Ne,br as we,bs as Se,cK as te,cL as le,cM as oe,cN as ce,cO as Z,cP as de,cQ as ue,aH as me,c as z,bT as fe,bt as Ce,bC as es,c0 as ss,cR as rs,ci as ns,Z as as,$ as is,a0 as ts,bH as ls,a1 as os,cS as cs,cT as ds,cU as us,cV as ms,cW as _,cX as hs,cY as Ue,L as ps,cZ as xs,c_ as js,c$ as gs,bX as bs,bY as fs,bJ as vs,g as ys}from"./index-onZ-siV6.js";import{r as p}from"./sentry-CwTBLAGw.js";import{u as Ns}from"./index-dfuXivrf.js";import{A as ws}from"./AdminPageHeader-DMjmiDyT.js";import{E as Ss,a as Cs,b as Gs,c as Fs,d as ks}from"./empty-D8xgqxdd.js";import{D as Us}from"./data-table-CvtVVMM-.js";import{A as Ds}from"./arrow-up-Cf6aEa-a.js";import{e as he,c as Ge,j as Ts,d as As,U as Ms}from"./groups-CpyvpnWC.js";import{l as Is}from"./utils-SJutkBrZ.js";import{E as Es}from"./ellipsis-CqZmNbLA.js";import"./posthog-C-TxGGwT.js";import"./table-Cdw6YMfO.js";(function(){try{var r=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{};r.SENTRY_RELEASE={id:"36665b27cc5c935a9a1384aae7c036cb424779c4"};var l=new r.Error().stack;l&&(r._sentryDebugIds=r._sentryDebugIds||{},r._sentryDebugIds[l]="30aeea0d-e41a-44bd-9cc3-06a91b1341a7",r._sentryDebugIdIdentifier="sentry-dbid-30aeea0d-e41a-44bd-9cc3-06a91b1341a7")}catch{}})();function Ps({search:r,coach:l,member:a,currentSupporter:s,hasGroup:j,groupId:f,limit:g=50}={}){return Ee({queryKey:[...Le(),"infinite",{search:r,coach:l,member:a,currentSupporter:s,hasGroup:j,groupId:f,limit:g}],queryFn:async({pageParam:i=0})=>{const h={skip:i*g,limit:g,search:r||void 0,coach:l,member:a,current_supporter:s,has_group:j,group_id:f};return Pe(h)},initialPageParam:0,getNextPageParam:(i,h)=>{const o=h.reduce((n,u)=>n+(u.users?.length??0),0);if(!((i.users?.length??0)<g)&&!(o>=(i.total??0)))return h.length}})}function Ls({data:r,columns:l,isLoading:a=!1,isError:s=!1,isFetchingMore:j=!1,hasMore:f=!1,loadMoreRef:g,errorMessage:i,emptyMessage:h,toolbar:o,footer:n}){const{t:u}=$("common"),[v,y]=p.useState(!1);return p.useEffect(()=>{const G=()=>y(window.scrollY>400);return window.addEventListener("scroll",G),()=>window.removeEventListener("scroll",G)},[]),e.jsxs(e.Fragment,{children:[e.jsx(Us,{data:r,columns:l,isLoading:a,isError:s,isFetchingMore:j,hasMore:f,loadMoreRef:g,toolbar:o,footer:n,errorMessage:i??u("admin.users.errorDescription"),loadingMoreText:u("admin.users.loadingMore"),emptyState:e.jsx(Ss,{children:e.jsxs(Cs,{children:[e.jsx(Gs,{variant:"icon",children:e.jsx(Te,{})}),e.jsx(Fs,{children:u("admin.users.emptyStateTitle")}),e.jsx(ks,{children:h??u("admin.users.noUsers")})]})})}),v&&e.jsx(Ae,{tooltipContent:u("buttons.scrollToTop"),onClick:()=>window.scrollTo({top:0,behavior:"smooth"}),size:"icon",className:ie("fixed bottom-6 right-6 z-50 h-12 w-12 rounded-full shadow-lg","transition-[scale,background-color] duration-200 hover:scale-105","bg-primary hover:bg-primary/90 text-primary-foreground"),"aria-label":u("buttons.scrollToTop"),icon:()=>e.jsx(Ds,{className:"h-5 w-5"})})]})}const Os=p.memo(Ls),Rs=p.memo(function({searchTerm:l,onSearchChange:a,c
1oachFilter:s,onCoachFilterChange:j,membershipFilter:f,onMembershipFilterChange:g,groupFilter:i,onGroupFilterChange:h}){const{t:o}=$("common"),{data:n}=he(),[u,v]=p.useState(l),y=p.useRef();p.useEffect(()=>{v(l)},[l]);const G=m=>{v(m),y.current&&clearTimeout(y.current),y.current=setTimeout(()=>{a(m)},300)};return e.jsxs("div",{className:"mb-6 flex flex-col sm:flex-row gap-3 flex-wrap",children:[e.jsxs("div",{className:"flex-1 min-w-48",children:[e.jsx(ae,{htmlFor:"user-search",children:o("admin.users.searchLabel")}),e.jsx(R,{id:"user-search",startAdornment:e.jsx(Oe,{className:"w-4 h-4"}),placeholder:o("admin.users.searchPlaceholder"),value:u,onChange:m=>G(m.target.value)})]}),e.jsxs("div",{children:[e.jsx(ae,{htmlFor:"coach-filter",children:o("admin.users.filterByRole")}),e.jsxs(xe,{value:s,onValueChange:j,children:[e.jsx(je,{className:"w-full sm:w-45",id:"coach-filter",children:e.jsx(ge,{})}),e.jsxs(be,{children:[e.jsx(K,{value:"all",children:o("admin.users.allUsers")}),e.jsx(K,{value:"coaches",children:o("admin.users.coachesOnly")}),e.jsx(K,{value:"non-coaches",children:o("admin.users.nonCoaches")})]})]})]}),e.jsxs("div",{children:[e.jsx(ae,{htmlFor:"membership-filter",children:o("admin.users.filterByMembership")}),e.jsxs(xe,{value:f,onValueChange:g,children:[e.jsx(je,{className:"w-full sm:w-50",id:"membership-filter",children:e.jsx(ge,{})}),e.jsxs(be,{children:[e.jsx(K,{value:"all",children:o("admin.users.allUsers")}),e.jsx(K,{value:"members",children:o("admin.users.allMembers")}),e.jsx(K,{value:"active-supporters",children:o("admin.users.payingMembers")}),e.jsx(K,{value:"inactive-supporters",children:o("admin.users.inactiveMembers")}),e.jsx(K,{value:"non-members",children:o("admin.users.nonMembers")})]})]})]}),e.jsxs("div",{children:[e.jsx(ae,{htmlFor:"group-filter",children:o("admin.users.filterByGroup")}),e.jsxs(xe,{value:i,onValueChange:h,children:[e.jsx(je,{className:"w-full sm:w-45",id:"group-filter",children:e.jsx(ge,{})}),e.jsxs(be,{children:[e.jsx(K,{value:"all",children:o("admin.users.allUsers")}),e.jsx(K,{value:"with-group",children:o("admin.users.withGroup")}),e.jsx(K,{value:"without-group",children:o("admin.users.withoutGroup")}),n&&n.length>0&&e.jsxs(e.Fragment,{children:[e.jsx(Re,{}),n.map(m=>e.jsx(K,{value:m.id,children:m.name},m.id))]})]})]})]})]})});function qs({currentCount:r,totalCount:l}){const{t:a}=$("common");return e.jsx("div",{className:"mb-4 text-sm text-muted-foreground",children:a("admin.users.showingCount",{current:r,total:l})})}const Vs=(r,l)=>qe({url:`/api/v1/users/${encodeURIComponent(String(r))}/admin`,method:"PUT",data:l,headers:{"Content-Type":"application/json"}}),Ks=r=>ze.extend({taxNumber:_e(r)}),$s=/^(\d{4})-(\d{2})-(\d{2})$/;function zs(r){if(!r)return"";const l=new Date(r);if(Number.isNaN(l.getTime()))return"";const a=l.getUTCFullYear(),s=String(l.getUTCMonth()+1).padStart(2,"0"),j=String(l.getUTCDate()).padStart(2,"0");return`${a}-${s}-${j}`}function _s(r){const l=$s.exec(r.trim());if(!l)return null;const[,a,s,j]=l,f=Date.UTC(Number(a),Number(s)-1,Number(j)),g=new Date(f);return Number.isNaN(g.getTime())||g.getUTCFullYear()!==Number(a)||g.getUTCMonth()!==Number(s)-1||g.getUTCDate()!==Number(j)?null:g.toISOString()}function Bs(r){return new Date(Date.UTC(r.getFullYear(),r.getMonth(),r.getDate())).toISOString()}function Qs(r){if(!r)return;const l=new Date(r);if(!Number.isNaN(l.getTime()))return new Date(l.getUTCFullYear(),l.getUTCMonth(),l.getUTCDate())}function Ys({value:r,onChange:l,placeholder:a}){const s=zs(r),[j,f]=p.useState(s),[g,i]=p.useState(r??null),[h,o]=p.useState(!1),[n,u]=p.useState(!1),[v,y]=p.useState(!1);(r??null)!==g?(i(r??null),f(s),o(!1)):!n&&!v&&j!==s&&(f(s),o(!1));const G=m=>{const F=m.trim();if(!F){o(!1),l(null);return}const I=_s(F);I?(o(!1),l(I)):o(!0)};return e.jsxs("div",{className:"flex gap-2",children:[e.jsx(R,{value:j,placeholder:a??"YYYY-MM-DD",inputMode:"numeric","aria-invalid":h||void 0,onChange:m=>{f(m.target.value),h&&o(!1)},onFocus:()=>u(!0),onBlur:m=>{u(!1),G(m.target.value)},onKeyDown:m=>{m.key==="Enter"&&(m.preventDefault(),G(j))}}),e.jsxs(ee,{open:v,onOpenChange:y,children:[e.jsx(se,{asChild:!0,children:e.jsx(A,{type:"button",variant:"outline",size:"icon","aria-label":"Open calendar",children:e.jsx(Be,{className:"h-4 w-4"})})}),e.jsx(re,{className:"w-auto p-0",align:"end",children:e.jsx(Qe,{mode:"single",selected:Qs(r),onSelect:m=>{o(!1),l(m?Bs(m):null),y(!1)},initialFocus:!0,className:"p-3 pointer-events-auto"})})]})]})}function Hs({user:r,onSuccess:l,onCancel:a}){const{t:s}=$("common"),j=ne(),f=Ve(),g=p.useMemo(()=>Ks(s("ui.taxNumber.invalid")),[s]),i=Is({resolver:Ke(g),defaultValues:{...r,onboardedAt:r.onboardedAt?new Date(r.onboardedAt).toISOString():null,
1subscriptionValidUntil:r.subscriptionValidUntil?new Date(r.subscriptionValidUntil).toISOString():null}}),h=async n=>{try{const u={...n};await Vs(r.id,u),M.success(s("admin.users.updateSuccess"),{description:r.email||r.name}),j.invalidateQueries({queryKey:["api","v1","users"]}),l?.()}catch(u){const v=Ye(u,s("admin.users.updateFailedDescription"));M.error(s("admin.users.updateFailed"),{description:v})}},o=f.isPending;return e.jsx($e,{...i,children:e.jsxs("form",{onSubmit:i.handleSubmit(h),className:"space-y-6",children:[e.jsxs(w,{children:[e.jsxs(S,{children:[s("admin.users.editForm.email")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(C,{children:e.jsx(R,{value:r.email,disabled:!0})}),e.jsx(O,{children:s("admin.users.editForm.emailReadOnly")}),e.jsx(P,{})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsx("h3",{className:"text-sm font-medium",children:s("admin.users.editForm.basicInfo")}),e.jsx(k,{control:i.control,name:"name",render:({field:n})=>e.jsxs(w,{children:[e.jsx(S,{children:s("admin.users.editForm.name")}),e.jsx(C,{children:e.jsx(R,{placeholder:"John Doe",...n})}),e.jsx(P,{})]})}),e.jsx(k,{control:i.control,name:"username",render:({field:n})=>e.jsxs(w,{children:[e.jsx(S,{children:s("admin.users.editForm.username")}),e.jsx(C,{children:e.jsx(R,{placeholder:"johndoe",...n})}),e.jsx(P,{})]})}),e.jsx(k,{control:i.control,name:"phone",render:({field:n})=>e.jsxs(w,{children:[e.jsx(S,{children:s("admin.users.editForm.phone")}),e.jsx(C,{children:e.jsx(R,{placeholder:"+1234567890",...n})}),e.jsx(P,{})]})}),e.jsx(k,{control:i.control,name:"bio",render:({field:n})=>e.jsxs(w,{children:[e.jsx(S,{children:s("admin.users.editForm.bio")}),e.jsx(C,{children:e.jsx(ke,{placeholder:s("admin.users.editForm.bioPlaceholder"),...n,value:n.value??""})}),e.jsx(P,{})]})}),e.jsx(k,{control:i.control,name:"playingExperience",render:({field:n})=>e.jsxs(w,{children:[e.jsx(S,{children:s("admin.users.editForm.playingExperience")}),e.jsx(C,{children:e.jsx(ke,{placeholder:s("admin.users.editForm.playingExperiencePlaceholder"),...n,value:n.value??""})}),e.jsx(O,{children:s("admin.users.editForm.playingExperienceDescription")}),e.jsx(P,{})]})}),e.jsx(k,{control:i.control,name:"avatarUrl",render:({field:n})=>e.jsxs(w,{children:[e.jsx(S,{children:s("admin.users.editForm.avatarUrl")}),e.jsx(C,{children:e.jsx(R,{placeholder:"https://...",...n})}),e.jsx(P,{})]})})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsx("h3",{className:"text-sm font-medium",children:s("admin.users.editForm.memberData")}),e.jsx(k,{control:i.control,name:"taxNumber",render:({field:n})=>e.jsxs(w,{children:[e.jsx(S,{children:s("admin.users.editForm.taxNumber")}),e.jsx(C,{children:e.jsx(R,{placeholder:"123456789",...n})}),e.jsx(O,{children:s("admin.users.editForm.taxNumberDescription")}),e.jsx(P,{})]})}),e.jsx(k,{control:i.control,name:"memberNumber",render:({field:n})=>e.jsxs(w,{children:[e.jsx(S,{children:s("admin.users.editForm.memberNumber")}),e.jsx(C,{children:e.jsx(R,{type:"number",placeholder:"123",...n,value:n.value??"",onChange:u=>n.onChange(u.target.value?parseInt(u.target.value):null)})}),e.jsx(O,{children:s("admin.users.editForm.memberNumberDescription")}),e.jsx(P,{})]})}),e.jsx(k,{control:i.control,name:"weoClientName",render:({field:n})=>e.jsxs(w,{children:[e.jsx(S,{children:s("admin.users.editForm.weoClientName")}),e.jsx(C,{children:e.jsx(R,{placeholder:s("admin.users.editForm.weoClientNamePlaceholder"),...n})}),e.jsx(P,{})]})}),e.jsx(k,{control:i.control,name:"iban",render:({field:n})=>e.jsxs(w,{children:[e.jsx(S,{children:s("admin.users.editForm.iban")}),e.jsx(C,{children:e.jsx(R,{placeholder:"PT50000201231234567890154",...n,value:n.value??""})}),e.jsx(P,{})]})}),e.jsx(k,{control:i.control,name:"subscriptionValidUntil",render:({field:n})=>e.jsxs(w,{children:[e.jsx(S,{children:s("admin.users.editForm.subscriptionValidUntil")}),e.jsx(C,{children:e.jsx(Ys,{value:n.value,onChange:n.onChange,placeholder:s("admin.users.editForm.selectDate")})}),e.jsx(O,{children:s("admin.users.editForm.subscriptionValidUntilDescription")}),e.jsx(P,{})]})}),e.jsx(k,{control:i.control,name:"stripeCustomerId",render:({field:n})=>e.jsxs(w,{children:[e.jsx(S,{children:s("admin.users.editForm.stripeCustomerId")}),e.jsx(C,{children:e.jsx(R,{placeholder:"cus_...",...n,value:n.value??""})}),e.jsx(O,{children:s("admin.users.editForm.stripeCustomerIdDescription")}),e.jsx(P,{})]})})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsx("h3",{className:"text-sm font-medium",children:s("admin.users.editForm.statusAndRoles")}),e.jsxs("div",{className:"grid sm:grid-cols-2 gap-4",children:[e.jsx(k,{control:i.control,name:"admin",render:({field:n})=>e.jsxs(w,{className:"flex flex-row items-start space-x-3 space-y-0 rounded-md border p-4",children:[e.jsx(C,{children:e.jsx(W,{checked:n.value??!1,onCheckedChange:n.onChange})}),e.jsxs("div",{className:"space-y-1 leading-none",children:[e.jsx(S,{children:s("admin.users.editForm.isAdmin")}),e.jsx(O,{children:s("admin.users.editForm.isAdminDescription")})]})]})}),e.jsx(k,{control:i.control,name:"coach",render:({field:n})=>e.jsxs(w,{className:"flex flex-row items-start space-x-3 space-y-0 rounded-md border p-4",children:[e.jsx(C,{children:e.jsx(W,{checked:n.value??!1,onCheckedChange:n.onChange})}),e.jsxs("div",{className:"space-y-1 leading-none",children:[e.jsx(S,{children:s("admin.users.editForm.isCoach")}),e.jsx(O,{children:s("admin.users.editForm.isCoachDescription")})]})]})}),e.jsx(k,{control:i.control,name:"member",render:({field:n})=>e.jsxs(w,{className:"flex flex-row items-start space-x-3 space-y-0 rounded-md border p-4",children:[e.jsx(C,{children:e.jsx(W,{checked:n.value??!1,onCheckedChange:n.onChange})}),e.jsxs("div",{className:"space-y-1 leading-none",children:[e.jsx(S,{children:s("admin.users.editForm.isMember")}),e.jsx(O,{children:s("admin.users.editForm.isMemberDescription")})]})]})})]}),e.jsx(k,{control:i.control,name:"isActive",render:({field:n})=>e.jsxs(w,{className:"flex flex-row items-start space-x-3 space-y-0 rounded-md border p-4",children:[e.jsx(C,{children:e.jsx(W,{checked:n.value??!1,onCheckedChange:n.onChange})}),e.jsxs("div",{className:"space-y-1 leading-none",children:[e.jsx(S,{children:s("admin.users.editForm.isActive")}
1),e.jsx(O,{children:s("admin.users.editForm.isActiveDescription")})]})]})}),e.jsx(k,{control:i.control,name:"emailNotificationsEnabled",render:({field:n})=>e.jsxs(w,{className:"flex flex-row items-start space-x-3 space-y-0 rounded-md border p-4",children:[e.jsx(C,{children:e.jsx(W,{checked:n.value??!1,onCheckedChange:n.onChange})}),e.jsxs("div",{className:"space-y-1 leading-none",children:[e.jsx(S,{children:s("admin.users.editForm.emailNotifications")}),e.jsx(O,{children:s("admin.users.editForm.emailNotificationsDescription")})]})]})}),e.jsx(k,{control:i.control,name:"skipFirstTimePerk",render:({field:n})=>e.jsxs(w,{className:"flex flex-row items-start space-x-3 space-y-0 rounded-md border p-4 col-span-2",children:[e.jsx(C,{children:e.jsx(W,{checked:!!n.value,onCheckedChange:n.onChange})}),e.jsxs("div",{className:"space-y-1 leading-none",children:[e.jsx(S,{children:s("admin.users.editForm.skipFirstTimePerk")}),e.jsx(O,{children:s("admin.users.editForm.skipFirstTimePerkDescription")})]})]})})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsx("h3",{className:"text-sm font-medium",children:s("admin.users.editForm.settings")}),e.jsx(k,{control:i.control,name:"language",render:({field:n})=>e.jsxs(w,{children:[e.jsx(S,{children:s("admin.users.editForm.language")}),e.jsx(C,{children:e.jsx(R,{placeholder:"en",...n})}),e.jsx(O,{children:s("admin.users.editForm.languageDescription")}),e.jsx(P,{})]})})]}),e.jsxs("div",{className:"flex justify-end gap-2 pt-4 border-t",children:[a&&e.jsx(A,{type:"button",variant:"outline",onClick:a,children:s("admin.users.editForm.cancel")}),e.jsx(A,{type:"submit",disabled:o,children:o?e.jsxs(e.Fragment,{children:[e.jsx(B,{variant:"inline",size:"sm",hideText:!0}),s("admin.users.editForm.updating")]}):s("admin.users.editForm.update")})]})]})})}function Ws({user:r,open:l,onOpenChange:a}){const{t:s}=$("common");return e.jsx(He,{open:l,onOpenChange:a,children:e.jsxs(We,{className:"sm:max-w-2xl overflow-y-auto",children:[e.jsxs(Je,{children:[e.jsx(Xe,{children:s("admin.users.editSheet.title")}),e.jsx(Ze,{children:s("admin.users.editSheet.description")})]}),e.jsx("div",{className:"mt-6",children:r&&e.jsx(Hs,{user:r,onSuccess:()=>a(!1),onCancel:()=>a(!1)})})]})})}function Js({user:r,open:l,onOpenChange:a}){const{t:s}=$("common"),j=ne(),[f,g]=p.useState(!1),[i,h]=p.useState([]),{data:o,isLoading:n}=he({query:{enabled:l}}),u=Ge(),v=o?.filter(b=>i.includes(b.id))??[],y=b=>{h(U=>U.includes(b)?U.filter(D=>D!==b):[...U,b])},G=async()=>{if(!r||i.length===0)return;const b=await Promise.allSettled(i.map(c=>u.mutateAsync({groupId:c,data:{userId:r.id}}))),U=c=>{const N=c;if(N?.response?.status!==400)return!1;const q=N?.response?.data?.detail;return typeof q=="string"&&/already a member/i.test(q)},D=[],d=[],x=[];if(b.forEach((c,N)=>{const q=i[N];c.status==="fulfilled"?D.push(q):U(c.reason)?d.push(q):x.push(q)}),D.length>0){const c=o?.filter(N=>D.includes(N.id));M.success(s("admin.users.assignGroup.success"),{description:s("admin.users.assignGroup.successDescription",{count:D.length,name:r.name||r.email,group:c?.[0]?.name})})}if(d.length>0){const c=o?.filter(N=>d.includes(N.id)).map(N=>N.name).join(", ");M.info(s("admin.users.assignGroup.alreadyMember"),{description:s("admin.users.assignGroup.alreadyMemberDescription",{count:d.length,name:r.name||r.email,groups:c})})}if(x.length>0){const c=o?.filter(N=>x.includes(N.id)).map(N=>N.name).join(", ");M.error(s("admin.users.assignGroup.error"),{description:s("admin.users.assignGroup.errorPartial",{name:r.name||r.email,groups:c})})}j.invalidateQueries({queryKey:["api","v1","users"]}),j.invalidateQueries({queryKey:["api","v1","groups"]}),x.length===0?m():h(x)},m=()=>{h([]),g(!1),a(!1)},F=r?.name||r?.email||"",I=r?.playingExperience?.trim();return e.jsx(ve,{open:l,onOpenChange:m,children:e.jsxs(ye,{className:"sm:max-w-md",children:[e.jsxs(Ne,{children:[e.jsx(we,{children:s("admin.users.assignGroup.title")}),e.jsx(Se,{children:s("admin.users.assignGroup.description",{name:F})})]}),e.jsxs("div",{className:"space-y-4 py-2",children:[e.jsxs("div",{className:"rounded-md border bg-muted/30 p-3",children:[e.jsx("p",{className:"text-xs font-medium text-muted-foreground mb-1",children:s("admin.users.assignGroup.experienceTitle")}),I?e.jsx("p",{className:"text-sm whitespace-pre-wrap wrap-break-word",children:I}):e.jsx("p",{className:"text-sm italic text-muted-foreground",children:s("admin.users.assignGroup.experienceEmpty",{name:F})})]}),e.jsxs("div",{children:[e.jsxs(ee,{open:f,onOpenChange:g,modal:!0,children:[e.jsx(se,{asChild:!0,children:e.jsxs(A,{variant:"outline",role:"combobox","aria-expanded":f,className:"w-full justify-between",disabled:n,children:[n?e.jsx(B,{variant:"inline",size:"sm"}):i.length>0?s("admin.users.assignGroup.selectedGroups",{count:i.length}):s("admin.users.assignGroup.selectGroup"),e.jsx(te,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),e.jsx(re,{style:{width:"var(--anchor-width)"},className:"p-0",children:e.jsxs(le,{children:[e.jsx(oe,{placeholder:s("admin.users.assignGroup.searchGroup")}),e.jsxs(ce,{children:[e.jsx(Z,{children:s("admin.users.assignGroup.noGroupFound")}),e.jsx(de,{children:o?.map(b=>{const U=i.includes(b.id);return e.jsxs(ue,{value:b.name,onSelect:()=>y(b.id),children:[e.jsx(me,{className:ie("mr-2 h-4 w-4",U?"opacity-100":"opacity-0")}),e.jsx("span",{children:b.name}),b.level?.name&&e.jsx("span",{className:"ml-auto text-xs text-muted-foreground",children:b.level.name})]},b.id)})})]})]})})]}),v.length>0&&e.jsx("div",{className:"mt-2 flex flex-wrap gap-1.5",children:v.map(b=>e.jsxs(z,{variant:"secondary",className:"gap-1 pr-1",children:[e.jsx("span",{children:b.name}),e.jsx("button",{type:"button",onClick:()=>
1y(b.id),className:"rounded-sm hover:bg-muted-foreground/20 p-0.5","aria-label":`Remove ${b.name}`,children:e.jsx(fe,{className:"h-3 w-3"})})]},b.id))})]})]}),e.jsxs(Ce,{children:[e.jsx(A,{variant:"outline",onClick:m,children:s("admin.users.assignGroup.cancel")}),e.jsx(A,{onClick:G,disabled:i.length===0||u.isPending,children:u.isPending?e.jsxs(e.Fragment,{children:[e.jsx(B,{variant:"inline",size:"sm",hideText:!0}),s("admin.users.assignGroup.assigning")]}):s("admin.users.assignGroup.assign")})]})]})})}function Xs({user:r,open:l,onOpenChange:a}){const{t:s}=$("common"),j=ne(),[f,g]=p.useState(!1),[i,h]=p.useState(null),o=l&&!!r?.id,{data:n,isLoading:u}=Ts(r?.id,{query:{enabled:o}}),{data:v,isLoading:y}=he({query:{enabled:o}}),G=Ge(),m=As(),F=p.useMemo(()=>new Set(n?.map(c=>c.id)??[]),[n]),I=p.useMemo(()=>v?.filter(c=>!F.has(c.id))??[],[v,F]),b=()=>{j.invalidateQueries({queryKey:["api","v1","users"]}),j.invalidateQueries({queryKey:["api","v1","groups"]})},U=async c=>{if(r){g(!1);try{await G.mutateAsync({groupId:c,data:{userId:r.id}}),M.success(s("admin.users.userGroups.added")),b()}catch{M.error(s("admin.users.userGroups.addFailed"))}}},D=async()=>{if(!(!r||!i))try{await m.mutateAsync({groupId:i.id,userId:r.id}),M.success(s("admin.users.userGroups.removed")),h(null),b()}catch{M.error(s("admin.users.userGroups.removeFailed"))}},d=r?.name||r?.email||"",x=r?.playingExperience?.trim();return e.jsxs(e.Fragment,{children:[e.jsx(ve,{open:l,onOpenChange:a,children:e.jsxs(ye,{className:"sm:max-w-md",children:[e.jsxs(Ne,{children:[e.jsx(we,{children:s("admin.users.userGroups.title")}),e.jsx(Se,{children:s("admin.users.userGroups.description",{name:d})})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"rounded-md border bg-muted/30 p-3",children:[e.jsx("p",{className:"mb-1 text-xs font-medium text-muted-foreground",children:s("admin.users.assignGroup.experienceTitle")}),x?e.jsx("p",{className:"whitespace-pre-wrap wrap-break-word text-sm leading-relaxed",children:x}):e.jsx("p",{className:"text-sm italic text-muted-foreground",children:s("admin.users.assignGroup.experienceEmpty",{name:d})})]}),e.jsxs(ee,{open:f,onOpenChange:g,modal:!0,children:[e.jsx(se,{asChild:!0,children:e.jsxs(A,{variant:"outline",role:"combobox","aria-expanded":f,className:"w-full justify-between",disabled:y||G.isPending,children:[G.isPending?e.jsx(B,{variant:"inline",size:"sm"}):e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(es,{className:"h-4 w-4"}),s("admin.users.userGroups.addToGroup")]}),e.jsx(te,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),e.jsx(re,{style:{width:"var(--anchor-width)"},className:"p-0",children:e.jsxs(le,{children:[e.jsx(oe,{placeholder:s("admin.users.userGroups.searchGroup")}),e.jsxs(ce,{children:[e.jsx(Z,{children:s("admin.users.userGroups.noGroupsToAdd")}),e.jsx(de,{children:I.map(c=>e.jsxs(ue,{value:c.name,onSelect:()=>U(c.id),children:[e.jsx(me,{className:"mr-2 h-4 w-4 opacity-0"}),e.jsx("span",{children:c.name}),c.level?.name&&e.jsx("span",{className:"ml-auto text-xs text-muted-foreground",children:c.level.name})]},c.id))})]})]})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("h4",{className:"text-sm font-medium",children:s("admin.users.userGroups.currentGroups",{count:n?.length??0})}),e.jsx("div",{className:"rounded-md border",children:u?e.jsx("div",{className:"p-4",children:e.jsx(B,{size:"sm"})}):(n?.length??0)===0?e.jsx("p",{className:"p-4 text-center text-sm text-muted-foreground",children:s("admin.users.userGroups.noGroups")}):e.jsx("div",{className:"max-h-[40vh] overflow-y-auto",children:n?.map(c=>e.jsxs("div",{className:"flex items-center justify-between border-b py-2 px-4 last:border-b-0",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("p",{className:"text-sm font-medium truncate",children:c.name}),c.level?.name&&e.jsx(z,{variant:"secondary",className:"mt-0.5",children:c.level.name})]}),e.jsx(Ae,{icon:Ms,variant:"ghost",tooltipContent:s("admin.users.userGroups.removeFromGroup"),onClick:()=>h(c),disabled:m.isPending})]},c.id))})})]})]}),e.jsx(Ce,{children:e.jsx(A,{variant:"outline",onClick:()=>a(!1),children:s("buttons.close")})})]})}),e.jsx(ss,{open:!!i,onOpenChange:c=>{c||h(null)},title:s("admin.users.userGroups.removeConfirm",{name:d,group:i?.name}),cancelLabel:s("buttons.cancel"),confirmLabel:s("admin.users.userGroups.removeFromGroup"),destructive:!0,onConfirm:D})]})}const Zs=()=>{const{t:r}=$("common"),l=ne(),a=rs(),s=async(d,x,c)=>{try{await a.mutateAsync({userId:d,params:{role:x,value:c}}
1),l.invalidateQueries({queryKey:["api","v1","users"]})}catch{M.error(r("admin.users.updateFailed"))}},[j,f]=p.useState(null),[g,i]=p.useState(!1),[h,o]=p.useState(null),[n,u]=p.useState(!1),[v,y]=p.useState(null),[G,m]=p.useState(!1),F=d=>{f(d),i(!0)},I=d=>{o(d),u(!0)},b=d=>{y(d),m(!0)},U=[{accessorKey:"user",header:r("admin.users.user"),cell:({row:d})=>e.jsx(ns,{user:d.original})},{accessorKey:"memberNumber",header:r("admin.users.memberNumber"),cell:({row:d})=>e.jsx("div",{className:"text-sm text-muted-foreground",children:d.original.memberNumber||"-"})},{accessorKey:"phone",header:r("admin.users.phone"),cell:({row:d})=>e.jsx("div",{className:"text-sm text-muted-foreground",children:d.original.phone||"-"})},{accessorKey:"memberSince",header:r("admin.users.memberSince"),cell:({row:d})=>{const x=d.original.supporterSince;if(!x)return e.jsx("span",{className:"text-muted-foreground",children:"-"});const c=new Date(x);return e.jsx("div",{className:"text-sm text-muted-foreground",children:c.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})})}},{accessorKey:"role",header:r("admin.users.role"),cell:({row:d})=>e.jsxs("div",{className:"flex gap-1",children:[d.original.admin&&e.jsx(z,{variant:"default",children:r("admin.users.admin")}),d.original.coach&&e.jsx(z,{variant:"secondary",children:r("admin.users.coach")}),!d.original.admin&&!d.original.coach&&e.jsx(z,{variant:"outline",children:r("admin.users.user")})]})},{accessorKey:"currentSupporter",header:r("admin.users.subscription"),cell:({row:d})=>d.original.currentSupporter?e.jsx(z,{variant:"default",className:"bg-green-100 text-green-800 dark:bg-green-500/15 dark:text-green-300",children:r("admin.users.active")}):e.jsx(z,{variant:"secondary",children:r("admin.users.inactive")})},{id:"actions",header:()=>e.jsx("div",{className:"flex justify-end",children:r("admin.users.actions")}),cell:({row:d})=>{const x=d.original;return e.jsxs("div",{className:"flex items-center justify-end gap-1",children:[!x.hasGroupsAssigned&&e.jsx(as,{children:e.jsxs(is,{children:[e.jsx(ts,{asChild:!0,children:e.jsxs(A,{variant:"outline",size:"icon",className:"h-8 w-8 border-amber-300 text-amber-500 hover:border-amber-400 hover:text-amber-600 hover:bg-amber-50",onClick:()=>I(x),children:[e.jsx(ls,{className:"h-4 w-4"}),e.jsx("span",{className:"sr-only",children:r("admin.users.assignGroup.title")})]})}),e.jsx(os,{side:"left",className:"max-w-50",children:r("admin.users.noGroupWarning")})]})}),e.jsxs(cs,{children:[e.jsx(ds,{asChild:!0,children:e.jsxs(A,{variant:"ghost",className:"h-8 w-8 p-0",children:[e.jsx("span",{className:"sr-only",children:r("admin.users.openMenu")}),e.jsx(Es,{className:"h-4 w-4"})]})}),e.jsxs(us,{align:"end",children:[e.jsx(ms,{children:r("admin.users.actions")}),e.jsx(_,{onSelect:async()=>{await hs(x.email||"").then(c=>c&&M.success(r("admin.users.emailCopied"),{description:x.email}))},children:r("admin.users.copyEmail")}),e.jsx(Ue,{}),e.jsx(_,{asChild:!0,disabled:!x.username,children:e.jsx(ps,{to:x.username?"/profile/$username":"/home",params:{username:x.username},target:"_blank",rel:"noopener noreferrer",children:r("admin.users.viewProfile")})}),e.jsx(_,{onSelect:()=>F(x),children:r("admin.users.editUser")}),e.jsx(_,{onSelect:()=>b(x),children:r("admin.users.userGroups.menuItem")}),e.jsx(Ue,{}),e.jsxs(xs,{children:[e.jsx(js,{children:r("admin.users.manageRoles")}),e.jsxs(gs,{children:[x.coach?e.jsx(_,{onSelect:()=>s(x.id,"coach",!1),className:"text-orange-600",children:r("admin.users.revokeCoach")}):e.jsx(_,{onSelect:()=>s(x.id,"coach",!0),children:r("admin.users.promoteCoach")}),x.admin?e.jsx(_,{onSelect:()=>s(x.id,"admin",!1),className:"text-red-600",children:r("admin.users.revokeAdmin")}):e.jsx(_,{onSelect:()=>s(x.id,"admin",!0),children:r("admin.users.promoteAdmin")})]})]})]})]})]})}}],D=e.jsxs(e.Fragment,{children:[e.jsx(Ws,{user:j,open:g,onOpenChange:i}),e.jsx(Js,{user:h,open:n,onOpenChange:u}),e.jsx(Xs,{user:v,open:G,onOpenChange:m})]});return{columns:U,Sheet:D}};function er({open:r,onOpenChange:l}){const{t:a}=$("common"),s=ne(),[j,f]=p.useState(!1),[g,i]=p.useState(!1),[h,o]=p.useState([]),[n,u]=p.useState([]),[v,y]=p.useState(""),G=bs(v,300),{data:m,isLoading:F}=he({query:{enabled:r}}),I=G.trim().length<2,{data:b,isFetching:U}=fs({search:G,limit:20},{query:{enabled:r&&!I}}),D=Ge(),d=b?.users??[],x=new Set(h.map(t=>
1t.id)),c=h.length*n.length,N=t=>{o(L=>L.some(Q=>Q.id===t.id)?L.filter(Q=>Q.id!==t.id):[...L,t])},q=t=>{u(L=>L.includes(t)?L.filter(Q=>Q!==t):[...L,t])},E=p.useMemo(()=>m?.filter(t=>n.includes(t.id))??[],[m,n]),J=()=>{o([]),u([]),y(""),f(!1),i(!1),l(!1)},pe=async()=>{if(c===0)return;const t=h.flatMap(T=>n.map(V=>({userId:T.id,groupId:V}))),L=await Promise.allSettled(t.map(T=>D.mutateAsync({groupId:T.groupId,data:{userId:T.userId}}))),Q=T=>{const V=T;if(V?.response?.status!==400)return!1;const Fe=V?.response?.data?.detail;return typeof Fe=="string"&&/already a member/i.test(Fe)},Y=[],H=[],X=[];if(L.forEach((T,V)=>{T.status==="fulfilled"?Y.push(t[V]):Q(T.reason)?H.push(t[V]):X.push(t[V])}),s.invalidateQueries({queryKey:["api","v1","users"]}),s.invalidateQueries({queryKey:["api","v1","groups"]}),X.length===0){H.length===0?M.success(a("admin.users.bulkAssignGroup.successAll"),{description:a("admin.users.bulkAssignGroup.successAllDescription",{count:Y.length})}):M.success(a("admin.users.bulkAssignGroup.successAll"),{description:a("admin.users.bulkAssignGroup.successWithSkippedDescription",{created:Y.length,skipped:H.length})}),J();return}if(Y.length===0&&H.length===0){M.error(a("admin.users.bulkAssignGroup.error"),{description:a("admin.users.bulkAssignGroup.errorDescription")});return}M.warning(a("admin.users.bulkAssignGroup.partialSuccess"),{description:H.length>0?a("admin.users.bulkAssignGroup.partialSuccessWithSkippedDescription",{created:Y.length,skipped:H.length,failed:X.length}):a("admin.users.bulkAssignGroup.partialSuccessDescription",{succeeded:Y.length,total:t.length})});const Me=new Set(X.map(T=>T.userId)),Ie=new Set(X.map(T=>T.groupId));o(T=>T.filter(V=>Me.has(V.id))),u(T=>T.filter(V=>Ie.has(V)))};return e.jsx(ve,{open:r,onOpenChange:t=>t?l(!0):J(),children:e.jsxs(ye,{className:"sm:max-w-lg",children:[e.jsxs(Ne,{children:[e.jsx(we,{children:a("admin.users.bulkAssignGroup.title")}),e.jsx(Se,{children:a("admin.users.bulkAssignGroup.description")})]}),e.jsxs("div",{className:"space-y-4 py-2",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-sm font-medium mb-1.5 block",children:a("admin.users.bulkAssignGroup.usersLabel")}),e.jsxs(ee,{open:j,onOpenChange:f,modal:!0,children:[e.jsx(se,{asChild:!0,children:e.jsxs(A,{variant:"outline",role:"combobox","aria-expanded":j,className:"w-full justify-between",children:[h.length>0?a("admin.users.bulkAssignGroup.usersSelected",{count:h.length}):a("admin.users.bulkAssignGroup.usersPlaceholder"),e.jsx(te,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),e.jsx(re,{style:{width:"var(--anchor-width)"},className:"p-0",children:e.jsxs(le,{shouldFilter:!1,children:[e.jsx(oe,{value:v,onValueChange:y,placeholder:a("admin.users.bulkAssignGroup.usersPlaceholder")}),e.jsx(ce,{children:I?e.jsx(Z,{children:a("admin.users.bulkAssignGroup.typeToSearch")}):U?e.jsx("div",{className:"py-4",children:e.jsx(B,{variant:"inline",size:"sm"})}):d.length===0?e.jsx(Z,{children:a("admin.users.bulkAssignGroup.noUsersFound")}):e.jsx(de,{children:d.map(t=>{const L=x.has(t.id);return e.jsxs(ue,{value:`${t.id}-${t.name}-${t.email}`,onSelect:()=>N(t),children:[e.jsx(me,{className:ie("mr-2 h-4 w-4",L?"opacity-100":"opacity-0")}),e.jsxs("div",{className:"flex flex-col min-w-0",children:[e.jsx("span",{className:"truncate",children:t.name||t.username||t.email}),t.email&&t.name&&e.jsx("span",{className:"truncate text-xs text-muted-foreground",children:t.email})]})]},t.id)})})})]})})]}),h.length>0&&e.jsx("div",{className:"mt-2 flex flex-wrap gap-1.5",children:h.map(t=>e.jsxs(z,{variant:"secondary",className:"gap-1 pr-1",children:[e.jsx("span",{className:"max-w-40 truncate",children:t.name||t.username||t.email}),e.jsx("button",{type:"button",onClick:()=>N(t),className:"rounded-sm hover:bg-muted-foreground/20 p-0.5","aria-label":`Remove ${t.name||t.email}`,children:e.jsx(fe,{className:"h-3 w-3"})})]},t.id))})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-sm font-medium mb-1.5 block",children:a("admin.users.bulkAssignGroup.groupsLabel")}),e.jsxs(ee,{open:g,onOpenChange:i,modal:!0,children:[e.jsx(se,{asChild:!0,children:e.jsxs(A,{variant:"outline",role:"combobox","aria-expanded":g,className:"w-full justify-between",disabled:F,children:[F?e.jsx(B,{variant:"inline",size:"sm"}):n.length>0?a("admin.users.bulkAssignGroup.groupsSelected",{count:n.length}):a("admin.users.bulkAssignGroup.groupsPlaceholder"),e.jsx(te,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),e.jsx(re,{style:{width:"var(--anchor-width)"},className:"p-0",children:e.jsxs(le,{children:[e.jsx(oe,{placeholder:a("admin.users.bulkAssignGroup.groupsPlaceholder")}),e.jsxs(ce,{children:[e.jsx(Z,{children:a("admin.users.bulkAssignGroup.noGroupsFound")}),e.jsx(de,{children:m?.map(t=>{const L=n.includes(t.id);return e.jsxs(ue,{value:t.name,onSelect:()=>
1q(t.id),children:[e.jsx(me,{className:ie("mr-2 h-4 w-4",L?"opacity-100":"opacity-0")}),e.jsx("span",{children:t.name}),t.level?.name&&e.jsx("span",{className:"ml-auto text-xs text-muted-foreground",children:t.level.name})]},t.id)})})]})]})})]}),E.length>0&&e.jsx("div",{className:"mt-2 flex flex-wrap gap-1.5",children:E.map(t=>e.jsxs(z,{variant:"secondary",className:"gap-1 pr-1",children:[e.jsx("span",{children:t.name}),e.jsx("button",{type:"button",onClick:()=>q(t.id),className:"rounded-sm hover:bg-muted-foreground/20 p-0.5","aria-label":`Remove ${t.name}`,children:e.jsx(fe,{className:"h-3 w-3"})})]},t.id))})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:c===0?a("admin.users.bulkAssignGroup.summary_zero"):a("admin.users.bulkAssignGroup.summary",{count:c,users:h.length,groups:n.length})})]}),e.jsxs(Ce,{children:[e.jsx(A,{variant:"outline",onClick:J,children:a("admin.users.bulkAssignGroup.cancel")}),e.jsx(A,{onClick:pe,disabled:c===0||D.isPending,children:D.isPending?e.jsxs(e.Fragment,{children:[e.jsx(B,{variant:"inline",size:"sm",hideText:!0}),a("admin.users.bulkAssignGroup.assigning")]}):a("admin.users.bulkAssignGroup.assign")})]})]})})}const De=ys("/manage/users");function sr(){const{t:r}=$("common"),l=De.useSearch(),a=De.useNavigate(),[s,j]=p.useState(!1),{columns:f,Sheet:g}=Zs(),i=l.search??"",h=l.coach??"all",o=l.membership??"all",n=l.group??"all",u=(E,J)=>{a({search:pe=>({...pe,[E]:J||void 0}),replace:!0})},y=(()=>{switch(o){case"members":return{member:!0};case"active-supporters":return{currentSupporter:!0};case"inactive-supporters":return{member:!0,currentSupporter:!1};case"non-members":return{member:!1};default:return{}}})(),m=(()=>{switch(n){case"all":return{};case"with-group":return{hasGroup:!0};case"without-group":return{hasGroup:!1};default:return{groupId:n}}})(),{data:F,isLoading:I,isError:b,isFetchingNextPage:U,fetchNextPage:D,hasNextPage:d}=Ps({search:i||void 0,coach:h==="all"?void 0:h==="coaches",member:y.member,currentSupporter:y.currentSupporter,hasGroup:m.hasGroup,groupId:m.groupId,limit:50}),{ref:x,inView:c}=Ns({threshold:0,rootMargin:"20px"});p.useEffect(()=>{c&&d&&!U&&D()},[c,d,U,D]);const N=F?F.pages[F.pages.length-1]?.total??0:0,q=p.useMemo(()=>F?.pages?.flatMap(E=>E.users??[])??[],[F]);return e.jsxs(vs,{children:[e.jsx(ws,{title:r("admin.users.title"),description:r("admin.users.description"),action:e.jsxs(A,{onClick:()=>j(!0),variant:"outline",children:[e.jsx(Te,{className:"mr-2 h-4 w-4"}),r("admin.users.bulkAssignGroup.trigger")]})}),e.jsx(Os,{data:q,columns:f,isLoading:I,isError:b,isFetchingMore:U,hasMore:d,loadMoreRef:x,toolbar:e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx(Rs,{searchTerm:i,onSearchChange:E=>u("search",E),coachFilter:h,onCoachFilterChange:E=>u("coach",E),membershipFilter:o,onMembershipFilterChange:E=>u("membership",E),groupFilter:n,onGroupFilterChange:E=>u("group",E)}),e.jsx(qs,{currentCount:q.length,totalCount:N})]})}),g,e.jsx(er,{open:s,onOpenChange:j})]})}const pr=sr;export{pr 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.