@dropins/storefront-company-management 1.0.0-alpha2003 → 1.0.0-alpha2004

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsxs as B,jsx as t}from"@dropins/tools/preact-jsx-runtime.js";import{memo as D}from"@dropins/tools/preact-compat.js";import{useState as m,useEffect as M,useMemo as H}from"@dropins/tools/preact-hooks.js";import{Card as J,InLineAlert as K,ProgressSpinner as Q,Field as T,Input as A,Picker as P,Button as F}from"@dropins/tools/components.js";import{i as W}from"./company-permissions.js";import{g as X,c as Y,u as Z,i as ee,a as ae}from"./updateCompanyUser.js";import{useText as L}from"@dropins/tools/i18n.js";import{C as re}from"./useInLineAlert.js";function te(b){const{mode:C,entityId:d,parentStructureId:S,onSaved:g}=b,n=L({firstNameRequired:"Company.CompanyStructure.shared.validation.firstNameRequired",lastNameRequired:"Company.CompanyStructure.shared.validation.lastNameRequired",emailRequired:"Company.CompanyStructure.shared.validation.emailRequired",emailInvalid:"Company.CompanyStructure.shared.validation.emailInvalid",jobTitleRequired:"Company.CompanyStructure.shared.validation.jobTitleRequired",workPhoneRequired:"Company.CompanyStructure.shared.validation.workPhoneRequired",selectRole:"Company.CompanyStructure.shared.validation.selectRole",createUserError:"Company.CompanyStructure.messages.createUserError",saveUserError:"Company.CompanyStructure.messages.saveUserError"}),[a,c]=m({firstName:"",lastName:"",email:"",jobTitle:"",telephone:"",roleId:"",status:"ACTIVE"}),[f,u]=m({}),[s,h]=m({}),[U,p]=m(!1),[v,j]=m(null),[q,N]=m(null),[x,I]=m(""),[V,i]=m(""),[r,E]=m(!1);M(()=>{C!=="edit"||!d||(p(!0),X(d).then(e=>{var o;if(!e)return;const l=e.email||"";c(R=>({...R,firstName:e.firstName||"",lastName:e.lastName||"",email:l,jobTitle:e.jobTitle||"",telephone:e.telephone||"",status:e.status||"ACTIVE"})),i(l),(o=e==null?void 0:e.role)!=null&&o.id&&c(R=>({...R,roleId:e.role.id})),E((e==null?void 0:e.isCompanyAdmin)??!1)}).finally(()=>p(!1)))},[C,d]);const _=e=>/.+@.+\..+/.test(e),z=(e,l)=>e==="firstName"?l.trim()?null:n.firstNameRequired:e==="lastName"?l.trim()?null:n.lastNameRequired:e==="email"?l.trim()?_(l.trim())?null:n.emailInvalid:n.emailRequired:e==="jobTitle"?l.trim()?null:n.jobTitleRequired:e==="telephone"?l.trim()?null:n.workPhoneRequired:e==="roleId"?l?null:n.selectRole:null,$=(e,l)=>{c(o=>({...o,[e]:l})),f[e]&&u(o=>({...o,[e]:""})),e==="email"&&N(null),v&&j(null)},O=async e=>{h(o=>({...o,[e]:!0}));const l=z(e,String(a[e]??""));if(l&&u(o=>({...o,[e]:l})),e==="email"){const o=(a.email||"").trim();if(C==="edit"&&o.toLowerCase()===(V||"").trim().toLowerCase()){N(null);return}if(_(o)&&o!==x){const R=await ee(o);I(o),N(R),R===!1&&u(w=>({...w,email:"A user with this email address is already a member of your company."}))}}},G=H(()=>!!a.roleId&&!!(a.firstName||"").trim()&&!!(a.lastName||"").trim()&&!!(a.jobTitle||"").trim()&&!!(a.telephone||"").trim()&&_((a.email||"").trim())&&!f.email&&q!==!1,[a,f,q]);return{values:a,errors:f,touched:s,loading:U,setValue:$,onBlur:O,canSubmit:G,submit:async()=>{const e=["firstName","lastName","email","jobTitle","telephone","roleId"],l={};for(const y of e){const k=z(y,String(a[y]??""));k&&(l[y]=k)}if(u(l),h({firstName:!0,lastName:!0,email:!0,jobTitle:!0,telephone:!0,roleId:!0}),Object.keys(l).length||q===!1)return;const o=`${a.firstName||""} ${a.lastName||""}`.trim()||a.email||"",w=r||W({id:a.roleId})?"ACTIVE":a.status;try{if(C==="add"){const y=await Y({email:a.email||"",firstName:a.firstName||"",lastName:a.lastName||"",jobTitle:a.jobTitle||"",telephone:a.telephone||"",roleId:a.roleId,status:w,targetId:S??null});if(!y){j(n.createUserError);return}g({label:o,structureId:y.structureId,entityId:y.id,type:"user"})}else d&&(await Z({id:d,email:a.email||"",firstName:a.firstName||"",lastName:a.lastName||"",jobTitle:a.jobTitle||"",telephone:a.telephone||"",status:w,roleId:a.roleId}),g({label:o,entityId:d,type:"user"}))}catch(y){const k=y instanceof Error?y.message:n.saveUserError;j(k)}},isCompanyAdmin:r,generalError:v}}function le(){const b=L({loadRolesError:"Company.CompanyStructure.messages.loadRolesError"}),[C,d]=m([]),[S,g]=m(!0),[n,a]=m(null);return M(()=>{let c=!0;return g(!0),ae().then(f=>{c&&d(f)}).catch(()=>{c&&a(b.loadRolesError)}).finally(()=>{c&&g(!1)}),()=>{c=!1}},[b.loadRolesError]),{roles:C,loading:S,error:n}}const ye=D(({mode:b,entityId:C,parentStructureId:d,permissions:S,onSaved:g,onCancel:n})=>{const a=(S==null?void 0:S.canEditUsers)??!1,{roles:c,loading:f}=le(),{values:u,errors:s,touched:h,loading:U,setValue:p,onBlur:v,canSubmit:j,submit:q,isCompanyAdmin:N,generalError:x}=te({mode:b,entityId:C,parentStructureId:d,onSaved:g}),[I,V]=m(!1),i=L({addUser:"Company.CompanyStructure.shared.titles.addUser",editUser:"Company.CompanyStructure.shared.titles.editUser",jobTitle:"Company.CompanyStructure.shared.fields.jobTitle",userRole:"Company.CompanyStructure.shared.fields.userRole",firstName:"Company.CompanyStructure.shared.fields.firstName",lastName:"Company.CompanyStructure.shared.fields.lastName",email:"Company.CompanyStructure.shared.fields.email",workPhoneNumber:"Company.CompanyStructure.shared.fields.workPhoneNumber",status:"Company.CompanyStructure.shared.fields.status",selectRole:"Company.CompanyStructure.shared.options.selectRole",active:"Company.CompanyStructure.shared.options.active",inactive:"Company.CompanyStructure.shared.options.inactive",companyAdministrator:"Company.CompanyStructure.shared.options.companyAdministrator",save:"Company.CompanyStructure.shared.buttons.save",cancel:"Company.CompanyStructure.shared.buttons.cancel"});return B("div",{children:[t("h3",{className:"acm-structure-panel__title",children:b==="add"?i.addUser:i.editUser}),B(J,{variant:"secondary",className:`company-user-form__card ${I?"is-working":""}`,children:[x?t(K,{className:"company-user-form__notification",type:"error",variant:"secondary",heading:x}):null,I?t("div",{className:"company-user-form__overlay","aria-live":"polite",children:t(Q,{size:"small"})}):null,U||f?t(re,{}):B("div",{className:"company-user-form__content",children:[t(T,{label:i.jobTitle,required:!0,className:"acm-structure-panel__field",error:h.jobTitle&&s.jobTitle?s.jobTitle:void 0,children:t(A,{name:"job_title",type:"text",value:u.jobTitle||"",onValue:r=>p("jobTitle",r),onBlur:()=>v("jobTitle"),variant:"primary",size:"medium"})}),t(T,{label:i.userRole,required:!0,className:"acm-structure-panel__field",error:!N&&h.roleId&&s.roleId?s.roleId:void 0,disabled:N,children:N?t(P,{name:"role",value:"MA==",options:[{value:"MA==",text:i.companyAdministrator}]}):t(P,{name:"role",value:u.roleId||"placeholder",onChange:r=>{var E,_;return p("roleId",String(((E=r==null?void 0:r.target)==null?void 0:E.value)==="placeholder"?"":((_=r==null?void 0:r.target)==null?void 0:_.value)??""))},options:[{value:"placeholder",text:i.selectRole,disabled:!0},...c.map(r=>({value:r.id,text:r.name}))]})}),t(T,{label:i.firstName,required:!0,className:"acm-structure-panel__field",error:h.firstName&&s.firstName?s.firstName:void 0,children:t(A,{name:"first_name",type:"text",value:u.firstName,onValue:r=>p("firstName",r),onBlur:()=>v("firstName"),variant:"primary",size:"medium"})}),t(T,{label:i.lastName,required:!0,className:"acm-structure-panel__field",error:h.lastName&&s.lastName?s.lastName:void 0,children:t(A,{name:"last_name",type:"text",value:u.lastName,onValue:r=>p("lastName",r),onBlur:()=>v("lastName"),variant:"primary",size:"medium"})}),t(T,{label:i.email,required:!0,className:"acm-structure-panel__field",error:h.email&&s.email?s.email:void 0,children:t(A,{name:"email",type:"email",value:u.email,onValue:r=>p("email",r),onBlur:()=>void v("email"),placeholder:"jdoe@example.com",variant:"primary",size:"medium"})}),t(T,{label:i.workPhoneNumber,required:!0,className:"acm-structure-panel__field",error:h.telephone&&s.telephone?s.telephone:void 0,children:t(A,{name:"telephone",type:"text",value:u.telephone||"",onValue:r=>p("telephone",r),onBlur:()=>v("telephone"),variant:"primary",size:"medium"})}),t(T,{label:i.status,className:"acm-structure-panel__field",disabled:N||!a,children:t(P,{name:"status",value:u.status,onChange:r=>{var E;return p("status",String(((E=r==null?void 0:r.target)==null?void 0:E.value)??"ACTIVE"))},options:[{value:"ACTIVE",text:i.active},{value:"INACTIVE",text:i.inactive}]})})]})]}),U||f?null:B("div",{className:"acm-structure-modal__actions",children:[t(F,{type:"button",variant:"primary",disabled:!j||I,onClick:async()=>{if(!I){V(!0);try{await q()}finally{V(!1)}}},children:i.save}),t(F,{type:"button",variant:"secondary",disabled:I,onClick:n,children:i.cancel})]})]})});export{ye as C};
3
+ import{jsxs as B,jsx as t}from"@dropins/tools/preact-jsx-runtime.js";import{memo as D}from"@dropins/tools/preact-compat.js";import{useState as m,useEffect as M,useMemo as H}from"@dropins/tools/preact-hooks.js";import{Card as J,InLineAlert as K,ProgressSpinner as Q,Field as T,Input as A,Picker as P,Button as F}from"@dropins/tools/components.js";import{C as W}from"./useInLineAlert.js";import{i as X}from"./company-permissions.js";import{g as Y,c as Z,u as ee,i as ae,a as re}from"./updateCompanyUser.js";import{useText as L}from"@dropins/tools/i18n.js";function te(b){const{mode:C,entityId:d,parentStructureId:S,onSaved:g}=b,n=L({firstNameRequired:"Company.CompanyStructure.shared.validation.firstNameRequired",lastNameRequired:"Company.CompanyStructure.shared.validation.lastNameRequired",emailRequired:"Company.CompanyStructure.shared.validation.emailRequired",emailInvalid:"Company.CompanyStructure.shared.validation.emailInvalid",jobTitleRequired:"Company.CompanyStructure.shared.validation.jobTitleRequired",workPhoneRequired:"Company.CompanyStructure.shared.validation.workPhoneRequired",selectRole:"Company.CompanyStructure.shared.validation.selectRole",createUserError:"Company.CompanyStructure.messages.createUserError",saveUserError:"Company.CompanyStructure.messages.saveUserError"}),[a,c]=m({firstName:"",lastName:"",email:"",jobTitle:"",telephone:"",roleId:"",status:"ACTIVE"}),[f,u]=m({}),[s,h]=m({}),[U,p]=m(!1),[v,j]=m(null),[q,N]=m(null),[x,I]=m(""),[V,i]=m(""),[r,E]=m(!1);M(()=>{C!=="edit"||!d||(p(!0),Y(d).then(e=>{var o;if(!e)return;const l=e.email||"";c(R=>({...R,firstName:e.firstName||"",lastName:e.lastName||"",email:l,jobTitle:e.jobTitle||"",telephone:e.telephone||"",status:e.status||"ACTIVE"})),i(l),(o=e==null?void 0:e.role)!=null&&o.id&&c(R=>({...R,roleId:e.role.id})),E((e==null?void 0:e.isCompanyAdmin)??!1)}).finally(()=>p(!1)))},[C,d]);const _=e=>/.+@.+\..+/.test(e),z=(e,l)=>e==="firstName"?l.trim()?null:n.firstNameRequired:e==="lastName"?l.trim()?null:n.lastNameRequired:e==="email"?l.trim()?_(l.trim())?null:n.emailInvalid:n.emailRequired:e==="jobTitle"?l.trim()?null:n.jobTitleRequired:e==="telephone"?l.trim()?null:n.workPhoneRequired:e==="roleId"?l?null:n.selectRole:null,$=(e,l)=>{c(o=>({...o,[e]:l})),f[e]&&u(o=>({...o,[e]:""})),e==="email"&&N(null),v&&j(null)},O=async e=>{h(o=>({...o,[e]:!0}));const l=z(e,String(a[e]??""));if(l&&u(o=>({...o,[e]:l})),e==="email"){const o=(a.email||"").trim();if(C==="edit"&&o.toLowerCase()===(V||"").trim().toLowerCase()){N(null);return}if(_(o)&&o!==x){const R=await ae(o);I(o),N(R),R===!1&&u(w=>({...w,email:"A user with this email address is already a member of your company."}))}}},G=H(()=>!!a.roleId&&!!(a.firstName||"").trim()&&!!(a.lastName||"").trim()&&!!(a.jobTitle||"").trim()&&!!(a.telephone||"").trim()&&_((a.email||"").trim())&&!f.email&&q!==!1,[a,f,q]);return{values:a,errors:f,touched:s,loading:U,setValue:$,onBlur:O,canSubmit:G,submit:async()=>{const e=["firstName","lastName","email","jobTitle","telephone","roleId"],l={};for(const y of e){const k=z(y,String(a[y]??""));k&&(l[y]=k)}if(u(l),h({firstName:!0,lastName:!0,email:!0,jobTitle:!0,telephone:!0,roleId:!0}),Object.keys(l).length||q===!1)return;const o=`${a.firstName||""} ${a.lastName||""}`.trim()||a.email||"",w=r||X({id:a.roleId})?"ACTIVE":a.status;try{if(C==="add"){const y=await Z({email:a.email||"",firstName:a.firstName||"",lastName:a.lastName||"",jobTitle:a.jobTitle||"",telephone:a.telephone||"",roleId:a.roleId,status:w,targetId:S??null});if(!y){j(n.createUserError);return}g({label:o,structureId:y.structureId,entityId:y.id,type:"user"})}else d&&(await ee({id:d,email:a.email||"",firstName:a.firstName||"",lastName:a.lastName||"",jobTitle:a.jobTitle||"",telephone:a.telephone||"",status:w,roleId:a.roleId}),g({label:o,entityId:d,type:"user"}))}catch(y){const k=y instanceof Error?y.message:n.saveUserError;j(k)}},isCompanyAdmin:r,generalError:v}}function le(){const b=L({loadRolesError:"Company.CompanyStructure.messages.loadRolesError"}),[C,d]=m([]),[S,g]=m(!0),[n,a]=m(null);return M(()=>{let c=!0;return g(!0),re().then(f=>{c&&d(f)}).catch(()=>{c&&a(b.loadRolesError)}).finally(()=>{c&&g(!1)}),()=>{c=!1}},[b.loadRolesError]),{roles:C,loading:S,error:n}}const ye=D(({mode:b,entityId:C,parentStructureId:d,permissions:S,onSaved:g,onCancel:n})=>{const a=(S==null?void 0:S.canEditUsers)??!1,{roles:c,loading:f}=le(),{values:u,errors:s,touched:h,loading:U,setValue:p,onBlur:v,canSubmit:j,submit:q,isCompanyAdmin:N,generalError:x}=te({mode:b,entityId:C,parentStructureId:d,onSaved:g}),[I,V]=m(!1),i=L({addUser:"Company.CompanyStructure.shared.titles.addUser",editUser:"Company.CompanyStructure.shared.titles.editUser",jobTitle:"Company.CompanyStructure.shared.fields.jobTitle",userRole:"Company.CompanyStructure.shared.fields.userRole",firstName:"Company.CompanyStructure.shared.fields.firstName",lastName:"Company.CompanyStructure.shared.fields.lastName",email:"Company.CompanyStructure.shared.fields.email",workPhoneNumber:"Company.CompanyStructure.shared.fields.workPhoneNumber",status:"Company.CompanyStructure.shared.fields.status",selectRole:"Company.CompanyStructure.shared.options.selectRole",active:"Company.CompanyStructure.shared.options.active",inactive:"Company.CompanyStructure.shared.options.inactive",companyAdministrator:"Company.CompanyStructure.shared.options.companyAdministrator",save:"Company.CompanyStructure.shared.buttons.save",cancel:"Company.CompanyStructure.shared.buttons.cancel"});return B("div",{children:[t("h3",{className:"acm-structure-panel__title",children:b==="add"?i.addUser:i.editUser}),B(J,{variant:"secondary",className:`company-user-form__card ${I?"is-working":""}`,children:[x?t(K,{className:"company-user-form__notification",type:"error",variant:"secondary",heading:x}):null,I?t("div",{className:"company-user-form__overlay","aria-live":"polite",children:t(Q,{size:"small"})}):null,U||f?t(W,{}):B("div",{className:"company-user-form__content",children:[t(T,{label:i.jobTitle,required:!0,className:"acm-structure-panel__field",error:h.jobTitle&&s.jobTitle?s.jobTitle:void 0,children:t(A,{name:"job_title",type:"text",value:u.jobTitle||"",onValue:r=>p("jobTitle",r),onBlur:()=>v("jobTitle"),variant:"primary",size:"medium"})}),t(T,{label:i.userRole,required:!0,className:"acm-structure-panel__field",error:!N&&h.roleId&&s.roleId?s.roleId:void 0,disabled:N,children:N?t(P,{name:"role",value:"MA==",options:[{value:"MA==",text:i.companyAdministrator}]}):t(P,{name:"role",value:u.roleId||"placeholder",onChange:r=>{var E,_;return p("roleId",String(((E=r==null?void 0:r.target)==null?void 0:E.value)==="placeholder"?"":((_=r==null?void 0:r.target)==null?void 0:_.value)??""))},options:[{value:"placeholder",text:i.selectRole,disabled:!0},...c.map(r=>({value:r.id,text:r.name}))]})}),t(T,{label:i.firstName,required:!0,className:"acm-structure-panel__field",error:h.firstName&&s.firstName?s.firstName:void 0,children:t(A,{name:"first_name",type:"text",value:u.firstName,onValue:r=>p("firstName",r),onBlur:()=>v("firstName"),variant:"primary",size:"medium"})}),t(T,{label:i.lastName,required:!0,className:"acm-structure-panel__field",error:h.lastName&&s.lastName?s.lastName:void 0,children:t(A,{name:"last_name",type:"text",value:u.lastName,onValue:r=>p("lastName",r),onBlur:()=>v("lastName"),variant:"primary",size:"medium"})}),t(T,{label:i.email,required:!0,className:"acm-structure-panel__field",error:h.email&&s.email?s.email:void 0,children:t(A,{name:"email",type:"email",value:u.email,onValue:r=>p("email",r),onBlur:()=>void v("email"),placeholder:"jdoe@example.com",variant:"primary",size:"medium"})}),t(T,{label:i.workPhoneNumber,required:!0,className:"acm-structure-panel__field",error:h.telephone&&s.telephone?s.telephone:void 0,children:t(A,{name:"telephone",type:"text",value:u.telephone||"",onValue:r=>p("telephone",r),onBlur:()=>v("telephone"),variant:"primary",size:"medium"})}),t(T,{label:i.status,className:"acm-structure-panel__field",disabled:N||!a,children:t(P,{name:"status",value:u.status,onChange:r=>{var E;return p("status",String(((E=r==null?void 0:r.target)==null?void 0:E.value)??"ACTIVE"))},options:[{value:"ACTIVE",text:i.active},{value:"INACTIVE",text:i.inactive}]})})]})]}),U||f?null:B("div",{className:"acm-structure-modal__actions",children:[t(F,{type:"button",variant:"primary",disabled:!j||I,onClick:async()=>{if(!I){V(!0);try{await q()}finally{V(!1)}}},children:i.save}),t(F,{type:"button",variant:"secondary",disabled:I,onClick:n,children:i.cancel})]})]})});export{ye as C};
4
4
  //# sourceMappingURL=CompanyUserForm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CompanyUserForm.js","sources":["/@dropins/storefront-company-management/src/hooks/useCompanyUserForm.ts","/@dropins/storefront-company-management/src/hooks/useCompanyRoles.ts","/@dropins/storefront-company-management/src/components/CompanyUserForm/CompanyUserForm.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\nimport { useEffect, useMemo, useState } from 'preact/hooks';\nimport { createCompanyUser, getCompanyUser, isCompanyUserEmailAvailable, updateCompanyUser } from '@/company-management/api';\nimport { isCompanyAdministrator } from '@/company-management/lib';\nimport { CompanyUserModel } from '@/company-management/data/models';\nimport { useText } from '@adobe-commerce/elsie/i18n';\n\nexport type UserStatus = 'ACTIVE' | 'INACTIVE';\n\n\nexport function useCompanyUserForm(opts: {\n mode: 'add' | 'edit';\n entityId?: string;\n parentStructureId?: string | null;\n onSaved: (result: { label: string; structureId?: string; entityId?: string; type: 'user' }) => void;\n}) {\n const { mode, entityId, parentStructureId, onSaved } = opts;\n \n const translations = useText({\n firstNameRequired: 'Company.CompanyStructure.shared.validation.firstNameRequired',\n lastNameRequired: 'Company.CompanyStructure.shared.validation.lastNameRequired',\n emailRequired: 'Company.CompanyStructure.shared.validation.emailRequired',\n emailInvalid: 'Company.CompanyStructure.shared.validation.emailInvalid',\n jobTitleRequired: 'Company.CompanyStructure.shared.validation.jobTitleRequired',\n workPhoneRequired: 'Company.CompanyStructure.shared.validation.workPhoneRequired',\n selectRole: 'Company.CompanyStructure.shared.validation.selectRole',\n createUserError: 'Company.CompanyStructure.messages.createUserError',\n saveUserError: 'Company.CompanyStructure.messages.saveUserError',\n });\n const [values, setValues] = useState<Partial<CompanyUserModel> & { roleId: string; status: UserStatus }>({ \n firstName: '', \n lastName: '', \n email: '', \n jobTitle: '', \n telephone: '', \n roleId: '', \n status: 'ACTIVE' \n });\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n const [loading, setLoading] = useState(false);\n const [generalError, setGeneralError] = useState<string | null>(null);\n const [emailAvailable, setEmailAvailable] = useState<boolean | null>(null);\n const [emailChecked, setEmailChecked] = useState<string>('');\n const [originalEmail, setOriginalEmail] = useState<string>('');\n const [isCompanyAdmin, setIsCompanyAdmin] = useState<boolean>(false);\n\n useEffect(() => {\n if (mode !== 'edit' || !entityId) return;\n setLoading(true);\n void getCompanyUser(entityId).then((u) => {\n if (!u) return;\n const loadedEmail = u.email || '';\n setValues((v) => ({ ...v, firstName: u.firstName || '', lastName: u.lastName || '', email: loadedEmail, jobTitle: u.jobTitle || '', telephone: u.telephone || '', status: (u.status || 'ACTIVE') as UserStatus }));\n setOriginalEmail(loadedEmail);\n if (u?.role?.id) setValues((v) => ({ ...v, roleId: u.role!.id }));\n setIsCompanyAdmin(u?.isCompanyAdmin ?? false);\n }).finally(() => setLoading(false));\n }, [mode, entityId]);\n\n const isEmailValid = (value: string): boolean => /.+@.+\\..+/.test(value);\n const validateField = (field: keyof CompanyUserModel | 'roleId' | 'status', value: string): string | null => {\n if (field === 'firstName') return value.trim() ? null : translations.firstNameRequired;\n if (field === 'lastName') return value.trim() ? null : translations.lastNameRequired;\n if (field === 'email') {\n if (!value.trim()) return translations.emailRequired;\n return isEmailValid(value.trim()) ? null : translations.emailInvalid;\n }\n if (field === 'jobTitle') return value.trim() ? null : translations.jobTitleRequired;\n if (field === 'telephone') return value.trim() ? null : translations.workPhoneRequired;\n if (field === 'roleId') return value ? null : translations.selectRole;\n return null;\n };\n\n const setValue = (field: keyof CompanyUserModel | 'roleId' | 'status', value: string) => {\n setValues((v) => ({ ...v, [field]: value }));\n if (errors[field]) setErrors((e) => ({ ...e, [field]: '' }));\n if (field === 'email') setEmailAvailable(null);\n if (generalError) setGeneralError(null);\n };\n\n const onBlur = async (field: keyof CompanyUserModel | 'roleId' | 'status') => {\n setTouched((t) => ({ ...t, [field]: true }));\n const err = validateField(field, String(values[field] ?? ''));\n if (err) setErrors((p) => ({ ...p, [field]: err }));\n if (field === 'email') {\n const trimmed = (values.email || '').trim();\n if (mode === 'edit' && trimmed.toLowerCase() === (originalEmail || '').trim().toLowerCase()) {\n setEmailAvailable(null);\n return;\n }\n if (isEmailValid(trimmed) && trimmed !== emailChecked) {\n const available = await isCompanyUserEmailAvailable(trimmed);\n setEmailChecked(trimmed);\n setEmailAvailable(available);\n if (available === false) setErrors((p) => ({ ...p, email: 'A user with this email address is already a member of your company.' }));\n }\n }\n };\n\n const canSubmit = useMemo(() => {\n return !!values.roleId && !!(values.firstName || '').trim() && !!(values.lastName || '').trim() && !!(values.jobTitle || '').trim() && !!(values.telephone || '').trim() && isEmailValid((values.email || '').trim()) && !errors.email && emailAvailable !== false;\n }, [values, errors, emailAvailable]);\n\n const submit = async () => {\n const fields: (keyof CompanyUserModel | 'roleId')[] = ['firstName', 'lastName', 'email', 'jobTitle', 'telephone', 'roleId'];\n const next: Record<string, string> = {};\n for (const f of fields) {\n const err = validateField(f, String(values[f] ?? ''));\n if (err) next[f as string] = err;\n }\n setErrors(next);\n setTouched({ firstName: true, lastName: true, email: true, jobTitle: true, telephone: true, roleId: true });\n if (Object.keys(next).length || emailAvailable === false) return;\n\n const label = `${values.firstName || ''} ${values.lastName || ''}`.trim() || values.email || '';\n const adminEffective = isCompanyAdmin || isCompanyAdministrator({ id: values.roleId });\n const effectiveStatus = adminEffective ? 'ACTIVE' : values.status;\n try {\n if (mode === 'add') {\n const res = await createCompanyUser({ email: values.email || '', firstName: values.firstName || '', lastName: values.lastName || '', jobTitle: values.jobTitle || '', telephone: values.telephone || '', roleId: values.roleId, status: effectiveStatus, targetId: parentStructureId ?? null });\n if (!res) {\n setGeneralError(translations.createUserError);\n return;\n }\n onSaved({ label, structureId: res.structureId, entityId: res.id, type: 'user' });\n } else if (entityId) {\n await updateCompanyUser({ id: entityId, email: values.email || '', firstName: values.firstName || '', lastName: values.lastName || '', jobTitle: values.jobTitle || '', telephone: values.telephone || '', status: effectiveStatus, roleId: values.roleId });\n onSaved({ label, entityId, type: 'user' });\n }\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : translations.saveUserError;\n setGeneralError(errorMessage);\n }\n };\n\n return { values, errors, touched, loading, setValue, onBlur, canSubmit, submit, isCompanyAdmin, generalError };\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\nimport { useEffect, useState } from 'preact/hooks';\nimport { getCompanyRoles } from '@/company-management/api';\nimport { CompanyRoleModel } from '@/company-management/data/models';\nimport { useText } from '@adobe-commerce/elsie/i18n';\n\nexport function useCompanyRoles() {\n const translations = useText({\n loadRolesError: 'Company.CompanyStructure.messages.loadRolesError',\n });\n \n const [roles, setRoles] = useState<CompanyRoleModel[]>([]);\n const [loading, setLoading] = useState<boolean>(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let isMounted = true;\n setLoading(true);\n void getCompanyRoles()\n .then((items) => { if (isMounted) setRoles(items); })\n .catch(() => { if (isMounted) setError(translations.loadRolesError); })\n .finally(() => { if (isMounted) setLoading(false); });\n return () => { isMounted = false; };\n }, [translations.loadRolesError]);\n\n return { roles, loading, error };\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\nimport { FunctionComponent } from 'preact';\nimport { memo } from 'preact/compat';\nimport { useState } from 'preact/hooks';\nimport { Field, Input, Button, Card, Picker, ProgressSpinner, InLineAlert } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { CompanyUserFormLoader } from '@/company-management/components/CompanyLoaders';\nimport { useCompanyUserForm } from '@/company-management/hooks/useCompanyUserForm';\nimport { useCompanyRoles } from '@/company-management/hooks/useCompanyRoles';\nimport { CompanyUserFormProps } from '@/company-management/types/companyForm.types';\nimport './CompanyUserForm.css';\n\n/**\n * CompanyUserForm component for creating and editing company users\n * Provides form fields for user information including name, email, role, and status\n */\nexport const CompanyUserForm: FunctionComponent<CompanyUserFormProps> = memo(({ mode, entityId, parentStructureId, permissions, onSaved, onCancel }) => {\n const canEditUsers = permissions?.canEditUsers ?? false;\n const { roles, loading: rolesLoading } = useCompanyRoles();\n const { values, errors, touched, loading, setValue, onBlur, canSubmit, submit, isCompanyAdmin, generalError } = useCompanyUserForm({ mode, entityId, parentStructureId, onSaved });\n const [saving, setSaving] = useState(false);\n \n const translations = useText({\n addUser: 'Company.CompanyStructure.shared.titles.addUser',\n editUser: 'Company.CompanyStructure.shared.titles.editUser',\n jobTitle: 'Company.CompanyStructure.shared.fields.jobTitle',\n userRole: 'Company.CompanyStructure.shared.fields.userRole',\n firstName: 'Company.CompanyStructure.shared.fields.firstName',\n lastName: 'Company.CompanyStructure.shared.fields.lastName',\n email: 'Company.CompanyStructure.shared.fields.email',\n workPhoneNumber: 'Company.CompanyStructure.shared.fields.workPhoneNumber',\n status: 'Company.CompanyStructure.shared.fields.status',\n selectRole: 'Company.CompanyStructure.shared.options.selectRole',\n active: 'Company.CompanyStructure.shared.options.active',\n inactive: 'Company.CompanyStructure.shared.options.inactive',\n companyAdministrator: 'Company.CompanyStructure.shared.options.companyAdministrator',\n save: 'Company.CompanyStructure.shared.buttons.save',\n cancel: 'Company.CompanyStructure.shared.buttons.cancel',\n });\n\n return (\n <div>\n <h3 className=\"acm-structure-panel__title\">{mode === 'add' ? translations.addUser : translations.editUser}</h3>\n <Card variant=\"secondary\" className={`company-user-form__card ${saving ? 'is-working' : ''}`}>\n {generalError ? (\n <InLineAlert \n className=\"company-user-form__notification\" \n type=\"error\" \n variant=\"secondary\" \n heading={generalError} \n />\n ) : null}\n {saving ? <div className=\"company-user-form__overlay\" aria-live=\"polite\"><ProgressSpinner size=\"small\" /></div> : null}\n {loading || rolesLoading ? (\n <CompanyUserFormLoader />\n ) : (\n <div className=\"company-user-form__content\">\n\n <Field label={translations.jobTitle} required className=\"acm-structure-panel__field\" error={touched.jobTitle && errors.jobTitle ? errors.jobTitle : undefined}>\n <Input name=\"job_title\" type=\"text\" value={values.jobTitle || ''} onValue={(v: string) => setValue('jobTitle', v)} onBlur={() => onBlur('jobTitle')} variant=\"primary\" size=\"medium\" />\n </Field>\n\n <Field label={translations.userRole} required className=\"acm-structure-panel__field\" error={!isCompanyAdmin && touched.roleId && errors.roleId ? errors.roleId : undefined} disabled={isCompanyAdmin}>\n {isCompanyAdmin ? (\n <Picker name=\"role\" value={'MA=='} options={[{ value: 'MA==', text: translations.companyAdministrator }]} />\n ) : (\n <Picker\n name=\"role\"\n value={values.roleId || 'placeholder'}\n onChange={(e: any) => setValue('roleId', String(e?.target?.value === 'placeholder' ? '' : e?.target?.value ?? ''))}\n options={[{ value: 'placeholder', text: translations.selectRole, disabled: true }, ...roles.map((r) => ({ value: r.id, text: r.name }))]}\n />\n )}\n </Field>\n\n <Field label={translations.firstName} required className=\"acm-structure-panel__field\" error={touched.firstName && errors.firstName ? errors.firstName : undefined}>\n <Input name=\"first_name\" type=\"text\" value={values.firstName} onValue={(v: string) => setValue('firstName', v)} onBlur={() => onBlur('firstName')} variant=\"primary\" size=\"medium\" />\n </Field>\n\n <Field label={translations.lastName} required className=\"acm-structure-panel__field\" error={touched.lastName && errors.lastName ? errors.lastName : undefined}>\n <Input name=\"last_name\" type=\"text\" value={values.lastName} onValue={(v: string) => setValue('lastName', v)} onBlur={() => onBlur('lastName')} variant=\"primary\" size=\"medium\" />\n </Field>\n\n <Field label={translations.email} required className=\"acm-structure-panel__field\" error={touched.email && errors.email ? errors.email : undefined}>\n <Input name=\"email\" type=\"email\" value={values.email} onValue={(v: string) => setValue('email', v)} onBlur={() => void onBlur('email')} placeholder=\"jdoe@example.com\" variant=\"primary\" size=\"medium\" />\n </Field>\n\n <Field label={translations.workPhoneNumber} required className=\"acm-structure-panel__field\" error={touched.telephone && errors.telephone ? errors.telephone : undefined}>\n <Input name=\"telephone\" type=\"text\" value={values.telephone || ''} onValue={(v: string) => setValue('telephone', v)} onBlur={() => onBlur('telephone')} variant=\"primary\" size=\"medium\" />\n </Field>\n\n <Field label={translations.status} className=\"acm-structure-panel__field\" disabled={isCompanyAdmin || !canEditUsers}>\n <Picker\n name=\"status\"\n value={values.status}\n onChange={(e: any) => setValue('status', String(e?.target?.value ?? 'ACTIVE'))}\n options={[{ value: 'ACTIVE', text: translations.active }, { value: 'INACTIVE', text: translations.inactive }]}\n />\n </Field>\n </div>\n )}\n </Card>\n {!(loading || rolesLoading) ? (\n <div className=\"acm-structure-modal__actions\">\n <Button type=\"button\" variant=\"primary\" disabled={!canSubmit || saving} onClick={async () => { if (saving) return; setSaving(true); try { await submit(); } finally { setSaving(false); } }}>\n {translations.save}\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n disabled={saving}\n onClick={onCancel}\n >\n {translations.cancel}\n </Button>\n </div>\n ) : null}\n </div>\n );\n});\n\nexport default CompanyUserForm;\n"],"names":["useCompanyUserForm","opts","mode","entityId","parentStructureId","onSaved","translations","useText","values","setValues","useState","errors","setErrors","touched","setTouched","loading","setLoading","generalError","setGeneralError","emailAvailable","setEmailAvailable","emailChecked","setEmailChecked","originalEmail","setOriginalEmail","isCompanyAdmin","setIsCompanyAdmin","useEffect","getCompanyUser","u","loadedEmail","v","_a","isEmailValid","value","validateField","field","setValue","e","onBlur","t","err","p","trimmed","available","isCompanyUserEmailAvailable","canSubmit","useMemo","fields","next","f","label","effectiveStatus","isCompanyAdministrator","res","createCompanyUser","updateCompanyUser","error","errorMessage","useCompanyRoles","roles","setRoles","setError","isMounted","getCompanyRoles","items","CompanyUserForm","memo","permissions","onCancel","canEditUsers","rolesLoading","submit","saving","setSaving","jsx","jsxs","Card","InLineAlert","ProgressSpinner","CompanyUserFormLoader","Field","Input","Picker","_b","Button"],"mappings":"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"}
