1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/EmailCampaignTab-1ikYmucS.js","assets/vendor-query-DCZXcvLJ.js","assets/vendor-react-DWpktzy-.js","assets/index-BY5tr4Tp.js","assets/vendor-ui-xXmBVFTK.js","assets/vendor-styling--BulIq_u.js","assets/vendor-supabase-Iia0ULwR.js","assets/vendor-i18n-B9VkIq3M.js","assets/vendor-zod-bhLDXFPS.js","assets/index-gEMueNW4.css","assets/SafeHtml-BoQg_xdM.js","assets/select-filter-DHdszoUk.js","assets/select-dlm8tERC.js","assets/index-BBBYebfc.js","assets/chevron-up-BZKE_w4n.js","assets/tabs-BqEFnC9c.js","assets/data-table-generic-_I0GD6eG.js","assets/table-CJPOO7O9.js","assets/sortable-table-head-Tg8umKGU.js","assets/arrow-down-Dcb0Q0oQ.js","assets/data-table-DrtOMff2.js","assets/app-page-Dx1XsNZO.js","assets/checkbox-CcUaq5d9.js","assets/alert-dialog-CysUA23Q.js","assets/confirm-dialog-igvjYK0M.js","assets/playerSearch-CCM9kCen.js","assets/mini-rich-text-editor-BAQsPmJm.js","assets/index-wSDrTWeg.js","assets/index-C7yKKq-w.js","assets/editor-link-dialog-DrY9CCn4.js","assets/dialog-DHmGWs2G.js","assets/toggle-BRW4ngVq.js","assets/list-B0tnVFQb.js","assets/send-D8pj5FY3.js","assets/history-L-_dP0ik.js","assets/search-O9VdsUaE.js","assets/plus-Dp2kxk4L.js","assets/save-BeNfKFcA.js","assets/trash-2-BJF1yJA5.js","assets/pencil-DIpB2Aw_.js","assets/rotate-ccw-DDGjTjuq.js"])))=>i.map(i=>d[i]); 2import{R as Fe,c7 as Ue,Q as p,j as n,a4 as T,ck as Y,ac as j,cx as qe,U as G,o as Be,f as Re,b as D,m as W,k as Z,l as J,a3 as X,c as ee,h as ae,_ as $e}from"./index-BY5tr4Tp.js";import{a as Qe,u as se,j as a}from"./vendor-query-DCZXcvLJ.js";import{f as ze,r as t,L as le}from"./vendor-react-DWpktzy-.js";import{E as He}from"./EmailBounceBadge-CiwsrZpb.js";import{S as u}from"./select-filter-DHdszoUk.js";import{T as Ye,a as Ge,b as L,c as A}from"./tabs-BqEFnC9c.js";import{D as We}from"./data-table-generic-_I0GD6eG.js";import{u as Ze,m as Je,f as Xe,b as ea}from"./playersOverview-Cr7KBSyP.js";import{i as aa,p as te}from"./playerQueryKeys-CLq_i0zt.js";import{u as sa}from"./useDebouncedValue-BNAN4b-s.js";import{L as la}from"./list-pagination-CzofZCH5.js";import{u as ta,P as ra}from"./PlayerColumnsMenu-DfkI5QZ7.js";import{a as na,A as ia}from"./AddPlayerDialog-V7f0AFIo.js";import{P as oa,a as ca,I as da,M as ma}from"./ManagePlayerTagsDialog-B0xaPngX.js";import{T as pa}from"./TrainerPageHeader-BOWCQQnb.js";import{E as ua}from"./empty-state-CrH2sXBQ.js";import{A as re}from"./app-page-Dx1XsNZO.js";import{f as ya}from"./surface-BJkqYR0H.js";import{T as ha}from"./table-toolbar-ebRjqMD7.js";import{L as xa}from"./list-page-skeleton-B3F2r56d.js";import{g as ga}from"./playerTagColors-DJgYvFJB.js";import{t as ne}from"./invoiceCustomer-CkqPs36A.js";import{u as fa}from"./vendor-i18n-B9VkIq3M.js";import{U as I}from"./upload-C4GCBjyH.js";import"./vendor-ui-xXmBVFTK.js";import"./vendor-styling--BulIq_u.js";import"./vendor-supabase-Iia0ULwR.js";import"./vendor-zod-bhLDXFPS.js";import"./mail-warning-XWH7FxV3.js";import"./select-dlm8tERC.js";import"./index-BBBYebfc.js";import"./chevron-up-BZKE_w4n.js";import"./table-CJPOO7O9.js";import"./sortable-table-head-Tg8umKGU.js";import"./arrow-down-Dcb0Q0oQ.js";import"./data-table-DrtOMff2.js";import"./checkbox-CcUaq5d9.js";import"./pagination-Br1iPnj-.js";import"./chevron-left-BU1KUxry.js";import"./ellipsis-CnvVSP_-.js";import"./dialog-DHmGWs2G.js";import"./phone-input-DlIdLciN.js";import"./textarea-CYHfkaxr.js";import"./confirm-dialog-igvjYK0M.js";import"./alert-dialog-CysUA23Q.js";import"./ratingSystems-BwUP7k60.js";import"./party-popper-BXiwyr_v.js";import"./progress-BjIwTpX4.js";import"./scroll-area-CBUS9fY9.js";import"./file-spreadsheet-DA50Wb_h.js";import"./download-gg_uOcff.js";import"./circle-check-B5AmxAlV.js";import"./circle-x-DDbMz77z.js";import"./TagPicker-BXqbLYl_.js";import"./popover-5f1LNdCq.js";import"./command-D040KJUN.js";import"./search-O9VdsUaE.js";import"./plus-Dp2kxk4L.js";import"./sticky-note-CC9KEFuK.js";import"./trash-2-BJF1yJA5.js";const va=t.lazy(()=>$e(()=>import("./EmailCampaignTab-1ikYmucS.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40])).then(s=>({default:s.EmailCampaignTab}
2)));function y(s){switch(s){case"beginner":return"Beginner (1-3)";case"intermediate":return"Intermediate (4-6)";case"advanced":return"Advanced (7-9)";case"pro":return"Pro (9+)";case"unrated":return"Unrated";default:return s}}function ks(){const{t:s}=fa("trainer"),{user:N}=Fe(),{canEdit:r}=Ue(),[ie,oe]=ze(),E=ie.get("tab")||"all-players",ce=e=>oe({tab:e}),de=Qe(),[l,me]=t.useState(null),[m,pe]=t.useState(""),M=sa(m),[h,ue]=t.useState("all"),[x,ye]=t.useState("all"),[g,he]=t.useState("all"),[f,xe]=t.useState("all"),[v,ge]=t.useState("all"),[_,O]=t.useState([]),K=50,[V,F]=t.useState(0),[w,fe]=t.useState("name"),[U,q]=t.useState("asc"),ve=e=>{const c=e;c===w?q(d=>d==="asc"?"desc":"asc"):(fe(c),q("asc"))},[b,B]=t.useState([]),[we,R]=t.useState(!1),[be,C]=t.useState(!1),[Ce,k]=t.useState(!1),je=["tags","internalNotes","email","phone","location","addedOn"],$=[{key:"tags",label:s("players.columns.tags","Tags"),isDefault:!0},{key:"internalNotes",label:s("players.columns.internalNotes","Internal notes"),isDefault:!0},{key:"email",label:s("players.columns.email","Email"),isDefault:!0},{key:"phone",label:s("players.columns.phone","Phone"),isDefault:!0},{key:"location",label:s("players.columns.location","Location"),isDefault:!0},{key:"addedOn",label:s("players.columns.addedOn","Date added"),isDefault:!0},{key:"skill",label:s("players.columns.skill","Skill rating"),isDefault:!1},{key:"status",label:s("players.columns.status","Status"),isDefault:!1},{key:"cyclus",label:s("players.columns.cyclus","In active cyclus"),isDefault:!1},{key:"notes",label:s("players.columns.notes","Notes (intake)"),isDefault:!1},{key:"source",label:s("players.columns.source","Source"),isDefault:!1},{key:"birthDate",label:s("players.columns.birthDate","Birth date"),isDefault:!1}],Ne=l?`trainerPlayers:visibleColumns:${l}`:null,{visibleColumns:_e,toggleColumn:ke,isColVisible:Pe}=ta($,je,Ne);t.useEffect(()=>{N&&(async()=>{const{data:e}=await p.from("trainer_profiles").select("id").eq("user_id",N.id).maybeSingle();e&&me(e.id)})()},[N]),t.useEffect(()=>{l&&(Q(),Se())},[l]);const Q=async()=>{if(!l)return;const{data:e}=await p.from("academy_player_tags").select("*").eq("trainer_profile_id",l).order("name");B(e||[])},Se=async()=>{if(!l)return;const[e,c]=await Promise.all([p.from("availability_slots").select("location_id").eq("trainer_id",l).not("location_id","is",null),p.from("guest_players").select("preferred_location_id").eq("trainer_id",l).not("preferred_location_id","is",null)]),d=new Set;if(e.data?.forEach(i=>{i.location_id&&d.add(i.location_id)}),c.data?.forEach(i=>{i.preferred_location_id&&d.add(i.preferred_location_id)}),d.size===0){O([]);return}const{data:Ke}=await p.from("locations").select("id, name").in("id",Array.from(d));O((Ke||[]).sort((i,Ve)=>i.name.localeCompare(Ve.name)))},o=()=>{l&&aa(de,{kind:"trainer",id:l})},z=t.useMemo(()=>({locationId:h!=="all"?h:null,levelBand:x!=="all"?x:null,hasActiveCyclus:g==="yes"?!0:g==="no"?!1:null,tagId:f!=="all"?f:null,payment:v!=="all"?v:null}),[h,x,g,f,v]);t.useEffect(()=>{F(0)},[M,z]);const Te=w==="addedOn"?"created_at":w,{data:P,isLoading:De}=Ze({kind:"trainer",id:l},{search:M,filters:z,sort:Te,sortDir:U,page:V,pageSize:K}),Le=P?.total??0,Ae=Math.max(1,Math.ceil(Le/K)),S=t.useMemo(()=>(P?.rows??[]).map(e=>Je(e)),[P]),{data:H=0}=se({queryKey:te.count("trainer",l),queryFn:async()=>{const{total:e}=await Xe({kind:"trainer",id:l},{pageSize:1});return e},enabled:!!l}),{data:Ie=[]}=se({queryKey:te.campaignAll("trainer",l),queryFn:()=>ea({kind:"trainer",id:l}),enabled:!!l&&E==="email-campaign"}),Ee=()=>{o(),C(!1)},Me=()=>{o()};if(De)return a.jsx(re,{children:a.jsx(xa,{})});const Oe=[{key:"name",header:s("players.name"),sortKey:"name",headClassName:"whitespace-nowrap",className:"font-medium whitespace-nowrap max-w-[260px] min-w-0 overflow-hidden",cellTitle:e=>e.full_name,renderCell:e=>a.jsxs("div",{className:"flex min-w-0 items-center gap-1.5 overflow-hidden",children:[a.jsx(le,{to:`/app/trainer/players/${ne(e)}`,className:"hover:underline text-foreground truncate",children:e.full_name}),e.has_overdue_payment&&a.jsx(n,{variant:"destructive",className:"h-5 px-1.5 text-[11px] shrink-0",children:s("players.payment.overdue","Overdue")}),e.email_undeliverable&&a.jsx(He,{compact:!0})]})},{key:"email",header:s("players.columns.email","Email"),sortKey:"email",headClassName:"whitespace-nowrap",className:"whitespace-nowrap max-w-[220px] min-w-0 overflow-hidden truncate",cellTitle:e=>e.email||"",renderCell:e=>e.email||a.jsx("span",{className:"text-muted-foreground",children:"â"})},{key:"phone",header:s("players.columns.phone","Phone"),headClassName:"whitespace-nowrap",className:"whitespace-nowrap overflow-hidden",renderCell:e=>e.phone||a.jsx("span",{className:"text-muted-foreground",children:"â"})}
2,{key:"location",header:s("players.columns.location","Location"),headClassName:"whitespace-nowrap",className:"text-muted-foreground whitespace-nowrap max-w-[180px] min-w-0 overflow-hidden truncate",cellTitle:e=>e.location_names?.join(", ")||"",renderCell:e=>e.location_names&&e.location_names.length>0?e.location_names.join(", "):"â"},{key:"addedOn",header:s("players.columns.addedOn","Date added"),sortKey:"addedOn",headClassName:"whitespace-nowrap",className:"text-muted-foreground whitespace-nowrap",renderCell:e=>T(new Date(e.created_at),"dd-MM-yyyy")},{key:"skill",header:s("players.columns.skill","Skill rating"),sortKey:"skill",headClassName:"whitespace-nowrap",className:"whitespace-nowrap",renderCell:e=>e.skill_rating?a.jsxs("span",{className:"inline-flex items-center gap-1",children:[a.jsx(n,{variant:"secondary",className:"h-5 px-1.5 text-[11px]",children:e.skill_rating.toFixed(1)}),a.jsx("span",{className:"text-[11px] text-muted-foreground uppercase",children:e.rating_system||"knltb"})]}):a.jsx("span",{className:"text-muted-foreground",children:"â"})},{key:"status",header:s("players.columns.status","Status"),headClassName:"whitespace-nowrap",className:"whitespace-nowrap",renderCell:e=>e.has_trained?a.jsx(n,{variant:"secondary",className:"h-5 px-1.5 text-[11px]",children:s("players.statuses.active")}):a.jsx(n,{variant:"outline",className:"h-5 px-1.5 text-[11px]",children:s("players.statuses.prospect")})},{key:"cyclus",header:s("players.columns.cyclus","In active cyclus"),headClassName:"whitespace-nowrap",className:"whitespace-nowrap",renderCell:e=>e.has_active_cyclus?a.jsxs(n,{variant:"outline",className:"h-5 px-1.5 text-[11px] border-primary/30 text-primary",children:[a.jsx(Y,{className:"h-2.5 w-2.5 mr-1"}),s("players.columns.cyclusYes","Yes")]}):a.jsx("span",{className:"text-muted-foreground",children:"â"})},{key:"notes",header:s("players.columns.notes","Notes (intake)"),headClassName:"whitespace-nowrap",className:"text-muted-foreground max-w-[220px]",renderCell:e=>a.jsx("div",{className:"truncate",title:e.notes||"",children:e.notes||"â"})},{key:"source",header:s("players.columns.source","Source"),headClassName:"whitespace-nowrap",className:"text-muted-foreground whitespace-nowrap max-w-[140px] truncate",cellTitle:e=>e.source||"",renderCell:e=>e.source||"â"},{key:"birthDate",header:s("players.columns.birthDate","Birth date"),headClassName:"whitespace-nowrap",className:"text-muted-foreground whitespace-nowrap",renderCell:e=>e.birth_date?T(new Date(e.birth_date),"dd-MM-yyyy"):"â"},{key:"tags",header:s("players.columns.tags","Tags"),headClassName:"whitespace-nowrap",className:"max-w-[240px] min-w-[140px] overflow-hidden",renderCell:e=>l?a.jsx(oa,{trainerId:l,playerKey:{guest_player_id:e.guest_player_id||null,profile_id:e.profile_id||null},tags:b,selectedTagIds:e.tag_ids||[],onTagsChange:B,onSelectedTagIdsChange:()=>o(),readOnly:!r}):null},{key:"internalNotes",header:s("players.columns.internalNotes","Internal notes"),headClassName:"whitespace-nowrap",className:"max-w-[260px] min-w-[140px] overflow-hidden",renderCell:e=>l?a.jsx(ca,{trainerId:l,playerKey:{guest_player_id:e.guest_player_id||null,profile_id:e.profile_id||null},notes:e.internal_notes||"",onChanged:o,readOnly:!r}):null}];return a.jsxs(re,{className:"space-y-5",children:[a.jsx(pa,{title:s("players.title"),description:s("players.subtitleShort","Manage your players and contacts"),countText:`${H} ${H===1?s("players.playerSingular","player"):s("players.playerPlural","players")}`,primaryAction:r?{label:s("players.addPlayer"),onClick:()=>C(!0),icon:j}:void 0,moreMenuItems:r?[{label:s("players.import.button"),onClick:()=>k(!0),icon:I},{label:s("players.tags.manageButton","Manage tags"),onClick:()=>R(!0),icon:qe}]:void 0}),a.jsxs(Ye,{value:E,onValueChange:ce,children:[a.jsxs(Ge,{children:[a.jsxs(L,{value:"all-players",className:"gap-2",children:[a.jsx(G,{className:"h-4 w-4"}),a.jsx("span",{className:"hidden sm:inline",children:s("players.allPlayers","All Players")})]}),r&&a.jsxs(L,{value:"create",className:"gap-2",children:[a.jsx(j,{className:"h-4 w-4"}),a.jsx("span",{className:"hidden sm:inline",children:s("players.create","Create")})]}),r&&a.jsxs(L,{value:"email-campaign",className:"gap-2",children:[a.jsx(Be,{className:"h-4 w-4"}),a.jsx("span",{className:"hidden sm:inline",children:s("players.emailCampaign","Email Campaign")})]})]}),a.jsxs(A,{value:"all-players",className:"space-y-3 mt-3",children:[a.jsxs(h
2a,{searchPlaceholder:s("players.searchPlayers"),searchValue:m,onSearchChange:pe,trailing:a.jsx(ra,{allColumns:$,isColVisible:Pe,onToggle:ke,labels:{button:s("players.columns.button","Columns"),default:s("players.columns.default","Default"),optional:s("players.columns.optional","Optional")}}),children:[_.length>0&&a.jsx(u,{value:h,onValueChange:ue,allLabel:s("players.allLocations","All Locations"),options:_.map(e=>({value:e.id,label:e.name})),triggerClassName:"w-full sm:w-[160px]"}),a.jsx(u,{value:x,onValueChange:ye,allLabel:s("players.allLevels","All Levels"),options:[{value:"beginner",label:y("beginner")},{value:"intermediate",label:y("intermediate")},{value:"advanced",label:y("advanced")},{value:"pro",label:y("pro")},{value:"unrated",label:y("unrated")}],triggerClassName:"w-full sm:w-[170px]"}),a.jsx(u,{value:g,onValueChange:he,allLabel:s("players.allCyclus","All"),options:[{value:"yes",label:s("players.hasCyclus","Has Cyclus")},{value:"no",label:s("players.noCyclus","No Cyclus")}],triggerClassName:"w-full sm:w-[160px]",placeholder:s("players.activeCyclus","Active Cyclus")}),a.jsx(u,{value:f,onValueChange:xe,allLabel:s("players.tags.filterAll","All Tags"),options:[{value:"untagged",label:s("players.tags.untagged","Untagged")},...b.map(e=>({value:e.id,label:a.jsxs(a.Fragment,{children:[a.jsx("span",{className:Re("inline-block h-2 w-2 rounded-full mr-2",ga(e.color).split(" ").filter(c=>c.startsWith("bg-")).join(" "))}),e.name]})}))],triggerClassName:"w-full sm:w-[160px]"}),a.jsx(u,{value:v,onValueChange:ge,allLabel:s("players.payment.filterAll","All payments"),options:[{value:"overdue",label:s("players.payment.overdue","Overdue")},{value:"ok",label:s("players.payment.ok","No overdue")}],triggerClassName:"w-full sm:w-[170px]",placeholder:s("players.payment.filterAll","Payment status")})]}),S.length===0?a.jsxs(D,{className:"overflow-hidden border-border/80 shadow-sm",children:[a.jsx(ua,{variant:"trainer",icon:G,title:m?s("players.noPlayersFound"):s("players.empty","No players yet"),description:m?s("players.tryDifferentSearch"):s("players.emptyDescription","Players will appear here once they book with you.")}),!m&&r&&a.jsx("div",{className:"flex justify-center border-t border-border/60 px-4 pb-8 pt-2",children:a.jsxs(W,{className:"bg-[hsl(var(--brand-500))] hover:bg-[hsl(var(--brand-600))]",onClick:()=>C(!0),children:[a.jsx(j,{className:"mr-2 h-4 w-4"}),s("players.addPlayer")]})})]}):a.jsx(We,{columns:Oe,rows:S,visibleKeys:["name",..._e],sortKey:w,sortDirection:U,onSort:ve,compact:!0,stickyHeader:!0,cardTestId:"trainer-players-table-scroll",cardClassName:ya(),mobile:a.jsx("div",{className:"md:hidden divide-y divide-border/60","data-testid":"trainer-players-mobile-cards",children:S.map(e=>a.jsxs("div",{className:"py-3 space-y-2 first:pt-1",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsx("div",{className:"min-w-0 flex-1",children:a.jsx(le,{to:`/app/trainer/players/${ne(e)}`,className:"font-medium truncate hover:underline text-foreground block","data-testid":"trainer-player-mobile-detail-link",children:e.full_name})}),a.jsx("div",{className:"flex items-center gap-2 shrink-0",children:e.has_trained?a.jsx(n,{variant:"secondary",className:"text-xs",children:s("players.statuses.active")}):a.jsx(n,{variant:"outline",className:"text-xs",children:s("players.statuses.prospect")})})]}),a.jsxs("div",{className:"flex flex-wrap gap-x-4 gap-y-1 text-sm text-muted-foreground",children:[e.email&&a.jsx("span",{children:e.email}),e.phone&&a.jsx("span",{children:e.phone})]}),a.jsxs("div",{className:"flex items-center gap-3 text-xs text-muted-foreground",children:[e.skill_rating&&a.jsxs(n,{variant:"secondary",className:"text-xs",children:[e.skill_rating.toFixed(1)," ",e.rating_system?.toUpperCase()]}),e.has_active_cyclus&&a.jsxs(n,{variant:"outline",className:"text-xs border-primary/30 text-primary",children:[a.jsx(Y,{className:"h-3 w-3 mr-1"})," Cyclus"]}),a.jsx("span",{children:T(new Date(e.created_at),"MMM d, yyyy")})]})]},e.id))})}),a.jsx(la,{page:V,pageCount:Ae,onPageChange:F})]}),r&&a.jsx(A,{value:"create",className:"mt-4",children:a.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[a.jsxs(D,{children:[a.jsxs(Z,{children:[a.jsxs(J,{className:"flex items-center gap-2 text-lg",children:[a.jsx(j,{className:"h-5 w-5"}),s("players.addPlayer")]}),a.jsx(X,{children:s("players.addPlayerDescription","Add a new player to your roster.")})]}),a.jsx(ee,{children:a.jsx(na,{trainerId:l||void 0,onPlayerCreated:()=>o()})})]}),a.jsxs(D,{children:[a.jsxs(Z,{children:[a.jsxs(J,{className:"flex items-center gap-2 text-lg",children:[a.jsx(I,{className:"h-5 w-5"}),s("players.import.button","Import Players")]}),a.jsx(X,{children:s("players.import.description","Import multiple players at once from a CSV file.")})]}),a.jsx(ee,{children:a.jsxs(W,{variant:"outline",onClick:()=>k(!0),children:[a.jsx(I,{className:"mr-2 h-4 w-4"}),s("players.import.button","Import CSV")]})})]})]})}),r&&a.jsx(A,{value:"email-campaign",className:"mt-4",children:l&&a.jsx(t.Suspense,{fallback:a.jsxs("div",{className:"space-y-4",children:[a.jsx(ae,{className:"h-10 w-64"}),a.jsx(ae,{className:"h-[400px] w-full"})]}),children:a.jsx(va,{trainerId:l,trainers:[],locations:_,tags:b,players:Ie.map(e=>({id:e.guest_player_id??`reg-${e.profile_id}`,full_name:e.full_name,email:e.email,phone:e.phone,billing_business_name:e.billing_business_name,skill_rating:e.skill_rating,location_names:e.location_names??[],has_active_cyclus:e.has_active_cyclus,type:e.player_type,tag_ids:e.tag_ids??[]}))})})})]}),l&&a.jsx(ia,{open:be,onOpenChange:C,trainerId:l,onPlayerCreated:Ee}),l&&a.jsx(da,{open:Ce,onOpenChange:k,trainerId:l,onPlayersImported:Me}),l&&a.jsx(ma,{open:we,onOpenChange:R,trainerId:l,tags:b,onChanged:()=>{Q(),o()}})]})}export{ks 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.