{"version":3,"file":"static/js/17.f5bd26124e5bde8eb115.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/fabrikam/views/components/cartlineitem.component.tsx?eb8c","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/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 IItemAddedToCartDialogData,\r\n IItemAddedToCartDialogResources,\r\n ILinesAddedToCartDialogResources,\r\n IOrderTemplateNameDialogResources,\r\n ItemAddedToCartDialog\r\n} from '@msdyn365-commerce/components';\r\nimport MsDyn365, { AsyncResult, getCatalogId, getUrlSync, ICoreContext, IRequestContext } from '@msdyn365-commerce/core';\r\nimport { ICartActionResult } from '@msdyn365-commerce/global-state';\r\nimport { ProductList, ProductListLine } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n deleteAsync,\r\n removeProductListLinesAsync,\r\n updateProductListLinesAsync\r\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\r\nimport { FeatureState, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport {\r\n ArrayExtensions,\r\n createGetFeatureStateInput,\r\n getFeatureState,\r\n getPriceForSelectedVariant,\r\n getProductUrlSync,\r\n ObjectExtensions,\r\n OrderTemplate,\r\n OrderTemplateLine,\r\n PriceForSelectedVariantInput,\r\n StringExtensions\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Alert,\r\n getTelemetryObject,\r\n Heading,\r\n IModuleProps,\r\n INodeProps,\r\n ITelemetryContent,\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 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\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}\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 };\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 OrderTemplateActionsView(orderTemplateActions);\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 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\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 { 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","/*!\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 { CartLinePriceEditor, ICartLinePriceEditorResources, PriceComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, { IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ChannelDeliveryOptionConfiguration, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { CartLine, ProductCatalog, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions, getFallbackImageUrl, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, IncrementalQuantity, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classNames from 'classnames';\nimport * as React from 'react';\n\n/**\n * ICartlineResourceString: Interface for specifying the\n * resource strings that the component needs.\n */\nexport interface ICartlineResourceString {\n /**\n * Display string for discount label\n */\n discountStringText: string;\n\n /**\n * String for size key\n */\n sizeString: string;\n\n /**\n * String for color key\n */\n colorString: string;\n\n /**\n * String associated with the configuration product dimension\n */\n configString: string;\n\n /**\n * String for style key\n */\n styleString: string;\n\n /**\n * String for amount key\n */\n amountString?: string;\n\n /**\n * Display string for quantity label\n */\n quantityDisplayString: string;\n\n /**\n * Display string for quantity label\n */\n inputQuantityAriaLabel: string;\n\n /**\n * Aria label for the decrement button in quantity component\n */\n decrementButtonAriaLabel: string;\n\n /**\n * Aria label for the increment button in quantity component\n */\n incrementButtonAriaLabel: string;\n\n /**\n * Original text screenreader\n */\n originalPriceText: string;\n\n /**\n * Current text screenreader\n */\n currentPriceText: string;\n\n /**\n * Shipping Charges Text\n */\n shippingChargesText: string;\n\n priceEditorResources?: ICartLinePriceEditorResources;\n salesAgreementPricePrompt?: string;\n}\n\ninterface ICartLineData {\n cartLine: CartLine | SalesLine;\n cartState?: ICartState;\n product?: SimpleProduct;\n catalogs?: ProductCatalog[];\n}\n\n/**\n * ICartLineProps: The props required to render cartLineitem.\n */\nexport interface ICartLineProps extends IComponentProps {\n /**\n * The flag to change the quantity component from intractable to static.\n */\n disableQuantityInteractivity?: boolean;\n\n /**\n * The primary image url.\n */\n primaryImageUrl?: string;\n\n /**\n * The product url.\n */\n productUrl?: string;\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\n /**\n * Boolean flag to indicate if the item is out of stock.\n */\n isOutOfStock?: boolean;\n\n /**\n * Flag to make quantity section editable.\n */\n isQuantityEditable?: boolean;\n\n /**\n * Max quantity for line item.\n */\n maxQuantity?: number;\n\n /**\n * Current quantity for line item.\n */\n currentQuantity?: number;\n\n /**\n * Resource string for the component.\n */\n resources: ICartlineResourceString;\n\n /**\n * SalesLine flag.\n */\n isSalesLine?: boolean;\n\n /**\n * Error message to show in place of quantity.\n */\n errorMessage?: string;\n\n /**\n * Inventory information label.\n */\n inventoryInformationLabel?: string;\n\n /**\n * Inventory information class name.\n */\n inventoryLabelClassName?: string;\n\n /**\n * Flag to show/hide shipping charges for line items.\n */\n showShippingChargesForLineItems?: boolean;\n\n /**\n * Boolean flag to indicate if cart state status is ready.\n */\n isCartStateReady?: boolean;\n\n /**\n * Chanel Delivery Option configuration is from api.\n */\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n\n /**\n * The cart line index.\n */\n lineIndex?: number;\n\n /**\n * Quantity onChange callback.\n */\n quantityOnChange?(cartLine: CartLine, newQuantity: number, lineIndex?: number): boolean;\n priceCurrency?: string;\n}\n\ninterface IDimensionStrings {\n /**\n * String for size key.\n */\n sizeString: string;\n\n /**\n * String for color key.\n */\n colorString: string;\n\n /**\n * String associated with the configuration product dimension.\n */\n configString: string;\n\n /**\n * String for style key.\n */\n styleString: string;\n\n /**\n * String for amount key.\n */\n amountString?: string;\n}\n\n/**\n * Renders catalog label for the cart line.\n * @param props - Cart line props.\n * @returns Catalog label.\n */\nconst CatalogLabelComponent: React.FC = (props: ICartLineProps) => {\n const catalogId = props.data.cartLine.CatalogId;\n validateCatalogId(catalogId);\n\n if (!props.context.request.user.isB2b || !catalogId || !ArrayExtensions.hasElements(props.data.catalogs)) {\n return null;\n }\n\n const catalog = props.data.catalogs.find(item => item.RecordId === catalogId);\n\n if (!catalog || !catalog.Name) {\n return null;\n }\n\n return
    {catalog.Name}
    ;\n};\n\nconst CartLineItemFunctions = {\n renderProductDimensions: (Product: SimpleProduct, DimensionStrings: IDimensionStrings) => {\n if (!Product || !Product.Dimensions) {\n return [];\n }\n\n return Product.Dimensions.map(productDimension => {\n if (productDimension.DimensionTypeValue === 1) {\n return (\n
    \n \n {DimensionStrings.colorString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
    \n );\n }\n\n if (productDimension.DimensionTypeValue === 2) {\n return (\n
    \n \n {DimensionStrings.configString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
    \n );\n }\n\n if (productDimension.DimensionTypeValue === 3) {\n return (\n
    \n \n {DimensionStrings.sizeString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
    \n );\n }\n\n if (productDimension.DimensionTypeValue === 4) {\n return (\n
    \n \n {Product.IsGiftCard ? DimensionStrings.amountString : DimensionStrings.styleString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
    \n );\n }\n return null;\n });\n },\n\n renderDiscountLines: (props: ICartLineProps) => {\n if (!props.data.cartLine.DiscountLines || props.data.cartLine.DiscountLines.length === 0) {\n return null;\n }\n\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\n return (\n
    \n \n {discountLine.OfferName ? discountLine.OfferName : ''}:{` ${props.resources.discountStringText || 'Discount'} `}\n \n \n \n \n {` (${discountLine.EffectivePercentage !== undefined ? discountLine.EffectivePercentage : ''}%)`}\n
    \n );\n });\n },\n renderInventoryLabel: (props: ICartLineProps) => {\n if (!props.inventoryInformationLabel) {\n return null;\n }\n const inventoryCssName = props.inventoryLabelClassName\n ? `msc-cart-line__product-inventory-label ${props.inventoryLabelClassName}`\n : 'msc-cart-line__product-inventory-label';\n return {props.inventoryInformationLabel};\n },\n\n /**\n * Gets the react node for product unit of measure display.\n * @param props - Icartline props.\n * @returns The node representing markup for unit of measure component.\n */\n renderUnitOfMeasure: (props: ICartLineProps) => {\n if (props.data.cartLine.IsInvoiceLine) {\n return null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\n if (!props.context.app.config.unitOfMeasureDisplayType || props.context.app.config.unitOfMeasureDisplayType === 'none') {\n return undefined;\n }\n\n const product = props.data.product;\n if (!product || !product.DefaultUnitOfMeasure) {\n return undefined;\n }\n\n return (\n
    \n {product.DefaultUnitOfMeasure}\n
    \n );\n },\n renderShippingLabel: (props: ICartLineProps) => {\n const pickupDeliveryModeCode = props.context.request.channel?.PickupDeliveryModeCode;\n const channelDeliveryOptionConfig = props.channelDeliveryOptionConfig;\n const cartline = props.data.cartLine;\n let hasShippingMethod = false;\n if (channelDeliveryOptionConfig !== undefined) {\n hasShippingMethod = !!(\n cartline.DeliveryMode &&\n channelDeliveryOptionConfig.PickupDeliveryModeCodes?.some(deliveryMode => deliveryMode !== cartline.DeliveryMode)\n );\n } else {\n hasShippingMethod = !!(cartline.DeliveryMode && cartline.DeliveryMode !== pickupDeliveryModeCode);\n }\n if (!hasShippingMethod) {\n return undefined;\n }\n\n const shippingChargeLines = (cartline.ChargeLines || []).filter(chargeLine => chargeLine.IsShipping);\n\n if (shippingChargeLines.length === 0) {\n return undefined;\n }\n\n const freightFee = shippingChargeLines.reduce((chargeTotal, chargeLine) => {\n return chargeTotal + (chargeLine.CalculatedAmount || 0);\n }, 0);\n\n const priceComponent = (\n \n );\n return (\n <>\n \n {priceComponent}\n \n );\n },\n renderOtherCharges: (props: ICartLineProps) => {\n const cartline = props.data.cartLine;\n const otherCharges = cartline.ChargeLines?.filter(chargeline => !chargeline.IsShipping);\n\n return (\n (otherCharges &&\n otherCharges.map((otherCharge, key) => {\n return otherCharge && otherCharge.CalculatedAmount ? (\n
    \n \n \n \n \n
    \n ) : (\n ''\n );\n })) ||\n undefined\n );\n },\n\n /**\n * Render the sales agreement prompt.\n * @param props - The ICartLineProps.\n * @returns The JSX.Element.\n */\n renderSalesAgreementPrompt: (props: ICartLineProps): JSX.Element | null => {\n if (props.data.cartLine.SalesAgreementLineRecordId === 0) {\n return null;\n }\n return
    {props.resources.salesAgreementPricePrompt}
    ;\n }\n};\n\n// eslint-disable-next-line no-redeclare\nconst CartLine: React.FC = (props: ICartLineProps) => {\n const { isSalesLine, productUrl, resources } = props;\n const { product, cartLine } = props.data;\n\n const destructDimensionStrings = {\n sizeString: resources.sizeString,\n colorString: resources.colorString,\n styleString: resources.styleString,\n configString: resources.configString,\n amountString: resources.amountString\n };\n\n const fallbackImageUrl =\n product &&\n getFallbackImageUrl(\n product.ItemId,\n props.context.actionContext.requestContext.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n const productDimensions = product && CartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings);\n const imageSettings = props.imageSettings;\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n const renderDisountLines = CartLineItemFunctions.renderDiscountLines(props);\n const renderInventoryLabel = CartLineItemFunctions.renderInventoryLabel(props);\n const renderUnitOfMeasure = CartLineItemFunctions.renderUnitOfMeasure(props);\n const renderShippingLabel = CartLineItemFunctions.renderShippingLabel(props);\n const renderOtherCharges = CartLineItemFunctions.renderOtherCharges(props);\n const renderSalesAgreementPrompt = CartLineItemFunctions.renderSalesAgreementPrompt(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, '', product?.RecordId.toString());\n const productAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n const productName = product?.Name || cartLine.Description;\n const imgeClassName = props.data.cartLine.IsInvoiceLine ? 'msc-cart-line__invoice-image' : 'msc-cart-line__product-image';\n\n const onChange = (newValue: number): boolean => {\n if (props.quantityOnChange) {\n return props.quantityOnChange(props.data.cartLine, newValue, props.lineIndex);\n }\n return true;\n };\n\n const _generateErrorMessage = (): JSX.Element | null => {\n if (props.errorMessage) {\n return (\n
    \n \n {props.errorMessage}\n
    \n );\n }\n\n return null;\n };\n\n const _generateQuantityandPrice = (): JSX.Element[] | null => {\n const nodes = [];\n if (props.isOutOfStock) {\n return null;\n }\n\n // No quantity selector for invoice line\n if (!props.data.cartLine.IsInvoiceLine) {\n if (props.data.product && props.isQuantityEditable) {\n nodes.push(\n
    \n
    {resources.quantityDisplayString}
    \n \n
    \n );\n } else {\n nodes.push(\n
    \n \n {props.data.cartLine.Quantity}\n
    \n );\n }\n }\n\n nodes.push(\n
    \n \n {(props.data.cartLine.DiscountAmount && props.data.cartLine.DiscountAmount > 0 && (\n <>\n \n {` ${props.resources.discountStringText || 'Discount'} `}\n \n \n \n )) ||\n null}\n
    \n );\n\n return nodes;\n };\n\n return (\n <>\n
    \n
    \n \n
    \n
    \n
    \n \n {MsDyn365.isBrowser ? (\n \n {productName}\n \n ) : null}\n {ArrayExtensions.hasElements(productDimensions) ? (\n
    {productDimensions}
    \n ) : (\n ''\n )}\n {renderUnitOfMeasure}\n
    \n \n
    \n {renderDisountLines}\n {renderInventoryLabel}\n {props.showShippingChargesForLineItems &&
    {renderShippingLabel}
    }\n {renderOtherCharges}\n {renderSalesAgreementPrompt}\n
    \n {_generateQuantityandPrice()}\n {props.data.cartLine.IsInvoiceLine && props.data.cartState && props.resources.priceEditorResources && (\n \n )}\n
    \n
    \n {_generateErrorMessage()}\n \n );\n};\n\nexport default CartLine;\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","_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","_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","text","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","addTemplateToBagButtonText","renameTemplateButtonText","deleteTemplateButtonText","closeWindowButtonText","addToCartFailureMessage","addToCartSuccessMessage","addToCartProcessMessage","orderTemplateErrorMessage","orderTemplateActions","handlers","onRenameTemplate","onRemoveTemplate","renameOrderTemplateDialogStrings","_generateOrderTemplateNameDialogResources","linesAddedToCartDialogResources","OrderTemplateActionsView","orderTemplateHeaderLabel","renameOrderTemplateTitleText","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","renameOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelBtnLabel","skip","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","_renderItem","quantityLabel","selectLine","productLineCatalog","addToBagButton","removeButton","productInfo","productUnitOfMeasure","productQuantityView","popUp","extraActionsPopup","disableElement","pointerEvents","opacity","Node","style","toggleDetails","Module","addTemplateToBag","renameTemplate","removeTemplate","actionsSplitButton","wrapClassName","fade","applicationNode","CartIconView","_modalContainer","placement","hideArrow","isModalOpen","closeModal","_openModal","_renderCartCloseIcon","_renderCartItemCount","cartItemCount","cartlines","_escFunction","keyCode","KeyCodes","Escape","isAutoDisplayTriggered","isCartValid","isQuantityLimitsFeatureEnabled","payload","TelemetryEvent","CheckOut","TelemetryConstant","Checkout","contentAction","etext","GuestCheckout","checkoutByGuestAttributes","getTelemetryAttributes","_validateCart","componentDidUpdate","_removeCommentFromCartLine","cartState","_cartState$cart$CartL","Comment","_clonedCart","updateCart","newCartObject","_renderGuestCheckout","hasError","guestCheckoutUrl","guestCheckoutButtonTitle","_cart$result$cart$Ver","cartVersion","Version","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","cartLines","cartLine","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","setModalOpen","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","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","refreshCart","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","CatalogLabelComponent","isB2b","catalog","CartLineItemFunctions","renderProductDimensions","Product","DimensionStrings","Dimensions","productDimension","IsGiftCard","amountString","DiscountLines","discountLine","OfferId","OfferName","PriceComponent","isSalesLine","CustomerContextualPrice","PeriodicDiscount","EffectiveAmount","priceCurrency","EffectivePercentage","inventoryInformationLabel","inventoryCssName","inventoryLabelClassName","IsInvoiceLine","unitOfMeasureDisplayType","hasShippingMethod","_channelDeliveryOptio","PickupDeliveryModeCodes","deliveryMode","shippingChargeLines","ChargeLines","chargeLine","IsShipping","freightFee","reduce","chargeTotal","CalculatedAmount","priceComponent","_cartline$ChargeLines","otherCharges","chargeline","otherCharge","SalesAgreementLineRecordId","_props$context$reques2","_props$primaryImageUr","destructDimensionStrings","fallbackImageUrl","productDimensions","cropFocalRegion","renderDisountLines","renderInventoryLabel","renderUnitOfMeasure","renderShippingLabel","renderOtherCharges","renderSalesAgreementPrompt","productAttribute","imgeClassName","quantityOnChange","lineIndex","NetAmountWithAllInclusiveTax","GrossAmount","ExtendedPrice","NetPrice","salesAgreementLineId","showShippingChargesForLineItems","_generateQuantityandPrice","nodes","IncrementalQuantity","isCartStateReady","isGiftCard","classNames","DiscountAmount","priceEditorResources","CartLinePriceEditor","onRemoveOrderTemplate","removeOrderTemplateActionHandler","OrderTemplateRender","removeFromOrderTemplateListText","orderTemplateState","enableImageProductLink","onDismiss","_renderOrderTemplateImages","orderTemplateAriaLabel","_renderAriaLabel","_getUrlSync","separator","AddOrderTemplateToCartComponent","addToCartText","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","_removeOrderTemplate","_getOrderTemplateAddToCartDialog","_getOrderTemplateRenameControl","ActionsSplitButton","RenameOrderTemplateComponent","buttonEventReference","isStatementRequestAdminDropdownOpen","setIsStatementRequestAdminDropdownOpen","renameOrderTemplateDialogOpen","onToggleDropdown1","popoverReference","renderModalPopup","existingOrderTemplate","onOrderTemplateNameCancel","_buttonEventReference","requestStatementDropdownString","Random","Guid","generateGuid","innerRef","Popover","OrderTemplateLineActions","getAddToBag","getRemoveItem","PopUp","showMobile","setShowMobile","getActionButton","removeButtonClassName","addButtonClassName","getDesktopActionButton","onSelectLineHandler","checked","UnitOfMeasure","fallbackImage","renderProductCatalog","_renderProductImage","renderProductInfo","_renderPrice","_renderProductError","_generateQuantity","ExtraActionsPopup","showActions","setShowActions","actionsContainerClassName","_context$request$app2","onChangeHandler","image","_context$actionContex","_context$request","OOS","UNASSORTED","NONE","_orderTemplateLine$fu","_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","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","QuickOrderGridTableRowProductImageComponent","_props$data$product$p","_props$imageSettings","setShowPreviousActions","onRemoveHandler","quickOrderGridProductKey","QuickOrderGridExtraActionsPopupComponent","_props$data$product$p2","quickOrderGridViewDetailsButtonAriaLabel","quickOrderGridViewDetailsButtonText","shouldShowActions","getProductPageUrlSync","onClickViewDetails","shouldShowActionsNewValue","quickOrderGridRemoveItemButtonAriaLabel","QuickOrderGridDesktopTableRowCellComponent","_props$data$product$p3","_productListLine$Line","quickOrderGridProductDimensionsSeparator","renderProductPrice","quickOrderGridInputQuantityAriaLabel","quickOrderGridDecrementButtonAriaLabel","quickOrderGridIncrementButtonAriaLabel","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","enqueue","_updateDimensions","FinitePromiseQueueError","ProcessWasDiscardedFromTheQueue","getDropdownName","changeUpdatingDimension","isUpdatingDimension","_quickOrderGridRowCallbacks","_removeItemRowFromTable","productListLineId","_changeRowQuantity","_removeProductList","ProductListsDataActions","_updateStatusState","quickOrderGridDeleteProductListFailedText","_handleInputChange","productResponse","_cancellabelDebounce","cancel","isQuickOrderGridFormExpanded","getScanResult","GetScanResultInput","results","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","contentProps","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","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","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":""}