1import{r as t,$ as e}from"./vendor-C1VgWBuX.js";import{A as Ye,a as ze}from"./AppPage-xG3wnjLT.js";import{a as Be,u as Ke,e as c,f as h,C as Ue,B as w}from"./index-5hIAAaYU.js";import{f as $}from"./phone-P8_agBuB.js";import{M as de}from"./MemberEmail-COOj5TWq.js";import{A as me}from"./AppPageControlsRow-DdZvdtUW.js";import{I as l}from"./InlineStateMessage-BM010uxt.js";import{M as D}from"./Modal-72ZFPyar.js";import{P as xe}from"./PageTabs-BxfopgsZ.js";import{D as pe}from"./DataTable-BCv0ar_9.js";import{F as ge}from"./FormField-DGai0Kay.js";import{u as Ge}from"./useTableQueryState-BxEFTwnq.js";import{i as We}from"./leagueSpareEligibility-sAZSbl2K.js";import{M as qe}from"./MemberCredentialsList-C13VzcIb.js";import{D as He}from"./DashboardMembershipCard-B95h6Bwh.js";import{m as Qe,i as Ze,L as ue}from"./leagueProcessing-D8C5UYhK.js";import"./volunteering-DVv7VtCy.js";import"./HelpCallout-BvdeWqFA.js";const he=50,Je=["name"];function Xe(d){return`${Number.isInteger(d)?String(d):d.toFixed(1).replace(/\.0$/,"")} ${d===1?"year":"years"}`}const O=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],ea={lead:"Lead",second:"Second",third:"Third",fourth:"Fourth",player1:"Player 1",player2:"Player 2"};function fa(){const d=t.useId(),L=t.useId(),{leagues:_,leagueProcessingActive:ye}=Be(),{member:be}=Ke(),fe=ye&&!Qe(be),[m,V]=t.useState("directory"),[A,Y]=t.useState([]),[f,z]=t.useState(0),[je,B]=t.useState(!0),[x,K]=t.useState(null),[Ne,I]=t.useState([]),[ve,U]=t.useState(!1),[n,P]=t.useState(null),[r,G]=t.useState(null),[y,j]=t.useState(null),[R,N]=t.useState(null),[o,v]=t.useState(null),[W,k]=t.useState(null),[S,C]=t.useState(null),[i,p]=t.useState("profile"),[ke,q]=t.useState(!1),[Se,H]=t.useState(!1),[Ce,Q]=t.useState(!1),[Me,Z]=t.useState(!1),[Ee,J]=t.useState(!1),[Le,X]=t.useState(!1),[g,F]=t.useState(null),[ee,T]=t.useState([]),[Ae,ae]=t.useState(!1),Ie=t.useMemo(()=>({search:{queryKey:"search",defaultValue:"",debounceMs:250}}),[]),{page:b,filters:u,draftFilters:Pe,setPage:M,setDraftFilter:Re}=Ge({defaultSort:{key:"name",direction:"asc"},sortKeys:Je,filterConfig:Ie}),te=t.useCallback(async()=>{B(!0);try{const s=await c("/members/directory",{page:b,pageSize:he,...u.search.trim()?{search:u.search.trim()}:{}});Y(Array.isArray(s.items)?s.items:[]),z(typeof s.total=="number"?s.total:0),typeof s.page=="number"&&s.page!==b&&M(s.page,{replace:!0})}catch(a){console.error("Failed to load members:",a),Y([]),z(0)}finally{B(!1)}},[u.search,b,M]);t.useEffect(()=>{m==="directory"&&te()},[te,m]);const se=t.useCallback(async a=>{U(!0);try{const E=await c("/members/directory",{leagueId:a,page:1,pageSize:100});I(Array.isArray(E.items)?E.items:[])}catch(s){console.error("Failed to load spare list:",s),I([])}finally{U(!1)}},[]);t.useEffect(()=>{if(m!=="spare-lists"||x==null){I([]);return}se(x)},[se,m,x]),t.useEffect(()=>{g&&(ae(!0),T([]),X(!1),c("/teams/{teamId}/roster",void 0,{teamId:String(g.teamId)}).then(a=>T(a)).catch(a=>{T([]),X(Ze(a))}).finally(()=>ae(!1)))},[g]);const Fe=t.useMemo(()=>({page:b,pageSize:he,totalRecords:f,currentCount:A.length,onPageChange:M}),[A.length,b,M,f]),Te=t.useMemo(()=>{if(f===0&&!u.search.trim())return e.jsx(h,{compact:!0,title:"No members in the directory."});const a=u.search.trim();return e.jsx(h,{compact:!0,title:a?`No members found matching "${a}"`:"No members match this filter."})},[u.search,f]),we=t.useMemo(()=>x==null?e.jsx(h,{compact:!0,title:"Select a league to view members available to spare."}):e.jsx(h,{compact:!0,title:"No members have marked themselves available to spare for this league."}),[x]),re=t.useCallback(a=>{P(a)},[]),le=t.useCallback(async a=>{G(a),p("profile"),j(null),N(null),v(null),k(null),C(null),q(!0),H(!0),Q(!0),Z(!0),J(!0);try{const s=String(a.id),[E,ce,Oe,_e,Ve]=await Promise.all([c("/members/{memberId}/availability",void 0,{memberId:s}),c("/members/{memberId}/leagues",void 0,{memberId:s}),c("/members/{memberId}/emergency-contact",void 0,{memberId:s}),c("/members/{memberId}/experience",void 0,{memberId:s}),c("/members/{memberId}/volunteer-credentials",void 0,{memberId:s})]);j(E),N(Array.isArray(ce)?ce:[]),v(Oe),k(_e),C(Ve.credentials??[])}catch(s){console.error("Failed to load member data:",s),j({canSkip:!1,availableLeagues:[]}),N([]),v(null),k(null),C(null)}finally{q(!1),H(!1),Q(!1),Z(!1),J(!1)}},[]),$e=t.useCallback(()=>
1{if(!n)return;const a=n;P(null),le(a)},[n,le]),ie=()=>{P(null)},ne=()=>{G(null),j(null),N(null),v(null),k(null),C(null),p("profile"),F(null)},De=t.useMemo(()=>_.filter(a=>We(a)).map(a=>({value:a.id,label:`${a.name} (${O[a.dayOfWeek]})`})),[_]),oe=t.useMemo(()=>[{id:"name",header:"Name",cellClassName:"whitespace-nowrap",renderCell:a=>e.jsx("button",{type:"button",onClick:()=>re(a),"aria-haspopup":"dialog",className:"cursor-pointer text-left font-medium text-gray-900 hover:text-primary-teal-link dark:text-gray-100",children:a.name})},{id:"email",header:"Email",renderCell:a=>a.email?e.jsx(de,{email:a.email,parentEmail:a.parentEmail,mailto:!0,className:"text-primary-teal-link hover:underline"}):e.jsx("span",{className:"text-gray-400 dark:text-gray-500",children:"â"})},{id:"phone",header:"Phone",cellClassName:"whitespace-nowrap",renderCell:a=>a.phone?e.jsx("a",{href:`tel:${a.phone.replace(/\D/g,"")}`,className:"text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-200",children:$(a.phone)}):e.jsx("span",{className:"text-gray-400 dark:text-gray-500",children:"â"})},{id:"role",header:"Role",cellClassName:"whitespace-nowrap",renderCell:a=>a.isServerAdmin?e.jsx("span",{className:"rounded bg-purple-100 px-2 py-1 text-xs font-medium text-purple-800 dark:bg-purple-900/30 dark:text-purple-200",children:"Server admin"}):a.isAdmin?e.jsx("span",{className:"rounded bg-blue-100 px-2 py-1 text-xs font-medium text-blue-800 dark:bg-blue-900/30 dark:text-blue-200",children:"Admin"}):e.jsx("span",{className:"text-gray-400 dark:text-gray-500",children:"â"})}],[re]);return e.jsx(e.Fragment,{children:e.jsxs(Ye,{children:[e.jsx(ze,{title:"Member directory"}),e.jsx(xe,{items:[{key:"directory",label:"Directory",isActive:m==="directory",onClick:()=>V("directory")},{key:"spare-lists",label:"Spare lists",isActive:m==="spare-lists",onClick:()=>V("spare-lists")}]}),m==="directory"?e.jsxs(e.Fragment,{children:[e.jsx(me,{right:e.jsx("div",{className:"w-full sm:w-64",children:e.jsx(ge,{label:"Search members by name",htmlFor:d,children:e.jsx("input",{id:d,type:"search",placeholder:"Search by name",value:Pe.search,onChange:a=>Re("search",a.target.value),className:"app-input"})})})}),je?e.jsx(h,{title:"Loading members..."}):e.jsx(pe,{rows:A,rowKey:a=>a.id,columns:oe,pagination:Fe,emptyState:Te})]}):e.jsxs(e.Fragment,{children:[e.jsx(me,{right:e.jsx("div",{className:"w-full sm:w-72",children:e.jsx(ge,{label:"League",htmlFor:L,children:e.jsx(Ue,{inputId:L,ariaLabel:"Select league for spare list",options:De,value:x,onChange:a=>{if(a==null||Array.isArray(a)){K(null);return}K(a)},placeholder:"Select a league",listboxLabel:"League spare list"})})})}),ve?e.jsx(h,{title:"Loading spare list..."}):e.jsx(pe,{rows:x==null?[]:Ne,rowKey:a=>a.id,columns:oe,emptyState:we})]}),e.jsx(D,{isOpen:!!n,onClose:ie,title:n?`${n.name}'s membership card`:"Membership card",size:"lg",children:n&&e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(He,{memberId:n.id}),e.jsxs("div",{className:"flex flex-shrink-0 justify-end gap-2 border-t border-gray-200 pt-4 dark:border-gray-700",children:[e.jsx(w,{variant:"secondary",onClick:$e,children:"View profile"}),e.jsx(w,{variant:"secondary",onClick:ie,children:"Close"})]})]})}),e.jsx(D,{isOpen:!!r,onClose:ne,title:r?`${r.name}'s profile`:"",size:"lg",children:r&&e.jsxs("div",{className:"flex flex-col min-h-[400px]",children:[e.jsx(xe,{className:"mb-4 shrink-0",items:[{key:"profile",label:"Profile",isActive:i==="profile",onClick:()=>p("profile")},{key:"emergency-contact",label:"Emergency contact",isActive:i==="emergency-contact",onClick:()=>p("emergency-contact")},{key:"sparing",label:"Sparing availability",isActive:i==="sparing",onClick:()=>p("sparing")},{key:"leagues",label:"Leagues",isActive:i==="leagues",onClick:()=>p("leagues")},{key:"credentials",label:"Credentials",isActive:i==="credentials",onClick:()=>p("credentials")}]}),e.jsxs("div",{className:"overflow-y-auto flex-1 min-h-0",children:[i==="profile"&&e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"app-section-title mb-3",children:"Contact information"}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{children:[e.jsx("span",{className:"font-medium text-gray-700 dark:text-gray-300",children:"Name:"})," ",e.jsx("span",{className:"text-gray-900 dark:text-gray-100",children:r.name})]}),r.email&&e.jsxs("div",{children:[e.jsx("span",{className:"font-medium text-gray-700 dark:text-gray-300",children:"Email:"})," ",e.jsx(de,{email:r.email,parentEmail:r.parentEmail,mailto:!0,className:"text-primary-teal-link hover:underline"})]}),r.phone&&e.jsxs("div",{children:[e.jsx("span",{className:"font-medium text-gray-700 dark:text-gray-300",children:"Phone:"})," ",e.jsx("a",{href:`tel:${r.phone.replace(/\D/g,"")}`,className:"text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200",children:$(r.phone)})]}),(r.isAdmin||r.isServerAdmin)&&e.jsx("div",{children:r.isServerAdmin?e.jsx("span",{className:"px-2 py-1 text-xs font-medium bg-purple-100 dar
1k:bg-purple-900/30 text-purple-800 dark:text-purple-200 rounded",children:"Server admin"}):e.jsx("span",{className:"px-2 py-1 text-xs font-medium bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-200 rounded",children:"Admin"})})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"app-section-title mb-3",children:"Experience"}),Me?e.jsx(l,{title:"Loading experience..."}):W?e.jsxs("div",{children:[e.jsx("span",{className:"font-medium text-gray-700 dark:text-gray-300",children:"Years of experience:"})," ",e.jsx("span",{className:"text-gray-900 dark:text-gray-100",children:Xe(W.totalExperienceYears)})]}):e.jsx(l,{title:"Unable to load experience."})]})]}),i==="emergency-contact"&&e.jsxs("div",{children:[e.jsx("h3",{className:"app-section-title mb-3",children:"Emergency contact"}),Ce?e.jsx(l,{title:"Loading emergency contact..."}):o?e.jsx("div",{className:"space-y-2",children:o.emergencyContactName||o.emergencyContactPhone?e.jsxs(e.Fragment,{children:[o.emergencyContactName?e.jsxs("div",{children:[e.jsx("span",{className:"font-medium text-gray-700 dark:text-gray-300",children:"Name:"})," ",e.jsx("span",{className:"text-gray-900 dark:text-gray-100",children:o.emergencyContactName})]}):null,o.emergencyContactPhone?e.jsxs("div",{children:[e.jsx("span",{className:"font-medium text-gray-700 dark:text-gray-300",children:"Phone:"})," ",e.jsx("a",{href:`tel:${o.emergencyContactPhone.replace(/\D/g,"")}`,className:"text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-200",children:$(o.emergencyContactPhone)})]}):null]}):e.jsx(l,{title:"No emergency contact on file."})}):e.jsx(l,{title:"Unable to load emergency contact."})]}),i==="sparing"&&e.jsxs("div",{children:[e.jsx("h3",{className:"app-section-title mb-3",children:"Sparing Availability"}),ke?e.jsx("div",{className:"text-gray-500 dark:text-gray-400",children:"Loading availability..."}):y?e.jsxs("div",{className:"space-y-4",children:[y.availableLeagues.length>0?e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-400 mb-2",children:"Available for these leagues:"}),e.jsx("ul",{className:"space-y-2",children:y.availableLeagues.map(a=>e.jsx("li",{className:"flex items-center",children:e.jsxs("span",{className:"text-gray-900 dark:text-gray-100",children:[e.jsx("strong",{children:a.leagueName})," (",O[a.dayOfWeek],")"]})},a.leagueId))})]}):e.jsx("p",{className:"text-gray-500 dark:text-gray-400",children:"No availability set."}),e.jsx("div",{className:"pt-2 border-t border-gray-200 dark:border-gray-700",children:e.jsxs("p",{className:"text-sm",children:[e.jsx("span",{className:"font-medium text-gray-700 dark:text-gray-300",children:"Comfortable as skip:"})," ",e.jsx("span",{className:y.canSkip?"text-green-600 dark:text-green-400 font-medium":"text-gray-600 dark:text-gray-400",children:y.canSkip?"Yes":"No"})]})})]}):e.jsx("div",{className:"text-gray-500 dark:text-gray-400",children:"Unable to load availability."})]}),i==="leagues"&&e.jsxs("div",{children:[e.jsx("h3",{className:"app-section-title mb-3",children:"Leagues & Teams"}),Se?e.jsx(l,{title:"Loading leagues..."}):fe?e.jsx(l,{title:ue}):R&&R.length>0?e.jsx("ul",{className:"space-y-3",children:R.map(a=>e.jsxs("li",{className:"flex flex-col p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg",children:[e.jsx("span",{className:"font-medium text-gray-900 dark:text-gray-100",children:a.leagueName}),e.jsx("span",{className:"text-sm text-gray-600 dark:text-gray-400",children:O[a.dayOfWeek]}),a.teamName?e.jsxs("button",{type:"button",onClick:()=>a.teamId&&a.teamName&&F({teamId:a.teamId,teamName:a.teamName}),className:"text-sm text-primary-teal-link dark:text-primary-teal-link/90 mt-1 hover:underline text-left",children:["Team: ",a.teamName]}):e.jsx("span",{className:"text-sm text-gray-500 dark:text-gray-500 italic mt-1",children:"Not yet assigned to a team"})]},a.leagueId))}):e.jsx(l,{title:"Not on any league rosters."})]}),i==="credentials"&&e.jsxs("div",{children:[e.jsx("h3",{className:"app-section-title mb-3",children:"Credentials"}),Ee?e.jsx(l,{title:"Loading credentials..."}):S&&S.length>0?e.jsx(qe,{credentials:S}):S?e.jsx(l,{title:"No credentials."}):e.jsx(l,{title:"Unable to load credentials."})]})]}),e.jsx("div",{className:"mt-4 pt-4 border-t border-gray-200 dark:border-gray-700 flex-shrink-0 flex justify-end",children:e.jsx(w,{variant:"secondary",onClick:ne,children:"Close"})})]})}),e.jsx(D,{isOpen:!!g,onClose:()=>F(null),title:g?`${g.teamName} â Roster`:"Team roster",size:"md",children:g&&e.jsx("div",{className:"space-y-4",children:Ae?e.jsx("div",{className:"text-sm text-gray-500 dark:text-gray-400",children:"Loadingâ¦"}):Le?e.jsx(l,{title:ue}):ee.length===0?e.jsx("div",{className:"text-sm text-gray-600 dark:text-gray-400",children:"No roster set."}):e.jsx("ul",{className:"space-y-2 text-sm text-gray-700 dark:text-gray-300",children:ee.map(a=>e.jsxs("li",{children:[a.name," â ",ea[a.role]??a.role,a.isSkip?" (Skip)":"",a.isVice?" (Vice)":""]},a.memberId))})})})]})})}export{fa 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.