{"version":3,"file":"static/js/17.aae99a8ecf6976ef1e92.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/gdn-order-template/components/add-line/spinner.tsx?8f4d","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-order-template/components/add-line/add-line.tsx?49a0","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-order-template/components/add-line/dropdown.tsx?8afb","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-order-template/components/add-line/not-found.tsx?ce32","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-order-template/components/common/gdn-order-template-quantity.tsx?aca0","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-order-template/components/add-line/product-configuration.tsx?dcf6","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-order-template/components/add-line/product-list.tsx?0c05","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-order-template/components/gdn-order-template-table-heading.tsx?4430","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-order-template/components/bulk-actions.tsx?e36a","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-order-template/gdn-order-template.tsx?eea6","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-order-template/gdn-order-template.view.tsx?d572","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/cart-icon.view.tsx?3413","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/components/create-order-template.component.tsx?f930","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/order-template-list.view.tsx?212c","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/cart-icon.view.tsx?be14","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/components/create-order-template.component.tsx?d950","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/order-template-list.view.tsx?3b52","webpack://Msdyn365.Commerce.Online/./src/modules/carousel/carousel.tsx?80d4","webpack://Msdyn365.Commerce.Online/./src/modules/carousel/carousel.view.tsx?d82f","webpack://Msdyn365.Commerce.Online/./src/validate-cart.ts?cd50","webpack://Msdyn365.Commerce.Online/./src/Common/get-product.ts?0a21","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/components/flyout-cart-line-items.tsx?f2c4","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/utils/get-products-in-mini-cart.ts?3c15","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/cart-icon.tsx?4ae8","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/cart-icon.view.tsx?f9dd","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/components/order-template-list.tsx?86c4","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/components/orderTemplateList-status-message.tsx?183c","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/components/create-order-template.tsx?ea38","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/order-template-list.tsx?18d0","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/order-template-list.view.tsx?103b","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/spinner.tsx?b423","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/bulk-actions.tsx?dbe8","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/add-line.tsx?5f8a","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/dropdown.tsx?1cba","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/not-found.tsx?392d","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/common/order-template-quantity.tsx?99a1","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/product-configuration.tsx?b256","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/product-list.tsx?4284","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/order-template-actions.tsx?8136","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/order-template-lines.tsx?3703","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/order-template-lines-status-message.tsx?2986","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/order-template-table-heading.tsx?665c","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/order-template.tsx?4ecb","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/order-template.view.tsx?a45e","webpack://Msdyn365.Commerce.Online/./src/modules/product-comparison-preview/product-comparison-preview.tsx?39f6","webpack://Msdyn365.Commerce.Online/./src/modules/product-comparison-preview/product-comparison-preview.view.tsx?28cb","webpack://Msdyn365.Commerce.Online/./src/modules/product-comparison/base/product-specification.tsx?75ed","webpack://Msdyn365.Commerce.Online/./src/modules/product-comparison/base/remove-from-comparison-button.tsx?1d8c","webpack://Msdyn365.Commerce.Online/./src/modules/product-comparison/product-comparison.tsx?4f74","webpack://Msdyn365.Commerce.Online/./src/modules/product-comparison/product-comparison.view.tsx?a0a9","webpack://Msdyn365.Commerce.Online/./src/modules/promo-banner/components/close-button.tsx?063b","webpack://Msdyn365.Commerce.Online/./src/modules/promo-banner/components/links.tsx?2587","webpack://Msdyn365.Commerce.Online/./src/modules/promo-banner/components/text.tsx?782b","webpack://Msdyn365.Commerce.Online/./src/modules/promo-banner/promo-banner.tsx?9ee9","webpack://Msdyn365.Commerce.Online/./src/modules/promo-banner/promo-banner.view.tsx?7f77","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/components/add-to-list/add-to-cart-selected-items.tsx?de21","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/components/quick-order-grid-actions.tsx?ca97","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/components/quick-order-grid-drawer.tsx?8701","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/components/quick-order-grid-form.tsx?5cbb","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/components/quick-order-grid-product.ts?187e","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/components/quick-order-grid-table/components/quick-order-grid-table-header-component.tsx?69b3","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/components/quick-order-grid-table/components/quick-order-grid-table-row-component.tsx?cd92","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/components/quick-order-grid-table/quick-order-grid-table-component.tsx?7cbc","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/quick-order-grid.tsx?fddf","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/components/utilities.ts?1806","webpack://Msdyn365.Commerce.Online/./src/modules/quick-order-grid/quick-order-grid.view.tsx?f941","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/product.component.tsx?fd23","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/search-result-container.view.tsx?6e86"],"sourcesContent":["/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nexport default (props: { className: string; msg?: string }) => (\r\n <>\r\n
\r\n {props?.msg &&
{props?.msg}
}\r\n \r\n);\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\r\nimport { getCatalogId, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { ProductListLine, ProductSearchCriteria, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport { searchByCriteriaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport { ProductCatalog, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport {\r\n addItemToOrderTemplate,\r\n AddItemToOrderTemplateInput,\r\n ArrayExtensions,\r\n getDimensionsForSelectedVariant,\r\n GetDimensionsForSelectedVariantInput,\r\n getSelectedVariant,\r\n SelectedVariantInput,\r\n validateCatalogId\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Modal, ModalBody, ModalHeader, getPayloadObject, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport { get } from 'lodash';\r\nimport { computed } from 'mobx';\r\nimport React from 'react';\r\n\r\nimport { IProductConfigurationState, NotFoundComponent, ProductConfiguration, ProductList } from '.';\r\nimport Spinner from './spinner';\r\n\r\nexport interface IAddLineToTemplateProps {\r\n context: ICoreContext;\r\n resources: IAddLineToTemplateResources;\r\n orderTemplateId: string;\r\n imageSettings?: IImageSettings;\r\n isMultipleCatalogFeatureEnabledInHq: boolean;\r\n catalogs?: ProductCatalog[] | undefined;\r\n telemetryContent?: ITelemetryContent;\r\n}\r\n\r\nexport interface IAddLineToTemplateResources {\r\n addLineModalLinkText: string;\r\n searchButtonAriaLabel: string;\r\n searchInputAriaLabel: string;\r\n searchModalPlaceholderText: string;\r\n selectCatalogTitleText: string;\r\n selectProductButtonText: string;\r\n addItemToTemplateText: string;\r\n addLineProductUnitPricePrefix: string;\r\n backButtonText: string;\r\n decrementButtonAriaLabel: string;\r\n incrementButtonAriaLabel: string;\r\n quantitySelectLabel: string;\r\n addLineProductUnitOfMeasurePrefix: string;\r\n notFoundSearchErrorNotice: string;\r\n notFoundSearchErrorRedediation: string;\r\n searchErrorMessage: string;\r\n productDimensionTypeColor: string;\r\n productDimensionTypeConfiguration: string;\r\n productDimensionTypeSize: string;\r\n productDimensionTypeStyle: string;\r\n searchResultsCountVerbage: string;\r\n searchResultsCountSubject: string;\r\n addToTemplateConfirmation: string;\r\n totalPriceLabel: string;\r\n progressNotificationText: string;\r\n addToTemplateDuplicateError: string;\r\n addToTemplateGenericError: string;\r\n dimensionMissingError: string;\r\n backToResultsText?: string;\r\n}\r\n\r\nenum CONTENT {\r\n Search,\r\n ProductList,\r\n ProductConfiguration,\r\n NotFound,\r\n Error,\r\n Loading\r\n}\r\n\r\ninterface IAddLineToTemplateState {\r\n isOpen: boolean;\r\n query: string;\r\n products: ProductSearchResult[];\r\n productCatalogs: ProductCatalog[] | null;\r\n content: number;\r\n selectedProduct: SimpleProduct | null;\r\n selectedCatalogId: number | undefined;\r\n selectedProductDimensions?: ProductDimensionFull[];\r\n selectedQuantity?: number;\r\n reloadPage?: boolean;\r\n}\r\n\r\n/**\r\n * Add Lines to order template.\r\n */\r\nexport class AddLineToTemplate extends React.Component {\r\n public state: IAddLineToTemplateState = {\r\n isOpen: false,\r\n query: '',\r\n products: [],\r\n productCatalogs: [],\r\n content: CONTENT.Search,\r\n selectedProduct: null,\r\n selectedCatalogId: 0\r\n };\r\n\r\n public defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\r\n lg: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\r\n xl: { q: 'w=64&h=64&m=6', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n public searchTextInput: React.RefObject = React.createRef(); // @TODO public/private\r\n\r\n private readonly addLineButtonRef: React.RefObject = React.createRef();\r\n\r\n constructor(props: IAddLineToTemplateProps) {\r\n super(props);\r\n }\r\n\r\n public onComponentDidMount(): void {\r\n this.searchTextInput.current?.focus();\r\n }\r\n\r\n public componentDidMount(): void {\r\n this._getCatalogs();\r\n }\r\n\r\n public onComponentDidUpdate(): void {\r\n this.searchTextInput.current?.focus();\r\n }\r\n\r\n @computed get showBackArrow(): boolean {\r\n return this.state.content === CONTENT.ProductConfiguration;\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: IAddLineToTemplateProps, nextState: IAddLineToTemplateState): boolean {\r\n if (this.state === nextState && this.props === nextProps) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public render(): JSX.Element {\r\n const {\r\n resources: { addLineModalLinkText, backToResultsText }\r\n } = this.props;\r\n\r\n const modalProps = {\r\n ...this.props,\r\n className: 'msc-add-line-to-template',\r\n toggle: this._toggleModalHandler,\r\n isOpen: this.state.isOpen,\r\n ariaLabel: addLineModalLinkText\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n {this.showBackArrow && (\r\n \r\n )}\r\n {addLineModalLinkText}\r\n \r\n {this._renderContent()}\r\n \r\n \r\n \r\n {addLineModalLinkText}\r\n \r\n \r\n );\r\n }\r\n\r\n private readonly _renderSearchForm = () => {\r\n const {\r\n resources: { searchButtonAriaLabel, searchModalPlaceholderText, selectCatalogTitleText }\r\n } = this.props;\r\n\r\n return (\r\n \r\n {this.state.productCatalogs && ArrayExtensions.hasElements(this.state.productCatalogs) && (\r\n <>\r\n \r\n \r\n {this._getCatalogNodes()}\r\n \r\n \r\n )}\r\n
\r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n private readonly _onSearchSubmit = (event: React.FormEvent): void => {\r\n event.preventDefault();\r\n\r\n const query = get(this, 'searchTextInput.current.value', null);\r\n\r\n if (!query) {\r\n return;\r\n }\r\n\r\n this.setState({\r\n content: CONTENT.Loading\r\n });\r\n\r\n this._getSearchResults(query as string)\r\n .then(result => {\r\n if (result.length === 0) {\r\n this.setState({\r\n products: result,\r\n content: CONTENT.NotFound\r\n });\r\n } else {\r\n this.setState({\r\n products: result,\r\n content: CONTENT.ProductList\r\n });\r\n }\r\n })\r\n .catch(error => {\r\n this.setState({\r\n content: CONTENT.Error\r\n });\r\n });\r\n };\r\n\r\n private readonly _onQuantityChangeHandler = (event: React.ChangeEvent) => {\r\n this.setState({\r\n selectedQuantity: +event.target.value\r\n });\r\n };\r\n\r\n private readonly _onSelectItem = async (product: ProductSearchResult): Promise => {\r\n const {\r\n actionContext,\r\n request: {\r\n apiSettings: { channelId }\r\n }\r\n } = this.props.context;\r\n const varianteInput = new SelectedVariantInput(product.RecordId, channelId, [], undefined, this.props.context.request);\r\n const productVariant = await getSelectedVariant(varianteInput, actionContext);\r\n\r\n if (!productVariant) {\r\n this.props.context.telemetry.error('Error retrieving product variant');\r\n return Promise.resolve([]);\r\n }\r\n\r\n const dimensions = await this._getProductDimensions(product as SimpleProduct);\r\n\r\n this.setState({\r\n selectedProductDimensions: dimensions,\r\n content: CONTENT.ProductConfiguration,\r\n selectedProduct: productVariant\r\n });\r\n\r\n return dimensions;\r\n };\r\n\r\n private readonly _onInputChange = (event: React.ChangeEvent): void => {\r\n this.setState({\r\n query: event.target.value\r\n });\r\n };\r\n\r\n private readonly _onBackButtonClickHandler = (): void => {\r\n this.setState({\r\n content: CONTENT.ProductList\r\n });\r\n };\r\n\r\n private readonly _highlightSearchTerm = (name: string) => {\r\n const parsedName = name && unescape(name.replace(new RegExp(this.state.query, 'i'), '$&'));\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n private readonly _resultCountText = (): string => {\r\n return this.props.resources.searchResultsCountVerbage\r\n .replace('{count}', this.state.products.length.toString())\r\n .replace('{subject}', `${this.props.resources.searchResultsCountSubject}${this.state.products.length > 1 ? 's' : ''}`);\r\n };\r\n\r\n private _renderContent(): React.ReactNode | null {\r\n switch (this.state.content) {\r\n case CONTENT.ProductConfiguration:\r\n const { selectedProduct, selectedProductDimensions } = this.state;\r\n const viewProps = {\r\n ...this.props,\r\n imageSettings: this.props.imageSettings || this.defaultImageSettings,\r\n product: selectedProduct!,\r\n dimensions: selectedProductDimensions!,\r\n addToTemplateHandler: this._addItemToTemplateHandler,\r\n onQuantityChangeHandler: this._onQuantityChangeHandler,\r\n highlightSearchTerm: this._highlightSearchTerm,\r\n searchForm: this._renderSearchForm()\r\n };\r\n\r\n return ;\r\n\r\n case CONTENT.ProductList:\r\n const productProps = {\r\n ...this.props,\r\n imageSettings: this.props.imageSettings || this.defaultImageSettings,\r\n clickHandler: this._onSelectItem,\r\n products: this.state.products,\r\n highlightSearchTerm: this._highlightSearchTerm,\r\n searchForm: this._renderSearchForm(),\r\n renderResultCountText: this._resultCountText\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n\r\n case CONTENT.Loading:\r\n return (\r\n \r\n {this._renderSearchForm()}\r\n \r\n \r\n );\r\n\r\n case CONTENT.NotFound:\r\n const { notFoundSearchErrorNotice, notFoundSearchErrorRedediation } = this.props.resources;\r\n\r\n return (\r\n \r\n

{this._resultCountText()}

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

\r\n {renderResultCountText()}\r\n

\r\n {props.searchForm}\r\n
\r\n {products.map((product: ProductSearchResult, index: number) => {\r\n const { Price, ItemId, Name, PrimaryImageUrl } = product;\r\n const price = formatCurrency(Price.toFixed(2), currencyCode);\r\n const primaryImageSource = generateImageUrl(PrimaryImageUrl ?? '', apiSettings) ?? '';\r\n const fallBackImg = getFallbackImageUrl(ItemId, apiSettings, props.context.request.app?.config?.OmniChannelMedia) ?? '';\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
{ItemId}
\r\n {highlightSearchTerm(Name ?? '')}\r\n
\r\n
\r\n
\r\n {price}\r\n \r\n
\r\n
\r\n );\r\n })}\r\n
\r\n \r\n );\r\n};\r\n\r\ninterface IProductSelectButton {\r\n product: ProductSearchResult;\r\n buttonText: string;\r\n clickHandler(product: ProductSearchResult): Promise;\r\n}\r\n\r\nconst ProductSelectButton = (props: IProductSelectButton) => {\r\n const [isBusy, setBusy] = useState(false);\r\n const { product, buttonText, clickHandler } = props;\r\n const getClickHandler = React.useCallback(async () => {\r\n setBusy(!isBusy);\r\n await clickHandler(product);\r\n setBusy(!isBusy);\r\n }, [clickHandler, isBusy, product]);\r\n\r\n return (\r\n \r\n {buttonText}\r\n \r\n );\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nimport { IOrderTemplateLineViewModel } from '../gdn-order-template';\r\n\r\nexport interface IOrderTemplateTableHeadingProps {\r\n selectAllRowsText?: string;\r\n productNumber: string;\r\n productName: string;\r\n productUnitPrice: string;\r\n productUOM: string;\r\n productQuantity: string;\r\n productActions: string;\r\n lines: IOrderTemplateLineViewModel[];\r\n isMobile: boolean;\r\n clickHandler(isChecked: boolean): void;\r\n productImage?: string;\r\n isMultipleCatalogFeatureEnabledInHq?: boolean;\r\n productLineCatalogName?: string;\r\n}\r\n\r\n/**\r\n * Order Template's table state.\r\n */\r\nexport interface IOrderTemplateTableHeadingState {\r\n isChecked: boolean;\r\n}\r\n\r\nexport interface IOrderTemplateTableShortHeading {\r\n productNumber: string;\r\n productActions: string;\r\n}\r\n\r\n/**\r\n * Order Template's table heading.\r\n */\r\nexport class OrderTemplateTableHeading extends React.PureComponent {\r\n public state: IOrderTemplateTableHeadingState = {\r\n isChecked: false\r\n };\r\n\r\n private readonly componentClassName: string = 'ms-table';\r\n\r\n public static getDerivedStateFromProps(\r\n props: IOrderTemplateTableHeadingProps,\r\n state: IOrderTemplateTableHeadingState\r\n ): IOrderTemplateTableHeadingState {\r\n const checkedLines = props.lines.filter(line => !line.isChecked).length;\r\n let nextState = { ...state };\r\n nextState = { isChecked: checkedLines === 0 };\r\n return nextState;\r\n }\r\n\r\n public getOnChange = () => (event: React.ChangeEvent) => {\r\n this.setState(\r\n {\r\n isChecked: this.state.isChecked\r\n },\r\n () => {\r\n this.props.clickHandler(!this.state.isChecked);\r\n }\r\n );\r\n };\r\n\r\n public render(): JSX.Element {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {!this.props.isMobile && this.props.isMultipleCatalogFeatureEnabledInHq ? (\r\n {this.props.productLineCatalogName}\r\n ) : null}\r\n {!this.props.isMobile ? {this.props.productImage} : null}\r\n {this.props.productNumber}\r\n {!this.props.isMobile ? {this.props.productName} : null}\r\n {!this.props.isMobile ? {this.props.productUnitPrice} : null}\r\n {!this.props.isMobile ? {this.props.productUOM} : null}\r\n {!this.props.isMobile ? {this.props.productQuantity} : null}\r\n {!this.props.isMobile ? {this.props.productActions} : }\r\n \r\n \r\n );\r\n }\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IOrderTemplateLineViewModel } from '../gdn-order-template';\r\nimport { IGdnOrderTemplateData } from '../gdn-order-template.data';\r\nimport { IGdnOrderTemplateProps } from '../gdn-order-template.props.autogenerated';\r\nimport { AddLineToTemplate } from '.';\r\n\r\ninterface IOrderTemplateBulkActionsProps extends IGdnOrderTemplateProps {\r\n orderTemplateId: string;\r\n selectedLines: IOrderTemplateLineViewModel[];\r\n isMinifiedView: boolean;\r\n isMultipleCatalogFeatureEnabledInHq: boolean;\r\n telemetryContent?: ITelemetryContent;\r\n onAddSelectionToBag(): void;\r\n onRemoveSelection(): void;\r\n}\r\n\r\ninterface IOrderTemplateBulkActionsState {\r\n isAddDisabled: boolean;\r\n isRemoveDisabled: boolean;\r\n}\r\n\r\n/**\r\n * Bulk Order Template line actions.\r\n */\r\nexport class OrderTemplateBulkActions extends React.PureComponent {\r\n public state: IOrderTemplateBulkActionsState = {\r\n isAddDisabled: true,\r\n isRemoveDisabled: true\r\n };\r\n\r\n public static getDerivedStateFromProps(\r\n props: IOrderTemplateBulkActionsProps,\r\n state: IOrderTemplateBulkActionsState\r\n ): IOrderTemplateBulkActionsState {\r\n const selectedLines = props.selectedLines.length;\r\n let nextState = { ...state };\r\n nextState = {\r\n isAddDisabled: selectedLines === 0,\r\n isRemoveDisabled: selectedLines === 0\r\n };\r\n return nextState;\r\n }\r\n\r\n public render(): JSX.Element {\r\n const {\r\n addLineModalLinkText,\r\n searchButtonAriaLabel,\r\n searchInputAriaLabel,\r\n searchModalPlaceholderText,\r\n selectCatalogTitleText,\r\n selectProductButtonText,\r\n addItemToTemplateText,\r\n addLineProductUnitPricePrefix,\r\n backButtonText,\r\n decrementButtonAriaLabel,\r\n incrementButtonAriaLabel,\r\n quantitySelectLabel,\r\n addLineProductUnitOfMeasurePrefix,\r\n notFoundSearchErrorNotice,\r\n notFoundSearchErrorRedediation,\r\n searchErrorMessage,\r\n productDimensionTypeColor,\r\n productDimensionTypeConfiguration,\r\n productDimensionTypeSize,\r\n productDimensionTypeStyle,\r\n addSelectedToBagButtonText,\r\n removeSelectedToBagButtonText,\r\n searchResultsCountVerbage,\r\n searchResultsCountSubject,\r\n addToTemplateConfirmation,\r\n totalPriceLabel,\r\n progressNotificationText,\r\n addToTemplateDuplicateError,\r\n addToTemplateGenericError,\r\n dimensionMissingError\r\n } = this.props.resources;\r\n\r\n const addLineProps = {\r\n context: this.props.context,\r\n telemetryContent: this.props.telemetryContent,\r\n resources: {\r\n addLineModalLinkText,\r\n searchButtonAriaLabel,\r\n searchInputAriaLabel,\r\n searchModalPlaceholderText,\r\n selectCatalogTitleText,\r\n selectProductButtonText,\r\n addItemToTemplateText,\r\n addLineProductUnitPricePrefix,\r\n backButtonText,\r\n decrementButtonAriaLabel,\r\n incrementButtonAriaLabel,\r\n quantitySelectLabel,\r\n addLineProductUnitOfMeasurePrefix,\r\n notFoundSearchErrorNotice,\r\n notFoundSearchErrorRedediation,\r\n searchErrorMessage,\r\n productDimensionTypeColor,\r\n productDimensionTypeConfiguration,\r\n productDimensionTypeSize,\r\n productDimensionTypeStyle,\r\n searchResultsCountVerbage,\r\n searchResultsCountSubject,\r\n addToTemplateConfirmation,\r\n totalPriceLabel,\r\n progressNotificationText,\r\n addToTemplateDuplicateError,\r\n addToTemplateGenericError,\r\n dimensionMissingError\r\n },\r\n imageSettings: this.props.config.imageSettings,\r\n orderTemplateId: this.props.orderTemplateId,\r\n isMultipleCatalogFeatureEnabledInHq: this.props.isMultipleCatalogFeatureEnabledInHq,\r\n catalogs: this.props.data.catalogs?.result\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {!this.props.isMinifiedView && addSelectedToBagButtonText}\r\n \r\n \r\n \r\n {!this.props.isMinifiedView && removeSelectedToBagButtonText}\r\n \r\n \r\n );\r\n }\r\n\r\n private readonly addHandler = (event: React.MouseEvent) => {\r\n this.setState({\r\n isAddDisabled: true\r\n });\r\n\r\n this.props.onAddSelectionToBag();\r\n\r\n this.setState({\r\n isAddDisabled: false\r\n });\r\n };\r\n\r\n private readonly removeHandler = (event: React.MouseEvent) => {\r\n this.setState({\r\n isRemoveDisabled: true\r\n });\r\n\r\n this.props.onRemoveSelection();\r\n };\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport {\r\n addOrderTemplateToCartStatus,\r\n // AddOrderTemplateToCartComponent,\r\n IItemAddedToCartDialogData,\r\n IItemAddedToCartDialogResources,\r\n ILinesAddedToCartDialogResources,\r\n IOrderTemplateNameDialogResources,\r\n ItemAddedToCartDialog,\r\n LinesAddedToCartDialog,\r\n RenameOrderTemplateComponent\r\n} from '@msdyn365-commerce/components';\r\nimport MsDyn365, { AsyncResult, getCatalogId, getUrlSync, ICoreContext, IRequestContext } from '@msdyn365-commerce/core';\r\nimport { getCartState, ICartActionResult } from '@msdyn365-commerce/global-state';\r\nimport {\r\n // IQueryResultSettings,\r\n ProductList,\r\n ProductListLine\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { FullProduct } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n deleteAsync,\r\n removeProductListLinesAsync,\r\n updateProductListLinesAsync\r\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\r\nimport { CartLine, FeatureState, QueryResultSettings, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport {\r\n ArrayExtensions,\r\n createGetFeatureStateInput,\r\n getFeatureState,\r\n // GetFullOrderTemplateInput,\r\n getPriceForSelectedVariant,\r\n getProductUrlSync,\r\n ObjectExtensions,\r\n OrderTemplate,\r\n OrderTemplateLine,\r\n PriceForSelectedVariantInput,\r\n // getFullOrderTemplate,\r\n // QueryResultSettingsProxy,\r\n StringExtensions\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Alert,\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n Heading,\r\n IModuleProps,\r\n INodeProps,\r\n IPopupProductsProps,\r\n ITelemetryContent,\r\n PopupProducts,\r\n TelemetryConstant,\r\n UncontrolledPagination\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport debounce from 'lodash/debounce';\r\nimport { action, computed, observable } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport {\r\n ActionsSplitButton,\r\n IOrderTemplateActionsProps,\r\n IOrderTemplateActionsViewProps,\r\n IOrderTemplateLineProps,\r\n IOrderTemplateLineViewProps,\r\n IOrderTemplateTableHeadingProps,\r\n // OrderTemplateActionsView,\r\n OrderTemplateLinesStatusMessage,\r\n OrderTemplateLineView,\r\n OrderTemplateMobileLineView,\r\n OrderTemplateTableHeading\r\n} from '@msdyn365-commerce-modules/order-template';\r\nimport { ActiveOrderTemplateLinesInput } from './actions/get-gdn-order-template';\r\nimport { OrderTemplateBulkActions } from './components/bulk-actions';\r\nimport { IGdnOrderTemplateData } from './gdn-order-template.data';\r\nimport { IGdnOrderTemplateProps, IGdnOrderTemplateResources } from './gdn-order-template.props.autogenerated';\r\nimport Spinner from './components/add-line/spinner';\r\nimport { GetPaginatedOrderTemplateLinesInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPaginatedOrderTemplateLinesAction } from '../../actions/get-paginated-order-template-lines.action';\r\nimport { addCartLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\r\n\r\nexport interface IOrderTemplateLineActionMessageState {\r\n itemKey: string;\r\n userMessage: string;\r\n statusCssString: string;\r\n messageGlyph: string;\r\n isOpen: boolean;\r\n isItemAddedToOrderTemplateOpen: boolean;\r\n isConfirmAddSelectionToBagModalOpen: boolean;\r\n itemAddedToCartDialogData?: IItemAddedToCartDialogData;\r\n productSelection: IOrderTemplateLineViewModel[];\r\n isDetailsDisplayed: boolean;\r\n detailedProductView?: IOrderTemplateLineViewProps;\r\n isQuantityDisabledForUpdate?: boolean;\r\n uploadStatus: addOrderTemplateToCartStatus;\r\n modalOpen: boolean;\r\n addedLinesCount: number;\r\n linesAddedToCartDialogOpen: boolean;\r\n errorMessage: string;\r\n}\r\n\r\nexport interface IDialogStrings {\r\n closeWindowButtonText: string;\r\n addToCartFailureMessage: string;\r\n addToCartSuccessMessage: string;\r\n addToCartProcessMessage: string;\r\n orderTemplateErrorMessage: string;\r\n linesAddedToCartDialogResources: any;\r\n}\r\n\r\nexport type orderTemplateLinesStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\r\ntype GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nexport interface IOrderTemplateViewProps extends IGdnOrderTemplateProps {\r\n OrderTemplateLines: IModuleProps;\r\n callbacks?: IOrderTemplateLinesCallbacks;\r\n status?: orderTemplateLinesStatus;\r\n statusMessage?: React.ReactNode;\r\n heading?: React.ReactNode;\r\n OrderTemplateActions?: INodeProps;\r\n ProductsTable?: INodeProps;\r\n ProductsTableRow?: INodeProps;\r\n ProductsTableHeading?: React.ReactNode;\r\n ProductDetails?: INodeProps;\r\n orderLines?: IOrderTemplateLineViewProps[];\r\n productListLines?: ProductListLine[];\r\n productsStatusMessage?: React.ReactNode;\r\n orderActions?: IOrderTemplateActionsViewProps | null;\r\n resources: IGdnOrderTemplateResources;\r\n pagination?: React.ReactNode;\r\n itemAddedToCartDialog?: React.ReactNode;\r\n bulkOrderLineActions?: React.ReactNode;\r\n isDetailsDisplayed?: boolean;\r\n detailedProduct?: IOrderTemplateLineProps;\r\n detailedProductView?: IOrderTemplateLineViewProps;\r\n productQuantityView?: React.ReactNode;\r\n addButton?: React.ReactNode;\r\n isMobile?: boolean;\r\n toggleDetailsDisplayed?(props: IOrderTemplateLineProps | undefined): void;\r\n}\r\n\r\nexport interface IOrderTemplateLinesCallbacks {\r\n updateQuantity(itemKey: string, quantity: number): void;\r\n}\r\n\r\nexport interface IOrderTemplateLineViewModel extends OrderTemplateLine {\r\n isChecked: boolean;\r\n productQuantityView: React.ReactNode;\r\n}\r\n\r\n/**\r\n *\r\n * OrderTemplateLines component.\r\n * @extends {React.PureComponent, IOrderTemplateLineActionMessageState>}\r\n */\r\n@observer\r\nclass OrderTemplateLines extends React.Component, IOrderTemplateLineActionMessageState> {\r\n private readonly className: string;\r\n\r\n private readonly telemetryContent?: ITelemetryContent;\r\n\r\n @observable\r\n private _viewport: GridSize;\r\n\r\n @computed get isMobile(): boolean {\r\n return this._viewport === 'xs' || this._viewport === 'sm';\r\n }\r\n\r\n constructor(props: IGdnOrderTemplateProps, state: IOrderTemplateLineActionMessageState) {\r\n super(props);\r\n this.className = 'ms-order-template';\r\n this._viewport =\r\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\r\n this._updateViewport = this._updateViewport.bind(this);\r\n\r\n this.state = {\r\n itemKey: '',\r\n userMessage: '',\r\n statusCssString: 'success',\r\n messageGlyph: 'fas fa-check',\r\n isOpen: false,\r\n isItemAddedToOrderTemplateOpen: false,\r\n isConfirmAddSelectionToBagModalOpen: false,\r\n productSelection: [],\r\n isDetailsDisplayed: false,\r\n isQuantityDisabledForUpdate: false,\r\n uploadStatus: 'WAITING',\r\n modalOpen: false,\r\n addedLinesCount: 0,\r\n linesAddedToCartDialogOpen: false,\r\n errorMessage: ''\r\n };\r\n\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n this._updateViewport();\r\n\r\n if (MsDyn365.isBrowser && !this.props.context.request.user.isAuthenticated && !this.props.context.request.params.isEditor) {\r\n window.location.assign(this.props.context.request.user.signInUrl || '/');\r\n }\r\n }\r\n\r\n @action\r\n public async componentDidMount(): Promise {\r\n this.setState({});\r\n const orderTemplate = await this.props.data.orderTemplate;\r\n this.props.config.heading!.text = orderTemplate?.productList.Name || '';\r\n this.setState({\r\n productSelection: orderTemplate?.orderTemplateLines as IOrderTemplateLineViewModel[]\r\n });\r\n\r\n if (MsDyn365.isBrowser) {\r\n window.addEventListener('resize', this._updateViewport);\r\n this._updateViewport();\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.isBrowser) {\r\n window.removeEventListener('resize', this._updateViewport);\r\n }\r\n }\r\n\r\n public shouldComponentUpdate(\r\n nextProps: IGdnOrderTemplateProps,\r\n nextState: IOrderTemplateLineActionMessageState\r\n ): boolean {\r\n if (this.state === nextState && this.props === nextProps) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { heading, className } = this.props.config;\r\n const { emptyOrderTemplateLinesText, errorGettingOrderTemplateLines } = this.props.resources;\r\n const { orderTemplate, cart } = this.props.data;\r\n\r\n if (cart.status === 'LOADING' || ObjectExtensions.isNullOrUndefined(orderTemplate) || orderTemplate.status === 'LOADING') {\r\n const errorProps: IOrderTemplateViewProps = {\r\n ...(this.props as IGdnOrderTemplateProps),\r\n OrderTemplateLines: {\r\n moduleProps: this.props,\r\n className: classnames(this.className, className)\r\n },\r\n status: 'LOADING',\r\n statusMessage: ,\r\n heading: heading && ,\r\n resources: this.props.resources\r\n };\r\n return this.props.renderView(errorProps);\r\n }\r\n\r\n if (cart.status === 'FAILED' || orderTemplate.status === 'FAILED') {\r\n const errorProps: IOrderTemplateViewProps = {\r\n ...(this.props as IGdnOrderTemplateProps),\r\n OrderTemplateLines: {\r\n moduleProps: this.props,\r\n className: classnames(`${this.className}`, className)\r\n },\r\n status: 'FAILED',\r\n statusMessage: ,\r\n heading: heading && ,\r\n resources: this.props.resources\r\n };\r\n\r\n return this.props.renderView(errorProps);\r\n }\r\n\r\n const orderTemplateResult = orderTemplate && orderTemplate.result;\r\n const orderTemplateLines = orderTemplateResult && orderTemplateResult.orderTemplateLines;\r\n\r\n if (!orderTemplateResult || !orderTemplateLines || orderTemplateLines.length === 0) {\r\n if (orderTemplateResult && !this._isFirstPage() && MsDyn365.isBrowser) {\r\n window.location.href = this._getOrderTemplatePageUrl();\r\n return null;\r\n }\r\n\r\n const emptyViewProps: IOrderTemplateViewProps = {\r\n ...(this.props as IGdnOrderTemplateProps),\r\n OrderTemplateLines: {\r\n moduleProps: this.props,\r\n className: classnames(`${this.className}`, className)\r\n },\r\n status: 'EMPTY',\r\n statusMessage: ,\r\n heading: heading && ,\r\n resources: this.props.resources,\r\n orderActions:\r\n orderTemplateResult &&\r\n this._renderOrderTemplateActions(orderTemplateResult, this._isChannelMultipleCatalogsFeatureEnabled()),\r\n bulkOrderLineActions: orderTemplateResult && this._getOrderTemplateLineActions(orderTemplateResult.productList.Id),\r\n OrderTemplateActions: {\r\n className: `${this.className}-action-bar`,\r\n tag: 'div'\r\n }\r\n };\r\n\r\n return this.props.renderView(emptyViewProps);\r\n }\r\n\r\n const viewProps: IOrderTemplateViewProps = {\r\n ...(this.props as IGdnOrderTemplateProps),\r\n OrderTemplateLines: {\r\n moduleProps: this.props,\r\n className: classnames(`${this.className}`, className)\r\n },\r\n status: 'SUCCESS',\r\n productsStatusMessage: this.state.isOpen && (\r\n
\r\n \r\n {this.state.userMessage}\r\n \r\n
\r\n ),\r\n heading: heading && ,\r\n OrderTemplateActions: {\r\n className: `${this.className}-action-bar`,\r\n tag: 'div'\r\n },\r\n ProductsTable: {\r\n className: `${this.className}__table`,\r\n tag: 'table',\r\n role: 'grid'\r\n },\r\n ProductsTableRow: {\r\n className: `${this.className}-table-line`,\r\n tag: 'tr'\r\n },\r\n ProductsTableHeading: this._renderProductListHeader(this.props.resources),\r\n ProductDetails: {\r\n className: `${this.className}-table-line__link`,\r\n tag: 'a'\r\n },\r\n orderLines: this._renderProductList(),\r\n callbacks: { updateQuantity: debounce(this._changeQuantity, 2000) },\r\n orderActions: this._renderOrderTemplateActions(orderTemplateResult, this._isChannelMultipleCatalogsFeatureEnabled()),\r\n pagination: this._renderPagination(),\r\n itemAddedToCartDialog: this._renderItemAddedToCartDialog(),\r\n bulkOrderLineActions: this._getOrderTemplateLineActions(orderTemplateResult.productList.Id),\r\n isDetailsDisplayed: this.state.isDetailsDisplayed,\r\n toggleDetailsDisplayed: this._toggleDetailsDisplayed,\r\n detailedProductView: this.state.detailedProductView,\r\n isMobile: this.isMobile\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n public onSelect(line: IOrderTemplateLineViewModel, isChecked: boolean): void {\r\n line.isChecked = isChecked;\r\n\r\n const updated =\r\n this.state.productSelection.map(product => {\r\n if (product.fullProduct?.ProductDetails.ItemId === line.fullProduct?.ProductDetails.ItemId) {\r\n line.isChecked = isChecked;\r\n }\r\n return product;\r\n }) || [];\r\n\r\n this.setState({\r\n productSelection: updated\r\n });\r\n }\r\n\r\n public onSelectAll(isChecked: boolean): void {\r\n const updated =\r\n this.state.productSelection.map(line => {\r\n line.isChecked = isChecked;\r\n return line;\r\n }) || [];\r\n\r\n this.setState({\r\n productSelection: updated\r\n });\r\n }\r\n\r\n private _renderProductListHeader(resources: IGdnOrderTemplateResources): React.ReactNode {\r\n const {\r\n productImage,\r\n productNumberText,\r\n productText,\r\n productUnitPriceText,\r\n productUOMText,\r\n productQuantityText,\r\n productActionsText,\r\n selectAllRowsText,\r\n productLineCatalogName\r\n } = resources;\r\n const headers: IOrderTemplateTableHeadingProps = {\r\n productImage: productImage,\r\n productNumber: productNumberText,\r\n productName: productText,\r\n productUnitPrice: productUnitPriceText,\r\n productUOM: productUOMText,\r\n productQuantity: productQuantityText,\r\n productActions: productActionsText,\r\n selectAllRowsText,\r\n lines: this.state.productSelection,\r\n isMobile: this.isMobile,\r\n clickHandler: (isChecked: boolean) => {\r\n this.onSelectAll(isChecked);\r\n },\r\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled(),\r\n productLineCatalogName: productLineCatalogName\r\n };\r\n\r\n return ;\r\n }\r\n\r\n private _getOrderTemplateLineActions(orderTemplateId: string): React.ReactNode {\r\n return (\r\n line.isChecked)}\r\n onAddSelectionToBag={this._onAddSelectionToBag}\r\n onRemoveSelection={this._onRemoveSelection}\r\n isMinifiedView={this.isMobile}\r\n isMultipleCatalogFeatureEnabledInHq={this._isChannelMultipleCatalogsFeatureEnabled()}\r\n telemetryContent={this.telemetryContent}\r\n />\r\n );\r\n }\r\n\r\n private _generateLinesAddedToCartDialogResources(): ILinesAddedToCartDialogResources {\r\n return {\r\n viewCartButtonText: this.props.resources.viewCartButtonText,\r\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\r\n linesAddedToCartHeaderItemsOneText: this.props.resources.linesAddedToCartHeaderItemsOneText,\r\n linesAddedToCartHeaderLinesOneText: this.props.resources.linesAddedToCartHeaderLinesOneText,\r\n linesAddedToCartHeaderLinesFormatText: this.props.resources.linesAddedToCartHeaderLinesFormatText,\r\n linesAddedToCartHeaderMessageText: this.props.resources.linesAddedToCartHeaderMessageText\r\n };\r\n }\r\n\r\n private _generateItemAddedToCartDialogResources(): IItemAddedToCartDialogResources {\r\n return {\r\n viewCartButtonText: this.props.resources.viewCartButtonText,\r\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\r\n itemAddedToCartHeaderItemOneText: this.props.resources.itemAddedToCartHeaderItemOneText,\r\n itemAddedToCartHeaderItemFormatText: this.props.resources.itemAddedToCartHeaderItemFormatText,\r\n itemAddedToCartHeaderMessageText: this.props.resources.itemAddedToCartHeaderMessageText,\r\n freePriceText: this.props.resources.freePriceText,\r\n originalPriceText: this.props.resources.originalPriceText,\r\n currentPriceText: this.props.resources.currentPriceText\r\n };\r\n }\r\n\r\n private readonly _isChannelMultipleCatalogsFeatureEnabled = (): boolean => {\r\n let isMultipleCatalogFeatureEnabledInHq = false;\r\n if (this.props.data.featureState) {\r\n isMultipleCatalogFeatureEnabledInHq =\r\n this.props.data.featureState.result?.find(\r\n feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\r\n )?.IsEnabled || false;\r\n }\r\n return isMultipleCatalogFeatureEnabledInHq;\r\n };\r\n\r\n private readonly _onRemoveSelection = (): void => {\r\n const { context, resources } = this.props;\r\n const { telemetry } = context;\r\n const { removeSelectedFailureMessage, removeSelectedSuccessMessage } = resources;\r\n const lines = this.state.productSelection;\r\n const productListLines = lines && lines.length && lines.filter(line => line.isChecked).map(line => line.productListLine);\r\n\r\n if (productListLines && productListLines.length > 0) {\r\n const productListId = productListLines[0].ProductListId;\r\n\r\n const maxWaitTimeInMilliSeconds: number = 1000;\r\n removeProductListLinesAsync({ callerContext: context.actionContext }, productListId!, productListLines)\r\n .then(async () => {\r\n this.setState({\r\n userMessage: removeSelectedSuccessMessage,\r\n statusCssString: 'success',\r\n messageGlyph: 'fas fa-check',\r\n isOpen: true\r\n });\r\n // eslint-disable-next-line no-promise-executor-return -- fix\r\n await new Promise(resolve => setTimeout(resolve, maxWaitTimeInMilliSeconds));\r\n window.location.reload();\r\n })\r\n .catch(error => {\r\n telemetry.warning('[order-template-lines] Unable remove items from the order template lines');\r\n telemetry.error(error);\r\n this.setState({\r\n userMessage: removeSelectedFailureMessage,\r\n statusCssString: 'success',\r\n messageGlyph: 'fas fa-check',\r\n isOpen: true\r\n });\r\n });\r\n }\r\n };\r\n\r\n private readonly _getOrderTemplatePageUrl = (): string => {\r\n let url = getUrlSync('ordertemplate', this.props.context.actionContext) || '';\r\n url = url.includes('?') ? url.substr(0, url.indexOf('?')) : url;\r\n if (this.props.data.orderTemplate?.result?.productList.Id) {\r\n return `${url}?id=${this.props.data.orderTemplate.result.productList.Id}`;\r\n }\r\n return '';\r\n };\r\n\r\n private readonly _onAddSelectionToBag = async (): Promise => {\r\n const lines = this.state.productSelection;\r\n const selectedLines = lines.filter(line => line.isChecked);\r\n if (selectedLines.length > 0) {\r\n for (const productLine of selectedLines) {\r\n const itemKey = productLine.fullProduct?.ProductDetails.ItemId ?? '';\r\n const product = productLine.fullProduct?.ProductDetails ?? {\r\n RecordId: 0,\r\n ProductTypeValue: 0,\r\n BasePrice: 0,\r\n Price: 0,\r\n AdjustedPrice: 0\r\n };\r\n const quantity = productLine.productListLine.Quantity ?? 0;\r\n if (this._isChannelMultipleCatalogsFeatureEnabled()) {\r\n const catalogId = productLine.productListLine.CatalogId;\r\n await this._addItemToBag(product, quantity, itemKey, catalogId);\r\n } else {\r\n await this._addItemToBag(product, quantity, itemKey);\r\n }\r\n }\r\n }\r\n return Promise.resolve(void 0);\r\n };\r\n\r\n private _renderOrderTemplateActions(\r\n orderTemplate: OrderTemplate,\r\n isMultipleCatalogFeatureEnabledInHq: boolean\r\n ): IOrderTemplateActionsViewProps {\r\n const { id, typeName, context, resources } = this.props;\r\n const {\r\n addTemplateToBagButtonText,\r\n renameTemplateButtonText,\r\n deleteTemplateButtonText,\r\n closeWindowButtonText,\r\n addToCartFailureMessage,\r\n addToCartSuccessMessage,\r\n addToCartProcessMessage,\r\n orderTemplateErrorMessage\r\n } = resources;\r\n\r\n const orderTemplateActions: IOrderTemplateActionsProps = {\r\n data: { orderTemplate },\r\n id,\r\n typeName,\r\n context,\r\n telemetryContent: this.telemetryContent,\r\n handlers: {\r\n onRenameTemplate: this._renameTemplate,\r\n onRemoveTemplate: this._removeTemplate\r\n },\r\n isMultipleCatalogFeatureEnabledInHq,\r\n renameOrderTemplateDialogStrings: this._generateOrderTemplateNameDialogResources(resources),\r\n resources: {\r\n addTemplateToBagButtonText,\r\n renameTemplateButtonText,\r\n deleteTemplateButtonText,\r\n addToCartFailureMessage,\r\n addToCartSuccessMessage,\r\n addToCartProcessMessage,\r\n closeWindowButtonText,\r\n orderTemplateErrorMessage,\r\n linesAddedToCartDialogResources: this._generateLinesAddedToCartDialogResources()\r\n }\r\n };\r\n\r\n return this._OrderTemplateActionsView(orderTemplateActions);\r\n }\r\n\r\n private _OrderTemplateActionsView = (props: IOrderTemplateActionsProps): IOrderTemplateActionsViewProps => {\r\n const { resources, isMultipleCatalogFeatureEnabledInHq } = props;\r\n const { deleteTemplateButtonText } = resources;\r\n\r\n return {\r\n addTemplateToBag: this._getOrderTemplateAddToCartDialog(props),\r\n renameTemplate: !isMultipleCatalogFeatureEnabledInHq && _getOrderTemplateRenameControl(props),\r\n removeTemplate: !isMultipleCatalogFeatureEnabledInHq && (\r\n \r\n ),\r\n actionsSplitButton: isMultipleCatalogFeatureEnabledInHq && \r\n };\r\n };\r\n\r\n private _removeOrderActionHandler = (props: IOrderTemplateActionsProps) => () => {\r\n this._removeOrderTemplate(props);\r\n };\r\n\r\n private _removeOrderTemplate = (props: IOrderTemplateActionsProps): void => {\r\n const {\r\n data: { orderTemplate },\r\n handlers\r\n } = props;\r\n const { onRemoveTemplate } = handlers;\r\n\r\n if (onRemoveTemplate) {\r\n onRemoveTemplate(orderTemplate.productList.Id);\r\n }\r\n };\r\n\r\n private _generateOrderTemplateNameDialogResources(resources: IGdnOrderTemplateResources): IOrderTemplateNameDialogResources {\r\n return {\r\n orderTemplateHeaderLabel: resources.renameOrderTemplateTitleText,\r\n orderTemplateTitleLabel: resources.orderTemplateTitle,\r\n orderTemplateNameAriaLabel: resources.orderTemplateTitle,\r\n orderTemplateDescription: '',\r\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\r\n orderTemplateButtonLabel: resources.renameOrderTemplateButtonText,\r\n orderTemplateCancelButtonLabel: resources.cancelBtnLabel\r\n };\r\n }\r\n\r\n private readonly _getCurrentUrl = (reqContext: IRequestContext): URL => {\r\n if (MsDyn365.isBrowser) {\r\n return new URL(window.location.href);\r\n }\r\n return new URL(reqContext.url.requestUrl.href);\r\n };\r\n\r\n /**\r\n * On close handler.\r\n */\r\n private readonly onCloseHandler = () => {\r\n this.setState({\r\n itemKey: this.state.itemKey,\r\n userMessage: this.state.userMessage,\r\n statusCssString: this.state.statusCssString,\r\n messageGlyph: this.state.messageGlyph,\r\n isOpen: this.state.isOpen,\r\n isItemAddedToOrderTemplateOpen: false\r\n });\r\n };\r\n\r\n private readonly _renderItemAddedToCartDialog = (): React.ReactNode | null => {\r\n if (!this.state.itemAddedToCartDialogData) {\r\n return null;\r\n }\r\n const isMultipleCatalogFeatureEnabledInHq =\r\n this.props.data.featureState?.result?.find(feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature')\r\n ?.IsEnabled || false;\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n private _isFirstPage(): boolean {\r\n return this._getCurrentPageNumber() === 0;\r\n }\r\n\r\n private _getCurrentPageNumber(): number {\r\n const itemsPerPage = this.props.config.itemsPerPage || 50;\r\n return (this.props.context.request.query && +this.props.context.request.query.skip / itemsPerPage) || 0;\r\n }\r\n\r\n private readonly _renderPagination = (): React.ReactNode | null => {\r\n const { config, context, data, resources } = this.props;\r\n const orderTemplate = data && data.orderTemplate && data.orderTemplate.result;\r\n if (!orderTemplate) {\r\n return null;\r\n }\r\n\r\n const fullUrl = this._getCurrentUrl(context.request);\r\n const itemsPerPage = config.itemsPerPage || 50;\r\n const currentPageNumber = this._getCurrentPageNumber();\r\n const skipCount = currentPageNumber * itemsPerPage;\r\n const totalItems = orderTemplate && orderTemplate.totalLines;\r\n const previousText = resources.flipperPrevious;\r\n const nextText = resources.flipperNext;\r\n\r\n if (totalItems <= itemsPerPage) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n private _renderProductList(): IOrderTemplateLineViewProps[] {\r\n const {\r\n selectOneRowText,\r\n moreButtonText,\r\n viewProductDetailsText,\r\n priceFree,\r\n originalPriceText,\r\n currentPriceText,\r\n addOrderTemplateItemToBagButtonText,\r\n removeItemFromOrderTemplateButtonText,\r\n productDimensionTypeColor,\r\n productDimensionTypeSize,\r\n productDimensionTypeStyle,\r\n inputQuantityAriaLabel,\r\n deleteButtonText,\r\n incrementButtonAriaLabel,\r\n decrementButtonAriaLabel,\r\n unavailableProductErrorMessage,\r\n outOfStockProductErrorMessage\r\n } = this.props.resources;\r\n\r\n const { context, telemetry, data } = this.props;\r\n const { catalogs } = data;\r\n const { imageSettings } = this.props.config;\r\n\r\n return this.state.productSelection.map((line, index) => {\r\n const currentProductProps: IOrderTemplateLineProps = {\r\n orderTemplateLine: line,\r\n productListLine: line.productListLine,\r\n price: line.fullProduct?.ProductPrice,\r\n error: line.error,\r\n shouldDisable: line.shouldDisable,\r\n context,\r\n isQuantityDisabledForUpdate: this.state.isQuantityDisabledForUpdate,\r\n productUrl: line.fullProduct\r\n ? this._updateProductUrlCatalog(line.fullProduct.ProductDetails, context, line.productListLine.CatalogId)\r\n : '',\r\n imageSettings,\r\n telemetry,\r\n moduleId: this.props.id,\r\n moduleTypeName: this.props.typeName,\r\n quantity: line.productListLine.Quantity!,\r\n handlers: {\r\n onAddToBag: this._addItemToBag,\r\n onRemoveItem: this._removeItemFromOrderTemplateLines,\r\n onChangeQuantity: this._changeQuantity,\r\n onSelect: this.onSelect.bind(this)\r\n },\r\n resources: {\r\n selectOneRowText,\r\n moreButtonText,\r\n viewProductDetailsText,\r\n productDimensionTypeColor,\r\n productDimensionTypeSize,\r\n productDimensionTypeStyle,\r\n freePriceText: priceFree,\r\n originalPriceText,\r\n currentPriceText,\r\n inputQuantityAriaLabel,\r\n removeFromOrderTemplateLinesText: removeItemFromOrderTemplateButtonText,\r\n addToBagButtonText: addOrderTemplateItemToBagButtonText,\r\n deleteButtonText,\r\n incrementButtonAriaLabel,\r\n decrementButtonAriaLabel,\r\n unavailableProductErrorMessage,\r\n outOfStockProductErrorMessage\r\n },\r\n index,\r\n isMobile: this.isMobile,\r\n toggleDetailsDisplayed: this._toggleDetailsDisplayed,\r\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled(),\r\n catalogs: catalogs && catalogs.result\r\n };\r\n\r\n return OrderTemplateLineView(currentProductProps)!;\r\n });\r\n }\r\n\r\n private readonly _toggleDetailsDisplayed = (props: IOrderTemplateLineProps): void => {\r\n let state = {\r\n isDetailsDisplayed: !this.state.isDetailsDisplayed\r\n };\r\n if (props) {\r\n state = {\r\n ...state,\r\n ...{\r\n detailedProductView: OrderTemplateMobileLineView(props)\r\n }\r\n };\r\n }\r\n this.setState(state);\r\n };\r\n\r\n // This method is used to update the product url with the catalogId\r\n private readonly _updateProductUrlCatalog = (\r\n productDetails: SimpleProduct,\r\n context: ICoreContext,\r\n catalogId: number | undefined\r\n ): string => {\r\n const productUrl = getProductUrlSync(productDetails, context.actionContext, undefined);\r\n if (!StringExtensions.isNullOrWhitespace(productUrl) && catalogId !== undefined) {\r\n const absoluteUrl = new URL(productUrl, window.location.href);\r\n absoluteUrl.searchParams.set('catalogid', `${catalogId ?? 0}`);\r\n return absoluteUrl.href;\r\n }\r\n\r\n return productUrl;\r\n };\r\n\r\n // Dismiss alert when addingToCart/removeItem\r\n private readonly _onDismiss = () => {\r\n this.setState({\r\n isOpen: false\r\n });\r\n };\r\n\r\n private readonly _changeQuantity = async (itemKey: string, quantity: number, props?: IOrderTemplateLineProps) => {\r\n const { context, data, telemetry, config, resources } = this.props;\r\n const { orderTemplate } = data;\r\n\r\n if (context) {\r\n if (orderTemplate?.result) {\r\n const orderTemplateLinesData = orderTemplate.result.orderTemplateLines;\r\n if (orderTemplateLinesData) {\r\n const orderLineIndex = orderTemplateLinesData.findIndex(\r\n (lines: OrderTemplateLine) => lines.productListLine.LineId === itemKey\r\n );\r\n const newProductListLine = { ...orderTemplateLinesData[orderLineIndex] };\r\n if (orderTemplateLinesData[orderLineIndex].productListLine.Quantity === quantity) {\r\n return;\r\n }\r\n const prevQuantity = newProductListLine.productListLine.Quantity;\r\n newProductListLine.productListLine.Quantity = quantity;\r\n const { fullProduct, ...line } = newProductListLine;\r\n\r\n // Update mobile modal\r\n if (props) {\r\n props.quantity = quantity;\r\n this.setState({\r\n detailedProductView: OrderTemplateMobileLineView(props)\r\n });\r\n }\r\n\r\n this.setState({\r\n isQuantityDisabledForUpdate: true\r\n });\r\n\r\n updateProductListLinesAsync({ callerContext: context.actionContext }, orderTemplate.result.productList.Id, [\r\n line.productListLine\r\n ])\r\n .then(list => {\r\n this.setState({\r\n itemKey,\r\n userMessage: '',\r\n statusCssString: 'success',\r\n messageGlyph: 'fas fa-check',\r\n isQuantityDisabledForUpdate: false,\r\n isOpen: false\r\n });\r\n if (list) {\r\n const newLine = list.find(lines => lines.LineId === itemKey);\r\n orderTemplateLinesData[orderLineIndex].productListLine = newLine!;\r\n const updatedLines = [...orderTemplateLinesData];\r\n updatedLines[orderLineIndex] = { fullProduct, productListLine: newLine! };\r\n const updatedOrderTemplate = { ...orderTemplate.result, ProductListLines: updatedLines };\r\n context.actionContext.update(\r\n new ActiveOrderTemplateLinesInput(context.actionContext.requestContext, config),\r\n updatedOrderTemplate\r\n );\r\n }\r\n })\r\n .catch(error => {\r\n telemetry.warning('[order-template-lines] Unable to update product quantity.');\r\n telemetry.error(error);\r\n const userMessage = resources.editOrderTemplateLineQuantityError;\r\n if (props) {\r\n props && (props.productListLine.Quantity = prevQuantity);\r\n this.setState({\r\n itemKey,\r\n userMessage,\r\n statusCssString: 'danger',\r\n messageGlyph: 'fas fa-exclamation-triangle',\r\n isQuantityDisabledForUpdate: false,\r\n isOpen: true,\r\n detailedProductView: OrderTemplateMobileLineView(props)\r\n });\r\n } else {\r\n newProductListLine.productListLine.Quantity = prevQuantity;\r\n this.setState({\r\n itemKey,\r\n userMessage,\r\n statusCssString: 'danger',\r\n messageGlyph: 'fas fa-exclamation-triangle',\r\n isQuantityDisabledForUpdate: false,\r\n isOpen: true\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n private readonly _addItemToBag = async (\r\n product: SimpleProduct,\r\n quantity: number,\r\n itemKey: string,\r\n catalogId?: number | undefined\r\n ): Promise => {\r\n const { context, data, resources, telemetry } = this.props;\r\n const { cart } = data;\r\n const { maxQuantityLimitText, addedToCartFailureMessage } = resources;\r\n\r\n if (context) {\r\n if (cart.result) {\r\n const addProductToCartInput = {\r\n product,\r\n count: quantity,\r\n catalogId\r\n };\r\n\r\n await cart.result\r\n .addProductToCart(addProductToCartInput)\r\n .then((result: ICartActionResult) => {\r\n if (result.status === 'SUCCESS') {\r\n return getPriceForSelectedVariant(\r\n new PriceForSelectedVariantInput(\r\n product.RecordId,\r\n this.props.context.actionContext.requestContext.apiSettings.channelId,\r\n product\r\n ),\r\n this.props.context.actionContext\r\n ).then(priceResult => {\r\n if (!priceResult) {\r\n return AsyncResult.reject('Failed to retrieve product price');\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- read config file.\r\n const isMiniCart = context.app.config.addToCartBehavior === 'showMiniCart';\r\n this.setState({\r\n itemKey,\r\n userMessage: '',\r\n statusCssString: 'success',\r\n messageGlyph: 'fas fa-check',\r\n isOpen: false,\r\n isItemAddedToOrderTemplateOpen: !isMiniCart,\r\n itemAddedToCartDialogData: {\r\n product,\r\n productPrice: priceResult,\r\n quantity\r\n },\r\n isDetailsDisplayed: false\r\n });\r\n return AsyncResult.resolve();\r\n });\r\n } else {\r\n switch (result.substatus) {\r\n case 'MAXQUANTITY':\r\n if (context.app.config.maxQuantityForCartLineItem) {\r\n const cartLineQuantity: number | undefined =\r\n cart.result?.cart.CartLines &&\r\n cart.result?.cart.CartLines.find(result => result.ProductId === product.RecordId)?.Quantity;\r\n const defaultMessage = `You can only add ${context.app.config.maxQuantityForCartLineItem} of this item to your shopping bag`;\r\n this.setState({\r\n itemKey,\r\n userMessage:\r\n cartLineQuantity !== undefined\r\n ? maxQuantityLimitText\r\n .replace('{curQuantity}', cartLineQuantity.toString())\r\n .replace(\r\n '{maxQuantity}',\r\n context.app.config.maxQuantityForCartLineItem.toString()\r\n ) || defaultMessage\r\n : defaultMessage,\r\n statusCssString: 'danger',\r\n messageGlyph: 'fas fa-exclamation-triangle',\r\n isOpen: true\r\n });\r\n return AsyncResult.resolve();\r\n } else {\r\n const defaultMessage = `Max quantity for cart line item is undefined. Please define in configuration settings.`;\r\n this.setState({\r\n itemKey,\r\n userMessage: defaultMessage,\r\n statusCssString: 'danger',\r\n messageGlyph: 'fas fa-exclamation-triangle',\r\n isOpen: true\r\n });\r\n return AsyncResult.resolve();\r\n }\r\n case 'INVOICEINCART': {\r\n this.setState({\r\n itemKey,\r\n userMessage: result.errorDetails?.LocalizedMessage || addedToCartFailureMessage,\r\n statusCssString: 'danger',\r\n messageGlyph: 'fas fa-exclamation-triangle',\r\n isOpen: true\r\n });\r\n return AsyncResult.resolve();\r\n }\r\n default:\r\n telemetry.debug('[order-template-lines] Unable to Update Cart Line from the order template lines');\r\n this.setState({\r\n itemKey,\r\n userMessage: addedToCartFailureMessage,\r\n statusCssString: 'danger',\r\n messageGlyph: 'fas fa-exclamation-triangle',\r\n isOpen: true\r\n });\r\n return AsyncResult.resolve();\r\n }\r\n }\r\n })\r\n .catch((error: Error) => {\r\n telemetry.warning(error.message);\r\n telemetry.debug('[order-template-lines] Error trying to Update Cart Line from the order template lines');\r\n if (StringExtensions.isNullOrWhitespace(error.message)) {\r\n this.setState({\r\n itemKey,\r\n userMessage: error.message,\r\n statusCssString: 'danger',\r\n messageGlyph: 'fas fa-exclamation-triangle',\r\n isOpen: true\r\n });\r\n } else {\r\n this.setState({\r\n itemKey,\r\n userMessage: addedToCartFailureMessage,\r\n statusCssString: 'danger',\r\n messageGlyph: 'fas fa-exclamation-triangle',\r\n isOpen: true\r\n });\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n private readonly _removeItemFromOrderTemplateLines = async (line: IOrderTemplateLineViewModel) => {\r\n const { context, data, telemetry } = this.props;\r\n const { orderTemplate } = data;\r\n\r\n if (context && context.actionContext) {\r\n const maxWaitTimeInMilliSeconds: number = 1000;\r\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\r\n if (userToken && orderTemplate?.result && line) {\r\n const featureStates = await getFeatureState(createGetFeatureStateInput(context.actionContext), context.actionContext);\r\n let isMultipleCatalogFeatureEnabledInHq = false;\r\n if (ArrayExtensions.hasElements(featureStates)) {\r\n isMultipleCatalogFeatureEnabledInHq =\r\n featureStates.find(\r\n (featureState: FeatureState) => featureState.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\r\n )?.IsEnabled || false;\r\n }\r\n const catalogId = getCatalogId(context.actionContext.requestContext);\r\n if (isMultipleCatalogFeatureEnabledInHq) {\r\n line.productListLine.CatalogId = catalogId;\r\n }\r\n removeProductListLinesAsync({ callerContext: context.actionContext }, line.productListLine.ProductListId!, [\r\n line.productListLine\r\n ])\r\n .then(async () => {\r\n // eslint-disable-next-line no-promise-executor-return -- fix\r\n await new Promise(resolve => setTimeout(resolve, maxWaitTimeInMilliSeconds));\r\n window.location.reload();\r\n })\r\n .catch(error => {\r\n telemetry.warning('[order-template-lines] Unable remove items from the order template lines');\r\n telemetry.error(error);\r\n });\r\n } else {\r\n telemetry.warning(\r\n '[order-template-lines] Unable remove items from the order template lines user token or lineItemID was not found'\r\n );\r\n }\r\n }\r\n };\r\n\r\n private readonly _renameTemplate = async (_template: ProductList): Promise => {\r\n window.location.reload();\r\n return Promise.resolve();\r\n };\r\n\r\n /**\r\n * Handles the process of adding items from an order template to the shopping cart.\r\n *\r\n * This method retrieves all items in the specified order template in paginated chunks.\r\n * It then formats each item as a `CartLine` and adds these lines to the current shopping cart.\r\n * To optimize network calls, it processes items in batches (based on `chunkCount`).\r\n * If the cart addition encounters an error, it logs the issue to telemetry and throws the validation results.\r\n * Finally, the method refreshes the cart to reflect the newly added items.\r\n *\r\n * @param props - Properties containing order template data, context, and flags for feature configurations.\r\n */\r\n\r\n private handleAddToCart = async (props: IOrderTemplateActionsProps) => {\r\n const {\r\n data: { orderTemplate },\r\n context,\r\n isMultipleCatalogFeatureEnabledInHq\r\n } = props;\r\n\r\n const chunkCount = 1000;\r\n const queryResultSettings: QueryResultSettings = {\r\n Paging: {\r\n Top: chunkCount,\r\n Skip: 0\r\n }\r\n };\r\n\r\n const getPaginatedOrderTemplateLinesInput = new GetPaginatedOrderTemplateLinesInput(\r\n orderTemplate.productList.Id,\r\n queryResultSettings\r\n );\r\n\r\n let orderTemplateLines = await getPaginatedOrderTemplateLinesAction(getPaginatedOrderTemplateLinesInput, context.actionContext);\r\n\r\n let addedCartLines: CartLine[] = [];\r\n const cartState = await getCartState(props.context.actionContext);\r\n const cart = cartState.cart;\r\n const hasInvoiceInCart = cart?.CartLines?.find(cartLine => cartLine.IsInvoiceLine === true);\r\n if (hasInvoiceInCart) {\r\n this.setState({ errorMessage: 'Can not add items to a cart containing an invoice.', uploadStatus: 'FAILED' });\r\n } else {\r\n this.setState({ addedLinesCount: 0 });\r\n for (let skip = chunkCount; orderTemplateLines.lines.length > 0; skip += chunkCount) {\r\n const cartLines: CartLine[] = orderTemplateLines.lines.map(productLine => {\r\n const cartLine: CartLine = {\r\n ItemId: productLine.fullProduct?.ProductDetails.ItemId,\r\n ProductId: productLine.productListLine.ProductId,\r\n Quantity: productLine.productListLine.Quantity,\r\n TrackingId: '',\r\n UnitOfMeasureSymbol: productLine.productListLine.UnitOfMeasure,\r\n ...(isMultipleCatalogFeatureEnabledInHq && { catalogId: productLine.productListLine.CatalogId })\r\n };\r\n return cartLine;\r\n });\r\n await addCartLinesAsync(\r\n { callerContext: context.actionContext },\r\n cartState.cart.Id,\r\n cartLines,\r\n cartState.cart.Version\r\n ).catch(error => {\r\n context.telemetry.trace(error.data?.ValidationResults);\r\n context.telemetry.trace('Unable to add order template to cart.');\r\n throw error.data?.ValidationResults;\r\n });\r\n this.setState(prevState => ({\r\n addedLinesCount: prevState.addedLinesCount + cartLines.length\r\n }));\r\n addedCartLines = addedCartLines.concat(cartLines);\r\n getPaginatedOrderTemplateLinesInput.queryResultSettings.Paging!.Skip = skip;\r\n orderTemplateLines = await getPaginatedOrderTemplateLinesAction(getPaginatedOrderTemplateLinesInput, context.actionContext);\r\n }\r\n await cartState.refreshCart({});\r\n this.setModalOpen(false);\r\n }\r\n };\r\n\r\n /**\r\n * Renders the \"Add Order Template to Cart\" dialog and button component.\r\n *\r\n * This method generates a modal popup with a button that allows users to add all items from an order template to the cart.\r\n * It includes logic to handle various statuses of the add-to-cart process, such as loading, success, and failure, with corresponding\r\n * messages shown in the modal.\r\n *\r\n * The button is disabled if there are no items in the order template, and when clicked, it invokes the `handleAddToCart` method to\r\n * process adding items to the cart. If the operation succeeds, the dialog opens to show the success message. If it fails, an error\r\n * message is displayed in the modal.\r\n *\r\n * @param props - Properties required for rendering the dialog and button, including text resources, context, and telemetry content.\r\n *\r\n * @returns The React node containing the modal dialog, add-to-cart button, and a dialog showing the number of lines added to the cart.\r\n */\r\n\r\n public _getOrderTemplateAddToCartDialog = (props: IOrderTemplateActionsProps): React.ReactNode => {\r\n const {\r\n data: { orderTemplate },\r\n typeName,\r\n id,\r\n context,\r\n telemetryContent,\r\n resources,\r\n isMultipleCatalogFeatureEnabledInHq\r\n } = props;\r\n\r\n const {\r\n addTemplateToBagButtonText,\r\n closeWindowButtonText,\r\n addToCartFailureMessage,\r\n addToCartSuccessMessage,\r\n addToCartProcessMessage,\r\n orderTemplateErrorMessage,\r\n linesAddedToCartDialogResources\r\n } = resources;\r\n\r\n const dialogStrings = {\r\n closeWindowButtonText,\r\n addToCartFailureMessage,\r\n addToCartSuccessMessage,\r\n addToCartProcessMessage,\r\n orderTemplateErrorMessage,\r\n linesAddedToCartDialogResources\r\n };\r\n\r\n const closeLinesAddedToCartDialog = () => {\r\n this.setState({ errorMessage: '', linesAddedToCartDialogOpen: false });\r\n };\r\n\r\n const _getModalText = (status: addOrderTemplateToCartStatus, dialogStrings: IDialogStrings, errorMsg: string) => {\r\n const { addToCartFailureMessage, addToCartSuccessMessage, addToCartProcessMessage } = dialogStrings;\r\n\r\n if (status === 'LOADING') {\r\n return `${addToCartProcessMessage}...`;\r\n }\r\n\r\n if (status === 'SUCCESS') {\r\n return addToCartSuccessMessage;\r\n }\r\n\r\n if (status === 'FAILED') {\r\n return errorMsg !== null ? errorMsg : addToCartFailureMessage;\r\n }\r\n\r\n return '';\r\n };\r\n\r\n const modalText = _getModalText(this.state.uploadStatus, dialogStrings, this.state.errorMessage);\r\n const processStatusClass = this.state.uploadStatus.toLowerCase();\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.AddOrderTemplateToCart);\r\n const addOrderTemplateAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n const popupProps: IPopupProductsProps = {\r\n dialogStrings,\r\n className: 'msc-add-order-template-to-cart',\r\n processStatusClass,\r\n text: modalText,\r\n modalOpen: this.state.modalOpen,\r\n setModalOpen: this.setModalOpen\r\n };\r\n\r\n const renderModalPopup = ;\r\n\r\n const products = orderTemplate.orderTemplateLines.map(line => line.fullProduct).filter(fullProduct => fullProduct) as FullProduct[];\r\n\r\n return (\r\n <>\r\n {renderModalPopup}\r\n {\r\n this.setState({ uploadStatus: 'LOADING', modalOpen: true });\r\n try {\r\n await this.handleAddToCart(props);\r\n this.setState({\r\n linesAddedToCartDialogOpen: true,\r\n uploadStatus: 'SUCCESS'\r\n });\r\n } catch (error) {\r\n this.setState({\r\n uploadStatus: 'FAILED',\r\n errorMessage: 'An error occurred while adding items to the cart'\r\n });\r\n }\r\n }}\r\n {...addOrderTemplateAttribute}\r\n >\r\n {addTemplateToBagButtonText}\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n private setModalOpen = (isOpen: boolean) => {\r\n this.setState({ modalOpen: isOpen });\r\n };\r\n\r\n private readonly _removeTemplate = () => {\r\n const { context, data, telemetry, resources } = this.props;\r\n const { orderTemplate } = data;\r\n\r\n if (context && context.actionContext) {\r\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\r\n if (userToken && orderTemplate && orderTemplate.result) {\r\n deleteAsync({ callerContext: context.actionContext }, orderTemplate.result.productList)\r\n .then()\r\n .catch((error: string) => {\r\n telemetry.warning('[order-template] Unable to delete order template.');\r\n telemetry.error(error);\r\n this.setState({\r\n itemKey: orderTemplate.result?.productList.Id || '',\r\n userMessage: resources.deleteOrderTemplateFailedText,\r\n statusCssString: 'danger',\r\n messageGlyph: 'fas fa-exclamation-triangle',\r\n isOpen: true\r\n });\r\n });\r\n const newLink = getUrlSync('ordertemplatelist', this.props.context.actionContext);\r\n if (newLink) {\r\n window.location.assign(newLink);\r\n }\r\n } else {\r\n telemetry.warning('[order-template] Failed to delete order template. Order template was not found');\r\n }\r\n } else {\r\n telemetry.warning('[order-template] Failed to delete order template.');\r\n }\r\n };\r\n\r\n private _updateViewport(): void {\r\n this._viewport = this._getViewport();\r\n }\r\n\r\n private readonly _getViewport = (): GridSize => {\r\n const { context } = this.props;\r\n\r\n // Always render in mobile viewport on a mobile device\r\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\r\n return 'xs';\r\n }\r\n\r\n if (MsDyn365.isBrowser && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n }\r\n return 'xl';\r\n }\r\n }\r\n\r\n return 'xs';\r\n };\r\n\r\n /**\r\n * Renders a Pagination previous text.\r\n * @param paginationPreviousText - Pagination previous text from resources.\r\n * @returns Previous text and flipper icon.\r\n */\r\n private readonly _renderPrev = (paginationPreviousText: string) => {\r\n return (\r\n
\r\n
\r\n );\r\n };\r\n\r\n /**\r\n * Renders a Pagination next text.\r\n * @param paginationNextText - Pagination next text from resources.\r\n * @returns Next text and flipper icon.\r\n */\r\n private readonly _renderNext = (paginationNextText: string) => {\r\n return (\r\n
\r\n {paginationNextText}\r\n
\r\n );\r\n };\r\n}\r\n\r\nexport default OrderTemplateLines;\r\n\r\nconst _getOrderTemplateRenameControl = (props: IOrderTemplateActionsProps): React.ReactNode => {\r\n const { renameOrderTemplateDialogStrings, resources, context, handlers } = props;\r\n return (\r\n \r\n );\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Button, INodeProps, Modal, ModalBody, ModalFooter, ModalHeader, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IOrderTemplateLineViewProps } from './components';\r\nimport { IOrderTemplateViewProps } from './gdn-order-template';\r\n\r\nconst OrderTemplateLinesView: React.FC = (props: IOrderTemplateViewProps) => {\r\n const {\r\n OrderTemplateLines,\r\n status,\r\n statusMessage,\r\n heading,\r\n ProductsTable,\r\n ProductsTableHeading,\r\n orderLines,\r\n ProductsTableRow,\r\n productsStatusMessage,\r\n OrderTemplateActions,\r\n orderActions,\r\n pagination,\r\n itemAddedToCartDialog,\r\n bulkOrderLineActions,\r\n isDetailsDisplayed,\r\n detailedProductView,\r\n toggleDetailsDisplayed,\r\n resources: {\r\n cancelBtnLabel,\r\n productNumberText,\r\n productText,\r\n productUnitPriceText,\r\n productUOMText,\r\n productQuantityText,\r\n productLineCatalogName\r\n }\r\n } = props;\r\n\r\n const toggleDetails = React.useCallback(() => {\r\n toggleDetailsDisplayed && toggleDetailsDisplayed(undefined);\r\n }, [toggleDetailsDisplayed]);\r\n\r\n return (\r\n \r\n {heading}\r\n {OrderTemplateActions && (\r\n \r\n {orderActions?.addTemplateToBag}\r\n {orderActions?.renameTemplate}\r\n {orderActions?.removeTemplate}\r\n {orderActions?.actionsSplitButton}\r\n {!isDetailsDisplayed && productsStatusMessage}\r\n \r\n )}\r\n {bulkOrderLineActions}\r\n {status !== 'SUCCESS' && statusMessage}\r\n {ProductsTable && orderLines && orderLines.length > 0 && (\r\n \r\n \r\n {ProductsTableHeading}\r\n \r\n {orderLines &&\r\n orderLines.map(product => {\r\n return _renderItem(product, productQuantityText, ProductsTableRow);\r\n })}\r\n \r\n \r\n {pagination}\r\n \r\n )}\r\n {itemAddedToCartDialog}\r\n \r\n Product Details\r\n \r\n
    \r\n
  • {detailedProductView?.productImage}
  • \r\n
  • \r\n {productText}:\r\n {detailedProductView?.productInfo}\r\n
  • \r\n
  • \r\n {productLineCatalogName}:\r\n {detailedProductView?.productLineCatalog}\r\n
  • \r\n
  • \r\n {productNumberText}:\r\n {detailedProductView?.productNumber}\r\n
  • \r\n
  • \r\n {productUnitPriceText}:\r\n {` `}\r\n {detailedProductView?.productPrice}\r\n
  • \r\n
  • \r\n {productUOMText}:\r\n {` `}\r\n {detailedProductView?.productUnitOfMeasure}\r\n
  • \r\n
  • \r\n {productQuantityText}:\r\n {detailedProductView?.productQuantityView}\r\n
  • \r\n {productsStatusMessage &&
  • {productsStatusMessage}
  • }\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nconst _renderItem = (product: IOrderTemplateLineViewProps, quantityLabel: string, ProductsTableRow?: INodeProps): JSX.Element | null => {\r\n if (!product) {\r\n return null;\r\n }\r\n\r\n const {\r\n key,\r\n selectLine,\r\n productLineCatalog,\r\n productImage,\r\n productPrice,\r\n productNumber,\r\n addToBagButton,\r\n removeButton,\r\n productInfo,\r\n productUnitOfMeasure,\r\n productQuantityView,\r\n productQuantity,\r\n popUp,\r\n isMobile,\r\n extraActionsPopup,\r\n isMultipleCatalogFeatureEnabledInHq,\r\n disabled\r\n } = product;\r\n\r\n const lineVisibility = disabled\r\n ? {\r\n pointerEvents: 'none',\r\n opacity: 0.5\r\n }\r\n : {\r\n pointerEvents: 'auto',\r\n opacity: 1\r\n };\r\n\r\n const disableElement: React.CSSProperties = lineVisibility as React.CSSProperties;\r\n\r\n return (\r\n \r\n {selectLine}\r\n {!isMobile && isMultipleCatalogFeatureEnabledInHq && {productLineCatalog}}\r\n {productImage}\r\n {isMobile ? (\r\n \r\n
{productNumber}
\r\n
\r\n {quantityLabel}:{` `}\r\n {productQuantity}\r\n
\r\n \r\n ) : (\r\n {productNumber}\r\n )}\r\n {!isMobile && {productInfo}}\r\n {!isMobile && {productPrice}}\r\n {!isMobile && {productUnitOfMeasure}}\r\n {!isMobile && {productQuantityView}}\r\n {isMobile && {popUp}}\r\n {!isMobile && !isMultipleCatalogFeatureEnabledInHq && (\r\n \r\n {addToBagButton}\r\n {removeButton}\r\n \r\n )}\r\n {extraActionsPopup}\r\n
\r\n );\r\n};\r\n\r\nexport default OrderTemplateLinesView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { AddToCartBehavior } from '@msdyn365-commerce/components';\r\nimport MsDyn365, { getUrlSync, IDictionary, TelemetryEvent } from '@msdyn365-commerce/core';\r\n// @ts-ignore\r\nimport { ICartIconViewProps, ICartViewProps, IFlyoutCartLineItemViewProps } from '@msdyn365-commerce-modules/cart';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, getPayloadObject, INodeProps, KeyCodes, Modal, Node, onTelemetryClick,getTelemetryAttributes, getTelemetryObject,\r\n ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React from 'react';\r\nimport { validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\r\n\r\nimport { ICartIconProps as ICartIconExtensionProps } from '../definition-extensions/cart-icon.ext.props.autogenerated';\r\n\r\n/**\r\n * ICartIconViewState: Interface for Cart Icon View State.\r\n */\r\ninterface ICartIconViewState {\r\n isModalOpen: boolean;\r\n isCartValid: boolean;\r\n isQuantityLimitsFeatureEnabled: boolean;\r\n}\r\n\r\n/**\r\n * Render Cart lines.\r\n * @param cartLines - Flyout cart line view props.\r\n * @param props - Cart icon view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\r\n if (!cartLines) {\r\n props.context.telemetry.error('Cartlines content is empty, module wont render');\r\n return null;\r\n }\r\n return cartLines.map((cartLine, index) => {\r\n const cartLineIndex = index;\r\n return (\r\n \r\n \r\n {cartLine.cartline}\r\n \r\n {cartLine.remove}\r\n {cartLine.storeLocation}\r\n \r\n );\r\n });\r\n};\r\n\r\n/**\r\n * Initiate total price.\r\n * @param props - Cart icon view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderTotalPrice = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\r\n const cart = props.data.cart.result ?? undefined;\r\n const price = cart && !cart.hasInvoiceLine && (cart.cart.TotalAmount || undefined);\r\n const totalPrice = price ? props.context.cultureFormatter.formatCurrency(price) : props.context.cultureFormatter.formatCurrency(props.resources.emptyPrice);\r\n return (\r\n
\r\n \r\n {props.resources.totalPriceFormatString?.replace('{price}' , '')}\r\n \r\n {totalPrice}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\n/**\r\n *\r\n * CartIconView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class CartIconView extends React.PureComponent, ICartIconViewState> {\r\n\r\n private isAutoDisplayTriggered: boolean;\r\n private readonly checkoutByGuestAttributes: IDictionary | undefined;\r\n private lastValidatedCartVersion: number | undefined;\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n public constructor(props: ICartViewProps & ICartIconViewState & ICartIconViewProps & ICartIconExtensionProps<{}>) {\r\n super(props);\r\n this.isAutoDisplayTriggered = false;\r\n this.state = {\r\n isModalOpen: false,\r\n isCartValid: true,\r\n isQuantityLimitsFeatureEnabled: false\r\n };\r\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\r\n const payload = getPayloadObject(TelemetryEvent.CheckOut, this.telemetryContent, TelemetryConstant.Checkout);\r\n payload.contentAction.etext = TelemetryConstant.GuestCheckout;\r\n this.checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, payload);\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (MsDyn365.isBrowser) {\r\n window.addEventListener('keydown', this._escFunction, false);\r\n }\r\n this._validateCart();\r\n }\r\n\r\n public componentDidUpdate(): void {\r\n this._validateCart();\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.isBrowser) {\r\n window.removeEventListener('keydown', this._escFunction, false);\r\n }\r\n }\r\n\r\n private _removeCommentFromCartLine(): void {\r\n const cartState = this.props.data.cart.result || undefined;\r\n\r\n if (cartState) {\r\n if ((!cartState.cart.CartLines || cartState.cart.CartLines?.length === 0) && cartState.cart.Comment) {\r\n const _clonedCart = { ...cartState.cart };\r\n _clonedCart.Comment = \"\";\r\n\r\n void cartState.updateCart({newCartObject: _clonedCart});\r\n }\r\n }\r\n }\r\n\r\n private _renderGuestCheckout(hasError: boolean,guestCheckoutUrl: string) {\r\n return(\r\n \r\n {this.props.resources.guestCheckoutButtonTitle}\r\n \r\n );\r\n }\r\n\r\n private _validateCart(): void {\r\n const {\r\n data: { cart }\r\n } = this.props;\r\n const cartVersion = cart.result?.cart?.Version ?? undefined;\r\n if (this.lastValidatedCartVersion === cartVersion) {\r\n return;\r\n }\r\n\r\n this.lastValidatedCartVersion = cartVersion; // This field is populated to block concurrent requests\r\n validateCartAsync(cart, this.props.telemetry, this.props.context)\r\n .then((result) => {\r\n this.setState({ isCartValid: !ArrayExtensions.hasElements(result?.ValidationResultsPairs) });\r\n })\r\n .catch(() => {\r\n this.setState({ isCartValid: false });\r\n });\r\n }\r\n\r\n /**\r\n * Render Cart Item count.\r\n * @returns JSX Element.\r\n */\r\n public render(): JSX.Element | null {\r\n this._removeCommentFromCartLine();\r\n const cart = this.props.data.cart.result ?? undefined;\r\n const cartlines = this.props.cartlines;\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\r\n const shouldShowMiniCart = cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\r\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\r\n const hasError = !this.state.isCartValid || (cartlines ? cartlines.some(cartline => cartline.hasError) : false);\r\n if (shouldShowMiniCart) {\r\n if (!this.isAutoDisplayTriggered) {\r\n // First time trigger auto mini cart.\r\n this.setState({ isModalOpen: true });\r\n this.isAutoDisplayTriggered = true;\r\n } else if (!this.state.isModalOpen) {\r\n // If modal is closed, reset the flag.\r\n this.isAutoDisplayTriggered = false;\r\n }\r\n }\r\n return (\r\n \r\n \r\n {this.props.cartIcon}\r\n \r\n \r\n \r\n {this.props.flyoutTitle}\r\n {this._renderCartItemCount(this.props)}\r\n {this._renderCartCloseIcon()}\r\n \r\n \r\n {this.props.data.cart.result?.isEmpty ? this.props.slots.emptyCart : null}\r\n \r\n {renderCartlines(cartlines, this.props)}\r\n \r\n \r\n \r\n {this.props.slots.promoContentItem}\r\n {renderTotalPrice(this.props)}\r\n

\r\n {this.props.resources.subTotalMessage}\r\n

\r\n {/* {this.props.checkoutAsSignInUserButton} */}\r\n {/* {this.props.checkoutAsGuestButton} */}\r\n {cartlines && cartlines.length > 0 ? this._renderGuestCheckout(hasError, guestCheckoutUrl) : null}\r\n\r\n {this.props.data.cart.result?.isEmpty ? null : this.props.goToCartButton}\r\n \r\n {\r\n this.props.data.cart.result?.isEmpty ? \r\n {this.props.resources.continueShoppingButtonTitle}\r\n : null\r\n }\r\n \r\n
\r\n \r\n \r\n );\r\n }\r\n\r\n /**\r\n * Initiate modal container.\r\n * @returns Inode props.\r\n */\r\n private readonly _modalContainer = (): INodeProps => {\r\n return {\r\n tag: Modal,\r\n placement: 'bottom-end',\r\n hideArrow: true,\r\n className: 'ms-cart-icon__minicartmodal-container',\r\n wrapClassName: 'ms-cart-icon__minicartmodal',\r\n isOpen: this.state.isModalOpen,\r\n toggle: this.closeModal\r\n };\r\n };\r\n\r\n /**\r\n * Initiate open modal.\r\n */\r\n private readonly _openModal = (): void => {\r\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'cart-icon', '');\r\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'cart-icon');\r\n this.setState({\r\n isModalOpen: true\r\n });\r\n };\r\n\r\n /**\r\n * Initiate close modal.\r\n */\r\n private readonly closeModal = (): void => {\r\n this.setState({\r\n isModalOpen: false\r\n });\r\n\r\n };\r\n\r\n /**\r\n * Initiate cart close Icon.\r\n * @returns JSX Element.\r\n */\r\n private readonly _renderCartCloseIcon = (): JSX.Element | null => {\r\n return (\r\n \r\n );\r\n };\r\n\r\n /**\r\n * Render Cart Item count.\r\n * @param props - Cart icon view props.\r\n * @returns JSX Element.\r\n */\r\n private readonly _renderCartItemCount = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\r\n let cartItemCount;\r\n const defaultCartItemCount: number = 0;\r\n const defaultCartItemCountOne: number = 1;\r\n\r\n if (ArrayExtensions.hasElements(props.cartlines)) {\r\n if (props.cartlines.length === defaultCartItemCountOne) {\r\n cartItemCount = `${defaultCartItemCountOne} ${props.resources.item}`;\r\n } else {\r\n cartItemCount = `${props.cartlines.length} ${props.resources.items}`;\r\n }\r\n } else {\r\n cartItemCount = `${defaultCartItemCount} ${props.resources.items}`;\r\n }\r\n return (\r\n \r\n {cartItemCount}\r\n \r\n );\r\n };\r\n\r\n /**\r\n * Handle escape click to close modal.\r\n * @param event - On press of any key.\r\n */\r\n private readonly _escFunction = (event: KeyboardEvent) => {\r\n if (event.keyCode === KeyCodes.Escape && this.state.isModalOpen) {\r\n this.closeModal();\r\n }\r\n };\r\n\r\n}\r\n\r\nexport default CartIconView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IOrderTemplateNameDialogResources, OrderTemplateNameDialog } from '@msdyn365-commerce/components';\r\nimport { IComponentProps } from '@msdyn365-commerce/core';\r\nimport React, { useState } from 'react';\r\n\r\nconst modalCloseButtonReference: React.RefObject = React.createRef();\r\n\r\n/**\r\n * The Create Order Template Button Props.\r\n */\r\nexport interface ICreateOrderTemplateButtonProps extends IComponentProps {\r\n\r\n /**\r\n * The label for create order template.\r\n */\r\n createOrderTemplateText: string;\r\n\r\n /**\r\n * The create order template dialog resources.\r\n */\r\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\r\n\r\n /**\r\n * The delegate to fire when dialog captured any user entry.\r\n */\r\n onOrderTemplateCreated(): Promise;\r\n}\r\n\r\nconst CreateOrderTemplateButton: React.FC = (props) => {\r\n const onCancelHandler = React.useCallback(() => {\r\n return;\r\n }, []);\r\n const [isCreateOrderTemplateDialogOpen, setOrderTemplateNameDialogOpen] = useState(false);\r\n const onCreateButtonClick = React.useCallback(() => {\r\n setOrderTemplateNameDialogOpen(true);\r\n }, []);\r\n\r\n return (\r\n <>\r\n \r\n {props.createOrderTemplateText}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CreateOrderTemplateButton;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IOrderTemplateListViewProps, ISingleOrderTemplateViewProps } from '@msdyn365-commerce-modules/order-template';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport CreateNewTemplateButtonComponent from './components/create-order-template.component';\r\nimport * as React from 'react';\r\n\r\nimport { IOrderTemplateListProps, IOrderTemplateListResources } from '../definition-extensions/order-template-list.ext.props.autogenerated';\r\nimport { IOrderTemplateNameDialogResources } from \"@msdyn365-commerce/components\";\r\n\r\n/**\r\n * Interface for OrderTemplateImage.\r\n */\r\ninterface IOrderTemplateImage {\r\n props: {\r\n children: React.ReactElement[];\r\n };\r\n}\r\n\r\n/**\r\n * To render order template.\r\n * @param orderTemplate - The order template view props.\r\n * @param orderTemplateNodeProps - The order template node props.\r\n * @returns The JSX Element.\r\n */\r\nconst renderOrderTemplate = (orderTemplate: ISingleOrderTemplateViewProps, orderTemplateNodeProps?: INodeProps): JSX.Element | null => {\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from module file\r\n const { key, addToCartButton, orderTemplateImage, orderTemplateStatusMessage, removeButton, orderTemplateName } = orderTemplate;\r\n\r\n const orderTemplateImageElement: IOrderTemplateImage = orderTemplateImage as React.ReactElement;\r\n const currentImageListLength = orderTemplateImageElement.props.children.length;\r\n const defaultNumberImagesInTile = 4;\r\n\r\n if (currentImageListLength < defaultNumberImagesInTile) {\r\n for (let index = 0; index < defaultNumberImagesInTile - currentImageListLength; index++) {\r\n orderTemplateImageElement.props.children.push();\r\n }\r\n }\r\n\r\n return (\r\n \r\n {orderTemplateName}\r\n {orderTemplateImage}\r\n {addToCartButton}\r\n {removeButton}\r\n {orderTemplateStatusMessage}\r\n \r\n );\r\n};\r\n\r\nconst _reloadPage = async () => {\r\n window.location.reload();\r\n};\r\n\r\nconst _generateOrderTemplateNameDialogResources = (resources: IOrderTemplateListResources): IOrderTemplateNameDialogResources => {\r\n return {\r\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\r\n orderTemplateTitleLabel: resources.orderTemplateTitle,\r\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\r\n orderTemplateDescription: resources.createOrderTemplateDescription,\r\n\r\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\r\n\r\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\r\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\r\n };\r\n}\r\n\r\n/**\r\n * Order Template List View.\r\n * @param props - The view props.\r\n * @returns The JSX Element.\r\n */\r\nexport const OrderTemplateListViewComponent: React.FC> = props => {\r\n const {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from module file\r\n OrderTemplateList, OrderTemplates, OrderTemplate,\r\n status,\r\n statusMessage,\r\n heading,\r\n orderTemplates,\r\n createOrderTemplateButton,\r\n templateHeaderStatusMessage\r\n } = props;\r\n console.log(createOrderTemplateButton)\r\n return (\r\n \r\n {heading}\r\n {status !== 'SUCCESS' && statusMessage}\r\n {status === 'EMPTY' && (\r\n \r\n )}\r\n \r\n {status === 'SUCCESS' &&\r\n (!OrderTemplates || !orderTemplates ||\r\n !ArrayExtensions.hasElements(orderTemplates)) ? (\r\n
\r\n

\r\n {props.resources.headingForEmptyOrderTemplateList}\r\n

\r\n

\r\n {props.resources.textForEmptyOrderTemplateList}\r\n

\r\n {createOrderTemplateButton}\r\n
\r\n ) : createOrderTemplateButton}\r\n {templateHeaderStatusMessage}\r\n
\r\n { OrderTemplates && orderTemplates && ArrayExtensions.hasElements(orderTemplates) &&\r\n \r\n {orderTemplates.map((orderTemplate) => {\r\n return renderOrderTemplate(orderTemplate, OrderTemplate);\r\n })}\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport default OrderTemplateListViewComponent;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { AddToCartBehavior } from '@msdyn365-commerce/components';\r\nimport MsDyn365, { getUrlSync } from '@msdyn365-commerce/core';\r\n// @ts-ignore\r\nimport { ICartIconViewProps, ICartViewProps, IFlyoutCartLineItemViewProps } from '@mdsdyn365-commerce-modules/cart';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, getPayloadObject, INodeProps, KeyCodes, Modal, Node, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React from 'react';\r\n\r\nimport { ICartIconProps as ICartIconExtensionProps, ICartIconResources } from '../definition-extensions/cart-icon.ext.props.autogenerated';\r\nimport { readAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CustomersDataActions.g';\r\nimport { Address } from '@msdyn365-commerce/retail-proxy';\r\nimport { CartLine, CommerceProperty } from '@msdyn365-commerce/retail-proxy';\r\nimport { CommercePropertyValueEnum } from '../../../modules/allowable-freight/utils/CommercePropertyValueEnum';\r\n\r\n/**\r\n * ICartIconViewState: Interface for Cart Icon View State.\r\n */\r\ninterface ICartIconViewState {\r\n isModalOpen: boolean;\r\n isAddressCheckComplete: boolean;\r\n isErrModalOpen: boolean;\r\n iProductsPresentVersion: number;\r\n}\r\n\r\nconst renderInvoiceInCartMsg = (resources: ICartIconResources): JSX.Element | null => {\r\n return {resources.invoiceInCartMessage};\r\n};\r\n\r\n/**\r\n * Render Cart lines.\r\n * @param cartLines - Flyout cart line view props.\r\n * @param props - Cart icon view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartlines = (\r\n cartLines: IFlyoutCartLineItemViewProps[] | undefined,\r\n props: ICartIconViewProps & ICartIconExtensionProps<{}>\r\n): JSX.Element[] | null => {\r\n if (props.data.cart.result?.hasInvoiceLine) {\r\n return [{renderInvoiceInCartMsg(props.resources)}];\r\n }\r\n\r\n if (!cartLines) {\r\n props.context.telemetry.error('Cartlines content is empty, module wont render');\r\n return null;\r\n }\r\n\r\n if (MsDyn365.isBrowser) {\r\n document.addEventListener('UPDATE_CART', (data: any) => {\r\n if (data.detail.Products?.length) {\r\n const cartState = props.data.cart.result;\r\n cartState?.removeCartLines({ cartLineIds: data.detail.Products.map((p: any) => p.LineId) });\r\n }\r\n });\r\n }\r\n\r\n return cartLines.map((cartLine, index) => {\r\n const cartLineIndex = index;\r\n return (\r\n \r\n {cartLine.cartline}\r\n {cartLine.remove}\r\n {cartLine.storeLocation}\r\n \r\n );\r\n });\r\n};\r\n\r\n/**\r\n * Initiate total price.\r\n * @param props - Cart icon view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderTotalPrice = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\r\n const cart = props.data.cart.result ?? undefined;\r\n const price = cart && !cart.hasInvoiceLine && (cart.cart.TotalAmount || undefined);\r\n const totalPrice = price\r\n ? props.context.cultureFormatter.formatCurrency(price)\r\n : props.context.cultureFormatter.formatCurrency(props.resources.emptyPrice);\r\n return (\r\n
\r\n \r\n {props.resources.totalPriceFormatString?.replace('{price}', '')}\r\n {totalPrice}\r\n \r\n
\r\n );\r\n};\r\n\r\n/**\r\n *\r\n * CartIconView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class CartIconView extends React.PureComponent<\r\n ICartViewProps & ICartIconViewProps & ICartIconExtensionProps<{}>,\r\n ICartIconViewState\r\n> {\r\n private isAutoDisplayTriggered: boolean;\r\n private isErrAutoDisplayTriggered: boolean;\r\n\r\n public constructor(props: ICartViewProps & ICartIconViewState & ICartIconViewProps & ICartIconExtensionProps<{}>) {\r\n super(props);\r\n this.isAutoDisplayTriggered = false;\r\n this.isErrAutoDisplayTriggered = false;\r\n this.state = {\r\n isModalOpen: false,\r\n isAddressCheckComplete: false,\r\n isErrModalOpen: false,\r\n iProductsPresentVersion: 0\r\n };\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (MsDyn365.isBrowser) {\r\n window.addEventListener('keydown', this._escFunction, false);\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.isBrowser) {\r\n window.removeEventListener('keydown', this._escFunction, false);\r\n }\r\n }\r\n\r\n private _removeCommentFromCartLine(): void {\r\n const cartState = this.props.data.cart.result || undefined;\r\n\r\n if (cartState) {\r\n if ((!cartState.cart.CartLines || cartState.cart.CartLines?.length === 0) && cartState.cart.Comment) {\r\n const _clonedCart = { ...cartState.cart };\r\n _clonedCart.Comment = '';\r\n\r\n void cartState.updateCart({ newCartObject: _clonedCart });\r\n }\r\n }\r\n }\r\n\r\n private async getAddresses(): Promise
{\r\n if (this.props.context.request.user.isAuthenticated) {\r\n const customer = await readAsync(\r\n { callerContext: this.props.context.actionContext },\r\n this.props.context.request.user.customerAccountNumber!\r\n );\r\n if (customer) {\r\n return customer.Addresses?.find(add => add.IsPrimary);\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n private async handleCartAddress(): Promise {\r\n const cartState = this.props.data.cart.result;\r\n if (cartState) {\r\n this.setState({ isAddressCheckComplete: true });\r\n const hasAddress = !!cartState.cart.ShippingAddress;\r\n // console.log(hasAddress, 'has address')\r\n if (!hasAddress) {\r\n const primaryAddress = await this.getAddresses();\r\n // console.log(primaryAddress, 'primary address')\r\n\r\n if (!!primaryAddress) {\r\n void (await cartState.updateShippingAddress({ newShippingAddress: primaryAddress }));\r\n }\r\n }\r\n }\r\n }\r\n\r\n private getExtensionPropertyValueByKey = (\r\n properties: CommerceProperty[] | undefined,\r\n key: string,\r\n valueType: CommercePropertyValueEnum\r\n ) => {\r\n const property = properties?.find(p => p.Key === key)?.Value;\r\n\r\n // eslint-disable-next-line security/detect-object-injection\r\n const val = property ? property[valueType] : null;\r\n return val;\r\n };\r\n\r\n /**\r\n * Render Cart Item count.\r\n * @returns JSX Element.\r\n */\r\n public render(): JSX.Element | null {\r\n this._removeCommentFromCartLine();\r\n const cart = this.props.data.cart.result ?? undefined;\r\n\r\n let iProductsPresent = this.getExtensionPropertyValueByKey(\r\n cart?.cart?.ExtensionProperties,\r\n 'not-eligible',\r\n CommercePropertyValueEnum.string\r\n );\r\n // console.log(iProductsPresent)\r\n // console.log(this.state.iProductsPresentVersion, !!this.state.iProductsPresentVersion)\r\n if (!this.isErrAutoDisplayTriggered && typeof iProductsPresent === 'string' && iProductsPresent !== '[]') {\r\n this.setState({ isErrModalOpen: true, iProductsPresentVersion: cart?.cart.Version || 0 });\r\n this.isErrAutoDisplayTriggered = true;\r\n } else if (!this.state.isErrModalOpen && cart?.cart.Version !== this.state.iProductsPresentVersion) {\r\n this.isErrAutoDisplayTriggered = false;\r\n }\r\n\r\n if (this.state.isErrModalOpen) {\r\n this.isAutoDisplayTriggered = true;\r\n }\r\n\r\n let ippContent;\r\n\r\n if (!!iProductsPresent) {\r\n try {\r\n ippContent = (\r\n <>\r\n

{this.props.resources.ineligibleProductsText}

\r\n {(JSON.parse(iProductsPresent as string) as CartLine[]).map(r => (\r\n
  • \r\n {r.Barcode}: {r.Description}\r\n
  • \r\n ))}\r\n \r\n );\r\n } catch (err) {}\r\n }\r\n\r\n if (cart && !this.state.isAddressCheckComplete) {\r\n this.handleCartAddress();\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\r\n const shouldShowMiniCart =\r\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\r\n\r\n if (shouldShowMiniCart) {\r\n if (!this.isAutoDisplayTriggered) {\r\n // First time trigger auto mini cart.\r\n this.setState({ isModalOpen: true });\r\n this.isAutoDisplayTriggered = true;\r\n } else if (!this.state.isModalOpen) {\r\n // If modal is closed, reset the flag.\r\n this.isAutoDisplayTriggered = false;\r\n }\r\n }\r\n\r\n // Resolving ticket 8253: Remove \"Checkout\" option; only allow \"Go to Shopping Cart\".\r\n\r\n const itemCount = this.props.data.cart.result?.cart.CartLines.length || 0;\r\n const goToCartButtonText = this.props.resources.goToCartButtonTitleNew.replace('{count}', itemCount.toString());\r\n\r\n return (\r\n \r\n \r\n {ippContent && ippContent}\r\n \r\n \r\n {this.props.flyoutTitle}\r\n {this._renderCartItemCount(this.props)}\r\n {this._renderCartCloseIcon()}\r\n \r\n \r\n {this.props.slots.allowableFreight}\r\n {this.props.data.cart.result?.isEmpty ? this.props.slots.emptyCart : null}\r\n {renderCartlines(this.props.cartlines, this.props)}\r\n \r\n \r\n {this.props.slots.promoContentItem}\r\n {renderTotalPrice(this.props)}\r\n

    {this.props.resources.subTotalMessage}

    \r\n {/* {this.props.checkoutAsSignInUserButton}\r\n {this.props.checkoutAsGuestButton} */}\r\n\r\n {this.props.data.cart.result?.isEmpty ? null : (\r\n \r\n {goToCartButtonText}\r\n \r\n )}\r\n \r\n {this.props.data.cart.result?.isEmpty ? (\r\n \r\n {this.props.resources.continueShoppingButtonTitle}\r\n \r\n ) : null}\r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n /**\r\n * Initiate modal container.\r\n * @returns Inode props.\r\n */\r\n private readonly _modalContainer = (): INodeProps => {\r\n return {\r\n tag: Modal,\r\n placement: 'bottom-end',\r\n hideArrow: true,\r\n className: 'ms-cart-icon__minicartmodal-container',\r\n wrapClassName: 'ms-cart-icon__minicartmodal',\r\n isOpen: this.state.isModalOpen,\r\n toggle: this.closeModal\r\n };\r\n };\r\n\r\n /**\r\n * Initiate open modal.\r\n */\r\n private readonly _openModal = (): void => {\r\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'cart-icon', '');\r\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'cart-icon');\r\n this.setState({\r\n isModalOpen: true\r\n });\r\n };\r\n\r\n private readonly _modalErrContainer = (): INodeProps => {\r\n return {\r\n tag: Modal,\r\n placement: 'bottom-end',\r\n hideArrow: true,\r\n className: 'ms-cart-icon__minicarterrmodal-container',\r\n wrapClassName: 'ms-cart-icon__minicarterrmodal',\r\n isOpen: this.state.isErrModalOpen,\r\n toggle: this.closeErrModal\r\n };\r\n };\r\n\r\n private readonly closeErrModal = (): void => {\r\n this.setState({\r\n isErrModalOpen: false\r\n });\r\n\r\n this.isAutoDisplayTriggered = true;\r\n };\r\n\r\n /**\r\n * Initiate close modal.\r\n */\r\n private readonly closeModal = (): void => {\r\n this.setState({\r\n isModalOpen: false\r\n });\r\n };\r\n\r\n /**\r\n * Initiate cart close Icon.\r\n * @returns JSX Element.\r\n */\r\n private readonly _renderCartCloseIcon = (): JSX.Element | null => {\r\n return \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CreateOrderTemplateButton;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport {\r\n IOrderTemplateActionsData,\r\n IOrderTemplateListViewProps,\r\n ISingleOrderTemplateViewProps\r\n} from '@msdyn365-commerce-modules/order-template';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n INodeProps,\r\n IPopupProductsProps,\r\n ITelemetryContent,\r\n Module,\r\n Node,\r\n PopupProducts,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport CreateNewTemplateButtonComponent from './components/create-order-template.component';\r\nimport * as React from 'react';\r\n\r\nimport { IOrderTemplateListProps, IOrderTemplateListResources } from '../definition-extensions/order-template-list.ext.props.autogenerated';\r\nimport {\r\n addOrderTemplateToCartStatus,\r\n ILinesAddedToCartDialogResources,\r\n IOrderTemplateNameDialogResources,\r\n LinesAddedToCartDialog\r\n} from '@msdyn365-commerce/components';\r\nimport { FullProduct } from '@msdyn365-commerce/commerce-entities';\r\nimport classnames from 'classnames';\r\nimport { CartLine, QueryResultSettings } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n getPaginatedOrderTemplateLinesAction,\r\n GetPaginatedOrderTemplateLinesInput\r\n} from '../../../actions/get-paginated-order-template-lines.action';\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { addCartLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\r\nimport { IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\r\nimport _ from 'lodash';\r\n\r\n/**\r\n * Interface for OrderTemplateImage.\r\n */\r\ninterface IOrderTemplateImage {\r\n props: {\r\n children: React.ReactElement[];\r\n };\r\n}\r\n\r\nexport interface IOrderTemplateActionsProps extends IComponentProps {\r\n addToCartText: string;\r\n className: string;\r\n data: IOrderTemplateActionsData;\r\n id: string;\r\n typeName: string;\r\n context: ICoreContext;\r\n telemetryContent?: ITelemetryContent;\r\n isMultipleCatalogFeatureEnabledInHq?: boolean;\r\n dialogStrings: {\r\n renameTemplateButtonText: string;\r\n deleteTemplateButtonText: string;\r\n closeWindowButtonText: string;\r\n addToCartFailureMessage: string;\r\n addToCartSuccessMessage: string;\r\n addToCartProcessMessage: string;\r\n orderTemplateErrorMessage: string;\r\n linesAddedToCartDialogResources: ILinesAddedToCartDialogResources;\r\n };\r\n}\r\n\r\n/**\r\n * To render order template.\r\n * @param orderTemplate - The order template view props.\r\n * @param orderTemplateNodeProps - The order template node props.\r\n * @returns The JSX Element.\r\n */\r\nconst renderOrderTemplate = (\r\n orderTemplate: ISingleOrderTemplateViewProps,\r\n props: React.PropsWithChildren>,\r\n orderTemplateNodeProps?: INodeProps\r\n): JSX.Element | null => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from module file\r\n const { key, addToCartButton, orderTemplateImage, orderTemplateStatusMessage, removeButton, orderTemplateName } = orderTemplate;\r\n\r\n const addToCartButtonProps = (_.get(addToCartButton, 'props.children.props') as unknown) as IOrderTemplateActionsProps;\r\n\r\n const orderTemplateImageElement: IOrderTemplateImage = orderTemplateImage as React.ReactElement;\r\n const currentImageListLength = orderTemplateImageElement.props.children.length;\r\n const defaultNumberImagesInTile = 4;\r\n\r\n if (currentImageListLength < defaultNumberImagesInTile) {\r\n for (let index = 0; index < defaultNumberImagesInTile - currentImageListLength; index++) {\r\n orderTemplateImageElement.props.children.push();\r\n }\r\n }\r\n\r\n return (\r\n \r\n {orderTemplateName}\r\n {orderTemplateImage}\r\n {/* {addToCartButton} */}\r\n {_getOrderTemplateAddToCartDialog(addToCartButtonProps)}\r\n {removeButton}\r\n {orderTemplateStatusMessage}\r\n \r\n );\r\n};\r\n\r\nconst _getOrderTemplateAddToCartDialog = (addToCartButtonProps: IOrderTemplateActionsProps): React.ReactNode => {\r\n const [errorMessage, setErrorMessage] = React.useState('');\r\n const [linesAddedToCartDialogOpen, setLinesAddedToCartDialogOpen] = React.useState(false);\r\n const [uploadStatus, setUploadStatus] = React.useState('WAITING');\r\n const [modalOpen, setModalOpen] = React.useState(false);\r\n const [addedLinesCount, setAddedLinesCount] = React.useState(0);\r\n const {\r\n data: { orderTemplate },\r\n typeName,\r\n id,\r\n context,\r\n telemetryContent,\r\n dialogStrings,\r\n isMultipleCatalogFeatureEnabledInHq,\r\n addToCartText\r\n } = addToCartButtonProps;\r\n\r\n const {\r\n // closeWindowButtonText,\r\n addToCartFailureMessage,\r\n addToCartSuccessMessage,\r\n addToCartProcessMessage,\r\n // orderTemplateErrorMessage,\r\n linesAddedToCartDialogResources\r\n } = dialogStrings;\r\n\r\n const closeLinesAddedToCartDialog = () => {\r\n setErrorMessage('');\r\n setLinesAddedToCartDialogOpen(false);\r\n };\r\n\r\n const _getModalText = (\r\n status: addOrderTemplateToCartStatus,\r\n addToCartFailureMessage: string,\r\n addToCartSuccessMessage: string,\r\n addToCartProcessMessage: string,\r\n errorMsg: string\r\n ) => {\r\n if (status === 'LOADING') {\r\n return `${addToCartProcessMessage}...`;\r\n }\r\n\r\n if (status === 'SUCCESS') {\r\n return addToCartSuccessMessage;\r\n }\r\n\r\n if (status === 'FAILED') {\r\n return errorMsg !== null ? errorMsg : addToCartFailureMessage;\r\n }\r\n\r\n return '';\r\n };\r\n\r\n const modalText = _getModalText(uploadStatus, addToCartFailureMessage, addToCartSuccessMessage, addToCartProcessMessage, errorMessage);\r\n const processStatusClass = uploadStatus.toLowerCase();\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.AddOrderTemplateToCart);\r\n const addOrderTemplateAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n const popupProps: IPopupProductsProps = {\r\n dialogStrings,\r\n className: 'msc-add-order-template-to-cart',\r\n processStatusClass,\r\n text: modalText,\r\n modalOpen,\r\n setModalOpen\r\n };\r\n\r\n const renderModalPopup = ;\r\n\r\n const products = orderTemplate.orderTemplateLines.map(line => line.fullProduct).filter(fullProduct => fullProduct) as FullProduct[];\r\n\r\n return (\r\n <>\r\n {renderModalPopup}\r\n
    \r\n {\r\n setUploadStatus('LOADING');\r\n setModalOpen(true);\r\n try {\r\n await handleAddToCart(addToCartButtonProps, setAddedLinesCount, setErrorMessage, setModalOpen, setUploadStatus);\r\n setLinesAddedToCartDialogOpen(true);\r\n setUploadStatus('SUCCESS');\r\n } catch (error) {\r\n setUploadStatus('FAILED');\r\n setErrorMessage('An error occurred while adding items to the cart');\r\n }\r\n }}\r\n {...addOrderTemplateAttribute}\r\n >\r\n {addToCartText}\r\n \r\n
    \r\n \r\n \r\n );\r\n};\r\n\r\nconst handleAddToCart = async (\r\n props: IOrderTemplateActionsProps,\r\n setAddedLinesCount: React.Dispatch>,\r\n setErrorMessage: React.Dispatch>,\r\n setModalOpen: React.Dispatch>,\r\n setUploadStatus: React.Dispatch>\r\n) => {\r\n const {\r\n data: { orderTemplate },\r\n context,\r\n isMultipleCatalogFeatureEnabledInHq\r\n } = props;\r\n\r\n const chunkCount = 1000;\r\n const queryResultSettings: QueryResultSettings = {\r\n Paging: {\r\n Top: chunkCount,\r\n Skip: 0\r\n }\r\n };\r\n\r\n const getPaginatedOrderTemplateLinesInput = new GetPaginatedOrderTemplateLinesInput(orderTemplate.productList.Id, queryResultSettings);\r\n\r\n let orderTemplateLines = await getPaginatedOrderTemplateLinesAction(getPaginatedOrderTemplateLinesInput, context.actionContext);\r\n\r\n let addedCartLines: CartLine[] = [];\r\n const cartState = await getCartState(context.actionContext);\r\n const cart = cartState.cart;\r\n const hasInvoiceInCart = cart?.CartLines?.find(cartLine => cartLine.IsInvoiceLine === true);\r\n if (hasInvoiceInCart) {\r\n setErrorMessage('Can not add items to a cart containing an invoice.');\r\n setUploadStatus('FAILED');\r\n } else {\r\n setAddedLinesCount(0);\r\n for (let skip = chunkCount; orderTemplateLines.lines.length > 0; skip += chunkCount) {\r\n const cartLines: CartLine[] = orderTemplateLines.lines.map(productLine => {\r\n const cartLine: CartLine = {\r\n ItemId: productLine.fullProduct?.ProductDetails.ItemId,\r\n ProductId: productLine.productListLine.ProductId,\r\n Quantity: productLine.productListLine.Quantity,\r\n TrackingId: '',\r\n UnitOfMeasureSymbol: productLine.productListLine.UnitOfMeasure,\r\n ...(isMultipleCatalogFeatureEnabledInHq && { catalogId: productLine.productListLine.CatalogId })\r\n };\r\n return cartLine;\r\n });\r\n await addCartLinesAsync({ callerContext: context.actionContext }, cartState.cart.Id, cartLines, cartState.cart.Version).catch(\r\n error => {\r\n context.telemetry.trace(error.data?.ValidationResults);\r\n context.telemetry.trace('Unable to add order template to cart.');\r\n throw error.data?.ValidationResults;\r\n }\r\n );\r\n setAddedLinesCount(prevCount => prevCount + cartLines.length);\r\n addedCartLines = addedCartLines.concat(cartLines);\r\n getPaginatedOrderTemplateLinesInput.queryResultSettings.Paging!.Skip = skip;\r\n orderTemplateLines = await getPaginatedOrderTemplateLinesAction(getPaginatedOrderTemplateLinesInput, context.actionContext);\r\n }\r\n await cartState.refreshCart({});\r\n setModalOpen(false);\r\n }\r\n};\r\n\r\nconst _reloadPage = async () => {\r\n window.location.reload();\r\n};\r\n\r\nconst _generateOrderTemplateNameDialogResources = (resources: IOrderTemplateListResources): IOrderTemplateNameDialogResources => {\r\n return {\r\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\r\n orderTemplateTitleLabel: resources.orderTemplateTitle,\r\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\r\n orderTemplateDescription: resources.createOrderTemplateDescription,\r\n\r\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\r\n\r\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\r\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\r\n };\r\n};\r\n\r\n/**\r\n * Order Template List View.\r\n * @param props - The view props.\r\n * @returns The JSX Element.\r\n */\r\nexport const OrderTemplateListViewComponent: React.FC> = props => {\r\n const {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from module file\r\n OrderTemplateList,\r\n OrderTemplates,\r\n OrderTemplate,\r\n status,\r\n statusMessage,\r\n heading,\r\n orderTemplates,\r\n createOrderTemplateButton,\r\n templateHeaderStatusMessage\r\n } = props;\r\n // console.log(createOrderTemplateButton);\r\n return (\r\n \r\n {heading}\r\n {status !== 'SUCCESS' && statusMessage}\r\n {status === 'EMPTY' && (\r\n \r\n )}\r\n \r\n {status === 'SUCCESS' && (!OrderTemplates || !orderTemplates || !ArrayExtensions.hasElements(orderTemplates)) ? (\r\n
    \r\n

    {props.resources.headingForEmptyOrderTemplateList}

    \r\n

    {props.resources.textForEmptyOrderTemplateList}

    \r\n {createOrderTemplateButton}\r\n
    \r\n ) : (\r\n createOrderTemplateButton\r\n )}\r\n {templateHeaderStatusMessage}\r\n
    \r\n {OrderTemplates && orderTemplates && ArrayExtensions.hasElements(orderTemplates) && (\r\n \r\n {orderTemplates.map(orderTemplate => {\r\n return renderOrderTemplate(orderTemplate, props, OrderTemplate);\r\n })}\r\n \r\n )}\r\n
    \r\n );\r\n};\r\n\r\nexport default OrderTemplateListViewComponent;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ICarouselData } from './carousel.data';\nimport { ICarouselProps } from './carousel.props.autogenerated';\nimport { ICarouselState } from './carousel.state';\n\nexport interface ICarouselViewProps extends ICarouselProps<{}>, ICarouselState {\n closeAnimation: string;\n carouselContainer: IModuleProps;\n telemetryContent: ITelemetryContent;\n next(): void;\n previous(): void;\n onIndicatorsClickHandler(): void;\n handleDismissCarousel(): void;\n handleOnExited(): void;\n handleOnExiting(): void;\n}\n\n/**\n *\n * CarouselModule component.\n * @extends {React.PureComponent>}\n */\nclass CarouselModule extends React.PureComponent, ICarouselState> {\n private animating: boolean;\n\n private readonly telemetryContent: ITelemetryContent;\n\n constructor(props: ICarouselProps, state: ICarouselState) {\n super(props);\n this.state = { activeIndex: 0, closeNow: false, dismissCarousel: false };\n this.animating = false;\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public componentDidMount(): void {\n if (this.props.context && this.props.context.request && this.props.context.request.cookies) {\n if (this.props.context.request.cookies.get(`CarouselDismiss_${this.props.id}`) === undefined) {\n this.props.context.request.cookies.set(`CarouselDismiss_${this.props.id}`, 'false');\n this.setState({ dismissCarousel: false });\n }\n }\n }\n\n public render(): JSX.Element | null {\n if (this.state.dismissCarousel) {\n return null;\n }\n\n const { className } = this.props.config;\n\n const viewProps = {\n // Context for telemetry and raw data for C1 to do customization\n // Including computed data, state data and methods\n ...this.props,\n ...this.state,\n telemetryContent: this.telemetryContent,\n carouselContainer: {\n moduleProps: this.props,\n className: classnames('ms-carousel', className)\n },\n closeAnimation: this.state.closeNow ? 'close-now' : '',\n next: this._next,\n previous: this._previous,\n onIndicatorsClickHandler: this._goToIndex,\n handleDismissCarousel: this._handleDismissCarousel,\n handleOnExited: this._onExited,\n handleOnExiting: this._onExiting\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Function implementation to dismiss the Carousel.\n */\n private readonly _handleDismissCarousel = (): void => {\n if (this.props.context && this.props.context.request && this.props.context.request.cookies) {\n this.props.context.request.cookies.set(`CarouselDismiss_${this.props.id}`, 'true');\n this.setState({ dismissCarousel: true });\n }\n };\n\n /**\n * Function implementation to move to next slide.\n */\n private readonly _next = (): void => {\n const { slots } = this.props;\n const nextIndex = this.state.activeIndex === (slots && slots.content && slots.content.length - 1) ? 0 : this.state.activeIndex + 1;\n\n if (this.animating) {\n this.setState({ closeNow: true, activeIndex: nextIndex });\n } else {\n this.setState({ activeIndex: nextIndex });\n }\n };\n\n /**\n * Function implementation to move to previous slide.\n */\n private readonly _previous = (): void => {\n const slots = this.props.slots && this.props.slots.content;\n const nextIndex = this.state.activeIndex === 0 ? (slots ? slots.length - 1 : 0) : this.state.activeIndex - 1;\n\n if (this.animating) {\n this.setState({ closeNow: true, activeIndex: nextIndex });\n } else {\n this.setState({ activeIndex: nextIndex });\n }\n };\n\n private readonly _onExiting = (): void => {\n this.animating = true;\n };\n\n private readonly _onExited = (): void => {\n this.animating = false;\n this.setState({ closeNow: false });\n };\n\n /**\n * Function implementation to move to a given slide.\n * @param newIndex\n */\n private readonly _goToIndex = (newIndex: number): void => {\n if (this.animating) {\n return;\n }\n this.setState({ activeIndex: newIndex });\n };\n}\n\nexport default CarouselModule;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Carousel } from '@msdyn365-commerce/components';\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ICarouselViewProps } from './carousel';\n\n/**\n * Returns item slots.\n * @returns Array of item slots.\n * @param props -Props.\n */\nconst retrieveItems = (props: ICarouselViewProps): React.ReactNode[] => {\n let items = [];\n items = props.slots && props.slots.content && props.slots.content.length > 0 ? props.slots.content : [];\n return items;\n};\nconst CarouselView: React.FC = props => (\n \n \n \n);\n\nexport default CarouselView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResults,\n CartLineValidationResultsByLineId,\n CartsDataActions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Validate the cart.\n * @param isQuantityLimitsFeatureEnabled -- Is the quantity limits feature enabled.\n * @param cart -- The cart state to validate.\n * @param telemetry -- The telemetry.\n * @param propsContext -- The props context.\n * @param shouldRetry -- Should retry.\n * @returns A list of line data validation failures.\n */\nexport async function validateCartAsync(\n cart: AsyncResult,\n telemetry: ITelemetry,\n propsContext: ICoreContext,\n shouldRetry: boolean = true\n): Promise {\n let cartResult: ICartState;\n let cartVersion: number | undefined;\n try {\n cartResult = await cart;\n cartVersion = cartResult.cart.Version;\n } catch (error) {\n telemetry.warning(error);\n telemetry.debug('Unable to get cart or cart version.');\n return AsyncResult.resolve();\n }\n\n if (cartVersion) {\n try {\n const validationResult: CartLineValidationResults = await CartsDataActions.validateForCheckoutAsync(\n { callerContext: propsContext.actionContext, bypassCache: 'none' },\n cartResult.cart.Id,\n cartVersion\n );\n\n return await AsyncResult.resolve(validationResult.ValidationResultsByLineId ?? undefined);\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- error type is not defined.\n if (shouldRetry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n try {\n await cartResult.refreshCart({});\n } catch (refreshError) {\n telemetry.warning(refreshError);\n telemetry.debug('Unable to refresh Cart');\n return AsyncResult.resolve();\n }\n try {\n await validateCartAsync(cart, telemetry, propsContext, false);\n return AsyncResult.resolve();\n } catch (validateError) {\n telemetry.warning(validateError);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n }\n\n telemetry.warning(error);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n } else {\n telemetry.warning('Cart version not found for Cart validation request.');\n return AsyncResult.resolve();\n }\n}\n\n/**\n * Check if cart line quantity update is success.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function isCartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult.status === 'SUCCESS');\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve(false);\n}\n\n/**\n * Update cart line with cart action result.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function cartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult);\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve();\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Find the product in array of products considering product id.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @returns - The found product.\n */\nexport function getProductByProductId(productId: number | undefined, products?: SimpleProduct[]): SimpleProduct | undefined {\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId;\n });\n }\n\n return undefined;\n}\n\n/**\n * Find the product in array of products considering product id and product behavior's warehouse.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @param warehouseId - Warehouse id of cartLine.\n * @param cartState - The cart start in case cart line has no warehouse.\n * @returns - The found product.\n */\nexport function getProductByProductIdAndWarehouse(\n productId: number | undefined,\n products?: SimpleProduct[],\n warehouseId?: string,\n cartState?: ICartState\n): SimpleProduct | undefined {\n const targetWarehouseValue = warehouseId ?? cartState?.cart.WarehouseId;\n\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId && product.Behavior?.InventoryLocationId === targetWarehouseValue;\n });\n }\n\n return undefined;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLineItemComponent, ICartlineResourceString } from '@msdyn365-commerce/components';\nimport MsDyn365, { ICoreContext, IGridSettings, IImageSettings, ITelemetry, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n OrgUnitLocation,\n ProductAvailableQuantity,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync, IProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\n\nexport interface IFlyoutCartLineItemsProps {\n cartlines: CartLine[];\n cartState: ICartState | undefined;\n orgUnitLocations: OrgUnitLocation[] | undefined;\n resources: ICartlineResourceString;\n productAvailabilites: IProductInventoryInformation[] | undefined;\n products: SimpleProduct[] | undefined;\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\n pickupDeliveryModeCode?: string;\n catalogs?: ProductCatalog[];\n\n /**\n * GridSettings for the product image in cartline\n */\n gridSettings: IGridSettings;\n\n /**\n * ImageSettings for the product image in cartline\n */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n removeButtonText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n maxCartlineQuantity: number;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n isQuantityLimitsFeatureEnabled: boolean;\n\n outOfStockThreshold: number;\n isStockCheckEnabled: boolean;\n telemetryContent?: ITelemetryContent;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\nexport interface IFlyoutCartLineItemViewProps {\n cartline: React.ReactNode;\n remove: React.ReactNode;\n storeLocation: React.ReactNode;\n hasError: boolean;\n\n data: {\n product: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n outOfStockThreshold: number,\n productAvailability?: ProductAvailableQuantity\n): number => {\n if (isStockCheckEnabled) {\n if (\n !productAvailability ||\n !productAvailability.AvailableQuantity ||\n productAvailability.AvailableQuantity <= 0 ||\n productAvailability.AvailableQuantity <= outOfStockThreshold\n ) {\n return 0;\n }\n return productAvailability.AvailableQuantity - outOfStockThreshold;\n }\n\n return 0;\n};\n\nconst _getCartItemMaxQuantity = (\n maxQuantityByConfig: number,\n isStockCheckEnabled: boolean,\n availableQuantityInStock: number,\n isQuantityLimitsFeatureEnabled: boolean,\n maxByQuantityLimitsFeature: number\n) => {\n if (isQuantityLimitsFeatureEnabled) {\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\n\n // If max by feature in not defined when feature is on then we suggest that there is no max by feature\n // and consider available qty if stock check enabled and max from config in site settings.\n if (!maxByQuantityLimitsFeature) {\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\n }\n\n return isStockCheckEnabled\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\n ? maxByQuantityLimitsFeatureResult\n : availableQuantityInStock\n : maxByQuantityLimitsFeatureResult;\n }\n if (isStockCheckEnabled) {\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\n }\n return maxQuantityByConfig;\n};\n\n/**\n * On Remove Click functionality.\n * @param removeItemClickHandler -Remove item click function.\n * @param cartline -CartLine.\n * @returns Remove change value.\n */\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\n removeItemClickHandler(cartline);\n};\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct,\n props: IFlyoutCartLineItemsProps,\n index: number,\n foundProductAvailability?: ProductAvailableQuantity,\n foundProductDeliveryOptions?: ProductDeliveryOptions\n): IFlyoutCartLineItemViewProps => {\n const { imageSettings, gridSettings, id, typeName, context, resources, removeButtonText, removeItemClickHandler } = props;\n\n const availableQuantityInStock = _getCartItemAvailableQuantity(\n props.isStockCheckEnabled,\n props.outOfStockThreshold,\n foundProductAvailability\n );\n const maxQuantity =\n product &&\n _getCartItemMaxQuantity(\n props.maxCartlineQuantity,\n props.isStockCheckEnabled,\n availableQuantityInStock,\n props.isQuantityLimitsFeatureEnabled,\n product?.Behavior?.MaximumQuantity || 0\n );\n\n // Check if the product is service or not by product type\n const isServiceItem = product.ItemTypeValue === ReleasedProductType.Service;\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.RemoveCartItem);\n const removeCartItemAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n let productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n\n return {\n data: {\n product,\n cartline\n },\n hasError: !isServiceItem && props.isStockCheckEnabled ? cartline.Quantity! > maxQuantity : false,\n cartline: (\n \n ),\n remove: (\n \n {removeButtonText}\n \n ),\n storeLocation: _renderStoreLocation(cartline, props)\n };\n};\n\nconst _renderDeliveryLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): string | undefined => {\n let deliverylocation;\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartLine.ProductId;\n });\n }\n const delivery = foundProductDeliveryOption?.DeliveryOptions?.find(option => option.Code === cartLine.DeliveryMode);\n const location = delivery?.Description;\n\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n if (location) {\n deliverylocation = `${location}, ${orgUnitName}`;\n } else {\n deliverylocation = `${orgUnitName}`;\n }\n } else {\n deliverylocation = props.resources.shippingText;\n }\n return deliverylocation;\n};\n\nconst _renderStoreLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): JSX.Element | null => {\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n if (orgUnitName) {\n return (\n
    \n {orgUnitName}\n
    \n );\n }\n }\n\n return null;\n};\n\nconst _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\n return '';\n }\n\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\n });\n\n if (foundLocation) {\n return foundLocation.OrgUnitName;\n }\n return fulfillmentStoreId;\n};\n\nconst _assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: IFlyoutCartLineItemsProps\n): IFlyoutCartLineItemViewProps[] | null => {\n const reactNodes: IFlyoutCartLineItemViewProps[] = [];\n\n if (!products || products.length === 0) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n\n cartlines.map((cartline, index) => {\n let product;\n if (props.isQuantityLimitsFeatureEnabled) {\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\n // to check productId and WarehouseId for identification.\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\n } else {\n product = getProductByProductId(cartline.ProductId, products);\n }\n let foundProductAvailability;\n if (props.productAvailabilites && props.productAvailabilites.length > 0) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n return productAvailability.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\n });\n }\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n if (product) {\n reactNodes.push(\n _assembleNode(\n cartline,\n product,\n props,\n index,\n foundProductAvailability?.ProductAvailableQuantity,\n foundProductDeliveryOption\n )\n );\n }\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n */\n\nexport const FlyoutCartLineItems = (props: IFlyoutCartLineItemsProps) => {\n const { products, cartlines } = props;\n return _assembleCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ProductDeliveryOptions, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n ActiveCartProductsInput,\n getActiveCartProductsAction,\n getAvailabilitiesForCartLineItems,\n getDeliveryOptionsForCartLineItems,\n IProductInventoryInformation,\n ProductAvailabilitiesForCartLineItems,\n ProductDeliveryOptionsForCartLineItems\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IMiniCartData entity interface.\n */\nexport interface IMiniCartData {\n products?: SimpleProduct[];\n productAvailabilites?: IProductInventoryInformation[];\n deliveryOptions?: ProductDeliveryOptions[];\n}\n\nexport const createInput = () => {\n return new ActiveCartProductsInput();\n};\n\n/**\n * Calls the Retail API and returns a mini cart data.\n * @param ctx\n * @param cartState\n */\nexport async function getMiniCartData(ctx: IActionContext, cartState: ICartState): Promise {\n const miniCartData: IMiniCartData = {};\n\n const cart = cartState.cart;\n\n // If there are cart lines, make call to get products\n // If there are invocie linese, then there is no products, so don't make call to get products\n if (cart && cart.CartLines && cart.CartLines.length > 0 && !cartState.hasInvoiceLine) {\n await getActiveCartProductsAction(new ActiveCartProductsInput(), ctx)\n .then(products => {\n if (products) {\n miniCartData.products = products;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n\n await getAvailabilitiesForCartLineItems(new ProductAvailabilitiesForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(availableQuantity => {\n if (availableQuantity) {\n miniCartData.productAvailabilites = availableQuantity;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n\n await getDeliveryOptionsForCartLineItems(new ProductDeliveryOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(deliveryOptions => {\n if (deliveryOptions) {\n miniCartData.deliveryOptions = deliveryOptions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n }\n\n return miniCartData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToCartBehavior, CartIconComponent } from '@msdyn365-commerce/components';\nimport { getUrlSync, IDictionary, IImageSettings, msdyn365Commerce, TelemetryEvent } from '@msdyn365-commerce/core';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n CartLineValidationResultsByLineId,\n OrgUnitLocation\n} from '@msdyn365-commerce/retail-proxy';\nimport { validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\nimport { ArrayExtensions, validateCartLinesInventory } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant,\n UncontrolledTooltip,\n updateMaxQuantityForCartLineItem,\n urlCheck\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport React from 'react';\n\nimport { ICartIconData } from './cart-icon.data';\nimport { cartLinesSortOrder, ICartIconProps } from './cart-icon.props.autogenerated';\nimport { FlyoutCartLineItems, IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\nimport { getMiniCartData, IMiniCartData } from './utils/get-products-in-mini-cart';\n\nexport interface IMiniCartState {\n miniCartData: IMiniCartData;\n orgUnitLocations?: OrgUnitLocation[];\n isQuantityLimitsFeatureEnabled: boolean;\n isCartValid: boolean;\n}\n\nexport interface ICartIconViewProps extends ICartIconProps {\n className: string;\n cartIcon: React.ReactNode;\n FlyoutContainer?: INodeProps;\n CartlinesWrapper: INodeProps;\n miniCartWrapper: INodeProps;\n miniCartItemWrapper: INodeProps;\n cartlines?: IFlyoutCartLineItemViewProps[];\n flyoutTitle: React.ReactNode;\n totalPrice: React.ReactNode;\n checkoutAsGuestButton?: React.ReactNode;\n checkoutAsSignInUserButton?: React.ReactNode;\n goToCartButton?: React.ReactNode;\n waitingComponent?: React.ReactNode;\n isCartLoading: boolean;\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\n\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\n/**\n *\n * Cart component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass CartIcon extends React.Component, IMiniCartState> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly checkoutBySignInAttributes: IDictionary | undefined;\n\n private readonly checkoutByGuestAttributes: IDictionary | undefined;\n\n private readonly viewShoppingBagAttributes: IDictionary | undefined;\n\n private retailMultiplePickUpOptionEnabled?: boolean = false;\n\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n private lastValidatedCartVersion: number | undefined;\n\n constructor(props: ICartIconProps) {\n super(props);\n this.state = {\n miniCartData: {},\n isCartValid: true,\n isQuantityLimitsFeatureEnabled: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const payload = getPayloadObject(TelemetryEvent.CheckOut, this.telemetryContent, TelemetryConstant.Checkout);\n this.checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n\n payload.contentAction.etext = TelemetryConstant.GuestCheckout;\n this.checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n\n payload.contentAction.etext = TelemetryConstant.ViewShoppingBag;\n this.viewShoppingBagAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n }\n\n public async componentDidMount(): Promise {\n const context = this.props.context.actionContext;\n\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n this.setState({\n miniCartData: await getMiniCartData(context, this.props.data.cart.result!)\n });\n }\n );\n await this._setQuantityLimitsFeatureFlag();\n\n this.setState({\n orgUnitLocations: this.props.data.orgUnitLocations?.result\n });\n\n this._validateCart();\n }\n\n public componentDidUpdate(prevProps: ICartIconProps): void {\n this._validateCart();\n }\n\n public shouldComponentUpdate(nextProps: ICartIconProps, nextState: IMiniCartState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line complexity -- disabling the complexity for this method for now as its causing lot of other warnings\n public render(): JSX.Element | null {\n const {\n id,\n typeName,\n config: { enableHoverCart, isAnonymousCheckout },\n context: {\n request: {\n user: { isAuthenticated, signInUrl }\n }\n },\n context,\n resources\n } = this.props;\n\n const cart = (this.props.data.cart && this.props.data.cart.result) || undefined;\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\n const cartUrl = getUrlSync('cart', this.props.context.actionContext) || '';\n const checkoutURL = this._getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\n const shouldShowMiniCart =\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\n const hasInvoiceLine = cart?.hasInvoiceLine;\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n const cartLines = this._getCartLines();\n const validInventoryAcrossCartLines = validateCartLinesInventory(\n cart?.cart.CartLines ?? [],\n this.state.miniCartData.productAvailabilites ?? [],\n this.props.context.actionContext,\n this.state.miniCartData.products ?? [],\n emailDeliveryModeCode\n );\n const hasError =\n !validInventoryAcrossCartLines?.isValid ||\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\n const includeFlyout = this.props.data.cart && this.props.data.cart.status === 'SUCCESS' && enableHoverCart;\n const totalItemsInCart = cart?.totalItemsInCart ? cart.totalItemsInCart : 0;\n const goToCartButtonText = resources.goToCartButtonTitle.replace('{count}', totalItemsInCart.toString());\n const flyoutTitle = resources.flyoutTitle;\n const flyoutTooltip = {\n tag: UncontrolledTooltip,\n shouldShowMiniCart,\n placement: 'bottom-end',\n hideArrow: true,\n className: 'ms-cart-icon__flyout-container',\n trigger: 'hover',\n displayMode: 'FLYOUT',\n target: id,\n shouldShowCloseButton: true,\n cartPageUrl: cartUrl,\n hideAriaHidden: true\n };\n\n // If there are invoice lines, don't update mini cart price\n const price = (cart && !cart.hasInvoiceLine && cart.cart.TotalAmount) || undefined;\n const priceString = price\n ? resources.totalPriceFormatString.replace('{price}', context.cultureFormatter.formatCurrency(price))\n : '';\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n this.channelDeliveryOptionConfig = this.props.data.channelDeliveryOptionConfig?.result;\n this.retailMultiplePickUpOptionEnabled = this.props.data.featureState?.result?.find(\n feature => feature.Name === multiplePickupStoreSwitchName\n )?.IsEnabled;\n\n const viewProps = {\n ...this.props,\n cartIcon: (\n \n ),\n cartlines: cartLines,\n FlyoutContainer: includeFlyout ? flyoutTooltip : undefined,\n CartlinesWrapper: {\n className: 'ms-cart-icon__cart-lines'\n },\n miniCartWrapper: {\n className: classnames('ms-cart-icon'),\n id: this.props.id\n },\n miniCartItemWrapper: {\n className: classnames('msc-cart-lines-item')\n },\n\n // If there are invoice lines, don't update mini cart checkout button\n // Checkout button will display by default to maintain backward compatibility. When Anonymous user checkout is enabled &&\n // user is authenticated then we will show the checkout button otherwise we will show the guest checkout button.\n checkoutAsSignInUserButton:\n !isCartEmpty && !hasInvoiceLine && (!isAnonymousCheckout || isAuthenticated) ? (\n \n {resources.checkoutButtonTitle}\n \n ) : null,\n checkoutAsGuestButton:\n isAnonymousCheckout && !isCartEmpty && !isAuthenticated ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n goToCartButton: (\n \n {goToCartButtonText}\n \n ),\n checkoutBlockedDueToUnavailableFunds: null,\n flyoutTitle: {flyoutTitle},\n totalPrice:
    {priceString}
    \n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _validateCart(): void {\n const {\n data: { cart }\n } = this.props;\n const cartVersion = cart.result?.cart?.Version ?? undefined;\n if (this.lastValidatedCartVersion === cartVersion) {\n return;\n }\n\n this.lastValidatedCartVersion = cartVersion; // This field is populated to block concurrent requests\n\n if (this.state.isQuantityLimitsFeatureEnabled) {\n validateCartAsync(cart, this.props.telemetry, this.props.context)\n .then((result: CartLineValidationResultsByLineId | undefined) => {\n this.setState({ isCartValid: !ArrayExtensions.hasElements(result?.ValidationResultsPairs) });\n })\n .catch(() => {\n this.setState({ isCartValid: false });\n });\n } else {\n this.setState({ isCartValid: true });\n }\n }\n\n private _getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\n if (isAuthenticated) {\n return guestCheckoutUrl;\n }\n\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\n let returnURL = guestCheckoutUrl;\n if (msdyn365Commerce.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Sort cartline items.\n * @param cartlines - Cartlines to be sorted.\n * @param sortOrder - Ascending or descending.\n * @returns - Sorted cartlines.\n */\n private readonly getSortedCartLines = (cartlines: CartLine[], sortOrder?: cartLinesSortOrder): CartLine[] => {\n const lines: CartLine[] = [...cartlines];\n const zero: number = 0;\n\n if (sortOrder === cartLinesSortOrder.descending) {\n return lines.sort((item1, item2) => (item2.LineNumber ?? zero) - (item1.LineNumber ?? zero));\n }\n return lines.sort((item1, item2) => (item1.LineNumber ?? zero) - (item2.LineNumber ?? zero));\n };\n\n private _getCartLines(): IFlyoutCartLineItemViewProps[] | null {\n const {\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources\n } = this.props;\n\n const imageSettings = this._getImageSettings(config.imageSettings);\n const cart = this.props.data.cart && this.props.data.cart.result;\n\n // Cart-icon could be placed in each page\n // so we check cart content to reduce number of RS calls\n return this.state.miniCartData.products && cart && cart.cart.CartLines && cart.cart.CartLines.length > 0\n ? FlyoutCartLineItems({\n cartlines: this.getSortedCartLines(cart.cart.CartLines, config.cartLinesSortOrder),\n products: this.state.miniCartData.products,\n productAvailabilites: this.state.miniCartData.productAvailabilites,\n productDeliveryOptions: this.state.miniCartData.deliveryOptions,\n imageSettings,\n outOfStockThreshold: this.props.context.app.config.outOfStockThreshold || 0,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n quantityDisplayString: resources.quantityDisplayText,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n inputQuantityAriaLabel: '', // Not used\n discountStringText: '', // Not used\n originalPriceText: '',\n currentPriceText: '',\n shippingChargesText: '',\n shippingText: resources.shippingText\n },\n telemetry,\n removeButtonText: resources.removeCartButtonText,\n outOfStockText: '', // Not used\n outOfRangeOneText: '', // Not used\n outOfRangeFormatText: '', // Not used\n cartState: cart,\n orgUnitLocations: this.state.orgUnitLocations,\n removeItemClickHandler: this._removeItemFromCartHandler,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n telemetryContent: this.telemetryContent,\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined,\n isQuantityLimitsFeatureEnabled: this.state.isQuantityLimitsFeatureEnabled,\n catalogs: this.props.data.catalogs?.result\n })\n : null;\n }\n\n private readonly _getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n private readonly _removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\n if (this.props.data.cart.result) {\n const input = {\n cartLineIds: [cartlineToRemove.LineId!.toString()]\n };\n this.props.data.cart.result.removeCartLines(input).catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n private async _setQuantityLimitsFeatureFlag(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled || false;\n if (isChannelQuantityLimitsFeatureEnabledInHq) {\n this.setState({ isQuantityLimitsFeatureEnabled: true });\n return;\n }\n\n const useSiteBuilderSettings = featureStatuses?.find(\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (!defaultOrderQuantityLimitsFeatureConfig || defaultOrderQuantityLimitsFeatureConfig === 'none') {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n\n try {\n const featureStatuses = await this.props.data.featureState;\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n this.setState({ isQuantityLimitsFeatureEnabled: true });\n } else {\n this.props.data.customerInformation\n .then(customerInfo => {\n const result =\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b));\n this.setState({ isQuantityLimitsFeatureEnabled: result });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n });\n }\n } else {\n const cartConfiguration = await this.props.data.cartConfiguration;\n this.setState({ isQuantityLimitsFeatureEnabled: !(cartConfiguration?.IgnoreOrderSettings ?? false) });\n return;\n }\n }\n}\n\nexport default CartIcon;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartIconViewProps } from './cart-icon';\nimport { IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\n\nconst _renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\n if (!cartLines) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n return cartLines.map((cartLine, index) => {\n return (\n \n {cartLine.cartline}\n {cartLine.storeLocation}\n {cartLine.remove}\n \n );\n });\n};\n\nconst CartIconView: React.FC = (props: ICartIconViewProps) => (\n \n {props.cartIcon}\n {props.FlyoutContainer ? (\n \n {props.flyoutTitle}\n {props.checkoutBlockedDueToUnavailableFunds}\n {_renderCartlines(props.cartlines, props)}\n {props.totalPrice}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.goToCartButton}\n \n ) : (\n false\n )}\n \n);\n\nexport default CartIconView;\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","/*!\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 * as React from 'react';\n\nexport default (props: { className: string; msg?: string }) => (\n <>\n
    \n {props?.msg &&
    {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 { 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 { 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 {\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 { 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 msdyn365Commerce, { getCatalogId, getUrlSync, IImageSettings, Image, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n convertProductDimensionTypeToDimensionTypes,\n getFallbackImageUrl,\n getProductUrlSync,\n ObjectExtensions,\n Random,\n StringExtensions,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IModuleProps, isMobile, VariantType, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { RemoveFromComparisonButtonComponent } from '../product-comparison';\nimport { ProductComparisonState } from '../product-comparison-state';\nimport {\n getProductsInPreviewProductComparisonAction,\n GetProductsInPreviewProductComparisonInput,\n IProductComparisonProductData\n} from './actions';\nimport { IProductComparisonPreviewData } from './product-comparison-preview.data';\nimport { IProductComparisonPreviewProps } from './product-comparison-preview.props.autogenerated';\n\n/**\n * Represents product comparison view props for main product info.\n */\nexport interface IProductComparisonPreviewProductMainInfo {\n productData: IProductComparisonProductData;\n productNameLink?: string;\n\n removeFromComparisonButton: React.ReactNode;\n productImage: React.ReactNode;\n productLink: React.ReactNode;\n}\n\n/**\n * Represents product comparison view props.\n */\nexport interface IProductComparisonPreviewViewProps extends IProductComparisonPreviewProps<{}> {\n moduleProps: IModuleProps;\n collapseButton: INodeProps;\n isMainContentReady: boolean;\n\n hasUserInteractedWithComparison?: boolean;\n isExpanded?: boolean;\n subheaderText?: string;\n productsMainInfo?: IProductComparisonPreviewProductMainInfo[];\n previewGreyPlaceHolders?: React.ReactNode;\n\n productComparisonLink?: string;\n goToComparisonButton?: React.ReactNode;\n clearAllButton?: React.ReactNode;\n\n handleCollapseClick?(): void;\n clearAllProductsFromTheComparison?(): void;\n removeProductFromList?(itemId: string): void;\n}\n\n/**\n * Extended props for the module including info about the product.\n */\nexport interface IProductComparisonPreviewState {\n isExpanded?: boolean;\n productsData?: IProductComparisonProductData[];\n greyPlaceHoldersCount?: number;\n}\n\n/**\n * Extended props for the module including info about the product.\n */\nexport interface IProductComparisonPreviewFullProps extends IProductComparisonPreviewProps {}\n\n/**\n * Represents the component which renders product comparison table.\n */\nexport class ProductComparisonPreview extends React.PureComponent {\n public static readonly className = 'ms-product-comparison-preview';\n\n public static readonly containerClassName = `${ProductComparisonPreview.className}__container`;\n\n public static readonly mainContainerClassName = `${ProductComparisonPreview.containerClassName}__main-container`;\n\n public static readonly headerClassName = `${ProductComparisonPreview.mainContainerClassName}__header`;\n\n public static readonly headerLabelClassName = `${ProductComparisonPreview.headerClassName}__label`;\n\n public static readonly tableClassName = `${ProductComparisonPreview.mainContainerClassName}__table`;\n\n public static readonly tableRowClassName = `${ProductComparisonPreview.tableClassName}__product-row`;\n\n public static readonly footerClassName = `${ProductComparisonPreview.mainContainerClassName}__footer`;\n\n public static readonly collapseButtonClassName = `${ProductComparisonPreview.headerClassName}__collapse`;\n\n public static _displayedInstanceId?: string;\n\n private readonly _instanceId: string;\n\n private _hasUserInteractedWithComparison: boolean;\n\n public constructor(props: IProductComparisonPreviewFullProps) {\n super(props);\n\n this.state = {};\n\n this._instanceId = `${ProductComparisonPreview.className}-${this.props.id}-${Random.Guid.generateGuid()}`;\n ProductComparisonPreview._displayedInstanceId = this._instanceId;\n\n this._hasUserInteractedWithComparison = false;\n }\n\n public componentDidMount(): void {\n if (this._instanceId !== ProductComparisonPreview._displayedInstanceId) {\n return;\n }\n\n this._loadProducts();\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).listModifiedEvent.subscribe(\n {\n instanceId: this._instanceId,\n\n /**\n * Updates the state in case the state for the particular product was changed.\n */\n handler: () => {\n this._hasUserInteractedWithComparison = true;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Initialize data downloading.\n this._loadProducts();\n }\n }\n );\n }\n\n public componentWillUnmount(): void {\n ProductComparisonState.instance(\n this.props.context.request,\n this.props.data.accountInformation?.result\n ).listModifiedEvent.unsubscribe(this._instanceId);\n }\n\n public render(): React.ReactNode {\n if (this._instanceId !== ProductComparisonPreview._displayedInstanceId) {\n return null;\n }\n\n const viewProps: IProductComparisonPreviewViewProps = {\n ...this.props,\n moduleProps: {\n moduleProps: this.props,\n className: ProductComparisonPreview.className,\n id: this._instanceId\n },\n collapseButton: this._renderCollapseButton(),\n isMainContentReady: false,\n hasUserInteractedWithComparison: this._hasUserInteractedWithComparison\n };\n\n const productData = this._getProdutComparisonDataByCatalogId(this.state.productsData ?? this.props.data.productsData?.result);\n\n if (!ArrayExtensions.hasElements(productData)) {\n return this.props.renderView(viewProps);\n }\n\n viewProps.isMainContentReady = true;\n\n const productsLimit = this._getProductsLimit();\n if (!ObjectExtensions.isNullOrUndefined(productsLimit)) {\n viewProps.subheaderText = this.props.resources.productComparisonPreviewHeaderTextWithLimit\n .replace('{0}', productData.length.toString())\n .replace('{1}', productsLimit.toString());\n }\n\n viewProps.isExpanded = this.state.isExpanded;\n viewProps.handleCollapseClick = this._handleCollapseClick;\n viewProps.productsMainInfo = this._getProductsMainInfo(productData);\n viewProps.previewGreyPlaceHolders = this._renderGreyPlaceHolders(productData);\n viewProps.productComparisonLink = getUrlSync('product-comparison', this.props.context.actionContext);\n viewProps.clearAllProductsFromTheComparison = this._clearAllProductsFromTheComparison;\n viewProps.removeProductFromList = this._removeProductFromList;\n viewProps.goToComparisonButton = this._renderGoToComparisonButton(viewProps.productComparisonLink);\n viewProps.clearAllButton = this._renderClearAllButton();\n\n return this.props.renderView(viewProps);\n }\n private _getProdutComparisonDataByCatalogId(productData: IProductComparisonProductData[] | undefined): IProductComparisonProductData[] {\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n const productByCatalogId = productData?.filter(product => product.catalogId === catalogId) ?? [];\n return productByCatalogId;\n }\n private async _loadProducts(): Promise {\n const items = ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).items;\n const input = new GetProductsInPreviewProductComparisonInput(items);\n const productData = await getProductsInPreviewProductComparisonAction(input, this.props.context.actionContext);\n const productDataByCatalogId = this._getProdutComparisonDataByCatalogId(productData);\n this.setState({ productsData: productDataByCatalogId });\n this._getGreyPlaceHoldersCount(productDataByCatalogId);\n }\n\n private _getGreyPlaceHoldersCount(productData: IProductComparisonProductData[]): number | undefined {\n if (productData && ArrayExtensions.hasElements(productData)) {\n const limit = this._getProductsLimit();\n if (limit && this.props.context.app.config.displayGreyPlaceHolders) {\n const placeHolder = limit - productData.length;\n this.setState({ greyPlaceHoldersCount: placeHolder });\n return placeHolder;\n }\n }\n return;\n }\n\n private _getProductsMainInfo(products: IProductComparisonProductData[]): IProductComparisonPreviewProductMainInfo[] {\n const productImageContainerClassName = `${ProductComparisonPreview.tableRowClassName}__product-image-container`;\n const productImageClassName = `${productImageContainerClassName}__product-image`;\n const productNameClassName = `${ProductComparisonPreview.tableRowClassName}__product-name`;\n\n return products.map(productData => {\n const product = productData.product;\n\n let productNameLink: string | undefined;\n if (msdyn365Commerce.isBrowser) {\n const productUrl = getProductUrlSync(product, this.props.context.actionContext);\n const fullUrl = new URL(productUrl, window.location.href);\n if (isChannelTypeB2B(this.props.context.actionContext.requestContext)) {\n fullUrl.searchParams.set('catalogid', `${productData.catalogId}`);\n }\n product.Dimensions?.map(dimension => {\n const dimensionValue = dimension.DimensionValue?.Value;\n if (!StringExtensions.isNullOrWhitespace(dimensionValue)) {\n const dimensionName = convertProductDimensionTypeToDimensionTypes(dimension.DimensionTypeValue);\n fullUrl.searchParams.set(dimensionName, dimensionValue!);\n }\n });\n productNameLink = fullUrl.href;\n }\n\n return {\n productNameLink,\n productData,\n removeFromComparisonButton: (\n \n ),\n productImage: (\n \n {this._renderProductImage(productImageClassName, productData.product)}\n \n ),\n productLink: (\n \n {productData.product.Name}\n \n )\n };\n });\n }\n\n /**\n * Represents product comparison preview view.\n * @returns Elements.\n */\n private _renderGreyPlaceHolders = (productData: IProductComparisonProductData[]): React.ReactNode[] | undefined => {\n const counts = this.state.greyPlaceHoldersCount;\n if (this.props.context.app.config.displayGreyPlaceHolders && counts! > 0) {\n const elements = [];\n for (let index = 0; index < counts!; index++) {\n elements.push(\n \n
    \n \n );\n }\n return elements;\n }\n return;\n };\n\n /**\n * Removes the product from a list.\n * @param itemId - The id of a product to remove.\n */\n private readonly _removeProductFromList = (itemId: string): void => {\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).removeItemById(itemId);\n this.setState(previousState => {\n return {\n productsData: previousState.productsData?.filter(item => item.itemId !== itemId)\n };\n });\n };\n\n /**\n * Toggle collapsing.\n */\n private readonly _handleCollapseClick: () => void = () => {\n this.setState(previousState => {\n return {\n isExpanded: !(previousState.isExpanded ?? this._hasUserInteractedWithComparison)\n };\n });\n };\n\n /**\n * Removes all products from the comparison.\n */\n private readonly _clearAllProductsFromTheComparison = () => {\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).clearAll();\n this.setState({ productsData: [] });\n };\n\n private _getProductsLimit(): number | undefined {\n const viewport = isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n if (viewport === 'xs' || viewport === 'sm') {\n return this.props.context.app.config.productComparisonMobileProductsLimit;\n }\n return this.props.context.app.config.productComparisonDesktopProductsLimit;\n }\n\n /**\n * Retrieves product image react node.\n * @param className - Class name to use.\n * @param product - Product info.\n * @returns React node.\n */\n private _renderProductImage(className: string, product?: SimpleProduct): React.ReactNode | undefined {\n if (ObjectExtensions.isNullOrUndefined(product)) {\n return undefined;\n }\n\n const defaultImageSettingQ = 'w=140&h=140&m=6';\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: defaultImageSettingQ, w: 0, h: 0 },\n lg: { q: defaultImageSettingQ, w: 0, h: 0 },\n xl: { q: defaultImageSettingQ, w: 0, h: 0 }\n },\n lazyload: true\n };\n\n return (\n \n );\n }\n\n private _renderCollapseButton(): INodeProps {\n const shouldBeExpanded = this.state.isExpanded ?? this._hasUserInteractedWithComparison;\n const headerContainerClassName = `${ProductComparisonPreview.mainContainerClassName}__header_button`;\n let collapseClassName = `${ProductComparisonPreview.collapseButtonClassName}__expanded`;\n if (!shouldBeExpanded) {\n collapseClassName = `${ProductComparisonPreview.collapseButtonClassName}__collapsed`;\n }\n\n return {\n className: classnames(headerContainerClassName, ProductComparisonPreview.collapseButtonClassName, collapseClassName),\n onClick: this._handleCollapseClick,\n role: 'button',\n tabIndex: 0\n };\n }\n\n private _renderGoToComparisonButton(productComparisonLink: string | undefined): React.ReactNode {\n return (\n \n {this.props.resources.productComparisonCompareProductsButtonText}\n \n );\n }\n\n private _renderClearAllButton(): React.ReactNode {\n return (\n \n {this.props.resources.productComparisonClearAllProductsButtonText}\n \n );\n }\n}\n\nexport default ProductComparisonPreview;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport msdyn365Commerce from '@msdyn365-commerce/core';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IProductComparisonPreviewViewProps, ProductComparisonPreview } from './product-comparison-preview';\n\n/**\n * Represents product comparison preview view.\n * @param props - View props for product comparison preview.\n * @returns Functional component of product comparison preview.\n */\nexport const ProductComparisonPreviewViewFunctionalComponent: React.FC = props => {\n if (!props.isMainContentReady) {\n return null;\n }\n\n const shouldBeExpanded = props.isExpanded ?? props.hasUserInteractedWithComparison;\n\n const containerClassName = classnames(\n ProductComparisonPreview.mainContainerClassName,\n shouldBeExpanded ? '' : `${ProductComparisonPreview.mainContainerClassName}__collapsed`\n );\n\n return (\n \n \n \n \n \n \n \n \n \n {props.resources.productComparisonPreviewHeaderText}\n \n \n {props.subheaderText}\n \n \n \n \n \n \n \n {props.productsMainInfo?.map(info => {\n return (\n \n {info.removeFromComparisonButton}\n {info.productImage}\n \n );\n })}\n {props.previewGreyPlaceHolders}\n \n \n {props.productsMainInfo?.map(info => {\n return (\n \n {msdyn365Commerce.isBrowser ? info.productLink : undefined}\n \n );\n })}\n \n \n \n \n \n {props.clearAllButton}\n {props.goToComparisonButton}\n \n \n \n \n );\n};\n\nexport default ProductComparisonPreviewViewFunctionalComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getRichTextHtml, ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\nimport { ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport React from 'react';\n\n/**\n * Represents resources for the component.\n */\nexport interface IProductSpecificationResources {\n productComparisonProductItemSpecificationTrue: string;\n productComparisonProductItemSpecificationFalse: string;\n}\n\n/**\n * Represent configuration of the component.\n */\nexport interface IProductSpecificationProps {\n telemetry: ITelemetry;\n specification?: AttributeValue;\n context: ICoreContext;\n\n resources: IProductSpecificationResources;\n}\n\n/**\n * Represents the product specification values that comes from the server.\n */\nexport enum SpecificationDataTypeValues {\n none = 0,\n currency = 1,\n dateTime = 2,\n decimal = 3,\n integer = 4,\n text = 5,\n boolean = 6,\n video = 40,\n image = 41\n}\n\n/**\n * Represents the component which renders product comparison table.\n */\nexport class ProductSpecification extends React.PureComponent {\n private static _renderCurrencyCell(product: AttributeValue): React.ReactNode | null {\n if (ObjectExtensions.isNullOrUndefined(product.CurrencyValue)) {\n return null;\n }\n\n return (\n \n {product.CurrencyCode}\n {product.CurrencyValue}\n \n );\n }\n\n private static _renderDateTimeCell(product: AttributeValue): React.ReactNode | null {\n if (ObjectExtensions.isFunction(product.DateTimeOffsetValue?.toUTCString)) {\n return null;\n }\n\n return {product.DateTimeOffsetValue!.toUTCString()};\n }\n\n private static _renderIntegerCell(product: AttributeValue): React.ReactNode | null {\n if (ObjectExtensions.isNullOrUndefined(product.IntegerValue)) {\n return null;\n }\n\n return {product.IntegerValue};\n }\n\n private static _renderDecimalCell(product: AttributeValue): React.ReactNode | null {\n if (ObjectExtensions.isNullOrUndefined(product.FloatValue)) {\n return null;\n }\n\n return {product.FloatValue};\n }\n\n private static _renderTextCell(product: AttributeValue): React.ReactNode | null {\n if (ObjectExtensions.isNullOrUndefined(product.TextValue)) {\n return null;\n }\n\n // eslint-disable-next-line react/no-danger -- Implementation is a copy.\n return ;\n }\n\n public constructor(props: IProductSpecificationProps) {\n super(props);\n }\n\n public render(): React.ReactNode | null {\n const specification = this.props.specification;\n if (ObjectExtensions.isNullOrUndefined(specification)) {\n return null;\n }\n\n switch (specification.DataTypeValue) {\n case SpecificationDataTypeValues.none:\n // Return span here instead of null so the row still shows\n return ;\n case SpecificationDataTypeValues.currency:\n return ProductSpecification._renderCurrencyCell(specification);\n case SpecificationDataTypeValues.dateTime:\n return ProductSpecification._renderDateTimeCell(specification);\n case SpecificationDataTypeValues.decimal:\n return ProductSpecification._renderDecimalCell(specification);\n case SpecificationDataTypeValues.integer:\n return ProductSpecification._renderIntegerCell(specification);\n case SpecificationDataTypeValues.text:\n return ProductSpecification._renderTextCell(specification);\n case SpecificationDataTypeValues.boolean:\n return this._renderTrueFalseCell(specification);\n case SpecificationDataTypeValues.video:\n this.props.telemetry.warning('Got video specification type, not supported yet so skipping line');\n return null;\n case SpecificationDataTypeValues.image:\n this.props.telemetry.warning('Got image specification type, not supported yet so skipping line');\n return null;\n default:\n this.props.telemetry.warning(`Got unknown specification type ${specification.DataTypeValue ?? 'null'} so skipping line`);\n return null;\n }\n }\n\n private _renderTrueFalseCell(product: AttributeValue): React.ReactNode | null {\n if (product.BooleanValue) {\n return {this.props.resources.productComparisonProductItemSpecificationTrue};\n }\n return {this.props.resources.productComparisonProductItemSpecificationFalse};\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps } from '@msdyn365-commerce/core';\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport React, { useCallback } from 'react';\n\n/**\n * Resources for the remove from comparison button component.\n */\nexport interface IRemoveFromComparisonButtonResources {\n productComparisonRemoveProductFromListAriaLabel: string;\n}\n\n/**\n * The configuration of the remove from comparison button component.\n */\nexport interface IRemoveFromComparisonButtonComponentProps extends IComponentProps {\n className: string;\n itemId: string;\n\n resources: IRemoveFromComparisonButtonResources;\n\n onClickHandler(itemId: string): void;\n}\n\n/**\n * Represents a button which handles adding to product comparison.\n * @param props - Configuration of the component.\n * @returns React functional component.\n */\nconst RemoveFromComparisonButtonFunctionalComponent: React.FC = (\n props: IRemoveFromComparisonButtonComponentProps\n) => {\n const onClick = useCallback(() => {\n props.onClickHandler(props.itemId);\n }, [props]);\n\n const { className } = props;\n\n return \n );\n }\n\n private readonly _goBack = (): void => {\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\n if (document.referrer === '') {\n window.location.href = backToShoppingUrl;\n } else {\n window.history.back();\n }\n };\n\n /**\n * Retrieves localized text for dimension.\n * @param dimensionId - Dimension id.\n * @returns Localized text.\n */\n private _getDimensionName(dimensionId: number): string | undefined {\n if (dimensionId === ProductDimensionType.Color) {\n return this.props.resources.productComparisonProductItemColorDimension;\n }\n if (dimensionId === ProductDimensionType.Size) {\n return this.props.resources.productComparisonProductItemSizeDimension;\n }\n\n if (dimensionId === ProductDimensionType.Style) {\n return this.props.resources.productComparisonProductItemStyleDimension;\n }\n return undefined;\n }\n\n private getUpdatedDimensionsProps(dimensionId: number, products: IProductComparisonProductMainInfo[]) {\n const dimensionClassName = `${ProductComparison.dimensionsRowClassName}__dimension-${dimensionId}`;\n const dimensionDescription = this._getDimensionName(dimensionId);\n const dimensionName = convertProductDimensionTypeToDimensionTypes(dimensionId);\n let dimensionSelectionType = SelectionType.text;\n\n const dimensionsAsSwatchConfiguration: DimensionTypes[] | undefined = this.props.context.app.config.dimensionsAsSwatchType;\n if (\n ArrayExtensions.hasElements(dimensionsAsSwatchConfiguration) &&\n !dimensionsAsSwatchConfiguration?.includes(DimensionTypes.none) &&\n dimensionsAsSwatchConfiguration?.includes(dimensionName)\n ) {\n dimensionSelectionType = SelectionType.swatch;\n }\n\n const productDimensionValues = products.map(productMainInfo => {\n let dimension: IDimensionResult[] = [];\n let textValue: string = '';\n let renderSwatch: JSX.Element | undefined;\n this.props.data.productsData?.result?.map(productsDimension => {\n if (productsDimension.productInfo.RecordId === productMainInfo.product.productInfo.RecordId) {\n dimension = productsDimension.dimensions?.dimensions ?? [];\n }\n return dimension;\n });\n\n if (dimensionSelectionType === SelectionType.swatch) {\n renderSwatch = (\n
    \n {dimension.map(dimensionItems => {\n return (\n \n {dimensionItems.result.map(dimensionItem => {\n let currentDimensionId: number | undefined;\n const swatches =\n dimensionItem.map(swatchItem => {\n let isDefaultDimension: boolean = false;\n const selectedDimensions = productMainInfo.product.productInfo.Dimensions?.filter(\n item => item.DimensionTypeValue === swatchItem.DimensionTypeValue\n );\n selectedDimensions?.map(selectedDimension => {\n if (\n selectedDimension.DimensionValue !== undefined &&\n selectedDimension.DimensionValue.DimensionId ===\n swatchItem.DimensionValue?.DimensionId\n ) {\n isDefaultDimension = true;\n }\n return isDefaultDimension;\n });\n\n if (swatchItem.DimensionTypeValue === dimensionId) {\n currentDimensionId = swatchItem.DimensionTypeValue;\n }\n const dimensionType = dimensionName;\n return {\n itemId: `${swatchItem.DimensionValue?.RecordId ?? ''}-${swatchItem.DimensionValue\n ?.Value ?? ''}`,\n value: swatchItem.DimensionValue?.Value ?? '',\n dimensionType,\n colorHexCode: swatchItem.DimensionValue?.ColorHexCode,\n imageUrl: swatchItem.DimensionValue?.ImageUrl,\n isDefault: isDefaultDimension\n };\n }) ?? [];\n if (currentDimensionId && currentDimensionId === dimensionId) {\n return (\n \n );\n }\n return null;\n })}\n
    \n );\n })}\n
    \n );\n }\n\n if (dimensionSelectionType === SelectionType.text) {\n dimension.map(item => {\n return item.result.map(items => {\n return items.map(dimensionItem => {\n if (dimensionItem.DimensionTypeValue === dimensionId) {\n const productDimensionSeperatorValue =\n textValue !== ''\n ? this.props.resources.productDimensionSeparator\n : this.props.resources.productDimensionSeparator.replace('/', '');\n textValue = textValue + format(productDimensionSeperatorValue, dimensionItem.DimensionValue?.Value ?? '');\n }\n return textValue;\n });\n });\n });\n }\n\n const dimensionProps = {\n RecordId: productMainInfo.product.productInfo.RecordId,\n Value: textValue,\n DimensionId: dimensionId,\n ImageUrl: productMainInfo.product.productInfo.PrimaryImageUrl\n };\n\n return {\n dimensionProps,\n productMainInfo,\n node: (\n
    \n {dimensionSelectionType === SelectionType.swatch ? renderSwatch : dimensionProps.Value}\n
    \n )\n };\n });\n return {\n dimensionId,\n dimensionName: dimensionDescription,\n dimensionClassName,\n productDimensionValues\n };\n }\n private _getSpecificationProps(specifications: AttributeValue[], products: IProductComparisonProductMainInfo[]) {\n return specifications.map(specification => {\n const specificationClassName = `${ProductComparison.specificationsRowClassName}__specification-${specification.Name!}`;\n\n const specificationValues = products.map(productMainInfo => {\n const productSpecification = productMainInfo.product.specifications?.specificationsList.find(\n productSpecifications => productSpecifications.Name === specification.Name\n );\n\n return {\n productSpecification,\n productMainInfo,\n node: (\n
    \n \n
    \n )\n };\n });\n\n return {\n specification,\n specificationClassName,\n specificationValues\n };\n });\n }\n\n private _renderHeading(): React.ReactNode {\n return ;\n }\n\n private _renderLoading(): React.ReactNode {\n return
    {this.props.resources.productComparisonLoadingText}
    ;\n }\n\n private _renderClearAllButton(): React.ReactNode {\n return (\n \n {this.props.resources.productComparisonClearAllButtonText}\n \n );\n }\n\n /**\n * Retrieves unique dimension ids of product.\n * @param products - Product.\n * @returns Unique dimension ids.\n */\n private getProductsDimensionsIds(products: IProductComparisonItemData[]): number[] {\n const dimensions = products.map(product => product.productInfo.Dimensions);\n const allDimensions: ProductDimension[] = ArrayExtensions.flatten(dimensions);\n\n const dimensionIds = ArrayExtensions.validValues(allDimensions.map(dimension => dimension.DimensionTypeValue));\n const uniqueDimensionIds = ArrayExtensions.unique(dimensionIds);\n\n return uniqueDimensionIds;\n }\n\n private _renderPreviousClicker(): React.ReactNode {\n return (\n \n
    \n );\n};\n\n/**\n * Renders quick order grid table rows for desktop view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of quick order grid rows for desktop view.\n */\nexport const QuickOrderGridDesktopTableRowCellComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const productListLine = props.data.product.productLine.productListLine;\n const { min, max, quantity } = props;\n const columnWithNumberClassName = `${props.className}__column-with-number`;\n if (product !== undefined) {\n let productUrl = '';\n if (!StringExtensions.isNullOrWhitespace(product.Name) && !ObjectExtensions.isNullOrUndefined(product.RecordId)) {\n productUrl = getProductPageUrlSync(product.Name!, product.RecordId, props.context.actionContext);\n }\n\n return (\n <>\n \n \n \n {product.ItemId}\n \n
    \n \n {product.Name}\n \n \n {product.Dimensions?.map(dimension => dimension.DimensionValue?.Value)\n .filter(dimensionValue => !StringExtensions.isNullOrWhitespace(dimensionValue))\n .join(props.resources.quickOrderGridProductDimensionsSeparator)}\n \n
    \n \n {renderProductPrice(props)}\n {renderUnitOfMeasure(props)}\n \n \n \n \n \n \n \n );\n }\n\n return null;\n};\n\n/**\n * Renders rows for mobile view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of quick order grid rows for mobile view.\n */\nexport const QuickOrderGridMobileTableRowCellComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const productListLine = props.data.product.productLine.productListLine;\n const { min, max, quantity } = props;\n if (product !== undefined) {\n return (\n <>\n \n \n \n \n
    \n {product.RecordId}\n \n \n \n
    \n \n \n \n \n \n );\n }\n return null;\n};\n\n/**\n * Quick order table row component.\n * @param props - Configuration of the component.\n * @returns React node for the row.\n */\nexport const QuickOrderGridTableRowComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const rowClassName = `${props.className}__row`;\n const isMobileView = isMobile({ variant: VariantType.Viewport, context: props.context.request }) === 'xs';\n let headerCells: JSX.Element;\n if (isMobileView) {\n headerCells = ;\n } else {\n headerCells = ;\n }\n\n return (\n \n {headerCells}\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 MsDyn365, { IComponent, IComponentProps, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport React from 'react';\n\nimport { ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { QuickOrderGridProduct } from '../quick-order-grid-product';\nimport { IQuickOrderGridRowCallbacks } from '../utilities';\nimport {\n IQuickOrderGridTableHeaderResources,\n IQuickOrderGridTableRowResources,\n QuickOrderGridTableHeaderComponent,\n QuickOrderGridTableRowComponent\n} from './components';\n\n/**\n * Quick order table data interface.\n */\ninterface IQuickOrderGridTableData {\n quickOrderGridProducts: QuickOrderGridProduct[];\n isOrderQuantityLimitsFeatureEnabled: boolean;\n}\n\n/**\n * Quick order table resources.\n */\nexport interface IQuickOrderGridTableResources extends IQuickOrderGridTableHeaderResources, IQuickOrderGridTableRowResources {}\n\n/**\n * Quick order table props.\n */\nexport interface IQuickOrderGridTableProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n moduleId: string;\n moduleTypeName: string;\n\n resources: IQuickOrderGridTableResources;\n isMobileView: boolean;\n imageSettings?: IImageSettings;\n callBacks: IQuickOrderGridRowCallbacks;\n}\n\n/**\n * Quick order table component.\n */\nexport interface IQuickOrderGridTableComponent extends IComponent {}\n\n/**\n * The quick order table.\n * @param props -- The quick order table props.\n * @returns The quick order table element.\n */\nexport const QuickOrderGridTableComponent: React.FC = (props: IQuickOrderGridTableProps) => {\n const [isMobile, setIsMobile] = React.useState(props.isMobileView);\n const quickOrderGridProducts = props.data.quickOrderGridProducts;\n const isOrderQuantityLimitsFeatureEnabled = props.data.isOrderQuantityLimitsFeatureEnabled;\n\n /**\n * Update the view port.\n */\n const updateViewport = () => {\n setIsMobile(props.isMobileView);\n };\n\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', updateViewport);\n }\n\n const headerClassName = `${props.className}__header`;\n const rowClassName = `${props.className}__row`;\n\n return (\n \n \n {quickOrderGridProducts.map((quickOrderProduct, index) => {\n let quantity = quickOrderProduct.productLine.productListLine.Quantity!;\n const product = quickOrderProduct.productLine.fullProduct;\n let min: number = 1;\n let max: number = 10;\n const behavior = product?.ProductDetails?.Behavior;\n if (isOrderQuantityLimitsFeatureEnabled && !ObjectExtensions.isNullOrUndefined(behavior)) {\n if (behavior.MinimumQuantity && behavior.MinimumQuantity > 0) {\n min = behavior.MinimumQuantity;\n }\n if (behavior.MaximumQuantity && behavior.MaximumQuantity > 0) {\n max = behavior.MaximumQuantity;\n }\n quantity = Math.max(quantity, min);\n }\n const price = quickOrderProduct.productLine.fullProduct?.ProductPrice;\n return (\n \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 getProductConfigure,\n IProductDimensionCallbacks,\n IProductDimensionConfigureResources,\n IProductDimensionConfigureViewProps\n} from '@msdyn365-commerce/components';\nimport {\n ProductDimension,\n ProductDimensionType,\n ProductDimensionValue,\n ProductListsDataActions,\n ProductListType,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n addItemToProductListAction,\n AddItemToProductListInput,\n ArrayExtensions,\n createProductList,\n CreateProductListInput,\n FinitePromiseQueue,\n FinitePromiseQueueError,\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getScanResult,\n GetScanResultInput,\n getSelectedVariant,\n IDimensionForSelectedVariant,\n IPromiseQueue,\n ObjectExtensions,\n QuickOrderTemplate,\n QuickOrderTemplateLine,\n SelectedVariantInput,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n Heading,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { debounce } from 'lodash';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCatalogId } from '@msdyn365-commerce/core';\nimport { ActiveProductListInput } from './actions';\nimport {\n EcommerceQuantityLimitConfigurationsFeatureName,\n IQuickOrderGridActionsProps,\n IQuickOrderGridActionsViewProps,\n IQuickOrderGridRowCallbacks,\n IQuickOrderGridState,\n QuickOrderGridActionsView,\n QuickOrderGridDrawer,\n QuickOrderGridFormComponent,\n QuickOrderGridProduct,\n QuickOrderGridTableComponent,\n RetailDefaultOrderQuantityLimitsFeatureName\n} from './components';\nimport { IQuickOrderGridData } from './quick-order-grid.data';\nimport { IQuickOrderGridProps, IQuickOrderGridResources } from './quick-order-grid.props.autogenerated';\n\n/**\n * QuickOrder Grid View props.\n */\nexport interface IQuickOrderGridViewProps extends IQuickOrderGridProps {\n header: JSX.Element;\n actions?: INodeProps;\n isB2bCustomer?: boolean;\n isQuickOrderGridFormExpanded: boolean;\n contentProps: INodeProps;\n drawer: INodeProps;\n loading?: React.ReactNode;\n quickOrderGridForm: INodeProps;\n quickOrderGridFormProductContent: INodeProps;\n quickOrderGridFormMsgContent: INodeProps;\n quickOrderGridProps: IModuleProps;\n form: React.ReactNode;\n configure?: IProductDimensionConfigureViewProps;\n isMobileView: boolean;\n container?: JSX.Element;\n orderActions?: IQuickOrderGridActionsViewProps | null;\n bulkPurchase?: React.ReactNode;\n}\n\n/**\n * QuickOrder Grid View port.\n */\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * QuickOrderGrid component.\n * @extends {React.PureComponent>}\n */\nclass QuickOrderGrid extends React.PureComponent, IQuickOrderGridState> {\n private readonly _productTextInput: React.RefObject;\n\n private readonly _quantityInput: React.RefObject;\n\n private readonly _waitTime: number = 500;\n\n private readonly _dimensionUpdateQueueMaxLength: number = 2;\n\n private readonly _errorCssClass: string = 'danger';\n\n private readonly _errorCssGlyphClass: string = 'fas fa-exclamation-triangle';\n\n private readonly _quickOrderGridFormClass: string;\n\n private readonly _quickOrderGridFormProductContent: string;\n\n private readonly _quickOrderGridFormMsgContent: string;\n\n private readonly _telemetryContent: ITelemetryContent;\n\n private readonly _dimensionUpdateQueue: IPromiseQueue = new FinitePromiseQueue(this._dimensionUpdateQueueMaxLength);\n\n private _dimensions: { [id: number]: string } = {};\n\n private _initializedDimensions: Set = new Set();\n\n private readonly _cssClassNameConfigure: string = 'ms-quick-order_grid__content-form-main';\n\n private readonly _className: string = 'ms-quick-order-grid';\n\n // @ts-expect-error: Debouce needs to be used as type.\n private _cancellabelDebounce: debounce;\n\n private _isOrderQuantityLimitsFeatureEnabled: boolean = false;\n\n private _isChannelLimitsFeatureEnabled: boolean = false;\n\n private _applyDefaultOrderSettingsForCartLine: boolean = false;\n\n private readonly _quickOrderGridCallbacks: IProductDimensionCallbacks = {\n initializeDimension: (initializedDimension: string): void => {\n if (initializedDimension) {\n this._initializedDimensions.add(initializedDimension);\n }\n },\n /**\n * Get Dropdown name.\n * @param selectedDimensionId - Dimension type.\n * @param selectedDimensionValueId - Resources.\n * @returns Dropdown name.\n */\n dimensionSelectedAsync: async (selectedDimensionId: number, selectedDimensionValueId: string): Promise => {\n this._dimensions[selectedDimensionId] = selectedDimensionValueId;\n // Only trigger _updateDimensions when all dimensions are initialized\n if (this._initializedDimensions.size === this.state.productDimensions?.length) {\n return this._dimensionUpdateQueue\n .enqueue(async () => {\n return this._updateDimensions();\n })\n .catch((error: string) => {\n // Ignore discarded processes.\n if (error !== FinitePromiseQueueError.ProcessWasDiscardedFromTheQueue) {\n throw new Error(error);\n }\n });\n }\n },\n\n /**\n * Get Dropdown name.\n * @param dimensionType - Dimension type.\n * @param resources - Resources.\n * @returns Dropdown name.\n */\n getDropdownName: (dimensionType: number, resources: IProductDimensionConfigureResources): string => {\n return this._getDropdownName(dimensionType, resources);\n },\n\n /**\n * Method to call on dimension change.\n * @param isUpdatingDimension - Flag to update dimension.\n */\n changeUpdatingDimension: (isUpdatingDimension: boolean): void => {\n this.setState({ isUpdatingDimension });\n }\n };\n\n private readonly _quickOrderGridRowCallbacks: IQuickOrderGridRowCallbacks = {\n /**\n * Method to call remove button.\n * @param line - Grid row product.\n */\n onRemoveItem: (line: QuickOrderGridProduct): void => {\n this._removeItemRowFromTable(line.productLine);\n },\n\n /**\n * Method to call on change quantity button.\n * @param productListLineId - Grid row product list line id.\n * @param quantity - Product quantity.\n * @returns - Falg to get confirmation for action.\n */\n onChangeQuantity: (productListLineId: string | undefined, quantity: number): boolean => {\n return this._changeRowQuantity(productListLineId, quantity);\n }\n };\n\n public constructor(props: IQuickOrderGridProps) {\n super(props);\n this._productTextInput = React.createRef();\n this._quantityInput = React.createRef();\n\n this._telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.state = {\n isQuickOrderGridFormExpanded: false,\n min: 0,\n max: 10,\n quantity: 1,\n productResponse: undefined,\n productDimensions: undefined,\n productDimensionErrorState: {\n configureErrors: {}\n },\n isMobile: this.isMobile,\n products: [],\n isUpdatingDimension: false,\n productListId: ''\n };\n\n this._quickOrderGridFormClass = 'ms-quick-order-grid__content-form';\n this._quickOrderGridFormProductContent = 'ms-quick-order-grid__content-form-main';\n this._quickOrderGridFormMsgContent = 'ms-quick-order-grid__content-form-msg';\n\n this._isOrderQuantityLimitsFeatureEnabled =\n this.props.data.featureState.result?.find(featureState => featureState.Name === RetailDefaultOrderQuantityLimitsFeatureName)\n ?.IsEnabled ?? false;\n\n this._isChannelLimitsFeatureEnabled =\n this.props.data.featureState.result?.find(featureState => featureState.Name === EcommerceQuantityLimitConfigurationsFeatureName)\n ?.IsEnabled ?? false;\n\n const cartConfiguration = this.props.data.cartConfiguration;\n this._applyDefaultOrderSettingsForCartLine = cartConfiguration?.result?.ValidateDefaultOrderSettingsPerLine ?? false;\n }\n\n @computed public get isMobile(): boolean {\n const size = isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n return size === 'xs';\n }\n\n public render(): JSX.Element | null {\n const { data } = this.props;\n if (!data.customerInformation.result) {\n return null;\n }\n const quickOrderTemplate = data.quickOrderTemplate;\n\n if (quickOrderTemplate?.result !== undefined) {\n this.setState({\n products: quickOrderTemplate.result.quickOrderTemplateLines,\n productListId: quickOrderTemplate.result.productList.Id\n });\n }\n const { className = '', maxQuantity } = this.props.config;\n const customerInfo = this.props.data.customerInformation.result;\n const {\n quickOrderGridModuleHeading,\n quickOrderGridModuleDescription,\n quickOrderGridAddtogrid,\n quickOrderGridProductQuantityInputLabel,\n quickOrderGridProductInputLabel,\n quickOrderGridProductDimensionTypeColor,\n quickOrderGridProductDimensionTypeConfiguration,\n quickOrderGridSelectDimensionFormatString,\n quickOrderGridProductDimensionTypeSize,\n quickOrderGridProductDimensionTypeStyle,\n quickOrderGridProductDimensionTypeAmount,\n quickOrderGridModulePageHeading\n } = this.props.resources;\n\n const productConfigureResources: IProductDimensionConfigureResources = {\n selectDimensionFormatString: quickOrderGridSelectDimensionFormatString,\n productDimensionTypeColor: quickOrderGridProductDimensionTypeColor,\n productDimensionTypeConfiguration: quickOrderGridProductDimensionTypeConfiguration,\n productDimensionTypeSize: quickOrderGridProductDimensionTypeSize,\n productDimensionTypeStyle: quickOrderGridProductDimensionTypeStyle,\n productDimensionTypeAmount: quickOrderGridProductDimensionTypeAmount\n };\n\n const { isQuickOrderGridFormExpanded, productDimensionErrorState, productResponse, productDimensions } = this.state;\n\n const headerClassName = `${this._className}__header`;\n\n const header = (\n
    \n \n
    \n );\n\n const viewProps: IQuickOrderGridViewProps = {\n ...(this.props as IQuickOrderGridProps),\n\n quickOrderGridProps: { className: classnames('ms-quick-order-grid', className), moduleProps: this.props },\n contentProps: { className: 'ms-quick-order-grid__content' },\n isB2bCustomer: customerInfo?.IsB2b,\n header,\n actions: {\n className: `${this._className}-action-bar`,\n tag: 'div'\n },\n drawer: {\n tag: QuickOrderGridDrawer,\n className: `${this._className}__drawer`,\n collapseProps: { isOpen: this.state.isQuickOrderGridFormExpanded },\n moduleHeadingText: quickOrderGridModuleHeading,\n moduleDescriptionText: quickOrderGridModuleDescription,\n requestContext: this.props.context.request,\n telemetryContent: this._telemetryContent\n },\n bulkPurchase: this._renderBulkPurchase(),\n quickOrderGridForm: {\n className: `${this._quickOrderGridFormClass} ${isQuickOrderGridFormExpanded ? 'qo-show' : 'qo-hide'}`\n },\n quickOrderGridFormProductContent: {\n className: this._quickOrderGridFormProductContent\n },\n quickOrderGridFormMsgContent: {\n className: this._quickOrderGridFormMsgContent\n },\n form: QuickOrderGridFormComponent({\n productTextInput: this._productTextInput,\n quantityTextInput: this._quantityInput,\n isAddtoListDisabled: !productResponse,\n ariaLabelAddtoCart: quickOrderGridAddtogrid,\n ariaLabelProduct: quickOrderGridProductInputLabel,\n ariaLabelQuantity: quickOrderGridProductQuantityInputLabel,\n maxChars: 50,\n minQuantity: this.state.min ?? 0,\n maxQuantity: this.state.max ?? maxQuantity,\n moduleClassName: this._className,\n quickOrderGridState: this.state,\n handleInputChange: this._handleInputChange,\n handleQuantityChange: this._handleQuantityChange,\n handleAddProductListClick: this._addItemToProductListLine\n }),\n configure:\n productResponse && productDimensions\n ? getProductConfigure(\n this._cssClassNameConfigure,\n this.props.context,\n this.props.friendlyName,\n this.props.telemetry,\n quickOrderGridSelectDimensionFormatString,\n productConfigureResources,\n this._quickOrderGridCallbacks,\n productResponse,\n productDimensions,\n productDimensionErrorState\n )\n : undefined,\n isQuickOrderGridFormExpanded: this.state.isQuickOrderGridFormExpanded,\n isMobileView: this.state.isMobile,\n container: ArrayExtensions.hasElements(this.state.products) ? this._renderListContainer() : undefined,\n orderActions: this._renderQuickOrderGridActions(quickOrderTemplate?.result)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _renderQuickOrderGridActions(quickOrderTemplate: QuickOrderTemplate | undefined): IQuickOrderGridActionsViewProps | null {\n const { typeName, context, resources } = this.props;\n const {\n quickOrderGridDeleteButtonText,\n quickOrderGridBuySelectedButtonText,\n quickOrderGridBuySelectedButtonAriaLabel,\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle,\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel,\n quickOrderGridGoToCartText,\n quickOrderGridDialogCloseText,\n quickOrderGridSingleItemText,\n quickOrderGridMultiLineItemFormatText,\n quickOrderGridMultiLinesFormatText,\n quickOrderGridHeaderMessageText,\n addedQuantityText,\n originalPriceText,\n currentPriceText,\n freePriceText\n } = resources;\n if (ArrayExtensions.hasElements(quickOrderTemplate?.quickOrderTemplateLines)) {\n const quickOrderGridActions: IQuickOrderGridActionsProps = {\n data: { quickOrderTemplate },\n moduleClassName: this._className,\n id: 'quick-order-grid',\n typeName,\n context,\n handlers: {\n removeProductList: this._removeProductList,\n onErrorMessage: (message: string) =>\n this.setState({\n topStateMessage: {\n messageText: message,\n statusCssString: this._errorCssClass,\n messageGlyph: this._errorCssGlyphClass,\n isOpen: true\n }\n })\n },\n quickOrderGridState: this.state,\n resources: {\n quickOrderGridDeleteButtonText,\n quickOrderGridBuySelectedButtonText,\n quickOrderGridBuySelectedButtonAriaLabel,\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle,\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel,\n quickOrderGridGoToCartText,\n quickOrderGridDialogCloseText,\n quickOrderGridSingleItemText,\n quickOrderGridMultiLineItemFormatText,\n quickOrderGridMultiLinesFormatText,\n quickOrderGridHeaderMessageText,\n addedQuantityText,\n originalPriceText,\n currentPriceText,\n freePriceText\n }\n };\n\n return QuickOrderGridActionsView(quickOrderGridActions);\n }\n return null;\n }\n\n /**\n * Renders bulk purchase module.\n * @returns Bulk purchase module react node.\n */\n private _renderBulkPurchase(): React.ReactNode {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Temporary switch for the feature which is under development.\n if (!this.props.context.app.config.isBulkPurchaseEnabled) {\n return null;\n }\n\n if (!ArrayExtensions.hasElements(this.props.slots.bulkPurchaseSlots)) {\n return null;\n }\n\n const containerClass = `${this._className}__bulk-purchase`;\n return (\n
    \n {React.cloneElement(this.props.slots.bulkPurchaseSlots[0] as React.ReactElement, {\n productDimensions: this.state.productDimensions\n })}\n
    \n );\n }\n\n /**\n * Render list container.\n * @returns JSX element.\n */\n private _renderListContainer(): JSX.Element {\n const containerClass = `${this._className}__table-content`;\n return
    {this._renderQuickOrderTable(this._className)}
    ;\n }\n\n /**\n * Initial the products on quick order.\n * @returns List of quick order products or undefined.\n */\n private _initQuickOrderGridProducts(): QuickOrderGridProduct[] {\n const products: QuickOrderTemplateLine[] = this.state.products;\n\n const quickOrderGridProduct: QuickOrderGridProduct[] = products.map((product: QuickOrderTemplateLine) => {\n return new QuickOrderGridProduct(product);\n });\n\n return ArrayExtensions.validValues(quickOrderGridProduct);\n }\n\n /**\n * Method to call on clear button.\n */\n private readonly _removeProductList = () => {\n const { context, data, telemetry, resources } = this.props;\n const { quickOrderTemplate } = data;\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && quickOrderTemplate && quickOrderTemplate.result) {\n ProductListsDataActions.deleteAsync({ callerContext: context.actionContext }, quickOrderTemplate.result.productList)\n .then(() => {\n window.location.reload();\n })\n .catch((error: string) => {\n telemetry.warning('[quick-order-grid] Unable to delete product list.');\n telemetry.error(error);\n this._updateStatusState(\n resources.quickOrderGridDeleteProductListFailedText,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n });\n } else {\n telemetry.warning('[quick-order-grid] Failed to delete product list. Product List was not found');\n }\n };\n\n /**\n * Initial the products on quick order.\n * @param className - Class name.\n * @returns JSX element.\n */\n private _renderQuickOrderTable(className: string): JSX.Element {\n const tableClassName = `${className}__table-list`;\n\n return (\n \n );\n }\n\n private _updateQuantitiesInState(product: SimpleProduct): void {\n const min: number = this._getMinQuantityForCartLineItem(this._isOrderQuantityLimitsFeatureEnabled, product);\n const max: number = this._getMaxQuantityForCartLineItem(\n this._isChannelLimitsFeatureEnabled || this._isOrderQuantityLimitsFeatureEnabled,\n product\n );\n let quantity: number = this._getQuantity(\n this._isOrderQuantityLimitsFeatureEnabled,\n this._applyDefaultOrderSettingsForCartLine,\n product\n );\n quantity = Math.max(quantity, min);\n\n this.setState({\n min,\n max,\n quantity\n });\n }\n\n private _getMinQuantityForCartLineItem(isOrderQuantityLimitsFeatureEnabled: boolean, product: SimpleProduct): number {\n if (\n isOrderQuantityLimitsFeatureEnabled &&\n this._getIgnoreOrderSettings() &&\n product?.Behavior?.MinimumQuantity &&\n product.Behavior.MinimumQuantity > 0\n ) {\n return product.Behavior.MinimumQuantity;\n }\n\n return 1;\n }\n\n private _getMaxQuantityForCartLineItem(isQuantityLimitsFeatureEnabled: boolean, product: SimpleProduct): number {\n if (\n isQuantityLimitsFeatureEnabled &&\n this._getIgnoreOrderSettings() &&\n product?.Behavior?.MaximumQuantity &&\n product.Behavior.MaximumQuantity > 0\n ) {\n return product.Behavior.MaximumQuantity;\n }\n\n return this.props.context.app.config.maxQuantityForCartLineItem;\n }\n\n /**\n * Retrieves the value of the IgnoreOrderSettings property from the cart configuration.\n * If the property is not present, it defaults to false.\n * @returns {boolean} The value of the IgnoreOrderSettings property.\n */\n private _getIgnoreOrderSettings(): boolean {\n const cartConfiguration = this.props.data.cartConfiguration;\n return !(cartConfiguration?.result?.IgnoreOrderSettings ?? false);\n }\n\n private _getQuantity(\n isOrderQuantityLimitsFeatureEnabled: boolean,\n applyDefaultOrderSettingsForCartLine: boolean,\n product: SimpleProduct\n ): number {\n let defaultQuantity = 1;\n\n if (!isOrderQuantityLimitsFeatureEnabled || !applyDefaultOrderSettingsForCartLine) {\n return defaultQuantity;\n }\n\n if (product?.Behavior?.DefaultQuantity && product.Behavior.DefaultQuantity > 0) {\n defaultQuantity = product.Behavior.DefaultQuantity;\n }\n\n return defaultQuantity;\n }\n\n /**\n * Method to called on product input change.\n * @param query - Product inventory info.\n */\n private readonly _handleInputChange = (query: string): void => {\n const queryMinLength = 4;\n if (!query || query.length > queryMinLength) {\n this.setState({ quantity: 0, productDimensions: [], productResponse: undefined });\n this._updateStatusState('', '', '', false);\n }\n if (this._cancellabelDebounce) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call -- existing code.\n this._cancellabelDebounce.cancel();\n }\n\n const { telemetry, context } = this.props;\n const zeroNumber = 0;\n if (!StringExtensions.isNullOrEmpty(query)) {\n this._cancellabelDebounce = debounce(() => {\n getScanResult(\n new GetScanResultInput(\n context.actionContext.requestContext.apiSettings,\n query,\n context.actionContext.requestContext.apiSettings.channelId\n ),\n this.props.context.actionContext\n )\n .then(results => {\n this.setState({\n productResponse: results?.Product,\n productDimensions: results?.ProductDimensionFull,\n isQuickOrderGridFormExpanded: true\n });\n if (results?.Product) {\n this._updateQuantitiesInState(results.Product);\n }\n })\n .catch((error: Error) => {\n telemetry.exception(error);\n telemetry.debug('Unable to get scan results');\n });\n }, this._waitTime);\n\n setTimeout(() => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call -- Existing code.\n this._cancellabelDebounce();\n }, zeroNumber);\n this.setState({ isQuickOrderGridFormExpanded: true });\n } else {\n this.setState({ productResponse: undefined, isQuickOrderGridFormExpanded: true });\n }\n };\n\n /**\n * Method to called on quantity change.\n * @param value - Quantity value.\n */\n private readonly _handleQuantityChange = (value: string): void => {\n let currentValue = Number.parseInt(value, 10);\n const inputElement = this._quantityInput.current instanceof HTMLInputElement && this._quantityInput.current;\n const quantityChangeDebounceTimeout = 200;\n let minimumQuantity = 0;\n let needToUpdateUIValue: boolean = false;\n if (this._isOrderQuantityLimitsFeatureEnabled && !ObjectExtensions.isNullOrUndefined(this.state.productResponse?.Behavior)) {\n const behavior = this.state.productResponse!.Behavior;\n minimumQuantity = behavior?.MinimumQuantity ?? 0;\n const newCurrentValue = Math.max(currentValue, minimumQuantity);\n if (newCurrentValue !== currentValue) {\n needToUpdateUIValue = true;\n }\n currentValue = newCurrentValue;\n }\n\n this.setState({ quantity: currentValue }, () => {\n debounce(() => {\n if (needToUpdateUIValue && !Number.isNaN(this.state.quantity) && inputElement) {\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\n inputElement.value = currentValue.toString();\n }\n }, quantityChangeDebounceTimeout)();\n });\n };\n\n /**\n * Method to get dropdwon name.\n * @param dimensionType - Dimension Type.\n * @param resources - String resources.\n * @returns Dropdwon label.\n */\n private readonly _getDropdownName = (dimensionType: number, resources: IProductDimensionConfigureResources): string => {\n const isGiftCard = this.state.productResponse?.IsGiftCard;\n\n switch (dimensionType) {\n case ProductDimensionType.Color: // ProductDimensionType.Color\n return resources.productDimensionTypeColor;\n case ProductDimensionType.Configuration: // ProductDimensionType.Configuration\n return resources.productDimensionTypeConfiguration;\n case ProductDimensionType.Size: // ProductDimensionType.Size\n return resources.productDimensionTypeSize;\n case ProductDimensionType.Style: // ProductDimensionType.Style\n return isGiftCard ? resources.productDimensionTypeAmount : resources.productDimensionTypeStyle;\n default:\n return '';\n }\n };\n\n /**\n * Method to update dimension and product in UI.\n */\n private readonly _updateDimensions = async (): Promise => {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n const { productDimensions, productResponse } = this.state;\n const hasProductDimensions = ArrayExtensions.hasElements(productDimensions);\n if (!productResponse || !hasProductDimensions) {\n return;\n }\n\n const dimensionsToUpdate: { [id: number]: string } = { ...this._dimensions };\n this.setState({ isUpdatingDimension: true });\n\n // Step 1: Update state to indicate which dimensions are selected\n if (this.state.productDimensionErrorState.otherError) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code.\n const clearOtherErrorState = { ...this.state.productDimensionErrorState };\n clearOtherErrorState.otherError = undefined;\n this.setState({ productDimensionErrorState: clearOtherErrorState });\n }\n\n // Step 2: Clear any errors indicating the dimension wasn't selected\n for (const dimensionKey of Object.keys(dimensionsToUpdate)) {\n if (this.state.productDimensionErrorState.configureErrors[dimensionKey]) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code.\n const errorState = { ...this.state.productDimensionErrorState };\n errorState.configureErrors[dimensionKey] = undefined;\n\n this.setState({ productDimensionErrorState: errorState });\n }\n }\n\n // Step 3, Build the actually selected dimensions, prioritizing the information in state\n // over the information in data\n const mappedDimensions = productDimensions\n ?.map(dimension => {\n return {\n DimensionTypeValue: dimension.DimensionTypeValue,\n DimensionValue:\n this._updateDimensionValue(dimension, dimensionsToUpdate[dimension.DimensionTypeValue]) ?? dimension.DimensionValue,\n ExtensionProperties: dimension.ExtensionProperties\n };\n })\n .filter(dimension => {\n return dimension.DimensionValue;\n });\n\n // Step 4. Use these dimensions hydrate the product. Wrap this in a promise\n // so that places like add to cart can await it\n // eslint-disable-next-line no-async-promise-executor -- existing code\n const selectedProduct = new Promise(async resolve => {\n const newProduct = await getSelectedVariant(\n new SelectedVariantInput(\n productResponse.MasterProductId ? productResponse.MasterProductId : productResponse.RecordId,\n channelId,\n mappedDimensions,\n undefined,\n this.props.context.request\n ),\n actionContext\n );\n if (newProduct) {\n await getDimensionsForSelectedVariant(\n new GetDimensionsForSelectedVariantInput(\n newProduct.MasterProductId ? newProduct.MasterProductId : newProduct.RecordId,\n channelId,\n mappedDimensions,\n this.props.context.request\n ),\n actionContext\n );\n }\n\n resolve(newProduct);\n });\n\n const variantProduct = await selectedProduct;\n this.setState({ productResponse: variantProduct !== null ? variantProduct : undefined });\n };\n\n /**\n * Method to get updated dimension value.\n * @param productDimensionFull - Product dimension full.\n * @param newValueId - New Dimension value.\n * @returns Dimension Value.\n */\n private readonly _updateDimensionValue = (\n productDimensionFull: IDimensionForSelectedVariant,\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 /**\n * Method to get dropdwon name.\n * @param dimensionTypeValue - Dimension Type.\n * @param resources - String resources.\n * @param isGiftCard - Flag to check if its a giftcard product.\n * @returns Dropdwon error label.\n */\n private readonly _getDimensionErrorString = (\n dimensionTypeValue: number,\n resources: IQuickOrderGridResources,\n isGiftCard?: boolean\n ): string => {\n const amountErrorMessage = resources.quickOrderGridproductDimensionTypeAmountErrorMessage;\n\n switch (dimensionTypeValue) {\n case ProductDimensionType.Color: // ProductDimensionType.Color\n return resources.quickOrderGridproductDimensionTypeColorErrorMessage;\n case ProductDimensionType.Configuration: // ProductDimensionType.Configuration\n return resources.quickOrderGridproductDimensionTypeConfigurationErrorMessage;\n case ProductDimensionType.Size: // ProductDimensionType.Size\n return resources.quickOrderGridproductDimensionTypeSizeErrorMessage;\n case ProductDimensionType.Style: // ProductDimensionType.Style\n return isGiftCard ? amountErrorMessage : resources.quickOrderGridproductDimensionTypeStyleErrorMessage;\n default:\n return '';\n }\n };\n\n /**\n * Initial the products on quick order.\n * @param productResponse - Simple Product.\n * @param quantity - Product Quantity.\n * @returns Flag to validate productlistline.\n */\n private readonly _validateCart = (productResponse: SimpleProduct, quantity: number): boolean => {\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain -- existing code\n const missingDimensions = productResponse.Dimensions?.filter(\n dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value)\n );\n const minimumQuantity = 0;\n if (ArrayExtensions.hasElements(missingDimensions)) {\n const userMessage = this._getConfigureErrors(missingDimensions, false);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- existing code\n if (this.state.productDimensionErrorState.configureErrors) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code\n const errorState = { ...this.state.productDimensionErrorState };\n errorState.configureErrors = userMessage;\n\n this.setState({ productDimensionErrorState: errorState });\n return false;\n }\n }\n\n if (quantity <= minimumQuantity) {\n const resources = this.props.resources;\n this._updateStatusState(resources.quickOrderGridWrongQuantityErrorMsg, this._errorCssClass, this._errorCssGlyphClass, true);\n return false;\n }\n return true;\n };\n\n /**\n * Initial the products on quick order.\n * @param result - Simple Product.\n * @param isGiftCard - Product Quantity.\n * @returns Flag to validate cart.\n */\n private _getConfigureErrors(\n result: ProductDimension[] | undefined,\n isGiftCard?: boolean\n ): { [configureId: string]: string | undefined } {\n if (!result) {\n return {};\n }\n const dimensions: { [configureId: string]: string | undefined } = {};\n const resources = this.props.resources;\n for (const dimension of result) {\n dimensions[dimension.DimensionTypeValue] = this._getDimensionErrorString(dimension.DimensionTypeValue, resources, isGiftCard);\n }\n return dimensions;\n }\n\n /**\n * Method to call on quantity change in row.\n * @param itemKey - Product Key.\n * @param quantity - Product quantity.\n * @returns Flag to update status.\n */\n private readonly _changeRowQuantity = (itemKey: string | undefined, quantity: number): boolean => {\n const { context, data, telemetry } = this.props;\n const { quickOrderTemplate } = data;\n if (quickOrderTemplate?.result) {\n const quickOrderTemplateLinesData = quickOrderTemplate.result.quickOrderTemplateLines;\n if (ArrayExtensions.hasElements(quickOrderTemplateLinesData)) {\n const orderLineIndex = quickOrderTemplateLinesData.findIndex(\n (lines: QuickOrderTemplateLine) => lines.productListLine.LineId === itemKey\n );\n const newProductListLine = { ...quickOrderTemplateLinesData[orderLineIndex] };\n if (quickOrderTemplateLinesData[orderLineIndex].productListLine.Quantity === quantity) {\n return true;\n }\n const previousQuantity = newProductListLine.productListLine.Quantity;\n newProductListLine.productListLine.Quantity = quantity;\n const { fullProduct, ...line } = newProductListLine;\n\n ProductListsDataActions.updateProductListLinesAsync(\n { callerContext: context.actionContext },\n quickOrderTemplate.result.productList.Id,\n [line.productListLine]\n )\n .then(list => {\n if (ArrayExtensions.hasElements(list)) {\n const newLine = list.find(lines => lines.LineId === itemKey);\n quickOrderTemplateLinesData[orderLineIndex].productListLine = newLine!;\n const updatedLines = [...quickOrderTemplateLinesData];\n updatedLines[orderLineIndex] = { fullProduct, productListLine: newLine! };\n const updatedProductList = { ...quickOrderTemplate.result, ProductListLines: updatedLines };\n context.actionContext.update(\n new ActiveProductListInput(context.actionContext.requestContext),\n updatedProductList\n );\n return true;\n }\n\n return false;\n })\n .catch((error: Error) => {\n telemetry.warning('[quick-order-grid] Unable to update product quantity.');\n telemetry.error(error.message);\n const userMessage = 'Failed to update quantity value.';\n newProductListLine.productListLine.Quantity = previousQuantity;\n this._updateStatusState(userMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return false;\n });\n }\n return false;\n }\n\n return false;\n };\n\n /**\n * Method to call on remove item from table.\n * @param line - Order Template Line.\n */\n private readonly _removeItemRowFromTable = (line: QuickOrderTemplateLine): void => {\n const { context, data, telemetry } = this.props;\n const { quickOrderTemplate } = data;\n\n if (quickOrderTemplate?.result) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken) {\n ProductListsDataActions.removeProductListLinesAsync(\n { callerContext: context.actionContext },\n line.productListLine.ProductListId!,\n [line.productListLine]\n )\n .then(() => {\n window.location.reload(false);\n })\n .catch((error: Error) => {\n telemetry.warning('[quick-order-grid] Unable remove item from product list grid');\n telemetry.error(error.message);\n });\n } else {\n telemetry.warning('[quick-order-grid] Unable remove items from product list grid user token was not found');\n }\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 /**\n * Method to call on add item from form.\n */\n private readonly _addItemToProductListLine = async (): Promise => {\n const {\n context: { actionContext },\n resources,\n telemetry\n } = this.props;\n const {\n quickOrderGridAddedToGridSuccessMessage,\n quickOrderGridAddedToGridFailureMessage,\n quickOrderGridAddedToGridDuplicateError\n } = resources;\n const { productResponse, quantity, productListId } = this.state;\n // get the current catalog id.\n const catalogId = getCatalogId(this.props.context.request);\n\n this._updateStatusState('', '', '', false);\n\n if (productResponse !== undefined && this._validateCart(productResponse, quantity)) {\n if (StringExtensions.isNullOrWhitespace(productListId)) {\n await this._createProductList();\n }\n\n if (StringExtensions.isNullOrWhitespace(this.state.productListId)) {\n this._updateStatusState(quickOrderGridAddedToGridFailureMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return;\n }\n const input = new AddItemToProductListInput(\n this.state.productListId,\n productResponse.RecordId,\n quantity,\n productResponse.DefaultUnitOfMeasure ?? 'ea',\n this._isChannelMultipleCatalogsFeatureEnabled(),\n catalogId\n );\n\n await addItemToProductListAction(input, actionContext)\n .then(result => {\n if (result.ProductListId) {\n this._updateStatusState(quickOrderGridAddedToGridSuccessMessage, 'success', 'fas fa-check', true);\n window.location.reload();\n this.setState({});\n }\n })\n .catch((error: Error) => {\n telemetry.debug('[quick-order-grid] Error trying to Update Grid Line from the quick order grid');\n if (error.name === 'Microsoft_Dynamics_Commerce_Runtime_DuplicateObject') {\n this._updateStatusState(\n quickOrderGridAddedToGridDuplicateError,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n } else {\n this._updateStatusState(\n quickOrderGridAddedToGridFailureMessage,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n }\n });\n }\n };\n\n /**\n * Method to create product list.\n * @returns - ProductListId.\n */\n private _createProductList = async (): Promise => {\n const {\n context: { actionContext },\n telemetry,\n resources\n } = this.props;\n const { productListId } = this.state;\n const { quickOrderGridAddedToGridFailureMessage } = resources;\n\n if (StringExtensions.isNullOrWhitespace(productListId)) {\n const input = new CreateProductListInput('', ProductListType.QuickOrder);\n\n await createProductList(input, actionContext)\n .then(result => {\n if (!StringExtensions.isNullOrWhitespace(result.Id)) {\n this.setState({ productListId: result.Id });\n return result.Id;\n }\n return '';\n })\n .catch((error: Error) => {\n telemetry.debug('[quick-order-grid] Error on creating productlist from quick order grid');\n telemetry.error(error.message);\n this._updateStatusState(quickOrderGridAddedToGridFailureMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return '';\n });\n return '';\n }\n\n return productListId;\n };\n\n /**\n * Method to create product list.\n * @param messageText - Message Text.\n * @param statusCssString - Css class names.\n * @param messageGlyph - Glyph string.\n * @param isOpen - Flag to show.\n */\n private readonly _updateStatusState = (messageText: string, statusCssString: string, messageGlyph: string, isOpen: boolean): void => {\n this.setState({\n // eslint-disable-next-line react/no-unused-state -- Showing user message in Form component.\n stateMessage: {\n messageText,\n statusCssString,\n messageGlyph,\n isOpen\n }\n });\n };\n}\nexport default QuickOrderGrid;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IErrorState } from '@msdyn365-commerce/components';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { IDimensionForSelectedVariant, OrderTemplateLine } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { QuickOrderGridProduct } from './quick-order-grid-product';\n\n/**\n * QuickOrderGrid state message Interface.\n */\nexport interface IQuickOrderGridStateMessage {\n isOpen: boolean;\n messageGlyph: string;\n messageText: string;\n statusCssString: string;\n}\n\n/**\n * QuickOrderGrid state Interface.\n */\nexport interface IQuickOrderGridState {\n isQuickOrderGridFormExpanded: boolean;\n isUpdatingDimension?: boolean;\n productResponse: SimpleProduct | undefined;\n productDimensions: IDimensionForSelectedVariant[] | undefined;\n min: number | undefined;\n max: number | undefined;\n quantity: number;\n stateMessage?: IQuickOrderGridStateMessage;\n topStateMessage?: IQuickOrderGridStateMessage;\n productDimensionErrorState: IErrorState;\n isMobile: boolean;\n products: OrderTemplateLine[];\n productListId: string;\n}\n\n/**\n * QuickOrder Grid Row view.\n */\nexport interface IQuickOrderGridRowViewModel extends OrderTemplateLine {\n isChecked: boolean;\n}\n\n/**\n * Interface for quick order callbacks.\n */\nexport interface IQuickOrderGridRowCallbacks {\n onRemoveItem(line: QuickOrderGridProduct): void;\n onChangeQuantity(orderTemplateLineId: string | undefined, quantity: number): boolean;\n}\n\n/**\n * Interface for quick order grid action view props.\n */\nexport interface IQuickOrderGridActionsViewProps {\n addProductListToBag: React.ReactNode;\n removeProductList?: React.ReactNode;\n userMessage?: React.ReactNode;\n}\n\nexport const RetailDefaultOrderQuantityLimitsFeatureName: string = 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature';\n\nexport const EcommerceQuantityLimitConfigurationsFeatureName: string =\n 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature';\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductDimensionConfigureDropdownViewProps, IProductDimensionConfigureViewProps } from '@msdyn365-commerce/components';\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IQuickOrderGridViewProps, IQuickOrderGridFormViewProps } from './index';\n\n/**\n * Render product dimension/configure dropdown.\n * @param dropdown -- Product dimension drop down.\n * @returns Dropdown.\n */\nconst renderConfigureDropdown = (dropdown: IProductDimensionConfigureDropdownViewProps): JSX.Element => {\n const { containerProps, labelContainerProps, heading, errors, select } = dropdown;\n\n return (\n \n {heading}\n {errors}\n {select}\n \n );\n};\n\n/**\n * Render product dimension/configure container.\n * @param configure -- Product dimension configuration.\n * @returns Container to have dimension dropdown.\n */\nconst renderConfigure = (configure?: IProductDimensionConfigureViewProps): JSX.Element | null => {\n if (configure !== undefined) {\n const { containerProps, dropdowns } = configure;\n\n return {dropdowns.map(renderConfigureDropdown)};\n }\n return null;\n};\n\n/**\n * Render product dimension/configure container.\n * @param form -- Form props.\n * @param isMobileView -- Flag to check mobile view.\n * @param quickOrderForm - Form component container.\n * @param quickOrderProductContent - Form product component.\n * @param quickOrderMessageContent - Form user message component.\n * @param configure - Product Dimension component.\n * @returns Jsx element of quick order form component.\n */\nconst renderForm = (\n form: IQuickOrderGridFormViewProps,\n isMobileView: boolean,\n quickOrderForm: INodeProps,\n quickOrderProductContent: INodeProps,\n quickOrderMessageContent: INodeProps,\n configure?: IProductDimensionConfigureViewProps\n) => {\n return isMobileView ? (\n \n \n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n {form.userMessage}\n {form.addToListBtn}\n \n \n ) : (\n \n {form.userMessage}\n \n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n {form.addToListBtn}\n \n \n );\n};\n\n/**\n * Retrieves current sort criteria.\n * @param props - QuickOrder Grid view props.\n * @returns - Render View.\n */\nconst quickOrderGridView: React.FC = props => {\n const {\n quickOrderGridProps,\n contentProps,\n form,\n quickOrderGridForm,\n drawer,\n configure,\n quickOrderGridFormProductContent,\n quickOrderGridFormMsgContent,\n isMobileView,\n header,\n container,\n actions,\n orderActions\n } = props;\n\n return (\n \n {header}\n {actions && (\n \n {orderActions?.userMessage}\n {orderActions?.addProductListToBag}\n {orderActions?.removeProductList}\n \n )}\n \n \n {renderForm(\n form as IQuickOrderGridFormViewProps,\n isMobileView,\n quickOrderGridForm,\n quickOrderGridFormProductContent,\n quickOrderGridFormMsgContent,\n configure\n )}\n {props.bulkPurchase}\n \n \n {container}\n \n );\n};\n\nexport default quickOrderGridView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport {\n IPriceComponentResources,\n ISwatchItem,\n PriceComponent,\n ProductComponentSwatchComponent,\n RatingComponent\n} from '@msdyn365-commerce/components';\nimport {\n getCatalogId,\n IAny,\n IComponent,\n IComponentProps,\n ICoreContext,\n IGeneric,\n IGridSettings,\n IImageData,\n IImageSettings,\n Image,\n msdyn365Commerce\n} from '@msdyn365-commerce/core';\nimport {\n AttributeSwatch,\n AttributeValue,\n ProductDimension,\n ProductPrice,\n ProductSearchResult,\n ProductType,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n convertDimensionTypeToProductDimensionType,\n Dictionary,\n DimensionTypes,\n generateImageUrl,\n getProductPageUrlSync,\n IDimensionsApp,\n StringExtensions,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n format,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport React, { useState } from 'react';\n\nexport interface IProductComponentProps extends IComponentProps<{ product?: ProductSearchResult; productPrice?: ProductPrice }> {\n className?: string;\n imageSettings?: IImageSettings;\n savingsText?: string;\n freePriceText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n ratingAriaLabel?: string;\n ratingCountAriaLabel?: string;\n allowBack?: boolean;\n telemetryContent?: ITelemetryContent;\n quickViewButton?: React.ReactNode;\n productComparisonButton?: React.ReactNode;\n isEnabledProductDescription?: boolean;\n isPriceMinMaxEnabled?: boolean;\n priceResources?: IPriceComponentResources;\n inventoryLabel?: string;\n dimensionAvailabilities?: IProductsDimensionsAvailabilities[];\n swatchItemAriaLabel?: string;\n}\n\nexport interface IProductComponent extends IComponent {}\n\nconst PriceComponentActions = {};\n\n/**\n * Gets the product page url from the default swatch selected.\n * @param productData - Product card to be rendered.\n * @returns The default color swatch selected if any.\n */\nfunction getDefaultSwatchSelected(coreContext: ICoreContext, productData?: ProductSearchResult): AttributeSwatch | null {\n if (!productData || !productData.AttributeValues) {\n return null;\n }\n\n const siteContext = coreContext as ICoreContext;\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\n\n const attributeSwatches = productData.AttributeValues.find(\n attributeValue => attributeValue.KeyName?.toLocaleLowerCase() === dimensionToPreSelectInProductCard\n )?.Swatches;\n\n if (!ArrayExtensions.hasElements(attributeSwatches)) {\n return null;\n }\n\n const defaultSwatch = attributeSwatches.find(item => item.IsDefault === true) ?? attributeSwatches[0];\n return defaultSwatch;\n}\n\n/**\n * Gets the product image from the default swatch selected.\n * @param coreContext - Context of the module using the component.\n * @param productData - Product card to be rendered.\n * @returns The product card image url.\n */\nfunction getProductImageUrlFromDefaultSwatch(coreContext: ICoreContext, productData?: ProductSearchResult): string | undefined {\n const defaultSwatch = getDefaultSwatchSelected(coreContext, productData);\n const swatchProductImageUrls = defaultSwatch?.ProductImageUrls;\n if (!ArrayExtensions.hasElements(swatchProductImageUrls)) {\n return productData?.PrimaryImageUrl;\n }\n\n return generateImageUrl(swatchProductImageUrls[0], coreContext.request.apiSettings);\n}\n\n/**\n * Updates the product url link to product details page.\n * @param productDetailsPageUrl - Product page url.\n * @param coreContext - Context of the module using the component.\n * @param queryString - Querystring to be added to the URL.\n * @returns The update product page url.\n */\nfunction updateProductUrl(productDetailsPageUrl: string, coreContext: ICoreContext, queryString: string): string {\n const sourceUrl = new URL(productDetailsPageUrl, coreContext.request.apiSettings.baseUrl);\n if (sourceUrl.search) {\n sourceUrl.search += `&${queryString}`;\n } else {\n sourceUrl.search += queryString;\n }\n\n const updatedUrl = new URL(sourceUrl.href);\n return updatedUrl.pathname + sourceUrl.search;\n}\n\n/**\n * Gets the react node for product unit of measure display.\n * @param unitOfMeasure - DefaultUnitOfMeasure property from product.\n * @returns The node representing markup for unit of measure component.\n */\nfunction renderProductUnitOfMeasure(unitOfMeasure?: string): JSX.Element | null {\n if (!unitOfMeasure) {\n return null;\n }\n return (\n
    \n {unitOfMeasure}\n
    \n );\n}\n\n/**\n * Gets the react node for product availability.\n * @param inventoryAvailabilityLabel - The product information.\n * @returns The node representing markup for product availability.\n */\nfunction renderProductAvailability(inventoryAvailabilityLabel: string | undefined): JSX.Element | null {\n if (!inventoryAvailabilityLabel || inventoryAvailabilityLabel === '') {\n return null;\n }\n\n return (\n
    \n {inventoryAvailabilityLabel}\n
    \n );\n}\n\n/**\n * Renders product comparison button similar to the quick view button.\n * @param productComparisonButton - React element of the button.\n * @param product - Current product info.\n * @param catalogId - Current catalog.\n * @returns React element for the specific product.\n */\nfunction renderProductComparisonButton(\n productComparisonButton: React.ReactNode,\n product: ProductSearchResult,\n catalogId: number\n): JSX.Element | undefined {\n validateCatalogId(catalogId);\n return React.cloneElement(productComparisonButton as React.ReactElement, { product, catalogId });\n}\n\n/**\n * Gets the product page url from the default swatch selected.\n * @param coreContext - Context of the module using the component.\n * @param productUrl - Product page url for the product card.\n * @param productData - Product card to be rendered.\n * @returns The product card image url.\n */\nfunction getProductPageUrlFromDefaultSwatch(\n coreContext: ICoreContext,\n productUrl: string,\n productData?: ProductSearchResult\n): string | undefined {\n const defaultSwatch = getDefaultSwatchSelected(coreContext, productData);\n if (!defaultSwatch?.SwatchValue) {\n return productUrl;\n }\n\n const siteContext = coreContext as ICoreContext;\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\n\n const queryStringEncoded = encodeURIComponent(defaultSwatch.SwatchValue);\n const queryString = `${dimensionToPreSelectInProductCard}=${queryStringEncoded}`;\n return updateProductUrl(productUrl, coreContext, queryString);\n}\n\nconst ProductCard: React.FC = ({\n data,\n context,\n imageSettings,\n savingsText,\n freePriceText,\n originalPriceText,\n currentPriceText,\n ratingAriaLabel,\n ratingCountAriaLabel,\n allowBack,\n typeName,\n id,\n telemetryContent,\n quickViewButton,\n productComparisonButton,\n isEnabledProductDescription,\n isPriceMinMaxEnabled,\n priceResources,\n inventoryLabel,\n dimensionAvailabilities,\n swatchItemAriaLabel\n}) => {\n const product = data.product;\n const productPrice = data.productPrice;\n\n let productUrl = getProductPageUrlSync(product?.Name ?? '', product?.RecordId ?? Number.MIN_VALUE, context.actionContext, undefined);\n if (allowBack) {\n productUrl = updateProductUrl(productUrl, context, 'back=true');\n }\n const productImageUrlFromSwatch = getProductImageUrlFromDefaultSwatch(context, product) ?? product?.PrimaryImageUrl;\n const productPageUrlFromSwatch = getProductPageUrlFromDefaultSwatch(context, productUrl, product) ?? productUrl;\n const [productPageUrl, setProductPageUrl] = useState(productPageUrlFromSwatch);\n const [productImageUrl, setProductImageUrl] = useState(productImageUrlFromSwatch);\n React.useEffect(() => {\n setProductPageUrl(productPageUrlFromSwatch);\n setProductImageUrl(productImageUrlFromSwatch);\n }, [productUrl, productPageUrlFromSwatch, productImageUrlFromSwatch]);\n const [selectedSwatchItems] = useState(new Dictionary());\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access -- app context is generic\n const enableStockCheck = context.app.config.enableStockCheck;\n\n const siteContext = context as ICoreContext;\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\n\n /**\n * Updates the product page and Image url based on swatch selected.\n * @param coreContext - Context of the caller.\n * @param swatchItem - Dimension swatch selected.\n */\n const updatePageAndImageUrl = React.useCallback(\n (coreContext: ICoreContext, swatchItem: ISwatchItem) => {\n const dimensionType = swatchItem.dimensionType;\n selectedSwatchItems.setValue(dimensionType, swatchItem);\n if (StringExtensions.isNullOrWhitespace(swatchItem.value)) {\n return;\n }\n const queryString = `${dimensionType}=${swatchItem.value}`;\n let productPageUrlWithSwatch = '';\n if (productPageUrl.includes(dimensionType)) {\n const newUrl = new URL(productPageUrl, coreContext.request.apiSettings.baseUrl);\n newUrl.searchParams.delete(dimensionType);\n productPageUrlWithSwatch = updateProductUrl(newUrl.toString(), context, queryString);\n } else {\n productPageUrlWithSwatch = updateProductUrl(productPageUrl, context, queryString);\n }\n setProductPageUrl(productPageUrlWithSwatch);\n if (dimensionType === dimensionToPreSelectInProductCard) {\n const swatchProductImageUrl = ArrayExtensions.hasElements(swatchItem.productImageUrls)\n ? swatchItem.productImageUrls[0]\n : undefined;\n const newImageUrl = generateImageUrl(swatchProductImageUrl, coreContext.request.apiSettings);\n setProductImageUrl(newImageUrl);\n }\n },\n [selectedSwatchItems, context, productPageUrl]\n );\n\n if (!product) {\n return null;\n }\n\n /**\n * Checks if rendering the particular dimensions is allowed for product card.\n * @param dimensionType - Dimension to be displayed.\n * @returns Updates the state with new product page url.\n */\n function shouldDisplayDimension(dimensionType: string): boolean {\n const dimensionsContext = context as ICoreContext;\n const dimensionsToDisplayOnProductCard = dimensionsContext.app.config.dimensionsInProductCard;\n return (\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n dimensionsToDisplayOnProductCard.includes(dimensionType.toLocaleLowerCase() as DimensionTypes)\n );\n }\n\n /**\n * Gets the react node for product dimension as swatch.\n * @param attributeValues - Attribute value property from product.\n * @returns The node representing markup for unit of measure component.\n */\n function renderProductDimensions(attributeValues?: AttributeValue[]): JSX.Element | null {\n if (!attributeValues) {\n return null;\n }\n\n return (\n
    \n {attributeValues.map((item: AttributeValue) => {\n const dimensionTypeValue = item.KeyName?.toLocaleLowerCase() ?? '';\n if (!shouldDisplayDimension(dimensionTypeValue)) {\n return null;\n }\n\n const siteContext = context as ICoreContext;\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\n const dimensionType = dimensionTypeValue as DimensionTypes;\n const swatches =\n item.Swatches?.map(swatchItem => {\n return {\n itemId: `${item.RecordId ?? ''}-${dimensionTypeValue}-${swatchItem.SwatchValue ?? ''}`,\n value: swatchItem.SwatchValue ?? '',\n dimensionType,\n colorHexCode: swatchItem.SwatchColorHexCode,\n imageUrl: swatchItem.SwatchImageUrl,\n productImageUrls: swatchItem.ProductImageUrls,\n isDefault: swatchItem.IsDefault,\n swatchItemAriaLabel: swatchItemAriaLabel ? format(swatchItemAriaLabel, dimensionType) : '',\n isDisabled:\n enableStockCheck &&\n dimensionAvailabilities?.find(\n dimensionAvailability => dimensionAvailability.value === (swatchItem.SwatchValue ?? '')\n )?.isDisabled\n };\n }) ?? [];\n if (\n dimensionType === dimensionToPreSelectInProductCard &&\n ArrayExtensions.hasElements(swatches) &&\n !swatches.some(swatch => swatch.isDefault)\n ) {\n swatches[0].isDefault = true;\n }\n return (\n \n );\n })}\n
    \n );\n }\n\n function renderQuickView(quickview: React.ReactNode, item?: number): JSX.Element | undefined {\n if (quickview === null) {\n return undefined;\n }\n const selectedDimensions: ProductDimension[] = selectedSwatchItems.getValues().map(swatches => {\n return {\n DimensionTypeValue: convertDimensionTypeToProductDimensionType(swatches.dimensionType),\n DimensionValue: {\n RecordId: 0,\n Value: swatches.value\n }\n };\n });\n return React.cloneElement(quickview as React.ReactElement, { selectedProductId: item, selectedDimensions });\n }\n\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', telemetryContent!, '', product.RecordId.toString());\n\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- -- Do not need type check for appsettings\n const isUnitOfMeasureEnabled = context.app.config && context.app.config.unitOfMeasureDisplayType === 'buyboxAndBrowse';\n\n return (\n <>\n {isEnabledProductDescription ? (\n \n
    \n
    \n {renderProductPlacementImage(\n imageSettings,\n context.request.gridSettings,\n productImageUrl,\n product.PrimaryImageUrl,\n product.Name,\n context\n )}\n
    \n
    \n

    {product.Name}

    \n {renderPrice(\n context,\n typeName,\n id,\n product,\n savingsText,\n freePriceText,\n originalPriceText,\n currentPriceText,\n isPriceMinMaxEnabled,\n priceResources,\n productPrice\n )}\n {isUnitOfMeasureEnabled && renderProductUnitOfMeasure(product.DefaultUnitOfMeasure)}\n {renderDescription(product.Description)}\n
    \n
    \n \n ) : (\n \n
    \n {renderProductPlacementImage(\n imageSettings,\n context.request.gridSettings,\n productImageUrl,\n product.PrimaryImageUrl,\n product.Name,\n context\n )}\n
    \n
    \n

    {product.Name}

    \n {renderPrice(\n context,\n typeName,\n id,\n product,\n savingsText,\n freePriceText,\n originalPriceText,\n currentPriceText,\n isPriceMinMaxEnabled,\n priceResources,\n productPrice\n )}\n {isUnitOfMeasureEnabled && renderProductUnitOfMeasure(product.DefaultUnitOfMeasure)}\n
    \n \n )}\n {renderProductDimensions(product.AttributeValues)}\n {!context.app.config.hideRating &&\n renderRating(context, typeName, id, product.AverageRating, product.TotalRatings, ratingAriaLabel, ratingCountAriaLabel)}\n {renderProductAvailability(inventoryLabel)}\n {quickViewButton && renderQuickView(quickViewButton, product.RecordId)}\n {productComparisonButton && renderProductComparisonButton(productComparisonButton, product, getCatalogId(context.request))}\n \n );\n};\n\nfunction renderLabel(\n name?: string,\n price?: string,\n rating?: number,\n ratingAriaLabelText?: string,\n reviewCount?: number,\n ratingCountAriaLabelText?: string\n): string {\n const reviewCountArialableText = getReviewAriaLabel(reviewCount, ratingCountAriaLabelText ?? '');\n return `${name ?? ''} ${price ?? ''} ${getRatingAriaLabel(rating, ratingAriaLabelText)}${\n reviewCountArialableText ? ` ${reviewCountArialableText}` : ''\n }`;\n}\n\nfunction renderDescription(description?: string): JSX.Element | null {\n return

    {description}

    ;\n}\n\nfunction getRatingAriaLabel(rating?: number, ratingAriaLabel?: string): string {\n if (rating && ratingAriaLabel) {\n const roundedRating = rating.toFixed(2);\n return format(ratingAriaLabel || '', roundedRating, '5');\n }\n return '';\n}\n\nfunction getReviewAriaLabel(reviewCount?: number, ratingCountAriaLabelText?: string): string {\n if (reviewCount && ratingCountAriaLabelText) {\n return format(ratingCountAriaLabelText || '', reviewCount);\n }\n return '';\n}\n\nfunction renderRating(\n coreContext: ICoreContext,\n moduleTypeName: string,\n moduleId: string,\n avgRating?: number,\n totalRatings?: number,\n ariaLabel?: string,\n ratingCountAriaLabel?: string\n): JSX.Element | null {\n if (!avgRating) {\n return null;\n }\n\n const numberRatings = totalRatings?.toString() || undefined;\n const ratingAriaLabelText = getRatingAriaLabel(avgRating, ariaLabel);\n const ratingCountAriaLabelText = getReviewAriaLabel(Number(numberRatings), ratingCountAriaLabel);\n\n return (\n \n );\n}\n\nfunction renderPrice(\n context: ICoreContext,\n typeName: string,\n id: string,\n productSearchResult: ProductSearchResult,\n savingsText?: string,\n freePriceText?: string,\n originalPriceText?: string,\n currentPriceText?: string,\n isPriceMinMaxEnabled?: boolean,\n priceResources?: IPriceComponentResources,\n productPrice?: ProductPrice\n): JSX.Element | null {\n const product: SimpleProduct = {\n // This is a fake product. The product type is only used for price component to determine if it should show price range or not.\n ProductTypeValue: productSearchResult.IsMasterProduct ? ProductType.Master : ProductType.Standalone\n } as SimpleProduct;\n\n const price: ProductPrice = productPrice ?? {\n BasePrice: productSearchResult.BasePrice,\n AdjustedPrice: productSearchResult.Price,\n CustomerContextualPrice: productSearchResult.Price,\n MaxVariantPrice: productSearchResult.MaxVariantPrice ? productSearchResult.MaxVariantPrice : productSearchResult.Price,\n MinVariantPrice: productSearchResult.MinVariantPrice ? productSearchResult.MinVariantPrice : productSearchResult.Price\n };\n\n return (\n \n );\n}\n\nfunction renderProductPlacementImage(\n imageSettings?: IImageSettings,\n gridSettings?: IGridSettings,\n imageUrl?: string,\n fallbackImageUrl?: string,\n altText?: string,\n context?: ICoreContext>\n): JSX.Element | null {\n if (!imageUrl || !gridSettings || !imageSettings) {\n return null;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment -- Site level config can be of any type.\n const contextConfig = context?.app.config?.placeholderImageName;\n const emptyPlaceHolderImage = contextConfig as string;\n let fallbackImageSource = fallbackImageUrl;\n if (emptyPlaceHolderImage && fallbackImageUrl) {\n fallbackImageSource = `${fallbackImageUrl},${emptyPlaceHolderImage}`;\n }\n const img: IImageData = {\n src: imageUrl,\n altText: altText ? altText : '',\n fallBackSrc: fallbackImageSource\n };\n const imageProps = {\n gridSettings,\n imageSettings\n };\n imageProps.imageSettings.cropFocalRegion = true;\n return (\n \n );\n}\n\nexport const ProductComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride<\n IProductComponent\n>('Product', { component: ProductCard, ...PriceComponentActions });\n\nexport default ProductComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IPriceComponentResources } from '@msdyn365-commerce/components';\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISearchResultModalViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from '@msdyn365-commerce-modules/search-result-container';\nimport { Button, getTelemetryObject, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport React, { MouseEventHandler, useEffect, useState } from 'react';\n\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport {\n ISearchResultContainerProps,\n ISearchResultContainerResources\n} from '../definition-extensions/search-result-container.ext.props.autogenerated';\nimport { ProductComponent } from './components/product.component';\n\n/**\n * DescriptionInterval.\n */\nenum DescriptionInterval {\n productDescriptionInterval = 14,\n productDescriptionIntervalRemainder0 = 0,\n productDescriptionIntervalRemainder9 = 9\n}\n\n/**\n * Render Clear button for mobile viewport.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nconst renderProductCards = (props: ISearchResultContainerViewProps & ISearchResultContainerProps<{}>): JSX.Element | null => {\n return {props.products};\n};\n\n/**\n * Returns the product inventory label.\n * @param channelInventoryConfigurationId - The channel configuration Id.\n * @param product - The product.\n * @returns The inventory label.\n */\nfunction getInventoryLabel(channelInventoryConfigurationId: number | undefined, product: ProductSearchResult): string | undefined {\n if (!channelInventoryConfigurationId || !ArrayExtensions.hasElements(product.AttributeValues)) {\n return undefined;\n }\n const inventoryAttribute = product.AttributeValues.find(attribute => attribute.RecordId === channelInventoryConfigurationId);\n if (inventoryAttribute) {\n return inventoryAttribute.TextValue;\n }\n return undefined;\n}\n\n/**\n * Render Clear button for mobile viewport.\n * @param props - The view props.\n * @param product - The product item data.\n * @param index - The index of each product item.\n * @param isEnabledProductDescription - The flag for showing Product desription tile.\n * @returns The JSX Element.\n */\nconst renderProductCardsDescription = (\n props: ISearchResultContainerViewProps & ISearchResultContainerProps<{}>,\n product: ProductSearchResult,\n index: number,\n isEnabledProductDescription?: boolean\n): JSX.Element | null => {\n const { config, context, resources, productsDimensionAvailabilities } = props;\n const telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\n const breadCrumbType = props.context.app.config.breadcrumbType;\n const isAllowBack = props.config.allowBackNavigation && (breadCrumbType === 'back' || breadCrumbType === 'categoryAndBack');\n const classname = isEnabledProductDescription\n ? 'ms-product-search-result__item product__description'\n : 'ms-product-search-result__item';\n const quickviewslot = ArrayExtensions.hasElements(props.slots.quickview) ? props.slots.quickview[0] : undefined;\n const channelInventoryConfigurationId = props.data.products.result?.channelInventoryConfigurationId;\n const isPriceMinMaxFeatureState = props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n\n const productComparisonButton = ArrayExtensions.hasElements(props.slots.productComparisonButton)\n ? props.slots.productComparisonButton[0]\n : null;\n\n return (\n
  • \n \n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === product.MasterProductId\n )}\n />\n
  • \n );\n};\n\n/**\n * Render Clear button for mobile viewport.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nconst renderProducts = (props: ISearchResultContainerViewProps & ISearchResultContainerProps<{}>): JSX.Element | null => {\n const products = props.data.listPageState.result?.activeProducts;\n if (!products || !ArrayExtensions.hasElements(products)) {\n return null;\n }\n const productDescriptionInterval: number = DescriptionInterval.productDescriptionInterval;\n const productDescriptionIntervalRemainder0: number = DescriptionInterval.productDescriptionIntervalRemainder0;\n const productDescriptionIntervalRemainder9: number = DescriptionInterval.productDescriptionIntervalRemainder9;\n return (\n \n {props.errorMessage}\n
      \n {products.map((product: ProductSearchResult, index: number) =>\n index % productDescriptionInterval === productDescriptionIntervalRemainder0 ||\n index % productDescriptionInterval === productDescriptionIntervalRemainder9\n ? renderProductCardsDescription(props, product, index, true)\n : renderProductCardsDescription(props, product, index, false)\n )}\n
    \n
    \n );\n};\n\n/**\n * Render Title Count.\n * @param props - The title view props.\n * @returns The JSX Element.\n */\nconst renderTitleCount = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return {title.titleCount};\n }\n return null;\n};\n\n/**\n * Render Category Hierarchy.\n * @param props - The category hierarchy view props.\n * @returns The JSX Element.\n */\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n \n {categoryHierarchyList.map((category, index) => (\n \n {category}\n {categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n \n ))}\n \n );\n }\n\n return null;\n};\n\n/**\n * Function to make filter sticky.\n * @param isMobile - The boolean prop.\n * @param isStickyHeader - The boolean prop.\n */\nexport const configureStickyFilter = (isMobile: boolean, isStickyHeader: boolean): void => {\n // Get heights of cookie and promotion banners\n const defaultValue = 0;\n const defaultOffset = 28;\n const headerContainer: HTMLElement | null = document.querySelector('.ms-header');\n\n const headerHeight: number | undefined = headerContainer?.offsetHeight;\n const containerHeight: number = headerHeight ?? defaultOffset;\n const bannerHeights = isStickyHeader ? defaultValue : containerHeight;\n const headerElement = document.querySelector('header .lock-opaque');\n const defaultContainer = document.querySelector('header .default-container');\n const refinerElement = isMobile ? document.querySelector('.msc-sort-filter-wrapper') : document.querySelector('.ms-refiner-heading');\n if (refinerElement && headerElement && defaultContainer) {\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > bannerHeights) {\n refinerElement.classList.add('lock-Filter');\n refinerElement.setAttribute('style', `top: ${defaultContainer.clientHeight}px`);\n } else {\n refinerElement.classList.remove('lock-Filter');\n }\n } else if (refinerElement) {\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > bannerHeights) {\n refinerElement.classList.add('lock-top');\n } else {\n refinerElement.classList.remove('lock-top');\n refinerElement.classList.remove('lock-Filter');\n refinerElement.removeAttribute('style');\n }\n }\n};\n\n/**\n * Function to setup filter sticky.\n * @param isMobile - The boolean prop.\n * @param isStickyHeader - The boolean prop.\n */\nfunction stickyFilterSetup(isMobile: boolean, isStickyHeader: boolean): void {\n window.addEventListener('scroll', () => {\n configureStickyFilter(isMobile, isStickyHeader);\n });\n configureStickyFilter(isMobile, isStickyHeader);\n}\n\n/**\n * Function to make filter sticky.\n * @param refinerRefernce - Ref prop for filter.\n * @param toggle - Toggle function for filter menu.\n */\nfunction useOutsideClick(refinerRefernce: React.RefObject, toggle: (event: Event) => void) {\n React.useEffect(() => {\n /**\n * Function to make filter sticky.\n * @param event - Event prop for filter.\n */\n function handleClickOutside(event: Event) {\n const element = document.querySelector('.ms-refine-filter__toggle_collapsed');\n if (refinerRefernce.current && !refinerRefernce.current.contains(event.target as Node) && !element) {\n toggle(event);\n }\n }\n if (MsDyn365.isBrowser) {\n document.addEventListener('click', handleClickOutside);\n }\n return () => {\n if (MsDyn365.isBrowser) {\n document.removeEventListener('click', handleClickOutside);\n }\n };\n }, [refinerRefernce, toggle]);\n}\n\n/**\n * Render the category page items.\n * @param props - The view props.\n * @returns The search Result container module view.\n */\nconst SearchResultContainerView: React.FC> = props => {\n const {\n SearchResultContainer,\n pagination,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n FeatureSearchContainer,\n similarLookProduct,\n errorMessage,\n resources\n } = props;\n useEffect(() => {\n if (props.config.useStickyFilter && MsDyn365.isBrowser) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app context is generic\n stickyFilterSetup(props.isMobile, props.context.app.config.enableStickyHeader as boolean);\n }\n }, [props]);\n const [isExpanded, setIsExpanded] = useState(false);\n const toggle = () => {\n setIsExpanded(!isExpanded);\n };\n const wrapperRefiner = React.useRef(null);\n useOutsideClick(wrapperRefiner, toggle);\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n \n {similarLookProduct ? null : (\n \n {renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {renderTitleCount(TitleViewProps)}\n \n )}\n {choiceSummary}\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n {similarLookProduct}\n {errorMessage}\n {props.config.enableProdutDescription ? renderProducts(props) : renderProductCards(props)}\n {pagination}\n \n );\n }\n return (\n \n {similarLookProduct ? null : (\n \n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {TitleViewProps && renderTitle(TitleViewProps)}\n {TitleViewProps && renderTitleCount(TitleViewProps)}\n \n )}\n {similarLookProduct}\n \n \n \n \n {resources.filterText}\n \n
    {choiceSummary}
    \n
    \n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n
    \n
    \n {refineMenu && isExpanded && renderRefiner(refineMenu)}\n \n {refineMenu && isExpanded && renderRefinerFooter(refineMenu, toggle, resources)}\n \n
    \n\n \n {errorMessage}\n {props.config.enableProdutDescription ? renderProducts(props) : renderProductCards(props)}\n {pagination}\n \n
    \n
    \n );\n};\n\n/**\n * Render Search result Modal.\n * @param modalProps - The Search Result Modal view props.\n * @param refineMenu - The Refine Menu view props.\n * @param sortByDropDown - The Sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\n/**\n * Render Refiner Mobile.\n * @param props - The Refine Menu view props.\n * @returns The JSX Element.\n */\nconst renderRefinerMobile = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n \n \n {refiners.map((submenu, index) => (\n {submenu}\n ))}\n \n \n );\n }\n return null;\n};\n\n/**\n * Render Search result Body.\n * @param props - The Search Result Modal view props.\n * @param refineMenu - The Refine Menu view props.\n * @param sortByDropDown - The Sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefinerMobile(refineMenu));\n }\n return null;\n};\n\n/**\n * Render Refiner.\n * @param props - The Refine Menu view props.\n * @returns The JSX Element.\n */\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n \n \n {refiners.map((submenu, index) => (\n {submenu}\n ))}\n \n \n );\n }\n return null;\n};\n\n/**\n * Render Refiner Footer.\n * @param props - The Refine Menu view props.\n * @param handler - The Refine menu toggle function.\n * @param resources - Resources to get the done text and aria label.\n * @returns The JSX Element.\n */\nconst renderRefinerFooter = (\n props: IRefineMenuViewProps,\n handler: MouseEventHandler,\n resources: ISearchResultContainerResources\n): JSX.Element | null => {\n const { refiners } = props;\n if (refiners) {\n return (\n \n \n {resources.doneText}\n \n \n );\n }\n return null;\n};\n\n/**\n * Render sort by drop down.\n * @param props - The sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return {sortByDropDown};\n }\n return null;\n};\n\n/**\n * Render Title.\n * @param props - The title view props.\n * @returns The JSX Element.\n */\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n \n \n {title.titlePrefix}\n {title.titleText}\n \n \n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n"],"names":["props","React","className","msg","CONTENT","AddLineToTemplate","constructor","super","state","isOpen","query","products","productCatalogs","content","Search","selectedProduct","selectedCatalogId","defaultImageSettings","viewports","xs","q","w","h","lg","xl","lazyload","searchTextInput","addLineButtonRef","_renderSearchForm","resources","searchButtonAriaLabel","searchModalPlaceholderText","selectCatalogTitleText","this","name","role","autoComplete","onSubmit","_onSearchSubmit","ArrayExtensions","hasElements","htmlFor","id","onChange","_onCatalogSelectionChange","_getCatalogNodes","type","autoFocus","placeholder","value","_onInputChange","ref","maxLength","color","event","preventDefault","_get","setState","Loading","_getSearchResults","then","result","length","NotFound","ProductList","catch","error","Error","_onQuantityChangeHandler","selectedQuantity","target","_onSelectItem","async","actionContext","request","apiSettings","channelId","context","varianteInput","SelectedVariantInput","product","RecordId","undefined","productVariant","getSelectedVariant","telemetry","Promise","resolve","dimensions","_getProductDimensions","selectedProductDimensions","ProductConfiguration","_onBackButtonClickHandler","_highlightSearchTerm","parsedName","unescape","replace","RegExp","dangerouslySetInnerHTML","__html","_resultCountText","searchResultsCountVerbage","toString","searchResultsCountSubject","_addItemToTemplateHandler","orderTemplateId","isMultipleCatalogFeatureEnabledInHq","catalogId","input","AddItemToOrderTemplateInput","config","quantity","DefaultUnitOfMeasure","addItemToOrderTemplate","reloadPage","window","location","reload","Number","parseInt","_toggleModalHandler","payLoad","getPayloadObject","telemetryContent","onTelemetryClick","_getCatalogs","current","focus","onComponentDidMount","_this$searchTextInput","componentDidMount","onComponentDidUpdate","_this$searchTextInput2","showBackArrow","shouldComponentUpdate","nextProps","nextState","render","addLineModalLinkText","backToResultsText","modalProps","_objectSpread","toggle","ariaLabel","Modal","Object","assign","ModalHeader","onClick","_renderContent","viewProps","imageSettings","addToTemplateHandler","onQuantityChangeHandler","highlightSearchTerm","searchForm","productProps","clickHandler","renderResultCountText","ModalBody","Spinner","progressNotificationText","notFoundSearchErrorNotice","notFoundSearchErrorRedediation","NotFoundComponent","searchErrorMessage","catalogs","getCatalogId","validateCatalogId","map","productCatalog","isSelected","key","selected","Name","searchText","searchCriteriaInput","Context","ChannelId","CatalogId","IncludeAttributes","SearchCondition","searchByCriteriaAsync","callerContext","MasterProductId","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","__decorate","computed","Dropdown","selectMenu","_onChanged","selectedIndex","dropdownId","selectId","selectedValue","innerText","dropdownList","dropdownName","item","OrderTemplateQuantity","inputRef","_validateMin","minValue","min","isNaN","currentInput","currentCount","_handleChange","bind","reaction","glyphMinusClassName","decrementGlyphClass","glyphPlusClassName","incrementGlyphClass","disabled","incDisabled","max","currentValue","extraClass","getChangeHandler","amount","_onIncrementalChange","title","decrementButtonAriaLabel","tabIndex","pattern","onBlur","inputQuantityAriaLabel","incrementButtonAriaLabel","updatedQuantity","e","inputElement","HTMLInputElement","_debounce","setAttribute","defaultProps","observer","selectedDimensions","_getDimensionsError","dimensionName","dimensionMissingError","_addToTemplateHandler","isBusy","showAddConfirmation","errors","add","missingDimensions","dimension","DimensionTypeValue","filter","status","ProductListId","addToTemplateDuplicateError","addToTemplateGenericError","errorMessage","_onQuantityChange","newValue","totalPrice","Price","_updateDimensionValue","productDimensionFull","newValueId","DimensionValues","find","_onDimensionChanged","_this$state$errors","remainingDimensionsErrors","selection","buttonDisabled","mappedDimensions","DimensionValue","ExtensionProperties","variantProduct","dimensionInput","variantDimensions","availabilityInput","ProductAvailabilitiesForSelectedVariantInput","newAvailableQuantity","getProductAvailabilitiesForSelectedVariant","priceInput","PriceForSelectedVariantInput","productPrice","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","app","OmniChannelMedia","loadFailureBehavior","_formatPrice","_getDimensionsNodes","ModalFooter","_getConfirmationMessage","Button","classnames","selectedDimensionNames","_dimension$DimensionV","variant","Value","addToTemplateConfirmation","values","join","_this$state$errors2","unshift","includes","Alert","assertive","price","cultureFormatter","formatCurrency","currencyCode","toFixed","selectProductButtonText","index","_generateImageUrl","_props$context$reques","primaryImageSource","generateImageUrl","fallBackImg","ProductSelectButton","buttonText","setBusy","useState","getClickHandler","OrderTemplateBulkActions","isAddDisabled","isRemoveDisabled","addHandler","onAddSelectionToBag","removeHandler","onRemoveSelection","static","selectedLines","_this$props$data$cata","searchInputAriaLabel","backButtonText","addSelectedToBagButtonText","removeSelectedToBagButtonText","addLineProps","data","isMinifiedView","OrderTemplateLines","_isChannelMultipleCatalogsFeatureEnabled","_this$props$data$feat","featureState","feature","IsEnabled","_onRemoveSelection","removeSelectedFailureMessage","removeSelectedSuccessMessage","lines","productSelection","productListLines","line","isChecked","productListLine","productListId","maxWaitTimeInMilliSeconds","removeProductListLinesAsync","userMessage","statusCssString","messageGlyph","setTimeout","warning","_getOrderTemplatePageUrl","_this$props$data$orde","url","getUrlSync","substr","indexOf","orderTemplate","productList","Id","_onAddSelectionToBag","productLine","_productLine$fullProd","_productLine$fullProd2","_productLine$fullProd3","_productLine$fullProd4","_productLine$productL","itemKey","fullProduct","ProductDetails","ProductTypeValue","AdjustedPrice","Quantity","_addItemToBag","_OrderTemplateActionsView","deleteTemplateButtonText","addTemplateToBag","_getOrderTemplateAddToCartDialog","renameTemplate","_getOrderTemplateRenameControl","removeTemplate","_removeOrderActionHandler","actionsSplitButton","ActionsSplitButton","_removeOrderTemplate","handlers","onRemoveTemplate","_getCurrentUrl","reqContext","MsDyn365","isBrowser","URL","href","requestUrl","onCloseHandler","isItemAddedToOrderTemplateOpen","_renderItemAddedToCartDialog","_this$props$data$feat2","itemAddedToCartDialogData","ItemAddedToCartDialog","typeName","dialogStrings","_generateItemAddedToCartDialogResources","modalOpen","onClose","_renderPagination","fullUrl","itemsPerPage","skipCount","_getCurrentPageNumber","totalItems","totalLines","previousText","flipperPrevious","nextText","flipperNext","UncontrolledPagination","paginationAriaLabel","qsp","items","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","_toggleDetailsDisplayed","isDetailsDisplayed","detailedProductView","OrderTemplateMobileLineView","_updateProductUrlCatalog","productDetails","productUrl","getProductUrlSync","StringExtensions","isNullOrWhitespace","absoluteUrl","searchParams","set","_onDismiss","_changeQuantity","orderTemplateLinesData","orderTemplateLines","orderLineIndex","findIndex","LineId","newProductListLine","prevQuantity","_objectWithoutProperties","_excluded","isQuantityDisabledForUpdate","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","debug","message","_removeItemFromOrderTemplateLines","user","isAuthenticated","token","userToken","featureStates","getFeatureState","createGetFeatureStateInput","_featureStates$find","_renameTemplate","handleAddToCart","_cart$CartLines","chunkCount","queryResultSettings","Paging","Top","Skip","getPaginatedOrderTemplateLinesInput","GetPaginatedOrderTemplateLinesInput","getPaginatedOrderTemplateLinesAction","addedCartLines","cartState","getCartState","cartLine","IsInvoiceLine","uploadStatus","addedLinesCount","skip","cartLines","_productLine$fullProd5","TrackingId","UnitOfMeasureSymbol","UnitOfMeasure","addCartLinesAsync","Version","_error$data","_error$data2","trace","ValidationResults","prevState","concat","refreshCart","setModalOpen","addTemplateToBagButtonText","closeWindowButtonText","addToCartFailureMessage","addToCartSuccessMessage","addToCartProcessMessage","orderTemplateErrorMessage","linesAddedToCartDialogResources","modalText","_getModalText","errorMsg","processStatusClass","toLowerCase","TelemetryConstant","AddOrderTemplateToCart","addOrderTemplateAttribute","getTelemetryAttributes","popupProps","text","renderModalPopup","PopupProducts","linesAddedToCartDialogOpen","LinesAddedToCartDialog","linesCount","closeLinesAddedToCartDialog","_removeTemplate","deleteAsync","_orderTemplate$result","deleteOrderTemplateFailedText","newLink","_getViewport","device","Type","innerWidth","sm","md","paginationPreviousText","paginationNextText","_viewport","_updateViewport","isConfirmAddSelectionToBagModalOpen","getTelemetryObject","telemetryPageName","friendlyName","params","isEditor","signInUrl","isMobile","heading","addEventListener","componentWillUnmount","removeEventListener","emptyOrderTemplateLinesText","errorGettingOrderTemplateLines","ObjectExtensions","isNullOrUndefined","errorProps","moduleProps","statusMessage","Heading","renderView","OrderTemplateLinesStatusMessage","errorType","orderTemplateResult","_isFirstPage","emptyViewProps","orderActions","_renderOrderTemplateActions","bulkOrderLineActions","_getOrderTemplateLineActions","OrderTemplateActions","tag","productsStatusMessage","ProductsTable","ProductsTableRow","ProductsTableHeading","_renderProductListHeader","orderLines","_renderProductList","callbacks","updateQuantity","debounce","pagination","itemAddedToCartDialog","toggleDetailsDisplayed","onSelect","updated","_product$fullProduct","_line$fullProduct","onSelectAll","productImage","productNumberText","productText","productUnitPriceText","productUOMText","productQuantityText","productActionsText","selectAllRowsText","productLineCatalogName","headers","productNumber","productName","productUnitPrice","productUOM","productQuantity","productActions","OrderTemplateTableHeading","_generateLinesAddedToCartDialogResources","viewCartButtonText","orderTemplateCloseButtonText","linesAddedToCartHeaderItemsOneText","linesAddedToCartHeaderLinesOneText","linesAddedToCartHeaderLinesFormatText","linesAddedToCartHeaderMessageText","itemAddedToCartHeaderItemOneText","itemAddedToCartHeaderItemFormatText","itemAddedToCartHeaderMessageText","freePriceText","originalPriceText","currentPriceText","renameTemplateButtonText","orderTemplateActions","onRenameTemplate","renameOrderTemplateDialogStrings","_generateOrderTemplateNameDialogResources","orderTemplateHeaderLabel","renameOrderTemplateTitleText","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","renameOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelBtnLabel","selectOneRowText","moreButtonText","viewProductDetailsText","priceFree","addOrderTemplateItemToBagButtonText","removeItemFromOrderTemplateButtonText","deleteButtonText","unavailableProductErrorMessage","outOfStockProductErrorMessage","_line$fullProduct2","currentProductProps","orderTemplateLine","ProductPrice","shouldDisable","moduleId","moduleTypeName","onAddToBag","onRemoveItem","onChangeQuantity","removeFromOrderTemplateLinesText","addToBagButtonText","OrderTemplateLineView","observable","action","RenameOrderTemplateComponent","_renderItem","quantityLabel","selectLine","productLineCatalog","addToBagButton","removeButton","productInfo","productUnitOfMeasure","productQuantityView","popUp","extraActionsPopup","disableElement","pointerEvents","opacity","Node","style","toggleDetails","Module","wrapClassName","fade","applicationNode","CartIconView","_modalContainer","placement","hideArrow","isModalOpen","closeModal","_openModal","_renderCartCloseIcon","_renderCartItemCount","cartItemCount","cartlines","_escFunction","keyCode","KeyCodes","Escape","isAutoDisplayTriggered","isCartValid","isQuantityLimitsFeatureEnabled","payload","TelemetryEvent","CheckOut","Checkout","contentAction","etext","GuestCheckout","checkoutByGuestAttributes","_validateCart","componentDidUpdate","_removeCommentFromCartLine","_cartState$cart$CartL","Comment","_clonedCart","updateCart","newCartObject","_renderGuestCheckout","hasError","guestCheckoutUrl","guestCheckoutButtonTitle","_cart$result$cart$Ver","cartVersion","lastValidatedCartVersion","validateCartAsync","ValidationResultsPairs","_this$props$data$cart","_this$props$data$cart2","_this$props$data$cart3","_this$props$data$cart4","shouldShowMiniCart","isProductAddedToCart","AddToCartBehavior","showMiniCart","some","cartline","miniCartWrapper","renderModuleAttributes","cartIcon","flyoutTitle","isEmpty","slots","emptyCart","CartlinesWrapper","cartLineIndex","miniCartItemWrapper","storeLocation","remove","promoContentItem","_props$data$cart$resu","_props$resources$tota","hasInvoiceLine","TotalAmount","emptyPrice","totalPriceFormatString","renderTotalPrice","subTotalMessage","goToCartButton","continueShoppingButtonTitle","renderCartlines","modalCloseButtonReference","onCancelHandler","isCreateOrderTemplateDialogOpen","setOrderTemplateNameDialogOpen","onCreateButtonClick","createOrderTemplateText","OrderTemplateNameDialog","isUpdateDialog","createOrderTemplateDialogResources","onCancel","onSuccess","onOrderTemplateCreated","parentElementRef","_reloadPage","OrderTemplateListViewComponent","OrderTemplateList","OrderTemplates","OrderTemplate","orderTemplates","createOrderTemplateButton","templateHeaderStatusMessage","console","log","CreateNewTemplateButtonComponent","createNewTemplateButtonText","createOrderTemplateHeader","createOrderTemplateDescription","createOrderTemplateButtonText","cancelNewOrderTemplateCreationButtonText","headingForEmptyOrderTemplateList","textForEmptyOrderTemplateList","renderOrderTemplate","orderTemplateNodeProps","addToCartButton","orderTemplateImage","orderTemplateStatusMessage","orderTemplateName","orderTemplateImageElement","currentImageListLength","children","push","getExtensionPropertyValueByKey","properties","valueType","_properties$find","property","p","Key","_modalErrContainer","isErrModalOpen","closeErrModal","isErrAutoDisplayTriggered","isAddressCheckComplete","iProductsPresentVersion","customer","readAsync","customerAccountNumber","_customer$Addresses","Addresses","IsPrimary","ShippingAddress","primaryAddress","getAddresses","updateShippingAddress","newShippingAddress","_cart$cart","_this$props$data$cart5","ippContent","iProductsPresent","CommercePropertyValueEnum","string","ineligibleProductsText","JSON","parse","r","Barcode","Description","err","handleCartAddress","itemCount","goToCartButtonText","goToCartButtonTitleNew","allowableFreight","invoiceInCartMessage","document","_data$detail$Products","detail","Products","removeCartLines","cartLineIds","_props$data$cart$resu2","addToCartButtonProps","setErrorMessage","setLinesAddedToCartDialogOpen","setUploadStatus","setAddedLinesCount","addToCartText","prevCount","CarouselModule","_handleDismissCarousel","cookies","dismissCarousel","_next","nextIndex","activeIndex","animating","closeNow","_previous","_onExiting","_onExited","_goToIndex","newIndex","get","carouselContainer","closeAnimation","next","previous","onIndicatorsClickHandler","handleDismissCarousel","handleOnExited","handleOnExiting","retrieveItems","Carousel","pause","pauseOnHover","ride","autoplay","interval","transitionType","hideFlipper","dismissEnabled","dismissCarouselAriaText","ariaLabelForDismissButton","indicatorAriaText","ariaLabelForSlide","directionTextPrev","directionTextNext","keyboard","propsContext","cartResult","shouldRetry","arguments","_validationResult$Val","validationResult","CartsDataActions","bypassCache","ValidationResultsByLineId","refreshError","validateError","cartLineQuantityUpdatedAsync","cartLineToUpdate","isUsingDefaultOrderSettingsMax","_modifiedProduct$Beha2","modifiedProduct","Behavior","MaximumQuantity","cartLineId","newQuantity","additionalProperties","updateLineResult","updateCartLineQuantity","getProductByProductId","productId","getProductByProductIdAndWarehouse","warehouseId","targetWarehouseValue","WarehouseId","_product$Behavior","InventoryLocationId","_renderDeliveryLocation","deliverylocation","FulfillmentStoreId","_foundProductDelivery","orgUnitName","_getOrgUnitName","orgUnitLocations","foundProductDeliveryOption","productDeliveryOptions","deliveryOption","delivery","DeliveryOptions","option","Code","DeliveryMode","shippingText","_renderStoreLocation","fulfillmentStoreId","foundLocation","orgUnitLocation","OrgUnitNumber","OrgUnitName","_assembleCartlines","reactNodes","foundProductAvailability","_foundProductAvailabi","productAvailabilites","productAvailability","_productAvailability$","ProductAvailableQuantity","_assembleNode","foundProductDeliveryOptions","removeButtonText","removeItemClickHandler","availableQuantityInStock","isStockCheckEnabled","outOfStockThreshold","AvailableQuantity","_getCartItemAvailableQuantity","maxQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","maxCartlineQuantity","isServiceItem","ItemTypeValue","ReleasedProductType","Service","onRemoveClickHandler","onRemoveClickFunction","RemoveCartItem","removeCartItemAttribute","isChannelTypeB2B","_cartline$CatalogId","CartLineItemComponent","currentQuantity","isOutOfStock","isQuantityEditable","primaryImageUrl","displayMode","channelDeliveryOptionConfig","deliveryLocation","getMiniCartData","ctx","miniCartData","getActiveCartProductsAction","ActiveCartProductsInput","exception","getAvailabilitiesForCartLineItems","ProductAvailabilitiesForCartLineItems","availableQuantity","getDeliveryOptionsForCartLineItems","ProductDeliveryOptionsForCartLineItems","deliveryOptions","CartIcon","retailMultiplePickUpOptionEnabled","getSortedCartLines","sortOrder","item1","item2","_item2$LineNumber","_item1$LineNumber","LineNumber","_item1$LineNumber2","_item2$LineNumber2","_getImageSettings","_removeItemFromCartHandler","cartlineToRemove","checkoutBySignInAttributes","ViewShoppingBag","viewShoppingBagAttributes","_this$props$data$orgU","_setQuantityLimitsFeatureFlag","prevProps","_cart$cart$CartLines","_this$state$miniCartD","_this$state$miniCartD2","_this$props$data$chan","enableHoverCart","isAnonymousCheckout","cartUrl","checkoutURL","_getCheckoutURL","isCartEmpty","emailDeliveryModeCode","channel","EmailDeliveryModeCode","_getCartLines","validInventoryAcrossCartLines","validateCartLinesInventory","isValid","includeFlyout","totalItemsInCart","goToCartButtonTitle","flyoutTooltip","UncontrolledTooltip","trigger","shouldShowCloseButton","cartPageUrl","hideAriaHidden","priceString","CartIconComponent","cartLabel","cartQtyLabel","FlyoutContainer","checkoutAsSignInUserButton","checkoutButtonTitle","checkoutAsGuestButton","checkoutBlockedDueToUnavailableFunds","isAbsoluteUrl","urlCheck","returnURL","msdyn365Commerce","origin","PickupDeliveryModeCode","FlyoutCartLineItems","cartLinesSortOrder","enableStockCheck","updateMaxQuantityForCartLineItem","sizeString","colorString","configString","styleString","quantityDisplayString","quantityDisplayText","salesAgreementPricePrompt","discountStringText","shippingChargesText","removeCartButtonText","outOfStockText","outOfRangeOneText","outOfRangeFormatText","pickupDeliveryModeCode","_featureStatuses$find","_featureStatuses$find2","featureStatuses","_this$props$context","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","_featureStatuses$find3","customerInformation","customerInfo","IsB2b","_cartConfiguration$Ig","cartConfiguration","IgnoreOrderSettings","_renderCartlines","onRemoveOrderTemplate","removeOrderTemplateActionHandler","OrderTemplateRender","removeFromOrderTemplateListText","orderTemplateState","enableImageProductLink","onDismiss","_renderOrderTemplateImages","orderTemplateAriaLabel","_renderAriaLabel","_getUrlSync","separator","AddOrderTemplateToCartComponent","addToBagText","onClickHandler","slice","_line$productListLine","_line$fullProduct$Pro","_line$fullProduct$Pro2","_line$fullProduct3","_line$fullProduct4","_context$request$app","OrderTemplateListStatusMessage","_ref","_onRemoveFromOrderTemplateList","headerStatusMessage","_heading$text","_heading$tag3","emptyOrderTemplateText","orderTemplatesData","orderTemplateListHeading","orderTemplateListTitle","_heading$tag","_heading$tag2","_renderOrderTemplateList","currentTemplateProps","OrderTemplateListView","_renderOrderTemplate","removeOrderActionHandler","OrderTemplateActionsView","buttonEventReference","isStatementRequestAdminDropdownOpen","setIsStatementRequestAdminDropdownOpen","renameOrderTemplateDialogOpen","onToggleDropdown1","popoverReference","existingOrderTemplate","onOrderTemplateNameCancel","_buttonEventReference","requestStatementDropdownString","Random","Guid","generateGuid","innerRef","Popover","OrderTemplateLineActions","getAddToBag","getRemoveItem","PopUp","showMobile","setShowMobile","getActionButton","removeButtonClassName","addButtonClassName","getDesktopActionButton","onSelectLineHandler","checked","fallbackImage","renderProductCatalog","_renderProductImage","renderProductInfo","_renderPrice","_renderProductError","_generateQuantity","ExtraActionsPopup","showActions","setShowActions","actionsContainerClassName","_context$request$app2","onChangeHandler","image","_context$actionContex","_context$request","isB2b","catalog","PriceComponent","OOS","UNASSORTED","NONE","_orderTemplateLine$fu","Dimensions","_renderProductDimensions","dimensionsLine","componentClassName","getOnChange","checkedLines","scope","ProductComparisonPreview","_renderGreyPlaceHolders","productData","counts","greyPlaceHoldersCount","displayGreyPlaceHolders","elements","_removeProductFromList","itemId","_this$props$data$acco","ProductComparisonState","instance","accountInformation","removeItemById","previousState","_previousState$produc","productsData","_handleCollapseClick","_previousState$isExpa","isExpanded","_hasUserInteractedWithComparison","_clearAllProductsFromTheComparison","_this$props$data$acco2","clearAll","_instanceId","_displayedInstanceId","_this$props$data$acco3","_loadProducts","listModifiedEvent","subscribe","instanceId","handler","_this$props$data$acco4","unsubscribe","_this$state$productsD","_this$props$data$prod","collapseButton","_renderCollapseButton","isMainContentReady","hasUserInteractedWithComparison","_getProdutComparisonDataByCatalogId","productsLimit","_getProductsLimit","subheaderText","productComparisonPreviewHeaderTextWithLimit","handleCollapseClick","productsMainInfo","_getProductsMainInfo","previewGreyPlaceHolders","productComparisonLink","clearAllProductsFromTheComparison","removeProductFromList","goToComparisonButton","_renderGoToComparisonButton","clearAllButton","_renderClearAllButton","_productData$filter","_this$props$data$acco5","GetProductsInPreviewProductComparisonInput","getProductsInPreviewProductComparisonAction","productDataByCatalogId","_getGreyPlaceHoldersCount","limit","placeHolder","productImageContainerClassName","tableRowClassName","productImageClassName","productNameClassName","productNameLink","_product$Dimensions","dimensionValue","convertProductDimensionTypeToDimensionTypes","removeFromComparisonButton","RemoveFromComparisonButtonComponent","productLink","viewport","VariantType","Browser","productComparisonMobileProductsLimit","productComparisonDesktopProductsLimit","defaultImageSettingQ","_this$state$isExpande","shouldBeExpanded","headerContainerClassName","mainContainerClassName","collapseClassName","collapseButtonClassName","footerClassName","productComparisonCompareProductsButtonText","productComparisonClearAllProductsButtonText","containerClassName","headerClassName","headerLabelClassName","tableClassName","ProductComparisonPreviewViewFunctionalComponent","_props$isExpanded","_props$productsMainIn","_props$productsMainIn2","productComparisonPreviewHeaderText","info","SpecificationDataTypeValues","ProductSpecification","CurrencyValue","CurrencyCode","_product$DateTimeOffs","isFunction","DateTimeOffsetValue","toUTCString","IntegerValue","FloatValue","TextValue","getRichTextHtml","_specification$DataTy","specification","DataTypeValue","none","currency","_renderCurrencyCell","dateTime","_renderDateTimeCell","decimal","_renderDecimalCell","integer","_renderIntegerCell","_renderTextCell","boolean","_renderTrueFalseCell","video","BooleanValue","productComparisonProductItemSpecificationTrue","productComparisonProductItemSpecificationFalse","RemoveFromComparisonButtonFunctionalComponent","useCallback","productComparisonRemoveProductFromListAriaLabel","SelectionType","ProductClickerDirections","ProductComparison","_clearAllProductsFromComparison","_configureBoxShadowOnScroll","_this$_tableReference","_tableReference","comparisonProductCardHeader","getElementsByClassName","tableHeaderClassName","Array","from","documentElement","scrollTop","classList","tableHeaderLockedClassName","_handleScroll","_this$_tableHeaderRef","_tableHeaderReference","scrollTo","top","currentTarget","left","scrollLeft","_checkClickersState","_handleScrollClick","direction","_this$_tableBodyRefer","_this$_tableCellRefer","_document$body$parent","tableBody","_tableBodyReference","newLeftPosition","cellWidth","_tableCellReference","clientWidth","_getCellWidth","scrollPosition","Math","ceil","minLeftPosition","maxScroll","scrollWidth","body","parentElement","getAttribute","currentClickerPosition","change","hoverStateLastUpdate","Date","now","hoveringCellItemId","_handlePreviousClick","_document$body$parent2","right","_handleNextClick","_document$body$parent3","_this$_tableBodyRefer2","floor","_this$_tableBodyRefer3","_document$body$parent4","_shouldShowNextClicker","forceUpdate","_shouldShowPreviousClicker","newClickerPosition","_handleHoverIn","_hoveringCellItemId","_handleHoverOut","_goBack","backToShoppingUrl","referrer","history","back","specifications","_product$specificatio","specificationsList","allSpecifications","flatten","specificationNames","validValues","AttributeValueId","uniqueSpecificationNames","unique","allDimensions","dimensionIds","actionBarClassName","clearAllProductsFromComparison","isEmptyContent","_renderHeading","loading","_renderLoading","actionBarContainerProps","_getActionBarContainerProps","previousClicker","_renderPreviousClicker","nextClicker","_renderNextClicker","backToShopping","_renderBackToShoppingButton","emptyComparison","emptyComparisonContentSlots","_getProductComparisonDataByCatalogId","isConsentGiven","productCountText","productComparisonCountText","productsMainInfoData","allUniqueDimensionIds","getProductsDimensionsIds","updatedDimensionProps","getUpdatedDimensionsProps","tableReference","tableHeaderReference","tableBodyReference","tableCellReference","shouldShowPreviousClicker","shouldShowNextClicker","handlePreviousClick","handleNextClick","handleScroll","handleHoverIn","handleHoverOut","uniqueDimensionIds","_getProductsDimensions","dimensionsProps","uniqueSpecifications","_getProductsSpecifications","specificationsProps","_getSpecificationProps","GetProductsInProductComparisonInput","getProductsInProductComparisonAction","_renderQuickView","_product$productInfo$","quickViewSlot","quickViews","selectedProductId","defaultImageSettingsQ","_getTableHeaderProps","isHoverModeEnabled","tableHeaderCellClassName","onMouseEnter","onMouseLeave","_getTableCellProps","cellClassName","tableCellClassName","_renderProductRating","rating","_ratingValue$reviewsC","averageRating","ratingValue","RatingComponent","avgRating","readOnly","format","productComparisonProductItemRatingAriaLabel","ratingCount","reviewsCount","shouldShowFullRatingDescription","backToShoppingLabel","_getDimensionName","dimensionId","ProductDimensionType","Color","productComparisonProductItemColorDimension","Size","productComparisonProductItemSizeDimension","Style","productComparisonProductItemStyleDimension","dimensionClassName","dimensionsRowClassName","dimensionDescription","dimensionSelectionType","dimensionsAsSwatchConfiguration","dimensionsAsSwatchType","DimensionTypes","swatch","productDimensionValues","productMainInfo","_this$props$data$prod2","renderSwatch","textValue","productsDimension","_productsDimension$di","_productsDimension$di2","dimensionItems","dimensionItem","_dimensionItem$map","currentDimensionId","swatches","swatchItem","_productMainInfo$prod","_swatchItem$Dimension2","_swatchItem$Dimension3","_swatchItem$Dimension4","_swatchItem$Dimension5","_swatchItem$Dimension6","_swatchItem$Dimension7","_swatchItem$Dimension8","_swatchItem$Dimension9","isDefaultDimension","selectedDimension","_swatchItem$Dimension","DimensionId","colorHexCode","ColorHexCode","imageUrl","ImageUrl","isDefault","SwatchComponent","isSelectionEnabled","_dimensionItem$Dimens","_dimensionItem$Dimens2","productDimensionSeperatorValue","productDimensionSeparator","dimensionProps","node","specificationClassName","specificationsRowClassName","specificationValues","_productMainInfo$prod2","productSpecification","productSpecifications","productComparisonTitle","productComparisonLoadingText","productComparisonClearAllButtonAriaLabel","productComparisonClearAllButtonText","tableClickerClassName","onKeyUp","productComparisonPreviousProduct","productComparisonNextProduct","_renderRemoveFromComparisonButton","productRowClassName","currentCatalogId","productUrlLink","_product$productInfo$2","_dimension$DimensionV2","isFromCurrentCatalog","productPriceClassName","cellNewWidth","width","minWidth","maxWidth","cellContainerProps","productComparisonProductItemFreePrice","productComparisonProductItemOriginalPrice","productComparisonProductItemCurrentPrice","quickView","goToProductDetailsButton","productComparisonGoToProductDetailsButtonText","tableCellProps","tableHeaderProps","productRating","productDescription","_renderProductDescription","tableBodyClassName","tableRowContentClassName","tableRowContentInformationClassName","renderDynamicHeaderCells","headerName","tabindex","renderDynamicCells","ProductComparisonViewFunctionalComponent","_props$productsMainIn5","_props$dimensionsProp","_props$specifications","_props$productsMainIn8","_props$productsMainIn9","actionsClassName","onScroll","_props$productsMainIn3","_props$productsMainIn4","productComparisonProductItemRating","description","_props$productsMainIn6","_props$productsMainIn7","productComparisonProductItemDescription","specificationProps","isNullOrEmpty","productComparisonProductItemSku","PromoBannerCloseButton","closeButtonAriaLabel","label","PromoBannerClose","attributes","PromoBannerLinks","links","onTextChange","editableLinks","_mapEditableLinks","Msdyn365","editProps","linkdata","forEach","link","linkText","editableLink","linkUrl","destinationUrl","openInNewTab","PromoBannerText","onEdit","PromoBanner","isVisible","handleTextChange","bannerMessages","handleLinkTextChange","linkIndex","_isLastItem","_isFirstItem","closeButtonLabel","bannerText","bannerAriaLabel","handleLinks","handleText","promoBannerProps","promoBannerTextProps","promoBannerLinksProps","contentProps","promoBannerText","carouselProps","hideIndicator","closeButton","slides","AddToCartProductListComponent","_quickOrderTemplate$q","_quickOrderTemplate$q2","quickOrderTemplate","quickOrderTemplateLines","buttonLabel","quickOrderGridBuySelectedButtonText","buttonAriaLabel","quickOrderGridBuySelectedButtonAriaLabel","_props$resources$quic","_props$resources$quic2","_props$resources$quic3","_props$resources$quic4","_props$resources$quic5","_props$resources$quic6","_props$resources$quic7","_props$resources$free","_props$resources$orig","_props$resources$curr","_props$resources$adde","_props$resources$quic8","_props$resources$quic9","goToCartText","quickOrderGridGoToCartText","continueShoppingText","quickOrderGridDialogCloseText","closeNotificationLabel","quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel","headerItemOneText","quickOrderGridSingleItemText","headerItemFormatText","quickOrderGridMultiLineItemFormatText","headerLinesFormatText","quickOrderGridMultiLinesFormatText","headerMessageText","quickOrderGridHeaderMessageText","addedQuantityText","buyAgainNotificationTitle","quickOrderGridBuySelectedAddingToCartErrorNotificationTitle","buyAgainNotificationCloseAriaLabel","getDialogStrings","orderDetailProducts","quickOrder","orderDetails","quickLine","_quickLine$fullProduc","salesLine","OrderDetailsProduct","getOrderDetails","AddToCartComponent","addToCartArialLabel","navigationUrl","shouldSkipSiteSettings","orderDetailsProducts","onError","getQuickOrderGridAddToCartDialog","moduleClassName","_result$cartActionRes","cartActionResult","onErrorMessage","removeActionHandler","removeProductList","removeQuickOrderList","QuickOrderGridDrawer","_props$collapseProps$","_props$collapseProps","_isManuallyToggled","onToggle","collapseProps","_drawerGlyphClass","toggleGlyphClassName","closeGlyph","isAnimateGlyph","_drawerOpenGlyph","openGlyph","_drawerCloseGlyph","drawerClass","drawerButtonClassName","toggleButtonProps","block","isDisabled","_generateDrawerButtonInnerMarkup","Collapse","isCollapseState","drawerButtonTextClass","toggleButtonClassName","headingDrawerClass","descriptionDrawerClass","moduleHeadingText","moduleDescriptionText","_generateGlyphMarkup","glyphClass","QuickOrderGridFormComponent","productTextInput","quantityTextInput","quickOrderGridState","maxChars","minQuantity","isAddtoListDisabled","ariaLabelQuantity","ariaLabelProduct","ariaLabelAddtoCart","handleQuantityChange","handleInputChange","handleAddProductListClick","onInputChange","onInputChangeFunction","onQuantityInputChange","onQuantityChangeFunction","productNode","quantityNode","addToListBtn","stateMessage","messageText","QuickOrderGridProduct","QuickOrderGridDesktopHeaderCellsComponent","columnWithNumberClassName","quickOrderGridProductNumberText","quickOrderGridProductText","quickOrderGridUnitPriceText","quickOrderGridUnitOfMeasureText","quickOrderGridQuantityText","quickOrderGridActionsText","QuickOrderGridMobileHeaderCellsComponent","QuickOrderGridTableHeaderComponent","rowClassName","headerCells","cropFocalRegion","QuickOrderGridTableRowProductImageComponent","_props$data$product$p","_props$imageSettings","fallbackImageUrl","setShowPreviousActions","onRemoveHandler","quickOrderGridProductKey","QuickOrderGridExtraActionsPopupComponent","_props$data$product$p2","quickOrderGridViewDetailsButtonAriaLabel","quickOrderGridViewDetailsButtonText","shouldShowActions","getProductPageUrlSync","onClickViewDetails","shouldShowActionsNewValue","quickOrderGridRemoveItemButtonAriaLabel","QuickOrderGridDesktopTableRowCellComponent","_props$data$product$p3","_productListLine$Line","quickOrderGridProductDimensionsSeparator","renderProductPrice","renderUnitOfMeasure","IncrementalQuantity","quickOrderGridInputQuantityAriaLabel","quickOrderGridDecrementButtonAriaLabel","quickOrderGridIncrementButtonAriaLabel","isGiftCard","IsGiftCard","QuickOrderGridMobileTableRowCellComponent","_props$data$product$p4","_productListLine$Line2","QuickOrderGridTableRowComponent","Viewport","QuickOrderGridTableComponent","setIsMobile","isMobileView","quickOrderGridProducts","isOrderQuantityLimitsFeatureEnabled","updateViewport","quickOrderProduct","_product$ProductDetai","_quickOrderProduct$pr","_quickOrderProduct$pr2","behavior","MinimumQuantity","callBacks","QuickOrderGrid","_this$props$data$feat3","_this$props$data$feat4","_this$props$data$feat5","_cartConfiguration$re","_cartConfiguration$re2","_waitTime","_dimensionUpdateQueueMaxLength","_errorCssClass","_errorCssGlyphClass","_dimensionUpdateQueue","FinitePromiseQueue","_dimensions","_initializedDimensions","Set","_cssClassNameConfigure","_className","_isOrderQuantityLimitsFeatureEnabled","_isChannelLimitsFeatureEnabled","_applyDefaultOrderSettingsForCartLine","_quickOrderGridCallbacks","initializeDimension","initializedDimension","dimensionSelectedAsync","selectedDimensionId","selectedDimensionValueId","_this$state$productDi","size","productDimensions","enqueue","_updateDimensions","FinitePromiseQueueError","ProcessWasDiscardedFromTheQueue","getDropdownName","changeUpdatingDimension","isUpdatingDimension","_quickOrderGridRowCallbacks","_removeItemRowFromTable","productListLineId","_changeRowQuantity","_removeProductList","ProductListsDataActions","_updateStatusState","quickOrderGridDeleteProductListFailedText","_handleInputChange","productResponse","_cancellabelDebounce","cancel","isQuickOrderGridFormExpanded","getScanResult","GetScanResultInput","results","Product","ProductDimensionFull","_updateQuantitiesInState","_handleQuantityChange","_this$state$productRe","_quantityInput","minimumQuantity","needToUpdateUIValue","_behavior$MinimumQuan","newCurrentValue","_this$state$productRe2","Configuration","productDimensionTypeAmount","hasProductDimensions","dimensionsToUpdate","productDimensionErrorState","otherError","clearOtherErrorState","dimensionKey","keys","configureErrors","errorState","_this$_updateDimensio","newProduct","_getDimensionErrorString","dimensionTypeValue","amountErrorMessage","quickOrderGridproductDimensionTypeAmountErrorMessage","quickOrderGridproductDimensionTypeColorErrorMessage","quickOrderGridproductDimensionTypeConfigurationErrorMessage","quickOrderGridproductDimensionTypeSizeErrorMessage","quickOrderGridproductDimensionTypeStyleErrorMessage","_productResponse$Dime","_getConfigureErrors","quickOrderGridWrongQuantityErrorMsg","quickOrderTemplateLinesData","previousQuantity","updatedProductList","ActiveProductListInput","_addItemToProductListLine","quickOrderGridAddedToGridSuccessMessage","quickOrderGridAddedToGridFailureMessage","quickOrderGridAddedToGridDuplicateError","_productResponse$Defa","_createProductList","AddItemToProductListInput","addItemToProductListAction","CreateProductListInput","ProductListType","QuickOrder","createProductList","_productTextInput","_telemetryContent","_quickOrderGridFormClass","_quickOrderGridFormProductContent","_quickOrderGridFormMsgContent","ValidateDefaultOrderSettingsPerLine","_this$state$min","_this$state$max","quickOrderGridModuleHeading","quickOrderGridModuleDescription","quickOrderGridAddtogrid","quickOrderGridProductQuantityInputLabel","quickOrderGridProductInputLabel","quickOrderGridProductDimensionTypeColor","quickOrderGridProductDimensionTypeConfiguration","quickOrderGridSelectDimensionFormatString","quickOrderGridProductDimensionTypeSize","quickOrderGridProductDimensionTypeStyle","quickOrderGridProductDimensionTypeAmount","quickOrderGridModulePageHeading","productConfigureResources","selectDimensionFormatString","header","quickOrderGridProps","isB2bCustomer","actions","drawer","bulkPurchase","_renderBulkPurchase","quickOrderGridForm","quickOrderGridFormProductContent","quickOrderGridFormMsgContent","form","configure","getProductConfigure","container","_renderListContainer","_renderQuickOrderGridActions","quickOrderGridDeleteButtonText","userMessageNode","topStateMessage","addProductListToBag","QuickOrderGridActionsView","isBulkPurchaseEnabled","bulkPurchaseSlots","containerClass","_renderQuickOrderTable","_initQuickOrderGridProducts","quickOrderGridProduct","_getMinQuantityForCartLineItem","_getMaxQuantityForCartLineItem","_getQuantity","_getIgnoreOrderSettings","_product$Behavior2","_cartConfiguration$re3","_cartConfiguration$re4","applyDefaultOrderSettingsForCartLine","_product$Behavior3","defaultQuantity","DefaultQuantity","renderConfigureDropdown","dropdown","containerProps","labelContainerProps","select","renderConfigure","dropdowns","renderForm","quickOrderForm","quickOrderProductContent","quickOrderMessageContent","getDefaultSwatchSelected","coreContext","_productData$Attribut","_attributeSwatches$fi","AttributeValues","dimensionToPreSelectInProductCard","attributeSwatches","attributeValue","_attributeValue$KeyNa","KeyName","toLocaleLowerCase","Swatches","IsDefault","updateProductUrl","productDetailsPageUrl","queryString","sourceUrl","baseUrl","search","pathname","renderProductUnitOfMeasure","unitOfMeasure","renderLabel","ratingAriaLabelText","reviewCount","ratingCountAriaLabelText","reviewCountArialableText","getReviewAriaLabel","getRatingAriaLabel","ratingAriaLabel","roundedRating","renderPrice","productSearchResult","savingsText","isPriceMinMaxEnabled","priceResources","IsMasterProduct","ProductType","Master","Standalone","CustomerContextualPrice","MaxVariantPrice","MinVariantPrice","renderProductPlacementImage","_context$app$config","contextConfig","placeholderImageName","fallbackImageSource","img","imageProps","bypassHideOnFailure","ProductComponent","createComponentOverride","component","_product$RecordId","_getProductImageUrlFr","_getProductPageUrlFro","ratingCountAriaLabel","allowBack","quickViewButton","productComparisonButton","isEnabledProductDescription","inventoryLabel","dimensionAvailabilities","swatchItemAriaLabel","MIN_VALUE","productImageUrlFromSwatch","defaultSwatch","swatchProductImageUrls","ProductImageUrls","getProductImageUrlFromDefaultSwatch","productPageUrlFromSwatch","SwatchValue","encodeURIComponent","getProductPageUrlFromDefaultSwatch","productPageUrl","setProductPageUrl","productImageUrl","setProductImageUrl","selectedSwatchItems","Dictionary","updatePageAndImageUrl","setValue","productPageUrlWithSwatch","newUrl","delete","swatchProductImageUrl","productImageUrls","newImageUrl","attribute","isUnitOfMeasureEnabled","unitOfMeasureDisplayType","AverageRating","TotalRatings","attributeValues","_item$KeyName$toLocal","_item$KeyName","_item$Swatches$map","_item$Swatches","dimensionsToDisplayOnProductCard","dimensionsInProductCard","shouldDisplayDimension","_item$RecordId","_swatchItem$SwatchVal","_swatchItem$SwatchVal2","_dimensionAvailabilit","SwatchColorHexCode","SwatchImageUrl","dimensionAvailability","_swatchItem$SwatchVal3","ProductComponentSwatchComponent","onSelectDimension","hideRating","totalRatings","numberRatings","renderRating","inventoryAvailabilityLabel","quickview","getValues","convertDimensionTypeToProductDimensionType","renderQuickView","renderProductComparisonButton","DescriptionInterval","renderProductCards","ProductsContainer","getInventoryLabel","channelInventoryConfigurationId","inventoryAttribute","renderProductCardsDescription","_props$data$products$","_props$data$featureSt","productsDimensionAvailabilities","breadCrumbType","breadcrumbType","isAllowBack","allowBackNavigation","classname","quickviewslot","isPriceMinMaxFeatureState","priceRangeSeparator","masterProductId","renderProducts","_props$data$listPageS","listPageState","activeProducts","productDescriptionInterval","productDescriptionIntervalRemainder0","productDescriptionIntervalRemainder9","renderTitleCount","TitleContainer","titleCount","renderCategoryHierarchy","CategoryHierarchyContainer","categoryHierarchyList","categoryHierarchySeparator","category","configureStickyFilter","isStickyHeader","headerContainer","querySelector","headerHeight","offsetHeight","bannerHeights","headerElement","defaultContainer","refinerElement","clientHeight","removeAttribute","createSearchResultModal","refineMenu","sortByDropDown","isRecoSearchPage","modal","modalHeader","createModalBody","modalFooter","modalBody","renderSort","refiners","RefineMenuContainer","RefinerSectionContainer","submenu","renderRefinerMobile","renderRefiner","renderRefinerFooter","doneAriaLabel","doneText","SortingContainer","renderTitle","titlePrefix","titleText","_props$context$action","SearchResultContainer","ProductSectionContainer","choiceSummary","modalToggle","searchResultModal","TitleViewProps","categoryHierarchy","sortByOptions","CategoryNavContainer","RefineAndProductSectionContainer","FeatureSearchContainer","similarLookProduct","useEffect","useStickyFilter","stickyFilterSetup","enableStickyHeader","setIsExpanded","wrapperRefiner","refinerRefernce","handleClickOutside","element","contains","useOutsideClick","recommendation","enableProdutDescription","filterText"],"sourceRoot":""}