{"version":3,"sources":["webpack:///./src/modules/wine-club-signup/wine-club-data.ts?aeec","webpack:///./src/common/components/address-alert.tsx?f4e6","webpack:///./src/common/components/address-dropdown.tsx?f3a6","webpack:///./src/common/components/address-label.tsx?a734","webpack:///./src/common/components/address-add.tsx?2ff5","webpack:///../../../src/module-state-manager/module-state.ts?7579","webpack:///../../../src/module-state-manager/with-module-state.tsx?61ca","webpack:///./src/common/address.fields.ts?a6cc","webpack:///./src/common/components/address-error-title.tsx?9499","webpack:///./src/common/address-format.ts?1cbd","webpack:///./src/common/address-module.data.ts?6f83","webpack:///./src/common/address-format.data.ts?dd26","webpack:///./src/common/components/address-button.tsx?7b0b","webpack:///./src/common/components/address-input.tsx?a87b","webpack:///./src/common/components/address-warning.tsx?4892","webpack:///./src/common/components/address-error-message.tsx?fd46","webpack:///./src/modules/checkout-terms-and-conditions/checkout-terms-and-conditions.tsx?0988","webpack:///./src/common/address-meta-data.ts?a686","webpack:///./src/common/address-common.ts?d91f"],"names":["WineClubDataStore","constructor","LOCAL_STORAGE_LOCATION","changeEvents","window","previousWineData","localStorage","getItem","this","reset","wineClubData","JSON","parse","onChange","instance","push","getDeliveryMapFromConfig","coreContext","config","app","wineClubShippingLabels","standard","pickup","premium","edit","newData","forEach","event","_save","get","deleteKeys","keys","key","deliveryType","tosAgree","forMyself","clubId","variantPreference","isInResetState","setItem","stringify","AdressAlert","message","React","className","role","AdressDropdown","id","name","value","additionalAddributes","displayData","map","item","disabled","selectedValue","isSelected","toLowerCase","getDropdownItem","AdressLabel","text","htmlFor","getRequriedAttribute","validationRules","find","validationRule","type","AddressValidationRuleType","Required","getLabelText","isShipping","labelText","label","replace","AddressFields","Street","State","getPlaceholderText","placeholderText","Name","getAddressItems","selectedAddress","props","addressFormat","addressType","dropdownDisplayData","defaultCountryRegionId","validationError","onInputChange","onDropdownChange","getWarningMessage","AddressType","Shipping","test","length","addressFormatItem","elementId","errorMessage","classname","isNewLine","input","displayType","AddressItemDisplayType","Input","AddressInputComponent","Object","maxLength","hasWarning","placeholder","undefined","AddressItemType","ThreeLetterISORegionName","AdressDropdownComponent","Country","AddressItem","alert","AddressLabelComponent","AddressAlertComponent","AddressAddUpdate","editAddressHeading","addAddressHeading","resources","hasError","onCancel","onSave","hasExternalSubmitGroup","isUpdating","addressActionResponse","heading","RecordId","AddressForm","Heading","items","isShowSaveButton","saveButton","AddressButtonComponent","addressSaveButtonText","ariaLabel","addressSaveButtonAriaLabel","onClick","isShowCancelButton","cancelButton","addressCancelButtonText","addressCancelButtonAriaLabel","error","AddressError","title","errorTitle","AddressErrorTitleComponent","AddressErrorMessageComponent","getCacheKey","getCacheObjectType","dataCacheType","getModuleStates","ctx","cacheKey","ModuleStatesCacheKey","moduleStates","update","withModuleState","WrappedComponent","_super","_this","typeName","context","states","actionContext","_a","hasInitialized","isRequired","isCancellable","isSubmitContainer","status","childIds","telemetry","moduleState","validate","isReady","isPending","isSkipped","isDisabled","isCancelAllowed","shouldSubmitContainer","hasModuleState","setIsRequired","setIsCancellable","setIsSubmitContainer","setHasError","onReady","onUpdating","onPending","onSkip","onDisable","getModule","moduleId","getModuleStateManager","getModuleByTypeName","getModuleStateManagerByTypeName","init","options","__assign","values","_moduleState","modules","source","module","isMatch","allMatched","skipSkippableItem","_validateLeaf","method","childId","_validateContainer","enableControl","initializeState","__extends","ModuleState","observer","AdressErrorTitle","AddressFormat","countryRegionsInfo","addressMetaData","getPrefilledAddressDropdownData","stateDefaultSelectionText","stateProvinceInfo","isShippingAddress","defaultStateText","dropdownData","getCountryFormat","getStateFormat","unshift","getTwoLetterISORegionName","countryRegionId","_getCountryRegionInfo","ISOCode","validateAddressFormat","address","isBilling","isValid","getAddressFormat","ZipCodeIndex","findIndex","ZipCode","ZipCodeValidationIndex","regEx","splice","set","_validateRegEx","propertyName","RegExp","countryRegionInfo","_getAddressDisplayFormat","countryRegion","CountryRegionId","ShortName","state","requestContext","statesSettings","StateId","StateName","addressDisplayItem","AddressFormatLines","nameDisplayItem","_extendAddressDisplayFormat","formatLine","AddressComponentNameValue","addressItem","getItemFormat","NewLine","phoneDisplayItem","Phone","AddressOperation","AddressButton","super","_onInputBlur","bind","warningMessage","render","onBlur","el","target","setState","AdressErrorMessage","CheckoutTermsAndConditions","accepted","submitted","onSubmit","checkbox","checked","data","checkoutState","result","componentDidMount","when","isDataReady","conditions","dangerouslySetInnerHTML","getRichTextHtml","_prop65Icon","prop65WarningText","legalDisclaimer","prop65Icon","src","alt","__decorate","computed","AddressMetaData","metaData","requiredFieldRegEx","phoneValidation","zipcodeValidation","resourcesPrefix","requiredFields","City","_init","_addItem","County","Dropdown","District","StreetNumber","BuildingCompliment","Postbox","House_RU","Flat_RU","CountryOKSMCode_RU","nameKey","_validationRules","_validationRule","ruleType","itemType","AddressCommon","customerAccountNumber","getDefaultCountryRegionId","countryRegions","market","marketISOCode","currentCountryRegion","parseRetailException","addressErrorMessageTitle","addressGenericErrorMessage","isAuthenticatedFlow","getStateProvinces","async","response","GetStateProvincesInput","request","apiSettings","getStateProvinceAction","Promise","resolve","addCustomerAddress","submitCustomerAddress","addAddress","updateCustomerAddress","updateAddress","updateCustomerPrimaryAddress","updatePrimaryAddress","addressAction","AddressTypeValue","AddressManagementInput","execAddressAction","addresses","customerAddresses"],"mappings":"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","file":"static/js/10.deb3a29e700a5abd89c7.chunk.js","sourcesContent":["import { ICoreContext } from '@msdyn365-commerce/core-internal';\r\nimport { wineClubShippingLabels } from '../../settings/app.settings';\r\n\r\nexport type WineClubDataRef = {\r\n variantPreference: string | null;\r\n forMyself: boolean | null;\r\n deliveryType: DeliveryType;\r\n clubId: number | null;\r\n tosAgree: boolean;\r\n pickupLocationId?: string;\r\n};\r\n\r\nexport type DeliveryType = 'STANDARD' | 'PREMIUM' | 'PICKUP';\r\nexport type DeletableKeys = 'variantPreference' | 'forMyself' | 'deliveryType' | 'clubId' | 'tosAgree' | 'pickupLocationId';\r\n\r\n/**\r\n * singleton class responsible for the users selections\r\n */\r\nexport class WineClubDataStore {\r\n private static instance: WineClubDataStore;\r\n\r\n private readonly LOCAL_STORAGE_LOCATION: string = 'WINE-CLUB-SELECTIONS';\r\n\r\n private wineClubData!: WineClubDataRef;\r\n\r\n private changeEvents: ((newData: WineClubDataRef) => void)[] = [];\r\n\r\n /**\r\n * get the current pages data\r\n * @returns singleton data of data store\r\n */\r\n public static getInstance(onChange?: (newData: WineClubDataRef) => void): WineClubDataStore {\r\n if (!WineClubDataStore.instance) {\r\n WineClubDataStore.instance = new WineClubDataStore();\r\n }\r\n\r\n if (onChange) {\r\n WineClubDataStore.instance.changeEvents.push(onChange);\r\n }\r\n\r\n return WineClubDataStore.instance;\r\n }\r\n\r\n // tslint:disable-next-line: no-any\r\n public getDeliveryMapFromConfig(coreContext: ICoreContext<{ [x: string]: any }>): {\r\n standard: string; premium: string; pickup: string;\r\n } {\r\n const config = coreContext.app.config.wineClubShippingLabels || {};\r\n return {\r\n standard: config.standard,\r\n pickup: config.pickup,\r\n premium: config.premium\r\n };\r\n }\r\n\r\n public edit(newData: WineClubDataRef): void {\r\n this.wineClubData = newData;\r\n this.changeEvents.forEach(event => event(newData));\r\n this._save();\r\n }\r\n\r\n public get(): WineClubDataRef {\r\n return { ...this.wineClubData };\r\n }\r\n\r\n public deleteKeys(...keys: DeletableKeys[]): void {\r\n keys.forEach(key => delete this.wineClubData[key]);\r\n this.changeEvents.forEach(event => event(this.wineClubData));\r\n this._save();\r\n }\r\n\r\n public reset(): WineClubDataStore {\r\n this.wineClubData = {\r\n deliveryType: 'STANDARD',\r\n tosAgree: false,\r\n forMyself: null,\r\n clubId: null,\r\n variantPreference: null\r\n };\r\n this.changeEvents.forEach(event => event(this.wineClubData));\r\n this._save();\r\n return this;\r\n }\r\n\r\n public isInResetState(): boolean {\r\n const {\r\n deliveryType,\r\n tosAgree,\r\n forMyself,\r\n clubId,\r\n variantPreference\r\n } = this.wineClubData;\r\n\r\n return deliveryType === 'STANDARD' &&\r\n tosAgree === false &&\r\n forMyself === null &&\r\n clubId === null &&\r\n variantPreference === null;\r\n }\r\n\r\n private constructor() {\r\n // tslint:disable-next-line: no-typeof-undefined\r\n if (typeof window !== 'undefined') {\r\n const previousWineData = window && window.localStorage.getItem(this.LOCAL_STORAGE_LOCATION);\r\n\r\n if (!previousWineData) {\r\n this.reset();\r\n return;\r\n }\r\n\r\n this.wineClubData = JSON.parse(previousWineData);\r\n }\r\n }\r\n\r\n private _save(): void {\r\n // tslint:disable-next-line: no-typeof-undefined\r\n if (typeof window !== 'undefined') {\r\n window.localStorage.setItem(this.LOCAL_STORAGE_LOCATION, JSON.stringify(this.wineClubData));\r\n }\r\n }\r\n}","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nexport interface IAdressAlert {\r\n message?: string;\r\n}\r\n\r\nconst AdressAlert: React.FC = ({ message }) => (\r\n \r\n {\r\n message &&\r\n <>\r\n {message}\r\n \r\n }\r\n \r\n);\r\n\r\nexport default AdressAlert;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nexport interface IAdressDropdown {\r\n id: string;\r\n name: string;\r\n className: string;\r\n value: string;\r\n additionalAddributes?: object;\r\n displayData: { key?: string; value?: string; disabled?: boolean }[];\r\n onChange(event: React.ChangeEvent): void;\r\n}\r\n\r\nconst getDropdownItem = (key?: string, value?: string, disabled?: boolean, selectedValue?: string): React.ReactNode => {\r\n const isSelected = (key || '').toLowerCase() === (selectedValue || '').toLowerCase();\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst AdressDropdown: React.FC = ({\r\n id,\r\n name,\r\n className,\r\n value,\r\n additionalAddributes,\r\n displayData,\r\n onChange\r\n}) => (\r\n \r\n {displayData && displayData.map(item =>\r\n (\r\n getDropdownItem(item.key, item.value, item.disabled, value)\r\n ))\r\n }\r\n \r\n );\r\n\r\nexport default AdressDropdown;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nexport interface IAdressLabel {\r\n id: string;\r\n text: string;\r\n}\r\n\r\nconst AdressLabel: React.FC = ({\r\n id,\r\n text\r\n}) => (\r\n \r\n);\r\n\r\nexport default AdressLabel;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport classname from 'classnames';\r\nimport { get } from 'mobx';\r\nimport * as React from 'react';\r\n\r\nimport { Heading as HeadingData } from '@msdyn365-commerce-modules/data-types';\r\nimport { Heading, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { Address } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nimport { AddressType, IAddressResource, IAddressResponse } from '../../common/address-module.data';\r\nimport { AddressFields } from '../../common/address.fields';\r\nimport {\r\n AddressItemDisplayType, AddressItemType, AddressValidationRuleType, IAddressDropdownsData,\r\n IAddressItem, IAddressValidationRule\r\n} from '../address-format.data';\r\nimport AddressAlertComponent from './address-alert';\r\nimport AddressButtonComponent from './address-button';\r\nimport AdressDropdownComponent from './address-dropdown';\r\nimport AddressErrorMessageComponent from './address-error-message';\r\nimport AddressErrorTitleComponent from './address-error-title';\r\nimport { AddressInputComponent } from './address-input';\r\nimport AddressLabelComponent from './address-label';\r\n\r\nexport interface IAddressAddInputProps {\r\n isUpdating?: boolean;\r\n hasError?: boolean;\r\n hasExternalSubmitGroup?: boolean;\r\n addressType: AddressType;\r\n addressFormat: IAddressItem[];\r\n defaultCountryRegionId: string;\r\n selectedAddress?: Address;\r\n dropdownDisplayData: IAddressDropdownsData;\r\n resources: IAddressResource;\r\n addressActionResponse?: IAddressResponse;\r\n addAddressHeading?: HeadingData;\r\n editAddressHeading?: HeadingData;\r\n validationError?: object;\r\n onInputChange(event: React.ChangeEvent): void;\r\n onDropdownChange(event: React.ChangeEvent): void;\r\n onSave(): void;\r\n onCancel(): void;\r\n}\r\n\r\nexport interface IAddressError {\r\n AddressError: INodeProps;\r\n title: React.ReactNode;\r\n message: React.ReactNode;\r\n}\r\n\r\nexport interface IAddressAddItem {\r\n key: string;\r\n AddressItem: INodeProps;\r\n label: React.ReactNode;\r\n alert: React.ReactNode;\r\n input: React.ReactNode;\r\n}\r\n\r\nexport interface IAddressAddUpdateProps {\r\n AddressForm: INodeProps;\r\n heading: React.ReactNode;\r\n items: IAddressAddItem[];\r\n hasError: boolean;\r\n error: IAddressError;\r\n isShowSaveButton: boolean;\r\n saveButton: React.ReactNode;\r\n isShowCancelButton: boolean;\r\n cancelButton: React.ReactNode;\r\n}\r\n\r\nconst getRequriedAttribute = (validationRules?: IAddressValidationRule[]): object => {\r\n const requriedRule = (validationRules || []).find(validationRule => {\r\n return validationRule.type === AddressValidationRuleType.Required;\r\n });\r\n\r\n return requriedRule ? { 'aria-required': true } : {};\r\n};\r\n\r\nfunction getLabelText (item: IAddressItem, isShipping: boolean): string {\r\n let labelText = item.label.replace(' *required', '');\r\n if (item.name === AddressFields.Street) { labelText = 'Street Address'; }\r\n if (isShipping && item.name === AddressFields.State) { labelText = 'State (not available in all states)'; }\r\n return labelText;\r\n}\r\n\r\nfunction getPlaceholderText (name: string): string {\r\n let placeholderText = '';\r\n if (name === AddressFields.Name) { placeholderText = 'First and last name'; }\r\n if (name === AddressFields.Street) { placeholderText = 'Enter a valid delivery address'; }\r\n return placeholderText;\r\n}\r\n\r\nconst getAddressItems = (selectedAddress: Address, props: IAddressAddInputProps): IAddressAddItem[] => {\r\n const { addressFormat, addressType, dropdownDisplayData, defaultCountryRegionId, validationError = {}, onInputChange, onDropdownChange } = props;\r\n\r\n function getWarningMessage (name: string, value: string): string | void {\r\n if (addressType !== AddressType.Shipping) {\r\n return;\r\n }\r\n if (name === AddressFields.Name) {\r\n const regex = /^([a-zA-Z]{2,}\\s[a-zA-Z]{1,}'?-?[a-zA-Z]{1,}\\s?([a-zA-Z]{1,})?)$/;\r\n if (!regex.test(value) && value.length > 0) {\r\n return 'Make sure you entered your first and last name';\r\n }\r\n }\r\n if (name === AddressFields.Street) {\r\n const regex = /^ *((#\\d+)|((box|bin)[-. \\/\\\\]?\\d+)|(.*p[ \\.]? ?(o|0)[-. \\/\\\\]? *-?((box|bin)|b|(#|num)?\\d+))|(p(ost)? *(o(ff(ice)?)?)? *((box|bin)|b)? *\\d+)|(p *-?\\/?(o)? *-?box)|post office box|((box|bin)|b) *(number|num|#)? *\\d+|(num|number|#) *\\d+)/i;\r\n if (regex.test(value)) {\r\n return 'PO Box is not a valid delivery address';\r\n }\r\n }\r\n }\r\n\r\n // @ts-ignore\r\n return addressFormat.map((addressFormatItem) => {\r\n const elementId = `${addressType.toLowerCase()}_address${addressFormatItem.name.toLowerCase()}`;\r\n const errorMessage = get(validationError, addressFormatItem.name);\r\n const className = classname('msc-address-form__item', `msc-address-form__item-${addressFormatItem.name.toLowerCase()}`, { 'msc-address-form__item-newline': addressFormatItem.isNewLine, 'address-form__item-invalid': errorMessage });\r\n let input;\r\n\r\n if (addressFormatItem.displayType === AddressItemDisplayType.Input) {\r\n input = (\r\n \r\n );\r\n } else {\r\n const displayData = dropdownDisplayData[addressFormatItem.name];\r\n let selectedValue = selectedAddress[addressFormatItem.name];\r\n\r\n if (addressFormatItem.type === AddressItemType.ThreeLetterISORegionName) {\r\n selectedValue = selectedValue || defaultCountryRegionId;\r\n }\r\n input = (\r\n \r\n );\r\n }\r\n\r\n if (addressType === AddressType.Shipping && addressFormatItem.name === AddressFields.Country) {\r\n return {\r\n key: addressFormatItem.name,\r\n AddressItem: { className: className },\r\n label: null,\r\n alert: null,\r\n input: null\r\n };\r\n }\r\n\r\n return {\r\n key: addressFormatItem.name,\r\n AddressItem: { className: className },\r\n label: ,\r\n alert: ,\r\n input: input\r\n };\r\n });\r\n};\r\n\r\nexport const AddressAddUpdate = (props: IAddressAddInputProps): IAddressAddUpdateProps => {\r\n const { editAddressHeading, addAddressHeading, selectedAddress = {}, resources, hasError, onCancel, onSave, hasExternalSubmitGroup, isUpdating, addressActionResponse } = props;\r\n const heading = selectedAddress.RecordId ? editAddressHeading : addAddressHeading;\r\n\r\n return {\r\n AddressForm: { className: 'msc-address-form' },\r\n heading: heading && ,\r\n items: getAddressItems(selectedAddress, props),\r\n isShowSaveButton: !hasExternalSubmitGroup,\r\n saveButton: (\r\n \r\n ),\r\n isShowCancelButton: !hasExternalSubmitGroup,\r\n cancelButton: (\r\n \r\n ),\r\n hasError: hasError || false,\r\n error: {\r\n AddressError: { className: 'msc-address-form__error' },\r\n title: addressActionResponse && addressActionResponse.errorTitle && ,\r\n message: addressActionResponse && addressActionResponse.errorMessage && \r\n }\r\n };\r\n};\r\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CacheType, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { IModuleStates } from './module-state.data';\n\n/**\n * GetModulesInput\n */\nexport class ModuleStatesCacheKey implements IActionInput {\n public getCacheKey = () => 'ModuleState';\n public getCacheObjectType = () => 'ModuleState';\n public dataCacheType = (): CacheType => 'none';\n}\n\nexport function getModuleStates(ctx: IActionContext): IModuleStates {\n const cacheKey = new ModuleStatesCacheKey();\n\n // @ts-ignore\n let moduleStates = ctx.get(cacheKey.getCacheObjectType(), cacheKey.getCacheKey());\n if (moduleStates) {\n return moduleStates;\n }\n ctx.update(cacheKey, {});\n moduleStates = ctx.get(cacheKey.getCacheObjectType(), cacheKey.getCacheKey());\n return moduleStates;\n}\n\nexport function updateModuleStates(value: IModuleStates, ctx: IActionContext): void {\n const cacheKey = new ModuleStatesCacheKey();\n ctx.update(cacheKey, value);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IModule } from '@msdyn365-commerce/core';\nimport isMatch from 'lodash/isMatch';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport { getModuleStates, updateModuleStates } from './module-state';\nimport { IModuleState, IModuleStateManager, IModuleStateProps, IModuleStates } from './module-state.data';\n\nexport interface IProps extends IModule, IModuleStateProps {\n enableControl?: boolean;\n}\n\nconst withModuleState =

(WrappedComponent: React.ComponentType

): React.ComponentType

=> {\n /**\n *\n * ModuleState component\n * @extends {React.Component

}\n */\n @observer\n class ModuleState extends React.Component

{\n constructor(props: P) {\n super(props);\n this.initializeState();\n }\n\n public render(): JSX.Element | null {\n const { id } = this.props;\n return ;\n }\n\n private initializeState = (): void => {\n const { id, typeName, context } = this.props;\n const states = getModuleStates(context.actionContext);\n if (!states) {\n this.props.telemetry.error('withModuleState initializeState() - states not found');\n return;\n }\n\n if (states[id]) {\n // state has been initialized\n return;\n }\n\n updateModuleStates(\n {\n ...states,\n [id]: {\n id,\n typeName,\n hasInitialized: false,\n hasError: false,\n isRequired: true,\n isCancellable: true,\n isSubmitContainer: false,\n status: undefined,\n childIds: []\n }\n },\n context.actionContext\n );\n };\n\n /**\n * GetModuleStateManager\n * Get module state manager by id\n */\n private getModuleStateManager = (id: string): IModuleStateManager => {\n const moduleState = this.get()[id];\n return {\n ...moduleState,\n hasInitialized: this.validate(id, { hasInitialized: true }, true), // All has initialized is initialized\n hasError: this.validate(id, { hasError: true }), // Partial has error is error\n isReady: this.validate(id, { status: 'ready' }, true, true), // All ready is ready (exclued disabled and skipped)\n isUpdating: this.validate(id, { status: 'updating' }), // Partial updating is updating\n isPending: this.validate(id, { status: 'pending' }), // Partial pending is pending\n isSkipped: this.validate(id, { status: 'skipped' }, true, true), // All skipped is skipped (exclued disabled)\n isDisabled: this.validate(id, { status: 'disabled' }, true), // All disabled is disabled\n isCancelAllowed: this.validate(id, { isCancellable: true }, true, true), // Partial not allowed is not allowed\n shouldSubmitContainer: this.validate(id, { isSubmitContainer: true }), // Partial submit is submit.\n hasExternalSubmitGroup: this.hasExternalSubmitGroup(),\n hasModuleState: this.hasModuleState(id),\n setIsRequired: (value: boolean): void => this.update(id, { isRequired: value }),\n setIsCancellable: (value: boolean): void => this.update(id, { isCancellable: value }),\n setIsSubmitContainer: (value: boolean): void => this.update(id, { isSubmitContainer: value }),\n setHasError: (value: boolean): void => this.update(id, { hasError: value }),\n onReady: (): void => this.update(id, { status: 'ready' }),\n onUpdating: (): void => this.update(id, { status: 'updating' }),\n onPending: (): void => this.update(id, { status: 'pending' }),\n onSkip: (): void => this.update(id, { status: 'skipped' }),\n onDisable: (): void => this.update(id, { status: 'disabled' }),\n getModule: (moduleId: string): IModuleStateManager => this.getModuleStateManager(moduleId),\n getModuleByTypeName: (typeName: string): IModuleStateManager => this.getModuleStateManagerByTypeName(typeName),\n init: (options?: Partial): void => {\n if (moduleState.hasInitialized) {\n // state has been initialized\n return;\n }\n this.update(id, {\n hasInitialized: true,\n ...options\n });\n }\n };\n };\n\n /**\n * GetModuleStateManagerByTypeName\n * Get module state manager by type name\n */\n private getModuleStateManagerByTypeName = (typeName: string): IModuleStateManager => {\n const moduleStates = getModuleStates(this.props.context.actionContext);\n const moduleState = Object.values(moduleStates).find(_moduleState => _moduleState.typeName === typeName);\n return this.getModuleStateManager((moduleState && moduleState.id) || '');\n };\n\n /**\n * Get\n * Get all module states\n */\n private get = (): IModuleStates => {\n return getModuleStates(this.props.context.actionContext);\n };\n\n /**\n * Update\n * Update module state\n */\n private update = (id: string, value: Partial): void => {\n // console.log('withModuleState - update', id, value);\n const modules = this.get();\n if (!modules[id]) {\n this.props.telemetry.error(`withModuleState update() - Module state with id ${id} is not found.`);\n return;\n }\n modules[id] = {\n ...modules[id],\n ...value\n };\n };\n\n private _validateLeaf = (id: string, source: Partial): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n return false;\n }\n return isMatch(module, source);\n };\n\n private _validateContainer = (\n id: string,\n source: Partial,\n allMatched?: boolean,\n skipSkippableItem?: boolean\n ): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n // module doesn't has module state\n return !!allMatched;\n }\n\n if (skipSkippableItem && (module.status === 'disabled' || module.status === 'skipped')) {\n // Skip disabled or skipped modules\n return !!allMatched;\n }\n\n // It is leaf module\n if (!module.childIds || !module.childIds.length) {\n return this._validateLeaf(id, source);\n }\n\n // It is container module\n const method = allMatched ? 'every' : 'some';\n return module.childIds[method](childId => this._validateContainer(childId, source, allMatched, skipSkippableItem));\n };\n\n /**\n * Validate\n * Validate current module and all its child module match the provided condition\n */\n private validate = (id: string, source: Partial, allMatched?: boolean, skipSkippableItem?: boolean): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n return false;\n }\n\n // It is leaf module\n if (!module.childIds || !module.childIds.length) {\n return this._validateLeaf(id, source);\n }\n\n // It is container module\n return this._validateContainer(id, source, allMatched, skipSkippableItem);\n };\n\n /**\n * hasExternalSubmitGroup\n * Module will use external submit group\n */\n private hasExternalSubmitGroup = (): boolean => {\n return !!this.props.enableControl;\n };\n\n /**\n * hasModuleState\n * Module is using module state manager\n */\n private hasModuleState = (id: string): boolean => {\n const modules = this.get();\n const module = modules[id];\n return !!module;\n };\n }\n\n return ModuleState;\n};\n\nexport default withModuleState;","\r\n/**\r\n * Enum describing the names of the various Address Input fields\r\n */\r\nexport enum AddressFields {\r\n Name = 'Name',\r\n Street = 'Street',\r\n City = 'City',\r\n State = 'State',\r\n ZipCode = 'ZipCode',\r\n Phone = 'Phone',\r\n Country = 'ThreeLetterISORegionName'\r\n}","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nexport interface IAdressErrorTitle {\r\n title: string;\r\n}\r\n\r\nconst AdressErrorTitle: React.FC = ({ title }) => (\r\n

\r\n {title}\r\n

\r\n);\r\n\r\nexport default AdressErrorTitle;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { get, set } from 'mobx';\r\n\r\nimport {\r\n Address, CountryRegionInfo, StateProvinceInfo\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nimport { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { AddressFields } from './address.fields';\r\n\r\nimport {\r\n AddressItemType, IAddressDropdownsData, IAddressItem, IAddressValidationRule\r\n} from './address-format.data';\r\nimport { AddressMetaData } from './address-meta-data';\r\n\r\n/**\r\n *\r\n * Retail Service Address format parser\r\n */\r\nexport class AddressFormat {\r\n private countryRegionsInfo?: CountryRegionInfo[];\r\n private addressMetaData: AddressMetaData;\r\n private context: ICoreContext;\r\n\r\n constructor(context: ICoreContext, countryRegionsInfo: CountryRegionInfo[], addressMetaData: AddressMetaData) {\r\n this.countryRegionsInfo = countryRegionsInfo;\r\n this.addressMetaData = addressMetaData;\r\n this.context = context;\r\n }\r\n\r\n public getAddressFormat(countryRegionId: string): IAddressItem[] {\r\n const countryRegionInfo = this._getCountryRegionInfo(countryRegionId);\r\n if (countryRegionInfo) {\r\n return this._getAddressDisplayFormat(countryRegionInfo);\r\n }\r\n return [];\r\n }\r\n\r\n public getCountryFormat(): { key?: string; value?: string }[] {\r\n return (this.countryRegionsInfo || []).map(countryRegion => {\r\n return {\r\n key: countryRegion.CountryRegionId,\r\n value: countryRegion.ShortName\r\n };\r\n });\r\n }\r\n\r\n public getStateFormat(stateProvinceInfo?: StateProvinceInfo[], isShippingAddress?: boolean): { key?: string; value?: string; disabled?: boolean }[] {\r\n let isDisabled = false;\r\n return (stateProvinceInfo || []).map(state => {\r\n if (isShippingAddress) {\r\n if (!this.context.actionContext.requestContext.app.config.statesSettings[state.StateId!.toLowerCase()]) {\r\n isDisabled = true;\r\n } else {\r\n isDisabled = false;\r\n }\r\n }\r\n return {\r\n key: state.StateId,\r\n value: state.StateName,\r\n disabled: isDisabled\r\n };\r\n });\r\n }\r\n\r\n public getPrefilledAddressDropdownData = (stateDefaultSelectionText: string, stateProvinceInfo?: StateProvinceInfo[], isShippingAddress?: boolean): IAddressDropdownsData => {\r\n const defaultStateText = {\r\n key: '',\r\n value: stateDefaultSelectionText,\r\n disabled: false\r\n };\r\n const dropdownData: IAddressDropdownsData = {};\r\n\r\n dropdownData[AddressItemType[AddressItemType.ThreeLetterISORegionName]] = this.getCountryFormat();\r\n dropdownData[AddressItemType[AddressItemType.State]] = this.getStateFormat(stateProvinceInfo, isShippingAddress);\r\n dropdownData[AddressItemType[AddressItemType.State]].unshift(defaultStateText);\r\n\r\n return dropdownData;\r\n };\r\n\r\n public getTwoLetterISORegionName = (countryRegionId: string): string | undefined => {\r\n const countryRegionInfo = this._getCountryRegionInfo(countryRegionId);\r\n\r\n return countryRegionInfo!.ISOCode;\r\n };\r\n\r\n public validateAddressFormat = (address: Address, validationError: Address, countryRegionId: string, isBilling?: boolean): boolean => {\r\n let isValid: boolean = true;\r\n const addressFormat = this.getAddressFormat((address.ThreeLetterISORegionName) || countryRegionId);\r\n\r\n if (isBilling) {\r\n const ZipCodeIndex = addressFormat.findIndex(addressFormatItem => addressFormatItem.name === AddressFields.ZipCode);\r\n const ZipCodeValidationIndex = addressFormat[ZipCodeIndex].validationRules!.findIndex(validationRule => validationRule.regEx !== '\\\\S');\r\n addressFormat[ZipCodeIndex].validationRules!.splice(ZipCodeValidationIndex, 1);\r\n }\r\n\r\n addressFormat.forEach(addressFormatItem => {\r\n set(validationError, { [addressFormatItem.name]: null });\r\n\r\n for (const validationRule of (addressFormatItem.validationRules || [])) {\r\n if (!this._validateRegEx(address, addressFormatItem.name, validationRule)) {\r\n set(validationError, { [addressFormatItem.name]: validationRule.message });\r\n isValid = false;\r\n break;\r\n }\r\n }\r\n });\r\n return isValid;\r\n };\r\n\r\n private _validateRegEx = (address: Address, propertyName: string, validationRule: IAddressValidationRule): boolean => {\r\n if (validationRule.regEx && validationRule.regEx.length > 0) {\r\n const regex = new RegExp(validationRule.regEx);\r\n return regex.test(get(address, propertyName) || '');\r\n }\r\n return true;\r\n };\r\n\r\n private _getCountryRegionInfo(countryRegionId: string): CountryRegionInfo | undefined {\r\n return (this.countryRegionsInfo || []).find(countryRegion => {\r\n return ((countryRegion.CountryRegionId || '').toLowerCase() === countryRegionId.toLowerCase());\r\n });\r\n }\r\n\r\n private _getAddressDisplayFormat(countryRegionInfo: CountryRegionInfo): IAddressItem[] {\r\n const addressDisplayItem: IAddressItem[] = [];\r\n\r\n if (countryRegionInfo && countryRegionInfo.AddressFormatLines) {\r\n const nameDisplayItem = this._extendAddressDisplayFormat(AddressItemType.Name, true);\r\n if (nameDisplayItem) {\r\n addressDisplayItem.push(nameDisplayItem);\r\n }\r\n\r\n countryRegionInfo.AddressFormatLines.forEach(formatLine => {\r\n if (formatLine.AddressComponentNameValue) {\r\n const addressItem = this.addressMetaData.getItemFormat(formatLine.AddressComponentNameValue);\r\n if (addressItem) {\r\n addressItem.isNewLine = formatLine.NewLine || false;\r\n addressDisplayItem.push(addressItem);\r\n }\r\n }\r\n });\r\n\r\n const phoneDisplayItem = this._extendAddressDisplayFormat(AddressItemType.Phone, false);\r\n if (phoneDisplayItem) {\r\n addressDisplayItem.push(phoneDisplayItem);\r\n }\r\n }\r\n\r\n return addressDisplayItem;\r\n }\r\n\r\n private _extendAddressDisplayFormat(type: AddressItemType, isNewLine: boolean): IAddressItem | undefined {\r\n const addressItem = this.addressMetaData.getItemFormat(type);\r\n if (addressItem) {\r\n addressItem.isNewLine = isNewLine;\r\n }\r\n return addressItem;\r\n }\r\n\r\n}\r\n","import { Heading } from '@msdyn365-commerce-modules/data-types';\r\nimport { Address } from '@msdyn365-commerce/retail-proxy';\r\n\r\nexport enum AddressOperation {\r\n Add = 'Add',\r\n Show = 'Show',\r\n Update = 'Update',\r\n List = 'List'\r\n}\r\n\r\nexport enum AddressType {\r\n Shipping = 'Shipping',\r\n Billing = 'Billing'\r\n}\r\n\r\nexport interface IDropdownDisplayData {\r\n [index: string]: { key?: string; value?: string }[];\r\n}\r\n\r\nexport interface IAddressResponse {\r\n errorTitle?: string;\r\n errorMessage?: string;\r\n customerAddresses?: Address[];\r\n address?: Address;\r\n}\r\n\r\nexport interface IAddressConfig {\r\n heading?: Heading;\r\n primaryAddressSectionHeading?: Heading;\r\n otherAddressSectionHeading?: Heading;\r\n addAddressHeading?: Heading;\r\n editAddressHeading?: Heading;\r\n}\r\n\r\nexport interface IAddressResource {\r\n addressAddButtonText: string;\r\n addressAddButtonAriaLabel: string;\r\n addressPrimaryButtonText: string;\r\n addressPrimaryButtonAriaLabel: string;\r\n addressEditButtonText: string;\r\n addressEditButtonAriaLabel: string;\r\n addressSaveButtonText: string;\r\n addressSaveButtonAriaLabel: string;\r\n addressCancelButtonText: string;\r\n addressCancelButtonAriaLabel: string;\r\n addressStateDefaultSelectionText: string;\r\n addressNameLabel: string;\r\n addressNameRequiredErrorMessage: string;\r\n addressPhoneLabel: string;\r\n addressPhoneRequiredErrorMessage: string;\r\n addressZipCodeLabel: string;\r\n addressZipCodeRequiredErrorMessage: string;\r\n addressCityLabel: string;\r\n addressCityRequiredErrorMessage: string;\r\n addressCountyLabel: string;\r\n addressCountyRequiredErrorMessage: string;\r\n addressStateLabel: string;\r\n addressStateRequiredErrorMessage: string;\r\n addressThreeLetterISORegionNameLabel: string;\r\n addressThreeLetterISORegionNameRequiredErrorMessage: string;\r\n addressStreetRequiredErrorMessage: string;\r\n addressDistrictLabel: string;\r\n addressDistrictRequiredErrorMessage: string;\r\n addressStreetNumberLabel: string;\r\n addressStreetNumberRequiredErrorMessage: string;\r\n addressBuildingComplimentLabel: string;\r\n addressBuildingComplimentRequiredErrorMessage: string;\r\n addressPostboxLabel: string;\r\n addressPostboxRequiredErrorMessage: string;\r\n addressHouseRULabel: string;\r\n addressHouseRURequiredErrorMessage: string;\r\n addressFlatRULabel: string;\r\n addressFlatRURequiredErrorMessage: string;\r\n addressCountryOKSMCodeRULabel: string;\r\n addressCountryOKSMCodeRURequiredErrorMessage: string;\r\n addressErrorMessageTitle: string;\r\n addressGenericErrorMessage: string;\r\n addressEmptyListAddressMessage: string;\r\n}\r\n\r\n// tslint:disable-next-line:no-empty-interface\r\nexport interface IAddressModuleData {}","export enum AddressItemDisplayType {\r\n Input = 'Input',\r\n Dropdown = 'Dropdown'\r\n}\r\n\r\nexport enum AddressValidationRuleType {\r\n Required = 'Required',\r\n Format = 'Format'\r\n}\r\n\r\nexport enum AddressItemType {\r\n Name = 1001,\r\n Phone = 1002,\r\n ZipCode = 1,\r\n City = 2,\r\n County = 3,\r\n State = 4,\r\n ThreeLetterISORegionName = 5,\r\n Street = 6,\r\n District = 7,\r\n StreetNumber = 8,\r\n BuildingCompliment = 9,\r\n Postbox = 10,\r\n House_RU = 21,\r\n Flat_RU = 22,\r\n CountryOKSMCode_RU = 23,\r\n}\r\n\r\nexport interface IAddressItem {\r\n name: string;\r\n type: AddressItemType;\r\n label: string;\r\n maxLength: number;\r\n displayType: AddressItemDisplayType;\r\n validationRules?: IAddressValidationRule[];\r\n isNewLine: boolean;\r\n}\r\nexport interface IAddressValidationRule {\r\n type: AddressValidationRuleType;\r\n regEx: string;\r\n message: string;\r\n}\r\nexport interface IAddressDropdownsData {\r\n [index: string]: { key?: string; value?: string }[];\r\n}\r\n\r\n// tslint:disable-next-line:no-empty-interface\r\nexport interface IAddressFormatData {}","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nexport interface IAddressButton {\r\n className: string;\r\n text: string;\r\n ariaLabel: string;\r\n disabled?: boolean;\r\n onClick(event: React.MouseEvent): void;\r\n}\r\n\r\nconst AddressButton: React.FC = ({ className, text, ariaLabel, disabled, onClick }) => (\r\n \r\n {text}\r\n \r\n);\r\n\r\nexport default AddressButton;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\nimport { createAddressWarning } from './address-warning';\r\n\r\nexport interface IAdressInput {\r\n id?: string;\r\n name?: string;\r\n className: string;\r\n type: string;\r\n value: string;\r\n maxLength?: number;\r\n additionalAddributes?: object;\r\n placeholder?: string;\r\n onChange(event: React.ChangeEvent): void;\r\n hasWarning?(name: string, value: string): string | void;\r\n}\r\n\r\ninterface IAdressState {\r\n warningMessage: string;\r\n}\r\n\r\n/**\r\n * Class definition for an input field within a shipping address form\r\n */\r\nexport class AddressInputComponent extends React.Component {\r\n constructor (props: IAdressInput) {\r\n super(props);\r\n this._onInputBlur = this._onInputBlur.bind(this);\r\n this.state = {warningMessage: ''};\r\n }\r\n\r\n public render (): JSX.Element {\r\n const {\r\n id,\r\n name,\r\n className,\r\n type,\r\n value,\r\n maxLength,\r\n additionalAddributes,\r\n placeholder,\r\n onChange,\r\n } = this.props;\r\n return (\r\n \r\n {this.state.warningMessage && createAddressWarning(this.state.warningMessage)}\r\n \r\n \r\n );\r\n }\r\n\r\n private _onInputBlur (el: React.ChangeEvent): void {\r\n const hasWarning = this.props.hasWarning && this.props.hasWarning(this.props.name || '', el.target.value);\r\n if (hasWarning) {\r\n this.setState({warningMessage: hasWarning});\r\n } else {\r\n this.setState({warningMessage: ''});\r\n }\r\n }\r\n}","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nexport interface IAddressWarning {\r\n message?: string;\r\n}\r\n\r\nexport const createAddressWarning = (message?: string) => {\r\n return (\r\n \r\n {message || ''}\r\n \r\n );\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nexport interface IAdressErrorMessage {\r\n message: string;\r\n}\r\n\r\nconst AdressErrorMessage: React.FC = ({ message }) => (\r\n

\r\n {message}\r\n

\r\n);\r\n\r\nexport default AdressErrorMessage;\r\n","import { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\r\nimport { getRichTextHtml } from '@msdyn365-commerce/core';\r\nimport { computed, when } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport Input from 'reactstrap/lib/Input';\r\nimport { ICheckoutTermsAndConditionsData } from './checkout-terms-and-conditions.data';\r\nimport { ICheckoutTermsAndConditionsProps } from './checkout-terms-and-conditions.props.autogenerated';\r\n\r\ninterface ICheckoutTermsAndConditionsState {\r\n accepted: boolean;\r\n submitted: boolean;\r\n}\r\n\r\ninterface IProps extends ICheckoutTermsAndConditionsProps, IModuleStateProps { }\r\n\r\n/**\r\n * Checkout Terms and Conditions\r\n */\r\n// @ts-ignore\r\n@withModuleState\r\n@observer\r\nclass CheckoutTermsAndConditions extends React.Component {\r\n public state: ICheckoutTermsAndConditionsState = {\r\n accepted: false,\r\n submitted: false\r\n };\r\n\r\n @computed get isDataReady(): boolean {\r\n return (\r\n (this.props.data.checkoutState && this.props.data.checkoutState.result && this.props.data.checkoutState.status) === 'SUCCESS'\r\n );\r\n }\r\n\r\n public componentDidMount(): void {\r\n // @ts-ignore: Compiler not reconizing condition check for function params\r\n when(\r\n () => this.isDataReady,\r\n () => {\r\n this.init();\r\n }\r\n );\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n return (\r\n
\r\n \r\n
\r\n {this._prop65Icon}\r\n {this.props.config.prop65WarningText && // tslint:disable-next-line:react-no-dangerous-html\r\n }\r\n {this.props.config.legalDisclaimer && // tslint:disable-next-line:react-no-dangerous-html\r\n }\r\n
\r\n
\r\n );\r\n }\r\n\r\n private init = (): void => {\r\n const accepted = this.state.accepted;\r\n this.props.moduleState.init({\r\n status: (accepted ? 'ready' : 'updating')\r\n });\r\n };\r\n\r\n private onSubmit = (): void => {\r\n const { accepted } = this.state;\r\n if (!accepted) {\r\n this.props.moduleState.setHasError(true);\r\n } else {\r\n this.props.moduleState.onReady();\r\n this.setState({submitted: true});\r\n }\r\n };\r\n\r\n private onChange = (checkbox: React.ChangeEvent) => {\r\n this.setState({accepted: checkbox.target.checked}, () => {\r\n this.onSubmit();\r\n });\r\n };\r\n\r\n private get _prop65Icon(): JSX.Element | null {\r\n const {\r\n prop65Icon,\r\n } = this.props.config;\r\n\r\n if (prop65Icon) {\r\n return Prop 65 Icon;\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n\r\nexport default CheckoutTermsAndConditions;","import {\r\n AddressItemDisplayType, AddressItemType, AddressValidationRuleType, IAddressItem,\r\n IAddressValidationRule\r\n} from './address-format.data';\r\nimport { IAddressResource } from './address-module.data';\r\n\r\n/**\r\n * Address meta data\r\n */\r\nexport class AddressMetaData {\r\n\r\n private metaData: IAddressItem[] = [];\r\n private resources: IAddressResource;\r\n private requiredFieldRegEx: string = '\\\\S';\r\n\r\n private phoneValidation: string = '^\\\\(?([0-9]{3})\\\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$';\r\n private zipcodeValidation: string = '(^[0-9]{5}$)|(^[0-9]{5}-[0-9]{4}$)';\r\n private resourcesPrefix: string = 'address';\r\n private maxLength: number = 64;\r\n private requiredFields: AddressItemType[];\r\n\r\n constructor(resources: IAddressResource) {\r\n this.resources = resources || {};\r\n this.requiredFields = [AddressItemType.Name, AddressItemType.ZipCode, AddressItemType.City, AddressItemType.State, AddressItemType.ThreeLetterISORegionName, AddressItemType.Street, AddressItemType.Phone];\r\n this._init();\r\n }\r\n\r\n public getItemFormat(id: number): IAddressItem | undefined {\r\n return this.metaData.find((item) => {\r\n return item.type === id;\r\n });\r\n }\r\n\r\n private _init(): void {\r\n this._addItem(AddressItemType.Name, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.Phone, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.ZipCode, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.City, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.County, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.State, AddressItemDisplayType.Dropdown);\r\n this._addItem(AddressItemType.ThreeLetterISORegionName, AddressItemDisplayType.Dropdown);\r\n this._addItem(AddressItemType.Street, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.District, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.StreetNumber, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.BuildingCompliment, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.Postbox, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.House_RU, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.Flat_RU, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.CountryOKSMCode_RU, AddressItemDisplayType.Input);\r\n }\r\n\r\n private _addItem(type: AddressItemType, displayType: AddressItemDisplayType): void {\r\n const nameKey = AddressItemType[type].replace('_', '');\r\n const item: IAddressItem = {\r\n type,\r\n displayType,\r\n name: AddressItemType[type],\r\n label: this.resources[`${this.resourcesPrefix}${nameKey}Label`],\r\n maxLength: this.maxLength,\r\n validationRules: this._validationRules(type, nameKey),\r\n isNewLine: true\r\n };\r\n\r\n this.metaData.push(item);\r\n }\r\n\r\n private _validationRules(type: AddressItemType, name: string): IAddressValidationRule[] {\r\n const validationRules: IAddressValidationRule[] = [];\r\n\r\n if (type === AddressItemType.Phone) {\r\n validationRules.push(\r\n this._validationRule(AddressValidationRuleType.Required, this.phoneValidation, 'Phone # is invalid')\r\n );\r\n }\r\n\r\n if (type === AddressItemType.ZipCode) {\r\n validationRules.push(\r\n this._validationRule(AddressValidationRuleType.Required, this.zipcodeValidation, 'Invalid Zip Code')\r\n );\r\n }\r\n\r\n for (const ruleType of Object.keys(AddressValidationRuleType)) {\r\n const key = `${this.resourcesPrefix}${name}${ruleType}`;\r\n const message = this.resources[`${key}ErrorMessage`];\r\n switch (ruleType) {\r\n case AddressValidationRuleType.Required: {\r\n if (this.requiredFields.find((itemType: AddressItemType) => itemType === type)) {\r\n validationRules.push(this._validationRule(ruleType, this.requiredFieldRegEx, message));\r\n }\r\n break;\r\n }\r\n default:\r\n }\r\n }\r\n return validationRules;\r\n }\r\n\r\n private _validationRule(type: AddressValidationRuleType, regEx: string, message: string): IAddressValidationRule {\r\n return {\r\n type,\r\n regEx,\r\n message\r\n };\r\n }\r\n\r\n}\r\n","import {\r\n addAddress, AddressManagementInput, updateAddress, updatePrimaryAddress\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { IActionInput, ICoreContext, IObservableAction, ITelemetry } from '@msdyn365-commerce/core';\r\nimport {\r\n Address, CountryRegionInfo, StateProvinceInfo\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nimport { getStateProvinceAction, GetStateProvincesInput } from '../dataActions/get-state-provinces';\r\nimport { IAddressResource, IAddressResponse } from './address-module.data';\r\n\r\n/**\r\n *\r\n * Address common\r\n */\r\nexport class AddressCommon {\r\n\r\n private context: ICoreContext;\r\n private customerAccountNumber?: string;\r\n private resources: IAddressResource;\r\n private telemetry: ITelemetry;\r\n\r\n constructor(context: ICoreContext, resources: IAddressResource, telemetry: ITelemetry, customerAccountNumber?: string) {\r\n this.context = context;\r\n this.customerAccountNumber = customerAccountNumber;\r\n this.resources = resources;\r\n this.telemetry = telemetry;\r\n }\r\n\r\n public getDefaultCountryRegionId = (countryRegionId: string, countryRegions: CountryRegionInfo[], market?: string): string => {\r\n const marketISOCode = market || 'US';\r\n const currentCountryRegion = countryRegions.find(countryRegion => (countryRegion.ISOCode || '') === marketISOCode);\r\n return (currentCountryRegion && currentCountryRegion.CountryRegionId) || countryRegionId;\r\n };\r\n\r\n public parseRetailException = (resources: IAddressResource): IAddressResponse => {\r\n return {\r\n errorTitle: resources.addressErrorMessageTitle,\r\n errorMessage: resources.addressGenericErrorMessage\r\n };\r\n };\r\n\r\n public isAuthenticatedFlow = (): boolean => {\r\n return !!this.customerAccountNumber;\r\n };\r\n\r\n public getStateProvinces = async (countryRegionId: string): Promise => {\r\n let response: StateProvinceInfo[] = [];\r\n if (this.context && this.context.actionContext) {\r\n try {\r\n const input = new GetStateProvincesInput(countryRegionId, this.context.request.apiSettings);\r\n response = await getStateProvinceAction(input, this.context.actionContext);\r\n } catch (error) {\r\n if (this.telemetry) {\r\n this.telemetry.error(`Error encountered ${error}`);\r\n }\r\n }\r\n }\r\n return Promise.resolve(response);\r\n };\r\n\r\n public addCustomerAddress = (address: Address): Promise => {\r\n return this.submitCustomerAddress(addAddress, address);\r\n };\r\n\r\n public updateCustomerAddress = (address: Address): Promise => {\r\n return this.submitCustomerAddress(updateAddress, address);\r\n };\r\n\r\n public updateCustomerPrimaryAddress = (address: Address): Promise => {\r\n return this.submitCustomerAddress(updatePrimaryAddress, address);\r\n };\r\n\r\n private submitCustomerAddress = (addressAction: IObservableAction, address: Address): Promise => {\r\n address.AddressTypeValue = address.AddressTypeValue || 7; // 7 sets it to HOME by default\r\n\r\n const input = new AddressManagementInput(address, this.customerAccountNumber || '');\r\n return this.execAddressAction(addressAction, input, address);\r\n };\r\n\r\n private execAddressAction = async (addressAction: IObservableAction, input: IActionInput | IActionInput[], address: Address): Promise => {\r\n let response: IAddressResponse = {};\r\n\r\n if (this.context && this.context.actionContext) {\r\n try {\r\n const addresses = await addressAction(input, this.context.actionContext);\r\n if (addresses.length > 0) {\r\n response.address = address.RecordId ? address : addresses[addresses.length - 1];\r\n }\r\n response.customerAddresses = addresses;\r\n } catch (error) {\r\n if (this.telemetry) {\r\n this.telemetry.error(`Error encountered ${error}`);\r\n }\r\n response = this.parseRetailException(this.resources);\r\n }\r\n }\r\n return Promise.resolve(response);\r\n };\r\n}\r\n"],"sourceRoot":""}