PageSourceSearch

https://pulsbasketu.com/_nuxt/DghH0pjR.js

js pulsbasketu.com collected 2026-09-25 11:21:30 UTC 15,026 bytes, 1 lines download raw bytes

1import{r as f,g as w,A as ce,o as ue,c as i,h as r,j as _,i as a,t as o,F as S,p as v,n as M,m as P,b as g,v as _e,x as pe,y as be,z as me}from"./DZdWLuTi.js";import{u as ye,a as xe}from"./fkEc1zbI.js";const ve={class:"container mx-auto py-8 px-4"},he={class:"flex items-center justify-between mb-6"},ke=["disabled"],fe={key:0,class:"bg-red-50 dark:bg-red-900 border border-red-200 dark:border-red-700 rounded-md p-4 mb-6"},we={class:"text-red-800 dark:text-red-400"},Ce={key:1,class:"text-center py-16 text-gray-500 dark:text-gray-400"},Ee={class:"mb-8 grid gap-4 sm:grid-cols-3 lg:grid-cols-4"},Se={class:"bg-white dark:bg-gray-800 rounded-lg shadow p-4"},$e={class:"text-3xl font-bold text-red-500"},Me={class:"bg-white dark:bg-gray-800 rounded-lg shadow p-4"},Pe={class:"text-3xl font-bold text-gray-800 dark:text-gray-200"},Te={class:"bg-white dark:bg-gray-800 rounded-lg shadow p-4"},De={class:"text-3xl font-bold text-gray-800 dark:text-gray-200"},Be={class:"bg-white dark:bg-gray-800 rounded-lg shadow p-4"},Re={class:"text-3xl font-bold text-gray-800 dark:text-gray-200"},ze={class:"mb-6 bg-white dark:bg-gray-800 rounded-lg shadow overflow-hidden"},Le={class:"flex flex-wrap gap-2 p-4"},je={class:"text-xs opacity-75"},Ae=["onClick"],Oe={class:"text-xs opacity-75"},Ve={key:0,class:"mb-8 bg-white dark:bg-gray-800 rounded-lg shadow overflow-hidden"},Fe={class:"divide-y divide-gray-100 dark:divide-gray-700"},Ne=["onClick"],Ge={class:"text-xs font-semibold uppercase tracking-wide text-blue-600 dark:text-blue-400 bg-blue-100 dark:bg-blue-900 px-2 py-0.5 rounded w-20 text-center"},Ie={class:"flex-1 h-2 bg-gray-100 dark:bg-gray-600 rounded overflow-hidden"},Ke={class:"text-sm font-semibold text-gray-700 dark:text-gray-300 w-8 text-right"},Ye={class:"text-xs text-gray-400 dark:text-gray-500 w-24 text-right"},qe={class:"text-xs text-gray-400 dark:text-gray-500 w-4"},Ue={class:"mb-6 px-1 flex items-center gap-4 flex-wrap"},He={class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},Je={key:1,class:"text-blue-500"},Qe={key:1,class:"text-sm text-gray-400 dark:text-gray-500"},We={class:"space-y-6"},Xe={class:"px-4 py-3 bg-gray-50 dark:bg-gray-700 border-b border-gray-200 dark:border-gray-600 flex items-center gap-3"},Ze={class:"font-semibold text-gray-800 dark:text-gray-200 truncate"},et={class:"text-xs text-gray-400 dark:text-gray-500 flex-shrink-0"},tt={key:1,class:"text-xs font-semibold text-green-600 dark:text-green-400 flex-shrink-0"},st=["onClick"],at=["onClick"],rt=["title","onClick"],ot=["src","alt"],nt={class:"min-w-0 flex-1"},lt={class:"font-semibold text-sm text-gray-800 dark:text-gray-200 truncate"},dt={class:"text-xs text-gray-500 dark:text-gray-400 mt-0.5 space-x-2"},it={key:0},gt={key:1},ct={class:"text-xs text-gray-400 dark:text-gray-500 mt-0.5"},ut={key:0},_t={key:1},pt={key:2},bt={key:0,class:"text-xs text-gray-400 dark:text-gray-500 mt-0.5"},mt={key:0,class:"px-4 pb-4 flex items-center gap-3 flex-wrap"},yt=["onClick","disabled"],xt={key:0,class:"text-xs text-red-600 dark:text-red-400"},vt={key:1,class:"px-4 pb-4 text-xs text-gray-400 dark:text-gray-500 italic"},wt={__name:"duplicates",setup(ht){const z=ye(),{data:p,error:L,loading:T,fetchData:te}=xe(),j=[{type:"in_season",label:"In-season",activeClass:"bg-blue-600 text-white",inactiveClass:"bg-blue-50 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400 hover:bg-blue-100 dark:hover:bg-blue-900/50",badgeClass:"text-blue-600 dark:text-blue-400 bg-blue-100 dark:bg-blue-900",textClass:"text-blue-500"},{type:"cross_season",label:"Cross-season",activeClass:"bg-purple-600 text-white",inactiveClass:"bg-purple-50 dark:bg-purple-900/30 text-purple-600 dark:text-purple-400 hover:bg-purple-100 dark:hover:bg-purple-900/50",badgeClass:"text-purple-600 dark:text-purple-400 bg-purple-100 dark:bg-purple-900",textClass:"text-purple-500"},{type:"cross_team",label:"Cross-team",activeClass:"bg-orange-600 text-white",inactiveClass:"bg-orange-50 dark:bg-orange-900/30 text-orange-600 dark:text-orange-400 hover:bg-orange-100 dark:hover:bg-orange-900/50",badgeClass:"text-orange-600 dark:text-orange-400 bg-orange-100 dar
1k:bg-orange-900",textClass:"text-orange-500"},{type:"cross_team_season",label:"Cross-team & season",activeClass:"bg-teal-600 text-white",inactiveClass:"bg-teal-50 dark:bg-teal-900/30 text-teal-600 dark:text-teal-400 hover:bg-teal-100 dark:hover:bg-teal-900/50",badgeClass:"text-teal-600 dark:text-teal-400 bg-teal-100 dark:bg-teal-900",textClass:"text-teal-500"}],$=Object.fromEntries(j.map(e=>[e.type,e])),h=f({}),u=f({}),y=f({}),C=f(new Set),x=f(null),m=f(null),k=w(()=>{if(!p.value)return[];const e=(p.value.in_season||[]).map(s=>({...s,_type:"in_season"})),t=(p.value.cross_season||[]).map(s=>({...s,_type:"cross_season"})),l=(p.value.cross_team||[]).map(s=>({...s,_type:"cross_team"})),c=(p.value.cross_team_season||[]).map(s=>({...s,_type:"cross_team_season"}));return[...e,...t,...l,...c]}),se=w(()=>{const e={};for(const t of k.value)e[t._type]=(e[t._type]||0)+1;return e}),D=w(()=>{var t;if(!((t=p.value)!=null&&t.in_season))return[];const e=new Map;for(const l of p.value.in_season){const c=l.league_season_name;e.has(c)||e.set(c,{name:c,groups:0,teams:new Set,players:0});const s=e.get(c);s.groups++,s.teams.add(l.season_team_id),s.players+=l.players.length}return[...e.values()].map(l=>({...l,teams:l.teams.size})).sort((l,c)=>c.groups-l.groups)}),ae=w(()=>p.value?new Set([...(p.value.in_season||[]).map(t=>`s:${t.season_team_id}`),...(p.value.cross_season||[]).map(t=>`t:${t.team_id}`),...(p.value.cross_team||[]).flatMap(t=>t.players.map(l=>`s:${l.season_team_id}`)),...(p.value.cross_team_season||[]).flatMap(t=>t.players.map(l=>`s:${l.season_team_id}`))]).size:0),re=w(()=>p.value?k.value.reduce((e,t)=>e+t.players.length,0):0),A=(e,t)=>!(C.value.has(t)||m.value&&e._type!==m.value||x.value&&e._type==="in_season"&&e.league_season_name!==x.value),O=w(()=>k.value.filter((e,t)=>A(e,t)).length),oe=e=>e._type==="in_season"||e._type==="cross_season"?e.team_name:e._type==="cross_team"?e.league_season_name||"Multiple teams":"Multiple teams & leagues",ne=e=>e._type==="in_season"?`season_team_id: ${e.season_team_id}`:e._type==="cross_season"?`team_id: ${e.team_id}`:"",V=()=>{h.value={},u.value={},y.value={},C.value=new Set,te(`${z}/debug/player-duplicates`)},le=e=>new Date(e).toLocaleDateString("en-GB",{day:"2-digit",month:"short",year:"numeric"}),E=(e,t)=>t.players.filter(l=>{var c;return!((c=y.value[e])!=null&&c.has(l.pst_id))}),de=(e,t)=>{h.value[e]=t,u.value[e]&&(u.value[e]={...u.value[e],dryRunOk:!1,result:null,mergeError:null})},B=(e,t)=>{const l=E(e,t);if(l.length!==0&&(h.value[e]==null||!l.find(c=>c.pst_id===h.value[e]))){const c=[...l].sort((s,n)=>n.total_games-s.total_games)[0];h.value[e]=c.pst_id}},ie=(e,t,l)=>{y.value[e]||(y.value[e]=new Set);const c=y.value[e];c.has(t)?c.delete(t):c.add(t),y.value={...y.value},B(e,l),u.value[e]&&(u.value[e]={...u.value[e],dryRunOk:!1,result:null,mergeError:null})},ge=async(e,t)=>{var n;B(e,t);const l=h.value[e],c=E(e,t).map(b=>b.pst_id).filter(b=>b!==l);u.value[e]={...u.value[e],pending:!0,mergeError:null};const s=new URLSearchParams;s.append("keep_pst_id",l),c.forEach(b=>s.append("remove_pst_ids",b)),s.append("dry_run",!1);try{await $fetch(`${z}/debug/merge-players?${s.toString()}`,{method:"POST"}),u.value[e]={pending:!1,merged:!0,mergeError:null}}catch(b){u.value[e]={...u.value[e],pending:!1,mergeError:((n=b==null?void 0:b.data)==null?void 0:n.message)||(b==null?void 0:b.message)||"Request failed"}}};return ce(k,e=>{e.length&&e.forEach((t,l)=>B(l,t))},{immediate:!0}),ue(V),(e,t)=>{var l,c;return g(),i("div",ve,[r("div",he,[t[3]||(t[3]=r("h1",{class:"text-3xl font-bold text-gray-800 dark:text-gray-200"},"Player Duplicates",-1)),r("button",{onClick:V,disabled:a(T),class:"px-4 py-2 bg-blue-500 text-white rounded-md hover:bg-blue-600 disabled:opacity-50 disabled:cursor-not-allowed"},o(a(T)?"Loading...":"Refresh"),9,ke)]),a(L)?(g(),i("div",fe,[r("p",we,o(a(L).message),1)])):_("",!0),a(T)&&!a(p)?(g(),i("div",Ce," Loading duplicates... ")):_("",!0),a(p)?(g(),i(S,{key:2},[r("div",Ee,[r("div",Se,[t[4]||(t[4]=r("div",{class:"text-xs uppercase tracking-wide text-gray-400 dark:text-gray-500 mb-1"},"Total groups",-1)),r("div",$e,o(a(p).count),1)]),r("div",Me,[t[5]||(t[5]=r("div",{class:"text-xs uppercase tracking-wide text-gray-400 dark:text-gray-500 mb-1"},"Leagues affected",-1)),r("div",Pe,o(a(D).length),1)]),r("div",Te,[t[6]||(t[6]=r("div",{class:"text-xs uppercase tracking-wide text-gray-400 dark:text-gray-500 mb-1"},"Teams affected",-1)),r("div",De,o(a(ae)),1)]),r("div",Be,[t[7]||(t[7]=r("div",{class:"text-xs uppercase tracking-wide text-gray-400 dark:text-gray-500 mb-1"},"Players involved",-1)),r("div",Re,o(a(re)),1)])]),r("div",ze,[t[9]||(t[9]=r("div",{class:"px-4 py-3 bg-gray-50 dark:bg-gray-700 border-b border-gray-200 dark:border-gray-600"},[r("h2",{class:"font-semibold text-gray-800 dark:text-gray-200"},"By type")],-1)),r("div",Le,[r("button",{onClick:t[0]||(t[0]=s=>m.value=null),class:v(["flex items-center gap-2 px-3 py-1.5 rounded-full text-sm font-medium transition-colors",a(m)===null?"bg-gray-700 dark:bg-gray-200 text-white dark:text-gray-900":"bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-600"])},[t[8]||(t[8]=M(" All ")),r("span",je,o(a(k).length),1)],2),(g(),i(S,null,P(j,s=>r("button",{key:s.type,onClick:n=>
1m.value=a(m)===s.type?null:s.type,class:v(["flex items-center gap-2 px-3 py-1.5 rounded-full text-sm font-medium transition-colors",a(m)===s.type?s.activeClass:s.inactiveClass])},[M(o(s.label)+" ",1),r("span",Oe,o(a(se)[s.type]||0),1)],10,Ae)),64))])]),!a(m)||a(m)==="in_season"?(g(),i("div",Ve,[t[10]||(t[10]=r("div",{class:"px-4 py-3 bg-gray-50 dark:bg-gray-700 border-b border-gray-200 dark:border-gray-600"},[r("h2",{class:"font-semibold text-gray-800 dark:text-gray-200"},"By league")],-1)),r("div",Fe,[(g(!0),i(S,null,P(a(D),s=>(g(),i("div",{key:s.name,class:v(["flex items-center px-4 py-2 gap-4 cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors",a(x)===s.name?"bg-blue-50 dark:bg-blue-900/30":""]),onClick:n=>x.value=a(x)===s.name?null:s.name},[r("span",Ge,o(s.name),1),r("div",Ie,[r("div",{class:"h-full bg-red-400 dark:bg-red-500 rounded transition-all",style:_e({width:`${s.groups/a(D)[0].groups*100}%`})},null,4)]),r("span",Ke,o(s.groups),1),r("span",Ye,o(s.teams)+" team"+o(s.teams!==1?"s":"")+", "+o(s.players)+" players",1),r("span",qe,o(a(x)===s.name?"▲":"▼"),1)],10,Ne))),128))])])):_("",!0),r("div",Ue,[r("span",He,[M(" Showing "+o(a(O))+" group"+o(a(O)!==1?"s":"")+" ",1),a(m)?(g(),i("span",{key:0,class:v((l=a($)[a(m)])==null?void 0:l.textClass)}," · "+o((c=a($)[a(m)])==null?void 0:c.label),3)):_("",!0),a(x)?(g(),i("span",Je," · "+o(a(x)),1)):_("",!0)]),a(m)||a(x)?(g(),i("button",{key:0,onClick:t[1]||(t[1]=s=>{m.value=null,x.value=null}),class:"text-xs text-gray-400 hover:text-gray-600 dark:hover:text-gray-300"}," Clear filters ✕ ")):_("",!0),a(C).size>0?(g(),i("span",Qe," · "+o(a(C).size)+" dismissed ",1)):_("",!0)]),r("div",We,[(g(!0),i(S,null,P(a(k),(s,n)=>{var b,F,N,G,I,K,Y,q,U;return pe((g(),i("div",{key:n,class:v(["bg-white dark:bg-gray-800 rounded-lg shadow-md overflow-hidden",{"opacity-50":(b=a(u)[n])==null?void 0:b.merged}])},[r("div",Xe,[r("span",{class:v(["text-xs font-semibold uppercase tracking-wide px-2 py-1 rounded flex-shrink-0",(F=a($)[s._type])==null?void 0:F.badgeClass])},o((N=a($)[s._type])==null?void 0:N.label),3),r("span",Ze,o(oe(s)),1),r("span",et,o(ne(s)),1),s._type==="cross_team"||s._type==="cross_team_season"?(g(),i("span",{key:0,class:v(["text-xs flex-shrink-0",s.shirts_match?"text-green-500 dark:text-green-400":"text-gray-400 dark:text-gray-500"])}," shirts: "+o(s.shirts_match?"✓ match":"no match"),3)):_("",!0),(G=a(u)[n])!=null&&G.merged?(g(),i("span",tt," ✓ Merged ")):_("",!0),r("button",{class:"ml-auto text-xs text-gray-400 hover:text-red-500 dark:text-gray-500 dark:hover:text-red-400 transition-colors px-2 py-1 rounded hover:bg-red-50 dark:hover:bg-red-900/30 flex-shrink-0",title:"Dismiss this cluster",onClick:d=>a(C).add(n)}," Dismiss cluster ✕ ",8,st)]),r("div",{class:v(["p-4 grid gap-3",E(n,s).length>2?"sm:grid-cols-3":"sm:grid-cols-2"])},[(g(!0),i(S,null,P(s.players,d=>{var H,J,Q,W,X;return g(),i("div",{key:d.pst_id,class:v(["relative flex items-center gap-3 p-3 rounded-lg border-2 transition-colors",(H=a(y)[n])!=null&&H.has(d.pst_id)?"border-dashed border-gray-300 dark:border-gray-600 opacity-40":a(h)[n]===d.pst_id?"border-green-500 bg-green-50 dark:bg-green-900/30 cursor-pointer":"border-gray-200 dark:border-gray-600 bg-gray-50 dark:bg-gray-700 hover:border-gray-400 cursor-pointer"]),onClick:R=>{var Z,ee;return!((Z=a(u)[n])!=null&&Z.merged)&&!((ee=a(y)[n])!=null&&ee.has(d.pst_id))&&de(n,d.pst_id)}},[(J=a(u)[n])!=null&&J.merged?_("",!0):(g(),i("button",{key:0,class:"absolute top-1.5 right-1.5 w-5 h-5 flex items-center justify-center rounded-full text-gray-300 hover:text-red-500 hover:bg-red-50 dark:hover:bg-red-900/30 transition-colors text-xs leading-none",title:(Q=a(y)[n])!=null&&Q.has(d.pst_id)?"Re-include player":"Remove from cluster",onClick:me(R=>ie(n,d.pst_id,s),["stop"])},o((W=a(y)[n])!=null&&W.has(d.pst_id)?"+":"✕"),9,rt)),r("img",{src:d.image_url,alt:d.full_name,class:"w-12 h-12 rounded-full object-cover flex-shrink-0 bg-gray-200 dark:bg-gray-600",onError:t[2]||(t[2]=R=>
1R.target.src="https://pulsbasketu.com/transparent-player-placeholder.png")},null,40,ot),r("div",nt,[r("div",lt,o(d.full_name),1),r("div",dt,[d.shirt_number?(g(),i("span",it,"#"+o(d.shirt_number),1)):_("",!0),d.position?(g(),i("span",gt,o(d.position),1)):_("",!0)]),r("div",ct,[M(o(d.total_games)+" game"+o(d.total_games!==1?"s":"")+" · pst_id: "+o(d.pst_id)+" ",1),s._type!=="in_season"?(g(),i("span",ut,"· st: "+o(d.season_team_id),1)):_("",!0),d.team_name?(g(),i("span",_t,"· "+o(d.team_name),1)):_("",!0),s._type==="cross_team_season"&&d.league_season_id?(g(),i("span",pt,"· ls: "+o(d.league_season_id),1)):_("",!0)]),d.last_game_date?(g(),i("div",bt," last: "+o(le(d.last_game_date)),1)):_("",!0)]),(X=a(y)[n])!=null&&X.has(d.pst_id)?_("",!0):(g(),i("div",{key:1,class:v(["flex-shrink-0 text-xs font-semibold pr-4",a(h)[n]===d.pst_id?"text-green-600 dark:text-green-400":"text-gray-300 dark:text-gray-600"])},o(a(h)[n]===d.pst_id?"KEEP":"REMOVE"),3))],10,at)}),128))],2),!((I=a(u)[n])!=null&&I.merged)&&E(n,s).length>=2?(g(),i("div",mt,[r("button",{onClick:d=>ge(n,s),disabled:(K=a(u)[n])==null?void 0:K.pending,class:"px-4 py-2 text-sm bg-red-500 text-white rounded-md hover:bg-red-600 disabled:opacity-50 disabled:cursor-not-allowed"},o((Y=a(u)[n])!=null&&Y.pending?"Merging...":"Merge"),9,yt),(q=a(u)[n])!=null&&q.mergeError?(g(),i("div",xt,o(a(u)[n].mergeError),1)):_("",!0)])):!((U=a(u)[n])!=null&&U.merged)&&E(n,s).length<2?(g(),i("div",vt," Need at least 2 active players to merge. ")):_("",!0)],2)),[[be,A(s,n)]])}),128))])],64)):_("",!0)])}}};export{wt 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.