@dropins/storefront-company-management 1.0.0-beta2 → 1.0.0-beta21
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/allowCompanyRegistration/allowCompanyRegistration.d.ts +18 -0
- package/api/allowCompanyRegistration/graphql/allowCompanyRegistration.graphql.d.ts +18 -0
- package/api/allowCompanyRegistration/index.d.ts +18 -0
- package/api/checkCompanyCreditEnabled/checkCompanyCreditEnabled.d.ts +4 -0
- package/api/checkCompanyCreditEnabled/graphql/checkCompanyCreditEnabled.graphql.d.ts +18 -0
- package/api/checkCompanyCreditEnabled/index.d.ts +18 -0
- package/api/companyEnabled/companyEnabled.d.ts +18 -0
- package/api/companyEnabled/graphql/companyEnabled.graphql.d.ts +18 -0
- package/api/{checkIsCompanyEnabled → companyEnabled}/index.d.ts +1 -1
- package/api/companyRoles/createCompanyRole.d.ts +7 -0
- package/api/companyRoles/deleteCompanyRole.d.ts +7 -0
- package/api/companyRoles/getCompanyAclResources.d.ts +7 -0
- package/api/companyRoles/getCompanyRole.d.ts +8 -0
- package/api/companyRoles/getCompanyRoles.d.ts +8 -0
- package/api/companyRoles/graphql/fragments.d.ts +18 -0
- package/api/companyRoles/graphql/index.d.ts +20 -0
- package/api/companyRoles/graphql/mutations.d.ts +20 -0
- package/api/companyRoles/graphql/queries.d.ts +21 -0
- package/api/companyRoles/index.d.ts +27 -0
- package/api/companyRoles/isCompanyRoleNameAvailable.d.ts +7 -0
- package/api/companyRoles/updateCompanyRole.d.ts +7 -0
- package/api/companyRoles/utils.d.ts +11 -0
- package/api/createCompany/createCompany.d.ts +39 -0
- package/api/createCompany/graphql/createCompany.graphql.d.ts +18 -0
- package/api/createCompany/index.d.ts +18 -0
- package/api/createCompanyTeam/createCompanyTeam.d.ts +11 -0
- package/api/createCompanyTeam/graphql/createCompanyTeam.graphql.d.ts +18 -0
- package/api/createCompanyTeam/index.d.ts +18 -0
- package/api/createCompanyUser/createCompanyUser.d.ts +9 -0
- package/api/createCompanyUser/graphql/createCompanyUser.graphql.d.ts +18 -0
- package/api/createCompanyUser/index.d.ts +18 -0
- package/api/deleteCompanyTeam/deleteCompanyTeam.d.ts +9 -0
- package/api/deleteCompanyTeam/graphql/deleteCompanyTeam.graphql.d.ts +18 -0
- package/api/deleteCompanyTeam/index.d.ts +18 -0
- package/api/deleteCompanyUser/deleteCompanyUser.d.ts +10 -0
- package/api/deleteCompanyUser/graphql/deleteCompanyUser.graphql.d.ts +18 -0
- package/api/deleteCompanyUser/index.d.ts +18 -0
- package/api/fetchUserPermissions/fetchUserPermissions.d.ts +11 -0
- package/api/{getCompany → fetchUserPermissions}/graphql/getCustomerRole.graphql.d.ts +1 -1
- package/api/fetchUserPermissions/index.d.ts +18 -0
- package/api/getCompany/getCompany.d.ts +9 -3
- package/api/getCompanyCredit/getCompanyCredit.d.ts +4 -0
- package/api/getCompanyCredit/graphql/getCompanyCredit.graphql.d.ts +18 -0
- package/api/getCompanyCredit/index.d.ts +18 -0
- package/api/getCompanyCreditHistory/getCompanyCreditHistory.d.ts +5 -0
- package/api/getCompanyCreditHistory/graphql/getCompanyCreditHistory.graphql.d.ts +18 -0
- package/api/getCompanyCreditHistory/index.d.ts +19 -0
- package/api/getCompanyStructure/getCompanyStructure.d.ts +10 -0
- package/api/getCompanyStructure/graphql/getCompanyStructure.graphql.d.ts +18 -0
- package/api/getCompanyStructure/index.d.ts +18 -0
- package/api/getCompanyTeam/getCompanyTeam.d.ts +11 -0
- package/api/getCompanyTeam/graphql/getCompanyTeam.graphql.d.ts +18 -0
- package/api/getCompanyTeam/index.d.ts +18 -0
- package/api/getCompanyUser/getCompanyUser.d.ts +9 -0
- package/api/getCompanyUser/graphql/getCompanyUser.graphql.d.ts +18 -0
- package/api/getCompanyUser/index.d.ts +18 -0
- package/api/getCompanyUsers/getCompanyUsers.d.ts +12 -0
- package/api/getCompanyUsers/graphql/companyUsers.graphql.d.ts +18 -0
- package/api/getCompanyUsers/index.d.ts +18 -0
- package/api/getCustomerCompany/getCustomerCompany.d.ts +12 -0
- package/api/getCustomerCompany/graphql/getCustomerCompanyInfo.graphql.d.ts +18 -0
- package/api/getCustomerCompany/index.d.ts +18 -0
- package/api/getStoreConfig/getStoreConfig.d.ts +6 -0
- package/api/getStoreConfig/graphql/getStoreConfig.graphql.d.ts +18 -0
- package/api/getStoreConfig/index.d.ts +18 -0
- package/api/graphql/buildCompanyQueries.d.ts +9 -0
- package/api/index.d.ts +26 -2
- package/api/initialize/initialize.d.ts +2 -20
- package/api/isCompanyAdmin/graphql/isCompanyAdmin.graphql.d.ts +18 -0
- package/api/isCompanyAdmin/index.d.ts +18 -0
- package/api/isCompanyAdmin/isCompanyAdmin.d.ts +22 -0
- package/api/isCompanyUser/graphql/isCompanyUser.graphql.d.ts +18 -0
- package/api/isCompanyUser/index.d.ts +18 -0
- package/api/isCompanyUser/isCompanyUser.d.ts +22 -0
- package/api/isCompanyUserEmailAvailable/graphql/isCompanyUserEmailAvailable.graphql.d.ts +18 -0
- package/api/isCompanyUserEmailAvailable/index.d.ts +18 -0
- package/api/isCompanyUserEmailAvailable/isCompanyUserEmailAvailable.d.ts +7 -0
- package/api/updateCompanyStructure/graphql/updateCompanyStructure.graphql.d.ts +18 -0
- package/api/updateCompanyStructure/index.d.ts +18 -0
- package/api/updateCompanyStructure/updateCompanyStructure.d.ts +11 -0
- package/api/updateCompanyTeam/graphql/updateCompanyTeam.graphql.d.ts +18 -0
- package/api/updateCompanyTeam/index.d.ts +18 -0
- package/api/updateCompanyTeam/updateCompanyTeam.d.ts +11 -0
- package/api/updateCompanyUser/graphql/updateCompanyUser.graphql.d.ts +18 -0
- package/api/updateCompanyUser/index.d.ts +18 -0
- package/api/updateCompanyUser/updateCompanyUser.d.ts +9 -0
- package/api/updateCompanyUserStatus/graphql/updateCompanyUserStatus.graphql.d.ts +18 -0
- package/api/updateCompanyUserStatus/index.d.ts +18 -0
- package/api/updateCompanyUserStatus/updateCompanyUserStatus.d.ts +11 -0
- package/api.js +22 -1
- package/api.js.map +1 -1
- package/chunks/CompanyLoaders.js +4 -0
- package/chunks/CompanyLoaders.js.map +1 -0
- package/chunks/CompanyUserForm.js +4 -0
- package/chunks/CompanyUserForm.js.map +1 -0
- package/chunks/Tree.js +4 -0
- package/chunks/Tree.js.map +1 -0
- package/chunks/acdl.js +4 -0
- package/chunks/acdl.js.map +1 -0
- package/chunks/company-permissions.js +4 -0
- package/chunks/company-permissions.js.map +1 -0
- package/chunks/fetch-error.js +4 -0
- package/chunks/fetch-error.js.map +1 -0
- package/chunks/fetchUserPermissions.js +34 -0
- package/chunks/fetchUserPermissions.js.map +1 -0
- package/chunks/getCompanyCreditHistory.js +68 -0
- package/chunks/getCompanyCreditHistory.js.map +1 -0
- package/chunks/getCustomerCompany.js +26 -0
- package/chunks/getCustomerCompany.js.map +1 -0
- package/chunks/isCompanyRoleNameAvailable.js +121 -0
- package/chunks/isCompanyRoleNameAvailable.js.map +1 -0
- package/chunks/isCompanyUser.js +21 -0
- package/chunks/isCompanyUser.js.map +1 -0
- package/chunks/network-error.js +4 -0
- package/chunks/network-error.js.map +1 -0
- package/chunks/transform-store-config.js +44 -0
- package/chunks/transform-store-config.js.map +1 -0
- package/chunks/updateCompany.js +70 -0
- package/chunks/updateCompany.js.map +1 -0
- package/chunks/updateCompanyTeam.js +42 -0
- package/chunks/updateCompanyTeam.js.map +1 -0
- package/chunks/updateCompanyUser.js +37 -0
- package/chunks/updateCompanyUser.js.map +1 -0
- package/chunks/updateCompanyUserStatus.js +39 -0
- package/chunks/updateCompanyUserStatus.js.map +1 -0
- package/chunks/useCompanyContextListener.js +4 -0
- package/chunks/useCompanyContextListener.js.map +1 -0
- package/chunks/useCompanyRoles.js +4 -0
- package/chunks/useCompanyRoles.js.map +1 -0
- package/chunks/useCustomerCompanyInfo.js +4 -0
- package/chunks/useCustomerCompanyInfo.js.map +1 -0
- package/chunks/useInLineAlert.js +4 -0
- package/chunks/useInLineAlert.js.map +1 -0
- package/chunks/useUserPermissions.js +4 -0
- package/chunks/useUserPermissions.js.map +1 -0
- package/chunks/validateCompanyEmail.js +29 -0
- package/chunks/validateCompanyEmail.js.map +1 -0
- package/components/CompanyCreditDisplay/CompanyCreditDisplay.d.ts +7 -0
- package/components/CompanyCreditDisplay/index.d.ts +19 -0
- package/components/CompanyCreditHistoryDisplay/CompanyCreditHistoryDisplay.d.ts +15 -0
- package/components/CompanyCreditHistoryDisplay/index.d.ts +19 -0
- package/components/CompanyLoaders/CompanyLoaders.d.ts +14 -0
- package/components/CompanyRegistrationForm/CompanyRegistrationForm.d.ts +13 -0
- package/components/CompanyRegistrationForm/Form/Form.d.ts +5 -0
- package/components/CompanyRegistrationForm/Form/FormInputs/FormInputs.d.ts +5 -0
- package/components/CompanyRegistrationForm/Form/FormInputs/index.d.ts +18 -0
- package/components/CompanyRegistrationForm/Form/fieldHandlers.d.ts +26 -0
- package/components/CompanyRegistrationForm/Form/fieldValidationRules.d.ts +63 -0
- package/components/CompanyRegistrationForm/Form/formValidation.d.ts +17 -0
- package/components/CompanyRegistrationForm/Form/getCompanyFieldsConfig.d.ts +13 -0
- package/components/CompanyRegistrationForm/Form/index.d.ts +18 -0
- package/components/CompanyRegistrationForm/index.d.ts +20 -0
- package/components/CompanyRegistrationSuccess/CompanyRegistrationSuccess.d.ts +8 -0
- package/components/CompanyRegistrationSuccess/index.d.ts +18 -0
- package/components/CompanyStructureCard/CompanyStructureCard.d.ts +12 -0
- package/components/CompanyStructureCard/index.d.ts +18 -0
- package/components/CompanyStructureEmpty/CompanyStructureEmpty.d.ts +9 -0
- package/components/CompanyStructureEmpty/index.d.ts +19 -0
- package/components/CompanyTeamForm/CompanyTeamForm.d.ts +17 -0
- package/components/CompanyTeamForm/index.d.ts +18 -0
- package/components/CompanyUserForm/CompanyUserForm.d.ts +10 -0
- package/components/CompanyUserForm/index.d.ts +18 -0
- package/components/CompanyUsersFilters/CompanyUsersFilters.d.ts +29 -0
- package/components/CompanyUsersFilters/index.d.ts +18 -0
- package/components/CompanyUsersManagementModal/CompanyUsersManagementModal.d.ts +18 -0
- package/components/CompanyUsersManagementModal/index.d.ts +19 -0
- package/components/CustomerCompanyInfoCard/CustomerCompanyInfoCard.d.ts +9 -0
- package/components/CustomerCompanyInfoCard/index.d.ts +18 -0
- package/components/DeleteRoleModal/DeleteRoleModal.d.ts +9 -0
- package/components/DeleteRoleModal/index.d.ts +19 -0
- package/components/EditCompanyProfile/CompanyAccountFields.d.ts +1 -2
- package/components/EditCompanyProfile/LegalAddressFields.d.ts +1 -1
- package/components/EditRoleAndPermission/EditRoleAndPermission.d.ts +24 -0
- package/components/EditRoleAndPermission/index.d.ts +19 -0
- package/components/RoleAndPermissionTable/RoleAndPermissionTable.d.ts +23 -0
- package/components/RoleAndPermissionTable/index.d.ts +19 -0
- package/components/Tree/Tree.d.ts +62 -0
- package/components/Tree/index.d.ts +18 -0
- package/components/index.d.ts +15 -0
- package/containers/CompanyCredit/CompanyCredit.d.ts +16 -0
- package/containers/CompanyCredit/index.d.ts +19 -0
- package/containers/CompanyCredit.d.ts +3 -0
- package/containers/CompanyCredit.js +4 -0
- package/containers/CompanyCredit.js.map +1 -0
- package/containers/CompanyProfile.js +1 -1
- package/containers/CompanyProfile.js.map +1 -1
- package/containers/CompanyRegistration/CompanyRegistration.d.ts +15 -0
- package/containers/CompanyRegistration/index.d.ts +19 -0
- package/containers/CompanyRegistration.d.ts +3 -0
- package/containers/CompanyRegistration.js +4 -0
- package/containers/CompanyRegistration.js.map +1 -0
- package/containers/CompanyStructure/CompanyStructure.d.ts +5 -0
- package/containers/CompanyStructure/index.d.ts +19 -0
- package/containers/CompanyStructure.d.ts +3 -0
- package/containers/CompanyStructure.js +4 -0
- package/containers/CompanyStructure.js.map +1 -0
- package/containers/CompanyUsers/CompanyUsers.d.ts +7 -0
- package/containers/CompanyUsers/index.d.ts +19 -0
- package/containers/CompanyUsers.d.ts +3 -0
- package/containers/CompanyUsers.js +4 -0
- package/containers/CompanyUsers.js.map +1 -0
- package/containers/CustomerCompanyInfo/CustomerCompanyInfo.d.ts +9 -0
- package/containers/CustomerCompanyInfo/index.d.ts +19 -0
- package/containers/CustomerCompanyInfo.d.ts +1 -0
- package/containers/CustomerCompanyInfo.js +4 -0
- package/containers/CustomerCompanyInfo.js.map +1 -0
- package/containers/RolesAndPermissions/RolesAndPermissions.d.ts +8 -0
- package/containers/RolesAndPermissions/index.d.ts +19 -0
- package/containers/RolesAndPermissions.d.ts +3 -0
- package/containers/RolesAndPermissions.js +4 -0
- package/containers/RolesAndPermissions.js.map +1 -0
- package/containers/index.d.ts +7 -0
- package/data/models/company-credit-history.d.ts +54 -0
- package/data/models/company-credit-info.d.ts +33 -0
- package/data/models/company-role.d.ts +48 -0
- package/data/models/company-structure.d.ts +26 -0
- package/data/models/company-team.d.ts +24 -0
- package/data/models/company-user.d.ts +33 -0
- package/data/models/company.d.ts +58 -17
- package/data/models/customer-company-info.d.ts +23 -0
- package/data/models/index.d.ts +7 -0
- package/data/transforms/company.d.ts +5 -0
- package/data/transforms/index.d.ts +8 -0
- package/data/transforms/transform-company-credit-history.d.ts +5 -0
- package/data/transforms/transform-company-credit.d.ts +5 -0
- package/data/transforms/transform-company-roles.d.ts +15 -0
- package/data/transforms/transform-company-structure.d.ts +22 -0
- package/data/transforms/transform-company-team.d.ts +10 -0
- package/data/transforms/transform-company-user.d.ts +18 -0
- package/data/transforms/transform-company.d.ts +5 -1
- package/data/transforms/transform-customer-company-info.d.ts +10 -0
- package/data/transforms/transform-store-config.d.ts +4 -0
- package/hooks/containers/index.d.ts +3 -0
- package/hooks/containers/useCompanyCreditHistory.d.ts +32 -0
- package/hooks/containers/useCompanyProfile.d.ts +2 -8
- package/hooks/containers/useCompanyUsers.d.ts +34 -0
- package/hooks/containers/useCustomerCompanyInfo.d.ts +12 -0
- package/hooks/index.d.ts +9 -0
- package/hooks/useCompanyContextListener.d.ts +62 -0
- package/hooks/useCompanyRegistrationForm.d.ts +37 -0
- package/hooks/useCompanyRoles.d.ts +28 -0
- package/hooks/useCompanyStructureCard.d.ts +36 -0
- package/hooks/useCompanyTeamForm.d.ts +30 -0
- package/hooks/useCompanyUserForm.d.ts +37 -0
- package/hooks/useCountryAndRegionFields.d.ts +20 -0
- package/hooks/useModal.d.ts +24 -0
- package/hooks/usePermissions.d.ts +31 -0
- package/hooks/useUserPermissions.d.ts +26 -0
- package/i18n/en_US.json.d.ts +345 -4
- package/lib/acdl.d.ts +2 -1
- package/lib/company-permissions.d.ts +25 -0
- package/lib/encoding.d.ts +43 -0
- package/lib/fetch-error.d.ts +6 -1
- package/lib/index.d.ts +3 -0
- package/lib/network-error.d.ts +4 -0
- package/lib/userHelpers.d.ts +47 -0
- package/lib/validationFields.d.ts +16 -0
- package/package.json +1 -1
- package/render.js +12 -2
- package/render.js.map +1 -1
- package/types/api/{checkIsCompanyEnabled.types.d.ts → checkCompanyCreditEnabled.types.d.ts} +3 -3
- package/types/api/companyRoles.types.d.ts +137 -0
- package/types/api/companyUsers.types.d.ts +70 -0
- package/types/api/createCompanyTeam.types.d.ts +27 -0
- package/types/api/createCompanyUser.types.d.ts +31 -0
- package/types/api/deleteCompanyTeam.types.d.ts +20 -0
- package/types/api/deleteCompanyUser.types.d.ts +28 -0
- package/types/api/fetchUserPermissions.types.d.ts +43 -0
- package/types/api/getCompany.types.d.ts +1 -1
- package/types/api/getCompanyCredit.types.d.ts +40 -0
- package/types/api/getCompanyCreditHistory.types.d.ts +61 -0
- package/types/api/getCompanyCreditHistoryParams.types.d.ts +53 -0
- package/types/api/getCompanyStructure.types.d.ts +33 -0
- package/types/api/getCompanyTeam.types.d.ts +20 -0
- package/types/api/getCompanyUser.types.d.ts +20 -0
- package/types/api/getCustomerCompanyInfo.types.d.ts +40 -0
- package/types/api/getStoreConfig.types.d.ts +33 -0
- package/types/api/index.d.ts +29 -0
- package/types/api/initialize.types.d.ts +21 -0
- package/types/api/isCompanyUserEmailAvailable.types.d.ts +20 -0
- package/types/api/updateCompany.types.d.ts +1 -1
- package/types/api/updateCompanyStructure.types.d.ts +21 -0
- package/types/api/updateCompanyTeam.types.d.ts +22 -0
- package/types/api/updateCompanyUser.types.d.ts +27 -0
- package/types/api/updateCompanyUserStatus.types.d.ts +22 -0
- package/types/companyForm.types.d.ts +33 -0
- package/types/companyPermission.types.d.ts +33 -0
- package/types/companyProfile.types.d.ts +43 -0
- package/types/companyStructure.types.d.ts +28 -0
- package/types/customerCompanyInfo.types.d.ts +11 -0
- package/types/events.d.ts +21 -0
- package/types/form.types.d.ts +93 -0
- package/types/hook.types.d.ts +18 -0
- package/types/index.d.ts +25 -2
- package/api/checkIsCompanyEnabled/checkIsCompanyEnabled.d.ts +0 -4
- package/api/updateCompany/graphql/updateCompany.graphql.d.ts +0 -2
- package/chunks/getCountries.js +0 -135
- package/chunks/getCountries.js.map +0 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/********************************************************************
|
|
2
|
+
* ADOBE CONFIDENTIAL
|
|
3
|
+
* __________________
|
|
4
|
+
*
|
|
5
|
+
* Copyright 2025 Adobe
|
|
6
|
+
* All Rights Reserved.
|
|
7
|
+
*
|
|
8
|
+
* NOTICE: All information contained herein is, and remains
|
|
9
|
+
* the property of Adobe and its suppliers, if any. The intellectual
|
|
10
|
+
* and technical concepts contained herein are proprietary to Adobe
|
|
11
|
+
* and its suppliers and are protected by all applicable intellectual
|
|
12
|
+
* property laws, including trade secret and copyright laws.
|
|
13
|
+
* Dissemination of this information or reproduction of this material
|
|
14
|
+
* is strictly forbidden unless prior written permission is obtained
|
|
15
|
+
* from Adobe.
|
|
16
|
+
*******************************************************************/
|
|
17
|
+
export * from './CompanyRegistration';
|
|
18
|
+
export { CompanyRegistration as default } from './CompanyRegistration';
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/*! Copyright 2025 Adobe
|
|
2
|
+
All Rights Reserved. */
|
|
3
|
+
import{jsxs as C,jsx as p,Fragment as W}from"@dropins/tools/preact-jsx-runtime.js";import{useRef as K,useState as $,useEffect as M,useMemo as G,useCallback as D}from"@dropins/tools/preact-hooks.js";import{Field as B,Picker as ee,Input as ae,Button as re}from"@dropins/tools/components.js";import{classes as k,Slot as ne}from"@dropins/tools/lib.js";import{memo as oe}from"@dropins/tools/preact-compat.js";import{useText as J}from"@dropins/tools/i18n.js";import{g as te,c as se}from"../chunks/transform-store-config.js";import{g as z,v as ie}from"../chunks/validateCompanyEmail.js";import{a as le,i as de}from"../chunks/isCompanyUser.js";import"../chunks/network-error.js";import"@dropins/tools/fetch-graphql.js";import"@dropins/tools/event-bus.js";import"../chunks/fetch-error.js";import"../chunks/company-permissions.js";var A=(a=>(a.TEXT="TEXT",a.EMAIL="EMAIL",a.TEL="TEL",a.SELECT="SELECT",a.HIDDEN="HIDDEN",a))(A||{});const ce=oe(({loading:a,values:e={},fields:u,errors:n={},className:y="",regionOptions:s,countryOptions:g,onChange:o,onBlur:i,onFocus:c,slots:E,fieldIdPrefix:f})=>{const _=`${y}__field`,T=J({selectCountry:"Company.FormText.selectCountry",selectRegion:"Company.FormText.selectRegion",selectCountryFirst:"Company.FormText.selectCountryFirst",country:"Company.shared.fields.country",stateProvince:"Company.shared.fields.stateProvince","Company.Registration.companyInformation":"Company.shared.fields.companyInformation","Company.Registration.legalAddress":"Company.shared.fields.legalAddress","Company.Registration.companyAdmin":"Company.shared.fields.companyAdmin"}),N={CompanyInformationSection:["companyName","legalName","companyEmail","vatTaxId","resellerId"],LegalAddressSection:["street","streetLine2","city","countryCode","region","postcode","addressTelephone"],CompanyAdministratorSection:["adminEmail","adminFirstname","adminLastname","adminJobTitle","adminWorkTelephone","adminGender"]},v=r=>({CompanyInformationSection:"Company.Registration.companyInformation",LegalAddressSection:"Company.Registration.legalAddress",CompanyAdministratorSection:"Company.Registration.companyAdmin"})[r],L=r=>{var h,R,F,q;if((r.code==="region"||r.code==="regionCode")&&r.fieldType===A.SELECT){const x=((h=e.regionCode)==null?void 0:h.toString())||"",I=((R=e.regionId)==null?void 0:R.toString())||"";return x&&I?`${x},${I}`:(F=e[r.code])!=null&&F.toString().includes(",")?(q=e[r.code])==null?void 0:q.toString():""}return null},l=r=>{var h;return r.code==="street"?Array.isArray(e.street)?e.street[0]||"":((h=e.street)==null?void 0:h.toString())||"":r.code==="streetLine2"?Array.isArray(e.street)&&e.street[1]||"":null},t=(r,h)=>{const R=`CompanyFormInput_${r.code}`,F=E==null?void 0:E[R];if(!F)return null;const q={inputName:r.code,handleOnChange:o||(()=>{}),errorMessage:h,errors:Object.values(n),formData:e,fieldConfig:{required:r.required,disabled:r.disabled||a,placeholder:r.placeholder||r.label,label:r.label}};return p(ne,{"data-testid":`companyFormInput_${r.code}`,name:R,slot:F,context:q})},d=(r,h,R)=>{let F=r.options;return r.code==="countryCode"||r.code==="country_code"?F=(g==null?void 0:g.map(q=>({value:q.value,text:q.text,isDefault:!1})))||[]:(r.code==="region"||r.code==="regionCode")&&(F=(s==null?void 0:s.map(q=>({text:q.text,value:q.value,isDefault:!1})))||[]),p(W,{children:t(r,R)??p(B,{error:R,className:k([_,`${_}--${r.id}`,[`${_}--${r.id}-hidden`,r.isHidden],r.className]),"data-testid":`${y}--${r.id}`,disabled:a,children:p(ee,{"aria-label":r.label,"aria-required":r.required?"true":"false",id:f?`${f}_${r.code}`:r.code,required:r==null?void 0:r.required,name:r.customUpperCode||r.code,placeholder:r.label,options:F,onBlur:i,onFocus:c,handleSelect:o,defaultValue:h,value:h})},r.id)})},m=(r,h,R)=>{let F="text";return r.fieldType===A.EMAIL?F="email":r.fieldType===A.TEL&&(F="tel"),p(W,{children:t(r,R)??p(B,{error:R,className:k([_,`${_}--${r.id}`,[`${_}--${r.id}-hidden`,r.isHidden],r.className]),"data-testid":`${y}--${r.id}`,disabled:a,children:p(ae,{"aria-label":r.label,"aria-required":r.required?"true":"false",id:f?`${f}_${r.code}`:r.code,type:F,name:r.customUpperCode,value:h??r.defaultValue,placeholder:r.label,floatingLabel:`${r.label} ${r.required?"*":""}`,maxLength:r.maxlength,onBlur:i,onFocus:c,onChange:o})},r.id)})},b=r=>u==null?void 0:u.filter(h=>r.includes(h.code)&&!h.isHidden).map(h=>{var I,V;let R=((I=e[h.code])==null?void 0:I.toString())||"";const F=l(h);F!==null&&(R=F);const q=L(h);q!==null&&(R=q);const x=n[h.customUpperCode||h.code]||"";return h.code==="region"||h.code==="regionCode"?h.fieldType===A.SELECT?d(h,R,x):m(h,R,x):h.fieldType===A.SELECT||((V=h.options)==null?void 0:V.length)>0?d(h,R,x):m(h,R,x)}),S=r=>{const h=N[r],R=v(r);return(u==null?void 0:u.some(q=>h.includes(q.code)&&!q.isHidden))?C("div",{className:`${y}__section`,children:[p("h3",{className:`${y}__section-title`,children:T[R]}),b(h)]},`section-${r}`):null};return C("div",{className:`${y}__inputs`,children:[S("CompanyInformationSection"),S("LegalAddressSection"),S("CompanyAdministratorSection")]})}),me=({showFormLoader:a,slots:e,name:u="companyForm",loading:n,children:y,className:s="company-form",fieldsConfig:g=[],values:o={},errors:i={},onSubmit:c,onChange:E,onBlur:f,regionOptions:_,countryOptions:T,fieldIdPrefix:N})=>{const v=K(null),L=async t=>{t.preventDefault(),c&&await c(t,!0)};if(a||n)return p("div",{className:k(["dropin-form-loader","company-form-loader"]),children:"Loading..."});const l=t=>{const d=t.target,{name:m,value:b}=d;E&&E({[m]:b})};return C("form",{id:u,ref:v,className:k(["company-form",s]),onSubmit:L,noValidate:!0,children:[p(ce,{className:s,fields:g,values:o,errors:i,onChange:l,onBlur:f,slots:e,regionOptions:_,countryOptions:T,fieldIdPrefix:N}),y]})},ue=(a={})=>{const{defaultCountry:e="US",formName:u="company_registration"}=a,[n,y]=$(null),[s,g]=$(()=>{var d;try{const m=sessionStorage.getItem(`${u}_formData`);return m?{countryCode:(d=JSON.parse(m))==null?void 0:d.countryCode}:{countryCode:e}}catch{return{countryCode:e}}}),[o,i]=$(!0),[c,E]=$(!0),[f,_]=$([]);M(()=>{i(!0),E(!0),z().then(({availableCountries:d,countriesWithRequiredRegion:m,optionalZipCountries:b})=>{y({availableCountries:d,countriesWithRequiredRegion:m,optionalZipCountries:b}),i(!1),E(!1)}).catch(d=>{console.error("Failed to load countries:",d),i(!1),E(!1)})},[]),M(()=>{if(s!=null&&s.countryCode&&n){const d=n.availableCountries.find(m=>m.value===s.countryCode);if(d!=null&&d.availableRegions&&d.availableRegions.length>0){const m=d.availableRegions.map(b=>({text:b.name,value:`${b.code},${b.id}`,id:b.id,code:b.code}));_(m)}else _([])}else _([])},[s==null?void 0:s.countryCode,n]);const T=G(()=>(n==null?void 0:n.availableCountries)||[],[n]),N=G(()=>!(s!=null&&s.countryCode)||!n?!1:n.countriesWithRequiredRegion.includes(s.countryCode),[s==null?void 0:s.countryCode,n]),v=G(()=>!(s!=null&&s.countryCode)||!n?!0:!n.optionalZipCountries.includes(s.countryCode),[s==null?void 0:s.countryCode,n]),L=G(()=>f,[f]),l=G(()=>L.length>0,[L.length]),t=D((d,m)=>{g(b=>{const S={...b,[d]:m};return d==="countryCode"&&(S.regionCode="",S.regionId=void 0),S})},[]);return{countryOptions:T,regionOptions:L,isRequiredRegion:N,isRequiredPostCode:v,disableField:o,loadingCountries:c,hasRegions:l,handleInputChange:t,inputChange:s}},pe=a=>{var E;const{formData:e,isRequiredRegion:u=!1,isRequiredPostCode:n=!1,hasRegions:y=!1,disableField:s=!1,translations:g={}}=a,o=f=>(g==null?void 0:g[f])||f,i=f=>{const _=o(f);return f==="countryCode"||f==="region"||f==="adminGender"?`Select ${_.toLowerCase()}`:`Enter ${_.toLowerCase()}`},c={isRequiredRegion:u,isRequiredPostCode:n};return[{code:"companyName",name:"companyName",id:"companyName",label:o("companyName"),placeholder:i("companyName"),required:!0,fieldType:A.TEXT,isHidden:!1,customUpperCode:"companyName",defaultValue:(e==null?void 0:e.companyName)||"",options:[],maxlength:40,...c,validateRules:[]},{code:"legalName",name:"legalName",id:"legalName",label:o("legalName"),placeholder:i("legalName"),required:!1,fieldType:A.TEXT,isHidden:!1,customUpperCode:"legalName",defaultValue:(e==null?void 0:e.legalName)||"",options:[],maxlength:80,validateRules:[],...c},{code:"companyEmail",name:"companyEmail",id:"companyEmail",label:o("companyEmail"),placeholder:i("companyEmail"),required:!0,fieldType:A.EMAIL,isHidden:!1,customUpperCode:"companyEmail",defaultValue:(e==null?void 0:e.companyEmail)||"",options:[],maxlength:254,validateRules:[{INPUT_VALIDATION:"email"},{MIN_TEXT_LENGTH:5},{MAX_TEXT_LENGTH:254}],...c},{code:"vatTaxId",name:"vatTaxId",id:"vatTaxId",label:o("vatTaxId"),placeholder:i("vatTaxId"),required:!1,fieldType:A.TEXT,isHidden:!1,customUpperCode:"vatTaxId",defaultValue:(e==null?void 0:e.vatTaxId)||"",options:[],maxlength:40,validateRules:[],...c},{code:"resellerId",name:"resellerId",id:"resellerId",label:o("resellerId"),placeholder:i("resellerId"),required:!1,fieldType:A.TEXT,isHidden:!1,customUpperCode:"resellerId",defaultValue:(e==null?void 0:e.resellerId)||"",options:[],maxlength:40,validateRules:[],...c},{code:"street",name:"street",id:"street",label:o("street"),placeholder:i("street"),required:!0,fieldType:A.TEXT,isHidden:!1,customUpperCode:"street",defaultValue:Array.isArray(e==null?void 0:e.street)?e.street[0]:(e==null?void 0:e.street)||"",options:[],validateRules:[],...c},{code:"streetLine2",name:"streetLine2",id:"streetLine2",label:o("streetLine2"),placeholder:i("streetLine2"),required:!1,fieldType:A.TEXT,isHidden:!1,customUpperCode:"streetLine2",defaultValue:Array.isArray(e==null?void 0:e.street)?e.street[1]:"",options:[],validateRules:[],...c},{code:"city",name:"city",id:"city",label:o("city"),placeholder:i("city"),required:!0,fieldType:A.TEXT,isHidden:!1,customUpperCode:"city",defaultValue:(e==null?void 0:e.city)||"",options:[],validateRules:[],...c},{code:"countryCode",name:"countryCode",id:"countryCode",label:o("country"),placeholder:i("country"),required:!0,disabled:s,fieldType:A.SELECT,isHidden:!1,customUpperCode:"countryCode",defaultValue:(e==null?void 0:e.countryCode)||"",options:[],validateRules:[]},{code:"region",name:"region",id:"region",label:o("stateProvince"),placeholder:i("stateProvince"),required:u,disabled:!1,fieldType:y?A.SELECT:A.TEXT,isHidden:!1,customUpperCode:"region",defaultValue:(e==null?void 0:e.regionCode)||"",options:[]},{code:"postcode",name:"postcode",id:"postcode",label:o("postalCode"),placeholder:i("postalCode"),required:n,fieldType:A.TEXT,isHidden:!1,customUpperCode:"postcode",defaultValue:(e==null?void 0:e.postcode)||"",options:[],validateRules:[{INPUT_VALIDATION:"postal-code"},{MIN_TEXT_LENGTH:3},{MAX_TEXT_LENGTH:20}],...c},{code:"addressTelephone",name:"addressTelephone",id:"addressTelephone",label:o("telephone"),placeholder:i("telephone"),required:!0,fieldType:A.TEL,isHidden:!1,customUpperCode:"addressTelephone",defaultValue:(e==null?void 0:e.addressTelephone)||"",options:[],validateRules:[{INPUT_VALIDATION:"phone"},{MIN_TEXT_LENGTH:1},{MAX_TEXT_LENGTH:20}],...c},{code:"adminJobTitle",name:"adminJobTitle",id:"adminJobTitle",label:o("adminJobTitle"),placeholder:i("adminJobTitle"),required:!1,fieldType:A.TEXT,isHidden:!1,customUpperCode:"adminJobTitle",defaultValue:(e==null?void 0:e.adminJobTitle)||"",options:[],validateRules:[],...c},{code:"adminWorkTelephone",name:"adminWorkTelephone",id:"adminWorkTelephone",label:o("adminWorkTelephone"),placeholder:i("adminWorkTelephone"),required:!1,fieldType:A.TEL,isHidden:!1,customUpperCode:"adminWorkTelephone",defaultValue:(e==null?void 0:e.adminWorkTelephone)||"",options:[],validateRules:[{INPUT_VALIDATION:"phone"},{MIN_TEXT_LENGTH:1},{MAX_TEXT_LENGTH:20}],...c},{code:"adminEmail",name:"adminEmail",id:"adminEmail",label:o("adminEmail"),placeholder:i("adminEmail"),required:!0,fieldType:A.EMAIL,isHidden:!1,customUpperCode:"adminEmail",defaultValue:(e==null?void 0:e.adminEmail)||"",options:[],validateRules:[{INPUT_VALIDATION:"email"},{MIN_TEXT_LENGTH:5},{MAX_TEXT_LENGTH:254}],...c},{code:"adminFirstname",name:"adminFirstname",id:"adminFirstname",label:o("adminFirstname"),placeholder:i("adminFirstname"),required:!0,fieldType:A.TEXT,isHidden:!1,customUpperCode:"adminFirstname",defaultValue:(e==null?void 0:e.adminFirstname)||"",options:[],validateRules:[{INPUT_VALIDATION:"name"},{MIN_TEXT_LENGTH:1},{MAX_TEXT_LENGTH:255}],...c},{code:"adminLastname",name:"adminLastname",id:"adminLastname",label:o("adminLastname"),placeholder:i("adminLastname"),required:!0,fieldType:A.TEXT,isHidden:!1,customUpperCode:"adminLastname",defaultValue:(e==null?void 0:e.adminLastname)||"",options:[],validateRules:[{INPUT_VALIDATION:"name"},{MIN_TEXT_LENGTH:1},{MAX_TEXT_LENGTH:255}],...c},{code:"adminGender",name:"adminGender",id:"adminGender",label:o("adminGender"),placeholder:i("adminGender"),required:!1,fieldType:A.SELECT,isHidden:!1,customUpperCode:"adminGender",defaultValue:((E=e==null?void 0:e.adminGender)==null?void 0:E.toString())||"",options:[{value:"1",text:"Male",isDefault:!0},{value:"2",text:"Female",isDefault:!1},{value:"0",text:"Not Specified",isDefault:!1}],validateRules:[],...c}]},he=a=>a.reduce((e,u)=>({...e,...u}),{}),ye=a=>/^[0-9]+$/.test(a),ge=a=>/^[a-zA-Z0-9]+$/.test(a),Ce=a=>/^[a-zA-Z0-9\s]+$/.test(a),fe=a=>/^[a-zA-Z]+$/.test(a),Te=a=>/^[a-z0-9,!#$%&'*+/=?^_`{|}~-]+(\.[a-z0-9,!#$%&'*+/=?^_`{|}~-]+)*@([a-z0-9-]+\.)+[a-z]{2,}$/i.test(a),Ee=a=>/(?:[\d\s+\-()]{1,20})/u.test(a),_e=a=>/^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i.test(a),Ne=a=>/^[A-Z0-9\s-]{3,10}$/i.test(a),ve=a=>/^(?:[\p{L}\p{M},\-_.'`&\s\d]){1,255}$/u.test(a),be=(a,e,u)=>{const n=a.length;return n>=e&&n<=u},Z=(a,e,u,n)=>{var r,h;const{requiredFieldError:y,lengthTextError:s,numericError:g,alphaNumWithSpacesError:o,alphaNumericError:i,alphaError:c,emailError:E,phoneError:f,postalCodeError:_,urlError:T,nameError:N}=u,v=e==null?void 0:e.customUpperCode,L={[v]:""};n[v]&&delete n[v];const l=(a==null?void 0:a.trim())||"";if(e!=null&&e.required&&(!l||l==="false"))return{[v]:y};if(!(e!=null&&e.required)&&!l||!((r=e==null?void 0:e.validateRules)!=null&&r.length))return L;const t=he(e==null?void 0:e.validateRules),d=Number(t.MIN_TEXT_LENGTH)??1,m=Number(t.MAX_TEXT_LENGTH)??255;if(!be(l,d,m))return{[v]:s.replace("{min}",d.toString()).replace("{max}",m.toString())};const S={numeric:{validate:ye,error:g},"alphanum-with-spaces":{validate:Ce,error:o},alphanumeric:{validate:ge,error:i},alpha:{validate:fe,error:c},email:{validate:Te,error:E},phone:{validate:Ee,error:f},"postal-code":{validate:R=>Ne(R),error:_},url:{validate:_e,error:T},name:{validate:ve,error:N}}[t.INPUT_VALIDATION];return S&&!S.validate(l)&&!((h=n[v])!=null&&h.length)?{[v]:S.error}:L},Ie=a=>({requiredFieldError:a.requiredFieldError,lengthTextError:a.lengthTextError,numericError:a.numericError,alphaNumWithSpacesError:a.alphaNumWithSpacesError,alphaNumericError:a.alphaNumericError,alphaError:a.alphaError,emailError:a.emailError,phoneError:a.phoneError,postalCodeError:a.postalCodeError,urlError:a.urlError,nameError:a.nameError}),Q=(a,e)=>({fieldsConfig:a,translations:Ie(e)}),Ae=(a,e,u)=>{const{fieldsConfig:n,translations:y}=u,s=n.find(c=>c.code===a);if(!s)return"";const g=Array.isArray(e)?e.join(""):e.toString(),o={validateRules:s.validateRules||[],customUpperCode:s.customUpperCode,required:s.required};return Z(g,o,y,{})[s.customUpperCode]||""},Le=(a,e)=>{const{fieldsConfig:u,translations:n}=e,y=u[0],s=(y==null?void 0:y.isRequiredRegion)||!1,g=(y==null?void 0:y.isRequiredPostCode)||!1;let o=!1;const i={};Object.entries(a).forEach(([_,T])=>{const N=u.find(t=>t.code===_);if(!N)return;const v=Array.isArray(T)?T.join(""):T.toString(),L={validateRules:N.validateRules,customUpperCode:N.customUpperCode,required:N.required},l=Z(v,L,n,{});l[N.customUpperCode]&&(i[N.customUpperCode]=l[N.customUpperCode],o=!0)});const c=typeof a.regionId=="number"&&a.regionId>0,E=a.regionCode&&a.regionCode.toString().trim(),f=a.region&&a.region.toString().trim();return s&&!c&&!E&&!f&&(i.region=n.requiredFieldError,o=!0),g&&!a.postcode.toString().trim()&&(i.postcode=n.requiredFieldError,o=!0),{isValid:!o,fieldErrors:i}},Y=(a,e,u,n)=>{const y=Q(u,n);return Ae(a,e,y)},Re=(a,e,u)=>{const n=Q(e,u);return Le(a,n)},Se=a=>{const{setFormData:e,hasRegions:u,regionOptions:n,fieldsConfig:y,formTranslations:s,setFieldErrors:g}=a,o=(l,t)=>{const d=Y(l,t,y,s);g&&d?g(m=>({...m,[l]:d})):g&&g(m=>{const b={...m};return delete b[l],b})},i=l=>{e(t=>{const d=Array.isArray(t.street)?t.street:[t.street||"",""],m=Array.isArray(l)?l:[l,d[1]||""];return{...t,street:m}}),o("street",l)},c=l=>{e(t=>{const m=[(Array.isArray(t.street)?t.street:[t.street||"",""])[0]||"",l];return{...t,street:m}}),o("streetLine2",l)},E=l=>{e(t=>({...t,region:l,regionCode:"",regionId:void 0})),o("region",l)},f=l=>{e(t=>({...t,regionCode:l,...u?{}:{regionId:void 0}})),o("regionCode",l)},_=l=>{const t=typeof l=="string"?parseInt(l,10)||void 0:l;e(d=>{const m={...d,regionId:t};if(t&&n.length>0){const b=n.find(S=>S.id===t||S.value===(t==null?void 0:t.toString()));b&&b.code&&(m.regionCode=b.code)}return m}),o("regionId",l)},T=l=>{e(t=>({...t,countryCode:l,regionCode:"",regionId:void 0,region:""})),o("countryCode",l)},N=(l,t)=>{e(d=>({...d,[l]:t})),o(l,t)};return{handleInputChange:l=>{const t=l.target;if(!t)return;const{name:d,value:m}=t;switch(d){case"street":i(m);break;case"streetLine2":c(m);break;case"region":u?_(m):E(m);break;case"regionCode":f(m);break;case"countryCode":T(m);break;default:N(d,m);break}},handleInputChangeFromValues:l=>{Object.entries(l).forEach(([t,d])=>{switch(t){case"street":i(d);break;case"streetLine2":c(d);break;case"region":E(d);break;case"regionCode":f(d);break;case"regionId":_(d);break;case"countryCode":T(d);break;default:N(t,d);break}})},handleStreetChange:i,handleStreetLine2Change:c,handleRegionTextChange:E,handleRegionCodeChange:f,handleRegionDropdownChange:_,handleCountryChange:T,handleGenericFieldChange:N}},Fe=({onSuccess:a,onError:e})=>{const[u,n]=$(!1),[y,s]=$({}),[g,o]=$("US"),[i,c]=$(!0),{countryOptions:E,regionOptions:f,isRequiredRegion:_,isRequiredPostCode:T,hasRegions:N,loadingCountries:v,disableField:L,handleInputChange:l}=ue({defaultCountry:g,formName:"companyRegistration"}),[t,d]=$({countryCode:g,region:"",regionCode:"",regionId:"",street:["",""]});M(()=>{(async()=>{try{c(!0);const V=(await te()).defaultCountry||"US";o(V),d(w=>({...w,countryCode:V}))}catch(I){console.error("Failed to load store config:",I)}finally{c(!1)}})()},[]),M(()=>{g&&!i&&l("countryCode",g)},[g,l,i]);const m=J({requiredFieldError:"Company.shared.validation.required",lengthTextError:"Company.FormText.lengthTextError",numericError:"Company.FormText.numericError",alphaNumWithSpacesError:"Company.FormText.alphaNumWithSpacesError",alphaNumericError:"Company.FormText.alphaNumericError",alphaError:"Company.FormText.alphaError",emailError:"Company.shared.validation.invalidEmail",phoneError:"Company.shared.validation.phoneInvalid",postalCodeError:"Company.shared.validation.postalCodeInvalid",urlError:"Company.FormText.urlError",nameError:"Company.FormText.nameError"}),b=J({title:"Company.shared.fields.title",submitButton:"Company.shared.fields.submit",submittingButton:"Company.shared.fields.submitting",cancelButton:"Company.shared.buttons.cancel",createCompanyError:"Company.shared.fields.createCompanyError",unexpectedError:"Company.shared.fields.unexpectedError",emailNotAvailable:"Company.shared.validation.emailNotAvailable",companyName:"Company.shared.fields.companyName",legalName:"Company.shared.fields.legalName",companyEmail:"Company.shared.fields.companyEmail",vatTaxId:"Company.shared.fields.vatTaxId",resellerId:"Company.shared.fields.resellerId",street:"Company.shared.fields.street",streetLine2:"Company.shared.fields.streetLine2",city:"Company.shared.fields.city",country:"Company.shared.fields.country",stateProvince:"Company.shared.fields.stateProvince",postalCode:"Company.shared.fields.postalCode",telephone:"Company.shared.fields.telephone",adminJobTitle:"Company.shared.fields.adminJobTitle",adminWorkTelephone:"Company.shared.fields.adminWorkTelephone",adminEmail:"Company.shared.fields.adminEmail",adminFirstname:"Company.shared.fields.adminFirstname",adminLastname:"Company.shared.fields.adminLastname",adminGender:"Company.shared.fields.adminGender"}),S=G(()=>pe({formData:{countryCode:t.countryCode,regionCode:t.regionCode,regionId:t.regionId},isRequiredRegion:_,isRequiredPostCode:T,hasRegions:N,disableField:L,translations:b}).map(I=>I.code==="region"?{...I,required:_,disabled:v,fieldType:N?"SELECT":"TEXT",options:N?f.map(V=>({text:V.text,value:V.value,isDefault:!1})):[]}:I.code==="postcode"?{...I,required:T}:I.code==="countryCode"?{...I,disabled:L||v,options:E.map(V=>({text:V.text,value:V.value,isDefault:!1}))}:I),[_,T,N,v,L,E,f,t.countryCode,t.regionCode,t.regionId,b]),r=x=>{const I=Re(x,S,m);return s(I.fieldErrors),I.isValid},h=G(()=>Se({setFormData:d,hasRegions:N,regionOptions:f,fieldsConfig:S,formTranslations:m,setFieldErrors:s}),[N,f,S,m]);return{formValues:t,fieldErrors:y,isSubmitting:u,loadingStoreConfig:i,fieldsConfig:S,countryOptions:E,regionOptions:f,loadingCountries:v,handleInputChange:x=>{h.handleInputChangeFromValues(x),Object.entries(x).forEach(([I,V])=>{I==="countryCode"&&l("countryCode",V)})},handleBlur:x=>{const I=x.target,{name:V,value:w}=I,P=S.find(H=>H.customUpperCode===V);if(P){const H=Y(P.code,w,S,m);s(O=>({...O,[V]:H||""}))}},handleFormSubmit:async(x,I)=>{const V=x.target,w=new FormData(V),P={};for(const[X,U]of w.entries())P[X]=U;const H={...P,...t},O=r(H);if(!(!I||!O)){n(!0);try{const X=await ie(H.companyEmail);if(!X.isValid){s(j=>({...j,companyEmail:X.error||b.emailNotAvailable})),n(!1);return}const U=await se(H);if(U.success&&U.company)a==null||a(U.company);else{const j=U.errors||[b.createCompanyError];e==null||e(j)}}catch(X){const U=X instanceof Error?X.message:b.unexpectedError;e==null||e([U])}finally{n(!1)}}},translations:b,formTranslations:m}},xe=({onSuccess:a,onError:e,className:u="",slots:n,hideActionFormButtons:y=!1})=>{const{formValues:s,fieldErrors:g,isSubmitting:o,loadingStoreConfig:i,fieldsConfig:c,countryOptions:E,regionOptions:f,loadingCountries:_,handleInputChange:T,handleBlur:N,handleFormSubmit:v,translations:L}=Fe({onSuccess:a,onError:e});return C("div",{className:k(["company-form-wrapper",u]),children:[p("h2",{children:L.title}),p(me,{regionOptions:f,countryOptions:E,slots:n,className:"company-registration-form",name:"companyRegistrationForm",fieldsConfig:c,values:s,errors:g,onChange:T,onBlur:N,onSubmit:v,loading:o,showFormLoader:!1,children:!y&&p("div",{className:k(["company-form-wrapper__buttons"]),children:p(re,{type:"submit",disabled:o||i||_,className:"company-form-wrapper__submit",children:o?L.submittingButton:L.submitButton})})})]})},Ve=({company:a})=>{var y;const[e,u]=$(""),n=J({pendingApproval:"Company.CompanyRegistration.success.pendingApproval",companyDetails:"Company.CompanyRegistration.success.companyDetails",companyName:"Company.shared.fields.companyName",companyEmail:"Company.shared.fields.companyEmail",legalName:"Company.shared.fields.legalName",vatTaxId:"Company.shared.fields.vatTaxId",resellerId:"Company.shared.fields.resellerId",address:"Company.shared.fields.legalAddress",street:"Company.shared.fields.street",city:"Company.shared.fields.city",stateProvince:"Company.shared.fields.stateProvince",postcode:"Company.shared.fields.postcode",country:"Company.shared.fields.country",telephone:"Company.shared.fields.telephone",companyAdmin:"Company.shared.fields.companyAdmin",adminFirstname:"Company.shared.fields.adminFirstname",adminLastname:"Company.shared.fields.adminLastname",adminEmail:"Company.shared.fields.adminEmail",adminJobTitle:"Company.shared.fields.adminJobTitle",adminWorkTelephone:"Company.shared.fields.adminWorkTelephone"});return M(()=>{(async()=>{var g;if((g=a.legalAddress)!=null&&g.countryCode)try{const{availableCountries:o}=await z(),i=o.find(c=>{var E;return c.value===((E=a.legalAddress)==null?void 0:E.countryCode)});i&&u(i.text)}catch(o){console.error("Failed to fetch countries:",o),u(a.legalAddress.countryCode)}})()},[(y=a.legalAddress)==null?void 0:y.countryCode]),C("div",{className:"company-registration-success",children:[p("div",{className:"company-registration-success__header",children:p("p",{className:"company-registration-success__pending",children:n.pendingApproval})}),C("div",{className:"company-registration-success__details",children:[p("h2",{className:"company-registration-success__details-title",children:n.companyDetails}),C("div",{className:"company-registration-success__grid",children:[C("div",{className:"company-registration-success__item",children:[C("span",{className:"company-registration-success__label",children:[n.companyName,":"]}),p("span",{className:"company-registration-success__value",children:a.name})]}),a.legalName&&C("div",{className:"company-registration-success__item",children:[C("span",{className:"company-registration-success__label",children:[n.legalName,":"]}),p("span",{className:"company-registration-success__value",children:a.legalName})]}),C("div",{className:"company-registration-success__item",children:[C("span",{className:"company-registration-success__label",children:[n.companyEmail,":"]}),p("span",{className:"company-registration-success__value",children:a.email})]}),a.vatTaxId&&C("div",{className:"company-registration-success__item",children:[C("span",{className:"company-registration-success__label",children:[n.vatTaxId,":"]}),p("span",{className:"company-registration-success__value",children:a.vatTaxId})]}),a.resellerId&&C("div",{className:"company-registration-success__item",children:[C("span",{className:"company-registration-success__label",children:[n.resellerId,":"]}),p("span",{className:"company-registration-success__value",children:a.resellerId})]}),a.legalAddress&&C(W,{children:[p("div",{className:"company-registration-success__section-header",children:p("h3",{children:n.address})}),a.legalAddress.street&&a.legalAddress.street[0]&&C("div",{className:"company-registration-success__item",children:[C("span",{className:"company-registration-success__label",children:[n.street,":"]}),p("span",{className:"company-registration-success__value",children:a.legalAddress.street.map((s,g)=>p("div",{children:s},g))})]}),a.legalAddress.city&&C("div",{className:"company-registration-success__item",children:[C("span",{className:"company-registration-success__label",children:[n.city,":"]}),p("span",{className:"company-registration-success__value",children:a.legalAddress.city})]}),a.legalAddress.countryCode&&C("div",{className:"company-registration-success__item",children:[C("span",{className:"company-registration-success__label",children:[n.country,":"]}),p("span",{className:"company-registration-success__value",children:e||a.legalAddress.countryCode})]}),a.legalAddress.region&&C("div",{className:"company-registration-success__item",children:[C("span",{className:"company-registration-success__label",children:[n.stateProvince,":"]}),p("span",{className:"company-registration-success__value",children:a.legalAddress.region.region||a.legalAddress.region.regionCode})]}),a.legalAddress.postcode&&C("div",{className:"company-registration-success__item",children:[C("span",{className:"company-registration-success__label",children:[n.postcode,":"]}),p("span",{className:"company-registration-success__value",children:a.legalAddress.postcode})]}),a.legalAddress.telephone&&C("div",{className:"company-registration-success__item",children:[C("span",{className:"company-registration-success__label",children:[n.telephone,":"]}),p("span",{className:"company-registration-success__value",children:a.legalAddress.telephone})]})]}),a.companyAdmin&&C(W,{children:[p("div",{className:"company-registration-success__section-header",children:p("h3",{children:n.companyAdmin})}),a.companyAdmin.jobTitle&&C("div",{className:"company-registration-success__item",children:[C("span",{className:"company-registration-success__label",children:[n.adminJobTitle,":"]}),p("span",{className:"company-registration-success__value",children:a.companyAdmin.jobTitle})]}),a.companyAdmin.telephone&&C("div",{className:"company-registration-success__item",children:[C("span",{className:"company-registration-success__label",children:[n.adminWorkTelephone,":"]}),p("span",{className:"company-registration-success__value",children:a.companyAdmin.telephone})]}),C("div",{className:"company-registration-success__item",children:[C("span",{className:"company-registration-success__label",children:[n.adminEmail,":"]}),p("span",{className:"company-registration-success__value",children:a.companyAdmin.email})]})]})]})]})]})},Be=({isAuthenticated:a=!1,onRedirectLogin:e,onRedirectAccount:u,onSuccess:n,onError:y,className:s,slots:g})=>{const[o,i]=$("loading"),[c,E]=$(null);M(()=>{let T=!0;return(async()=>{try{if(!await le()){if(T){const v=a?"redirect-account":"redirect-login";console.log(`Company registration disabled - redirecting to ${a?"account dashboard":"login page"}`),i(v)}return}if(a)try{if(await de()){T&&(console.log("User already belongs to a company - redirecting to account dashboard"),i("redirect-account"));return}}catch(v){console.error("Error checking company membership - redirecting to account dashboard:",v),T&&i("redirect-account");return}T&&i("show-form")}catch(N){console.error("Error checking B2B status:",N),T&&i(a?"redirect-account":"redirect-login")}})(),()=>{T=!1}},[a]),M(()=>{o==="redirect-login"&&e&&e(),o==="redirect-account"&&u&&u()},[o,e,u]);const f=T=>{i("success"),E(T),n==null||n(T)},_=T=>{y==null||y(T)};return o==="loading"||o==="redirect-login"||o==="redirect-account"?null:o==="success"&&c?p("div",{className:`company-registration-container ${s||""}`,children:p(Ve,{company:c})}):p("div",{className:`company-registration-container ${s||""}`,children:p(xe,{onSuccess:f,onError:_,slots:g})})};export{Be as CompanyRegistration,Be as default};
|
|
4
|
+
//# sourceMappingURL=CompanyRegistration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CompanyRegistration.js","sources":["/@dropins/storefront-company-management/src/types/form.types.ts","/@dropins/storefront-company-management/src/components/CompanyRegistrationForm/Form/FormInputs/FormInputs.tsx","/@dropins/storefront-company-management/src/components/CompanyRegistrationForm/Form/Form.tsx","/@dropins/storefront-company-management/src/hooks/useCountryAndRegionFields.tsx","/@dropins/storefront-company-management/src/components/CompanyRegistrationForm/Form/getCompanyFieldsConfig.ts","/@dropins/storefront-company-management/src/components/CompanyRegistrationForm/Form/fieldValidationRules.ts","/@dropins/storefront-company-management/src/components/CompanyRegistrationForm/Form/formValidation.ts","/@dropins/storefront-company-management/src/components/CompanyRegistrationForm/Form/fieldHandlers.ts","/@dropins/storefront-company-management/src/hooks/useCompanyRegistrationForm.ts","/@dropins/storefront-company-management/src/components/CompanyRegistrationForm/CompanyRegistrationForm.tsx","/@dropins/storefront-company-management/src/components/CompanyRegistrationSuccess/CompanyRegistrationSuccess.tsx","/@dropins/storefront-company-management/src/containers/CompanyRegistration/CompanyRegistration.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars\nimport { SlotProps } from '@adobe-commerce/elsie/lib';\nimport { CompanyFormData } from '@/company-management/data/models/company';\n\nexport enum FieldTypeEnum {\n TEXT = 'TEXT',\n EMAIL = 'EMAIL',\n TEL = 'TEL',\n SELECT = 'SELECT',\n HIDDEN = 'HIDDEN',\n}\n\nexport interface FieldsProps {\n code: string;\n name: string;\n id: string;\n required: boolean;\n label: string;\n options: { isDefault: boolean; text: string; value: string }[];\n className?: string;\n defaultValue: string | boolean | number;\n fieldType: FieldTypeEnum;\n isHidden: boolean;\n customUpperCode: string;\n validateRules?: Record<string, string | number | boolean>[];\n placeholder?: string;\n disabled?: boolean;\n isRequiredRegion?: boolean;\n isRequiredPostCode?: boolean;\n maxlength?: number;\n}\n\nexport interface CompanyFormInputsContext {\n formData: CompanyFormData;\n formActions: {\n handleChange: (field: keyof CompanyFormData, value: string | string[]) => void;\n };\n}\n\nexport interface CompanyFormSectionContext {\n formData: CompanyFormData;\n handleInputChange: (values: Record<string, string | string[] | number | boolean>) => void;\n isSubmitting: boolean;\n errors: string[];\n}\n\nexport interface CompanyFormSlots {\n // Individual field slots - pattern: CompanyFormInput_{fieldCode}\n // Examples: CompanyFormInput_companyName, CompanyFormInput_companyEmail, etc.\n // Each slot is a function that receives context and returns JSX\n [key: string]: (context?: any) => any;\n}\n\nexport interface FormProps {\n regionOptions?: { text: string; value: string }[];\n countryOptions?: { text: string; value: string }[];\n fieldIdPrefix?: string;\n slots?: CompanyFormSlots;\n fieldsConfig?: FieldsProps[];\n values?: Record<string, string | number | boolean | string[]>;\n errors?: Record<string, string>;\n name?: string;\n className?: string;\n children?: any;\n loading?: boolean;\n showFormLoader?: boolean;\n onSubmit?: (event: SubmitEvent, isValid: boolean) => Promise<void | null | undefined>;\n onChange?: (values: Record<string, string | string[] | number | boolean>) => void;\n onBlur?: (event: Event) => void;\n}\n\nexport interface FormInputsProps {\n className?: string;\n errors?: Record<string, string>;\n values?: Record<string, string | number | boolean | string[]>;\n formData?: Record<string, string | number | boolean>;\n fields?: FieldsProps[];\n loading?: boolean;\n regionOptions?: { text: string; value: string }[];\n countryOptions?: { text: string; value: string }[];\n onChange?: (event: Event) => void;\n handleInputChange?: (event: Event) => void;\n onBlur?: (event: Event) => void;\n onFocus?: (event: Event) => void;\n fieldIdPrefix?: string;\n slots?: CompanyFormSlots;\n}","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent, memo } from 'preact/compat';\nimport { Field, Input, Picker } from '@adobe-commerce/elsie/components';\nimport { classes, Slot } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { FormInputsProps, FieldsProps, FieldTypeEnum } from '../../../../types/form.types';\n\nexport const FormInputs: FunctionComponent<FormInputsProps> = memo(({\n loading,\n values = {},\n fields,\n errors = {},\n className = '',\n regionOptions,\n countryOptions,\n onChange,\n onBlur,\n onFocus,\n slots,\n fieldIdPrefix,\n}) => {\n const itemClassName = `${className}__field`;\n\n const translations = useText({\n selectCountry: 'Company.FormText.selectCountry',\n selectRegion: 'Company.FormText.selectRegion',\n selectCountryFirst: 'Company.FormText.selectCountryFirst',\n country: 'Company.shared.fields.country',\n stateProvince: 'Company.shared.fields.stateProvince',\n 'Company.Registration.companyInformation': 'Company.shared.fields.companyInformation',\n 'Company.Registration.legalAddress': 'Company.shared.fields.legalAddress', \n 'Company.Registration.companyAdmin': 'Company.shared.fields.companyAdmin',\n });\n\n // Define field sections for organizing form\n const fieldSections = {\n CompanyInformationSection: ['companyName', 'legalName', 'companyEmail', 'vatTaxId', 'resellerId'],\n LegalAddressSection: ['street', 'streetLine2', 'city', 'countryCode', 'region', 'postcode', 'addressTelephone'],\n CompanyAdministratorSection: ['adminEmail', 'adminFirstname', 'adminLastname', 'adminJobTitle', 'adminWorkTelephone', 'adminGender']\n };\n\n const getSectionTitle = (sectionKey: string) => {\n const titles = {\n CompanyInformationSection: 'Company.Registration.companyInformation',\n LegalAddressSection: 'Company.Registration.legalAddress', \n CompanyAdministratorSection: 'Company.Registration.companyAdmin'\n };\n return titles[sectionKey as keyof typeof titles];\n };\n\n // Format region value for SELECT fields using \"regionCode,regionId\" format\n const formatRegionValue = (item: FieldsProps) => {\n if ((item.code === 'region' || item.code === 'regionCode') && item.fieldType === FieldTypeEnum.SELECT) {\n const regionCode = values['regionCode']?.toString() || '';\n const regionId = values['regionId']?.toString() || '';\n if (regionCode && regionId) {\n return `${regionCode},${regionId}`;\n }\n if (values[item.code]?.toString().includes(',')) {\n // If region value is already in \"code,id\" format, use it\n return values[item.code]?.toString();\n }\n return '';\n }\n return null;\n };\n\n // Format street value handling array mapping for street and streetLine2 fields\n const formatStreetValue = (item: FieldsProps) => {\n if (item.code === 'street') {\n return Array.isArray(values.street) ? (values.street[0] || '') : (values.street?.toString() || '');\n } else if (item.code === 'streetLine2') {\n return Array.isArray(values.street) ? (values.street[1] || '') : '';\n }\n return null;\n };\n\n\n // Render slot function for individual fields\n const renderSlot = (item: FieldsProps, errorMessage?: string) => {\n const slotName = `CompanyFormInput_${item.code}`;\n const slot = slots?.[slotName];\n if (!slot) return null;\n\n const contextValue = {\n inputName: item.code,\n handleOnChange: onChange || (() => {}),\n errorMessage,\n errors: Object.values(errors),\n formData: values,\n fieldConfig: {\n required: item.required,\n disabled: item.disabled || loading,\n placeholder: item.placeholder || item.label,\n label: item.label,\n },\n };\n return (\n <Slot\n data-testid={`companyFormInput_${item.code}`}\n name={slotName}\n slot={slot}\n context={contextValue}\n />\n );\n };\n\n // Select/Picker element renderer\n const selectElement = (item: FieldsProps, valueMessage: string, errorMessage: string) => {\n let options = item.options;\n \n // Special handling for country and region fields\n if (item.code === 'countryCode' || item.code === 'country_code') {\n options = countryOptions?.map(country => ({\n value: country.value,\n text: country.text,\n isDefault: false,\n })) || [];\n } else if (item.code === 'region' || item.code === 'regionCode') {\n options = regionOptions?.map(option => ({ \n text: option.text, \n value: option.value, \n isDefault: false \n })) || [];\n }\n\n return (\n <>\n {renderSlot(item, errorMessage) ?? (\n <Field\n key={item.id}\n error={errorMessage}\n className={classes([\n itemClassName,\n `${itemClassName}--${item.id}`,\n [`${itemClassName}--${item.id}-hidden`, item.isHidden],\n item.className,\n ])}\n data-testid={`${className}--${item.id}`}\n disabled={loading}\n >\n <Picker\n aria-label={item.label}\n aria-required={item.required ? 'true' : 'false'}\n id={fieldIdPrefix ? `${fieldIdPrefix}_${item.code}` : item.code}\n required={item?.required}\n name={item.customUpperCode || item.code}\n placeholder={item.label}\n options={options}\n onBlur={onBlur}\n onFocus={onFocus}\n handleSelect={onChange}\n defaultValue={valueMessage}\n value={valueMessage}\n />\n </Field>\n )}\n </>\n );\n };\n\n // Input element renderer\n const inputElement = (item: FieldsProps, valueMessage: string, errorMessage: string) => {\n let inputType = 'text';\n \n if (item.fieldType === FieldTypeEnum.EMAIL) {\n inputType = 'email';\n } else if (item.fieldType === FieldTypeEnum.TEL) {\n inputType = 'tel';\n }\n\n return (\n <>\n {renderSlot(item, errorMessage) ?? (\n <Field\n key={item.id}\n error={errorMessage}\n className={classes([\n itemClassName,\n `${itemClassName}--${item.id}`,\n [`${itemClassName}--${item.id}-hidden`, item.isHidden],\n item.className,\n ])}\n data-testid={`${className}--${item.id}`}\n disabled={loading}\n >\n <Input\n aria-label={item.label}\n aria-required={item.required ? 'true' : 'false'}\n id={fieldIdPrefix ? `${fieldIdPrefix}_${item.code}` : item.code}\n type={inputType}\n name={item.customUpperCode}\n value={valueMessage ?? item.defaultValue}\n placeholder={item.label}\n floatingLabel={`${item.label} ${item.required ? '*' : ''}`}\n maxLength={item.maxlength}\n onBlur={onBlur}\n onFocus={onFocus}\n onChange={onChange}\n />\n </Field>\n \n )}\n </>\n );\n };\n\n\n\n // Render fields for a specific section\n const renderSectionFields = (sectionFields: string[]) => {\n return fields\n ?.filter(field => sectionFields.includes(field.code) && !field.isHidden)\n .map(item => {\n // Render the field\n let valueMessage = values[item.code]?.toString() || '';\n \n // Special handling for street fields - street array mapping\n const streetValue = formatStreetValue(item);\n if (streetValue !== null) {\n valueMessage = streetValue;\n }\n \n // Special handling for region field - use \"regionCode,regionId\" format for Picker\n const regionValue = formatRegionValue(item);\n if (regionValue !== null) {\n valueMessage = regionValue;\n }\n \n const errorMessage = errors[item.customUpperCode || item.code] || '';\n\n // For region field, respect the fieldType (which changes based on hasRegions)\n if (item.code === 'region' || item.code === 'regionCode') {\n if (item.fieldType === FieldTypeEnum.SELECT) {\n return selectElement(item, valueMessage, errorMessage);\n }\n return inputElement(item, valueMessage, errorMessage);\n }\n if (item.fieldType === FieldTypeEnum.SELECT || item.options?.length > 0) {\n return selectElement(item, valueMessage, errorMessage);\n }\n return inputElement(item, valueMessage, errorMessage);\n });\n };\n\n // Render individual section \n const renderSection = (sectionKey: keyof typeof fieldSections) => {\n const sectionFields = fieldSections[sectionKey];\n const sectionTitle = getSectionTitle(sectionKey);\n \n // Check if section has any visible fields\n const hasVisibleFields = fields?.some(field => \n sectionFields.includes(field.code) && !field.isHidden\n );\n \n if (!hasVisibleFields) return null;\n \n // Render section with title and fields\n return (\n <div key={`section-${sectionKey}`} className={`${className}__section`}>\n <h3 className={`${className}__section-title`}>{translations[sectionTitle]}</h3>\n {renderSectionFields(sectionFields)}\n </div>\n );\n };\n\n return (\n <div className={`${className}__inputs`}>\n {renderSection('CompanyInformationSection')}\n {renderSection('LegalAddressSection')}\n {renderSection('CompanyAdministratorSection')}\n </div>\n );\n});","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { useRef } from 'preact/hooks';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { FormProps } from '../../../types/form.types';\nimport { FormInputs } from './FormInputs/FormInputs';\nimport './Form.css';\n\nexport const Form: FunctionComponent<FormProps> = ({\n showFormLoader,\n slots,\n name = 'companyForm',\n loading,\n children,\n className = 'company-form',\n fieldsConfig = [],\n values = {},\n errors = {},\n onSubmit,\n onChange,\n onBlur,\n regionOptions,\n countryOptions,\n fieldIdPrefix,\n}) => {\n const formRef = useRef<HTMLFormElement>(null);\n\n\n\n const handleSubmit = async (event: SubmitEvent) => {\n event.preventDefault();\n \n if (onSubmit) {\n await onSubmit(event, true);\n }\n };\n\n if (showFormLoader || loading) {\n return (\n <div className={classes(['dropin-form-loader', 'company-form-loader'])}>\n Loading...\n </div>\n );\n }\n\n const handleChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const { name, value } = target;\n \n if (onChange) {\n onChange({ [name]: value });\n }\n };\n\n return (\n <form\n id={name}\n ref={formRef}\n className={classes(['company-form', className])}\n onSubmit={handleSubmit}\n noValidate\n >\n <FormInputs\n className={className}\n fields={fieldsConfig}\n values={values}\n errors={errors}\n onChange={handleChange}\n onBlur={onBlur}\n slots={slots}\n regionOptions={regionOptions}\n countryOptions={countryOptions}\n fieldIdPrefix={fieldIdPrefix}\n />\n {children}\n </form>\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 { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\nimport { getCountries } from '@/company-management/api/getCountries';\nimport { Country } from '@/company-management/data/models/country';\nimport { CompanyFormData } from '@/company-management/data/models/company';\n\ninterface CountriesData {\n availableCountries: Country[];\n countriesWithRequiredRegion: string[];\n optionalZipCountries: string[];\n}\n\ninterface UseCountryAndRegionFieldsOptions {\n defaultCountry?: string;\n formName?: string;\n}\n\nexport const useCountryAndRegionFields = (options: UseCountryAndRegionFieldsOptions = {}) => {\n const { defaultCountry = 'US', formName = 'company_registration' } = options;\n const [countriesData, setCountriesData] = useState<CountriesData | null>(null);\n const [inputChange, setInputChange] = useState<Partial<CompanyFormData>>(() => {\n // Check session storage first, like storefront-account does\n try {\n const savedData = sessionStorage.getItem(`${formName}_formData`);\n return savedData\n ? { countryCode: JSON.parse(savedData)?.countryCode }\n : { countryCode: defaultCountry };\n } catch (error) {\n // If parsing fails, fall back to default country\n return { countryCode: defaultCountry };\n }\n });\n const [disableField, setDisableField] = useState(true);\n const [loadingCountries, setLoadingCountries] = useState(true);\n const [regionsData, setRegionsData] = useState<any[]>([]);\n\n useEffect(() => {\n setDisableField(true);\n setLoadingCountries(true);\n getCountries().then(({\n availableCountries,\n countriesWithRequiredRegion,\n optionalZipCountries,\n }) => {\n setCountriesData({\n availableCountries,\n countriesWithRequiredRegion,\n optionalZipCountries,\n });\n setDisableField(false);\n setLoadingCountries(false);\n }).catch((error) => {\n console.error('Failed to load countries:', error);\n setDisableField(false);\n setLoadingCountries(false);\n });\n }, []);\n\n // Load regions when country changes (matching EditCompanyProfile pattern)\n useEffect(() => {\n if (inputChange?.countryCode && countriesData) {\n const selectedCountry = countriesData.availableCountries.find(\n country => country.value === inputChange.countryCode\n );\n \n if (selectedCountry?.availableRegions && selectedCountry.availableRegions.length > 0) {\n const regions = selectedCountry.availableRegions.map((region: { id: number; code: string; name: string }) => ({\n text: region.name,\n value: `${region.code},${region.id}`,\n id: region.id,\n code: region.code,\n }));\n setRegionsData(regions);\n } else {\n setRegionsData([]);\n }\n } else {\n setRegionsData([]);\n }\n }, [inputChange?.countryCode, countriesData]);\n\n const countryOptions = useMemo(() => {\n return countriesData?.availableCountries || [];\n }, [countriesData]);\n\n const isRequiredRegion = useMemo(() => {\n if (!inputChange?.countryCode || !countriesData) return false;\n return countriesData.countriesWithRequiredRegion.includes(inputChange.countryCode as string);\n }, [inputChange?.countryCode, countriesData]);\n\n const isRequiredPostCode = useMemo(() => {\n if (!inputChange?.countryCode || !countriesData) return true;\n return !countriesData.optionalZipCountries.includes(inputChange.countryCode as string);\n }, [inputChange?.countryCode, countriesData]);\n\n // Memoized options for region dropdown (matching EditCompanyProfile pattern)\n const regionOptions = useMemo(() => {\n return regionsData;\n }, [regionsData]);\n\n // Check if region should be a dropdown (has options) or text input (no options)\n const hasRegions = useMemo(() => {\n return regionOptions.length > 0;\n }, [regionOptions.length]);\n\n const handleInputChange = useCallback((field: keyof CompanyFormData, value: string | string[]) => {\n setInputChange(prev => {\n const updatedData = {\n ...prev,\n [field]: value,\n };\n\n // When country changes, clear region data (matching EditCompanyProfile pattern)\n if (field === 'countryCode') {\n updatedData.regionCode = '';\n updatedData.regionId = undefined;\n }\n\n return updatedData;\n });\n }, []);\n\n return {\n countryOptions,\n regionOptions,\n isRequiredRegion,\n isRequiredPostCode,\n disableField,\n loadingCountries,\n hasRegions,\n handleInputChange,\n inputChange,\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 { FieldsProps, FieldTypeEnum } from '../../../types/form.types';\nimport { CompanyFormData } from '../../../data/models/company';\n\nexport interface CompanyFieldsConfigOptions {\n formData?: Partial<CompanyFormData>;\n isRequiredRegion?: boolean;\n isRequiredPostCode?: boolean;\n hasRegions?: boolean;\n disableField?: boolean;\n translations: Record<string, string>;\n}\n\nexport const getCompanyFieldsConfig = (\n options: CompanyFieldsConfigOptions\n): FieldsProps[] => {\n const { \n formData, \n isRequiredRegion = false, \n isRequiredPostCode = false, \n hasRegions = false, \n disableField = false,\n translations = {}\n } = options;\n \n // Helper function to get translated label\n const getLabel = (key: string) => {\n return translations?.[key] || key;\n };\n\n // Helper function to get translated placeholder using existing field labels\n const getPlaceholder = (key: string) => {\n const label = getLabel(key);\n \n // Create placeholder text from label\n if (key === 'countryCode' || key === 'region' || key === 'adminGender') {\n return `Select ${label.toLowerCase()}`;\n }\n return `Enter ${label.toLowerCase()}`;\n };\n\n // Common configuration for all fields\n const commonConfig = {\n isRequiredRegion,\n isRequiredPostCode,\n };\n \n return [\n // Company Information Section\n {\n code: 'companyName',\n name: 'companyName',\n id: 'companyName',\n label: getLabel('companyName'),\n placeholder: getPlaceholder('companyName'),\n required: true,\n fieldType: FieldTypeEnum.TEXT,\n isHidden: false,\n customUpperCode: 'companyName',\n defaultValue: formData?.companyName || '',\n options: [],\n maxlength: 40,\n ...commonConfig,\n validateRules: [],\n },\n {\n code: 'legalName',\n name: 'legalName',\n id: 'legalName',\n label: getLabel('legalName'),\n placeholder: getPlaceholder('legalName'),\n required: false,\n fieldType: FieldTypeEnum.TEXT,\n isHidden: false,\n customUpperCode: 'legalName',\n defaultValue: formData?.legalName || '',\n options: [],\n maxlength: 80,\n validateRules: [],\n ...commonConfig\n },\n {\n code: 'companyEmail',\n name: 'companyEmail',\n id: 'companyEmail',\n label: getLabel('companyEmail'),\n placeholder: getPlaceholder('companyEmail'),\n required: true,\n fieldType: FieldTypeEnum.EMAIL,\n isHidden: false,\n customUpperCode: 'companyEmail',\n defaultValue: formData?.companyEmail || '',\n options: [],\n maxlength: 254,\n validateRules: [\n { INPUT_VALIDATION: 'email' },\n { MIN_TEXT_LENGTH: 5 },\n { MAX_TEXT_LENGTH: 254 }\n ],\n ...commonConfig,\n },\n {\n code: 'vatTaxId',\n name: 'vatTaxId',\n id: 'vatTaxId',\n label: getLabel('vatTaxId'),\n placeholder: getPlaceholder('vatTaxId'),\n required: false,\n fieldType: FieldTypeEnum.TEXT,\n isHidden: false,\n customUpperCode: 'vatTaxId',\n defaultValue: formData?.vatTaxId || '',\n options: [],\n maxlength: 40,\n validateRules: [],\n ...commonConfig,\n },\n {\n code: 'resellerId',\n name: 'resellerId',\n id: 'resellerId',\n label: getLabel('resellerId'),\n placeholder: getPlaceholder('resellerId'),\n required: false,\n fieldType: FieldTypeEnum.TEXT,\n isHidden: false,\n customUpperCode: 'resellerId',\n defaultValue: formData?.resellerId || '',\n options: [],\n maxlength: 40,\n validateRules: [],\n ...commonConfig,\n },\n\n // Legal Address Section\n {\n code: 'street',\n name: 'street',\n id: 'street',\n label: getLabel('street'),\n placeholder: getPlaceholder('street'),\n required: true,\n fieldType: FieldTypeEnum.TEXT,\n isHidden: false,\n customUpperCode: 'street',\n defaultValue: Array.isArray(formData?.street) ? formData.street[0] : formData?.street || '',\n options: [],\n validateRules: [],\n ...commonConfig,\n },\n {\n code: 'streetLine2',\n name: 'streetLine2',\n id: 'streetLine2',\n label: getLabel('streetLine2'),\n placeholder: getPlaceholder('streetLine2'),\n required: false,\n fieldType: FieldTypeEnum.TEXT,\n isHidden: false,\n customUpperCode: 'streetLine2',\n defaultValue: Array.isArray(formData?.street) ? formData.street[1] : '',\n options: [],\n validateRules: [],\n ...commonConfig,\n },\n {\n code: 'city',\n name: 'city',\n id: 'city',\n label: getLabel('city'),\n placeholder: getPlaceholder('city'),\n required: true,\n fieldType: FieldTypeEnum.TEXT,\n isHidden: false,\n customUpperCode: 'city',\n defaultValue: formData?.city || '',\n options: [],\n validateRules: [],\n ...commonConfig,\n },\n {\n code: 'countryCode',\n name: 'countryCode',\n id: 'countryCode',\n label: getLabel('country'),\n placeholder: getPlaceholder('country'),\n required: true,\n disabled: disableField,\n fieldType: FieldTypeEnum.SELECT,\n isHidden: false,\n customUpperCode: 'countryCode',\n defaultValue: formData?.countryCode || '',\n options: [], \n validateRules: [],\n },\n {\n code: 'region',\n name: 'region',\n id: 'region',\n label: getLabel('stateProvince'),\n placeholder: getPlaceholder('stateProvince'),\n required: isRequiredRegion,\n disabled: false, \n fieldType: hasRegions ? FieldTypeEnum.SELECT : FieldTypeEnum.TEXT,\n isHidden: false,\n customUpperCode: 'region',\n defaultValue: formData?.regionCode || '',\n options: [], \n },\n {\n code: 'postcode',\n name: 'postcode',\n id: 'postcode',\n label: getLabel('postalCode'),\n placeholder: getPlaceholder('postalCode'),\n required: isRequiredPostCode,\n fieldType: FieldTypeEnum.TEXT,\n isHidden: false,\n customUpperCode: 'postcode',\n defaultValue: formData?.postcode || '',\n options: [],\n validateRules: [\n { INPUT_VALIDATION: 'postal-code' },\n { MIN_TEXT_LENGTH: 3 },\n { MAX_TEXT_LENGTH: 20 }\n ],\n ...commonConfig,\n },\n {\n code: 'addressTelephone',\n name: 'addressTelephone',\n id: 'addressTelephone',\n label: getLabel('telephone'),\n placeholder: getPlaceholder('telephone'),\n required: true,\n fieldType: FieldTypeEnum.TEL,\n isHidden: false,\n customUpperCode: 'addressTelephone',\n defaultValue: formData?.addressTelephone || '',\n options: [],\n validateRules: [\n { INPUT_VALIDATION: 'phone' },\n { MIN_TEXT_LENGTH: 1 },\n { MAX_TEXT_LENGTH: 20 }\n ],\n ...commonConfig,\n },\n\n // Administrator Section\n {\n code: 'adminJobTitle',\n name: 'adminJobTitle',\n id: 'adminJobTitle',\n label: getLabel('adminJobTitle'),\n placeholder: getPlaceholder('adminJobTitle'),\n required: false,\n fieldType: FieldTypeEnum.TEXT,\n isHidden: false,\n customUpperCode: 'adminJobTitle',\n defaultValue: formData?.adminJobTitle || '',\n options: [],\n validateRules: [],\n ...commonConfig,\n },\n {\n code: 'adminWorkTelephone',\n name: 'adminWorkTelephone',\n id: 'adminWorkTelephone',\n label: getLabel('adminWorkTelephone'),\n placeholder: getPlaceholder('adminWorkTelephone'),\n required: false,\n fieldType: FieldTypeEnum.TEL,\n isHidden: false,\n customUpperCode: 'adminWorkTelephone',\n defaultValue: formData?.adminWorkTelephone || '',\n options: [],\n validateRules: [\n { INPUT_VALIDATION: 'phone' },\n { MIN_TEXT_LENGTH: 1 },\n { MAX_TEXT_LENGTH: 20 }\n ],\n ...commonConfig,\n },\n {\n code: 'adminEmail',\n name: 'adminEmail',\n id: 'adminEmail',\n label: getLabel('adminEmail'),\n placeholder: getPlaceholder('adminEmail'),\n required: true,\n fieldType: FieldTypeEnum.EMAIL,\n isHidden: false,\n customUpperCode: 'adminEmail',\n defaultValue: formData?.adminEmail || '',\n options: [],\n validateRules: [\n { INPUT_VALIDATION: 'email' },\n { MIN_TEXT_LENGTH: 5 },\n { MAX_TEXT_LENGTH: 254 }\n ],\n ...commonConfig,\n },\n {\n code: 'adminFirstname',\n name: 'adminFirstname',\n id: 'adminFirstname',\n label: getLabel('adminFirstname'),\n placeholder: getPlaceholder('adminFirstname'),\n required: true,\n fieldType: FieldTypeEnum.TEXT,\n isHidden: false,\n customUpperCode: 'adminFirstname',\n defaultValue: formData?.adminFirstname || '',\n options: [],\n validateRules: [\n { INPUT_VALIDATION: 'name' },\n { MIN_TEXT_LENGTH: 1 },\n { MAX_TEXT_LENGTH: 255 }\n ],\n ...commonConfig,\n },\n {\n code: 'adminLastname',\n name: 'adminLastname',\n id: 'adminLastname',\n label: getLabel('adminLastname'),\n placeholder: getPlaceholder('adminLastname'),\n required: true,\n fieldType: FieldTypeEnum.TEXT,\n isHidden: false,\n customUpperCode: 'adminLastname',\n defaultValue: formData?.adminLastname || '',\n options: [],\n validateRules: [\n { INPUT_VALIDATION: 'name' },\n { MIN_TEXT_LENGTH: 1 },\n { MAX_TEXT_LENGTH: 255 }\n ],\n ...commonConfig,\n },\n {\n code: 'adminGender',\n name: 'adminGender',\n id: 'adminGender',\n label: getLabel('adminGender'),\n placeholder: getPlaceholder('adminGender'),\n required: false,\n fieldType: FieldTypeEnum.SELECT,\n isHidden: false,\n customUpperCode: 'adminGender',\n defaultValue: formData?.adminGender?.toString() || '',\n options: [\n { value: '1', text: 'Male', isDefault: true },\n { value: '2', text: 'Female', isDefault: false },\n { value: '0', text: 'Not Specified', isDefault: false },\n ],\n validateRules: [],\n ...commonConfig,\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\ntype ErrorsList = Record<string, string>;\n\nexport type ValidationFieldsConfig = {\n validateRules?: Record<string, string | number | boolean>[];\n code?: string;\n customUpperCode: string;\n required: boolean;\n};\n\nexport type TranslationList = {\n requiredFieldError: string;\n lengthTextError: string;\n numericError: string;\n alphaNumWithSpacesError: string;\n alphaNumericError: string;\n alphaError: string;\n emailError: string;\n phoneError: string;\n postalCodeError: string;\n urlError: string;\n nameError: string;\n};\n\nenum ConfigEnumLength {\n MIN_TEXT_LENGTH = 'MIN_TEXT_LENGTH',\n MAX_TEXT_LENGTH = 'MAX_TEXT_LENGTH',\n}\n\nexport enum InputValidation {\n Numeric = 'numeric',\n AlphanumWithSpaces = 'alphanum-with-spaces',\n Alphanumeric = 'alphanumeric',\n Alpha = 'alpha',\n Email = 'email',\n Phone = 'phone',\n PostalCode = 'postal-code',\n Length = 'length',\n Url = 'url',\n Name = 'name',\n}\n\nconst flattenObjectsArray = (arr: Record<string, string | number | boolean>[]): Record<string, string | number | boolean> =>\n arr.reduce((acc, obj) => ({ ...acc, ...obj }), {});\n\nexport const validateNumeric = (value: string): boolean =>\n /^[0-9]+$/.test(value);\n\nexport const validateAlphanumeric = (value: string): boolean =>\n /^[a-zA-Z0-9]+$/.test(value);\n\nexport const validateAlphanumWithSpaces = (value: string): boolean =>\n /^[a-zA-Z0-9\\s]+$/.test(value);\n\nexport const validateAlpha = (value: string): boolean =>\n /^[a-zA-Z]+$/.test(value);\n\nexport const validateEmail = (value: string): boolean =>\n /^[a-z0-9,!#$%&'*+/=?^_`{|}~-]+(\\.[a-z0-9,!#$%&'*+/=?^_`{|}~-]+)*@([a-z0-9-]+\\.)+[a-z]{2,}$/i.test(\n value\n );\n\nexport const validatePhone = (value: string): boolean =>\n /(?:[\\d\\s+\\-()]{1,20})/u.test(value);\n\nexport const validateUrl = (value: string): boolean =>\n /^(https?|ftp):\\/\\/[^\\s/$.?#].[^\\s]*$/i.test(value);\n\nexport const validatePostalCode = (value: string): boolean => {\n return /^[A-Z0-9\\s-]{3,10}$/i.test(value);\n};\n\nexport const validateName = (value: string): boolean => {\n return /^(?:[\\p{L}\\p{M},\\-_.'`&\\s\\d]){1,255}$/u.test(value);\n};\n\nexport const validateLength = (\n value: string,\n minLength: number,\n maxLength: number\n): boolean => {\n const length = value.length;\n return length >= minLength && length <= maxLength;\n};\n\nexport const validationFields = (\n value: string,\n configs: ValidationFieldsConfig,\n translations: TranslationList,\n errorsList: ErrorsList\n) => {\n const {\n requiredFieldError,\n lengthTextError,\n numericError,\n alphaNumWithSpacesError,\n alphaNumericError,\n alphaError,\n emailError,\n phoneError,\n postalCodeError,\n urlError,\n nameError,\n } = translations;\n\n const fieldName = configs?.customUpperCode as string;\n const defaultFields = { [fieldName]: '' };\n\n if (errorsList[fieldName]) {\n delete errorsList[fieldName];\n }\n\n const trimmedValue = value?.trim() || '';\n \n if (configs?.required && (!trimmedValue || trimmedValue === 'false')) {\n return { [fieldName]: requiredFieldError };\n }\n\n if (!configs?.required && !trimmedValue) {\n return defaultFields;\n }\n\n if (!configs?.validateRules?.length) return defaultFields;\n\n const validateRulesConfig = flattenObjectsArray(configs?.validateRules);\n\n const min = Number(validateRulesConfig[ConfigEnumLength.MIN_TEXT_LENGTH]) ?? 1;\n const max = Number(validateRulesConfig[ConfigEnumLength.MAX_TEXT_LENGTH]) ?? 255;\n\n // Use trimmed value for length validation\n if (!validateLength(trimmedValue, min, max)) {\n return {\n [fieldName]: lengthTextError.replace('{min}', min.toString()).replace('{max}', max.toString()),\n };\n }\n\n const validationMap = {\n [InputValidation.Numeric]: {\n validate: validateNumeric,\n error: numericError,\n },\n [InputValidation.AlphanumWithSpaces]: {\n validate: validateAlphanumWithSpaces,\n error: alphaNumWithSpacesError,\n },\n [InputValidation.Alphanumeric]: {\n validate: validateAlphanumeric,\n error: alphaNumericError,\n },\n [InputValidation.Alpha]: {\n validate: validateAlpha,\n error: alphaError,\n },\n [InputValidation.Email]: {\n validate: validateEmail,\n error: emailError,\n },\n [InputValidation.Phone]: {\n validate: validatePhone,\n error: phoneError,\n },\n [InputValidation.PostalCode]: {\n validate: (value: string) => validatePostalCode(value), \n error: postalCodeError,\n },\n [InputValidation.Url]: {\n validate: validateUrl,\n error: urlError,\n },\n [InputValidation.Name]: {\n validate: validateName,\n error: nameError,\n },\n };\n\n const validation =\n validationMap[\n validateRulesConfig['INPUT_VALIDATION'] as keyof typeof validationMap\n ];\n\n if (\n validation &&\n !validation.validate(trimmedValue) &&\n !errorsList[fieldName]?.length\n ) {\n return { [fieldName]: validation.error };\n }\n\n return defaultFields;\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 { validationFields, ValidationFieldsConfig, TranslationList } from './fieldValidationRules';\nimport { FieldsProps } from '../../../types/form.types';\n\n// Extract validation-related translations from the complete translations object\nconst getValidationTranslations = (translations: any): TranslationList => ({\n requiredFieldError: translations.requiredFieldError,\n lengthTextError: translations.lengthTextError,\n numericError: translations.numericError,\n alphaNumWithSpacesError: translations.alphaNumWithSpacesError,\n alphaNumericError: translations.alphaNumericError,\n alphaError: translations.alphaError,\n emailError: translations.emailError,\n phoneError: translations.phoneError,\n postalCodeError: translations.postalCodeError,\n urlError: translations.urlError,\n nameError: translations.nameError,\n});\n\nexport type ValidationResult = {\n isValid: boolean;\n fieldErrors: Record<string, string>;\n};\n\nexport type FormValidationConfig = {\n fieldsConfig: FieldsProps[];\n translations: TranslationList;\n};\n\nconst createValidationConfig = (\n fieldsConfig: FieldsProps[],\n translations: any\n): FormValidationConfig => ({\n fieldsConfig,\n translations: getValidationTranslations(translations),\n});\n\nexport const validateField = (\n fieldCode: string,\n value: string | string[] | number | boolean,\n config: FormValidationConfig\n): string => {\n const { fieldsConfig, translations } = config;\n const fieldConfig = fieldsConfig.find(field => field.code === fieldCode);\n \n if (!fieldConfig) return '';\n\n const stringValue = Array.isArray(value) ? value.join('') : value.toString();\n \n const validationConfig: ValidationFieldsConfig = {\n validateRules: fieldConfig.validateRules || [],\n customUpperCode: fieldConfig.customUpperCode,\n required: fieldConfig.required,\n };\n\n const result = validationFields(\n stringValue,\n validationConfig,\n translations,\n {}\n );\n\n return result[fieldConfig.customUpperCode] || '';\n};\n\nexport const validateAllFields = (\n formData: Record<string, string | string[] | number | boolean>,\n config: FormValidationConfig\n): ValidationResult => {\n const { fieldsConfig, translations } = config;\n \n // Read the required flags from fieldsConfig (they are the same for all fields)\n const firstField = fieldsConfig[0];\n const isRequiredRegion = firstField?.isRequiredRegion || false;\n const isRequiredPostCode = firstField?.isRequiredPostCode || false;\n let hasErrors = false;\n const fieldErrors: Record<string, string> = {};\n\n // Validate all configured fields\n Object.entries(formData).forEach(([key, value]) => {\n const fieldConfig = fieldsConfig.find(field => field.code === key);\n if (!fieldConfig) return;\n\n const stringValue = Array.isArray(value) ? value.join('') : value.toString();\n \n const validationConfig: ValidationFieldsConfig = {\n validateRules: fieldConfig.validateRules,\n customUpperCode: fieldConfig.customUpperCode,\n required: fieldConfig.required,\n };\n\n const result = validationFields(\n stringValue,\n validationConfig,\n translations,\n {}\n );\n\n if (result[fieldConfig.customUpperCode]) {\n fieldErrors[fieldConfig.customUpperCode] = result[fieldConfig.customUpperCode];\n hasErrors = true;\n }\n });\n\n // Additional specific validation for dynamic requirements\n const hasRegionId = typeof formData.regionId === 'number' && formData.regionId > 0;\n const hasRegionCode = formData.regionCode && formData.regionCode.toString().trim();\n const hasRegion = formData.region && formData.region.toString().trim();\n \n if (isRequiredRegion && !hasRegionId && !hasRegionCode && !hasRegion) {\n fieldErrors.region = translations.requiredFieldError;\n hasErrors = true;\n }\n \n if (isRequiredPostCode && !formData.postcode.toString().trim()) {\n fieldErrors.postcode = translations.requiredFieldError;\n hasErrors = true;\n }\n\n return {\n isValid: !hasErrors,\n fieldErrors\n };\n};\n\nexport const updateFieldError = (\n currentErrors: Record<string, string>,\n fieldCode: string,\n errorMessage: string\n): Record<string, string> => {\n return {\n ...currentErrors,\n [fieldCode]: errorMessage\n };\n};\n\n// Convenience functions that handle config creation internally\nexport const validateSingleField = (\n fieldCode: string,\n value: string | string[] | number | boolean,\n fieldsConfig: FieldsProps[],\n translations: any\n): string => {\n const config = createValidationConfig(fieldsConfig, translations);\n return validateField(fieldCode, value, config);\n};\n\nexport const validateFormData = (\n formData: Record<string, string | string[] | number | boolean>,\n fieldsConfig: FieldsProps[],\n translations: any\n): ValidationResult => {\n const config = createValidationConfig(fieldsConfig, translations);\n return validateAllFields(formData, config);\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 React from 'react';\nimport { CompanyFormData } from '../../../data/models/company';\nimport { validateSingleField } from './formValidation';\nimport { FieldsProps } from '../../../types/form.types';\n\nexport type FieldChangeHandler = (key: string, value: string | string[] | number | boolean) => void;\nexport type ValidationHandler = (fieldCode: string, value: string | string[] | number | boolean) => void;\n\nexport interface FieldHandlersConfig {\n setFormData: React.Dispatch<React.SetStateAction<CompanyFormData>>;\n hasRegions: boolean;\n regionOptions: any[];\n fieldsConfig: FieldsProps[];\n formTranslations: any;\n setFieldErrors?: React.Dispatch<React.SetStateAction<Record<string, string>>>;\n}\n\nexport const createFieldHandlers = (config: FieldHandlersConfig) => {\n const { setFormData, hasRegions, regionOptions, fieldsConfig, formTranslations, setFieldErrors } = config;\n\n // Validation helper\n const validateField = (fieldCode: string, value: string | string[] | number | boolean) => {\n const errorMessage = validateSingleField(fieldCode, value, fieldsConfig, formTranslations);\n if (setFieldErrors && errorMessage) {\n setFieldErrors((prev: Record<string, string>) => ({\n ...prev,\n [fieldCode]: errorMessage\n }));\n } else if (setFieldErrors) {\n setFieldErrors((prev: Record<string, string>) => {\n const updated = { ...prev };\n delete updated[fieldCode];\n return updated;\n });\n }\n };\n\n const handleStreetChange = (value: string | string[]) => {\n setFormData(prev => {\n // Ensure prev.street is always treated as an array\n const currentStreet = Array.isArray(prev.street) ? prev.street : [prev.street || '', ''];\n const newStreet = Array.isArray(value) ? value : [value, currentStreet[1] || ''];\n return {\n ...prev,\n street: newStreet\n };\n });\n validateField('street', value);\n };\n\n const handleStreetLine2Change = (value: string) => {\n setFormData(prev => {\n // Ensure prev.street is always treated as an array\n const currentStreet = Array.isArray(prev.street) ? prev.street : [prev.street || '', ''];\n const newStreet = [currentStreet[0] || '', value];\n return {\n ...prev,\n street: newStreet\n };\n });\n validateField('streetLine2', value);\n };\n\n const handleRegionTextChange = (value: string) => {\n setFormData(prev => ({\n ...prev,\n region: value,\n regionCode: '',\n regionId: undefined\n }));\n validateField('region', value);\n };\n\n const handleRegionCodeChange = (value: string) => {\n setFormData(prev => ({\n ...prev,\n regionCode: value,\n ...(hasRegions ? {} : { regionId: undefined })\n }));\n validateField('regionCode', value);\n };\n\n const handleRegionDropdownChange = (value: string | number) => {\n const regionId = typeof value === 'string' ? parseInt(value, 10) || undefined : value;\n \n setFormData(prev => {\n const updated = { ...prev, regionId };\n \n // Find corresponding region code\n if (regionId && regionOptions.length > 0) {\n const selectedRegion = regionOptions.find((option: any) => \n option.id === regionId || option.value === regionId?.toString()\n );\n if (selectedRegion && selectedRegion.code) {\n updated.regionCode = selectedRegion.code;\n }\n }\n \n return updated;\n });\n validateField('regionId', value);\n };\n\n const handleCountryChange = (value: string) => {\n setFormData(prev => ({\n ...prev,\n countryCode: value,\n regionCode: '',\n regionId: undefined,\n region: ''\n }));\n validateField('countryCode', value);\n };\n\n const handleGenericFieldChange = (key: string, value: string | string[] | number | boolean) => {\n setFormData(prev => ({\n ...prev,\n [key]: value\n }));\n validateField(key, value);\n };\n\n // Main input change handler that delegates to specific handlers\n const handleInputChangeFromValues = (values: Record<string, string | string[] | number | boolean>) => {\n Object.entries(values).forEach(([key, value]) => {\n switch (key) {\n case 'street':\n handleStreetChange(value as string | string[]);\n break;\n case 'streetLine2':\n handleStreetLine2Change(value as string);\n break;\n case 'region':\n handleRegionTextChange(value as string);\n break;\n case 'regionCode':\n handleRegionCodeChange(value as string);\n break;\n case 'regionId':\n handleRegionDropdownChange(value as string | number);\n break;\n case 'countryCode':\n handleCountryChange(value as string);\n break;\n default:\n handleGenericFieldChange(key, value);\n break;\n }\n });\n };\n\n // DOM event handler that delegates to specific handlers\n const handleInputChange = (event: Event) => {\n const target = event.target as HTMLInputElement | HTMLSelectElement;\n if (!target) return;\n \n const { name, value } = target;\n \n switch (name) {\n case 'street':\n handleStreetChange(value);\n break;\n case 'streetLine2':\n handleStreetLine2Change(value);\n break;\n case 'region':\n if (hasRegions) {\n handleRegionDropdownChange(value);\n } else {\n handleRegionTextChange(value);\n }\n break;\n case 'regionCode':\n handleRegionCodeChange(value);\n break;\n case 'countryCode':\n handleCountryChange(value);\n break;\n default:\n handleGenericFieldChange(name, value);\n break;\n }\n };\n\n return {\n handleInputChange,\n handleInputChangeFromValues,\n handleStreetChange,\n handleStreetLine2Change,\n handleRegionTextChange,\n handleRegionCodeChange,\n handleRegionDropdownChange,\n handleCountryChange,\n handleGenericFieldChange,\n };\n};","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useState, useMemo, useEffect } from 'preact/hooks';\nimport { useText } from '@adobe-commerce/elsie/i18n';\n\nimport { createCompany } from '../api/createCompany/createCompany';\nimport { getStoreConfig } from '../api/getStoreConfig/getStoreConfig';\nimport { validateCompanyEmail } from '../api/validateCompanyEmail/validateCompanyEmail';\nimport { useCountryAndRegionFields } from './useCountryAndRegionFields';\nimport { getCompanyFieldsConfig } from '../components/CompanyRegistrationForm/Form/getCompanyFieldsConfig';\nimport { createFieldHandlers } from '../components/CompanyRegistrationForm/Form/fieldHandlers';\nimport { validateFormData, validateSingleField } from '../components/CompanyRegistrationForm/Form/formValidation';\n\nexport interface UseCompanyRegistrationFormProps {\n onSuccess?: (company: any) => void;\n onError?: (errors: string[]) => void;\n}\n\nexport interface UseCompanyRegistrationFormReturn {\n // Form state\n formValues: Record<string, string | number | boolean | string[]>;\n fieldErrors: Record<string, string>;\n isSubmitting: boolean;\n loadingStoreConfig: boolean;\n \n // Form configuration\n fieldsConfig: any[];\n \n // From useCountryAndRegionFields\n countryOptions: any[];\n regionOptions: any[];\n loadingCountries: boolean;\n \n // Form handlers\n handleInputChange: (values: Record<string, string | string[] | number | boolean>) => void;\n handleBlur: (event: Event) => void;\n handleFormSubmit: (event: SubmitEvent, isValid: boolean) => Promise<void>;\n \n // Translations\n translations: Record<string, string>;\n formTranslations: Record<string, string>;\n}\n\nexport const useCompanyRegistrationForm = ({\n onSuccess,\n onError,\n}: UseCompanyRegistrationFormProps): UseCompanyRegistrationFormReturn => {\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [fieldErrors, setFieldErrors] = useState<Record<string, string>>({});\n const [defaultCountry, setDefaultCountry] = useState('US');\n const [loadingStoreConfig, setLoadingStoreConfig] = useState(true);\n\n const {\n countryOptions,\n regionOptions,\n isRequiredRegion,\n isRequiredPostCode,\n hasRegions,\n loadingCountries,\n disableField,\n handleInputChange: handleCompanyFormChange,\n } = useCountryAndRegionFields({\n defaultCountry,\n formName: 'companyRegistration',\n });\n\n const [formValues, setFormValues] = useState<Record<string, string | number | boolean | string[]>>({\n countryCode: defaultCountry,\n region: '',\n regionCode: '',\n regionId: '',\n street: ['', ''],\n });\n\n\n // Fetch store config to get default country\n useEffect(() => {\n const fetchStoreConfig = async () => {\n try {\n setLoadingStoreConfig(true);\n const storeConfig = await getStoreConfig();\n const country = storeConfig.defaultCountry || 'US';\n setDefaultCountry(country);\n setFormValues(prev => ({ ...prev, countryCode: country }));\n } catch (error) {\n console.error('Failed to load store config:', error);\n // Keep default fallback country 'US'\n } finally {\n setLoadingStoreConfig(false);\n }\n };\n\n fetchStoreConfig();\n }, []);\n\n // Initialize the hook with default country when component mounts\n useEffect(() => {\n if (defaultCountry && !loadingStoreConfig) {\n handleCompanyFormChange('countryCode', defaultCountry);\n }\n }, [defaultCountry, handleCompanyFormChange, loadingStoreConfig]);\n\n const formTranslations = useText({\n requiredFieldError: 'Company.shared.validation.required',\n lengthTextError: 'Company.FormText.lengthTextError',\n numericError: 'Company.FormText.numericError',\n alphaNumWithSpacesError: 'Company.FormText.alphaNumWithSpacesError',\n alphaNumericError: 'Company.FormText.alphaNumericError',\n alphaError: 'Company.FormText.alphaError',\n emailError: 'Company.shared.validation.invalidEmail',\n phoneError: 'Company.shared.validation.phoneInvalid',\n postalCodeError: 'Company.shared.validation.postalCodeInvalid',\n urlError: 'Company.FormText.urlError',\n nameError: 'Company.FormText.nameError',\n });\n\n const translations = useText({\n title: 'Company.shared.fields.title',\n submitButton: 'Company.shared.fields.submit',\n submittingButton: 'Company.shared.fields.submitting',\n cancelButton: 'Company.shared.buttons.cancel',\n createCompanyError: 'Company.shared.fields.createCompanyError',\n unexpectedError: 'Company.shared.fields.unexpectedError',\n emailNotAvailable: 'Company.shared.validation.emailNotAvailable',\n // Field labels for placeholder generation\n companyName: 'Company.shared.fields.companyName',\n legalName: 'Company.shared.fields.legalName',\n companyEmail: 'Company.shared.fields.companyEmail',\n vatTaxId: 'Company.shared.fields.vatTaxId',\n resellerId: 'Company.shared.fields.resellerId',\n street: 'Company.shared.fields.street',\n streetLine2: 'Company.shared.fields.streetLine2',\n city: 'Company.shared.fields.city',\n country: 'Company.shared.fields.country',\n stateProvince: 'Company.shared.fields.stateProvince',\n postalCode: 'Company.shared.fields.postalCode',\n telephone: 'Company.shared.fields.telephone',\n adminJobTitle: 'Company.shared.fields.adminJobTitle',\n adminWorkTelephone: 'Company.shared.fields.adminWorkTelephone',\n adminEmail: 'Company.shared.fields.adminEmail',\n adminFirstname: 'Company.shared.fields.adminFirstname',\n adminLastname: 'Company.shared.fields.adminLastname',\n adminGender: 'Company.shared.fields.adminGender',\n });\n\n // Generate fields config\n const fieldsConfig = useMemo(() => {\n const config = getCompanyFieldsConfig({\n formData: {\n countryCode: formValues.countryCode as string,\n regionCode: formValues.regionCode as string,\n regionId: formValues.regionId as number,\n },\n isRequiredRegion,\n isRequiredPostCode,\n hasRegions,\n disableField,\n translations,\n });\n \n return config.map((field: any) => {\n if (field.code === 'region') {\n return {\n ...field,\n required: isRequiredRegion,\n disabled: loadingCountries,\n fieldType: hasRegions ? 'SELECT' : 'TEXT',\n options: hasRegions ? regionOptions.map(region => ({\n text: region.text,\n value: region.value,\n isDefault: false,\n })) : [],\n };\n }\n if (field.code === 'postcode') {\n return {\n ...field,\n required: isRequiredPostCode,\n };\n }\n if (field.code === 'countryCode') {\n return {\n ...field,\n disabled: disableField || loadingCountries,\n options: countryOptions.map(country => ({\n text: country.text,\n value: country.value,\n isDefault: false,\n })),\n };\n }\n return field;\n });\n }, [isRequiredRegion, isRequiredPostCode, hasRegions, loadingCountries, disableField, countryOptions, regionOptions, formValues.countryCode, formValues.regionCode, formValues.regionId, translations]);\n\n const validateForm = (formData: any): boolean => {\n const validation = validateFormData(formData, fieldsConfig, formTranslations);\n setFieldErrors(validation.fieldErrors);\n \n return validation.isValid;\n };\n\n // Create field handlers\n const fieldHandlers = useMemo(() => createFieldHandlers({\n setFormData: setFormValues as any,\n hasRegions,\n regionOptions,\n fieldsConfig,\n formTranslations,\n setFieldErrors,\n }), [hasRegions, regionOptions, fieldsConfig, formTranslations]);\n\n const handleInputChange = (values: Record<string, string | string[] | number | boolean>) => {\n // Use the field handlers to process the values\n fieldHandlers.handleInputChangeFromValues(values);\n \n // Handle special cases that need additional processing\n Object.entries(values).forEach(([key, value]) => {\n if (key === 'countryCode') {\n handleCompanyFormChange('countryCode', value as string);\n }\n });\n };\n\n const handleBlur = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const { name, value } = target;\n \n // Find the field configuration\n const fieldConfig = fieldsConfig.find(field => field.customUpperCode === name);\n \n if (fieldConfig) {\n // Validate this specific field using field code\n const validation = validateSingleField(fieldConfig.code, value, fieldsConfig, formTranslations);\n \n // Update field errors - clear if valid, set if invalid\n setFieldErrors(prev => ({\n ...prev,\n [name]: validation || ''\n }));\n }\n };\n\n const handleFormSubmit = async (event: SubmitEvent, isValid: boolean) => {\n // Get form data from the form\n const formElement = event.target as HTMLFormElement;\n const formData = new FormData(formElement);\n const rawFormValues: Record<string, any> = {};\n \n for (const [key, value] of formData.entries()) {\n rawFormValues[key] = value;\n }\n\n const finalFormValues = {\n ...rawFormValues,\n ...formValues \n };\n\n const formIsValid = validateForm(finalFormValues);\n \n if (!isValid || !formIsValid) {\n return;\n }\n\n setIsSubmitting(true);\n\n try {\n // Validate company email availability before creating the company\n const emailValidation = await validateCompanyEmail(finalFormValues.companyEmail as string);\n if (!emailValidation.isValid) {\n setFieldErrors(prev => ({\n ...prev,\n companyEmail: emailValidation.error || translations.emailNotAvailable,\n }));\n setIsSubmitting(false);\n return;\n }\n const result = await createCompany(finalFormValues);\n \n if (result.success && result.company) {\n onSuccess?.(result.company);\n } else {\n const errorMessages = result.errors || [translations.createCompanyError];\n onError?.(errorMessages);\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : translations.unexpectedError;\n onError?.([errorMessage]);\n } finally {\n setIsSubmitting(false);\n }\n };\n\n return {\n // Form state\n formValues,\n fieldErrors,\n isSubmitting,\n loadingStoreConfig,\n \n // Form configuration\n fieldsConfig,\n \n // From useCountryAndRegionFields\n countryOptions,\n regionOptions,\n loadingCountries,\n \n // Form handlers\n handleInputChange,\n handleBlur,\n handleFormSubmit,\n \n // Translations\n translations,\n formTranslations,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { Button } from '@adobe-commerce/elsie/components';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { Form } from './Form/Form';\nimport { CompanyFormSlots } from '../../types/form.types';\nimport { Company } from '../../data/models/company';\nimport { useCompanyRegistrationForm } from '../../hooks/useCompanyRegistrationForm';\nimport '@adobe-commerce/storefront-design/dist/css/base.css';\nimport './CompanyRegistrationForm.css';\n\nexport interface CompanyRegistrationFormProps {\n onSuccess?: (company: Company) => void;\n onError?: (errors: string[]) => void;\n className?: string;\n slots?: CompanyFormSlots;\n hideActionFormButtons?: boolean;\n}\n\nexport const CompanyRegistrationForm: FunctionComponent<CompanyRegistrationFormProps> = ({\n onSuccess,\n onError,\n className = '',\n slots,\n hideActionFormButtons = false,\n}) => {\n const {\n // Form state\n formValues,\n fieldErrors,\n isSubmitting,\n loadingStoreConfig,\n \n // Form configuration\n fieldsConfig,\n \n // From useCountryAndRegionFields\n countryOptions,\n regionOptions,\n loadingCountries,\n \n // Form handlers\n handleInputChange,\n handleBlur,\n handleFormSubmit,\n \n // Translations\n translations,\n } = useCompanyRegistrationForm({\n onSuccess,\n onError,\n });\n\n return (\n <div className={classes(['company-form-wrapper', className])}>\n <h2>{translations.title}</h2>\n <Form\n regionOptions={regionOptions}\n countryOptions={countryOptions}\n slots={slots}\n className=\"company-registration-form\"\n name=\"companyRegistrationForm\"\n fieldsConfig={fieldsConfig}\n values={formValues}\n errors={fieldErrors}\n onChange={handleInputChange}\n onBlur={handleBlur}\n onSubmit={handleFormSubmit}\n loading={isSubmitting}\n showFormLoader={false}\n >\n {/* Submit Button Section */}\n {!hideActionFormButtons && (\n <div className={classes(['company-form-wrapper__buttons'])}>\n <Button\n type=\"submit\"\n disabled={isSubmitting || loadingStoreConfig || loadingCountries}\n className=\"company-form-wrapper__submit\"\n >\n {isSubmitting ? translations.submittingButton : translations.submitButton}\n </Button>\n </div>\n )}\n </Form>\n </div>\n );\n};","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { useState, useEffect } from 'preact/hooks';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { getCountries } from '@/company-management/api/getCountries';\nimport { Company } from '@/company-management/data/models/company';\nimport '@adobe-commerce/storefront-design/dist/css/base.css';\nimport './CompanyRegistrationSuccess.css';\n\n\nexport interface CompanyRegistrationSuccessProps {\n company: Company;\n}\n\nexport const CompanyRegistrationSuccess: FunctionComponent<CompanyRegistrationSuccessProps> = ({\n company\n}) => {\n const [countryName, setCountryName] = useState<string>('');\n\n const translations = useText({\n pendingApproval: 'Company.CompanyRegistration.success.pendingApproval',\n companyDetails: 'Company.CompanyRegistration.success.companyDetails',\n companyName: 'Company.shared.fields.companyName',\n companyEmail: 'Company.shared.fields.companyEmail',\n legalName: 'Company.shared.fields.legalName',\n vatTaxId: 'Company.shared.fields.vatTaxId',\n resellerId: 'Company.shared.fields.resellerId',\n address: 'Company.shared.fields.legalAddress',\n street: 'Company.shared.fields.street',\n city: 'Company.shared.fields.city',\n stateProvince: 'Company.shared.fields.stateProvince',\n postcode: 'Company.shared.fields.postcode',\n country: 'Company.shared.fields.country',\n telephone: 'Company.shared.fields.telephone',\n companyAdmin: 'Company.shared.fields.companyAdmin',\n adminFirstname: 'Company.shared.fields.adminFirstname',\n adminLastname: 'Company.shared.fields.adminLastname',\n adminEmail: 'Company.shared.fields.adminEmail',\n adminJobTitle: 'Company.shared.fields.adminJobTitle',\n adminWorkTelephone: 'Company.shared.fields.adminWorkTelephone',\n });\n\n // Fetch country name based on country code\n useEffect(() => {\n const fetchCountryName = async () => {\n if (company.legalAddress?.countryCode) {\n try {\n const { availableCountries } = await getCountries();\n const country = availableCountries.find(c => c.value === company.legalAddress?.countryCode);\n if (country) {\n setCountryName(country.text);\n }\n } catch (error) {\n console.error('Failed to fetch countries:', error);\n // Fallback to country code if API fails\n setCountryName(company.legalAddress.countryCode);\n }\n }\n };\n\n fetchCountryName();\n }, [company.legalAddress?.countryCode]); \n\n return (\n <div className={`company-registration-success`}>\n <div className=\"company-registration-success__header\">\n <p className=\"company-registration-success__pending\">\n {translations.pendingApproval}\n </p>\n </div>\n\n <div className=\"company-registration-success__details\">\n <h2 className=\"company-registration-success__details-title\">\n {translations.companyDetails}\n </h2>\n \n <div className=\"company-registration-success__grid\">\n <div className=\"company-registration-success__item\">\n <span className=\"company-registration-success__label\">\n {translations.companyName}:\n </span>\n <span className=\"company-registration-success__value\">{company.name}</span>\n </div>\n\n {company.legalName && (\n <div className=\"company-registration-success__item\">\n <span className=\"company-registration-success__label\">\n {translations.legalName}:\n </span>\n <span className=\"company-registration-success__value\">{company.legalName}</span>\n </div>\n )}\n\n <div className=\"company-registration-success__item\">\n <span className=\"company-registration-success__label\">\n {translations.companyEmail}:\n </span>\n <span className=\"company-registration-success__value\">{company.email}</span>\n </div>\n\n \n\n {company.vatTaxId && (\n <div className=\"company-registration-success__item\">\n <span className=\"company-registration-success__label\">\n {translations.vatTaxId}:\n </span>\n <span className=\"company-registration-success__value\">{company.vatTaxId}</span>\n </div>\n )}\n\n {company.resellerId && (\n <div className=\"company-registration-success__item\">\n <span className=\"company-registration-success__label\">\n {translations.resellerId}:\n </span>\n <span className=\"company-registration-success__value\">{company.resellerId}</span>\n </div>\n )}\n\n {/* Address Information */}\n {company.legalAddress && (\n <>\n <div className=\"company-registration-success__section-header\">\n <h3>{translations.address}</h3>\n </div>\n\n {company.legalAddress.street && company.legalAddress.street[0] && (\n <div className=\"company-registration-success__item\">\n <span className=\"company-registration-success__label\">\n {translations.street}:\n </span>\n <span className=\"company-registration-success__value\">\n {company.legalAddress.street.map((line: string, index: number) => (\n <div key={index}>{line}</div>\n ))}\n </span>\n </div>\n )}\n\n {company.legalAddress.city && (\n <div className=\"company-registration-success__item\">\n <span className=\"company-registration-success__label\">\n {translations.city}:\n </span>\n <span className=\"company-registration-success__value\">{company.legalAddress.city}</span>\n </div>\n )}\n\n {company.legalAddress.countryCode && (\n <div className=\"company-registration-success__item\">\n <span className=\"company-registration-success__label\">\n {translations.country}:\n </span>\n <span className=\"company-registration-success__value\">{countryName || company.legalAddress.countryCode}</span>\n </div>\n )}\n\n {company.legalAddress.region && (\n <div className=\"company-registration-success__item\">\n <span className=\"company-registration-success__label\">\n {translations.stateProvince}:\n </span>\n <span className=\"company-registration-success__value\">\n {company.legalAddress.region.region || company.legalAddress.region.regionCode}\n </span>\n </div>\n )}\n\n {company.legalAddress.postcode && (\n <div className=\"company-registration-success__item\">\n <span className=\"company-registration-success__label\">\n {translations.postcode}:\n </span>\n <span className=\"company-registration-success__value\">{company.legalAddress.postcode}</span>\n </div>\n )}\n\n \n\n {company.legalAddress.telephone && (\n <div className=\"company-registration-success__item\">\n <span className=\"company-registration-success__label\">\n {translations.telephone}:\n </span>\n <span className=\"company-registration-success__value\">{company.legalAddress.telephone}</span>\n </div>\n )}\n </>\n )}\n\n {/* Company Admin Information */}\n {company.companyAdmin && (\n <>\n <div className=\"company-registration-success__section-header\">\n <h3>{translations.companyAdmin}</h3>\n </div>\n\n {company.companyAdmin.jobTitle && (\n <div className=\"company-registration-success__item\">\n <span className=\"company-registration-success__label\">\n {translations.adminJobTitle}:\n </span>\n <span className=\"company-registration-success__value\">{company.companyAdmin.jobTitle}</span>\n </div>\n )}\n\n {company.companyAdmin.telephone && (\n <div className=\"company-registration-success__item\">\n <span className=\"company-registration-success__label\">\n {translations.adminWorkTelephone}:\n </span>\n <span className=\"company-registration-success__value\">{company.companyAdmin.telephone}</span>\n </div>\n )}\n\n <div className=\"company-registration-success__item\">\n <span className=\"company-registration-success__label\">\n {translations.adminEmail}:\n </span>\n <span className=\"company-registration-success__value\">{company.companyAdmin.email}</span>\n </div>\n </>\n )}\n\n </div>\n </div>\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useState, useEffect } from 'preact/hooks';\nimport { Container } from '@adobe-commerce/elsie/lib';\nimport { CompanyRegistrationForm } from '@/company-management/components/CompanyRegistrationForm';\nimport { CompanyRegistrationSuccess } from '@/company-management/components/CompanyRegistrationSuccess';\nimport { CompanyFormSlots } from '@/company-management/types/form.types';\nimport { Company } from '@/company-management/data/models/company';\nimport { allowCompanyRegistration } from '../../api/allowCompanyRegistration';\nimport { isCompanyUser } from '../../api/isCompanyUser';\n\nexport interface CompanyRegistrationProps {\n isAuthenticated?: boolean;\n onRedirectLogin?: () => void;\n onRedirectAccount?: () => void;\n onSuccess?: (company: Company) => void;\n onError?: (errors: string[]) => void;\n className?: string;\n slots?: CompanyFormSlots;\n}\n\ntype CompanyRegistrationState = 'loading' | 'redirect-login' | 'redirect-account' | 'show-form' | 'success';\n\nexport const CompanyRegistration: Container<CompanyRegistrationProps> = ({\n isAuthenticated = false,\n onRedirectLogin,\n onRedirectAccount,\n onSuccess,\n onError,\n className,\n slots,\n}) => {\n const [state, setState] = useState<CompanyRegistrationState>('loading');\n const [registeredCompany, setRegisteredCompany] = useState<Company | null>(null);\n\n useEffect(() => {\n let active = true;\n (async () => {\n try {\n const canRegister = await allowCompanyRegistration();\n \n if (!canRegister) {\n // Provide status logging since company registration link is always visible\n // and backend configuration is not exposed to frontend users\n if (active) {\n const redirectState = isAuthenticated ? 'redirect-account' : 'redirect-login';\n const destination = isAuthenticated ? 'account dashboard' : 'login page';\n console.log(`Company registration disabled - redirecting to ${destination}`);\n setState(redirectState);\n }\n return;\n }\n\n if (isAuthenticated) {\n try {\n const belongsToCompany = await isCompanyUser();\n if (belongsToCompany) {\n if (active) {\n console.log('User already belongs to a company - redirecting to account dashboard');\n setState('redirect-account');\n }\n return;\n }\n } catch (error) {\n console.error('Error checking company membership - redirecting to account dashboard:', error);\n if (active) setState('redirect-account');\n return;\n }\n }\n\n if (active) setState('show-form');\n } catch (error) {\n console.error('Error checking B2B status:', error);\n if (active) setState(isAuthenticated ? 'redirect-account' : 'redirect-login');\n }\n })();\n return () => { active = false; };\n }, [isAuthenticated]);\n\n // Handle redirects\n useEffect(() => {\n if (state === 'redirect-login' && onRedirectLogin) {\n onRedirectLogin();\n }\n if (state === 'redirect-account' && onRedirectAccount) {\n onRedirectAccount();\n }\n }, [state, onRedirectLogin, onRedirectAccount]);\n\n const handleSuccess = (company: Company) => {\n setState('success');\n setRegisteredCompany(company);\n onSuccess?.(company);\n };\n\n const handleError = (errors: string[]) => {\n onError?.(errors);\n };\n\n if (state === 'loading' || state === 'redirect-login' || state === 'redirect-account') {\n return null;\n }\n\n if (state === 'success' && registeredCompany) {\n return (\n <div className={`company-registration-container ${className || ''}`}>\n <CompanyRegistrationSuccess\n company={registeredCompany}\n />\n </div>\n );\n }\n\n return (\n <div className={`company-registration-container ${className || ''}`}>\n <CompanyRegistrationForm\n onSuccess={handleSuccess}\n onError={handleError}\n slots={slots}\n />\n </div>\n );\n};"],"names":["FieldTypeEnum","FormInputs","memo","loading","values","fields","errors","className","regionOptions","countryOptions","onChange","onBlur","onFocus","slots","fieldIdPrefix","itemClassName","translations","useText","fieldSections","getSectionTitle","sectionKey","formatRegionValue","item","regionCode","_a","regionId","_b","_c","_d","formatStreetValue","renderSlot","errorMessage","slotName","slot","contextValue","jsx","Slot","selectElement","valueMessage","options","country","option","Fragment","Field","classes","Picker","inputElement","inputType","Input","renderSectionFields","sectionFields","field","streetValue","regionValue","renderSection","sectionTitle","jsxs","Form","showFormLoader","name","children","fieldsConfig","onSubmit","formRef","useRef","handleSubmit","event","handleChange","target","value","useCountryAndRegionFields","defaultCountry","formName","countriesData","setCountriesData","useState","inputChange","setInputChange","savedData","disableField","setDisableField","loadingCountries","setLoadingCountries","regionsData","setRegionsData","useEffect","getCountries","availableCountries","countriesWithRequiredRegion","optionalZipCountries","error","selectedCountry","regions","region","useMemo","isRequiredRegion","isRequiredPostCode","hasRegions","handleInputChange","useCallback","prev","updatedData","getCompanyFieldsConfig","formData","getLabel","key","getPlaceholder","label","commonConfig","flattenObjectsArray","arr","acc","obj","validateNumeric","validateAlphanumeric","validateAlphanumWithSpaces","validateAlpha","validateEmail","validatePhone","validateUrl","validatePostalCode","validateName","validateLength","minLength","maxLength","length","validationFields","configs","errorsList","requiredFieldError","lengthTextError","numericError","alphaNumWithSpacesError","alphaNumericError","alphaError","emailError","phoneError","postalCodeError","urlError","nameError","fieldName","defaultFields","trimmedValue","validateRulesConfig","min","max","validation","getValidationTranslations","createValidationConfig","validateField","fieldCode","config","fieldConfig","stringValue","validationConfig","validateAllFields","firstField","hasErrors","fieldErrors","result","hasRegionId","hasRegionCode","hasRegion","validateSingleField","validateFormData","createFieldHandlers","setFormData","formTranslations","setFieldErrors","updated","handleStreetChange","currentStreet","newStreet","handleStreetLine2Change","handleRegionTextChange","handleRegionCodeChange","handleRegionDropdownChange","selectedRegion","handleCountryChange","handleGenericFieldChange","useCompanyRegistrationForm","onSuccess","onError","isSubmitting","setIsSubmitting","setDefaultCountry","loadingStoreConfig","setLoadingStoreConfig","handleCompanyFormChange","formValues","setFormValues","getStoreConfig","validateForm","fieldHandlers","isValid","formElement","rawFormValues","finalFormValues","formIsValid","emailValidation","validateCompanyEmail","createCompany","errorMessages","CompanyRegistrationForm","hideActionFormButtons","handleBlur","handleFormSubmit","Button","CompanyRegistrationSuccess","company","countryName","setCountryName","line","index","CompanyRegistration","isAuthenticated","onRedirectLogin","onRedirectAccount","state","setState","registeredCompany","setRegisteredCompany","active","allowCompanyRegistration","redirectState","isCompanyUser","handleSuccess","handleError"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/********************************************************************
|
|
2
|
+
* ADOBE CONFIDENTIAL
|
|
3
|
+
* __________________
|
|
4
|
+
*
|
|
5
|
+
* Copyright 2025 Adobe
|
|
6
|
+
* All Rights Reserved.
|
|
7
|
+
*
|
|
8
|
+
* NOTICE: All information contained herein is, and remains
|
|
9
|
+
* the property of Adobe and its suppliers, if any. The intellectual
|
|
10
|
+
* and technical concepts contained herein are proprietary to Adobe
|
|
11
|
+
* and its suppliers and are protected by all applicable intellectual
|
|
12
|
+
* property laws, including trade secret and copyright laws.
|
|
13
|
+
* Dissemination of this information or reproduction of this material
|
|
14
|
+
* is strictly forbidden unless prior written permission is obtained
|
|
15
|
+
* from Adobe.
|
|
16
|
+
*******************************************************************/
|
|
17
|
+
export * from './CompanyStructure';
|
|
18
|
+
export { CompanyStructure as default } from './CompanyStructure';
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/*! Copyright 2025 Adobe
|
|
2
|
+
All Rights Reserved. */
|
|
3
|
+
import{jsxs as L,jsx as t,Fragment as me}from"@dropins/tools/preact-jsx-runtime.js";import{useState as T,useEffect as Z,useRef as ce,useCallback as H}from"@dropins/tools/preact-hooks.js";import{Slot as be,classes as Se}from"@dropins/tools/lib.js";import{Card as ae,InLineAlert as ne,ProgressSpinner as de,Field as pe,Input as ye,Button as P,Modal as fe,Header as Te}from"@dropins/tools/components.js";import{f as Ce}from"../chunks/fetchUserPermissions.js";import{b as ge}from"../chunks/company-permissions.js";import{useText as G}from"@dropins/tools/i18n.js";import{u as Ie}from"../chunks/useCompanyContextListener.js";import{a as Ee,i as we}from"../chunks/isCompanyUser.js";import*as he from"@dropins/tools/preact-compat.js";import{memo as ve}from"@dropins/tools/preact-compat.js";import{T as Ne}from"../chunks/Tree.js";import{C as Me}from"../chunks/CompanyUserForm.js";import{events as re}from"@dropins/tools/event-bus.js";import{p as ie,E as le}from"../chunks/acdl.js";import{g as xe,c as Ue,u as _e,a as De,b as ke,d as Ae}from"../chunks/updateCompanyTeam.js";import{d as Le}from"../chunks/updateCompanyUser.js";import{u as Pe}from"../chunks/useInLineAlert.js";import{C as Fe,a as Ve}from"../chunks/CompanyLoaders.js";import"../chunks/fetch-error.js";import"../chunks/network-error.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/useCompanyRoles.js";import"../chunks/isCompanyRoleNameAvailable.js";const Re=d=>he.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...d},he.createElement("path",{vectorEffect:"non-scaling-stroke",fillRule:"evenodd",clipRule:"evenodd",d:"M1 20.8953L12.1922 1.5L23.395 20.8953H1ZM13.0278 13.9638L13.25 10.0377V9H11.25V10.0377L11.4722 13.9638H13.0278ZM11.2994 16V17.7509H13.2253V16H11.2994Z",fill:"currentColor"})),se={name:40,description:1e3};function Oe(d){const{mode:w,entityId:p,parentStructureId:u,onSaved:e,onError:S,onSuccess:i}=d,n=G({teamTitleRequired:"Company.CompanyStructure.shared.validation.teamTitleRequired",teamNameMaxLength:"Company.CompanyStructure.shared.validation.teamNameMaxLength",teamDescriptionMaxLength:"Company.CompanyStructure.shared.validation.teamDescriptionMaxLength",createTeamError:"Company.CompanyStructure.messages.createTeamError",saveTeamError:"Company.CompanyStructure.messages.saveTeamError",createTeamSuccess:"Company.CompanyStructure.messages.createTeamSuccess",updateTeamSuccess:"Company.CompanyStructure.messages.updateTeamSuccess"}),[m,o]=T({id:"",name:"",description:""}),[y,C]=T({}),[g,A]=T({}),[I,M]=T(!1),[V,F]=T(null);Z(()=>{w!=="edit"||!p||(M(!0),xe(p).then(f=>{f&&o({id:f.id,name:f.name||"",description:f.description||""})}).finally(()=>M(!1)))},[w,p]);const R=(f,v)=>f==="name"?v.trim()?v.length>se.name?n.teamNameMaxLength:null:n.teamTitleRequired:f==="description"&&v&&v.length>se.description?n.teamDescriptionMaxLength:null,U=(f,v)=>{o(_=>({..._,[f]:v})),V&&F(null)};return{values:m,errors:y,touched:g,loading:I,setValue:U,onBlur:(f,v)=>{v!==void 0&&U(f,v),A(D=>({...D,[f]:!0}));const _=v!==void 0?v:m[f]||"",E=R(f,_);C(E?D=>({...D,[f]:E}):D=>{const N={...D};return delete N[f],N})},submit:async()=>{const f=R("name",m.name),v=R("description",m.description||""),_={},E={name:!0,description:!0};if(f&&(_.name=f),v&&(_.description=v),A(E),Object.keys(_).length>0){C(_);return}const D=m.name;try{if(w==="add"){const N=await Ue({name:m.name,description:m.description||null,targetId:u??null});if(!N){const q=n.createTeamError;S?S(q):F(q);return}e({label:D,structureId:N.structureId,entityId:N.id,type:"team",description:m.description||void 0}),i&&i(n.createTeamSuccess)}else p&&(await _e({id:p,name:m.name,description:m.description||null}),e({label:D,entityId:p,type:"team",description:m.description||void 0}),i&&i(n.updateTeamSuccess))}catch(N){const q=N instanceof Error?N.message:n.saveTeamError;S?S(q):F(q)}},generalError:V}}const ze=ve(({mode:d,entityId:w,parentStructureId:p,permissions:u,onSaved:e,onCancel:S,onError:i,onSuccess:n})=>{const m=(u==null?void 0:u.canEditUsers)??!1,{values:o,errors:y,touched:C,loading:g,onBlur:A,submit:I,generalError:M}=Oe({mode:d,entityId:w,parentStructureId:p,onSaved:e,onError:i?U=>{i(U),S()}:void 0,onSuccess:n}),[V,F]=T(!1),R=G({addTeam:"Company.CompanyStructure.shared.titles.addTeam",editTeam:"Company.CompanyStructure.shared.titles.editTeam",teamTitle:"Company.CompanyStructure.shared.fields.teamTitle",description:"Company.CompanyStructure.shared.fields.description"});return L("div",{children:[t("h3",{className:"acm-structure-panel__title",children:d==="add"?R.addTeam:R.editTeam}),L(ae,{variant:"secondary",className:`company-team-form__card ${V?"is-working":""}`,children:[!i&&M?t(ne,{className:"company-team-form__notification",type:"error",variant:"secondary",heading:M}):null,V?t("div",{className:"company-team-form__overlay","aria-live":"polite",children:t(de,{size:"small"})}):null,g?t(Fe,{}):L("div",{className:"company-team-form__content",children:[t(pe,{label:R.teamTitle,required:!0,className:"acm-structure-panel__field",error:C.name&&y.name?y.name:void 0,children:t(ye,{name:"team_title",type:"text",value:o.name,onBlur:U=>{const Y=U.target;A("name",Y.value)},variant:"primary",size:"medium",disabled:!m,maxLength:se.name})}),t(pe,{label:R.description,className:"acm-structure-panel__field",error:C.description&&y.description?y.description:void 0,children:t(ye,{name:"team_description",type:"textarea",value:o.description||"",onBlur:U=>{const Y=U.target;A("description",Y.value)},variant:"primary",size:"medium",disabled:!m,maxLength:se.description})})]})]}),g?null:L("div",{className:"acm-structure-modal__actions",children:[t(P,{type:"button",variant:"primary",onClick:async()=>{if(!V){F(!0);try{await I()}finally{F(!1)}}},disabled:V||!m,children:"Save"}),t(P,{type:"button",variant:"secondary",disabled:V,onClick:S,children:"Cancel"})]})]})});function Be({handleSetInLineAlert:d,permissions:w}={permissions:null}){const p=(w==null?void 0:w.canViewUsers)??!1,u=G({loadError:"Company.CompanyStructure.messages.loadError",updateError:"Company.CompanyStructure.messages.updateError",failedToMoveItem:"Company.CompanyStructure.messages.failedToMoveItem",removeUserSuccess:"Company.CompanyStructure.messages.removeUserSuccess",deleteTeamSuccess:"Company.CompanyStructure.messages.deleteTeamSuccess",removeMultipleSuccess:"Company.CompanyStructure.messages.removeMultipleSuccess",moveUserSuccess:"Company.CompanyStructure.messages.moveUserSuccess",moveTeamSuccess:"Company.CompanyStructure.messages.moveTeamSuccess"}),{loadError:e,updateError:S}=u,[i,n]=T(null),[m,o]=T(!0),[y,C]=T(!1),[g,A]=T(!1),[I,M]=T(new Set),[V,F]=T(null),[R,U]=T(new Set),[Y,W]=T({}),f=ce(d),v=ce(!1),_=ce(!1);Z(()=>{f.current=d},[d]);const E=H((r,l)=>{d&&(r==="success"?d({type:"success",text:l}):r==="error"?d({type:"error",text:l}):d(),C(!1))},[d]),D=H(async()=>{if(v.current)return null;if(v.current=!0,!p)return o(!1),n(null),M(new Set),F(null),U(new Set),v.current=!1,null;o(!0);try{const l=await De();return n(l),M(new Set(l.map(k=>k.id))),o(!1),l}catch{return o(!1),f.current&&f.current({type:"error",text:e}),null}finally{v.current=!1}},[p,e]);Z(()=>{p&&!_.current&&(_.current=!0,D())},[p,D]),Z(()=>{const r=()=>{o(!0),M(new Set),F(null),U(new Set),D()},l=re.on("companyContext/changed",r,{eager:!0});return()=>{l==null||l.off()}},[D]);const N=H(async(r,l)=>{try{if(C(!0),!await ke({id:r,parentId:l}))return E("error",u.failedToMoveItem),!1;const b=new Map(i==null?void 0:i.map(c=>[c.id,c])).get(r),a=(b==null?void 0:b.type)==="team"?u.moveTeamSuccess:u.moveUserSuccess;return n(c=>c?c.map(h=>h.id===r?{...h,parentId:l}:h):null),M(c=>new Set([...c,l])),ie(le.EDIT_COMPANY_STRUCTURE_EVENT,{action:"move",nodeId:r,newParentId:l}),re.emit("companyStructure/updated",{message:"Structure updated",action:"move",nodeId:r,newParentId:l,nodes:i||[]}),E("success",a),!0}catch(k){const O=k instanceof Error?k.message:S;return E("error",O),!1}finally{C(!1)}},[i,E,S,u.failedToMoveItem,u.moveUserSuccess,u.moveTeamSuccess]),q=H(()=>{i&&M(new Set(i.map(r=>r.id)))},[i]),$=H(()=>{if(i){const r=i.filter(l=>l.parentId===null).map(l=>l.id);M(new Set(r))}},[i]),j=H(r=>{n(l=>{const k=l?[...l,{id:r.id,parentId:r.parentId,label:r.label,type:r.type,entityId:r.entityId,description:r.description}]:[{id:r.id,parentId:r.parentId,label:r.label,type:r.type,entityId:r.entityId,description:r.description}];return re.emit("companyStructure/updated",{message:"Structure updated",action:"add",nodeId:r.id,newParentId:r.parentId||void 0,nodes:k}),ie(le.EDIT_COMPANY_STRUCTURE_EVENT,{action:"add",nodeId:r.id,newParentId:r.parentId||void 0,nodeType:r.type}),k}),r.parentId&&M(l=>new Set([...l,r.parentId]))},[]),K=H((r,l,k)=>{l&&n(O=>O?O.map(b=>r.includes(b.id)?{...b,label:l,description:k}:b):null)},[]),Q=H(async r=>{if(r.length)try{C(!0);const l=new Map((i||[]).map(b=>[b.id,b])),k=r.map(b=>l.get(b)).filter(Boolean);for(const b of r){const a=l.get(b);!a||!a.entityId||(a.type==="team"?await Ae(a.entityId):await Le({id:a.entityId}))}n(b=>{if(!b)return null;const a=new Set(r);return b.filter(c=>!a.has(c.id))}),F(null),U(new Set),ie(le.EDIT_COMPANY_STRUCTURE_EVENT,{action:"remove",nodeIds:r}),re.emit("companyStructure/updated",{message:"Structure updated",action:"remove",nodeIds:r,nodes:i||[]});let O;if(r.length===1){const b=k[0];O=(b==null?void 0:b.type)==="team"?u.deleteTeamSuccess:u.removeUserSuccess}else O=u.removeMultipleSuccess.replace("{count}",r.length.toString());E("success",O)}catch(l){const k=l instanceof Error?l.message:S;E("error",k)}finally{C(!1)}},[i,E,S,u.removeUserSuccess,u.deleteTeamSuccess,u.removeMultipleSuccess]),ee=H(r=>{W(r)},[]),X=H(()=>{A(!0),E("success",""),W({})},[E]),te=H(r=>{r==null||r(),A(!1),W({})},[]);return{nodes:i,loading:m,submitLoading:y,showEditForm:g,inputChange:Y,expanded:I,setExpanded:M,selected:V,setSelected:F,selectedMany:R,setSelectedMany:U,move:N,expandAll:q,collapseAll:$,insertNode:j,renameNodes:K,removeNodes:Q,handleInputChange:ee,handleShowEditForm:X,handleHideEditForm:te,renderAlertMessage:E,working:y}}const He=ve(({permissions:d,slots:w})=>{var b;const p=(d==null?void 0:d.canEditUsers)??!1,u=(d==null?void 0:d.canViewUsers)??!1,e=G({expandAll:"Company.CompanyStructure.shared.buttons.expandAll",collapseAll:"Company.CompanyStructure.shared.buttons.collapseAll",addUser:"Company.CompanyStructure.shared.buttons.addUser",addTeam:"Company.CompanyStructure.shared.buttons.addTeam",editSelected:"Company.CompanyStructure.shared.buttons.editSelected",remove:"Company.CompanyStructure.shared.buttons.remove",ok:"Company.CompanyStructure.shared.buttons.ok",cancel:"Company.CompanyStructure.shared.buttons.cancel",close:"Company.CompanyStructure.shared.buttons.close",deleting:"Company.CompanyStructure.shared.buttons.deleting",removing:"Company.CompanyStructure.shared.buttons.removing",noStructureData:"Company.CompanyStructure.messages.noStructureData",processing:"Company.CompanyStructure.shared.messages.processing",cannotDeleteUser:"Company.CompanyStructure.messages.cannotDeleteUser",cannotDeleteTeam:"Company.CompanyStructure.messages.cannotDeleteTeam",removeUserConfirm:"Company.CompanyStructure.messages.removeUserConfirm",deleteTeamConfirm:"Company.CompanyStructure.messages.deleteTeamConfirm",removeItemsConfirm:"Company.CompanyStructure.messages.removeItemsConfirm",teamDescription:"Company.CompanyStructure.shared.messages.teamDescription",removeUserMessage:"Company.CompanyStructure.messages.removeUserMessage",cannotDeleteUserMessage:"Company.CompanyStructure.messages.cannotDeleteUserMessage",cannotDeleteTeamMessage:"Company.CompanyStructure.messages.cannotDeleteTeamMessage",removeItemsMessage:"Company.CompanyStructure.messages.removeItemsMessage",companyStructureActions:"Company.CompanyStructure.shared.ariaLabels.companyStructureActions",expandAllNodes:"Company.CompanyStructure.shared.ariaLabels.expandAllNodes",collapseAllNodes:"Company.CompanyStructure.shared.ariaLabels.collapseAllNodes",addUserAria:"Company.CompanyStructure.shared.ariaLabels.addUser",addTeamAria:"Company.CompanyStructure.shared.ariaLabels.addTeam",editSelectedAria:"Company.CompanyStructure.shared.ariaLabels.editSelected",removeSelectedAria:"Company.CompanyStructure.shared.ariaLabels.removeSelected",showDescription:"Company.CompanyStructure.shared.ariaLabels.showDescription",delete:"Company.CompanyStructure.shared.options.delete",expand:"Company.CompanyStructure.shared.options.expand",collapse:"Company.CompanyStructure.shared.options.collapse",deleteTeamMessage:"Company.CompanyStructure.messages.deleteTeamMessage"}),{inLineAlertProps:S,handleSetInLineAlert:i}=Pe(),{nodes:n,loading:m,submitLoading:o,expanded:y,setExpanded:C,selected:g,setSelected:A,selectedMany:I,setSelectedMany:M,move:V,expandAll:F,collapseAll:R,insertNode:U,renameNodes:Y,removeNodes:W}=Be({handleSetInLineAlert:i,permissions:d}),[f,v]=T(null),[_,E]=T("add"),[D,N]=T(!1),[q,$]=T([]),[j,K]=T({title:"",body:"",confirmLabel:e.remove,blocked:!1}),[Q,ee]=T(null),X=()=>v(null),te=((b=n==null?void 0:n.find(a=>a.parentId===null))==null?void 0:b.id)??null,r=(n||[]).map(a=>({id:a.id,parentId:a.parentId,label:a.label})),l=(a,c)=>{let h=a;const s=new Map(r.map(z=>[z.id,z])),x=new Set;for(;h&&!x.has(h);){x.add(h);const z=s.get(h);if(!z)break;if(z.parentId===c)return!0;h=z.parentId??null}return!1},k=(n||[]).map(a=>({id:a.id,parentId:a.parentId,label:a.label,type:a.type,description:a.description,entityId:a.entityId})),O=L(me,{children:[(()=>{const a=I!=null&&I.size?Array.from(I):g?[g]:[],c=p&&a.length===1,h=p&&a.length>=1;return t(ae,{variant:"secondary",className:"acm-structure-toolbar-card acm-structure-toolbar-card--spaced",children:L("div",{className:"acm-structure-toolbar",role:"toolbar","aria-label":e.companyStructureActions,children:[t(P,{type:"button",variant:"secondary",onClick:F,"aria-label":e.expandAllNodes,disabled:!u,"aria-disabled":!u,children:e.expandAll}),t(P,{type:"button",variant:"secondary",onClick:R,"aria-label":e.collapseAllNodes,disabled:!u,"aria-disabled":!u,children:e.collapseAll}),t(P,{type:"button",variant:"primary",onClick:()=>{E("add"),v("user")},"aria-label":e.addUserAria,disabled:!p,"aria-disabled":!p,children:e.addUser}),t(P,{type:"button",variant:"primary",onClick:()=>{E("add"),v("team")},"aria-label":e.addTeamAria,disabled:!p,"aria-disabled":!p,children:e.addTeam}),t(P,{type:"button",variant:"primary",disabled:!c,"aria-disabled":!c,"aria-label":e.editSelectedAria,onClick:()=>{if(!c)return;const s=a,x=n==null?void 0:n.find(z=>z.id===s[0]);(x==null?void 0:x.type)==="user"?(E("edit"),v("user")):(E("edit"),v("team"))},children:e.editSelected}),t(P,{type:"button",variant:"secondary",disabled:!h||o,"aria-disabled":!h||o,"aria-label":e.removeSelectedAria,onClick:()=>{if(!h||o)return;const s=a;if(s.length===1){const x=n==null?void 0:n.find(J=>J.id===s[0]);if(!x)return;(n==null?void 0:n.some(J=>J.parentId===x.id))?(K({title:x.type==="user"?e.cannotDeleteUser:e.cannotDeleteTeam,body:x.type==="user"?e.cannotDeleteUserMessage:e.cannotDeleteTeamMessage,confirmLabel:void 0,blocked:!0}),$([]),N(!0)):(K({title:x.type==="user"?e.removeUserConfirm:e.deleteTeamConfirm,body:x.type==="user"?e.removeUserMessage:e.deleteTeamMessage,confirmLabel:x.type==="user"?e.remove:e.delete,blocked:!1}),$(s),N(!0))}else K({title:e.removeItemsConfirm.replace("{count}",s.length.toString()),body:e.removeItemsMessage,confirmLabel:e.remove,blocked:!1}),$(s),N(!0)},children:e.remove})]})})})(),f?L("div",{className:"acm-structure-panel",children:[o?L("div",{className:"acm-structure-working","aria-live":"polite",children:[t(de,{size:"small"})," ",e.processing]}):null,f==="user"?(()=>{const a=I!=null&&I.size?Array.from(I):g?[g]:[],c=a.length?n==null?void 0:n.find(s=>s.id===a[0]):void 0,h=(c==null?void 0:c.id)??te;return t(Me,{mode:_,entityId:c==null?void 0:c.entityId,parentStructureId:h,permissions:d,onSaved:s=>{_==="add"?s.structureId&&(U({id:s.structureId,parentId:h,label:s.label,type:s.type,entityId:s.entityId}),s.structureId&&(A(s.structureId),M(new Set([s.structureId])))):a.length&&Y(a,s.label),X()},onCancel:X,onError:s=>{i({text:s,type:"error"})},onSuccess:s=>{i({text:s,type:"success"})}})})():null,f==="team"?(()=>{const a=I!=null&&I.size?Array.from(I):g?[g]:[],c=a.length?n==null?void 0:n.find(s=>s.id===a[0]):void 0,h=(c==null?void 0:c.id)??te;return t(ze,{mode:_,entityId:c==null?void 0:c.entityId,parentStructureId:h,permissions:d,onSaved:s=>{_==="add"?s.structureId&&(U({id:s.structureId,parentId:h,label:s.label,type:s.type,entityId:s.entityId,description:s.description}),s.structureId&&(A(s.structureId),M(new Set([s.structureId])))):a.length&&Y(a,s.label,s.description),X()},onCancel:X,onError:s=>{i({text:s,type:"error"})},onSuccess:s=>{i({text:s,type:"success"})}})})():null]}):null,L(ae,{variant:"secondary",className:`acm-structure-tree-card ${o?"is-working":""}`,children:[S&&S.text?t(ne,{className:"acm-structure-panel__notification",type:S.type||"success",variant:"secondary",heading:S.text}):null,!m&&!o&&n&&n.length===0?t(ne,{className:"acm-structure-panel__notification",type:"warning",variant:"secondary",heading:e.noStructureData}):null,!m&&o?t("div",{className:"acm-structure-tree-overlay","aria-live":"polite",children:t(de,{size:"medium"})}):null,m?t("div",{className:"acm-structure-tree-content",children:t(Ve,{rows:8})}):t("div",{className:"acm-structure-tree-content",children:t(Ne,{rootId:null,items:r,expandedIds:y,selectedId:g,selectedIds:I,onExpandedChange:C,onSelectedChange:A,onSelectedIdsChange:M,renderExpander:({expanded:a,toggle:c})=>t("button",{type:"button",className:`acm-structure-expander acm-structure-expander-button ${a?"is-open":""}`,"aria-label":a?e.collapse:e.expand,onClick:h=>{h.stopPropagation(),c()},children:a?"−":"+"}),renderNode:({item:a,hasChildren:c,select:h,expander:s,checkbox:x,icon:z})=>{var J;return L("div",{className:"acm-structure-row",onClick:h,children:[c?s?t("span",{onClick:B=>B.stopPropagation(),children:s()}):t("span",{className:"acm-structure-expander acm-structure-expander--placeholder"}):t("span",{className:"acm-structure-expander acm-structure-expander--placeholder"}),t("span",{className:"acm-structure-handle","aria-hidden":!0}),z?t("span",{onClick:B=>B.stopPropagation(),children:z()}):t("span",{className:`acm-structure-icon ${((J=n==null?void 0:n.find(B=>B.id===a.id))==null?void 0:J.type)==="team"?"is-team":"is-user"}`,"aria-hidden":!0}),x?t("span",{onClick:B=>B.stopPropagation(),children:x()}):null,t("span",{className:"acm-structure-label",children:a.label}),(()=>{const B=n==null?void 0:n.find(oe=>oe.id===a.id),ue=(B==null?void 0:B.type)==="team"&&B.description||"";return ue?t(P,{type:"button",variant:"secondary",onClick:oe=>{oe.stopPropagation(),ee({id:a.id,text:ue})},"aria-label":e.showDescription,className:"acm-structure-description-button",children:"?"}):null})()]})},draggable:()=>!o&&p,canDrop:(a,c)=>{if(!p||a===c)return!1;const h=n==null?void 0:n.find(s=>s.id===a);return h&&h.parentId===c?!1:!l(c,a)},onMove:async({id:a,newParentId:c})=>{p&&await V(a,c)}})})]}),D?t(fe,{open:D,onClose:()=>{o||(N(!1),$([]))},children:L("div",{className:"acm-structure-modal-content",children:[t("h3",{className:"acm-structure-modal-title",children:j.title}),t("div",{children:j.body}),t("div",{className:"acm-structure-modal-actions",children:j.blocked?t(P,{type:"button",variant:"secondary",disabled:o,onClick:()=>{o||(N(!1),$([]))},children:e.ok}):L(me,{children:[t(P,{type:"button",variant:"secondary",disabled:o,onClick:()=>{o||(N(!1),$([]))},children:e.cancel}),t(P,{type:"button",variant:"primary",disabled:o,onClick:async()=>{await W(q),N(!1),$([])},children:o?j.confirmLabel===e.delete?e.deleting:e.removing:j.confirmLabel||e.remove})]})})]})}):null,Q?t(fe,{open:!!Q,onClose:()=>ee(null),children:L("div",{className:"acm-structure-modal-content",children:[t("h3",{className:"acm-structure-modal-title",children:e.teamDescription}),t("div",{children:Q.text}),t("div",{className:"acm-structure-modal-actions",children:t(P,{type:"button",variant:"secondary",onClick:()=>ee(null),children:e.close})})]})}):null]});return w!=null&&w.StructureData?t(be,{name:"StructureData",slot:w.StructureData,context:{structureData:k,Default:O}}):O}),Ye=()=>{const d=G({fetchPermissionsError:"Company.CompanyStructure.messages.fetchPermissionsError"}),[w,p]=T(null),[u,e]=T(!0),[S,i]=T(null),n=H(async()=>{var m,o;try{e(!0),i(null);const{roleResponse:y}=await Ce(),C=(o=(m=y==null?void 0:y.data)==null?void 0:m.customer)==null?void 0:o.role,g=ge(C);p(g)}catch(y){i(y instanceof Error?y:new Error(d.fetchPermissionsError))}finally{e(!1)}},[d.fetchPermissionsError]);return Z(()=>{let m=!0;return(async()=>{var y,C;try{e(!0),i(null);const{roleResponse:g}=await Ce();if(!m)return;const A=(C=(y=g==null?void 0:g.data)==null?void 0:y.customer)==null?void 0:C.role,I=ge(A);p(I)}catch(g){if(!m)return;i(g instanceof Error?g:new Error(d.fetchPermissionsError))}finally{m&&e(!1)}})(),()=>{m=!1}},[]),{permissions:w,loading:u,error:S,refreshPermissions:n}},qe="/customer/company/create",$e=({className:d,children:w,createCompanyAccountUrl:p=qe,...u})=>{const e=G({individualUserMessage:"Company.CustomerCompanyInfo.individualUserMessage",createAccountCta:"Company.CustomerCompanyInfo.createAccountCta"}),S=e.individualUserMessage||"You don't have a company account yet.";return t(ae,{variant:"secondary",className:Se(["company-management-company-structure-card",d]),...u,children:L("div",{children:[t(ne,{type:"warning",variant:"secondary",heading:S,icon:t(Re,{}),className:"company-management-company-structure-card__alert","data-testid":"company-structure-inline-alert"}),t("div",{className:"company-management-company-structure-card__cta",children:t(P,{as:"a",href:p,variant:"primary","data-testid":"company-structure-create-company-button",children:e.createAccountCta||"Create a Company Account"})})]})})},ft=({className:d,withHeader:w=!1,slots:p,isAuthenticated:u=!1,onRedirectLogin:e,onRedirectAccount:S})=>{const i=G({containerTitle:"Company.CompanyStructure.containerTitle"}),{permissions:n,refreshPermissions:m}=Ye(),[o,y]=T("loading");return Ie(m),Z(()=>{let C=!0;return(async()=>{try{if(!u){C&&y("redirect-login");return}if(!await Ee()){C&&(console.log("Company registration disabled - redirecting to account dashboard"),y("redirect-account"));return}await we()?C&&y("show-structure"):C&&y("show-empty")}catch(g){console.error("Error in CompanyStructure - redirecting to login page:",g),C&&y("redirect-login")}})(),()=>{C=!1}},[u]),Z(()=>{o==="redirect-login"&&e&&e(),o==="redirect-account"&&S&&S()},[o,e,S]),o==="loading"||o==="redirect-login"||o==="redirect-account"?null:o==="show-empty"?t($e,{className:d}):o==="show-structure"?L("div",{className:Se(["account-company-structure",d]),children:[w?t(Te,{title:i.containerTitle,divider:!1,className:"company-structure__title"}):null,t(He,{slots:p,permissions:n})]}):null};export{ft as CompanyStructure,ft as default};
|
|
4
|
+
//# sourceMappingURL=CompanyStructure.js.map
|