1
+ {"version":3,"file":"CompanyUserForm.js","sources":["/@dropins/storefront-company-management/src/hooks/useCompanyUserForm.ts","/@dropins/storefront-company-management/src/hooks/useCompanyRoles.ts","/@dropins/storefront-company-management/src/components/CompanyUserForm/CompanyUserForm.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\nimport { useEffect, useMemo, useState } from 'preact/hooks';\nimport { createCompanyUser, getCompanyUser, isCompanyUserEmailAvailable, updateCompanyUser } from '@/company-management/api';\nimport { isCompanyAdministrator } from '@/company-management/lib';\nimport { CompanyUserModel } from '@/company-management/data/models';\nimport { useText } from '@adobe-commerce/elsie/i18n';\n\nexport type UserStatus = 'ACTIVE' | 'INACTIVE';\n\n\nexport function useCompanyUserForm(opts: {\n mode: 'add' | 'edit';\n entityId?: string;\n parentStructureId?: string | null;\n onSaved: (result: { label: string; structureId?: string; entityId?: string; type: 'user' }) => void;\n}) {\n const { mode, entityId, parentStructureId, onSaved } = opts;\n \n const translations = useText({\n firstNameRequired: 'Company.CompanyStructure.shared.validation.firstNameRequired',\n lastNameRequired: 'Company.CompanyStructure.shared.validation.lastNameRequired',\n emailRequired: 'Company.CompanyStructure.shared.validation.emailRequired',\n emailInvalid: 'Company.CompanyStructure.shared.validation.emailInvalid',\n jobTitleRequired: 'Company.CompanyStructure.shared.validation.jobTitleRequired',\n workPhoneRequired: 'Company.CompanyStructure.shared.validation.workPhoneRequired',\n selectRole: 'Company.CompanyStructure.shared.validation.selectRole',\n createUserError: 'Company.CompanyStructure.messages.createUserError',\n saveUserError: 'Company.CompanyStructure.messages.saveUserError',\n });\n const [values, setValues] = useState<Partial<CompanyUserModel> & { roleId: string; status: UserStatus }>({ \n firstName: '', \n lastName: '', \n email: '', \n jobTitle: '', \n telephone: '', \n roleId: '', \n status: 'ACTIVE' \n });\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n const [loading, setLoading] = useState(false);\n const [generalError, setGeneralError] = useState<string | null>(null);\n const [emailAvailable, setEmailAvailable] = useState<boolean | null>(null);\n const [emailChecked, setEmailChecked] = useState<string>('');\n const [originalEmail, setOriginalEmail] = useState<string>('');\n const [isCompanyAdmin, setIsCompanyAdmin] = useState<boolean>(false);\n\n useEffect(() => {\n if (mode !== 'edit' || !entityId) return;\n setLoading(true);\n void getCompanyUser(entityId).then((u) => {\n if (!u) return;\n const loadedEmail = u.email || '';\n setValues((v) => ({ ...v, firstName: u.firstName || '', lastName: u.lastName || '', email: loadedEmail, jobTitle: u.jobTitle || '', telephone: u.telephone || '', status: (u.status || 'ACTIVE') as UserStatus }));\n setOriginalEmail(loadedEmail);\n if (u?.role?.id) setValues((v) => ({ ...v, roleId: u.role!.id }));\n setIsCompanyAdmin(u?.isCompanyAdmin ?? false);\n }).finally(() => setLoading(false));\n }, [mode, entityId]);\n\n const isEmailValid = (value: string): boolean => /.+@.+\\..+/.test(value);\n const validateField = (field: keyof CompanyUserModel | 'roleId' | 'status', value: string): string | null => {\n if (field === 'firstName') return value.trim() ? null : translations.firstNameRequired;\n if (field === 'lastName') return value.trim() ? null : translations.lastNameRequired;\n if (field === 'email') {\n if (!value.trim()) return translations.emailRequired;\n return isEmailValid(value.trim()) ? null : translations.emailInvalid;\n }\n if (field === 'jobTitle') return value.trim() ? null : translations.jobTitleRequired;\n if (field === 'telephone') return value.trim() ? null : translations.workPhoneRequired;\n if (field === 'roleId') return value ? null : translations.selectRole;\n return null;\n };\n\n const setValue = (field: keyof CompanyUserModel | 'roleId' | 'status', value: string) => {\n setValues((v) => ({ ...v, [field]: value }));\n if (errors[field]) setErrors((e) => ({ ...e, [field]: '' }));\n if (field === 'email') setEmailAvailable(null);\n if (generalError) setGeneralError(null);\n };\n\n const onBlur = async (field: keyof CompanyUserModel | 'roleId' | 'status') => {\n setTouched((t) => ({ ...t, [field]: true }));\n const err = validateField(field, String(values[field] ?? ''));\n if (err) setErrors((p) => ({ ...p, [field]: err }));\n if (field === 'email') {\n const trimmed = (values.email || '').trim();\n if (mode === 'edit' && trimmed.toLowerCase() === (originalEmail || '').trim().toLowerCase()) {\n setEmailAvailable(null);\n return;\n }\n if (isEmailValid(trimmed) && trimmed !== emailChecked) {\n const available = await isCompanyUserEmailAvailable(trimmed);\n setEmailChecked(trimmed);\n setEmailAvailable(available);\n if (available === false) setErrors((p) => ({ ...p, email: 'A user with this email address is already a member of your company.' }));\n }\n }\n };\n\n const canSubmit = useMemo(() => {\n return !!values.roleId && !!(values.firstName || '').trim() && !!(values.lastName || '').trim() && !!(values.jobTitle || '').trim() && !!(values.telephone || '').trim() && isEmailValid((values.email || '').trim()) && !errors.email && emailAvailable !== false;\n }, [values, errors, emailAvailable]);\n\n const submit = async () => {\n const fields: (keyof CompanyUserModel | 'roleId')[] = ['firstName', 'lastName', 'email', 'jobTitle', 'telephone', 'roleId'];\n const next: Record<string, string> = {};\n for (const f of fields) {\n const err = validateField(f, String(values[f] ?? ''));\n if (err) next[f as string] = err;\n }\n setErrors(next);\n setTouched({ firstName: true, lastName: true, email: true, jobTitle: true, telephone: true, roleId: true });\n if (Object.keys(next).length || emailAvailable === false) return;\n\n const label = `${values.firstName || ''} ${values.lastName || ''}`.trim() || values.email || '';\n const adminEffective = isCompanyAdmin || isCompanyAdministrator({ id: values.roleId });\n const effectiveStatus = adminEffective ? 'ACTIVE' : values.status;\n try {\n if (mode === 'add') {\n const res = await createCompanyUser({ email: values.email || '', firstName: values.firstName || '', lastName: values.lastName || '', jobTitle: values.jobTitle || '', telephone: values.telephone || '', roleId: values.roleId, status: effectiveStatus, targetId: parentStructureId ?? null });\n if (!res) {\n setGeneralError(translations.createUserError);\n return;\n }\n onSaved({ label, structureId: res.structureId, entityId: res.id, type: 'user' });\n } else if (entityId) {\n await updateCompanyUser({ id: entityId, email: values.email || '', firstName: values.firstName || '', lastName: values.lastName || '', jobTitle: values.jobTitle || '', telephone: values.telephone || '', status: effectiveStatus, roleId: values.roleId });\n onSaved({ label, entityId, type: 'user' });\n }\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : translations.saveUserError;\n setGeneralError(errorMessage);\n }\n };\n\n return { values, errors, touched, loading, setValue, onBlur, canSubmit, submit, isCompanyAdmin, generalError };\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\nimport { useEffect, useState } from 'preact/hooks';\nimport { getCompanyRoles } from '@/company-management/api';\nimport { CompanyRoleModel } from '@/company-management/data/models';\nimport { useText } from '@adobe-commerce/elsie/i18n';\n\nexport function useCompanyRoles() {\n const translations = useText({\n loadRolesError: 'Company.CompanyStructure.messages.loadRolesError',\n });\n \n const [roles, setRoles] = useState<CompanyRoleModel[]>([]);\n const [loading, setLoading] = useState<boolean>(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let isMounted = true;\n setLoading(true);\n void getCompanyRoles()\n .then((items) => { if (isMounted) setRoles(items); })\n .catch(() => { if (isMounted) setError(translations.loadRolesError); })\n .finally(() => { if (isMounted) setLoading(false); });\n return () => { isMounted = false; };\n }, [translations.loadRolesError]);\n\n return { roles, loading, error };\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\nimport { FunctionComponent } from 'preact';\nimport { memo } from 'preact/compat';\nimport { useState } from 'preact/hooks';\nimport { Field, Input, Button, Card, Picker, ProgressSpinner, InLineAlert } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { CompanyUserFormLoader } from '@/company-management/components/CompanyLoaders';\nimport { useCompanyUserForm } from '@/company-management/hooks/useCompanyUserForm';\nimport { useCompanyRoles } from '@/company-management/hooks/useCompanyRoles';\nimport { CompanyUserFormProps } from '@/company-management/types/companyForm.types';\nimport './CompanyUserForm.css';\n\n/**\n * CompanyUserForm component for creating and editing company users\n * Provides form fields for user information including name, email, role, and status\n */\nexport const CompanyUserForm: FunctionComponent<CompanyUserFormProps> = memo(({ mode, entityId, parentStructureId, permissions, onSaved, onCancel }) => {\n const canEditUsers = permissions?.canEditUsers ?? false;\n const { roles, loading: rolesLoading } = useCompanyRoles();\n const { values, errors, touched, loading, setValue, onBlur, canSubmit, submit, isCompanyAdmin, generalError } = useCompanyUserForm({ mode, entityId, parentStructureId, onSaved });\n const [saving, setSaving] = useState(false);\n \n const translations = useText({\n addUser: 'Company.CompanyStructure.shared.titles.addUser',\n editUser: 'Company.CompanyStructure.shared.titles.editUser',\n jobTitle: 'Company.CompanyStructure.shared.fields.jobTitle',\n userRole: 'Company.CompanyStructure.shared.fields.userRole',\n firstName: 'Company.CompanyStructure.shared.fields.firstName',\n lastName: 'Company.CompanyStructure.shared.fields.lastName',\n email: 'Company.CompanyStructure.shared.fields.email',\n workPhoneNumber: 'Company.CompanyStructure.shared.fields.workPhoneNumber',\n status: 'Company.CompanyStructure.shared.fields.status',\n selectRole: 'Company.CompanyStructure.shared.options.selectRole',\n active: 'Company.CompanyStructure.shared.options.active',\n inactive: 'Company.CompanyStructure.shared.options.inactive',\n companyAdministrator: 'Company.CompanyStructure.shared.options.companyAdministrator',\n save: 'Company.CompanyStructure.shared.buttons.save',\n cancel: 'Company.CompanyStructure.shared.buttons.cancel',\n });\n\n return (\n <div>\n <h3 className=\"acm-structure-panel__title\">{mode === 'add' ? translations.addUser : translations.editUser}</h3>\n <Card variant=\"secondary\" className={`company-user-form__card ${saving ? 'is-working' : ''}`}>\n {generalError ? (\n <InLineAlert \n className=\"company-user-form__notification\" \n type=\"error\" \n variant=\"secondary\" \n heading={generalError} \n />\n ) : null}\n {saving ? <div className=\"company-user-form__overlay\" aria-live=\"polite\"><ProgressSpinner size=\"small\" /></div> : null}\n {loading || rolesLoading ? (\n <CompanyUserFormLoader />\n ) : (\n <div className=\"company-user-form__content\">\n\n <Field label={translations.jobTitle} required className=\"acm-structure-panel__field\" error={touched.jobTitle && errors.jobTitle ? errors.jobTitle : undefined}>\n <Input name=\"job_title\" type=\"text\" value={values.jobTitle || ''} onValue={(v: string) => setValue('jobTitle', v)} onBlur={() => onBlur('jobTitle')} variant=\"primary\" size=\"medium\" />\n </Field>\n\n <Field label={translations.userRole} required className=\"acm-structure-panel__field\" error={!isCompanyAdmin && touched.roleId && errors.roleId ? errors.roleId : undefined} disabled={isCompanyAdmin}>\n {isCompanyAdmin ? (\n <Picker name=\"role\" value={'MA=='} options={[{ value: 'MA==', text: translations.companyAdministrator }]} />\n ) : (\n <Picker\n name=\"role\"\n value={values.roleId || 'placeholder'}\n onChange={(e: any) => setValue('roleId', String(e?.target?.value === 'placeholder' ? '' : e?.target?.value ?? ''))}\n options={[{ value: 'placeholder', text: translations.selectRole, disabled: true }, ...roles.map((r) => ({ value: r.id, text: r.name }))]}\n />\n )}\n </Field>\n\n <Field label={translations.firstName} required className=\"acm-structure-panel__field\" error={touched.firstName && errors.firstName ? errors.firstName : undefined}>\n <Input name=\"first_name\" type=\"text\" value={values.firstName} onValue={(v: string) => setValue('firstName', v)} onBlur={() => onBlur('firstName')} variant=\"primary\" size=\"medium\" />\n </Field>\n\n <Field label={translations.lastName} required className=\"acm-structure-panel__field\" error={touched.lastName && errors.lastName ? errors.lastName : undefined}>\n <Input name=\"last_name\" type=\"text\" value={values.lastName} onValue={(v: string) => setValue('lastName', v)} onBlur={() => onBlur('lastName')} variant=\"primary\" size=\"medium\" />\n </Field>\n\n <Field label={translations.email} required className=\"acm-structure-panel__field\" error={touched.email && errors.email ? errors.email : undefined}>\n <Input name=\"email\" type=\"email\" value={values.email} onValue={(v: string) => setValue('email', v)} onBlur={() => void onBlur('email')} placeholder=\"jdoe@example.com\" variant=\"primary\" size=\"medium\" />\n </Field>\n\n <Field label={translations.workPhoneNumber} required className=\"acm-structure-panel__field\" error={touched.telephone && errors.telephone ? errors.telephone : undefined}>\n <Input name=\"telephone\" type=\"text\" value={values.telephone || ''} onValue={(v: string) => setValue('telephone', v)} onBlur={() => onBlur('telephone')} variant=\"primary\" size=\"medium\" />\n </Field>\n\n <Field label={translations.status} className=\"acm-structure-panel__field\" disabled={isCompanyAdmin || !canEditUsers}>\n <Picker\n name=\"status\"\n value={values.status}\n onChange={(e: any) => setValue('status', String(e?.target?.value ?? 'ACTIVE'))}\n options={[{ value: 'ACTIVE', text: translations.active }, { value: 'INACTIVE', text: translations.inactive }]}\n />\n </Field>\n </div>\n )}\n </Card>\n {!(loading || rolesLoading) ? (\n <div className=\"acm-structure-modal__actions\">\n <Button type=\"button\" variant=\"primary\" disabled={!canSubmit || saving} onClick={async () => { if (saving) return; setSaving(true); try { await submit(); } finally { setSaving(false); } }}>\n {translations.save}\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n disabled={saving}\n onClick={onCancel}\n >\n {translations.cancel}\n </Button>\n </div>\n ) : null}\n </div>\n );\n});\n\nexport default CompanyUserForm;\n"],"names":["useCompanyUserForm","opts","mode","entityId","parentStructureId","onSaved","translations","useText","values","setValues","useState","errors","setErrors","touched","setTouched","loading","setLoading","generalError","setGeneralError","emailAvailable","setEmailAvailable","emailChecked","setEmailChecked","originalEmail","setOriginalEmail","isCompanyAdmin","setIsCompanyAdmin","useEffect","getCompanyUser","u","loadedEmail","v","_a","isEmailValid","value","validateField","field","setValue","e","onBlur","t","err","p","trimmed","available","isCompanyUserEmailAvailable","canSubmit","useMemo","fields","next","f","label","effectiveStatus","isCompanyAdministrator","res","createCompanyUser","updateCompanyUser","error","errorMessage","useCompanyRoles","roles","setRoles","setError","isMounted","getCompanyRoles","items","CompanyUserForm","memo","permissions","onCancel","canEditUsers","rolesLoading","submit","saving","setSaving","jsx","jsxs","Card","InLineAlert","ProgressSpinner","CompanyUserFormLoader","Field","Input","Picker","_b","Button"],"mappings":"0iBAyBO,SAASA,GAAmBC,EAKhC,CACD,KAAM,CAAE,KAAAC,EAAM,SAAAC,EAAU,kBAAAC,EAAmB,QAAAC,CAAY,EAAAJ,EAEjDK,EAAeC,EAAQ,CAC3B,kBAAmB,+DACnB,iBAAkB,8DAClB,cAAe,2DACf,aAAc,0DACd,iBAAkB,8DAClB,kBAAmB,+DACnB,WAAY,wDACZ,gBAAiB,oDACjB,cAAe,iDAAA,CAChB,EACK,CAACC,EAAQC,CAAS,EAAIC,EAA6E,CACvG,UAAW,GACX,SAAU,GACV,MAAO,GACP,SAAU,GACV,UAAW,GACX,OAAQ,GACR,OAAQ,QAAA,CACT,EACK,CAACC,EAAQC,CAAS,EAAIF,EAAiC,CAAA,CAAE,EACzD,CAACG,EAASC,CAAU,EAAIJ,EAAkC,CAAA,CAAE,EAC5D,CAACK,EAASC,CAAU,EAAIN,EAAS,EAAK,EACtC,CAACO,EAAcC,CAAe,EAAIR,EAAwB,IAAI,EAC9D,CAACS,EAAgBC,CAAiB,EAAIV,EAAyB,IAAI,EACnE,CAACW,EAAcC,CAAe,EAAIZ,EAAiB,EAAE,EACrD,CAACa,EAAeC,CAAgB,EAAId,EAAiB,EAAE,EACvD,CAACe,EAAgBC,CAAiB,EAAIhB,EAAkB,EAAK,EAEnEiB,EAAU,IAAM,CACVzB,IAAS,QAAU,CAACC,IACxBa,EAAW,EAAI,EACVY,EAAezB,CAAQ,EAAE,KAAM0B,GAAM,OACxC,GAAI,CAACA,EAAG,OACF,MAAAC,EAAcD,EAAE,OAAS,GACrBpB,EAACsB,IAAO,CAAE,GAAGA,EAAG,UAAWF,EAAE,WAAa,GAAI,SAAUA,EAAE,UAAY,GAAI,MAAOC,EAAa,SAAUD,EAAE,UAAY,GAAI,UAAWA,EAAE,WAAa,GAAI,OAASA,EAAE,QAAU,QAA0B,EAAA,EACjNL,EAAiBM,CAAW,GACxBE,EAAAH,GAAA,YAAAA,EAAG,OAAH,MAAAG,EAAS,IAAIvB,EAAWsB,IAAO,CAAE,GAAGA,EAAG,OAAQF,EAAE,KAAM,EAAK,EAAA,EAC9CH,GAAAG,GAAA,YAAAA,EAAG,iBAAkB,EAAK,CAC7C,CAAA,EAAE,QAAQ,IAAMb,EAAW,EAAK,CAAC,EAAA,EACjC,CAACd,EAAMC,CAAQ,CAAC,EAEnB,MAAM8B,EAAgBC,GAA2B,YAAY,KAAKA,CAAK,EACjEC,EAAgB,CAACC,EAAqDF,IACtEE,IAAU,YAAoBF,EAAM,OAAS,KAAO5B,EAAa,kBACjE8B,IAAU,WAAmBF,EAAM,OAAS,KAAO5B,EAAa,iBAChE8B,IAAU,QACPF,EAAM,OACJD,EAAaC,EAAM,KAAM,CAAA,EAAI,KAAO5B,EAAa,aAD9BA,EAAa,cAGrC8B,IAAU,WAAmBF,EAAM,OAAS,KAAO5B,EAAa,iBAChE8B,IAAU,YAAoBF,EAAM,OAAS,KAAO5B,EAAa,kBACjE8B,IAAU,SAAiBF,EAAQ,KAAO5B,EAAa,WACpD,KAGH+B,EAAW,CAACD,EAAqDF,IAAkB,CAC7EzB,EAACsB,IAAO,CAAE,GAAGA,EAAG,CAACK,CAAK,EAAGF,CAAA,EAAQ,EACvCvB,EAAOyB,CAAK,GAAGxB,EAAW0B,IAAO,CAAE,GAAGA,EAAG,CAACF,CAAK,EAAG,EAAK,EAAA,EACvDA,IAAU,SAAShB,EAAkB,IAAI,EACzCH,KAA8B,IAAI,CACxC,EAEMsB,EAAS,MAAOH,GAAwD,CACjEtB,EAAC0B,IAAO,CAAE,GAAGA,EAAG,CAACJ,CAAK,EAAG,EAAA,EAAO,EACrC,MAAAK,EAAMN,EAAcC,EAAO,OAAO5B,EAAO4B,CAAK,GAAK,EAAE,CAAC,EAE5D,GADIK,GAAe7B,EAAC8B,IAAO,CAAE,GAAGA,EAAG,CAACN,CAAK,EAAGK,CAAA,EAAM,EAC9CL,IAAU,QAAS,CACrB,MAAMO,GAAWnC,EAAO,OAAS,IAAI,KAAK,EACtC,GAAAN,IAAS,QAAUyC,EAAQ,YAAY,KAAOpB,GAAiB,IAAI,OAAO,cAAe,CAC3FH,EAAkB,IAAI,EACtB,MAAA,CAEF,GAAIa,EAAaU,CAAO,GAAKA,IAAYtB,EAAc,CAC/C,MAAAuB,EAAY,MAAMC,GAA4BF,CAAO,EAC3DrB,EAAgBqB,CAAO,EACvBvB,EAAkBwB,CAAS,EACvBA,IAAc,IAAOhC,EAAW8B,IAAO,CAAE,GAAGA,EAAG,MAAO,qEAAA,EAAwE,CAAA,CACpI,CAEJ,EAEMI,EAAYC,EAAQ,IACjB,CAAC,CAACvC,EAAO,QAAU,CAAC,EAAEA,EAAO,WAAa,IAAI,KAAU,GAAA,CAAC,EAAEA,EAAO,UAAY,IAAI,QAAU,CAAC,EAAEA,EAAO,UAAY,IAAI,QAAU,CAAC,EAAEA,EAAO,WAAa,IAAI,KAAK,GAAKyB,GAAczB,EAAO,OAAS,IAAI,KAAM,CAAA,GAAK,CAACG,EAAO,OAASQ,IAAmB,GAC5P,CAACX,EAAQG,EAAQQ,CAAc,CAAC,EAkC5B,MAAA,CAAE,OAAAX,EAAQ,OAAAG,EAAQ,QAAAE,EAAS,QAAAE,EAAS,SAAAsB,EAAU,OAAAE,EAAQ,UAAAO,EAAW,OAhCzD,SAAY,CACzB,MAAME,EAAgD,CAAC,YAAa,WAAY,QAAS,WAAY,YAAa,QAAQ,EACpHC,EAA+B,CAAC,EACtC,UAAWC,KAAKF,EAAQ,CAChB,MAAAP,EAAMN,EAAce,EAAG,OAAO1C,EAAO0C,CAAC,GAAK,EAAE,CAAC,EAChDT,IAAUQ,EAAAC,CAAW,EAAIT,EAAA,CAI/B,GAFA7B,EAAUqC,CAAI,EACdnC,EAAW,CAAE,UAAW,GAAM,SAAU,GAAM,MAAO,GAAM,SAAU,GAAM,UAAW,GAAM,OAAQ,GAAM,EACtG,OAAO,KAAKmC,CAAI,EAAE,QAAU9B,IAAmB,GAAO,OAE1D,MAAMgC,EAAQ,GAAG3C,EAAO,WAAa,EAAE,IAAIA,EAAO,UAAY,EAAE,GAAG,KAAK,GAAKA,EAAO,OAAS,GAEvF4C,EADiB3B,GAAkB4B,EAAuB,CAAE,GAAI7C,EAAO,OAAQ,EAC5C,SAAWA,EAAO,OACvD,GAAA,CACF,GAAIN,IAAS,MAAO,CAClB,MAAMoD,EAAM,MAAMC,EAAkB,CAAE,MAAO/C,EAAO,OAAS,GAAI,UAAWA,EAAO,WAAa,GAAI,SAAUA,EAAO,UAAY,GAAI,SAAUA,EAAO,UAAY,GAAI,UAAWA,EAAO,WAAa,GAAI,OAAQA,EAAO,OAAQ,OAAQ4C,EAAiB,SAAUhD,GAAqB,KAAM,EAC9R,GAAI,CAACkD,EAAK,CACRpC,EAAgBZ,EAAa,eAAe,EAC5C,MAAA,CAEMD,EAAA,CAAE,MAAA8C,EAAO,YAAaG,EAAI,YAAa,SAAUA,EAAI,GAAI,KAAM,MAAA,CAAQ,OACtEnD,IACT,MAAMqD,GAAkB,CAAE,GAAIrD,EAAU,MAAOK,EAAO,OAAS,GAAI,UAAWA,EAAO,WAAa,GAAI,SAAUA,EAAO,UAAY,GAAI,SAAUA,EAAO,UAAY,GAAI,UAAWA,EAAO,WAAa,GAAI,OAAQ4C,EAAiB,OAAQ5C,EAAO,OAAQ,EAC3PH,EAAQ,CAAE,MAAA8C,EAAO,SAAAhD,EAAU,KAAM,OAAQ,SAEpCsD,EAAgB,CACvB,MAAMC,EAAeD,aAAiB,MAAQA,EAAM,QAAUnD,EAAa,cAC3EY,EAAgBwC,CAAY,CAAA,CAEhC,EAEgF,eAAAjC,EAAgB,aAAAR,CAAa,CAC/G,CCnIO,SAAS0C,IAAkB,CAChC,MAAMrD,EAAeC,EAAQ,CAC3B,eAAgB,kDAAA,CACjB,EAEK,CAACqD,EAAOC,CAAQ,EAAInD,EAA6B,CAAA,CAAE,EACnD,CAACK,EAASC,CAAU,EAAIN,EAAkB,EAAI,EAC9C,CAAC+C,EAAOK,CAAQ,EAAIpD,EAAwB,IAAI,EAEtD,OAAAiB,EAAU,IAAM,CACd,IAAIoC,EAAY,GAChB,OAAA/C,EAAW,EAAI,EACVgD,GAAgB,EAClB,KAAMC,GAAU,CAAMF,KAAoBE,CAAK,CAAA,CAAI,EACnD,MAAM,IAAM,CAAMF,GAAoBD,EAAAxD,EAAa,cAAc,CAAA,CAAI,EACrE,QAAQ,IAAM,CAAMyD,KAAsB,EAAK,CAAA,CAAI,EAC/C,IAAM,CAAcA,EAAA,EAAO,CAAA,EACjC,CAACzD,EAAa,cAAc,CAAC,EAEzB,CAAE,MAAAsD,EAAO,QAAA7C,EAAS,MAAA0C,CAAM,CACjC,CCVa,MAAAS,GAA2DC,EAAK,CAAC,CAAE,KAAAjE,EAAM,SAAAC,EAAU,kBAAAC,EAAmB,YAAAgE,EAAa,QAAA/D,EAAS,SAAAgE,KAAe,CAChJ,MAAAC,GAAeF,GAAA,YAAAA,EAAa,eAAgB,GAC5C,CAAE,MAAAR,EAAO,QAASW,CAAA,EAAiBZ,GAAgB,EACnD,CAAE,OAAAnD,EAAQ,OAAAG,EAAQ,QAAAE,EAAS,QAAAE,EAAS,SAAAsB,EAAU,OAAAE,EAAQ,UAAAO,EAAW,OAAA0B,EAAQ,eAAA/C,EAAgB,aAAAR,GAAiBjB,GAAmB,CAAE,KAAAE,EAAM,SAAAC,EAAU,kBAAAC,EAAmB,QAAAC,EAAS,EAC3K,CAACoE,EAAQC,CAAS,EAAIhE,EAAS,EAAK,EAEpCJ,EAAeC,EAAQ,CAC3B,QAAS,iDACT,SAAU,kDACV,SAAU,kDACV,SAAU,kDACV,UAAW,mDACX,SAAU,kDACV,MAAO,+CACP,gBAAiB,yDACjB,OAAQ,gDACR,WAAY,qDACZ,OAAQ,iDACR,SAAU,mDACV,qBAAsB,+DACtB,KAAM,+CACN,OAAQ,gDAAA,CACT,EAED,SACG,MACC,CAAA,SAAA,CAACoE,EAAA,KAAA,CAAG,UAAU,6BAA8B,SAAAzE,IAAS,MAAQI,EAAa,QAAUA,EAAa,QAAS,CAAA,EAC1GsE,EAACC,GAAK,QAAQ,YAAY,UAAW,2BAA2BJ,EAAS,aAAe,EAAE,GACvF,SAAA,CACCxD,EAAA0D,EAACG,EAAA,CACC,UAAU,kCACV,KAAK,QACL,QAAQ,YACR,QAAS7D,CAAA,CAAA,EAET,KACHwD,EAASE,EAAC,MAAI,CAAA,UAAU,6BAA6B,YAAU,SAAS,SAAAA,EAACI,EAAgB,CAAA,KAAK,OAAQ,CAAA,CAAE,CAAA,EAAS,KACjHhE,GAAWwD,EACTI,EAAAK,EAAA,CAAsB,CAAA,EAEtBJ,EAAA,MAAA,CAAI,UAAU,6BAEb,SAAA,CAAAD,EAACM,GAAM,MAAO3E,EAAa,SAAU,SAAQ,GAAC,UAAU,6BAA6B,MAAOO,EAAQ,UAAYF,EAAO,SAAWA,EAAO,SAAW,OAClJ,SAACgE,EAAAO,EAAA,CAAM,KAAK,YAAY,KAAK,OAAO,MAAO1E,EAAO,UAAY,GAAI,QAAUuB,GAAcM,EAAS,WAAYN,CAAC,EAAG,OAAQ,IAAMQ,EAAO,UAAU,EAAG,QAAQ,UAAU,KAAK,QAAS,CAAA,EACvL,IAEC0C,EAAM,CAAA,MAAO3E,EAAa,SAAU,SAAQ,GAAC,UAAU,6BAA6B,MAAO,CAACmB,GAAkBZ,EAAQ,QAAUF,EAAO,OAASA,EAAO,OAAS,OAAW,SAAUc,EACnL,WACEkD,EAAAQ,EAAA,CAAO,KAAK,OAAO,MAAO,OAAQ,QAAS,CAAC,CAAE,MAAO,OAAQ,KAAM7E,EAAa,oBAAqB,CAAC,CAAG,CAAA,EAE1GqE,EAACQ,EAAA,CACC,KAAK,OACL,MAAO3E,EAAO,QAAU,cACxB,SAAW8B,GAAW,SAAA,OAAAD,EAAS,SAAU,SAAOL,EAAAM,GAAA,YAAAA,EAAG,SAAH,YAAAN,EAAW,SAAU,cAAgB,KAAKoD,EAAA9C,GAAA,YAAAA,EAAG,SAAH,YAAA8C,EAAW,QAAS,EAAE,CAAC,GACjH,QAAS,CAAC,CAAE,MAAO,cAAe,KAAM9E,EAAa,WAAY,SAAU,IAAQ,GAAGsD,EAAM,IAAK,IAAO,CAAE,MAAO,EAAE,GAAI,KAAM,EAAE,IAAK,EAAE,CAAC,CAAA,CAAA,EAG7I,IAECqB,EAAM,CAAA,MAAO3E,EAAa,UAAW,SAAQ,GAAC,UAAU,6BAA6B,MAAOO,EAAQ,WAAaF,EAAO,UAAYA,EAAO,UAAY,OACtJ,SAAAgE,EAACO,GAAM,KAAK,aAAa,KAAK,OAAO,MAAO1E,EAAO,UAAW,QAAUuB,GAAcM,EAAS,YAAaN,CAAC,EAAG,OAAQ,IAAMQ,EAAO,WAAW,EAAG,QAAQ,UAAU,KAAK,QAAS,CAAA,EACrL,IAEC0C,EAAM,CAAA,MAAO3E,EAAa,SAAU,SAAQ,GAAC,UAAU,6BAA6B,MAAOO,EAAQ,UAAYF,EAAO,SAAWA,EAAO,SAAW,OAClJ,SAAAgE,EAACO,GAAM,KAAK,YAAY,KAAK,OAAO,MAAO1E,EAAO,SAAU,QAAUuB,GAAcM,EAAS,WAAYN,CAAC,EAAG,OAAQ,IAAMQ,EAAO,UAAU,EAAG,QAAQ,UAAU,KAAK,QAAS,CAAA,EACjL,EAEAoC,EAACM,GAAM,MAAO3E,EAAa,MAAO,SAAQ,GAAC,UAAU,6BAA6B,MAAOO,EAAQ,OAASF,EAAO,MAAQA,EAAO,MAAQ,OACtI,SAACgE,EAAAO,EAAA,CAAM,KAAK,QAAQ,KAAK,QAAQ,MAAO1E,EAAO,MAAO,QAAUuB,GAAcM,EAAS,QAASN,CAAC,EAAG,OAAQ,IAAM,KAAKQ,EAAO,OAAO,EAAG,YAAY,mBAAmB,QAAQ,UAAU,KAAK,QAAS,CAAA,EACzM,IAEC0C,EAAM,CAAA,MAAO3E,EAAa,gBAAiB,SAAQ,GAAC,UAAU,6BAA6B,MAAOO,EAAQ,WAAaF,EAAO,UAAYA,EAAO,UAAY,OAC5J,SAAAgE,EAACO,GAAM,KAAK,YAAY,KAAK,OAAO,MAAO1E,EAAO,WAAa,GAAI,QAAUuB,GAAcM,EAAS,YAAaN,CAAC,EAAG,OAAQ,IAAMQ,EAAO,WAAW,EAAG,QAAQ,UAAU,KAAK,QAAS,CAAA,EAC1L,EAEAoC,EAACM,EAAM,CAAA,MAAO3E,EAAa,OAAQ,UAAU,6BAA6B,SAAUmB,GAAkB,CAAC6C,EACrG,SAAAK,EAACQ,EAAA,CACC,KAAK,SACL,MAAO3E,EAAO,OACd,SAAW8B,GAAW,OAAA,OAAAD,EAAS,SAAU,SAAOL,EAAAM,GAAA,YAAAA,EAAG,SAAH,YAAAN,EAAW,QAAS,QAAQ,CAAC,GAC7E,QAAS,CAAC,CAAE,MAAO,SAAU,KAAM1B,EAAa,MAAO,EAAG,CAAE,MAAO,WAAY,KAAMA,EAAa,QAAU,CAAA,CAAA,CAAA,CAEhH,CAAA,CAAA,CACF,CAAA,CAAA,EAEJ,EACGS,GAAWwD,EAcV,KAbDK,EAAA,MAAA,CAAI,UAAU,+BACb,SAAA,CAACD,EAAAU,EAAA,CAAO,KAAK,SAAS,QAAQ,UAAU,SAAU,CAACvC,GAAa2B,EAAQ,QAAS,SAAY,CAAE,GAAI,CAAAA,EAAgB,CAAAC,EAAU,EAAI,EAAO,GAAA,CAAE,MAAMF,EAAO,CAAA,QAAK,CAAUE,EAAU,EAAK,CAAA,EAAG,EACrL,WAAa,KAChB,EACAC,EAACU,EAAA,CACC,KAAK,SACL,QAAQ,YACR,SAAUZ,EACV,QAASJ,EAER,SAAa/D,EAAA,MAAA,CAAA,CAChB,CAAA,CACF,CACE,EACN,CAEJ,CAAC"}
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsx as t,jsxs as f,Fragment as K}from"@dropins/tools/preact-jsx-runtime.js";import{classes as ue,Slot as he}from"@dropins/tools/lib.js";import{Card as Q,Button as X,Field as B,Input as V,Picker as ce,Header as pe,InLineAlert as fe,ProgressSpinner as ye}from"@dropins/tools/components.js";import{useState as D,useRef as J,useEffect as j,useCallback as W,useMemo as G}from"@dropins/tools/preact-hooks.js";import{events as me}from"@dropins/tools/event-bus.js";import{p as ve,E as Ce}from"../chunks/acdl.js";import{g as Ae,u as Ne}from"../chunks/updateCompany.js";import{g as ge,v as Ie}from"../chunks/getCountries.js";import{useText as H}from"@dropins/tools/i18n.js";import{u as _e,a as Ee}from"../chunks/useInLineAlert.js";import"../chunks/fetchUserPermissions.js";import"../chunks/company-permissions.js";import"../chunks/network-error.js";import"@dropins/tools/fetch-graphql.js";import"@dropins/tools/preact-compat.js";const be=({company:a,slots:e,showEditForm:u,handleShowEditForm:y})=>{const o=H({editButton:"Company.shared.buttons.edit",noDataMessage:"Company.CompanyProfile.companyProfileCard.noDataMessage",companyName:"Company.shared.fields.companyName",email:"Company.shared.fields.email",legalName:"Company.shared.fields.legalName",vatTaxId:"Company.shared.fields.vatTaxId",resellerId:"Company.shared.fields.resellerId",legalAddress:"Company.shared.fields.legalAddress",contacts:"Company.CompanyProfile.companyProfileCard.contacts",companyAdministrator:"Company.CompanyProfile.companyProfileCard.companyAdministrator",salesRepresentative:"Company.CompanyProfile.companyProfileCard.salesRepresentative",paymentInformation:"Company.CompanyProfile.companyProfileCard.paymentInformation",shippingInformation:"Company.CompanyProfile.companyProfileCard.shippingInformation",availablePaymentMethods:"Company.CompanyProfile.companyProfileCard.availablePaymentMethods",availableShippingMethods:"Company.CompanyProfile.companyProfileCard.availableShippingMethods",noPaymentMethods:"Company.CompanyProfile.companyProfileCard.noPaymentMethods",noShippingMethods:"Company.CompanyProfile.companyProfileCard.noShippingMethods"});if(!a)return t(Q,{variant:"secondary",className:"account-company-profile-card",children:t("div",{className:"account-company-profile-card__wrapper",children:t("div",{className:"account-company-profile-card__content",children:t("div",{className:"account-company-profile-card__no-data",children:t("p",{children:o.noDataMessage})})})})});const i=a.permissionsFlags||{canViewAccount:!0,canViewAddress:!0,canViewContacts:!0,canViewPaymentInformation:!0,canViewShippingInformation:!0},r=[i.canViewAccount?{name:"name",label:o.companyName,value:a.name||"",legalName:a.legalName||""}:null,i.canViewAccount?{name:"email",label:o.email,value:a.email||""}:null,i.canViewAccount?{name:"vatTaxId",label:o.vatTaxId,value:a.vatTaxId||""}:null,i.canViewAccount?{name:"resellerId",label:o.resellerId,value:a.resellerId||""}:null].filter(Boolean);return t(Q,{variant:"secondary",className:ue(["account-company-profile-card",["account-company-profile-card-short",u]]),children:f("div",{className:"account-company-profile-card__wrapper",children:[t("div",{className:"account-company-profile-card__actions",children:(a.canEditAccount||a.canEditAddress)&&t(X,{type:"button",variant:"tertiary",onClick:y,children:o.editButton})}),t("div",{className:"account-company-profile-card__content",children:(()=>{var v,g;const N=f(K,{children:[r.map((s,d)=>{if(!s.value)return null;let h;return s.name==="name"&&s.legalName?h=`${s.label}: ${s.value} (${s.legalName})`:h=s.label?`${s.label}: ${s.value}`:s.value,t("p",{"data-testid":`${s.name}_${d}`,children:h},`${s.name}_${d}`)}),i.canViewAddress&&a.legalAddress&&f("div",{className:"company-legal-address",children:[t("p",{children:f("strong",{children:[o.legalAddress,":"]})}),(v=a.legalAddress.street)==null?void 0:v.map((s,d)=>t("p",{children:s},d)),f("p",{children:[a.legalAddress.city,", ",(g=a.legalAddress.region)==null?void 0:g.region," ",a.legalAddress.postcode]}),t("p",{children:a.legalAddress.countryCode}),a.legalAddress.telephone&&f("p",{children:["Phone: ",a.legalAddress.telephone]})]}),i.canViewContacts&&(a.companyAdmin||a.salesRepresentative)&&f("div",{className:"company-contacts",children:[t("p",{children:f("strong",{children:[o.contacts,":"]})}),a.companyAdmin&&f("div",{className:"company-contact",children:[t("p",{children:f("strong",{children:[o.companyAdministrator,":"]})}),f("p",{children:[a.companyAdmin.firstname," ",a.companyAdmin.lastname]}),a.companyAdmin.jobTitle&&t("p",{children:a.companyAdmin.jobTitle}),t("p",{children:a.companyAdmin.email})]}),a.salesRepresentative&&f("div",{className:"company-contact",children:[t("p",{children:f("strong",{children:[o.salesRepresentative,":"]})}),f("p",{children:[a.salesRepresentative.firstname," ",a.salesRepresentative.lastname]}),t("p",{children:a.salesRepresentative.email})]})]}),i.canViewPaymentInformation&&f("div",{className:"company-payment-methods",children:[t("p",{children:f("strong",{children:[o.paymentInformation,":"]})}),a.availablePaymentMethods&&a.availablePaymentMethods.length>0?f(K,{children:[t("p",{children:f("strong",{children:[o.availablePaymentMethods,":"]})}),t("ul",{className:"payment-methods-list",children:a.availablePaymentMethods.map((s,d)=>t("li",{children:s.title},`payment_${d}`))})]}):t("div",{className:"message message-notice notice",children:t("div",{children:o.noPaymentMethods})})]}),i.canViewShippingInformation&&f("div",{className:"company-shipping-methods",children:[t("p",{children:f("strong",{children:[o.shippingInformation,":"]})}),a.availableShippingMethods&&a.availableShippingMethods.length>0?f(K,{children:[t("p",{children:f("strong",{children:[o.availableShippingMethods,":"]})}),t("ul",{className:"shipping-methods-list",children:a.availableShippingMethods.map((s,d)=>t("li",{children:s.title},`shipping_${d}`))})]}):t("div",{className:"message message-notice notice",children:t("div",{children:o.noShippingMethods})})]})]});return e!=null&&e.CompanyData?t(he,{name:"CompanyData",slot:e.CompanyData,context:{companyData:r,Default:N}}):N})()})]})})},xe=({handleSetInLineAlert:a,editFormRef:e})=>{const u=H({companySuccess:"Company.CompanyProfile.editCompanyProfile.companySuccess",companyError:"Company.CompanyProfile.editCompanyProfile.companyError",loadError:"Company.CompanyProfile.messages.loadError",updateError:"Company.CompanyProfile.messages.updateError",noDataToUpdate:"Company.CompanyProfile.messages.noDataToUpdate"}),{companySuccess:y,companyError:o,loadError:i,updateError:r,noDataToUpdate:N}=u,[v,g]=D(null),[s,d]=D(!0),[h,C]=D(!1),[_,w]=D(!1),[m,k]=D([]),[L,A]=D({}),z=J(a),P=J(!1),F=J(!1);j(()=>{z.current=a},[a]);const O=W(p=>{A(p)},[]),M=W((p,T)=>{a&&(p==="success"?a({type:"success",text:T??y}):p==="error"?a({type:"error",text:T??o}):a(),C(!1))},[a,y,o]),S=W(async()=>{if(P.current)return null;P.current=!0,d(!0);try{const p=await Ae();return p&&g(p),d(!1),p}catch(p){return console.error("Failed to load company:",p),d(!1),z.current&&z.current({type:"error",text:i}),null}finally{P.current=!1}},[i]);j(()=>{F.current||(F.current=!0,S())},[S]),j(()=>{const p=()=>{d(!0),w(!1),A({}),S()},T=me.on("companyContext/changed",p,{eager:!0});return()=>{T==null||T.off()}},[S]),j(()=>{ge().then(p=>{k(p.availableCountries)}).catch(p=>{console.error("Failed to load countries:",p)})},[]);const U=W(()=>{w(!0),M("success",""),A({})},[M]);j(()=>{_&&(e!=null&&e.current)&&setTimeout(()=>{var p;(p=e.current)==null||p.scrollIntoView({behavior:"smooth",block:"start",inline:"nearest"})},100)},[_,e]);const q=W(p=>{p==null||p(),w(!1),A({})},[]),Y=W(async p=>{try{if(C(!0),!p){M("error",N);return}const T=await Ne(p);g(T),w(!1),A({}),M("success"),ve(Ce.EDIT_COMPANY_EVENT,{...p,companyId:v==null?void 0:v.id}),me.emit("company/updated",{company:T})}catch(T){console.error("Failed to update company:",T),M("error",T.message||r)}finally{C(!1)}},[v,M,r,N]);return{company:v,countries:m,loading:s,submitLoading:h,showEditForm:_,inputChange:L,handleShowEditForm:U,handleHideEditForm:q,handleUpdateCompany:Y,handleInputChange:O,renderAlertMessage:M,saving:h}},Te=a=>{const[e,u]=D(null),[y,o]=D(!0);j(()=>{let g=!0;return ge().then(({availableCountries:s,countriesWithRequiredRegion:d,optionalZipCountries:h})=>{g&&(u({availableCountries:s,countriesWithRequiredRegion:d,optionalZipCountries:h}),o(!1))}).catch(()=>{g&&o(!1)}),()=>{g=!1}},[]);const i=G(()=>(e==null?void 0:e.availableCountries)||[],[e]),r=G(()=>{if(!a||!e)return[];const g=e.availableCountries.find(s=>s.value===a);return!(g!=null&&g.availableRegions)||g.availableRegions.length===0?[]:g.availableRegions.map(s=>({text:s.name,value:`${s.code},${s.id}`}))},[a,e]),N=G(()=>!a||!e?!1:e.countriesWithRequiredRegion.includes(a),[a,e]),v=G(()=>r.length>0,[r]);return{countryOptions:i,regionOptions:r,isRegionRequired:N,hasRegionOptions:v,loadingCountries:y}},$e=({loading:a,value:e,errors:u,touched:y,onBlur:o,namePrefix:i="",fieldPathPrefix:r=""})=>{const N=H({companyName:"Company.shared.fields.companyName",email:"Company.shared.fields.email",legalName:"Company.shared.fields.legalName",vatTaxId:"Company.shared.fields.vatTaxId",resellerId:"Company.shared.fields.resellerId"}),v=i?`${i}_`:"",g=h=>r?`${r}.${h}`:h,s=h=>C=>{const _=C.target;o(g(h),_.value)},d={disabled:!!a,variant:"primary",size:"medium"};return f("div",{className:"account-edit-company-profile-form__group",children:[t(B,{label:N.companyName,required:!0,className:"account-edit-company-profile-form__field",error:y.name&&u.name?u.name:void 0,children:t(V,{name:`${v}name`,type:"text",value:e.name,onBlur:s("name"),...d,maxLength:40})}),t(B,{label:N.legalName,className:"account-edit-company-profile-form__field",children:t(V,{name:`${v}legalName`,type:"text",value:e.legalName,onBlur:s("legalName"),...d,maxLength:80})}),t(B,{label:N.email,required:!0,className:"account-edit-company-profile-form__field",error:y.email&&u.email?u.email:void 0,children:t(V,{name:`${v}email`,type:"email",value:e.email,onBlur:s("email"),...d})}),t(B,{label:N.vatTaxId,className:"account-edit-company-profile-form__field",children:t(V,{name:`${v}vatTaxId`,type:"text",value:e.vatTaxId,onBlur:s("vatTaxId"),...d,maxLength:40})}),t(B,{label:N.resellerId,className:"account-edit-company-profile-form__field",children:t(V,{name:`${v}resellerId`,type:"text",value:e.resellerId,onBlur:s("resellerId"),...d,maxLength:40})})]})},we=({loading:a,loadingCountries:e,value:u,errors:y,touched:o,onChange:i,onBlur:r,countryOptions:N,regionOptions:v,isRegionRequired:g,hasRegionOptions:s,namePrefix:d="legalAddress",fieldPathPrefix:h="legalAddress",requiredConfig:C})=>{var z;const _=H({legalAddress:"Company.shared.fields.legalAddress",streetAddress:"Company.shared.fields.streetAddress",city:"Company.shared.fields.city",country:"Company.shared.fields.country",stateProvince:"Company.shared.fields.stateProvince",zipPostalCode:"Company.shared.fields.zipPostalCode",phoneNumber:"Company.shared.fields.phoneNumber"}),w={street:`${d}_street`,street2:`${d}_street2`,city:`${d}_city`,countryCode:`${d}_countryCode`,region:`${d}_region`,postcode:`${d}_postcode`,telephone:`${d}_telephone`},m={street:`${h}.street`,street2:`${h}.street2`,city:`${h}.city`,countryCode:`${h}.countryCode`,region:`${h}.region`,regionCode:`${h}.regionCode`,postcode:`${h}.postcode`,telephone:`${h}.telephone`},k={street:(C==null?void 0:C.street)??!0,city:(C==null?void 0:C.city)??!0,postcode:(C==null?void 0:C.postcode)??!0,telephone:(C==null?void 0:C.telephone)??!0},L=P=>F=>{const O=F.target;r(P,O.value)},A={disabled:!!a,variant:"primary",size:"medium"};return f("div",{className:"account-edit-company-profile-form__section",children:[t("h3",{className:"account-edit-company-profile-form__section-title",children:_.legalAddress}),t(B,{label:_.streetAddress,required:k.street,className:"account-edit-company-profile-form__field",error:o[m.street]&&y[m.street]?y[m.street]:void 0,children:t(V,{name:w.street,type:"text",value:u.street,onBlur:L(m.street),...A})}),t(B,{label:`${_.streetAddress} 2`,className:"account-edit-company-profile-form__field",children:t(V,{name:w.street2,type:"text",value:u.street2,onBlur:L(m.street2),...A})}),t(B,{label:_.city,required:k.city,className:"account-edit-company-profile-form__field",error:o[m.city]&&y[m.city]?y[m.city]:void 0,children:t(V,{name:w.city,type:"text",value:u.city,onBlur:L(m.city),...A})}),t(B,{label:_.country,required:!0,className:"account-edit-company-profile-form__field",error:o[m.countryCode]&&y[m.countryCode]?y[m.countryCode]:void 0,children:t(ce,{name:w.countryCode,floatingLabel:`${_.country} *`,placeholder:_.country,options:N,value:u.countryCode,handleSelect:P=>{const F=P.target;i(m.countryCode)(F.value)},onBlur:()=>r(m.countryCode),disabled:!!a||e})}),t(B,{label:_.stateProvince,required:g,className:"account-edit-company-profile-form__field",error:o["legalAddress.region"]&&y["legalAddress.region"]?y["legalAddress.region"]:void 0,children:s?t(ce,{name:"legalAddress_region",floatingLabel:`${_.stateProvince} ${g?"*":""}`,placeholder:_.stateProvince,options:v,value:u.regionCode&&((z=v.find(P=>P.value.split(",")[0]===u.regionCode))==null?void 0:z.value)||"",handleSelect:P=>{var S;const F=P.target,[O]=F.value.split(","),M=((S=v.find(U=>U.value===F.value))==null?void 0:S.text)||"";i(m.region)(M),i(m.regionCode)(O)},onBlur:()=>r(m.region),disabled:!!a||e},`region_picker_${u.countryCode}`):t(V,{name:w.region,type:"text",value:u.region,onBlur:L(m.region),disabled:!!a||e,...A},`region_input_${u.countryCode}`)}),t(B,{label:_.zipPostalCode,required:k.postcode,className:"account-edit-company-profile-form__field",error:o[m.postcode]&&y[m.postcode]?y[m.postcode]:void 0,children:t(V,{name:w.postcode,type:"text",value:u.postcode,onBlur:L(m.postcode),...A})}),t(B,{label:_.phoneNumber,required:k.telephone,className:"account-edit-company-profile-form__field",error:o[m.telephone]&&y[m.telephone]?y[m.telephone]:void 0,children:t(V,{name:w.telephone,type:"tel",value:u.telephone,onBlur:L(m.telephone),...A})})]})},Pe=({inLineAlertProps:a,company:e,loading:u=!1,onSubmit:y,onCancel:o})=>{var S,U,q,Y,p,T,Z,ee,te,ae,re,le,se,ne;const i=H({title:"Company.EditCompanyProfile.title",cancel:"Company.shared.buttons.cancel",save:"Company.shared.buttons.save",saving:"Company.shared.buttons.saving",required:"Company.shared.validation.required",invalidEmail:"Company.shared.validation.invalidEmail",companyNameRequired:"Company.shared.validation.companyNameRequired",emailRequired:"Company.shared.validation.emailRequired",emailNotAvailable:"Company.shared.validation.emailNotAvailable",companyNameLengthError:"Company.shared.validation.companyNameLengthError",legalNameLengthError:"Company.shared.validation.legalNameLengthError",vatTaxIdLengthError:"Company.shared.validation.vatTaxIdLengthError",resellerIdLengthError:"Company.shared.validation.resellerIdLengthError"}),[r,N]=D({name:(e==null?void 0:e.name)||"",email:(e==null?void 0:e.email)||"",legalName:(e==null?void 0:e.legalName)||"",vatTaxId:(e==null?void 0:e.vatTaxId)||"",resellerId:(e==null?void 0:e.resellerId)||"",legalAddress:{street:((U=(S=e==null?void 0:e.legalAddress)==null?void 0:S.street)==null?void 0:U[0])||"",street2:((Y=(q=e==null?void 0:e.legalAddress)==null?void 0:q.street)==null?void 0:Y[1])||"",city:((p=e==null?void 0:e.legalAddress)==null?void 0:p.city)||"",region:((Z=(T=e==null?void 0:e.legalAddress)==null?void 0:T.region)==null?void 0:Z.region)||"",regionCode:((te=(ee=e==null?void 0:e.legalAddress)==null?void 0:ee.region)==null?void 0:te.regionCode)||"",countryCode:((ae=e==null?void 0:e.legalAddress)==null?void 0:ae.countryCode)||"",postcode:((re=e==null?void 0:e.legalAddress)==null?void 0:re.postcode)||"",telephone:((le=e==null?void 0:e.legalAddress)==null?void 0:le.telephone)||""}}),[v,g]=D({}),[s,d]=D({}),h=((se=e==null?void 0:e.permissionsFlags)==null?void 0:se.canEditAccount)===!0,C=((ne=e==null?void 0:e.permissionsFlags)==null?void 0:ne.canEditAddress)===!0,{countryOptions:_,regionOptions:w,isRegionRequired:m,hasRegionOptions:k,loadingCountries:L}=Te(r.legalAddress.countryCode),A=(l,n)=>l==="name"?n.trim()?n.length>40?i.companyNameLengthError:null:i.companyNameRequired:l==="email"?n.trim()?/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(n)?null:i.invalidEmail:i.emailRequired:l==="legalName"?n.length>80?i.legalNameLengthError:null:l==="vatTaxId"?n.length>40?i.vatTaxIdLengthError:null:l==="resellerId"?n.length>40?i.resellerIdLengthError:null:l==="legalAddress.street"||l==="legalAddress.city"||l==="legalAddress.postcode"||l==="legalAddress.telephone"||l==="legalAddress.countryCode"?n.trim()?null:i.required:l==="legalAddress.region"&&m&&!n.trim()?i.required:null,z=()=>{var $,R;const l={};let n=!0;const x=(($=e==null?void 0:e.permissionsFlags)==null?void 0:$.canEditAccount)===!0,c=((R=e==null?void 0:e.permissionsFlags)==null?void 0:R.canEditAddress)===!0;if(x){const I=A("name",r.name);I&&(l.name=I,n=!1);const E=A("email",r.email);if(E&&(l.email=E,n=!1),r.legalName){const b=A("legalName",r.legalName);b&&(l.legalName=b,n=!1)}if(r.vatTaxId){const b=A("vatTaxId",r.vatTaxId);b&&(l.vatTaxId=b,n=!1)}if(r.resellerId){const b=A("resellerId",r.resellerId);b&&(l.resellerId=b,n=!1)}}if(c){const I=A("legalAddress.street",r.legalAddress.street);I&&(l["legalAddress.street"]=I,n=!1);const E=A("legalAddress.city",r.legalAddress.city);E&&(l["legalAddress.city"]=E,n=!1);const b=A("legalAddress.postcode",r.legalAddress.postcode);b&&(l["legalAddress.postcode"]=b,n=!1);const oe=A("legalAddress.telephone",r.legalAddress.telephone);oe&&(l["legalAddress.telephone"]=oe,n=!1);const ie=A("legalAddress.countryCode",r.legalAddress.countryCode);ie&&(l["legalAddress.countryCode"]=ie,n=!1);const de=A("legalAddress.region",r.legalAddress.region);de&&(l["legalAddress.region"]=de,n=!1)}return g(l),n},P=async l=>{var $,R;l.preventDefault();const n=(($=e==null?void 0:e.permissionsFlags)==null?void 0:$.canEditAccount)===!0,x=((R=e==null?void 0:e.permissionsFlags)==null?void 0:R.canEditAddress)===!0,c={};if(n&&(c.name=!0,c.email=!0,c.legalName=!0,c.vatTaxId=!0,c.resellerId=!0),x&&(c["legalAddress.street"]=!0,c["legalAddress.street2"]=!0,c["legalAddress.city"]=!0,c["legalAddress.region"]=!0,c["legalAddress.regionCode"]=!0,c["legalAddress.countryCode"]=!0,c["legalAddress.postcode"]=!0,c["legalAddress.telephone"]=!0),d(c),!!z()){if(n&&r.email!==(e==null?void 0:e.email)){const I=await Ie(r.email);if(!I.isValid){g(E=>({...E,email:I.error||i.emailNotAvailable}));return}}if(y){const I={};n&&(I.name=r.name,I.email=r.email,I.legalName=r.legalName,I.vatTaxId=r.vatTaxId,I.resellerId=r.resellerId),x&&(I.legalAddress={street:[r.legalAddress.street,r.legalAddress.street2].filter(Boolean),city:r.legalAddress.city,region:{region:r.legalAddress.region,regionCode:r.legalAddress.regionCode},countryCode:r.legalAddress.countryCode,postcode:r.legalAddress.postcode,telephone:r.legalAddress.telephone}),await y(I)}}},F=(l,n)=>{if(l.startsWith("legalAddress.")){const x=l.split(".")[1];x==="countryCode"?(N(c=>({...c,legalAddress:{...c.legalAddress,[x]:n,region:"",regionCode:""}})),g(c=>{const $={...c};return delete $["legalAddress.region"],delete $["legalAddress.regionCode"],$}),d(c=>{const $={...c};return delete $["legalAddress.region"],delete $["legalAddress.regionCode"],$})):N(x==="region"?c=>({...c,legalAddress:{...c.legalAddress,region:n,regionCode:k?c.legalAddress.regionCode:n}}):c=>({...c,legalAddress:{...c.legalAddress,[x]:n}}))}else N(x=>({...x,[l]:n}))},O=l=>n=>{const x=new Set(["name","email","legalName","vatTaxId","resellerId"]),c=l.startsWith("legalAddress.");x.has(l)&&!h||c&&!C||(F(l,n),v[l]&&g(R=>{const I={...R};return delete I[l],I}))},M=(l,n)=>{const x=new Set(["name","email","legalName","vatTaxId","resellerId"]),c=l.startsWith("legalAddress.");if(x.has(l)&&!h||c&&!C)return;n!==void 0&&F(l,n),d(E=>({...E,[l]:!0}));let R=n;if(R===void 0)if(l.startsWith("legalAddress.")){const E=l.split(".")[1],b=r.legalAddress[E];R=typeof b=="string"?b:""}else{const E=r[l];R=typeof E=="string"?E:""}const I=A(l,R);g(I?E=>({...E,[l]:I}):E=>{const b={...E};return delete b[l],b})};return f(Q,{variant:"secondary",className:"account-edit-company-profile",children:[t(pe,{title:i.title,divider:!1,className:"account-edit-company-profile__title"}),a!=null&&a.text?t(fe,{className:"account-edit-company-profile__notification",type:a.type,variant:"secondary",heading:a.text,icon:a.icon,"data-testid":"editCompanyInLineAlert"}):null,f("form",{className:"account-edit-company-profile-form",onSubmit:P,children:[h&&t($e,{loading:u,value:{name:r.name,email:r.email,legalName:r.legalName,vatTaxId:r.vatTaxId,resellerId:r.resellerId},errors:v,touched:s,onBlur:M}),C&&t(we,{loading:u,loadingCountries:L,value:r.legalAddress,errors:v,touched:s,onChange:O,onBlur:M,countryOptions:_,regionOptions:w,isRegionRequired:m,hasRegionOptions:k}),f("div",{className:"account-edit-company-profile__actions",children:[t(X,{disabled:u,type:"button",variant:"secondary",onClick:()=>o==null?void 0:o(),children:i.cancel}),t(X,{disabled:u||!h&&!C,type:"submit",variant:"primary",children:i.save})]})]}),u&&f("div",{className:"account-edit-company-profile__loading-overlay","data-testid":"editCompanyLoadingOverlay",children:[t(ye,{size:"large"}),t("div",{className:"account-edit-company-profile__loading-text",children:i.saving})]})]})},qe=({className:a,withHeader:e=!0,slots:u})=>{const y=H({containerTitle:"Company.CompanyProfile.containerTitle"}),{inLineAlertProps:o,handleSetInLineAlert:i}=_e(),r=J(null),{company:N,loading:v,saving:g,showEditForm:s,handleShowEditForm:d,handleHideEditForm:h,handleUpdateCompany:C}=xe({handleSetInLineAlert:i,editFormRef:r});return v?t("div",{"data-testid":"companyProfileLoader",children:t(Ee,{withCard:!0})}):f("div",{className:ue(["account-company-profile",a]),children:[e?t(pe,{title:y.containerTitle,divider:!1,className:"company-profile__title"}):null,t(be,{company:N,slots:u,showEditForm:s,handleShowEditForm:d}),s?t("div",{ref:r,children:t(Pe,{inLineAlertProps:o,company:N,loading:g,onSubmit:C,onCancel:h})}):null]})};export{qe as CompanyProfile,qe as default};
3
+ import{jsx as t,jsxs as f,Fragment as K}from"@dropins/tools/preact-jsx-runtime.js";import{classes as ue,Slot as he}from"@dropins/tools/lib.js";import{Card as Q,Button as X,Field as B,Input as V,Picker as ce,Header as pe,InLineAlert as fe,ProgressSpinner as ye}from"@dropins/tools/components.js";import{useState as D,useRef as J,useEffect as j,useCallback as W,useMemo as G}from"@dropins/tools/preact-hooks.js";import{u as ve,a as Ce}from"../chunks/useInLineAlert.js";import{events as me}from"@dropins/tools/event-bus.js";import{p as Ae,E as Ne}from"../chunks/acdl.js";import{g as Ie,u as _e}from"../chunks/updateCompany.js";import{g as ge,v as Ee}from"../chunks/getCountries.js";import{useText as H}from"@dropins/tools/i18n.js";import"@dropins/tools/preact-compat.js";import"../chunks/fetchUserPermissions.js";import"../chunks/company-permissions.js";import"../chunks/network-error.js";import"@dropins/tools/fetch-graphql.js";const be=({company:a,slots:e,showEditForm:u,handleShowEditForm:y})=>{const o=H({editButton:"Company.shared.buttons.edit",noDataMessage:"Company.CompanyProfile.companyProfileCard.noDataMessage",companyName:"Company.shared.fields.companyName",email:"Company.shared.fields.email",legalName:"Company.shared.fields.legalName",vatTaxId:"Company.shared.fields.vatTaxId",resellerId:"Company.shared.fields.resellerId",legalAddress:"Company.shared.fields.legalAddress",contacts:"Company.CompanyProfile.companyProfileCard.contacts",companyAdministrator:"Company.CompanyProfile.companyProfileCard.companyAdministrator",salesRepresentative:"Company.CompanyProfile.companyProfileCard.salesRepresentative",paymentInformation:"Company.CompanyProfile.companyProfileCard.paymentInformation",shippingInformation:"Company.CompanyProfile.companyProfileCard.shippingInformation",availablePaymentMethods:"Company.CompanyProfile.companyProfileCard.availablePaymentMethods",availableShippingMethods:"Company.CompanyProfile.companyProfileCard.availableShippingMethods",noPaymentMethods:"Company.CompanyProfile.companyProfileCard.noPaymentMethods",noShippingMethods:"Company.CompanyProfile.companyProfileCard.noShippingMethods"});if(!a)return t(Q,{variant:"secondary",className:"account-company-profile-card",children:t("div",{className:"account-company-profile-card__wrapper",children:t("div",{className:"account-company-profile-card__content",children:t("div",{className:"account-company-profile-card__no-data",children:t("p",{children:o.noDataMessage})})})})});const i=a.permissionsFlags||{canViewAccount:!0,canViewAddress:!0,canViewContacts:!0,canViewPaymentInformation:!0,canViewShippingInformation:!0},r=[i.canViewAccount?{name:"name",label:o.companyName,value:a.name||"",legalName:a.legalName||""}:null,i.canViewAccount?{name:"email",label:o.email,value:a.email||""}:null,i.canViewAccount?{name:"vatTaxId",label:o.vatTaxId,value:a.vatTaxId||""}:null,i.canViewAccount?{name:"resellerId",label:o.resellerId,value:a.resellerId||""}:null].filter(Boolean);return t(Q,{variant:"secondary",className:ue(["account-company-profile-card",["account-company-profile-card-short",u]]),children:f("div",{className:"account-company-profile-card__wrapper",children:[t("div",{className:"account-company-profile-card__actions",children:(a.canEditAccount||a.canEditAddress)&&t(X,{type:"button",variant:"tertiary",onClick:y,children:o.editButton})}),t("div",{className:"account-company-profile-card__content",children:(()=>{var v,g;const N=f(K,{children:[r.map((s,d)=>{if(!s.value)return null;let h;return s.name==="name"&&s.legalName?h=`${s.label}: ${s.value} (${s.legalName})`:h=s.label?`${s.label}: ${s.value}`:s.value,t("p",{"data-testid":`${s.name}_${d}`,children:h},`${s.name}_${d}`)}),i.canViewAddress&&a.legalAddress&&f("div",{className:"company-legal-address",children:[t("p",{children:f("strong",{children:[o.legalAddress,":"]})}),(v=a.legalAddress.street)==null?void 0:v.map((s,d)=>t("p",{children:s},d)),f("p",{children:[a.legalAddress.city,", ",(g=a.legalAddress.region)==null?void 0:g.region," ",a.legalAddress.postcode]}),t("p",{children:a.legalAddress.countryCode}),a.legalAddress.telephone&&f("p",{children:["Phone: ",a.legalAddress.telephone]})]}),i.canViewContacts&&(a.companyAdmin||a.salesRepresentative)&&f("div",{className:"company-contacts",children:[t("p",{children:f("strong",{children:[o.contacts,":"]})}),a.companyAdmin&&f("div",{className:"company-contact",children:[t("p",{children:f("strong",{children:[o.companyAdministrator,":"]})}),f("p",{children:[a.companyAdmin.firstname," ",a.companyAdmin.lastname]}),a.companyAdmin.jobTitle&&t("p",{children:a.companyAdmin.jobTitle}),t("p",{children:a.companyAdmin.email})]}),a.salesRepresentative&&f("div",{className:"company-contact",children:[t("p",{children:f("strong",{children:[o.salesRepresentative,":"]})}),f("p",{children:[a.salesRepresentative.firstname," ",a.salesRepresentative.lastname]}),t("p",{children:a.salesRepresentative.email})]})]}),i.canViewPaymentInformation&&f("div",{className:"company-payment-methods",children:[t("p",{children:f("strong",{children:[o.paymentInformation,":"]})}),a.availablePaymentMethods&&a.availablePaymentMethods.length>0?f(K,{children:[t("p",{children:f("strong",{children:[o.availablePaymentMethods,":"]})}),t("ul",{className:"payment-methods-list",children:a.availablePaymentMethods.map((s,d)=>t("li",{children:s.title},`payment_${d}`))})]}):t("div",{className:"message message-notice notice",children:t("div",{children:o.noPaymentMethods})})]}),i.canViewShippingInformation&&f("div",{className:"company-shipping-methods",children:[t("p",{children:f("strong",{children:[o.shippingInformation,":"]})}),a.availableShippingMethods&&a.availableShippingMethods.length>0?f(K,{children:[t("p",{children:f("strong",{children:[o.availableShippingMethods,":"]})}),t("ul",{className:"shipping-methods-list",children:a.availableShippingMethods.map((s,d)=>t("li",{children:s.title},`shipping_${d}`))})]}):t("div",{className:"message message-notice notice",children:t("div",{children:o.noShippingMethods})})]})]});return e!=null&&e.CompanyData?t(he,{name:"CompanyData",slot:e.CompanyData,context:{companyData:r,Default:N}}):N})()})]})})},xe=({handleSetInLineAlert:a,editFormRef:e})=>{const u=H({companySuccess:"Company.CompanyProfile.editCompanyProfile.companySuccess",companyError:"Company.CompanyProfile.editCompanyProfile.companyError",loadError:"Company.CompanyProfile.messages.loadError",updateError:"Company.CompanyProfile.messages.updateError",noDataToUpdate:"Company.CompanyProfile.messages.noDataToUpdate"}),{companySuccess:y,companyError:o,loadError:i,updateError:r,noDataToUpdate:N}=u,[v,g]=D(null),[s,d]=D(!0),[h,C]=D(!1),[_,w]=D(!1),[m,k]=D([]),[L,A]=D({}),z=J(a),P=J(!1),F=J(!1);j(()=>{z.current=a},[a]);const O=W(p=>{A(p)},[]),M=W((p,T)=>{a&&(p==="success"?a({type:"success",text:T??y}):p==="error"?a({type:"error",text:T??o}):a(),C(!1))},[a,y,o]),S=W(async()=>{if(P.current)return null;P.current=!0,d(!0);try{const p=await Ie();return p&&g(p),d(!1),p}catch(p){return console.error("Failed to load company:",p),d(!1),z.current&&z.current({type:"error",text:i}),null}finally{P.current=!1}},[i]);j(()=>{F.current||(F.current=!0,S())},[S]),j(()=>{const p=()=>{d(!0),w(!1),A({}),S()},T=me.on("companyContext/changed",p,{eager:!0});return()=>{T==null||T.off()}},[S]),j(()=>{ge().then(p=>{k(p.availableCountries)}).catch(p=>{console.error("Failed to load countries:",p)})},[]);const U=W(()=>{w(!0),M("success",""),A({})},[M]);j(()=>{_&&(e!=null&&e.current)&&setTimeout(()=>{var p;(p=e.current)==null||p.scrollIntoView({behavior:"smooth",block:"start",inline:"nearest"})},100)},[_,e]);const q=W(p=>{p==null||p(),w(!1),A({})},[]),Y=W(async p=>{try{if(C(!0),!p){M("error",N);return}const T=await _e(p);g(T),w(!1),A({}),M("success"),Ae(Ne.EDIT_COMPANY_EVENT,{...p,companyId:v==null?void 0:v.id}),me.emit("company/updated",{company:T})}catch(T){console.error("Failed to update company:",T),M("error",T.message||r)}finally{C(!1)}},[v,M,r,N]);return{company:v,countries:m,loading:s,submitLoading:h,showEditForm:_,inputChange:L,handleShowEditForm:U,handleHideEditForm:q,handleUpdateCompany:Y,handleInputChange:O,renderAlertMessage:M,saving:h}},Te=a=>{const[e,u]=D(null),[y,o]=D(!0);j(()=>{let g=!0;return ge().then(({availableCountries:s,countriesWithRequiredRegion:d,optionalZipCountries:h})=>{g&&(u({availableCountries:s,countriesWithRequiredRegion:d,optionalZipCountries:h}),o(!1))}).catch(()=>{g&&o(!1)}),()=>{g=!1}},[]);const i=G(()=>(e==null?void 0:e.availableCountries)||[],[e]),r=G(()=>{if(!a||!e)return[];const g=e.availableCountries.find(s=>s.value===a);return!(g!=null&&g.availableRegions)||g.availableRegions.length===0?[]:g.availableRegions.map(s=>({text:s.name,value:`${s.code},${s.id}`}))},[a,e]),N=G(()=>!a||!e?!1:e.countriesWithRequiredRegion.includes(a),[a,e]),v=G(()=>r.length>0,[r]);return{countryOptions:i,regionOptions:r,isRegionRequired:N,hasRegionOptions:v,loadingCountries:y}},$e=({loading:a,value:e,errors:u,touched:y,onBlur:o,namePrefix:i="",fieldPathPrefix:r=""})=>{const N=H({companyName:"Company.shared.fields.companyName",email:"Company.shared.fields.email",legalName:"Company.shared.fields.legalName",vatTaxId:"Company.shared.fields.vatTaxId",resellerId:"Company.shared.fields.resellerId"}),v=i?`${i}_`:"",g=h=>r?`${r}.${h}`:h,s=h=>C=>{const _=C.target;o(g(h),_.value)},d={disabled:!!a,variant:"primary",size:"medium"};return f("div",{className:"account-edit-company-profile-form__group",children:[t(B,{label:N.companyName,required:!0,className:"account-edit-company-profile-form__field",error:y.name&&u.name?u.name:void 0,children:t(V,{name:`${v}name`,type:"text",value:e.name,onBlur:s("name"),...d,maxLength:40})}),t(B,{label:N.legalName,className:"account-edit-company-profile-form__field",children:t(V,{name:`${v}legalName`,type:"text",value:e.legalName,onBlur:s("legalName"),...d,maxLength:80})}),t(B,{label:N.email,required:!0,className:"account-edit-company-profile-form__field",error:y.email&&u.email?u.email:void 0,children:t(V,{name:`${v}email`,type:"email",value:e.email,onBlur:s("email"),...d})}),t(B,{label:N.vatTaxId,className:"account-edit-company-profile-form__field",children:t(V,{name:`${v}vatTaxId`,type:"text",value:e.vatTaxId,onBlur:s("vatTaxId"),...d,maxLength:40})}),t(B,{label:N.resellerId,className:"account-edit-company-profile-form__field",children:t(V,{name:`${v}resellerId`,type:"text",value:e.resellerId,onBlur:s("resellerId"),...d,maxLength:40})})]})},we=({loading:a,loadingCountries:e,value:u,errors:y,touched:o,onChange:i,onBlur:r,countryOptions:N,regionOptions:v,isRegionRequired:g,hasRegionOptions:s,namePrefix:d="legalAddress",fieldPathPrefix:h="legalAddress",requiredConfig:C})=>{var z;const _=H({legalAddress:"Company.shared.fields.legalAddress",streetAddress:"Company.shared.fields.streetAddress",city:"Company.shared.fields.city",country:"Company.shared.fields.country",stateProvince:"Company.shared.fields.stateProvince",zipPostalCode:"Company.shared.fields.zipPostalCode",phoneNumber:"Company.shared.fields.phoneNumber"}),w={street:`${d}_street`,street2:`${d}_street2`,city:`${d}_city`,countryCode:`${d}_countryCode`,region:`${d}_region`,postcode:`${d}_postcode`,telephone:`${d}_telephone`},m={street:`${h}.street`,street2:`${h}.street2`,city:`${h}.city`,countryCode:`${h}.countryCode`,region:`${h}.region`,regionCode:`${h}.regionCode`,postcode:`${h}.postcode`,telephone:`${h}.telephone`},k={street:(C==null?void 0:C.street)??!0,city:(C==null?void 0:C.city)??!0,postcode:(C==null?void 0:C.postcode)??!0,telephone:(C==null?void 0:C.telephone)??!0},L=P=>F=>{const O=F.target;r(P,O.value)},A={disabled:!!a,variant:"primary",size:"medium"};return f("div",{className:"account-edit-company-profile-form__section",children:[t("h3",{className:"account-edit-company-profile-form__section-title",children:_.legalAddress}),t(B,{label:_.streetAddress,required:k.street,className:"account-edit-company-profile-form__field",error:o[m.street]&&y[m.street]?y[m.street]:void 0,children:t(V,{name:w.street,type:"text",value:u.street,onBlur:L(m.street),...A})}),t(B,{label:`${_.streetAddress} 2`,className:"account-edit-company-profile-form__field",children:t(V,{name:w.street2,type:"text",value:u.street2,onBlur:L(m.street2),...A})}),t(B,{label:_.city,required:k.city,className:"account-edit-company-profile-form__field",error:o[m.city]&&y[m.city]?y[m.city]:void 0,children:t(V,{name:w.city,type:"text",value:u.city,onBlur:L(m.city),...A})}),t(B,{label:_.country,required:!0,className:"account-edit-company-profile-form__field",error:o[m.countryCode]&&y[m.countryCode]?y[m.countryCode]:void 0,children:t(ce,{name:w.countryCode,floatingLabel:`${_.country} *`,placeholder:_.country,options:N,value:u.countryCode,handleSelect:P=>{const F=P.target;i(m.countryCode)(F.value)},onBlur:()=>r(m.countryCode),disabled:!!a||e})}),t(B,{label:_.stateProvince,required:g,className:"account-edit-company-profile-form__field",error:o["legalAddress.region"]&&y["legalAddress.region"]?y["legalAddress.region"]:void 0,children:s?t(ce,{name:"legalAddress_region",floatingLabel:`${_.stateProvince} ${g?"*":""}`,placeholder:_.stateProvince,options:v,value:u.regionCode&&((z=v.find(P=>P.value.split(",")[0]===u.regionCode))==null?void 0:z.value)||"",handleSelect:P=>{var S;const F=P.target,[O]=F.value.split(","),M=((S=v.find(U=>U.value===F.value))==null?void 0:S.text)||"";i(m.region)(M),i(m.regionCode)(O)},onBlur:()=>r(m.region),disabled:!!a||e},`region_picker_${u.countryCode}`):t(V,{name:w.region,type:"text",value:u.region,onBlur:L(m.region),disabled:!!a||e,...A},`region_input_${u.countryCode}`)}),t(B,{label:_.zipPostalCode,required:k.postcode,className:"account-edit-company-profile-form__field",error:o[m.postcode]&&y[m.postcode]?y[m.postcode]:void 0,children:t(V,{name:w.postcode,type:"text",value:u.postcode,onBlur:L(m.postcode),...A})}),t(B,{label:_.phoneNumber,required:k.telephone,className:"account-edit-company-profile-form__field",error:o[m.telephone]&&y[m.telephone]?y[m.telephone]:void 0,children:t(V,{name:w.telephone,type:"tel",value:u.telephone,onBlur:L(m.telephone),...A})})]})},Pe=({inLineAlertProps:a,company:e,loading:u=!1,onSubmit:y,onCancel:o})=>{var S,U,q,Y,p,T,Z,ee,te,ae,re,le,se,ne;const i=H({title:"Company.EditCompanyProfile.title",cancel:"Company.shared.buttons.cancel",save:"Company.shared.buttons.save",saving:"Company.shared.buttons.saving",required:"Company.shared.validation.required",invalidEmail:"Company.shared.validation.invalidEmail",companyNameRequired:"Company.shared.validation.companyNameRequired",emailRequired:"Company.shared.validation.emailRequired",emailNotAvailable:"Company.shared.validation.emailNotAvailable",companyNameLengthError:"Company.shared.validation.companyNameLengthError",legalNameLengthError:"Company.shared.validation.legalNameLengthError",vatTaxIdLengthError:"Company.shared.validation.vatTaxIdLengthError",resellerIdLengthError:"Company.shared.validation.resellerIdLengthError"}),[r,N]=D({name:(e==null?void 0:e.name)||"",email:(e==null?void 0:e.email)||"",legalName:(e==null?void 0:e.legalName)||"",vatTaxId:(e==null?void 0:e.vatTaxId)||"",resellerId:(e==null?void 0:e.resellerId)||"",legalAddress:{street:((U=(S=e==null?void 0:e.legalAddress)==null?void 0:S.street)==null?void 0:U[0])||"",street2:((Y=(q=e==null?void 0:e.legalAddress)==null?void 0:q.street)==null?void 0:Y[1])||"",city:((p=e==null?void 0:e.legalAddress)==null?void 0:p.city)||"",region:((Z=(T=e==null?void 0:e.legalAddress)==null?void 0:T.region)==null?void 0:Z.region)||"",regionCode:((te=(ee=e==null?void 0:e.legalAddress)==null?void 0:ee.region)==null?void 0:te.regionCode)||"",countryCode:((ae=e==null?void 0:e.legalAddress)==null?void 0:ae.countryCode)||"",postcode:((re=e==null?void 0:e.legalAddress)==null?void 0:re.postcode)||"",telephone:((le=e==null?void 0:e.legalAddress)==null?void 0:le.telephone)||""}}),[v,g]=D({}),[s,d]=D({}),h=((se=e==null?void 0:e.permissionsFlags)==null?void 0:se.canEditAccount)===!0,C=((ne=e==null?void 0:e.permissionsFlags)==null?void 0:ne.canEditAddress)===!0,{countryOptions:_,regionOptions:w,isRegionRequired:m,hasRegionOptions:k,loadingCountries:L}=Te(r.legalAddress.countryCode),A=(l,n)=>l==="name"?n.trim()?n.length>40?i.companyNameLengthError:null:i.companyNameRequired:l==="email"?n.trim()?/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(n)?null:i.invalidEmail:i.emailRequired:l==="legalName"?n.length>80?i.legalNameLengthError:null:l==="vatTaxId"?n.length>40?i.vatTaxIdLengthError:null:l==="resellerId"?n.length>40?i.resellerIdLengthError:null:l==="legalAddress.street"||l==="legalAddress.city"||l==="legalAddress.postcode"||l==="legalAddress.telephone"||l==="legalAddress.countryCode"?n.trim()?null:i.required:l==="legalAddress.region"&&m&&!n.trim()?i.required:null,z=()=>{var $,R;const l={};let n=!0;const x=(($=e==null?void 0:e.permissionsFlags)==null?void 0:$.canEditAccount)===!0,c=((R=e==null?void 0:e.permissionsFlags)==null?void 0:R.canEditAddress)===!0;if(x){const I=A("name",r.name);I&&(l.name=I,n=!1);const E=A("email",r.email);if(E&&(l.email=E,n=!1),r.legalName){const b=A("legalName",r.legalName);b&&(l.legalName=b,n=!1)}if(r.vatTaxId){const b=A("vatTaxId",r.vatTaxId);b&&(l.vatTaxId=b,n=!1)}if(r.resellerId){const b=A("resellerId",r.resellerId);b&&(l.resellerId=b,n=!1)}}if(c){const I=A("legalAddress.street",r.legalAddress.street);I&&(l["legalAddress.street"]=I,n=!1);const E=A("legalAddress.city",r.legalAddress.city);E&&(l["legalAddress.city"]=E,n=!1);const b=A("legalAddress.postcode",r.legalAddress.postcode);b&&(l["legalAddress.postcode"]=b,n=!1);const oe=A("legalAddress.telephone",r.legalAddress.telephone);oe&&(l["legalAddress.telephone"]=oe,n=!1);const ie=A("legalAddress.countryCode",r.legalAddress.countryCode);ie&&(l["legalAddress.countryCode"]=ie,n=!1);const de=A("legalAddress.region",r.legalAddress.region);de&&(l["legalAddress.region"]=de,n=!1)}return g(l),n},P=async l=>{var $,R;l.preventDefault();const n=(($=e==null?void 0:e.permissionsFlags)==null?void 0:$.canEditAccount)===!0,x=((R=e==null?void 0:e.permissionsFlags)==null?void 0:R.canEditAddress)===!0,c={};if(n&&(c.name=!0,c.email=!0,c.legalName=!0,c.vatTaxId=!0,c.resellerId=!0),x&&(c["legalAddress.street"]=!0,c["legalAddress.street2"]=!0,c["legalAddress.city"]=!0,c["legalAddress.region"]=!0,c["legalAddress.regionCode"]=!0,c["legalAddress.countryCode"]=!0,c["legalAddress.postcode"]=!0,c["legalAddress.telephone"]=!0),d(c),!!z()){if(n&&r.email!==(e==null?void 0:e.email)){const I=await Ee(r.email);if(!I.isValid){g(E=>({...E,email:I.error||i.emailNotAvailable}));return}}if(y){const I={};n&&(I.name=r.name,I.email=r.email,I.legalName=r.legalName,I.vatTaxId=r.vatTaxId,I.resellerId=r.resellerId),x&&(I.legalAddress={street:[r.legalAddress.street,r.legalAddress.street2].filter(Boolean),city:r.legalAddress.city,region:{region:r.legalAddress.region,regionCode:r.legalAddress.regionCode},countryCode:r.legalAddress.countryCode,postcode:r.legalAddress.postcode,telephone:r.legalAddress.telephone}),await y(I)}}},F=(l,n)=>{if(l.startsWith("legalAddress.")){const x=l.split(".")[1];x==="countryCode"?(N(c=>({...c,legalAddress:{...c.legalAddress,[x]:n,region:"",regionCode:""}})),g(c=>{const $={...c};return delete $["legalAddress.region"],delete $["legalAddress.regionCode"],$}),d(c=>{const $={...c};return delete $["legalAddress.region"],delete $["legalAddress.regionCode"],$})):N(x==="region"?c=>({...c,legalAddress:{...c.legalAddress,region:n,regionCode:k?c.legalAddress.regionCode:n}}):c=>({...c,legalAddress:{...c.legalAddress,[x]:n}}))}else N(x=>({...x,[l]:n}))},O=l=>n=>{const x=new Set(["name","email","legalName","vatTaxId","resellerId"]),c=l.startsWith("legalAddress.");x.has(l)&&!h||c&&!C||(F(l,n),v[l]&&g(R=>{const I={...R};return delete I[l],I}))},M=(l,n)=>{const x=new Set(["name","email","legalName","vatTaxId","resellerId"]),c=l.startsWith("legalAddress.");if(x.has(l)&&!h||c&&!C)return;n!==void 0&&F(l,n),d(E=>({...E,[l]:!0}));let R=n;if(R===void 0)if(l.startsWith("legalAddress.")){const E=l.split(".")[1],b=r.legalAddress[E];R=typeof b=="string"?b:""}else{const E=r[l];R=typeof E=="string"?E:""}const I=A(l,R);g(I?E=>({...E,[l]:I}):E=>{const b={...E};return delete b[l],b})};return f(Q,{variant:"secondary",className:"account-edit-company-profile",children:[t(pe,{title:i.title,divider:!1,className:"account-edit-company-profile__title"}),a!=null&&a.text?t(fe,{className:"account-edit-company-profile__notification",type:a.type,variant:"secondary",heading:a.text,icon:a.icon,"data-testid":"editCompanyInLineAlert"}):null,f("form",{className:"account-edit-company-profile-form",onSubmit:P,children:[h&&t($e,{loading:u,value:{name:r.name,email:r.email,legalName:r.legalName,vatTaxId:r.vatTaxId,resellerId:r.resellerId},errors:v,touched:s,onBlur:M}),C&&t(we,{loading:u,loadingCountries:L,value:r.legalAddress,errors:v,touched:s,onChange:O,onBlur:M,countryOptions:_,regionOptions:w,isRegionRequired:m,hasRegionOptions:k}),f("div",{className:"account-edit-company-profile__actions",children:[t(X,{disabled:u,type:"button",variant:"secondary",onClick:()=>o==null?void 0:o(),children:i.cancel}),t(X,{disabled:u||!h&&!C,type:"submit",variant:"primary",children:i.save})]})]}),u&&f("div",{className:"account-edit-company-profile__loading-overlay","data-testid":"editCompanyLoadingOverlay",children:[t(ye,{size:"large"}),t("div",{className:"account-edit-company-profile__loading-text",children:i.saving})]})]})},qe=({className:a,withHeader:e=!0,slots:u})=>{const y=H({containerTitle:"Company.CompanyProfile.containerTitle"}),{inLineAlertProps:o,handleSetInLineAlert:i}=ve(),r=J(null),{company:N,loading:v,saving:g,showEditForm:s,handleShowEditForm:d,handleHideEditForm:h,handleUpdateCompany:C}=xe({handleSetInLineAlert:i,editFormRef:r});return v?t("div",{"data-testid":"companyProfileLoader",children:t(Ce,{withCard:!0})}):f("div",{className:ue(["account-company-profile",a]),children:[e?t(pe,{title:y.containerTitle,divider:!1,className:"company-profile__title"}):null,t(be,{company:N,slots:u,showEditForm:s,handleShowEditForm:d}),s?t("div",{ref:r,children:t(Pe,{inLineAlertProps:o,company:N,loading:g,onSubmit:C,onCancel:h})}):null]})};export{qe as CompanyProfile,qe as default};
4
4
  //# sourceMappingURL=CompanyProfile.js.map
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsx as a,jsxs as j,Fragment as me}from"@dropins/tools/preact-jsx-runtime.js";import{Slot as he,classes as ge}from"@dropins/tools/lib.js";import{Checkbox as be,Card as ie,InLineAlert as le,ProgressSpinner as de,Field as pe,Input as ye,Button as Y,Modal as fe,Header as Se}from"@dropins/tools/components.js";import{useMemo as ue,useRef as ae,useCallback as R,useState as N,useEffect as ne}from"@dropins/tools/preact-hooks.js";import{f as ve}from"../chunks/fetchUserPermissions.js";import{b as Ie}from"../chunks/company-permissions.js";import{useText as re}from"@dropins/tools/i18n.js";import{memo as Ce}from"@dropins/tools/preact-compat.js";import{C as Te}from"../chunks/CompanyUserForm.js";import{events as se}from"@dropins/tools/event-bus.js";import{p as oe,E as ce}from"../chunks/acdl.js";import{a as we,c as Ne,b as Ee,g as xe,u as ke,d as De}from"../chunks/updateCompanyTeam.js";import{d as _e}from"../chunks/updateCompanyUser.js";import{c as Ue,u as Me,d as Ae}from"../chunks/useInLineAlert.js";import"../chunks/network-error.js";import"@dropins/tools/fetch-graphql.js";const Pe=d=>{const v=new Map;for(const u of d){const g=u.parentId??null,r=v.get(g)??[];r.push(u),v.set(g,r)}for(const[,u]of v)u.sort((g,r)=>g.label.localeCompare(r.label));return v},Fe=({items:d,rootId:v=null,className:u,expandedIds:g,selectedId:r=null,selectedIds:_,onExpandedChange:b,onSelectedChange:n,onSelectedIdsChange:S,renderNode:m,role:H="tree",draggable:w,canDrop:F,onMove:U,isCheckable:I,checkedIds:x,onCheckedChange:V,renderExpander:k,renderCheckbox:K,renderIcon:z})=>{const Q=ue(()=>Pe(d),[d]),y=ae(null),D=ae(!1),f=ue(()=>new Map(d.map(i=>[i.id,i])),[d]),B=(i,C)=>{const A=[],L=[C];for(;L.length;){const l=L.pop(),t=i.get(l)??[];for(const s of t)A.push(s.id),L.push(s.id)}return A},M=R(i=>B(Q,i),[Q]),O=R(i=>I?I(i):!0,[I]),E=R(i=>{if(!f.get(i))return{checked:!1,indeterminate:!1};const A=[i,...M(i)].filter(t=>{const s=f.get(t);return s?O(s):!1});if(A.length===0)return{checked:!1,indeterminate:!1};const L=x??new Set,l=A.reduce((t,s)=>L.has(s)?t+1:t,0);return l===0?{checked:!1,indeterminate:!1}:l===A.length?{checked:!0,indeterminate:!1}:{checked:!1,indeterminate:!0}},[f,M,O,x]),W=R(i=>{if(!V)return;const C=new Set(x??[]),{checked:A}=E(i),L=[i,...M(i)].filter(l=>{const t=f.get(l);return t?O(t):!1});if(A)for(const l of L)C.delete(l);else for(const l of L)C.add(l);V(C)},[x,V,E,M,f,O]),G=R(i=>a(be,{name:`tree-checkbox-${Math.random().toString(36).substr(2,9)}`,checked:i.checked,indeterminate:i.indeterminate,onChange:i.onCheck}),[]),X=R(i=>{const C=new Set(g);C.has(i)?C.delete(i):C.add(i),b(C)},[g,b]),te=R(i=>{const C=f.get(i);if(C&&O(C)&&V&&W(i),!S){n==null||n(i);return}const A=!!D.current,L=A?new Set(_??[]):new Set;A&&L.has(i)?L.delete(i):L.add(i),S(L),D.current=!1},[n,S,_,f,O,V,W]),Z=(i,C)=>{const A=Q.get(i)??[];return A.length?a("ul",{role:C===1?H:"group",className:C===1?u??"acm-tree":"acm-tree__group",children:A.map((l,t)=>{const s=(Q.get(l.id)??[]).length>0,h=g.has(l.id),e=_?_.has(l.id):r===l.id,o=!!(w!=null&&w(l)),T=p=>F?F(p,l.id):p!==l.id,c=s?()=>k?k({expanded:h,hasChildren:s,toggle:()=>X(l.id)}):null:void 0,P=(()=>{if(!V)return;const p=f.get(l.id);if(!p||!O(p))return;const q=E(l.id),J=K||G;return()=>J({checked:q.checked,indeterminate:q.indeterminate,onCheck:()=>W(l.id)})})(),$=z?()=>z({item:l,level:C,hasChildren:s,expanded:h}):void 0,ee=m({item:l,level:C,expanded:h,selected:!!e,hasChildren:s,toggle:()=>X(l.id),select:()=>te(l.id),...c?{expander:c}:{},...P?{checkbox:P}:{},...$?{icon:$}:{}});return j("li",{role:"treeitem",className:"acm-tree__item","data-level":C,"aria-expanded":s?h:void 0,"aria-selected":e||void 0,"aria-level":C,"aria-setsize":A.length,"aria-posinset":t+1,draggable:o,onMouseDown:p=>{D.current=!!(p.metaKey||p.ctrlKey)},onDragStart:p=>{var q;if(p.stopPropagation(),!!o){y.current=l.id;try{(q=p.dataTransfer)==null||q.setData("text/plain",l.id)}catch{}}},onDragOver:p=>{var J;p.stopPropagation();const q=y.current??(((J=p.dataTransfer)==null?void 0:J.getData("text/plain"))||"");q&&T(q)&&p.preventDefault()},onDrop:p=>{var J;p.stopPropagation();const q=y.current??(((J=p.dataTransfer)==null?void 0:J.getData("text/plain"))||"");y.current=null,q&&T(q)&&(U==null||U({id:q,newParentId:l.id}))},children:[ee,s&&h?Z(l.id,C+1):null]},l.id)})}):null};return a("div",{className:"acm-tree-root",children:Z(v,1)})};function Le(d){const{mode:v,entityId:u,parentStructureId:g,onSaved:r}=d,_=re({teamTitleRequired:"Company.CompanyStructure.shared.validation.teamTitleRequired",createTeamError:"Company.CompanyStructure.messages.createTeamError",saveTeamError:"Company.CompanyStructure.messages.saveTeamError"}),[b,n]=N({id:"",name:"",description:""}),[S,m]=N({}),[H,w]=N({}),[F,U]=N(!1),[I,x]=N(null);ne(()=>{v!=="edit"||!u||(U(!0),we(u).then(y=>{y&&n({id:y.id,name:y.name||"",description:y.description||""})}).finally(()=>U(!1)))},[v,u]);const V=(y,D)=>y==="name"?D.trim()?null:_.teamTitleRequired:null,k=(y,D)=>{n(f=>({...f,[y]:D})),I&&x(null)},K=(y,D)=>{D!==void 0&&k(y,D),w(M=>({...M,[y]:!0}));const f=D!==void 0?D:b[y]||"",B=V(y,f);m(B?M=>({...M,[y]:B}):M=>{const O={...M};return delete O[y],O})},z=ue(()=>!!b.name.trim(),[b.name]);return{values:b,errors:S,touched:H,loading:F,setValue:k,onBlur:K,canSubmit:z,submit:async()=>{const y=V("name",b.name);if(y){m({name:y}),w({name:!0});return}const D=b.name;try{if(v==="add"){const f=await Ne({name:b.name,description:b.description||null,targetId:g??null});if(!f){x(_.createTeamError);return}r({label:D,structureId:f.structureId,entityId:f.id,type:"team",description:b.description||void 0})}else u&&(await Ee({id:u,name:b.name,description:b.description||null}),r({label:D,entityId:u,type:"team",description:b.description||void 0}))}catch(f){const B=f instanceof Error?f.message:_.saveTeamError;x(B)}},generalError:I}}const Re=Ce(({mode:d,entityId:v,parentStructureId:u,permissions:g,onSaved:r,onCancel:_})=>{const b=(g==null?void 0:g.canEditUsers)??!1,{values:n,errors:S,touched:m,loading:H,onBlur:w,canSubmit:F,submit:U,generalError:I}=Le({mode:d,entityId:v,parentStructureId:u,onSaved:r}),[x,V]=N(!1),k=re({addTeam:"Company.CompanyStructure.shared.titles.addTeam",editTeam:"Company.CompanyStructure.shared.titles.editTeam",teamTitle:"Company.CompanyStructure.shared.fields.teamTitle",description:"Company.CompanyStructure.shared.fields.description"});return j("div",{children:[a("h3",{className:"acm-structure-panel__title",children:d==="add"?k.addTeam:k.editTeam}),j(ie,{variant:"secondary",className:`company-team-form__card ${x?"is-working":""}`,children:[I?a(le,{className:"company-team-form__notification",type:"error",variant:"secondary",heading:I}):null,x?a("div",{className:"company-team-form__overlay","aria-live":"polite",children:a(de,{size:"small"})}):null,H?a(Ue,{}):j("div",{className:"company-team-form__content",children:[a(pe,{label:k.teamTitle,required:!0,className:"acm-structure-panel__field",error:m.name&&S.name?S.name:void 0,children:a(ye,{name:"team_title",type:"text",value:n.name,onBlur:K=>{const z=K.target;w("name",z.value)},variant:"primary",size:"medium",disabled:!b})}),a(pe,{label:k.description,className:"acm-structure-panel__field",children:a(ye,{name:"team_description",type:"textarea",value:n.description||"",onBlur:K=>{const z=K.target;w("description",z.value)},variant:"primary",size:"medium",disabled:!b})})]})]}),H?null:j("div",{className:"acm-structure-modal__actions",children:[a(Y,{type:"button",variant:"primary",onClick:async()=>{if(!x){V(!0);try{await U()}finally{V(!1)}}},disabled:!F||x,children:"Save"}),a(Y,{type:"button",variant:"secondary",disabled:x,onClick:_,children:"Cancel"})]})]})});function Ve({handleSetInLineAlert:d,permissions:v}={permissions:null}){const u=(v==null?void 0:v.canViewUsers)??!1,g=re({structureSuccess:"Company.CompanyStructure.messages.structureSuccess",structureError:"Company.CompanyStructure.messages.structureError",loadError:"Company.CompanyStructure.messages.loadError",updateError:"Company.CompanyStructure.messages.updateError",failedToMoveItem:"Company.CompanyStructure.messages.failedToMoveItem"}),{structureSuccess:r,structureError:_,loadError:b,updateError:n}=g,[S,m]=N(null),[H,w]=N(!0),[F,U]=N(!1),[I,x]=N(!1),[V,k]=N(new Set),[K,z]=N(null),[Q,y]=N(new Set),[D,f]=N({}),B=ae(d),M=ae(!1),O=ae(!1);ne(()=>{B.current=d},[d]);const E=R((t,s)=>{d&&(t==="success"?d({type:"success",text:s??r}):t==="error"?d({type:"error",text:s??_}):d(),U(!1))},[d,r,_]),W=R(async()=>{if(M.current)return null;if(M.current=!0,!u)return w(!1),m(null),k(new Set),z(null),y(new Set),M.current=!1,null;w(!0);try{const s=await xe();return m(s),k(new Set(s.map(h=>h.id))),w(!1),s}catch{return w(!1),B.current&&B.current({type:"error",text:b}),null}finally{M.current=!1}},[u,b]);ne(()=>{u&&!O.current&&(O.current=!0,W())},[u,W]),ne(()=>{const t=()=>{w(!0),k(new Set),z(null),y(new Set),W()},s=se.on("companyContext/changed",t,{eager:!0});return()=>{s==null||s.off()}},[W]);const G=R(async(t,s)=>{try{return U(!0),await ke({id:t,parentId:s})?(m(e=>e?e.map(o=>o.id===t?{...o,parentId:s}:o):null),k(e=>new Set([...e,s])),oe(ce.EDIT_COMPANY_STRUCTURE_EVENT,{action:"move",nodeId:t,newParentId:s}),se.emit("companyStructure/updated",{message:"Structure updated",action:"move",nodeId:t,newParentId:s,nodes:S||[]}),E("success"),!0):(E("error",g.failedToMoveItem),!1)}catch(h){const e=h instanceof Error?h.message:n;return E("error",e),!1}finally{U(!1)}},[S,E,n,g.failedToMoveItem]),X=R(()=>{S&&k(new Set(S.map(t=>t.id)))},[S]),te=R(()=>{if(S){const t=S.filter(s=>s.parentId===null).map(s=>s.id);k(new Set(t))}},[S]),Z=R(t=>{m(s=>{const h=s?[...s,{id:t.id,parentId:t.parentId,label:t.label,type:t.type,entityId:t.entityId,description:t.description}]:[{id:t.id,parentId:t.parentId,label:t.label,type:t.type,entityId:t.entityId,description:t.description}];return se.emit("companyStructure/updated",{message:"Structure updated",action:"add",nodeId:t.id,newParentId:t.parentId||void 0,nodes:h}),oe(ce.EDIT_COMPANY_STRUCTURE_EVENT,{action:"add",nodeId:t.id,newParentId:t.parentId||void 0,nodeType:t.type}),h}),t.parentId&&k(s=>new Set([...s,t.parentId]))},[]),i=R((t,s,h)=>{s&&m(e=>e?e.map(o=>t.includes(o.id)?{...o,label:s,description:h}:o):null)},[]),C=R(async t=>{if(t.length)try{U(!0);const s=new Map((S||[]).map(h=>[h.id,h]));for(const h of t){const e=s.get(h);!e||!e.entityId||(e.type==="team"?await De(e.entityId):await _e(e.entityId))}m(h=>{if(!h)return null;const e=new Set(t);return h.filter(o=>!e.has(o.id))}),z(null),y(new Set),oe(ce.EDIT_COMPANY_STRUCTURE_EVENT,{action:"remove",nodeIds:t}),se.emit("companyStructure/updated",{message:"Structure updated",action:"remove",nodeIds:t,nodes:S||[]}),E("success")}catch(s){const h=s instanceof Error?s.message:n;E("error",h)}finally{U(!1)}},[S,E,n]),A=R(t=>{f(t)},[]),L=R(()=>{x(!0),E("success",""),f({})},[E]),l=R(t=>{t==null||t(),x(!1),f({})},[]);return{nodes:S,loading:H,submitLoading:F,showEditForm:I,inputChange:D,expanded:V,setExpanded:k,selected:K,setSelected:z,selectedMany:Q,setSelectedMany:y,move:G,expandAll:X,collapseAll:te,insertNode:Z,renameNodes:i,removeNodes:C,handleInputChange:A,handleShowEditForm:L,handleHideEditForm:l,renderAlertMessage:E,working:F}}const ze=Ce(({permissions:d,slots:v})=>{var h;const u=(d==null?void 0:d.canEditUsers)??!1,g=(d==null?void 0:d.canViewUsers)??!1,r=re({expandAll:"Company.CompanyStructure.shared.buttons.expandAll",collapseAll:"Company.CompanyStructure.shared.buttons.collapseAll",addUser:"Company.CompanyStructure.shared.buttons.addUser",addTeam:"Company.CompanyStructure.shared.buttons.addTeam",editSelected:"Company.CompanyStructure.shared.buttons.editSelected",remove:"Company.CompanyStructure.shared.buttons.remove",ok:"Company.CompanyStructure.shared.buttons.ok",cancel:"Company.CompanyStructure.shared.buttons.cancel",close:"Company.CompanyStructure.shared.buttons.close",deleting:"Company.CompanyStructure.shared.buttons.deleting",removing:"Company.CompanyStructure.shared.buttons.removing",noStructureData:"Company.CompanyStructure.messages.noStructureData",processing:"Company.CompanyStructure.shared.messages.processing",cannotDeleteUser:"Company.CompanyStructure.messages.cannotDeleteUser",cannotDeleteTeam:"Company.CompanyStructure.messages.cannotDeleteTeam",removeUserConfirm:"Company.CompanyStructure.messages.removeUserConfirm",deleteTeamConfirm:"Company.CompanyStructure.messages.deleteTeamConfirm",removeItemsConfirm:"Company.CompanyStructure.messages.removeItemsConfirm",teamDescription:"Company.CompanyStructure.shared.messages.teamDescription",removeUserMessage:"Company.CompanyStructure.messages.removeUserMessage",cannotDeleteUserMessage:"Company.CompanyStructure.messages.cannotDeleteUserMessage",cannotDeleteTeamMessage:"Company.CompanyStructure.messages.cannotDeleteTeamMessage",removeItemsMessage:"Company.CompanyStructure.messages.removeItemsMessage",companyStructureActions:"Company.CompanyStructure.shared.ariaLabels.companyStructureActions",expandAllNodes:"Company.CompanyStructure.shared.ariaLabels.expandAllNodes",collapseAllNodes:"Company.CompanyStructure.shared.ariaLabels.collapseAllNodes",addUserAria:"Company.CompanyStructure.shared.ariaLabels.addUser",addTeamAria:"Company.CompanyStructure.shared.ariaLabels.addTeam",editSelectedAria:"Company.CompanyStructure.shared.ariaLabels.editSelected",removeSelectedAria:"Company.CompanyStructure.shared.ariaLabels.removeSelected",showDescription:"Company.CompanyStructure.shared.ariaLabels.showDescription",delete:"Company.CompanyStructure.shared.options.delete",expand:"Company.CompanyStructure.shared.options.expand",collapse:"Company.CompanyStructure.shared.options.collapse",deleteTeamMessage:"Company.CompanyStructure.messages.deleteTeamMessage"}),{inLineAlertProps:_,handleSetInLineAlert:b}=Me(),{nodes:n,loading:S,submitLoading:m,expanded:H,setExpanded:w,selected:F,setSelected:U,selectedMany:I,setSelectedMany:x,move:V,expandAll:k,collapseAll:K,insertNode:z,renameNodes:Q,removeNodes:y}=Ve({handleSetInLineAlert:b,permissions:d}),[D,f]=N(null),[B,M]=N("add"),[O,E]=N(!1),[W,G]=N([]),[X,te]=N({title:"",body:"",confirmLabel:r.remove,blocked:!1}),[Z,i]=N(null),C=()=>f(null),A=((h=n==null?void 0:n.find(e=>e.parentId===null))==null?void 0:h.id)??null,L=(n||[]).map(e=>({id:e.id,parentId:e.parentId,label:e.label})),l=(e,o)=>{let T=e;const c=new Map(L.map($=>[$.id,$])),P=new Set;for(;T&&!P.has(T);){P.add(T);const $=c.get(T);if(!$)break;if($.parentId===o)return!0;T=$.parentId??null}return!1},t=(n||[]).map(e=>({id:e.id,parentId:e.parentId,label:e.label,type:e.type,description:e.description,entityId:e.entityId})),s=j(me,{children:[(()=>{const e=I!=null&&I.size?Array.from(I):F?[F]:[],o=u&&e.length===1,T=u&&e.length>=1;return a(ie,{variant:"secondary",className:"acm-structure-toolbar-card acm-structure-toolbar-card--spaced",children:j("div",{className:"acm-structure-toolbar",role:"toolbar","aria-label":r.companyStructureActions,children:[a(Y,{type:"button",variant:"secondary",onClick:k,"aria-label":r.expandAllNodes,disabled:!g,"aria-disabled":!g,children:r.expandAll}),a(Y,{type:"button",variant:"secondary",onClick:K,"aria-label":r.collapseAllNodes,disabled:!g,"aria-disabled":!g,children:r.collapseAll}),a(Y,{type:"button",variant:"primary",onClick:()=>{M("add"),f("user")},"aria-label":r.addUserAria,disabled:!u,"aria-disabled":!u,children:r.addUser}),a(Y,{type:"button",variant:"primary",onClick:()=>{M("add"),f("team")},"aria-label":r.addTeamAria,disabled:!u,"aria-disabled":!u,children:r.addTeam}),a(Y,{type:"button",variant:"primary",disabled:!o,"aria-disabled":!o,"aria-label":r.editSelectedAria,onClick:()=>{if(!o)return;const c=e,P=n==null?void 0:n.find($=>$.id===c[0]);(P==null?void 0:P.type)==="user"?(M("edit"),f("user")):(M("edit"),f("team"))},children:r.editSelected}),a(Y,{type:"button",variant:"secondary",disabled:!T||m,"aria-disabled":!T||m,"aria-label":r.removeSelectedAria,onClick:()=>{if(!T||m)return;const c=e;if(c.length===1){const P=n==null?void 0:n.find(ee=>ee.id===c[0]);if(!P)return;(n==null?void 0:n.some(ee=>ee.parentId===P.id))?(te({title:P.type==="user"?r.cannotDeleteUser:r.cannotDeleteTeam,body:P.type==="user"?r.cannotDeleteUserMessage:r.cannotDeleteTeamMessage,confirmLabel:void 0,blocked:!0}),G([]),E(!0)):(te({title:P.type==="user"?r.removeUserConfirm:r.deleteTeamConfirm,body:P.type==="user"?r.removeUserMessage:r.deleteTeamMessage,confirmLabel:P.type==="user"?r.remove:r.delete,blocked:!1}),G(c),E(!0))}else te({title:r.removeItemsConfirm,body:r.removeItemsMessage,confirmLabel:r.remove,blocked:!1}),G(c),E(!0)},children:r.remove})]})})})(),D?j("div",{className:"acm-structure-panel",children:[m?j("div",{className:"acm-structure-working","aria-live":"polite",children:[a(de,{size:"small"})," ",r.processing]}):null,D==="user"?(()=>{const e=I!=null&&I.size?Array.from(I):F?[F]:[],o=e.length?n==null?void 0:n.find(c=>c.id===e[0]):void 0,T=(o==null?void 0:o.id)??A;return a(Te,{mode:B,entityId:o==null?void 0:o.entityId,parentStructureId:T,permissions:d,onSaved:c=>{B==="add"?c.structureId&&(z({id:c.structureId,parentId:T,label:c.label,type:c.type,entityId:c.entityId}),c.structureId&&(U(c.structureId),x(new Set([c.structureId])))):e.length&&Q(e,c.label),C()},onCancel:C})})():null,D==="team"?(()=>{const e=I!=null&&I.size?Array.from(I):F?[F]:[],o=e.length?n==null?void 0:n.find(c=>c.id===e[0]):void 0,T=(o==null?void 0:o.id)??A;return a(Re,{mode:B,entityId:o==null?void 0:o.entityId,parentStructureId:T,permissions:d,onSaved:c=>{B==="add"?c.structureId&&(z({id:c.structureId,parentId:T,label:c.label,type:c.type,entityId:c.entityId,description:c.description}),c.structureId&&(U(c.structureId),x(new Set([c.structureId])))):e.length&&Q(e,c.label,c.description),C()},onCancel:C})})():null]}):null,j(ie,{variant:"secondary",className:`acm-structure-tree-card ${m?"is-working":""}`,children:[_&&_.text?a(le,{className:"acm-structure-panel__notification",type:_.type||"success",variant:"secondary",heading:_.text}):null,!S&&!m&&n&&n.length===0?a(le,{className:"acm-structure-panel__notification",type:"warning",variant:"secondary",heading:r.noStructureData}):null,!S&&m?a("div",{className:"acm-structure-tree-overlay","aria-live":"polite",children:a(de,{size:"medium"})}):null,S?a("div",{className:"acm-structure-tree-content",children:a(Ae,{rows:8})}):a("div",{className:"acm-structure-tree-content",children:a(Fe,{rootId:null,items:L,expandedIds:H,selectedId:F,selectedIds:I,onExpandedChange:w,onSelectedChange:U,onSelectedIdsChange:x,renderExpander:({expanded:e,toggle:o})=>a("button",{type:"button",className:`acm-structure-expander acm-structure-expander-button ${e?"is-open":""}`,"aria-label":e?r.collapse:r.expand,onClick:T=>{T.stopPropagation(),o()},children:e?"−":"+"}),renderNode:({item:e,hasChildren:o,select:T,expander:c,checkbox:P,icon:$})=>{var ee;return j("div",{className:"acm-structure-row",onClick:T,children:[o?c?a("span",{onClick:p=>p.stopPropagation(),children:c()}):a("span",{className:"acm-structure-expander acm-structure-expander--placeholder"}):a("span",{className:"acm-structure-expander acm-structure-expander--placeholder"}),a("span",{className:"acm-structure-handle","aria-hidden":!0}),$?a("span",{onClick:p=>p.stopPropagation(),children:$()}):a("span",{className:`acm-structure-icon ${((ee=n==null?void 0:n.find(p=>p.id===e.id))==null?void 0:ee.type)==="team"?"is-team":"is-user"}`,"aria-hidden":!0}),P?a("span",{onClick:p=>p.stopPropagation(),children:P()}):null,a("span",{className:"acm-structure-label",children:e.label}),(()=>{const p=n==null?void 0:n.find(J=>J.id===e.id),q=(p==null?void 0:p.type)==="team"&&p.description||"";return q?a(Y,{type:"button",variant:"secondary",onClick:J=>{J.stopPropagation(),i({id:e.id,text:q})},"aria-label":r.showDescription,className:"acm-structure-description-button",children:"?"}):null})()]})},draggable:()=>!m&&u,canDrop:(e,o)=>{if(!u||e===o)return!1;const T=n==null?void 0:n.find(c=>c.id===e);return T&&T.parentId===o?!1:!l(o,e)},onMove:async({id:e,newParentId:o})=>{u&&await V(e,o)}})})]}),O?a(fe,{open:O,onClose:()=>{m||(E(!1),G([]))},children:j("div",{className:"acm-structure-modal-content",children:[a("h3",{className:"acm-structure-modal-title",children:X.title}),a("div",{children:X.body}),a("div",{className:"acm-structure-modal-actions",children:X.blocked?a(Y,{type:"button",variant:"secondary",disabled:m,onClick:()=>{m||(E(!1),G([]))},children:r.ok}):j(me,{children:[a(Y,{type:"button",variant:"secondary",disabled:m,onClick:()=>{m||(E(!1),G([]))},children:r.cancel}),a(Y,{type:"button",variant:"primary",disabled:m,onClick:async()=>{await y(W),E(!1),G([])},children:m?X.confirmLabel===r.delete?r.deleting:r.removing:X.confirmLabel||r.remove})]})})]})}):null,Z?a(fe,{open:!!Z,onClose:()=>i(null),children:j("div",{className:"acm-structure-modal-content",children:[a("h3",{className:"acm-structure-modal-title",children:r.teamDescription}),a("div",{children:Z.text}),a("div",{className:"acm-structure-modal-actions",children:a(Y,{type:"button",variant:"secondary",onClick:()=>i(null),children:r.close})})]})}):null]});return v!=null&&v.StructureData?a(he,{name:"StructureData",slot:v.StructureData,context:{structureData:t,Default:s}}):s}),Oe=()=>{const d=re({fetchPermissionsError:"Company.CompanyStructure.messages.fetchPermissionsError"}),[v,u]=N(null),[g,r]=N(!0),[_,b]=N(null);return ne(()=>{let n=!0;return(async()=>{var m,H;try{r(!0),b(null);const{roleResponse:w}=await ve();if(!n)return;const F=(H=(m=w==null?void 0:w.data)==null?void 0:m.customer)==null?void 0:H.role,U=Ie(F);u(U)}catch(w){if(!n)return;b(w instanceof Error?w:new Error(d.fetchPermissionsError))}finally{n&&r(!1)}})(),()=>{n=!1}},[]),{permissions:v,loading:g,error:_}},at=({className:d,withHeader:v=!1,slots:u})=>{const g=re({containerTitle:"Company.CompanyStructure.containerTitle"}),{permissions:r}=Oe();return j("div",{className:ge(["account-company-structure",d]),children:[v?a(Se,{title:g.containerTitle,divider:!1,className:"company-structure__title"}):null,a(ze,{slots:u,permissions:r})]})};export{at as CompanyStructure,at as default};
3
+ import{jsx as a,jsxs as j,Fragment as me}from"@dropins/tools/preact-jsx-runtime.js";import{Slot as he,classes as ge}from"@dropins/tools/lib.js";import{Checkbox as be,Card as ie,InLineAlert as le,ProgressSpinner as de,Field as pe,Input as ye,Button as Y,Modal as fe,Header as Se}from"@dropins/tools/components.js";import{useMemo as ue,useRef as ae,useCallback as R,useState as N,useEffect as ne}from"@dropins/tools/preact-hooks.js";import{f as ve}from"../chunks/fetchUserPermissions.js";import{b as Ie}from"../chunks/company-permissions.js";import{useText as re}from"@dropins/tools/i18n.js";import{memo as Ce}from"@dropins/tools/preact-compat.js";import{C as Te}from"../chunks/CompanyUserForm.js";import{c as we,u as Ne,d as Ee}from"../chunks/useInLineAlert.js";import{events as se}from"@dropins/tools/event-bus.js";import{p as oe,E as ce}from"../chunks/acdl.js";import{a as xe,c as ke,b as De,g as _e,u as Ue,d as Me}from"../chunks/updateCompanyTeam.js";import{d as Ae}from"../chunks/updateCompanyUser.js";import"../chunks/network-error.js";import"@dropins/tools/fetch-graphql.js";const Pe=d=>{const v=new Map;for(const u of d){const g=u.parentId??null,r=v.get(g)??[];r.push(u),v.set(g,r)}for(const[,u]of v)u.sort((g,r)=>g.label.localeCompare(r.label));return v},Fe=({items:d,rootId:v=null,className:u,expandedIds:g,selectedId:r=null,selectedIds:_,onExpandedChange:b,onSelectedChange:n,onSelectedIdsChange:S,renderNode:m,role:H="tree",draggable:w,canDrop:F,onMove:U,isCheckable:I,checkedIds:x,onCheckedChange:V,renderExpander:k,renderCheckbox:K,renderIcon:z})=>{const Q=ue(()=>Pe(d),[d]),y=ae(null),D=ae(!1),f=ue(()=>new Map(d.map(i=>[i.id,i])),[d]),B=(i,C)=>{const A=[],L=[C];for(;L.length;){const l=L.pop(),t=i.get(l)??[];for(const s of t)A.push(s.id),L.push(s.id)}return A},M=R(i=>B(Q,i),[Q]),O=R(i=>I?I(i):!0,[I]),E=R(i=>{if(!f.get(i))return{checked:!1,indeterminate:!1};const A=[i,...M(i)].filter(t=>{const s=f.get(t);return s?O(s):!1});if(A.length===0)return{checked:!1,indeterminate:!1};const L=x??new Set,l=A.reduce((t,s)=>L.has(s)?t+1:t,0);return l===0?{checked:!1,indeterminate:!1}:l===A.length?{checked:!0,indeterminate:!1}:{checked:!1,indeterminate:!0}},[f,M,O,x]),W=R(i=>{if(!V)return;const C=new Set(x??[]),{checked:A}=E(i),L=[i,...M(i)].filter(l=>{const t=f.get(l);return t?O(t):!1});if(A)for(const l of L)C.delete(l);else for(const l of L)C.add(l);V(C)},[x,V,E,M,f,O]),G=R(i=>a(be,{name:`tree-checkbox-${Math.random().toString(36).substr(2,9)}`,checked:i.checked,indeterminate:i.indeterminate,onChange:i.onCheck}),[]),X=R(i=>{const C=new Set(g);C.has(i)?C.delete(i):C.add(i),b(C)},[g,b]),te=R(i=>{const C=f.get(i);if(C&&O(C)&&V&&W(i),!S){n==null||n(i);return}const A=!!D.current,L=A?new Set(_??[]):new Set;A&&L.has(i)?L.delete(i):L.add(i),S(L),D.current=!1},[n,S,_,f,O,V,W]),Z=(i,C)=>{const A=Q.get(i)??[];return A.length?a("ul",{role:C===1?H:"group",className:C===1?u??"acm-tree":"acm-tree__group",children:A.map((l,t)=>{const s=(Q.get(l.id)??[]).length>0,h=g.has(l.id),e=_?_.has(l.id):r===l.id,o=!!(w!=null&&w(l)),T=p=>F?F(p,l.id):p!==l.id,c=s?()=>k?k({expanded:h,hasChildren:s,toggle:()=>X(l.id)}):null:void 0,P=(()=>{if(!V)return;const p=f.get(l.id);if(!p||!O(p))return;const q=E(l.id),J=K||G;return()=>J({checked:q.checked,indeterminate:q.indeterminate,onCheck:()=>W(l.id)})})(),$=z?()=>z({item:l,level:C,hasChildren:s,expanded:h}):void 0,ee=m({item:l,level:C,expanded:h,selected:!!e,hasChildren:s,toggle:()=>X(l.id),select:()=>te(l.id),...c?{expander:c}:{},...P?{checkbox:P}:{},...$?{icon:$}:{}});return j("li",{role:"treeitem",className:"acm-tree__item","data-level":C,"aria-expanded":s?h:void 0,"aria-selected":e||void 0,"aria-level":C,"aria-setsize":A.length,"aria-posinset":t+1,draggable:o,onMouseDown:p=>{D.current=!!(p.metaKey||p.ctrlKey)},onDragStart:p=>{var q;if(p.stopPropagation(),!!o){y.current=l.id;try{(q=p.dataTransfer)==null||q.setData("text/plain",l.id)}catch{}}},onDragOver:p=>{var J;p.stopPropagation();const q=y.current??(((J=p.dataTransfer)==null?void 0:J.getData("text/plain"))||"");q&&T(q)&&p.preventDefault()},onDrop:p=>{var J;p.stopPropagation();const q=y.current??(((J=p.dataTransfer)==null?void 0:J.getData("text/plain"))||"");y.current=null,q&&T(q)&&(U==null||U({id:q,newParentId:l.id}))},children:[ee,s&&h?Z(l.id,C+1):null]},l.id)})}):null};return a("div",{className:"acm-tree-root",children:Z(v,1)})};function Le(d){const{mode:v,entityId:u,parentStructureId:g,onSaved:r}=d,_=re({teamTitleRequired:"Company.CompanyStructure.shared.validation.teamTitleRequired",createTeamError:"Company.CompanyStructure.messages.createTeamError",saveTeamError:"Company.CompanyStructure.messages.saveTeamError"}),[b,n]=N({id:"",name:"",description:""}),[S,m]=N({}),[H,w]=N({}),[F,U]=N(!1),[I,x]=N(null);ne(()=>{v!=="edit"||!u||(U(!0),xe(u).then(y=>{y&&n({id:y.id,name:y.name||"",description:y.description||""})}).finally(()=>U(!1)))},[v,u]);const V=(y,D)=>y==="name"?D.trim()?null:_.teamTitleRequired:null,k=(y,D)=>{n(f=>({...f,[y]:D})),I&&x(null)},K=(y,D)=>{D!==void 0&&k(y,D),w(M=>({...M,[y]:!0}));const f=D!==void 0?D:b[y]||"",B=V(y,f);m(B?M=>({...M,[y]:B}):M=>{const O={...M};return delete O[y],O})},z=ue(()=>!!b.name.trim(),[b.name]);return{values:b,errors:S,touched:H,loading:F,setValue:k,onBlur:K,canSubmit:z,submit:async()=>{const y=V("name",b.name);if(y){m({name:y}),w({name:!0});return}const D=b.name;try{if(v==="add"){const f=await ke({name:b.name,description:b.description||null,targetId:g??null});if(!f){x(_.createTeamError);return}r({label:D,structureId:f.structureId,entityId:f.id,type:"team",description:b.description||void 0})}else u&&(await De({id:u,name:b.name,description:b.description||null}),r({label:D,entityId:u,type:"team",description:b.description||void 0}))}catch(f){const B=f instanceof Error?f.message:_.saveTeamError;x(B)}},generalError:I}}const Re=Ce(({mode:d,entityId:v,parentStructureId:u,permissions:g,onSaved:r,onCancel:_})=>{const b=(g==null?void 0:g.canEditUsers)??!1,{values:n,errors:S,touched:m,loading:H,onBlur:w,canSubmit:F,submit:U,generalError:I}=Le({mode:d,entityId:v,parentStructureId:u,onSaved:r}),[x,V]=N(!1),k=re({addTeam:"Company.CompanyStructure.shared.titles.addTeam",editTeam:"Company.CompanyStructure.shared.titles.editTeam",teamTitle:"Company.CompanyStructure.shared.fields.teamTitle",description:"Company.CompanyStructure.shared.fields.description"});return j("div",{children:[a("h3",{className:"acm-structure-panel__title",children:d==="add"?k.addTeam:k.editTeam}),j(ie,{variant:"secondary",className:`company-team-form__card ${x?"is-working":""}`,children:[I?a(le,{className:"company-team-form__notification",type:"error",variant:"secondary",heading:I}):null,x?a("div",{className:"company-team-form__overlay","aria-live":"polite",children:a(de,{size:"small"})}):null,H?a(we,{}):j("div",{className:"company-team-form__content",children:[a(pe,{label:k.teamTitle,required:!0,className:"acm-structure-panel__field",error:m.name&&S.name?S.name:void 0,children:a(ye,{name:"team_title",type:"text",value:n.name,onBlur:K=>{const z=K.target;w("name",z.value)},variant:"primary",size:"medium",disabled:!b})}),a(pe,{label:k.description,className:"acm-structure-panel__field",children:a(ye,{name:"team_description",type:"textarea",value:n.description||"",onBlur:K=>{const z=K.target;w("description",z.value)},variant:"primary",size:"medium",disabled:!b})})]})]}),H?null:j("div",{className:"acm-structure-modal__actions",children:[a(Y,{type:"button",variant:"primary",onClick:async()=>{if(!x){V(!0);try{await U()}finally{V(!1)}}},disabled:!F||x,children:"Save"}),a(Y,{type:"button",variant:"secondary",disabled:x,onClick:_,children:"Cancel"})]})]})});function Ve({handleSetInLineAlert:d,permissions:v}={permissions:null}){const u=(v==null?void 0:v.canViewUsers)??!1,g=re({structureSuccess:"Company.CompanyStructure.messages.structureSuccess",structureError:"Company.CompanyStructure.messages.structureError",loadError:"Company.CompanyStructure.messages.loadError",updateError:"Company.CompanyStructure.messages.updateError",failedToMoveItem:"Company.CompanyStructure.messages.failedToMoveItem"}),{structureSuccess:r,structureError:_,loadError:b,updateError:n}=g,[S,m]=N(null),[H,w]=N(!0),[F,U]=N(!1),[I,x]=N(!1),[V,k]=N(new Set),[K,z]=N(null),[Q,y]=N(new Set),[D,f]=N({}),B=ae(d),M=ae(!1),O=ae(!1);ne(()=>{B.current=d},[d]);const E=R((t,s)=>{d&&(t==="success"?d({type:"success",text:s??r}):t==="error"?d({type:"error",text:s??_}):d(),U(!1))},[d,r,_]),W=R(async()=>{if(M.current)return null;if(M.current=!0,!u)return w(!1),m(null),k(new Set),z(null),y(new Set),M.current=!1,null;w(!0);try{const s=await _e();return m(s),k(new Set(s.map(h=>h.id))),w(!1),s}catch{return w(!1),B.current&&B.current({type:"error",text:b}),null}finally{M.current=!1}},[u,b]);ne(()=>{u&&!O.current&&(O.current=!0,W())},[u,W]),ne(()=>{const t=()=>{w(!0),k(new Set),z(null),y(new Set),W()},s=se.on("companyContext/changed",t,{eager:!0});return()=>{s==null||s.off()}},[W]);const G=R(async(t,s)=>{try{return U(!0),await Ue({id:t,parentId:s})?(m(e=>e?e.map(o=>o.id===t?{...o,parentId:s}:o):null),k(e=>new Set([...e,s])),oe(ce.EDIT_COMPANY_STRUCTURE_EVENT,{action:"move",nodeId:t,newParentId:s}),se.emit("companyStructure/updated",{message:"Structure updated",action:"move",nodeId:t,newParentId:s,nodes:S||[]}),E("success"),!0):(E("error",g.failedToMoveItem),!1)}catch(h){const e=h instanceof Error?h.message:n;return E("error",e),!1}finally{U(!1)}},[S,E,n,g.failedToMoveItem]),X=R(()=>{S&&k(new Set(S.map(t=>t.id)))},[S]),te=R(()=>{if(S){const t=S.filter(s=>s.parentId===null).map(s=>s.id);k(new Set(t))}},[S]),Z=R(t=>{m(s=>{const h=s?[...s,{id:t.id,parentId:t.parentId,label:t.label,type:t.type,entityId:t.entityId,description:t.description}]:[{id:t.id,parentId:t.parentId,label:t.label,type:t.type,entityId:t.entityId,description:t.description}];return se.emit("companyStructure/updated",{message:"Structure updated",action:"add",nodeId:t.id,newParentId:t.parentId||void 0,nodes:h}),oe(ce.EDIT_COMPANY_STRUCTURE_EVENT,{action:"add",nodeId:t.id,newParentId:t.parentId||void 0,nodeType:t.type}),h}),t.parentId&&k(s=>new Set([...s,t.parentId]))},[]),i=R((t,s,h)=>{s&&m(e=>e?e.map(o=>t.includes(o.id)?{...o,label:s,description:h}:o):null)},[]),C=R(async t=>{if(t.length)try{U(!0);const s=new Map((S||[]).map(h=>[h.id,h]));for(const h of t){const e=s.get(h);!e||!e.entityId||(e.type==="team"?await Me(e.entityId):await Ae(e.entityId))}m(h=>{if(!h)return null;const e=new Set(t);return h.filter(o=>!e.has(o.id))}),z(null),y(new Set),oe(ce.EDIT_COMPANY_STRUCTURE_EVENT,{action:"remove",nodeIds:t}),se.emit("companyStructure/updated",{message:"Structure updated",action:"remove",nodeIds:t,nodes:S||[]}),E("success")}catch(s){const h=s instanceof Error?s.message:n;E("error",h)}finally{U(!1)}},[S,E,n]),A=R(t=>{f(t)},[]),L=R(()=>{x(!0),E("success",""),f({})},[E]),l=R(t=>{t==null||t(),x(!1),f({})},[]);return{nodes:S,loading:H,submitLoading:F,showEditForm:I,inputChange:D,expanded:V,setExpanded:k,selected:K,setSelected:z,selectedMany:Q,setSelectedMany:y,move:G,expandAll:X,collapseAll:te,insertNode:Z,renameNodes:i,removeNodes:C,handleInputChange:A,handleShowEditForm:L,handleHideEditForm:l,renderAlertMessage:E,working:F}}const ze=Ce(({permissions:d,slots:v})=>{var h;const u=(d==null?void 0:d.canEditUsers)??!1,g=(d==null?void 0:d.canViewUsers)??!1,r=re({expandAll:"Company.CompanyStructure.shared.buttons.expandAll",collapseAll:"Company.CompanyStructure.shared.buttons.collapseAll",addUser:"Company.CompanyStructure.shared.buttons.addUser",addTeam:"Company.CompanyStructure.shared.buttons.addTeam",editSelected:"Company.CompanyStructure.shared.buttons.editSelected",remove:"Company.CompanyStructure.shared.buttons.remove",ok:"Company.CompanyStructure.shared.buttons.ok",cancel:"Company.CompanyStructure.shared.buttons.cancel",close:"Company.CompanyStructure.shared.buttons.close",deleting:"Company.CompanyStructure.shared.buttons.deleting",removing:"Company.CompanyStructure.shared.buttons.removing",noStructureData:"Company.CompanyStructure.messages.noStructureData",processing:"Company.CompanyStructure.shared.messages.processing",cannotDeleteUser:"Company.CompanyStructure.messages.cannotDeleteUser",cannotDeleteTeam:"Company.CompanyStructure.messages.cannotDeleteTeam",removeUserConfirm:"Company.CompanyStructure.messages.removeUserConfirm",deleteTeamConfirm:"Company.CompanyStructure.messages.deleteTeamConfirm",removeItemsConfirm:"Company.CompanyStructure.messages.removeItemsConfirm",teamDescription:"Company.CompanyStructure.shared.messages.teamDescription",removeUserMessage:"Company.CompanyStructure.messages.removeUserMessage",cannotDeleteUserMessage:"Company.CompanyStructure.messages.cannotDeleteUserMessage",cannotDeleteTeamMessage:"Company.CompanyStructure.messages.cannotDeleteTeamMessage",removeItemsMessage:"Company.CompanyStructure.messages.removeItemsMessage",companyStructureActions:"Company.CompanyStructure.shared.ariaLabels.companyStructureActions",expandAllNodes:"Company.CompanyStructure.shared.ariaLabels.expandAllNodes",collapseAllNodes:"Company.CompanyStructure.shared.ariaLabels.collapseAllNodes",addUserAria:"Company.CompanyStructure.shared.ariaLabels.addUser",addTeamAria:"Company.CompanyStructure.shared.ariaLabels.addTeam",editSelectedAria:"Company.CompanyStructure.shared.ariaLabels.editSelected",removeSelectedAria:"Company.CompanyStructure.shared.ariaLabels.removeSelected",showDescription:"Company.CompanyStructure.shared.ariaLabels.showDescription",delete:"Company.CompanyStructure.shared.options.delete",expand:"Company.CompanyStructure.shared.options.expand",collapse:"Company.CompanyStructure.shared.options.collapse",deleteTeamMessage:"Company.CompanyStructure.messages.deleteTeamMessage"}),{inLineAlertProps:_,handleSetInLineAlert:b}=Ne(),{nodes:n,loading:S,submitLoading:m,expanded:H,setExpanded:w,selected:F,setSelected:U,selectedMany:I,setSelectedMany:x,move:V,expandAll:k,collapseAll:K,insertNode:z,renameNodes:Q,removeNodes:y}=Ve({handleSetInLineAlert:b,permissions:d}),[D,f]=N(null),[B,M]=N("add"),[O,E]=N(!1),[W,G]=N([]),[X,te]=N({title:"",body:"",confirmLabel:r.remove,blocked:!1}),[Z,i]=N(null),C=()=>f(null),A=((h=n==null?void 0:n.find(e=>e.parentId===null))==null?void 0:h.id)??null,L=(n||[]).map(e=>({id:e.id,parentId:e.parentId,label:e.label})),l=(e,o)=>{let T=e;const c=new Map(L.map($=>[$.id,$])),P=new Set;for(;T&&!P.has(T);){P.add(T);const $=c.get(T);if(!$)break;if($.parentId===o)return!0;T=$.parentId??null}return!1},t=(n||[]).map(e=>({id:e.id,parentId:e.parentId,label:e.label,type:e.type,description:e.description,entityId:e.entityId})),s=j(me,{children:[(()=>{const e=I!=null&&I.size?Array.from(I):F?[F]:[],o=u&&e.length===1,T=u&&e.length>=1;return a(ie,{variant:"secondary",className:"acm-structure-toolbar-card acm-structure-toolbar-card--spaced",children:j("div",{className:"acm-structure-toolbar",role:"toolbar","aria-label":r.companyStructureActions,children:[a(Y,{type:"button",variant:"secondary",onClick:k,"aria-label":r.expandAllNodes,disabled:!g,"aria-disabled":!g,children:r.expandAll}),a(Y,{type:"button",variant:"secondary",onClick:K,"aria-label":r.collapseAllNodes,disabled:!g,"aria-disabled":!g,children:r.collapseAll}),a(Y,{type:"button",variant:"primary",onClick:()=>{M("add"),f("user")},"aria-label":r.addUserAria,disabled:!u,"aria-disabled":!u,children:r.addUser}),a(Y,{type:"button",variant:"primary",onClick:()=>{M("add"),f("team")},"aria-label":r.addTeamAria,disabled:!u,"aria-disabled":!u,children:r.addTeam}),a(Y,{type:"button",variant:"primary",disabled:!o,"aria-disabled":!o,"aria-label":r.editSelectedAria,onClick:()=>{if(!o)return;const c=e,P=n==null?void 0:n.find($=>$.id===c[0]);(P==null?void 0:P.type)==="user"?(M("edit"),f("user")):(M("edit"),f("team"))},children:r.editSelected}),a(Y,{type:"button",variant:"secondary",disabled:!T||m,"aria-disabled":!T||m,"aria-label":r.removeSelectedAria,onClick:()=>{if(!T||m)return;const c=e;if(c.length===1){const P=n==null?void 0:n.find(ee=>ee.id===c[0]);if(!P)return;(n==null?void 0:n.some(ee=>ee.parentId===P.id))?(te({title:P.type==="user"?r.cannotDeleteUser:r.cannotDeleteTeam,body:P.type==="user"?r.cannotDeleteUserMessage:r.cannotDeleteTeamMessage,confirmLabel:void 0,blocked:!0}),G([]),E(!0)):(te({title:P.type==="user"?r.removeUserConfirm:r.deleteTeamConfirm,body:P.type==="user"?r.removeUserMessage:r.deleteTeamMessage,confirmLabel:P.type==="user"?r.remove:r.delete,blocked:!1}),G(c),E(!0))}else te({title:r.removeItemsConfirm,body:r.removeItemsMessage,confirmLabel:r.remove,blocked:!1}),G(c),E(!0)},children:r.remove})]})})})(),D?j("div",{className:"acm-structure-panel",children:[m?j("div",{className:"acm-structure-working","aria-live":"polite",children:[a(de,{size:"small"})," ",r.processing]}):null,D==="user"?(()=>{const e=I!=null&&I.size?Array.from(I):F?[F]:[],o=e.length?n==null?void 0:n.find(c=>c.id===e[0]):void 0,T=(o==null?void 0:o.id)??A;return a(Te,{mode:B,entityId:o==null?void 0:o.entityId,parentStructureId:T,permissions:d,onSaved:c=>{B==="add"?c.structureId&&(z({id:c.structureId,parentId:T,label:c.label,type:c.type,entityId:c.entityId}),c.structureId&&(U(c.structureId),x(new Set([c.structureId])))):e.length&&Q(e,c.label),C()},onCancel:C})})():null,D==="team"?(()=>{const e=I!=null&&I.size?Array.from(I):F?[F]:[],o=e.length?n==null?void 0:n.find(c=>c.id===e[0]):void 0,T=(o==null?void 0:o.id)??A;return a(Re,{mode:B,entityId:o==null?void 0:o.entityId,parentStructureId:T,permissions:d,onSaved:c=>{B==="add"?c.structureId&&(z({id:c.structureId,parentId:T,label:c.label,type:c.type,entityId:c.entityId,description:c.description}),c.structureId&&(U(c.structureId),x(new Set([c.structureId])))):e.length&&Q(e,c.label,c.description),C()},onCancel:C})})():null]}):null,j(ie,{variant:"secondary",className:`acm-structure-tree-card ${m?"is-working":""}`,children:[_&&_.text?a(le,{className:"acm-structure-panel__notification",type:_.type||"success",variant:"secondary",heading:_.text}):null,!S&&!m&&n&&n.length===0?a(le,{className:"acm-structure-panel__notification",type:"warning",variant:"secondary",heading:r.noStructureData}):null,!S&&m?a("div",{className:"acm-structure-tree-overlay","aria-live":"polite",children:a(de,{size:"medium"})}):null,S?a("div",{className:"acm-structure-tree-content",children:a(Ee,{rows:8})}):a("div",{className:"acm-structure-tree-content",children:a(Fe,{rootId:null,items:L,expandedIds:H,selectedId:F,selectedIds:I,onExpandedChange:w,onSelectedChange:U,onSelectedIdsChange:x,renderExpander:({expanded:e,toggle:o})=>a("button",{type:"button",className:`acm-structure-expander acm-structure-expander-button ${e?"is-open":""}`,"aria-label":e?r.collapse:r.expand,onClick:T=>{T.stopPropagation(),o()},children:e?"−":"+"}),renderNode:({item:e,hasChildren:o,select:T,expander:c,checkbox:P,icon:$})=>{var ee;return j("div",{className:"acm-structure-row",onClick:T,children:[o?c?a("span",{onClick:p=>p.stopPropagation(),children:c()}):a("span",{className:"acm-structure-expander acm-structure-expander--placeholder"}):a("span",{className:"acm-structure-expander acm-structure-expander--placeholder"}),a("span",{className:"acm-structure-handle","aria-hidden":!0}),$?a("span",{onClick:p=>p.stopPropagation(),children:$()}):a("span",{className:`acm-structure-icon ${((ee=n==null?void 0:n.find(p=>p.id===e.id))==null?void 0:ee.type)==="team"?"is-team":"is-user"}`,"aria-hidden":!0}),P?a("span",{onClick:p=>p.stopPropagation(),children:P()}):null,a("span",{className:"acm-structure-label",children:e.label}),(()=>{const p=n==null?void 0:n.find(J=>J.id===e.id),q=(p==null?void 0:p.type)==="team"&&p.description||"";return q?a(Y,{type:"button",variant:"secondary",onClick:J=>{J.stopPropagation(),i({id:e.id,text:q})},"aria-label":r.showDescription,className:"acm-structure-description-button",children:"?"}):null})()]})},draggable:()=>!m&&u,canDrop:(e,o)=>{if(!u||e===o)return!1;const T=n==null?void 0:n.find(c=>c.id===e);return T&&T.parentId===o?!1:!l(o,e)},onMove:async({id:e,newParentId:o})=>{u&&await V(e,o)}})})]}),O?a(fe,{open:O,onClose:()=>{m||(E(!1),G([]))},children:j("div",{className:"acm-structure-modal-content",children:[a("h3",{className:"acm-structure-modal-title",children:X.title}),a("div",{children:X.body}),a("div",{className:"acm-structure-modal-actions",children:X.blocked?a(Y,{type:"button",variant:"secondary",disabled:m,onClick:()=>{m||(E(!1),G([]))},children:r.ok}):j(me,{children:[a(Y,{type:"button",variant:"secondary",disabled:m,onClick:()=>{m||(E(!1),G([]))},children:r.cancel}),a(Y,{type:"button",variant:"primary",disabled:m,onClick:async()=>{await y(W),E(!1),G([])},children:m?X.confirmLabel===r.delete?r.deleting:r.removing:X.confirmLabel||r.remove})]})})]})}):null,Z?a(fe,{open:!!Z,onClose:()=>i(null),children:j("div",{className:"acm-structure-modal-content",children:[a("h3",{className:"acm-structure-modal-title",children:r.teamDescription}),a("div",{children:Z.text}),a("div",{className:"acm-structure-modal-actions",children:a(Y,{type:"button",variant:"secondary",onClick:()=>i(null),children:r.close})})]})}):null]});return v!=null&&v.StructureData?a(he,{name:"StructureData",slot:v.StructureData,context:{structureData:t,Default:s}}):s}),Oe=()=>{const d=re({fetchPermissionsError:"Company.CompanyStructure.messages.fetchPermissionsError"}),[v,u]=N(null),[g,r]=N(!0),[_,b]=N(null);return ne(()=>{let n=!0;return(async()=>{var m,H;try{r(!0),b(null);const{roleResponse:w}=await ve();if(!n)return;const F=(H=(m=w==null?void 0:w.data)==null?void 0:m.customer)==null?void 0:H.role,U=Ie(F);u(U)}catch(w){if(!n)return;b(w instanceof Error?w:new Error(d.fetchPermissionsError))}finally{n&&r(!1)}})(),()=>{n=!1}},[]),{permissions:v,loading:g,error:_}},at=({className:d,withHeader:v=!1,slots:u})=>{const g=re({containerTitle:"Company.CompanyStructure.containerTitle"}),{permissions:r}=Oe();return j("div",{className:ge(["account-company-structure",d]),children:[v?a(Se,{title:g.containerTitle,divider:!1,className:"company-structure__title"}):null,a(ze,{slots:u,permissions:r})]})};export{at as CompanyStructure,at as default};
4
4
  //# sourceMappingURL=CompanyStructure.js.map
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsx as a,jsxs as _}from"@dropins/tools/preact-jsx-runtime.js";import{useState as U,useRef as M,useMemo as D,useCallback as f,useEffect as F}from"@dropins/tools/preact-hooks.js";import{Button as P,InLineAlert as Z,Icon as W,Skeleton as H,SkeletonRow as J,Picker as Q,Modal as j}from"@dropins/tools/components.js";import{Fragment as X}from"@dropins/tools/preact.js";import{classes as V,VComponent as q}from"@dropins/tools/lib.js";import{useText as R}from"@dropins/tools/i18n.js";import{C as K}from"../chunks/CompanyUserForm.js";import{u as Y,b as ee}from"../chunks/useInLineAlert.js";import{g as ae,u as te}from"../chunks/updateCompanyUserStatus.js";import{d as ne}from"../chunks/updateCompanyUser.js";import{u as re}from"../chunks/useCompanyContextListener.js";import{f as se}from"../chunks/fetchUserPermissions.js";import"@dropins/tools/preact-compat.js";import"../chunks/company-permissions.js";import"../chunks/network-error.js";import"@dropins/tools/fetch-graphql.js";import"@dropins/tools/event-bus.js";const oe=(s,l)=>!s||typeof s!="string"?"":s==="ACTIVE"&&l.statusActive?l.statusActive:s==="INACTIVE"&&l.statusInactive?l.statusInactive:s.charAt(0).toUpperCase()+s.slice(1).toLowerCase(),ie=(s,l)=>{const n=(s==null?void 0:s.trim())||"",o=(l==null?void 0:l.trim())||"";return`${n} ${o}`.trim()},le=({filterType:s,onFilterChange:l,translations:n})=>{const o=[{type:"all",label:n.showAllUsers,ariaLabel:n.showAllUsers},{type:"active",label:n.showActiveUsers,ariaLabel:n.showActiveUsers},{type:"inactive",label:n.showInactiveUsers,ariaLabel:n.showInactiveUsers}];return a("div",{className:"filterButtons",role:"group","aria-label":n.ariaFilterOptions,children:o.filter(t=>t.type!==s).map(t=>a(P,{variant:"tertiary",onClick:()=>l(t.type),"aria-label":t.ariaLabel,children:t.label},t.type))})},ce=20,G=1,me=({translations:s})=>{const[l,n]=U([]),[o,t]=U(!1),[c,C]=U(G),[h,S]=U(ce),[I,E]=U("all"),[v,y]=U(0),[b,N]=U(1),[k,L]=U(""),[e,r]=U(null),u=M(s);u.current=s;const B=D(()=>{switch(I){case"active":return{status:"ACTIVE"};case"inactive":return{status:"INACTIVE"};default:return}},[I]),d=f(async()=>{t(!0);try{const i=await ae({pageSize:h,currentPage:c,filter:B});n(i.users),y(i.totalCount||i.users.length),N(i.pageInfo.totalPages),L(u.current.ariaDataLoaded.replace("{count}",i.users.length.toString()))}catch{n([]),y(0),N(1),L(u.current.ariaDataError)}finally{t(!1)}},[h,c,B]),g=f(async()=>{try{const{allowedIds:i}=await se();r(i)}catch{r(new Set)}},[]);F(()=>{d()},[d]),F(()=>{g()},[g]);const w=f(i=>{E(i),C(G)},[]),p=f(i=>{let z;if(typeof i=="string")z=i;else if("target"in i&&i.target&&"value"in i.target)z=i.target.value;else return;const $=parseInt(z,10);isNaN($)||(S($),C(G))},[]),A=f(()=>{c>1&&C(c-1)},[c]),T=f(()=>{c<b&&C(c+1)},[c,b]),m=(e==null?void 0:e.has("Magento_Company::users_edit"))||!1,x=f(async()=>{await d()},[d]);return{users:l,userPermissions:e,currentPage:c,pageSize:h,totalItems:v,totalPages:b,filterType:I,filter:B,loading:o,announcement:k,canEditUsers:m,handleFilterChange:w,handlePageSizeChange:p,handlePreviousPage:A,handleNextPage:T,refreshUsers:x}},O=s=>{const[l,n]=U(!1),[o,t]=U(null),c=f(h=>{h&&t(h),n(!0)},[]),C=f(()=>{n(!1),t(null),s==null||s()},[s]);return{isOpen:l,selectedId:o,open:c,close:C}},de=({className:s,userId:l,userStatus:n,onClose:o,isOpen:t=!1,...c})=>{const[C,h]=U(!1),[S,I]=U(!1),{inLineAlertProps:E,showError:v,clearAlert:y}=Y(),b=M(null),N=M(null),k=`modal-title-${l}`,L=`modal-desc-${l}`,e=R({title:"Company.CompanyUsers.managementModal.title",setActiveText:"Company.CompanyUsers.managementModal.setActiveText",setInactiveText:"Company.CompanyUsers.managementModal.setInactiveText",deleteText:"Company.CompanyUsers.managementModal.deleteText",setActiveButton:"Company.CompanyUsers.managementModal.setActiveButton",setInactiveButton:"Company.CompanyUsers.managementModal.setInactiveButton",settingActiveButton:"Company.CompanyUsers.managementModal.settingActiveButton",settingInactiveButton:"Company.CompanyUsers.managementModal.settingInactiveButton",deleteButton:"Company.CompanyUsers.managementModal.deleteButton",deletingButton:"Company.CompanyUsers.managementModal.deletingButton",cancelButton:"Company.CompanyUsers.managementModal.cancelButton",setActiveErrorGeneric:"Company.CompanyUsers.managementModal.setActiveErrorGeneric",setActiveErrorSpecific:"Company.CompanyUsers.managementModal.setActiveErrorSpecific",setInactiveErrorGeneric:"Company.CompanyUsers.managementModal.setInactiveErrorGeneric",setInactiveErrorSpecific:"Company.CompanyUsers.managementModal.setInactiveErrorSpecific",deleteErrorGeneric:"Company.CompanyUsers.managementModal.deleteErrorGeneric",deleteErrorSpecific:"Company.CompanyUsers.managementModal.deleteErrorSpecific",ariaCloseModal:"Company.CompanyUsers.managementModal.ariaLabels.closeModal",ariaModalDescription:"Company.CompanyUsers.managementModal.ariaLabels.modalDescription"}),r=f(async()=>{if(S)return;const p=n==="ACTIVE"?"INACTIVE":"ACTIVE",A=p==="ACTIVE";I(!0),y();try{(await te({id:l,status:p})).success?o():v(A?e.setActiveErrorSpecific:e.setInactiveErrorSpecific)}catch{v(A?e.setActiveErrorGeneric:e.setInactiveErrorGeneric)}finally{I(!1)}},[l,n,o,S,y,v,e.setActiveErrorSpecific,e.setInactiveErrorSpecific,e.setActiveErrorGeneric,e.setInactiveErrorGeneric]),u=f(async()=>{if(!C){h(!0),y();try{(await ne({id:l})).success?o():v(e.deleteErrorSpecific)}catch{v(e.deleteErrorGeneric)}finally{h(!1)}}},[l,o,C,y,v,e.deleteErrorSpecific,e.deleteErrorGeneric]),B=f(()=>{y(),o()},[o,y]),d=f(p=>{if(p.key==="Escape"&&(y(),o()),p.key==="Tab"){const A=b.current;if(!A)return;const T=A.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'),m=T[0],x=T[T.length-1];p.shiftKey?document.activeElement===m&&(x.focus(),p.preventDefault()):document.activeElement===x&&(m.focus(),p.preventDefault())}},[o,y]),g=f(p=>{p.target===p.currentTarget&&(y(),o())},[o,y]),w=f(()=>{y(),o()},[o,y]);return F(()=>{if(t)return N.current=document.activeElement,document.addEventListener("keydown",d),setTimeout(()=>{const p=b.current;if(p){const A=p.querySelector("button");A?A.focus():p.focus()}},100),()=>{document.removeEventListener("keydown",d)};N.current&&N.current.focus()},[t,d]),t?a("div",{className:V(["company-management-company-users-management-modal-overlay",s]),onClick:g,...c,children:_("div",{ref:b,className:"company-management-company-users-management-modal",role:"dialog","aria-modal":"true","aria-labelledby":k,"aria-describedby":L,tabIndex:-1,children:[_("div",{className:"company-management-company-users-management-modal__header",children:[a("h2",{id:k,className:"company-management-company-users-management-modal__title",children:e.title}),a("button",{className:"company-management-company-users-management-modal__close",onClick:w,"aria-label":e.ariaCloseModal,children:"×"})]}),_("div",{id:L,className:"company-management-company-users-management-modal__content",children:[a("p",{className:"company-management-company-users-management-modal__text",children:n==="ACTIVE"?e.setInactiveText:e.setActiveText}),a("p",{className:"company-management-company-users-management-modal__text",children:e.deleteText})]}),(E==null?void 0:E.text)&&a("div",{className:"company-management-company-users-management-modal__alert",role:"alert","aria-live":"assertive",children:a(Z,{type:"error",heading:E.text,icon:E.icon,"data-testid":"companyUsersManagementModalAlert"})}),_("div",{className:"company-management-company-users-management-modal__actions",children:[a(P,{variant:"primary",onClick:r,disabled:S,className:"company-management-company-users-management-modal__button-primary",children:S?n==="ACTIVE"?e.settingInactiveButton:e.settingActiveButton:n==="ACTIVE"?e.setInactiveButton:e.setActiveButton}),a(P,{variant:"tertiary",onClick:u,disabled:C,className:"company-management-company-users-management-modal__button-delete",children:C?e.deletingButton:e.deleteButton}),a(P,{variant:"secondary",onClick:B,className:"company-management-company-users-management-modal__button-cancel",children:e.cancelButton})]})]})}):null},pe=({className:s,children:l,columns:n=[],rowData:o=[],mobileLayout:t="none",caption:c,expandedRows:C=new Set,loading:h=!1,skeletonRowCount:S=10,onSortChange:I,...E})=>{const v=R({sortedAscending:"Dropin.Table.sortedAscending",sortedDescending:"Dropin.Table.sortedDescending",sortBy:"Dropin.Table.sortBy"}),y=e=>{if(!I)return;let r;e.sortBy===!0?r="asc":e.sortBy==="asc"?r="desc":r=!0,I(e.key,r)},b=e=>{if(e.sortBy===void 0)return null;let r,u;return e.sortBy==="asc"?(r="ChevronUp",u=v.sortedAscending.replace("{label}",e.label)):e.sortBy==="desc"?(r="ChevronDown",u=v.sortedDescending.replace("{label}",e.label)):(r="Sort",u=v.sortBy.replace("{label}",e.label)),a(P,{variant:"tertiary",size:"medium",className:"dropin-table__header__sort-button",icon:a(W,{source:r}),"aria-label":u,onClick:()=>y(e)})},N=()=>Array.from({length:S},(e,r)=>a("tr",{className:"dropin-table__body__row",children:n.map(u=>a("td",{className:"dropin-table__body__cell","data-label":u.label,children:a(H,{children:a(J,{variant:"row",size:"small",fullWidth:!0})})},u.key))},`skeleton-${r}`)),k=()=>o.map((e,r)=>{const u=e._rowDetails!==void 0,B=C.has(r);return _(X,{children:[a("tr",{className:"dropin-table__body__row",children:n.map(d=>{const g=e[d.key];return typeof g=="string"||typeof g=="number"?a("td",{className:"dropin-table__body__cell","data-label":d.label,children:g},d.key):a("td",{className:"dropin-table__body__cell","data-label":d.label,children:a(q,{node:g})},d.key)})}),u&&B&&a("tr",{className:"dropin-table__row-details dropin-table__row-details--expanded",id:`row-${r}-details`,children:a("td",{className:"dropin-table__row-details__cell",colSpan:n.length,role:"region","aria-labelledby":`row-${r}-details`,children:typeof e._rowDetails=="string"?e._rowDetails:a(q,{node:e._rowDetails})})},`${r}-details`)]},r)}),L=e=>{if(e.sortBy===!0)return"none";if(e.sortBy==="asc")return"ascending";if(e.sortBy==="desc")return"descending"};return a("div",{className:V(["dropin-table",`dropin-table--mobile-layout-${t}`,s]),children:_("table",{...E,className:"dropin-table__table",children:[c&&a("caption",{className:"dropin-table__caption",children:c}),a("thead",{className:"dropin-table__header",children:a("tr",{className:"dropin-table__header__row",children:n.map(e=>_("th",{className:V(["dropin-table__header__cell",["dropin-table__header__cell--sorted",e.sortBy==="asc"||e.sortBy==="desc"],["dropin-table__header__cell--sortable",e.sortBy!==void 0]]),"aria-sort":L(e),children:[e.label,b(e)]},e.key))})}),a("tbody",{className:"dropin-table__body",children:h?N():k()})]})})},ye=[{text:"20",value:"20"},{text:"30",value:"30"},{text:"50",value:"50"},{text:"100",value:"100"},{text:"200",value:"200"}],Le=({children:s,className:l,...n})=>{const o=M(null),t=R({showAllUsers:"Company.CompanyUsers.filters.showAll",showActiveUsers:"Company.CompanyUsers.filters.showActive",showInactiveUsers:"Company.CompanyUsers.filters.showInactive",idColumn:"Company.CompanyUsers.columns.id",nameColumn:"Company.CompanyUsers.columns.name",emailColumn:"Company.CompanyUsers.columns.email",roleColumn:"Company.CompanyUsers.columns.role",teamColumn:"Company.CompanyUsers.columns.team",statusColumn:"Company.CompanyUsers.columns.status",actionsColumn:"Company.CompanyUsers.columns.actions",statusActive:"Company.CompanyUsers.status.active",statusInactive:"Company.CompanyUsers.status.inactive",emptyTeam:"Company.CompanyUsers.emptyTeam",emptyActions:"Company.CompanyUsers.emptyActions",itemsText:"Company.CompanyUsers.pagination.itemsCount",itemsPerPageLabel:"Company.CompanyUsers.pagination.itemsPerPage",showLabel:"Company.CompanyUsers.pagination.show",perPageLabel:"Company.CompanyUsers.pagination.perPage",previousPage:"Company.CompanyUsers.pagination.previous",nextPage:"Company.CompanyUsers.pagination.next",pageInfo:"Company.CompanyUsers.pagination.pageInfo",ariaLoadingUsers:"Company.CompanyUsers.ariaLabels.loadingUsers",ariaUsersTable:"Company.CompanyUsers.ariaLabels.usersTable",ariaFilterOptions:"Company.CompanyUsers.ariaLabels.filterOptions",ariaPaginationNav:"Company.CompanyUsers.ariaLabels.paginationNav",ariaPageSizeSelector:"Company.CompanyUsers.ariaLabels.pageSizeSelector",ariaPreviousPageFull:"Company.CompanyUsers.ariaLabels.previousPageFull",ariaNextPageFull:"Company.CompanyUsers.ariaLabels.nextPageFull",ariaCurrentPage:"Company.CompanyUsers.ariaLabels.currentPage",ariaShowingUsers:"Company.CompanyUsers.ariaLabels.showingUsers",ariaDataLoaded:"Company.CompanyUsers.ariaLabels.dataLoaded",ariaDataError:"Company.CompanyUsers.ariaLabels.dataError",ariaPageNavigation:"Company.CompanyUsers.ariaLabels.pageNavigation",manageUser:"Company.CompanyUsers.actions.manage",editUser:"Company.CompanyUsers.actions.edit",ariaManageUser:"Company.CompanyUsers.ariaLabels.manageUser",ariaEditUser:"Company.CompanyUsers.ariaLabels.editUser",addNewUser:"Company.CompanyUsers.actions.addNewUser"}),{users:c,loading:C,currentPage:h,pageSize:S,filterType:I,totalItems:E,totalPages:v,announcement:y,canEditUsers:b,handleFilterChange:N,handlePageSizeChange:k,handlePreviousPage:L,handleNextPage:e,refreshUsers:r}=me({translations:{ariaDataLoaded:t.ariaDataLoaded,ariaDataError:t.ariaDataError}}),u=M(t);u.current=t,F(()=>{!C&&o.current&&c.length>0&&o.current.setAttribute("aria-busy","false")},[C,h,I,c.length]);const B=f(()=>{r()},[r]);re(B);const d=O(r),g=O(r),w=O(r),p=D(()=>{const m=u.current;return[{key:"id",label:m.idColumn},{key:"name",label:m.nameColumn},{key:"email",label:m.emailColumn},{key:"role",label:m.roleColumn},{key:"team",label:m.teamColumn},{key:"status",label:m.statusColumn},{key:"actions",label:m.actionsColumn}]},[]),A=D(()=>c.map(m=>{const x=ie(m.firstName,m.lastName),i=u.current;return{id:m.id,name:x,email:m.email,role:m.role,team:m.team||i.emptyTeam,status:oe(m.status,i),actions:b?_("div",{className:"user-actions",children:[a(P,{variant:"tertiary",onClick:()=>g.open(m.id),"aria-label":i.ariaEditUser.replace("{name}",x),className:"edit-user-button",children:i.editUser}),a(P,{variant:"tertiary",onClick:()=>d.open(m.id),"aria-label":i.ariaManageUser.replace("{name}",x),className:"manage-user-button",children:i.manageUser})]}):a("span",{className:"no-actions",children:i.emptyActions})}}),[c,b,g,d]),T=D(()=>c.find(m=>m.id===d.selectedId),[c,d.selectedId]);return _("section",{className:l,...n,children:[a("div",{className:"sr-only",role:"status","aria-live":"polite","aria-atomic":"true",children:y}),a(le,{filterType:I,onFilterChange:N,translations:{showAllUsers:t.showAllUsers,showActiveUsers:t.showActiveUsers,showInactiveUsers:t.showInactiveUsers,ariaFilterOptions:t.ariaFilterOptions}}),a("div",{ref:o,"aria-busy":C,children:C?_("div",{className:"loadingContainer",role:"status","aria-live":"polite",children:[a(ee,{testId:"companyUsersTableLoader"}),a("span",{className:"sr-only",children:t.ariaLoadingUsers})]}):a(pe,{columns:p,rowData:A,mobileLayout:"stacked","aria-label":t.ariaUsersTable,summary:t.ariaShowingUsers.replace("{count}",c.length.toString())})}),_("nav",{"aria-label":t.ariaPaginationNav,className:"paginationContainer",children:[a("div",{"aria-live":"polite","aria-atomic":"true",children:t.itemsText.replace("{count}",E.toString())}),v>1&&_("div",{className:"paginationButtons",role:"group","aria-label":t.ariaPageNavigation,children:[a(P,{variant:"secondary",onClick:L,disabled:h===1,"aria-label":t.ariaPreviousPageFull.replace("{current}",h.toString()),children:t.previousPage}),a("span",{"aria-current":"page","aria-live":"polite",children:t.pageInfo.replace("{current}",h.toString()).replace("{total}",v.toString())}),a(P,{variant:"secondary",onClick:e,disabled:h===v,"aria-label":t.ariaNextPageFull.replace("{current}",h.toString()),children:t.nextPage})]}),_("div",{className:"pageSizeSelector",children:[a("label",{htmlFor:"page-size-select",id:"page-size-label",children:a("span",{children:t.showLabel})}),a(Q,{id:"page-size-select",name:"pageSize",value:S.toString(),options:ye,onChange:k,"aria-labelledby":"page-size-label","aria-describedby":"page-size-description"}),a("span",{id:"page-size-description",children:t.perPageLabel})]})]}),b&&a("div",{className:"addUserButtonContainer",children:a(P,{variant:"primary",onClick:()=>w.open(),"aria-label":t.addNewUser,children:t.addNewUser})}),s,w.isOpen&&b&&a(j,{open:w.isOpen,onClose:w.close,size:"medium",children:a(K,{mode:"add",entityId:null,parentStructureId:null,permissions:{canEditUsers:b},onSaved:w.close,onCancel:w.close})}),g.selectedId&&g.isOpen&&b&&a(j,{open:g.isOpen,onClose:g.close,size:"medium",children:a(K,{mode:"edit",entityId:g.selectedId,parentStructureId:null,permissions:{canEditUsers:b},onSaved:g.close,onCancel:g.close})}),d.selectedId&&b&&T&&a(de,{isOpen:d.isOpen,userId:d.selectedId,userStatus:T.status||"ACTIVE",onClose:d.close})]})};export{Le as CompanyUsers,Le as default};
3
+ import{jsx as a,jsxs as _}from"@dropins/tools/preact-jsx-runtime.js";import{useState as U,useRef as M,useMemo as D,useCallback as f,useEffect as F}from"@dropins/tools/preact-hooks.js";import{Button as P,InLineAlert as Z,Icon as W,Skeleton as H,SkeletonRow as J,Picker as Q,Modal as j}from"@dropins/tools/components.js";import{Fragment as X}from"@dropins/tools/preact.js";import{classes as V,VComponent as q}from"@dropins/tools/lib.js";import{useText as R}from"@dropins/tools/i18n.js";import{C as K}from"../chunks/CompanyUserForm.js";import{u as Y,b as ee}from"../chunks/useInLineAlert.js";import{g as ae,u as te}from"../chunks/updateCompanyUserStatus.js";import{d as ne}from"../chunks/updateCompanyUser.js";import{u as re}from"../chunks/useCompanyContextListener.js";import{f as se}from"../chunks/fetchUserPermissions.js";import"@dropins/tools/preact-compat.js";import"../chunks/company-permissions.js";import"../chunks/network-error.js";import"@dropins/tools/fetch-graphql.js";import"@dropins/tools/event-bus.js";const oe=(s,l)=>!s||typeof s!="string"?"":s==="ACTIVE"&&l.statusActive?l.statusActive:s==="INACTIVE"&&l.statusInactive?l.statusInactive:s.charAt(0).toUpperCase()+s.slice(1).toLowerCase(),ie=(s,l)=>{const n=(s==null?void 0:s.trim())||"",o=(l==null?void 0:l.trim())||"";return`${n} ${o}`.trim()},le=({filterType:s,onFilterChange:l,translations:n})=>{const o=[{type:"all",label:n.showAllUsers,ariaLabel:n.showAllUsers},{type:"active",label:n.showActiveUsers,ariaLabel:n.showActiveUsers},{type:"inactive",label:n.showInactiveUsers,ariaLabel:n.showInactiveUsers}];return a("div",{className:"filterButtons",role:"group","aria-label":n.ariaFilterOptions,children:o.filter(t=>t.type!==s).map(t=>a(P,{variant:"tertiary",onClick:()=>l(t.type),"aria-label":t.ariaLabel,children:t.label},t.type))})},ce=20,G=1,me=({translations:s})=>{const[l,n]=U([]),[o,t]=U(!1),[c,C]=U(G),[h,S]=U(ce),[I,E]=U("all"),[v,u]=U(0),[b,N]=U(1),[k,L]=U(""),[e,r]=U(null),g=M(s);g.current=s;const B=D(()=>{switch(I){case"active":return{status:"ACTIVE"};case"inactive":return{status:"INACTIVE"};default:return}},[I]),d=f(async()=>{t(!0);try{const i=await ae({pageSize:h,currentPage:c,filter:B});n(i.users),u(i.totalCount||i.users.length),N(i.pageInfo.totalPages),L(g.current.ariaDataLoaded.replace("{count}",i.users.length.toString()))}catch{n([]),u(0),N(1),L(g.current.ariaDataError)}finally{t(!1)}},[h,c,B]),p=f(async()=>{try{const{allowedIds:i}=await se();r(i)}catch{r(new Set)}},[]);F(()=>{d()},[d]),F(()=>{p()},[p]);const w=f(i=>{E(i),C(G)},[]),y=f(i=>{let z;if(typeof i=="string")z=i;else if("target"in i&&i.target&&"value"in i.target)z=i.target.value;else return;const $=parseInt(z,10);isNaN($)||(S($),C(G))},[]),A=f(()=>{c>1&&C(c-1)},[c]),T=f(()=>{c<b&&C(c+1)},[c,b]),m=(e==null?void 0:e.has("Magento_Company::users_edit"))||!1,x=f(async()=>{await p(),await d()},[p,d]);return{users:l,userPermissions:e,currentPage:c,pageSize:h,totalItems:v,totalPages:b,filterType:I,filter:B,loading:o,announcement:k,canEditUsers:m,handleFilterChange:w,handlePageSizeChange:y,handlePreviousPage:A,handleNextPage:T,refreshUsers:x}},O=s=>{const[l,n]=U(!1),[o,t]=U(null),c=f(h=>{h&&t(h),n(!0)},[]),C=f(()=>{n(!1),t(null),s==null||s()},[s]);return{isOpen:l,selectedId:o,open:c,close:C}},de=({className:s,userId:l,userStatus:n,onClose:o,isOpen:t=!1,...c})=>{const[C,h]=U(!1),[S,I]=U(!1),{inLineAlertProps:E,showError:v,clearAlert:u}=Y(),b=M(null),N=M(null),k=`modal-title-${l}`,L=`modal-desc-${l}`,e=R({title:"Company.CompanyUsers.managementModal.title",setActiveText:"Company.CompanyUsers.managementModal.setActiveText",setInactiveText:"Company.CompanyUsers.managementModal.setInactiveText",deleteText:"Company.CompanyUsers.managementModal.deleteText",setActiveButton:"Company.CompanyUsers.managementModal.setActiveButton",setInactiveButton:"Company.CompanyUsers.managementModal.setInactiveButton",settingActiveButton:"Company.CompanyUsers.managementModal.settingActiveButton",settingInactiveButton:"Company.CompanyUsers.managementModal.settingInactiveButton",deleteButton:"Company.CompanyUsers.managementModal.deleteButton",deletingButton:"Company.CompanyUsers.managementModal.deletingButton",cancelButton:"Company.CompanyUsers.managementModal.cancelButton",setActiveErrorGeneric:"Company.CompanyUsers.managementModal.setActiveErrorGeneric",setActiveErrorSpecific:"Company.CompanyUsers.managementModal.setActiveErrorSpecific",setInactiveErrorGeneric:"Company.CompanyUsers.managementModal.setInactiveErrorGeneric",setInactiveErrorSpecific:"Company.CompanyUsers.managementModal.setInactiveErrorSpecific",deleteErrorGeneric:"Company.CompanyUsers.managementModal.deleteErrorGeneric",deleteErrorSpecific:"Company.CompanyUsers.managementModal.deleteErrorSpecific",ariaCloseModal:"Company.CompanyUsers.managementModal.ariaLabels.closeModal",ariaModalDescription:"Company.CompanyUsers.managementModal.ariaLabels.modalDescription"}),r=f(async()=>{if(S)return;const y=n==="ACTIVE"?"INACTIVE":"ACTIVE",A=y==="ACTIVE";I(!0),u();try{(await te({id:l,status:y})).success?o():v(A?e.setActiveErrorSpecific:e.setInactiveErrorSpecific)}catch{v(A?e.setActiveErrorGeneric:e.setInactiveErrorGeneric)}finally{I(!1)}},[l,n,o,S,u,v,e.setActiveErrorSpecific,e.setInactiveErrorSpecific,e.setActiveErrorGeneric,e.setInactiveErrorGeneric]),g=f(async()=>{if(!C){h(!0),u();try{(await ne({id:l})).success?o():v(e.deleteErrorSpecific)}catch{v(e.deleteErrorGeneric)}finally{h(!1)}}},[l,o,C,u,v,e.deleteErrorSpecific,e.deleteErrorGeneric]),B=f(()=>{u(),o()},[o,u]),d=f(y=>{if(y.key==="Escape"&&(u(),o()),y.key==="Tab"){const A=b.current;if(!A)return;const T=A.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'),m=T[0],x=T[T.length-1];y.shiftKey?document.activeElement===m&&(x.focus(),y.preventDefault()):document.activeElement===x&&(m.focus(),y.preventDefault())}},[o,u]),p=f(y=>{y.target===y.currentTarget&&(u(),o())},[o,u]),w=f(()=>{u(),o()},[o,u]);return F(()=>{if(t)return N.current=document.activeElement,document.addEventListener("keydown",d),setTimeout(()=>{const y=b.current;if(y){const A=y.querySelector("button");A?A.focus():y.focus()}},100),()=>{document.removeEventListener("keydown",d)};N.current&&N.current.focus()},[t,d]),t?a("div",{className:V(["company-management-company-users-management-modal-overlay",s]),onClick:p,...c,children:_("div",{ref:b,className:"company-management-company-users-management-modal",role:"dialog","aria-modal":"true","aria-labelledby":k,"aria-describedby":L,tabIndex:-1,children:[_("div",{className:"company-management-company-users-management-modal__header",children:[a("h2",{id:k,className:"company-management-company-users-management-modal__title",children:e.title}),a("button",{className:"company-management-company-users-management-modal__close",onClick:w,"aria-label":e.ariaCloseModal,children:"×"})]}),_("div",{id:L,className:"company-management-company-users-management-modal__content",children:[a("p",{className:"company-management-company-users-management-modal__text",children:n==="ACTIVE"?e.setInactiveText:e.setActiveText}),a("p",{className:"company-management-company-users-management-modal__text",children:e.deleteText})]}),(E==null?void 0:E.text)&&a("div",{className:"company-management-company-users-management-modal__alert",role:"alert","aria-live":"assertive",children:a(Z,{type:"error",heading:E.text,icon:E.icon,"data-testid":"companyUsersManagementModalAlert"})}),_("div",{className:"company-management-company-users-management-modal__actions",children:[a(P,{variant:"primary",onClick:r,disabled:S,className:"company-management-company-users-management-modal__button-primary",children:S?n==="ACTIVE"?e.settingInactiveButton:e.settingActiveButton:n==="ACTIVE"?e.setInactiveButton:e.setActiveButton}),a(P,{variant:"tertiary",onClick:g,disabled:C,className:"company-management-company-users-management-modal__button-delete",children:C?e.deletingButton:e.deleteButton}),a(P,{variant:"secondary",onClick:B,className:"company-management-company-users-management-modal__button-cancel",children:e.cancelButton})]})]})}):null},pe=({className:s,children:l,columns:n=[],rowData:o=[],mobileLayout:t="none",caption:c,expandedRows:C=new Set,loading:h=!1,skeletonRowCount:S=10,onSortChange:I,...E})=>{const v=R({sortedAscending:"Dropin.Table.sortedAscending",sortedDescending:"Dropin.Table.sortedDescending",sortBy:"Dropin.Table.sortBy"}),u=e=>{if(!I)return;let r;e.sortBy===!0?r="asc":e.sortBy==="asc"?r="desc":r=!0,I(e.key,r)},b=e=>{if(e.sortBy===void 0)return null;let r,g;return e.sortBy==="asc"?(r="ChevronUp",g=v.sortedAscending.replace("{label}",e.label)):e.sortBy==="desc"?(r="ChevronDown",g=v.sortedDescending.replace("{label}",e.label)):(r="Sort",g=v.sortBy.replace("{label}",e.label)),a(P,{variant:"tertiary",size:"medium",className:"dropin-table__header__sort-button",icon:a(W,{source:r}),"aria-label":g,onClick:()=>u(e)})},N=()=>Array.from({length:S},(e,r)=>a("tr",{className:"dropin-table__body__row",children:n.map(g=>a("td",{className:"dropin-table__body__cell","data-label":g.label,children:a(H,{children:a(J,{variant:"row",size:"small",fullWidth:!0})})},g.key))},`skeleton-${r}`)),k=()=>o.map((e,r)=>{const g=e._rowDetails!==void 0,B=C.has(r);return _(X,{children:[a("tr",{className:"dropin-table__body__row",children:n.map(d=>{const p=e[d.key];return typeof p=="string"||typeof p=="number"?a("td",{className:"dropin-table__body__cell","data-label":d.label,children:p},d.key):a("td",{className:"dropin-table__body__cell","data-label":d.label,children:a(q,{node:p})},d.key)})}),g&&B&&a("tr",{className:"dropin-table__row-details dropin-table__row-details--expanded",id:`row-${r}-details`,children:a("td",{className:"dropin-table__row-details__cell",colSpan:n.length,role:"region","aria-labelledby":`row-${r}-details`,children:typeof e._rowDetails=="string"?e._rowDetails:a(q,{node:e._rowDetails})})},`${r}-details`)]},r)}),L=e=>{if(e.sortBy===!0)return"none";if(e.sortBy==="asc")return"ascending";if(e.sortBy==="desc")return"descending"};return a("div",{className:V(["dropin-table",`dropin-table--mobile-layout-${t}`,s]),children:_("table",{...E,className:"dropin-table__table",children:[c&&a("caption",{className:"dropin-table__caption",children:c}),a("thead",{className:"dropin-table__header",children:a("tr",{className:"dropin-table__header__row",children:n.map(e=>_("th",{className:V(["dropin-table__header__cell",["dropin-table__header__cell--sorted",e.sortBy==="asc"||e.sortBy==="desc"],["dropin-table__header__cell--sortable",e.sortBy!==void 0]]),"aria-sort":L(e),children:[e.label,b(e)]},e.key))})}),a("tbody",{className:"dropin-table__body",children:h?N():k()})]})})},ye=[{text:"20",value:"20"},{text:"30",value:"30"},{text:"50",value:"50"},{text:"100",value:"100"},{text:"200",value:"200"}],Le=({children:s,className:l,...n})=>{const o=M(null),t=R({showAllUsers:"Company.CompanyUsers.filters.showAll",showActiveUsers:"Company.CompanyUsers.filters.showActive",showInactiveUsers:"Company.CompanyUsers.filters.showInactive",idColumn:"Company.CompanyUsers.columns.id",nameColumn:"Company.CompanyUsers.columns.name",emailColumn:"Company.CompanyUsers.columns.email",roleColumn:"Company.CompanyUsers.columns.role",teamColumn:"Company.CompanyUsers.columns.team",statusColumn:"Company.CompanyUsers.columns.status",actionsColumn:"Company.CompanyUsers.columns.actions",statusActive:"Company.CompanyUsers.status.active",statusInactive:"Company.CompanyUsers.status.inactive",emptyTeam:"Company.CompanyUsers.emptyTeam",emptyActions:"Company.CompanyUsers.emptyActions",itemsText:"Company.CompanyUsers.pagination.itemsCount",itemsPerPageLabel:"Company.CompanyUsers.pagination.itemsPerPage",showLabel:"Company.CompanyUsers.pagination.show",perPageLabel:"Company.CompanyUsers.pagination.perPage",previousPage:"Company.CompanyUsers.pagination.previous",nextPage:"Company.CompanyUsers.pagination.next",pageInfo:"Company.CompanyUsers.pagination.pageInfo",ariaLoadingUsers:"Company.CompanyUsers.ariaLabels.loadingUsers",ariaUsersTable:"Company.CompanyUsers.ariaLabels.usersTable",ariaFilterOptions:"Company.CompanyUsers.ariaLabels.filterOptions",ariaPaginationNav:"Company.CompanyUsers.ariaLabels.paginationNav",ariaPageSizeSelector:"Company.CompanyUsers.ariaLabels.pageSizeSelector",ariaPreviousPageFull:"Company.CompanyUsers.ariaLabels.previousPageFull",ariaNextPageFull:"Company.CompanyUsers.ariaLabels.nextPageFull",ariaCurrentPage:"Company.CompanyUsers.ariaLabels.currentPage",ariaShowingUsers:"Company.CompanyUsers.ariaLabels.showingUsers",ariaDataLoaded:"Company.CompanyUsers.ariaLabels.dataLoaded",ariaDataError:"Company.CompanyUsers.ariaLabels.dataError",ariaPageNavigation:"Company.CompanyUsers.ariaLabels.pageNavigation",manageUser:"Company.CompanyUsers.actions.manage",editUser:"Company.CompanyUsers.actions.edit",ariaManageUser:"Company.CompanyUsers.ariaLabels.manageUser",ariaEditUser:"Company.CompanyUsers.ariaLabels.editUser",addNewUser:"Company.CompanyUsers.actions.addNewUser"}),{users:c,loading:C,currentPage:h,pageSize:S,filterType:I,totalItems:E,totalPages:v,announcement:u,canEditUsers:b,handleFilterChange:N,handlePageSizeChange:k,handlePreviousPage:L,handleNextPage:e,refreshUsers:r}=me({translations:{ariaDataLoaded:t.ariaDataLoaded,ariaDataError:t.ariaDataError}}),g=M(t);g.current=t,F(()=>{!C&&o.current&&c.length>0&&o.current.setAttribute("aria-busy","false")},[C,h,I,c.length]);const B=f(()=>{r()},[r]);re(B);const d=O(r),p=O(r),w=O(r),y=D(()=>{const m=g.current;return[{key:"id",label:m.idColumn},{key:"name",label:m.nameColumn},{key:"email",label:m.emailColumn},{key:"role",label:m.roleColumn},{key:"team",label:m.teamColumn},{key:"status",label:m.statusColumn},{key:"actions",label:m.actionsColumn}]},[]),A=D(()=>c.map(m=>{const x=ie(m.firstName,m.lastName),i=g.current;return{id:m.id,name:x,email:m.email,role:m.role,team:m.team||i.emptyTeam,status:oe(m.status,i),actions:b?_("div",{className:"user-actions",children:[a(P,{variant:"tertiary",onClick:()=>p.open(m.id),"aria-label":i.ariaEditUser.replace("{name}",x),className:"edit-user-button",children:i.editUser}),a(P,{variant:"tertiary",onClick:()=>d.open(m.id),"aria-label":i.ariaManageUser.replace("{name}",x),className:"manage-user-button",children:i.manageUser})]}):a("span",{className:"no-actions",children:i.emptyActions})}}),[c,b,p,d]),T=D(()=>c.find(m=>m.id===d.selectedId),[c,d.selectedId]);return _("section",{className:l,...n,children:[a("div",{className:"sr-only",role:"status","aria-live":"polite","aria-atomic":"true",children:u}),a(le,{filterType:I,onFilterChange:N,translations:{showAllUsers:t.showAllUsers,showActiveUsers:t.showActiveUsers,showInactiveUsers:t.showInactiveUsers,ariaFilterOptions:t.ariaFilterOptions}}),a("div",{ref:o,"aria-busy":C,children:C?_("div",{className:"loadingContainer",role:"status","aria-live":"polite",children:[a(ee,{testId:"companyUsersTableLoader"}),a("span",{className:"sr-only",children:t.ariaLoadingUsers})]}):a(pe,{columns:y,rowData:A,mobileLayout:"stacked","aria-label":t.ariaUsersTable,summary:t.ariaShowingUsers.replace("{count}",c.length.toString())})}),_("nav",{"aria-label":t.ariaPaginationNav,className:"paginationContainer",children:[a("div",{"aria-live":"polite","aria-atomic":"true",children:t.itemsText.replace("{count}",E.toString())}),v>1&&_("div",{className:"paginationButtons",role:"group","aria-label":t.ariaPageNavigation,children:[a(P,{variant:"secondary",onClick:L,disabled:h===1,"aria-label":t.ariaPreviousPageFull.replace("{current}",h.toString()),children:t.previousPage}),a("span",{"aria-current":"page","aria-live":"polite",children:t.pageInfo.replace("{current}",h.toString()).replace("{total}",v.toString())}),a(P,{variant:"secondary",onClick:e,disabled:h===v,"aria-label":t.ariaNextPageFull.replace("{current}",h.toString()),children:t.nextPage})]}),_("div",{className:"pageSizeSelector",children:[a("label",{htmlFor:"page-size-select",id:"page-size-label",children:a("span",{children:t.showLabel})}),a(Q,{id:"page-size-select",name:"pageSize",value:S.toString(),options:ye,onChange:k,"aria-labelledby":"page-size-label","aria-describedby":"page-size-description"}),a("span",{id:"page-size-description",children:t.perPageLabel})]})]}),b&&a("div",{className:"addUserButtonContainer",children:a(P,{variant:"primary",onClick:()=>w.open(),"aria-label":t.addNewUser,children:t.addNewUser})}),s,w.isOpen&&b&&a(j,{open:w.isOpen,onClose:w.close,size:"medium",children:a(K,{mode:"add",entityId:null,parentStructureId:null,permissions:{canEditUsers:b},onSaved:w.close,onCancel:w.close})}),p.selectedId&&p.isOpen&&b&&a(j,{open:p.isOpen,onClose:p.close,size:"medium",children:a(K,{mode:"edit",entityId:p.selectedId,parentStructureId:null,permissions:{canEditUsers:b},onSaved:p.close,onCancel:p.close})}),d.selectedId&&b&&T&&a(de,{isOpen:d.isOpen,userId:d.selectedId,userStatus:T.status||"ACTIVE",onClose:d.close})]})};export{Le as CompanyUsers,Le as default};
4
4
  //# sourceMappingURL=CompanyUsers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CompanyUsers.js","sources":["/@dropins/storefront-company-management/src/lib/userHelpers.ts","/@dropins/storefront-company-management/src/components/CompanyUsersFilters/CompanyUsersFilters.tsx","/@dropins/storefront-company-management/src/hooks/containers/useCompanyUsers.tsx","/@dropins/storefront-company-management/src/hooks/useModal.ts","/@dropins/storefront-company-management/src/components/CompanyUsersManagementModal/CompanyUsersManagementModal.tsx","../../node_modules/@adobe-commerce/elsie/src/components/Table/Table.tsx","/@dropins/storefront-company-management/src/containers/CompanyUsers/CompanyUsers.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\n/**\n * Formats a user status string for display\n * @param status - The raw status string (e.g., 'ACTIVE', 'INACTIVE')\n * @param translations - Translation object containing statusActive and statusInactive keys\n * @returns The formatted status string for display\n */\nexport const formatUserStatus = (status: string, translations: { statusActive?: string; statusInactive?: string }): string => {\n if (!status || typeof status !== 'string') {\n return '';\n }\n\n // Use translations for known statuses\n if (status === 'ACTIVE' && translations.statusActive) {\n return translations.statusActive;\n }\n \n if (status === 'INACTIVE' && translations.statusInactive) {\n return translations.statusInactive;\n }\n\n // Fallback to formatted string if status is unknown or no translation available\n return status.charAt(0).toUpperCase() + status.slice(1).toLowerCase();\n};\n\n/**\n * Formats a user's full name by combining first and last name\n * @param firstName - The user's first name\n * @param lastName - The user's last name\n * @returns The formatted full name, trimmed of extra spaces\n */\nexport const formatUserName = (firstName: string, lastName: string): string => {\n const first = firstName?.trim() || '';\n const last = lastName?.trim() || '';\n \n return `${first} ${last}`.trim();\n};\n\n/**\n * Checks if a user has a specific status\n * @param userStatus - The user's current status\n * @param expectedStatus - The status to check against\n * @returns true if the user has the expected status\n */\nexport const hasUserStatus = (userStatus: string, expectedStatus: string): boolean => {\n return userStatus?.toUpperCase() === expectedStatus?.toUpperCase();\n};\n\n/**\n * Gets the opposite status for toggling (ACTIVE <-> INACTIVE)\n * @param currentStatus - The current user status\n * @returns The opposite status, or the current status if not recognized\n */\nexport const getToggleStatus = (currentStatus: string): string => {\n const status = currentStatus?.toUpperCase();\n \n switch (status) {\n case 'ACTIVE':\n return 'INACTIVE';\n case 'INACTIVE':\n return 'ACTIVE';\n default:\n return currentStatus;\n }\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Button } from '@adobe-commerce/elsie/components';\n\nexport type FilterType = 'all' | 'active' | 'inactive';\n\nexport interface CompanyUsersFiltersProps {\n filterType: FilterType;\n onFilterChange: (filter: FilterType) => void;\n translations: {\n showAllUsers: string;\n showActiveUsers: string;\n showInactiveUsers: string;\n ariaFilterOptions: string;\n };\n}\n\nexport const CompanyUsersFilters = ({\n filterType,\n onFilterChange,\n translations\n}: CompanyUsersFiltersProps) => {\n const filters: Array<{ type: FilterType; label: string; ariaLabel: string }> = [\n { type: 'all', label: translations.showAllUsers, ariaLabel: translations.showAllUsers },\n { type: 'active', label: translations.showActiveUsers, ariaLabel: translations.showActiveUsers },\n { type: 'inactive', label: translations.showInactiveUsers, ariaLabel: translations.showInactiveUsers }\n ];\n\n return (\n <div className=\"filterButtons\" role=\"group\" aria-label={translations.ariaFilterOptions}>\n {filters\n .filter(filter => filter.type !== filterType)\n .map(filter => (\n <Button\n key={filter.type}\n variant=\"tertiary\"\n onClick={() => onFilterChange(filter.type)}\n aria-label={filter.ariaLabel}\n >\n {filter.label}\n </Button>\n ))}\n </div>\n );\n};\n\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useEffect, useState, useCallback, useRef, useMemo } from 'preact/hooks';\nimport { getCompanyUsers } from '@/company-management/api';\nimport { fetchUserPermissions } from '@/company-management/api/fetchUserPermissions/fetchUserPermissions';\nimport { \n CompanyUser, \n CompanyUsersFilter, \n CompanyUserStatus \n} from '@/company-management/types';\n\nexport type FilterType = 'all' | 'active' | 'inactive';\n\n// Constants\nconst DEFAULT_PAGE_SIZE = 20;\nconst FIRST_PAGE = 1;\n\nexport interface UseCompanyUsersProps {\n translations: {\n ariaDataLoaded: string;\n ariaDataError: string;\n };\n}\n\nexport interface UseCompanyUsersReturn {\n // Core data\n users: CompanyUser[];\n userPermissions: Set<string> | null;\n \n // Pagination state\n currentPage: number;\n pageSize: number;\n totalItems: number;\n totalPages: number;\n \n // Filter state\n filterType: FilterType;\n filter: CompanyUsersFilter | undefined;\n \n // Loading states\n loading: boolean;\n \n // UI state\n announcement: string;\n \n // Computed values\n canEditUsers: boolean;\n \n // Actions\n handleFilterChange: (newFilter: FilterType) => void;\n handlePageSizeChange: (event: Event | { target?: { value: string } } | string) => void;\n handlePreviousPage: () => void;\n handleNextPage: () => void;\n refreshUsers: () => Promise<void>;\n}\n\nexport const useCompanyUsers = ({ translations }: UseCompanyUsersProps): UseCompanyUsersReturn => {\n const [users, setUsers] = useState<CompanyUser[]>([]);\n const [loading, setLoading] = useState(false);\n const [currentPage, setCurrentPage] = useState(FIRST_PAGE);\n const [pageSize, setPageSize] = useState(DEFAULT_PAGE_SIZE);\n const [filterType, setFilterType] = useState<FilterType>('all');\n const [totalItems, setTotalItems] = useState(0);\n const [totalPages, setTotalPages] = useState(1);\n const [announcement, setAnnouncement] = useState('');\n const [userPermissions, setUserPermissions] = useState<Set<string> | null>(null);\n\n // Stable reference to translations to prevent unnecessary re-renders\n const translationsRef = useRef(translations);\n translationsRef.current = translations;\n\n // Memoized filter based on current filter type\n const filter = useMemo((): CompanyUsersFilter | undefined => {\n switch (filterType) {\n case 'active':\n return { status: 'ACTIVE' as CompanyUserStatus };\n case 'inactive':\n return { status: 'INACTIVE' as CompanyUserStatus };\n default:\n return undefined;\n }\n }, [filterType]);\n\n // Fetch users data\n const fetchUsers = useCallback(async () => {\n setLoading(true);\n try {\n const response = await getCompanyUsers({\n pageSize,\n currentPage,\n filter\n });\n \n // Batch state updates for better performance\n setUsers(response.users);\n setTotalItems(response.totalCount || response.users.length);\n setTotalPages(response.pageInfo.totalPages);\n setAnnouncement(translationsRef.current.ariaDataLoaded.replace('{count}', response.users.length.toString()));\n } catch (error) {\n // Batch error state updates\n setUsers([]);\n setTotalItems(0);\n setTotalPages(1);\n setAnnouncement(translationsRef.current.ariaDataError);\n } finally {\n setLoading(false);\n }\n }, [pageSize, currentPage, filter]);\n\n // Fetch user permissions\n const fetchPermissions = useCallback(async () => {\n try {\n const { allowedIds } = await fetchUserPermissions();\n setUserPermissions(allowedIds);\n } catch (error) {\n setUserPermissions(new Set()); // Empty set on error\n }\n }, []);\n\n // Fetch users when dependencies change\n useEffect(() => {\n fetchUsers();\n }, [fetchUsers]);\n\n // Fetch permissions on component mount\n useEffect(() => {\n fetchPermissions();\n }, [fetchPermissions]);\n\n // Handle filter changes\n const handleFilterChange = useCallback((newFilter: FilterType) => {\n setFilterType(newFilter);\n setCurrentPage(FIRST_PAGE); // Reset to first page when filter changes\n }, []);\n\n // Handle page size change\n const handlePageSizeChange = useCallback((event: Event | { target?: { value: string } } | string) => {\n let value: string;\n if (typeof event === 'string') {\n value = event;\n } else if ('target' in event && event.target && 'value' in event.target) {\n value = event.target.value;\n } else {\n return;\n }\n const newSize = parseInt(value, 10);\n if (!isNaN(newSize)) {\n setPageSize(newSize);\n setCurrentPage(FIRST_PAGE); // Reset to first page when page size changes\n }\n }, []);\n\n // Handle page navigation\n const handlePreviousPage = useCallback(() => {\n if (currentPage > 1) {\n setCurrentPage(currentPage - 1);\n }\n }, [currentPage]);\n\n const handleNextPage = useCallback(() => {\n if (currentPage < totalPages) {\n setCurrentPage(currentPage + 1);\n }\n }, [currentPage, totalPages]);\n\n // Check if user has permission to edit company users\n const canEditUsers = userPermissions?.has('Magento_Company::users_edit') || false;\n\n // Expose refresh function for external use (e.g., after modal operations)\n const refreshUsers = useCallback(async () => {\n await fetchUsers();\n }, [fetchUsers]);\n\n return {\n // Core data\n users,\n userPermissions,\n \n // Pagination state\n currentPage,\n pageSize,\n totalItems,\n totalPages,\n \n // Filter state\n filterType,\n filter,\n \n // Loading states\n loading,\n \n // UI state\n announcement,\n \n // Computed values\n canEditUsers,\n \n // Actions\n handleFilterChange,\n handlePageSizeChange,\n handlePreviousPage,\n handleNextPage,\n refreshUsers,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useState, useCallback } from 'preact/hooks';\n\nexport interface UseModalResult {\n isOpen: boolean;\n selectedId: string | null;\n open: (id?: string) => void;\n close: () => void;\n}\n\nexport const useModal = (onClose?: () => void): UseModalResult => {\n const [isOpen, setIsOpen] = useState(false);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n\n const open = useCallback((id?: string) => {\n if (id) {\n setSelectedId(id);\n }\n setIsOpen(true);\n }, []);\n\n const close = useCallback(() => {\n setIsOpen(false);\n setSelectedId(null);\n onClose?.();\n }, [onClose]);\n\n return { isOpen, selectedId, open, close };\n};\n\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { useState, useCallback, useEffect, useRef } from 'preact/hooks';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { Button, InLineAlert } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { deleteCompanyUser, updateCompanyUserStatus } from '@/company-management/api';\nimport type { CompanyUserStatus } from '@/company-management/types';\nimport { useInLineAlert } from '@/company-management/hooks';\nimport '@/company-management/components/CompanyUsersManagementModal/CompanyUsersManagementModal.css';\n\nexport interface CompanyUsersManagementModalProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onClose'> {\n /** The ID of the user to manage */\n userId: string;\n /** The current status of the user */\n userStatus: CompanyUserStatus;\n /** Callback function called when the modal should be closed */\n onClose: () => void;\n /** Whether the modal is currently open */\n isOpen?: boolean;\n}\n\nexport const CompanyUsersManagementModal: FunctionComponent<CompanyUsersManagementModalProps> = ({\n className,\n userId,\n userStatus,\n onClose,\n isOpen = false,\n ...props\n}) => {\n const [isDeleting, setIsDeleting] = useState(false);\n const [isTogglingStatus, setIsTogglingStatus] = useState(false);\n const { inLineAlertProps, showError, clearAlert } = useInLineAlert();\n \n // Refs for accessibility\n const modalRef = useRef<HTMLDivElement>(null);\n const previousFocusRef = useRef<HTMLElement | null>(null);\n const titleId = `modal-title-${userId}`;\n const descriptionId = `modal-desc-${userId}`;\n\n // Text translations\n const translations = useText({\n title: 'Company.CompanyUsers.managementModal.title',\n setActiveText: 'Company.CompanyUsers.managementModal.setActiveText',\n setInactiveText: 'Company.CompanyUsers.managementModal.setInactiveText',\n deleteText: 'Company.CompanyUsers.managementModal.deleteText',\n setActiveButton: 'Company.CompanyUsers.managementModal.setActiveButton',\n setInactiveButton: 'Company.CompanyUsers.managementModal.setInactiveButton',\n settingActiveButton: 'Company.CompanyUsers.managementModal.settingActiveButton',\n settingInactiveButton: 'Company.CompanyUsers.managementModal.settingInactiveButton',\n deleteButton: 'Company.CompanyUsers.managementModal.deleteButton',\n deletingButton: 'Company.CompanyUsers.managementModal.deletingButton',\n cancelButton: 'Company.CompanyUsers.managementModal.cancelButton',\n setActiveErrorGeneric: 'Company.CompanyUsers.managementModal.setActiveErrorGeneric',\n setActiveErrorSpecific: 'Company.CompanyUsers.managementModal.setActiveErrorSpecific',\n setInactiveErrorGeneric: 'Company.CompanyUsers.managementModal.setInactiveErrorGeneric',\n setInactiveErrorSpecific: 'Company.CompanyUsers.managementModal.setInactiveErrorSpecific',\n deleteErrorGeneric: 'Company.CompanyUsers.managementModal.deleteErrorGeneric',\n deleteErrorSpecific: 'Company.CompanyUsers.managementModal.deleteErrorSpecific',\n ariaCloseModal: 'Company.CompanyUsers.managementModal.ariaLabels.closeModal',\n ariaModalDescription: 'Company.CompanyUsers.managementModal.ariaLabels.modalDescription',\n });\n\n const handleToggleStatus = useCallback(async () => {\n if (isTogglingStatus) return;\n \n const newStatus = userStatus === 'ACTIVE' ? 'INACTIVE' : 'ACTIVE';\n const isActivating = newStatus === 'ACTIVE';\n \n setIsTogglingStatus(true);\n clearAlert();\n try {\n const result = await updateCompanyUserStatus({ id: userId, status: newStatus });\n if (result.success) {\n onClose();\n } else {\n showError(isActivating ? translations.setActiveErrorSpecific : translations.setInactiveErrorSpecific);\n }\n } catch (error) {\n showError(isActivating ? translations.setActiveErrorGeneric : translations.setInactiveErrorGeneric);\n } finally {\n setIsTogglingStatus(false);\n }\n }, [userId, userStatus, onClose, isTogglingStatus, clearAlert, showError, translations.setActiveErrorSpecific, translations.setInactiveErrorSpecific, translations.setActiveErrorGeneric, translations.setInactiveErrorGeneric]);\n\n const handleDelete = useCallback(async () => {\n if (isDeleting) return;\n \n setIsDeleting(true);\n clearAlert();\n try {\n const result = await deleteCompanyUser({ id: userId });\n if (result.success) {\n onClose();\n } else {\n showError(translations.deleteErrorSpecific);\n }\n } catch (error) {\n showError(translations.deleteErrorGeneric);\n } finally {\n setIsDeleting(false);\n }\n }, [userId, onClose, isDeleting, clearAlert, showError, translations.deleteErrorSpecific, translations.deleteErrorGeneric]);\n\n const handleCancel = useCallback(() => {\n clearAlert();\n onClose();\n }, [onClose, clearAlert]);\n\n // Handle Escape key\n const handleKeyDown = useCallback((event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n clearAlert();\n onClose();\n }\n \n // Focus trapping\n if (event.key === 'Tab') {\n const modal = modalRef.current;\n if (!modal) return;\n \n const focusableElements = modal.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n const firstElement = focusableElements[0] as HTMLElement;\n const lastElement = focusableElements[focusableElements.length - 1] as HTMLElement;\n \n if (event.shiftKey) {\n // Shift + Tab\n if (document.activeElement === firstElement) {\n lastElement.focus();\n event.preventDefault();\n }\n } else if (document.activeElement === lastElement) {\n // Tab\n firstElement.focus();\n event.preventDefault();\n }\n }\n }, [onClose, clearAlert]);\n\n const handleOverlayClick = useCallback((event: MouseEvent) => {\n if (event.target === event.currentTarget) {\n clearAlert();\n onClose();\n }\n }, [onClose, clearAlert]);\n\n const handleCloseClick = useCallback(() => {\n clearAlert();\n onClose();\n }, [onClose, clearAlert]);\n\n // Focus management and event listeners\n useEffect(() => {\n if (isOpen) {\n // Store current focus\n previousFocusRef.current = document.activeElement as HTMLElement;\n \n // Add keyboard event listener\n document.addEventListener('keydown', handleKeyDown);\n \n // Focus the modal after a brief delay to ensure it's rendered\n setTimeout(() => {\n const modal = modalRef.current;\n if (modal) {\n const firstButton = modal.querySelector('button') as HTMLElement;\n if (firstButton) {\n firstButton.focus();\n } else {\n modal.focus();\n }\n }\n }, 100);\n \n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }\n \n // Restore focus when modal closes\n if (previousFocusRef.current) {\n previousFocusRef.current.focus();\n }\n }, [isOpen, handleKeyDown]);\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <div \n className={classes(['company-management-company-users-management-modal-overlay', className])}\n onClick={handleOverlayClick}\n {...props}\n >\n <div \n ref={modalRef}\n className=\"company-management-company-users-management-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n tabIndex={-1}\n >\n <div className=\"company-management-company-users-management-modal__header\">\n <h2 \n id={titleId}\n className=\"company-management-company-users-management-modal__title\"\n >\n {translations.title}\n </h2>\n <button\n className=\"company-management-company-users-management-modal__close\"\n onClick={handleCloseClick}\n aria-label={translations.ariaCloseModal}\n >\n ×\n </button>\n </div>\n \n <div \n id={descriptionId}\n className=\"company-management-company-users-management-modal__content\"\n >\n <p className=\"company-management-company-users-management-modal__text\">\n {userStatus === 'ACTIVE' ? translations.setInactiveText : translations.setActiveText}\n </p>\n <p className=\"company-management-company-users-management-modal__text\">\n {translations.deleteText}\n </p>\n </div>\n\n {inLineAlertProps?.text && (\n <div \n className=\"company-management-company-users-management-modal__alert\"\n role=\"alert\"\n aria-live=\"assertive\"\n >\n <InLineAlert\n type=\"error\"\n heading={inLineAlertProps.text}\n icon={inLineAlertProps.icon}\n data-testid=\"companyUsersManagementModalAlert\"\n />\n </div>\n )}\n\n <div className=\"company-management-company-users-management-modal__actions\">\n <Button\n variant=\"primary\"\n onClick={handleToggleStatus}\n disabled={isTogglingStatus}\n className=\"company-management-company-users-management-modal__button-primary\"\n >\n {isTogglingStatus \n ? (userStatus === 'ACTIVE' ? translations.settingInactiveButton : translations.settingActiveButton)\n : (userStatus === 'ACTIVE' ? translations.setInactiveButton : translations.setActiveButton)\n }\n </Button>\n \n <Button\n variant=\"tertiary\"\n onClick={handleDelete}\n disabled={isDeleting}\n className=\"company-management-company-users-management-modal__button-delete\"\n >\n {isDeleting ? translations.deletingButton : translations.deleteButton}\n </Button>\n \n <Button\n variant=\"secondary\"\n onClick={handleCancel}\n className=\"company-management-company-users-management-modal__button-cancel\"\n >\n {translations.cancelButton}\n </Button>\n </div>\n </div>\n </div>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { FunctionComponent, VNode, Fragment } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport { Icon, Button, Skeleton, SkeletonRow } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\n\nimport '@adobe-commerce/elsie/components/Table/Table.css';\n\ntype Sortable = 'asc' | 'desc' | true;\n\ntype Column = {\n key: string;\n label: string;\n sortBy?: Sortable;\n};\n\ntype RowData = {\n [key: string]: VNode | string | number | undefined;\n _rowDetails?: VNode | string; // Special property for expandable row content\n};\n\nexport interface TableProps extends Omit<HTMLAttributes<HTMLTableElement>, 'loading'> {\n columns: Column[];\n rowData: RowData[];\n mobileLayout?: 'stacked' | 'none';\n caption?: string;\n expandedRows?: Set<number>;\n loading?: boolean;\n skeletonRowCount?: number;\n onSortChange?: (columnKey: string, direction: Sortable) => void;\n}\n\nexport const Table: FunctionComponent<TableProps> = ({\n className,\n children,\n columns = [],\n rowData = [],\n mobileLayout = 'none',\n caption,\n expandedRows = new Set(),\n loading = false,\n skeletonRowCount = 10,\n onSortChange,\n ...props\n}) => {\n const translations = useText({\n sortedAscending: 'Dropin.Table.sortedAscending',\n sortedDescending: 'Dropin.Table.sortedDescending',\n sortBy: 'Dropin.Table.sortBy',\n });\n\n const handleSort = (column: Column) => {\n if (!onSortChange) return;\n\n // Determine next sort direction\n let nextDirection: Sortable;\n if (column.sortBy === true) {\n nextDirection = 'asc';\n } else if (column.sortBy === 'asc') {\n nextDirection = 'desc';\n } else {\n nextDirection = true;\n }\n\n onSortChange(column.key, nextDirection);\n };\n\n const renderSortButton = (column: Column) => {\n if (column.sortBy === undefined) return null;\n\n let iconSource: string;\n let ariaLabel: string;\n\n if (column.sortBy === 'asc') {\n iconSource = 'ChevronUp';\n ariaLabel = translations.sortedAscending.replace('{label}', column.label);\n } else if (column.sortBy === 'desc') {\n iconSource = 'ChevronDown';\n ariaLabel = translations.sortedDescending.replace('{label}', column.label);\n } else {\n iconSource = 'Sort';\n ariaLabel = translations.sortBy.replace('{label}', column.label);\n }\n\n return (\n <Button\n variant=\"tertiary\"\n size=\"medium\"\n className=\"dropin-table__header__sort-button\"\n icon={<Icon source={iconSource} />}\n aria-label={ariaLabel}\n onClick={() => handleSort(column)}\n />\n );\n };\n\n const renderSkeletonRows = () => {\n return Array.from({ length: skeletonRowCount }, (_, rowIndex) => (\n <tr key={`skeleton-${rowIndex}`} className=\"dropin-table__body__row\">\n {columns.map((column) => (\n <td key={column.key} className=\"dropin-table__body__cell\" data-label={column.label}>\n <Skeleton>\n <SkeletonRow variant=\"row\" size=\"small\" fullWidth />\n </Skeleton>\n </td>\n ))}\n </tr>\n ));\n };\n\n const renderDataRows = () => {\n return rowData.map((row, rowIndex) => {\n const hasDetails = row._rowDetails !== undefined;\n const isExpanded = expandedRows.has(rowIndex);\n\n return (\n <Fragment key={rowIndex}>\n <tr className=\"dropin-table__body__row\">\n {columns.map((column) => {\n const cell = row[column.key];\n\n if (typeof cell === 'string' || typeof cell === 'number') {\n return (\n <td key={column.key} className=\"dropin-table__body__cell\" data-label={column.label}>\n {cell}\n </td>\n );\n }\n\n return (\n <td key={column.key} className=\"dropin-table__body__cell\" data-label={column.label}>\n <VComponent node={cell!} />\n </td>\n );\n })}\n </tr>\n {hasDetails && isExpanded && (\n <tr\n key={`${rowIndex}-details`}\n className=\"dropin-table__row-details dropin-table__row-details--expanded\"\n id={`row-${rowIndex}-details`}\n >\n <td\n className=\"dropin-table__row-details__cell\"\n colSpan={columns.length}\n role=\"region\"\n aria-labelledby={`row-${rowIndex}-details`}\n >\n {typeof row._rowDetails === 'string' ? row._rowDetails : <VComponent node={row._rowDetails!} />}\n </td>\n </tr>\n )}\n </Fragment>\n );\n });\n };\n\n const getAriaSort = (column: Column): 'none' | 'ascending' | 'descending' | 'other' | undefined => {\n if (column.sortBy === true) return 'none';\n if (column.sortBy === 'asc') return 'ascending';\n if (column.sortBy === 'desc') return 'descending';\n return undefined;\n };\n\n return (\n <div className={classes(['dropin-table', `dropin-table--mobile-layout-${mobileLayout}`, className])}>\n <table {...props} className=\"dropin-table__table\">\n {caption && <caption className=\"dropin-table__caption\">{caption}</caption>}\n <thead className=\"dropin-table__header\">\n <tr className=\"dropin-table__header__row\">\n {columns.map((column) => (\n <th\n key={column.key}\n className={classes([\n 'dropin-table__header__cell',\n ['dropin-table__header__cell--sorted', column.sortBy === 'asc' || column.sortBy === 'desc'],\n ['dropin-table__header__cell--sortable', column.sortBy !== undefined]\n ])}\n aria-sort={getAriaSort(column)}\n >\n {column.label}\n {renderSortButton(column)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"dropin-table__body\">\n {loading ? (\n // Render skeleton rows when loading\n renderSkeletonRows()\n ) : (\n // Render actual data when not loading\n renderDataRows()\n )}\n </tbody>\n </table>\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { HTMLAttributes } from 'preact/compat';\nimport { useEffect, useCallback, useRef, useMemo } from 'preact/hooks';\nimport { Container } from '@adobe-commerce/elsie/lib';\nimport { \n Button, \n Picker,\n Modal \n} from '@adobe-commerce/elsie/components';\nimport { Table } from '@adobe-commerce/elsie/components/Table/Table';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { formatUserStatus, formatUserName } from '@/company-management/lib';\nimport { CompanyUserStatus } from '@/company-management/types';\nimport { CompanyUserForm } from '@/company-management/components/CompanyUserForm';\nimport { CompanyUsersManagementModal } from '@/company-management/components/CompanyUsersManagementModal';\nimport { CompanyUsersTableLoader } from '@/company-management/components/CompanyLoaders';\nimport { CompanyUsersFilters } from '@/company-management/components/CompanyUsersFilters';\nimport { useCompanyContextListener } from './hooks';\nimport { useCompanyUsers, useModal } from '@/company-management/hooks';\nimport './CompanyUsers.css';\n\nexport interface CompanyUsersProps extends HTMLAttributes<HTMLElement> {}\n\n// Constants\nconst PAGE_SIZE_OPTIONS = [\n { text: '20', value: '20' },\n { text: '30', value: '30' },\n { text: '50', value: '50' },\n { text: '100', value: '100' },\n { text: '200', value: '200' }\n];\n\nexport const CompanyUsers: Container<CompanyUsersProps> = ({ children, className, ...props }) => {\n const tableRef = useRef<HTMLDivElement>(null);\n\n // Text translations using proper useText pattern\n const translations = useText({\n showAllUsers: 'Company.CompanyUsers.filters.showAll',\n showActiveUsers: 'Company.CompanyUsers.filters.showActive',\n showInactiveUsers: 'Company.CompanyUsers.filters.showInactive',\n idColumn: 'Company.CompanyUsers.columns.id',\n nameColumn: 'Company.CompanyUsers.columns.name',\n emailColumn: 'Company.CompanyUsers.columns.email',\n roleColumn: 'Company.CompanyUsers.columns.role',\n teamColumn: 'Company.CompanyUsers.columns.team',\n statusColumn: 'Company.CompanyUsers.columns.status',\n actionsColumn: 'Company.CompanyUsers.columns.actions',\n statusActive: 'Company.CompanyUsers.status.active',\n statusInactive: 'Company.CompanyUsers.status.inactive',\n emptyTeam: 'Company.CompanyUsers.emptyTeam',\n emptyActions: 'Company.CompanyUsers.emptyActions',\n itemsText: 'Company.CompanyUsers.pagination.itemsCount',\n itemsPerPageLabel: 'Company.CompanyUsers.pagination.itemsPerPage',\n showLabel: 'Company.CompanyUsers.pagination.show',\n perPageLabel: 'Company.CompanyUsers.pagination.perPage',\n previousPage: 'Company.CompanyUsers.pagination.previous',\n nextPage: 'Company.CompanyUsers.pagination.next',\n pageInfo: 'Company.CompanyUsers.pagination.pageInfo',\n // Accessibility labels\n ariaLoadingUsers: 'Company.CompanyUsers.ariaLabels.loadingUsers',\n ariaUsersTable: 'Company.CompanyUsers.ariaLabels.usersTable',\n ariaFilterOptions: 'Company.CompanyUsers.ariaLabels.filterOptions',\n ariaPaginationNav: 'Company.CompanyUsers.ariaLabels.paginationNav',\n ariaPageSizeSelector: 'Company.CompanyUsers.ariaLabels.pageSizeSelector',\n ariaPreviousPageFull: 'Company.CompanyUsers.ariaLabels.previousPageFull',\n ariaNextPageFull: 'Company.CompanyUsers.ariaLabels.nextPageFull',\n ariaCurrentPage: 'Company.CompanyUsers.ariaLabels.currentPage',\n ariaShowingUsers: 'Company.CompanyUsers.ariaLabels.showingUsers',\n ariaDataLoaded: 'Company.CompanyUsers.ariaLabels.dataLoaded',\n ariaDataError: 'Company.CompanyUsers.ariaLabels.dataError',\n ariaPageNavigation: 'Company.CompanyUsers.ariaLabels.pageNavigation',\n manageUser: 'Company.CompanyUsers.actions.manage',\n editUser: 'Company.CompanyUsers.actions.edit',\n ariaManageUser: 'Company.CompanyUsers.ariaLabels.manageUser',\n ariaEditUser: 'Company.CompanyUsers.ariaLabels.editUser',\n addNewUser: 'Company.CompanyUsers.actions.addNewUser'\n });\n\n // Use the company users hook to manage all user data and pagination\n const {\n users,\n loading,\n currentPage,\n pageSize,\n filterType,\n totalItems,\n totalPages,\n announcement,\n canEditUsers,\n handleFilterChange,\n handlePageSizeChange,\n handlePreviousPage,\n handleNextPage,\n refreshUsers\n } = useCompanyUsers({\n translations: {\n ariaDataLoaded: translations.ariaDataLoaded,\n ariaDataError: translations.ariaDataError\n }\n });\n\n // Stable reference to translations to prevent unnecessary re-renders\n const translationsRef = useRef(translations);\n translationsRef.current = translations;\n\n // Focus management after data updates\n useEffect(() => {\n if (!loading && tableRef.current && users.length > 0) {\n // Announce change to screen readers but don't steal focus\n tableRef.current.setAttribute('aria-busy', 'false');\n }\n }, [loading, currentPage, filterType, users.length]);\n\n // Handle company context changes using reusable hook\n const handleCompanyContextChange = useCallback(() => {\n refreshUsers();\n }, [refreshUsers]);\n\n useCompanyContextListener(handleCompanyContextChange);\n\n // Modal management using useModal hook\n const manageModal = useModal(refreshUsers);\n const editModal = useModal(refreshUsers);\n const addModal = useModal(refreshUsers);\n\n // Prepare table columns - memoized to prevent unnecessary re-renders (optimized)\n const columns = useMemo(() => {\n const currentTranslations = translationsRef.current;\n return [\n { key: 'id', label: currentTranslations.idColumn },\n { key: 'name', label: currentTranslations.nameColumn },\n { key: 'email', label: currentTranslations.emailColumn },\n { key: 'role', label: currentTranslations.roleColumn },\n { key: 'team', label: currentTranslations.teamColumn },\n { key: 'status', label: currentTranslations.statusColumn },\n { key: 'actions', label: currentTranslations.actionsColumn }\n ];\n }, []); // No dependencies - only recompute when component mounts\n\n\n // Prepare table row data - memoized for performance (optimized)\n const rowData = useMemo(() => users.map((user) => {\n const fullName = formatUserName(user.firstName, user.lastName);\n const currentTranslations = translationsRef.current;\n \n return {\n id: user.id,\n name: fullName,\n email: user.email,\n role: user.role,\n team: user.team || currentTranslations.emptyTeam,\n status: formatUserStatus(user.status, currentTranslations),\n actions: canEditUsers ? (\n <div className=\"user-actions\">\n <Button\n variant=\"tertiary\"\n onClick={() => editModal.open(user.id)}\n aria-label={currentTranslations.ariaEditUser.replace('{name}', fullName)}\n className=\"edit-user-button\"\n >\n {currentTranslations.editUser}\n </Button>\n <Button\n variant=\"tertiary\"\n onClick={() => manageModal.open(user.id)}\n aria-label={currentTranslations.ariaManageUser.replace('{name}', fullName)}\n className=\"manage-user-button\"\n >\n {currentTranslations.manageUser}\n </Button>\n </div>\n ) : (\n <span className=\"no-actions\">{currentTranslations.emptyActions}</span>\n )\n };\n }), [users, canEditUsers, editModal, manageModal]);\n\n // Memoize selected user for performance\n const selectedUser = useMemo(() => \n users.find(user => user.id === manageModal.selectedId),\n [users, manageModal.selectedId]\n );\n\n return (\n <section className={className} {...props}>\n {/* Screen reader announcements */}\n <div className=\"sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {announcement}\n </div>\n\n {/* Filter buttons */}\n <CompanyUsersFilters\n filterType={filterType}\n onFilterChange={handleFilterChange}\n translations={{\n showAllUsers: translations.showAllUsers,\n showActiveUsers: translations.showActiveUsers,\n showInactiveUsers: translations.showInactiveUsers,\n ariaFilterOptions: translations.ariaFilterOptions\n }}\n />\n\n {/* Table with loading state */}\n <div ref={tableRef} aria-busy={loading}>\n {loading ? (\n <div className=\"loadingContainer\" role=\"status\" aria-live=\"polite\">\n <CompanyUsersTableLoader testId=\"companyUsersTableLoader\" />\n <span className=\"sr-only\">{translations.ariaLoadingUsers}</span>\n </div>\n ) : (\n <Table\n columns={columns}\n rowData={rowData}\n mobileLayout=\"stacked\"\n aria-label={translations.ariaUsersTable}\n summary={translations.ariaShowingUsers.replace('{count}', users.length.toString())}\n />\n )}\n </div>\n\n {/* Pagination controls */}\n <nav aria-label={translations.ariaPaginationNav} className=\"paginationContainer\">\n {/* Items count on the left */}\n <div aria-live=\"polite\" aria-atomic=\"true\">\n {translations.itemsText.replace('{count}', totalItems.toString())}\n </div>\n\n {/* Pagination buttons in the center (only show when multiple pages) */}\n {totalPages > 1 && (\n <div className=\"paginationButtons\" role=\"group\" aria-label={translations.ariaPageNavigation}>\n <Button\n variant=\"secondary\"\n onClick={handlePreviousPage}\n disabled={currentPage === 1}\n aria-label={translations.ariaPreviousPageFull.replace('{current}', currentPage.toString())}\n >\n {translations.previousPage}\n </Button>\n <span aria-current=\"page\" aria-live=\"polite\">\n {translations.pageInfo.replace('{current}', currentPage.toString()).replace('{total}', totalPages.toString())}\n </span>\n <Button\n variant=\"secondary\"\n onClick={handleNextPage}\n disabled={currentPage === totalPages}\n aria-label={translations.ariaNextPageFull.replace('{current}', currentPage.toString())}\n >\n {translations.nextPage}\n </Button>\n </div>\n )}\n\n {/* Page size picker on the right */}\n <div className=\"pageSizeSelector\">\n <label htmlFor=\"page-size-select\" id=\"page-size-label\">\n <span>{translations.showLabel}</span>\n </label>\n <Picker\n id=\"page-size-select\"\n name=\"pageSize\"\n value={pageSize.toString()}\n options={PAGE_SIZE_OPTIONS}\n onChange={handlePageSizeChange}\n aria-labelledby=\"page-size-label\"\n aria-describedby=\"page-size-description\"\n />\n <span id=\"page-size-description\">{translations.perPageLabel}</span>\n </div>\n </nav>\n\n {/* Add New User Button */}\n {canEditUsers && (\n <div className=\"addUserButtonContainer\">\n <Button\n variant=\"primary\"\n onClick={() => addModal.open()}\n aria-label={translations.addNewUser}\n >\n {translations.addNewUser}\n </Button>\n </div>\n )}\n\n {children}\n\n {/* User Add Modal (for adding new user) */}\n {addModal.isOpen && canEditUsers && (\n <Modal\n open={addModal.isOpen}\n onClose={addModal.close}\n size=\"medium\"\n >\n <CompanyUserForm\n mode=\"add\"\n entityId={null}\n parentStructureId={null}\n permissions={{ canEditUsers }}\n onSaved={addModal.close}\n onCancel={addModal.close}\n />\n </Modal>\n )}\n\n {/* User Edit Modal (for editing user information) */}\n {editModal.selectedId && editModal.isOpen && canEditUsers && (\n <Modal\n open={editModal.isOpen}\n onClose={editModal.close}\n size=\"medium\"\n >\n <CompanyUserForm\n mode=\"edit\"\n entityId={editModal.selectedId}\n parentStructureId={null}\n permissions={{ canEditUsers }}\n onSaved={editModal.close}\n onCancel={editModal.close}\n />\n </Modal>\n )}\n\n {/* User Management Modal (for status changes and deletion) */}\n {manageModal.selectedId && canEditUsers && selectedUser && (\n <CompanyUsersManagementModal\n isOpen={manageModal.isOpen}\n userId={manageModal.selectedId}\n userStatus={(selectedUser.status as CompanyUserStatus) || 'ACTIVE'}\n onClose={manageModal.close}\n />\n )}\n </section>\n );\n};\n"],"names":["formatUserStatus","status","translations","formatUserName","firstName","lastName","first","last","CompanyUsersFilters","filterType","onFilterChange","filters","filter","jsx","Button","DEFAULT_PAGE_SIZE","FIRST_PAGE","useCompanyUsers","users","setUsers","useState","loading","setLoading","currentPage","setCurrentPage","pageSize","setPageSize","setFilterType","totalItems","setTotalItems","totalPages","setTotalPages","announcement","setAnnouncement","userPermissions","setUserPermissions","translationsRef","useRef","useMemo","fetchUsers","useCallback","response","getCompanyUsers","fetchPermissions","allowedIds","fetchUserPermissions","useEffect","handleFilterChange","newFilter","handlePageSizeChange","event","value","newSize","handlePreviousPage","handleNextPage","canEditUsers","refreshUsers","useModal","onClose","isOpen","setIsOpen","selectedId","setSelectedId","open","id","close","CompanyUsersManagementModal","className","userId","userStatus","props","isDeleting","setIsDeleting","isTogglingStatus","setIsTogglingStatus","inLineAlertProps","showError","clearAlert","useInLineAlert","modalRef","previousFocusRef","titleId","descriptionId","useText","handleToggleStatus","newStatus","isActivating","updateCompanyUserStatus","handleDelete","deleteCompanyUser","handleCancel","handleKeyDown","modal","focusableElements","firstElement","lastElement","handleOverlayClick","handleCloseClick","firstButton","classes","jsxs","InLineAlert","Table","children","columns","rowData","mobileLayout","caption","expandedRows","skeletonRowCount","onSortChange","handleSort","column","nextDirection","renderSortButton","iconSource","ariaLabel","Icon","renderSkeletonRows","_","rowIndex","Skeleton","SkeletonRow","renderDataRows","row","hasDetails","isExpanded","Fragment","cell","VComponent","getAriaSort","PAGE_SIZE_OPTIONS","CompanyUsers","tableRef","handleCompanyContextChange","useCompanyContextListener","manageModal","editModal","addModal","currentTranslations","user","fullName","selectedUser","CompanyUsersTableLoader","Picker","Modal","CompanyUserForm"],"mappings":"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","x_google_ignoreList":[5]}
1
+ {"version":3,"file":"CompanyUsers.js","sources":["/@dropins/storefront-company-management/src/lib/userHelpers.ts","/@dropins/storefront-company-management/src/components/CompanyUsersFilters/CompanyUsersFilters.tsx","/@dropins/storefront-company-management/src/hooks/containers/useCompanyUsers.tsx","/@dropins/storefront-company-management/src/hooks/useModal.ts","/@dropins/storefront-company-management/src/components/CompanyUsersManagementModal/CompanyUsersManagementModal.tsx","../../node_modules/@adobe-commerce/elsie/src/components/Table/Table.tsx","/@dropins/storefront-company-management/src/containers/CompanyUsers/CompanyUsers.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\n/**\n * Formats a user status string for display\n * @param status - The raw status string (e.g., 'ACTIVE', 'INACTIVE')\n * @param translations - Translation object containing statusActive and statusInactive keys\n * @returns The formatted status string for display\n */\nexport const formatUserStatus = (status: string, translations: { statusActive?: string; statusInactive?: string }): string => {\n if (!status || typeof status !== 'string') {\n return '';\n }\n\n // Use translations for known statuses\n if (status === 'ACTIVE' && translations.statusActive) {\n return translations.statusActive;\n }\n \n if (status === 'INACTIVE' && translations.statusInactive) {\n return translations.statusInactive;\n }\n\n // Fallback to formatted string if status is unknown or no translation available\n return status.charAt(0).toUpperCase() + status.slice(1).toLowerCase();\n};\n\n/**\n * Formats a user's full name by combining first and last name\n * @param firstName - The user's first name\n * @param lastName - The user's last name\n * @returns The formatted full name, trimmed of extra spaces\n */\nexport const formatUserName = (firstName: string, lastName: string): string => {\n const first = firstName?.trim() || '';\n const last = lastName?.trim() || '';\n \n return `${first} ${last}`.trim();\n};\n\n/**\n * Checks if a user has a specific status\n * @param userStatus - The user's current status\n * @param expectedStatus - The status to check against\n * @returns true if the user has the expected status\n */\nexport const hasUserStatus = (userStatus: string, expectedStatus: string): boolean => {\n return userStatus?.toUpperCase() === expectedStatus?.toUpperCase();\n};\n\n/**\n * Gets the opposite status for toggling (ACTIVE <-> INACTIVE)\n * @param currentStatus - The current user status\n * @returns The opposite status, or the current status if not recognized\n */\nexport const getToggleStatus = (currentStatus: string): string => {\n const status = currentStatus?.toUpperCase();\n \n switch (status) {\n case 'ACTIVE':\n return 'INACTIVE';\n case 'INACTIVE':\n return 'ACTIVE';\n default:\n return currentStatus;\n }\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Button } from '@adobe-commerce/elsie/components';\n\nexport type FilterType = 'all' | 'active' | 'inactive';\n\nexport interface CompanyUsersFiltersProps {\n filterType: FilterType;\n onFilterChange: (filter: FilterType) => void;\n translations: {\n showAllUsers: string;\n showActiveUsers: string;\n showInactiveUsers: string;\n ariaFilterOptions: string;\n };\n}\n\nexport const CompanyUsersFilters = ({\n filterType,\n onFilterChange,\n translations\n}: CompanyUsersFiltersProps) => {\n const filters: Array<{ type: FilterType; label: string; ariaLabel: string }> = [\n { type: 'all', label: translations.showAllUsers, ariaLabel: translations.showAllUsers },\n { type: 'active', label: translations.showActiveUsers, ariaLabel: translations.showActiveUsers },\n { type: 'inactive', label: translations.showInactiveUsers, ariaLabel: translations.showInactiveUsers }\n ];\n\n return (\n <div className=\"filterButtons\" role=\"group\" aria-label={translations.ariaFilterOptions}>\n {filters\n .filter(filter => filter.type !== filterType)\n .map(filter => (\n <Button\n key={filter.type}\n variant=\"tertiary\"\n onClick={() => onFilterChange(filter.type)}\n aria-label={filter.ariaLabel}\n >\n {filter.label}\n </Button>\n ))}\n </div>\n );\n};\n\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useEffect, useState, useCallback, useRef, useMemo } from 'preact/hooks';\nimport { getCompanyUsers } from '@/company-management/api';\nimport { fetchUserPermissions } from '@/company-management/api/fetchUserPermissions/fetchUserPermissions';\nimport { \n CompanyUser, \n CompanyUsersFilter, \n CompanyUserStatus \n} from '@/company-management/types';\n\nexport type FilterType = 'all' | 'active' | 'inactive';\n\n// Constants\nconst DEFAULT_PAGE_SIZE = 20;\nconst FIRST_PAGE = 1;\n\nexport interface UseCompanyUsersProps {\n translations: {\n ariaDataLoaded: string;\n ariaDataError: string;\n };\n}\n\nexport interface UseCompanyUsersReturn {\n // Core data\n users: CompanyUser[];\n userPermissions: Set<string> | null;\n \n // Pagination state\n currentPage: number;\n pageSize: number;\n totalItems: number;\n totalPages: number;\n \n // Filter state\n filterType: FilterType;\n filter: CompanyUsersFilter | undefined;\n \n // Loading states\n loading: boolean;\n \n // UI state\n announcement: string;\n \n // Computed values\n canEditUsers: boolean;\n \n // Actions\n handleFilterChange: (newFilter: FilterType) => void;\n handlePageSizeChange: (event: Event | { target?: { value: string } } | string) => void;\n handlePreviousPage: () => void;\n handleNextPage: () => void;\n refreshUsers: () => Promise<void>;\n}\n\nexport const useCompanyUsers = ({ translations }: UseCompanyUsersProps): UseCompanyUsersReturn => {\n const [users, setUsers] = useState<CompanyUser[]>([]);\n const [loading, setLoading] = useState(false);\n const [currentPage, setCurrentPage] = useState(FIRST_PAGE);\n const [pageSize, setPageSize] = useState(DEFAULT_PAGE_SIZE);\n const [filterType, setFilterType] = useState<FilterType>('all');\n const [totalItems, setTotalItems] = useState(0);\n const [totalPages, setTotalPages] = useState(1);\n const [announcement, setAnnouncement] = useState('');\n const [userPermissions, setUserPermissions] = useState<Set<string> | null>(null);\n\n // Stable reference to translations to prevent unnecessary re-renders\n const translationsRef = useRef(translations);\n translationsRef.current = translations;\n\n // Memoized filter based on current filter type\n const filter = useMemo((): CompanyUsersFilter | undefined => {\n switch (filterType) {\n case 'active':\n return { status: 'ACTIVE' as CompanyUserStatus };\n case 'inactive':\n return { status: 'INACTIVE' as CompanyUserStatus };\n default:\n return undefined;\n }\n }, [filterType]);\n\n // Fetch users data\n const fetchUsers = useCallback(async () => {\n setLoading(true);\n try {\n const response = await getCompanyUsers({\n pageSize,\n currentPage,\n filter\n });\n \n // Batch state updates for better performance\n setUsers(response.users);\n setTotalItems(response.totalCount || response.users.length);\n setTotalPages(response.pageInfo.totalPages);\n setAnnouncement(translationsRef.current.ariaDataLoaded.replace('{count}', response.users.length.toString()));\n } catch (error) {\n // Batch error state updates\n setUsers([]);\n setTotalItems(0);\n setTotalPages(1);\n setAnnouncement(translationsRef.current.ariaDataError);\n } finally {\n setLoading(false);\n }\n }, [pageSize, currentPage, filter]);\n\n // Fetch user permissions\n const fetchPermissions = useCallback(async () => {\n try {\n const { allowedIds } = await fetchUserPermissions();\n setUserPermissions(allowedIds);\n } catch (error) {\n setUserPermissions(new Set()); // Empty set on error\n }\n }, []);\n\n // Fetch users when dependencies change\n useEffect(() => {\n fetchUsers();\n }, [fetchUsers]);\n\n // Fetch permissions on component mount\n useEffect(() => {\n fetchPermissions();\n }, [fetchPermissions]);\n\n // Handle filter changes\n const handleFilterChange = useCallback((newFilter: FilterType) => {\n setFilterType(newFilter);\n setCurrentPage(FIRST_PAGE); // Reset to first page when filter changes\n }, []);\n\n // Handle page size change\n const handlePageSizeChange = useCallback((event: Event | { target?: { value: string } } | string) => {\n let value: string;\n if (typeof event === 'string') {\n value = event;\n } else if ('target' in event && event.target && 'value' in event.target) {\n value = event.target.value;\n } else {\n return;\n }\n const newSize = parseInt(value, 10);\n if (!isNaN(newSize)) {\n setPageSize(newSize);\n setCurrentPage(FIRST_PAGE); // Reset to first page when page size changes\n }\n }, []);\n\n // Handle page navigation\n const handlePreviousPage = useCallback(() => {\n if (currentPage > 1) {\n setCurrentPage(currentPage - 1);\n }\n }, [currentPage]);\n\n const handleNextPage = useCallback(() => {\n if (currentPage < totalPages) {\n setCurrentPage(currentPage + 1);\n }\n }, [currentPage, totalPages]);\n\n // Check if user has permission to edit company users\n const canEditUsers = userPermissions?.has('Magento_Company::users_edit') || false;\n\n // Expose refresh function for external use (e.g., after modal operations)\n const refreshUsers = useCallback(async () => {\n await fetchPermissions();\n await fetchUsers();\n }, [fetchPermissions, fetchUsers]);\n\n return {\n // Core data\n users,\n userPermissions,\n \n // Pagination state\n currentPage,\n pageSize,\n totalItems,\n totalPages,\n \n // Filter state\n filterType,\n filter,\n \n // Loading states\n loading,\n \n // UI state\n announcement,\n \n // Computed values\n canEditUsers,\n \n // Actions\n handleFilterChange,\n handlePageSizeChange,\n handlePreviousPage,\n handleNextPage,\n refreshUsers,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useState, useCallback } from 'preact/hooks';\n\nexport interface UseModalResult {\n isOpen: boolean;\n selectedId: string | null;\n open: (id?: string) => void;\n close: () => void;\n}\n\nexport const useModal = (onClose?: () => void): UseModalResult => {\n const [isOpen, setIsOpen] = useState(false);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n\n const open = useCallback((id?: string) => {\n if (id) {\n setSelectedId(id);\n }\n setIsOpen(true);\n }, []);\n\n const close = useCallback(() => {\n setIsOpen(false);\n setSelectedId(null);\n onClose?.();\n }, [onClose]);\n\n return { isOpen, selectedId, open, close };\n};\n\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { useState, useCallback, useEffect, useRef } from 'preact/hooks';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { Button, InLineAlert } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { deleteCompanyUser, updateCompanyUserStatus } from '@/company-management/api';\nimport type { CompanyUserStatus } from '@/company-management/types';\nimport { useInLineAlert } from '@/company-management/hooks';\nimport '@/company-management/components/CompanyUsersManagementModal/CompanyUsersManagementModal.css';\n\nexport interface CompanyUsersManagementModalProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onClose'> {\n /** The ID of the user to manage */\n userId: string;\n /** The current status of the user */\n userStatus: CompanyUserStatus;\n /** Callback function called when the modal should be closed */\n onClose: () => void;\n /** Whether the modal is currently open */\n isOpen?: boolean;\n}\n\nexport const CompanyUsersManagementModal: FunctionComponent<CompanyUsersManagementModalProps> = ({\n className,\n userId,\n userStatus,\n onClose,\n isOpen = false,\n ...props\n}) => {\n const [isDeleting, setIsDeleting] = useState(false);\n const [isTogglingStatus, setIsTogglingStatus] = useState(false);\n const { inLineAlertProps, showError, clearAlert } = useInLineAlert();\n \n // Refs for accessibility\n const modalRef = useRef<HTMLDivElement>(null);\n const previousFocusRef = useRef<HTMLElement | null>(null);\n const titleId = `modal-title-${userId}`;\n const descriptionId = `modal-desc-${userId}`;\n\n // Text translations\n const translations = useText({\n title: 'Company.CompanyUsers.managementModal.title',\n setActiveText: 'Company.CompanyUsers.managementModal.setActiveText',\n setInactiveText: 'Company.CompanyUsers.managementModal.setInactiveText',\n deleteText: 'Company.CompanyUsers.managementModal.deleteText',\n setActiveButton: 'Company.CompanyUsers.managementModal.setActiveButton',\n setInactiveButton: 'Company.CompanyUsers.managementModal.setInactiveButton',\n settingActiveButton: 'Company.CompanyUsers.managementModal.settingActiveButton',\n settingInactiveButton: 'Company.CompanyUsers.managementModal.settingInactiveButton',\n deleteButton: 'Company.CompanyUsers.managementModal.deleteButton',\n deletingButton: 'Company.CompanyUsers.managementModal.deletingButton',\n cancelButton: 'Company.CompanyUsers.managementModal.cancelButton',\n setActiveErrorGeneric: 'Company.CompanyUsers.managementModal.setActiveErrorGeneric',\n setActiveErrorSpecific: 'Company.CompanyUsers.managementModal.setActiveErrorSpecific',\n setInactiveErrorGeneric: 'Company.CompanyUsers.managementModal.setInactiveErrorGeneric',\n setInactiveErrorSpecific: 'Company.CompanyUsers.managementModal.setInactiveErrorSpecific',\n deleteErrorGeneric: 'Company.CompanyUsers.managementModal.deleteErrorGeneric',\n deleteErrorSpecific: 'Company.CompanyUsers.managementModal.deleteErrorSpecific',\n ariaCloseModal: 'Company.CompanyUsers.managementModal.ariaLabels.closeModal',\n ariaModalDescription: 'Company.CompanyUsers.managementModal.ariaLabels.modalDescription',\n });\n\n const handleToggleStatus = useCallback(async () => {\n if (isTogglingStatus) return;\n \n const newStatus = userStatus === 'ACTIVE' ? 'INACTIVE' : 'ACTIVE';\n const isActivating = newStatus === 'ACTIVE';\n \n setIsTogglingStatus(true);\n clearAlert();\n try {\n const result = await updateCompanyUserStatus({ id: userId, status: newStatus });\n if (result.success) {\n onClose();\n } else {\n showError(isActivating ? translations.setActiveErrorSpecific : translations.setInactiveErrorSpecific);\n }\n } catch (error) {\n showError(isActivating ? translations.setActiveErrorGeneric : translations.setInactiveErrorGeneric);\n } finally {\n setIsTogglingStatus(false);\n }\n }, [userId, userStatus, onClose, isTogglingStatus, clearAlert, showError, translations.setActiveErrorSpecific, translations.setInactiveErrorSpecific, translations.setActiveErrorGeneric, translations.setInactiveErrorGeneric]);\n\n const handleDelete = useCallback(async () => {\n if (isDeleting) return;\n \n setIsDeleting(true);\n clearAlert();\n try {\n const result = await deleteCompanyUser({ id: userId });\n if (result.success) {\n onClose();\n } else {\n showError(translations.deleteErrorSpecific);\n }\n } catch (error) {\n showError(translations.deleteErrorGeneric);\n } finally {\n setIsDeleting(false);\n }\n }, [userId, onClose, isDeleting, clearAlert, showError, translations.deleteErrorSpecific, translations.deleteErrorGeneric]);\n\n const handleCancel = useCallback(() => {\n clearAlert();\n onClose();\n }, [onClose, clearAlert]);\n\n // Handle Escape key\n const handleKeyDown = useCallback((event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n clearAlert();\n onClose();\n }\n \n // Focus trapping\n if (event.key === 'Tab') {\n const modal = modalRef.current;\n if (!modal) return;\n \n const focusableElements = modal.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n const firstElement = focusableElements[0] as HTMLElement;\n const lastElement = focusableElements[focusableElements.length - 1] as HTMLElement;\n \n if (event.shiftKey) {\n // Shift + Tab\n if (document.activeElement === firstElement) {\n lastElement.focus();\n event.preventDefault();\n }\n } else if (document.activeElement === lastElement) {\n // Tab\n firstElement.focus();\n event.preventDefault();\n }\n }\n }, [onClose, clearAlert]);\n\n const handleOverlayClick = useCallback((event: MouseEvent) => {\n if (event.target === event.currentTarget) {\n clearAlert();\n onClose();\n }\n }, [onClose, clearAlert]);\n\n const handleCloseClick = useCallback(() => {\n clearAlert();\n onClose();\n }, [onClose, clearAlert]);\n\n // Focus management and event listeners\n useEffect(() => {\n if (isOpen) {\n // Store current focus\n previousFocusRef.current = document.activeElement as HTMLElement;\n \n // Add keyboard event listener\n document.addEventListener('keydown', handleKeyDown);\n \n // Focus the modal after a brief delay to ensure it's rendered\n setTimeout(() => {\n const modal = modalRef.current;\n if (modal) {\n const firstButton = modal.querySelector('button') as HTMLElement;\n if (firstButton) {\n firstButton.focus();\n } else {\n modal.focus();\n }\n }\n }, 100);\n \n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }\n \n // Restore focus when modal closes\n if (previousFocusRef.current) {\n previousFocusRef.current.focus();\n }\n }, [isOpen, handleKeyDown]);\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <div \n className={classes(['company-management-company-users-management-modal-overlay', className])}\n onClick={handleOverlayClick}\n {...props}\n >\n <div \n ref={modalRef}\n className=\"company-management-company-users-management-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n tabIndex={-1}\n >\n <div className=\"company-management-company-users-management-modal__header\">\n <h2 \n id={titleId}\n className=\"company-management-company-users-management-modal__title\"\n >\n {translations.title}\n </h2>\n <button\n className=\"company-management-company-users-management-modal__close\"\n onClick={handleCloseClick}\n aria-label={translations.ariaCloseModal}\n >\n ×\n </button>\n </div>\n \n <div \n id={descriptionId}\n className=\"company-management-company-users-management-modal__content\"\n >\n <p className=\"company-management-company-users-management-modal__text\">\n {userStatus === 'ACTIVE' ? translations.setInactiveText : translations.setActiveText}\n </p>\n <p className=\"company-management-company-users-management-modal__text\">\n {translations.deleteText}\n </p>\n </div>\n\n {inLineAlertProps?.text && (\n <div \n className=\"company-management-company-users-management-modal__alert\"\n role=\"alert\"\n aria-live=\"assertive\"\n >\n <InLineAlert\n type=\"error\"\n heading={inLineAlertProps.text}\n icon={inLineAlertProps.icon}\n data-testid=\"companyUsersManagementModalAlert\"\n />\n </div>\n )}\n\n <div className=\"company-management-company-users-management-modal__actions\">\n <Button\n variant=\"primary\"\n onClick={handleToggleStatus}\n disabled={isTogglingStatus}\n className=\"company-management-company-users-management-modal__button-primary\"\n >\n {isTogglingStatus \n ? (userStatus === 'ACTIVE' ? translations.settingInactiveButton : translations.settingActiveButton)\n : (userStatus === 'ACTIVE' ? translations.setInactiveButton : translations.setActiveButton)\n }\n </Button>\n \n <Button\n variant=\"tertiary\"\n onClick={handleDelete}\n disabled={isDeleting}\n className=\"company-management-company-users-management-modal__button-delete\"\n >\n {isDeleting ? translations.deletingButton : translations.deleteButton}\n </Button>\n \n <Button\n variant=\"secondary\"\n onClick={handleCancel}\n className=\"company-management-company-users-management-modal__button-cancel\"\n >\n {translations.cancelButton}\n </Button>\n </div>\n </div>\n </div>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { FunctionComponent, VNode, Fragment } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport { Icon, Button, Skeleton, SkeletonRow } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\n\nimport '@adobe-commerce/elsie/components/Table/Table.css';\n\ntype Sortable = 'asc' | 'desc' | true;\n\ntype Column = {\n key: string;\n label: string;\n sortBy?: Sortable;\n};\n\ntype RowData = {\n [key: string]: VNode | string | number | undefined;\n _rowDetails?: VNode | string; // Special property for expandable row content\n};\n\nexport interface TableProps extends Omit<HTMLAttributes<HTMLTableElement>, 'loading'> {\n columns: Column[];\n rowData: RowData[];\n mobileLayout?: 'stacked' | 'none';\n caption?: string;\n expandedRows?: Set<number>;\n loading?: boolean;\n skeletonRowCount?: number;\n onSortChange?: (columnKey: string, direction: Sortable) => void;\n}\n\nexport const Table: FunctionComponent<TableProps> = ({\n className,\n children,\n columns = [],\n rowData = [],\n mobileLayout = 'none',\n caption,\n expandedRows = new Set(),\n loading = false,\n skeletonRowCount = 10,\n onSortChange,\n ...props\n}) => {\n const translations = useText({\n sortedAscending: 'Dropin.Table.sortedAscending',\n sortedDescending: 'Dropin.Table.sortedDescending',\n sortBy: 'Dropin.Table.sortBy',\n });\n\n const handleSort = (column: Column) => {\n if (!onSortChange) return;\n\n // Determine next sort direction\n let nextDirection: Sortable;\n if (column.sortBy === true) {\n nextDirection = 'asc';\n } else if (column.sortBy === 'asc') {\n nextDirection = 'desc';\n } else {\n nextDirection = true;\n }\n\n onSortChange(column.key, nextDirection);\n };\n\n const renderSortButton = (column: Column) => {\n if (column.sortBy === undefined) return null;\n\n let iconSource: string;\n let ariaLabel: string;\n\n if (column.sortBy === 'asc') {\n iconSource = 'ChevronUp';\n ariaLabel = translations.sortedAscending.replace('{label}', column.label);\n } else if (column.sortBy === 'desc') {\n iconSource = 'ChevronDown';\n ariaLabel = translations.sortedDescending.replace('{label}', column.label);\n } else {\n iconSource = 'Sort';\n ariaLabel = translations.sortBy.replace('{label}', column.label);\n }\n\n return (\n <Button\n variant=\"tertiary\"\n size=\"medium\"\n className=\"dropin-table__header__sort-button\"\n icon={<Icon source={iconSource} />}\n aria-label={ariaLabel}\n onClick={() => handleSort(column)}\n />\n );\n };\n\n const renderSkeletonRows = () => {\n return Array.from({ length: skeletonRowCount }, (_, rowIndex) => (\n <tr key={`skeleton-${rowIndex}`} className=\"dropin-table__body__row\">\n {columns.map((column) => (\n <td key={column.key} className=\"dropin-table__body__cell\" data-label={column.label}>\n <Skeleton>\n <SkeletonRow variant=\"row\" size=\"small\" fullWidth />\n </Skeleton>\n </td>\n ))}\n </tr>\n ));\n };\n\n const renderDataRows = () => {\n return rowData.map((row, rowIndex) => {\n const hasDetails = row._rowDetails !== undefined;\n const isExpanded = expandedRows.has(rowIndex);\n\n return (\n <Fragment key={rowIndex}>\n <tr className=\"dropin-table__body__row\">\n {columns.map((column) => {\n const cell = row[column.key];\n\n if (typeof cell === 'string' || typeof cell === 'number') {\n return (\n <td key={column.key} className=\"dropin-table__body__cell\" data-label={column.label}>\n {cell}\n </td>\n );\n }\n\n return (\n <td key={column.key} className=\"dropin-table__body__cell\" data-label={column.label}>\n <VComponent node={cell!} />\n </td>\n );\n })}\n </tr>\n {hasDetails && isExpanded && (\n <tr\n key={`${rowIndex}-details`}\n className=\"dropin-table__row-details dropin-table__row-details--expanded\"\n id={`row-${rowIndex}-details`}\n >\n <td\n className=\"dropin-table__row-details__cell\"\n colSpan={columns.length}\n role=\"region\"\n aria-labelledby={`row-${rowIndex}-details`}\n >\n {typeof row._rowDetails === 'string' ? row._rowDetails : <VComponent node={row._rowDetails!} />}\n </td>\n </tr>\n )}\n </Fragment>\n );\n });\n };\n\n const getAriaSort = (column: Column): 'none' | 'ascending' | 'descending' | 'other' | undefined => {\n if (column.sortBy === true) return 'none';\n if (column.sortBy === 'asc') return 'ascending';\n if (column.sortBy === 'desc') return 'descending';\n return undefined;\n };\n\n return (\n <div className={classes(['dropin-table', `dropin-table--mobile-layout-${mobileLayout}`, className])}>\n <table {...props} className=\"dropin-table__table\">\n {caption && <caption className=\"dropin-table__caption\">{caption}</caption>}\n <thead className=\"dropin-table__header\">\n <tr className=\"dropin-table__header__row\">\n {columns.map((column) => (\n <th\n key={column.key}\n className={classes([\n 'dropin-table__header__cell',\n ['dropin-table__header__cell--sorted', column.sortBy === 'asc' || column.sortBy === 'desc'],\n ['dropin-table__header__cell--sortable', column.sortBy !== undefined]\n ])}\n aria-sort={getAriaSort(column)}\n >\n {column.label}\n {renderSortButton(column)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"dropin-table__body\">\n {loading ? (\n // Render skeleton rows when loading\n renderSkeletonRows()\n ) : (\n // Render actual data when not loading\n renderDataRows()\n )}\n </tbody>\n </table>\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { HTMLAttributes } from 'preact/compat';\nimport { useEffect, useCallback, useRef, useMemo } from 'preact/hooks';\nimport { Container } from '@adobe-commerce/elsie/lib';\nimport { \n Button, \n Picker,\n Modal \n} from '@adobe-commerce/elsie/components';\nimport { Table } from '@adobe-commerce/elsie/components/Table/Table';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { formatUserStatus, formatUserName } from '@/company-management/lib';\nimport { CompanyUserStatus } from '@/company-management/types';\nimport { CompanyUserForm } from '@/company-management/components/CompanyUserForm';\nimport { CompanyUsersManagementModal } from '@/company-management/components/CompanyUsersManagementModal';\nimport { CompanyUsersTableLoader } from '@/company-management/components/CompanyLoaders';\nimport { CompanyUsersFilters } from '@/company-management/components/CompanyUsersFilters';\nimport { useCompanyContextListener } from './hooks';\nimport { useCompanyUsers, useModal } from '@/company-management/hooks';\nimport './CompanyUsers.css';\n\nexport interface CompanyUsersProps extends HTMLAttributes<HTMLElement> {}\n\n// Constants\nconst PAGE_SIZE_OPTIONS = [\n { text: '20', value: '20' },\n { text: '30', value: '30' },\n { text: '50', value: '50' },\n { text: '100', value: '100' },\n { text: '200', value: '200' }\n];\n\nexport const CompanyUsers: Container<CompanyUsersProps> = ({ children, className, ...props }) => {\n const tableRef = useRef<HTMLDivElement>(null);\n\n // Text translations using proper useText pattern\n const translations = useText({\n showAllUsers: 'Company.CompanyUsers.filters.showAll',\n showActiveUsers: 'Company.CompanyUsers.filters.showActive',\n showInactiveUsers: 'Company.CompanyUsers.filters.showInactive',\n idColumn: 'Company.CompanyUsers.columns.id',\n nameColumn: 'Company.CompanyUsers.columns.name',\n emailColumn: 'Company.CompanyUsers.columns.email',\n roleColumn: 'Company.CompanyUsers.columns.role',\n teamColumn: 'Company.CompanyUsers.columns.team',\n statusColumn: 'Company.CompanyUsers.columns.status',\n actionsColumn: 'Company.CompanyUsers.columns.actions',\n statusActive: 'Company.CompanyUsers.status.active',\n statusInactive: 'Company.CompanyUsers.status.inactive',\n emptyTeam: 'Company.CompanyUsers.emptyTeam',\n emptyActions: 'Company.CompanyUsers.emptyActions',\n itemsText: 'Company.CompanyUsers.pagination.itemsCount',\n itemsPerPageLabel: 'Company.CompanyUsers.pagination.itemsPerPage',\n showLabel: 'Company.CompanyUsers.pagination.show',\n perPageLabel: 'Company.CompanyUsers.pagination.perPage',\n previousPage: 'Company.CompanyUsers.pagination.previous',\n nextPage: 'Company.CompanyUsers.pagination.next',\n pageInfo: 'Company.CompanyUsers.pagination.pageInfo',\n // Accessibility labels\n ariaLoadingUsers: 'Company.CompanyUsers.ariaLabels.loadingUsers',\n ariaUsersTable: 'Company.CompanyUsers.ariaLabels.usersTable',\n ariaFilterOptions: 'Company.CompanyUsers.ariaLabels.filterOptions',\n ariaPaginationNav: 'Company.CompanyUsers.ariaLabels.paginationNav',\n ariaPageSizeSelector: 'Company.CompanyUsers.ariaLabels.pageSizeSelector',\n ariaPreviousPageFull: 'Company.CompanyUsers.ariaLabels.previousPageFull',\n ariaNextPageFull: 'Company.CompanyUsers.ariaLabels.nextPageFull',\n ariaCurrentPage: 'Company.CompanyUsers.ariaLabels.currentPage',\n ariaShowingUsers: 'Company.CompanyUsers.ariaLabels.showingUsers',\n ariaDataLoaded: 'Company.CompanyUsers.ariaLabels.dataLoaded',\n ariaDataError: 'Company.CompanyUsers.ariaLabels.dataError',\n ariaPageNavigation: 'Company.CompanyUsers.ariaLabels.pageNavigation',\n manageUser: 'Company.CompanyUsers.actions.manage',\n editUser: 'Company.CompanyUsers.actions.edit',\n ariaManageUser: 'Company.CompanyUsers.ariaLabels.manageUser',\n ariaEditUser: 'Company.CompanyUsers.ariaLabels.editUser',\n addNewUser: 'Company.CompanyUsers.actions.addNewUser'\n });\n\n // Use the company users hook to manage all user data and pagination\n const {\n users,\n loading,\n currentPage,\n pageSize,\n filterType,\n totalItems,\n totalPages,\n announcement,\n canEditUsers,\n handleFilterChange,\n handlePageSizeChange,\n handlePreviousPage,\n handleNextPage,\n refreshUsers\n } = useCompanyUsers({\n translations: {\n ariaDataLoaded: translations.ariaDataLoaded,\n ariaDataError: translations.ariaDataError\n }\n });\n\n // Stable reference to translations to prevent unnecessary re-renders\n const translationsRef = useRef(translations);\n translationsRef.current = translations;\n\n // Focus management after data updates\n useEffect(() => {\n if (!loading && tableRef.current && users.length > 0) {\n // Announce change to screen readers but don't steal focus\n tableRef.current.setAttribute('aria-busy', 'false');\n }\n }, [loading, currentPage, filterType, users.length]);\n\n // Handle company context changes using reusable hook\n const handleCompanyContextChange = useCallback(() => {\n refreshUsers();\n }, [refreshUsers]);\n\n useCompanyContextListener(handleCompanyContextChange);\n\n // Modal management using useModal hook\n const manageModal = useModal(refreshUsers);\n const editModal = useModal(refreshUsers);\n const addModal = useModal(refreshUsers);\n\n // Prepare table columns - memoized to prevent unnecessary re-renders (optimized)\n const columns = useMemo(() => {\n const currentTranslations = translationsRef.current;\n return [\n { key: 'id', label: currentTranslations.idColumn },\n { key: 'name', label: currentTranslations.nameColumn },\n { key: 'email', label: currentTranslations.emailColumn },\n { key: 'role', label: currentTranslations.roleColumn },\n { key: 'team', label: currentTranslations.teamColumn },\n { key: 'status', label: currentTranslations.statusColumn },\n { key: 'actions', label: currentTranslations.actionsColumn }\n ];\n }, []); // No dependencies - only recompute when component mounts\n\n\n // Prepare table row data - memoized for performance (optimized)\n const rowData = useMemo(() => users.map((user) => {\n const fullName = formatUserName(user.firstName, user.lastName);\n const currentTranslations = translationsRef.current;\n \n return {\n id: user.id,\n name: fullName,\n email: user.email,\n role: user.role,\n team: user.team || currentTranslations.emptyTeam,\n status: formatUserStatus(user.status, currentTranslations),\n actions: canEditUsers ? (\n <div className=\"user-actions\">\n <Button\n variant=\"tertiary\"\n onClick={() => editModal.open(user.id)}\n aria-label={currentTranslations.ariaEditUser.replace('{name}', fullName)}\n className=\"edit-user-button\"\n >\n {currentTranslations.editUser}\n </Button>\n <Button\n variant=\"tertiary\"\n onClick={() => manageModal.open(user.id)}\n aria-label={currentTranslations.ariaManageUser.replace('{name}', fullName)}\n className=\"manage-user-button\"\n >\n {currentTranslations.manageUser}\n </Button>\n </div>\n ) : (\n <span className=\"no-actions\">{currentTranslations.emptyActions}</span>\n )\n };\n }), [users, canEditUsers, editModal, manageModal]);\n\n // Memoize selected user for performance\n const selectedUser = useMemo(() => \n users.find(user => user.id === manageModal.selectedId),\n [users, manageModal.selectedId]\n );\n\n return (\n <section className={className} {...props}>\n {/* Screen reader announcements */}\n <div className=\"sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {announcement}\n </div>\n\n {/* Filter buttons */}\n <CompanyUsersFilters\n filterType={filterType}\n onFilterChange={handleFilterChange}\n translations={{\n showAllUsers: translations.showAllUsers,\n showActiveUsers: translations.showActiveUsers,\n showInactiveUsers: translations.showInactiveUsers,\n ariaFilterOptions: translations.ariaFilterOptions\n }}\n />\n\n {/* Table with loading state */}\n <div ref={tableRef} aria-busy={loading}>\n {loading ? (\n <div className=\"loadingContainer\" role=\"status\" aria-live=\"polite\">\n <CompanyUsersTableLoader testId=\"companyUsersTableLoader\" />\n <span className=\"sr-only\">{translations.ariaLoadingUsers}</span>\n </div>\n ) : (\n <Table\n columns={columns}\n rowData={rowData}\n mobileLayout=\"stacked\"\n aria-label={translations.ariaUsersTable}\n summary={translations.ariaShowingUsers.replace('{count}', users.length.toString())}\n />\n )}\n </div>\n\n {/* Pagination controls */}\n <nav aria-label={translations.ariaPaginationNav} className=\"paginationContainer\">\n {/* Items count on the left */}\n <div aria-live=\"polite\" aria-atomic=\"true\">\n {translations.itemsText.replace('{count}', totalItems.toString())}\n </div>\n\n {/* Pagination buttons in the center (only show when multiple pages) */}\n {totalPages > 1 && (\n <div className=\"paginationButtons\" role=\"group\" aria-label={translations.ariaPageNavigation}>\n <Button\n variant=\"secondary\"\n onClick={handlePreviousPage}\n disabled={currentPage === 1}\n aria-label={translations.ariaPreviousPageFull.replace('{current}', currentPage.toString())}\n >\n {translations.previousPage}\n </Button>\n <span aria-current=\"page\" aria-live=\"polite\">\n {translations.pageInfo.replace('{current}', currentPage.toString()).replace('{total}', totalPages.toString())}\n </span>\n <Button\n variant=\"secondary\"\n onClick={handleNextPage}\n disabled={currentPage === totalPages}\n aria-label={translations.ariaNextPageFull.replace('{current}', currentPage.toString())}\n >\n {translations.nextPage}\n </Button>\n </div>\n )}\n\n {/* Page size picker on the right */}\n <div className=\"pageSizeSelector\">\n <label htmlFor=\"page-size-select\" id=\"page-size-label\">\n <span>{translations.showLabel}</span>\n </label>\n <Picker\n id=\"page-size-select\"\n name=\"pageSize\"\n value={pageSize.toString()}\n options={PAGE_SIZE_OPTIONS}\n onChange={handlePageSizeChange}\n aria-labelledby=\"page-size-label\"\n aria-describedby=\"page-size-description\"\n />\n <span id=\"page-size-description\">{translations.perPageLabel}</span>\n </div>\n </nav>\n\n {/* Add New User Button */}\n {canEditUsers && (\n <div className=\"addUserButtonContainer\">\n <Button\n variant=\"primary\"\n onClick={() => addModal.open()}\n aria-label={translations.addNewUser}\n >\n {translations.addNewUser}\n </Button>\n </div>\n )}\n\n {children}\n\n {/* User Add Modal (for adding new user) */}\n {addModal.isOpen && canEditUsers && (\n <Modal\n open={addModal.isOpen}\n onClose={addModal.close}\n size=\"medium\"\n >\n <CompanyUserForm\n mode=\"add\"\n entityId={null}\n parentStructureId={null}\n permissions={{ canEditUsers }}\n onSaved={addModal.close}\n onCancel={addModal.close}\n />\n </Modal>\n )}\n\n {/* User Edit Modal (for editing user information) */}\n {editModal.selectedId && editModal.isOpen && canEditUsers && (\n <Modal\n open={editModal.isOpen}\n onClose={editModal.close}\n size=\"medium\"\n >\n <CompanyUserForm\n mode=\"edit\"\n entityId={editModal.selectedId}\n parentStructureId={null}\n permissions={{ canEditUsers }}\n onSaved={editModal.close}\n onCancel={editModal.close}\n />\n </Modal>\n )}\n\n {/* User Management Modal (for status changes and deletion) */}\n {manageModal.selectedId && canEditUsers && selectedUser && (\n <CompanyUsersManagementModal\n isOpen={manageModal.isOpen}\n userId={manageModal.selectedId}\n userStatus={(selectedUser.status as CompanyUserStatus) || 'ACTIVE'}\n onClose={manageModal.close}\n />\n )}\n </section>\n );\n};\n"],"names":["formatUserStatus","status","translations","formatUserName","firstName","lastName","first","last","CompanyUsersFilters","filterType","onFilterChange","filters","filter","jsx","Button","DEFAULT_PAGE_SIZE","FIRST_PAGE","useCompanyUsers","users","setUsers","useState","loading","setLoading","currentPage","setCurrentPage","pageSize","setPageSize","setFilterType","totalItems","setTotalItems","totalPages","setTotalPages","announcement","setAnnouncement","userPermissions","setUserPermissions","translationsRef","useRef","useMemo","fetchUsers","useCallback","response","getCompanyUsers","fetchPermissions","allowedIds","fetchUserPermissions","useEffect","handleFilterChange","newFilter","handlePageSizeChange","event","value","newSize","handlePreviousPage","handleNextPage","canEditUsers","refreshUsers","useModal","onClose","isOpen","setIsOpen","selectedId","setSelectedId","open","id","close","CompanyUsersManagementModal","className","userId","userStatus","props","isDeleting","setIsDeleting","isTogglingStatus","setIsTogglingStatus","inLineAlertProps","showError","clearAlert","useInLineAlert","modalRef","previousFocusRef","titleId","descriptionId","useText","handleToggleStatus","newStatus","isActivating","updateCompanyUserStatus","handleDelete","deleteCompanyUser","handleCancel","handleKeyDown","modal","focusableElements","firstElement","lastElement","handleOverlayClick","handleCloseClick","firstButton","classes","jsxs","InLineAlert","Table","children","columns","rowData","mobileLayout","caption","expandedRows","skeletonRowCount","onSortChange","handleSort","column","nextDirection","renderSortButton","iconSource","ariaLabel","Icon","renderSkeletonRows","_","rowIndex","Skeleton","SkeletonRow","renderDataRows","row","hasDetails","isExpanded","Fragment","cell","VComponent","getAriaSort","PAGE_SIZE_OPTIONS","CompanyUsers","tableRef","handleCompanyContextChange","useCompanyContextListener","manageModal","editModal","addModal","currentTranslations","user","fullName","selectedUser","CompanyUsersTableLoader","Picker","Modal","CompanyUserForm"],"mappings":"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","x_google_ignoreList":[5]}
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name": "@dropins/storefront-company-management", "version": "1.0.0-alpha2003", "@dropins/tools": "^1.5.0-beta4", "license": "SEE LICENSE IN LICENSE.md"}
1
+ {"name": "@dropins/storefront-company-management", "version": "1.0.0-alpha2004", "@dropins/tools": "^1.5.0-beta4", "license": "SEE LICENSE IN LICENSE.md"}