1import{Z,bo as A,N as J,ah as W,c8 as X,br as q,co as K,bP as Y,c5 as _,c7 as $,cb as ee,cl as te,c2 as se,a1 as o,ag as le,S as t,b6 as p,b4 as k,p as ae,b0 as S,m as h,g,bH as P,bQ as ne,bS as oe,a as re,aZ as ie,aV as ue,aU as de,aR as ce,aQ as me,aP as fe,aJ as ve,aH as ge,aG as ye,aE as be,_ as pe,U as d,cs as i,d as ke,c4 as Se,bi as u,a0 as f,bE as n,W as v,X as C,F as he,t as Pe}from"./Bz2teeeH.js";import{u as Ce}from"./DcJY2ZhO.js";import{a as V}from"./BEeyKCbx.js";import"./VWaDGczM.js";import{D as x}from"./BURYKKZL.js";import{m as Ve}from"./kS7arPr6.js";import{u as xe}from"./BAL7c-p8.js";import{u as De}from"./2ksdYChw.js";import{a as ze,V as Ae}from"./59fCKSTw.js";import{V as D}from"./WT7VMjzw.js";import{V as z}from"./CFmUyY9Z.js";const Be=Z("v-alert-title"),Ie=A({iconSize:[Number,String],iconSizes:{type:Array,default:()=>[["x-small",10],["small",16],["default",24],["large",28],["x-large",32]]}},"iconSize");function we(e,s){return{iconSize:J(()=>{const a=new Map(e.iconSizes),l=e.iconSize??s()??"default";return a.has(l)?a.get(l):l})}}const Le=["success","info","warning","error"],Te=A({border:{type:[Boolean,String],validator:e=>typeof e=="boolean"||["top","end","bottom","start"].includes(e)},borderColor:String,closable:Boolean,closeIcon:{type:re,default:"$close"},closeLabel:{type:String,default:"$vuetify.close"},icon:{type:[Boolean,String,Function,Object],default:null},modelValue:{type:Boolean,default:!0},prominent:Boolean,title:String,text:String,type:{type:String,validator:e=>Le.includes(e)},...be(),...ye(),...ge(),...ve(),...Ie(),...fe(),...me(),...ce(),...de(),...ue(),...ie({variant:"flat"})},"VAlert"),Ee=W()({name:"VAlert",props:Te(),emits:{"click:close":e=>!0,"update:modelValue":e=>!0},setup(e,s){let{emit:c,slots:a}=s;const l=X(e,"modelValue"),r=P(()=>{if(e.icon!==!1)return e.type?e.icon??`$${e.type}`:e.icon}),{iconSize:B}=we(e,()=>e.prominent?44:void 0),{themeClasses:I}=q(e),{colorClasses:w,colorStyles:L,variantClasses:T}=K(()=>({color:e.color??e.type,variant:e.variant})),{densityClasses:E}=Y(e),{dimensionStyles:N}=ne(e),{elevationClasses:U}=oe(e),{locationStyles:R}=_(e),{positionClasses:F}
1=$(e),{roundedClasses:M}=ee(e),{textColorClasses:j,textColorStyles:G}=te(()=>e.borderColor),{t:H}=se(),y=P(()=>({"aria-label":H(e.closeLabel),onClick(m){l.value=!1,c("click:close",m)}}));return()=>{const m=!!(a.prepend||r.value),O=!!(a.title||e.title),Q=!!(a.close||e.closable),b={density:e.density,icon:r.value,size:e.iconSize||e.prominent?B.value:void 0};return l.value&&o(e.tag,{class:k(["v-alert",e.border&&{"v-alert--border":!!e.border,[`v-alert--border-${e.border===!0?"start":e.border}`]:!0},{"v-alert--prominent":e.prominent},I.value,w.value,E.value,U.value,F.value,M.value,T.value,e.class]),style:p([L.value,N.value,R.value,e.style]),role:"alert"},{default:()=>[le(!1,"v-alert"),e.border&&t("div",{key:"border",class:k(["v-alert__border",j.value]),style:p(G.value)},null),m&&t("div",{key:"prepend",class:"v-alert__prepend"},[a.prepend?o(h,{key:"prepend-defaults",disabled:!r.value,defaults:{VIcon:{...b}}},a.prepend):o(ae,S({key:"prepend-icon"},b),null)]),t("div",{class:"v-alert__content"},[O&&o(Be,{key:"title"},{default:()=>[a.title?.()??e.title]}),a.text?.()??e.text,a.default?.()]),a.append&&t("div",{key:"append",class:"v-alert__append"},[a.append()]),Q&&t("div",{key:"close",class:"v-alert__close"},[a.close?o(h,{key:"close-defaults",defaults:{VBtn:{icon:e.closeIcon,size:"x-small",variant:"text"}}},{default:()=>[a.close?.({props:y.value})]}):o(g,S({key:"close-btn",icon:e.closeIcon,size:"x-small",variant:"text"},y.value),null)])]})}}}),Ne={name:"AdminUserDetail",mixins:[Ve],setup(){return xe({title:"User"}),De(),{localePath:Se()}},data(){return{hasadminrights:!1,user:null,loading:!1,deleting:!1,error:""}},computed:{userId(){return(this._.provides[ke]||this.$route).params.id}},async mounted(){this.hasadminrights=await Ce.checkadminrole(this).catch(()=>!1),this.hasadminrights&&await this.load()},methods:{async load(){this.loading=!0,this.error="";try{this.user=await V.userGet(this,this.userId)}catch(e){console.log(e),this.error=e.message||"Could not load user."}finally{this.loading=!1}},async onDelete(){if(await x.confirm(this,'Delete user "'+(this.user.email||this.user.username)+'" and all associated data? This cannot be undone.')){this.deleting=!0;try{await V.userDelete(this,this.userId),this.goBack()}catch(s){console.log(s),x.error(this,s.message||"Could not delete user.")}finally{this.deleting=!1}}},goBack(){this.$router.push(this.localePath("/admin/users/"))},formatDate(e){return e?new Date(e).toLocaleString():"â"},loginLabel(e){return e==="google"?"Google":e==="apple"?"Apple":"Email"}}},Ue={class:"d-flex align-center mb-4"},Re={class:"mt-6"},Fe={key:0,class:"text-caption text-medium-emphasis mt-1"};function Me(e,s,c,a,l,r){return u(),d(ze,{"no-gutters":""},{default:i(()=>[o(Ae,{lg:"8",class:"pl-2 pr-2"},{default:i(()=>[l.hasadminrights?(u(),d(D,{key:1},{default:i(()=>[t("div",Ue,[o(g,{variant:"text",icon:"mdi-arrow-left",onClick:r.goBack},null,8,["onClick"]),s[1]||(s[1]=t("h1",{class:"v-heading text-h1 ml-2"},"User",-1))]),l.error?(u(),d(Ee,{key:0,type:"error",class:"mb-4"},{default:i(()=>[f(n(l.error),1)]),_:1})):v("",!0),l.user?(u(),C(he,{key:1},[o(z,null,{default:i(()=>[t("tbody",null,[t("tr",null,[s[2]||(s[2]=t("td",{class:"tdcaption"},"Email",-1)),t("td",null,n(l.user.email),1)]),t("tr",null,[s[3]||(s[3]=t("td",{class:"tdcaption"},"Username",-1)),t("td",null,n(l.user.username),1)]),t("tr",null,[s[4]||(s[4]=t("td",{class:"tdcaption"},"Login",-1)),t("td",null,n(r.loginLabel(l.user.loginType)),1)]),t("tr",null,[s[5]||(s[5]=t("td",{class:"tdcaption"},"Name",-1)),t("td",null,n(l.user.nickname),1)]),t("tr",null,[s[6]||(s[6]=t("td",{class:"tdcaption"},"Language",-1)),t("td",null,n(l.user.lang),1)]),t("tr",null,[s[7]||(s[7]=t("td",{class:"tdcaption"},"Email verified",-1)),t("td",null,n(l.user.emailVerified?"yes":"no"),1)]),t("tr",null,[s[8]||(s[8]=t("td",{class:"tdcaption"},"Admin",-1)),t("td",null,n(l.user.isAdmin?"yes":"no"),1)]),t("tr",null,[s[9]||(s[9]=t("td",{class:"tdcaption"},"Created",-1)),t("td",null,n(r.formatDate(l.user.createdAt)),1)]),t("tr",null,[s[10]||(s[10]=t("td",{class:"tdcaption"},"Updated",-1)),t("td",null,n(r.formatDate(l.user.updatedAt)),1)]),t("tr",null,[s[11]||(s[11]=t("td",{class:"tdcaption"},"Object ID",-1)),t("td",null,n(l.user.objectId),1)])])]),_:1}),s[18]||(s[18]=t("h2",{class:"text-h5 mt-6 mb-2"},"Usage",-1)),o(z,null,{default:i(()=>[t("tbody",null,[t("tr",null,[s[12]||(s[12]=t("td",{class:"tdcaption"},"Devices",-1)),t("td",null,n(l.user.stats.devicecount),1)]),t("tr",null,[s[13]||(s[13]=t("td",{class:"tdcaption"},"Photos",-1)),t("td",null,n(l.user.stats.photoscount),1)]),t("tr",null,[s[14]||(s[14]=t("td",{class:"tdcaption"},"Photos size",-1)),t("td",null,n(e.formatBytes(l.user.stats.photossize)),1
1)]),t("tr",null,[s[15]||(s[15]=t("td",{class:"tdcaption"},"Marks",-1)),t("td",null,n(l.user.markcount),1)]),t("tr",null,[s[16]||(s[16]=t("td",{class:"tdcaption"},"Last active",-1)),t("td",null,n(r.formatDate(l.user.stats.lasttimeactive)),1)])])]),_:1}),t("div",Re,[o(g,{color:"error",disabled:l.user.isAdmin||l.deleting,loading:l.deleting,"prepend-icon":"mdi-delete",onClick:r.onDelete},{default:i(()=>[...s[17]||(s[17]=[f(" Delete user ",-1)])]),_:1},8,["disabled","loading","onClick"]),l.user.isAdmin?(u(),C("div",Fe," Admin users cannot be deleted. ")):v("",!0)])],64)):l.loading?(u(),d(Pe,{key:2,indeterminate:"",class:"mt-4"})):v("",!0)]),_:1})):(u(),d(D,{key:0},{default:i(()=>[...s[0]||(s[0]=[t("h1",{class:"v-heading text-h1"},"Admin",-1),f(" Please login with admin rights. ",-1)])]),_:1}))]),_:1})]),_:1})}const Ye=pe(Ne,[["render",Me],["__scopeId","data-v-ba5cd89e"]]);export{Ye 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.