1import{d as M,D as G,w as T,o as s,c as i,a as e,m as x,v as D,l as E,e as j,t as y,b as k,g as u,ah as ie,_ as N,h as J,j as re,k as K,O as W,F as R,r as I,J as Y,f as U,n as q,z as V,x as ue,E as de}from"./index-CcSEOhuq.js";import{r as S}from"./rricon_copy--MC1tCjt.js";import{C as ve}from"./ConfirmActionModal-I4oNwxPy.js";import{l as ce}from"./eventCategoriesApi-BhiM9cBg.js";import{b as me,e as ge,r as be,h as pe,i as fe}from"./organizationsApi-CWjLEkyw.js";const ye={class:"general-card"},ke={class:"form-group"},_e={class:"form-group"},ze={class:"profile-pic-row"},Oe=["src"],he=["disabled"],Ce={key:0,class:"form-error"},$e={key:1,class:"form-success"},xe=M({__name:"OrganizationGeneral",setup(w){const m=G(),_=u(""),p=u(S),z=u(null),d=u(""),f=u(""),g=u(!1);T(()=>m.activeOrganization,v=>{var l;_.value=(v==null?void 0:v.name)??"",p.value=((l=v==null?void 0:v.logoUrl)==null?void 0:l.trim())||S},{immediate:!0});function O(){var v;(v=z.value)==null||v.click()}function C(){const v=m.activeOrganizationId;if(!v)return null;const l=v.startsWith("org-")?v.slice(4):v,c=Number.parseInt(l,10);return Number.isNaN(c)?null:c}async function h(v){var r;d.value="",f.value="";const l=v.target,c=(r=l.files)==null?void 0:r[0];if(!c)return;const n=C();if(!n){d.value="Unable to identify active organization.",l.value="";return}g.value=!0;try{const b=await ie({token:m.apiToken??void 0,organizationId:n,file:c});p.value=b.logo_url,m.updateActiveOrganizationLogo(b.logo_url),f.value="Logo updated."}catch(b){const $=b instanceof Error?b.message:"Unable to upload logo.";if(/unauthenticated/i.test($)||/session expired/i.test($)||/401/.test($)){d.value="Your sign-in session could not be verified. Please refresh and sign in again if needed.";return}d.value=$}finally{g.value=!1,l.value=""}}return(v,l)=>(s(),i("div",ye,[l[6]||(l[6]=e("h3",{class:"section-title"},"Organization Details",-1)),e("div",ke,[l[2]||(l[2]=e("label",{class:"form-label"},"Organization Name",-1)),x(e("input",{"onUpdate:modelValue":l[0]||(l[0]=c=>_.value=c),type:"text",class:"form-input",readonly:""},null,512),[[D,_.value]])]),e("div",_e,[l[4]||(l[4]=e("label",{class:"form-label"},"Profile Picture",-1)),e("div",ze,[e("img",{src:p.value,alt:"Organization profile",class:"profile-pic",onError:l[1]||(l[1]=c=>p.value=E(S))},null,40,Oe),e("button",{class:"upload-btn",disabled:g.value,onClick:O},[l[3]||(l[3]=e("i",{class:"bi bi-upload mr-2"},null,-1)),j(y(g.value?"Uploading...":"Upload Photo"),1)],8,he),e("input",{ref_key:"logoFileInputRef",ref:z,type:"file",accept:".jpg,.jpeg,.png",class:"hidden",onChange:h},null,544)]),d.value?(s(),i("p",Ce,y(d.value),1)):k("",!0),f.value?(s(),i("p",$e,y(f.value),1)):k("",!0),l[5]||(l[5]=e("p",{class:"form-note"},"Accepted formats: JPG, JPEG, PNG (max 5MB).",-1))])]))}}),Re=N(xe,[["__scopeId","data-v-09b08aaa"]]),Ee={class:"modal-container"},Ue={class:"modal-header-bar"},Ie={class:"modal-body-content"},we={class:"mb-4"},Ae={class:"mb-4"},Me={class:"mb-4"},Ne=["value"],Le={key:0,class:"mb-4"},Se={class:"category-grid"},Te=["value"],De={key:1,class:"error-msg"},Ve={class:"modal-footer-bar"},Pe=["disabled"],Be=M({__name:"AddUserModal",props:{categories:{}},emits:["close","submit"],setup(w,{emit:m}){const _=w,p=m,z=u(""),d=u(""),f=u("Organizer"),g=u([]),O=u(""),C=["Organizer","Delegate Organizer"],h=U(()=>z.value.trim().length>0&&d.value.trim().length>0&&f.value.length>0);function v(){h.value&&p("submit",{name:z.value.trim(),email:d.value.trim(),roleInOrganization:f.value,allowedEventCategories:f.value==="Delegate Organizer"?[...g.value]:[]})}function l(c){c.key==="Escape"&&p("close")}return J(()=>{document.addEventListener("keydown",l),document.body.style.overflow="hidden"}),re(()=>{document.removeEventListener("keydown",l),document.body.style.overflow=""}),(c,n)=>(s(),i("div",{class:"modal-overlay",onClick:n[6]||(n[6]=K(r=>p("close"),["self"]))},[e("div",Ee,[e("div",Ue,[n[7]||(n[7]=e("h5",{class:"mb-0 font-semibold",style:{"font-size":"1rem"}},"Add User",-1)),e("button",{class:"close-btn",onClick:n[0]||(n[0]=r=>p("close"))},"Ã")]),e("div",Ie,[e("div",we,[n[8]||(n[8]=e("label",{class:"block text-sm font-medium mb-1"},"Name",-1)),x(e("input",{"onUpdate:modelValue":n[1]||(n[1]=r=>z.value=r),type:"text",class:"form-input",placeholder:"Full name"},null,512),[[D,z.value]])]),e("div",Ae,[n[9]||(n[9]=e("label",{class:"block text-sm font-medium mb-1"},"Email",-1)),x(e("input",{"onUpdate:modelValue":n[2]||(n[2]=r=>d.value=r),type:"email",class:"form-input",placeholder:"[email protected]"},null,512),[[D,d.value]])]),e("div",Me,[n[10]||(n[10]=e("label",{class:"block text-sm font-medium mb-1"},"Role",-1)),x(e("select",{"onUpdate:modelValue":n[3]||(n[3]=r=>f.value=r),class:"form-input"},[(s(),i(R,null,I(C,r=>e("option",{key:r,value:r},y(r),9,Ne)),64))],512),[[W,f.value]])]),f.value==="Delegate Organizer"?(s(),i("div",Le,[n[11]||(n[11]=e("label",{class:"block text-sm font-medium mb-2"},"Allowed Categories",-1)),n[12]||(n[12]=e("p",{class:"scope-copy"},"Leave all unchecked to allow every category. Select categories to restrict this delegate.",-1)),e("div",Se,[(s(!0),i(R,null,I(_.categories??[],r=>(s(),i("label",{key:r.id,class:"category-option"},[x(e("input",{"onUpdate:modelValue":n[4]||(n[4]=b=>g.value=b),type:"checkbox",value:r.event_value},null,8,Te),[[Y,g.value]]),e("span",null,y(r.displayLabel),1)]))),128))])])):k("",!0),O.value?(s(),i("p",De,y(O.value),1)):k("",!0)]),e("div",Ve,[e("button",{class:"text-sm bg-gray-200 hover:bg-gray-300 text-text-dark border-none rounded px-4 py-2 cursor-pointer transition-colors",onClick:n[5]||(n[5]=r=>p("close"))}," Cancel "),e("button",{class:"text-sm text-white bg-primary hover:bg-primary-hover border-none rounded px-4 py-2 cursor-pointer transition-colors disabled:opacity-50",disabled:!h.value,onClick:v}," Send Invite ",8,Pe)])])]))}}),Fe=N(Be,[["__scopeId","data-v-2ab51ce4"]]),Ge={class:"users-header"},je={key:0,class:"readonly-note"},Je={key:1,class:"error-banner"},Ke={key:2,class:"loading-copy"},We={key:3,class:"users-table-wrap"},Ye={class:"users-table w-full text-left"},qe={class:"td-name"},He={class:"access-cell"},Qe={class:"status-cell"},Xe={class:"action-cell"},Ze={key:0,class:"member-actions-menu",tabindex:"0"},et={class:"menu-popover"},tt=["onClick"],at=["onClick"],lt=["onClick"],nt={key:1,class:"readonly-action"},ot={key:0},st={class:"modal-container"},it={class:"modal-body-content"},rt={class:"modal-copy"},ut={class:"modal-category-grid"},dt=["value"],vt={key:6,class:"saving-copy"},ct=M({__name:"OrganizationUsers",setup(w){const m=G(),_=u(!1),p=u(!1),z=u(!1),d=u(""),f=u(!1),g=u(null),O=u(null),C=u("Delegate Organizer"),h=u([]),v=u([]),l=u(null),c=u(null),n=u(!1),r=u(""),b=U(()=>{const t=m.activeOrganizationId;if(!t)return null;const a=/^org-(\d+)$/.exec(t);return a?Number(a[1]):/^\d+$/.test(t)?Number(t):null}),$=U(()=>{var t;return((t=m.apiToken)==null?void 0:t.trim())??""}),H=U(()=>{var t;return((t=g.value)==null?void 0:t.members)??[]}),Q=U(()=>{var t;return(((t=g.value)==null?void 0:t.invites)??[]).filter(a=>a.status==="invited")}),P=U(()=>[...H.value.map(t=>({kind:"member",key:`member-${t.user_id}`,name:t.name,email:t.email,role:t.role,status:"Active",member:t,invite:null})),...Q.value.map(t=>({kind:"invite",key:`invite-${t.id}`,name:t.name||"Invitee",email:t.email,role:t.role,status:t.status,member:null,invite:t}))]);async function B(){if(!b.value||!m.isOrgOrganizerAdmin){g.value=null;return}z.value=!0,d.value="";try{g.value=await me(b.value,$.value||void 0)}catch(t){d.value=t instanceof Error?t.message:"Unable to load team members."}finally{z.value=!1}}async function X(){try{v.value=await ce()}catch{v.value=[]}}async function Z(t){if(b.value){f.value=!0,d.value="";try{g.value=await ge(b.value,{name:t.name,email:t.email,role:t.roleInOrganization,allowed_event_categories:t.allowedEventCategories},$.value||void 0),_.value=!1}catch(a){d.value=a instanceof Error?a.message:"Unable to send invite."}finally{f.value=!1}}}
1async function ee(t,a){if(b.value)try{g.value=await fe(b.value,t.user_id,a,a==="Delegate Organizer"?h.value:[],$.value||void 0),p.value=!1,O.value=null,h.value=[]}catch(o){d.value=o instanceof Error?o.message:"Unable to update role."}}function te(t){O.value=t,C.value=t.role,h.value=[...t.allowed_event_categories??[]],p.value=!0}function L(){p.value=!1,O.value=null,h.value=[]}async function ae(){O.value&&await ee(O.value,C.value)}function le(t){n.value=!1,l.value=t,c.value=null,r.value=""}function ne(t){n.value=!1,c.value=t,l.value=null,r.value=""}function F(){n.value||(l.value=null,c.value=null,r.value="")}async function oe(){if(!(!b.value||n.value)){n.value=!0,r.value="";try{if(l.value)g.value=await be(b.value,l.value.user_id,$.value||void 0);else if(c.value){const t=c.value,a=await pe(b.value,t.id,$.value||void 0);g.value={...a,invites:(a.invites??[]).filter(o=>o.id!==t.id&&o.status==="invited")}}n.value=!1,F()}catch(t){r.value=t instanceof Error?t.message:l.value?"Unable to remove member.":"Unable to revoke invite."}finally{(l.value||c.value)&&(n.value=!1)}}}function se(t){if(t.role!=="Delegate Organizer")return"All categories";const a=t.allowed_event_categories??[];return a.length===0?"All categories":a.join(", ")}return J(()=>{B(),X()}),T(()=>[m.activeOrganizationId,m.apiToken,m.isOrgOrganizerAdmin],()=>{B()}),T(C,t=>{t!=="Delegate Organizer"&&(h.value=[])}),(t,a)=>(s(),i("div",null,[e("div",Ge,[a[5]||(a[5]=e("div",null,[e("h3",{class:"section-title"},"Team Members")],-1)),E(m).isOrgOrganizerAdmin?(s(),i("button",{key:0,class:"add-user-btn",onClick:a[0]||(a[0]=o=>_.value=!0)},[...a[4]||(a[4]=[e("i",{class:"bi bi-plus-lg mr-1"},null,-1),j(" Add User ",-1)])])):k("",!0)]),E(m).isOrgOrganizerAdmin?k("",!0):(s(),i("p",je," Only organizer admins can manage team members. ")),d.value?(s(),i("p",Je,y(d.value),1)):k("",!0),z.value?(s(),i("p",Ke,"Loading team members...")):E(m).isOrgOrganizerAdmin?(s(),i("div",We,[e("table",Ye,[a[8]||(a[8]=e("thead",null,[e("tr",null,[e("th",null,"Name"),e("th",null,"Email"),e("th",null,"Role"),e("th",null,"Access"),e("th",null,"Status"),e("th",{class:"th-actions"},"Actions")])],-1)),e("tbody",null,[(s(!0),i(R,null,I(P.value,o=>(s(),i("tr",{key:o.key},[e("td",qe,y(o.name),1),e("td",null,y(o.email),1),e("td",null,[e("span",{class:q(["role-badge","role-"+o.role.toLowerCase().replace(/ /g,"-")])},y(o.role),3)]),e("td",He,y(se(o.kind==="member"&&o.member?o.member:o.invite)),1),e("td",Qe,y(o.status),1),e("td",Xe,[o.kind==="member"&&o.member?(s(),i("div",Ze,[a[6]||(a[6]=e("button",{class:"menu-trigger",type:"button","aria-label":"Open member actions"},[e("i",{class:"bi bi-three-dots"})],-1)),e("div",et,[e("button",{class:"menu-item",type:"button",onClick:A=>te(o.member)},"Edit",8,tt),e("button",{class:"menu-item danger",type:"button",onClick:A=>le(o.member)},"Remove",8,at)])])):o.kind==="invite"&&o.invite?(s(),i(R,{key:1},[o.invite.status==="invited"?(s(),i("button",{key:0,class:"inline-action danger",onClick:A=>ne(o.invite)},"Revoke",8,lt)):(s(),i("span",nt,"No actions"))],64)):k("",!0)])]))),128)),P.value.length===0?(s(),i("tr",ot,[...a[7]||(a[7]=[e("td",{colspan:"6",class:"empty-row"},"No team members or pending invites found for this organization.",-1)])])):k("",!0)])])])):k("",!0),_.value?(s(),V(Fe,{key:4,categories:v.value,onClose:a[1]||(a[1]=o=>_.value=!1),onSubmit:Z},null,8,["categories"])):k("",!0),p.value&&O.value?(s(),i("div",{key:5,class:"modal-overlay",onClick:K(L,["self"])},[e("div",st,[e("div",{class:"modal-header-bar"},[a[9]||(a[9]=e("h5",{class:"modal-title"},"Edit Role",-1)),e("button",{class:"close-btn",type:"button",onClick:L},"Ã")]),e("div",it,[e("p",rt,y(O.value.name),1),a[13]||(a[13]=e("label",{class:"modal-label",for:"organization-member-role"},"Role",-1)),x(e("select",{id:"organization-member-role","onUpdate:modelValue":a[2]||(a[2]=o=>C.value=o),class:"modal-input"},[...a[10]||(a[10]=[e("option",{value:"Organizer"},"Organizer",-1),e("option",{value:"Delegate Organizer"},"Delegate Organizer",-1)])],512),[[W,C.value]]),C.value==="Delegate Organizer"?(s(),i(R,{key:0},[a[11]||(a[11]=e("label",{class:"modal-label modal-label-spaced"},"Allowed Categories",-1)),a[12]||(a[12]=e("p",{class:"modal-helper"},"Leave all unchecked to allow every category. Select categories to restrict this delegate.",-1)),e("div",ut,[(s(!0),i(R,null,I(v.value,o=>(s(),i("label",{key:o.id,class:"modal-category-option"},[x(e("input",{"onUpdate:modelValue":a[3]||(a[3]=A=>h.value=A),type:"checkbox",value:o.event_value},null,8,dt),[[Y,h.value]]),e("span",null,y(o.displayLabel),1)]))),128))])],64)):k("",!0)]),e("div",{class:"modal-footer-bar"},[e("button",{class:"modal-btn modal-btn-ghost",type:"button",onClick:L},"Cancel"),e("button",{class:"modal-btn modal-btn-primary",type:"button",onClick:ae},"Save")])])])):k("",!0),ue(ve,{visible:l.value!==null||c.value!==null,title:l.value?"Remove Team Member?":"Revoke Invite?",message:l.value?`Remove ${l.value.name} from this organization?`:c.value?`Revoke the invite for ${c.value.email}?`:"","confirm-label":l.value?"Remove Team Member":"Revoke Invite",tone:"danger",busy:n.value,error:r.value,"pending-text":l.value?"Removing team member...":"Revoking invite...",onClose:F,onConfirm:oe}
1,null,8,["visible","title","message","confirm-label","busy","error","pending-text"]),f.value?(s(),i("div",vt,"Sending invite...")):k("",!0)]))}}),mt=N(ct,[["__scopeId","data-v-8f00ecab"]]),gt={class:"org-tab-container"},bt=["onClick"],pt={class:"org-tab-body"},ft=M({__name:"OrganizationContent",setup(w){const m=de(),_=[{key:"general",label:"General"},{key:"users",label:"Users"}];return(p,z)=>(s(),i("div",null,[e("div",gt,[(s(),i(R,null,I(_,d=>e("button",{key:d.key,class:q(["org-tab",{active:E(m).activeOrgTab===d.key}]),onClick:f=>E(m).setOrgTab(d.key)},y(d.label),11,bt)),64))]),e("div",pt,[E(m).activeOrgTab==="general"?(s(),V(Re,{key:0})):(s(),V(mt,{key:1}))])]))}}),ht=N(ft,[["__scopeId","data-v-48d9947a"]]);export{ht 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.