{"version":3,"file":"static/js/16.803a579005b8b83b0444.chunk.js","mappings":"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","sources":["webpack://Citta2.0/./src/modules/order-template/order-template.view.tsx?a45e","webpack://Citta2.0/./src/modules/order-template-list/components/create-order-template.tsx?ea38","webpack://Citta2.0/./src/modules/order-template-list/order-template-list.tsx?18d0","webpack://Citta2.0/./src/modules/order-template-list/order-template-list.view.tsx?103b","webpack://Citta2.0/./src/modules/gift-card-balance-check/components/get-form.tsx?e249","webpack://Citta2.0/./src/modules/gift-card-balance-check/components/get-item.tsx?4862","webpack://Citta2.0/./src/modules/gift-card-balance-check/gift-card-balance-check.tsx?d1f8","webpack://Citta2.0/./src/modules/order-template/components/add-line/add-line.tsx?5f8a","webpack://Citta2.0/./src/modules/order-template/components/add-line/dropdown.tsx?1cba","webpack://Citta2.0/./src/modules/order-template/components/add-line/not-found.tsx?392d","webpack://Citta2.0/./src/modules/order-template/components/common/order-template-quantity.tsx?99a1","webpack://Citta2.0/./src/modules/order-template/components/add-line/product-configuration.tsx?b256","webpack://Citta2.0/./src/modules/order-template/components/add-line/product-list.tsx?4284","webpack://Citta2.0/./src/modules/order-template/components/bulk-actions.tsx?dbe8","webpack://Citta2.0/./src/modules/order-template/components/order-template-actions.tsx?8136","webpack://Citta2.0/./src/modules/order-template/components/order-template-lines.tsx?3703","webpack://Citta2.0/./src/modules/order-template/components/order-template-lines-status-message.tsx?2986","webpack://Citta2.0/./src/modules/order-template/components/order-template-table-heading.tsx?665c","webpack://Citta2.0/./src/modules/order-template/order-template.tsx?4ecb","webpack://Citta2.0/./src/modules/search/actions/get-auto-suggest-suggestions.ts?4735","webpack://Citta2.0/./src/modules/search/components/search.categorysuggest.tsx?c65d","webpack://Citta2.0/./src/modules/search/components/search.form.tsx?25a5","webpack://Citta2.0/./src/modules/search/components/search.keywordsuggest.tsx?297c","webpack://Citta2.0/./src/modules/search/components/search.label.tsx?0c17","webpack://Citta2.0/./src/modules/search/components/search.productsuggest.tsx?2af9","webpack://Citta2.0/./src/modules/search/search.tsx?72fb","webpack://Citta2.0/./src/modules/gift-card-balance-check/gift-card-balance-check.view.tsx?a0c9","webpack://Citta2.0/./src/modules/search/search.view.tsx?1505","webpack://Citta2.0/./src/themes/citta/views/components/cartlineitem.component.tsx?ca68","webpack://Citta2.0/./src/modules/order-template/components/add-line/spinner.tsx?b423","webpack://Citta2.0/./src/themes/citta/utilities/quantity/Quantity.tsx?4279","webpack://Citta2.0/./src/search-state.ts?dd10","webpack://Citta2.0/./src/modules/order-template-list/components/order-template-list.tsx?86c4","webpack://Citta2.0/./src/modules/order-template-list/components/orderTemplateList-status-message.tsx?183c"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, INodeProps, Modal, ModalBody, ModalFooter, ModalHeader, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewProps } from './components';\nimport { IOrderTemplateViewProps } from './order-template';\n\nconst OrderTemplateLinesView: React.FC = (props: IOrderTemplateViewProps) => {\n const {\n OrderTemplateLines,\n status,\n statusMessage,\n heading,\n ProductsTable,\n ProductsTableHeading,\n orderLines,\n ProductsTableRow,\n productsStatusMessage,\n OrderTemplateActions,\n orderActions,\n pagination,\n itemAddedToCartDialog,\n bulkOrderLineActions,\n isDetailsDisplayed,\n detailedProductView,\n toggleDetailsDisplayed,\n resources: {\n cancelBtnLabel,\n productNumberText,\n productText,\n productUnitPriceText,\n productUOMText,\n productQuantityText,\n productLineCatalogName\n }\n } = props;\n\n const toggleDetails = React.useCallback(() => {\n toggleDetailsDisplayed && toggleDetailsDisplayed(undefined);\n }, [toggleDetailsDisplayed]);\n\n return (\n \n {heading}\n {OrderTemplateActions && (\n \n {orderActions?.addTemplateToBag}\n {orderActions?.renameTemplate}\n {orderActions?.removeTemplate}\n {orderActions?.actionsSplitButton}\n {!isDetailsDisplayed && productsStatusMessage}\n \n )}\n {bulkOrderLineActions}\n {status !== 'SUCCESS' && statusMessage}\n {ProductsTable && orderLines && orderLines.length > 0 && (\n \n \n {ProductsTableHeading}\n \n {orderLines &&\n orderLines.map(product => {\n return _renderItem(product, productQuantityText, ProductsTableRow);\n })}\n \n \n {pagination}\n \n )}\n {itemAddedToCartDialog}\n \n Product Details\n \n
    \n
  • {detailedProductView?.productImage}
  • \n
  • \n {productText}:\n {detailedProductView?.productInfo}\n
  • \n
  • \n {productLineCatalogName}:\n {detailedProductView?.productLineCatalog}\n
  • \n
  • \n {productNumberText}:\n {detailedProductView?.productNumber}\n
  • \n
  • \n {productUnitPriceText}:\n {` `}\n {detailedProductView?.productPrice}\n
  • \n
  • \n {productUOMText}:\n {` `}\n {detailedProductView?.productUnitOfMeasure}\n
  • \n
  • \n {productQuantityText}:\n {detailedProductView?.productQuantityView}\n
  • \n {productsStatusMessage &&
  • {productsStatusMessage}
  • }\n
\n
\n \n \n \n \n
\n );\n};\n\nconst _renderItem = (product: IOrderTemplateLineViewProps, quantityLabel: string, ProductsTableRow?: INodeProps): JSX.Element | null => {\n if (!product) {\n return null;\n }\n\n const {\n key,\n selectLine,\n productLineCatalog,\n productImage,\n productPrice,\n productNumber,\n addToBagButton,\n removeButton,\n productInfo,\n productUnitOfMeasure,\n productQuantityView,\n productQuantity,\n popUp,\n isMobile,\n extraActionsPopup,\n isMultipleCatalogFeatureEnabledInHq,\n disabled\n } = product;\n\n const lineVisibility = disabled\n ? {\n pointerEvents: 'none',\n opacity: 0.5\n }\n : {\n pointerEvents: 'auto',\n opacity: 1\n };\n\n const disableElement: React.CSSProperties = lineVisibility as React.CSSProperties;\n\n return (\n \n {selectLine}\n {!isMobile && isMultipleCatalogFeatureEnabledInHq && {productLineCatalog}}\n {productImage}\n {isMobile ? (\n \n
{productNumber}
\n
\n {quantityLabel}:{` `}\n {productQuantity}\n
\n \n ) : (\n {productNumber}\n )}\n {!isMobile && {productInfo}}\n {!isMobile && {productPrice}}\n {!isMobile && {productUnitOfMeasure}}\n {!isMobile && {productQuantityView}}\n {isMobile && {popUp}}\n {!isMobile && !isMultipleCatalogFeatureEnabledInHq && (\n \n {addToBagButton}\n {removeButton}\n \n )}\n {extraActionsPopup}\n
\n );\n};\n\nexport default OrderTemplateLinesView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IOrderTemplateNameDialogResources, OrderTemplateNameDialog } from '@msdyn365-commerce/components';\nimport { IComponentProps } from '@msdyn365-commerce/core';\nimport React, { useState } from 'react';\n\nconst modalCloseButtonReference: React.RefObject = React.createRef();\n\n/**\n * The Create Order Template Button Props.\n */\nexport interface ICreateOrderTemplateButtonProps extends IComponentProps {\n /**\n * The label for create order template.\n */\n createOrderTemplateText: string;\n\n /**\n * The create order template dialog resources.\n */\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\n\n /**\n * The delegate to fire when dialog captured any user entry.\n */\n onOrderTemplateCreated(): Promise;\n}\n\nconst CreateOrderTemplateButton: React.FC = props => {\n const onCancelHandler = React.useCallback(() => {\n return;\n }, []);\n const [isCreateOrderTemplateDialogOpen, setOrderTemplateNameDialogOpen] = useState(false);\n const onCreateButtonClick = React.useCallback(() => {\n setOrderTemplateNameDialogOpen(true);\n }, []);\n\n return (\n <>\n \n {props.createOrderTemplateText}\n \n \n \n );\n};\n\nexport default CreateOrderTemplateButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IOrderTemplateNameDialogResources } from '@msdyn365-commerce/components';\nimport { deleteAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { OrderTemplate } from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Heading, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport Spinner from '../order-template/components/add-line/spinner';\nimport {\n ISingleOrderTemplateProps,\n ISingleOrderTemplateViewProps,\n OrderTemplateListStatusMessage,\n OrderTemplateRender\n} from './components';\nimport CreateNewTemplateButtonComponent from './components/create-order-template';\nimport { IOrderTemplateListData } from './order-template-list.data';\nimport { HeadingTag, IOrderTemplateListProps, IOrderTemplateListResources } from './order-template-list.props.autogenerated';\n\nexport interface IOrderTemplateActionMessageState {\n itemKey: string;\n userMessage: string;\n statusCssString: string;\n messageGlyph: string;\n isOpen: boolean;\n headerStatusMessage: string;\n}\n\nexport type orderTemplateListStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\n\nexport interface IOrderTemplateListViewProps extends IOrderTemplateListProps {\n OrderTemplateList: IModuleProps;\n status?: orderTemplateListStatus;\n statusMessage?: React.ReactNode;\n heading?: React.ReactNode;\n OrderTemplates?: INodeProps;\n OrderTemplate?: INodeProps;\n orderTemplates?: ISingleOrderTemplateViewProps[];\n createOrderTemplateButton?: React.ReactNode;\n templateHeaderStatusMessage?: React.ReactNode;\n}\n\n/**\n *\n * OrderTemplateList component.\n * @extends {React.PureComponent, IOrderTemplateListActionMessageState>}\n */\n@observer\nclass OrderTemplateList extends React.Component, IOrderTemplateActionMessageState> {\n constructor(props: IOrderTemplateListProps) {\n super(props);\n this.state = {\n itemKey: '',\n userMessage: '',\n headerStatusMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false\n };\n }\n\n public async componentDidMount(): Promise {\n this.setState({});\n }\n\n public shouldComponentUpdate(\n nextProps: IOrderTemplateListProps,\n nextState: IOrderTemplateActionMessageState\n ): 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 const { className, heading } = this.props.config;\n const { emptyOrderTemplateText, createNewTemplateButtonText } = this.props.resources;\n const { orderTemplates } = this.props.data;\n const orderTemplatesData = orderTemplates && orderTemplates.result;\n const orderTemplateListHeading = heading?.text ?? this.props.resources.orderTemplateListTitle;\n\n if (orderTemplates.status === 'LOADING') {\n const errorProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'LOADING',\n statusMessage: ,\n heading: (\n \n )\n };\n return this.props.renderView(errorProps);\n }\n\n if (orderTemplatesData && orderTemplatesData.length === 0) {\n // When no order templates are found for customer\n const emptyViewProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'EMPTY',\n statusMessage: ,\n createOrderTemplateButton: (\n \n ),\n heading: (\n \n )\n };\n\n return this.props.renderView(emptyViewProps);\n }\n\n const viewProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'SUCCESS',\n heading: ,\n createOrderTemplateButton: (\n \n ),\n templateHeaderStatusMessage: this.state.isOpen && this.state.headerStatusMessage && (\n
\n \n {this.state.headerStatusMessage}\n \n
\n ),\n OrderTemplates: {\n className: 'ms-order-template__list-item',\n tag: 'ul'\n },\n OrderTemplate: {\n className: 'ms-order-template__tile',\n tag: 'li'\n },\n orderTemplates: orderTemplatesData && this._renderOrderTemplateList(orderTemplatesData)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _generateOrderTemplateNameDialogResources(resources: IOrderTemplateListResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\n orderTemplateDescription: resources.createOrderTemplateDescription,\n\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\n };\n }\n\n private readonly _isChannelMultipleCatalogsFeatureEnabled = (): boolean => {\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (this.props.data.featureState) {\n isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n return isMultipleCatalogFeatureEnabledInHq;\n };\n\n private _renderOrderTemplateList(orderTemplates: OrderTemplate[]): ISingleOrderTemplateViewProps[] {\n const { context, telemetry } = this.props;\n const { imageSettings, enableImageProductLink } = this.props.config;\n return orderTemplates.map((orderTemplate: OrderTemplate, index) => {\n const currentTemplateProps: ISingleOrderTemplateProps = {\n orderTemplateState: this.state,\n Id: orderTemplate.productList.Id,\n name: orderTemplate.productList.Name,\n orderTemplate,\n context,\n imageSettings,\n enableImageProductLink,\n removeFromOrderTemplateListText: 'remove',\n addToBagText: this.props.resources.addToBagButtonText,\n index,\n itemKey: orderTemplate.productList.Id,\n telemetry,\n moduleId: this.props.id,\n moduleTypeName: this.props.typeName,\n handlers: {\n onRemoveOrderTemplate: this._onRemoveFromOrderTemplateList,\n onDismiss: this._onDismiss\n },\n resources: {\n closeWindowButtonText: this.props.resources.closeWindowButtonText,\n addToCartFailureMessage: this.props.resources.addToCartFailureMessage,\n addToCartSuccessMessage: this.props.resources.addToCartSuccessMessage,\n addToCartProcessMessage: this.props.resources.addToCartProcessMessage,\n orderTemplateErrorMessage: this.props.resources.orderTemplateErrorMessage,\n linesAddedToCartDialogResources: {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n linesAddedToCartHeaderItemsOneText: this.props.resources.linesAddedToCartHeaderItemsOneText,\n linesAddedToCartHeaderLinesOneText: this.props.resources.linesAddedToCartHeaderLinesOneText,\n linesAddedToCartHeaderLinesFormatText: this.props.resources.linesAddedToCartHeaderLinesFormatText,\n linesAddedToCartHeaderMessageText: this.props.resources.linesAddedToCartHeaderMessageText\n }\n },\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled()\n };\n\n return OrderTemplateRender(currentTemplateProps)!;\n });\n }\n\n private readonly _onDismiss = () => {\n this.setState({\n isOpen: false\n });\n };\n\n private readonly _reloadPage = async () => {\n window.location.reload();\n };\n\n private readonly _onRemoveFromOrderTemplateList = (productListId: string): void | undefined => {\n const { context, data, telemetry, resources } = this.props;\n const { orderTemplates } = data;\n\n if (context && context.actionContext) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplates.result && orderTemplates.result[0] && productListId) {\n const orderTemplate = orderTemplates.result.find(p => p.productList.Id === productListId);\n if (orderTemplate) {\n deleteAsync({ callerContext: context.actionContext }, orderTemplate.productList)\n .then()\n .catch((error: string) => {\n telemetry.warning('[order-template-list] Unable to delete order template.');\n telemetry.error(error);\n this.setState({\n itemKey: productListId,\n headerStatusMessage: resources.deleteOrderTemplateFailedText,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n })\n .then(this._reloadPage)\n .catch((error: string) => {\n telemetry.warning('[order-template-list] Unable to delete order template.');\n telemetry.error(error);\n });\n } else {\n telemetry.warning('[order-template-list] Failed to delete order template. Order template was not found');\n }\n } else {\n telemetry.warning('[order-template-list] Failed to delete order template.');\n }\n }\n };\n}\n\nexport default OrderTemplateList;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISingleOrderTemplateViewProps } from './components';\nimport { IOrderTemplateListViewProps } from './order-template-list';\n\nexport const OrderTemplateListView: React.FC = props => {\n const {\n OrderTemplateList,\n status,\n statusMessage,\n heading,\n OrderTemplates,\n orderTemplates,\n OrderTemplate,\n createOrderTemplateButton,\n templateHeaderStatusMessage\n } = props;\n\n return (\n \n {heading}\n {status !== 'SUCCESS' && statusMessage}\n \n {createOrderTemplateButton}\n {templateHeaderStatusMessage}\n \n {OrderTemplates && orderTemplates && orderTemplates.length > 0 && (\n \n {orderTemplates &&\n orderTemplates.map(orderTemplate => {\n return _renderOrderTemplate(orderTemplate, OrderTemplate);\n })}\n \n )}\n \n );\n};\n\nconst _renderOrderTemplate = (orderTemplate: ISingleOrderTemplateViewProps, OrderTemplate?: INodeProps): JSX.Element | null => {\n const { key, addToCartButton, orderTemplateImage, orderTemplateStatusMessage, removeButton, orderTemplateName } = orderTemplate;\n return (\n \n {orderTemplateName}\n {orderTemplateImage}\n {addToCartButton}\n {removeButton}\n {orderTemplateStatusMessage}\n \n );\n};\n\nexport default OrderTemplateListView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Button, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { showAdditionalFields } from '../gift-card-balance-check.props.autogenerated';\n\nexport interface IGetFormInput {\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n inputRef?: React.RefObject;\n inputPinRef?: React.RefObject;\n inputExpRef?: React.RefObject;\n supportExternalGiftCard?: boolean;\n additionalFields?: showAdditionalFields;\n resources: {\n balanceCheckButton: string;\n giftCardFormLabel: string;\n giftCardNumberLabel: string;\n giftCardPinLabel: string;\n giftCardExpLabel: string;\n giftCardAlertLabel: string;\n giftCardPinPlaceholderText: string;\n giftCardExpPlaceholderText: string;\n };\n onEnterGiftCardNumber(giftCardNumber: string): void;\n onEnterGiftCardPin(giftCardPin: string): void;\n onEnterGiftCardExp(giftCardExp: string): void;\n onApplyGiftCard(): Promise;\n}\n\nexport interface IForm {\n formProps: INodeProps;\n label: React.ReactNode;\n inputPinLabel: React.ReactNode;\n inputExpLabel: React.ReactNode;\n alert: React.ReactNode;\n inputProps: INodeProps;\n inputNumProps: INodeProps;\n inputPinProps: INodeProps;\n inputExpProps: INodeProps;\n inputNumber: React.ReactNode;\n inputPin: React.ReactNode;\n inputExp: React.ReactNode;\n applyButton: React.ReactNode;\n supportExternalGiftCard: boolean | undefined;\n showGiftCardPinInput: boolean | undefined;\n showGiftCardExpInput: boolean | undefined;\n alertFieldLabel: React.ReactNode;\n}\n\n/**\n * On apply function.\n * @param onApplyGiftCard -On apply gift card.\n * @returns Apply gift card.\n */\nconst onApplyHandler = (onApplyGiftCard: () => Promise) => async (event: React.SyntheticEvent): Promise => {\n event.preventDefault();\n await onApplyGiftCard();\n};\n\n/**\n * On change number function.\n * @param onEnterGiftCardNumber -On enter gift card number.\n * @returns On gift card enter pin function result.\n */\nconst onChangeNumberHandler = (onEnterGiftCardNumber: (giftCardNumber: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardNumber(value);\n};\n\n/**\n * On change pin function.\n * @param onEnterGiftCardPin -On enter gift card pin.\n * @returns On enter gift card pin function result.\n */\nconst onChangePinHandler = (onEnterGiftCardPin: (giftCardPin: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardPin(value);\n};\n\n/**\n * On change exp function.\n * @param onEnterGiftCardExp -On enter gift card.\n * @returns On enter gift card function result.\n */\nconst onChangeExpHandler = (onEnterGiftCardExp: (giftCardExp: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardExp(value);\n};\n\nexport const getForm = (options: IGetFormInput): IForm => {\n const {\n errorMessage,\n inputRef,\n inputPinRef,\n inputExpRef,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n onEnterGiftCardNumber,\n onEnterGiftCardPin,\n onEnterGiftCardExp,\n onApplyGiftCard,\n supportExternalGiftCard,\n additionalFields,\n resources: {\n balanceCheckButton,\n giftCardFormLabel,\n giftCardNumberLabel,\n giftCardPinLabel,\n giftCardExpLabel,\n giftCardAlertLabel,\n giftCardPinPlaceholderText,\n giftCardExpPlaceholderText\n }\n } = options;\n\n const formProps = {\n className: classnames('ms-gift-card-balance-check__form', { 'is-invalid': !!errorMessage }),\n onSubmit: onApplyHandler(onApplyGiftCard),\n tag: 'form' as NodeTag\n };\n\n const label = (\n \n );\n\n const inputPinLabel = (\n \n );\n\n const inputExpLabel = (\n \n );\n\n const alertFieldLabel = (\n \n );\n\n const alert = (\n \n {errorMessage}\n \n );\n\n const inputProps = {\n className: 'ms-gift-card-balance-check__input-fields'\n };\n\n const inputNumProps = {\n className: 'ms-gift-card-balance-check__input-num-fields'\n };\n\n const inputPinProps = {\n className: 'ms-gift-card-balance-check__input-pin-fields'\n };\n\n const inputExpProps = {\n className: 'ms-gift-card-balance-check__input-exp-fields'\n };\n\n const inputNumber = (\n \n );\n\n const inputPin = (\n \n );\n\n const inputExp = (\n \n );\n\n const applyButton = (\n \n {balanceCheckButton}\n \n );\n\n let showGiftCardPinInput = false;\n let showGiftCardExpInput = false;\n\n switch (additionalFields) {\n case showAdditionalFields.pin:\n showGiftCardPinInput = true;\n break;\n case showAdditionalFields.expirationDate:\n showGiftCardExpInput = true;\n break;\n case showAdditionalFields.pinAndExpirationDate:\n showGiftCardPinInput = true;\n showGiftCardExpInput = true;\n break;\n default:\n }\n\n return {\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { GiftCard } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IGetItemInput {\n giftCard: GiftCard;\n resources: {\n enteredGiftCardLabel: string;\n giftCardAvailableBalanceLabel: string;\n };\n getFormattedPrice(price?: number, currencyCode?: string): string;\n}\n\nexport interface IItem {\n itemProps: INodeProps;\n id?: string;\n selectedGiftCard: React.ReactNode;\n removeButton?: React.ReactNode;\n}\n\n/**\n * GiftCardItem component.\n * @param root0\n * @param root0.giftCard\n * @param root0.getFormattedPrice\n * @param root0.resources\n * @param root0.resources.enteredGiftCardLabel\n * @param root0.resources.giftCardAvailableBalanceLabel\n * @extends {React.PureComponent}\n */\nexport const getItem = ({\n giftCard,\n getFormattedPrice,\n resources: { enteredGiftCardLabel, giftCardAvailableBalanceLabel }\n}: IGetItemInput): IItem => {\n const balance = getFormattedPrice(giftCard.Balance, giftCard.CardCurrencyCode);\n const giftCardLast4Digit = (giftCard.Id || '').substr(-4);\n\n const itemProps = {\n className: 'ms-gift-card-balance-check__item'\n };\n\n const selectedGiftCard = (\n \n {enteredGiftCardLabel}\n {` `}\n {giftCardLast4Digit}\n {` `}({giftCardAvailableBalanceLabel}\n {` `}\n {balance})\n \n );\n\n return {\n itemProps,\n id: giftCard && giftCard.Id,\n selectedGiftCard\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n getGiftCardAsync,\n getTenderTypesAsync,\n resolveCardTypesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n CardType,\n CardTypeInfo,\n GiftCard,\n RetailOperation,\n TenderType\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport * as React from 'react';\n\nimport { OPERATIONS } from '../checkout';\nimport { getForm, IForm } from './components/get-form';\nimport { getItem, IItem } from './components/get-item';\nimport { IGiftCardBalanceCheckProps } from './gift-card-balance-check.props.autogenerated';\n\ninterface IGiftCardBalanceCheckState {\n isFetchingGiftCard: boolean;\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n giftCard?: GiftCard;\n}\n\nenum SupportedGiftCardType {\n Internal = 'internal',\n External = 'external',\n Both = 'both'\n}\n\nexport interface IGiftCardBalanceCheckModuleProps extends IGiftCardBalanceCheckProps<{}> {}\n\nexport interface IGiftCardBalanceCheckViewProps extends IGiftCardBalanceCheckProps<{}>, IGiftCardBalanceCheckState {\n className?: string;\n\n form: IForm;\n item?: IItem;\n\n giftCardBalanceCheckProps: IModuleProps;\n\n enterGiftCardNumber?(giftCardNumber: string): void;\n enterGiftCardPin?(giftCardPin: string): void;\n enterGiftCardExp?(giftCardExp: string): void;\n applyGiftCard?(): void;\n}\n\n/**\n *\n * GiftCardBalanceCheck component.\n * @extends {React.Component}\n */\nexport class GiftCardBalanceCheck extends React.Component {\n public state: IGiftCardBalanceCheckState = {\n isFetchingGiftCard: false,\n errorMessage: '',\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: ''\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n private readonly inputPinRef: React.RefObject = React.createRef();\n\n private readonly inputExpRef: React.RefObject = React.createRef();\n\n public shouldComponentUpdate(nextProps: IGiftCardBalanceCheckModuleProps, nextState: IGiftCardBalanceCheckState): 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 const {\n config: { className, showAdditionalFields },\n resources\n } = this.props;\n const { errorMessage, giftCardNumber, giftCardPin, giftCardExp } = this.state;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!this._isEnabled()) {\n this.props.context.telemetry.error('Gift card balance check is not supported, module wont render');\n return null;\n }\n\n const supportExternalGiftCard = supportedGiftCardType !== SupportedGiftCardType.Internal;\n\n const moduleClassName = classname('ms-gift-card-balance-check', className);\n\n const viewProps: IGiftCardBalanceCheckViewProps = {\n ...this.props,\n ...this.state,\n className: moduleClassName,\n giftCardBalanceCheckProps: { moduleProps: this.props, className: moduleClassName },\n\n enterGiftCardNumber: this._enterGiftCardNumber,\n enterGiftCardPin: this._enterGiftCardPin,\n enterGiftCardExp: this._enterGiftCardExp,\n applyGiftCard: this._applyGiftCard,\n\n form: getForm({\n errorMessage,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n inputRef: this.inputRef,\n inputPinRef: this.inputPinRef,\n inputExpRef: this.inputExpRef,\n resources,\n supportExternalGiftCard,\n additionalFields: showAdditionalFields,\n onEnterGiftCardNumber: this._enterGiftCardNumber,\n onEnterGiftCardPin: this._enterGiftCardPin,\n onEnterGiftCardExp: this._enterGiftCardExp,\n onApplyGiftCard: this._applyGiftCard\n }),\n item:\n this.state.giftCard &&\n getItem({\n giftCard: this.state.giftCard,\n getFormattedPrice: this._getFormattedPrice,\n resources\n })\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private readonly _isEnabled = (): boolean => {\n if (\n !this.props.context.request.user.isAuthenticated &&\n this.props.context.app.config.giftCardSupported !== SupportedGiftCardType.External &&\n !this.props.config.shouldBeEnabledForGuest\n ) {\n return false;\n }\n return true;\n };\n\n private readonly _getFormattedPrice = (price: number = 0, currencyCode: string = 'USD'): string => {\n return this.props.context.cultureFormatter.formatCurrency(price, currencyCode);\n };\n\n private readonly _enterGiftCardNumber = (giftCardNumber: string): void => {\n this.setState({\n giftCardNumber\n });\n this._clearError();\n };\n\n private readonly _enterGiftCardPin = (giftCardPin: string): void => {\n this.setState({\n giftCardPin\n });\n this._clearError();\n };\n\n private readonly _enterGiftCardExp = (giftCardExp: string): void => {\n this.setState({\n giftCardExp\n });\n this._clearError();\n };\n\n private readonly _clearError = (): void => {\n this.setState({\n errorMessage: ''\n });\n };\n\n private readonly _setError = (errorMessage: string): void => {\n this.props.telemetry.error('Error', errorMessage);\n this.props.telemetry.debug('Error', errorMessage);\n this.setState({\n errorMessage\n });\n };\n\n private readonly _applyGiftCard = async (): Promise => {\n if (this.state.isFetchingGiftCard) {\n return;\n }\n this.setState({\n isFetchingGiftCard: true\n });\n\n const giftCardNumber = this.state.giftCardNumber.trim();\n const giftCardPin = this.state.giftCardPin.trim();\n const giftCardExp = this.state.giftCardExp.trim();\n\n const giftCardTypes = await this._getGiftCardTypes(giftCardNumber);\n const giftCardType = giftCardTypes && giftCardTypes[0];\n const isPinRequired = giftCardType && giftCardType.IsPinRequired;\n const isExpRequired = giftCardType && giftCardType.IsExpirationDateRequired;\n const tenderTypeId = giftCardType && giftCardType.PaymentMethodId;\n const giftCard = await this._getGiftCard(giftCardNumber, giftCardPin, giftCardExp, isPinRequired, isExpRequired, tenderTypeId);\n\n if (giftCard) {\n this._clearError();\n this.setState({\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: '',\n isFetchingGiftCard: false,\n giftCard\n });\n return Promise.resolve();\n }\n const input = this.inputRef && this.inputRef.current && this.inputRef.current.focus && (this.inputRef.current as HTMLElement);\n input && input.focus();\n this.setState({\n isFetchingGiftCard: false,\n giftCard: undefined\n });\n };\n\n private readonly _findGiftcardTenderTypes = (\n tenderTypes: TenderType[],\n operationId: RetailOperation,\n giftcardType: string\n ): string[] | undefined => {\n let matchedTenderTypes: TenderType[] | undefined;\n\n switch (giftcardType) {\n case SupportedGiftCardType.Internal:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId === ''\n );\n break;\n case SupportedGiftCardType.External:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId !== ''\n );\n break;\n default:\n throw new Error('Invalid gift card type');\n }\n\n if (matchedTenderTypes) {\n return matchedTenderTypes.map(tenderType => tenderType.TenderTypeId || '');\n }\n return;\n };\n\n private readonly _getGiftCard = async (\n giftCardNumber: string,\n giftCardPin: string,\n giftCardExp: string,\n isPinRequired: boolean | undefined,\n isExpRequired: boolean | undefined,\n tenderTypeId: string | undefined\n ): Promise => {\n const {\n resources: { invalidCardTypeError, noBalanceError, invalidCardInfoError, noCardPinError, noCardExpError }\n } = this.props;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!tenderTypeId) {\n return undefined;\n }\n\n const tenderTypes = await getTenderTypesAsync({ callerContext: this.props.context.actionContext, queryResultSettings: {} }).catch(\n error => {\n throw error;\n }\n );\n\n if (!tenderTypes) {\n throw new Error('Fail to get gift card tender line');\n }\n\n const internalGiftcardTenderTypes = this._findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.Internal\n );\n const externalGiftcardTenderTypes = this._findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.External\n );\n\n switch (supportedGiftCardType) {\n case undefined:\n case SupportedGiftCardType.Internal:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.External:\n if (!externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.Both:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId) && !externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n default:\n throw new Error('Unsupported gift card type');\n }\n\n if (!this.props.context.request.user.isAuthenticated && internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n\n if (isPinRequired && giftCardPin === '') {\n this._setError(noCardPinError);\n return undefined;\n }\n\n if (isExpRequired && giftCardExp === '') {\n this._setError(noCardExpError);\n return undefined;\n }\n\n const month = Number.parseInt(giftCardExp.split('/')[0], 10);\n const year = Number.parseInt(giftCardExp.split('/')[1], 10);\n\n return getGiftCardAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, tenderTypeId, giftCardPin, month, year)\n .then(activeGiftCard => {\n if (!activeGiftCard.Balance || activeGiftCard.Balance === 0) {\n this._setError(noBalanceError);\n return;\n }\n return activeGiftCard;\n })\n .catch(error => {\n this._setError(invalidCardInfoError);\n return undefined;\n });\n };\n\n private readonly _getGiftCardTypes = async (giftCardNumber: string): Promise => {\n const {\n resources: { emptyInputError, invalidCodeError }\n } = this.props;\n\n if (!giftCardNumber) {\n this._setError(emptyInputError);\n return undefined;\n }\n\n return resolveCardTypesAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, CardType.GiftCard)\n .then(giftCardTypes => {\n if (!giftCardTypes || giftCardTypes.length === 0 || giftCardTypes[0] === undefined) {\n this._setError(invalidCodeError);\n return;\n }\n return giftCardTypes;\n })\n .catch(error => {\n this._setError(invalidCodeError);\n return undefined;\n });\n };\n}\n\nexport default GiftCardBalanceCheck;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { getCatalogId, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ProductListLine, ProductSearchCriteria, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { searchByCriteriaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { ProductCatalog, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n addItemToOrderTemplate,\n AddItemToOrderTemplateInput,\n ArrayExtensions,\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getSelectedVariant,\n SelectedVariantInput,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Modal, ModalBody, ModalHeader, getPayloadObject, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport { get } from 'lodash';\nimport { computed } from 'mobx';\nimport React from 'react';\n\nimport { IProductConfigurationState, NotFoundComponent, ProductConfiguration, ProductList } from '.';\nimport Spinner from './spinner';\n\nexport interface IAddLineToTemplateProps {\n context: ICoreContext;\n resources: IAddLineToTemplateResources;\n orderTemplateId: string;\n imageSettings?: IImageSettings;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n catalogs?: ProductCatalog[] | undefined;\n telemetryContent?: ITelemetryContent;\n}\n\nexport interface IAddLineToTemplateResources {\n addLineModalLinkText: string;\n searchButtonAriaLabel: string;\n searchInputAriaLabel: string;\n searchModalPlaceholderText: string;\n selectCatalogTitleText: string;\n selectProductButtonText: string;\n addItemToTemplateText: string;\n addLineProductUnitPricePrefix: string;\n backButtonText: string;\n decrementButtonAriaLabel: string;\n incrementButtonAriaLabel: string;\n quantitySelectLabel: string;\n addLineProductUnitOfMeasurePrefix: string;\n notFoundSearchErrorNotice: string;\n notFoundSearchErrorRedediation: string;\n searchErrorMessage: string;\n productDimensionTypeColor: string;\n productDimensionTypeConfiguration: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n searchResultsCountVerbage: string;\n searchResultsCountSubject: string;\n addToTemplateConfirmation: string;\n totalPriceLabel: string;\n progressNotificationText: string;\n addToTemplateDuplicateError: string;\n addToTemplateGenericError: string;\n dimensionMissingError: string;\n backToResultsText?: string;\n}\n\nenum CONTENT {\n Search,\n ProductList,\n ProductConfiguration,\n NotFound,\n Error,\n Loading\n}\n\ninterface IAddLineToTemplateState {\n isOpen: boolean;\n query: string;\n products: ProductSearchResult[];\n productCatalogs: ProductCatalog[] | null;\n content: number;\n selectedProduct: SimpleProduct | null;\n selectedCatalogId: number | undefined;\n selectedProductDimensions?: ProductDimensionFull[];\n selectedQuantity?: number;\n reloadPage?: boolean;\n}\n\n/**\n * Add Lines to order template.\n */\nexport class AddLineToTemplate extends React.Component {\n public state: IAddLineToTemplateState = {\n isOpen: false,\n query: '',\n products: [],\n productCatalogs: [],\n content: CONTENT.Search,\n selectedProduct: null,\n selectedCatalogId: 0\n };\n\n public defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n lg: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n xl: { q: 'w=64&h=64&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n public searchTextInput: React.RefObject = React.createRef(); // @TODO public/private\n\n private readonly addLineButtonRef: React.RefObject = React.createRef();\n\n constructor(props: IAddLineToTemplateProps) {\n super(props);\n }\n\n public onComponentDidMount(): void {\n this.searchTextInput.current?.focus();\n }\n\n public componentDidMount(): void {\n this._getCatalogs();\n }\n\n public onComponentDidUpdate(): void {\n this.searchTextInput.current?.focus();\n }\n\n @computed get showBackArrow(): boolean {\n return this.state.content === CONTENT.ProductConfiguration;\n }\n\n public shouldComponentUpdate(nextProps: IAddLineToTemplateProps, nextState: IAddLineToTemplateState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const {\n resources: { addLineModalLinkText, backToResultsText }\n } = this.props;\n\n const modalProps = {\n ...this.props,\n className: 'msc-add-line-to-template',\n toggle: this._toggleModalHandler,\n isOpen: this.state.isOpen,\n ariaLabel: addLineModalLinkText\n };\n\n return (\n <>\n \n \n {this.showBackArrow && (\n \n )}\n {addLineModalLinkText}\n \n {this._renderContent()}\n \n \n \n {addLineModalLinkText}\n \n \n );\n }\n\n private readonly _renderSearchForm = () => {\n const {\n resources: { searchButtonAriaLabel, searchModalPlaceholderText, selectCatalogTitleText }\n } = this.props;\n\n return (\n \n {this.state.productCatalogs && ArrayExtensions.hasElements(this.state.productCatalogs) && (\n <>\n \n \n {this._getCatalogNodes()}\n \n \n )}\n
\n \n
\n \n );\n };\n\n private readonly _onSearchSubmit = (event: React.FormEvent): void => {\n event.preventDefault();\n\n const query = get(this, 'searchTextInput.current.value', null);\n\n if (!query) {\n return;\n }\n\n this.setState({\n content: CONTENT.Loading\n });\n\n this._getSearchResults(query)\n .then(result => {\n if (result.length === 0) {\n this.setState({\n products: result,\n content: CONTENT.NotFound\n });\n } else {\n this.setState({\n products: result,\n content: CONTENT.ProductList\n });\n }\n })\n .catch(error => {\n this.setState({\n content: CONTENT.Error\n });\n });\n };\n\n private readonly _onQuantityChangeHandler = (event: React.ChangeEvent) => {\n this.setState({\n selectedQuantity: +event.target.value\n });\n };\n\n private readonly _onSelectItem = async (product: ProductSearchResult): Promise => {\n const {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n } = this.props.context;\n const varianteInput = new SelectedVariantInput(product.RecordId, channelId, [], undefined, this.props.context.request);\n const productVariant = await getSelectedVariant(varianteInput, actionContext);\n\n if (!productVariant) {\n this.props.context.telemetry.error('Error retrieving product variant');\n return Promise.resolve([]);\n }\n\n const dimensions = await this._getProductDimensions(product as SimpleProduct);\n\n this.setState({\n selectedProductDimensions: dimensions,\n content: CONTENT.ProductConfiguration,\n selectedProduct: productVariant\n });\n\n return dimensions;\n };\n\n private readonly _onInputChange = (event: React.ChangeEvent): void => {\n this.setState({\n query: event.target.value\n });\n };\n\n private readonly _onBackButtonClickHandler = (): void => {\n this.setState({\n content: CONTENT.ProductList\n });\n };\n\n private readonly _highlightSearchTerm = (name: string) => {\n const parsedName = name && unescape(name.replace(new RegExp(this.state.query, 'i'), '$&'));\n\n return (\n \n );\n };\n\n private readonly _resultCountText = (): string => {\n return this.props.resources.searchResultsCountVerbage\n .replace('{count}', this.state.products.length.toString())\n .replace('{subject}', `${this.props.resources.searchResultsCountSubject}${this.state.products.length > 1 ? 's' : ''}`);\n };\n\n private _renderContent(): React.ReactNode | null {\n switch (this.state.content) {\n case CONTENT.ProductConfiguration:\n const { selectedProduct, selectedProductDimensions } = this.state;\n const viewProps = {\n ...this.props,\n imageSettings: this.props.imageSettings || this.defaultImageSettings,\n product: selectedProduct!,\n dimensions: selectedProductDimensions!,\n addToTemplateHandler: this._addItemToTemplateHandler,\n onQuantityChangeHandler: this._onQuantityChangeHandler,\n highlightSearchTerm: this._highlightSearchTerm,\n searchForm: this._renderSearchForm()\n };\n\n return ;\n\n case CONTENT.ProductList:\n const productProps = {\n ...this.props,\n imageSettings: this.props.imageSettings || this.defaultImageSettings,\n clickHandler: this._onSelectItem,\n products: this.state.products,\n highlightSearchTerm: this._highlightSearchTerm,\n searchForm: this._renderSearchForm(),\n renderResultCountText: this._resultCountText\n };\n\n return (\n \n \n \n );\n\n case CONTENT.Loading:\n return (\n \n {this._renderSearchForm()}\n \n \n );\n\n case CONTENT.NotFound:\n const { notFoundSearchErrorNotice, notFoundSearchErrorRedediation } = this.props.resources;\n\n return (\n \n

{this._resultCountText()}

\n {this._renderSearchForm()}\n \n
\n );\n\n case CONTENT.Error:\n return (\n \n {this._renderSearchForm()}\n
\n {this.props.resources.searchErrorMessage}\n
\n
\n );\n\n default:\n return {this._renderSearchForm()};\n }\n }\n\n private readonly _addItemToTemplateHandler = async (config: IProductConfigurationState): Promise => {\n const {\n orderTemplateId,\n context: { actionContext },\n isMultipleCatalogFeatureEnabledInHq\n } = this.props;\n const catalogId = this.state.selectedCatalogId;\n const input = isMultipleCatalogFeatureEnabledInHq\n ? new AddItemToOrderTemplateInput(\n orderTemplateId,\n config.product.RecordId,\n config.quantity,\n config.product.DefaultUnitOfMeasure || 'ea',\n isMultipleCatalogFeatureEnabledInHq,\n catalogId\n )\n : new AddItemToOrderTemplateInput(\n orderTemplateId,\n config.product.RecordId,\n config.quantity,\n config.product.DefaultUnitOfMeasure || 'ea'\n );\n const result = await addItemToOrderTemplate(input, actionContext);\n this.setState({\n isOpen: false,\n reloadPage: true\n });\n // reload when closing\n window.location.reload();\n return result;\n };\n\n /**\n *\n * Get all active product catalogs.\n */\n private _getCatalogs(): void {\n const { isMultipleCatalogFeatureEnabledInHq, catalogs } = this.props;\n\n // if Channel Multiple Catalogs Feature is enabled then show all catalogs.\n const productCatalogs = isMultipleCatalogFeatureEnabledInHq && catalogs ? catalogs : [];\n\n // get the current catalog id.\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n // set the current catalog id as a default selected catalog id from the url\n this.setState({\n productCatalogs: productCatalogs,\n selectedCatalogId: catalogId\n });\n }\n\n private _getCatalogNodes(): JSX.Element[] | null {\n const { productCatalogs, selectedCatalogId } = this.state;\n if (productCatalogs && ArrayExtensions.hasElements(productCatalogs)) {\n return productCatalogs.map((productCatalog: ProductCatalog) => {\n // initially select default catalog in dropdown\n const isSelected = productCatalog.RecordId === selectedCatalogId;\n return (\n \n );\n });\n }\n return [];\n }\n\n private readonly _onCatalogSelectionChange = (event: React.ChangeEvent) => {\n this.setState({\n selectedCatalogId: Number.parseInt(event.target.value, 10)\n });\n };\n\n private _getSearchResults(searchText: string): Promise {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n const { selectedCatalogId } = this.state;\n const searchCriteriaInput: ProductSearchCriteria = {};\n\n searchCriteriaInput.Context = {\n ChannelId: channelId,\n CatalogId: selectedCatalogId\n };\n\n if (process.env.NODE_ENV === 'development' && process.env.ENABLE_CLOUD_SEARCH?.toLowerCase() !== 'true') {\n searchCriteriaInput.IncludeAttributes = false;\n } else {\n searchCriteriaInput.IncludeAttributes = true;\n }\n searchCriteriaInput.SearchCondition = searchText;\n\n return searchByCriteriaAsync({ callerContext: actionContext }, searchCriteriaInput);\n }\n\n private async _getProductDimensions(product: SimpleProduct): Promise {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n const id = product.MasterProductId ? product.MasterProductId : product.RecordId;\n\n return getDimensionsForSelectedVariant(\n new GetDimensionsForSelectedVariantInput(id, channelId, [], this.props.context.request),\n actionContext\n );\n }\n\n private readonly _toggleModalHandler = () => {\n if (this.state.isOpen) {\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'add-item-to-template', '');\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'add-item-to-template');\n this._getCatalogs();\n this.addLineButtonRef.current!.focus();\n }\n\n this.setState({\n isOpen: !this.state.isOpen,\n content: CONTENT.Search\n });\n\n if (this.state.reloadPage) {\n window.location.reload();\n this.setState({\n reloadPage: false\n });\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 { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\ninterface IDropdownState {\n /**\n * @friendlyName selectedIndex\n * @description Selected index.\n */\n selectedIndex: string;\n}\n\nexport interface IDropdownProps {\n dropdownId: number;\n dropdownName: string;\n dropdownList: IDropdownItemProps[];\n telemetryContent?: ITelemetryContent;\n onChange?(selection: IDropdownOnSelection): void;\n}\n\nexport interface IDropdownItemProps {\n value: string;\n id: number;\n}\n\nexport interface IDropdownOnSelection {\n dropdownId: number;\n selectId: string;\n selectedValue: string;\n}\n\n/**\n *\n * DropDown component.\n * @extends {React.PureComponent}\n */\nexport class Dropdown extends React.PureComponent {\n private readonly selectMenu: React.RefObject = React.createRef();\n\n constructor(props: IDropdownProps, state: IDropdownState) {\n super(props);\n this.state = {\n selectedIndex: ''\n };\n }\n\n public componentDidMount(): void {\n if (this.selectMenu.current) {\n this.selectMenu.current.selectedIndex = 0;\n }\n }\n\n public render(): JSX.Element {\n const { dropdownId, dropdownList, dropdownName } = this.props;\n\n return (\n \n {dropdownList.map(\n (item: IDropdownItemProps) =>\n item && (\n \n {item.value}\n \n )\n )}\n \n );\n }\n\n private readonly _onChanged = (event: React.ChangeEvent): void => {\n this.setState({ selectedIndex: event.target.value });\n\n if (this.props.onChange) {\n this.props.onChange({\n dropdownId: this.props.dropdownId,\n selectId: event.target.value,\n selectedValue: event.target.innerText\n });\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 * as React from 'react';\n\nexport const NotFoundComponent = (props: { error: string; msg: string }) => (\n <>\n
\n
{props.error}
\n
{props.msg}
\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { debounce } from 'lodash';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\ninterface IQuantityProps {\n min?: number;\n max: number;\n currentCount?: number;\n disabled?: boolean;\n incrementGlyphClass?: string;\n decrementGlyphClass?: string;\n decrementButtonAriaLabel?: string;\n incrementButtonAriaLabel?: string;\n inputQuantityAriaLabel?: string;\n id?: string;\n onChange?(newValue: number): void;\n}\n\ninterface IQuantityState {\n currentInput: number;\n}\n\n/**\n * Quantity Component - This component is used to add or remove quantity.\n */\n@observer\nexport default class OrderTemplateQuantity extends React.PureComponent {\n public static defaultProps: Partial = {\n min: 1,\n decrementGlyphClass: 'fas fa-minus',\n incrementGlyphClass: 'fas fa-plus'\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n constructor(props: IQuantityProps) {\n super(props);\n this.state = { currentInput: props.currentCount || 1 };\n this._handleChange = this._handleChange.bind(this);\n\n reaction(\n () => this.props.currentCount,\n () => {\n this.setState({ currentInput: this.props.currentCount || 1 });\n }\n );\n }\n\n public render(): JSX.Element {\n const glyphMinusClassName: string = `${this.props.decrementGlyphClass!} quantity__controls-glyph`;\n const glyphPlusClassName: string = `${this.props.incrementGlyphClass!} quantity__controls-glyph`;\n const disabled = this.props.currentCount === this.props.min;\n const incDisabled = this.props.currentCount === this.props.max;\n const currentValue = this.state.currentInput;\n let extraClass = '';\n if (disabled) {\n // The quantity has reached its boundaries (max or min)\n extraClass = 'disabled';\n } else if (this.props.disabled) {\n // This.props.disabled shows if the state is not succeded yet\n extraClass = 'transition';\n }\n const getChangeHandler = (amount: number) => () => {\n this._onIncrementalChange(amount);\n };\n\n return (\n
\n \n \n \n \n \n \n \n
\n );\n }\n\n private _onIncrementalChange(amount: number): void {\n const updatedQuantity = this.state.currentInput + amount;\n\n if (updatedQuantity >= 1 && updatedQuantity <= this.props.max) {\n this.props.onChange && this.props.onChange(updatedQuantity);\n }\n }\n\n private _handleChange(e: React.ChangeEvent): void {\n const currentValue = Number.parseInt(e.target.value, 10);\n const minValue = this.props.min === undefined ? 1 : this.props.min;\n const inputElement =\n this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\n\n if (currentValue > this.props.max) {\n this.setState({ currentInput: this.props.max });\n } else {\n this.setState({ currentInput: currentValue }, () => {\n debounce(() => {\n if (!isNaN(this.state.currentInput) && !(this.state.currentInput < minValue) && inputElement) {\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\n inputElement.setAttribute('value', currentValue.toString());\n }\n }, 200)();\n });\n }\n }\n\n private readonly _validateMin = (): void => {\n const minValue = this.props.min === undefined ? 1 : this.props.min;\n\n if (isNaN(this.state.currentInput) || this.state.currentInput < minValue) {\n this.props.onChange && this.props.onChange(minValue);\n } else {\n this.props.onChange && this.props.onChange(this.state.currentInput);\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 { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductDimensionValue, ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getFallbackImageUrl,\n getPriceForSelectedVariant,\n getProductAvailabilitiesForSelectedVariant,\n getSelectedVariant,\n IProductInventoryInformation,\n PriceForSelectedVariantInput,\n ProductAvailabilitiesForSelectedVariantInput,\n SelectedVariantInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, ITelemetryContent, ModalBody, ModalFooter } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport OrderTemplateQuantity from '../common/order-template-quantity';\nimport { Dropdown, IAddLineToTemplateProps, IAddLineToTemplateResources, IDropdownItemProps, IDropdownOnSelection } from '.';\n\nexport interface IProductCnnfigurationProps extends IAddLineToTemplateProps {\n product: SimpleProduct;\n dimensions: ProductDimensionFull[];\n imageSettings: IImageSettings;\n telemetryContent?: ITelemetryContent;\n searchForm: React.ReactNode;\n addToTemplateHandler(params: IProductConfigurationState): Promise;\n highlightSearchTerm(name: string): React.ReactNode;\n}\n\nexport interface IProductConfigurationState {\n quantity: number;\n unitPrice: number;\n totalPrice: number;\n product: SimpleProduct;\n dimensions: ProductDimensionFull[];\n selectedDimensions: {};\n productAvailableQuantity?: IProductInventoryInformation;\n buttonDisabled: boolean;\n showAddConfirmation: boolean;\n errorMessage?: string;\n isBusy: boolean;\n errors: { dimension?: string[]; add?: string };\n}\n\n/**\n * Configure selected product for addition to order template.\n */\nexport class ProductConfiguration extends React.Component {\n private selectedDimensions: {} = {};\n\n constructor(props: IProductCnnfigurationProps) {\n super(props);\n\n this.state = {\n quantity: 1,\n unitPrice: props.product.Price,\n totalPrice: props.product.Price,\n product: props.product,\n dimensions: props.dimensions.sort((a, b) => a.DimensionTypeValue - b.DimensionTypeValue),\n selectedDimensions: {},\n buttonDisabled: false,\n showAddConfirmation: false\n } as IProductConfigurationState;\n }\n\n public shouldComponentUpdate(nextProps: IProductCnnfigurationProps, nextState: IProductConfigurationState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const {\n context: {\n actionContext: {\n requestContext: { apiSettings }\n },\n request: { gridSettings }\n },\n resources: {\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n totalPriceLabel\n },\n imageSettings,\n highlightSearchTerm\n } = this.props;\n const { buttonDisabled, product, quantity, unitPrice, totalPrice, showAddConfirmation, errors } = this.state;\n const isMultipleCatalogSelect = this.props.isMultipleCatalogFeatureEnabledInHq ? 'isMultipleCatalogSelect' : '';\n return (\n <>\n \n {this.props.searchForm}\n
\n
\n
\n \n
\n
{product?.ItemId}
\n {highlightSearchTerm(product?.Name ?? '')}\n
\n {addLineProductUnitPricePrefix}\n {` `}\n {this._formatPrice(unitPrice)}\n
\n
\n {addLineProductUnitOfMeasurePrefix}\n {` `}\n {product?.DefaultUnitOfMeasure}\n
\n
\n
\n
{this._getDimensionsNodes()}
\n
\n
\n
{quantitySelectLabel}
\n \n
\n
\n
\n {totalPriceLabel}\n {` `}\n {this._formatPrice(totalPrice)}\n
\n
\n \n {showAddConfirmation && (\n \n
\n )}\n {errors?.add && (\n
\n
\n )}\n \n {addItemToTemplateText}\n \n \n \n );\n }\n\n private _getConfirmationMessage(): string {\n const selectedDimensionNames = this.state.dimensions\n .map(dimension => {\n let variant = dimension.DimensionValues?.find(\n value => value.RecordId === this.selectedDimensions[dimension.DimensionTypeValue]\n )?.Value;\n if (dimension.DimensionTypeValue === 3) {\n variant = `size ${variant}`;\n }\n return variant;\n })\n .filter(value => value);\n\n return this.props.resources.addToTemplateConfirmation\n .replace('{count}', this.state.quantity.toString())\n .replace('{productAndDimensions}', `${this.state.product.Name}, ${Object.values(selectedDimensionNames).join(', ')}`);\n }\n\n private _getDimensionsNodes(): React.ReactElement[] {\n const { dimensions } = this.state;\n const { resources } = this.props;\n\n return dimensions?.map((dimension: ProductDimensionFull) => {\n const { DimensionValues, DimensionTypeValue } = dimension;\n const mapDimensions = (value: ProductDimensionValue): IDropdownItemProps => ({\n id: value.RecordId,\n value: value.Value || ''\n });\n const dimensionName = this._getDropdownName(DimensionTypeValue, resources);\n const dropdownList: IDropdownItemProps[] = DimensionValues ? DimensionValues.map(mapDimensions) : [];\n dropdownList.unshift({ id: 0, value: `Choose a ${dimensionName}` });\n\n return (\n
\n
{dimensionName}
\n {this.state.errors?.dimension?.includes(DimensionTypeValue.toString()) && (\n \n \n \n )}\n \n
\n );\n });\n }\n\n private readonly _getDimensionsError = (dimensionName: string) =>\n this.props.resources.dimensionMissingError.replace(/{dimensionName}/g, dimensionName);\n\n private readonly _addToTemplateHandler = async (event: React.MouseEvent) => {\n // Hide confirmation of previous addition when adding multiple items\n this.setState({\n isBusy: true,\n showAddConfirmation: false,\n errors: { ...this.state.errors, add: undefined }\n });\n\n const missingDimensions = this.state.dimensions\n .map(dimension => dimension.DimensionTypeValue.toString())\n .filter(type => !this.selectedDimensions[type]);\n\n this.setState({\n errors: { dimension: missingDimensions }\n });\n if (missingDimensions.length > 0) {\n this.setState({\n isBusy: false\n });\n return;\n }\n\n this.props\n .addToTemplateHandler({ ...this.state })\n .then(status => {\n // Validate against the existance of a ProductListId\n if (status.ProductListId) {\n this.setState({\n isBusy: false,\n showAddConfirmation: true\n });\n }\n })\n .catch(error => {\n const { addToTemplateDuplicateError, addToTemplateGenericError } = this.props.resources;\n let errorMessage;\n\n if (error.error.name === 'Microsoft_Dynamics_Commerce_Runtime_DuplicateObject') {\n errorMessage = addToTemplateDuplicateError;\n } else {\n errorMessage = addToTemplateGenericError;\n }\n\n this.setState({\n isBusy: false,\n errors: { ...this.state.errors, add: errorMessage }\n });\n this.props.context.telemetry.error('Error adding item to order template');\n });\n };\n\n private readonly _onQuantityChange = (newValue: number) => {\n this.setState({\n quantity: newValue,\n totalPrice: newValue * this.props.product.Price\n });\n };\n\n private readonly _updateDimensionValue = (\n productDimensionFull: ProductDimensionFull,\n newValueId: string | undefined\n ): ProductDimensionValue | undefined => {\n if (newValueId && productDimensionFull.DimensionValues) {\n return productDimensionFull.DimensionValues.find(dimension => dimension.RecordId === +newValueId);\n }\n\n return undefined;\n };\n\n // Rehydrate the selected variants price, available dimensions & sizes\n private readonly _onDimensionChanged = async (selection: IDropdownOnSelection): Promise => {\n const { product, dimensions, context } = this.props;\n const {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n } = context;\n\n // Remaining error notifications for missing dimensions\n const remainingDimensionsErrors = this.state.errors?.dimension?.filter(id => id !== selection.dropdownId.toString());\n\n this.setState({\n isBusy: false,\n showAddConfirmation: false,\n buttonDisabled: true,\n errors: { add: undefined, dimension: remainingDimensionsErrors }\n });\n\n // Update currently selected dimensions\n this.selectedDimensions[selection.dropdownId] = +selection.selectId;\n\n const mappedDimensions = dimensions\n ?.map(dimension => {\n return {\n DimensionTypeValue: dimension.DimensionTypeValue,\n DimensionValue:\n this._updateDimensionValue(dimension, this.selectedDimensions[dimension.DimensionTypeValue]) ||\n dimension.DimensionValue,\n ExtensionProperties: dimension.ExtensionProperties\n };\n })\n .filter(dimension => {\n return dimension && dimension.DimensionValue;\n });\n\n const variantProduct = await getSelectedVariant(\n new SelectedVariantInput(\n product.MasterProductId ? product.MasterProductId : product.RecordId,\n channelId,\n mappedDimensions,\n undefined,\n this.props.context.request\n ),\n actionContext\n );\n\n if (!variantProduct) {\n this.props.context.telemetry.error(\n `Error retrieving variant product for product ${product.MasterProductId ? product.MasterProductId : product.RecordId}`\n );\n return;\n }\n\n const dimensionInput = new GetDimensionsForSelectedVariantInput(\n variantProduct.RecordId,\n channelId,\n mappedDimensions,\n this.props.context.request\n );\n const variantDimensions = await getDimensionsForSelectedVariant(dimensionInput, actionContext);\n\n if (!variantDimensions) {\n this.props.context.telemetry.error('Error retrieving dimensions for reconfigured product variant');\n this.setState({\n buttonDisabled: false\n });\n return;\n }\n\n const availabilityInput = new ProductAvailabilitiesForSelectedVariantInput(\n product.MasterProductId ? product.MasterProductId : product.RecordId,\n channelId\n );\n\n // @TODO sync UX quantity w/ actual availability\n const newAvailableQuantity = await getProductAvailabilitiesForSelectedVariant(availabilityInput, actionContext);\n const priceInput = new PriceForSelectedVariantInput(product.RecordId, channelId);\n const productPrice = await getPriceForSelectedVariant(priceInput, actionContext);\n\n if (!productPrice) {\n this.props.context.telemetry.error('Error retrieving price for reconfigured product variant');\n this.setState({\n buttonDisabled: false\n });\n return;\n }\n\n this.setState({\n buttonDisabled: false,\n productAvailableQuantity: (newAvailableQuantity && newAvailableQuantity[0]) || undefined,\n unitPrice: +(productPrice.BasePrice || product.Price),\n dimensions: variantDimensions.sort((a, b) => a.DimensionTypeValue - b.DimensionTypeValue),\n product: variantProduct\n });\n };\n\n private readonly _getDropdownName = (dimensionType: number, resources: IAddLineToTemplateResources): string => {\n switch (dimensionType) {\n case 1: // Color\n return resources.productDimensionTypeColor;\n case 2: // Configuration\n return resources.productDimensionTypeConfiguration;\n case 3: // Size\n return resources.productDimensionTypeSize;\n case 4: // Style\n return resources.productDimensionTypeStyle;\n default:\n return '';\n }\n };\n\n private _formatPrice(price: number): string {\n const {\n context: {\n cultureFormatter: {\n formatCurrency,\n\n // @ts-expect-error\n currencyCode\n }\n }\n } = this.props;\n\n return formatCurrency(price.toFixed(2), currencyCode);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React, { useState } from 'react';\n\nimport { IAddLineToTemplateProps } from '.';\n\nexport interface IProductListProps extends IAddLineToTemplateProps {\n products: ProductSearchResult[];\n imageSettings: IImageSettings;\n searchForm: React.ReactNode;\n clickHandler(product: ProductSearchResult): Promise;\n highlightSearchTerm(name: string): React.ReactNode;\n renderResultCountText(): string;\n}\n\nexport const ProductList = (props: IProductListProps) => {\n const {\n products,\n context: {\n actionContext: {\n requestContext: { apiSettings }\n },\n request: { gridSettings },\n cultureFormatter: {\n formatCurrency,\n\n // @ts-expect-error\n currencyCode\n }\n },\n clickHandler,\n highlightSearchTerm,\n renderResultCountText,\n resources: { selectProductButtonText },\n imageSettings\n } = props;\n\n return (\n <>\n

\n {renderResultCountText()}\n

\n {props.searchForm}\n
\n {products.map((product: ProductSearchResult, index: number) => {\n const { Price, ItemId, Name, PrimaryImageUrl } = product;\n const price = formatCurrency(Price.toFixed(2), currencyCode);\n const primaryImageSource = generateImageUrl(PrimaryImageUrl ?? '', apiSettings) ?? '';\n const fallBackImg = getFallbackImageUrl(ItemId, apiSettings, props.context.request.app?.config?.OmniChannelMedia) ?? '';\n\n return (\n
\n
\n \n
\n
{ItemId}
\n {highlightSearchTerm(Name ?? '')}\n
\n
\n
\n {price}\n \n
\n
\n );\n })}\n
\n \n );\n};\n\ninterface IProductSelectButton {\n product: ProductSearchResult;\n buttonText: string;\n clickHandler(product: ProductSearchResult): Promise;\n}\n\nconst ProductSelectButton = (props: IProductSelectButton) => {\n const [isBusy, setBusy] = useState(false);\n const { product, buttonText, clickHandler } = props;\n const getClickHandler = React.useCallback(async () => {\n setBusy(!isBusy);\n await clickHandler(product);\n setBusy(!isBusy);\n }, [clickHandler, isBusy, product]);\n\n return (\n \n {buttonText}\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 { Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\nimport { IOrderTemplateData } from '../order-template.data';\nimport { IOrderTemplateProps } from '../order-template.props.autogenerated';\nimport { AddLineToTemplate } from '.';\n\ninterface IOrderTemplateBulkActionsProps extends IOrderTemplateProps {\n orderTemplateId: string;\n selectedLines: IOrderTemplateLineViewModel[];\n isMinifiedView: boolean;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n telemetryContent?: ITelemetryContent;\n onAddSelectionToBag(): void;\n onRemoveSelection(): void;\n}\n\ninterface IOrderTemplateBulkActionsState {\n isAddDisabled: boolean;\n isRemoveDisabled: boolean;\n}\n\n/**\n * Bulk Order Template line actions.\n */\nexport class OrderTemplateBulkActions extends React.PureComponent {\n public state: IOrderTemplateBulkActionsState = {\n isAddDisabled: true,\n isRemoveDisabled: true\n };\n\n public static getDerivedStateFromProps(\n props: IOrderTemplateBulkActionsProps,\n state: IOrderTemplateBulkActionsState\n ): IOrderTemplateBulkActionsState {\n const selectedLines = props.selectedLines.length;\n let nextState = { ...state };\n nextState = {\n isAddDisabled: selectedLines === 0,\n isRemoveDisabled: selectedLines === 0\n };\n return nextState;\n }\n\n public render(): JSX.Element {\n const {\n addLineModalLinkText,\n searchButtonAriaLabel,\n searchInputAriaLabel,\n searchModalPlaceholderText,\n selectCatalogTitleText,\n selectProductButtonText,\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n backButtonText,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n notFoundSearchErrorNotice,\n notFoundSearchErrorRedediation,\n searchErrorMessage,\n productDimensionTypeColor,\n productDimensionTypeConfiguration,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n addSelectedToBagButtonText,\n removeSelectedToBagButtonText,\n searchResultsCountVerbage,\n searchResultsCountSubject,\n addToTemplateConfirmation,\n totalPriceLabel,\n progressNotificationText,\n addToTemplateDuplicateError,\n addToTemplateGenericError,\n dimensionMissingError\n } = this.props.resources;\n\n const addLineProps = {\n context: this.props.context,\n telemetryContent: this.props.telemetryContent,\n resources: {\n addLineModalLinkText,\n searchButtonAriaLabel,\n searchInputAriaLabel,\n searchModalPlaceholderText,\n selectCatalogTitleText,\n selectProductButtonText,\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n backButtonText,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n notFoundSearchErrorNotice,\n notFoundSearchErrorRedediation,\n searchErrorMessage,\n productDimensionTypeColor,\n productDimensionTypeConfiguration,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n searchResultsCountVerbage,\n searchResultsCountSubject,\n addToTemplateConfirmation,\n totalPriceLabel,\n progressNotificationText,\n addToTemplateDuplicateError,\n addToTemplateGenericError,\n dimensionMissingError\n },\n imageSettings: this.props.config.imageSettings,\n orderTemplateId: this.props.orderTemplateId,\n isMultipleCatalogFeatureEnabledInHq: this.props.isMultipleCatalogFeatureEnabledInHq,\n catalogs: this.props.data.catalogs?.result\n };\n\n return (\n <>\n \n \n \n {!this.props.isMinifiedView && addSelectedToBagButtonText}\n \n \n \n {!this.props.isMinifiedView && removeSelectedToBagButtonText}\n \n \n );\n }\n\n private readonly addHandler = (event: React.MouseEvent) => {\n this.setState({\n isAddDisabled: true\n });\n\n this.props.onAddSelectionToBag();\n\n this.setState({\n isAddDisabled: false\n });\n };\n\n private readonly removeHandler = (event: React.MouseEvent) => {\n this.setState({\n isRemoveDisabled: true\n });\n\n this.props.onRemoveSelection();\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n AddOrderTemplateToCartComponent,\n ILinesAddedToCartDialogResources,\n IOrderTemplateNameDialogResources,\n RenameOrderTemplateComponent,\n OrderTemplateNameDialog\n} from '@msdyn365-commerce/components';\nimport { IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { ProductList } from '@msdyn365-commerce/retail-proxy';\nimport { OrderTemplate, Random } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, ITelemetryContent, Popover } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nexport interface IOrderTemplateActionsData {\n orderTemplate: OrderTemplate;\n}\n\nexport interface IOrderTemplateActionsProps extends IComponentProps {\n context: ICoreContext;\n telemetryContent?: ITelemetryContent;\n handlers: {\n onRemoveTemplate(orderTemplateId: string): void;\n onRenameTemplate(orderTemplate: ProductList): Promise;\n };\n renameOrderTemplateDialogStrings: IOrderTemplateNameDialogResources;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n resources: {\n addTemplateToBagButtonText: string;\n renameTemplateButtonText: string;\n deleteTemplateButtonText: string;\n closeWindowButtonText: string;\n addToCartFailureMessage: string;\n addToCartSuccessMessage: string;\n addToCartProcessMessage: string;\n orderTemplateErrorMessage: string;\n linesAddedToCartDialogResources: ILinesAddedToCartDialogResources;\n };\n}\n\nexport interface IOrderTemplateActionsViewProps {\n addTemplateToBag: React.ReactNode;\n renameTemplate?: React.ReactNode;\n removeTemplate?: React.ReactNode;\n isMultipleCatalogsFeatureEnabled?: boolean;\n actionsSplitButton?: React.ReactNode;\n}\n\n/**\n * Remove Order Action.\n * @param props -Order template action props.\n * @returns Remove order template.\n */\nconst removeOrderActionHandler = (props: IOrderTemplateActionsProps) => () => {\n _removeOrderTemplate(props);\n};\n\nexport const OrderTemplateActionsView = (props: IOrderTemplateActionsProps): IOrderTemplateActionsViewProps => {\n const { resources, isMultipleCatalogFeatureEnabledInHq } = props;\n const { deleteTemplateButtonText } = resources;\n\n return {\n addTemplateToBag: _getOrderTemplateAddToCartDialog(props),\n renameTemplate: !isMultipleCatalogFeatureEnabledInHq && _getOrderTemplateRenameControl(props),\n removeTemplate: !isMultipleCatalogFeatureEnabledInHq && (\n \n ),\n actionsSplitButton: isMultipleCatalogFeatureEnabledInHq && \n };\n};\n\nconst _removeOrderTemplate = (props: IOrderTemplateActionsProps): void => {\n const {\n data: { orderTemplate },\n handlers\n } = props;\n const { onRemoveTemplate } = handlers;\n\n if (onRemoveTemplate) {\n onRemoveTemplate(orderTemplate.productList.Id);\n }\n};\n\nconst _getOrderTemplateAddToCartDialog = (props: IOrderTemplateActionsProps): React.ReactNode => {\n const {\n data: { orderTemplate },\n typeName,\n id,\n context,\n telemetryContent,\n resources,\n isMultipleCatalogFeatureEnabledInHq\n } = props;\n const {\n addTemplateToBagButtonText,\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources\n } = resources;\n\n const dialogStrings = {\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources\n };\n\n return (\n \n );\n};\n\nconst _getOrderTemplateRenameControl = (props: IOrderTemplateActionsProps): React.ReactNode => {\n const { renameOrderTemplateDialogStrings, resources, context, handlers } = props;\n return (\n \n );\n};\n\nlet buttonEventReference: HTMLButtonElement | undefined;\nexport const ActionsSplitButton: React.FC = (props: IOrderTemplateActionsProps) => {\n const [isStatementRequestAdminDropdownOpen, setIsStatementRequestAdminDropdownOpen] = useState(false);\n const [renameOrderTemplateDialogOpen, setOrderTemplateNameDialogOpen] = React.useState(false);\n\n const onOrderTemplateNameCancel = () => {\n context.telemetry.debug('Rename of template was canceled.');\n buttonEventReference?.focus();\n };\n\n const onRenameButtonClick = (event: React.MouseEvent) => {\n buttonEventReference = event.target as HTMLButtonElement;\n setOrderTemplateNameDialogOpen(true);\n event.preventDefault();\n };\n const onToggleDropdown1 = () => {\n setIsStatementRequestAdminDropdownOpen(!isStatementRequestAdminDropdownOpen);\n };\n const {\n data: { orderTemplate },\n resources,\n renameOrderTemplateDialogStrings,\n context\n } = props;\n\n const className = 'ms-order-template-action-bar';\n\n const popoverReference = React.createRef();\n const renderModalPopup = (\n \n );\n const requestStatementDropdownString = `request-statement-dropdown-id-${Random.Guid.generateGuid()}`;\n\n return (\n
\n {renderModalPopup}\n \n {'Options'}\n \n \n \n\n \n {'Delete'}\n \n \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 { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ProductPrice, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions, getFallbackImageUrl, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport React, { useState } from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\nimport OrderTemplateQuantity from './common/order-template-quantity';\n\nexport interface IOrderTemplateLineProps extends ProductListLine {\n orderTemplateLine: IOrderTemplateLineViewModel;\n productListLine: ProductListLine;\n price?: ProductPrice;\n context: ICoreContext;\n productUrl: string;\n imageSettings?: IImageSettings;\n telemetry: ITelemetry;\n moduleId: string;\n moduleTypeName: string;\n quantity: number;\n isQuantityDisabledForUpdate?: boolean;\n handlers: {\n onAddToBag(product: SimpleProduct, quantity: number, itemKey: string, catalogId?: number | undefined): void;\n onRemoveItem(line: IOrderTemplateLineViewModel): void;\n onChangeQuantity(orderTemplateLineId: string, quantity: number, props?: IOrderTemplateLineProps): void;\n onSelect(line: IOrderTemplateLineViewModel, isChecked: boolean): void;\n };\n resources: {\n selectOneRowText?: string;\n moreButtonText?: string;\n viewProductDetailsText?: string;\n productDimensionTypeColor: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n originalPriceText: string;\n currentPriceText: string;\n freePriceText: string;\n inputQuantityAriaLabel: string;\n removeFromOrderTemplateLinesText: string;\n addToBagButtonText: string;\n deleteButtonText: string;\n incrementButtonAriaLabel?: string;\n decrementButtonAriaLabel?: string;\n editOrderTemplateLineQuantityError?: string;\n unavailableProductErrorMessage?: string;\n outOfStockProductErrorMessage?: string;\n };\n index: number;\n isMobile: boolean;\n productQuantityView?: React.ReactNode;\n addToBagButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n toggleDetailsDisplayed(props: IOrderTemplateLineProps): void;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n catalogs?: ProductCatalog[];\n error?: string;\n shouldDisable?: boolean;\n}\n\nexport interface IOrderTemplateLineViewProps {\n key?: string;\n productImage: React.ReactNode;\n productPrice?: React.ReactNode;\n addToBagButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n productName?: string;\n productNumber?: React.ReactNode;\n productInfo?: React.ReactNode;\n productLabel?: React.ReactNode;\n productUnitOfMeasure?: React.ReactNode;\n productQuantity?: number;\n productQuantityView?: React.ReactNode;\n productListId?: string;\n selectLine?: React.ReactNode;\n popUp?: JSX.Element;\n extraActionsPopup?: JSX.Element | null | undefined;\n isMobile?: boolean;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n productLineCatalog?: React.ReactNode;\n disabled?: boolean;\n}\n\ninterface IEventHandlerFactory {\n getAddToBag(): (event: React.MouseEvent) => void;\n getRemoveItem(): (event: React.MouseEvent) => void;\n}\n\nconst OrderTemplateLineActions = (props: IOrderTemplateLineProps): IEventHandlerFactory => {\n const { orderTemplateLine, productListLine, quantity, handlers } = props;\n const { LineId, CatalogId } = productListLine;\n const { onAddToBag, onRemoveItem } = handlers;\n\n return {\n getAddToBag: () => (event: React.MouseEvent) => {\n LineId &&\n orderTemplateLine.fullProduct &&\n onAddToBag(orderTemplateLine.fullProduct.ProductDetails, quantity, LineId, CatalogId);\n },\n getRemoveItem: () => (event: React.MouseEvent) => LineId && onRemoveItem(props.orderTemplateLine)\n };\n};\n\ninterface IPopupProps extends IOrderTemplateLineProps {\n addButtonClassName: string;\n removeButtonClassName: string;\n}\n\nconst PopUp = (props: IPopupProps): JSX.Element | null => {\n const { addToBagButtonText, removeFromOrderTemplateLinesText, moreButtonText, viewProductDetailsText } = props.resources;\n const [showMobile, setShowMobile] = useState(false);\n const componentClassName = 'ms-table';\n\n const getViewHandler = () => (event: React.MouseEvent) => {\n props.toggleDetailsDisplayed(props);\n };\n\n const toggle = React.useCallback(() => {\n setShowMobile(!showMobile);\n }, [showMobile]);\n\n return (\n
\n \n {showMobile && (\n
\n \n View\n \n {getActionButton(\n props.isMobile,\n props.removeButtonClassName,\n removeFromOrderTemplateLinesText,\n OrderTemplateLineActions(props).getRemoveItem()\n )}\n {getActionButton(\n props.isMobile,\n props.addButtonClassName,\n addToBagButtonText,\n OrderTemplateLineActions(props).getAddToBag()\n )}\n
\n )}\n
\n );\n};\n\nconst getActionButton = (\n isMobile: boolean,\n className: string,\n buttonText: string,\n clickHandler: (event: React.MouseEvent) => void\n): React.ReactNode => (\n \n);\n\nconst getDesktopActionButton = (\n className: string,\n buttonText: string,\n clickHandler: (event: React.MouseEvent) => void\n): React.ReactNode => (\n \n);\n/**\n * On Select line function.\n * @param orderTemplateLine -Order template line.\n * @param input -Order template line props.\n * @returns Set on select order template.\n */\nconst onSelectLineHandler = (orderTemplateLine: IOrderTemplateLineViewModel, input: IOrderTemplateLineProps) => (\n event: React.ChangeEvent\n) => {\n orderTemplateLine.isChecked = !orderTemplateLine.isChecked;\n\n input.handlers.onSelect(orderTemplateLine, event.target.checked);\n};\n\nexport const OrderTemplateLineView = (input: IOrderTemplateLineProps): IOrderTemplateLineViewProps | null => {\n const {\n orderTemplateLine,\n productListLine,\n price,\n context,\n imageSettings,\n quantity,\n resources,\n isMobile,\n isMultipleCatalogFeatureEnabledInHq\n } = input;\n const product = orderTemplateLine.fullProduct;\n const { LineId, UnitOfMeasure } = productListLine;\n const { removeFromOrderTemplateLinesText, addToBagButtonText, selectOneRowText } = resources;\n if (!product) {\n return null;\n }\n\n const { ItemId, PrimaryImageUrl } = product.ProductDetails;\n const fallbackImage = getFallbackImageUrl(\n ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n const addButtonClassName = input.isMobile ? 'ms-table__row-links-add' : 'ms-order-template-table-line__product-add-button';\n const removeButtonClassName = input.isMobile ? 'ms-table__row-links-delete' : 'ms-order-template-table-line__product-remove-button';\n\n return {\n isMobile,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogFeatureEnabledInHq,\n selectLine: (\n \n ),\n key: LineId!,\n productLineCatalog: isMultipleCatalogFeatureEnabledInHq && renderProductCatalog(input),\n productImage: _renderProductImage(\n 'ms-order-template-table-line__product-image',\n context,\n product.ProductDetails.Name!,\n PrimaryImageUrl,\n fallbackImage,\n imageSettings\n ),\n productInfo: renderProductInfo(input),\n productPrice: price && _renderPrice(input),\n productNumber: product && (\n <>\n
{ItemId}
\n {input.error !== 'NONE' ? (\n
{_renderProductError(input)}
\n ) : (\n undefined\n )}\n \n ),\n productUnitOfMeasure: price ? (\n
{UnitOfMeasure || price.UnitOfMeasure}
\n ) : (\n undefined\n ),\n productListId: LineId!,\n removeButton:\n !isMultipleCatalogFeatureEnabledInHq &&\n getActionButton(\n input.isMobile,\n removeButtonClassName,\n removeFromOrderTemplateLinesText,\n OrderTemplateLineActions(input).getRemoveItem()\n ),\n productQuantityView:
{_generateQuantity(input, LineId!)}
,\n productQuantity: quantity,\n addToBagButton:\n !isMultipleCatalogFeatureEnabledInHq &&\n getActionButton(input.isMobile, addButtonClassName, addToBagButtonText, OrderTemplateLineActions(input).getAddToBag()),\n extraActionsPopup:\n !isMobile && isMultipleCatalogFeatureEnabledInHq ? (\n \n ) : (\n undefined\n ),\n popUp: ,\n disabled: input.shouldDisable\n };\n};\n\nconst ExtraActionsPopup = (props: IPopupProps): JSX.Element | null => {\n const [showActions, setShowActions] = useState(false);\n const toggle = React.useCallback(() => {\n setShowActions(!showActions);\n }, [showActions]);\n\n const className = 'ms-order-template-table-line__extra-actions-cell';\n const actionsContainerClassName = `${className}__actions-container`;\n return (\n
\n
\n );\n};\n\nexport const OrderTemplateMobileLineView = (input: IOrderTemplateLineProps): IOrderTemplateLineViewProps | undefined => {\n const { orderTemplateLine, productListLine, price, context, imageSettings, isMultipleCatalogFeatureEnabledInHq } = input;\n const product = orderTemplateLine.fullProduct;\n const { LineId, UnitOfMeasure } = productListLine;\n if (!product) {\n return;\n }\n const { ItemId, PrimaryImageUrl } = product.ProductDetails;\n const fallbackImage = getFallbackImageUrl(\n ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n\n return {\n productLineCatalog: isMultipleCatalogFeatureEnabledInHq && renderProductCatalog(input),\n productImage: _renderProductImage(\n 'thumbnail',\n context,\n product.ProductDetails.Name!,\n PrimaryImageUrl,\n fallbackImage,\n imageSettings\n ),\n productInfo: renderProductInfo(input),\n productPrice: price && _renderPrice(input),\n productNumber: ItemId,\n productUnitOfMeasure: UnitOfMeasure || price?.UnitOfMeasure,\n productQuantityView: _generateQuantity(input, LineId!)\n };\n};\n\nexport interface IOrderTemplateProductQuantityViewProps {\n ContainerProps: INodeProps;\n input: React.ReactNode;\n}\n\n/**\n * On Change function.\n * @param onChangeQuantity -On change quantity function.\n * @param itemKey -String.\n * @param props -Order template line props.\n * @returns Set change quantity.\n */\nconst onChangeHandler = (\n onChangeQuantity: (orderTemplateLineId: string, quantity: number, props?: IOrderTemplateLineProps | undefined) => void,\n itemKey: string,\n props: IOrderTemplateLineProps\n) => (newValue: number) => {\n if (onChangeQuantity) {\n onChangeQuantity(itemKey, newValue, props);\n }\n};\n\nconst _generateQuantity = (props: IOrderTemplateLineProps, itemKey: string): React.ReactNode => {\n const { handlers, resources, quantity } = props;\n const { onChangeQuantity } = handlers;\n return (\n \n );\n};\n\nexport const _renderProductImage = (\n className: string,\n context: ICoreContext,\n heading: string,\n image?: string,\n fallbackImage?: string,\n imageSettings?: IImageSettings\n): JSX.Element | null => {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n lg: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n xl: { q: 'w=64&h=64&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n return (\n \n );\n};\n\nexport const renderProductCatalog = (props: IOrderTemplateLineProps) => {\n const catalogId = props.productListLine.CatalogId;\n validateCatalogId(catalogId);\n\n if (!props.context.request.user.isB2b || !catalogId || !ArrayExtensions.hasElements(props.catalogs)) {\n return null;\n }\n\n const catalog = props.catalogs.find(item => item.RecordId === catalogId);\n\n if (!catalog || !catalog.Name) {\n return null;\n }\n\n return
{catalog.Name}
;\n};\n\nconst _renderPrice = (props: IOrderTemplateLineProps): JSX.Element | null => {\n const { price, context, moduleId, moduleTypeName, resources } = props;\n\n if (price) {\n return (\n \n );\n }\n return null;\n};\n\nconst _renderProductDimensions = (props: IOrderTemplateLineProps): (string | undefined)[] => {\n const { orderTemplateLine } = props;\n\n if (!orderTemplateLine.fullProduct || !orderTemplateLine.fullProduct.ProductDetails.Dimensions) {\n return [];\n }\n\n return orderTemplateLine.fullProduct.ProductDetails.Dimensions.map(dimension => {\n if (!dimension.DimensionValue || !dimension.DimensionValue.Value) {\n return undefined;\n }\n\n return dimension.DimensionValue.Value;\n });\n};\n\nconst _renderProductError = (props: IOrderTemplateLineProps) => {\n const { error, resources } = props;\n\n if (!error) {\n return '';\n }\n\n const errorMessages = {\n OOS: resources.outOfStockProductErrorMessage,\n UNASSORTED: resources.unavailableProductErrorMessage,\n NONE: ''\n };\n\n return errorMessages[error];\n};\n\nexport const renderProductInfo = (props: IOrderTemplateLineProps): React.ReactNode | undefined => {\n const { orderTemplateLine, productUrl } = props;\n const name = orderTemplateLine.fullProduct?.ProductDetails.Name;\n\n const dimensions = _renderProductDimensions(props);\n if (!orderTemplateLine.fullProduct) {\n return [];\n }\n\n const productName = productUrl ? (\n \n {name}\n \n ) : (\n
{name}
\n );\n\n const dimensionsLine: string = dimensions.join(', ');\n\n return (\n
\n
{productName}
\n
{dimensionsLine}
\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 classnames from 'classnames';\nimport * as React from 'react';\n\nimport { orderTemplateLinesStatus } from '../order-template';\n\nexport interface IOrderTemplateLinesStatusMessageProps {\n className?: string;\n errorType: orderTemplateLinesStatus;\n text?: string;\n}\n\nexport const OrderTemplateLinesStatusMessage: React.FC = ({ className, errorType, text }) => {\n switch (errorType) {\n case 'EMPTY':\n return

{text}

;\n case 'FAILED':\n return

{text}

;\n case 'LOADING':\n default:\n return

{text}

;\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\n\nexport interface IOrderTemplateTableHeadingProps {\n selectAllRowsText?: string;\n productNumber: string;\n productName: string;\n productUnitPrice: string;\n productUOM: string;\n productQuantity: string;\n productActions: string;\n lines: IOrderTemplateLineViewModel[];\n isMobile: boolean;\n clickHandler(isChecked: boolean): void;\n productImage?: string;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n productLineCatalogName?: string;\n}\n\n/**\n * Order Template's table state.\n */\nexport interface IOrderTemplateTableHeadingState {\n isChecked: boolean;\n}\n\nexport interface IOrderTemplateTableShortHeading {\n productNumber: string;\n productActions: string;\n}\n\n/**\n * Order Template's table heading.\n */\nexport class OrderTemplateTableHeading extends React.PureComponent {\n public state: IOrderTemplateTableHeadingState = {\n isChecked: false\n };\n\n private readonly componentClassName: string = 'ms-table';\n\n public static getDerivedStateFromProps(\n props: IOrderTemplateTableHeadingProps,\n state: IOrderTemplateTableHeadingState\n ): IOrderTemplateTableHeadingState {\n const checkedLines = props.lines.filter(line => !line.isChecked).length;\n let nextState = { ...state };\n nextState = { isChecked: checkedLines === 0 };\n return nextState;\n }\n\n public getOnChange = () => (event: React.ChangeEvent) => {\n this.setState(\n {\n isChecked: this.state.isChecked\n },\n () => {\n this.props.clickHandler(!this.state.isChecked);\n }\n );\n };\n\n public render(): JSX.Element {\n return (\n \n \n \n \n \n {!this.props.isMobile && this.props.isMultipleCatalogFeatureEnabledInHq ? (\n {this.props.productLineCatalogName}\n ) : null}\n {!this.props.isMobile ? {this.props.productImage} : null}\n {this.props.productNumber}\n {!this.props.isMobile ? {this.props.productName} : null}\n {!this.props.isMobile ? {this.props.productUnitPrice} : null}\n {!this.props.isMobile ? {this.props.productUOM} : null}\n {!this.props.isMobile ? {this.props.productQuantity} : null}\n {!this.props.isMobile ? {this.props.productActions} : }\n \n \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 {\n IItemAddedToCartDialogData,\n IItemAddedToCartDialogResources,\n ILinesAddedToCartDialogResources,\n IOrderTemplateNameDialogResources,\n ItemAddedToCartDialog\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { AsyncResult, getCatalogId, getUrlSync, ICoreContext, IRequestContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult } from '@msdyn365-commerce/global-state';\nimport { ProductList, ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport {\n deleteAsync,\n removeProductListLinesAsync,\n updateProductListLinesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { FeatureState, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n ArrayExtensions,\n createGetFeatureStateInput,\n getFeatureState,\n getPriceForSelectedVariant,\n getProductUrlSync,\n ObjectExtensions,\n OrderTemplate,\n OrderTemplateLine,\n PriceForSelectedVariantInput,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n getTelemetryObject,\n Heading,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n UncontrolledPagination\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport debounce from 'lodash/debounce';\nimport { action, computed, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n IOrderTemplateActionsProps,\n IOrderTemplateActionsViewProps,\n IOrderTemplateLineProps,\n IOrderTemplateLineViewProps,\n IOrderTemplateTableHeadingProps,\n OrderTemplateActionsView,\n OrderTemplateLinesStatusMessage,\n OrderTemplateLineView,\n OrderTemplateMobileLineView,\n OrderTemplateTableHeading\n} from '../..';\nimport { ActiveOrderTemplateLinesInput } from './actions/get-order-template';\nimport { OrderTemplateBulkActions } from './components/bulk-actions';\nimport { IOrderTemplateData } from './order-template.data';\nimport { IOrderTemplateProps, IOrderTemplateResources } from './order-template.props.autogenerated';\nimport Spinner from './components/add-line/spinner';\n\nexport interface IOrderTemplateLineActionMessageState {\n itemKey: string;\n userMessage: string;\n statusCssString: string;\n messageGlyph: string;\n isOpen: boolean;\n isItemAddedToOrderTemplateOpen: boolean;\n isConfirmAddSelectionToBagModalOpen: boolean;\n itemAddedToCartDialogData?: IItemAddedToCartDialogData;\n productSelection: IOrderTemplateLineViewModel[];\n isDetailsDisplayed: boolean;\n detailedProductView?: IOrderTemplateLineViewProps;\n isQuantityDisabledForUpdate?: boolean;\n}\n\nexport type orderTemplateLinesStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\ntype GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface IOrderTemplateViewProps extends IOrderTemplateProps {\n OrderTemplateLines: IModuleProps;\n callbacks?: IOrderTemplateLinesCallbacks;\n status?: orderTemplateLinesStatus;\n statusMessage?: React.ReactNode;\n heading?: React.ReactNode;\n OrderTemplateActions?: INodeProps;\n ProductsTable?: INodeProps;\n ProductsTableRow?: INodeProps;\n ProductsTableHeading?: React.ReactNode;\n ProductDetails?: INodeProps;\n orderLines?: IOrderTemplateLineViewProps[];\n productListLines?: ProductListLine[];\n productsStatusMessage?: React.ReactNode;\n orderActions?: IOrderTemplateActionsViewProps | null;\n resources: IOrderTemplateResources;\n pagination?: React.ReactNode;\n itemAddedToCartDialog?: React.ReactNode;\n bulkOrderLineActions?: React.ReactNode;\n isDetailsDisplayed?: boolean;\n detailedProduct?: IOrderTemplateLineProps;\n detailedProductView?: IOrderTemplateLineViewProps;\n productQuantityView?: React.ReactNode;\n addButton?: React.ReactNode;\n isMobile?: boolean;\n toggleDetailsDisplayed?(props: IOrderTemplateLineProps | undefined): void;\n}\n\nexport interface IOrderTemplateLinesCallbacks {\n updateQuantity(itemKey: string, quantity: number): void;\n}\n\nexport interface IOrderTemplateLineViewModel extends OrderTemplateLine {\n isChecked: boolean;\n productQuantityView: React.ReactNode;\n}\n\n/**\n *\n * OrderTemplateLines component.\n * @extends {React.PureComponent, IOrderTemplateLineActionMessageState>}\n */\n@observer\nclass OrderTemplateLines extends React.Component, IOrderTemplateLineActionMessageState> {\n private readonly className: string;\n\n private readonly telemetryContent?: ITelemetryContent;\n\n @observable\n private _viewport: GridSize;\n\n @computed get isMobile(): boolean {\n return this._viewport === 'xs' || this._viewport === 'sm';\n }\n\n constructor(props: IOrderTemplateProps, state: IOrderTemplateLineActionMessageState) {\n super(props);\n this.className = 'ms-order-template';\n this._viewport =\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this._updateViewport = this._updateViewport.bind(this);\n\n this.state = {\n itemKey: '',\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false,\n isItemAddedToOrderTemplateOpen: false,\n isConfirmAddSelectionToBagModalOpen: false,\n productSelection: [],\n isDetailsDisplayed: false,\n isQuantityDisabledForUpdate: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this._updateViewport();\n\n if (MsDyn365.isBrowser && !this.props.context.request.user.isAuthenticated && !this.props.context.request.params.isEditor) {\n window.location.assign(this.props.context.request.user.signInUrl || '/');\n }\n }\n\n @action\n public async componentDidMount(): Promise {\n this.setState({});\n const orderTemplate = await this.props.data.orderTemplate;\n this.props.config.heading!.text = orderTemplate?.productList.Name || '';\n this.setState({\n productSelection: orderTemplate?.orderTemplateLines as IOrderTemplateLineViewModel[]\n });\n\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('resize', this._updateViewport);\n }\n }\n\n public shouldComponentUpdate(\n nextProps: IOrderTemplateProps,\n nextState: IOrderTemplateLineActionMessageState\n ): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { heading, className } = this.props.config;\n const { emptyOrderTemplateLinesText, errorGettingOrderTemplateLines } = this.props.resources;\n const { orderTemplate, cart } = this.props.data;\n\n if (cart.status === 'LOADING' || ObjectExtensions.isNullOrUndefined(orderTemplate) || orderTemplate.status === 'LOADING') {\n const errorProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(this.className, className)\n },\n status: 'LOADING',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources\n };\n return this.props.renderView(errorProps);\n }\n\n if (cart.status === 'FAILED' || orderTemplate.status === 'FAILED') {\n const errorProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'FAILED',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources\n };\n\n return this.props.renderView(errorProps);\n }\n\n const orderTemplateResult = orderTemplate && orderTemplate.result;\n const orderTemplateLines = orderTemplateResult && orderTemplateResult.orderTemplateLines;\n\n if (!orderTemplateResult || !orderTemplateLines || orderTemplateLines.length === 0) {\n if (orderTemplateResult && !this._isFirstPage() && MsDyn365.isBrowser) {\n window.location.href = this._getOrderTemplatePageUrl();\n return null;\n }\n\n const emptyViewProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'EMPTY',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources,\n orderActions:\n orderTemplateResult &&\n this._renderOrderTemplateActions(orderTemplateResult, this._isChannelMultipleCatalogsFeatureEnabled()),\n bulkOrderLineActions: orderTemplateResult && this._getOrderTemplateLineActions(orderTemplateResult.productList.Id),\n OrderTemplateActions: {\n className: `${this.className}-action-bar`,\n tag: 'div'\n }\n };\n\n return this.props.renderView(emptyViewProps);\n }\n\n const viewProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'SUCCESS',\n productsStatusMessage: this.state.isOpen && (\n
\n \n {this.state.userMessage}\n \n
\n ),\n heading: heading && ,\n OrderTemplateActions: {\n className: `${this.className}-action-bar`,\n tag: 'div'\n },\n ProductsTable: {\n className: `${this.className}__table`,\n tag: 'table',\n role: 'grid'\n },\n ProductsTableRow: {\n className: `${this.className}-table-line`,\n tag: 'tr'\n },\n ProductsTableHeading: this._renderProductListHeader(this.props.resources),\n ProductDetails: {\n className: `${this.className}-table-line__link`,\n tag: 'a'\n },\n orderLines: this._renderProductList(),\n callbacks: { updateQuantity: debounce(this._changeQuantity, 2000) },\n orderActions: this._renderOrderTemplateActions(orderTemplateResult, this._isChannelMultipleCatalogsFeatureEnabled()),\n pagination: this._renderPagination(),\n itemAddedToCartDialog: this._renderItemAddedToCartDialog(),\n bulkOrderLineActions: this._getOrderTemplateLineActions(orderTemplateResult.productList.Id),\n isDetailsDisplayed: this.state.isDetailsDisplayed,\n toggleDetailsDisplayed: this._toggleDetailsDisplayed,\n detailedProductView: this.state.detailedProductView,\n isMobile: this.isMobile\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public onSelect(line: IOrderTemplateLineViewModel, isChecked: boolean): void {\n line.isChecked = isChecked;\n\n const updated =\n this.state.productSelection.map(product => {\n if (product.fullProduct?.ProductDetails.ItemId === line.fullProduct?.ProductDetails.ItemId) {\n line.isChecked = isChecked;\n }\n return product;\n }) || [];\n\n this.setState({\n productSelection: updated\n });\n }\n\n public onSelectAll(isChecked: boolean): void {\n const updated =\n this.state.productSelection.map(line => {\n line.isChecked = isChecked;\n return line;\n }) || [];\n\n this.setState({\n productSelection: updated\n });\n }\n\n private _renderProductListHeader(resources: IOrderTemplateResources): React.ReactNode {\n const {\n productImage,\n productNumberText,\n productText,\n productUnitPriceText,\n productUOMText,\n productQuantityText,\n productActionsText,\n selectAllRowsText,\n productLineCatalogName\n } = resources;\n const headers: IOrderTemplateTableHeadingProps = {\n productImage: productImage,\n productNumber: productNumberText,\n productName: productText,\n productUnitPrice: productUnitPriceText,\n productUOM: productUOMText,\n productQuantity: productQuantityText,\n productActions: productActionsText,\n selectAllRowsText,\n lines: this.state.productSelection,\n isMobile: this.isMobile,\n clickHandler: (isChecked: boolean) => {\n this.onSelectAll(isChecked);\n },\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled(),\n productLineCatalogName: productLineCatalogName\n };\n\n return ;\n }\n\n private _getOrderTemplateLineActions(orderTemplateId: string): React.ReactNode {\n return (\n line.isChecked)}\n onAddSelectionToBag={this._onAddSelectionToBag}\n onRemoveSelection={this._onRemoveSelection}\n isMinifiedView={this.isMobile}\n isMultipleCatalogFeatureEnabledInHq={this._isChannelMultipleCatalogsFeatureEnabled()}\n telemetryContent={this.telemetryContent}\n />\n );\n }\n\n private _generateLinesAddedToCartDialogResources(): ILinesAddedToCartDialogResources {\n return {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n linesAddedToCartHeaderItemsOneText: this.props.resources.linesAddedToCartHeaderItemsOneText,\n linesAddedToCartHeaderLinesOneText: this.props.resources.linesAddedToCartHeaderLinesOneText,\n linesAddedToCartHeaderLinesFormatText: this.props.resources.linesAddedToCartHeaderLinesFormatText,\n linesAddedToCartHeaderMessageText: this.props.resources.linesAddedToCartHeaderMessageText\n };\n }\n\n private _generateItemAddedToCartDialogResources(): IItemAddedToCartDialogResources {\n return {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n itemAddedToCartHeaderItemOneText: this.props.resources.itemAddedToCartHeaderItemOneText,\n itemAddedToCartHeaderItemFormatText: this.props.resources.itemAddedToCartHeaderItemFormatText,\n itemAddedToCartHeaderMessageText: this.props.resources.itemAddedToCartHeaderMessageText,\n freePriceText: this.props.resources.freePriceText,\n originalPriceText: this.props.resources.originalPriceText,\n currentPriceText: this.props.resources.currentPriceText\n };\n }\n\n private readonly _isChannelMultipleCatalogsFeatureEnabled = (): boolean => {\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (this.props.data.featureState) {\n isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n return isMultipleCatalogFeatureEnabledInHq;\n };\n\n private readonly _onRemoveSelection = (): void => {\n const { context, resources } = this.props;\n const { telemetry } = context;\n const { removeSelectedFailureMessage, removeSelectedSuccessMessage } = resources;\n const lines = this.state.productSelection;\n const productListLines = lines && lines.length && lines.filter(line => line.isChecked).map(line => line.productListLine);\n\n if (productListLines && productListLines.length > 0) {\n const productListId = productListLines[0].ProductListId;\n\n const maxWaitTimeInMilliSeconds: number = 1000;\n removeProductListLinesAsync({ callerContext: context.actionContext }, productListId!, productListLines)\n .then(async () => {\n this.setState({\n userMessage: removeSelectedSuccessMessage,\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: true\n });\n // eslint-disable-next-line no-promise-executor-return -- fix\n await new Promise(resolve => setTimeout(resolve, maxWaitTimeInMilliSeconds));\n window.location.reload();\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable remove items from the order template lines');\n telemetry.error(error);\n this.setState({\n userMessage: removeSelectedFailureMessage,\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: true\n });\n });\n }\n };\n\n private readonly _getOrderTemplatePageUrl = (): string => {\n let url = getUrlSync('ordertemplate', this.props.context.actionContext) || '';\n url = url.includes('?') ? url.substr(0, url.indexOf('?')) : url;\n if (this.props.data.orderTemplate?.result?.productList.Id) {\n return `${url}?id=${this.props.data.orderTemplate.result.productList.Id}`;\n }\n return '';\n };\n\n private readonly _onAddSelectionToBag = async (): Promise => {\n const lines = this.state.productSelection;\n const selectedLines = lines.filter(line => line.isChecked);\n if (selectedLines.length > 0) {\n for (const productLine of selectedLines) {\n const itemKey = productLine.fullProduct?.ProductDetails.ItemId ?? '';\n const product = productLine.fullProduct?.ProductDetails ?? {\n RecordId: 0,\n ProductTypeValue: 0,\n BasePrice: 0,\n Price: 0,\n AdjustedPrice: 0\n };\n const quantity = productLine.productListLine.Quantity ?? 0;\n if (this._isChannelMultipleCatalogsFeatureEnabled()) {\n const catalogId = productLine.productListLine.CatalogId;\n await this._addItemToBag(product, quantity, itemKey, catalogId);\n } else {\n await this._addItemToBag(product, quantity, itemKey);\n }\n }\n }\n return Promise.resolve(void 0);\n };\n\n private _renderOrderTemplateActions(\n orderTemplate: OrderTemplate,\n isMultipleCatalogFeatureEnabledInHq: boolean\n ): IOrderTemplateActionsViewProps {\n const { id, typeName, context, resources } = this.props;\n const {\n addTemplateToBagButtonText,\n renameTemplateButtonText,\n deleteTemplateButtonText,\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage\n } = resources;\n\n const orderTemplateActions: IOrderTemplateActionsProps = {\n data: { orderTemplate },\n id,\n typeName,\n context,\n telemetryContent: this.telemetryContent,\n handlers: {\n onRenameTemplate: this._renameTemplate,\n onRemoveTemplate: this._removeTemplate\n },\n isMultipleCatalogFeatureEnabledInHq,\n renameOrderTemplateDialogStrings: this._generateOrderTemplateNameDialogResources(resources),\n resources: {\n addTemplateToBagButtonText,\n renameTemplateButtonText,\n deleteTemplateButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n closeWindowButtonText,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources: this._generateLinesAddedToCartDialogResources()\n }\n };\n\n return OrderTemplateActionsView(orderTemplateActions);\n }\n\n private _generateOrderTemplateNameDialogResources(resources: IOrderTemplateResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.renameOrderTemplateTitleText,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateTitle,\n orderTemplateDescription: '',\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n orderTemplateButtonLabel: resources.renameOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelBtnLabel\n };\n }\n\n private readonly _getCurrentUrl = (reqContext: IRequestContext): URL => {\n if (MsDyn365.isBrowser) {\n return new URL(window.location.href);\n }\n return new URL(reqContext.url.requestUrl.href);\n };\n\n /**\n * On close handler.\n */\n private readonly onCloseHandler = () => {\n this.setState({\n itemKey: this.state.itemKey,\n userMessage: this.state.userMessage,\n statusCssString: this.state.statusCssString,\n messageGlyph: this.state.messageGlyph,\n isOpen: this.state.isOpen,\n isItemAddedToOrderTemplateOpen: false\n });\n };\n\n private readonly _renderItemAddedToCartDialog = (): React.ReactNode | null => {\n if (!this.state.itemAddedToCartDialogData) {\n return null;\n }\n const isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState?.result?.find(feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature')\n ?.IsEnabled || false;\n\n return (\n \n );\n };\n\n private _isFirstPage(): boolean {\n return this._getCurrentPageNumber() === 0;\n }\n\n private _getCurrentPageNumber(): number {\n const itemsPerPage = this.props.config.itemsPerPage || 50;\n return (this.props.context.request.query && +this.props.context.request.query.skip / itemsPerPage) || 0;\n }\n\n private readonly _renderPagination = (): React.ReactNode | null => {\n const { config, context, data, resources } = this.props;\n const orderTemplate = data && data.orderTemplate && data.orderTemplate.result;\n if (!orderTemplate) {\n return null;\n }\n\n const fullUrl = this._getCurrentUrl(context.request);\n const itemsPerPage = config.itemsPerPage || 50;\n const currentPageNumber = this._getCurrentPageNumber();\n const skipCount = currentPageNumber * itemsPerPage;\n const totalItems = orderTemplate && orderTemplate.totalLines;\n const previousText = resources.flipperPrevious;\n const nextText = resources.flipperNext;\n\n if (totalItems <= itemsPerPage) {\n return null;\n }\n\n return (\n \n );\n };\n\n private _renderProductList(): IOrderTemplateLineViewProps[] {\n const {\n selectOneRowText,\n moreButtonText,\n viewProductDetailsText,\n priceFree,\n originalPriceText,\n currentPriceText,\n addOrderTemplateItemToBagButtonText,\n removeItemFromOrderTemplateButtonText,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n inputQuantityAriaLabel,\n deleteButtonText,\n incrementButtonAriaLabel,\n decrementButtonAriaLabel,\n unavailableProductErrorMessage,\n outOfStockProductErrorMessage\n } = this.props.resources;\n\n const { context, telemetry, data } = this.props;\n const { catalogs } = data;\n const { imageSettings } = this.props.config;\n\n return this.state.productSelection.map((line, index) => {\n const currentProductProps: IOrderTemplateLineProps = {\n orderTemplateLine: line,\n productListLine: line.productListLine,\n price: line.fullProduct?.ProductPrice,\n error: line.error,\n shouldDisable: line.shouldDisable,\n context,\n isQuantityDisabledForUpdate: this.state.isQuantityDisabledForUpdate,\n productUrl: line.fullProduct\n ? this._updateProductUrlCatalog(line.fullProduct.ProductDetails, context, line.productListLine.CatalogId)\n : '',\n imageSettings,\n telemetry,\n moduleId: this.props.id,\n moduleTypeName: this.props.typeName,\n quantity: line.productListLine.Quantity!,\n handlers: {\n onAddToBag: this._addItemToBag,\n onRemoveItem: this._removeItemFromOrderTemplateLines,\n onChangeQuantity: this._changeQuantity,\n onSelect: this.onSelect.bind(this)\n },\n resources: {\n selectOneRowText,\n moreButtonText,\n viewProductDetailsText,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n freePriceText: priceFree,\n originalPriceText,\n currentPriceText,\n inputQuantityAriaLabel,\n removeFromOrderTemplateLinesText: removeItemFromOrderTemplateButtonText,\n addToBagButtonText: addOrderTemplateItemToBagButtonText,\n deleteButtonText,\n incrementButtonAriaLabel,\n decrementButtonAriaLabel,\n unavailableProductErrorMessage,\n outOfStockProductErrorMessage\n },\n index,\n isMobile: this.isMobile,\n toggleDetailsDisplayed: this._toggleDetailsDisplayed,\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled(),\n catalogs: catalogs && catalogs.result\n };\n\n return OrderTemplateLineView(currentProductProps)!;\n });\n }\n\n private readonly _toggleDetailsDisplayed = (props: IOrderTemplateLineProps): void => {\n let state = {\n isDetailsDisplayed: !this.state.isDetailsDisplayed\n };\n if (props) {\n state = {\n ...state,\n ...{\n detailedProductView: OrderTemplateMobileLineView(props)\n }\n };\n }\n this.setState(state);\n };\n\n // This method is used to update the product url with the catalogId\n private readonly _updateProductUrlCatalog = (\n productDetails: SimpleProduct,\n context: ICoreContext,\n catalogId: number | undefined\n ): string => {\n const productUrl = getProductUrlSync(productDetails, context.actionContext, undefined);\n if (!StringExtensions.isNullOrWhitespace(productUrl) && catalogId !== undefined) {\n const absoluteUrl = new URL(productUrl, window.location.href);\n absoluteUrl.searchParams.set('catalogid', `${catalogId ?? 0}`);\n return absoluteUrl.href;\n }\n\n return productUrl;\n };\n\n // Dismiss alert when addingToCart/removeItem\n private readonly _onDismiss = () => {\n this.setState({\n isOpen: false\n });\n };\n\n private readonly _changeQuantity = async (itemKey: string, quantity: number, props?: IOrderTemplateLineProps) => {\n const { context, data, telemetry, config, resources } = this.props;\n const { orderTemplate } = data;\n\n if (context) {\n if (orderTemplate?.result) {\n const orderTemplateLinesData = orderTemplate.result.orderTemplateLines;\n if (orderTemplateLinesData) {\n const orderLineIndex = orderTemplateLinesData.findIndex(\n (lines: OrderTemplateLine) => lines.productListLine.LineId === itemKey\n );\n const newProductListLine = { ...orderTemplateLinesData[orderLineIndex] };\n if (orderTemplateLinesData[orderLineIndex].productListLine.Quantity === quantity) {\n return;\n }\n const prevQuantity = newProductListLine.productListLine.Quantity;\n newProductListLine.productListLine.Quantity = quantity;\n const { fullProduct, ...line } = newProductListLine;\n\n // Update mobile modal\n if (props) {\n props.quantity = quantity;\n this.setState({\n detailedProductView: OrderTemplateMobileLineView(props)\n });\n }\n\n this.setState({\n isQuantityDisabledForUpdate: true\n });\n\n updateProductListLinesAsync({ callerContext: context.actionContext }, orderTemplate.result.productList.Id, [\n line.productListLine\n ])\n .then(list => {\n this.setState({\n itemKey,\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isQuantityDisabledForUpdate: false,\n isOpen: false\n });\n if (list) {\n const newLine = list.find(lines => lines.LineId === itemKey);\n orderTemplateLinesData[orderLineIndex].productListLine = newLine!;\n const updatedLines = [...orderTemplateLinesData];\n updatedLines[orderLineIndex] = { fullProduct, productListLine: newLine! };\n const updatedOrderTemplate = { ...orderTemplate.result, ProductListLines: updatedLines };\n context.actionContext.update(\n new ActiveOrderTemplateLinesInput(context.actionContext.requestContext, config),\n updatedOrderTemplate\n );\n }\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable to update product quantity.');\n telemetry.error(error);\n const userMessage = resources.editOrderTemplateLineQuantityError;\n if (props) {\n props && (props.productListLine.Quantity = prevQuantity);\n this.setState({\n itemKey,\n userMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isQuantityDisabledForUpdate: false,\n isOpen: true,\n detailedProductView: OrderTemplateMobileLineView(props)\n });\n } else {\n newProductListLine.productListLine.Quantity = prevQuantity;\n this.setState({\n itemKey,\n userMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isQuantityDisabledForUpdate: false,\n isOpen: true\n });\n }\n });\n }\n }\n }\n };\n\n private readonly _addItemToBag = async (\n product: SimpleProduct,\n quantity: number,\n itemKey: string,\n catalogId?: number | undefined\n ): Promise => {\n const { context, data, resources, telemetry } = this.props;\n const { cart } = data;\n const { maxQuantityLimitText, addedToCartFailureMessage } = resources;\n\n if (context) {\n if (cart.result) {\n const addProductToCartInput = {\n product,\n count: quantity,\n catalogId\n };\n\n await cart.result\n .addProductToCart(addProductToCartInput)\n .then((result: ICartActionResult) => {\n if (result.status === 'SUCCESS') {\n return getPriceForSelectedVariant(\n new PriceForSelectedVariantInput(\n product.RecordId,\n this.props.context.actionContext.requestContext.apiSettings.channelId,\n product\n ),\n this.props.context.actionContext\n ).then(priceResult => {\n if (!priceResult) {\n return AsyncResult.reject('Failed to retrieve product price');\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- read config file.\n const isMiniCart = context.app.config.addToCartBehavior === 'showMiniCart';\n this.setState({\n itemKey,\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false,\n isItemAddedToOrderTemplateOpen: !isMiniCart,\n itemAddedToCartDialogData: {\n product,\n productPrice: priceResult,\n quantity\n },\n isDetailsDisplayed: false\n });\n return AsyncResult.resolve();\n });\n } else {\n switch (result.substatus) {\n case 'MAXQUANTITY':\n if (context.app.config.maxQuantityForCartLineItem) {\n const cartLineQuantity: number | undefined =\n cart.result?.cart.CartLines &&\n cart.result?.cart.CartLines.find(result => result.ProductId === product.RecordId)?.Quantity;\n const defaultMessage = `You can only add ${context.app.config.maxQuantityForCartLineItem} of this item to your shopping bag`;\n this.setState({\n itemKey,\n userMessage:\n cartLineQuantity !== undefined\n ? maxQuantityLimitText\n .replace('{curQuantity}', cartLineQuantity.toString())\n .replace(\n '{maxQuantity}',\n context.app.config.maxQuantityForCartLineItem.toString()\n ) || defaultMessage\n : defaultMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n } else {\n const defaultMessage = `Max quantity for cart line item is undefined. Please define in configuration settings.`;\n this.setState({\n itemKey,\n userMessage: defaultMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n }\n case 'INVOICEINCART': {\n this.setState({\n itemKey,\n userMessage: result.errorDetails?.LocalizedMessage || addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n }\n default:\n telemetry.debug('[order-template-lines] Unable to Update Cart Line from the order template lines');\n this.setState({\n itemKey,\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n }\n }\n })\n .catch((error: Error) => {\n telemetry.warning(error.message);\n telemetry.debug('[order-template-lines] Error trying to Update Cart Line from the order template lines');\n if (StringExtensions.isNullOrWhitespace(error.message)) {\n this.setState({\n itemKey,\n userMessage: error.message,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n } else {\n this.setState({\n itemKey,\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n }\n });\n }\n }\n };\n\n private readonly _removeItemFromOrderTemplateLines = async (line: IOrderTemplateLineViewModel) => {\n const { context, data, telemetry } = this.props;\n const { orderTemplate } = data;\n\n if (context && context.actionContext) {\n const maxWaitTimeInMilliSeconds: number = 1000;\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplate?.result && line) {\n const featureStates = await getFeatureState(createGetFeatureStateInput(context.actionContext), context.actionContext);\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (ArrayExtensions.hasElements(featureStates)) {\n isMultipleCatalogFeatureEnabledInHq =\n featureStates.find(\n (featureState: FeatureState) => featureState.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n const catalogId = getCatalogId(context.actionContext.requestContext);\n if (isMultipleCatalogFeatureEnabledInHq) {\n line.productListLine.CatalogId = catalogId;\n }\n removeProductListLinesAsync({ callerContext: context.actionContext }, line.productListLine.ProductListId!, [\n line.productListLine\n ])\n .then(async () => {\n // eslint-disable-next-line no-promise-executor-return -- fix\n await new Promise(resolve => setTimeout(resolve, maxWaitTimeInMilliSeconds));\n window.location.reload();\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable remove items from the order template lines');\n telemetry.error(error);\n });\n } else {\n telemetry.warning(\n '[order-template-lines] Unable remove items from the order template lines user token or lineItemID was not found'\n );\n }\n }\n };\n\n private readonly _renameTemplate = async (_template: ProductList): Promise => {\n window.location.reload();\n return Promise.resolve();\n };\n\n private readonly _removeTemplate = () => {\n const { context, data, telemetry, resources } = this.props;\n const { orderTemplate } = data;\n\n if (context && context.actionContext) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplate && orderTemplate.result) {\n deleteAsync({ callerContext: context.actionContext }, orderTemplate.result.productList)\n .then()\n .catch((error: string) => {\n telemetry.warning('[order-template] Unable to delete order template.');\n telemetry.error(error);\n this.setState({\n itemKey: orderTemplate.result?.productList.Id || '',\n userMessage: resources.deleteOrderTemplateFailedText,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n });\n const newLink = getUrlSync('ordertemplatelist', this.props.context.actionContext);\n if (newLink) {\n window.location.assign(newLink);\n }\n } else {\n telemetry.warning('[order-template] Failed to delete order template. Order template was not found');\n }\n } else {\n telemetry.warning('[order-template] Failed to delete order template.');\n }\n };\n\n private _updateViewport(): void {\n this._viewport = this._getViewport();\n }\n\n private readonly _getViewport = (): GridSize => {\n const { context } = this.props;\n\n // Always render in mobile viewport on a mobile device\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\n return 'xs';\n }\n\n if (MsDyn365.isBrowser && window.innerWidth) {\n const gridSettings = context.request.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n }\n }\n\n return 'xs';\n };\n\n /**\n * Renders a Pagination previous text.\n * @param paginationPreviousText - Pagination previous text from resources.\n * @returns Previous text and flipper icon.\n */\n private readonly _renderPrev = (paginationPreviousText: string) => {\n return (\n
\n
\n );\n };\n\n /**\n * Renders a Pagination next text.\n * @param paginationNextText - Pagination next text from resources.\n * @returns Next text and flipper icon.\n */\n private readonly _renderNext = (paginationNextText: string) => {\n return (\n
\n {paginationNextText}\n
\n );\n };\n}\n\nexport default OrderTemplateLines;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\nimport {\n CacheType,\n createObservableDataAction,\n getCatalogId,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport {\n AttributeDataType,\n ChannelInventoryConfiguration,\n ProductRefinerSource,\n ProductRefinerValue,\n ProductSearchCriteria,\n SearchSuggestion,\n SearchSuggestionCriteria\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n getInventoryConfigurationAsync,\n getSearchSuggestionsAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\n\nexport enum SuggestionType {\n Category = 'ScopedCategory',\n Keyword = 'Keyword',\n Product = 'Product',\n None = 'None'\n}\n\n/**\n * This setting defines inventory filtering options.\n */\nexport enum ProductListInventoryFilteringOptions {\n /**\n * Filter out all products out of stock.\n */\n HideOOS = 'hideOOS',\n\n /**\n * Sort products by availability, OOS goes last.\n */\n SortOOS = 'sortOOS',\n\n /**\n * No filtering selected.\n */\n Default = 'default'\n}\n\n/**\n * Input class for auto suggest search input.\n */\nexport class AutoSuggestInput implements IActionInput {\n public searchQuery?: string;\n\n public topResultsCount?: number;\n\n public suggestionType?: string;\n\n public hitPrefix?: string;\n\n public hitSuffix?: string;\n\n public constructor(searchText?: string, top?: number, suggestionType?: string, hitPrefix?: string, hitSuffix?: string) {\n this.searchQuery = searchText;\n this.topResultsCount = top;\n this.suggestionType = suggestionType;\n this.hitPrefix = hitPrefix;\n this.hitSuffix = hitSuffix;\n }\n\n public getCacheKey = () => 'AutoSuggestSearchSuggestions';\n\n public getCacheObjectType = () => 'AutoSuggestSearchSuggestions';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nconst createInput = (inputData: ICreateActionContext) => {\n return new AutoSuggestInput();\n};\n\n/**\n * Calls the Retail API and returns a auto-suggest suggestions.\n * @param input\n * @param ctx\n */\nexport async function getSearchSuggestionsAction(input: AutoSuggestInput, ctx: IActionContext): Promise {\n // If no input is provided fail out\n if (!input || !input.searchQuery) {\n throw new Error('[getSearchSuggestionsAction]No valid Input was provided, failing');\n }\n\n const autosuggest: Autosuggestions = {};\n\n const autoSuggestPromises = [_getAutoSuggest(input, autosuggest, ctx)];\n return Promise.all(autoSuggestPromises).then(() => {\n return autosuggest;\n });\n}\n\n/**\n * Returns inventory in stock sortable refiner value.\n * @param channelInventoryConfiguration - The channelInventoryConfiguration.\n * @param isInStock - The flag indicating whether is getting in-stock refiner or out-of-stock refiner.\n * @returns Refiners.\n */\nconst getInventorySortableRefinerValue = (\n channelInventoryConfiguration: ChannelInventoryConfiguration,\n isInStock: boolean\n): ProductRefinerValue | undefined => {\n if (channelInventoryConfiguration && channelInventoryConfiguration.ProductAvailabilitySortableAttributeRecordId) {\n return {\n RefinerRecordId: channelInventoryConfiguration.ProductAvailabilitySortableAttributeRecordId,\n DataTypeValue: AttributeDataType.TrueFalse,\n LeftValueBoundString: isInStock ? 'true' : 'false',\n RightValueBoundString: isInStock ? 'true' : 'false',\n UnitText: '',\n RowNumber: 0,\n Count: 0,\n ExtensionProperties: [],\n RefinerSourceValue: ProductRefinerSource.Attribute\n };\n }\n return undefined;\n};\n\nasync function _getAutoSuggest(input: AutoSuggestInput, autosuggest: Autosuggestions, ctx: IActionContext): Promise {\n const catalogId = getCatalogId(ctx.requestContext);\n let productSearchCriteria: ProductSearchCriteria = {\n SearchCondition: input.searchQuery && input.searchQuery.length > 0 ? input.searchQuery : '',\n Context: {\n ChannelId: +ctx.requestContext.apiSettings.channelId,\n CatalogId: catalogId\n }\n };\n\n if (ctx.requestContext.app.config?.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\n const channelInventoryConfiguration = await getInventoryConfigurationAsync({ callerContext: ctx });\n const isInStockRefiner = true;\n const inventoryRefinerValue = getInventorySortableRefinerValue(channelInventoryConfiguration, isInStockRefiner);\n\n if (inventoryRefinerValue) {\n productSearchCriteria = {\n ...productSearchCriteria,\n Refinement: [inventoryRefinerValue]\n };\n }\n }\n\n const searchCriteria: SearchSuggestionCriteria = {\n ProductSearchCriteria: productSearchCriteria,\n HitPrefix: input.hitPrefix,\n HitSuffix: input.hitSuffix,\n SuggestionType: input.suggestionType\n };\n\n const searchSuggestions = await getSearchSuggestionsAsync(\n { callerContext: ctx, queryResultSettings: { Paging: { Top: input.topResultsCount } } },\n searchCriteria\n );\n\n if (searchSuggestions && searchSuggestions.length > 0) {\n // Generate image url\n searchSuggestions.map(\n (item: SearchSuggestion) =>\n (item.ImageUrl = item.ImageUrl ? generateImageUrl(item.ImageUrl, ctx.requestContext.apiSettings) : '')\n );\n\n autosuggest.AllSearchResults = searchSuggestions;\n } else {\n ctx.telemetry.error(\n `[getSearchSuggestionsAction] unable to get availabilites for search with suggestion type ${searchCriteria.SuggestionType}`\n );\n }\n}\n\nexport const getSearchSuggestionsActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/search/get-auto-suggest-suggestions',\n action: >getSearchSuggestionsAction,\n input: createInput\n});\n\nexport default getSearchSuggestionsActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { getRichTextHtml } from '@msdyn365-commerce/core';\nimport { ProductRefiner, ProductRefinerSource, ProductRefinerValue, SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchData } from '../search.data';\nimport { ISearchProps } from '../search.props.autogenerated';\n\nexport interface ISearchCategorySuggestProps {\n searchCategorySuggestClass: string;\n searchPageURL: string;\n searchQsp: string | undefined;\n hitPrefix: string;\n hitSuffix: string;\n autoSuggestProps: ISearchProps;\n searchText: string;\n searchRefiners: ProductRefiner[] | undefined;\n suggestions: SearchSuggestion[] | undefined;\n telemetryContent?: ITelemetryContent;\n shouldShowFullPath?: boolean;\n}\n\nexport interface ISearchCategoryViewProps {\n title: React.ReactNode;\n text: React.ReactNode[];\n}\n\nlet payLoad: IPayLoad;\n\n/**\n * CategorySuggestionsComponent.\n * @param props\n */\nexport const CategorySuggestionsComponent = (props: ISearchCategorySuggestProps): ISearchCategoryViewProps | undefined => {\n const {\n suggestions,\n searchText,\n autoSuggestProps: {\n resources: { categorySuggestionHeading }\n }\n } = props;\n\n const reactNodes: React.ReactNode[] = [];\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n suggestions?.map(item => {\n reactNodes.push(_assembleNode(item, props));\n });\n\n const titleNode = _renderTitle(categorySuggestionHeading, searchText);\n\n return { title: titleNode, text: reactNodes };\n};\n\nconst _renderTitle = (categorySuggestionHeading: string, searchText: string) => {\n const categoryAutoSuggestionHeading = categorySuggestionHeading\n ? format(categorySuggestionHeading, searchText)\n : `Search \"${searchText}\" in categories`;\n\n return
  • {categoryAutoSuggestionHeading}
  • ;\n};\n\nconst _assembleNode = (item: SearchSuggestion, props: ISearchCategorySuggestProps) => {\n const { searchText, hitPrefix, hitSuffix, shouldShowFullPath } = props;\n\n const splitValue = shouldShowFullPath ? item.Value : item.Value && item.Value.split('|').pop();\n const ariaLabel = splitValue\n ? splitValue.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '')\n : item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n payLoad.contentAction.etext = item.Value;\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n return (\n
  • \n \n {_generateLink(item, searchText, props) && _getHighlightedText(splitValue ? splitValue : '', hitPrefix, hitSuffix)}\n \n
  • \n );\n};\n\nconst _generateLink = (suggestion: SearchSuggestion, searchText: string, props: ISearchCategorySuggestProps): string => {\n return suggestion && suggestion.Id ? _getCategoryLink(suggestion.Id, searchText, props) : '';\n};\n\nconst _getCategoryLink = (id: string, searchText: string, props: ISearchCategorySuggestProps): string => {\n const { searchPageURL, searchQsp, searchRefiners } = props;\n\n if (!MsDyn365.isBrowser) {\n return '';\n }\n\n const queryUrl = new URL(searchPageURL, window.location.href);\n\n if (searchQsp && searchText) {\n queryUrl.searchParams.set(searchQsp, searchText);\n }\n\n const categoryRefiners = searchRefiners?.find(refiners => {\n return refiners.SourceValue === ProductRefinerSource.Category;\n });\n const refiner = categoryRefiners?.Values?.find(item => {\n return item.RefinerRecordId === Number.parseInt(id, 10);\n });\n\n const encodedRefiner = refiner && JSON.stringify(compressRefiners([refiner]));\n if (encodedRefiner) {\n queryUrl.searchParams.set('refiners', encodedRefiner);\n }\n\n return queryUrl.href;\n};\n\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\n const formattedText = suggestion\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n // eslint-disable-next-line react/no-danger\n return ;\n};\n\n// TODO: This code is currently duplicated in categoryautosuggest need to either remove one of these files\n// or move this code to a common place\nconst compressedRefinerKeys = [\n 'DataTypeValue',\n 'LeftValueBoundString',\n 'RefinerRecordId',\n 'RefinerSourceValue',\n 'RightValueBoundString',\n 'UnitText'\n];\n\n/**\n * Compressed a list of refiners for use in URLs.\n * @param refiners The uncompressed refiners.\n */\nconst compressRefiners = (refiners: ProductRefinerValue[]) => {\n const compressedRefiners: (string | number)[][] = [];\n\n refiners.forEach(refiner => {\n const compressedRefiner: (string | number)[] = [];\n compressedRefinerKeys.forEach(refinerKey => {\n compressedRefiner.push(refiner[refinerKey]);\n });\n compressedRefiners.push(compressedRefiner);\n });\n\n return compressedRefiners;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ISearchFormProps {\n hideSearchLabel: boolean | undefined;\n isSearchFormExpanded?: boolean | undefined;\n disableSubmitSearch: boolean | undefined;\n searchTextInput: React.RefObject;\n maxChars: number;\n searchQsp: string;\n searchPlaceholder: string;\n query: string;\n ariaLabelCancel: string;\n ariaLabelSearch: string;\n ariaLabelSubmit: string;\n handleCancelSearchChange(): void;\n handleInputChange(query: string): void;\n}\n\nexport interface ISearchFormViewProps {\n input: React.ReactNode;\n submitBtn: React.ReactNode;\n cancelBtn: React.ReactNode;\n}\n\n/**\n * On Input Change functionality.\n * @param handleInputChange -Input change function.\n * @returns Set updated input value.\n */\nconst onInputChangeFunction = (handleInputChange: (query: string) => void) => (event: React.ChangeEvent) => {\n handleInputChange(event.target.value || '');\n};\nexport const FormComponent = (props: ISearchFormProps): ISearchFormViewProps => {\n const {\n searchQsp,\n searchPlaceholder,\n hideSearchLabel,\n searchTextInput,\n handleInputChange,\n maxChars,\n disableSubmitSearch,\n handleCancelSearchChange,\n query,\n ariaLabelCancel,\n ariaLabelSearch,\n ariaLabelSubmit\n } = props;\n\n const onInputChange = onInputChangeFunction(handleInputChange);\n\n const inputNode = !hideSearchLabel ? (\n \n ) : (\n \n );\n\n const submitBtnNode = !disableSubmitSearch && \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 { PriceComponent } from '@msdyn365-commerce/components';\nimport { getRichTextHtml, IActionContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\nimport { getProductPageUrlSync, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n NodeTag\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchData } from '../search.data';\nimport { ISearchProps } from '../search.props.autogenerated';\n\n/**\n * Search product suggest resources.\n */\nexport interface ISearchProductSuggestResources {\n freePriceText: string;\n}\n\nexport interface ISearchProductSuggestProps {\n searchProductSuggestClass: string;\n searchPageURL: string;\n searchQsp: string | undefined;\n hitPrefix: string;\n hitSuffix: string;\n autoSuggestProps: ISearchProps;\n searchText: string;\n suggestions: SearchSuggestion[] | undefined;\n telemetry: ITelemetry;\n moduleType: string;\n moduleId: string;\n telemetryContent?: ITelemetryContent;\n resources?: ISearchProductSuggestResources;\n}\n\nexport interface ISearchProductViewProps {\n title: React.ReactNode;\n items: ISearchProductItemViewProps[];\n}\n\nexport interface ISearchProductItemViewProps {\n text: React.ReactNode;\n thumbnail: React.ReactNode;\n price: React.ReactNode;\n LiProduct: INodeProps;\n AProduct: INodeProps;\n id: string | undefined;\n}\n\nlet payLoad: IPayLoad;\nlet telemetryContent: ITelemetryContent | undefined;\n\n/**\n * ProductSuggestionsComponent.\n * @param props\n */\nexport const ProductSuggestionsComponent = (props: ISearchProductSuggestProps): ISearchProductViewProps | undefined => {\n const {\n suggestions,\n hitSuffix,\n hitPrefix,\n autoSuggestProps: {\n context: { actionContext },\n resources: { productSuggestionHeading }\n },\n moduleType,\n moduleId\n } = props;\n const reactNodes: ISearchProductItemViewProps[] = [];\n telemetryContent = props.telemetryContent;\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n suggestions?.map(item => {\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, actionContext, props, moduleType, moduleId));\n });\n\n const titleNode = _renderTitle(productSuggestionHeading);\n\n return { title: titleNode, items: reactNodes };\n};\n\nconst _renderTitle = (productSuggestionHeading: string) => {\n const productAutoSuggestionHeading = productSuggestionHeading ? productSuggestionHeading : 'Go to products';\n\n return
  • {productAutoSuggestionHeading}
  • ;\n};\n\nconst _assembleNode = (\n item: SearchSuggestion,\n hitPrefix: string,\n hitSuffix: string,\n actionContext: IActionContext,\n props: ISearchProductSuggestProps,\n moduleType: string,\n moduleId: string\n): ISearchProductItemViewProps => {\n const altText =\n item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n const price = item.Value3?.Value?.DecimalValue;\n return {\n text: _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix),\n thumbnail: _renderThumbnail(item, altText ? altText : '', props),\n price: !ObjectExtensions.isNullOrUndefined(price) && _renderPrice(price, price, moduleId, moduleType, props),\n LiProduct: _getLiWrapper(),\n AProduct: _getAWrapper(item, hitPrefix, hitSuffix, actionContext, props),\n id: item.Id\n };\n};\n\nconst _getLiWrapper = () => {\n return {\n className: 'msc-autoSuggest__productResults-item',\n tag: 'li' as NodeTag\n };\n};\n\nconst _getAWrapper = (\n item: SearchSuggestion,\n hitPrefix: string,\n hitSuffix: string,\n actionContext: IActionContext,\n props: ISearchProductSuggestProps\n) => {\n const {\n autoSuggestProps: { context }\n } = props;\n const ariaLabel =\n item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n payLoad.contentAction.recid = item.Id;\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n const productPrice = context.cultureFormatter.formatCurrency(item.Value3!.Value!.DecimalValue!);\n\n return {\n className: 'msc-autoSuggest__productResults-item',\n tag: 'a' as NodeTag,\n 'aria-label': `${ariaLabel!} ${productPrice}`,\n href: _generateLink(item, hitPrefix, hitSuffix, actionContext),\n ...attribute\n };\n};\n\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, actionContext: IActionContext) => {\n const formattedLink = (suggestion.Value as string)\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n return suggestion.Value && suggestion.Id\n ? getProductPageUrlSync(formattedLink, (suggestion.Id as unknown) as number, actionContext, undefined)\n : '';\n};\n\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\n const formattedText = suggestion\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n return (\n // eslint-disable-next-line react/no-danger\n \n );\n};\n\nconst _renderPrice = (\n adjustedPrice: number,\n basePrice: number,\n moduleId: string,\n moduleType: string,\n props: ISearchProductSuggestProps\n): JSX.Element | null => {\n const {\n autoSuggestProps: { context }\n } = props;\n\n return (\n \n );\n};\n\nconst _renderThumbnail = (suggestion: SearchSuggestion, altText: string, props: ISearchProductSuggestProps): JSX.Element | null => {\n const {\n autoSuggestProps: {\n context: {\n request: { gridSettings }\n },\n config: { imageSettings }\n }\n } = props;\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n\n if (!suggestion || !suggestion.ImageUrl) {\n props.telemetry.error('Search suggestion content is empty, module wont render.');\n return null;\n }\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=40&h=40&m=6', w: 0, h: 0 },\n lg: { q: 'w=40&h=40&m=6', w: 0, h: 0 },\n xl: { q: 'w=40&h=40&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n return (\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 { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { getCatalogId, getUrlSync } from '@msdyn365-commerce/core';\nimport { ProductRefiner, ProductRefinerSource, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, ObjectExtensions, Random, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { createSearchStateInput } from '@msdyn365-commerce-modules/search-utilities';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, KeyCodes } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { debounce } from 'lodash';\nimport { Spinner, SpinnerSize } from 'office-ui-fabric-react';\nimport * as React from 'react';\n\nimport getSearchSuggestionsAction, { AutoSuggestInput, SuggestionType } from './actions/get-auto-suggest-suggestions';\nimport {\n CategorySuggestionsComponent,\n FormComponent,\n ISearchCategoryViewProps,\n ISearchKeywordViewProps,\n ISearchProductViewProps,\n KeywordSuggestionsComponent,\n LabelComponent,\n ProductSuggestionsComponent\n} from './components';\nimport { ISearchData } from './search.data';\nimport { ISearchProps, ISuggestionTypeCriterionData, SuggestionTypeCriterionSuggestionType } from './search.props.autogenerated';\n\nexport interface ISearchState {\n isSearchFormExpanded: boolean;\n searchText: string;\n searchKeywordSuggestClass: string;\n searchProductSuggestClass: string;\n searchCategorySuggestClass: string;\n suggestions: Autosuggestions | undefined;\n searchRefiners?: ProductRefiner[] | undefined;\n autoSuggestAriaLabel: string;\n isInitialState: boolean;\n isLoadingAutoSuggest?: boolean;\n}\n\nexport interface ISearchViewProps extends ISearchProps {\n Search: IModuleProps;\n AutoSuggestAriaLabel: INodeProps;\n AutoSuggestAriaLabelText: string;\n searchText: string;\n AutoSuggest: INodeProps;\n KeywordSuggest: INodeProps;\n ProductSuggest: INodeProps;\n CategorySuggest: INodeProps;\n SearchForm: INodeProps;\n FormWrapper: INodeProps;\n UlKeyword: INodeProps;\n UlProduct: INodeProps;\n UlCategory: INodeProps;\n label: React.ReactNode;\n form: React.ReactNode;\n autosuggestKeyword?: ISearchKeywordViewProps;\n autosuggestProduct?: ISearchProductViewProps;\n autosuggestCategory?: ISearchCategoryViewProps;\n callbacks: {\n handleCancelSearchChange(): void;\n handleCancelSearchFocused?(): void;\n };\n isSearchFormExpanded: boolean;\n isLoadingAutoSuggest?: boolean;\n isLoadingNode?: React.ReactNode;\n}\n\n/**\n *\n * Search module.\n * @extends {React.Component, ISearchState>}\n */\nclass Search extends React.Component, ISearchState> {\n private readonly searchTextInput: React.RefObject;\n\n private readonly searchCollapsedLabel: React.RefObject;\n\n private readonly formReference: React.RefObject;\n\n private readonly maxChars: number;\n\n private readonly topResultsCount?: number;\n\n private readonly hitPrefix: string = '{';\n\n private readonly hitSuffix: string = '}';\n\n private readonly waitTime: number = 500;\n\n private readonly autoSuggestResultScreenReaderDiv: React.RefObject;\n\n private readonly autoSuggestResultDiv: React.RefObject;\n\n private readonly searchFormClass: string;\n\n private readonly searchLabelClass: string;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private loadSuggestionsRequestId?: string;\n\n private inputSuggestionType: ISuggestionTypeCriterionData[];\n\n // @ts-expect-error\n private cancellabelDebounce: debounce;\n\n public constructor(props: ISearchProps) {\n super(props);\n this.searchTextInput = React.createRef();\n this.searchCollapsedLabel = React.createRef();\n this.autoSuggestResultScreenReaderDiv = React.createRef();\n this.autoSuggestResultDiv = React.createRef();\n this.formReference = React.createRef();\n this.state = {\n isSearchFormExpanded: false,\n searchText: '',\n searchKeywordSuggestClass: 'ms-search__autoSuggest__keyword',\n searchProductSuggestClass: 'ms-search__autoSuggest__product',\n searchCategorySuggestClass: 'ms-search__autoSuggest__category',\n suggestions: undefined,\n searchRefiners: undefined,\n autoSuggestAriaLabel: '',\n isInitialState: true,\n isLoadingAutoSuggest: false\n };\n this.maxChars =\n (this.props.context &&\n this.props.context.app &&\n this.props.context.app.config &&\n this.props.context.app.config.searchInputMaxLength) ||\n 50;\n\n this.inputSuggestionType = [];\n this.topResultsCount = this.props.config && this.props.config.topResultsCount ? this.props.config.topResultsCount : 5;\n this.searchFormClass = 'ms-search__form';\n this.searchLabelClass = 'ms-search__label';\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n this._initSuggestionTypes();\n }\n\n public async componentDidMount(): Promise {\n document.body && document.body.addEventListener('mousedown', this._focusOutTarget);\n window && window.addEventListener('keyup', this._keyup);\n }\n\n public componentWillUnmount(): void {\n document.body && document.body.removeEventListener('mousedown', this._focusOutTarget, false);\n window && window.removeEventListener('keyup', this._keyup, false);\n }\n\n public componentDidUpdate(): void {\n const {\n config: { hideSearchLabel }\n } = this.props;\n const { isSearchFormExpanded, isInitialState } = this.state;\n\n if (!this.props.context.request.params.isEditor) {\n if (!hideSearchLabel && isSearchFormExpanded) {\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\n } else if (!isInitialState) {\n this.searchCollapsedLabel && this.searchCollapsedLabel.current && this.searchCollapsedLabel.current.focus();\n }\n }\n }\n\n public shouldComponentUpdate(nextProps: ISearchProps, nextState: ISearchState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line complexity -- ignore complexity.\n public render(): JSX.Element {\n const {\n context,\n resources: { searchtext, searchLabelArialLabel, cancelBtnAriaLabel, searchBtnAriaLabel, submitBtnAriaLabel },\n config: { hideSearchLabel, disableSubmitSearch, searchplaceholderText, shouldShowFullCategoryPath, className = '' }\n } = this.props;\n\n const {\n isSearchFormExpanded,\n searchText,\n searchKeywordSuggestClass,\n searchProductSuggestClass,\n searchCategorySuggestClass,\n suggestions,\n searchRefiners,\n isLoadingAutoSuggest\n } = this.state;\n\n const searchQsp = (context && context.app && context.app.config && context.app.config.searchQueryStringParameter) || 'q';\n const searchPageURL = getUrlSync('search', context && context.actionContext) || '';\n const searchURL = this._appendQueryParams(searchPageURL, searchText, searchQsp);\n const searchPlaceholder = searchplaceholderText && searchplaceholderText.length > 0 ? searchplaceholderText : 'Search in Fabrikam';\n\n const keywordSuggestions = suggestions?.AllSearchResults?.filter(\n suggestion => suggestion.SuggestionType === SuggestionType.Keyword || suggestion.SuggestionType === SuggestionType.None\n );\n const productSuggestions = suggestions?.AllSearchResults?.filter(\n suggestion => suggestion.SuggestionType === SuggestionType.Product\n );\n const categoryRefiners = searchRefiners?.find(refiner => {\n return refiner.SourceValue === ProductRefinerSource.Category;\n });\n const categorySuggestions = suggestions?.AllSearchResults?.filter(suggestion => {\n if (suggestion.SuggestionType !== SuggestionType.Category) {\n return false;\n }\n const refiner = categoryRefiners?.Values?.find(item => {\n return `${item.RefinerRecordId ?? 0}` === suggestion.Id;\n });\n\n return !ObjectExtensions.isNullOrUndefined(refiner);\n });\n\n const viewProps: ISearchViewProps = {\n ...(this.props as ISearchProps),\n\n Search: {\n moduleProps: this.props,\n className: `${classnames('ms-search', className)} ${disableSubmitSearch ? 'no-submit' : 'with-submit'}`\n },\n AutoSuggestAriaLabel: {\n tag: 'div',\n className: 'msc-autoSuggest__screen-reader',\n 'aria-live': 'assertive',\n ref: this.autoSuggestResultScreenReaderDiv\n },\n AutoSuggestAriaLabelText: this.state.autoSuggestAriaLabel,\n searchText: this.state.searchText,\n AutoSuggest: {\n ref: this.autoSuggestResultDiv,\n className: 'ms-search__autoSuggest'\n },\n KeywordSuggest: {\n className: searchKeywordSuggestClass\n },\n ProductSuggest: {\n className: searchProductSuggestClass\n },\n CategorySuggest: {\n className: searchCategorySuggestClass\n },\n SearchForm: {\n className: `${this.searchFormClass} ${isSearchFormExpanded ? 'bx-show' : 'bx-hide'}`\n },\n FormWrapper: {\n tag: 'form',\n ref: this.formReference,\n className: 'ms-search__searchForm',\n 'aria-label': 'Search',\n name: 'searchForm',\n role: 'search',\n action: searchURL,\n autoComplete: 'off',\n onSubmit: this._handleSubmit\n },\n UlKeyword: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__keywordResults-items', className)\n },\n UlProduct: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__productResults-items', className)\n },\n UlCategory: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__categoryResults-items', className)\n },\n label: LabelComponent({\n isSearchFormExpanded,\n searchLabelClass: `${this.searchLabelClass} ${isSearchFormExpanded ? 'bx-hide' : 'bx-show'}`,\n searchtext,\n searchLabelArialLabel,\n searchCollapsedLabel: this.searchCollapsedLabel,\n hideSearchLabel,\n handleCancelSearchChange: this._handleCancelSearchChange,\n telemetryContent: this.telemetryContent\n }),\n form: FormComponent({\n ariaLabelCancel: cancelBtnAriaLabel,\n ariaLabelSearch: searchBtnAriaLabel,\n ariaLabelSubmit: submitBtnAriaLabel,\n hideSearchLabel,\n searchTextInput: this.searchTextInput,\n disableSubmitSearch,\n handleInputChange: this._handleInputChange,\n handleCancelSearchChange: this._handleCancelSearchChange,\n maxChars: this.maxChars,\n searchQsp,\n searchPlaceholder,\n query: searchText\n }),\n autosuggestKeyword:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (keywordSuggestions && ArrayExtensions.hasElements(keywordSuggestions)))\n ? KeywordSuggestionsComponent({\n searchKeywordSuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: keywordSuggestions,\n telemetryContent: this.telemetryContent\n })\n : undefined,\n autosuggestProduct:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (productSuggestions && ArrayExtensions.hasElements(productSuggestions)))\n ? ProductSuggestionsComponent({\n searchProductSuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: productSuggestions,\n telemetry: this.props.telemetry,\n moduleType: this.props.typeName,\n moduleId: this.props.id,\n telemetryContent: this.telemetryContent,\n resources: this.props.resources\n })\n : undefined,\n autosuggestCategory:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (categorySuggestions && ArrayExtensions.hasElements(categorySuggestions)))\n ? CategorySuggestionsComponent({\n searchCategorySuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: categorySuggestions,\n searchRefiners,\n telemetryContent: this.telemetryContent,\n shouldShowFullPath: shouldShowFullCategoryPath\n })\n : undefined,\n callbacks: {\n handleCancelSearchChange: this._handleCancelSearchChange,\n handleCancelSearchFocused: this._handleCancelSearchFocused\n },\n isSearchFormExpanded: this.state.isSearchFormExpanded,\n isLoadingAutoSuggest,\n isLoadingNode: this._isLoadingNode()\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _initSuggestionTypes() {\n const suggestionTypes = this.props.config.suggestionTypeCriterion;\n\n const suggestions = ArrayExtensions.unique(ArrayExtensions.validValues(suggestionTypes));\n if (!ArrayExtensions.hasElements(suggestions)) {\n this.inputSuggestionType = [\n { SuggestionType: SuggestionTypeCriterionSuggestionType.keyword },\n { SuggestionType: SuggestionTypeCriterionSuggestionType.product },\n { SuggestionType: SuggestionTypeCriterionSuggestionType.scopedCategory }\n ];\n return;\n }\n\n const validSuggestions = suggestions.filter(suggestion => suggestion.SuggestionType);\n if (ArrayExtensions.hasElements(validSuggestions)) {\n this.inputSuggestionType = validSuggestions;\n return;\n }\n\n this.inputSuggestionType = [];\n }\n\n /**\n * Function to create the ReactNode for loading Autosuggest result.\n * @returns ReachNode for loading Autosuggest result.\n */\n private readonly _isLoadingNode = (): React.ReactNode => {\n const loadingText = this.props.resources.autoSuggestResultLoadingMessage;\n return ;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _focusOutTarget = (e: any): void => {\n const { suggestions } = this.state;\n\n if (suggestions && suggestions.AllSearchResults && e.target.closest('.ms-search') === null) {\n this._clearAutoSuggestState();\n }\n };\n\n private readonly _keyup = (e: KeyboardEvent): void => {\n const { suggestions } = this.state;\n\n if (suggestions && suggestions.AllSearchResults && e.keyCode === KeyCodes.Escape) {\n this._clearAutoSuggestState();\n } else if (this.state.isSearchFormExpanded && e.keyCode === KeyCodes.Escape) {\n if (this.state.isSearchFormExpanded) {\n this.setState({ isSearchFormExpanded: false });\n }\n }\n\n if (\n !(\n (this.formReference.current && this.formReference.current.contains((e.target as unknown) as Node)) ||\n (this.autoSuggestResultDiv.current && this.autoSuggestResultDiv.current.contains((e.target as unknown) as Node))\n )\n ) {\n if (suggestions && suggestions.AllSearchResults) {\n this._clearAutoSuggestState();\n }\n\n if (this.state.isSearchFormExpanded) {\n this.setState({ isSearchFormExpanded: false });\n }\n }\n };\n\n private readonly _clearAutoSuggestState = (): void => {\n const {\n context: { actionContext },\n data: { searchState }\n } = this.props;\n\n if (this.searchTextInput.current && this.searchTextInput.current.value.length > 0) {\n searchState.searchText = '';\n searchState.defaultBasicSearchUrl = '';\n searchState.searchQueryStringParameter = '';\n actionContext ? actionContext.update(createSearchStateInput(searchState), searchState) : null;\n this.searchTextInput.current.value = '';\n }\n\n this.setState({ searchText: '', suggestions: undefined, searchRefiners: undefined });\n };\n\n private async _getSearchSuggestions(loadSuggestionsRequestId: string, query: string) {\n try {\n const searchSuggestions = await getSearchSuggestionsAction(\n new AutoSuggestInput(query, this.topResultsCount, this._getSuggestionType(), this.hitPrefix, this.hitSuffix),\n this.props.context.actionContext\n );\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return undefined;\n }\n return searchSuggestions;\n } catch (error) {\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return undefined;\n }\n this.setState({ suggestions: undefined, searchRefiners: undefined, autoSuggestAriaLabel: this._setAutoSuggestResultCount() });\n this.props.telemetry.exception(error);\n this.props.telemetry.debug('Unable to get auto suggest results');\n return undefined;\n }\n }\n\n private async _updateSearchRefiners(loadSuggestionsRequestId: string, query: string, suggestions: Autosuggestions | undefined) {\n try {\n const refiners = await this._getSearchRefiners(query);\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return;\n }\n this.setState({\n suggestions,\n searchRefiners: refiners,\n autoSuggestAriaLabel: this._setAutoSuggestResultCount(suggestions),\n isLoadingAutoSuggest: false\n });\n } catch (error) {\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return;\n }\n this.setState({ suggestions, searchRefiners: undefined, autoSuggestAriaLabel: this._setAutoSuggestResultCount(suggestions) });\n this.props.telemetry.exception(error);\n this.props.telemetry.debug('Unable to get refiners results');\n }\n }\n\n private _loadSuggestions(query: string) {\n this.cancellabelDebounce = debounce(async () => {\n this.setState({ isLoadingAutoSuggest: true });\n const loadSuggestionsRequestId = Random.Guid.generateGuid();\n this.loadSuggestionsRequestId = loadSuggestionsRequestId;\n const searchSuggestions = await this._getSearchSuggestions(loadSuggestionsRequestId, query);\n await this._updateSearchRefiners(loadSuggestionsRequestId, query, searchSuggestions);\n }, this.waitTime);\n\n setTimeout(() => {\n this.cancellabelDebounce();\n }, 0);\n }\n\n private readonly _handleInputChange = (query: string): void => {\n if (!query || query.length <= this.maxChars) {\n this.setState({ searchText: query });\n }\n\n if (this.cancellabelDebounce) {\n this.cancellabelDebounce.cancel();\n }\n\n const {\n context,\n data: { searchState }\n } = this.props;\n\n if (context) {\n if (query && query.length > 0) {\n if (query.length > this.maxChars) {\n return;\n }\n\n if (ArrayExtensions.hasElements(this.inputSuggestionType)) {\n this._loadSuggestions(query);\n }\n\n searchState.searchText = query;\n } else {\n this.setState({ suggestions: undefined, searchRefiners: undefined });\n searchState.searchText = '';\n }\n context.actionContext.update(createSearchStateInput(searchState), searchState);\n }\n };\n\n private _getSuggestionType(): string {\n const distinctSuggestionTypes: string[] = this.inputSuggestionType.map(\n suggestionTypeItem => suggestionTypeItem.SuggestionType!.charAt(0).toUpperCase() + suggestionTypeItem.SuggestionType!.slice(1)\n );\n return distinctSuggestionTypes.join(',');\n }\n\n private async _getSearchRefiners(searchText: string): Promise {\n const { actionContext: ctx } = this.props.context;\n const catalogId = getCatalogId(ctx.requestContext);\n validateCatalogId(catalogId);\n return ProductsDataActions.getProductSearchRefinersAsync(\n { callerContext: ctx },\n {\n SearchCondition: searchText,\n Context: {\n ChannelId: +ctx.requestContext.apiSettings.channelId,\n CatalogId: catalogId\n }\n }\n );\n }\n\n private readonly _handleSubmit = (\n e: React.MouseEvent | React.KeyboardEvent | React.FormEvent\n ): void => {\n const {\n config: { disableSubmitSearch },\n context: {\n actionContext,\n app: {\n config: { searchQueryStringParameter }\n }\n }\n } = this.props;\n\n const query = this.searchTextInput.current && this.searchTextInput.current.value;\n e.preventDefault();\n\n if (!query || (query && query.length === 0) || disableSubmitSearch) {\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\n } else {\n const searchQsp = searchQueryStringParameter || 'q';\n const searchURL = this._appendQueryParams(getUrlSync('search', actionContext) || '', query, searchQsp);\n document.location.href = searchURL;\n }\n };\n\n private readonly _handleCancelSearchChange = (): void => {\n const { isSearchFormExpanded, suggestions } = this.state;\n\n if (!isSearchFormExpanded) {\n this.setState({\n isSearchFormExpanded: true,\n searchText: '',\n isInitialState: false\n });\n } else {\n if (suggestions && suggestions.AllSearchResults) {\n this._clearAutoSuggestState();\n }\n this.setState({ isSearchFormExpanded: false });\n }\n };\n\n private readonly _handleCancelSearchFocused = (): void => {\n const { suggestions } = this.state;\n if (!(suggestions && suggestions.AllSearchResults)) {\n this._clearAutoSuggestState();\n this.setState({ isSearchFormExpanded: false });\n }\n };\n\n private readonly _appendQueryParams = (route: string, query: string, qsp: string): string => {\n if (!MsDyn365.isBrowser) {\n return '';\n }\n\n const queryUrl = new URL(route, window.location.href);\n if (qsp && query) {\n queryUrl.searchParams.set(qsp, query);\n }\n\n return queryUrl.href;\n };\n\n private readonly _setAutoSuggestResultCount = (result?: Autosuggestions) => {\n if (this.autoSuggestResultScreenReaderDiv.current !== null) {\n const ariaLiveRegion = this.autoSuggestResultScreenReaderDiv.current;\n const suggestResultString = this.props.resources.autoSuggestFoundMessage;\n const emptyResultString = this.props.resources.noAutoSuggestionMessage;\n ariaLiveRegion.innerText =\n result && result.AllSearchResults && result.AllSearchResults.length > 0 ? suggestResultString : emptyResultString;\n ariaLiveRegion.setAttribute('aria-live', 'assertive');\n return ariaLiveRegion.innerText;\n }\n return '';\n };\n}\n\nexport default Search;\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 { IForm, IItem, IGiftCardBalanceCheckViewProps } from './index';\n\nexport const Form: React.FC = ({\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n}) => (\n \n {alert}\n {supportExternalGiftCard ? (\n \n \n {label}\n {inputNumber}\n \n {showGiftCardPinInput && (\n \n {inputPinLabel}\n {inputPin}\n \n )}\n {showGiftCardExpInput && (\n \n {inputExpLabel}\n {inputExp}\n \n )}\n {(showGiftCardPinInput || showGiftCardExpInput) && alertFieldLabel}\n \n ) : (\n <>\n {label}\n {inputNumber}\n \n )}\n {applyButton}\n \n);\n\nexport const Item: React.FC = ({ itemProps, selectedGiftCard }) => {selectedGiftCard};\n\nconst GiftCardBalanceCheckView: React.FC = props => {\n const { giftCardBalanceCheckProps, form, item } = props;\n return (\n \n {form &&
    }\n {item && }\n \n );\n};\n\nexport default GiftCardBalanceCheckView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from './components';\nimport { ISearchViewProps } from './search';\n\nconst SearchView: React.FC = props => {\n const {\n Search,\n AutoSuggestAriaLabel,\n AutoSuggestAriaLabelText,\n searchText,\n AutoSuggest,\n KeywordSuggest,\n ProductSuggest,\n CategorySuggest,\n UlKeyword,\n UlProduct,\n UlCategory,\n form,\n autosuggestCategory,\n autosuggestKeyword,\n autosuggestProduct,\n SearchForm,\n FormWrapper,\n label,\n isLoadingAutoSuggest,\n isLoadingNode\n } = props;\n\n return (\n \n {label}\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\n \n {searchText && searchText.length > 0 ? {AutoSuggestAriaLabelText} : ''}\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword, isLoadingAutoSuggest, isLoadingNode)}\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct, isLoadingAutoSuggest, isLoadingNode)}\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory, isLoadingAutoSuggest, isLoadingNode)}\n \n \n );\n};\n\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\n return (\n \n \n {form.input}\n {form.cancelBtn}\n {form.submitBtn}\n \n \n );\n};\n\nconst _renderKeywordSuggestions = (\n KeywordSuggest: INodeProps,\n UlKeyword: INodeProps,\n keywordSuggestions?: ISearchKeywordViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n keywordSuggestions && (\n \n \n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n keywordSuggestions.text.map(text => {\n return text;\n })}\n \n \n )\n );\n};\n\nconst _renderProductSuggestions = (\n ProductSuggest: INodeProps,\n UlProduct: INodeProps,\n productSuggestions?: ISearchProductViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n productSuggestions && (\n \n \n {productSuggestions.title}\n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n productSuggestions.items.map((item, index) => {\n return (\n \n \n {item.thumbnail}\n {item.text}\n {item.price}\n \n \n );\n })}\n \n \n )\n );\n};\n\nconst _renderCategorySuggestions = (\n CategorySuggest: INodeProps,\n UlCategory: INodeProps,\n categorySuggestions?: ISearchCategoryViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n categorySuggestions && (\n \n \n {categorySuggestions.title}\n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n categorySuggestions.text.map(text => {\n return text;\n })}\n \n \n )\n );\n};\n\nexport default SearchView;\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\nimport { getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { CartLine, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport * as React from 'react';\r\nimport { Quantity } from '../../utilities/quantity';\r\nimport {\r\n AttributesForSelectedVariantInput,\r\n getAttributesForSelectedVariantAction\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n\r\n\r\n/**\r\n * ICartlineResourceString: Interface for specifying the\r\n * resource strings that the component needs\r\n */\r\nexport interface ICartlineResourceString {\r\n /** Display string for discount label */\r\n discountStringText: string;\r\n /** String for size key */\r\n sizeString: string;\r\n /** String for color key */\r\n colorString: string;\r\n /** String associated with the configuration product dimension */\r\n configString: string;\r\n /** String for style key */\r\n styleString: string;\r\n /** Display string for quantity label */\r\n quantityDisplayString: string;\r\n /** Display string for quantity label */\r\n inputQuantityAriaLabel: string;\r\n /** Aria label for the decrement button in quanitity component */\r\n decrementButtonAriaLabel: string;\r\n /** Aria label for the increment button in quanitity component */\r\n incrementButtonAriaLabel: string;\r\n salesLineSkuText: string;\r\n}\r\n\r\ninterface ICartLineData {\r\n cartLine: CartLine | SalesLine;\r\n product: SimpleProduct;\r\n imperilDimension: string;\r\n}\r\n\r\n/**\r\n * ICartLineProps: The props required to render cartLineitem\r\n */\r\nexport interface ICartLineProps extends IComponentProps {\r\n /** The flag to change the quantity component from interactible to static */\r\n disableQuantityInteractivity?: boolean;\r\n /** The primary image url */\r\n primaryImageUrl?: string;\r\n /** The product url */\r\n productUrl?: string;\r\n /** GridSettings for the product image in cartLine */\r\n gridSettings: IGridSettings;\r\n /** ImageSettings for the product image in cartLine */\r\n imageSettings: IImageSettings;\r\n /** Boolean flag to indicate if the item is out of stock */\r\n isOutOfStock?: boolean;\r\n /** Flag to make quantity section editable */\r\n isQuantityEditable?: boolean;\r\n /** Max quantity for line item */\r\n maxQuantity?: number;\r\n /** Current quantity for line item */\r\n currentQuantity?: number;\r\n /** Resource string for the component */\r\n resources: ICartlineResourceString;\r\n /** SalesLine flag */\r\n isSalesLine?: boolean;\r\n /** Error message to show in place of quantity */\r\n errorMessage?: string;\r\n /** Quantity onChange callback */\r\n quantityOnChange?(cartLine: CartLine, newQuantity: number): void;\r\n\r\n}\r\n\r\ninterface IDimensionStrings {\r\n /** String for size key */\r\n sizeString: string;\r\n /** String for color key */\r\n colorString: string;\r\n /** String associated with the configuration product dimension */\r\n configString: string;\r\n /** String for style key */\r\n styleString: string;\r\n}\r\n\r\nconst CartLineItemFunctions = {\r\n renderProductDimensions: (Product: SimpleProduct, DimensionStrings: IDimensionStrings, props: any) => {\r\n if (!Product || !Product.Dimensions) {\r\n return [];\r\n }\r\n return Product.Dimensions.map(productDimension => {\r\n\r\n if (productDimension.DimensionTypeValue === 1) {\r\n return (\r\n
    \r\n {DimensionStrings.colorString}\r\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\r\n
    \r\n );\r\n }\r\n if (productDimension.DimensionTypeValue === 2) {\r\n return (\r\n
    \r\n {DimensionStrings.configString}:\r\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\r\n
    \r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === 3) {\r\n return (\r\n
    \r\n {DimensionStrings.sizeString}\r\n {/* {productDimension.DimensionValue && productDimension.DimensionValue.Value} */}\r\n \r\n \r\n\r\n
    \r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === 4) {\r\n return (\r\n
    \r\n {DimensionStrings.styleString}:\r\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\r\n
    \r\n );\r\n }\r\n return null;\r\n });\r\n },\r\n\r\n renderProductSKU:(props:ICartLineProps) => {\r\n var CartLine = props.data.cartLine;\r\n if (!CartLine || !CartLine.ItemId) {\r\n return undefined;\r\n }\r\n if(CartLine) {\r\n return(\r\n
    \r\n SKU:\r\n {CartLine.ItemId}\r\n
    \r\n );\r\n }\r\n return undefined;\r\n },\r\n\r\n renderDiscountLines: (props: ICartLineProps) => {\r\n\r\n if (!props.data.cartLine.DiscountLines || props.data.cartLine.DiscountLines.length === 0) {\r\n return null;\r\n }\r\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\r\n return (\r\n
    \r\n \r\n {discountLine.OfferName ? discountLine.OfferName : ''}:\r\n {` ${props.resources.discountStringText || 'Discount'} `}\r\n \r\n \r\n \r\n \r\n \r\n {` (${discountLine.Percentage !== undefined ? discountLine.Percentage : ''}%)`}\r\n \r\n
    \r\n );\r\n });\r\n }\r\n};\r\n\r\nclass DimensionLine extends React.Component {\r\n public dimension: string = '';\r\n constructor(props: any) {\r\n super(props);\r\n this.state = {\r\n // dimension: props.data.product.result.Dimensions[1].DimensionValue.Value\r\n dimension: props.defaultValue\r\n };\r\n }\r\n public async componentDidMount(): Promise {\r\n const actionInput = new AttributesForSelectedVariantInput(\r\n this.props.product.RecordId,\r\n // @ts-ignore\r\n +this.props.context.actionContext.requestContext.apiSettings.channelId,\r\n this.props.product);\r\n await getAttributesForSelectedVariantAction(actionInput, this.props.context.actionContext).then((result) => {\r\n result!.forEach(res => {\r\n if (res.Name === \"Product dimensions imperial\" && res.TextValue) {\r\n this.setState({ dimension: res.TextValue })\r\n }\r\n })\r\n }).catch(error => {\r\n console.log('error', error);\r\n });\r\n }\r\n\r\n public render(): JSX.Element {\r\n return (\r\n {this.state.dimension}\r\n );\r\n }\r\n}\r\n\r\n\r\n// tslint:disable-next-line:max-func-body-length\r\nconst CartLine: React.FC = (props: ICartLineProps) => {\r\n const { isSalesLine, productUrl, resources } = props;\r\n const { product } = props.data;\r\n\r\n\r\n const destructDimensionStrings = {\r\n sizeString: resources.sizeString,\r\n colorString: resources.colorString,\r\n styleString: resources.styleString,\r\n configString: resources.configString\r\n };\r\n const fallbackImageUrl = getFallbackImageUrl(product.ItemId, props.context.actionContext.requestContext.apiSettings);\r\n const productDimensions = CartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings, props);\r\n const productSKU = CartLineItemFunctions.renderProductSKU(props);\r\n const renderDisountLines = CartLineItemFunctions.renderDiscountLines(props);\r\n const onChange = (newValue: number) => {\r\n if (props.quantityOnChange) {\r\n props.quantityOnChange(props.data.cartLine, newValue);\r\n }\r\n };\r\n\r\n const _generateErrorMessage = (): JSX.Element | null => {\r\n if (props.errorMessage) {\r\n return (\r\n
    \r\n \r\n {props.errorMessage}\r\n
    \r\n );\r\n }\r\n\r\n return null;\r\n };\r\n\r\n const _generateQuantityandPrice = (): JSX.Element[] | null => {\r\n const nodes = [];\r\n // if (props.isOutOfStock) {\r\n // const errorMessage = _generateErrorMessage();\r\n\r\n // if (errorMessage) {\r\n // return [errorMessage];\r\n // }\r\n\r\n // return null;\r\n // }\r\n if (props.isQuantityEditable && !props.data.cartLine.IsGiftCardLine) {\r\n const isB2B = props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits === 'b2b';\r\n const eoqQuantity = isB2B ? props.data?.product?.Behavior?.MultipleOfQuantity : 1;\r\n nodes.push(\r\n
    \r\n
    {resources.quantityDisplayString}
    \r\n\r\n {_generateErrorMessage()}\r\n\r\n \r\n
    \r\n );\r\n } else {\r\n nodes.push(\r\n
    \r\n \r\n\r\n {_generateErrorMessage()}\r\n\r\n {props.data.cartLine.Quantity}\r\n
    \r\n );\r\n }\r\n const isB2B = props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits === 'b2b';\r\n\r\n nodes.push(\r\n
    \r\n \r\n {\r\n props.data.cartLine.DiscountAmount && props.data.cartLine.DiscountAmount > 0 &&\r\n <>\r\n {` ${props.resources.discountStringText || 'Discount'} `}\r\n \r\n ||\r\n null\r\n }\r\n
    \r\n );\r\n\r\n return nodes;\r\n };\r\n const isB2B = props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits === 'b2b';\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n {product.Name}\r\n {productDimensions.length > 0 ?\r\n
    \r\n {productDimensions}\r\n {productSKU}\r\n
    :\r\n ''\r\n }\r\n
    \r\n \r\n
    \r\n {renderDisountLines}\r\n
    \r\n {\r\n _generateQuantityandPrice()\r\n }\r\n {props.data.cartLine.ItemId &&\r\n

    \r\n {resources.salesLineSkuText || 'SKU:'} {props.data.cartLine.ItemId}\r\n

    \r\n }\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default CartLine;","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport default (props: { className: string; msg?: string }) => (\n <>\n
    \n {props?.msg &&
    {props?.msg}
    }\n \n);\n","import { debounce } from 'lodash';\r\nimport * as React from 'react';\r\nimport { IQuantityProps } from './Quantity.props';\r\n\r\ninterface IQuantityState {\r\n currentInput: number;\r\n}\r\n/**\r\n * Quantity Component - This component is used to add or remove quantity\r\n */\r\n\r\nexport default class Quantity extends React.PureComponent {\r\n public static defaultProps: Partial = {\r\n min: 1,\r\n decrementGlyphClass: 'fas fa-minus',\r\n incrementGlyphClass: 'fas fa-plus'\r\n };\r\n\r\n private inputRef: React.RefObject = React.createRef();\r\n\r\n constructor(props: IQuantityProps) {\r\n super(props);\r\n this.state = { currentInput: props.currentCount || 1 };\r\n this._onIncrement = this._onIncrement.bind(this);\r\n this._onDecrement = this._onDecrement.bind(this);\r\n this._handleChange = this._handleChange.bind(this);\r\n }\r\n\r\n public render(): JSX.Element {\r\n const glyphMinusClassName: string = `${this.props.decrementGlyphClass!} quantity__controls-glyph`;\r\n const glyphPlusClassName: string = `${this.props.incrementGlyphClass!} quantity__controls-glyph`;\r\n this.setState({\r\n currentInput: this.props.currentCount || 1\r\n })\r\n const disabled = this.state.currentInput === this.props.min;\r\n const incDisabled = this.state.currentInput === this.props.max;\r\n const currentValue = this.state.currentInput;\r\n\r\n return (\r\n <>\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n );\r\n }\r\n\r\n private _onIncrement(): void {\r\n let invokeCallback = false;\r\n let amount:number = this.props.min || 1;\r\n this.setState((prevState: IQuantityState) => {\r\n if (prevState.currentInput + amount <= this.props.max) {\r\n invokeCallback = true;\r\n return { currentInput: prevState.currentInput + amount};\r\n } else {\r\n invokeCallback = false;\r\n return { currentInput: prevState.currentInput };\r\n }\r\n // tslint:disable-next-line:align\r\n }, () => {\r\n invokeCallback && this.props.onChange && this.props.onChange(this.state.currentInput);\r\n });\r\n }\r\n\r\n private _onDecrement(): void {\r\n let invokeCallback = false;\r\n let amount:number = this.props.min || 1;\r\n this.setState((prevState: IQuantityState) => {\r\n if (prevState.currentInput > amount) {\r\n invokeCallback = true;\r\n return { currentInput: prevState.currentInput - amount };\r\n } else {\r\n invokeCallback = false;\r\n return { currentInput: amount };\r\n }\r\n // tslint:disable-next-line:align\r\n }, () => { invokeCallback && this.props.onChange && this.props.onChange(this.state.currentInput); });\r\n }\r\n\r\n private _handleChange(e: React.ChangeEvent): void {\r\n const currentValue = parseInt((e.target.value), 10);\r\n const minValue = this.props.min === undefined ? 1 : this.props.min;\r\n const inputElement = this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\r\n\r\n if (currentValue > this.props.max) {\r\n this.setState({ currentInput: this.props.max },\r\n () => {\r\n debounce(() => {\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n }, 200)();});\r\n } else {\r\n this.setState({ currentInput: currentValue },\r\n () => {\r\n debounce(() => {\r\n if(!isNaN(this.state.currentInput) && !(this.state.currentInput < minValue)) {\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n\r\n if (inputElement) {\r\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\r\n inputElement.setAttribute('value', currentValue.toString());\r\n }\r\n }\r\n }, 200)();});\r\n }\r\n }\r\n\r\n private _validateMin = (): void => {\r\n const minValue = this.props.min === undefined ? 1 : this.props.min;\r\n if(isNaN(this.state.currentInput) || (this.state.currentInput < minValue)) {\r\n this.setState({ currentInput: minValue }, () => { this.props.onChange && this.props.onChange(this.state.currentInput); });\r\n } else {\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n }\r\n }\r\n}","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { observable } from 'mobx';\n\n/**\n * State information related to what is needed to succesfully perform a autosuggest.\n */\nexport class SearchState {\n @observable public searchText?: string;\n\n @observable public defaultBasicSearchUrl?: string;\n\n @observable public searchQueryStringParameter?: string;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddOrderTemplateToCartComponent, ILinesAddedToCartDialogResources } from '@msdyn365-commerce/components';\nimport { getUrlSync, ICoreContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { ProductList, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n getFallbackImageUrl,\n getProductUrlSync,\n OrderTemplate,\n OrderTemplateLine,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateActionMessageState } from '../order-template-list';\n\nexport interface ISingleOrderTemplateProps extends ProductList {\n orderTemplateState: IOrderTemplateActionMessageState;\n name?: string;\n orderTemplate: OrderTemplate;\n context: ICoreContext;\n imageSettings?: IImageSettings;\n enableImageProductLink?: boolean;\n removeFromOrderTemplateListText: string;\n addToBagText: string;\n index: number;\n itemKey: string;\n telemetry: ITelemetry;\n moduleId: string;\n moduleTypeName: string;\n handlers: {\n onRemoveOrderTemplate(id: string): void | undefined;\n onDismiss(): void;\n };\n resources: {\n closeWindowButtonText: string;\n addToCartFailureMessage: string;\n addToCartSuccessMessage: string;\n addToCartProcessMessage: string;\n orderTemplateErrorMessage: string;\n linesAddedToCartDialogResources: ILinesAddedToCartDialogResources;\n };\n telemetryContent?: ITelemetryContent;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n}\n\nexport interface ISingleOrderTemplateViewProps {\n key: string;\n orderTemplateImage: React.ReactNode;\n addToCartButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n orderTemplateStatusMessage?: React.ReactNode;\n orderTemplateName?: React.ReactNode;\n orderTemplateAriaLabel?: string;\n orderTemplateHeaderDivider?: React.ReactNode;\n}\n\nconst _removeItemFromOrderTemplateList = (props: ISingleOrderTemplateProps): void => {\n const { onRemoveOrderTemplate } = props.handlers;\n const { itemKey } = props;\n\n onRemoveOrderTemplate && itemKey && onRemoveOrderTemplate(itemKey);\n};\n\nconst OrderTemplateActions = {\n removeOrderTemplate: _removeItemFromOrderTemplateList\n};\n\n/**\n * Remove order template action.\n * @param input -Single order template props.\n * @returns Set remove order template.\n */\nconst removeOrderTemplateActionHandler = (input: ISingleOrderTemplateProps) => () => {\n OrderTemplateActions.removeOrderTemplate(input);\n};\n\nexport const OrderTemplateRender = (input: ISingleOrderTemplateProps): ISingleOrderTemplateViewProps | null => {\n const {\n Id,\n orderTemplate,\n removeFromOrderTemplateListText,\n orderTemplateState,\n handlers,\n name,\n imageSettings,\n context,\n telemetryContent,\n enableImageProductLink\n } = input;\n\n if (!Id) {\n return null;\n }\n\n const _getOrderTemplatePageUrl = (): string => {\n const url = getUrlSync('ordertemplate', context.actionContext) ?? '';\n const separator = url.includes('?') ? '&' : '?';\n if (Id) {\n return `${url}${separator}id=${Id}`;\n }\n return '';\n };\n\n const { onDismiss } = handlers;\n\n return {\n key: `${Id}-template`,\n orderTemplateImage: _renderOrderTemplateImages(context, orderTemplate.orderTemplateLines, imageSettings, enableImageProductLink),\n orderTemplateAriaLabel: _renderAriaLabel(input),\n orderTemplateName: (\n
    \n \n
    \n {orderTemplate.totalLines}\n {` `}\n line items\n
    \n
    \n
    \n ),\n addToCartButton: (\n
    \n \n
    \n ),\n removeButton: (\n \n ),\n orderTemplateStatusMessage: orderTemplateState && orderTemplateState.isOpen && orderTemplateState.userMessage && (\n
    \n \n {orderTemplateState.userMessage}\n \n
    \n )\n };\n};\n\n/**\n * On image click handler.\n * @param productUrl -Product url value.\n * @returns Assign window location.\n */\nconst onClickHandler = (productUrl: string) => () => {\n window.location.assign(productUrl);\n};\n\nconst _renderOrderTemplateImages = (\n context: ICoreContext,\n orderTemplateLines?: OrderTemplateLine[],\n imageSettings?: IImageSettings,\n enableImageProductLink?: boolean\n): JSX.Element | null => {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=140&h=140&m=6', w: 0, h: 0 },\n lg: { q: 'w=140&h=140&m=6', w: 0, h: 0 },\n xl: { q: 'w=140&h=140&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n if (orderTemplateLines) {\n const count = orderTemplateLines.length < 4 ? orderTemplateLines.length : 4;\n\n return (\n
    \n {orderTemplateLines?.slice(0, count).map(line => {\n const productUrl = line.fullProduct\n ? _updateProductUrlCatalog(line.fullProduct.ProductDetails, context, line?.productListLine?.CatalogId)\n : '';\n\n return (\n \n );\n })}\n
    \n );\n }\n return
    ;\n};\n\n// This method is used to update the product url with the catalogId\nconst _updateProductUrlCatalog = (productDetails: SimpleProduct, context: ICoreContext, catalogId: number | undefined): string => {\n const productUrl = getProductUrlSync(productDetails, context.actionContext, undefined);\n if (!StringExtensions.isNullOrWhitespace(productUrl) && catalogId !== undefined) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${catalogId ?? 0}`);\n return fullUrl.href;\n }\n return productUrl;\n};\n\nconst _renderAriaLabel = (props: ISingleOrderTemplateProps): string => {\n const { name } = props;\n return `${name}`;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { orderTemplateListStatus } from '../order-template-list';\n\nexport interface IOrderTemplateListStatusMessageProps {\n className?: string;\n errorType: orderTemplateListStatus;\n text?: string;\n}\n\nexport const OrderTemplateListStatusMessage: React.FC = ({ className, errorType, text }) => {\n switch (errorType) {\n case 'EMPTY':\n return

    {text}

    ;\n case 'FAILED':\n return

    {text}

    ;\n case 'LOADING':\n default:\n return

    {text}

    ;\n }\n};\n"],"names":["_renderItem","product","quantityLabel","ProductsTableRow","key","selectLine","productLineCatalog","productImage","productPrice","productNumber","addToBagButton","removeButton","productInfo","productUnitOfMeasure","productQuantityView","productQuantity","popUp","isMobile","extraActionsPopup","isMultipleCatalogFeatureEnabledInHq","disabled","disableElement","pointerEvents","opacity","React","Node","Object","assign","className","style","props","OrderTemplateLines","status","statusMessage","heading","ProductsTable","ProductsTableHeading","orderLines","productsStatusMessage","OrderTemplateActions","orderActions","pagination","itemAddedToCartDialog","bulkOrderLineActions","isDetailsDisplayed","detailedProductView","toggleDetailsDisplayed","resources","cancelBtnLabel","productNumberText","productText","productUnitPriceText","productUOMText","productQuantityText","productLineCatalogName","toggleDetails","undefined","Module","addTemplateToBag","renameTemplate","removeTemplate","actionsSplitButton","length","map","Modal","wrapClassName","autoFocus","fade","applicationNode","isOpen","toggle","ModalHeader","ModalBody","ModalFooter","Button","onClick","modalCloseButtonReference","onCancelHandler","isCreateOrderTemplateDialogOpen","setOrderTemplateNameDialogOpen","useState","onCreateButtonClick","color","ref","createOrderTemplateText","OrderTemplateNameDialog","modalOpen","isUpdateDialog","setModalOpen","context","id","data","typeName","dialogStrings","createOrderTemplateDialogResources","onCancel","onSuccess","onOrderTemplateCreated","parentElementRef","OrderTemplateList","constructor","super","_isChannelMultipleCatalogsFeatureEnabled","_this$props$data$feat","this","featureState","result","find","feature","Name","IsEnabled","_onDismiss","setState","_reloadPage","async","window","location","reload","_onRemoveFromOrderTemplateList","productListId","telemetry","orderTemplates","actionContext","request","user","isAuthenticated","token","orderTemplate","p","productList","Id","deleteAsync","callerContext","then","catch","error","warning","itemKey","headerStatusMessage","deleteOrderTemplateFailedText","statusCssString","messageGlyph","state","userMessage","shouldComponentUpdate","nextProps","nextState","render","_heading$text","_heading$tag3","config","emptyOrderTemplateText","createNewTemplateButtonText","orderTemplatesData","orderTemplateListHeading","text","orderTemplateListTitle","_heading$tag","errorProps","_objectSpread","moduleProps","classnames","Spinner","msg","progressNotificationText","Heading","tag","renderView","_heading$tag2","emptyViewProps","OrderTemplateListStatusMessage","errorType","createOrderTemplateButton","CreateNewTemplateButtonComponent","_generateOrderTemplateNameDialogResources","viewProps","templateHeaderStatusMessage","Alert","OrderTemplates","OrderTemplate","_renderOrderTemplateList","orderTemplateHeaderLabel","createOrderTemplateHeader","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","createOrderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","createOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelNewOrderTemplateCreationButtonText","imageSettings","enableImageProductLink","index","currentTemplateProps","orderTemplateState","name","removeFromOrderTemplateListText","addToBagText","addToBagButtonText","moduleId","moduleTypeName","handlers","onRemoveOrderTemplate","onDismiss","closeWindowButtonText","addToCartFailureMessage","addToCartSuccessMessage","addToCartProcessMessage","orderTemplateErrorMessage","linesAddedToCartDialogResources","viewCartButtonText","orderTemplateCloseButtonText","linesAddedToCartHeaderItemsOneText","linesAddedToCartHeaderLinesOneText","linesAddedToCartHeaderLinesFormatText","linesAddedToCartHeaderMessageText","OrderTemplateRender","__decorate","observer","OrderTemplateListView","_renderOrderTemplate","addToCartButton","orderTemplateImage","orderTemplateStatusMessage","orderTemplateName","onApplyHandler","onApplyGiftCard","event","preventDefault","onChangeNumberHandler","onEnterGiftCardNumber","value","target","replace","RegExp","onChangePinHandler","onEnterGiftCardPin","onChangeExpHandler","onEnterGiftCardExp","getForm","options","errorMessage","inputRef","inputPinRef","inputExpRef","giftCardNumber","giftCardPin","giftCardExp","supportExternalGiftCard","additionalFields","balanceCheckButton","giftCardFormLabel","giftCardNumberLabel","giftCardPinLabel","giftCardExpLabel","giftCardAlertLabel","giftCardPinPlaceholderText","giftCardExpPlaceholderText","formProps","onSubmit","label","inputPinLabel","inputExpLabel","alertFieldLabel","alert","role","assertive","includeAlertClass","inputNumber","type","onChange","inputPin","placeholder","inputExp","applyButton","showGiftCardPinInput","showGiftCardExpInput","inputProps","inputNumProps","inputPinProps","inputExpProps","getItem","_ref","giftCard","getFormattedPrice","enteredGiftCardLabel","giftCardAvailableBalanceLabel","balance","Balance","CardCurrencyCode","giftCardLast4Digit","substr","selectedGiftCard","itemProps","SupportedGiftCardType","GiftCardBalanceCheck","_this","isFetchingGiftCard","_isEnabled","app","giftCardSupported","External","shouldBeEnabledForGuest","_getFormattedPrice","price","arguments","currencyCode","cultureFormatter","formatCurrency","_enterGiftCardNumber","_clearError","_enterGiftCardPin","_enterGiftCardExp","_setError","debug","_applyGiftCard","trim","giftCardTypes","_getGiftCardTypes","giftCardType","isPinRequired","IsPinRequired","isExpRequired","IsExpirationDateRequired","tenderTypeId","PaymentMethodId","_getGiftCard","Promise","resolve","input","current","focus","_findGiftcardTenderTypes","tenderTypes","operationId","giftcardType","matchedTenderTypes","Internal","filter","tenderType","OperationId","ConnectorId","Error","TenderTypeId","invalidCardTypeError","noBalanceError","invalidCardInfoError","noCardPinError","noCardExpError","supportedGiftCardType","getTenderTypesAsync","queryResultSettings","internalGiftcardTenderTypes","OPERATIONS","PayGiftCertificate","externalGiftcardTenderTypes","includes","Both","month","Number","parseInt","split","year","getGiftCardAsync","activeGiftCard","emptyInputError","invalidCodeError","resolveCardTypesAsync","CardType","GiftCard","showAdditionalFields","moduleClassName","classname","giftCardBalanceCheckProps","enterGiftCardNumber","enterGiftCardPin","enterGiftCardExp","applyGiftCard","form","item","CONTENT","AddLineToTemplate","query","products","productCatalogs","content","Search","selectedProduct","selectedCatalogId","defaultImageSettings","viewports","xs","q","w","h","lg","xl","lazyload","searchTextInput","addLineButtonRef","_renderSearchForm","searchButtonAriaLabel","searchModalPlaceholderText","selectCatalogTitleText","autoComplete","_onSearchSubmit","ArrayExtensions","hasElements","htmlFor","_onCatalogSelectionChange","_getCatalogNodes","_onInputChange","maxLength","_get","Loading","_getSearchResults","NotFound","ProductList","_onQuantityChangeHandler","selectedQuantity","_onSelectItem","apiSettings","channelId","varianteInput","SelectedVariantInput","RecordId","productVariant","getSelectedVariant","dimensions","_getProductDimensions","selectedProductDimensions","ProductConfiguration","_onBackButtonClickHandler","_highlightSearchTerm","parsedName","unescape","dangerouslySetInnerHTML","__html","_resultCountText","searchResultsCountVerbage","toString","searchResultsCountSubject","_addItemToTemplateHandler","orderTemplateId","catalogId","AddItemToOrderTemplateInput","quantity","DefaultUnitOfMeasure","addItemToOrderTemplate","reloadPage","_toggleModalHandler","payLoad","getPayloadObject","telemetryContent","onTelemetryClick","_getCatalogs","onComponentDidMount","_this$searchTextInput","componentDidMount","onComponentDidUpdate","_this$searchTextInput2","showBackArrow","addLineModalLinkText","backToResultsText","modalProps","ariaLabel","_renderContent","addToTemplateHandler","onQuantityChangeHandler","highlightSearchTerm","searchForm","productProps","clickHandler","renderResultCountText","notFoundSearchErrorNotice","notFoundSearchErrorRedediation","NotFoundComponent","searchErrorMessage","catalogs","getCatalogId","validateCatalogId","productCatalog","isSelected","selected","searchText","searchCriteriaInput","Context","ChannelId","CatalogId","IncludeAttributes","SearchCondition","searchByCriteriaAsync","MasterProductId","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","computed","Dropdown","selectMenu","_onChanged","selectedIndex","dropdownId","selectId","selectedValue","innerText","dropdownList","dropdownName","OrderTemplateQuantity","_validateMin","minValue","min","isNaN","currentInput","currentCount","_handleChange","bind","reaction","glyphMinusClassName","decrementGlyphClass","glyphPlusClassName","incrementGlyphClass","incDisabled","max","currentValue","extraClass","getChangeHandler","amount","_onIncrementalChange","title","decrementButtonAriaLabel","tabIndex","pattern","onBlur","inputQuantityAriaLabel","incrementButtonAriaLabel","updatedQuantity","e","inputElement","HTMLInputElement","_debounce","setAttribute","defaultProps","selectedDimensions","_getDimensionsError","dimensionName","dimensionMissingError","_addToTemplateHandler","isBusy","showAddConfirmation","errors","add","missingDimensions","dimension","DimensionTypeValue","ProductListId","addToTemplateDuplicateError","addToTemplateGenericError","_onQuantityChange","newValue","totalPrice","Price","_updateDimensionValue","productDimensionFull","newValueId","DimensionValues","_onDimensionChanged","_this$state$errors","remainingDimensionsErrors","selection","buttonDisabled","mappedDimensions","DimensionValue","ExtensionProperties","variantProduct","dimensionInput","variantDimensions","availabilityInput","ProductAvailabilitiesForSelectedVariantInput","newAvailableQuantity","getProductAvailabilitiesForSelectedVariant","priceInput","PriceForSelectedVariantInput","getPriceForSelectedVariant","productAvailableQuantity","unitPrice","BasePrice","sort","a","b","_getDropdownName","dimensionType","productDimensionTypeColor","productDimensionTypeConfiguration","productDimensionTypeSize","productDimensionTypeStyle","_product$Name","_product$PrimaryImage","_getFallbackImageUrl","_this$props$context$r","_product$Name2","requestContext","gridSettings","addItemToTemplateText","addLineProductUnitPricePrefix","quantitySelectLabel","addLineProductUnitOfMeasurePrefix","totalPriceLabel","isMultipleCatalogSelect","Image","altText","src","PrimaryImageUrl","fallBackSrc","getFallbackImageUrl","ItemId","OmniChannelMedia","loadFailureBehavior","_formatPrice","_getDimensionsNodes","_getConfirmationMessage","selectedDimensionNames","_dimension$DimensionV","variant","Value","addToTemplateConfirmation","values","join","_this$state$errors2","unshift","toFixed","selectProductButtonText","_generateImageUrl","_props$context$reques","primaryImageSource","generateImageUrl","fallBackImg","ProductSelectButton","buttonText","setBusy","getClickHandler","OrderTemplateBulkActions","isAddDisabled","isRemoveDisabled","addHandler","onAddSelectionToBag","removeHandler","onRemoveSelection","static","selectedLines","_this$props$data$cata","searchInputAriaLabel","backButtonText","addSelectedToBagButtonText","removeSelectedToBagButtonText","addLineProps","isMinifiedView","removeOrderActionHandler","_removeOrderTemplate","onRemoveTemplate","_getOrderTemplateAddToCartDialog","addTemplateToBagButtonText","AddOrderTemplateToCartComponent","addToCartText","_getOrderTemplateRenameControl","renameOrderTemplateDialogStrings","RenameOrderTemplateComponent","onRenameTemplate","renameOrderTemplateButtonText","renameTemplateButtonText","buttonEventReference","ActionsSplitButton","isStatementRequestAdminDropdownOpen","setIsStatementRequestAdminDropdownOpen","renameOrderTemplateDialogOpen","onToggleDropdown1","popoverReference","renderModalPopup","existingOrderTemplate","onOrderTemplateNameCancel","_buttonEventReference","requestStatementDropdownString","Random","Guid","generateGuid","innerRef","Popover","placement","OrderTemplateLineActions","orderTemplateLine","productListLine","LineId","onAddToBag","onRemoveItem","getAddToBag","fullProduct","ProductDetails","getRemoveItem","PopUp","removeFromOrderTemplateLinesText","moreButtonText","viewProductDetailsText","showMobile","setShowMobile","getActionButton","removeButtonClassName","addButtonClassName","getDesktopActionButton","onSelectLineHandler","isChecked","onSelect","checked","ExtraActionsPopup","showActions","setShowActions","actionsContainerClassName","OrderTemplateMobileLineView","_context$request$app2","UnitOfMeasure","fallbackImage","renderProductCatalog","_renderProductImage","renderProductInfo","_renderPrice","_generateQuantity","onChangeHandler","onChangeQuantity","isQuantityDisabledForUpdate","image","_context$actionContex","_context$request","isB2b","catalog","PriceComponent","freePriceText","originalPriceText","currentPriceText","_renderProductError","OOS","outOfStockProductErrorMessage","UNASSORTED","unavailableProductErrorMessage","NONE","_orderTemplateLine$fu","productUrl","Dimensions","_renderProductDimensions","productName","href","dimensionsLine","OrderTemplateLinesStatusMessage","OrderTemplateTableHeading","componentClassName","getOnChange","checkedLines","lines","line","scope","selectAllRowsText","productUnitPrice","productUOM","productActions","_onRemoveSelection","removeSelectedFailureMessage","removeSelectedSuccessMessage","productSelection","productListLines","maxWaitTimeInMilliSeconds","removeProductListLinesAsync","setTimeout","_getOrderTemplatePageUrl","_this$props$data$orde","url","getUrlSync","indexOf","_onAddSelectionToBag","productLine","_productLine$fullProd","_productLine$fullProd2","_productLine$fullProd3","_productLine$fullProd4","_productLine$productL","ProductTypeValue","AdjustedPrice","Quantity","_addItemToBag","_getCurrentUrl","reqContext","MsDyn365","isBrowser","URL","requestUrl","onCloseHandler","isItemAddedToOrderTemplateOpen","_renderItemAddedToCartDialog","_this$props$data$feat2","itemAddedToCartDialogData","ItemAddedToCartDialog","_generateItemAddedToCartDialogResources","onClose","_renderPagination","fullUrl","itemsPerPage","skipCount","_getCurrentPageNumber","totalItems","totalLines","previousText","flipperPrevious","nextText","flipperNext","UncontrolledPagination","paginationAriaLabel","qsp","items","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","_toggleDetailsDisplayed","_updateProductUrlCatalog","productDetails","getProductUrlSync","StringExtensions","isNullOrWhitespace","absoluteUrl","searchParams","set","_changeQuantity","orderTemplateLinesData","orderTemplateLines","orderLineIndex","findIndex","newProductListLine","prevQuantity","_objectWithoutProperties","_excluded","updateProductListLinesAsync","list","newLine","updatedLines","updatedOrderTemplate","ProductListLines","update","ActiveOrderTemplateLinesInput","editOrderTemplateLineQuantityError","cart","maxQuantityLimitText","addedToCartFailureMessage","addProductToCartInput","count","addProductToCart","priceResult","AsyncResult","reject","isMiniCart","addToCartBehavior","substatus","maxQuantityForCartLineItem","_cart$result","_cart$result2","cartLineQuantity","CartLines","ProductId","defaultMessage","_result$errorDetails","errorDetails","LocalizedMessage","message","_removeItemFromOrderTemplateLines","userToken","featureStates","getFeatureState","createGetFeatureStateInput","_featureStates$find","_renameTemplate","_removeTemplate","_orderTemplate$result","newLink","_getViewport","device","Type","innerWidth","sm","md","paginationPreviousText","paginationNextText","_viewport","_updateViewport","isConfirmAddSelectionToBagModalOpen","getTelemetryObject","telemetryPageName","friendlyName","params","isEditor","signInUrl","addEventListener","componentWillUnmount","removeEventListener","emptyOrderTemplateLinesText","errorGettingOrderTemplateLines","ObjectExtensions","isNullOrUndefined","orderTemplateResult","_isFirstPage","_renderOrderTemplateActions","_getOrderTemplateLineActions","_renderProductListHeader","_renderProductList","callbacks","updateQuantity","debounce","updated","_product$fullProduct","_line$fullProduct","onSelectAll","productActionsText","headers","_generateLinesAddedToCartDialogResources","itemAddedToCartHeaderItemOneText","itemAddedToCartHeaderItemFormatText","itemAddedToCartHeaderMessageText","deleteTemplateButtonText","OrderTemplateActionsView","renameOrderTemplateTitleText","skip","selectOneRowText","priceFree","addOrderTemplateItemToBagButtonText","removeItemFromOrderTemplateButtonText","deleteButtonText","_line$fullProduct2","_context$request$app","shouldDisable","OrderTemplateLineView","ProductPrice","observable","action","SuggestionType","ProductListInventoryFilteringOptions","AutoSuggestInput","top","suggestionType","hitPrefix","hitSuffix","getCacheKey","getCacheObjectType","dataCacheType","searchQuery","topResultsCount","_getAutoSuggest","autosuggest","ctx","_ctx$requestContext$a","productSearchCriteria","productListInventoryDisplay","HideOOS","inventoryRefinerValue","getInventorySortableRefinerValue","channelInventoryConfiguration","isInStock","ProductAvailabilitySortableAttributeRecordId","RefinerRecordId","DataTypeValue","AttributeDataType","TrueFalse","LeftValueBoundString","RightValueBoundString","UnitText","RowNumber","Count","RefinerSourceValue","ProductRefinerSource","Attribute","getInventoryConfigurationAsync","Refinement","searchCriteria","ProductSearchCriteria","HitPrefix","HitSuffix","searchSuggestions","getSearchSuggestionsAsync","Paging","Top","ImageUrl","AllSearchResults","createObservableDataAction","autoSuggestPromises","all","inputData","CategorySuggestionsComponent","suggestions","autoSuggestProps","categorySuggestionHeading","reactNodes","push","_assembleNode","_renderTitle","categoryAutoSuggestionHeading","format","shouldShowFullPath","splitValue","pop","contentAction","etext","attribute","getTelemetryAttributes","_generateLink","_getHighlightedText","suggestion","_getCategoryLink","_categoryRefiners$Val","searchPageURL","searchQsp","searchRefiners","queryUrl","categoryRefiners","refiners","SourceValue","Category","refiner","Values","encodedRefiner","JSON","stringify","compressRefiners","formattedText","getRichTextHtml","compressedRefinerKeys","compressedRefiners","forEach","compressedRefiner","refinerKey","FormComponent","searchPlaceholder","hideSearchLabel","handleInputChange","maxChars","disableSubmitSearch","handleCancelSearchChange","ariaLabelCancel","ariaLabelSearch","ariaLabelSubmit","onInputChange","onInputChangeFunction","inputNode","submitBtnNode","cancelBtn","submitBtn","KeywordSuggestionsComponent","formattedLink","LabelComponent","searchLabelClass","searchLabelArialLabel","isSearchFormExpanded","searchtext","searchCollapsedLabel","attributes","ProductSuggestionsComponent","productSuggestionHeading","moduleType","productAutoSuggestionHeading","_item$Value","Value3","DecimalValue","thumbnail","_renderThumbnail","LiProduct","_getLiWrapper","AProduct","_getAWrapper","recid","getProductPageUrlSync","adjustedPrice","basePrice","_props$resources","CustomerContextualPrice","cropFocalRegion","waitTime","_isLoadingNode","loadingText","autoSuggestResultLoadingMessage","size","SpinnerSize","medium","labelPosition","_focusOutTarget","closest","_clearAutoSuggestState","_keyup","keyCode","KeyCodes","Escape","formReference","contains","autoSuggestResultDiv","searchState","defaultBasicSearchUrl","searchQueryStringParameter","createSearchStateInput","_handleInputChange","cancellabelDebounce","cancel","inputSuggestionType","_loadSuggestions","_handleSubmit","searchURL","_appendQueryParams","document","_handleCancelSearchChange","isInitialState","_handleCancelSearchFocused","route","_setAutoSuggestResultCount","autoSuggestResultScreenReaderDiv","ariaLiveRegion","suggestResultString","autoSuggestFoundMessage","emptyResultString","noAutoSuggestionMessage","searchKeywordSuggestClass","searchProductSuggestClass","searchCategorySuggestClass","autoSuggestAriaLabel","isLoadingAutoSuggest","searchInputMaxLength","searchFormClass","_initSuggestionTypes","body","componentDidUpdate","_suggestions$AllSearc","_suggestions$AllSearc2","_suggestions$AllSearc3","cancelBtnAriaLabel","searchBtnAriaLabel","submitBtnAriaLabel","searchplaceholderText","shouldShowFullCategoryPath","keywordSuggestions","Keyword","None","productSuggestions","Product","categorySuggestions","_item$RefinerRecordId","AutoSuggestAriaLabel","AutoSuggestAriaLabelText","AutoSuggest","KeywordSuggest","ProductSuggest","CategorySuggest","SearchForm","FormWrapper","UlKeyword","UlProduct","UlCategory","autosuggestKeyword","autosuggestProduct","autosuggestCategory","handleCancelSearchFocused","isLoadingNode","suggestionTypes","suggestionTypeCriterion","unique","validValues","validSuggestions","loadSuggestionsRequestId","getSearchSuggestionsAction","_getSuggestionType","exception","_getSearchRefiners","_getSearchSuggestions","_updateSearchRefiners","suggestionTypeItem","charAt","toUpperCase","slice","ProductsDataActions","Form","Item","_ref2","_renderForm","_renderKeywordSuggestions","_renderProductSuggestions","_renderCategorySuggestions","CartLineItemFunctions","renderProductDimensions","DimensionStrings","productDimension","colorString","configString","sizeString","DimensionLine","defaultValue","styleString","CartLine","cartLine","DiscountLines","discountLine","OfferId","OfferName","discountStringText","isSalesLine","PeriodicDiscount","DiscountAmountWithoutTax","DiscountAmount","Percentage","actionInput","AttributesForSelectedVariantInput","getAttributesForSelectedVariantAction","res","TextValue","console","log","_props$context3","destructDimensionStrings","fallbackImageUrl","productDimensions","productSKU","renderDisountLines","quantityOnChange","_generateErrorMessage","isB2B","platform","enableDefaultOrderQuantityLimits","primaryImageUrl","TotalAmount","TaxAmount","NetAmountWithoutTax","_generateQuantityandPrice","_props$context2","nodes","isQuantityEditable","IsGiftCardLine","_props$context","_props$data","eoqQuantity","Behavior","MultipleOfQuantity","quantityDisplayString","maxQuantity","currentQuantity","salesLineSkuText","_onIncrement","_onDecrement","invokeCallback","prevState","SearchState","removeOrderTemplateActionHandler","_renderOrderTemplateImages","orderTemplateAriaLabel","_renderAriaLabel","_getUrlSync","separator","onClickHandler","_line$productListLine","_line$fullProduct$Pro","_line$fullProduct$Pro2","_line$fullProduct3","_line$fullProduct4"],"sourceRoot":""}