{"version":3,"file":"static/js/56.add1af7aa4c19f19ba2f.chunk.js","mappings":"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","sources":["webpack://Citta2.0/./src/modules/checkout-pickup/checkout-pickup.tsx?28aa","webpack://Citta2.0/./src/modules/checkout-pickup/checkout-pickup.view.tsx?d64e","webpack://Citta2.0/./src/checkout-errors/checkout-errors.ts?a9e0","webpack://Citta2.0/./src/modules/checkout-pickup/components/checkout-pickup-group.tsx?9de7","webpack://Citta2.0/./src/modules/checkout-pickup/components/checkout-pickup-utility.ts?b7eb","webpack://Citta2.0/./src/modules/checkout-pickup/components/checkout-pickup-date-dropdown.tsx?e5a3","webpack://Citta2.0/./src/modules/checkout-pickup/components/checkout-pickup-timeslot-dropdown.tsx?aef8"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CheckoutModule, ErrorLocation, ICheckoutState } from '@msdyn365-commerce/global-state';\nimport { getEstimatedPickupTimeslotAvailabilitiesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n CartLine,\n LineDeliverySpecification,\n OrgUnitLocation,\n PickupTimeslotAvailability,\n PickupTimeslotAvailabilitySearchCriteria,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport {\n ArrayExtensions,\n getFallbackImageUrl,\n getSimpleProducts,\n ObjectExtensions,\n ProductInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { format, IModuleProps, isNullOrWhiteSpace, Waiting } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { action, computed, observable, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutPickupData } from './checkout-pickup.data';\nimport { ICheckoutPickupProps } from './checkout-pickup.props.autogenerated';\nimport {\n CheckoutPickupDateDropdown,\n CheckoutPickupError,\n CheckoutPickupTimeslotDropdown,\n getDate,\n getTimeslot,\n getUTCDateWithoutTime\n} from './components';\nimport {\n CheckoutPickupAddress,\n CheckoutPickupCartLines,\n CheckoutPickupGroupHeader,\n CheckoutPickupTimeslotInfo,\n DefaultImageSettings,\n ICheckoutPickupAddressProps,\n ICheckoutPickupCartLineInfo,\n ICheckoutPickupCartLinesProps,\n ICheckoutPickupGroup,\n ICheckoutPickupGroupHeaderProps,\n ICheckoutPickupGroupViewProps,\n ICheckoutPickupTimeslotInfoProps,\n PickupTimeslotAvailabilityState\n} from './components/checkout-pickup-group';\nimport { focusOnCheckoutError } from '../../checkout-errors';\n\nexport interface ICheckoutPickupModuleProps extends ICheckoutPickupProps, IModuleStateProps {}\n\nexport interface ICheckoutPickupState {\n pickupGroups: ICheckoutPickupGroup[];\n}\n\nexport interface ICheckoutPickupViewState {\n isLoading: boolean;\n isHeaderError: boolean;\n isShowDropdown: boolean;\n isShowSelected: boolean;\n}\n\nexport interface ICheckoutPickupViewProps extends ICheckoutPickupProps<{}> {\n checkoutPickup: IModuleProps;\n viewState: ICheckoutPickupViewState;\n headerError: React.ReactNode;\n waiting: React.ReactNode;\n pickupGroups: ICheckoutPickupGroupViewProps[];\n checkoutErrorRef?: React.RefObject;\n}\n\n/**\n *\n * CheckoutPickup component.\n * @extends {React.Component}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass CheckoutPickup extends React.Component {\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n @observable private isLoading: boolean = false;\n\n @observable private headerErrorMessage?: string;\n\n @computed get isDataReady(): boolean {\n return (\n (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS' &&\n (this.props.data.orgUnitLocations.result && this.props.data.orgUnitLocations.status) === 'SUCCESS'\n );\n }\n\n constructor(props: ICheckoutPickupModuleProps) {\n super(props);\n this.state = { pickupGroups: [] };\n\n this.setDateHandler = this.setDateHandler.bind(this);\n this.setTimeslotHandler = this.setTimeslotHandler.bind(this);\n }\n\n public componentDidMount(): void {\n when(\n () => this.isDataReady,\n async () => {\n await this.initPickupGroup();\n this.initModuleState();\n }\n );\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (checkoutError && checkoutError.errorLocation === ErrorLocation.CheckoutPickup && checkoutError.errorMessage) {\n this.setError(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutPickup) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutPickupModuleProps, nextState: ICheckoutPickupState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n if (!this.isDataReady || !this.canPickup()) {\n return null;\n }\n\n const { resources, config, context } = this.props;\n\n const {\n pickupDateLabel,\n pickupTimeslotLabel,\n pickupDateDefaultText,\n pickupTimeslotDefaultText,\n itemsText,\n singleItemText,\n pickupDateTimeslotText,\n pickupTimeslotPlaceHolder,\n pickupLocationLabel\n } = resources;\n\n const { locale } = context.request;\n const { className, imageSettings, useHour12TimeFormat } = config;\n const defaultClassName = 'ms-checkout-pickup';\n const groupsViewProps: ICheckoutPickupGroupViewProps[] = [];\n\n this.state.pickupGroups.forEach((value, index) => {\n // Divider line for each pickup group\n const groupDivider: React.ReactNode = index !== 0 &&
;\n\n // Line images\n const cartlines: ICheckoutPickupCartLineInfo[] = value.cartLines\n .filter(x => !ObjectExtensions.isNullOrUndefined(x.product))\n .map(line => ({\n lineId: line.cartLine.LineId || '',\n imageProps: {\n requestContext: context.actionContext.requestContext,\n className: `${defaultClassName}__group-line-image`,\n altText: line.product?.Name,\n src: line.product?.PrimaryImageUrl || '',\n fallBackSrc: getFallbackImageUrl(\n line.product?.ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n ),\n gridSettings: context.request.gridSettings!,\n imageSettings: imageSettings || DefaultImageSettings,\n loadFailureBehavior: 'empty'\n },\n quantity: line.cartLine.Quantity || 0\n }));\n\n // Heading for each group\n const numberOfCartLines = this._countItems(cartlines);\n const itemText = numberOfCartLines > 1 ? itemsText : singleItemText;\n const itemTitle = `(${format(itemText, numberOfCartLines)})`;\n const headerProps: ICheckoutPickupGroupHeaderProps = {\n moduleClassName: defaultClassName,\n storeInfo: `${value.pickupModeName}, ${value.storeName}`,\n items: itemTitle\n };\n const groupHeader: React.ReactNode = ;\n\n const lineImageProps: ICheckoutPickupCartLinesProps = {\n moduleClassName: defaultClassName,\n cartLines: cartlines.filter(x => !ObjectExtensions.isNullOrUndefined(x))\n };\n const cartLineImages: React.ReactNode = ;\n\n // Selected pickup date and timeslot node\n const dateString = getDate(value.selectedDate, locale);\n const timeslotString = getTimeslot(\n pickupTimeslotPlaceHolder,\n value.selectedTimeslot?.StartDateTime,\n value.selectedTimeslot?.EndDateTime,\n locale,\n useHour12TimeFormat\n );\n const timeslotInfoProps: ICheckoutPickupTimeslotInfoProps = {\n moduleClassName: defaultClassName,\n title: pickupDateTimeslotText,\n content: `${dateString} ${timeslotString}`\n };\n const selectedDateTimeslotNode: React.ReactNode = ;\n\n // Pickup address\n const addressProps: ICheckoutPickupAddressProps = {\n moduleClassName: defaultClassName,\n title: pickupLocationLabel,\n address: value.pickupAddress\n };\n const pickupAddress: React.ReactNode = ;\n\n // Pickup date and timeslot dropdown list\n const dropdownClassName = `${defaultClassName}__group-datetime-dropdown`;\n const labelClassName = `${dropdownClassName}-label`;\n const dropdownSelectClassName = `${dropdownClassName}-select`;\n const dateDropdownNode: React.ReactNode = (\n \n );\n\n const timeslotDropdownNode: React.ReactNode = (\n \n );\n\n const viewProp: ICheckoutPickupGroupViewProps = {\n moduleProps: { ...this.props },\n pickupGroupContainer: { className: `${defaultClassName}__group` },\n dateTimeslotContainer: { className: `${defaultClassName}__group-datetime` },\n pickupStoreId: value.pickupStoreId,\n pickupModeName: value.pickupModeName,\n deliveryMode: value.deliveryMode,\n groupDivider,\n groupHeader,\n groupErrorMessage: ,\n cartLineImages,\n pickupDateDropdown: dateDropdownNode,\n pickupTimeslotDropdown: timeslotDropdownNode,\n selectedDateTimeslot: selectedDateTimeslotNode,\n pickupAddress\n };\n\n groupsViewProps.push(viewProp);\n });\n\n const {\n moduleState: { isReady, hasError }\n } = this.props;\n const isHeaderError = !this.isLoading && this.headerErrorMessage !== undefined;\n const isShowDropdown = !this.isLoading && !isReady;\n const isShowSelected = !this.isLoading && !hasError && isReady;\n\n const viewProps: ICheckoutPickupViewProps = {\n ...this.props,\n checkoutPickup: {\n moduleProps: this.props,\n className: classname(defaultClassName, className)\n },\n viewState: {\n isLoading: this.isLoading,\n isHeaderError,\n isShowSelected,\n isShowDropdown\n },\n headerError: ,\n waiting: ,\n pickupGroups: groupsViewProps,\n checkoutErrorRef: this.checkoutErrorRef\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n @action\n public async setDateHandler(pickupStoreId: string, deliveryMode: string, pickupDate: Date | undefined): Promise {\n const oldGroup = this.state.pickupGroups.find(\n group => group.pickupStoreId === pickupStoreId && group.deliveryMode === deliveryMode\n );\n if (!oldGroup) {\n return;\n }\n\n const newGroup: ICheckoutPickupGroup = { ...oldGroup };\n newGroup.selectedDate = pickupDate;\n newGroup.selectedTimeslot = undefined; // Clear the selected timeslot in any case\n newGroup.timeslotErrorMessage = undefined; // Clear the timeslot error message if any\n newGroup.lineDeliverySpecs.forEach((lineSpec: LineDeliverySpecification) => {\n if (lineSpec.DeliverySpecification) {\n lineSpec.DeliverySpecification.PickupTimeslotStartDateTime = undefined;\n lineSpec.DeliverySpecification.PickupTimeslotEndDateTime = undefined;\n }\n });\n\n if (pickupDate) {\n // Date is set\n const searchCriteria: PickupTimeslotAvailabilitySearchCriteria = {\n DeliveryModeCode: newGroup.deliveryMode,\n StoreId: newGroup.pickupStoreId,\n StartDate: pickupDate,\n EndDate: pickupDate,\n SearchOptionValue: 2 // Test runtime does not recognize PickupTimeslotAvailabilitySearchOption.All\n };\n const timeslotResults: PickupTimeslotAvailability[] = await getEstimatedPickupTimeslotAvailabilitiesAsync(\n { callerContext: this.props.context.actionContext, queryResultSettings: {}, bypassCache: 'get' },\n searchCriteria\n );\n\n newGroup.availableTimeslots = timeslotResults.filter(value => (value.AvailableCapacity || 0) > 0);\n newGroup.dateErrorMessage =\n newGroup.availableTimeslots.length === 0 ? this.props.resources.noAvailableTimeslotError : undefined;\n } else {\n // Date is not set\n newGroup.availableTimeslots = [];\n newGroup.dateErrorMessage = undefined;\n }\n\n const groups = this.state.pickupGroups.map(group => {\n if (group.pickupStoreId === pickupStoreId && group.deliveryMode === deliveryMode) {\n return newGroup;\n }\n return group;\n });\n\n this.setState({ pickupGroups: groups });\n }\n\n @action\n public setTimeslotHandler(pickupStoreId: string, deliveryMode: string, pickupTimeslot: PickupTimeslotAvailability | undefined): void {\n const oldGroup = this.state.pickupGroups.find(\n group => group.pickupStoreId === pickupStoreId && group.deliveryMode === deliveryMode\n );\n if (!oldGroup) {\n return;\n }\n\n const newGroup: ICheckoutPickupGroup = { ...oldGroup };\n\n newGroup.selectedTimeslot = pickupTimeslot;\n newGroup.lineDeliverySpecs.forEach((lineSpec: LineDeliverySpecification) => {\n if (lineSpec.DeliverySpecification) {\n lineSpec.DeliverySpecification.PickupTimeslotStartDateTime = pickupTimeslot?.StartDateTime;\n lineSpec.DeliverySpecification.PickupTimeslotEndDateTime = pickupTimeslot?.EndDateTime;\n }\n });\n\n if (pickupTimeslot) {\n newGroup.timeslotErrorMessage = undefined;\n }\n\n const groups = this.state.pickupGroups.map(group => {\n if (group.pickupStoreId === pickupStoreId && group.deliveryMode === deliveryMode) {\n return newGroup;\n }\n return group;\n });\n\n this.setState({ pickupGroups: groups });\n }\n\n @action\n private readonly initModuleState = (): void => {\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onSubmit: this.onSubmit,\n status: this.canPickup() ? (this.isPickupTimeSlotSet() ? 'ready' : 'updating') : 'disabled'\n });\n };\n\n private readonly onEdit = (): void => {\n this.props.moduleState.onUpdating();\n };\n\n private readonly onReady = (): void => {\n this.props.moduleState.onReady();\n };\n\n private readonly onPending = (): void => {\n this.props.moduleState.onPending();\n };\n\n private readonly onSubmit = async (): Promise => {\n await this.updateCartLinePickupDateTimeslot();\n };\n\n private readonly setError = (errorMessage: string, isHeaderError: boolean = true): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n if (isHeaderError) {\n this.headerErrorMessage = errorMessage;\n }\n };\n\n private readonly clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.headerErrorMessage = undefined;\n };\n\n @action\n private readonly initPickupGroup = async (): Promise => {\n const pickupCartLines: CartLine[] = this.getCartLinesforPickup();\n let products: SimpleProduct[] = [];\n try {\n products = await this.getProductsByCartLines(\n this.props.data.checkout.result?.checkoutCart.cart.ChannelId || 0,\n pickupCartLines\n );\n } catch (error) {\n this.props.telemetry.error(error);\n }\n const pickupGroups: ICheckoutPickupGroup[] = [];\n const locations: OrgUnitLocation[] = this.props.data.orgUnitLocations.result || [];\n this.isLoading = true;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { featureState, deliveryOptions } = this.props?.data;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n\n for (const line of pickupCartLines) {\n const group: ICheckoutPickupGroup | undefined = pickupGroups.find(\n x => x.pickupStoreId === line.FulfillmentStoreId && x.deliveryMode === line.DeliveryMode\n );\n const product: SimpleProduct | undefined = products.find(x => x.RecordId === line.ProductId);\n const lineDeliverySpecification: LineDeliverySpecification = {\n LineId: line.LineId,\n DeliverySpecification: {\n DeliveryModeId: line.DeliveryMode,\n DeliveryPreferenceTypeValue: 2,\n PickUpStoreId: line.FulfillmentStoreId,\n PickupTimeslotStartDateTime: line.PickupTimeslotStartDateTime,\n PickupTimeslotEndDateTime: line.PickupTimeslotEndDateTime,\n DeliveryAddress: line.ShippingAddress\n }\n };\n if (group) {\n group.lineDeliverySpecs.push(lineDeliverySpecification);\n group.cartLines.push({ cartLine: line, product });\n } else {\n // Group not exists yet\n const location: OrgUnitLocation | undefined = locations.find(x => x.OrgUnitNumber === line.FulfillmentStoreId);\n const storeName: string = this.getStoreName(location, line);\n const selectedDate: Date | undefined =\n line.PickupTimeslotStartDateTime && getUTCDateWithoutTime(line.PickupTimeslotStartDateTime);\n const selectedTimeslot =\n line.PickupTimeslotStartDateTime && line.PickupTimeslotEndDateTime\n ? { StartDateTime: line.PickupTimeslotStartDateTime, EndDateTime: line.PickupTimeslotEndDateTime }\n : undefined;\n const newGroup: ICheckoutPickupGroup = {\n pickupModeName: retailMultiplePickUpOptionEnabled\n ? this.getPickupModeDescription(\n this.props.resources.generalPickupText,\n line.DeliveryMode,\n deliveryOptions?.result,\n product\n )\n : this.props.resources.generalPickupText,\n pickupStoreId: line.FulfillmentStoreId || '',\n deliveryMode: line.DeliveryMode || '',\n storeName,\n pickupAddress: line.ShippingAddress,\n availabilityState: PickupTimeslotAvailabilityState.None,\n lineDeliverySpecs: [lineDeliverySpecification],\n cartLines: [{ cartLine: line, product }],\n availableDates: [],\n availableTimeslots: [],\n selectedDate,\n selectedTimeslot\n };\n\n let dailyGroupingResults: PickupTimeslotAvailability[] = [];\n try {\n const searchCriteria: PickupTimeslotAvailabilitySearchCriteria = {\n DeliveryModeCode: newGroup.deliveryMode,\n StoreId: newGroup.pickupStoreId,\n SearchOptionValue: 1 // Test runtime does not recognize PickupTimeslotAvailabilitySearchOption.DailyGroupingTimeslotOnly\n };\n dailyGroupingResults = await getEstimatedPickupTimeslotAvailabilitiesAsync(\n { callerContext: this.props.context.actionContext, queryResultSettings: {} },\n searchCriteria\n );\n } catch (error) {\n this.props.telemetry.error(error);\n }\n newGroup.availabilityState = this.getPickupTimeslotAvailabilityState(dailyGroupingResults);\n if (newGroup.availabilityState === PickupTimeslotAvailabilityState.NotAvailable) {\n newGroup.groupErrorMessage = this.props.resources.noAvailableDateError;\n this.setError(newGroup.groupErrorMessage, false);\n }\n dailyGroupingResults.forEach(value => {\n if (value.StartDateTime && (value.AvailableCapacity || 0) > 0) {\n newGroup.availableDates.push(getUTCDateWithoutTime(value.StartDateTime));\n }\n });\n\n if (selectedDate) {\n let timeslotResults: PickupTimeslotAvailability[] = [];\n try {\n const searchCriteria: PickupTimeslotAvailabilitySearchCriteria = {\n DeliveryModeCode: newGroup.deliveryMode,\n StoreId: newGroup.pickupStoreId,\n StartDate: selectedDate,\n EndDate: selectedDate,\n SearchOptionValue: 2 // Test runtime does not recognize PickupTimeslotAvailabilitySearchOption.All\n };\n timeslotResults = await getEstimatedPickupTimeslotAvailabilitiesAsync(\n { callerContext: this.props.context.actionContext, queryResultSettings: {}, bypassCache: 'get' },\n searchCriteria\n );\n } catch (error) {\n this.props.telemetry.error(error);\n }\n newGroup.availableTimeslots = timeslotResults.filter(value => (value.AvailableCapacity || 0) > 0);\n }\n pickupGroups.push(newGroup);\n }\n }\n\n const filteredPickupGroups = pickupGroups.filter(\n group =>\n group.availabilityState === PickupTimeslotAvailabilityState.Available ||\n group.availabilityState === PickupTimeslotAvailabilityState.NotAvailable\n );\n\n if (!ArrayExtensions.hasElements(filteredPickupGroups)) {\n this.props.context.telemetry.error('Data is not ready or pickup group is empty, module wont render.');\n }\n this.isLoading = false;\n this.setState({ pickupGroups: filteredPickupGroups });\n };\n\n @action\n private readonly updateCartLinePickupDateTimeslot = async (): Promise => {\n if (!this.validateTimeslot()) {\n return;\n }\n const { resources } = this.props;\n let lineSpecs: LineDeliverySpecification[] = [];\n\n this.state.pickupGroups.forEach(group => {\n lineSpecs = lineSpecs.concat(group.lineDeliverySpecs);\n });\n\n this.clearError();\n this.onPending();\n\n try {\n const checkoutState = this.props.data.checkout.result as ICheckoutState;\n const response = await checkoutState.checkoutCart.updateCartLinePickupDateTimeslot({ lineDeliverySpecifications: lineSpecs });\n\n if (response.status === 'FAILED') {\n this.setError(resources.genericErrorMessage);\n } else {\n this.onReady();\n this.props.moduleState.setIsCancellable(true);\n }\n } catch {\n this.setError(resources.genericErrorMessage);\n }\n };\n\n private readonly getProductsByCartLines = async (channelId: number, cartLines: CartLine[]): Promise => {\n const actionContext = this.props.context.actionContext;\n const productInputs = cartLines\n .filter(line => !ObjectExtensions.isNullOrUndefined(line.ProductId))\n .map(\n line =>\n new ProductInput(\n line.ProductId || 0,\n actionContext.requestContext.apiSettings,\n channelId,\n undefined,\n actionContext.requestContext\n )\n );\n return getSimpleProducts(productInputs, actionContext);\n };\n\n private readonly validateTimeslot = (): boolean => {\n let validationResult = true;\n this.state.pickupGroups.forEach(group => {\n switch (group.availabilityState) {\n case PickupTimeslotAvailabilityState.NotAvailable:\n // Need customer to select another store in this case\n validationResult = false;\n break;\n case PickupTimeslotAvailabilityState.Available:\n if (!group.selectedDate || !group.selectedTimeslot) {\n if (!group.selectedDate) {\n group.dateErrorMessage = this.props.resources.pickupDateRequired;\n }\n if (!group.selectedTimeslot) {\n group.timeslotErrorMessage = this.props.resources.pickupTimeslotRequired;\n }\n this.setError(this.props.resources.pickupDateTimeslotRequired, false);\n validationResult = false;\n } else {\n group.dateErrorMessage = undefined;\n group.timeslotErrorMessage = undefined;\n }\n break;\n\n // We consider timeslot not defined as fallback case\n case PickupTimeslotAvailabilityState.NotDefined:\n default:\n }\n });\n\n return validationResult;\n };\n\n private readonly getStoreName = (orgUnitLocation: OrgUnitLocation | undefined, cartLine: CartLine): string => {\n return orgUnitLocation?.OrgUnitName || cartLine.ShippingAddress?.Name || cartLine.FulfillmentStoreId || '';\n };\n\n private readonly canPickup = (): boolean => {\n return ArrayExtensions.hasElements(this.state.pickupGroups);\n };\n\n private readonly isPickupTimeSlotSet = (): boolean => {\n return (\n ArrayExtensions.hasElements(this.state.pickupGroups) &&\n this.state.pickupGroups.every(\n group =>\n !ObjectExtensions.isNullOrUndefined(group.selectedTimeslot?.StartDateTime) &&\n !ObjectExtensions.isNullOrUndefined(group.selectedTimeslot?.EndDateTime)\n )\n );\n };\n\n private readonly getCartLinesforPickup = (): CartLine[] => {\n return this.props.data.checkout.result?.checkoutCart.cart.CartLines?.filter(line => this.isPickupLine(line)) || [];\n };\n\n private readonly isPickupMode = (deliveryMode: string | undefined): boolean => {\n const pickupDeliveryModeCode = this.props.context.request.channel?.PickupDeliveryModeCode;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = this.props?.data;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n if (retailMultiplePickUpOptionEnabled && deliveryMode !== undefined) {\n const pickupDeliveryMode = channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.includes(deliveryMode);\n return pickupDeliveryMode !== undefined ? pickupDeliveryMode : false;\n }\n return deliveryMode !== undefined && pickupDeliveryModeCode !== undefined && deliveryMode === pickupDeliveryModeCode;\n };\n\n private readonly isPickupLine = (line: CartLine): boolean => {\n return (\n this.isPickupMode(line.DeliveryMode) && line.FulfillmentStoreId !== undefined && !isNullOrWhiteSpace(line.FulfillmentStoreId)\n );\n };\n\n private readonly getPickupModeDescription = (\n resourceString: string,\n deliveryMode?: string,\n deliveryOptions?: ProductDeliveryOptions[],\n product?: SimpleProduct\n ): string => {\n let deliveryOption: string = resourceString;\n if (ArrayExtensions.hasElements(deliveryOptions) && product !== undefined) {\n let foundProductDeliveryOption;\n foundProductDeliveryOption = deliveryOptions?.find(deliveryO => {\n return deliveryO && deliveryO.ProductId === product.RecordId;\n });\n const deliveryDesc = foundProductDeliveryOption?.DeliveryOptions\n ? foundProductDeliveryOption?.DeliveryOptions?.find(option => option.Code === deliveryMode)?.Description\n : resourceString;\n if (deliveryDesc !== undefined) {\n deliveryOption = deliveryDesc;\n }\n }\n return deliveryOption;\n };\n\n private readonly getPickupTimeslotAvailabilityState = (dailyResult: PickupTimeslotAvailability[]) => {\n let state: PickupTimeslotAvailabilityState = PickupTimeslotAvailabilityState.None;\n if (!ArrayExtensions.hasElements(dailyResult)) {\n state = PickupTimeslotAvailabilityState.NotDefined;\n } else if (dailyResult.every(date => (date.AvailableCapacity || 0) <= 0)) {\n state = PickupTimeslotAvailabilityState.NotAvailable;\n } else {\n state = PickupTimeslotAvailabilityState.Available;\n }\n return state;\n };\n\n /**\n * Returns count of products.\n * @param cartLine - The checkout pickup cart line info props.\n * @returns Number of products.\n */\n private readonly _countItems = (cartlines: ICheckoutPickupCartLineInfo[]): number => {\n return cartlines.reduce((count, line) => {\n return count + (line.quantity || 0);\n }, 0);\n };\n}\n\nexport default CheckoutPickup;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICheckoutPickupGroupViewProps, ICheckoutPickupViewProps } from './index';\n\nconst CheckoutPickupView: React.FC = props => {\n const { checkoutPickup, checkoutErrorRef, viewState, headerError, waiting, pickupGroups } = props;\n\n return (\n \n {viewState.isLoading && waiting}\n {viewState.isHeaderError && headerError}\n {pickupGroups.map(\n (pickupGroupViewProps: ICheckoutPickupGroupViewProps, index: number): React.ReactElement => {\n const {\n pickupGroupContainer,\n dateTimeslotContainer,\n groupDivider,\n groupHeader,\n groupErrorMessage,\n cartLineImages,\n pickupDateDropdown,\n pickupTimeslotDropdown,\n selectedDateTimeslot,\n pickupAddress\n } = pickupGroupViewProps;\n\n return (\n \n {groupDivider}\n {groupHeader}\n {groupErrorMessage}\n {cartLineImages}\n {viewState.isShowDropdown && (\n \n {pickupDateDropdown}\n {pickupTimeslotDropdown}\n \n )}\n {viewState.isShowSelected && pickupAddress}\n {viewState.isShowSelected && selectedDateTimeslot}\n \n );\n }\n )}\n \n );\n};\n\nexport default CheckoutPickupView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport {\n CheckoutModule,\n ErrorCode,\n ErrorLocation,\n ErrorMessageResource,\n getCheckoutState,\n ICheckoutError,\n ICheckoutState\n} from '@msdyn365-commerce/global-state/';\n\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class -- create global class\nexport class CheckoutErrors {\n public static readonly ActionError: ICheckoutError = {\n errorCode: ErrorCode.ActionError,\n errorMessageResource: ErrorMessageResource.checkoutTimeoutErrorMessage,\n errorLocation: ErrorLocation.Checkout\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_BlockedLoyaltyCard: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_BlockedLoyaltyCard,\n errorMessageResource: ErrorMessageResource.blockedLoyaltyCardErrorMessage,\n errorLocation: ErrorLocation.CheckoutLoyalty\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountLimitSignDifferentFromAmountDue: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountLimitSignDifferentFromAmountDue,\n errorMessageResource: ErrorMessageResource.customerAccountLimitSignDifferentFromAmountDueErrorMessage,\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsAvailableCreditLimit: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsAvailableCreditLimit,\n errorMessageResource: ErrorMessageResource.customerAccountPaymentExceedsAvailableCreditLimitErrorMessage,\n errorLocation: ErrorLocation.Checkout\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsCustomerAccountFloorLimit: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsCustomerAccountFloorLimit,\n errorMessageResource: ErrorMessageResource.customerAccountPaymentExceedsCustomerAccountFloorLimitErrorMessage,\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItems: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItems,\n errorMessageResource: ErrorMessageResource.customerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItemsErrorMessage,\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentForCustomerWithoutAllowOnAccount: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentForCustomerWithoutAllowOnAccount,\n errorMessageResource: ErrorMessageResource.customerAccountPaymentForCustomerWithoutAllowOnAccountErrorMessage,\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentNotAllowedForOpenInvoices: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentNotAllowedForOpenInvoices,\n errorMessageResource: ErrorMessageResource.customerAccountPaymentNotAllowedForOpenInvoicesErrorMessage,\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_FraudRisk: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_FraudRisk,\n errorMessageResource: ErrorMessageResource.fraudRiskErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_GiftCardBalanceInquiryFailed: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_GiftCardBalanceInquiryFailed,\n errorMessageResource: ErrorMessageResource.giftCardBalanceInquiryFailedErrorMessage,\n errorLocation: ErrorLocation.CheckoutGiftCard\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_GiftCardCurrencyMismatch: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_GiftCardCurrencyMismatch,\n errorMessageResource: ErrorMessageResource.giftCardCurrencyMismatchErrorMessage,\n errorLocation: ErrorLocation.CheckoutGiftCard\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion,\n errorMessageResource: ErrorMessageResource.invalidCartVersionErrorMessage,\n errorLocation: ErrorLocation.Checkout\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_InvalidLoyaltyCardNumber: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_InvalidLoyaltyCardNumber,\n errorMessageResource: ErrorMessageResource.invalidLoyaltyCardNumberErrorMessage,\n errorLocation: ErrorLocation.CheckoutLoyalty\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest,\n errorMessageResource: ErrorMessageResource.invalidPaymentRequestErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest_Console: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest,\n errorMessageResource: ErrorMessageResource.invalidPaymentRequestConsoleErrorMessage,\n errorLocation: ErrorLocation.Console\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines,\n errorMessageResource: ErrorMessageResource.missingRequiredCartTenderLinesErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountPaymentsNotAllowed: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountPaymentsNotAllowed,\n errorMessageResource: ErrorMessageResource.multipleCustomerAccountPaymentsNotAllowedErrorMessage,\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender,\n errorMessageResource: ErrorMessageResource.noMoreThanOneLoyaltyTenderErrorMessage,\n errorLocation: ErrorLocation.CheckoutLoyalty\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_NoResponseFromGatewayForGiftCardBalanceInquiry: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_NoResponseFromGatewayForGiftCardBalanceInquiry,\n errorMessageResource: ErrorMessageResource.noResponseFromGatewayForGiftCardBalanceInquiryErrorMessage,\n errorLocation: ErrorLocation.CheckoutGiftCard\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_NoTenderLoyaltyCard: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_NoTenderLoyaltyCard,\n errorMessageResource: ErrorMessageResource.noTenderLoyaltyCardErrorMessage,\n errorLocation: ErrorLocation.CheckoutLoyalty\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_NotEnoughRewardPoints: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_NotEnoughRewardPoints,\n errorMessageResource: ErrorMessageResource.notEnoughRewardPointsErrorMessage,\n errorLocation: ErrorLocation.CheckoutLoyalty\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_PaymentAlreadyVoided: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_PaymentAlreadyVoided,\n errorMessageResource: ErrorMessageResource.paymentAlreadyVoidedErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_PaymentAmountExceedsGiftBalance: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_PaymentAmountExceedsGiftBalance,\n errorMessageResource: ErrorMessageResource.paymentAmountExceedsGiftBalanceErrorMessage,\n errorLocation: ErrorLocation.CheckoutGiftCard\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties,\n errorMessageResource: ErrorMessageResource.paymentRequiresMerchantPropertiesErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties_Console: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties,\n errorMessageResource: ErrorMessageResource.paymentRequiresMerchantPropertiesConsoleErrorMessage,\n errorLocation: ErrorLocation.Console\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_PaymentUsingUnauthorizedAccount: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_PaymentUsingUnauthorizedAccount,\n errorMessageResource: ErrorMessageResource.paymentUsingUnauthorizedAccountErrorMessage,\n errorLocation: ErrorLocation.CheckoutCustomerAccountPayment\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_RefundAmountMoreThanAllowed: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_RefundAmountMoreThanAllowed,\n errorMessageResource: ErrorMessageResource.refundAmountMoreThanAllowedErrorMessage,\n errorLocation: ErrorLocation.CheckoutLoyalty\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment,\n errorMessageResource: ErrorMessageResource.unableToAuthorizePaymentErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardAdditionalContextRequired: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardAdditionalContextRequired,\n errorMessageResource: ErrorMessageResource.unableToAuthorizePaymentCardAdditionalContextRequiredErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardTypeMissingOrNotSupported: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardTypeMissingOrNotSupported,\n errorMessageResource: ErrorMessageResource.unableToAuthorizePaymentCardTypeMissingOrNotSupportedErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToCancelPayment: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToCancelPayment,\n errorMessageResource: ErrorMessageResource.unableToCancelPaymentErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToReadCardTokenInfo: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToReadCardTokenInfo,\n errorMessageResource: ErrorMessageResource.unableToReadCardTokenInfoErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly Microsoft_Dynamics_Commerce_Runtime_UnableToRetrieveCardPaymentAcceptResult: ICheckoutError = {\n errorCode: ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToRetrieveCardPaymentAcceptResult,\n errorMessageResource: ErrorMessageResource.unableToRetrieveCardPaymentAcceptResultErrorMessage,\n errorLocation: ErrorLocation.CheckoutPaymentInstrument\n };\n\n public static readonly checkoutErrorsList: ICheckoutError[] = [\n CheckoutErrors.ActionError,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_BlockedLoyaltyCard,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountLimitSignDifferentFromAmountDue,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsAvailableCreditLimit,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsCustomerAccountFloorLimit,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItems,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentForCustomerWithoutAllowOnAccount,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentNotAllowedForOpenInvoices,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_FraudRisk,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_GiftCardBalanceInquiryFailed,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_GiftCardCurrencyMismatch,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidLoyaltyCardNumber,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest_Console,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountPaymentsNotAllowed,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_NoResponseFromGatewayForGiftCardBalanceInquiry,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_NoTenderLoyaltyCard,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_NotEnoughRewardPoints,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_PaymentAlreadyVoided,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_PaymentAmountExceedsGiftBalance,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties_Console,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_PaymentUsingUnauthorizedAccount,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_RefundAmountMoreThanAllowed,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardAdditionalContextRequired,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardTypeMissingOrNotSupported,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToCancelPayment,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToReadCardTokenInfo,\n CheckoutErrors.Microsoft_Dynamics_Commerce_Runtime_UnableToRetrieveCardPaymentAcceptResult\n ];\n}\n\nexport async function setCheckoutErrors(\n errorCode: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resources: any,\n isExpressCheckoutApplied: boolean,\n ctx: IActionContext,\n apiError?: string | undefined\n): Promise {\n let clientCheckoutError: ICheckoutError | undefined;\n const consoleCheckoutErrors: ICheckoutError[] = [];\n\n const checkoutState: ICheckoutState = await getCheckoutState(ctx).catch((error: Error) => {\n ctx.telemetry.exception(error);\n throw error;\n });\n\n // find the checkout errors\n for (const checkoutError of CheckoutErrors.checkoutErrorsList) {\n if (errorCode === checkoutError.errorCode) {\n if (checkoutError.errorLocation === ErrorLocation.Console) {\n const consoleCheckoutError: ICheckoutError = {\n errorCode: checkoutError.errorCode,\n errorMessageResource: checkoutError.errorMessageResource,\n errorLocation: checkoutError.errorLocation\n };\n consoleCheckoutErrors.push(consoleCheckoutError);\n } else {\n if (clientCheckoutError) {\n ctx.telemetry.exception(new Error('Invalid number of client checkout errors.'));\n throw new Error('Invalid number of client checkout errors.');\n } else {\n clientCheckoutError = {\n errorCode: checkoutError.errorCode,\n errorMessageResource: checkoutError.errorMessageResource,\n errorLocation: checkoutError.errorLocation\n };\n }\n }\n }\n }\n\n // log the console checkout errors\n for (const consoleCheckoutError of consoleCheckoutErrors) {\n consoleCheckoutError.errorMessage = getCheckoutErrorMessage(resources, consoleCheckoutError.errorMessageResource!, apiError!);\n console.log(consoleCheckoutError.errorMessage);\n }\n\n // handle the client checkout error\n if (clientCheckoutError) {\n clientCheckoutError.errorMessage = getCheckoutErrorMessage(resources, clientCheckoutError.errorMessageResource!, apiError!);\n\n if (isExpressCheckoutApplied && clientCheckoutError.errorLocation === ErrorLocation.CheckoutPaymentInstrument) {\n clientCheckoutError.errorLocation = ErrorLocation.Checkout;\n }\n\n await checkoutState.updateCheckoutError({ newCheckoutError: clientCheckoutError });\n await checkoutState.updateShouldFocusOnCheckoutError({ newShouldFocusOnCheckoutError: true });\n } else {\n // if could not map to any checkout error(s), show the API error message over generic error\n if (consoleCheckoutErrors.length === 0) {\n const genericError = {\n errorLocation: ErrorLocation.Checkout\n };\n if (apiError) {\n genericError['errorMessage'] = apiError;\n } else {\n genericError['errorMessage'] = resources.genericErrorMessage;\n }\n\n await checkoutState.updateCheckoutError({ newCheckoutError: genericError });\n await checkoutState.updateShouldFocusOnCheckoutError({ newShouldFocusOnCheckoutError: true });\n }\n }\n}\n\nexport async function focusOnCheckoutError(checkoutErrorRef: React.RefObject, ctx: IActionContext): Promise {\n const checkoutState: ICheckoutState = await getCheckoutState(ctx).catch((error: Error) => {\n ctx.telemetry.exception(error);\n throw error;\n });\n\n checkoutErrorRef.current && checkoutErrorRef.current.scrollIntoView();\n\n await checkoutState.updateCheckoutErrorFocus({ newCheckoutErrorFocus: CheckoutModule.None });\n await checkoutState.updateShouldFocusOnCheckoutError({ newShouldFocusOnCheckoutError: false });\n}\n\nexport async function setCheckoutErrorFocus(checkoutModuleId: string, ctx: IActionContext): Promise {\n const checkoutState: ICheckoutState = await getCheckoutState(ctx).catch((error: Error) => {\n ctx.telemetry.exception(error);\n throw error;\n });\n\n for (const checkoutModule of Object.keys(CheckoutModule)) {\n if (checkoutModuleId.includes(CheckoutModule[checkoutModule])) {\n await checkoutState.updateCheckoutErrorFocus({ newCheckoutErrorFocus: CheckoutModule[checkoutModule] });\n return;\n }\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getCheckoutErrorMessage(resources: any, errorMessageResource: ErrorMessageResource, errorMessageFromAPI: string): string {\n const errorResource = Object.keys(resources).find(resource => resource === errorMessageResource);\n // return API error when error resource string is not found in checkout definition file\n return errorResource !== undefined ? resources[errorResource] : errorMessageFromAPI;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageProps, IImageSettings, Image, IModule } from '@msdyn365-commerce/core';\nimport {\n Address,\n CartLine,\n LineDeliverySpecification,\n PickupTimeslotAvailability,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nexport interface ICheckoutPickupGroupKey {\n pickupStoreId: string;\n deliveryMode: string;\n}\n\nexport interface ICheckoutPickupGroup extends ICheckoutPickupGroupKey {\n pickupModeName: string;\n storeName: string;\n pickupAddress?: Address;\n availabilityState: PickupTimeslotAvailabilityState;\n groupErrorMessage?: string;\n dateErrorMessage?: string;\n timeslotErrorMessage?: string;\n lineDeliverySpecs: LineDeliverySpecification[];\n cartLines: ICartLineWithProduct[];\n\n availableDates: Date[];\n availableTimeslots: PickupTimeslotAvailability[];\n\n selectedDate?: Date;\n selectedTimeslot?: PickupTimeslotAvailability;\n}\n\nexport enum PickupTimeslotAvailabilityState {\n None,\n Available,\n NotDefined,\n NotAvailable // All slots occupied\n}\n\nexport interface ICartLineWithProduct {\n cartLine: CartLine;\n product?: SimpleProduct;\n}\n\nexport interface ICheckoutPickupGroupViewProps {\n moduleProps: IModule;\n\n pickupGroupContainer: INodeProps;\n dateTimeslotContainer: INodeProps;\n\n pickupStoreId: string;\n pickupModeName: string;\n deliveryMode: string;\n\n groupDivider: React.ReactNode;\n groupHeader: React.ReactNode;\n groupErrorMessage: React.ReactNode;\n cartLineImages: React.ReactNode;\n pickupDateDropdown: React.ReactNode;\n pickupTimeslotDropdown: React.ReactNode;\n\n selectedDateTimeslot: React.ReactNode;\n pickupAddress: React.ReactNode;\n}\n\nexport interface ICheckoutPickupErrorProps {\n errorMessage?: string;\n}\n\nexport const CheckoutPickupError: React.FC = ({ errorMessage }) => {\n if (!errorMessage) {\n return null;\n }\n\n return (\n \n \n );\n};\n\nexport interface ICheckoutPickupGroupHeaderProps {\n moduleClassName: string;\n storeInfo: string;\n items: string;\n}\n\nexport const CheckoutPickupGroupHeader: React.FC = ({ moduleClassName, storeInfo, items }) => {\n return (\n
\n
{storeInfo}
\n
{items}
\n
\n );\n};\n\nexport interface ICheckoutPickupTimeslotInfoProps {\n moduleClassName: string;\n title: string;\n content: string;\n}\n\nexport const CheckoutPickupTimeslotInfo: React.FC = ({ moduleClassName, title, content }) => {\n return (\n
\n
{title}
\n
{content}
\n
\n );\n};\n\nexport interface ICheckoutPickupAddressProps {\n moduleClassName: string;\n title: string;\n address?: Address;\n}\n\nexport const CheckoutPickupAddress: React.FC = ({ moduleClassName, title, address }) => {\n if (!address) {\n return null;\n }\n\n return (\n
\n
{title}
\n {address.Name && {address.Name}}\n <>\n {address.Street && {address.Street}}\n {address.City && {address.City}}\n {address.State && {`, ${address.State}`}}\n {address.County && {`, ${address.County}`}}\n {address.ZipCode && {` ${address.ZipCode}`}}\n {address.ThreeLetterISORegionName && (\n \n {` ${address.ThreeLetterISORegionName}`}\n \n )}\n \n
\n );\n};\n\nexport interface ICheckoutPickupCartLineInfo {\n lineId: string;\n imageProps: IImageProps;\n quantity: number;\n}\n\nexport interface ICheckoutPickupCartLinesProps {\n moduleClassName: string;\n cartLines: ICheckoutPickupCartLineInfo[];\n}\n\nexport const CheckoutPickupCartLines: React.FC = ({ moduleClassName, cartLines }) => {\n if (!ArrayExtensions.hasElements(cartLines)) {\n return null;\n }\n return (\n
\n {cartLines.map(prop => {\n const showQty = prop.quantity > 1;\n let className = `${moduleClassName}__group-product-image`;\n if (showQty) {\n className = classnames(className, ' product-image-wide');\n }\n return (\n
\n \n {showQty &&
{prop.quantity}
}\n
\n );\n })}\n
\n );\n};\n\nexport const DefaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=108&h=108&q=80&m=6&f=jpg\"', w: 108, h: 108 },\n lg: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 },\n xl: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 }\n },\n lazyload: true,\n quality: 80\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { format } from '@msdyn365-commerce-modules/utilities';\n\nexport function getDate(date: Date | undefined, locale: string): string {\n if (!date) {\n return '';\n }\n const options: Intl.DateTimeFormatOptions = {\n timeZone: 'UTC'\n };\n const formatter = new Intl.DateTimeFormat(locale, options);\n return formatter.format(new Date(date));\n}\n\nexport const getTimeslot = (\n placeHolder: string,\n startDate: Date | undefined,\n endDate: Date | undefined,\n locale: string,\n useHour12TimeFormat?: boolean\n): string => {\n if (!startDate || !endDate) {\n return '';\n }\n let options: Intl.DateTimeFormatOptions = { hour: 'numeric', minute: 'numeric' };\n options = useHour12TimeFormat\n ? { hour: 'numeric', minute: 'numeric', timeZone: 'UTC' }\n : { hour: 'numeric', minute: 'numeric', timeZone: 'UTC', hour12: true };\n const formatter = new Intl.DateTimeFormat(locale, options);\n return format(placeHolder, formatter.format(new Date(startDate)), formatter.format(new Date(endDate)));\n};\n\nexport const getUTCDateWithoutTime = (input: Date): Date => {\n const date: Date = new Date(input);\n return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0));\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { LabeledDropdown } from '@msdyn365-commerce-modules/utilities';\nimport {\n ILabeledDropdownOnChangeNotification,\n ILabeledDropdownOption\n} from '@msdyn365-commerce-modules/utilities/dist/types/labeled-dropdown/LabeledDropdown.props';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { CheckoutPickupError } from './checkout-pickup-group';\nimport { getDate } from './checkout-pickup-utility';\n\nexport interface IPickupDropdownProps {\n pickupStoreId: string;\n deliveryMode: string;\n\n className: string;\n labelClassname?: string;\n labelText: string;\n defaultText: string;\n errorMessage?: string;\n\n locale: string;\n\n // Props for the LabeledDropdown component\n dropdownId: string;\n controlledByParent: boolean;\n toggleColor?: string;\n dropdownClassname?: string;\n}\n\nexport interface IPickupDateDropdownProps extends IPickupDropdownProps {\n availableDates: Date[];\n selectedDate?: Date;\n setDateHandler(pickupStoreId: string, deliveryMode: string, pickupDate: Date | undefined): void;\n}\n\n/**\n *\n * CheckoutPickupDateDropdown component.\n * @extends {React.Component}\n */\nexport class CheckoutPickupDateDropdown extends React.PureComponent {\n private readonly defaultKey: number = -1;\n\n private readonly defaultOption: ILabeledDropdownOption;\n\n // As the LabeledDropdown control only offers key and value, we need to map the key with date and timeslot data\n @computed get getDateMap(): Map {\n const map = new Map();\n this.props.availableDates.forEach((value, index) => {\n map.set(index.toString(), value);\n });\n return map;\n }\n\n constructor(props: IPickupDateDropdownProps) {\n super(props);\n this.defaultOption = { key: this.defaultKey.toString(), value: props.defaultText };\n this.updateDateSelection = this.updateDateSelection.bind(this);\n }\n\n public render(): JSX.Element | null {\n const {\n className,\n labelClassname,\n labelText,\n errorMessage,\n dropdownId,\n availableDates,\n selectedDate,\n controlledByParent,\n toggleColor,\n dropdownClassname\n } = this.props;\n\n const { dropdownOptions, selectedOption } = this.mapDatesToOptions(availableDates, selectedDate);\n\n return (\n
\n \n \n \n
\n );\n }\n\n private readonly updateDateSelection = (notification: ILabeledDropdownOnChangeNotification): void => {\n const { pickupStoreId, deliveryMode, setDateHandler } = this.props;\n const date: Date | undefined = this.getDate(notification);\n setDateHandler(pickupStoreId, deliveryMode, date);\n };\n\n private readonly getDate = (notification: ILabeledDropdownOnChangeNotification): Date | undefined => {\n const key: string = notification.selectedOption.key;\n if (key === this.defaultKey.toString() || !this.getDateMap.has(key)) {\n return undefined;\n }\n return this.getDateMap.get(key);\n };\n\n private readonly mapDatesToOptions = (\n dates: Date[],\n selectedDate: Date | undefined\n ): { dropdownOptions: ILabeledDropdownOption[]; selectedOption: ILabeledDropdownOption | undefined } => {\n const { locale } = this.props;\n let options: ILabeledDropdownOption[] = [];\n let selectedOption: ILabeledDropdownOption = this.defaultOption;\n\n options = dates.map((value: Date, index: number) => {\n return {\n key: index.toString(),\n value: getDate(value, locale)\n };\n });\n options.unshift(this.defaultOption);\n\n const index: number = dates.findIndex((value: Date) => selectedDate !== undefined && selectedDate.getTime() === value.getTime());\n if (index >= 0 && selectedDate) {\n selectedOption = {\n key: index.toString(),\n value: getDate(selectedDate, locale)\n };\n }\n\n return {\n dropdownOptions: options,\n selectedOption\n };\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PickupTimeslotAvailability } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { LabeledDropdown } from '@msdyn365-commerce-modules/utilities';\nimport {\n ILabeledDropdownOnChangeNotification,\n ILabeledDropdownOption\n} from '@msdyn365-commerce-modules/utilities/dist/types/labeled-dropdown/LabeledDropdown.props';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { IPickupDropdownProps } from './checkout-pickup-date-dropdown';\nimport { CheckoutPickupError } from './checkout-pickup-group';\nimport { getTimeslot } from './checkout-pickup-utility';\n\nexport interface IPickupTimeslotDropdownProps extends IPickupDropdownProps {\n availableTimeslots: PickupTimeslotAvailability[];\n selectedTimeslot?: PickupTimeslotAvailability;\n timeslotPlaceHolder: string;\n setTimeslotHandler(pickupStoreId: string, deliveryMode: string, pickupTimeslot: PickupTimeslotAvailability | undefined): void;\n useHour12TimeFormat?: boolean;\n}\n\n/**\n *\n * CheckoutPickupTimeslotDropdown component.\n * @extends {React.Component}\n */\nexport class CheckoutPickupTimeslotDropdown extends React.PureComponent {\n private readonly defaultKey: number = -1;\n\n private readonly defaultOption: ILabeledDropdownOption;\n\n // As the LabeledDropdown control only offers key and value, we need to map the key with date and timeslot data\n @computed get getTimeslotMap(): Map {\n const map = new Map();\n this.props.availableTimeslots.forEach((value, index) => {\n map.set(index.toString(), value);\n });\n return map;\n }\n\n constructor(props: IPickupTimeslotDropdownProps) {\n super(props);\n this.defaultOption = { key: this.defaultKey.toString(), value: props.defaultText };\n this.updateTimeslotSelection = this.updateTimeslotSelection.bind(this);\n }\n\n public render(): JSX.Element | null {\n const {\n className,\n labelClassname,\n labelText,\n errorMessage,\n dropdownId,\n availableTimeslots,\n selectedTimeslot,\n controlledByParent,\n toggleColor,\n dropdownClassname\n } = this.props;\n\n const { dropdownOptions, selectedOption } = this.mapTimeslotsToOptions(availableTimeslots, selectedTimeslot);\n\n return (\n
\n \n \n \n
\n );\n }\n\n private readonly updateTimeslotSelection = (notification: ILabeledDropdownOnChangeNotification): void => {\n const { pickupStoreId, deliveryMode, setTimeslotHandler } = this.props;\n const timeslot: PickupTimeslotAvailability | undefined = this.getTimeslot(notification);\n setTimeslotHandler(pickupStoreId, deliveryMode, timeslot);\n };\n\n private readonly getTimeslot = (notification: ILabeledDropdownOnChangeNotification): PickupTimeslotAvailability | undefined => {\n const key: string = notification.selectedOption.key;\n if (key === this.defaultKey.toString() || !this.getTimeslotMap.has(key)) {\n return undefined;\n }\n return this.getTimeslotMap.get(key);\n };\n\n private readonly mapTimeslotsToOptions = (\n timeslots: PickupTimeslotAvailability[],\n selectedTimeslot: PickupTimeslotAvailability | undefined\n ): { dropdownOptions: ILabeledDropdownOption[]; selectedOption: ILabeledDropdownOption | undefined } => {\n const { timeslotPlaceHolder, locale, useHour12TimeFormat } = this.props;\n let options: ILabeledDropdownOption[] = [];\n let selectedOption: ILabeledDropdownOption = this.defaultOption;\n\n options = timeslots.map((value: PickupTimeslotAvailability, index: number) => {\n return {\n key: index.toString(),\n value: getTimeslot(timeslotPlaceHolder, value.StartDateTime, value.EndDateTime, locale, useHour12TimeFormat)\n };\n });\n options.unshift(this.defaultOption);\n\n const index: number = timeslots.findIndex(\n value =>\n selectedTimeslot !== undefined &&\n selectedTimeslot.StartDateTime?.getTime() === value.StartDateTime?.getTime() &&\n selectedTimeslot.EndDateTime?.getTime() === value.EndDateTime?.getTime()\n );\n if (index >= 0 && selectedTimeslot) {\n selectedOption = {\n key: index.toString(),\n value: getTimeslot(\n timeslotPlaceHolder,\n selectedTimeslot.StartDateTime,\n selectedTimeslot.EndDateTime,\n locale,\n useHour12TimeFormat\n )\n };\n }\n\n return {\n dropdownOptions: options,\n selectedOption\n };\n };\n}\n"],"names":["CheckoutPickup","React","constructor","props","_this","super","this","checkoutErrorRef","isLoading","initModuleState","moduleState","init","onEdit","onSubmit","status","canPickup","isPickupTimeSlotSet","onUpdating","onReady","onPending","async","updateCartLinePickupDateTimeslot","setError","errorMessage","isHeaderError","arguments","length","undefined","telemetry","error","setHasError","headerErrorMessage","clearError","initPickupGroup","_this$props","_featureState$result","pickupCartLines","getCartLinesforPickup","products","_this$props$data$chec","getProductsByCartLines","data","checkout","result","checkoutCart","cart","ChannelId","pickupGroups","locations","orgUnitLocations","featureState","deliveryOptions","retailMultiplePickUpOptionEnabled","find","feature","Name","IsEnabled","line","group","x","pickupStoreId","FulfillmentStoreId","deliveryMode","DeliveryMode","product","RecordId","ProductId","lineDeliverySpecification","LineId","DeliverySpecification","DeliveryModeId","DeliveryPreferenceTypeValue","PickUpStoreId","PickupTimeslotStartDateTime","PickupTimeslotEndDateTime","DeliveryAddress","ShippingAddress","lineDeliverySpecs","push","cartLines","cartLine","location","OrgUnitNumber","storeName","getStoreName","selectedDate","getUTCDateWithoutTime","selectedTimeslot","StartDateTime","EndDateTime","newGroup","pickupModeName","getPickupModeDescription","resources","generalPickupText","pickupAddress","availabilityState","PickupTimeslotAvailabilityState","None","availableDates","availableTimeslots","dailyGroupingResults","searchCriteria","DeliveryModeCode","StoreId","SearchOptionValue","getEstimatedPickupTimeslotAvailabilitiesAsync","callerContext","context","actionContext","queryResultSettings","getPickupTimeslotAvailabilityState","NotAvailable","groupErrorMessage","noAvailableDateError","forEach","value","AvailableCapacity","timeslotResults","StartDate","EndDate","bypassCache","filter","filteredPickupGroups","Available","ArrayExtensions","hasElements","setState","validateTimeslot","lineSpecs","state","concat","checkoutState","lineDeliverySpecifications","genericErrorMessage","setIsCancellable","_unused","channelId","productInputs","ObjectExtensions","isNullOrUndefined","map","ProductInput","requestContext","apiSettings","getSimpleProducts","validationResult","dateErrorMessage","timeslotErrorMessage","pickupDateRequired","pickupTimeslotRequired","pickupDateTimeslotRequired","NotDefined","orgUnitLocation","_cartLine$ShippingAdd","OrgUnitName","every","_group$selectedTimesl","_group$selectedTimesl2","_this$props$data$chec2","CartLines","isPickupLine","isPickupMode","_this$props$context$r","_this$props2","_featureState$result2","pickupDeliveryModeCode","request","channel","PickupDeliveryModeCode","channelDeliveryOptionConfig","_channelDeliveryOptio","pickupDeliveryMode","PickupDeliveryModeCodes","includes","isNullOrWhiteSpace","resourceString","deliveryOption","_foundProductDelivery","_foundProductDelivery2","foundProductDeliveryOption","deliveryO","deliveryDesc","DeliveryOptions","option","Code","Description","dailyResult","date","_countItems","cartlines","reduce","count","quantity","setDateHandler","bind","setTimeslotHandler","isDataReady","componentDidMount","_this$props$data$chec3","when","shouldEnableCheckoutErrorDisplayMessaging","reaction","_this$props$data$chec4","checkoutError","errorLocation","ErrorLocation","_this$props$data$chec5","checkoutErrorFocus","CheckoutModule","focusOnCheckoutError","shouldComponentUpdate","nextProps","nextState","render","config","pickupDateLabel","pickupTimeslotLabel","pickupDateDefaultText","pickupTimeslotDefaultText","itemsText","singleItemText","pickupDateTimeslotText","pickupTimeslotPlaceHolder","pickupLocationLabel","locale","className","imageSettings","useHour12TimeFormat","defaultClassName","groupsViewProps","index","_value$selectedTimesl","_value$selectedTimesl2","groupDivider","_line$product","_line$product2","_line$product3","_context$request$app","lineId","imageProps","altText","src","PrimaryImageUrl","fallBackSrc","getFallbackImageUrl","ItemId","app","OmniChannelMedia","gridSettings","DefaultImageSettings","loadFailureBehavior","Quantity","numberOfCartLines","itemText","itemTitle","format","headerProps","moduleClassName","storeInfo","items","groupHeader","CheckoutPickupGroupHeader","Object","assign","lineImageProps","cartLineImages","CheckoutPickupCartLines","dateString","getDate","timeslotString","getTimeslot","timeslotInfoProps","title","content","selectedDateTimeslotNode","CheckoutPickupTimeslotInfo","addressProps","address","CheckoutPickupAddress","dropdownClassName","labelClassName","dropdownSelectClassName","dateDropdownNode","CheckoutPickupDateDropdown","defaultText","labelText","dropdownId","controlledByParent","labelClassname","dropdownClassname","timeslotDropdownNode","CheckoutPickupTimeslotDropdown","timeslotPlaceHolder","viewProp","moduleProps","_objectSpread","pickupGroupContainer","dateTimeslotContainer","CheckoutPickupError","pickupDateDropdown","pickupTimeslotDropdown","selectedDateTimeslot","isReady","hasError","isShowDropdown","isShowSelected","viewProps","checkoutPickup","classname","viewState","headerError","waiting","Waiting","renderView","pickupDate","oldGroup","lineSpec","noAvailableTimeslotError","groups","pickupTimeslot","__decorate","observable","computed","action","withModuleState","observer","Module","ref","pickupGroupViewProps","Node","key","CheckoutErrors","setCheckoutErrors","errorCode","isExpressCheckoutApplied","ctx","apiError","clientCheckoutError","consoleCheckoutErrors","getCheckoutState","catch","exception","checkoutErrorsList","Console","consoleCheckoutError","errorMessageResource","Error","getCheckoutErrorMessage","console","log","CheckoutPaymentInstrument","Checkout","updateCheckoutError","newCheckoutError","updateShouldFocusOnCheckoutError","newShouldFocusOnCheckoutError","genericError","current","scrollIntoView","updateCheckoutErrorFocus","newCheckoutErrorFocus","setCheckoutErrorFocus","checkoutModuleId","checkoutModule","keys","errorMessageFromAPI","errorResource","resource","ActionError","ErrorCode","ErrorMessageResource","checkoutTimeoutErrorMessage","Microsoft_Dynamics_Commerce_Runtime_BlockedLoyaltyCard","blockedLoyaltyCardErrorMessage","CheckoutLoyalty","Microsoft_Dynamics_Commerce_Runtime_CustomerAccountLimitSignDifferentFromAmountDue","customerAccountLimitSignDifferentFromAmountDueErrorMessage","CheckoutCustomerAccountPayment","Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsAvailableCreditLimit","customerAccountPaymentExceedsAvailableCreditLimitErrorMessage","Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsCustomerAccountFloorLimit","customerAccountPaymentExceedsCustomerAccountFloorLimitErrorMessage","Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItems","customerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItemsErrorMessage","Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentForCustomerWithoutAllowOnAccount","customerAccountPaymentForCustomerWithoutAllowOnAccountErrorMessage","Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentNotAllowedForOpenInvoices","customerAccountPaymentNotAllowedForOpenInvoicesErrorMessage","Microsoft_Dynamics_Commerce_Runtime_FraudRisk","fraudRiskErrorMessage","Microsoft_Dynamics_Commerce_Runtime_GiftCardBalanceInquiryFailed","giftCardBalanceInquiryFailedErrorMessage","CheckoutGiftCard","Microsoft_Dynamics_Commerce_Runtime_GiftCardCurrencyMismatch","giftCardCurrencyMismatchErrorMessage","Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion","invalidCartVersionErrorMessage","Microsoft_Dynamics_Commerce_Runtime_InvalidLoyaltyCardNumber","invalidLoyaltyCardNumberErrorMessage","Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest","invalidPaymentRequestErrorMessage","Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest_Console","invalidPaymentRequestConsoleErrorMessage","Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines","missingRequiredCartTenderLinesErrorMessage","Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountPaymentsNotAllowed","multipleCustomerAccountPaymentsNotAllowedErrorMessage","Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender","noMoreThanOneLoyaltyTenderErrorMessage","Microsoft_Dynamics_Commerce_Runtime_NoResponseFromGatewayForGiftCardBalanceInquiry","noResponseFromGatewayForGiftCardBalanceInquiryErrorMessage","Microsoft_Dynamics_Commerce_Runtime_NoTenderLoyaltyCard","noTenderLoyaltyCardErrorMessage","Microsoft_Dynamics_Commerce_Runtime_NotEnoughRewardPoints","notEnoughRewardPointsErrorMessage","Microsoft_Dynamics_Commerce_Runtime_PaymentAlreadyVoided","paymentAlreadyVoidedErrorMessage","Microsoft_Dynamics_Commerce_Runtime_PaymentAmountExceedsGiftBalance","paymentAmountExceedsGiftBalanceErrorMessage","Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties","paymentRequiresMerchantPropertiesErrorMessage","Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties_Console","paymentRequiresMerchantPropertiesConsoleErrorMessage","Microsoft_Dynamics_Commerce_Runtime_PaymentUsingUnauthorizedAccount","paymentUsingUnauthorizedAccountErrorMessage","Microsoft_Dynamics_Commerce_Runtime_RefundAmountMoreThanAllowed","refundAmountMoreThanAllowedErrorMessage","Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment","unableToAuthorizePaymentErrorMessage","Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardAdditionalContextRequired","unableToAuthorizePaymentCardAdditionalContextRequiredErrorMessage","Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardTypeMissingOrNotSupported","unableToAuthorizePaymentCardTypeMissingOrNotSupportedErrorMessage","Microsoft_Dynamics_Commerce_Runtime_UnableToCancelPayment","unableToCancelPaymentErrorMessage","Microsoft_Dynamics_Commerce_Runtime_UnableToReadCardTokenInfo","unableToReadCardTokenInfoErrorMessage","Microsoft_Dynamics_Commerce_Runtime_UnableToRetrieveCardPaymentAcceptResult","unableToRetrieveCardPaymentAcceptResultErrorMessage","_ref","_ref2","_ref3","_ref4","Street","City","State","County","ZipCode","ThreeLetterISORegionName","_ref5","prop","showQty","classnames","Image","viewports","xs","q","w","h","lg","xl","lazyload","quality","Intl","DateTimeFormat","timeZone","Date","placeHolder","startDate","endDate","options","hour","minute","hour12","formatter","input","UTC","getUTCFullYear","getUTCMonth","getUTCDate","defaultKey","updateDateSelection","notification","selectedOption","toString","getDateMap","has","get","mapDatesToOptions","dates","defaultOption","unshift","findIndex","getTime","dropdownOptions","Map","set","toggleColor","htmlFor","LabeledDropdown","onSelectOption","updateTimeslotSelection","getTimeslotMap","mapTimeslotsToOptions","timeslots","_selectedTimeslot$Sta","_value$StartDateTime","_selectedTimeslot$End","_value$EndDateTime"],"sourceRoot":""}