1import{d as Se,A as i,a6 as Ie,C as $e,T as Ce,b as g,o as m,e as a,g as z,k as Ne,i as r,j as c,t as S,I as re,D as ae,E as we,G as le,H as De,F as Re,r as Te,S as Le,a5 as Ae,p as Be}from"./DrlufBBD.js";import{_ as Ee}from"./C3sl8jeo.js";import{u as Me}from"./BYDppTfa.js";import"./CqkleIqs.js";import"./BkIdC3H5.js";const Oe=Ae(Ee),Ke={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Ue={key:0,class:"draft-actions","aria-label":"ì¤í¸ë¦¬ë¨¸ í í¸ì§ ë구"},We=["disabled"],ze=["disabled"],Fe=["disabled"],Ve=["disabled"],Ge={key:0,class:"draft-help"},Pe=["role"],je={class:"search-controls"},Xe={class:"relative search-field"},He={class:"search-field"},Je=["value"],qe={key:2,class:"grid-state",role:"status"},Ye=["disabled"],C=40,I=200,oe=3,Qe=Se({__name:"ContentStreamerGrid",props:{contentId:{},shareToken:{default:""},userTone:{type:Boolean,default:!1},initialData:{default:null}},setup(se){const u=se;let ne=0;const R=[{label:"SOOP",value:"soop"},{label:"ì¹ì§ì§",value:"chzzk"},{label:"YouTube",value:"youtube"},{label:"Twitch",value:"twitch"}],ie=new Set(R.map(({value:e})=>e)),de=e=>`${String(e.platform||"").toLowerCase()}:${String(e.streamerId||"").replace(/\s/g,"")}`,F=e=>{const t=Array.isArray(e.roles)?e.roles.map(String).slice(0,3):[];return{...e,key:`saved:${e.platform}:${e.streamerId}`,originalKey:`${e.platform}:${e.streamerId}`,roles:t,role1:t[0]||"",role2:t[1]||"",role3:t[2]||"",guild:e.guild||"",visible:e.visible!==!1}},V=e=>({key:`draft:${++ne}`,streamerId:"",platform:"soop",no:e,roles:[],role1:"",role2:"",role3:"",guild:"",visible:!0,userNick:"",fanCount:0,isLive:!1}),T=e=>Array.from({length:Math.min(oe,Math.max(0,I-e))},(t,o)=>V(e+o+1)),ue=e=>!e.originalKey&&!String(e.streamerId||"").trim()&&![e.role1,e.role2,e.role3].some(t=>String(t||"").trim())&&!String(e.guild||"").trim(),L=(u.initialData?.streamers||[]).map(F),$=i(L.map(e=>({...e}))),ce=["editor","owner","admin"].includes(u.initialData?.permission||"viewer"),l=i([...L,...ce?T(L.length):[]]),G=i(u.initialData?.permission||"viewer"),b=i(null),N=i(""),k=i(""),_=i(!u.initialData),x=i(""),n=i(!1),A=i(""),B=i(!1),P=i(null),E=Me(),f=c(()=>["editor","owner","admin"].includes(G.value)),j=e=>({platform:String(e.platform||"").toLowerCase(),streamerId:String(e.streamerId||"").replace(/\s/g,""),no:Number(e.no)||0,roles:[e.role1,e.role2,e.role3].map(t=>String(t||"").trim()).filter(Boolean),guild:String(e.guild||"").trim(),visible:e.visible!==!1}),M=c(()=>l.value.filter(e=>!ue(e))),me=c(()=>Array.from(new Set(l.value.flatMap(e=>[e.role1,e.role2,e.role3].map(t=>String(t||"").trim()).filter(Boolean)))).sort((e,t)=>e.localeCompare(t,"ko-KR"))),fe=c(()=>k.value?l.value.filter(e=>[e.role1,e.role2,e.role3].map(t=>String(t||"").trim()).includes(k.value)):l.value),w=c(()=>JSON.stringify(M.value.map(j))!==JSON.stringify($.value.map(j))),X=c(()=>w.value||n.value),H=c(()=>u.shareToken?{"x-content-share-token":u.shareToken}:void 0),p=()=>f.value&&!n.value,pe=c(()=>[{field:"platform",label:"íë«í¼",options:R},{field:"isLive",label:"ë°©ì¡ ìí",options:[{label:"LIVE",value:!0},{label:"OFFLINE",value:!1}]},{field:"visible",label:"ë
¸ì¶ ìí",options:[{label:"ë
¸ì¶",value:!0},{label:"ì¨ê¹",value:!1}]}]),ve=c(()=>[{field:"no",headerName:"ìì",width:90,editable:p,cellDataType:"number"},{field:"platform",headerName:"íë«í¼",width:110,editable:p,selectOptions:R},{field:"streamerId",headerName:"ì¤í¸ë¦¬ë¨¸ ID",minWidth:160,editable:p},{field:"userNick",headerName:"ëë¤ì",minWidth:150},{field:"fanCount",headerName:"ì ì²ì",width:110,cellDataType:"number"},{field:"role1",headerName:"ìí 1",minWidth:130,editable:p},{field:"role2",headerName:"ìí 2",minWidth:130,editable:p},{field:"role3",headerName:"ìí 3",minWidth:130,editable:p},{field:"guild",headerName:"길ë",editable:p},{field:"visible",headerName:"ë
¸ì¶",width:100,editable:p,cellDataType:"boolean"},{field:"isLive",headerName:"ë¼ì´ë¸",width:100,cellDataType:"boolean"}]),J=c(()=>`/api/manage/contents/${encodeURIComponent(u.contentId)}/streamers`),q=(e,t)=>e?.data?.message||e?.message||t,d=(e,t=!1)=>{A.value=e,B.value=t},Y=e=>{const t=e.map(F);$.value=t.map(o=>({...o,roles:[...o.roles]})),l.value=[...t,...f.value?T(t.length):[]],b.value=null},ge=()=>{l.value=[...$.value.map(e=>({...e,roles:[...e.roles]})),...f.value?T($.value.length):[]],b.value=null,d("ì ì¥íì§ ìì ë³ê²½ì¬íì ì·¨ìíìµëë¤.")},be=()=>{if(!f.value||n.value)return;const e=Math.min(oe,I-l.value.length);if(e<=0){d(`ì¤í¸ë¦¬ë¨¸ íì ìµë ${I}ê°ê¹ì§ í¸ì§í ì ììµëë¤.`,!0);return}const t=Math.max(0,...M.value.map(o=>Number(o.no)||0))+1;l.value=[...l.value,...Array.from({length:e},(o,s)=>V(t+s))],d(`ë¹ í ${e}ê°ë¥¼ ì¶ê°íìµëë¤. ì
ë ¥ í ìì í기를 ëë¬ ì ì¥íì¸ì.`)},he=()=>{if(!b.value||n.value)return;const e=b.value;l.value=l.value.filter(t=>
1t.key!==e.key),b.value=null,d(e.originalKey?"íì ì´ììì ì ê±°íìµëë¤. ìì í기를 ë르면 ì¤ì 목ë¡ìì ìì ë©ëë¤.":"ë¹ íì ì ê±°íìµëë¤.")},Q=async()=>{if(!(_.value&&u.initialData)){_.value=!0,x.value="";try{const e=await $fetch(J.value,{headers:H.value});G.value=e.permission,Y(e.streamers),d("ì¤í¸ë¦¬ë¨¸ 목ë¡ì ìµì ìíë¡ ë¶ë¬ììµëë¤.")}catch(e){x.value=q(e,"ì ì í ë¤ì ìëí´ ì£¼ì¸ì."),l.value.length&&d(x.value,!0)}finally{_.value=!1}}},ye=async()=>{await Q(),x.value&&(await Le(),P.value?.focus())},ke=({data:e})=>{!f.value||n.value||(e.roles=[e.role1,e.role2,e.role3].map(t=>String(t||"")).filter(Boolean),e.streamerId=String(e.streamerId||""),(!e.originalKey||de(e)!==e.originalKey)&&(e.userNick=e.streamerId.replace(/\s/g,""),e.fanCount=0,e.isLive=!1),d("ë³ê²½ì¬íì´ ì´ìì ë°ìëìµëë¤. ìì í기를 ëë¬ ì ì¥íì¸ì."))},_e=()=>{const e=M.value;if(e.length>I)return{error:`ì¤í¸ë¦¬ë¨¸ë ìµë ${I}ëª
ê¹ì§ ì ì¥í ì ììµëë¤.`};const t=new Set,o=[];for(const[h,v]of e.entries()){const y=h+1,O=String(v.platform||"").trim().toLowerCase(),K=String(v.streamerId||"").replace(/\s/g,"");if(!ie.has(O))return{error:`${y}íì íë«í¼ì íì¸í´ 주ì¸ì.`};if(!K)return{error:`${y}íì ì¤í¸ë¦¬ë¨¸ IDë íìì
ëë¤.`};const U=Number(v.no);if(!Number.isInteger(U)||U<0)return{error:`${y}íì ììë 0 ì´ìì ì ìì¬ì¼ í©ëë¤.`};const D=[v.role1,v.role2,v.role3].map(W=>String(W||"").trim()).filter(Boolean);if(D.some(W=>Array.from(W).length>C))return{error:`${y}íì ê° ìí ì ${C}ì ì´íì¬ì¼ í©ëë¤.`};if(new Set(D).size!==D.length)return{error:`${y}íì ê°ì ìí ì ì¤ë³µ ì
ë ¥í ì ììµëë¤.`};const ee=String(v.guild||"").trim();if(Array.from(ee).length>C)return{error:`${y}íì 길ëë ${C}ì ì´íì¬ì¼ í©ëë¤.`};const te=`${O}:${K}`;if(t.has(te))return{error:`${y}íì ì¤í¸ë¦¬ë¨¸ê° 목ë¡ì ì¤ë³µëì´ ììµëë¤.`};t.add(te),o.push({platform:O,streamerId:K,no:U,roles:D,guild:ee||null,visible:v.visible!==!1})}const s=$.value.map(h=>({platform:String(h.platform).toLowerCase(),streamerId:String(h.streamerId)})).filter(h=>!t.has(`${h.platform}:${h.streamerId}`));return{rows:o,deleted:s}},xe=async()=>{if(!f.value||n.value||!w.value)return;const e=_e();if("error"in e){d(e.error,!0),E.error(e.error);return}n.value=!0,d("ì¤í¸ë¦¬ë¨¸ ë³ê²½ì¬íì ì ì¥íë ì¤ì
ëë¤.");try{const t=await $fetch(`${J.value}/bulk`,{method:"PUT",headers:H.value,body:e});Y(t.rows),k.value="",d("ì¤í¸ë¦¬ë¨¸ ë³ê²½ì¬íì ì ì¥íìµëë¤."),E.success("ì¤í¸ë¦¬ë¨¸ ë³ê²½ì¬íì ì ì¥íìµëë¤.")}catch(t){const o=q(t,"ì¤í¸ë¦¬ë¨¸ ë³ê²½ì¬íì ì ì¥íì§ ëª»íìµëë¤.");d(o,!0),E.error(o)}finally{n.value=!1}},Z=e=>{X.value&&(e.preventDefault(),e.returnValue="")};return Ie(()=>X.value?window.confirm("ì
ë ¥ ì¤ì´ê±°ë ì ì¥ì´ ìë£ëì§ ìì ì¤í¸ë¦¬ë¨¸ ë³ê²½ì¬íì´ ììµëë¤. ì´ íì´ì§ë¥¼ ëê°ê¹ì?"):!0),$e(()=>{u.initialData||Q(),window.addEventListener("beforeunload",Z)}),Ce(()=>window.removeEventListener("beforeunload",Z)),(e,t)=>{const o=Oe;return m(),g("section",{class:re(["streamer-grid space-y-4",{"user-tone":u.userTone}])},[a("div",Ke,[t[4]||(t[4]=a("div",null,[a("h2",{class:"text-xl font-bold text-dark-text"},"ì¤í¸ë¦¬ë¨¸"),a("p",{class:"text-sm text-dark-text-secondary"}," ì
í´ë¦ í Enter ëë ëë¸ í´ë¦ì¼ë¡ ìì í©ëë¤. ìí ê³¼ 길ëë ìì ë¡ê² ì
ë ¥í ì ììµëë¤. ")],-1)),r(f)?(m(),g("div",Ue,[a("button",{type:"button",class:"action-button rounded-lg border border-dark-border bg-dark-surface px-4 py-2 text-dark-text",disabled:r(n)||r(l).length>=I,onClick:t[0]||(t[0]=s=>be())}," ë¹ í 3ê° ì¶ê° ",8,We),a("button",{type:"button",disabled:!r(b)||r(n),class:"action-button rounded-lg border border-red-700 px-4 py-2 text-red-300 disabled:opacity-40",onClick:he}," ì í í ì ê±° ",8,ze),a("button",{type:"button",class:"action-button rounded-lg border border-dark-border bg-dark-surface px-4 py-2 text-dark-text",disabled:!r(w)||r(n),onClick:ge}," ë³ê²½ ì·¨ì ",8,Fe),a("button",{type:"button",class:"action-button rounded-lg bg-primary px-4 py-2 font-medium text-white",disabled:!r(w)||r(n),onClick:xe},S(r(n)?"ì ì¥ ì¤â¦":"ìì í기"),9,Ve)])):z("",!0)]),r(f)?(m(),g("p",Ge," ë¹ íì íë«í¼, ì¤í¸ë¦¬ë¨¸ ID, ìí 1~3, 길ë를 ì°ì ì
ë ¥í ë¤ ìì í기를 ë르ì¸ì. ìí ì ìµë 3ê°, ê° ìí ê³¼ 길ëë "+S(C)+"ìê¹ì§ì´ë©° ë¹ ê°ë íì©ë©ëë¤. íì ì´ë¦ì ì ì¥ í ì¡°íë ëë¤ìì¼ë¡ ìë ë°ìë©ëë¤. ")):z("",!0),r(A)?(m(),g("p",{key:1,class:re(["page-message",{error:r(B)}]),role:r(B)?"alert":"status","aria-live":"polite"},S(r(A)),11,Pe)):z("",!0),a("div",je,[a("div",Xe,[t[5]||(t[5]=a("label",{for:"content-streamer-search"},"ì¤í¸ë¦¬ë¨¸ ëª©ë¡ ê²ì",-1)),ae(a("input",{id:"content-streamer-search","onUpdate:modelValue":t[1]||(t[1]=s=>le(N)?N.value=s:null),placeholder:"ì¸ ìí ì í¬í¨í 그리ë ì ì²´ ê²ì",type:"search",class:"w-full rounded-lg border border-dark-border bg-dark-surface px-4 py-2 text-dark-text"},null,512),[[we,r(N)]])]),a("label",He,[t[7]||(t[7]=a("span",null,"ìí íí°",-1)),ae(a("select",{"onUpdate:modelValue":t[2]||(t[2]=s=>le(k)?k.value=s:null),class:"rounded-lg border border-dark-border bg-dark-surface px-3 py-2 text-dark-text"},[t[6]||(t[6]=a("option",{value:""},"ì ì²´ ìí ",-1)),(m(!0),g(Re,null,Te(r(me),s=>(m(),g("option",{key:s,value:s},S(s),9,Je))),128))],512),[[De,r(k)]])])]),r(_)&&!r(l).length?(m(),g("div",qe," ì¤í¸ë¦¬ë¨¸ 목ë¡ì ë¶ë¬ì¤ë ì¤ì
ëë¤. ")):r(x)&&!r(l).length?(m(),g("div",{key:3,ref_key:"loadErrorAlert",ref:P,class:"grid-state grid-error",role:"alert",tabindex:"-1"},[t[8]||(t[8]=a("strong",null,"ì¤í¸ë¦¬ë¨¸ 목ë¡ì ë¶ë¬ì¤ì§ 못íìµëë¤.",-1)),a("span",null,S(r(x)),1),a("button",{type:"button",disabled:r(_),onClick:ye},S(r(_)?"ë¤ì ë¶ë¬ì¤ë ì¤â¦":"ë¤ì ìë"),9,Ye)],512)):(m(),Ne(o,{key:4,rows:r(fe),columns:r(ve),search:r(N),filters:r(pe),"row-id":"key",onSelectionChanged:t[3]||(t[3]=s=>b.value=s),onCellChanged:ke},null,8,["rows","columns","search","filters"]))],2)}}}),lt=Object.assign(Be(Qe,[["__scopeId","data-v-20f7493f"]]),{__name:"AdminContentStreamerGrid"});export{lt 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.