1import{_ as I,r as N,u as f,f as s,b as a,h as b,z as d,A as P,F as h,x as S,e as $,L as z,G as U,C as G,w as c,c as x,t as o,m as q,o as H,l as J,k as K,s as Q}from"../chunks/chunk-D6Oav43O.js";import{n as A}from"../chunks/chunk-lzWkO0SH.js";import"../chunks/chunk-D1JYe4Qp.js";import{a as y}from"../chunks/chunk-pJ2yq5Pf.js";/* empty css *//* empty css *//* empty css *//* empty css */import"../chunks/chunk-BwNI8fUT.js";const W={class:"maintainer-editor"},X={class:"md3-card maintainers-card"},Y={class:"header"},Z={class:"title"},ee={key:0,class:"md3-loading"},te=["innerHTML"],ae={class:"section"},ne={class:"multi"},ie={key:0,class:"selected"},se=["onClick"],oe={class:"md3-search"},le={class:"options"},re=["onClick"],de={class:"name"},ce={class:"meta"},ue={class:"check material-icons-round"},pe={class:"section public-section"},me={class:"public-maintainers"},ve=["onUpdate:modelValue"],fe=["onClick"],he={class:"footer"},ye=["disabled"],ge={__name:"+Page",setup(Se){const E=G(),u=decodeURIComponent(E?.routeParams?.codename||""),p=c([]),i=c([]),r=c([{name:""}]),g=c(""),m=c(!1),w=c(!0),j=x(()=>{const t=g.value.trim().toLowerCase();return t?p.value.filter(e=>String(e.id).includes(t)||(e.name||"").toLowerCase().includes(t)):p.value}),T=x(()=>{const t=new Map(p.value.map(e=>[String(e.id),e]));return i.value.map(e=>t.get(String(e))).filter(Boolean)}),D=()=>r.value.map(t=>({name:t?.name?.trim?.()||""})).filter(t=>t.name);function k(){A(`/admin/devices/${encodeURIComponent(u)}`)}async function M(){const t=await y("/api/user/info",{method:"GET"}),e=await t.json().catch(()=>({}));return!t.ok||!e?.data?.users?.admin?(await f({type:"alert",title:"Access Denied",content:"Admin required"}),await A("/admin/login"),!1):!0}async function L(){const[t,e]=await Promise.all([y("/api/user/list",{method:"GET"}),y(`/api/device/detail?codename=${encodeURIComponent(u)}`,{method:"GET"})]),n=await t.json().catch(()=>({})),l=await e.json().catch(()=>({}));if(!t.ok)throw new Error(n?.message||"Failed to load users");if(!e.ok)throw new Error(l?.message||"Failed to load device");p.value=n?.data?.users||[];const v=l?.data?.maintainers||[];i.value=v.map(_=>String(_.id));const C=l?.data?.publicMaintainers||[];r.value=C.length?C.map(_=>({name:_?.name||""})):[{name:""}]}async function R(){m.value=!0;try{const t={codename:u,userIds:i.value.map(Number),publicMaintainers:D()},e=await y("/api/device/maintainers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),n=await e.json().catch(()=>({}));if(!e.ok)throw new Error(n?.message||"Update failed");await f({type:"alert",title:"Success",content:"Maintainers updated"}),k()}catch(t){await f({type:"alert",title:"Error",content:String(t?.message||t)})}finally{m.value=!1}}function V(t){const e=i.value.indexOf(t);e>=0?i.value.splice(e,1):i.value.push(t)}function B(t){const e=i.value.indexOf(t);e>=0&&i.value.splice(e,1)}function O(){r.value.push({name:""})}function F(t){r.value.splice(t,1),r.value.length===0&&r.value.push({name:""})}return N(async()=>{if(await M())try{await L()}catch(t){await f({type:"alert",title:"Error",content:String(t?.message||t)})}finally{w.value=!1}}),(t,e)=>(o(),s("div",W,[a("div",X,[a("header",Y,[a("h1",Z,[e[1]||(e[1]=a("span",{class:"material-icons-round"},"badge",-1)),b(" Edit Maintainers · "+d(P(u)),1)]),a("div",{class:"actions"},[a("button",{class:"md3-btn md3-btn--outlined",onClick:k},"Back")])]),w.value?(o(),s("div",ee,[a("div",{class:"spinner",innerHTML:P(q)},null,8,te)])):(o(),s(h,{key:1},[a("div",ae,[e[4]||(e[4]=a("div",{class:"desc"},"Select users who maintain this device",-1)),a("div",ne,[T.value.length?(o(),s("div",ie,[(o(!0),s(h,null,S(T.value,n=>(o(),s("span",{class:"md3-chip chip-removable",key:n.id},[b(d(n.name)+" ",1),a("button",{class:"chip-remove",onClick:l=>B(String(n.id)),"aria-label":"Remove"},[...e[2]||(e[2]=[a("span",{class:"material-icons-round"},"close",-1)])],8,se)]))),128))])):$("v-if",!0),a("div",oe,[e[3]||(e[3]=a("span",{class:"material-icons-round"},"search",-1)),z(a("input",{"onUpdate:modelValue":e[0]||(e[0]=n=>g.value=n),type:"search",placeholder:"Filter users by name or id"},null,512),[[U,g.value,void 0,{trim:!0}
1]])]),a("div",le,[(o(!0),s(h,null,S(j.value,n=>(o(),s("button",{type:"button",class:H(["option",{selected:i.value.includes(String(n.id))}]),key:n.id,onClick:l=>V(String(n.id))},[a("span",de,d(n.name),1),a("span",ce,"#"+d(n.id),1),a("span",ue,d(i.value.includes(String(n.id))?"check_circle":"radio_button_unchecked"),1)],10,re))),128))])])]),a("div",pe,[e[7]||(e[7]=a("div",{class:"desc"},"Public maintainer names (shown on Download page, accounts not required)",-1)),a("div",me,[(o(!0),s(h,null,S(r.value,(n,l)=>(o(),s("div",{class:"public-maintainer-row",key:l},[z(a("input",{"onUpdate:modelValue":v=>n.name=v,type:"text",placeholder:"Maintainer name"},null,8,ve),[[U,n.name,void 0,{trim:!0}]]),a("button",{class:"icon-btn",type:"button",onClick:v=>F(l),"aria-label":"Remove maintainer"},[...e[5]||(e[5]=[a("span",{class:"material-icons-round"},"delete",-1)])],8,fe)]))),128)),a("button",{type:"button",class:"md3-btn md3-btn--text add-btn",onClick:O},[...e[6]||(e[6]=[a("span",{class:"material-icons-round"},"add",-1),b(" Add Maintainer ",-1)])])])])],64)),a("footer",he,[a("button",{class:"md3-btn md3-btn--filled",disabled:m.value,onClick:R},d(m.value?"Savingâ¦":"Save"),9,ye)])])]))}},_e=I(ge,[["__scopeId","data-v-6187434b"]]),be=Object.freeze(Object.defineProperty({__proto__:null,default:_e},Symbol.toStringTag,{value:"Module"})),Ee={hasServerOnlyHook:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:!1}},isClientRuntimeLoaded:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:!0}},onBeforeRenderEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:null}},dataEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:null}},guardEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:null}},onRenderClient:{type:"standard",definedAtData:{filePathToShowToUser:"vike-vue/__internal/integration/onRenderClient",fileExportPathToShowToUser:[]},valueSerialized:{type:"pointer-import",value:Q}},Page:{type:"standard",definedAtData:{filePathToShowToUser:"/src/pages/admin/devices/@codename/maintainers/+Page.vue",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:be}},hydrationCanBeAborted:{type:"standard",definedAtData:{filePathToShowToUser:"vike-vue/config",fileExportPathToShowToUser:["default","hydrationCanBeAborted"]},valueSerialized:{type:"js-serialized",value:!0}},Layout:{type:"cumulative",definedAtData:[{filePathToShowToUser:"/src/pages/+Layout.vue",fileExportPathToShowToUser:[]}],valueSerialized:[{type:"plus-file",exportValues:K}]},title:{type:"standard",definedAtData:{filePathToShowToUser:"/src/pages/+config.js",fileExportPathToShowToUser:["default","title"]},valueSerialized:{type:"js-serialized",value:"AviumUI"}},onCreateApp:{type:"cumulative",definedAtData:[{filePathToShowToUser:"/src/pages/+onCreateApp.js",fileExportPathToShowToUser:[]}],valueSerialized:[{type:"plus-file",exportValues:J}]}};export{Ee as configValuesSerialized};
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.