{"version":3,"sources":["webpack:///src/modules/order-template-list/components/order-template-list.tsx?f2fd","webpack:///src/modules/order-template-list/components/orderTemplateList-status-message.tsx?dbea","webpack:///src/modules/order-template/order-template.tsx?4281","webpack:///src/modules/order-template/actions/get-order-template.ts?4d59","webpack:///src/modules/order-template/components/add-line/add-line.tsx?add3","webpack:///src/modules/order-template/components/add-line/spinner.tsx?28dd","webpack:///src/modules/order-template/components/add-line/dropdown.tsx?40af","webpack:///src/modules/order-template/components/add-line/not-found.tsx?00ed","webpack:///src/modules/order-template/components/common/order-template-quantity.tsx?dfc0","webpack:///src/modules/order-template/components/add-line/product-configuration.tsx?ac81","webpack:///src/modules/order-template/components/add-line/product-list.tsx?5107","webpack:///src/modules/order-template/components/order-template-actions.tsx?5f39","webpack:///src/modules/order-template/components/order-template-lines.tsx?cdf6","webpack:///src/modules/order-template/components/order-template-lines-status-message.tsx?0022","webpack:///src/modules/order-template/components/order-template-table-heading.tsx?606c","webpack:///src/modules/order-template-list/components/create-order-template.tsx?81ed","webpack:///src/modules/order-template-list/order-template-list.tsx?bc4a","webpack:///src/index.ts?c6ae","webpack:///src/modules/order-template/order-template.view.tsx?f2c8","webpack:///src/modules/order-template/components/bulk-actions.tsx?f343","webpack:///src/modules/order-template-list/order-template-list.view.tsx?20f7"],"names":["OrderTemplateActions","props","onRemoveOrderTemplate","handlers","itemKey","OrderTemplateRender","input","Id","orderTemplate","removeFromOrderTemplateListText","orderTemplateState","name","imageSettings","context","telemetryContent","enableImageProductLink","onDismiss","key","orderTemplateImage","_renderOrderTemplateImages","orderTemplateLines","orderTemplateAriaLabel","_renderAriaLabel","orderTemplateName","className","href","url","actionContext","separator","includes","_getOrderTemplatePageUrl","totalLines","color","addToCartButton","id","typeName","moduleTypeName","data","addToCartText","addToBagText","dialogStrings","resources","removeButton","onClick","event","orderTemplateStatusMessage","isOpen","userMessage","statusCssString","toggle","defaultImageSettings","viewports","xs","q","w","h","lg","xl","lazyload","count","length","slice","map","line","productUrl","fullProduct","ProductDetails","undefined","requestContext","Name","src","PrimaryImageUrl","fallBackSrc","ItemId","apiSettings","gridSettings","request","loadFailureBehavior","window","location","assign","OrderTemplateListStatusMessage","errorType","text","OrderTemplateLines","state","super","_onRemoveSelection","this","telemetry","removeSelectedFailureMessage","removeSelectedSuccessMessage","lines","productSelection","productListLines","filter","isChecked","productListLine","productListId","ProductListId","callerContext","then","setState","messageGlyph","reload","catch","error","warning","substr","indexOf","result","productList","_onAddSelectionToBag","async","addedToCartFailureMessage","addedToCartSuccessMessage","cartState","selectedLines","cartLines","productLine","ProductId","Quantity","TrackingId","UnitOfMeasureSymbol","UnitOfMeasure","DefaultUnitOfMeasure","cart","Version","trace","join","refreshCart","Promise","resolve","_getCurrentUrl","reqContext","isBrowser","URL","requestUrl","_renderItemAddedToCartDialog","itemAddedToCartDialogData","_generateItemAddedToCartDialogResources","modalOpen","isItemAddedToOrderTemplateOpen","onClose","_renderPagination","config","fullUrl","itemsPerPage","skipCount","_getCurrentPageNumber","totalItems","previousText","flipperPrevious","nextText","flipperNext","role","paginationAriaLabel","qsp","items","startingItem","previousAriaLabel","nextAriaLabel","_toggleDetailsDisplayed","isDetailsDisplayed","detailedProductView","_onDismiss","_changeQuantity","quantity","orderTemplateLinesData","orderLineIndex","findIndex","LineId","newProductListLine","prevQuantity","list","newLine","find","updatedLines","updatedOrderTemplate","ProductListLines","update","_addItemToBag","product","maxQuantityLimitText","addProductToCartInput","addProductToCart","status","RecordId","channelId","priceResult","productPrice","reject","substatus","replace","toString","app","maxQuantityForProductListLineItem","debug","message","_removeItemFromOrderTemplateLines","user","isAuthenticated","token","_renameTemplate","_removeTemplate","deleteOrderTemplateFailedText","newLink","_getViewport","device","Type","innerWidth","sm","md","_viewport","_updateViewport","bind","isConfirmAddSelectionToBagModalOpen","telemetryPageName","friendlyName","signInUrl","heading","addEventListener","removeEventListener","emptyOrderTemplateLinesText","errorGettingOrderTemplateLines","errorProps","moduleProps","statusMessage","renderView","orderTemplateResult","_isFirstPage","emptyViewProps","viewProps","productsStatusMessage","tag","ProductsTable","ProductsTableRow","ProductsTableHeading","_renderProductListHeader","orderLines","_renderProductList","callbacks","updateQuantity","orderActions","_renderOrderTemplateActions","pagination","itemAddedToCartDialog","bulkOrderLineActions","_getOrderTemplateLineActions","toggleDetailsDisplayed","isMobile","updated","productNumberText","productText","productUnitPriceText","productUOMText","productQuantityText","productActionsText","headers","productNumber","productName","productUnitPrice","productUOM","productQuantity","productActions","clickHandler","onSelectAll","orderTemplateId","onAddSelectionToBag","onRemoveSelection","isMinifiedView","viewCartButtonText","orderTemplateCloseButtonText","linesAddedToCartHeaderItemsOneText","linesAddedToCartHeaderLinesOneText","linesAddedToCartHeaderLinesFormatText","linesAddedToCartHeaderMessageText","itemAddedToCartHeaderItemOneText","itemAddedToCartHeaderItemFormatText","itemAddedToCartHeaderMessageText","freePriceText","originalPriceText","currentPriceText","addTemplateToBagButtonText","renameTemplateButtonText","deleteTemplateButtonText","closeWindowButtonText","addToCartFailureMessage","addToCartSuccessMessage","addToCartProcessMessage","orderTemplateActions","onRenameTemplate","onRemoveTemplate","renameOrderTemplateDialogStrings","_generateOrderTemplateNameDialogResources","linesAddedToCartDialogResources","_generateLinesAddedToCartDialogResources","orderTemplateHeaderLabel","renameOrderTemplateTitleText","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","renameOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelBtnLabel","query","skip","priceFree","addOrderTemplateItemToBagButtonText","removeItemFromOrderTemplateButtonText","productDimensionTypeColor","productDimensionTypeSize","productDimensionTypeStyle","inputQuantityAriaLabel","deleteButtonText","index","currentProductProps","orderTemplateLine","price","ProductPrice","moduleId","onAddToBag","onRemoveItem","onChangeQuantity","onSelect","removeFromOrderTemplateLinesText","addToBagButtonText","ActiveOrderTemplateLinesInput","getCacheKey","getCacheObjectType","dataCacheType","shouldCacheOutput","Error","queryResultSettings","fromModuleData","QueryResultSettings","getActiveOrderTemplateLines","getActiveOrderTemplateLinesDataAction","action","CONTENT","msg","Component","products","content","Search","selectedProduct","searchTextInput","createRef","_renderSearchForm","searchButtonAriaLabel","searchInputAriaLabel","searchModalPlaceholderText","autoComplete","onSubmit","_onSearchSubmit","type","autoFocus","placeholder","value","onChange","_onInputChange","ref","maxLength","preventDefault","Loading","_getSearchResults","NotFound","ProductList","_onQuantityChangeHandler","selectedQuantity","target","_onSelectItem","varianteInput","productVariant","dimensions","_getProductDimensions","selectedProductDimensions","ProductConfiguration","_onBackButtonClickHandler","_highlightSearchTerm","parsedName","unescape","RegExp","dangerouslySetInnerHTML","__html","_resultCountText","searchResultsCountVerbage","searchResultsCountSubject","_addItemToTemplateHandler","reloadPage","_toggleModalHandler","current","focus","addLineModalLinkText","modalProps","showBackArrow","_renderContent","addToTemplateHandler","onQuantityChangeHandler","highlightSearchTerm","searchForm","productProps","renderResultCountText","progressNotificationText","notFoundSearchErrorNotice","notFoundSearchErrorRedediation","NotFoundComponent","searchErrorMessage","searchText","catalogId","searchCriteriaInput","Context","ChannelId","CatalogId","IncludeAttributes","SearchCondition","MasterProductId","selectMenu","_onChanged","selectedIndex","dropdownId","selectId","selectedValue","innerText","dropdownList","dropdownName","item","selected","inputRef","_validateMin","minValue","min","isNaN","currentInput","currentCount","_handleChange","glyphMinusClassName","decrementGlyphClass","glyphPlusClassName","incrementGlyphClass","disabled","incDisabled","max","currentValue","extraClass","getChangeHandler","amount","_onIncrementalChange","title","decrementButtonAriaLabel","tabIndex","pattern","onBlur","incrementButtonAriaLabel","updatedQuantity","e","Number","parseInt","inputElement","HTMLInputElement","setAttribute","defaultProps","selectedDimensions","_getDimensionsError","dimensionName","dimensionMissingError","_addToTemplateHandler","isBusy","showAddConfirmation","errors","add","missingDimensions","dimension","DimensionTypeValue","addToTemplateDuplicateError","addToTemplateGenericError","errorMessage","_onQuantityChange","newValue","totalPrice","Price","_updateDimensionValue","productDimensionFull","newValueId","DimensionValues","_onDimensionChanged","remainingDimensionsErrors","selection","buttonDisabled","mappedDimensions","DimensionValue","ExtensionProperties","variantProduct","dimensionInput","variantDimensions","availabilityInput","newAvailableQuantity","priceInput","productAvailableQuantity","unitPrice","BasePrice","sort","a","b","_getDropdownName","dimensionType","productDimensionTypeConfiguration","addItemToTemplateText","addLineProductUnitPricePrefix","quantitySelectLabel","addLineProductUnitOfMeasurePrefix","totalPriceLabel","_formatPrice","_getDimensionsNodes","_getConfirmationMessage","selectedDimensionNames","variant","Value","addToTemplateConfirmation","Object","values","unshift","assertive","cultureFormatter","formatCurrency","currencyCode","toFixed","selectProductButtonText","fallBackImg","ProductSelectButton","buttonText","setBusy","OrderTemplateActionsView","addTemplateToBag","_getOrderTemplateAddToCartDialog","renameTemplate","_getOrderTemplateRenameControl","removeTemplate","_removeOrderTemplate","OrderTemplateLineActions","getAddToBag","getRemoveItem","PopUp","showMobile","setShowMobile","getViewHandler","getActionButton","removeButtonClassName","addButtonClassName","OrderTemplateLineView","fallbackImage","selectLine","checked","productImage","_renderProductImage","productInfo","renderProductInfo","_renderPrice","productUnitOfMeasure","productQuantityView","_generateQuantity","addToBagButton","popUp","OrderTemplateMobileLineView","MAX_VALUE","image","altText","Dimensions","_renderProductDimensions","dimensionsLine","OrderTemplateLinesStatusMessage","componentClassName","getOnChange","prevProps","createOrderTemplateDialogOpen","setOrderTemplateNameDialogOpen","createOrderTemplateText","isUpdateDialog","setModalOpen","createOrderTemplateDialogResources","onCancel","onSuccess","onOrderTemplateCreated","_reloadPage","_onRemoveFromOrderTemplateList","orderTemplates","p","headerStatusMessage","emptyOrderTemplateText","createNewTemplateButtonText","orderTemplatesData","OrderTemplateList","orderTemplateListTitle","createOrderTemplateButton","templateHeaderStatusMessage","OrderTemplates","OrderTemplate","_renderOrderTemplateList","createOrderTemplateHeader","createOrderTemplateDescription","createOrderTemplateButtonText","cancelNewOrderTemplateCreationButtonText","currentTemplateProps","_renderItem","quantityLabel","toggleDetails","wrapClassName","fade","applicationNode","OrderTemplateBulkActions","isAddDisabled","isRemoveDisabled","addHandler","removeHandler","backButtonText","addSelectedToBagButtonText","removeSelectedToBagButtonText","addLineProps","OrderTemplateListView","_renderOrderTemplate"],"mappings":"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","file":"static/js/5.a7cfef2dcc261b9f.chunk.js","sourcesContent":["/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getFallbackImageUrl, getProductUrlSync, OrderTemplate, OrderTemplateLine } 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 linesAddedToCartDialogResources: ILinesAddedToCartDialogResources;\n };\n telemetryContent?: ITelemetryContent;\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\nexport const OrderTemplateRender = (input: ISingleOrderTemplateProps): ISingleOrderTemplateViewProps | null => {\n const { Id, orderTemplate, removeFromOrderTemplateListText, orderTemplateState, handlers, name, imageSettings, context, telemetryContent, enableImageProductLink } = 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\n const removeOrderTemplateAction = (event: React.MouseEvent) => {\n OrderTemplateActions.removeOrderTemplate(input);\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 \n {name}\n \n
\n
\n {orderTemplate.totalLines}\n {' '}\n line items\n
\n
\n
\n ),\n addToCartButton:\n (\n
\n \n
\n ),\n removeButton:\n (\n \n ),\n orderTemplateStatusMessage: orderTemplateState && orderTemplateState.isOpen && orderTemplateState.userMessage &&\n (\n
\n \n \n {orderTemplateState.userMessage}\n \n \n
\n )\n\n };\n\n};\n\nconst _renderOrderTemplateImages = (context: ICoreContext, orderTemplateLines?: OrderTemplateLine[],\n imageSettings?: IImageSettings, enableImageProductLink?: boolean): 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 ? getProductUrlSync(line.fullProduct.ProductDetails, context.actionContext, undefined) : '';\n\n return ( {\n window.location.assign(productUrl);\n })}\n className={enableImageProductLink ? 'product-link' : ''}\n />);\n })}\n
\n );\n }\n return (\n
\n );\n\n};\n\nconst _renderAriaLabel = (props: ISingleOrderTemplateProps): string => {\n const { name } = props;\n return (`${name}`);\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 (\n

\n { text }\n

\n );\n case 'FAILED':\n return (\n

\n { text }\n

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

\n { text }\n

\n );\n }\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IItemAddedToCartDialogData, IItemAddedToCartDialogResources, ILinesAddedToCartDialogResources, IOrderTemplateNameDialogResources, ItemAddedToCartDialog } from '@msdyn365-commerce/components';\nimport MsDyn365, { AsyncResult, getUrlSync, IRequestContext } from '@msdyn365-commerce/core';\nimport { getCartState, ICartActionResult } from '@msdyn365-commerce/global-state';\nimport { CartLine, ProductList, ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport { addCartLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport {\n deleteAsync,\n removeProductListLinesAsync,\n updateProductListLinesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getPriceForSelectedVariant, getProductUrlSync, OrderTemplate, OrderTemplateLine, PriceForSelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, getTelemetryObject, Heading, IModuleProps, INodeProps, ITelemetryContent, UncontrolledPagination } 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 { IOrderTemplateActionsProps, IOrderTemplateActionsViewProps, IOrderTemplateLineProps, IOrderTemplateLineViewProps, IOrderTemplateTableHeadingProps, OrderTemplateActionsView, OrderTemplateLinesStatusMessage, OrderTemplateLineView, OrderTemplateMobileLineView, OrderTemplateTableHeading } 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';\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}\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 = 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 };\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\n this._updateViewport();\n\n if (!this.props.context.request.user.isAuthenticated) {\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 (typeof window !== undefined && window.addEventListener) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n }\n\n public componentWillUnmount(): void {\n if (typeof window !== undefined && window.addEventListener) {\n window.removeEventListener('resize', this._updateViewport);\n }\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' || 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()) {\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 };\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 \n {this.state.userMessage}\n \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 },\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),\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 = 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 = 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 { productNumberText, productText, productUnitPriceText, productUOMText, productQuantityText, productActionsText } = resources;\n const headers: IOrderTemplateTableHeadingProps = {\n productNumber: productNumberText,\n productName: productText,\n productUnitPrice: productUnitPriceText,\n productUOM: productUOMText,\n productQuantity: productQuantityText,\n productActions: productActionsText,\n lines: this.state.productSelection,\n isMobile: this.isMobile,\n clickHandler: (isChecked: boolean) => {\n this.onSelectAll(isChecked);\n }\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 />\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 _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\n .filter(line => line.isChecked)\n .map(line => line.productListLine);\n\n if (productListLines && productListLines.length > 0) {\n const productListId = productListLines[0].ProductListId;\n\n removeProductListLinesAsync({ callerContext: context.actionContext }, productListId!, productListLines)\n .then(() => {\n this.setState({\n userMessage: removeSelectedSuccessMessage,\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: true\n });\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\n private readonly _onAddSelectionToBag = async (): Promise => {\n const { context, resources } = this.props;\n const { addedToCartFailureMessage, addedToCartSuccessMessage } = resources;\n const lines = this.state.productSelection;\n const cartState = await getCartState(context.actionContext);\n const selectedLines = lines.filter(line => line.isChecked);\n\n if (selectedLines.length > 0) {\n const cartLines = selectedLines.map(productLine => {\n return {\n ItemId: productLine.fullProduct?.ProductDetails.ItemId,\n ProductId: productLine.productListLine.ProductId,\n Quantity: productLine.productListLine.Quantity || 1,\n TrackingId: '',\n UnitOfMeasureSymbol: productLine.productListLine.UnitOfMeasure || productLine.fullProduct?.ProductDetails.DefaultUnitOfMeasure\n } as CartLine;\n }) || [];\n\n return addCartLinesAsync({ callerContext: context.actionContext }, cartState.cart.Id, cartLines, cartState.cart.Version!)\n .then(async res => {\n context.telemetry.trace(`Order template; selected line items (${cartLines.map(line => line.ItemId).join(',')}) added to cart: ${cartState.cart.Id}`);\n await cartState.refreshCart({});\n this.setState({\n userMessage: addedToCartSuccessMessage,\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: true\n });\n })\n .catch(error => {\n context.telemetry.trace('Unable to add order template to cart.');\n this.setState({\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n });\n }\n\n return Promise.resolve(void (0));\n };\n\n private _renderOrderTemplateActions(orderTemplate: OrderTemplate): 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 } = 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 renameOrderTemplateDialogStrings: this._generateOrderTemplateNameDialogResources(resources),\n resources: {\n addTemplateToBagButtonText,\n renameTemplateButtonText,\n deleteTemplateButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n closeWindowButtonText,\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 private readonly _renderItemAddedToCartDialog = (): React.ReactNode | null => {\n if (!this.state.itemAddedToCartDialogData) {\n return null;\n }\n\n const onClose = () => {\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 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 nextText={
\n \n {nextText}\n \n
}\n previousAriaLabel={previousText}\n nextAriaLabel={nextText}\n />\n );\n };\n\n private _renderProductList(): IOrderTemplateLineViewProps[] {\n const {\n priceFree,\n originalPriceText,\n currentPriceText,\n addOrderTemplateItemToBagButtonText,\n removeItemFromOrderTemplateButtonText,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n inputQuantityAriaLabel,\n deleteButtonText\n } = this.props.resources;\n\n const { context, telemetry } = this.props;\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 context,\n productUrl: line.fullProduct ? getProductUrlSync(line.fullProduct.ProductDetails, context.actionContext, undefined) : '',\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 productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n freePriceText: priceFree,\n originalPriceText,\n currentPriceText,\n inputQuantityAriaLabel,\n removeFromOrderTemplateLinesText: removeItemFromOrderTemplateButtonText,\n addToBagButtonText: addOrderTemplateItemToBagButtonText,\n deleteButtonText\n },\n index,\n isMobile: this.isMobile,\n toggleDetailsDisplayed: this._toggleDetailsDisplayed\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 = { ...state, ...{\n detailedProductView: OrderTemplateMobileLineView(props)\n } };\n }\n this.setState(state);\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 = (itemKey: string, quantity: number, props?: IOrderTemplateLineProps) => {\n const { context, data, telemetry, config } = this.props;\n const { orderTemplate } = data;\n\n if (context) {\n if (orderTemplate.result) {\n const orderTemplateLinesData = orderTemplate && orderTemplate.result && orderTemplate.result.orderTemplateLines;\n if (orderTemplateLinesData) {\n const orderLineIndex = orderTemplateLinesData.findIndex((lines: OrderTemplateLine) => lines.productListLine.LineId === itemKey);\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 updateProductListLinesAsync({ callerContext: context.actionContext }, orderTemplate.result.productList.Id, [line.productListLine])\n .then(list => {\n this.setState({\n itemKey,\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\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(new ActiveOrderTemplateLinesInput(context.actionContext.requestContext, config), updatedOrderTemplate);\n }\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable to update product quantity.');\n telemetry.error(error);\n const userMessage = 'Failed to update quantity value.';\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 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 isOpen: true\n });\n }\n });\n }\n }\n }\n };\n\n private readonly _addItemToBag = (product: SimpleProduct, quantity: number, itemKey: string): void => {\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 };\n\n 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 this.props.context.actionContext).then(priceResult => {\n if (!priceResult) {\n return AsyncResult.reject('Failed to retrieve product price');\n }\n this.setState({\n itemKey,\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false,\n isItemAddedToOrderTemplateOpen: true,\n itemAddedToCartDialogData: {\n product,\n productPrice: priceResult,\n quantity\n },\n isDetailsDisplayed: false\n });\n return AsyncResult.resolve();\n });\n } else if (result.substatus === 'MAXQUANTITY') {\n this.setState({\n itemKey,\n userMessage:\n maxQuantityLimitText\n .replace('{curQuantity}', quantity.toString())\n .replace('{maxQuantity}', context.app.config.maxQuantityForProductListLineItem.toString()) ||\n `You can only add ${context.app.config.maxQuantityForProductListLineItem} of this item to your shopping bag`,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n }\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 .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 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 private readonly _removeItemFromOrderTemplateLines = (line: IOrderTemplateLineViewModel): void | undefined => {\n const { context, data, telemetry } = 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.result && orderTemplate.result && line) {\n removeProductListLinesAsync({ callerContext: context.actionContext }, line.productListLine.ProductListId!, [line.productListLine])\n .then(() => {\n window.location.reload(false);\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(false);\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 (typeof window !== undefined && 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\n return 'xs';\n };\n}\n\nexport default OrderTemplateLines;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext,\n IRequestContext\n} from '@msdyn365-commerce/core';\nimport { IQueryResultSettings } from '@msdyn365-commerce/retail-proxy';\nimport {\n buildCacheKeyWithUrlTokens,\n getFullOrderTemplate,\n GetFullOrderTemplateInput,\n IQueryResultSettingsModuleConfig,\n OrderTemplate,\n QueryResultSettingsProxy\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for getActiveOrderTemplateLines data action.\n */\nexport class ActiveOrderTemplateLinesInput implements IActionInput {\n public requestContext: IRequestContext;\n\n public orderTemplateId: string;\n\n public queryResultSettings: IQueryResultSettings;\n\n constructor(requestContext: IRequestContext, config: IQueryResultSettingsModuleConfig) {\n if (!requestContext.query?.id) {\n throw new Error('Failed to get order template id from the query.');\n }\n if (!config) {\n throw new Error('Failed to get order template module configuration');\n }\n this.orderTemplateId = requestContext.query.id;\n this.queryResultSettings = QueryResultSettingsProxy.fromModuleData(requestContext, config).QueryResultSettings;\n\n this.queryResultSettings.count = true;\n this.requestContext = requestContext;\n }\n\n public getCacheKey = (): string => buildCacheKeyWithUrlTokens('ActiveOrderTemplateLines', this.requestContext);\n\n public getCacheObjectType = (): string => 'ActiveOrderTemplateLines';\n\n public dataCacheType = (): CacheType => 'instance';\n\n public shouldCacheOutput = () => false;\n}\n\n/**\n * Calls the Retail API and returns a ProductList object based on the passed GetCartInput.\n * @param input\n * @param context\n */\nexport async function getActiveOrderTemplateLines(input: ActiveOrderTemplateLinesInput, context: IActionContext): Promise {\n return getFullOrderTemplate(new GetFullOrderTemplateInput(input.orderTemplateId, input.queryResultSettings), context);\n}\n\nexport const getActiveOrderTemplateLinesDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/order-template/order-template/get-order-template-lines',\n action: >getActiveOrderTemplateLines,\n input: (context: ICreateActionContext) => {\n if (!context.config) {\n throw new Error('Failed to get order template module configuration');\n }\n return new ActiveOrderTemplateLinesInput(context.requestContext, context.config);\n }\n});\n\nexport default getActiveOrderTemplateLinesDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { 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 { SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n addItemToOrderTemplate,\n AddItemToOrderTemplateInput,\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getSelectedVariant,\n SelectedVariantInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, Modal, ModalBody, ModalHeader } 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}\n\nexport interface IAddLineToTemplateResources {\n addLineModalLinkText: string;\n searchButtonAriaLabel: string;\n searchInputAriaLabel: string;\n searchModalPlaceholderText: 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}\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 content: number;\n selectedProduct: SimpleProduct | null;\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 content: CONTENT.Search,\n selectedProduct: null\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 constructor(props: IAddLineToTemplateProps) {\n super(props);\n }\n\n public onComponentDidMount(): void {\n this.searchTextInput.current?.focus();\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 render(): JSX.Element {\n const {\n resources: { addLineModalLinkText }\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 };\n\n return (\n <>\n \n \n {this.showBackArrow && }\n {addLineModalLinkText}\n \n {this._renderContent()}\n \n \n \n );\n }\n\n private readonly _renderSearchForm = () => {\n const {\n resources: { searchButtonAriaLabel, searchInputAriaLabel, searchModalPlaceholderText }\n } = this.props;\n\n return (\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, []);\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 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

\n {this._resultCountText()}\n

\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 (\n \n {this._renderSearchForm()}\n \n );\n }\n }\n\n private readonly _addItemToTemplateHandler = async (config: IProductConfigurationState): Promise => {\n const { orderTemplateId, context: { actionContext } } = this.props;\n const input = new AddItemToOrderTemplateInput(\n orderTemplateId,\n config.product.RecordId,\n config.quantity,\n config.product.DefaultUnitOfMeasure || 'ea'\n );\n\n const result = await addItemToOrderTemplate(input, actionContext);\n\n this.setState({\n reloadPage: true\n });\n\n return result;\n };\n\n private _getSearchResults(searchText: string): Promise {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId, catalogId }\n }\n }\n } = this.props;\n const searchCriteriaInput: ProductSearchCriteria = {};\n\n searchCriteriaInput.Context = {\n ChannelId: channelId,\n CatalogId: catalogId\n };\n searchCriteriaInput.IncludeAttributes = true;\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, []),\n actionContext\n );\n }\n\n private readonly _toggleModalHandler = () => {\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","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 &&
\n {props?.msg}\n
}\n \n);\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 /**\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((item: IDropdownItemProps) => (item &&\n \n {item.value}\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. All rights reserved.\n * See License.txt 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
\n {props.error}\n
\n
\n {props.msg}\n
\n \n);\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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\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 = this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\n\n if (currentValue > this.props.max) {\n this.setState(\n { currentInput: this.props.max },\n () => {\n debounce(\n () => {\n this.props.onChange && this.props.onChange(this.state.currentInput);\n },\n 200)();\n }\n );\n } else {\n this.setState(\n { currentInput: currentValue },\n () => {\n debounce(\n () => {\n if (!isNaN(this.state.currentInput) && !(this.state.currentInput < minValue)) {\n this.props.onChange && this.props.onChange(this.state.currentInput);\n\n if (inputElement) {\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\n inputElement.setAttribute('value', currentValue.toString());\n }\n }\n },\n 200)();\n }\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. All rights reserved.\n * See License.txt 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 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\n return (\n <>\n \n {this.props.searchForm}\n
\n
\n
\n \n
\n
\n {product?.ItemId}\n
\n {highlightSearchTerm(product?.Name || '')}\n
\n {addLineProductUnitPricePrefix}\n {' '}\n {this._formatPrice(unitPrice)}\n
\n
\n {addLineProductUnitOfMeasurePrefix}\n {' '}\n {product?.DefaultUnitOfMeasure}\n
\n
\n
\n
\n {this._getDimensionsNodes()}\n
\n
\n
\n
\n {quantitySelectLabel}\n
\n \n
\n
\n
\n {totalPriceLabel}\n {' '}\n {this._formatPrice(totalPrice)}\n
\n
\n \n {showAddConfirmation &&
\n
}\n {errors?.add &&
\n
}\n \n {addItemToTemplateText}\n \n
\n \n );\n }\n\n private _getConfirmationMessage(): string {\n const selectedDimensionNames = this.state.dimensions.map(dimension => {\n let variant = dimension.DimensionValues?.find(value => value.RecordId === this.selectedDimensions[dimension.DimensionTypeValue])?.Value;\n if (dimension.DimensionTypeValue === 3) {\n variant = `size ${variant}`;\n }\n return variant;\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\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
\n {dimensionName}\n
\n {this.state.errors?.dimension?.includes(DimensionTypeValue.toString()) && (\n \n \n \n )}\n \n
\n );\n });\n }\n\n private readonly _getDimensionsError = (dimensionName: string) => 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.map(dimension => dimension.DimensionTypeValue.toString()).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.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 = (productDimensionFull: ProductDimensionFull, newValueId: string | undefined): 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: { apiSettings: { channelId } }\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 currenlty selected dimensions\n this.selectedDimensions[selection.dropdownId] = +selection.selectId;\n\n const mappedDimensions = dimensions?.map(dimension => {\n return {\n DimensionTypeValue: dimension.DimensionTypeValue,\n DimensionValue: this._updateDimensionValue(dimension, this.selectedDimensions[dimension.DimensionTypeValue]) || dimension.DimensionValue,\n ExtensionProperties: dimension.ExtensionProperties\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 ),\n actionContext\n ));\n\n if (!variantProduct) {\n this.props.context.telemetry.error(`Error retrieving variant product for product ${product.MasterProductId ? product.MasterProductId : product.RecordId}`);\n return;\n }\n\n const dimensionInput = new GetDimensionsForSelectedVariantInput(\n variantProduct.RecordId,\n channelId,\n mappedDimensions\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 availibility\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. All rights reserved.\n * See License.txt 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 } 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: {\n gridSettings\n },\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 fallBackImg = getFallbackImageUrl(ItemId, apiSettings) || '';\n\n return (\n
\n
\n \n
\n
\n {ItemId}\n
\n {highlightSearchTerm(Name || '')}\n
\n
\n
\n \n {price}\n \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 = async () => {\n setBusy(!isBusy);\n await clickHandler(product);\n setBusy(!isBusy);\n };\n\n return (\n \n {buttonText}\n \n );\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { AddOrderTemplateToCartComponent, ILinesAddedToCartDialogResources, IOrderTemplateNameDialogResources, RenameOrderTemplateComponent } from '@msdyn365-commerce/components';\nimport { IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { ProductList } from '@msdyn365-commerce/retail-proxy';\nimport { OrderTemplate } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React 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 resources: {\n addTemplateToBagButtonText: string;\n renameTemplateButtonText: string;\n deleteTemplateButtonText: string;\n closeWindowButtonText: string;\n addToCartFailureMessage: string;\n addToCartSuccessMessage: string;\n addToCartProcessMessage: string;\n linesAddedToCartDialogResources: ILinesAddedToCartDialogResources;\n };\n}\n\nexport interface IOrderTemplateActionsViewProps {\n addTemplateToBag: React.ReactNode;\n renameTemplate?: React.ReactNode;\n removeTemplate?: React.ReactNode;\n}\n\nexport const OrderTemplateActionsView = (props: IOrderTemplateActionsProps): IOrderTemplateActionsViewProps => {\n const { resources } = props;\n const { deleteTemplateButtonText } = resources;\n\n const removeOrderAction = (event: React.MouseEvent) => {\n _removeOrderTemplate(props);\n };\n\n return {\n addTemplateToBag: _getOrderTemplateAddToCartDialog(props),\n renameTemplate: _getOrderTemplateRenameControl(props),\n removeTemplate: (\n \n )\n };\n};\n\nconst _removeOrderTemplate = (props: IOrderTemplateActionsProps): void => {\n const { data: { orderTemplate }, handlers } = 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 { data: { orderTemplate }, typeName, id, context, telemetryContent, resources } = props;\n const {\n addTemplateToBagButtonText,\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n linesAddedToCartDialogResources\n } = resources;\n\n const dialogStrings = {\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\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","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 { ProductPrice, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getFallbackImageUrl } 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 handlers: {\n onAddToBag(product: SimpleProduct, quantity: number, itemKey: string): void;\n onRemoveItem(line: IOrderTemplateLineViewModel): void | undefined;\n onChangeQuantity(orderTemplateLineId: string, quantity: number, props?: IOrderTemplateLineProps): void;\n onSelect(line: IOrderTemplateLineViewModel, isChecked: boolean): void;\n };\n resources: {\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 };\n index: number;\n isMobile: boolean;\n productQuantityView?: React.ReactNode;\n addToBagButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n toggleDetailsDisplayed(props: IOrderTemplateLineProps): void;\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 isMobile?: 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 } = productListLine;\n const { onAddToBag, onRemoveItem } = handlers;\n\n return {\n getAddToBag: () => (event: React.MouseEvent) => {\n LineId && orderTemplateLine.fullProduct && onAddToBag(orderTemplateLine.fullProduct.ProductDetails, quantity, LineId);\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 } = 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 = (event: React.MouseEvent) => {\n setShowMobile(!showMobile);\n };\n const viewTitle = 'View product details';\n\n return (\n
\n \n {getActionButton(true, props.removeButtonClassName, props.isMobile ? removeFromOrderTemplateLinesText : '', OrderTemplateLineActions(props).getRemoveItem())}\n {getActionButton(true, props.addButtonClassName, props.isMobile ? addToBagButtonText : '', OrderTemplateLineActions(props).getAddToBag())}\n
}\n
\n );\n};\n\nconst getActionButton = (isMobile: boolean, className: string, buttonText: string, clickHandler: (event: React.MouseEvent) => void): React.ReactNode => (\n \n {buttonText}\n \n);\n\nexport const OrderTemplateLineView = (input: IOrderTemplateLineProps): IOrderTemplateLineViewProps | null => {\n const { orderTemplateLine, productListLine, price, context, imageSettings, quantity, resources, isMobile } = input;\n const product = orderTemplateLine.fullProduct;\n const { LineId, UnitOfMeasure } = productListLine;\n const { removeFromOrderTemplateLinesText, addToBagButtonText } = resources;\n if (!product) {\n return null;\n }\n\n const onSelectLine = (event: React.ChangeEvent) => {\n orderTemplateLine.isChecked = !orderTemplateLine.isChecked;\n\n input.handlers.onSelect(orderTemplateLine, event.target.checked);\n };\n const { ItemId, Name, PrimaryImageUrl } = product.ProductDetails;\n const fallbackImage = getFallbackImageUrl(ItemId, context.actionContext.requestContext.apiSettings);\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 selectLine: (\n \n ),\n key: LineId!,\n productImage: PrimaryImageUrl && Name && (\n _renderProductImage('ms-order-template-table-line__product-image', context, product.ProductDetails.Name!, PrimaryImageUrl, fallbackImage, imageSettings)\n ),\n productInfo: renderProductInfo(input),\n productPrice: price && _renderPrice(input),\n productNumber: product &&
\n {ItemId}\n
,\n productUnitOfMeasure: price ? (\n
\n {UnitOfMeasure || price.UnitOfMeasure}\n
\n ) : (\n undefined\n ),\n productListId: LineId!,\n removeButton: getActionButton(true, removeButtonClassName, input.isMobile ? removeFromOrderTemplateLinesText : '', OrderTemplateLineActions(input).getRemoveItem()),\n productQuantityView:
\n {_generateQuantity(input, LineId!)}\n
,\n productQuantity: quantity,\n addToBagButton: getActionButton(true, addButtonClassName, input.isMobile ? addToBagButtonText : '', OrderTemplateLineActions(input).getAddToBag()),\n popUp: (\n \n )\n };\n};\n\nexport const OrderTemplateMobileLineView = (input: IOrderTemplateLineProps): IOrderTemplateLineViewProps | undefined => {\n const { orderTemplateLine, productListLine, price, context, imageSettings } = input;\n const product = orderTemplateLine.fullProduct;\n const { LineId, UnitOfMeasure } = productListLine;\n if (!product) {\n return;\n }\n const { ItemId, Name, PrimaryImageUrl } = product.ProductDetails;\n const fallbackImage = getFallbackImageUrl(ItemId, context.actionContext.requestContext.apiSettings);\n\n return {\n productImage: PrimaryImageUrl && Name && (\n _renderProductImage('thumbnail', context, product.ProductDetails.Name!, PrimaryImageUrl, fallbackImage, 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\nconst _generateQuantity = (props: IOrderTemplateLineProps, itemKey: string): React.ReactNode => {\n const { handlers, resources, quantity } = props;\n const { onChangeQuantity } = handlers;\n const onChange = (newValue: number) => {\n if (onChangeQuantity) {\n onChangeQuantity(itemKey, newValue, props);\n }\n };\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 if (image) {\n return (\n \n );\n }\n return null;\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\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
\n {name}\n
\n );\n\n const dimensionsLine: string = dimensions.join(', ');\n\n return (\n
\n
\n {productName}\n
\n
\n {dimensionsLine}\n
\n
\n );\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 (\n

\n { text }\n

\n );\n case 'FAILED':\n return (\n

\n { text }\n

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

\n { text }\n

\n );\n }\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 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}\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: {\n isChecked: boolean;\n } = {\n isChecked: false\n };\n\n private readonly componentClassName: string = 'ms-table';\n\n public componentDidUpdate(prevProps: IOrderTemplateTableHeadingProps): void {\n this.setState({\n isChecked: this.props.lines.filter(line => !line.isChecked).length === 0\n });\n }\n\n public getOnChange = () => (event: React.ChangeEvent) => {\n this.setState({\n isChecked: !this.state.isChecked\n }, () => {\n this.props.clickHandler(this.state.isChecked);\n });\n };\n\n public render(): JSX.Element {\n return (\n \n \n \n \n \n \n \n {this.props.productNumber}\n \n {!this.props.isMobile ? \n {this.props.productName}\n : null}\n {!this.props.isMobile ? \n {this.props.productUnitPrice}\n : null}\n {!this.props.isMobile ? \n {this.props.productUOM}\n : null}\n {!this.props.isMobile ? \n {this.props.productQuantity}\n : null}\n {!this.props.isMobile ? \n {this.props.productActions}\n : }\n \n \n );\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IOrderTemplateNameDialogResources, OrderTemplateNameDialog } from '@msdyn365-commerce/components';\nimport { IComponentProps } from '@msdyn365-commerce/core';\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport React, { useState } from 'react';\n\nexport interface ICreateOrderTemplateButtonProps extends IComponentProps {\n createOrderTemplateText: string;\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\n onOrderTemplateCreated(): Promise;\n}\n\nconst CreateOrderTemplateButton: React.FC = (props) => {\n const onCancel = () => {\n return;\n };\n const [createOrderTemplateDialogOpen, setOrderTemplateNameDialogOpen] = useState(false);\n const onCreateButtonClick = () => {\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. All rights reserved.\n * See License.txt 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 { ISingleOrderTemplateProps, ISingleOrderTemplateViewProps, OrderTemplateListStatusMessage, OrderTemplateRender } from './components';\nimport CreateNewTemplateButtonComponent from './components/create-order-template';\nimport { IOrderTemplateListData } from './order-template-list.data';\nimport { 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\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 render(): JSX.Element | null {\n const { className } = this.props.config;\n const { emptyOrderTemplateText, createNewTemplateButtonText } = this.props.resources;\n const { orderTemplates } = this.props.data;\n const orderTemplatesData = orderTemplates && (orderTemplates).result;\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 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 \n ),\n createOrderTemplateButton: (\n \n ),\n templateHeaderStatusMessage: this.state.isOpen && this.state.headerStatusMessage && (\n
\n \n \n {this.state.headerStatusMessage}\n \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 _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 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 };\n\n return (\n OrderTemplateRender(currentTemplateProps)!\n );\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 }).then(this._reloadPage);\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}\n\nexport default OrderTemplateList;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport OrderTemplateLines from './modules/order-template/order-template';\nimport OrderTemplateLinesView from './modules/order-template/order-template.view';\n\nexport * from './modules/order-template/components';\nexport * from './modules/order-template/order-template';\nexport * from './modules/order-template/order-template.data';\nexport * from './modules/order-template/order-template.view';\n\n// Export * from './modules/order-template/actions';\nexport * from './modules/order-template/order-template.props.autogenerated';\nexport * from './modules/order-template-list/components';\nexport * from './modules/order-template-list/order-template-list';\nexport * from './modules/order-template-list/order-template-list.data';\nexport * from './modules/order-template-list/order-template-list.view';\n\nexport {\n OrderTemplateLines,\n OrderTemplateLinesView\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 }\n } = props;\n\n const toggleDetails = () => {\n toggleDetailsDisplayed && toggleDetailsDisplayed(undefined);\n };\n\n return (\n \n {heading}\n {OrderTemplateActions && (\n \n {orderActions?.addTemplateToBag}\n {orderActions?.renameTemplate}\n {orderActions?.removeTemplate}\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 \n Product Details\n \n \n
    \n
  • \n {detailedProductView?.productImage}\n
  • \n
  • \n \n {productText}\n :\n \n {detailedProductView?.productInfo}\n
  • \n
  • \n \n {productNumberText}\n :\n \n {detailedProductView?.productNumber}\n
  • \n
  • \n \n {productUnitPriceText}\n :\n \n {' '}\n {detailedProductView?.productPrice}\n
  • \n
  • \n \n {productUOMText}\n :\n \n {' '}\n {detailedProductView?.productUnitOfMeasure}\n
  • \n
  • \n \n {productQuantityText}\n :\n \n {detailedProductView?.productQuantityView}\n
  • \n {productsStatusMessage &&
  • \n {productsStatusMessage}\n
  • }\n
\n
\n \n \n \n \n
\n );\n};\n\nconst _renderItem = (\n product: IOrderTemplateLineViewProps,\n quantityLabel: string,\n ProductsTableRow?: INodeProps\n): JSX.Element | null => {\n if (!product) {\n return null;\n }\n\n const {\n key,\n selectLine,\n productImage,\n productPrice,\n productNumber,\n addToBagButton,\n removeButton,\n productInfo,\n productUnitOfMeasure,\n productQuantityView,\n productQuantity,\n popUp,\n isMobile\n } = product;\n\n return (\n \n \n {selectLine}\n \n \n {productImage}\n \n {isMobile ? \n
\n {productNumber}\n
\n
\n {quantityLabel}\n :\n {' '}\n {productQuantity}\n
\n : \n {productNumber}\n }\n {!isMobile && \n {productInfo}\n }\n {!isMobile && \n {productPrice}\n }\n {!isMobile && \n {productUnitOfMeasure}\n }\n {!isMobile && \n {productQuantityView}\n }\n {isMobile && \n {popUp}\n }\n {!isMobile &&\n \n {addToBagButton}\n {removeButton}\n }\n
\n );\n};\n\nexport default OrderTemplateLinesView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Button } 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 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\n public state: IOrderTemplateBulkActionsState = {\n isAddDisabled: true,\n isRemoveDisabled: true\n };\n\n public componentDidUpdate(prevProps: IOrderTemplateBulkActionsProps): void {\n if (prevProps.selectedLines.length !== this.props.selectedLines.length) {\n this.setState({\n isAddDisabled: this.props.selectedLines.length === 0,\n isRemoveDisabled: this.props.selectedLines.length === 0\n });\n }\n }\n\n public render(): JSX.Element {\n const { addLineModalLinkText,\n searchButtonAriaLabel,\n searchInputAriaLabel,\n searchModalPlaceholderText,\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 const addLineProps = {\n context: this.props.context,\n resources: {\n addLineModalLinkText,\n searchButtonAriaLabel,\n searchInputAriaLabel,\n searchModalPlaceholderText,\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 };\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. All rights reserved.\n * See License.txt 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 { OrderTemplateList, status, statusMessage, heading, OrderTemplates, orderTemplates, OrderTemplate, createOrderTemplateButton, templateHeaderStatusMessage } = 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 && orderTemplates.map((orderTemplate) => {\n return _renderOrderTemplate(orderTemplate, OrderTemplate);\n })}\n }\n \n );\n};\n\nconst _renderOrderTemplate = (orderTemplate: ISingleOrderTemplateViewProps, OrderTemplate?: INodeProps): JSX.Element | null => {\n\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"],"sourceRoot":""}