@dropins/storefront-company-management 1.0.0-alpha2004 → 1.0.0-alpha2005
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.
- package/api/getCompanyRoles/getCompanyRoles.d.ts +6 -2
- package/api/getCompanyRoles/graphql/getCompanyRoles.graphql.d.ts +1 -1
- package/api/getCompanyUsers/getCompanyUsers.d.ts +1 -1
- package/api/index.d.ts +0 -1
- package/api/updateCompanyUserStatus/updateCompanyUserStatus.d.ts +1 -1
- package/api.js +2 -2
- package/api.js.map +1 -1
- package/chunks/CompanyUserForm.js +1 -1
- package/chunks/CompanyUserForm.js.map +1 -1
- package/chunks/fetchUserPermissions.js +2 -2
- package/chunks/getCustomerCompany.js +1 -1
- package/chunks/isCompanyUser.js +5 -5
- package/chunks/isCompanyUser.js.map +1 -1
- package/chunks/network-error.js +1 -1
- package/chunks/updateCompany.js +1 -1
- package/chunks/updateCompany.js.map +1 -1
- package/chunks/updateCompanyTeam.js +2 -2
- package/chunks/updateCompanyUser.js +19 -10
- package/chunks/updateCompanyUser.js.map +1 -1
- package/chunks/updateCompanyUserStatus.js +3 -3
- package/chunks/updateCompanyUserStatus.js.map +1 -1
- package/chunks/useCompanyContextListener.js.map +1 -1
- package/chunks/useInLineAlert.js +1 -1
- package/chunks/useInLineAlert.js.map +1 -1
- package/chunks/validateCompanyEmail.js +29 -0
- package/chunks/validateCompanyEmail.js.map +1 -0
- package/components/CompanyLoaders/CompanyLoaders.d.ts +3 -1
- package/containers/CompanyProfile.js +1 -1
- package/containers/CompanyProfile.js.map +1 -1
- package/containers/CompanyRegistration.js +1 -1
- package/containers/CompanyRegistration.js.map +1 -1
- package/containers/CompanyStructure.js +1 -1
- package/containers/CompanyStructure.js.map +1 -1
- package/containers/CompanyUsers.js +1 -1
- package/containers/CompanyUsers.js.map +1 -1
- package/containers/CustomerCompanyInfo.js +1 -1
- package/containers/CustomerCompanyInfo.js.map +1 -1
- package/hooks/index.d.ts +1 -0
- package/hooks/useCompanyTeamForm.d.ts +0 -1
- package/hooks/useCompanyUserForm.d.ts +2 -3
- package/hooks/usePermissions.d.ts +1 -0
- package/package.json +1 -1
- package/render.js +5 -5
- package/{api/checkIsCompanyEnabled/index.d.ts → types/api/getCompanyRolesOptions.types.d.ts} +5 -2
- package/types/api/{checkIsCompanyEnabled.types.d.ts → getCompanyRolesResponse.types.d.ts} +16 -4
- package/types/api/index.d.ts +2 -1
- package/types/index.d.ts +2 -0
- package/api/checkIsCompanyEnabled/checkIsCompanyEnabled.d.ts +0 -4
- package/chunks/getCountries.js +0 -29
- package/chunks/getCountries.js.map +0 -1
- package/containers/CompanyUsers/hooks/index.d.ts +0 -19
- package/containers/CompanyUsers/hooks.d.ts +0 -1
- package/containers/CompanyUsers/hooks.js +0 -4
- package/containers/CompanyUsers/hooks.js.map +0 -1
- /package/{containers/CompanyUsers/hooks → hooks}/useCompanyContextListener.d.ts +0 -0
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { CompanyRoleModel } from '../../data/models';
|
|
2
|
+
import { GetCompanyRolesOptions } from '../../types/api';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
|
-
* Retrieves
|
|
5
|
+
* Retrieves company roles with pagination support
|
|
6
|
+
* @param options - Pagination options
|
|
7
|
+
* @param options.pageSize - Number of items per page (default: 20)
|
|
8
|
+
* @param options.currentPage - Current page number (default: 1)
|
|
5
9
|
* @returns Promise resolving to array of CompanyRoleModel
|
|
6
10
|
*/
|
|
7
|
-
export declare function getCompanyRoles(): Promise<CompanyRoleModel[]>;
|
|
11
|
+
export declare function getCompanyRoles(options?: GetCompanyRolesOptions): Promise<CompanyRoleModel[]>;
|
|
8
12
|
//# sourceMappingURL=getCompanyRoles.d.ts.map
|
|
@@ -14,5 +14,5 @@
|
|
|
14
14
|
* is strictly forbidden unless prior written permission is obtained
|
|
15
15
|
* from Adobe.
|
|
16
16
|
*******************************************************************/
|
|
17
|
-
export declare const GET_COMPANY_ROLES = "\n query getCompanyRoles {\n company {\n roles {\n items {
|
|
17
|
+
export declare const GET_COMPANY_ROLES = "\n query getCompanyRoles($pageSize: Int, $currentPage: Int) {\n company {\n roles(pageSize: $pageSize, currentPage: $currentPage) {\n items {\n id\n name\n }\n total_count\n page_info {\n current_page\n page_size\n total_pages\n }\n }\n }\n }\n";
|
|
18
18
|
//# sourceMappingURL=getCompanyRoles.graphql.d.ts.map
|
package/api/index.d.ts
CHANGED
|
@@ -18,7 +18,6 @@ export * from './initialize';
|
|
|
18
18
|
export * from './fetch-graphql';
|
|
19
19
|
export * from './fetchUserPermissions';
|
|
20
20
|
export * from './allowCompanyRegistration';
|
|
21
|
-
export * from './checkIsCompanyEnabled';
|
|
22
21
|
export * from './companyEnabled';
|
|
23
22
|
export * from './createCompany';
|
|
24
23
|
export * from './createCompanyTeam';
|
package/api.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{f as
|
|
3
|
+
import{f as n}from"./chunks/network-error.js";import{g,r as E,s as T,a as h,b as S}from"./chunks/network-error.js";import{f as _}from"./chunks/fetchUserPermissions.js";import{D as O,S as A,a as R,c as G,g as F,i as b}from"./chunks/isCompanyUser.js";import{c as I,g as v}from"./chunks/getCustomerCompany.js";import{c as M,d as N,a as P,g as Q,b as D,u as w}from"./chunks/updateCompanyTeam.js";import{c as k,d as q,a as z,g as Y,i as j,u as B}from"./chunks/updateCompanyUser.js";import{g as K,u as V}from"./chunks/updateCompany.js";import{g as Z,u as $}from"./chunks/updateCompanyUserStatus.js";import{g as ae,v as re}from"./chunks/validateCompanyEmail.js";import"@dropins/tools/fetch-graphql.js";import"@dropins/tools/event-bus.js";import"./chunks/company-permissions.js";const y=async(a={})=>({success:!0,config:a}),p=`
|
|
4
4
|
query GET_CUSTOMER_COMPANIES_WITH_ROLES {
|
|
5
5
|
customer {
|
|
6
6
|
companies(input: {}) {
|
|
@@ -15,5 +15,5 @@ import{f as m}from"./chunks/network-error.js";import{g as T,r as S,s as U,b as _
|
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
-
`,
|
|
18
|
+
`,f=async()=>{var a,t,o;try{const r=await n(p,{method:"POST"});if((a=r.errors)!=null&&a.length)return!1;const s=(t=r.data)==null?void 0:t.customer;if(!s)return!1;const m=((o=s.companies)==null?void 0:o.items)??[];if(!Array.isArray(m)||m.length===0)return!1;const e=s.role;return e?e.id==="0"||typeof e.id=="number"&&e.id===0||e.name==="Company Administrator":!1}catch(r){return console.error("Error checking if customer is company admin:",r),!1}};export{O as DEFAULT_COUNTRY,A as STORE_CONFIG_DEFAULTS,R as allowCompanyRegistration,I as companyEnabled,G as createCompany,M as createCompanyTeam,k as createCompanyUser,N as deleteCompanyTeam,q as deleteCompanyUser,n as fetchGraphQl,_ as fetchUserPermissions,K as getCompany,z as getCompanyRoles,P as getCompanyStructure,Q as getCompanyTeam,Y as getCompanyUser,Z as getCompanyUsers,g as getConfig,ae as getCountries,v as getCustomerCompany,F as getStoreConfig,y as initialize,f as isCompanyAdmin,b as isCompanyUser,j as isCompanyUserEmailAvailable,E as removeFetchGraphQlHeader,T as setEndpoint,h as setFetchGraphQlHeader,S as setFetchGraphQlHeaders,V as updateCompany,D as updateCompanyStructure,w as updateCompanyTeam,B as updateCompanyUser,$ as updateCompanyUserStatus,re as validateCompanyEmail};
|
|
19
19
|
//# sourceMappingURL=api.js.map
|
package/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sources":["/@dropins/storefront-company-management/src/api/initialize/initialize.ts","/@dropins/storefront-company-management/src/api/
|
|
1
|
+
{"version":3,"file":"api.js","sources":["/@dropins/storefront-company-management/src/api/initialize/initialize.ts","/@dropins/storefront-company-management/src/api/isCompanyAdmin/graphql/isCompanyAdmin.graphql.ts","/@dropins/storefront-company-management/src/api/isCompanyAdmin/isCompanyAdmin.ts"],"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// import { events } from '@adobe-commerce/event-bus';\n\n\nimport { CompanyDropinConfig } from '../../types/api/initialize.types';\n\nexport const initialize = async (config: CompanyDropinConfig = {}) => {\n return {\n success: true,\n config,\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\nexport const GET_CUSTOMER_COMPANIES_WITH_ROLES = /* GraphQL */ `\n query GET_CUSTOMER_COMPANIES_WITH_ROLES {\n customer {\n companies(input: {}) {\n items {\n id\n name\n }\n }\n role {\n id\n name\n }\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 { fetchGraphQl } from '../fetch-graphql';\nimport { GET_CUSTOMER_COMPANIES_WITH_ROLES } from './graphql/isCompanyAdmin.graphql';\n\ninterface CompanyRole {\n id: string;\n name: string;\n}\n\ninterface CompanyBasicInfo {\n id: string;\n name: string;\n}\n\ninterface CustomerCompaniesWithRolesResponse {\n customer: {\n companies: {\n items: CompanyBasicInfo[];\n };\n role: CompanyRole | null;\n } | null;\n}\n\n/**\n * Check if the current authenticated customer is a company administrator in any company\n * @returns Promise<boolean> - true if customer is a company admin in at least one company, false otherwise\n */\nexport const isCompanyAdmin = async (): Promise<boolean> => {\n try {\n const response = await fetchGraphQl<CustomerCompaniesWithRolesResponse>(GET_CUSTOMER_COMPANIES_WITH_ROLES, {\n method: 'POST',\n });\n\n if (response.errors?.length) {\n return false;\n }\n\n const customer = response.data?.customer;\n if (!customer) {\n return false;\n }\n\n // Check if user is part of at least one company\n const companies = customer.companies?.items ?? [];\n if (!Array.isArray(companies) || companies.length === 0) {\n return false;\n }\n\n // Check if user has admin role\n const customerRole = customer.role;\n if (!customerRole) {\n return false;\n }\n\n // Check if user is company administrator by role ID or name\n return customerRole.id === '0' || \n (typeof customerRole.id === 'number' && customerRole.id === 0) ||\n customerRole.name === 'Company Administrator';\n } catch (error) {\n console.error('Error checking if customer is company admin:', error);\n return false;\n }\n};\n"],"names":["initialize","config","GET_CUSTOMER_COMPANIES_WITH_ROLES","isCompanyAdmin","response","fetchGraphQl","_a","customer","_b","companies","_c","customerRole","error"],"mappings":"mwBAsBO,MAAMA,EAAa,MAAOC,EAA8B,MACtD,CACL,QAAS,GACT,OAAAA,CACF,GCTWC,EAAkD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EC0BlDC,EAAiB,SAA8B,WACtD,GAAA,CACI,MAAAC,EAAW,MAAMC,EAAiDH,EAAmC,CACzG,OAAQ,MAAA,CACT,EAEG,IAAAI,EAAAF,EAAS,SAAT,MAAAE,EAAiB,OACZ,MAAA,GAGH,MAAAC,GAAWC,EAAAJ,EAAS,OAAT,YAAAI,EAAe,SAChC,GAAI,CAACD,EACI,MAAA,GAIT,MAAME,IAAYC,EAAAH,EAAS,YAAT,YAAAG,EAAoB,QAAS,CAAC,EAChD,GAAI,CAAC,MAAM,QAAQD,CAAS,GAAKA,EAAU,SAAW,EAC7C,MAAA,GAIT,MAAME,EAAeJ,EAAS,KAC9B,OAAKI,EAKEA,EAAa,KAAO,KACnB,OAAOA,EAAa,IAAO,UAAYA,EAAa,KAAO,GAC5DA,EAAa,OAAS,wBANpB,SAOFC,EAAO,CACN,eAAA,MAAM,+CAAgDA,CAAK,EAC5D,EAAA,CAEX"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsxs as B,jsx as
|
|
3
|
+
import{jsxs as B,jsx as s}from"@dropins/tools/preact-jsx-runtime.js";import{memo as G}from"@dropins/tools/preact-compat.js";import{useState as m,useEffect as O}from"@dropins/tools/preact-hooks.js";import{Card as D,InLineAlert as H,ProgressSpinner as J,Field as _,Input as q,Picker as z,Button as $}from"@dropins/tools/components.js";import{i as K}from"./company-permissions.js";import{g as Q,c as W,u as X,i as Y,a as Z}from"./updateCompanyUser.js";import{useText as L}from"@dropins/tools/i18n.js";import{c as ee}from"./useInLineAlert.js";function te(b){const{mode:N,entityId:p,parentStructureId:g,onSaved:E}=b,c=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"}),[r,y]=m({firstName:"",lastName:"",email:"",jobTitle:"",telephone:"",roleId:"",status:"ACTIVE"}),[R,d]=m({}),[n,f]=m({}),[w,A]=m(!1),[C,U]=m(null),[T,j]=m(null),[I,x]=m(""),[l,t]=m(""),[i,V]=m(!1);O(()=>{N!=="edit"||!p||(A(!0),Q(p).then(e=>{var h;if(!e)return;const a=e.email||"";y(S=>({...S,firstName:e.firstName||"",lastName:e.lastName||"",email:a,jobTitle:e.jobTitle||"",telephone:e.telephone||"",status:e.status||"ACTIVE"})),t(a),(h=e==null?void 0:e.role)!=null&&h.id&&y(S=>({...S,roleId:e.role.id})),V((e==null?void 0:e.isCompanyAdmin)??!1)}).finally(()=>A(!1)))},[N,p]);const P=e=>/.+@.+\..+/.test(e),F=(e,a)=>e==="firstName"?a!=null&&a.trim()?null:c.firstNameRequired:e==="lastName"?a!=null&&a.trim()?null:c.lastNameRequired:e==="email"?a!=null&&a.trim()?P(a.trim())?null:c.emailInvalid:c.emailRequired:e==="roleId"?a?null:c.selectRole:null,M=(e,a)=>{y(h=>({...h,[e]:a})),e==="email"&&j(null),C&&U(null)};return{values:r,errors:R,touched:n,loading:w,setValue:M,onBlur:async(e,a)=>{a!==void 0&&M(e,a),f(v=>({...v,[e]:!0}));const h=a!==void 0?a:r[e],S=F(e,h);if(d(S?v=>({...v,[e]:S}):v=>{const o={...v};return delete o[e],o}),e==="email"){const o=(a!==void 0?a:r.email||"").trim();if(N==="edit"&&o.toLowerCase()===(l||"").trim().toLowerCase()){j(null);return}if(P(o)&&o!==I){const u=await Y(o);x(o),j(u),u===!1&&d(k=>({...k,email:"A user with this email address is already a member of your company."}))}}},submit:async()=>{const e=["firstName","lastName","email","roleId"],a={};for(const o of e){const u=F(o,r[o]);u&&(a[o]=u)}if(d(a),f({firstName:!0,lastName:!0,email:!0,roleId:!0}),Object.keys(a).length||T===!1){setTimeout(()=>{const o=document.querySelector(".company-user-form__content .dropin-field__hint--error");if(o){const u=o.closest(".dropin-field");if(u){u.scrollIntoView({behavior:"smooth",block:"center"});const k=u.querySelector("input, select");k&&k.focus()}}},100);return}const h=`${r.firstName||""} ${r.lastName||""}`.trim()||r.email||"",v=i||K({id:r.roleId})?"ACTIVE":r.status;try{if(N==="add"){const o=await W({email:r.email||"",firstName:r.firstName||"",lastName:r.lastName||"",jobTitle:r.jobTitle||"",telephone:r.telephone||"",roleId:r.roleId,status:v,targetId:g??null});if(!o){U(c.createUserError);return}E({label:h,structureId:o.structureId,entityId:o.id,type:"user"})}else p&&(await X({id:p,email:r.email||"",firstName:r.firstName||"",lastName:r.lastName||"",jobTitle:r.jobTitle||"",telephone:r.telephone||"",status:v,roleId:r.roleId}),E({label:h,entityId:p,type:"user"}))}catch(o){const u=o instanceof Error?o.message:c.saveUserError;U(u)}},isCompanyAdmin:i,generalError:C}}function ae(){const b=L({loadRolesError:"Company.CompanyStructure.messages.loadRolesError"}),[N,p]=m([]),[g,E]=m(!0),[c,r]=m(null);return O(()=>{let y=!0;return E(!0),Z({pageSize:1e3}).then(R=>{y&&p(R)}).catch(()=>{y&&r(b.loadRolesError)}).finally(()=>{y&&E(!1)}),()=>{y=!1}},[b.loadRolesError]),{roles:N,loading:g,error:c}}const pe=G(({mode:b,entityId:N,parentStructureId:p,permissions:g,onSaved:E,onCancel:c})=>{const r=(g==null?void 0:g.canEditUsers)??!1,{roles:y,loading:R}=ae(),{values:d,errors:n,touched:f,loading:w,setValue:A,onBlur:C,submit:U,isCompanyAdmin:T,generalError:j}=te({mode:b,entityId:N,parentStructureId:p,onSaved:E}),[I,x]=m(!1),l=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:[s("h3",{className:"acm-structure-panel__title",children:b==="add"?l.addUser:l.editUser}),B(D,{variant:"secondary",className:`company-user-form__card ${I?"is-working":""}`,children:[j?s(H,{className:"company-user-form__notification",type:"error",variant:"secondary",heading:j}):null,I?s("div",{className:"company-user-form__overlay","aria-live":"polite",children:s(J,{size:"small"})}):null,w||R?s(ee,{}):B("div",{className:"company-user-form__content",children:[s(_,{label:l.jobTitle,className:"acm-structure-panel__field",error:f.jobTitle&&n.jobTitle?n.jobTitle:void 0,children:s(q,{name:"job_title",type:"text",value:d.jobTitle||"",onBlur:t=>{const i=t.target;C("jobTitle",i.value)},variant:"primary",size:"medium"})}),s(_,{label:l.userRole,required:!0,className:"acm-structure-panel__field",error:!T&&f.roleId&&n.roleId?n.roleId:void 0,disabled:T,children:T?s(z,{name:"role",value:"MA==",options:[{value:"MA==",text:l.companyAdministrator}]}):s(z,{name:"role",value:d.roleId||"placeholder",onChange:t=>{var i,V;return A("roleId",String(((i=t==null?void 0:t.target)==null?void 0:i.value)==="placeholder"?"":((V=t==null?void 0:t.target)==null?void 0:V.value)??""))},onBlur:t=>{const i=t.target;C("roleId",i.value==="placeholder"?"":i.value)},options:[{value:"placeholder",text:l.selectRole,disabled:!0},...y.map(t=>({value:t.id,text:t.name}))]})}),s(_,{label:l.firstName,required:!0,className:"acm-structure-panel__field",error:f.firstName&&n.firstName?n.firstName:void 0,children:s(q,{name:"first_name",type:"text",value:d.firstName,onBlur:t=>{const i=t.target;C("firstName",i.value)},variant:"primary",size:"medium"})}),s(_,{label:l.lastName,required:!0,className:"acm-structure-panel__field",error:f.lastName&&n.lastName?n.lastName:void 0,children:s(q,{name:"last_name",type:"text",value:d.lastName,onBlur:t=>{const i=t.target;C("lastName",i.value)},variant:"primary",size:"medium"})}),s(_,{label:l.email,required:!0,className:"acm-structure-panel__field",error:f.email&&n.email?n.email:void 0,children:s(q,{name:"email",type:"email",value:d.email,onBlur:t=>{const i=t.target;C("email",i.value)},placeholder:"jdoe@example.com",variant:"primary",size:"medium"})}),s(_,{label:l.workPhoneNumber,className:"acm-structure-panel__field",error:f.telephone&&n.telephone?n.telephone:void 0,children:s(q,{name:"telephone",type:"text",value:d.telephone||"",onBlur:t=>{const i=t.target;C("telephone",i.value)},variant:"primary",size:"medium"})}),s(_,{label:l.status,className:"acm-structure-panel__field",disabled:T||!r,children:s(z,{name:"status",value:d.status,onChange:t=>{var i;return A("status",String(((i=t==null?void 0:t.target)==null?void 0:i.value)??"ACTIVE"))},options:[{value:"ACTIVE",text:l.active},{value:"INACTIVE",text:l.inactive}]})})]})]}),w||R?null:B("div",{className:"acm-structure-modal__actions",children:[s($,{type:"button",variant:"primary",disabled:I||!r,onClick:async()=>{if(!I){x(!0);try{await U()}finally{x(!1)}}},children:l.save}),s($,{type:"button",variant:"secondary",disabled:I,onClick:c,children:l.cancel})]})]})});export{pe 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, 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', value: any): 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 // jobTitle and telephone are now optional fields (USF-3012)\n if (field === 'roleId') return value ? null : translations.selectRole;\n return null;\n };\n\n const setValue = (field: keyof CompanyUserModel | 'roleId', value: any) => {\n setValues((v) => ({ ...v, [field]: value }));\n if (field === 'email') setEmailAvailable(null);\n if (generalError) setGeneralError(null);\n };\n\n const onBlur = async (field: keyof CompanyUserModel | 'roleId', value?: any) => {\n // Update form data if value is provided (this preserves spaces and other characters)\n if (value !== undefined) {\n setValue(field, value);\n }\n \n setTouched((t) => ({ ...t, [field]: true }));\n \n // Use provided value or current state value for validation\n const valueToValidate = value !== undefined ? value : values[field];\n const err = validateField(field, valueToValidate);\n if (err) {\n setErrors((p) => ({ ...p, [field]: err }));\n } else {\n // Clear error if field is now valid\n setErrors((p) => {\n const newErrors = { ...p };\n delete newErrors[field];\n return newErrors;\n });\n }\n \n if (field === 'email') {\n const emailValue = value !== undefined ? value : (values.email || '');\n const trimmed = emailValue.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 submit = async () => {\n // Only validate required fields (USF-3012: jobTitle and telephone are now optional)\n const fields: (keyof CompanyUserModel | 'roleId')[] = ['firstName', 'lastName', 'email', 'roleId'];\n const next: Record<string, string> = {};\n for (const f of fields) {\n const err = validateField(f, values[f]);\n if (err) next[f as string] = err;\n }\n setErrors(next);\n setTouched({ firstName: true, lastName: true, email: true, roleId: true });\n if (Object.keys(next).length || emailAvailable === false) {\n // Scroll to the first error field\n setTimeout(() => {\n const firstErrorField = document.querySelector('.company-user-form__content .dropin-field__hint--error');\n if (firstErrorField) {\n const fieldContainer = firstErrorField.closest('.dropin-field');\n if (fieldContainer) {\n fieldContainer.scrollIntoView({ behavior: 'smooth', block: 'center' });\n const input = fieldContainer.querySelector('input, select') as HTMLElement;\n if (input) {\n input.focus();\n }\n }\n }\n }, 100);\n return;\n }\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, 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({ pageSize: 1000 })\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, 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} className=\"acm-structure-panel__field\" error={touched.jobTitle && errors.jobTitle ? errors.jobTitle : undefined}>\n <Input name=\"job_title\" type=\"text\" value={values.jobTitle || ''} onBlur={(e: Event) => { const target = e.target as HTMLInputElement; onBlur('jobTitle', target.value); }} 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 onBlur={(e: Event) => { const target = e.target as HTMLSelectElement; void onBlur('roleId', target.value === 'placeholder' ? '' : 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} onBlur={(e: Event) => { const target = e.target as HTMLInputElement; onBlur('firstName', target.value); }} 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} onBlur={(e: Event) => { const target = e.target as HTMLInputElement; onBlur('lastName', target.value); }} 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} onBlur={(e: Event) => { const target = e.target as HTMLInputElement; void onBlur('email', target.value); }} placeholder=\"jdoe@example.com\" variant=\"primary\" size=\"medium\" />\n </Field>\n\n <Field label={translations.workPhoneNumber} className=\"acm-structure-panel__field\" error={touched.telephone && errors.telephone ? errors.telephone : undefined}>\n <Input name=\"telephone\" type=\"text\" value={values.telephone || ''} onBlur={(e: Event) => { const target = e.target as HTMLInputElement; onBlur('telephone', target.value); }} 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={saving || !canEditUsers} 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","t","valueToValidate","err","p","newErrors","trimmed","available","isCompanyUserEmailAvailable","fields","next","f","firstErrorField","fieldContainer","input","label","effectiveStatus","isCompanyAdministrator","res","createCompanyUser","updateCompanyUser","error","errorMessage","useCompanyRoles","roles","setRoles","setError","isMounted","getCompanyRoles","items","CompanyUserForm","memo","permissions","onCancel","canEditUsers","rolesLoading","onBlur","submit","saving","setSaving","jsx","jsxs","Card","InLineAlert","ProgressSpinner","CompanyUserFormLoader","Field","Input","e","target","Picker","_b","r","Button"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{f as
|
|
3
|
+
import{f as s,i as e,g as h}from"./company-permissions.js";import{f as m,h as o,c as f}from"./network-error.js";const E=`
|
|
4
4
|
query GET_CUSTOMER_ROLE_PERMISSIONS {
|
|
5
5
|
customer {
|
|
6
6
|
role {
|
|
@@ -30,5 +30,5 @@ import{f as c,i as e,g as h}from"./company-permissions.js";import{f as m,h as o,
|
|
|
30
30
|
status
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
`;async function I(){return await m(E,{method:"GET",cache:"no-cache"}).then(t=>{var a,d
|
|
33
|
+
`;async function I(){return await m(E,{method:"GET",cache:"no-cache"}).then(t=>{var a,c,d;if((a=t.errors)!=null&&a.length)return o(t.errors);const r=(d=(c=t==null?void 0:t.data)==null?void 0:c.customer)==null?void 0:d.role,i=s((r==null?void 0:r.permissions)||[]);return e(r)&&h().forEach(n=>i.add(n)),{allowedIds:i,roleResponse:t}}).catch(f)}export{I as f};
|
|
34
34
|
//# sourceMappingURL=fetchUserPermissions.js.map
|
package/chunks/isCompanyUser.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{f as s,h as c
|
|
3
|
+
import{f as s,h as d,c as l}from"./network-error.js";import{t as g}from"./validateCompanyEmail.js";const m=`
|
|
4
4
|
query GET_ALLOW_COMPANY_REGISTRATION {
|
|
5
5
|
storeConfig {
|
|
6
6
|
allow_company_registration
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
|
-
`,
|
|
9
|
+
`,I=async()=>{var o,t,i;const e=await s(m,{method:"POST"});if((o=e==null?void 0:e.errors)!=null&&o.length)throw new Error(((t=e.errors[0])==null?void 0:t.message)||"Failed to load store configuration");const r=(i=e==null?void 0:e.data)==null?void 0:i.storeConfig;if(!r)throw new Error("Invalid response: missing storeConfig");return!!r.allow_company_registration},u=`
|
|
10
10
|
mutation CreateCompany($input: CompanyCreateInput!) {
|
|
11
11
|
createCompany(input: $input) {
|
|
12
12
|
company {
|
|
@@ -39,14 +39,14 @@ import{f as s,h as c,a as d}from"./network-error.js";import{a as l}from"./getCou
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
`,
|
|
42
|
+
`,_=e=>{var o,t,i;const r={};if(e.regionCode&&e.regionCode.trim())r.region_code=e.regionCode.trim(),e.regionId&&(r.region_id=typeof e.regionId=="string"?parseInt(e.regionId,10):e.regionId);else if(e.region&&typeof e.region=="string"&&e.region.includes(",")){const[n,c]=e.region.split(",");r.region_code=n.trim(),r.region_id=parseInt(c.trim(),10)}else if(e.region&&e.region.trim()){const n=e.region.trim();if(/^\d+$/.test(n))throw new Error("Region selection error: Missing region code. Please ensure regions are properly loaded.");r.region=n,r.region_code=n}if(!r.region_code)throw new Error("Region code is required. Please select a state/province or enter a region name.");return{company_name:e.companyName,company_email:e.companyEmail,legal_name:e.legalName,vat_tax_id:e.vatTaxId,reseller_id:e.resellerId,legal_address:{street:Array.isArray(e.street)?e.street.filter(n=>n&&n.trim()!==""):[e.street].filter(n=>n&&n.trim()!==""),city:e.city,region:r,postcode:e.postcode,country_id:e.countryCode,telephone:e.addressTelephone},company_admin:{email:e.adminEmail,firstname:((o=e.adminFirstname)==null?void 0:o.trim())||"",lastname:((t=e.adminLastname)==null?void 0:t.trim())||"",job_title:e.adminJobTitle,telephone:e.adminWorkTelephone,gender:e.adminGender?typeof e.adminGender=="string"?parseInt(e.adminGender,10):e.adminGender:void 0,custom_attributes:((i=e.adminCustomAttributes)==null?void 0:i.map(n=>({attribute_code:n.attribute_code,value:n.value})))||[]}}},O=async e=>{var r;try{const o=_(e),t=await s(u,{method:"POST",variables:{input:o}});return(r=t.errors)!=null&&r.length?{success:!1,errors:t.errors.map(n=>n.message)}:{success:!0,company:g(t)}}catch(o){return console.error("Failed to create company:",o),{success:!1,errors:["Failed to create company. Please try again."]}}},y=`
|
|
43
43
|
query getStoreConfig {
|
|
44
44
|
storeConfig {
|
|
45
45
|
default_country
|
|
46
46
|
store_code
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
-
`,
|
|
49
|
+
`,p="US",a={defaultCountry:p,storeCode:""},A=async()=>await s(y,{method:"GET"}).then(e=>{var r;return(r=e.errors)!=null&&r.length?d(e.errors):C(e)}).catch(l),C=e=>{var t;if(!((t=e==null?void 0:e.data)!=null&&t.storeConfig))return a;const{default_country:r,store_code:o}=e.data.storeConfig;return{defaultCountry:r||a.defaultCountry,storeCode:o||a.storeCode}},h=`
|
|
50
50
|
query GET_CUSTOMER_COMPANIES {
|
|
51
51
|
customer {
|
|
52
52
|
companies(input: {}) {
|
|
@@ -57,5 +57,5 @@ import{f as s,h as c,a as d}from"./network-error.js";import{a as l}from"./getCou
|
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
-
`,
|
|
60
|
+
`,S=async()=>{var e,r,o,t;try{const i=await s(h,{method:"POST"});if((e=i.errors)!=null&&e.length)return!1;const n=((t=(o=(r=i==null?void 0:i.data)==null?void 0:r.customer)==null?void 0:o.companies)==null?void 0:t.items)??[];return Array.isArray(n)&&n.length>0}catch{return!1}};export{p as D,a as S,I as a,O as c,A as g,S as i};
|
|
61
61
|
//# sourceMappingURL=isCompanyUser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isCompanyUser.js","sources":["/@dropins/storefront-company-management/src/api/allowCompanyRegistration/graphql/allowCompanyRegistration.graphql.ts","/@dropins/storefront-company-management/src/api/allowCompanyRegistration/allowCompanyRegistration.ts","/@dropins/storefront-company-management/src/api/createCompany/graphql/createCompany.graphql.ts","/@dropins/storefront-company-management/src/data/transforms/company.ts","/@dropins/storefront-company-management/src/api/createCompany/createCompany.ts","/@dropins/storefront-company-management/src/api/getStoreConfig/graphql/getStoreConfig.graphql.ts","/@dropins/storefront-company-management/src/api/getStoreConfig/getStoreConfig.ts","/@dropins/storefront-company-management/src/data/transforms/transform-store-config.ts","/@dropins/storefront-company-management/src/api/isCompanyUser/graphql/isCompanyUser.graphql.ts","/@dropins/storefront-company-management/src/api/isCompanyUser/isCompanyUser.ts"],"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\nexport const GET_ALLOW_COMPANY_REGISTRATION = /* GraphQL */ `\n query GET_ALLOW_COMPANY_REGISTRATION {\n storeConfig {\n allow_company_registration\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 { fetchGraphQl } from '../fetch-graphql';\nimport { GET_ALLOW_COMPANY_REGISTRATION } from './graphql/allowCompanyRegistration.graphql';\n\nexport const allowCompanyRegistration = async (): Promise<boolean> => { \n const response = await fetchGraphQl(GET_ALLOW_COMPANY_REGISTRATION, { method: 'POST' });\n\n if ((response as any)?.errors?.length) {\n throw new Error((response as any).errors[0]?.message || 'Failed to load store configuration');\n }\n\n const node = (response as any)?.data?.storeConfig;\n if (!node) {\n throw new Error('Invalid response: missing storeConfig');\n }\n\n // Backend guarantees that companyEnabled is true if allowCompanyRegistration is true\n return Boolean(node.allow_company_registration);\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\nexport const CREATE_COMPANY_MUTATION = /* GraphQL */ `\n mutation CreateCompany($input: CompanyCreateInput!) {\n createCompany(input: $input) {\n company {\n id\n name\n email\n legal_name\n vat_tax_id\n reseller_id\n legal_address {\n street\n city\n region {\n region_code\n region\n region_id\n }\n postcode\n country_code\n telephone\n }\n company_admin {\n id\n firstname\n lastname\n email\n job_title\n telephone\n }\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 { CompanyFormData } from '../models/company';\nimport { CompanyCreateInput } from '@/company-management/api/createCompany';\n\nexport const transformFormDataToCreateInput = (formData: CompanyFormData): CompanyCreateInput => {\n // Build region object - ensure we have at least one region field\n const regionInput: any = {};\n \n // Handle region data based on what we receive from the form\n if (formData.regionCode && formData.regionCode.trim()) {\n // We have regionCode (preferred path)\n regionInput.region_code = formData.regionCode.trim();\n if (formData.regionId) {\n regionInput.region_id = typeof formData.regionId === 'string' ? parseInt(formData.regionId, 10) : formData.regionId;\n }\n } else if (formData.region && typeof formData.region === 'string' && formData.region.includes(',')) {\n // Dropdown selection: parse \"AL,4\" format as fallback\n const [regionCode, regionId] = formData.region.split(',');\n regionInput.region_code = regionCode.trim();\n regionInput.region_id = parseInt(regionId.trim(), 10);\n } else if (formData.region && formData.region.trim()) {\n const regionValue = formData.region.trim();\n // Check if this is a numeric regionId (from dropdown) or text region name\n if (/^\\d+$/.test(regionValue)) {\n // This is likely a regionId from dropdown, but we only have the ID\n // We need both region_code and region_id for GraphQL, but we can't proceed without region_code\n throw new Error('Region selection error: Missing region code. Please ensure regions are properly loaded.');\n } else {\n // Text input: free-form region name (countries without predefined regions)\n regionInput.region = regionValue;\n regionInput.region_code = regionValue;\n }\n }\n \n // Ensure we have at least region_code (required by GraphQL)\n if (!regionInput.region_code) {\n throw new Error('Region code is required. Please select a state/province or enter a region name.');\n }\n\n return {\n company_name: formData.companyName,\n company_email: formData.companyEmail,\n legal_name: formData.legalName,\n vat_tax_id: formData.vatTaxId,\n reseller_id: formData.resellerId,\n legal_address: {\n street: Array.isArray(formData.street) \n ? formData.street.filter((line: string) => line && line.trim() !== '') // Remove empty lines\n : [formData.street].filter((line: string) => line && line.trim() !== ''), // Handle case where street is not an array\n city: formData.city,\n region: regionInput,\n postcode: formData.postcode,\n country_id: formData.countryCode,\n telephone: formData.addressTelephone,\n },\n company_admin: {\n email: formData.adminEmail,\n firstname: formData.adminFirstname,\n lastname: formData.adminLastname,\n job_title: formData.adminJobTitle,\n telephone: formData.adminWorkTelephone,\n gender: formData.adminGender ? (typeof formData.adminGender === 'string' ? parseInt(formData.adminGender, 10) : formData.adminGender) : undefined,\n custom_attributes: formData.adminCustomAttributes?.map(attr => ({\n attribute_code: attr.attribute_code,\n value: attr.value,\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 { fetchGraphQl } from '@/company-management/api/fetch-graphql';\nimport { CREATE_COMPANY_MUTATION } from './graphql/createCompany.graphql';\nimport { CompanyRegistrationModel } from '@/company-management/data/models/company';\nimport { transformFormDataToCreateInput } from '@/company-management/data/transforms/company';\nimport { transformCreateCompanyResponse } from '@/company-management/data/transforms/transform-company';\n\nexport interface CompanyCreateInput {\n company_name: string;\n company_email: string;\n legal_name?: string;\n vat_tax_id?: string;\n reseller_id?: string;\n legal_address: {\n street: string[];\n city: string;\n region: {\n region_code: string;\n region?: string;\n region_id?: number;\n };\n postcode: string;\n country_id: string;\n telephone?: string;\n };\n company_admin: {\n email: string;\n firstname: string;\n lastname: string;\n job_title?: string;\n telephone?: string;\n gender?: number;\n custom_attributes?: Array<{\n attribute_code: string;\n value: string;\n }>;\n };\n}\n\n\nexport const createCompany = async (formData: any): Promise<{ success: boolean; company?: CompanyRegistrationModel; errors?: string[] }> => {\n try {\n const input = transformFormDataToCreateInput(formData);\n const response = await fetchGraphQl(CREATE_COMPANY_MUTATION, {\n method: 'POST',\n variables: { input },\n });\n\n if (response.errors?.length) {\n return {\n success: false,\n errors: response.errors.map((error: any) => error.message),\n };\n }\n\n // Transform the GraphQL response using the dedicated transformer\n const transformedCompany = transformCreateCompanyResponse(response);\n\n return {\n success: true,\n company: transformedCompany,\n };\n } catch (error) {\n console.error('Failed to create company:', error);\n return {\n success: false,\n errors: ['Failed to create company. Please try again.'],\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\nexport const GET_STORE_CONFIG_QUERY = /* GraphQL */ `\n query getStoreConfig {\n storeConfig {\n default_country\n store_code\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 { fetchGraphQl } from '../fetch-graphql';\nimport { GET_STORE_CONFIG_QUERY } from './graphql/getStoreConfig.graphql';\nimport { handleNetworkError } from '@/company-management/lib/network-error';\nimport { handleFetchError } from '@/company-management/lib/fetch-error';\nimport { GetStoreConfigResponse, StoreConfigModel } from '@/company-management/types';\nimport { transformStoreConfig } from '@/company-management/data/transforms';\n\nexport const DEFAULT_COUNTRY = 'US';\n\nexport const STORE_CONFIG_DEFAULTS: StoreConfigModel = {\n defaultCountry: DEFAULT_COUNTRY,\n storeCode: '',\n};\n\nexport const getStoreConfig = async (): Promise<StoreConfigModel> => {\n return await fetchGraphQl(GET_STORE_CONFIG_QUERY, {\n method: 'GET',\n })\n .then((response: GetStoreConfigResponse) => {\n if (response.errors?.length) return handleFetchError(response.errors);\n\n return transformStoreConfig(response);\n })\n .catch(handleNetworkError);\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 { GetStoreConfigResponse, StoreConfigModel } from '@/company-management/types';\nimport { STORE_CONFIG_DEFAULTS } from '@/company-management/api/getStoreConfig/getStoreConfig';\n\nexport const transformStoreConfig = (\n response: GetStoreConfigResponse\n): StoreConfigModel => {\n if (!response?.data?.storeConfig) return STORE_CONFIG_DEFAULTS;\n\n const { default_country, store_code } = response.data.storeConfig;\n\n return {\n defaultCountry: default_country || STORE_CONFIG_DEFAULTS.defaultCountry,\n storeCode: store_code || STORE_CONFIG_DEFAULTS.storeCode,\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\nexport const GET_CUSTOMER_COMPANIES = /* GraphQL */ `\n query GET_CUSTOMER_COMPANIES {\n customer {\n companies(input: {}) {\n items {\n id\n name\n }\n }\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 { fetchGraphQl } from '../fetch-graphql';\nimport { GET_CUSTOMER_COMPANIES } from './graphql/isCompanyUser.graphql';\n\ninterface CompanyItem {\n id: string;\n name: string;\n}\n\ninterface CustomerCompaniesResponse {\n customer: {\n companies: {\n items: CompanyItem[];\n };\n } | null;\n}\n\n/**\n * Check if the current authenticated customer belongs to any company\n * @returns Promise<boolean> - true if customer belongs to one or more companies, false otherwise\n */\nexport const isCompanyUser = async (): Promise<boolean> => {\n try {\n const response = await fetchGraphQl<CustomerCompaniesResponse>(GET_CUSTOMER_COMPANIES, {\n method: 'POST',\n });\n\n if (response.errors?.length) {\n return false;\n }\n\n const companies = (response as any)?.data?.customer?.companies?.items ?? [];\n return Array.isArray(companies) && companies.length > 0;\n } catch (error) {\n return false;\n }\n};\n"],"names":["GET_ALLOW_COMPANY_REGISTRATION","allowCompanyRegistration","response","fetchGraphQl","_a","_b","node","_c","CREATE_COMPANY_MUTATION","transformFormDataToCreateInput","formData","regionInput","regionCode","regionId","regionValue","line","attr","createCompany","input","error","transformCreateCompanyResponse","GET_STORE_CONFIG_QUERY","DEFAULT_COUNTRY","STORE_CONFIG_DEFAULTS","getStoreConfig","handleFetchError","transformStoreConfig","handleNetworkError","default_country","store_code","GET_CUSTOMER_COMPANIES","isCompanyUser","companies","_d"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"isCompanyUser.js","sources":["/@dropins/storefront-company-management/src/api/allowCompanyRegistration/graphql/allowCompanyRegistration.graphql.ts","/@dropins/storefront-company-management/src/api/allowCompanyRegistration/allowCompanyRegistration.ts","/@dropins/storefront-company-management/src/api/createCompany/graphql/createCompany.graphql.ts","/@dropins/storefront-company-management/src/data/transforms/company.ts","/@dropins/storefront-company-management/src/api/createCompany/createCompany.ts","/@dropins/storefront-company-management/src/api/getStoreConfig/graphql/getStoreConfig.graphql.ts","/@dropins/storefront-company-management/src/api/getStoreConfig/getStoreConfig.ts","/@dropins/storefront-company-management/src/data/transforms/transform-store-config.ts","/@dropins/storefront-company-management/src/api/isCompanyUser/graphql/isCompanyUser.graphql.ts","/@dropins/storefront-company-management/src/api/isCompanyUser/isCompanyUser.ts"],"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\nexport const GET_ALLOW_COMPANY_REGISTRATION = /* GraphQL */ `\n query GET_ALLOW_COMPANY_REGISTRATION {\n storeConfig {\n allow_company_registration\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 { fetchGraphQl } from '../fetch-graphql';\nimport { GET_ALLOW_COMPANY_REGISTRATION } from './graphql/allowCompanyRegistration.graphql';\n\nexport const allowCompanyRegistration = async (): Promise<boolean> => { \n const response = await fetchGraphQl(GET_ALLOW_COMPANY_REGISTRATION, { method: 'POST' });\n\n if ((response as any)?.errors?.length) {\n throw new Error((response as any).errors[0]?.message || 'Failed to load store configuration');\n }\n\n const node = (response as any)?.data?.storeConfig;\n if (!node) {\n throw new Error('Invalid response: missing storeConfig');\n }\n\n // Backend guarantees that companyEnabled is true if allowCompanyRegistration is true\n return Boolean(node.allow_company_registration);\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\nexport const CREATE_COMPANY_MUTATION = /* GraphQL */ `\n mutation CreateCompany($input: CompanyCreateInput!) {\n createCompany(input: $input) {\n company {\n id\n name\n email\n legal_name\n vat_tax_id\n reseller_id\n legal_address {\n street\n city\n region {\n region_code\n region\n region_id\n }\n postcode\n country_code\n telephone\n }\n company_admin {\n id\n firstname\n lastname\n email\n job_title\n telephone\n }\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 { CompanyFormData } from '../models/company';\nimport { CompanyCreateInput } from '@/company-management/api/createCompany';\n\nexport const transformFormDataToCreateInput = (formData: CompanyFormData): CompanyCreateInput => {\n // Build region object - ensure we have at least one region field\n const regionInput: any = {};\n \n // Handle region data based on what we receive from the form\n if (formData.regionCode && formData.regionCode.trim()) {\n // We have regionCode (preferred path)\n regionInput.region_code = formData.regionCode.trim();\n if (formData.regionId) {\n regionInput.region_id = typeof formData.regionId === 'string' ? parseInt(formData.regionId, 10) : formData.regionId;\n }\n } else if (formData.region && typeof formData.region === 'string' && formData.region.includes(',')) {\n // Dropdown selection: parse \"AL,4\" format as fallback\n const [regionCode, regionId] = formData.region.split(',');\n regionInput.region_code = regionCode.trim();\n regionInput.region_id = parseInt(regionId.trim(), 10);\n } else if (formData.region && formData.region.trim()) {\n const regionValue = formData.region.trim();\n // Check if this is a numeric regionId (from dropdown) or text region name\n if (/^\\d+$/.test(regionValue)) {\n // This is likely a regionId from dropdown, but we only have the ID\n // We need both region_code and region_id for GraphQL, but we can't proceed without region_code\n throw new Error('Region selection error: Missing region code. Please ensure regions are properly loaded.');\n } else {\n // Text input: free-form region name (countries without predefined regions)\n regionInput.region = regionValue;\n regionInput.region_code = regionValue;\n }\n }\n \n // Ensure we have at least region_code (required by GraphQL)\n if (!regionInput.region_code) {\n throw new Error('Region code is required. Please select a state/province or enter a region name.');\n }\n\n return {\n company_name: formData.companyName,\n company_email: formData.companyEmail,\n legal_name: formData.legalName,\n vat_tax_id: formData.vatTaxId,\n reseller_id: formData.resellerId,\n legal_address: {\n street: Array.isArray(formData.street) \n ? formData.street.filter((line: string) => line && line.trim() !== '') // Remove empty lines\n : [formData.street].filter((line: string) => line && line.trim() !== ''), // Handle case where street is not an array\n city: formData.city,\n region: regionInput,\n postcode: formData.postcode,\n country_id: formData.countryCode,\n telephone: formData.addressTelephone,\n },\n company_admin: {\n email: formData.adminEmail,\n firstname: formData.adminFirstname?.trim() || '',\n lastname: formData.adminLastname?.trim() || '',\n job_title: formData.adminJobTitle,\n telephone: formData.adminWorkTelephone,\n gender: formData.adminGender ? (typeof formData.adminGender === 'string' ? parseInt(formData.adminGender, 10) : formData.adminGender) : undefined,\n custom_attributes: formData.adminCustomAttributes?.map(attr => ({\n attribute_code: attr.attribute_code,\n value: attr.value,\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 { fetchGraphQl } from '@/company-management/api/fetch-graphql';\nimport { CREATE_COMPANY_MUTATION } from './graphql/createCompany.graphql';\nimport { CompanyRegistrationModel } from '@/company-management/data/models/company';\nimport { transformFormDataToCreateInput } from '@/company-management/data/transforms/company';\nimport { transformCreateCompanyResponse } from '@/company-management/data/transforms/transform-company';\n\nexport interface CompanyCreateInput {\n company_name: string;\n company_email: string;\n legal_name?: string;\n vat_tax_id?: string;\n reseller_id?: string;\n legal_address: {\n street: string[];\n city: string;\n region: {\n region_code: string;\n region?: string;\n region_id?: number;\n };\n postcode: string;\n country_id: string;\n telephone?: string;\n };\n company_admin: {\n email: string;\n firstname: string;\n lastname: string;\n job_title?: string;\n telephone?: string;\n gender?: number;\n custom_attributes?: Array<{\n attribute_code: string;\n value: string;\n }>;\n };\n}\n\n\nexport const createCompany = async (formData: any): Promise<{ success: boolean; company?: CompanyRegistrationModel; errors?: string[] }> => {\n try {\n const input = transformFormDataToCreateInput(formData);\n const response = await fetchGraphQl(CREATE_COMPANY_MUTATION, {\n method: 'POST',\n variables: { input },\n });\n\n if (response.errors?.length) {\n return {\n success: false,\n errors: response.errors.map((error: any) => error.message),\n };\n }\n\n // Transform the GraphQL response using the dedicated transformer\n const transformedCompany = transformCreateCompanyResponse(response);\n\n return {\n success: true,\n company: transformedCompany,\n };\n } catch (error) {\n console.error('Failed to create company:', error);\n return {\n success: false,\n errors: ['Failed to create company. Please try again.'],\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\nexport const GET_STORE_CONFIG_QUERY = /* GraphQL */ `\n query getStoreConfig {\n storeConfig {\n default_country\n store_code\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 { fetchGraphQl } from '../fetch-graphql';\nimport { GET_STORE_CONFIG_QUERY } from './graphql/getStoreConfig.graphql';\nimport { handleNetworkError } from '@/company-management/lib/network-error';\nimport { handleFetchError } from '@/company-management/lib/fetch-error';\nimport { GetStoreConfigResponse, StoreConfigModel } from '@/company-management/types';\nimport { transformStoreConfig } from '@/company-management/data/transforms';\n\nexport const DEFAULT_COUNTRY = 'US';\n\nexport const STORE_CONFIG_DEFAULTS: StoreConfigModel = {\n defaultCountry: DEFAULT_COUNTRY,\n storeCode: '',\n};\n\nexport const getStoreConfig = async (): Promise<StoreConfigModel> => {\n return await fetchGraphQl(GET_STORE_CONFIG_QUERY, {\n method: 'GET',\n })\n .then((response: GetStoreConfigResponse) => {\n if (response.errors?.length) return handleFetchError(response.errors);\n\n return transformStoreConfig(response);\n })\n .catch(handleNetworkError);\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 { GetStoreConfigResponse, StoreConfigModel } from '@/company-management/types';\nimport { STORE_CONFIG_DEFAULTS } from '@/company-management/api/getStoreConfig/getStoreConfig';\n\nexport const transformStoreConfig = (\n response: GetStoreConfigResponse\n): StoreConfigModel => {\n if (!response?.data?.storeConfig) return STORE_CONFIG_DEFAULTS;\n\n const { default_country, store_code } = response.data.storeConfig;\n\n return {\n defaultCountry: default_country || STORE_CONFIG_DEFAULTS.defaultCountry,\n storeCode: store_code || STORE_CONFIG_DEFAULTS.storeCode,\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\nexport const GET_CUSTOMER_COMPANIES = /* GraphQL */ `\n query GET_CUSTOMER_COMPANIES {\n customer {\n companies(input: {}) {\n items {\n id\n name\n }\n }\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 { fetchGraphQl } from '../fetch-graphql';\nimport { GET_CUSTOMER_COMPANIES } from './graphql/isCompanyUser.graphql';\n\ninterface CompanyItem {\n id: string;\n name: string;\n}\n\ninterface CustomerCompaniesResponse {\n customer: {\n companies: {\n items: CompanyItem[];\n };\n } | null;\n}\n\n/**\n * Check if the current authenticated customer belongs to any company\n * @returns Promise<boolean> - true if customer belongs to one or more companies, false otherwise\n */\nexport const isCompanyUser = async (): Promise<boolean> => {\n try {\n const response = await fetchGraphQl<CustomerCompaniesResponse>(GET_CUSTOMER_COMPANIES, {\n method: 'POST',\n });\n\n if (response.errors?.length) {\n return false;\n }\n\n const companies = (response as any)?.data?.customer?.companies?.items ?? [];\n return Array.isArray(companies) && companies.length > 0;\n } catch (error) {\n return false;\n }\n};\n"],"names":["GET_ALLOW_COMPANY_REGISTRATION","allowCompanyRegistration","response","fetchGraphQl","_a","_b","node","_c","CREATE_COMPANY_MUTATION","transformFormDataToCreateInput","formData","regionInput","regionCode","regionId","regionValue","line","attr","createCompany","input","error","transformCreateCompanyResponse","GET_STORE_CONFIG_QUERY","DEFAULT_COUNTRY","STORE_CONFIG_DEFAULTS","getStoreConfig","handleFetchError","transformStoreConfig","handleNetworkError","default_country","store_code","GET_CUSTOMER_COMPANIES","isCompanyUser","companies","_d"],"mappings":"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"}
|
package/chunks/network-error.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{FetchGraphQL as o}from"@dropins/tools/fetch-graphql.js";import{events as s}from"@dropins/tools/event-bus.js";const{setEndpoint:h,setFetchGraphQlHeader:c,removeFetchGraphQlHeader:p,setFetchGraphQlHeaders:i,fetchGraphQl:m,getConfig:E}=new o().getMethods(),d=r=>{const e=r.map(t=>t.message).join(" ");throw Error(e)},f=r=>{throw r instanceof DOMException&&r.name==="AbortError"||s.emit("error",{source:"company",type:"network",error:r}),r};export{
|
|
3
|
+
import{FetchGraphQL as o}from"@dropins/tools/fetch-graphql.js";import{events as s}from"@dropins/tools/event-bus.js";const{setEndpoint:h,setFetchGraphQlHeader:c,removeFetchGraphQlHeader:p,setFetchGraphQlHeaders:i,fetchGraphQl:m,getConfig:E}=new o().getMethods(),d=r=>{const e=r.map(t=>t.message).join(" ");throw Error(e)},f=r=>{throw r instanceof DOMException&&r.name==="AbortError"||s.emit("error",{source:"company",type:"network",error:r}),r};export{c as a,i as b,f as c,m as f,E as g,d as h,p as r,h as s};
|
|
4
4
|
//# sourceMappingURL=network-error.js.map
|
package/chunks/updateCompany.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{f as _}from"./fetchUserPermissions.js";import{f as m,h as A,
|
|
3
|
+
import{f as _}from"./fetchUserPermissions.js";import{f as m,h as A,c}from"./network-error.js";import{a as C}from"./validateCompanyEmail.js";const f=`
|
|
4
4
|
fragment COMPANY_LEGAL_ADDRESS_FRAGMENT on CompanyLegalAddress {
|
|
5
5
|
street
|
|
6
6
|
city
|