{"version":3,"file":"static/js/14.4d6144ae6c58bab11c84.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/components/Pagination.tsx?3e26","webpack://Msdyn365.Commerce.Online/./src/modules/ari-search-results/ari-search-results.tsx?ca2c","webpack://Msdyn365.Commerce.Online/./src/modules/ari-search-results/ari-search-results.view.tsx?3734","webpack://Msdyn365.Commerce.Online/./src/modules/ari-search-results/components/AriSearchResultTable.component.tsx?9695","webpack://Msdyn365.Commerce.Online/./src/modules/back-order-list/back-order-list.tsx?459c","webpack://Msdyn365.Commerce.Online/./src/modules/back-order-list/back-order-list.view.tsx?34bd","webpack://Msdyn365.Commerce.Online/./src/modules/back-order-list/components/BackOrderTable.component.tsx?7284","webpack://Msdyn365.Commerce.Online/./src/modules/education-training/components/CourseTable.component.tsx?2e36","webpack://Msdyn365.Commerce.Online/./src/modules/education-training/education-training.tsx?6970","webpack://Msdyn365.Commerce.Online/./src/modules/education-training/education-training.view.tsx?562e","webpack://Msdyn365.Commerce.Online/./src/modules/eve-quick-order/components/EveQuickOrderRow.tsx?3ed0","webpack://Msdyn365.Commerce.Online/./src/modules/eve-quick-order/components/EveQuickOrderButtonRow.tsx?5cf2","webpack://Msdyn365.Commerce.Online/./src/modules/eve-quick-order/components/EveQuickOrderHeader.tsx?251e","webpack://Msdyn365.Commerce.Online/./src/modules/eve-quick-order/eve-quick-order.tsx?26f8","webpack://Msdyn365.Commerce.Online/./src/modules/eve-quick-order/eve-quick-order.view.tsx?4d7f","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-invoice-details/components/gdn-invoice-details-header.tsx?c184","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-invoice-details/components/gdn-invoice-details-payment-summary.tsx?0f36","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-invoice-details/components/gdn-invoice-details-products-table.tsx?20b2","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-invoice-details/gdn-invoice-details.tsx?938e","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-invoice-details/gdn-invoice-details.view.tsx?afb5","webpack://Msdyn365.Commerce.Online/./src/modules/model-viewer/components/AriPartsListTable.component.tsx?cb62","webpack://Msdyn365.Commerce.Online/./src/modules/reports-export/components/render-card.tsx?6b95","webpack://Msdyn365.Commerce.Online/./src/modules/reports-export/reports-export.tsx?1ce9","webpack://Msdyn365.Commerce.Online/./src/modules/reports-export/reports-export.view.tsx?52d4","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/order-template.view.tsx?1b57","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/components/search.categorysuggest.tsx?1d05","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/components/search.mobile.empty.tsx?3ee2","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/components/search.form.tsx?31cb","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/components/search.keywordsuggest.tsx?3ae1","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/components/search.productsuggest.tsx?f921","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/components/search.arisuggest.tsx?64e5","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/search.view.tsx?175e","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/models/SupersessionKey.ts?818f","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/order-template.view.tsx?513f","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/components/search.categorysuggest.tsx?7941","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/components/search.mobile.empty.tsx?f1ef","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/components/search.form.tsx?77b5","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/components/search.keywordsuggest.tsx?ca0f","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/components/search.productsuggest.tsx?40fe","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/components/search.arisuggest.tsx?1cfd","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/search.view.tsx?9ead","webpack://Msdyn365.Commerce.Online/./src/utils/getAriModelDetailUrl.ts?5e00","webpack://Msdyn365.Commerce.Online/./src/modules/account-invoice-tile/components/account-invoice-tile-description.tsx?7378","webpack://Msdyn365.Commerce.Online/./src/modules/account-invoice-tile/components/account-invoice-tile-links.tsx?81f3","webpack://Msdyn365.Commerce.Online/./src/modules/account-invoice-tile/account-invoice-tile.tsx?c17e","webpack://Msdyn365.Commerce.Online/./src/modules/account-invoice-tile/account-invoice-tile.view.tsx?0a60","webpack://Msdyn365.Commerce.Online/./src/modules/footer-item/footer-item.tsx?074a","webpack://Msdyn365.Commerce.Online/./src/modules/footer-item/footer-item.view.tsx?c5af","webpack://Msdyn365.Commerce.Online/./src/modules/order-history-with-search-and-filters/components/order-history-with-search-and-filters-organization-wide-selector.component.tsx?b9a7","webpack://Msdyn365.Commerce.Online/./src/modules/site-picker/site-picker.tsx?b9ec","webpack://Msdyn365.Commerce.Online/./src/modules/site-picker/site-picker.view.tsx?5319","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/reviews-list.view.tsx?39ca"],"sourcesContent":["/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport classNames from 'classnames';\r\nimport * as React from 'react';\r\nimport { UncontrolledTooltip, PaginationItem, PaginationLink, mapToCssModules } from '@msdyn365-commerce-modules/utilities';\r\nimport { IPaginationProps } from './IPaginationProps';\r\n\r\n/**\r\n * Uncontrolled Pagination component.\r\n */\r\nexport default class UncontrolledPagination extends React.PureComponent {\r\n public static defaultProps: Partial = {\r\n tag: 'nav',\r\n listTag: 'ul',\r\n 'aria-label': 'pagination',\r\n items: 0,\r\n itemsPerPage: 25,\r\n startingItem: 0,\r\n page: 1\r\n };\r\n\r\n private static readonly pagesDisplayed: number = 7;\r\n\r\n private maxPages: number;\r\n\r\n private qsps: { [param: string]: string };\r\n\r\n constructor(props: IPaginationProps) {\r\n super(props);\r\n this.maxPages = this.props.items ? Math.ceil(this.props.items / this.props.itemsPerPage! - 1) : 0;\r\n this.qsps = {};\r\n const splitUrl = this.props.url.split('?');\r\n\r\n if (splitUrl[1]) {\r\n const secondSplit = splitUrl[1].split('#');\r\n const parsedQsps = secondSplit[0].split('&');\r\n\r\n for (const qsp of parsedQsps) {\r\n const qspPair = qsp.split('=');\r\n\r\n if (this.props.qsp !== qspPair[0]) {\r\n this.qsps[qspPair[0]] = qspPair[1];\r\n }\r\n }\r\n }\r\n }\r\n\r\n public render(): JSX.Element {\r\n const {\r\n className,\r\n baseUrl,\r\n qsp,\r\n items,\r\n itemsPerPage,\r\n startingItem,\r\n previousText,\r\n nextText,\r\n previousAriaLabel,\r\n nextAriaLabel,\r\n listClassName,\r\n cssModule,\r\n children,\r\n size,\r\n tag: Tag,\r\n listTag: ListTag,\r\n 'aria-label': label,\r\n role,\r\n ...props\r\n }: any = this.props;\r\n\r\n this.maxPages = this.props.items ? Math.ceil(this.props.items / this.props.itemsPerPage!) : 0;\r\n this.qsps = {};\r\n const splitUrl = this.props.url.split('?');\r\n\r\n if (splitUrl[1]) {\r\n const secondSplit = splitUrl[1].split('#');\r\n const parsedQsps = secondSplit[0].split('&');\r\n\r\n for (const activeQsp of parsedQsps) {\r\n const qspPair = activeQsp.split('=');\r\n\r\n if (this.props.qsp !== qspPair[0]) {\r\n this.qsps[qspPair[0]] = qspPair[1];\r\n }\r\n }\r\n }\r\n\r\n const paginationClasses = mapToCssModules(classNames(className), cssModule);\r\n\r\n const listpaginationClasses = mapToCssModules(\r\n classNames(listClassName, 'msc-pagination', {\r\n [`msc-pagination-${size}`]: !!size\r\n }),\r\n cssModule\r\n );\r\n\r\n return (\r\n \r\n \r\n {this._generatePageLinks()}\r\n \r\n \r\n );\r\n }\r\n\r\n private _generatePaginationArrow(next: boolean, disable: boolean, className: string): React.ReactElement {\r\n const tooltipId = next ? this.props.nextId : this.props.prevId;\r\n const ariaDescribedBy = next ? this.props.nextAreaDescribed : this.props.prevAreaDescribed;\r\n const placement = next ? 'right' : 'left';\r\n const tag = disable ? 'span' : 'a';\r\n\r\n return (\r\n \r\n this.props.onPageChange(next ? this.props.page + 1 : this.props.page - 1)}\r\n >\r\n {next ? this.props.nextText : this.props.previousText}\r\n \r\n {tooltipId && (\r\n \r\n {next ? 'next' : 'previous'}\r\n \r\n )}\r\n \r\n );\r\n }\r\n\r\n private _generatePaginationItem(page: number): React.ReactElement {\r\n const active = this.props.page - 1 === page;\r\n page += 1;\r\n\r\n return (\r\n \r\n this.props.onPageChange(page)}>{page}\r\n \r\n );\r\n }\r\n\r\n private _generateEllipse(): React.ReactElement {\r\n return (\r\n \r\n ...\r\n \r\n );\r\n }\r\n\r\n private _generatePageLinks(): React.ReactFragment {\r\n const displayCountSide = 3;\r\n let leftDistance = this.props.page;\r\n let rightDistance = this.maxPages - this.props.page;\r\n const leftEllipse = this.maxPages > UncontrolledPagination.pagesDisplayed && leftDistance > 3;\r\n const rightEllipse = this.maxPages > UncontrolledPagination.pagesDisplayed && rightDistance > 3;\r\n\r\n leftDistance = Math.min(leftDistance, displayCountSide);\r\n rightDistance = Math.min(rightDistance, displayCountSide);\r\n const pages = [];\r\n const ellipseOffset = leftEllipse ? -1 : 0;\r\n const displayedPagesOnLeft = leftDistance + (displayCountSide - rightDistance) + ellipseOffset;\r\n const startingIndex = Math.max(this.props.page - displayedPagesOnLeft, 0);\r\n const endIndex = Math.min(\r\n startingIndex + 5 + (rightEllipse ? 0 : 1) + (leftEllipse ? 0 : 1),\r\n rightEllipse ? this.maxPages - 1 : this.maxPages\r\n );\r\n\r\n if (leftEllipse) {\r\n pages.push(this._generatePaginationItem(0));\r\n pages.push(this._generateEllipse());\r\n }\r\n\r\n for (let i = startingIndex; i < endIndex; i++) {\r\n pages.push(this._generatePaginationItem(i));\r\n }\r\n\r\n if (rightEllipse) {\r\n pages.push(this._generateEllipse());\r\n pages.push(this._generatePaginationItem(this.maxPages - 1));\r\n }\r\n\r\n return (\r\n <>\r\n {this._generatePaginationArrow(false, this.props.page === 1, 'previous')}\r\n {pages}\r\n {this._generatePaginationArrow(true, this.props.page === this.maxPages, 'next')}\r\n \r\n );\r\n }\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\n\r\nimport { IAriSearchResultsData } from './ari-search-results.data';\r\nimport { IAriSearchResultsProps } from './ari-search-results.props.autogenerated';\r\nimport { IAriModelEntity, IAriServiceModelExtension } from '../../actions/DataServiceEntities.g';\r\nimport { IAriModel } from './interfaces/IAriModel';\r\nimport { AriSearchResultTableComponent, IAriSearchResultTableResources } from './components/AriSearchResultTable.component';\r\nimport { QueryResultSettings } from '@msdyn365-commerce/retail-proxy';\r\nimport { QueryResultSettingsProxy } from '@msdyn365-commerce-modules/retail-actions';\r\nimport getModelsBySearchText, { SearchModelsInput } from '../../actions/search-models.action';\r\nimport Pagination from '../../components/Pagination';\r\nimport generateAriModelDetailUrl from '../../utils/getAriModelDetailUrl';\r\n\r\n/**\r\n * Props for the view component\r\n */\r\nexport interface IAriSearchResultsViewProps extends IAriSearchResultsProps {\r\n modelTable: React.ReactNode;\r\n pagination: React.ReactNode;\r\n}\r\n\r\n/**\r\n * Component state\r\n */\r\ninterface IAriSearchResultsState {\r\n page: number;\r\n models: IAriServiceModelExtension[];\r\n totalCount: number;\r\n}\r\n\r\n/**\r\n *\r\n * AriSearchResults component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass AriSearchResults extends React.PureComponent, IAriSearchResultsState> {\r\n constructor(props: IAriSearchResultsProps) {\r\n super(props);\r\n const queryResultSettings = QueryResultSettingsProxy.fromInputData(props.context.actionContext).QueryResultSettings;\r\n let page = 1;\r\n if (queryResultSettings.Paging?.Skip && queryResultSettings.Paging.Skip > 0) {\r\n page = (this.props.config.itemsPerPage || 10) / queryResultSettings.Paging.Skip;\r\n }\r\n this.state = {\r\n page,\r\n models: this.props.data.ariResults.result?.ariSearchResults.Models || [],\r\n totalCount: this.props.data.ariResults.result?.ariSearchResults.TotalCount || 0\r\n };\r\n this.handlePaginationPageChange = this.handlePaginationPageChange.bind(this);\r\n\r\n void this.props.data.ariResults.then(results => {\r\n const models = results.ariSearchResults.Models;\r\n this.setState({\r\n models: models || [],\r\n totalCount: results.ariSearchResults.TotalCount\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Generates the id for the product detail page\r\n * @param modelId model id for the page url\r\n * @param brandCode brand code for the page url\r\n * @private\r\n */\r\n private getModelDetailPageUrl(modelId: string, brandCode: string) {\r\n return generateAriModelDetailUrl(modelId, brandCode, this.props.context.actionContext);\r\n }\r\n\r\n /**\r\n * Updates the results of the model when paginating\r\n * @private\r\n */\r\n private updateModelResults() {\r\n const top = this.props.config.itemsPerPage || 10;\r\n const queryResultSettings: QueryResultSettings = {\r\n Paging: {\r\n Top: top,\r\n Skip: this.state.page * top\r\n }\r\n };\r\n const searchTerm = this.props.context.request.query?.q || '';\r\n const {\r\n context: {\r\n request: { apiSettings },\r\n request,\r\n actionContext\r\n }\r\n } = this.props;\r\n const pageType =\r\n this.props.context.request.urlTokens.pageType === 'Category' || (request.query && request.query.categoryId)\r\n ? 'Category'\r\n : 'Search';\r\n const searchModelInput = new SearchModelsInput(searchTerm, queryResultSettings, pageType, apiSettings);\r\n void getModelsBySearchText(searchModelInput, actionContext).then(result => {\r\n this.setState({\r\n models: result.ariSearchResults.Models || [],\r\n totalCount: result.ariSearchResults.TotalCount\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Renders the model table\r\n * @param modelsList model list for the table\r\n * @param totalCount total count of models for pagination\r\n * @private\r\n */\r\n private getModelTable(modelsList: IAriModelEntity[], totalCount: number) {\r\n if (!modelsList?.length) {\r\n return null;\r\n }\r\n const modelsListWithPageLinks: IAriModel[] = modelsList.map(model => {\r\n return {\r\n ...model,\r\n detailPageUrl: this.getModelDetailPageUrl(model.Id.toString(), model.BrandCode!) || ''\r\n };\r\n });\r\n\r\n const { modelHeading, manufacturerHeading, tableHeading, descriptionHeading } = this.props.resources;\r\n const ariSearchResultTableResources: IAriSearchResultTableResources = {\r\n modelHeading,\r\n manufacturerHeading,\r\n tableHeading,\r\n descriptionHeading\r\n };\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handles user pagination\r\n * @param pageNumber page to change to\r\n * @private\r\n */\r\n private handlePaginationPageChange(pageNumber: number) {\r\n this.setState(\r\n {\r\n page: pageNumber\r\n },\r\n () => this.updateModelResults()\r\n );\r\n }\r\n\r\n private generateUrlForPagination() {\r\n const url = this.props.context.request.url;\r\n return url.requestUrl.toString();\r\n }\r\n\r\n /**\r\n * renders the pagination\r\n * @private\r\n */\r\n private renderPagination() {\r\n const {\r\n config: { itemsPerPage },\r\n resources: { previousText, nextText, paginationAriaLabel }\r\n } = this.props;\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Renders a Pagination previous text.\r\n * @param paginationPreviousText - Pagination previous text from resources.\r\n * @returns Previous text and flipper icon.\r\n */\r\n private readonly _renderPrev = (paginationPreviousText: string) => {\r\n return (\r\n
\r\n
\r\n );\r\n };\r\n\r\n /**\r\n * Renders a Pagination next text.\r\n * @param paginationNextText - Pagination next text from resources.\r\n * @returns Next text and flipper icon.\r\n */\r\n private readonly _renderNext = (paginationNextText: string) => {\r\n return (\r\n
\r\n {paginationNextText}\r\n
\r\n );\r\n };\r\n\r\n public render(): JSX.Element | null {\r\n const { models, totalCount } = this.state;\r\n const viewProps: IAriSearchResultsViewProps = {\r\n ...this.props,\r\n modelTable: this.getModelTable(models, totalCount),\r\n pagination: this.renderPagination()\r\n };\r\n return this.props.renderView(viewProps);\r\n }\r\n}\r\n\r\nexport default AriSearchResults;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\nimport { IAriSearchResultsViewProps } from './ari-search-results';\r\n\r\nexport default (props: IAriSearchResultsViewProps) => {\r\n const { modelTable, pagination } = props;\r\n return (\r\n
\r\n {modelTable}\r\n {pagination}\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport Table from 'reactstrap/lib/Table';\r\nimport { IAriModel } from '../interfaces/IAriModel';\r\nimport { ListGroup, ListGroupItem, ListGroupItemHeading, ListGroupItemText } from 'reactstrap';\r\n\r\nexport interface IAriSearchResultTableResources {\r\n tableHeading: string;\r\n modelHeading: string;\r\n manufacturerHeading: string;\r\n descriptionHeading: string;\r\n}\r\n\r\ninterface IAriSearchResultTableComponentProps {\r\n searchResults: IAriModel[];\r\n resources: IAriSearchResultTableResources;\r\n totalCount: number;\r\n}\r\n\r\nexport const AriSearchResultTableComponent: React.FC = props => {\r\n const { searchResults, resources, totalCount } = props;\r\n const { tableHeading, modelHeading, manufacturerHeading, descriptionHeading } = resources;\r\n const [outerWidth, setOuterWidth] = React.useState(0);\r\n\r\n React.useEffect(() => {\r\n //Set initial outerWidth\r\n setOuterWidth(window.outerWidth);\r\n //Resize window event handling\r\n window.removeEventListener('resize', () => setOuterWidth(window.outerWidth));\r\n window.addEventListener('resize', () => setOuterWidth(window.outerWidth), { passive: true });\r\n return window.removeEventListener('resize', () => setOuterWidth(window.outerWidth));\r\n });\r\n\r\n return (\r\n
\r\n {outerWidth > 768 ? (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {searchResults.map(model => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n
\r\n {tableHeading} {totalCount} results\r\n
{modelHeading}{manufacturerHeading}{descriptionHeading}
\r\n {model.Name}\r\n {model.Description}{model.Name}
\r\n ) : (\r\n \r\n {searchResults.map(model => {\r\n return (\r\n \r\n \r\n {model.Name}\r\n \r\n \r\n {model.Description}\r\n \r\n \r\n {model.Name}\r\n \r\n \r\n );\r\n })}\r\n \r\n )}\r\n
\r\n );\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\n\r\nimport { getBackOrderListAsync } from '../../actions/DataActionExtension.g';\r\nimport { IBackOrderListEntity, IGetBackOrderListResponse } from '../../actions/DataServiceEntities.g';\r\nimport { IBackOrderListData } from './back-order-list.data';\r\nimport { IBackOrderListProps } from './back-order-list.props.autogenerated';\r\nimport { QueryResultSettingsProxy } from '@msdyn365-commerce-modules/retail-actions';\r\n// import getBackOrderList, { GetBackorderListInput } from '../../actions/get-backorder-list.action';\r\nimport Pagination from '../../components/Pagination';\r\nimport { BackOrderTableComponent, IBackOrderTableComponentResources } from './components/BackOrderTable.component';\r\nimport { reaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\n\r\n/**\r\n * Props for the view component\r\n */\r\nexport interface IBackOrderListViewProps extends IBackOrderListProps {\r\n modelTable: React.ReactNode;\r\n pagination: React.ReactNode;\r\n // selection: React.ReactNode;\r\n}\r\n\r\n/**\r\n * Component state\r\n */\r\ninterface IBackOrderListState {\r\n page: number;\r\n backOrders: IBackOrderListEntity[];\r\n totalCount: number;\r\n availableSortOptions: string[];\r\n sortOrder: string;\r\n selectedSort: string;\r\n}\r\n\r\n/**\r\n *\r\n * BackOrderList component\r\n * @extends {React.PureComponent>}\r\n */\r\n@observer\r\nclass BackOrderList extends React.PureComponent, IBackOrderListState> {\r\n private static defaultBackOrderItemsPerPage = 15;\r\n\r\n private readonly numItemsToDisplay = this.props.config.backOrderItemsPerPage || BackOrderList.defaultBackOrderItemsPerPage;\r\n\r\n constructor(props: IBackOrderListProps) {\r\n super(props);\r\n\r\n const queryResultSettings = QueryResultSettingsProxy.fromInputData(props.context.actionContext).QueryResultSettings;\r\n let page = 1;\r\n if (queryResultSettings.Paging?.Skip && queryResultSettings.Paging.Skip > 0) {\r\n page = this.numItemsToDisplay / queryResultSettings.Paging.Skip;\r\n }\r\n this.state = {\r\n page,\r\n backOrders: this.props.data.backOrderResults.result?.backOrderData.BackOrderLines || [],\r\n totalCount: this.props.data.backOrderResults.result?.backOrderData.RecordCount || 0,\r\n availableSortOptions: this.props.data.backOrderResults.result?.backOrderData.AvailableSortOptions || [],\r\n sortOrder: this.props.data.backOrderResults.result?.backOrderData.SortOrder || '',\r\n selectedSort: this.props.data.backOrderResults.result?.backOrderData.SelectedSort || ''\r\n };\r\n\r\n this.handlePaginationPageChange = this.handlePaginationPageChange.bind(this);\r\n this.handleSortingTypeChange = this.handleSortingTypeChange.bind(this);\r\n this.setBackOrderListResults = this.setBackOrderListResults.bind(this);\r\n this.updateBackOrderResults = this.updateBackOrderResults.bind(this);\r\n this.toggleSortOrder = this.toggleSortOrder.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n reaction(\r\n () => this.props.data.backOrderResults.result?.backOrderData,\r\n () => this.setBackOrderListResults(this.props.data.backOrderResults.result!.backOrderData)\r\n );\r\n }\r\n\r\n private setBackOrderListResults(backOrderListResponse: IGetBackOrderListResponse) {\r\n this.setState({\r\n backOrders: backOrderListResponse.BackOrderLines || [],\r\n totalCount: backOrderListResponse.RecordCount || 0,\r\n availableSortOptions: backOrderListResponse.AvailableSortOptions || [],\r\n sortOrder: backOrderListResponse.SortOrder || '',\r\n selectedSort: backOrderListResponse.SelectedSort || ''\r\n });\r\n }\r\n\r\n /**\r\n * Updates the results of the model when paginating\r\n * @private\r\n */\r\n private async updateBackOrderResults() {\r\n const top = this.numItemsToDisplay;\r\n const skip = this.state.page * top - top;\r\n const selectedSort = this.state.selectedSort;\r\n const sortOrder = this.state.sortOrder;\r\n const {\r\n context: { actionContext }\r\n } = this.props;\r\n\r\n // const getBackorderListInput = new GetBackorderListInput(request, request.apiSettings, top, skip, selectedSort, sortOrder);\r\n // console.log(getBackorderListInput);\r\n // const res = await getBackOrderList(getBackorderListInput, actionContext);\r\n const res = await getBackOrderListAsync({ callerContext: actionContext }, top, skip, selectedSort, sortOrder);\r\n void this.setBackOrderListResults(res);\r\n // void getBackOrderList(getBackorderListInput, actionContext).then(res => {\r\n // console.log(res);\r\n // this.setBackOrderListResults(res.backOrderData);\r\n // // this.setState({\r\n // // backOrders: res.backOrderData.BackOrderLines || [],\r\n // // totalCount: res.backOrderData.RecordCount || 0,\r\n // // sortOrder: res.backOrderData.SortOrder || '',\r\n // // selectedSort: res.backOrderData.SelectedSort || ''\r\n // // });\r\n // });\r\n }\r\n\r\n /**\r\n * Renders the model table\r\n * @param modelsList model list for the table\r\n * @param totalCount total count of models for pagination\r\n * @private\r\n */\r\n private getModelTable(backOrders: IBackOrderListEntity[], totalCount: number) {\r\n const {\r\n backOrderListTitleText,\r\n backOrderListItemsText,\r\n orderNumberHeadingText,\r\n poNumberHeadingText,\r\n mfrHeadingText,\r\n partNumberHeadingText,\r\n deliveryTypeHeadingText,\r\n qtyHeadingText,\r\n totalHeadingText,\r\n noBackOrdersMessageText,\r\n estShipDateHeadingText\r\n } = this.props.resources;\r\n const backOrdersListResources: IBackOrderTableComponentResources = {\r\n backOrderListTitleText,\r\n backOrderListItemsText,\r\n orderNumberHeadingText,\r\n poNumberHeadingText,\r\n mfrHeadingText,\r\n partNumberHeadingText,\r\n deliveryTypeHeadingText,\r\n qtyHeadingText,\r\n totalHeadingText,\r\n noBackOrdersMessageText,\r\n estShipDateHeadingText\r\n };\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handles user pagination\r\n * @param pageNumber page to change to\r\n * @private\r\n */\r\n private handlePaginationPageChange(pageNumber: number) {\r\n this.setState(\r\n {\r\n page: pageNumber\r\n },\r\n () => this.updateBackOrderResults()\r\n );\r\n }\r\n\r\n private generateUrlForPagination() {\r\n const url = this.props.context.request.url;\r\n return url.requestUrl.toString();\r\n }\r\n\r\n /**\r\n * renders the pagination\r\n * @private\r\n */\r\n private renderPagination() {\r\n const {\r\n resources: { previousText, nextText, paginationAriaLabel }\r\n } = this.props;\r\n\r\n if (this.state.totalCount === 0) {\r\n return '';\r\n }\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Renders a Pagination previous text.\r\n * @param paginationPreviousText - Pagination previous text from resources.\r\n * @returns Previous text and flipper icon.\r\n */\r\n private readonly _renderPrev = (paginationPreviousText: string) => {\r\n return (\r\n
\r\n
\r\n );\r\n };\r\n\r\n /**\r\n * Renders a Pagination next text.\r\n * @param paginationNextText - Pagination next text from resources.\r\n * @returns Next text and flipper icon.\r\n */\r\n private readonly _renderNext = (paginationNextText: string) => {\r\n return (\r\n
\r\n {paginationNextText}\r\n
\r\n );\r\n };\r\n\r\n private toggleSortOrder(sortOrder: string): void {\r\n this.setState(\r\n {\r\n sortOrder: sortOrder === 'Ascending' ? 'Descending' : 'Ascending',\r\n page: 1\r\n },\r\n () => this.updateBackOrderResults()\r\n );\r\n }\r\n\r\n private renderSortOrderButton() {\r\n // $msv-ChevronDown: \"\\ea4e\";\r\n // $msv-ChevronUp: \"\\ea78\";\r\n const sortOrder = this.state.sortOrder;\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handles sort by dropdown changes\r\n * @param pageNumber page to change to\r\n * @private\r\n */\r\n private async handleSortingTypeChange(e: React.ChangeEvent) {\r\n this.setState(\r\n {\r\n selectedSort: e.target.value,\r\n page: 1\r\n },\r\n () => this.updateBackOrderResults()\r\n );\r\n }\r\n\r\n private readonly _renderSortingType = () => {\r\n return (\r\n
\r\n

{this.props.resources.sortingSelectLabelText}

\r\n \r\n {!this.state.selectedSort && }\r\n {this.state.availableSortOptions &&\r\n this.state.availableSortOptions.length > 0 &&\r\n this.state.availableSortOptions.map(sortOptions => (\r\n \r\n ))}\r\n \r\n
\r\n );\r\n };\r\n\r\n public render(): JSX.Element | null {\r\n const { backOrders, totalCount } = this.state;\r\n\r\n const viewProps: IBackOrderListViewProps = {\r\n ...this.props,\r\n // selection: this._renderSortingType(),\r\n modelTable: this.getModelTable(backOrders, totalCount),\r\n pagination: this.renderPagination()\r\n };\r\n return this.props.renderView(viewProps);\r\n }\r\n}\r\n\r\nexport default BackOrderList;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\nimport { IBackOrderListViewProps } from './back-order-list';\r\n\r\nexport default (props: IBackOrderListViewProps) => {\r\n const { modelTable, pagination } = props;\r\n return (\r\n
\r\n {/* {selection} */}\r\n {modelTable}\r\n {pagination}\r\n
\r\n );\r\n};\r\n","/* eslint-disable react/jsx-no-bind */\r\nimport React from 'react';\r\nimport Table from 'reactstrap/lib/Table';\r\nimport { IBackOrderListEntity } from '../../../actions/DataServiceEntities.g';\r\nimport { ListGroup, ListGroupItem, ListGroupItemHeading, ListGroupItemText } from 'reactstrap';\r\nimport { ICoreContext, IDateFormatOptions } from '@msdyn365-commerce/core';\r\nimport { format } from '@msdyn365-commerce-modules/utilities';\r\n\r\nexport interface IBackOrderTableComponentResources {\r\n backOrderListTitleText: string;\r\n backOrderListItemsText: string;\r\n orderNumberHeadingText: string;\r\n poNumberHeadingText: string;\r\n mfrHeadingText: string;\r\n partNumberHeadingText: string;\r\n deliveryTypeHeadingText: string;\r\n qtyHeadingText: string;\r\n totalHeadingText: string;\r\n noBackOrdersMessageText: string;\r\n estShipDateHeadingText: string;\r\n}\r\n\r\ninterface IBackOrderTableComponentProps {\r\n backOrders: IBackOrderListEntity[];\r\n resources: IBackOrderTableComponentResources;\r\n totalCount: number;\r\n backOrderEtaBuffer: number;\r\n ctx: ICoreContext;\r\n sortingDropdown: JSX.Element;\r\n sortOrderButton: JSX.Element;\r\n currencyFormatter: (price: string | number, currencyCode?: string | undefined) => string;\r\n}\r\n\r\nexport const BackOrderTableComponent: React.FC = props => {\r\n const { backOrders, resources, totalCount, backOrderEtaBuffer, sortOrderButton, sortingDropdown, currencyFormatter, ctx } = props;\r\n const {\r\n backOrderListItemsText,\r\n orderNumberHeadingText,\r\n poNumberHeadingText,\r\n mfrHeadingText,\r\n partNumberHeadingText,\r\n deliveryTypeHeadingText,\r\n qtyHeadingText,\r\n totalHeadingText,\r\n noBackOrdersMessageText,\r\n estShipDateHeadingText\r\n } = resources;\r\n\r\n const [outerWidth, setOuterWidth] = React.useState(0);\r\n\r\n React.useEffect(() => {\r\n //Set initial outerWidth\r\n setOuterWidth(window.outerWidth);\r\n //Resize window event handling\r\n window.removeEventListener('resize', () => setOuterWidth(window.outerWidth));\r\n window.addEventListener('resize', () => setOuterWidth(window.outerWidth), { passive: true });\r\n return window.removeEventListener('resize', () => setOuterWidth(window.outerWidth));\r\n });\r\n\r\n if (outerWidth === 0) {\r\n return null;\r\n }\r\n\r\n // console.log(props);\r\n\r\n return (\r\n
\r\n {outerWidth > 768 ? (\r\n <>\r\n
\r\n {totalCount > 0 && (\r\n
\r\n {sortingDropdown}\r\n {sortOrderButton}\r\n
\r\n )}\r\n {format(backOrderListItemsText, totalCount)}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {backOrders.length > 0 ? (\r\n backOrders.map((order, index) => {\r\n const deliveryType = order.DeliveryType === 'None' ? 'Standard' : order.DeliveryType;\r\n const shipDateString = order.ShippingDate?.toString() ? order.ShippingDate?.toString() : '';\r\n const startIndex = shipDateString.indexOf('(') + 1;\r\n const endIndex = shipDateString.indexOf(')');\r\n const result = parseFloat(shipDateString.substring(startIndex, endIndex));\r\n const estShipDateRes = result ? new Date(result) : new Date();\r\n estShipDateRes.setDate(estShipDateRes.getDate());\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })\r\n ) : (\r\n \r\n \r\n \r\n )}\r\n \r\n
{orderNumberHeadingText}{poNumberHeadingText}{deliveryTypeHeadingText}{mfrHeadingText}{partNumberHeadingText}{qtyHeadingText}{totalHeadingText}{estShipDateHeadingText}
{order.SalesId}{order.PurchaseOrderNumber}{deliveryType}{order.ManufacturerNumber}{order.ItemId}{order.Quantity}{currencyFormatter(order.Total || 0)}{formatDate(ctx, estShipDateRes, backOrderEtaBuffer)}
{noBackOrdersMessageText}
\r\n \r\n ) : (\r\n \r\n
\r\n
{format(backOrderListItemsText, totalCount)}
\r\n {backOrders.map((order, index) => {\r\n const deliveryType = order.DeliveryType === 'None' ? 'Standard' : order.DeliveryType;\r\n const shipDateString = order.ShippingDate?.toString() ? order.ShippingDate?.toString() : '';\r\n const startIndex = shipDateString.indexOf('(') + 1;\r\n const endIndex = shipDateString.indexOf(')');\r\n const result = parseFloat(shipDateString.substring(startIndex, endIndex));\r\n const estShipDateRes = result ? new Date(result) : new Date();\r\n estShipDateRes.setDate(estShipDateRes.getDate());\r\n return (\r\n \r\n \r\n
\r\n {order.ItemId}\r\n {deliveryType}\r\n
\r\n
\r\n \r\n
\r\n \r\n {`${mfrHeadingText} : `}\r\n {order.ManufacturerNumber}\r\n \r\n \r\n {`${estShipDateHeadingText} : `}\r\n {formatDate(ctx, estShipDateRes, backOrderEtaBuffer)}\r\n \r\n
\r\n
\r\n \r\n
\r\n {order.SalesId}\r\n {order.PurchaseOrderNumber && (\r\n \r\n {`${poNumberHeadingText} `}\r\n {order.PurchaseOrderNumber}\r\n \r\n )}\r\n
\r\n
\r\n \r\n
\r\n \r\n {`${qtyHeadingText} : `}\r\n {order.Quantity}\r\n \r\n \r\n {`${totalHeadingText} : `}\r\n {currencyFormatter(order.Total || 0)}\r\n \r\n
\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n
\r\n )}\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Formats date.\r\n * @param context - Core context.\r\n * @param date - Date to display.\r\n * @returns String value.\r\n */\r\nconst formatDate = (context: ICoreContext, date: Date | undefined, bufferInDays: number) => {\r\n if (date === undefined) {\r\n return '';\r\n }\r\n\r\n // If no date find f&O returns default date.\r\n const defaultDate = new Date(-2208988790000);\r\n if (\r\n date.getFullYear() === defaultDate.getFullYear() &&\r\n date.getMonth() === defaultDate.getMonth() &&\r\n date.getDate() === defaultDate.getDate()\r\n ) {\r\n return 'N/A';\r\n }\r\n\r\n const dateOptions: IDateFormatOptions = { year: 'numeric', month: 'numeric', day: 'numeric' };\r\n date.setTime(date.getTime() + date.getTimezoneOffset() * 60000);\r\n date.setDate(date.getDate() + bufferInDays);\r\n return context.cultureFormatter.formatDate(date, dateOptions);\r\n};\r\n","/* eslint-disable react/jsx-no-bind */\r\nimport React from 'react';\r\nimport Table from 'reactstrap/lib/Table';\r\nimport { ICourseEntity } from '../../../actions/DataServiceEntities.g';\r\nimport { addCourseToCartAsync } from '../../../actions/DataActionExtension.g';\r\nimport { ListGroup, ListGroupItem, ListGroupItemHeading, ListGroupItemText } from 'reactstrap';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { ICoreContext } from '@msdyn365-commerce/core';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { IEducationTrainingViewState } from '../education-training';\r\n\r\nexport interface ICourseTableComponentResources {\r\n courseListHeading: string;\r\n courseListResultsHeading: string;\r\n courseNameHeading: string;\r\n courseDateHeading: string;\r\n courseRegistrationDetailsHeading: string;\r\n courseAddToCartHeading: string;\r\n addToCartButtonLabel: string;\r\n startLabel: string;\r\n endLabel: string;\r\n registrationEndsLabel: string;\r\n maximumAttendeesLabel: string;\r\n currentAttendeesLabel: string;\r\n courseExpiredMessage: string;\r\n courseFullMessage: string;\r\n}\r\n\r\ninterface ICourseTableComponentProps {\r\n courseList: ICourseEntity[];\r\n resources: ICourseTableComponentResources;\r\n totalCount: number;\r\n cart: ICartState | undefined;\r\n channelId: number;\r\n ctx: ICoreContext;\r\n additionalInfo: Msdyn365.RichText | undefined;\r\n viewState: IEducationTrainingViewState;\r\n setLoading: (setLoading: boolean) => void;\r\n}\r\n\r\nexport const CourseTableComponent: React.FC = props => {\r\n const { courseList, resources, totalCount, cart, ctx, additionalInfo, viewState, setLoading } = props;\r\n const {\r\n courseListHeading,\r\n courseListResultsHeading,\r\n courseNameHeading,\r\n courseDateHeading,\r\n courseRegistrationDetailsHeading,\r\n courseAddToCartHeading,\r\n addToCartButtonLabel,\r\n startLabel,\r\n endLabel,\r\n registrationEndsLabel,\r\n maximumAttendeesLabel,\r\n currentAttendeesLabel,\r\n courseExpiredMessage,\r\n courseFullMessage\r\n } = resources;\r\n const [outerWidth, setOuterWidth] = React.useState(0);\r\n const [errMessage, setErrMessage] = React.useState('');\r\n\r\n React.useEffect(() => {\r\n //Set initial outerWidth\r\n setOuterWidth(window.outerWidth);\r\n //Resize window event handling\r\n window.removeEventListener('resize', () => setOuterWidth(window.outerWidth));\r\n window.addEventListener('resize', () => setOuterWidth(window.outerWidth), { passive: true });\r\n return window.removeEventListener('resize', () => setOuterWidth(window.outerWidth));\r\n });\r\n\r\n const fmt: Intl.DateTimeFormatOptions = {\r\n year: 'numeric',\r\n month: 'short',\r\n day: '2-digit',\r\n timeZoneName: 'short',\r\n second: undefined,\r\n hour: 'numeric',\r\n minute: '2-digit'\r\n };\r\n\r\n async function _handleAddToCart(e: React.MouseEvent) {\r\n setLoading(true);\r\n // TODO:Move this function to the parent file. No api calls should be made from display components.\r\n const cartId = cart?.cart.Id;\r\n const target = e.target as HTMLDivElement; // TODO:We don't need to reference elements in react like this. We can use state to have a success message / button without manipulating the element.\r\n\r\n if (!cartId || !target.id) {\r\n setLoading(false);\r\n return;\r\n }\r\n\r\n try {\r\n void (await addCourseToCartAsync({ callerContext: ctx.actionContext }, cartId, target.id));\r\n void (await cart?.refreshCart({})); // @sylver - Added refresh cart here to update the mini cart on action completion.\r\n target.textContent = 'Added to Cart!'; //TODO: Use Resource\r\n target.id = '';\r\n setErrMessage('');\r\n } catch (e) {\r\n setErrMessage((e as { name: string }).name);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n\r\n return (\r\n
\r\n {' '}\r\n
\r\n {/*TODO: Use BEM CSS */}\r\n {outerWidth > 768 ? (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {courseList.map(c => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n
\r\n {courseListHeading} ({totalCount} {courseListResultsHeading})
\r\n
\r\n {/*{additionalInfo &&

{additionalInfo}

}*/}\r\n {additionalInfo && }\r\n {errMessage && (\r\n <>\r\n
\r\n

{errMessage}

\r\n \r\n )}\r\n
{courseNameHeading}{courseDateHeading}{courseRegistrationDetailsHeading}{courseAddToCartHeading}
\r\n {c.HRMCourseId} - ${c.GDNCourseFee}\r\n
\r\n {c.Description}\r\n {/*
*/}\r\n {/* {c.Organizer} */}\r\n {/* John Thompson */}\r\n
\r\n {startLabel}\r\n {c.StartDateTime.toLocaleString('en-us', fmt)}
{' '}\r\n {/* TODO: Get locale from context, not hardcode */}\r\n {endLabel}\r\n {c.EndDateTime.toLocaleString('en-us', fmt)}
\r\n {/* Location: */}\r\n {/* {c.Location} */}\r\n {/* Tampa Bay, Florida */}\r\n
\r\n {registrationEndsLabel}\r\n {c.LastDateOfSignup.toLocaleString('en-us', fmt)}\r\n
\r\n {maximumAttendeesLabel}\r\n {c.MaxAttendees}\r\n
\r\n {currentAttendeesLabel}\r\n {c.CurrentAttendees}\r\n
\r\n {c.CourseStatus === 'Expired' ? courseExpiredMessage : ''} {/* TODO: Consider an enum */}\r\n {c.CourseStatus === 'Full' ? courseFullMessage : ''}\r\n {c.CourseStatus === 'Valid' && (\r\n // @ts-ignore\r\n \r\n {addToCartButtonLabel}\r\n \r\n )}\r\n {/* HOP532180054 */} {/*HOP532104757*/}\r\n {/* update ext.HRMCOURSETABLE set HRMCOURSEID = 'HOP532180054' where HRMCOURSEID = 'HOP532180054' */}\r\n
\r\n ) : (\r\n \r\n

\r\n {courseListHeading} ({totalCount} {courseListResultsHeading})\r\n
\r\n
\r\n {additionalInfo &&

{additionalInfo}

}\r\n {errMessage && (\r\n <>\r\n
\r\n

{errMessage}

\r\n \r\n )}\r\n

\r\n {courseList.map(c => {\r\n return (\r\n \r\n {c.HRMCourseId}\r\n {c.Description}\r\n \r\n {startLabel}\r\n {c.StartDateTime.toLocaleString('en-us', fmt)}
\r\n {endLabel}\r\n {c.EndDateTime.toLocaleString('en-us', fmt)}\r\n
\r\n \r\n {registrationEndsLabel}\r\n {c.LastDateOfSignup.toLocaleString('en-us', fmt)}\r\n
\r\n {maximumAttendeesLabel}\r\n {c.MaxAttendees}\r\n
\r\n {currentAttendeesLabel}\r\n {c.CurrentAttendees}\r\n
\r\n \r\n {c.CourseStatus === 'Expired' ? courseExpiredMessage : ''}\r\n {c.CourseStatus === 'Full' ? courseFullMessage : ''}\r\n {c.CourseStatus === 'Valid' && (\r\n // @ts-ignore\r\n
\r\n {addToCartButtonLabel}\r\n
\r\n )}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n )}\r\n
\r\n );\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { IEducationTrainingData } from './education-training.data';\r\nimport { IEducationTrainingProps } from './education-training.props.autogenerated';\r\nimport { ICourseEntity, ICourseResponseEntity } from '../../actions/DataServiceEntities.g';\r\nimport { QueryResultSettings } from '@msdyn365-commerce/retail-proxy';\r\nimport { QueryResultSettingsProxy } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getCourseDataAsync } from '../../actions/DataActionExtension.g';\r\nimport Pagination from '../../components/Pagination';\r\nimport { CourseTableComponent, ICourseTableComponentResources } from './components/CourseTable.component';\r\nimport { reaction } from 'mobx';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { observer } from 'mobx-react';\r\n\r\n/**\r\n * Props for the view component\r\n */\r\nexport interface IEducationTrainingViewProps extends IEducationTrainingProps {\r\n modelTable: React.ReactNode;\r\n pagination: React.ReactNode;\r\n}\r\n\r\n/**\r\n * View state for view component\r\n */\r\nexport interface IEducationTrainingViewState {\r\n isLoading: boolean;\r\n}\r\n\r\n/**\r\n * Component state\r\n */\r\ninterface IEducationTrainingState {\r\n page: number;\r\n courses: ICourseEntity[];\r\n totalCount: number;\r\n cart: ICartState | undefined;\r\n viewState: IEducationTrainingViewState;\r\n}\r\n\r\n/**\r\n *\r\n * EducationTraining component\r\n * @extends {React.PureComponent>}\r\n */\r\n@observer\r\nclass EducationTraining extends React.PureComponent, IEducationTrainingState> {\r\n constructor(props: IEducationTrainingProps) {\r\n super(props);\r\n\r\n const queryResultSettings = QueryResultSettingsProxy.fromInputData(props.context.actionContext).QueryResultSettings;\r\n let page = 1;\r\n if (queryResultSettings.Paging?.Skip && queryResultSettings.Paging.Skip > 0) {\r\n page = (this.props.config.itemsPerPage || 9) / queryResultSettings.Paging.Skip;\r\n }\r\n const viewState = {\r\n isLoading: false\r\n };\r\n this.state = {\r\n page,\r\n courses: this.props.data.courseResults.result?.courseResponse.Courses || [],\r\n totalCount: this.props.data.courseResults.result?.courseResponse.TotalCount || 0,\r\n cart: this.props.data.cart.result,\r\n viewState\r\n };\r\n\r\n this.handlePaginationPageChange = this.handlePaginationPageChange.bind(this);\r\n this.setCourseResults = this.setCourseResults.bind(this);\r\n this.setCartState = this.setCartState.bind(this);\r\n this.setLoading = this.setLoading.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n reaction(\r\n () => this.props.data.courseResults.result?.courseResponse,\r\n () => this.setCourseResults(this.props.data.courseResults.result!.courseResponse)\r\n );\r\n reaction(\r\n () => this.props.data.cart.result?.cart,\r\n () => this.setCartState(this.props.data.cart.result!)\r\n );\r\n }\r\n\r\n private setCourseResults(courseResponse: ICourseResponseEntity) {\r\n this.setState({\r\n courses: courseResponse.Courses || [],\r\n totalCount: courseResponse.TotalCount\r\n });\r\n }\r\n\r\n private setCartState(cart: ICartState) {\r\n this.setState({\r\n cart: cart\r\n });\r\n }\r\n\r\n public setLoading(setLoading: boolean) {\r\n this.setState(prevState => ({ viewState: { ...prevState.viewState, isLoading: setLoading } }));\r\n }\r\n\r\n /**\r\n * Updates the results of the model when paginating\r\n * @private\r\n */\r\n private updateModelResults() {\r\n const top = this.props.config.itemsPerPage || 9;\r\n const queryResultSettings: QueryResultSettings = {\r\n Paging: {\r\n Top: top,\r\n Skip: this.state.page * top - top\r\n }\r\n };\r\n const {\r\n context: { actionContext }\r\n } = this.props;\r\n\r\n void getCourseDataAsync({ callerContext: actionContext, queryResultSettings: queryResultSettings }).then(result => {\r\n this.setState({\r\n courses: result[0].Courses || [],\r\n totalCount: result[0].TotalCount\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Renders the model table\r\n * @param modelsList model list for the table\r\n * @param totalCount total count of models for pagination\r\n * @private\r\n */\r\n private getModelTable(\r\n courseList: ICourseEntity[],\r\n additionalInfo: Msdyn365.RichText | undefined,\r\n totalCount: number,\r\n cart: ICartState | undefined,\r\n viewState: IEducationTrainingViewState,\r\n setLoading: (setLoading: boolean) => void\r\n ) {\r\n if (!courseList?.length) {\r\n return null;\r\n }\r\n\r\n const {\r\n courseListHeading,\r\n courseListResultsHeading,\r\n courseNameHeading,\r\n courseDateHeading,\r\n courseRegistrationDetailsHeading,\r\n courseAddToCartHeading,\r\n addToCartButtonLabel,\r\n startLabel,\r\n endLabel,\r\n registrationEndsLabel,\r\n maximumAttendeesLabel,\r\n currentAttendeesLabel,\r\n courseExpiredMessage,\r\n courseFullMessage\r\n } = this.props.resources;\r\n const educationTrainingResources: ICourseTableComponentResources = {\r\n courseListHeading,\r\n courseListResultsHeading,\r\n courseNameHeading,\r\n courseDateHeading,\r\n courseRegistrationDetailsHeading,\r\n courseAddToCartHeading,\r\n addToCartButtonLabel,\r\n startLabel,\r\n endLabel,\r\n registrationEndsLabel,\r\n maximumAttendeesLabel,\r\n currentAttendeesLabel,\r\n courseExpiredMessage,\r\n courseFullMessage\r\n };\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handles user pagination\r\n * @param pageNumber page to change to\r\n * @private\r\n */\r\n private handlePaginationPageChange(pageNumber: number) {\r\n this.setState(\r\n {\r\n page: pageNumber\r\n },\r\n () => this.updateModelResults()\r\n );\r\n }\r\n\r\n /**\r\n * renders the pagination\r\n * @private\r\n */\r\n private renderPagination() {\r\n const {\r\n config: { itemsPerPage },\r\n resources: { previousText, nextText, paginationAriaLabel }\r\n } = this.props;\r\n if (this.state.totalCount === 0) {\r\n return '';\r\n }\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Renders a Pagination previous text.\r\n * @param paginationPreviousText - Pagination previous text from resources.\r\n * @returns Previous text and flipper icon.\r\n */\r\n private readonly _renderPrev = (paginationPreviousText: string) => {\r\n return (\r\n
this.handlePaginationPageChange(this.state.page - 1)}>\r\n
\r\n );\r\n };\r\n\r\n /**\r\n * Renders a Pagination next text.\r\n * @param paginationNextText - Pagination next text from resources.\r\n * @returns Next text and flipper icon.\r\n */\r\n private readonly _renderNext = (paginationNextText: string) => {\r\n return (\r\n
this.handlePaginationPageChange(this.state.page + 1)}>\r\n {paginationNextText}\r\n
\r\n );\r\n };\r\n\r\n public render(): JSX.Element | null {\r\n const { courses, totalCount, cart } = this.state;\r\n\r\n const viewProps: IEducationTrainingViewProps = {\r\n ...this.props,\r\n modelTable: this.getModelTable(\r\n courses,\r\n this.props.config.additionalInfo,\r\n totalCount,\r\n cart,\r\n this.state.viewState,\r\n this.setLoading\r\n ),\r\n pagination: this.renderPagination()\r\n };\r\n return this.props.renderView(viewProps);\r\n }\r\n}\r\n\r\nexport default EducationTraining;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\nimport { IEducationTrainingViewProps } from './education-training';\r\n\r\nexport default (props: IEducationTrainingViewProps) => {\r\n const { modelTable, pagination } = props;\r\n return (\r\n
\r\n {modelTable}\r\n {pagination}\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport { RowError, SimpleProductExt } from '../eve-quick-order';\r\nimport { IAdvancedNoteEntity, IManufacturerCodeResponseEntity } from '../../../actions/DataServiceEntities.g';\r\nimport { SupersessionKey } from '../../../themes/gardner-theme/models/SupersessionKey';\r\nimport { Tooltip } from 'reactstrap';\r\n\r\nexport interface IEveQuickOrderRowResources {\r\n defaultManufacturerCodeText: string;\r\n deleteText: string;\r\n productEligibilityText: string;\r\n supersededProductText: string;\r\n}\r\n\r\ninterface IEveQuickOrderRowProps {\r\n id: number;\r\n onDelete: (id: number) => void;\r\n onRowChange: (id: number, value: string, quantity: string, manufacturerCode: string) => void;\r\n onAddRows: () => void;\r\n value: string;\r\n quantity: string;\r\n product: SimpleProductExt | null;\r\n availableProducts: SimpleProductExt[] | null;\r\n currencyFormatter: (price: string | number, currencyCode?: string | undefined) => string;\r\n isLastRow: boolean;\r\n rowError: RowError;\r\n onSelectedProductChange: (id: number, selectedProductId: number) => void;\r\n resources: IEveQuickOrderRowResources;\r\n manufacturerCodes: IManufacturerCodeResponseEntity[];\r\n manufacturerCode: string;\r\n advancedNotes: IAdvancedNoteEntity[];\r\n}\r\n\r\nexport const EveQuickOrderRow: React.FC = props => {\r\n const {\r\n id,\r\n onDelete,\r\n value,\r\n quantity,\r\n onRowChange,\r\n product,\r\n currencyFormatter,\r\n isLastRow,\r\n onAddRows,\r\n manufacturerCodes,\r\n resources: { defaultManufacturerCodeText, productEligibilityText, supersededProductText },\r\n rowError,\r\n manufacturerCode,\r\n advancedNotes\r\n } = props;\r\n\r\n /**\r\n * Emits the row delete function\r\n */\r\n const handleRowDelete = () => onDelete(id);\r\n\r\n /**\r\n * Emits row change when changing value\r\n * @param e\r\n */\r\n const handleValueChange = (e: React.ChangeEvent) => {\r\n onRowChange(id, e.target.value, quantity, manufacturerCode);\r\n };\r\n\r\n /**\r\n * Emits row change when changing quantity\r\n * @param e\r\n */\r\n const handleQuantityChange = (e: React.ChangeEvent) => {\r\n onRowChange(id, value, e.target.value, manufacturerCode);\r\n };\r\n\r\n /**\r\n * Emits add row function\r\n */\r\n const addRows = () => {\r\n onAddRows();\r\n };\r\n\r\n const [isToolTipOpen, setIsToolTipOpen] = React.useState(false);\r\n\r\n /**\r\n * Toggle which updates the tooltip state\r\n * @returns void\r\n */\r\n const toggleTooltip = () => setIsToolTipOpen(!isToolTipOpen);\r\n\r\n const handleManufacturerCodeChange = (e: React.ChangeEvent) => {\r\n onRowChange(id, value, quantity, e.target.value);\r\n };\r\n /**\r\n * Gets the row message to display based on row state\r\n */\r\n const getRowStatusMessage = (product: SimpleProductExt | null): React.ReactElement | null => {\r\n switch (rowError) {\r\n case RowError.None:\r\n if (product) {\r\n const supersessionName = product.ExtensionProperties?.find(ep => ep.Key === SupersessionKey.SupersededName)?.Value\r\n ?.StringValue;\r\n\r\n return (\r\n <>\r\n

\r\n {`${product.Name} \r\n ${supersessionName ? supersededProductText.replace('{0}', supersessionName) : ''}` || ''}\r\n

\r\n {advancedNotes ? mapNotes(advancedNotes) : ''}\r\n \r\n );\r\n }\r\n break;\r\n case RowError.InvalidQuantity:\r\n return

Invalid Quantity

;\r\n case RowError.ProductNotFound:\r\n return

Product Not Found

;\r\n case RowError.MultipleChoicesAvailable:\r\n return

Please select a manufacturer

;\r\n case RowError.NotEligbile:\r\n return

{productEligibilityText}

;\r\n case RowError.Unavailable:\r\n return

Not Available

;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n /**\r\n * Turn array of IAdvancedNoteEntity into JSX element with Tooltip\r\n *\r\n * @param {IAdvancedNoteEntity[]} notes the array of notes to display in the tooltip\r\n * @return {*}\r\n */\r\n function mapNotes(notes: IAdvancedNoteEntity[]) {\r\n if (notes && notes.length && notes[0].ItemId) {\r\n return (\r\n <>\r\n \r\n Read Notes\r\n \r\n \r\n
    \r\n {advancedNotes.map(note => (\r\n
  • {note.TextValue}
  • \r\n ))}\r\n
\r\n \r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n const removeSpacesFromItemId = (itemId: string): string => itemId.replace(/\\s/g, '');\r\n\r\n const getAvailability = () => product?.ExtensionProperties?.find(ep => ep.Key === SupersessionKey.Inventory)?.Value?.StringValue || '0';\r\n\r\n return (\r\n <>\r\n
\r\n \r\n {!manufacturerCode && }\r\n {manufacturerCodes &&\r\n manufacturerCodes.length > 0 &&\r\n manufacturerCodes.map(code => (\r\n \r\n ))}\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
{getRowStatusMessage(product)}
\r\n
{product &&

{currencyFormatter(product.Price)}

}
\r\n
{product &&

{getAvailability()}

}
\r\n
\r\n \r\n
\r\n \r\n );\r\n};\r\n","import React from 'react';\r\nexport interface IEveQuickOrderButtonRowResources {\r\n addAllToCartText: string;\r\n clearAllText: string;\r\n addMoreRowsText: string;\r\n}\r\n\r\ninterface IEveQuickOrderButtonRowProps {\r\n resources: IEveQuickOrderButtonRowResources;\r\n canAddToCart: number;\r\n handleAddToCart: () => void;\r\n handleClearAll: () => void;\r\n isLoading: boolean;\r\n}\r\n\r\nexport const EveQuickOrderButtonRow: React.FC = props => {\r\n const {\r\n resources: { clearAllText, addAllToCartText },\r\n canAddToCart,\r\n handleClearAll,\r\n handleAddToCart,\r\n isLoading\r\n } = props;\r\n const _className = 'qo-button';\r\n\r\n return (\r\n
\r\n \r\n {isLoading ? 'Loading...' : addAllToCartText}\r\n \r\n \r\n
\r\n );\r\n};\r\n","import React from 'react';\r\n\r\nexport interface IEveQuickOrderHeaderResources {\r\n addAllToCartText: string;\r\n clearAllText: string;\r\n}\r\n\r\ninterface IEveQuickOrderHeaderProps {\r\n heading: string;\r\n helpText: string;\r\n resources: IEveQuickOrderHeaderResources;\r\n canAddToCart: number;\r\n handleAddToCart: () => void;\r\n handleClearAll: () => void;\r\n}\r\n\r\nexport const EveQuickOrderHeader: React.FC = props => {\r\n const {\r\n heading,\r\n helpText\r\n // resources: { clearAllText, addAllToCartText },\r\n // canAddToCart,\r\n // handleClearAll,\r\n // handleAddToCart\r\n } = props;\r\n const _className = 'q-header';\r\n\r\n return (\r\n
\r\n
\r\n

{heading}

\r\n {helpText &&

{helpText}

}\r\n
\r\n {/*
\r\n \r\n \r\n
*/}\r\n
\r\n );\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { IEveQuickOrderData } from './eve-quick-order.data';\r\nimport { IEveQuickOrderProps } from './eve-quick-order.props.autogenerated';\r\nimport { EveQuickOrderRow, IEveQuickOrderRowResources } from './components/EveQuickOrderRow';\r\nimport { EveQuickOrderButtonRow, IEveQuickOrderButtonRowResources } from './components/EveQuickOrderButtonRow';\r\nimport { debounce } from 'lodash';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { AsyncResult, CommerceProperty, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { EveQuickOrderHeader, IEveQuickOrderHeaderResources } from './components/EveQuickOrderHeader';\r\nimport { IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport classNames from 'classnames';\r\nimport { IOrderUploadItem } from '../order-upload/order-upload';\r\nimport {\r\n getAdvancedNotesAsync,\r\n getInventoryLevelRangesAsync,\r\n getProductsByManufacturerItemIdAsync\r\n} from '../../actions/DataActionExtension.g';\r\nimport {\r\n IAdvancedNoteEntity,\r\n IManufacturerCodeResponseEntity,\r\n IProfileDataMap,\r\n ISearchTextProductMap\r\n} from '../../actions/DataServiceEntities.g';\r\nimport { CommercePropertyValueEnum } from '../allowable-freight/utils/CommercePropertyValueEnum';\r\nimport GetProductEligibilityAction, { GetProductEligibilityInput } from '../../actions/get-product-eligibility.action';\r\nimport { SupersessionKey } from '../../themes/gardner-theme/models/SupersessionKey';\r\nexport interface IEveQuickOrderViewProps extends IEveQuickOrderProps {\r\n quickOrderTable: React.ReactElement;\r\n quickOrderHeader: React.ReactElement;\r\n quickOrderWrapper: IModuleProps;\r\n handleUploadedItems: (items: IOrderUploadItem[]) => void;\r\n orderUploadWrapper: INodeProps;\r\n guideText: React.ReactElement | undefined;\r\n}\r\n\r\nexport interface IEveQuickOrderRowData {\r\n id: number;\r\n value: string;\r\n quantity: string;\r\n product: SimpleProductExt | null;\r\n availableProducts: SimpleProductExt[];\r\n rowError: RowError;\r\n manufacturerCode: string;\r\n advancedNotes: IAdvancedNoteEntity[];\r\n}\r\n\r\ninterface IEveQuickOrderState {\r\n rows: IEveQuickOrderRowData[];\r\n // @ts-expect-error\r\n debounce: debounce;\r\n loading: boolean;\r\n}\r\n\r\nexport enum RowError {\r\n ProductNotFound,\r\n InvalidQuantity,\r\n MultipleChoicesAvailable,\r\n NotEligbile,\r\n None,\r\n Unavailable\r\n}\r\n\r\nexport interface ISearchTextProductMapExt extends ISearchTextProductMap {\r\n SearchText?: string;\r\n Products?: SimpleProductExt[];\r\n}\r\n\r\nexport interface SimpleProductExt extends SimpleProduct {\r\n IsEligible?: boolean;\r\n IsUnavailable?: boolean;\r\n}\r\n\r\ninterface EligibleItem {\r\n ItemId: string;\r\n IsEligible: boolean;\r\n IsAssorted?: boolean;\r\n}\r\n\r\nexport interface EligibleItems extends Array {}\r\n\r\n/**\r\n * Enables users to quickly order products using item ids\r\n * EveQuickOrder component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass EveQuickOrder extends React.PureComponent, IEveQuickOrderState> {\r\n private _defaultMinQueryLength = 4;\r\n private _manufacturerCodeExtensionPropertyKey = 'ManufacturerCode';\r\n constructor(props: IEveQuickOrderProps) {\r\n super(props);\r\n\r\n this._handleRowDelete = this._handleRowDelete.bind(this);\r\n this._generateRow = this._generateRow.bind(this);\r\n this._renderTable = this._renderTable.bind(this);\r\n this._updateRowValue = this._updateRowValue.bind(this);\r\n this._addTwoRows = this._addTwoRows.bind(this);\r\n this._handleUploadedItems = this._handleUploadedItems.bind(this);\r\n this._tableInit = this._tableInit.bind(this);\r\n this._handleAddToCart = this._handleAddToCart.bind(this);\r\n this._handleSelectedProductChange = this._handleSelectedProductChange.bind(this);\r\n this._reorderRows = this._reorderRows.bind(this);\r\n\r\n this.state = {\r\n rows: [],\r\n debounce: this._initDebounceFn(),\r\n loading: false\r\n };\r\n }\r\n\r\n public componentDidMount() {\r\n this._tableInit();\r\n }\r\n\r\n /**\r\n * Initialises the table to the module configuration\r\n * @private\r\n */\r\n private _tableInit() {\r\n const {\r\n config: { defaultRows }\r\n } = this.props;\r\n const rows: IEveQuickOrderRowData[] = [];\r\n for (let i = 0; i < defaultRows; i++) {\r\n rows.push(this._generateEmptyRow(i + 1));\r\n }\r\n this.setState({ rows });\r\n }\r\n\r\n /**\r\n * Initializes the debounce function for all input forms\r\n * @private\r\n */\r\n private _initDebounceFn() {\r\n return debounce(async (data: { searchText: string[]; id: number }) => {\r\n const responseData = await this.getProductSearchResult(data.searchText);\r\n if (ArrayExtensions.hasElements(responseData) && ArrayExtensions.hasElements(responseData[0].Products)) {\r\n const notes = await getAdvancedNotesAsync({ callerContext: this.props.context.actionContext }, [\r\n responseData[0].Products[0]?.ItemId!\r\n ]);\r\n this._updateRowProduct(data.id, responseData[0].Products, notes || [], data.searchText[0]);\r\n } else {\r\n const rows = [...this.state.rows];\r\n const idx = rows.findIndex(r => r.id === data.id);\r\n rows[idx].rowError = this._updateRowErrorState(rows[idx]);\r\n this.setState({ rows });\r\n }\r\n }, 500);\r\n }\r\n\r\n /**\r\n * Adds all valid items to cart\r\n * @private\r\n */\r\n private async _handleAddToCart() {\r\n const products = this.state.rows.filter(row => !!row.product && row.rowError === RowError.None);\r\n // 6321 - Resolve issue when the same item is added to the quick order form more than once\r\n const dummyProducts = [...products];\r\n const combinedProducts = dummyProducts.reduce(\r\n (acc: IEveQuickOrderRowData[], cur: IEveQuickOrderRowData): IEveQuickOrderRowData[] => {\r\n const row = acc.length > 0 && acc.find(({ product }) => product?.ItemId === cur.product?.ItemId);\r\n if (row) {\r\n row.quantity = (parseInt(row.quantity, 10) + parseInt(cur.quantity, 10)).toString();\r\n } else {\r\n acc.push(cur);\r\n }\r\n return acc;\r\n },\r\n []\r\n );\r\n\r\n if (combinedProducts.length) {\r\n const cartState = this.props.data.cart.result;\r\n const input = combinedProducts.map(product => {\r\n return {\r\n product: product.product!,\r\n count: parseInt(product.quantity, 10),\r\n catalogId: 0\r\n };\r\n });\r\n if (cartState) {\r\n this.setState({ loading: true });\r\n await cartState.addProductsToCart(input);\r\n this.setState({ loading: false });\r\n this._tableInit();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets product by item id\r\n * @param data item ids\r\n * @private\r\n */\r\n private async getProductSearchResult(data: string[]) {\r\n const itemIds = data.map(d => d.toString());\r\n\r\n const {\r\n context: { actionContext }\r\n } = this.props;\r\n const response: ISearchTextProductMapExt[] = await getProductsByManufacturerItemIdAsync(\r\n { callerContext: actionContext, queryResultSettings: { Paging: { Top: 9999 } } },\r\n itemIds,\r\n ''\r\n );\r\n\r\n // Get products eligbility\r\n const list: EligibleItems = [];\r\n let inventoryRanges: AsyncResult | undefined;\r\n if (itemIds.length) {\r\n const cart = this.props.data.cart;\r\n\r\n const newItemIds: string[] = [];\r\n\r\n // get Superseded products\r\n response.forEach(r => {\r\n r.Products?.forEach(p => {\r\n if (p.ItemId) {\r\n newItemIds.push(p.ItemId);\r\n }\r\n });\r\n });\r\n const input = new GetProductEligibilityInput(newItemIds, false, cart?.result?.cart?.Id || '', null, null, null);\r\n const eligibilityData = GetProductEligibilityAction(input, this.props.context.actionContext);\r\n inventoryRanges = getInventoryLevelRangesAsync({ callerContext: this.props.context.actionContext }, newItemIds);\r\n const products = response[0].Products;\r\n await Promise.all([eligibilityData, inventoryRanges]);\r\n\r\n if (eligibilityData?.result?.length && products) {\r\n eligibilityData?.result?.forEach((i: any) => {\r\n const id = this._getExtensionPropertyValueByKey(i.ExtensionProperties, 'ItemId', CommercePropertyValueEnum.string);\r\n list.push({\r\n ItemId: String(id),\r\n IsEligible: i.IsEligible,\r\n IsAssorted: i.IsAssorted\r\n });\r\n });\r\n }\r\n }\r\n response.forEach(pr =>\r\n pr.Products?.forEach(p => {\r\n const eligibilityRecord = list.find(l => l.ItemId === p.ItemId);\r\n if (eligibilityRecord) {\r\n p.IsEligible = eligibilityRecord.IsEligible;\r\n p.IsUnavailable = !eligibilityRecord.IsAssorted;\r\n } else {\r\n p.IsEligible = false;\r\n }\r\n const currentInvString = this.getProductSupersessionProperty(p, SupersessionKey.Inventory) || '0';\r\n const currentInventory = parseInt(currentInvString, 10);\r\n inventoryRanges?.result?.map(ir => {\r\n const tempInvRange = ir.Profile?.find(invP => invP.ItemId === p.ItemId && invP.Code === 'OOS');\r\n if (tempInvRange) {\r\n const OosUpperBound =\r\n tempInvRange.hasOwnProperty('UpperBoundInclusive') && tempInvRange.UpperBoundInclusive !== undefined\r\n ? tempInvRange.UpperBoundInclusive\r\n : 0;\r\n p.IsUnavailable = currentInventory <= OosUpperBound;\r\n }\r\n });\r\n })\r\n );\r\n // response.forEach((p: any) => {\r\n // p.Products.forEach((pr: SimpleProductExt) => {\r\n // list.forEach(i => {\r\n // if (pr?.ItemId === i.ItemId) {\r\n // pr.IsEligible = i.IsEligible;\r\n // }\r\n // });\r\n // });\r\n // });\r\n\r\n return response;\r\n }\r\n\r\n private getProductSupersessionProperty = (product: SimpleProductExt, extensionKey: SupersessionKey) => {\r\n const properties = product.ExtensionProperties;\r\n if (properties) {\r\n return properties.find(pr => pr.Key === extensionKey)?.Value?.StringValue || null;\r\n }\r\n return null;\r\n };\r\n\r\n /**\r\n * Gets manufacturer codes from data\r\n * @private\r\n */\r\n private _getManufacturerCodeList = (row: IEveQuickOrderRowData): IManufacturerCodeResponseEntity[] => {\r\n const codesResults = this.props.data.manufacturerCodes.result ? this.props.data.manufacturerCodes.result : [];\r\n\r\n //@ts-ignore\r\n const manufacturerCodes: IManufacturerCodeResponseEntity[] = codesResults.manufacturerCodes;\r\n\r\n if (row.availableProducts.length) {\r\n const availableCodes = row.availableProducts.map(p => this._getManufacturerCodeForRow([p]));\r\n return manufacturerCodes.filter(code => availableCodes.includes(code.GDNManufacturerCode || ''));\r\n }\r\n\r\n return manufacturerCodes;\r\n };\r\n\r\n /**\r\n * Renders the header of the page\r\n * @private\r\n */\r\n private _renderHeading() {\r\n const {\r\n resources: { addAllToCartText, clearFormText },\r\n config: { helpText, title }\r\n } = this.props;\r\n const resources: IEveQuickOrderHeaderResources = {\r\n addAllToCartText: addAllToCartText,\r\n clearAllText: clearFormText\r\n };\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Retrieves the value of an extension property using the given key\r\n * @private\r\n * @param {(CommerceProperty[] | undefined)} properties\r\n * @param {string} key\r\n * @param {CommercePropertyValueEnum} valueType\r\n * @memberof EveQuickOrder\r\n * @return the extension property value associated with the given key\r\n */\r\n private _getExtensionPropertyValueByKey = (\r\n properties: CommerceProperty[] | undefined,\r\n key: string,\r\n valueType: CommercePropertyValueEnum\r\n ) => {\r\n const property = properties?.find(p => p.Key === key)?.Value;\r\n\r\n // eslint-disable-next-line security/detect-object-injection\r\n const val = property ? property[valueType] : null;\r\n return val;\r\n };\r\n\r\n /**\r\n * Renders the add to bag and reset form button row\r\n * @private\r\n */\r\n private _renderButtonRow() {\r\n const {\r\n resources: { addAllToCartText, clearFormText, addMoreRowsText }\r\n } = this.props;\r\n const resources: IEveQuickOrderButtonRowResources = {\r\n addAllToCartText: addAllToCartText,\r\n clearAllText: clearFormText,\r\n addMoreRowsText: addMoreRowsText\r\n };\r\n const { courseInCartText, invoiceInCartText } = this.props.resources;\r\n let courseId: string | number | boolean | null | undefined;\r\n if (this.props.data.cart.result?.hasInvoiceLine) {\r\n return (\r\n
\r\n
{invoiceInCartText}
\r\n
\r\n );\r\n }\r\n const cart = this.props.data.cart.result?.cart;\r\n const cartlines = cart?.CartLines;\r\n if (cartlines && cartlines.length) {\r\n courseId = this._getExtensionPropertyValueByKey(cartlines[0].ExtensionProperties, 'CourseId', CommercePropertyValueEnum.string);\r\n }\r\n\r\n if (courseId) {\r\n return (\r\n
\r\n
{courseInCartText}
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * gets all products\r\n * @private\r\n */\r\n private _getAllAddedProducts() {\r\n return this.state.rows.map(row => row.product?.RecordId).filter(pr => !!pr);\r\n }\r\n\r\n /**\r\n * Generates a row component using row data\r\n * @param row row data to generate from\r\n * @param isLast whether its the last row in the form\r\n * @private\r\n */\r\n private _generateRow(row: IEveQuickOrderRowData, isLast: boolean) {\r\n const resources: IEveQuickOrderRowResources = {\r\n defaultManufacturerCodeText: this.props.resources.defaultDropdownText,\r\n deleteText: this.props.resources.deleteHeading,\r\n productEligibilityText: this.props.resources.productEligibilityText,\r\n supersededProductText: this.props.resources.supersededProductText\r\n };\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handles the product in a row changing\r\n *\r\n * @private\r\n * @param {number} id to change\r\n * @param {number} productId product which has been selected\r\n * @memberof EveQuickOrder\r\n */\r\n private _handleSelectedProductChange(id: number, productId: number) {\r\n const rows = [...this.state.rows];\r\n const idx = rows.findIndex(r => r.id === id);\r\n rows[idx].product = rows[idx].availableProducts.find(pr => pr.RecordId === productId) || rows[idx].product;\r\n this.setState({ rows });\r\n }\r\n\r\n /**\r\n * Handles data from the upload module\r\n * @param items items uploaded\r\n * @private\r\n */\r\n private async _handleUploadedItems(items: IOrderUploadItem[]) {\r\n const itemids = items.map(it => `${it.manufacturer}${it.part_number}`);\r\n // 6251 - Resolve an intermittent issue when upload files are extremely large.\r\n const chunkSize = 50;\r\n const chunks = [];\r\n for (let i = 0; i < itemids.length; i += chunkSize) {\r\n const chunk = itemids.slice(i, i + chunkSize);\r\n chunks.push(chunk);\r\n }\r\n const promises = chunks.map(async chunk => {\r\n return this.getProductSearchResult(chunk);\r\n });\r\n const promiseResult = await Promise.all(promises);\r\n const response: ISearchTextProductMapExt[] = [];\r\n promiseResult.map(res => response.push(...res));\r\n // const response = await this.getProductSearchResult(itemids);\r\n const advancedNotes = await getAdvancedNotesAsync({ callerContext: this.props.context.actionContext }, itemids);\r\n let rows = [...this.state.rows];\r\n const idx = rows.findIndex(r => !r.value);\r\n rows = rows.slice(0, idx);\r\n let rowId = rows.length ? rows[rows.length - 1].id : 1;\r\n // response.forEach((it, index) => {\r\n // const uploadItem = items.find(item => {\r\n // const partNum = item.part_number.toString().toLowerCase();\r\n // const partNumWithMfr = `${item.manufacturer?.toString().toLowerCase()}${item.part_number?.toString().toLowerCase()}`;\r\n // const searchText = it.SearchText?.toLowerCase();\r\n // return partNum === searchText || partNumWithMfr === searchText;\r\n // });\r\n // const foundProduct = ArrayExtensions.hasElements(it.Products);\r\n // const products = it.Products || [];\r\n // // const eligibleProducts = products.filter(pr => pr.IsEligible);\r\n // // const filteredProducts = products.length > 0 && eligibleProducts.length > 0 ? eligibleProducts : products;\r\n // const manufacturerCode = this._getManufacturerCodeForRow(products);\r\n // // const manufacturerCode = this._getManufacturerCodeForRow(filteredProducts);\r\n // const searchText = it.SearchText || '';\r\n // const qty = uploadItem?.qty || 1;\r\n // rows.push(\r\n // this._generateRowData(\r\n // products,\r\n // // filteredProducts,\r\n // rowId++,\r\n // manufacturerCode,\r\n // searchText,\r\n // advancedNotes || [],\r\n // foundProduct,\r\n // qty\r\n // // items[idx].qty\r\n // )\r\n // );\r\n // });\r\n\r\n // 6321 - Change to iterate through the item data from the form vs the response data to resolve an issue retrieving the correct qty when the same item is added more than once\r\n items.forEach((it, index) => {\r\n const responseMatch = response.find(r => {\r\n const partNum = it.part_number.toString().toLowerCase();\r\n const partNumWithMfr = `${it.manufacturer?.toString().toLowerCase()}${it.part_number?.toString().toLowerCase()}`;\r\n const searchText = r.SearchText?.toLowerCase();\r\n return partNum === searchText || partNumWithMfr === searchText;\r\n });\r\n const foundProduct = ArrayExtensions.hasElements(responseMatch?.Products);\r\n const products = responseMatch?.Products || [];\r\n const manufacturerCode = this._getManufacturerCodeForRow(products);\r\n const searchText = responseMatch?.SearchText || '';\r\n const qty = it.qty || 1;\r\n rows.push(\r\n this._generateRowData(\r\n products,\r\n rowId++,\r\n manufacturerCode,\r\n searchText,\r\n advancedNotes || [],\r\n foundProduct,\r\n qty\r\n // items[idx].qty\r\n )\r\n );\r\n });\r\n while (rows.length < this.props.config.defaultRows) {\r\n rows.push({\r\n ...this._generateEmptyRow(rowId++)\r\n });\r\n }\r\n\r\n this.setState({ rows });\r\n }\r\n\r\n private _generateRowData(\r\n products: SimpleProductExt[],\r\n rowId: number,\r\n manufacturerCode: string,\r\n searchText: string,\r\n advancedNotes: IAdvancedNoteEntity[],\r\n foundProduct: boolean,\r\n quantity: number\r\n ) {\r\n let rowError = RowError.None;\r\n if (!foundProduct) {\r\n rowError = RowError.ProductNotFound;\r\n } else if (products.length > 1 && manufacturerCode === '') {\r\n rowError = RowError.MultipleChoicesAvailable;\r\n } else if (quantity < 1) {\r\n rowError = RowError.InvalidQuantity;\r\n } else if (!products[0].IsEligible) {\r\n rowError = RowError.NotEligbile;\r\n } else if (products[0].IsUnavailable) {\r\n rowError = RowError.Unavailable;\r\n }\r\n\r\n const row: IEveQuickOrderRowData = {\r\n ...this._generateEmptyRow(rowId),\r\n product: foundProduct ? products[0] : null,\r\n availableProducts: products || [],\r\n value: this._stripManufacturerFromSearchText(manufacturerCode, searchText),\r\n quantity: quantity.toString(),\r\n rowError: rowError,\r\n advancedNotes: advancedNotes || [],\r\n manufacturerCode: manufacturerCode\r\n };\r\n\r\n return row;\r\n }\r\n\r\n private _stripManufacturerFromSearchText(manufacturerCode: string, searchText: string) {\r\n if (manufacturerCode === '') {\r\n return searchText;\r\n }\r\n // eslint-disable-next-line security/detect-non-literal-regexp\r\n return searchText.replace(new RegExp(manufacturerCode, 'i'), '');\r\n }\r\n\r\n private _getManufacturerCodeForRow(products: SimpleProductExt[]): string {\r\n // 6273 - Auto select KOH when products returned are only MTD or KOH manufacturers\r\n const kohConstant = 'KOH';\r\n const mtdConstant = 'MTD';\r\n const prod = products && products[0];\r\n if (prod && products?.length === 1) {\r\n const mfrCodeVal = this._getExtensionPropertyValueByKey(\r\n prod.ExtensionProperties,\r\n this._manufacturerCodeExtensionPropertyKey,\r\n CommercePropertyValueEnum.string\r\n );\r\n return (mfrCodeVal as string) || '';\r\n } else if (products && products.length > 1) {\r\n // 6273 - Auto select KOH when products returned are only MTD or KOH manufacturers\r\n const onlyKohOrMtd = products.every(\r\n p =>\r\n mtdConstant ===\r\n this._getExtensionPropertyValueByKey(\r\n p.ExtensionProperties,\r\n this._manufacturerCodeExtensionPropertyKey,\r\n CommercePropertyValueEnum.string\r\n ) ||\r\n kohConstant ===\r\n this._getExtensionPropertyValueByKey(\r\n p.ExtensionProperties,\r\n this._manufacturerCodeExtensionPropertyKey,\r\n CommercePropertyValueEnum.string\r\n )\r\n );\r\n return onlyKohOrMtd ? kohConstant : '';\r\n }\r\n return '';\r\n }\r\n\r\n /**\r\n * Renders the quick order table\r\n * @private\r\n */\r\n private _renderTable() {\r\n const {\r\n resources: {\r\n manufacturerCodeTableHeading,\r\n partNumberTableHeading,\r\n quantityTableHeading,\r\n itemNameHeading,\r\n priceHeading,\r\n deleteHeading,\r\n availabilityHeading\r\n }\r\n } = this.props;\r\n const rows = [\r\n manufacturerCodeTableHeading,\r\n partNumberTableHeading,\r\n quantityTableHeading,\r\n itemNameHeading,\r\n priceHeading,\r\n availabilityHeading,\r\n deleteHeading\r\n ];\r\n return (\r\n
\r\n
    \r\n
  • \r\n {rows.map((row, i) => (\r\n
    \r\n {row}\r\n
    \r\n ))}\r\n
  • \r\n {this._reorderRows().map((r, i) => (\r\n
  • \r\n {this._generateRow(r, i === this.state.rows.length - 1)}\r\n
  • \r\n ))}\r\n
  • {this._renderButtonRow()}
  • \r\n
\r\n
\r\n );\r\n }\r\n\r\n private _reorderRows() {\r\n const rows = [...this.state.rows];\r\n const errorRows = rows.filter(row => row.rowError !== RowError.None);\r\n const nonErrorRows = rows.filter(row => row.rowError === RowError.None);\r\n return [...errorRows, ...nonErrorRows];\r\n }\r\n\r\n /**\r\n * Handles removing a row\r\n * @param id id to remove\r\n * @private\r\n */\r\n private _handleRowDelete(id: number) {\r\n const rows = [...this.state.rows];\r\n const idx = rows.findIndex(r => r.id === id);\r\n if (idx > -1) {\r\n rows.splice(idx, 1);\r\n const newRowId = rows[rows.length - 1].id + 1;\r\n if (rows.length < this.props.config.defaultRows) {\r\n rows.push(this._generateEmptyRow(newRowId));\r\n }\r\n this.setState({ rows });\r\n }\r\n }\r\n\r\n /**\r\n * Generates an empty row\r\n * @param id id to initialize row with\r\n * @private\r\n */\r\n private _generateEmptyRow(id: number) {\r\n return {\r\n id,\r\n value: '',\r\n quantity: '1',\r\n product: null,\r\n availableProducts: [],\r\n rowError: RowError.None,\r\n manufacturerCode: '',\r\n advancedNotes: []\r\n };\r\n }\r\n\r\n /**\r\n * Updates the product in a row\r\n * @param id id of row to update\r\n * @param products product to add to row\r\n * @private\r\n */\r\n private _updateRowProduct(id: number, products: SimpleProductExt[], notes: IAdvancedNoteEntity[], searchText: string) {\r\n const rows = [...this.state.rows];\r\n const idx = rows.findIndex(row => row.id === id);\r\n const manufacturerCode = this._getManufacturerCodeForRow(products);\r\n rows[idx] = this._generateRowData(products || [], rows[idx].id, manufacturerCode, searchText, notes, true, 1);\r\n\r\n this.setState({ rows });\r\n }\r\n\r\n private _updateRowErrorState(row: IEveQuickOrderRowData): RowError {\r\n const {\r\n config: { maxQuantity }\r\n } = this.props;\r\n const qty = parseInt(row.quantity, 10);\r\n let rowError: RowError = RowError.None;\r\n if (row.value && !row.product) {\r\n rowError = RowError.ProductNotFound;\r\n } else if (qty === 0 || Number.isNaN(qty) || qty < 1 || qty > (maxQuantity || 1000)) {\r\n rowError = RowError.InvalidQuantity;\r\n } else if (row.product?.IsEligible === false) {\r\n rowError = RowError.NotEligbile;\r\n }\r\n return rowError;\r\n }\r\n\r\n /**\r\n * Updates value or quantity of row\r\n * @param id id of row to update\r\n * @param value value to update\r\n * @param quantity quantity to update\r\n * @param manufacturerCode Selected manufacturer code\r\n * @private\r\n */\r\n private _updateRowValue(id: number, value: string, quantity: string, manufacturerCode: string) {\r\n const rows = [...this.state.rows];\r\n const idx = rows.findIndex(row => row.id === id);\r\n if (rows[idx].value !== value) {\r\n this._getProductByRowQuery(id, value, manufacturerCode);\r\n }\r\n if (rows[idx].quantity !== quantity) {\r\n rows[idx].quantity = quantity;\r\n rows[idx].rowError = this._updateRowErrorState(rows[idx]);\r\n }\r\n if (rows[idx].manufacturerCode !== manufacturerCode) {\r\n rows[idx].manufacturerCode = manufacturerCode;\r\n rows[idx].rowError = this._updateRowErrorState(rows[idx]);\r\n if (rows[idx].availableProducts.length > 1) {\r\n const foundProduct = this._getProductManufacturerById(manufacturerCode, rows[idx].availableProducts);\r\n rows[idx].product = foundProduct;\r\n rows[idx].rowError = this._updateRowErrorState(rows[idx]);\r\n } else if (rows[idx].value !== '') {\r\n this._getProductByRowQuery(id, value, manufacturerCode);\r\n }\r\n }\r\n rows[idx].value = value;\r\n rows[idx].quantity = quantity;\r\n rows[idx].manufacturerCode = manufacturerCode;\r\n this.setState({ rows });\r\n }\r\n\r\n private _getProductManufacturerById(mfrCode: string, products: SimpleProductExt[]) {\r\n let _product = products[0];\r\n products.forEach(pr => {\r\n if (pr.ItemId!.includes(mfrCode)) {\r\n _product = pr;\r\n }\r\n });\r\n return _product;\r\n }\r\n\r\n /**\r\n * Calls the api when a value is updated\r\n * @param id id of row to update\r\n * @param searchText text to search for\r\n * @param manufacturerCode\r\n * @private\r\n */\r\n private _getProductByRowQuery(id: number, searchText: string, manufacturerCode: string) {\r\n // 6297 - Made the searchText length check that it is greater than or equal to the minimum query length so that it makes more sense to the user in site builder.\r\n if (searchText.length > (this.props.config.minQueryLength || this._defaultMinQueryLength)) {\r\n let textToSearch = searchText;\r\n if (manufacturerCode) {\r\n textToSearch = manufacturerCode + textToSearch;\r\n }\r\n this.state.debounce({ searchText: [textToSearch], id });\r\n }\r\n }\r\n\r\n /**\r\n * Adds two blank rows\r\n * @private\r\n */\r\n private _addTwoRows() {\r\n const rows = [...this.state.rows];\r\n const newRowId = rows[rows.length - 1].id + 1;\r\n rows.push(this._generateEmptyRow(newRowId));\r\n rows.push(this._generateEmptyRow(newRowId + 1));\r\n this.setState({ rows });\r\n }\r\n\r\n /**\r\n * To handle paragraph change.\r\n * @param event - To handle text change event.\r\n * @name - HandleParagraphChange\r\n * @public\r\n * @returns - The Paragraph value.\r\n */\r\n public handleGuideTextChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.orderUploadGuideText = event.target.value);\r\n\r\n public render(): JSX.Element | null {\r\n const { orderUploadGuideText } = this.props.config;\r\n const guideText = orderUploadGuideText && (\r\n \r\n );\r\n\r\n const viewProps: IEveQuickOrderViewProps = {\r\n ...this.props,\r\n handleUploadedItems: this._handleUploadedItems,\r\n quickOrderTable: this._renderTable(),\r\n quickOrderHeader: this._renderHeading(),\r\n quickOrderWrapper: {\r\n className: classNames('eve-quick-order'),\r\n tag: 'div',\r\n moduleProps: this.props\r\n },\r\n orderUploadWrapper: {\r\n tag: 'div',\r\n className: 'qo-order-upload-wrapper'\r\n },\r\n guideText: guideText\r\n };\r\n return this.props.renderView(viewProps);\r\n }\r\n}\r\n\r\nexport default EveQuickOrder;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\nimport { IEveQuickOrderViewProps } from './eve-quick-order';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\n\r\nexport default (props: IEveQuickOrderViewProps) => {\r\n const {\r\n quickOrderHeader,\r\n quickOrderTable,\r\n quickOrderWrapper,\r\n orderUploadWrapper,\r\n guideText,\r\n handleUploadedItems: onUploadItems,\r\n slots: { orderUpload }\r\n } = props;\r\n\r\n const _renderGuide = (): JSX.Element | null => {\r\n const {\r\n config: { orderUploadHelpLink, orderUploadHelpLinkDisplayText }\r\n } = props;\r\n const className = 'eve-quick-order-order-upload__guide';\r\n return (\r\n
\r\n
{guideText}
\r\n {orderUploadHelpLink && (\r\n \r\n )}\r\n
\r\n );\r\n };\r\n\r\n return (\r\n \r\n {quickOrderHeader}\r\n {quickOrderTable}\r\n \r\n
\r\n
{_renderGuide()}
\r\n
\r\n {orderUpload && React.cloneElement(orderUpload[0] as React.ReactElement, { onUploadItems })}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IComponent, IComponentProps, ICoreContext, msdyn365Commerce } from '@msdyn365-commerce/core';\r\n// import { IInvoiceErrorState, IPayInvoiceResources, PayInvoiceComponent } from '@msdyn365-commerce-modules/invoice';\r\nimport { /*IInvoiceErrorState,*/ IPayInvoiceResources /*, PayInvoiceComponent*/ } from '@msdyn365-commerce-modules/invoice';\r\nimport React from 'react';\r\n\r\nimport { formatShortDate } from '../gdn-invoice-details';\r\n// import { InvoiceDetailsModel } from '../helpers/invoice-data';\r\nimport { IGetGdnInvoiceDetailsResponse } from '../../../actions/DataServiceEntities.g';\r\n\r\nexport interface IInvoiceDetailsHeaderData {\r\n // invoiceDetails: InvoiceDetailsModel;\r\n gdnInvoiceDetails: IGetGdnInvoiceDetailsResponse;\r\n}\r\n\r\nexport interface IInvoiceDetailsHeaderResources extends IPayInvoiceResources {\r\n custNumberLabel: string;\r\n salesOrderNumLabel: string;\r\n purchaseOrderNumLabel: string;\r\n shipToLabel: string;\r\n shipViaLabel: string;\r\n invoiceDateLabel: string;\r\n orderDateLabel: string;\r\n invoiceIdLabel: string;\r\n}\r\n\r\nexport interface IInvoiceDetailsHeaderProps extends IComponentProps {\r\n context: ICoreContext;\r\n className: string;\r\n resources: IInvoiceDetailsHeaderResources;\r\n // onError?(errorState: IInvoiceErrorState, reference?: React.RefObject): void;\r\n}\r\n\r\nexport interface IInvoiceDetailsHeaderComponent extends IComponent {}\r\n\r\nconst InvoiceDetailsHeader: React.FC = (props: IInvoiceDetailsHeaderProps): JSX.Element => {\r\n const {\r\n className,\r\n data: { /*invoiceDetails,*/ gdnInvoiceDetails },\r\n resources\r\n // onError\r\n } = props;\r\n\r\n const {\r\n custNumberLabel,\r\n salesOrderNumLabel,\r\n purchaseOrderNumLabel,\r\n shipToLabel,\r\n shipViaLabel,\r\n invoiceDateLabel,\r\n orderDateLabel\r\n } = resources;\r\n\r\n const invoiceNumberText = resources.invoiceIdLabel.replace('{0}', gdnInvoiceDetails.InvoiceDetails?.InvoiceNumber || '');\r\n const invoiceInfoContainerClassName = `${className}__invoice-info-container`;\r\n const orderInfoContainerClassName = `${invoiceInfoContainerClassName}__order-info-container`;\r\n const orderInfoClassName = `${orderInfoContainerClassName}__order-info`;\r\n const orderMainInfoClassName = `${orderInfoClassName}__main-info`;\r\n const actionsClassName = `${className}__actions`;\r\n const amountSummaryClassName = `${invoiceInfoContainerClassName}__amount-summary`;\r\n const invoiceDate = formatShortDate(props.context, gdnInvoiceDetails.InvoiceDetails?.InvoiceDate);\r\n const orderDate = formatShortDate(props.context, gdnInvoiceDetails.InvoiceDetails?.OrderDate);\r\n // const canPayInvoice = !!gdnInvoiceDetails.InvoiceDetails?.InvoiceAmountMst && gdnInvoiceDetails.InvoiceDetails?.InvoiceAmountMst > 0;\r\n // TODO: Look into why this is not used on invoice\r\n // const canPayInvoice = !!gdnInvoiceDetails.InvoiceDetails?.AmountDue && gdnInvoiceDetails.InvoiceDetails?.AmountDue > 0;\r\n\r\n return (\r\n
\r\n
{invoiceNumberText}
\r\n
\r\n
\r\n
{custNumberLabel}
\r\n
{`${gdnInvoiceDetails?.InvoiceDetails?.CustomerAccount}`}
\r\n
\r\n
\r\n
{salesOrderNumLabel}
\r\n
{`${gdnInvoiceDetails.InvoiceDetails?.SalesOrderNumber}`}
\r\n
\r\n
\r\n
{purchaseOrderNumLabel}
\r\n
{`${gdnInvoiceDetails.InvoiceDetails?.PoNumber}`}
\r\n
\r\n {gdnInvoiceDetails.InvoiceDetails?.DeliveryAddress && (\r\n
\r\n
{shipToLabel}
\r\n
\r\n {`${gdnInvoiceDetails.InvoiceDetails?.DeliveryLocation}`}\r\n
\r\n
{gdnInvoiceDetails.InvoiceDetails?.DeliveryAddress}
\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {gdnInvoiceDetails.InvoiceDetails?.InvoiceLocation}\r\n
\r\n
\r\n
{gdnInvoiceDetails.InvoiceDetails?.InvoiceAddress}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
{`${invoiceDateLabel} ${invoiceDate}`}
\r\n
\r\n {`${shipViaLabel} ${gdnInvoiceDetails.InvoiceDetails?.ShipVia}`}\r\n
\r\n
{`${orderDateLabel} ${orderDate}`}
\r\n
\r\n
\r\n
\r\n {/* */}\r\n
\r\n window.print()} />\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport const InvoiceDetailsHeaderComponent: React.FunctionComponent = msdyn365Commerce.createComponent<\r\n // @ts-expect-error\r\n IInvoiceDetailsHeaderComponent\r\n>('InvoiceDetailsHeaderComponent', { component: InvoiceDetailsHeader });\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IComponent, IComponentProps, ICoreContext, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { ArrayExtensions, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport classnames from 'classnames';\r\nimport React from 'react';\r\n\r\nimport { IGetGdnInvoiceDetailsResponse } from '../../../actions/DataServiceEntities.g';\r\nimport { formatShortDate, formatAmount } from '../gdn-invoice-details';\r\n\r\nexport interface IInvoiceDetailsPaymentDetailsData {\r\n gdnInvoiceDetails: IGetGdnInvoiceDetailsResponse;\r\n}\r\n\r\nexport interface IInvoiceDetailsPaymentDetailsResources {\r\n detachText: string;\r\n billToSummaryLabel: string;\r\n invoiceSummaryLabel: string;\r\n orderSummaryLabel: string;\r\n totalPiecesSummaryLabel: string;\r\n termsSummaryLabel: string;\r\n invoiceAmountDueText: string;\r\n invoicePaymentDueDateText: string;\r\n invoicePaymentSubtotal: string;\r\n invoicePaymentTax: string;\r\n invoicePaymentInvoiceTotal: string;\r\n}\r\n\r\nexport interface IInvoiceDetailsPaymentDetailsProps extends IComponentProps {\r\n context: ICoreContext;\r\n className: string;\r\n currencyCode: string;\r\n resources: IInvoiceDetailsPaymentDetailsResources;\r\n}\r\n\r\nexport interface IInvoiceDetailsPaymentDetailsComponent extends IComponent {}\r\n\r\ninterface IInvoicePaymentLineProps {\r\n label: string;\r\n value: number;\r\n className: string;\r\n}\r\n\r\nconst InvoiceDetailsPaymentDetails: React.FC = (\r\n props: IInvoiceDetailsPaymentDetailsProps\r\n): JSX.Element | null => {\r\n const {\r\n className,\r\n context,\r\n data: { gdnInvoiceDetails },\r\n resources,\r\n currencyCode\r\n } = props;\r\n\r\n const {\r\n detachText,\r\n billToSummaryLabel,\r\n invoiceSummaryLabel,\r\n orderSummaryLabel,\r\n totalPiecesSummaryLabel,\r\n termsSummaryLabel,\r\n invoicePaymentInvoiceTotal,\r\n invoiceAmountDueText,\r\n invoicePaymentDueDateText\r\n } = resources;\r\n\r\n const invoiceDetails = gdnInvoiceDetails.InvoiceDetails;\r\n\r\n const lineClassName = `${className}__line`;\r\n\r\n const lines: IInvoicePaymentLineProps[] = [];\r\n if (!ObjectExtensions.isNullOrUndefined(invoiceDetails?.SubTotal)) {\r\n lines.push({\r\n label: resources.invoicePaymentSubtotal,\r\n value: invoiceDetails?.SubTotal || 0,\r\n className: `${lineClassName}-subtotal`\r\n });\r\n }\r\n if (!ObjectExtensions.isNullOrUndefined(invoiceDetails?.Tax)) {\r\n lines.push({\r\n label: resources.invoicePaymentTax,\r\n value: invoiceDetails?.Tax || 0,\r\n className: `${lineClassName}-total-tax`\r\n });\r\n }\r\n\r\n if (!ArrayExtensions.hasElements(lines)) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
{detachText}
\r\n {lines.map(line => {\r\n return (\r\n
\r\n
{line.label}
\r\n
\r\n {props.context.cultureFormatter.formatCurrency(line.value, currencyCode)}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n
{`${billToSummaryLabel} ${invoiceDetails?.BillToAccount}`}
\r\n
{`${invoiceSummaryLabel} ${invoiceDetails?.InvoiceNumber}`}
\r\n
{`${orderSummaryLabel} ${invoiceDetails?.SalesOrderNumber}`}
\r\n
{`${totalPiecesSummaryLabel} ${invoiceDetails?.TotalPieces}`}
\r\n
\r\n {`${invoicePaymentInvoiceTotal} ${formatAmount(context, invoiceDetails?.InvoiceAmount, currencyCode)}`}\r\n
\r\n
\r\n
\r\n
\r\n
{termsSummaryLabel}
\r\n
{invoiceDetails?.Terms}
\r\n
\r\n
\r\n
\r\n {/* {`${invoiceAmountDueText} ${formatAmount(context, invoiceDetails?.InvoiceAmountMst, currencyCode)}`} */}\r\n {`${invoiceAmountDueText} ${formatAmount(context, invoiceDetails?.AmountDue, currencyCode)}`}\r\n
\r\n
\r\n
{invoicePaymentDueDateText}
\r\n
\r\n {formatShortDate(context, invoiceDetails?.DueDate)}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport const InvoiceDetailsPaymentDetailsComponent: React.FunctionComponent = msdyn365Commerce.createComponent<\r\n // @ts-expect-error\r\n IInvoiceDetailsPaymentDetailsComponent\r\n>('InvoiceDetailsPaymentDetailsComponent', { component: InvoiceDetailsPaymentDetails });\r\n","import { getProductPageUrlSync, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ICoreContext } from '@msdyn365-commerce/core';\r\nimport React from 'react';\r\nimport Table from 'reactstrap/lib/Table';\r\nimport { IGdnFreightDetails, IGdnInvoiceDetailsResponseEntity, IGdnInvoiceLineEntity } from '../../../actions/DataServiceEntities.g';\r\nimport { formatAmount } from '../gdn-invoice-details';\r\n\r\nexport interface IProductsTableComponentResources {\r\n itemIdHeading: string;\r\n descriptionHeading: string;\r\n quantityHeading: string;\r\n listPriceHeading: string;\r\n unitPriceHeading: string;\r\n totalHeading: string;\r\n custItemNumLabel: string;\r\n}\r\n\r\ninterface IProductsTableComponentProps {\r\n className: string;\r\n currencyCode: string;\r\n invoiceDetails: IGdnInvoiceDetailsResponseEntity | undefined;\r\n invoiceLines: IGdnInvoiceLineEntity[] | undefined;\r\n ctx: ICoreContext;\r\n resources: IProductsTableComponentResources;\r\n}\r\n\r\nexport const InvoiceDetailsProductsTableComponent: React.FC = props => {\r\n const { className, currencyCode, ctx, invoiceDetails, invoiceLines, resources } = props;\r\n const {\r\n itemIdHeading,\r\n descriptionHeading,\r\n quantityHeading,\r\n listPriceHeading,\r\n unitPriceHeading,\r\n totalHeading,\r\n custItemNumLabel\r\n } = resources;\r\n\r\n const freightList = invoiceDetails?.FreightList;\r\n const combinedFreightList: IGdnFreightDetails[] = [];\r\n if (freightList) {\r\n const reducedFreightList = freightList.reduce((acc, fl) => {\r\n const { FreightAmount, FreightCode, FreightDescription } = fl;\r\n\r\n if (FreightCode && FreightAmount) {\r\n if (!acc[FreightCode]) {\r\n acc[FreightCode] = [];\r\n }\r\n if (acc[FreightCode].length === 0) {\r\n acc[FreightCode].push({\r\n FreightAmount: FreightAmount,\r\n FreightCode: FreightCode,\r\n FreightDescription: FreightDescription\r\n });\r\n } else {\r\n acc[FreightCode][0].FreightAmount += FreightAmount;\r\n }\r\n }\r\n return acc;\r\n }, {});\r\n\r\n for (const code in reducedFreightList) {\r\n if (Object.prototype.hasOwnProperty.call(reducedFreightList, code)) {\r\n const details = reducedFreightList[code];\r\n combinedFreightList.push(...details);\r\n }\r\n }\r\n }\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {invoiceLines &&\r\n invoiceLines.map((line, index) => {\r\n let productUrl = '';\r\n if (\r\n !ObjectExtensions.isNullOrUndefined(line?.Description) &&\r\n !ObjectExtensions.isNullOrUndefined(line?.ProductId)\r\n ) {\r\n productUrl = getProductPageUrlSync(line?.Description || '', line?.ProductId || 0, ctx.actionContext);\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n\r\n {invoiceLines &&\r\n combinedFreightList &&\r\n combinedFreightList.map((line, index) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n
{itemIdHeading}{descriptionHeading}{quantityHeading}{listPriceHeading}{unitPriceHeading}{totalHeading}
{index + 1}\r\n \r\n {line.ItemNumber}\r\n {line.CustItemNumber && (\r\n <>\r\n
\r\n {`${custItemNumLabel} ${line.CustItemNumber}`}\r\n \r\n )}\r\n
\r\n
\r\n {line.Description}\r\n {line.Quantity}\r\n {formatAmount(ctx, line.ListPrice, currencyCode)}\r\n \r\n {formatAmount(ctx, line.UnitPrice, currencyCode)}\r\n {formatAmount(ctx, line.Total, currencyCode)}
{invoiceLines.length + index + 1}{line.FreightCode}{line.FreightDescription}\r\n {formatAmount(ctx, line.FreightAmount, currencyCode)}\r\n
\r\n
\r\n );\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { ICoreContext, IDateFormatOptions /*, getUrlSync*/ } from '@msdyn365-commerce/core';\r\n// import { SalesInvoiceLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { IInvoiceErrorState /*, InvoiceErrorComponent*/ } from '@msdyn365-commerce-modules/invoice';\r\n// import { getSimpleProductsAction, ProductInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { InvoiceDetailsHeaderComponent } from './components/gdn-invoice-details-header';\r\nimport { InvoiceDetailsPaymentDetailsComponent } from './components/gdn-invoice-details-payment-summary';\r\nimport { InvoiceDetailsProductsTableComponent, IProductsTableComponentResources } from './components/gdn-invoice-details-products-table';\r\n// import { InvoiceDetailsModel } from './helpers/invoice-data';\r\nimport { IGdnInvoiceDetailsData } from './gdn-invoice-details.data';\r\nimport { IGdnInvoiceDetailsProps } from './gdn-invoice-details.props.autogenerated';\r\nimport { IGetGdnInvoiceDetailsResponse } from '../../actions/DataServiceEntities.g';\r\n\r\nexport interface IInvoiceDetailsViewState {\r\n // invoiceDetails?: InvoiceDetailsModel;\r\n // payInvoiceErrorModalOpen?: boolean;\r\n errorState?: IInvoiceErrorState;\r\n gdnInvoiceDetails?: IGetGdnInvoiceDetailsResponse;\r\n}\r\n\r\nexport interface IInvoiceDetailsViewProps extends IGdnInvoiceDetailsProps {\r\n moduleProps: IModuleProps;\r\n header: JSX.Element;\r\n products: JSX.Element;\r\n paymentDetails: JSX.Element;\r\n shipmentDetails: JSX.Element;\r\n // payInvoiceError?: JSX.Element;\r\n invoiceDetailsError?: JSX.Element;\r\n}\r\n\r\nexport const formatShortDate = (context: ICoreContext, date: Date | undefined) => {\r\n if (date === undefined) {\r\n return '';\r\n }\r\n const dateOptions: IDateFormatOptions = { year: 'numeric', month: 'numeric', day: 'numeric' };\r\n const newDate = new Date(date);\r\n // Convert time to UTC time in order to match generated invoices\r\n newDate.setTime(newDate.getTime() + newDate.getTimezoneOffset() * 60000);\r\n return context.cultureFormatter.formatDate(newDate.toUTCString(), dateOptions);\r\n};\r\n\r\nexport const formatAmount = (context: ICoreContext, amount: number | undefined, currencyCode: string | undefined) => {\r\n if (amount === undefined) {\r\n return '';\r\n }\r\n return context.cultureFormatter.formatCurrency(amount, currencyCode);\r\n};\r\n\r\nconst CURRENCY_CODE = 'USD';\r\n\r\n/**\r\n * InvoiceDetails component.\r\n * @extends {React.PureComponent>}\r\n */\r\nclass InvoiceDetails extends React.PureComponent, IInvoiceDetailsViewState> {\r\n private static readonly _className: string = 'msc-invoice-details';\r\n\r\n public constructor(props: IGdnInvoiceDetailsProps) {\r\n super(props);\r\n\r\n this.state = { errorState: { errorMessage: '', otherError: '' } };\r\n // this._onAddToCartFailed = this._onAddToCartFailed.bind(this);\r\n // this._setPayInvoiceErrorModalClose = this._setPayInvoiceErrorModalClose.bind(this);\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n // const invoice = await this.props.data.invoice;\r\n // const invoiceDetails = await this.props.data.invoiceDetails;\r\n const gdnInvoiceDetails = await this.props.data.gdnInvoiceDetails;\r\n\r\n // const products = await this._getProducts(invoiceDetails.SalesInvoiceLine, invoiceDetails.ChannelId);\r\n\r\n // const invoiceDetailsModel = new InvoiceDetailsModel(invoice, invoiceDetails, products);\r\n this.setState({\r\n // invoiceDetails: invoiceDetailsModel,\r\n // payInvoiceErrorModalOpen: false,\r\n errorState: { errorMessage: '', otherError: '' },\r\n gdnInvoiceDetails: gdnInvoiceDetails\r\n });\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n if (!this.state.gdnInvoiceDetails /* && !this.state.invoiceDetails */) {\r\n return null;\r\n }\r\n\r\n const header = this._renderHeader();\r\n const products = this._renderProducts();\r\n const paymentDetails = this._renderPaymentDetails();\r\n // const payInvoiceError = this._renderInvoiceErrors();\r\n const shipmentDetails = this._renderShipmentInformation();\r\n const invoiceDetailsError = !this.state.gdnInvoiceDetails?.ErrorMessage ? (\r\n undefined\r\n ) : (\r\n
{this.props.resources.noInvoiceDetailsFoundErrorMessage}
\r\n );\r\n\r\n const props: IInvoiceDetailsViewProps = {\r\n ...(this.props as IGdnInvoiceDetailsProps),\r\n moduleProps: {\r\n moduleProps: this.props,\r\n className: InvoiceDetails._className\r\n },\r\n header,\r\n products,\r\n paymentDetails,\r\n shipmentDetails,\r\n // payInvoiceError,\r\n invoiceDetailsError\r\n };\r\n\r\n return this.props.renderView(props);\r\n }\r\n\r\n // private async _getProducts(invoiceLines: SalesInvoiceLine[] = [], channelId?: number): Promise {\r\n // const productInputs = invoiceLines\r\n // .filter(product => product.ProductId)\r\n // .map(\r\n // product =>\r\n // new ProductInput(\r\n // product.ProductId!,\r\n // this.props.context.request.apiSettings,\r\n // channelId,\r\n // undefined,\r\n // this.props.context.actionContext.requestContext\r\n // )\r\n // );\r\n // return getSimpleProductsAction(productInputs, this.props.context.actionContext);\r\n // }\r\n\r\n private _renderHeader(): JSX.Element {\r\n // const invoiceDetails = this.state.invoiceDetails!;\r\n const gdnInvoiceDetails = this.state.gdnInvoiceDetails!;\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _renderProducts(): JSX.Element {\r\n const {\r\n itemIdHeading,\r\n descriptionHeading,\r\n quantityHeading,\r\n listPriceHeading,\r\n unitPriceHeading,\r\n totalHeading,\r\n custItemNumLabel\r\n } = this.props.resources;\r\n const gdnInvoiceDetails = this.state.gdnInvoiceDetails!;\r\n const productsTableResources: IProductsTableComponentResources = {\r\n itemIdHeading: itemIdHeading,\r\n descriptionHeading: descriptionHeading,\r\n quantityHeading: quantityHeading,\r\n listPriceHeading: listPriceHeading,\r\n unitPriceHeading: unitPriceHeading,\r\n totalHeading: totalHeading,\r\n custItemNumLabel: custItemNumLabel\r\n };\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _renderPaymentDetails(): JSX.Element {\r\n // const invoiceDetails = this.state.invoiceDetails!;\r\n const gdnInvoiceDetails = this.state.gdnInvoiceDetails!;\r\n return (\r\n <>\r\n \r\n \r\n );\r\n }\r\n\r\n private _renderShipmentInformation(): JSX.Element {\r\n const {\r\n shippingInformationHeadingText,\r\n containerIdLabelText,\r\n weightLabelText,\r\n shippingCarrierLabelText,\r\n trackingLabel,\r\n quantityHeading\r\n } = this.props.resources;\r\n const gdnInvoiceDetails = this.state.gdnInvoiceDetails!;\r\n const shippingInformation = gdnInvoiceDetails.ShippingContainerInformation;\r\n\r\n if (!shippingInformation || shippingInformation.length === 0) {\r\n return <>;\r\n }\r\n\r\n return (\r\n <>\r\n
{shippingInformationHeadingText}
\r\n {shippingInformation.map((c, index) => {\r\n return (\r\n
\r\n
\r\n \r\n {containerIdLabelText}\r\n {c.ContainerId}\r\n \r\n \r\n {weightLabelText}\r\n {c.Weight}\r\n \r\n \r\n {shippingCarrierLabelText}\r\n {c.ShippingCarrier}\r\n \r\n \r\n {trackingLabel}\r\n {c.TrackingNumber}\r\n \r\n
\r\n
\r\n {c.ContainerLinesList?.map((cLines, index) => (\r\n \r\n {`${cLines.ItemId} - ${quantityHeading}: ${cLines.Quantity}`}\r\n
\r\n ))}\r\n
\r\n
\r\n );\r\n })}\r\n \r\n );\r\n }\r\n\r\n // private _onAddToCartFailed(newErrorState: IInvoiceErrorState): void {\r\n // const errorState = { ...newErrorState };\r\n // errorState.errorHost = 'ADDINVOICETOCART';\r\n\r\n // // check for errorcode and otherError which contains the LocalizedMessage from API\r\n // if (\r\n // errorState &&\r\n // errorState.errorCode === 'Microsoft_Dynamics_Commerce_Runtime_InvoiceLineAlreadyExistsInCart' &&\r\n // errorState.otherError\r\n // ) {\r\n // this.setState({ errorState: errorState });\r\n // }\r\n\r\n // this.setState({ payInvoiceErrorModalOpen: true });\r\n // }\r\n\r\n // private _setPayInvoiceErrorModalClose(): void {\r\n // this.setState({ payInvoiceErrorModalOpen: false });\r\n // }\r\n\r\n // private _renderInvoiceErrors(): JSX.Element {\r\n // const {\r\n // resources: {\r\n // payInvoiceErrorDialogHeader,\r\n // payInvoiceErrorDialogBodyErrorTitle,\r\n // payInvoiceErrorDialogBodyErrorDescription,\r\n // payInvoiceErrorDialogFooterGoToCartButtonText,\r\n // payInvoiceErrorDialogFooterCancelButtonText\r\n // }\r\n // } = this.props;\r\n\r\n // const cartUrl = getUrlSync('cart', this.props.context.actionContext) || '';\r\n\r\n // const errorClassName = `${InvoiceDetails._className}__errors`;\r\n\r\n // return (\r\n // \r\n // );\r\n // }\r\n}\r\n\r\nexport default InvoiceDetails;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Module } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IInvoiceDetailsViewProps } from './gdn-invoice-details';\r\n\r\nexport const InvoiceDetailsView: React.FC = props => {\r\n const { header, products, paymentDetails, shipmentDetails, /*payInvoiceError,*/ invoiceDetailsError } = props;\r\n\r\n return (\r\n \r\n
\r\n {invoiceDetailsError ? (\r\n invoiceDetailsError\r\n ) : (\r\n <>\r\n {header}\r\n {products}\r\n {paymentDetails}\r\n
\r\n {shipmentDetails}\r\n {/* {payInvoiceError} */}\r\n \r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default InvoiceDetailsView;\r\n","import React from 'react';\r\nimport Table from 'reactstrap/lib/Table';\r\nimport classnames from 'classnames';\r\nimport { ListGroup, ListGroupItem, ListGroupItemHeading, ListGroupItemText } from 'reactstrap';\r\nimport { IAriServiceAssemblyPartProductCombinations } from '../model-viewer';\r\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport { CommercePropertyValueEnum } from '../../../modules/allowable-freight/utils/CommercePropertyValueEnum';\r\nimport getExtensionPropertyValueByKey from '../../../utils/getExtensionPropertyValueByKey';\r\n\r\ninterface IAriPArtsListTableProps {\r\n parts: IAriServiceAssemblyPartProductCombinations[];\r\n tableHeadings: string[];\r\n baseClassName: String;\r\n goToId(id: string): void;\r\n addPartToCart(part: ProductSearchResult, partId: string): void;\r\n partIdPrefix: string;\r\n selectedRow: string | undefined;\r\n isAuthenticated: boolean;\r\n requiresAuthentication: boolean;\r\n loginToViewPricingText: string;\r\n unavailableText: string;\r\n addToCartText: string;\r\n signInUrl: string;\r\n isMobile: boolean;\r\n isDrawerOpen: boolean;\r\n closePartDrawer(): void;\r\n priceFormatter: (price: string | number, currencyCode?: string | undefined) => string;\r\n mfrCode: string;\r\n}\r\n\r\n/**\r\n * Component to display a list of parts\r\n * @param props props\r\n */\r\nexport const AriPartsListTableComponent: React.FC = props => {\r\n const {\r\n tableHeadings,\r\n parts,\r\n baseClassName,\r\n goToId,\r\n addPartToCart,\r\n partIdPrefix,\r\n selectedRow,\r\n isAuthenticated,\r\n requiresAuthentication,\r\n loginToViewPricingText,\r\n signInUrl,\r\n isMobile,\r\n isDrawerOpen,\r\n unavailableText,\r\n addToCartText,\r\n closePartDrawer,\r\n priceFormatter\r\n } = props;\r\n\r\n const [yPosition, setYPosition] = React.useState(0);\r\n React.useEffect(() => {\r\n //Scroll event handling\r\n window.removeEventListener('scroll', () => setYPosition(window.pageYOffset));\r\n window.addEventListener('scroll', () => setYPosition(window.pageYOffset), { passive: true });\r\n window.removeEventListener('scroll', () => setYPosition(window.pageYOffset));\r\n return;\r\n });\r\n\r\n const scrollDownClickHandler = (id: string) => {\r\n const element = document.getElementById(id);\r\n return window.scrollTo(0, element ? element.getBoundingClientRect().top : 0);\r\n };\r\n const selectedPartIdName = `${baseClassName}__part-selection-popover`;\r\n return (\r\n <>\r\n
\r\n {!isMobile ? (\r\n \r\n \r\n \r\n {tableHeadings.map(th => (\r\n \r\n ))}\r\n \r\n \r\n \r\n {parts &&\r\n parts.map(part => {\r\n const product = part.Product;\r\n const partId = product && product.ItemId;\r\n if (product?.ItemId === 'HOM538938002') {\r\n debugger;\r\n }\r\n const description = (product && product.Name) || part.Description;\r\n // TODO: Don't use hardcoded key\r\n const currentInvString =\r\n product &&\r\n getExtensionPropertyValueByKey(\r\n product.ExtensionProperties,\r\n 'inventory',\r\n CommercePropertyValueEnum.string\r\n );\r\n let currentInventory = parseInt(currentInvString as string, 10);\r\n if (isNaN(currentInventory)) {\r\n currentInventory = 0;\r\n }\r\n const oosUpperBound = part.Product?.oosUpperBoundLimit || 0;\r\n const canAddToCart = part.Product && currentInventory > oosUpperBound && part.Product?.isEligible;\r\n return (\r\n \r\n \r\n \r\n \r\n {isAuthenticated || !requiresAuthentication ? (\r\n \r\n \r\n \r\n \r\n {canAddToCart ? (\r\n <>\r\n \r\n \r\n \r\n ) : (\r\n \r\n )}\r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n })}\r\n \r\n
{th}
\r\n \r\n {partId || 'N/A'}{description}{currentInventory}{priceFormatter(part.Product?.BasePrice || 0)}{priceFormatter(part.Product?.Price || 0)}\r\n \r\n \r\n {' '}\r\n addPartToCart(part.Product!, part.PartId!)}\r\n >\r\n {addToCartText}\r\n \r\n

\r\n
\r\n {' '}\r\n {currentInventory}{priceFormatter(part.Product?.BasePrice || 0)}\r\n {loginToViewPricingText}\r\n
\r\n ) : (\r\n \r\n {parts &&\r\n parts.map(part => (\r\n \r\n \r\n \r\n {`${tableHeadings[0]}: `}\r\n {part.Tag}\r\n \r\n \r\n {`${tableHeadings[1]}: `}\r\n {`${props.mfrCode}${part.Sku}`}\r\n \r\n \r\n \r\n \r\n {`${tableHeadings[2]}: ${part.Description}`}\r\n \r\n \r\n \r\n {isAuthenticated || requiresAuthentication ? (\r\n
\r\n {`${\r\n tableHeadings[4]\r\n }: ${priceFormatter(part.Product?.Price || 0)}`}\r\n {`${\r\n tableHeadings[3]\r\n }: ${part.Qty === '' ? 0 : parseInt(part.Qty!, 10)}`}\r\n
\r\n ) : (\r\n {loginToViewPricingText}\r\n )}\r\n
\r\n \r\n {isAuthenticated || requiresAuthentication ? (\r\n
\r\n {part.Product ? (\r\n
\r\n \r\n\r\n addPartToCart(part.Product!, part.PartId!)}\r\n >\r\n {addToCartText}\r\n \r\n

\r\n
\r\n ) : (\r\n \r\n )}\r\n
\r\n ) : (\r\n ''\r\n )}\r\n
\r\n
\r\n ))}\r\n
\r\n )}\r\n {yPosition <= 0 && (\r\n
scrollDownClickHandler(`${baseClassName}__list`)}>\r\n scroll down\r\n
\r\n )}\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n {tableHeadings.map(th => (\r\n \r\n ))}\r\n \r\n \r\n \r\n
{th}
\r\n
\r\n X\r\n
\r\n
\r\n \r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\n\r\nexport interface IReportsExportCardProps {\r\n rowText: string;\r\n buttonText: string;\r\n className: string;\r\n onClick: (rowText: string) => Promise;\r\n isButtonDisabled: boolean;\r\n dropdown?: React.ReactElement;\r\n}\r\n\r\nexport const RenderCard: React.FC = ({ rowText, buttonText, className, onClick, isButtonDisabled, dropdown }) => {\r\n return (\r\n <>\r\n
{rowText}
\r\n <>\r\n {dropdown ?
{dropdown}
: null}\r\n
\r\n onClick(rowText)}\r\n type={'button'}\r\n >\r\n {buttonText}\r\n \r\n
\r\n \r\n \r\n );\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport MultiSelect from 'react-multi-select-component';\r\nimport ModalBody from 'reactstrap/lib/ModalBody';\r\nimport * as React from 'react';\r\nimport { IModuleProps, Modal, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\n\r\nimport { IReportsExportData } from './reports-export.data';\r\nimport { IReportsExportProps } from './reports-export.props.autogenerated';\r\nimport { getPriceByManufacturerAsync, getSalesReportAsync } from '../../actions/DataActionExtension.g';\r\nimport { IManufacturerCodeResponseEntity } from '../../actions/DataServiceEntities.g';\r\n\r\nimport { RenderCard } from './components/render-card';\r\n\r\nexport interface IReportsExportViewProps extends IReportsExportProps {\r\n moduleProps: IModuleProps;\r\n heading?: React.ReactNode;\r\n reportsList: React.ReactElement;\r\n modal: React.ReactNode;\r\n}\r\n\r\nexport interface IReportsExportState {\r\n priceByMfrSelectedMfrMultiSelect: Option[];\r\n priceByMfrSelectedMfrCodes: string[];\r\n salesByMfrSelectedMfrMultiSelect: Option[];\r\n salesByMfrSelectedMfrCodes: string[];\r\n salesByPartSelectedPartMultiSelect: Option[];\r\n salesByPartSelectedPartCodes: string[];\r\n salesByPartSelectedSearchType: string;\r\n isModalActive: boolean;\r\n modalMessage: string;\r\n isModalMessageSuccess: boolean;\r\n}\r\n\r\nexport interface Option {\r\n label: string;\r\n value: string;\r\n key?: string;\r\n disabled?: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * ReportsExport component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass ReportsExport extends React.PureComponent, IReportsExportState> {\r\n constructor(props: IReportsExportProps) {\r\n super(props);\r\n\r\n this._setManufacturerCodeState = this._setManufacturerCodeState.bind(this);\r\n this._setSalesByPartSearchTypeState = this._setSalesByPartSearchTypeState.bind(this);\r\n this._handleButtonClick = this._handleButtonClick.bind(this);\r\n\r\n this.state = {\r\n priceByMfrSelectedMfrMultiSelect: [],\r\n priceByMfrSelectedMfrCodes: [],\r\n salesByMfrSelectedMfrMultiSelect: [],\r\n salesByMfrSelectedMfrCodes: [],\r\n salesByPartSelectedPartMultiSelect: [],\r\n salesByPartSelectedPartCodes: [],\r\n salesByPartSelectedSearchType: '',\r\n isModalActive: false,\r\n modalMessage: '',\r\n isModalMessageSuccess: false\r\n };\r\n }\r\n\r\n /**\r\n * Gets manufacturer codes from data\r\n * @private\r\n */\r\n private _getManufacturerCodeList = (): IManufacturerCodeResponseEntity[] => {\r\n const codesResults = this.props.data.manufacturerCodes.result ? this.props.data.manufacturerCodes.result : [];\r\n // @ts-ignore\r\n return codesResults.manufacturerCodes;\r\n };\r\n\r\n private _getPartList = () => {\r\n const partList = [\r\n { PartNo: 'Organization', Description: 'Org' },\r\n { PartNo: 'Location', Description: 'Loc' }\r\n ];\r\n // { PartNo: 'ITW00786', Description: '.300x2-1/2 Dr Pin 1516 100 pk' },\r\n // { PartNo: 'ITW00803', Description: '.300x1-1/2 Pin w/washer 100 p' }\r\n return partList;\r\n };\r\n\r\n private _setSalesByPartSearchTypeState(e: React.ChangeEvent) {\r\n const target = e.target as HTMLSelectElement;\r\n\r\n this.setState({ salesByPartSelectedSearchType: target.value });\r\n }\r\n\r\n private _setManufacturerCodeState(selectedMfrCodes: Option[], reportIdentifier: string) {\r\n const { priceFilesReportText, salesByMfrReportText, salesByPartReportText } = this.props.resources;\r\n const newSelectedMfrCodeList: string[] = [];\r\n selectedMfrCodes.map(code => {\r\n newSelectedMfrCodeList.push(code.value);\r\n });\r\n switch (reportIdentifier) {\r\n case priceFilesReportText:\r\n this.setState({ priceByMfrSelectedMfrMultiSelect: selectedMfrCodes, priceByMfrSelectedMfrCodes: newSelectedMfrCodeList });\r\n break;\r\n case salesByMfrReportText:\r\n this.setState({ salesByMfrSelectedMfrMultiSelect: selectedMfrCodes, salesByMfrSelectedMfrCodes: newSelectedMfrCodeList });\r\n break;\r\n case salesByPartReportText:\r\n this.setState({\r\n salesByPartSelectedPartMultiSelect: selectedMfrCodes,\r\n salesByPartSelectedPartCodes: newSelectedMfrCodeList\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n private _clearSelectedManufacturers(reportIdentifier: string) {\r\n const { priceFilesReportText, salesByMfrReportText, salesByPartReportText } = this.props.resources;\r\n switch (reportIdentifier) {\r\n case priceFilesReportText:\r\n this.setState({ priceByMfrSelectedMfrMultiSelect: [], priceByMfrSelectedMfrCodes: [] });\r\n break;\r\n case salesByMfrReportText:\r\n this.setState({ salesByMfrSelectedMfrMultiSelect: [], salesByMfrSelectedMfrCodes: [] });\r\n break;\r\n case salesByPartReportText:\r\n this.setState({ salesByPartSelectedPartMultiSelect: [], salesByPartSelectedPartCodes: [] });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n private _setMultiSelectRendering(selected: Option[], numOfSelectedManufacturers: string, noSelectedManufacturers: string): string {\r\n let selectedString = numOfSelectedManufacturers;\r\n selected.length\r\n ? (selectedString = selectedString.replace('{0}', `${selected.length}`))\r\n : (selectedString = noSelectedManufacturers);\r\n return selectedString;\r\n }\r\n\r\n private _renderSalesDropdown(): React.ReactElement {\r\n const { organizationDropdownLabel, locationDropdownLabel, pleaseSelectDefaultLabel } = this.props.resources;\r\n const searchTypeList = [organizationDropdownLabel, locationDropdownLabel];\r\n return (\r\n \r\n \r\n {searchTypeList.map(searchType => (\r\n \r\n ))}\r\n \r\n );\r\n }\r\n\r\n private _renderManufacturerDropdown(reportIdentifier: string): React.ReactElement {\r\n const {\r\n numOfSelectedManufacturers,\r\n noSelectedManufacturers,\r\n selectManufacturersLabel,\r\n numOfSelectedParts,\r\n noSelectedParts,\r\n selectPartsLabel,\r\n salesByMfrReportText,\r\n priceFilesReportText\r\n } = this.props.resources;\r\n const needManufacturers = reportIdentifier === salesByMfrReportText || reportIdentifier === priceFilesReportText;\r\n const options: Option[] = [];\r\n let noneSelectedLabel = '';\r\n let numOfSelectedLabel = '';\r\n let selectLabel = '';\r\n\r\n if (needManufacturers) {\r\n noneSelectedLabel = noSelectedManufacturers;\r\n numOfSelectedLabel = numOfSelectedManufacturers;\r\n selectLabel = selectManufacturersLabel;\r\n const mfrCodeList = this._getManufacturerCodeList();\r\n if (mfrCodeList) {\r\n mfrCodeList.map(code => {\r\n if (code.GDNManufacturerCode && code.Description) {\r\n const label = `${code.GDNManufacturerCode} - ${code.Description}`;\r\n const value = code.GDNManufacturerCode;\r\n const optionRow = { label: label, value: value };\r\n options.push(optionRow);\r\n }\r\n });\r\n }\r\n } else {\r\n noneSelectedLabel = noSelectedParts;\r\n numOfSelectedLabel = numOfSelectedParts;\r\n selectLabel = selectPartsLabel;\r\n const partList = this._getPartList();\r\n if (partList) {\r\n partList.map(part => {\r\n if (part.PartNo && part.Description) {\r\n const label = `${part.PartNo}`;\r\n const value = part.PartNo;\r\n const optionRow = { label: label, value: value };\r\n options.push(optionRow);\r\n }\r\n });\r\n }\r\n }\r\n\r\n return (\r\n this._setManufacturerCodeState(selectedCodes, reportIdentifier)}\r\n options={options}\r\n labelledBy={selectLabel}\r\n disableSearch={true}\r\n // shouldToggleOnHover={true}\r\n valueRenderer={selected => this._setMultiSelectRendering(selected, numOfSelectedLabel, noneSelectedLabel)}\r\n />\r\n );\r\n }\r\n\r\n private _getMultiSelectValue(reportIdentifier: string) {\r\n const { priceFilesReportText, salesByMfrReportText, salesByPartReportText } = this.props.resources;\r\n switch (reportIdentifier) {\r\n case priceFilesReportText:\r\n return this.state.priceByMfrSelectedMfrMultiSelect;\r\n case salesByMfrReportText:\r\n return this.state.salesByMfrSelectedMfrMultiSelect;\r\n case salesByPartReportText:\r\n return this.state.salesByPartSelectedPartMultiSelect;\r\n default:\r\n return [];\r\n }\r\n }\r\n\r\n private _toggleModalNotificationActive = () =>\r\n this.setState(prevState => {\r\n return {\r\n isModalActive: !prevState.isModalActive\r\n };\r\n });\r\n\r\n private _renderModal = () => {\r\n const { isModalActive, isModalMessageSuccess, modalMessage } = this.state;\r\n const { requestFailed, requestSuccessFul } = this.props.resources;\r\n return (\r\n \r\n \r\n
\r\n
{isModalMessageSuccess ? requestSuccessFul : requestFailed}
\r\n
\r\n \r\n
\r\n {modalMessage}\r\n \r\n );\r\n };\r\n\r\n private async _handleButtonClick(rowText: string) {\r\n const {\r\n resources: { priceFilesReportText, salesByMfrReportText, salesByPartReportText }\r\n } = this.props;\r\n const { priceByMfrSelectedMfrCodes, salesByPartSelectedSearchType } = this.state;\r\n if (rowText === priceFilesReportText) {\r\n const mfrCodeListString: string = priceByMfrSelectedMfrCodes.join(';');\r\n void getPriceByManufacturerAsync({ callerContext: this.props.context.actionContext }, mfrCodeListString).then(res => {\r\n this._setModalMessageAndToggle(res.PriceByManufacturerMessage || '', res.DidPriceByManufacturerComplete);\r\n if (res.DidPriceByManufacturerComplete) {\r\n this._clearSelectedManufacturers(rowText);\r\n }\r\n });\r\n } else if (rowText === salesByPartReportText) {\r\n try {\r\n const salesReportResult = await getSalesReportAsync(\r\n { callerContext: this.props.context.actionContext },\r\n salesByPartSelectedSearchType\r\n );\r\n this._setModalMessageAndToggle(salesReportResult.SalesReportMessage || '', salesReportResult.DidSalesReportComplete);\r\n this.setState({ salesByPartSelectedSearchType: '' });\r\n\r\n // void getSalesReportAsync({ callerContext: this.props.context.actionContext }, salesByPartSelectedSearchType).then(res => {\r\n // this.setState({\r\n // modalMessage: res.SalesReportMessage || '',\r\n // isModalMessageSuccess: res.DidSalesReportComplete\r\n // });\r\n // this._toggleModalNotificationActive();\r\n // this.setState({ salesByPartSelectedSearchType: '' });\r\n // });\r\n } catch (ex) {\r\n this._setModalMessageAndToggle((ex as Error).message, false);\r\n this.setState({ salesByPartSelectedSearchType: '' });\r\n }\r\n } else if (rowText === salesByMfrReportText) {\r\n // api call\r\n this._clearSelectedManufacturers(rowText);\r\n console.log('Request Sales by Manufacturer Report.');\r\n } else {\r\n console.log('Error');\r\n }\r\n }\r\n\r\n private _setModalMessageAndToggle(message: string, messageSuccess: boolean) {\r\n const { requestSuccessfulMessageText, requestFailedMessageText } = this.props.resources;\r\n this.setState({\r\n modalMessage: `${messageSuccess ? requestSuccessfulMessageText : requestFailedMessageText} ${message}`,\r\n isModalMessageSuccess: messageSuccess\r\n });\r\n this._toggleModalNotificationActive();\r\n }\r\n\r\n private _renderRow() {\r\n const {\r\n resources: { priceFilesReportText, salesByPartReportText, requestReportsBtnText }\r\n } = this.props;\r\n\r\n const rowTextList = [priceFilesReportText, salesByPartReportText];\r\n return (\r\n
\r\n
    \r\n {rowTextList.map((rowText, i) => (\r\n
  • \r\n {rowText === salesByPartReportText ? (\r\n \r\n ) : (\r\n 0 ? false : true}\r\n dropdown={this._renderManufacturerDropdown(rowText)}\r\n />\r\n )}\r\n
  • \r\n ))}\r\n
\r\n
\r\n );\r\n }\r\n\r\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\r\n this.props.config.heading.text = event.target.value;\r\n };\r\n\r\n public render(): JSX.Element | null {\r\n const _className = `eve-reports-export-wrapper`;\r\n const {\r\n config: { className = '', heading }\r\n } = this.props;\r\n const viewProps = {\r\n ...this.props,\r\n moduleProps: {\r\n moduleProps: this.props,\r\n className: classnames(_className, className)\r\n },\r\n className,\r\n AccountOrderTemplatesTile: {\r\n moduleProps: this.props,\r\n className: classnames(`${_className}__heading`, className)\r\n },\r\n heading: heading && heading.text && (\r\n \r\n ),\r\n reportsList: this._renderRow(),\r\n modal: this._renderModal()\r\n };\r\n return this.props.renderView(viewProps);\r\n }\r\n}\r\n\r\nexport default ReportsExport;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { Module } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { IReportsExportViewProps } from './reports-export';\r\n\r\nexport default (props: IReportsExportViewProps) => {\r\n const { heading, reportsList, moduleProps, modal } = props;\r\n return (\r\n \r\n {heading}\r\n {modal}\r\n {reportsList}\r\n \r\n );\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { Button, INodeProps, Modal, ModalBody, ModalFooter, ModalHeader, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IOrderTemplateLineViewProps } from '@msdyn365-commerce-modules/order-template/src/modules/order-template/./components';\r\nimport { IOrderTemplateViewProps } from '@msdyn365-commerce-modules/order-template/src/modules/order-template/./order-template';\r\n\r\nconst OrderTemplateLinesView: React.FC = (props: IOrderTemplateViewProps) => {\r\n const {\r\n OrderTemplateLines,\r\n status,\r\n statusMessage,\r\n heading,\r\n ProductsTable,\r\n ProductsTableHeading,\r\n orderLines,\r\n ProductsTableRow,\r\n productsStatusMessage,\r\n OrderTemplateActions,\r\n orderActions,\r\n pagination,\r\n itemAddedToCartDialog,\r\n bulkOrderLineActions,\r\n isDetailsDisplayed,\r\n detailedProductView,\r\n toggleDetailsDisplayed,\r\n resources: {\r\n cancelBtnLabel,\r\n productNumberText,\r\n productText,\r\n productUnitPriceText,\r\n productUOMText,\r\n productQuantityText\r\n }\r\n } = props;\r\n\r\n const toggleDetails = React.useCallback(() => {\r\n toggleDetailsDisplayed && toggleDetailsDisplayed(undefined);\r\n }, [toggleDetailsDisplayed]);\r\n return (\r\n \r\n {heading}\r\n {OrderTemplateActions && (\r\n \r\n {orderActions?.addTemplateToBag}\r\n {orderActions?.renameTemplate}\r\n {orderActions?.removeTemplate}\r\n {!isDetailsDisplayed && productsStatusMessage}\r\n \r\n )}\r\n {bulkOrderLineActions}\r\n {status !== 'SUCCESS' && statusMessage}\r\n {ProductsTable && (\r\n \r\n \r\n {ProductsTableHeading}\r\n \r\n {orderLines &&\r\n orderLines.map(product => {\r\n return _renderItem(product, productQuantityText, ProductsTableRow);\r\n })}\r\n \r\n \r\n {pagination}\r\n \r\n )}\r\n {itemAddedToCartDialog}\r\n \r\n \r\n Product Details\r\n \r\n \r\n
    \r\n
  • \r\n {detailedProductView?.productImage}\r\n
  • \r\n
  • \r\n \r\n {productText}\r\n :\r\n \r\n {detailedProductView?.productInfo}\r\n
  • \r\n
  • \r\n \r\n {productNumberText}\r\n :\r\n \r\n {detailedProductView?.productNumber}\r\n
  • \r\n
  • \r\n \r\n {productUnitPriceText}\r\n :\r\n \r\n {' '}\r\n {detailedProductView?.productPrice}\r\n
  • \r\n
  • \r\n \r\n {productUOMText}\r\n :\r\n \r\n {' '}\r\n {detailedProductView?.productUnitOfMeasure}\r\n
  • \r\n
  • \r\n \r\n {productQuantityText}\r\n :\r\n \r\n {detailedProductView?.productQuantityView}\r\n
  • \r\n {productsStatusMessage &&
  • \r\n {productsStatusMessage}\r\n
  • }\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nconst _renderItem = (\r\n product: IOrderTemplateLineViewProps,\r\n quantityLabel: string,\r\n ProductsTableRow?: INodeProps\r\n): JSX.Element | null => {\r\n if (!product) {\r\n return null;\r\n }\r\n\r\n const {\r\n key,\r\n selectLine,\r\n productImage,\r\n productPrice,\r\n productNumber,\r\n addToBagButton,\r\n removeButton,\r\n productInfo,\r\n productUnitOfMeasure,\r\n productQuantityView,\r\n productQuantity,\r\n popUp,\r\n isMobile\r\n } = product;\r\n\r\n return (\r\n \r\n \r\n {selectLine}\r\n \r\n \r\n {productImage}\r\n \r\n {isMobile ? \r\n
\r\n {productNumber}\r\n
\r\n
\r\n {quantityLabel}\r\n :\r\n {' '}\r\n {productQuantity}\r\n
\r\n : \r\n {productNumber}\r\n }\r\n {!isMobile && \r\n {productInfo}\r\n }\r\n {!isMobile && \r\n {productPrice}\r\n }\r\n {!isMobile && \r\n {productUnitOfMeasure}\r\n }\r\n {!isMobile && \r\n {productQuantityView}\r\n }\r\n {isMobile && \r\n {popUp}\r\n }\r\n {!isMobile &&\r\n \r\n {addToBagButton}\r\n {removeButton}\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport default OrderTemplateLinesView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { ISearchData, ISearchViewProps } from '@msdyn365-commerce-modules/search';\r\nimport { Node } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\r\n\r\n/**\r\n * Render Categories heading.\r\n * @param inCategoriesHeading - The Keywords result heading.\r\n * @returns The JSX Element.\r\n */\r\nconst renderCategorySuggestionsTitle = (inCategoriesHeading: string): JSX.Element => {\r\n const categoryAutoSuggestionHeading = inCategoriesHeading ? inCategoriesHeading : 'In categories';\r\n\r\n return (\r\n
\r\n {categoryAutoSuggestionHeading}\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Render Categories suggestion result.\r\n * @param searchText search text\r\n * @param inCategoriesHeading - The Categories result heading.\r\n * @param noResultText - The \"No Result\" text.\r\n * @param props - The Categories suggestion result.\r\n * @param isLoadingAutoSuggest - The autosuggestion loading flag.\r\n * @param isLoadingNode - The autosuggestion loading node.\r\n * @returns The JSX Element.\r\n */\r\nexport const CategorySuggestionsComponent = (\r\n searchText: string | undefined,\r\n inCategoriesHeading: string,\r\n noResultText: string,\r\n props: ISearchViewProps & ISearchProps,\r\n isLoadingAutoSuggest?: boolean,\r\n isLoadingNode?: React.ReactNode\r\n): JSX.Element => {\r\n return props.autosuggestCategory ? (\r\n \r\n {renderCategorySuggestionsTitle(inCategoriesHeading.replace('{0}', searchText || ''))}\r\n \r\n {isLoadingAutoSuggest && isLoadingNode}\r\n {!isLoadingAutoSuggest && props.autosuggestCategory.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n ) : (\r\n \r\n {renderCategorySuggestionsTitle(inCategoriesHeading.replace('{0}', searchText || ''))}\r\n \r\n
  • \r\n {noResultText}\r\n
  • \r\n
    \r\n
    \r\n );\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IImageData, Image } from '@msdyn365-commerce/core';\r\nimport { ISearchData } from '@msdyn365-commerce-modules/search';\r\nimport { Node } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\r\n\r\n/**\r\n * Render Products Suggestion result heading.\r\n * @param props -The props.\r\n * @returns The JSX Element.\r\n */\r\nconst renderProductNotFoundResultsImage = (props: ISearchProps): JSX.Element | null => {\r\n const noSearchResultImage: IImageData | undefined = props.config.noSearchResultImage;\r\n if (!noSearchResultImage || !noSearchResultImage.src) {\r\n return null;\r\n }\r\n const imageSettings = {\r\n lazyload: true,\r\n viewports: {\r\n xs: { w: 100, h: 100, q: 'w=100&h=100&q=60&m=6' }\r\n }\r\n };\r\n return (\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Product suggestion result.\r\n * @param props -The props.\r\n * @returns The JSX Element.\r\n */\r\nexport const MobileAutoSuggestEmptyComponent = (\r\n props: ISearchProps\r\n): JSX.Element => {\r\n return (\r\n \r\n
    \r\n {renderProductNotFoundResultsImage(props)}\r\n
    \r\n
    \r\n
    \r\n {props.resources.emptyMobileSearchTextHeading}\r\n
    \r\n
    \r\n {props.resources.emptyMobileSearchText}\r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { ISearchData, ISearchFormViewProps } from '@msdyn365-commerce-modules/search';\r\nimport { Button, INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\r\nimport { MobileAutoSuggestEmptyComponent } from './search.mobile.empty';\r\n\r\n/**\r\n * Render Clear button for mobile viewport.\r\n * @param clearSearchButtonText -The Clear button text.\r\n * @param clearSearch -Clear Search callback.\r\n * @returns -The JSX Element.\r\n */\r\nconst renderClearButton = (clearSearchButtonText: string, clearSearch: () => void): JSX.Element => {\r\n return (\r\n \r\n {clearSearchButtonText || 'Clear'}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Search form.\r\n * @param form -Form view props.\r\n * @param searchForm -Search Form props.\r\n * @param formWrapper -Form Wrapper props.\r\n * @param isMobile -Is mobile viewport flag.\r\n * @param clearSearchButtonText -The Clear button text.\r\n * @param props -The props for resource.\r\n * @param isSearchText -Is SearchText flag for input text.\r\n * @param clearSearch -Clear Search callback.\r\n * @returns -The JSX Element.\r\n */\r\nexport const FormComponent = (\r\n form: ISearchFormViewProps,\r\n searchForm: INodeProps,\r\n formWrapper: INodeProps,\r\n isMobile: boolean,\r\n clearSearchButtonText: string,\r\n props: ISearchProps,\r\n isSearchText: boolean,\r\n clearSearch: () => void): JSX.Element => {\r\n\r\n // const cancelButtonNode = (\r\n // \r\n // );\r\n\r\n return (\r\n isMobile ? (\r\n \r\n {form.cancelBtn}\r\n \r\n {form.input}\r\n {isSearchText && renderClearButton(clearSearchButtonText, clearSearch)}\r\n {!isSearchText ? MobileAutoSuggestEmptyComponent(props) : null}\r\n \r\n \r\n ) : (\r\n \r\n \r\n {form.input}\r\n {form.submitBtn}\r\n {/*{isSearchText && cancelButtonNode}*/}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { ISearchKeywordViewProps } from '@msdyn365-commerce-modules/search';\r\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\n/**\r\n * Render keywords heading.\r\n * @param keywordsHeading -The Keywords result heading.\r\n * @returns The JSX Element.\r\n */\r\nconst renderKeywordSuggestionsTitle = (keywordsHeading: string): JSX.Element => {\r\n const categoryAutoSuggestionHeading = keywordsHeading ? keywordsHeading : 'Keywords';\r\n\r\n return (\r\n
    \r\n {categoryAutoSuggestionHeading}\r\n
    \r\n );\r\n};\r\n\r\n/**\r\n * Render keywords reults.\r\n * @param keywordSuggest -The Keywords suggest Node props.\r\n * @param ulKeyword -The List Node props.\r\n * @param keywordsHeading -The Keywords result heading.\r\n * @param noResultText -The \"No Result\" text.\r\n * @param keywordSuggestions -The Keywords suggestion result.\r\n * @param isLoadingAutoSuggest - The autosuggestion loading flag.\r\n * @param isLoadingNode - The autosuggestion loading node.\r\n * @returns -The JSX Element.\r\n */\r\nexport const KeywordSuggestionsComponent = (\r\n keywordSuggest: INodeProps,\r\n ulKeyword: INodeProps,\r\n keywordsHeading: string,\r\n noResultText: string,\r\n keywordSuggestions?: ISearchKeywordViewProps,\r\n isLoadingAutoSuggest?: boolean,\r\n isLoadingNode?: React.ReactNode\r\n): JSX.Element => {\r\n return (\r\n keywordSuggestions ? (\r\n \r\n {renderKeywordSuggestionsTitle(keywordsHeading)}\r\n \r\n {isLoadingAutoSuggest && isLoadingNode}\r\n {!isLoadingAutoSuggest && keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n ) : (\r\n \r\n {renderKeywordSuggestionsTitle(keywordsHeading)}\r\n \r\n
  • \r\n {noResultText}\r\n
  • \r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IImageData, Image } from '@msdyn365-commerce/core';\r\nimport { ISearchData, ISearchProductViewProps } from '@msdyn365-commerce-modules/search';\r\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\r\n\r\n/**\r\n * Render Products Suggestion result heading.\r\n * @param productSuggestionsHeading -The products suggestion result heading.\r\n * @returns The JSX Element.\r\n */\r\nconst renderProductSuggestionsTitle = (productSuggestionsHeading: string): JSX.Element => {\r\n const productAutoSuggestionHeading = productSuggestionsHeading ? productSuggestionsHeading : 'Products';\r\n\r\n return (\r\n
    \r\n {productAutoSuggestionHeading}\r\n
    \r\n );\r\n};\r\n\r\n/**\r\n * Render Products Suggestion result heading.\r\n * @param props -The props.\r\n * @returns The JSX Element.\r\n */\r\nconst renderProductNotFoundResultsImage = (props: ISearchProps): JSX.Element | null => {\r\n const noSearchResultImage: IImageData | undefined = props.config.noSearchResultImage;\r\n if (!noSearchResultImage || !noSearchResultImage.src) {\r\n return null;\r\n }\r\n return (\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Products No result section.\r\n * @param props -The props.\r\n * @returns The JSX Element.\r\n */\r\nconst renderProductNotFoundResults = (props: ISearchProps): JSX.Element => {\r\n return (\r\n \r\n
    \r\n {renderProductNotFoundResultsImage(props)}\r\n
    \r\n
    \r\n {props.resources.noResultContentHeadingText}\r\n
    \r\n
    \r\n {props.resources.noResultContentParagraphText}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\n/**\r\n * Render Product suggestion result.\r\n * @param productSuggest -The product suggest Node props.\r\n * @param ulProduct -The List Node props.\r\n * @param props -The props.\r\n * @param productSuggestions -The Product suggestion result.\r\n * @param isLoadingAutoSuggest - The autosuggestion loading flag.\r\n * @param isLoadingNode - The autosuggestion loading node.\r\n * @returns The JSX Element.\r\n */\r\nexport const ProductSuggestionsComponent = (\r\n productSuggest: INodeProps,\r\n ulProduct: INodeProps,\r\n props: ISearchProps,\r\n productSuggestions?: ISearchProductViewProps,\r\n isLoadingAutoSuggest?: boolean,\r\n isLoadingNode?: React.ReactNode\r\n): JSX.Element => {\r\n const liProduct: INodeProps = {\r\n tag: 'li',\r\n className: 'msc-no-result-content'\r\n };\r\n return productSuggestions ? (\r\n \r\n {renderProductSuggestionsTitle(props.resources.productSuggestionHeading)}\r\n \r\n {isLoadingAutoSuggest && isLoadingNode}\r\n {!isLoadingAutoSuggest && productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n ) : (\r\n \r\n {renderProductSuggestionsTitle(props.resources.productSuggestionHeading)}\r\n \r\n \r\n {renderProductNotFoundResults(props)}\r\n \r\n \r\n \r\n );\r\n};\r\n","import { ISearchData, ISearchViewProps } from '@msdyn365-commerce-modules/search';\r\nimport { Node } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\r\nimport { IAriServiceModelExtension } from \"../../../../actions/DataServiceEntities.g\";\r\nimport generateAriModelDetailUrl from \"../../../../utils/getAriModelDetailUrl\";\r\n\r\nconst renderAriSuggestionsTitle = (heading: string): JSX.Element =>\r\n (\r\n
    \r\n {heading}\r\n
    \r\n )\r\n\r\n\r\nexport const AriSuggestionsComponent = (\r\n noResultsText: string,\r\n props: ISearchViewProps & ISearchProps,\r\n isLoading: boolean,\r\n searchResults: IAriServiceModelExtension[],\r\n loadingNode: React.ReactNode\r\n): JSX.Element => {\r\n const { resources: { ariModelResultsHeading }, UlCategory } = props;\r\n return (\r\n
    \r\n {renderAriSuggestionsTitle(ariModelResultsHeading)}\r\n \r\n {isLoading? (\r\n loadingNode\r\n ) : (\r\n searchResults?.length ? (\r\n <>\r\n {searchResults.map(r => (
  • \r\n \r\n {r.Name}\r\n \r\n
  • ))}\r\n \r\n\r\n ) : (
  • \r\n {noResultsText}\r\n
  • )\r\n )}\r\n\r\n
    \r\n
    \r\n )\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ISearchData, ISearchFormViewProps, ISearchViewProps } from '@msdyn365-commerce-modules/search';\r\nimport { Button, format, isMobile, Module, Node, VariantType } from '@msdyn365-commerce-modules/utilities';\r\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\r\n\r\nimport { ISearchProps } from '../definition-extensions/search.ext.props.autogenerated';\r\nimport { CategorySuggestionsComponent } from './components/search.categorysuggest';\r\nimport { FormComponent } from './components/search.form';\r\nimport { KeywordSuggestionsComponent } from './components/search.keywordsuggest';\r\nimport { ProductSuggestionsComponent } from './components/search.productsuggest';\r\nimport SearchModelsAction, { SearchModelsInput } from \"../../../actions/search-models.action\";\r\nimport { QueryResultSettings } from \"@msdyn365-commerce/retail-proxy\";\r\nimport { IAriServiceModelExtension } from \"../../../actions/DataServiceEntities.g\";\r\nimport * as _ from 'lodash';\r\nimport { AriSuggestionsComponent } from \"./components/search.arisuggest\";\r\n// import MsDyn365, { getUrlSync } from \"@msdyn365-commerce/core\";\r\n/**\r\n * Render Title for AutoSuggest.\r\n * @param searchSuggestionHeading -The heading resource string.\r\n * @param searchText -The search string.\r\n * @returns -The JSX Element.\r\n */\r\nconst renderTitle = (searchSuggestionHeading: string, searchText: string): JSX.Element => {\r\n const searchTextString = '\"'.concat(searchText.concat('\"'));\r\n const searchAutoSuggestionHeading = searchSuggestionHeading ? format(searchSuggestionHeading, searchTextString) : `Search for ${searchTextString}`;\r\n\r\n return (\r\n \r\n {searchAutoSuggestionHeading}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Search View.\r\n * @param props - The view props.\r\n * @returns The JSX Element.\r\n */\r\nconst SearchView: React.FC> = (props: ISearchViewProps & ISearchProps): JSX.Element => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n UlKeyword,\r\n UlProduct,\r\n form,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label,\r\n context,\r\n isLoadingAutoSuggest,\r\n isLoadingNode,\r\n context: {\r\n request: {\r\n apiSettings\r\n },\r\n actionContext\r\n },\r\n config: {\r\n topResultsCount\r\n }\r\n } = props;\r\n\r\n const { searchSuggestionHeading, categorySuggestionHeading, keywordsHeading, noResultText, clearSearchButtonText } = props.resources;\r\n\r\n const [searchTextString, setSearchTextString] = useState();\r\n const [isMobilePort, setIsMobile] = useState(false);\r\n const [ ariSearchResults, setAriSearchResults ] = useState< IAriServiceModelExtension[]>([]);\r\n const [ ariSearchLoading , setAriSearchLoading ] = useState(false);\r\n\r\n const debouncedSearchHandler = useMemo(() =>\r\n _.debounce((search: string) => getAriSearchResults(search), 500),\r\n []\r\n )\r\n\r\n useEffect(() => {\r\n setSearchTextString(searchText);\r\n if (searchText.length > 0)\r\n debouncedSearchHandler(searchText);\r\n }, [searchText]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n debouncedSearchHandler.cancel();\r\n }\r\n }, [debouncedSearchHandler])\r\n\r\n /**\r\n * ClearSearch callback method to clear search string.\r\n */\r\n const clearSearch = (): void => {\r\n setSearchTextString('');\r\n\r\n const propsForm = props.form as ISearchFormViewProps;\r\n const propsFormInput = propsForm.input as React.DetailedHTMLProps, HTMLInputElement>;\r\n const propsFormInputCurrent = (propsFormInput.ref as React.RefObject).current;\r\n\r\n if (propsFormInputCurrent) {\r\n propsFormInputCurrent.value = '';\r\n }\r\n\r\n propsFormInput.value = '';\r\n props.searchText = '';\r\n props.FormWrapper.action = '';\r\n };\r\n\r\n const isMobileViewport = useCallback(() => {\r\n const isMobileView = isMobile({ variant: VariantType.Browser, context: context.request }) === 'xs';\r\n setIsMobile(isMobileView);\r\n }, [context]);\r\n\r\n useEffect(() => {\r\n window.addEventListener('resize', isMobileViewport);\r\n isMobileViewport();\r\n }, [isMobileViewport]);\r\n\r\n const viewport = isMobile({ variant: VariantType.Browser, context: context.request });\r\n\r\n const isMobileView = (viewport === 'xs');\r\n\r\n AutoSuggest.className = !StringExtensions.isNullOrEmpty(searchTextString) ? `${AutoSuggest.className} show` : `${AutoSuggest.className} hide`;\r\n const isSearchText: boolean = !StringExtensions.isNullOrEmpty(searchTextString);\r\n\r\n const getAriSearchResults = async (search: string) => {\r\n setAriSearchLoading(true);\r\n const queryResultSettings: QueryResultSettings = {\r\n Paging: {\r\n Top: topResultsCount || 5\r\n }\r\n }\r\n const input = new SearchModelsInput(search,\r\n queryResultSettings,\r\n 'Search',\r\n apiSettings);\r\n\r\n const data = await SearchModelsAction(input, actionContext);\r\n setAriSearchResults(data.ariSearchResults.Models || []);\r\n setAriSearchLoading(false);\r\n }\r\n\r\n // const _generateSeeMoreUrl = (): string => {\r\n // const {\r\n // context: {\r\n // actionContext,\r\n // app: {\r\n // config: { searchQueryStringParameter }\r\n // }\r\n // }\r\n // } = props;\r\n\r\n // const query = props.searchText;\r\n // const searchQsp = searchQueryStringParameter || 'q';\r\n // const searchURL = _appendQueryParams(getUrlSync('search', actionContext) || '', query, searchQsp);\r\n // return searchURL;\r\n // };\r\n\r\n // const _appendQueryParams = (route: string, query: string, qsp: string): string => {\r\n // if (!MsDyn365.isBrowser) {\r\n // return '';\r\n // }\r\n // const queryUrl = new URL(route, window.location.href);\r\n // if (qsp && query) {\r\n // queryUrl.searchParams.set(qsp, query);\r\n // }\r\n\r\n // return queryUrl.href;\r\n // };\r\n\r\n\r\n\r\n return (\r\n \r\n {label}\r\n {FormComponent(form as ISearchFormViewProps, SearchForm, FormWrapper, isMobilePort, clearSearchButtonText, props, isSearchText, clearSearch)}\r\n { !isMobileView && \r\n {!StringExtensions.isNullOrEmpty(searchTextString) ? \r\n {AutoSuggestAriaLabelText}\r\n : ''}\r\n {!StringExtensions.isNullOrEmpty(searchTextString) ? (\r\n <>\r\n \r\n \r\n {renderTitle(searchSuggestionHeading, searchText)}\r\n \r\n \r\n \r\n {ProductSuggestionsComponent(ProductSuggest, UlProduct, props, autosuggestProduct,\r\n isLoadingAutoSuggest, isLoadingNode)}\r\n\r\n {CategorySuggestionsComponent(searchTextString, categorySuggestionHeading, noResultText,\r\n props, isLoadingAutoSuggest, isLoadingNode)}\r\n {AriSuggestionsComponent(noResultText, props, ariSearchLoading, ariSearchResults, isLoadingNode)}\r\n {KeywordSuggestionsComponent(KeywordSuggest, UlKeyword, keywordsHeading, noResultText, autosuggestKeyword,\r\n isLoadingAutoSuggest, isLoadingNode)}\r\n \r\n \r\n {/* See More */}\r\n \r\n ) : null}\r\n }\r\n { isMobileView && props.isSearchFormExpanded && \r\n {!StringExtensions.isNullOrEmpty(searchTextString) ? \r\n {AutoSuggestAriaLabelText}\r\n : ''}\r\n {!StringExtensions.isNullOrEmpty(searchTextString) ? (\r\n <>\r\n \r\n {(form as ISearchFormViewProps).cancelBtn}\r\n {renderTitle(searchSuggestionHeading, searchText)}\r\n \r\n \r\n \r\n {CategorySuggestionsComponent(searchTextString, categorySuggestionHeading, noResultText,\r\n props, isLoadingAutoSuggest, isLoadingNode)}\r\n {AriSuggestionsComponent(noResultText, props, ariSearchLoading, ariSearchResults, isLoadingNode)}\r\n {KeywordSuggestionsComponent(KeywordSuggest, UlKeyword, keywordsHeading, noResultText, autosuggestKeyword,\r\n isLoadingAutoSuggest, isLoadingNode)}\r\n \r\n {ProductSuggestionsComponent(ProductSuggest, UlProduct, props, autosuggestProduct,\r\n isLoadingAutoSuggest, isLoadingNode)}\r\n \r\n \r\n ) : null}\r\n }\r\n \r\n );\r\n};\r\nexport default SearchView;","export enum SupersessionKey {\r\n SupersededId = 'superseded-from-id',\r\n SupersededName = 'superseded-from-name',\r\n Inventory = 'inventory'\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { Button, INodeProps, Modal, ModalBody, ModalFooter, ModalHeader, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IOrderTemplateLineViewProps } from '@msdyn365-commerce-modules/order-template/src/modules/order-template/./components';\r\nimport { IOrderTemplateViewProps } from '@msdyn365-commerce-modules/order-template/src/modules/order-template/./order-template';\r\n\r\nconst OrderTemplateLinesView: React.FC = (props: IOrderTemplateViewProps) => {\r\n const {\r\n OrderTemplateLines,\r\n status,\r\n statusMessage,\r\n heading,\r\n ProductsTable,\r\n ProductsTableHeading,\r\n orderLines,\r\n ProductsTableRow,\r\n productsStatusMessage,\r\n OrderTemplateActions,\r\n orderActions,\r\n pagination,\r\n itemAddedToCartDialog,\r\n bulkOrderLineActions,\r\n isDetailsDisplayed,\r\n detailedProductView,\r\n toggleDetailsDisplayed,\r\n resources: {\r\n cancelBtnLabel,\r\n productNumberText,\r\n productText,\r\n productUnitPriceText,\r\n productUOMText,\r\n productQuantityText\r\n }\r\n } = props;\r\n\r\n const toggleDetails = React.useCallback(() => {\r\n toggleDetailsDisplayed && toggleDetailsDisplayed(undefined);\r\n }, [toggleDetailsDisplayed]);\r\n return (\r\n \r\n {heading}\r\n {OrderTemplateActions && (\r\n \r\n {orderActions?.addTemplateToBag}\r\n {orderActions?.renameTemplate}\r\n {orderActions?.removeTemplate}\r\n {!isDetailsDisplayed && productsStatusMessage}\r\n \r\n )}\r\n {bulkOrderLineActions}\r\n {status !== 'SUCCESS' && statusMessage}\r\n {ProductsTable && (\r\n \r\n \r\n {ProductsTableHeading}\r\n \r\n {orderLines &&\r\n orderLines.map(product => {\r\n return _renderItem(product, productQuantityText, ProductsTableRow);\r\n })}\r\n \r\n \r\n {pagination}\r\n \r\n )}\r\n {itemAddedToCartDialog}\r\n \r\n \r\n Product Details\r\n \r\n \r\n
      \r\n
    • \r\n {detailedProductView?.productImage}\r\n
    • \r\n
    • \r\n \r\n {productText}\r\n :\r\n \r\n {detailedProductView?.productInfo}\r\n
    • \r\n
    • \r\n \r\n {productNumberText}\r\n :\r\n \r\n {detailedProductView?.productNumber}\r\n
    • \r\n
    • \r\n \r\n {productUnitPriceText}\r\n :\r\n \r\n {' '}\r\n {detailedProductView?.productPrice}\r\n
    • \r\n
    • \r\n \r\n {productUOMText}\r\n :\r\n \r\n {' '}\r\n {detailedProductView?.productUnitOfMeasure}\r\n
    • \r\n
    • \r\n \r\n {productQuantityText}\r\n :\r\n \r\n {detailedProductView?.productQuantityView}\r\n
    • \r\n {productsStatusMessage &&
    • \r\n {productsStatusMessage}\r\n
    • }\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\nconst _renderItem = (\r\n product: IOrderTemplateLineViewProps,\r\n quantityLabel: string,\r\n ProductsTableRow?: INodeProps\r\n): JSX.Element | null => {\r\n if (!product) {\r\n return null;\r\n }\r\n\r\n const {\r\n key,\r\n selectLine,\r\n productImage,\r\n productPrice,\r\n productNumber,\r\n addToBagButton,\r\n removeButton,\r\n productInfo,\r\n productUnitOfMeasure,\r\n productQuantityView,\r\n productQuantity,\r\n popUp,\r\n isMobile\r\n } = product;\r\n\r\n return (\r\n \r\n \r\n {selectLine}\r\n \r\n \r\n {productImage}\r\n \r\n {isMobile ? \r\n
    \r\n {productNumber}\r\n
    \r\n
    \r\n {quantityLabel}\r\n :\r\n {' '}\r\n {productQuantity}\r\n
    \r\n : \r\n {productNumber}\r\n }\r\n {!isMobile && \r\n {productInfo}\r\n }\r\n {!isMobile && \r\n {productPrice}\r\n }\r\n {!isMobile && \r\n {productUnitOfMeasure}\r\n }\r\n {!isMobile && \r\n {productQuantityView}\r\n }\r\n {isMobile && \r\n {popUp}\r\n }\r\n {!isMobile &&\r\n \r\n {addToBagButton}\r\n {removeButton}\r\n }\r\n
    \r\n );\r\n};\r\n\r\nexport default OrderTemplateLinesView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { ISearchData, ISearchViewProps } from '@msdyn365-commerce-modules/search';\r\nimport { Node } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\r\n\r\n/**\r\n * Render Categories heading.\r\n * @param inCategoriesHeading - The Keywords result heading.\r\n * @returns The JSX Element.\r\n */\r\nconst renderCategorySuggestionsTitle = (inCategoriesHeading: string): JSX.Element => {\r\n const categoryAutoSuggestionHeading = inCategoriesHeading ? inCategoriesHeading : 'In categories';\r\n\r\n return (\r\n
    \r\n {categoryAutoSuggestionHeading}\r\n
    \r\n );\r\n};\r\n\r\n/**\r\n * Render Categories suggestion result.\r\n * @param searchText search text\r\n * @param inCategoriesHeading - The Categories result heading.\r\n * @param noResultText - The \"No Result\" text.\r\n * @param props - The Categories suggestion result.\r\n * @param isLoadingAutoSuggest - The autosuggestion loading flag.\r\n * @param isLoadingNode - The autosuggestion loading node.\r\n * @returns The JSX Element.\r\n */\r\nexport const CategorySuggestionsComponent = (\r\n searchText: string | undefined,\r\n inCategoriesHeading: string,\r\n noResultText: string,\r\n props: ISearchViewProps & ISearchProps,\r\n isLoadingAutoSuggest?: boolean,\r\n isLoadingNode?: React.ReactNode\r\n): JSX.Element => {\r\n return props.autosuggestCategory ? (\r\n \r\n {renderCategorySuggestionsTitle(inCategoriesHeading.replace('{0}', searchText || ''))}\r\n \r\n {isLoadingAutoSuggest && isLoadingNode}\r\n {!isLoadingAutoSuggest && props.autosuggestCategory.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n ) : (\r\n \r\n {renderCategorySuggestionsTitle(inCategoriesHeading.replace('{0}', searchText || ''))}\r\n \r\n
  • \r\n {noResultText}\r\n
  • \r\n
    \r\n
    \r\n );\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IImageData, Image } from '@msdyn365-commerce/core';\r\nimport { ISearchData } from '@msdyn365-commerce-modules/search';\r\nimport { Node } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\r\n\r\n/**\r\n * Render Products Suggestion result heading.\r\n * @param props -The props.\r\n * @returns The JSX Element.\r\n */\r\nconst renderProductNotFoundResultsImage = (props: ISearchProps): JSX.Element | null => {\r\n const noSearchResultImage: IImageData | undefined = props.config.noSearchResultImage;\r\n if (!noSearchResultImage || !noSearchResultImage.src) {\r\n return null;\r\n }\r\n const imageSettings = {\r\n lazyload: true,\r\n viewports: {\r\n xs: { w: 100, h: 100, q: 'w=100&h=100&q=60&m=6' }\r\n }\r\n };\r\n return (\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Product suggestion result.\r\n * @param props -The props.\r\n * @returns The JSX Element.\r\n */\r\nexport const MobileAutoSuggestEmptyComponent = (\r\n props: ISearchProps\r\n): JSX.Element => {\r\n return (\r\n \r\n
    \r\n {renderProductNotFoundResultsImage(props)}\r\n
    \r\n
    \r\n
    \r\n {props.resources.emptyMobileSearchTextHeading}\r\n
    \r\n
    \r\n {props.resources.emptyMobileSearchText}\r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { ISearchData, ISearchFormViewProps } from '@msdyn365-commerce-modules/search';\r\nimport { Button, INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\r\nimport { MobileAutoSuggestEmptyComponent } from './search.mobile.empty';\r\n\r\n/**\r\n * Render Clear button for mobile viewport.\r\n * @param clearSearchButtonText -The Clear button text.\r\n * @param clearSearch -Clear Search callback.\r\n * @returns -The JSX Element.\r\n */\r\nconst renderClearButton = (clearSearchButtonText: string, clearSearch: () => void): JSX.Element => {\r\n return (\r\n \r\n {clearSearchButtonText || 'Clear'}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Search form.\r\n * @param form -Form view props.\r\n * @param searchForm -Search Form props.\r\n * @param formWrapper -Form Wrapper props.\r\n * @param isMobile -Is mobile viewport flag.\r\n * @param clearSearchButtonText -The Clear button text.\r\n * @param props -The props for resource.\r\n * @param isSearchText -Is SearchText flag for input text.\r\n * @param clearSearch -Clear Search callback.\r\n * @returns -The JSX Element.\r\n */\r\nexport const FormComponent = (\r\n form: ISearchFormViewProps,\r\n searchForm: INodeProps,\r\n formWrapper: INodeProps,\r\n isMobile: boolean,\r\n clearSearchButtonText: string,\r\n props: ISearchProps,\r\n isSearchText: boolean,\r\n clearSearch: () => void): JSX.Element => {\r\n\r\n // const cancelButtonNode = (\r\n // \r\n // );\r\n\r\n return (\r\n isMobile ? (\r\n \r\n {form.cancelBtn}\r\n \r\n {form.input}\r\n {isSearchText && renderClearButton(clearSearchButtonText, clearSearch)}\r\n {!isSearchText ? MobileAutoSuggestEmptyComponent(props) : null}\r\n \r\n \r\n ) : (\r\n \r\n \r\n {form.input}\r\n {form.submitBtn}\r\n {/*{isSearchText && cancelButtonNode}*/}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { ISearchKeywordViewProps } from '@msdyn365-commerce-modules/search';\r\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\n/**\r\n * Render keywords heading.\r\n * @param keywordsHeading -The Keywords result heading.\r\n * @returns The JSX Element.\r\n */\r\nconst renderKeywordSuggestionsTitle = (keywordsHeading: string): JSX.Element => {\r\n const categoryAutoSuggestionHeading = keywordsHeading ? keywordsHeading : 'Keywords';\r\n\r\n return (\r\n
    \r\n {categoryAutoSuggestionHeading}\r\n
    \r\n );\r\n};\r\n\r\n/**\r\n * Render keywords reults.\r\n * @param keywordSuggest -The Keywords suggest Node props.\r\n * @param ulKeyword -The List Node props.\r\n * @param keywordsHeading -The Keywords result heading.\r\n * @param noResultText -The \"No Result\" text.\r\n * @param keywordSuggestions -The Keywords suggestion result.\r\n * @param isLoadingAutoSuggest - The autosuggestion loading flag.\r\n * @param isLoadingNode - The autosuggestion loading node.\r\n * @returns -The JSX Element.\r\n */\r\nexport const KeywordSuggestionsComponent = (\r\n keywordSuggest: INodeProps,\r\n ulKeyword: INodeProps,\r\n keywordsHeading: string,\r\n noResultText: string,\r\n keywordSuggestions?: ISearchKeywordViewProps,\r\n isLoadingAutoSuggest?: boolean,\r\n isLoadingNode?: React.ReactNode\r\n): JSX.Element => {\r\n return (\r\n keywordSuggestions ? (\r\n \r\n {renderKeywordSuggestionsTitle(keywordsHeading)}\r\n \r\n {isLoadingAutoSuggest && isLoadingNode}\r\n {!isLoadingAutoSuggest && keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n ) : (\r\n \r\n {renderKeywordSuggestionsTitle(keywordsHeading)}\r\n \r\n
  • \r\n {noResultText}\r\n
  • \r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IImageData, Image } from '@msdyn365-commerce/core';\r\nimport { ISearchData, ISearchProductViewProps } from '@msdyn365-commerce-modules/search';\r\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\r\n\r\n/**\r\n * Render Products Suggestion result heading.\r\n * @param productSuggestionsHeading -The products suggestion result heading.\r\n * @returns The JSX Element.\r\n */\r\nconst renderProductSuggestionsTitle = (productSuggestionsHeading: string): JSX.Element => {\r\n const productAutoSuggestionHeading = productSuggestionsHeading ? productSuggestionsHeading : 'Products';\r\n\r\n return (\r\n
    \r\n {productAutoSuggestionHeading}\r\n
    \r\n );\r\n};\r\n\r\n/**\r\n * Render Products Suggestion result heading.\r\n * @param props -The props.\r\n * @returns The JSX Element.\r\n */\r\nconst renderProductNotFoundResultsImage = (props: ISearchProps): JSX.Element | null => {\r\n const noSearchResultImage: IImageData | undefined = props.config.noSearchResultImage;\r\n if (!noSearchResultImage || !noSearchResultImage.src) {\r\n return null;\r\n }\r\n return (\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Products No result section.\r\n * @param props -The props.\r\n * @returns The JSX Element.\r\n */\r\nconst renderProductNotFoundResults = (props: ISearchProps): JSX.Element => {\r\n return (\r\n \r\n
    \r\n {renderProductNotFoundResultsImage(props)}\r\n
    \r\n
    \r\n {props.resources.noResultContentHeadingText}\r\n
    \r\n
    \r\n {props.resources.noResultContentParagraphText}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\n/**\r\n * Render Product suggestion result.\r\n * @param productSuggest -The product suggest Node props.\r\n * @param ulProduct -The List Node props.\r\n * @param props -The props.\r\n * @param productSuggestions -The Product suggestion result.\r\n * @param isLoadingAutoSuggest - The autosuggestion loading flag.\r\n * @param isLoadingNode - The autosuggestion loading node.\r\n * @returns The JSX Element.\r\n */\r\nexport const ProductSuggestionsComponent = (\r\n productSuggest: INodeProps,\r\n ulProduct: INodeProps,\r\n props: ISearchProps,\r\n productSuggestions?: ISearchProductViewProps,\r\n isLoadingAutoSuggest?: boolean,\r\n isLoadingNode?: React.ReactNode\r\n): JSX.Element => {\r\n const liProduct: INodeProps = {\r\n tag: 'li',\r\n className: 'msc-no-result-content'\r\n };\r\n return productSuggestions ? (\r\n \r\n {renderProductSuggestionsTitle(props.resources.productSuggestionHeading)}\r\n \r\n {isLoadingAutoSuggest && isLoadingNode}\r\n {!isLoadingAutoSuggest && productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n ) : (\r\n \r\n {renderProductSuggestionsTitle(props.resources.productSuggestionHeading)}\r\n \r\n \r\n {renderProductNotFoundResults(props)}\r\n \r\n \r\n \r\n );\r\n};\r\n","import { ISearchData, ISearchViewProps } from '@msdyn365-commerce-modules/search';\r\nimport { Node } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\r\nimport { IAriServiceModelExtension } from \"../../../../actions/DataServiceEntities.g\";\r\nimport generateAriModelDetailUrl from \"../../../../utils/getAriModelDetailUrl\";\r\n\r\nconst renderAriSuggestionsTitle = (heading: string): JSX.Element =>\r\n (\r\n
    \r\n {heading}\r\n
    \r\n )\r\n\r\n\r\nexport const AriSuggestionsComponent = (\r\n noResultsText: string,\r\n props: ISearchViewProps & ISearchProps,\r\n isLoading: boolean,\r\n searchResults: IAriServiceModelExtension[],\r\n loadingNode: React.ReactNode\r\n): JSX.Element => {\r\n const { resources: { ariModelResultsHeading }, UlCategory } = props;\r\n return (\r\n
    \r\n {renderAriSuggestionsTitle(ariModelResultsHeading)}\r\n \r\n {isLoading? (\r\n loadingNode\r\n ) : (\r\n searchResults?.length ? (\r\n <>\r\n {searchResults.map(r => (
  • \r\n \r\n {r.Name}\r\n \r\n
  • ))}\r\n \r\n\r\n ) : (
  • \r\n {noResultsText}\r\n
  • )\r\n )}\r\n\r\n
    \r\n
    \r\n )\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ISearchData, ISearchFormViewProps, ISearchViewProps } from '@msdyn365-commerce-modules/search';\r\nimport { Button, format, isMobile, Module, Node, VariantType } from '@msdyn365-commerce-modules/utilities';\r\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\r\n\r\nimport { ISearchProps } from '../definition-extensions/search.ext.props.autogenerated';\r\nimport { CategorySuggestionsComponent } from './components/search.categorysuggest';\r\nimport { FormComponent } from './components/search.form';\r\nimport { KeywordSuggestionsComponent } from './components/search.keywordsuggest';\r\nimport { ProductSuggestionsComponent } from './components/search.productsuggest';\r\nimport SearchModelsAction, { SearchModelsInput } from \"../../../actions/search-models.action\";\r\nimport { QueryResultSettings } from \"@msdyn365-commerce/retail-proxy\";\r\nimport { IAriServiceModelExtension } from \"../../../actions/DataServiceEntities.g\";\r\nimport * as _ from 'lodash';\r\nimport { AriSuggestionsComponent } from \"./components/search.arisuggest\";\r\nimport MsDyn365, { getUrlSync } from \"@msdyn365-commerce/core\";\r\n/**\r\n * Render Title for AutoSuggest.\r\n * @param searchSuggestionHeading -The heading resource string.\r\n * @param searchText -The search string.\r\n * @returns -The JSX Element.\r\n */\r\nconst renderTitle = (searchSuggestionHeading: string, searchText: string): JSX.Element => {\r\n const searchTextString = '\"'.concat(searchText.concat('\"'));\r\n const searchAutoSuggestionHeading = searchSuggestionHeading ? format(searchSuggestionHeading, searchTextString) : `Search for ${searchTextString}`;\r\n\r\n return (\r\n \r\n {searchAutoSuggestionHeading}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Search View.\r\n * @param props - The view props.\r\n * @returns The JSX Element.\r\n */\r\nconst SearchView: React.FC> = (props: ISearchViewProps & ISearchProps): JSX.Element => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n UlKeyword,\r\n UlProduct,\r\n form,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label,\r\n context,\r\n isLoadingAutoSuggest,\r\n isLoadingNode,\r\n context: {\r\n request: {\r\n apiSettings\r\n },\r\n actionContext\r\n },\r\n config: {\r\n topResultsCount\r\n }\r\n } = props;\r\n\r\n const { searchSuggestionHeading, categorySuggestionHeading, keywordsHeading, noResultText, clearSearchButtonText } = props.resources;\r\n\r\n const [searchTextString, setSearchTextString] = useState();\r\n const [isMobilePort, setIsMobile] = useState(false);\r\n const [ ariSearchResults, setAriSearchResults ] = useState< IAriServiceModelExtension[]>([]);\r\n const [ ariSearchLoading , setAriSearchLoading ] = useState(false);\r\n\r\n const debouncedSearchHandler = useMemo(() =>\r\n _.debounce((search: string) => getAriSearchResults(search), 500),\r\n []\r\n )\r\n\r\n useEffect(() => {\r\n setSearchTextString(searchText);\r\n if (searchText.length > 0)\r\n debouncedSearchHandler(searchText);\r\n }, [searchText]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n debouncedSearchHandler.cancel();\r\n }\r\n }, [debouncedSearchHandler])\r\n\r\n /**\r\n * ClearSearch callback method to clear search string.\r\n */\r\n const clearSearch = (): void => {\r\n setSearchTextString('');\r\n\r\n const propsForm = props.form as ISearchFormViewProps;\r\n const propsFormInput = propsForm.input as React.DetailedHTMLProps, HTMLInputElement>;\r\n const propsFormInputCurrent = (propsFormInput.ref as React.RefObject).current;\r\n\r\n if (propsFormInputCurrent) {\r\n propsFormInputCurrent.value = '';\r\n }\r\n\r\n propsFormInput.value = '';\r\n props.searchText = '';\r\n props.FormWrapper.action = '';\r\n };\r\n\r\n const isMobileViewport = useCallback(() => {\r\n const isMobileView = isMobile({ variant: VariantType.Browser, context: context.request }) === 'xs';\r\n setIsMobile(isMobileView);\r\n }, [context]);\r\n\r\n useEffect(() => {\r\n window.addEventListener('resize', isMobileViewport);\r\n isMobileViewport();\r\n }, [isMobileViewport]);\r\n\r\n const viewport = isMobile({ variant: VariantType.Browser, context: context.request });\r\n\r\n const isMobileView = (viewport === 'xs');\r\n\r\n AutoSuggest.className = !StringExtensions.isNullOrEmpty(searchTextString) ? `${AutoSuggest.className} show` : `${AutoSuggest.className} hide`;\r\n const isSearchText: boolean = !StringExtensions.isNullOrEmpty(searchTextString);\r\n\r\n const getAriSearchResults = async (search: string) => {\r\n setAriSearchLoading(true);\r\n const queryResultSettings: QueryResultSettings = {\r\n Paging: {\r\n Top: topResultsCount || 5\r\n }\r\n }\r\n const input = new SearchModelsInput(search,\r\n queryResultSettings,\r\n 'Search',\r\n apiSettings);\r\n\r\n const data = await SearchModelsAction(input, actionContext);\r\n setAriSearchResults(data.ariSearchResults.Models || []);\r\n setAriSearchLoading(false);\r\n }\r\n\r\n const _generateSeeMoreUrl = (): string => {\r\n const {\r\n context: {\r\n actionContext,\r\n app: {\r\n config: { searchQueryStringParameter }\r\n }\r\n }\r\n } = props;\r\n\r\n const query = props.searchText;\r\n const searchQsp = searchQueryStringParameter || 'q';\r\n const searchURL = _appendQueryParams(getUrlSync('search', actionContext) || '', query, searchQsp);\r\n return searchURL;\r\n };\r\n\r\n const _appendQueryParams = (route: string, query: string, qsp: string): string => {\r\n if (!MsDyn365.isBrowser) {\r\n return '';\r\n }\r\n const queryUrl = new URL(route, window.location.href);\r\n if (qsp && query) {\r\n queryUrl.searchParams.set(qsp, query);\r\n }\r\n\r\n return queryUrl.href;\r\n };\r\n\r\n\r\n\r\n return (\r\n \r\n {label}\r\n {FormComponent(form as ISearchFormViewProps, SearchForm, FormWrapper, isMobilePort, clearSearchButtonText, props, isSearchText, clearSearch)}\r\n { !isMobileView && \r\n {!StringExtensions.isNullOrEmpty(searchTextString) ? \r\n {AutoSuggestAriaLabelText}\r\n : ''}\r\n {!StringExtensions.isNullOrEmpty(searchTextString) ? (\r\n <>\r\n \r\n \r\n {renderTitle(searchSuggestionHeading, searchText)}\r\n \r\n \r\n \r\n {ProductSuggestionsComponent(ProductSuggest, UlProduct, props, autosuggestProduct,\r\n isLoadingAutoSuggest, isLoadingNode)}\r\n\r\n {CategorySuggestionsComponent(searchTextString, categorySuggestionHeading, noResultText,\r\n props, isLoadingAutoSuggest, isLoadingNode)}\r\n {AriSuggestionsComponent(noResultText, props, ariSearchLoading, ariSearchResults, isLoadingNode)}\r\n {KeywordSuggestionsComponent(KeywordSuggest, UlKeyword, keywordsHeading, noResultText, autosuggestKeyword,\r\n isLoadingAutoSuggest, isLoadingNode)}\r\n \r\n \r\n See More\r\n \r\n ) : null}\r\n }\r\n { isMobileView && props.isSearchFormExpanded && \r\n {!StringExtensions.isNullOrEmpty(searchTextString) ? \r\n {AutoSuggestAriaLabelText}\r\n : ''}\r\n {!StringExtensions.isNullOrEmpty(searchTextString) ? (\r\n <>\r\n \r\n {(form as ISearchFormViewProps).cancelBtn}\r\n {renderTitle(searchSuggestionHeading, searchText)}\r\n \r\n \r\n \r\n {CategorySuggestionsComponent(searchTextString, categorySuggestionHeading, noResultText,\r\n props, isLoadingAutoSuggest, isLoadingNode)}\r\n {AriSuggestionsComponent(noResultText, props, ariSearchLoading, ariSearchResults, isLoadingNode)}\r\n {KeywordSuggestionsComponent(KeywordSuggest, UlKeyword, keywordsHeading, noResultText, autosuggestKeyword,\r\n isLoadingAutoSuggest, isLoadingNode)}\r\n \r\n {ProductSuggestionsComponent(ProductSuggest, UlProduct, props, autosuggestProduct,\r\n isLoadingAutoSuggest, isLoadingNode)}\r\n \r\n \r\n ) : null}\r\n }\r\n \r\n );\r\n};\r\nexport default SearchView;\r\n","import { IActionContext } from '@msdyn365-commerce/core-internal';\r\nimport { getUrlSync } from '@msdyn365-commerce/core';\r\n\r\nexport default function generateAriModelDetailUrl(modelId: string, brandCode: string, actionContext: IActionContext): string {\r\n const _modelDetailModelIdQueryParamKey = 'modelId';\r\n const _modelDetailBrandCodeQueryParamKey = 'brandCode';\r\n const _modelDetailSlug = 'model';\r\n let url = getUrlSync(_modelDetailSlug, actionContext);\r\n if (url) {\r\n url += `${\r\n url.indexOf('?') > -1 ? '&' : '?'\r\n }${_modelDetailModelIdQueryParamKey}=${modelId}&${_modelDetailBrandCodeQueryParamKey}=${brandCode}`;\r\n }\r\n\r\n return url || '';\r\n}\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAccountInvoiceTileDescription {\n description: string;\n}\n\nexport const AccountInvoiceTileDescription: React.FC = ({ description }) => (\n

    {description}

    \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILinksData } from '../account-invoice-tile.props.autogenerated';\n\nexport interface IAccountInvoiceTileLinks {\n links: ILinksData[];\n requestContext: Msdyn365.IRequestContext;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\nconst AccountInvoiceTileLinks: React.FC = ({ links, telemetryContent, requestContext, onTextChange }) => {\n if (links.length === 0) {\n return null;\n }\n const editableLinks = _mapEditableLinks(links, telemetryContent);\n return (\n
    \n {editableLinks && editableLinks.length > 0 ? (\n \n ) : null}\n
    \n );\n};\n\nconst _mapEditableLinks = (linkdata: ILinksData[], telemetryContent?: ITelemetryContent): Msdyn365.ILinksData[] | null => {\n if (!linkdata || linkdata.length === 0) {\n return null;\n }\n const editableLinks: Msdyn365.ILinksData[] = [];\n const payLoad = getPayloadObject('click', telemetryContent!, '');\n linkdata.forEach((link, index) => {\n payLoad.contentAction.etext = link.linkText;\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'ms-account-invoice-tile__link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link',\n additionalProperties: attributes\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\n};\n\nexport default AccountInvoiceTileLinks;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { format, getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IAccountInvoiceTileData } from './account-invoice-tile.data';\nimport { IAccountInvoiceTileProps } from './account-invoice-tile.props.autogenerated';\nimport { AccountInvoiceTileDescription } from './components';\nimport LinksComponent from './components/account-invoice-tile-links';\n\nexport interface IAccountInvoiceTileViewProps extends IAccountInvoiceTileProps {\n AccountInvoiceTile: IModuleProps;\n className: string;\n heading?: React.ReactNode;\n links?: React.ReactNode;\n description?: React.ReactNode;\n}\n\n/**\n *\n * AccountInvoiceTile component.\n * @extends {React.PureComponent>}\n */\nclass AccountInvoiceTile extends React.PureComponent> {\n private readonly telemetryContent: ITelemetryContent;\n\n constructor(props: IAccountInvoiceTileProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public render(): JSX.Element {\n const {\n config,\n data,\n resources,\n context: {\n cultureFormatter: {\n formatCurrency,\n\n // @ts-expect-error\n currencyCode\n }\n }\n } = this.props;\n const { className, heading, links } = config;\n const { accountInvoiceTileDescription } = resources;\n\n const openinvoiceAmount = data.customerBalance.result?.OpenInvoiceBalance || 0;\n const invoiceTotalAmount: string | undefined = formatCurrency(openinvoiceAmount.toFixed(2), currencyCode);\n\n const description = invoiceTotalAmount && format(accountInvoiceTileDescription, invoiceTotalAmount);\n\n const viewProps = {\n ...this.props,\n className,\n AccountInvoiceTile: {\n moduleProps: this.props,\n className: classnames('ms-account-invoice-tile', config.className)\n },\n heading: heading && heading.text && (\n \n ),\n links: links && links.length > 0 && (\n \n ),\n description: description && \n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading.text = event.target.value);\n\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\n if (this.props.config.links && this.props.config.links[linkIndex]) {\n this.props.config.links[linkIndex].linkText = event.target.value;\n }\n };\n}\n\nexport default AccountInvoiceTile;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAccountInvoiceTileViewProps } from './account-invoice-tile';\n\nexport default (props: IAccountInvoiceTileViewProps) => {\n const { AccountInvoiceTile, heading, description, links } = props;\n\n return (\n \n {heading}\n {description}\n {links}\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IFooterItemConfig, IFooterItemProps, IHeadingData, ILinkData } from './footer-item.props.autogenerated';\n\nexport interface IFooterViewProps extends IFooterItemProps {\n heading: React.ReactNode;\n image: React.ReactNode;\n text: React.ReactNode;\n linkText: React.ReactNode;\n className?: string;\n FooterItem: IModuleProps;\n HeadingContainer: INodeProps;\n ItemContainer: INodeProps;\n Link: INodeProps;\n EditableLink: React.ReactNode;\n}\n\n/**\n *\n * FooterItem component.\n * @extends {React.PureComponent>}\n */\nexport class FooterItem extends React.PureComponent> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n private attributes: Msdyn365.IDictionary | undefined;\n\n constructor(props: IFooterItemProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n // Construct telemetry attribute to render\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public render(): JSX.Element {\n const { heading, image, link, text } = this.props.config;\n const footerItemClassName = classnames('ms-footer__item', this.props.config.className);\n const linkText = link && link.linkText ? link.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n const viewProps: IFooterViewProps = {\n ...this.props,\n heading: this._createHeading(heading!),\n image: this._createImageMarkup(image!),\n text: this._createText(text!),\n linkText: this._createLinkText(link!),\n EditableLink: this._createLink(link!),\n\n FooterItem: {\n moduleProps: this.props,\n className: footerItemClassName\n },\n\n HeadingContainer: {\n className: 'ms-footer__heading'\n },\n\n ItemContainer: {\n className: 'ms-footer__link__container'\n },\n\n // @ts-expect-error\n Link: link &&\n link.linkUrl &&\n link.linkUrl.destinationUrl && {\n tag: 'a',\n role: 'link',\n className: 'ms-footer__link',\n href: link.linkUrl.destinationUrl,\n title: linkText,\n 'aria-label': link.ariaLabel,\n target: link.openInNewTab ? '_blank' : undefined,\n onClick: onTelemetryClick(this.telemetryContent, this.payLoad, linkText),\n ...this.attributes\n },\n className: footerItemClassName\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.text = event.target.value);\n\n public handleLinkTextChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.link!.linkText = event.target.value);\n\n private _createLink(link: ILinkData): React.ReactNode | null {\n if (link) {\n const linkText = link.linkText ? link.linkText : '';\n\n // TODO: Update the inner tag in the anchor link to span\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'ms-footer__link',\n linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link',\n additionalProperties: this.attributes!,\n onClick: onTelemetryClick(this.telemetryContent, this.payLoad, linkText)\n };\n return (\n \n );\n }\n return null;\n }\n\n private _createLinkText(link: ILinkData): React.ReactNode | null {\n if (!link || !link.linkText) {\n return null;\n }\n\n return {link.linkText};\n }\n\n private _createHeading(heading: IHeadingData): React.ReactNode | null {\n if (!heading || !heading.text || heading.text.length === 0) {\n return null;\n }\n\n return (\n \n );\n }\n\n private _createText(text: string): React.ReactNode | null {\n if (!text) {\n return null;\n }\n return (\n \n );\n }\n\n private _createImageMarkup(item: Msdyn365.IImageData, ariaHiddenAttr?: boolean): React.ReactNode | null {\n if (!item || !item.src || item.src.length === 0) {\n return null;\n }\n\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=24&h=24&m=6', w: 0, h: 0 },\n lg: { q: 'w=24&h=24&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n return (\n \n );\n }\n}\n\nexport default FooterItem;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IFooterViewProps } from './footer-item';\n\n/**\n *\n * FooterItemView component.\n * @extends {React.PureComponent}\n */\nexport class FooterItemView extends React.PureComponent {\n public render(): JSX.Element | null {\n const { FooterItem } = this.props;\n return {this._renderElement(this.props)};\n }\n\n private _renderElement(props: IFooterViewProps): React.ReactNode | null {\n const { heading, HeadingContainer, Link, linkText, image, text, EditableLink } = props;\n if (heading) {\n return {heading} ;\n } else if (Link && image) {\n return (\n \n {linkText}\n {image}\n \n );\n } else if (Link) {\n return EditableLink;\n }\n return (\n <>\n {text}\n {image}\n \n );\n }\n}\n\nexport default FooterItemView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\nimport { Button, ITelemetryContent, getPayloadObject, getTelemetryAttributes } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport classnames from 'classnames';\n\n/**\n * Class names used in component.\n */\nconst componentClassName = 'ms-order-history-with-search-and-filters-organization-wide-selector';\nconst buttonClassName = `${componentClassName}__button`;\nconst buttonActiveClassName = `${componentClassName}__active-button`;\nconst buttonInactiveClassName = `${componentClassName}__inactive-button`;\n\n/**\n * IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorResources interface.\n */\nexport interface IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorResources {\n currentUserOptionLabel: string;\n currentUserOptionAriaLabel?: string;\n organizationWideOptionLabel: string;\n organizationWideOptionAriaLabel?: string;\n}\n\n/**\n * OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState interface.\n */\nexport enum OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState {\n CurrentUser,\n OrganizationWide\n}\n\n/**\n * IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorData interface.\n */\nexport interface IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorData {\n customer: Customer;\n}\n\n/**\n * IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorProps interface.\n */\nexport interface IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorProps\n extends IComponentProps {\n className?: string;\n resources: IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorResources;\n currentSelectorState: OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState;\n telemetryContent?: ITelemetryContent;\n onChange(state: OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState): void;\n}\n\n/**\n * OrderHistoryWithSearchAndFiltersOrganizationWideSelector component.\n * @param props - Configuration of the component.\n * @returns React node.\n */\nconst OrderHistoryWithSearchAndFiltersOrganizationWideSelectorFunctionalComponent: React.FC = (\n props: IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorProps\n) => {\n // Current version doesn't include functionality for non b2b users or non-admin b2b users.\n if (!props.data.customer.IsB2bAdmin) {\n return
    ;\n }\n\n const [selectorState, setSelectorState] = React.useState(props.currentSelectorState);\n\n const onClickHandler = (newSelectorState: OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState) => {\n setSelectorState(newSelectorState);\n props.onChange(newSelectorState);\n };\n\n // define telemetry attributes\n const currentUserOrderHistoryAttributes = getTelemetryAttributes(\n props.telemetryContent!,\n getPayloadObject('click', props.telemetryContent!, props.resources?.currentUserOptionLabel ?? 'Current user order history')\n );\n const orgWideOrderHistoryAttributes = getTelemetryAttributes(\n props.telemetryContent!,\n getPayloadObject('click', props.telemetryContent!, props.resources?.currentUserOptionLabel ?? 'Org wide order history')\n );\n\n return (\n
    \n onClickHandler(OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState.CurrentUser)}\n {...currentUserOrderHistoryAttributes}\n >\n {props.resources?.currentUserOptionLabel}\n \n onClickHandler(OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState.OrganizationWide)}\n {...orgWideOrderHistoryAttributes}\n >\n {props.resources?.organizationWideOptionLabel}\n \n
    \n );\n};\n\n/**\n * OrderHistoryWithSearchAndFiltersOrganizationWideSelector component.\n */\nexport const OrderHistoryWithSearchAndFiltersOrganizationWideSelectorComponent: React.FunctionComponent = msdyn365Commerce.createComponent<\n // @ts-expect-error\n IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorProps\n>('OrderHistoryWithSearchAndFiltersOrganizationWideSelectorComponent', {\n component: OrderHistoryWithSearchAndFiltersOrganizationWideSelectorFunctionalComponent\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { addThrottledEvent, Drawer, IModuleProps, INodeProps, KeyCodes, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, observable } from 'mobx';\nimport React from 'react';\n\nimport { ISitePickerConfig, ISitePickerProps } from './site-picker.props.autogenerated';\n\nexport interface ISitePickerViewProps extends ISitePickerProps {\n SitePicker: IModuleProps;\n SitePickerMenu: INodeProps;\n SitePickerMenuSpan: INodeProps;\n SitePickerMenuList: INodeProps;\n SitePickerMenuListItem: INodeProps;\n SitePickerMenuListItemArray: React.ReactNode[] | undefined;\n siteOptionsState: boolean;\n SitePickerMobileContainer: INodeProps;\n isMobileView: boolean;\n renderSiteOptions(): void;\n resetSiteOptionsState(): void;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\ninterface ISitePickerState {\n expandSiteOptions: boolean;\n isMobile: boolean;\n}\n\n/**\n *\n * SitePicker component.\n * @extends {React.PureComponent>}\n */\nclass SitePicker extends React.PureComponent, ISitePickerState> {\n private readonly _cookieName: string = '_msdyn365___site_';\n\n private readonly _cookieExpirationInSeconds: number = 5_184_000;\n\n private readonly _sitePickerMenuNode: React.RefObject;\n\n private readonly _sitePickerMenuButton: React.RefObject;\n\n private resizeThrottledEventHandler?: (event: Event) => void;\n\n @observable\n private viewport: GridSize;\n\n public constructor(props: ISitePickerViewProps) {\n super(props);\n this._handleChange = this._handleChange.bind(this);\n this._sitePickerMenuNode = React.createRef();\n this._sitePickerMenuButton = React.createRef();\n this._renderSiteOptions = this._renderSiteOptions.bind(this);\n this._resetSiteOptionsState = this._resetSiteOptionsState.bind(this);\n this._escFunction = this._escFunction.bind(this);\n this._handleOutsideClick = this._handleOutsideClick.bind(this);\n this._updateViewport = this._updateViewport.bind(this);\n this.viewport =\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this.state = {\n expandSiteOptions: false,\n isMobile: this.isMobile\n };\n }\n\n @computed get isMobile(): boolean {\n return this.viewport === 'xs' || this.viewport === 'sm';\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document?.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document?.body?.addEventListener('mousedown', this._handleOutsideClick);\n this.resizeThrottledEventHandler = window && addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\n this._updateViewport();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document?.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document?.body?.removeEventListener('mousedown', this._handleOutsideClick, false);\n window && window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\n }\n }\n\n public render(): JSX.Element | null {\n const viewProps: ISitePickerViewProps = {\n ...(this.props as ISitePickerProps),\n SitePicker: {\n moduleProps: this.props,\n className: classnames('ms-site-picker', this.props.config.className, this.state.isMobile ? 'mobile-view' : 'desktop-view'),\n tag: 'div'\n },\n SitePickerMenu: {\n tag: 'button' as NodeTag,\n className: 'ms-site-picker__button',\n 'aria-label': this.props.config.heading?.text,\n 'aria-expanded': this.state.expandSiteOptions,\n onClick: this.props,\n ref: this._sitePickerMenuButton\n },\n SitePickerMenuSpan: {\n className: 'ms-site-picker__span',\n tag: 'span'\n },\n SitePickerMenuList: {\n className: 'ms-site-picker__list',\n role: 'menu',\n tag: 'ul',\n ref: this._sitePickerMenuNode\n },\n SitePickerMenuListItem: {\n className: 'ms-site-picker__list__item',\n role: 'presentation',\n tag: 'li'\n },\n SitePickerMobileContainer: {\n tag: Drawer,\n className: 'ms-site-picker__drawer',\n toggleButtonText: this.props.config.heading?.text,\n openGlyph: 'ms-site-picker__drawer-open',\n closeGlyph: 'ms-site-picker__drawer-close',\n glyphPlacement: 'end'\n },\n isMobileView: this.state.isMobile,\n SitePickerMenuListItemArray: this._renderSitePickerImage(),\n renderSiteOptions: this._renderSiteOptions,\n resetSiteOptionsState: this._resetSiteOptionsState,\n siteOptionsState: this.state.expandSiteOptions\n };\n return this.props.renderView(viewProps);\n }\n\n private _renderSiteOptions(): void {\n const expandSiteOptionsState = this.state.expandSiteOptions;\n this.setState({\n expandSiteOptions: !expandSiteOptionsState\n });\n }\n\n private _resetSiteOptionsState(): void {\n this.setState({\n expandSiteOptions: false\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _escFunction = (event: any) => {\n const key = event.keyCode;\n if (this.state.expandSiteOptions) {\n switch (key) {\n case KeyCodes.Escape: {\n setTimeout(() => {\n const nextFocus = document && document.activeElement;\n if (\n this._sitePickerMenuButton?.current?.contains(nextFocus) ||\n this._sitePickerMenuNode?.current?.contains(nextFocus)\n ) {\n this._resetSiteOptionsState();\n this._sitePickerMenuButton?.current?.focus();\n }\n }, 50);\n break;\n }\n case KeyCodes.Tab: {\n setTimeout(() => {\n const nextFocus = document && document.activeElement;\n if (\n !this._sitePickerMenuButton?.current?.contains(nextFocus) &&\n !this._sitePickerMenuNode?.current?.contains(nextFocus)\n ) {\n this._resetSiteOptionsState();\n }\n }, 50);\n break;\n }\n default:\n return;\n }\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _handleOutsideClick = (event: any) => {\n if (\n (this._sitePickerMenuButton.current?.contains(event.target) && this.state.expandSiteOptions) ||\n (this._sitePickerMenuNode.current?.contains(event.target) && this.state.expandSiteOptions)\n ) {\n return;\n }\n this._resetSiteOptionsState();\n };\n\n private _handleChange(e: React.MouseEvent): void {\n e.preventDefault();\n if (e.currentTarget.href && e.currentTarget.href.length > 0 && window) {\n if (this.props.context.request.cookies.isConsentGiven()) {\n const cookieConfig = { maxAge: this._cookieExpirationInSeconds };\n this.props.context.request.cookies.set(this._cookieName, e.currentTarget.href, cookieConfig);\n }\n window.location.assign(e.currentTarget.href);\n }\n }\n\n private _renderSitePickerImage(): React.ReactNode[] | undefined {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=50&h=25&m=6', w: 0, h: 0 },\n sm: { q: 'w=50&h=25&m=6', w: 0, h: 0 },\n md: { q: 'w=40&h=20&m=6', w: 0, h: 0 },\n lg: { q: 'w=40&h=20&m=6', w: 0, h: 0 },\n xl: { q: 'w=40&h=20&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n const siteOptions = this.props.config.siteOptions && this.props.config.siteOptions;\n return (\n siteOptions &&\n siteOptions.map((item, index) => {\n const image = item?.siteImage;\n const imageProps = {\n gridSettings: this.props.context.request.gridSettings!,\n imageSettings: image?.imageSettings?.viewports ? image.imageSettings : defaultImageSettings\n };\n return (\n \n {item?.siteName}\n \n \n );\n })\n );\n }\n\n private _updateViewport(): void {\n this.viewport = this._getViewport();\n this.setState({ isMobile: this.isMobile });\n }\n\n private _getViewport(): GridSize {\n const { context } = this.props;\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 return 'xs';\n }\n}\n\nexport default SitePicker;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISitePickerViewProps } from './site-picker';\n\nexport default (props: ISitePickerViewProps) => {\n return <>{_renderSitePicker(props)};\n};\n\nconst _renderDesktopView = (props: ISitePickerViewProps) => {\n const { SitePickerMenu, SitePickerMenuSpan } = props;\n return (\n <>\n \n {props.config.heading?.text}\n \n \n {props.siteOptionsState ? _renderSiteOptionsList(props) : null}\n \n );\n};\n\nconst _renderSiteOptionsList = (props: ISitePickerViewProps): React.ReactNode => {\n const { SitePickerMenuList, SitePickerMenuListItem, SitePickerMenuListItemArray } = props;\n const options = SitePickerMenuListItemArray!.map((item, index) => {\n return (\n \n {item}\n \n );\n });\n return (\n \n {options}\n \n );\n};\n\nconst _renderMobileView = (props: ISitePickerViewProps): React.ReactNode => {\n const { SitePickerMobileContainer } = props;\n return (\n \n
    \n {props.SitePickerMenuListItemArray?.map((item, index) => {\n return
    {item}
    ;\n })}\n
    \n
    \n );\n};\n\nconst _renderSitePicker = (props: ISitePickerViewProps): React.ReactNode => {\n const { isMobileView, SitePicker } = props;\n return {isMobileView ? _renderMobileView(props) : _renderDesktopView(props)};\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageSettings, Image } from '@msdyn365-commerce/core';\nimport {\n IReportReviewModalViewProps,\n IReviewCardViewProps,\n IReviewsListData,\n IReviewsListResources,\n IReviewsListState,\n IReviewsListViewProps\n} from '@msdyn365-commerce-modules/ratings-reviews';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IReviewsListProps } from '../definition-extensions/reviews-list.ext.props.autogenerated';\n\n/**\n * Build Review Card.\n * @param props - Review Card ViewProps.\n * @param resources - Resource Strings.\n * @param isUserReview - User review flag.\n * @returns JSX Element.\n */\nconst buildReviewCard = (props: IReviewCardViewProps, resources: IReviewsListResources, isUserReview: boolean) => {\n return (\n \n \n
    \n {props.rating}\n {props.date}\n
    \n {props.name}\n
    \n \n \n {props.reviewTitle}\n {props.reviewText}\n \n \n {props.responseName}\n {props.responseDate}\n {props.responseText}\n \n \n {isUserReview ? undefined :

    {resources.wasReviewHelpfulText}

    }\n {props.like}\n {props.dislike}\n {props.edit}\n
    \n
    \n
    \n );\n};\n\n/**\n * Render Product Image.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst renderProductImage = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\n const primaryImageSource = props.data.product.result?.PrimaryImageUrl;\n const imageUrl = generateImageUrl(primaryImageSource, props.context.request.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=111&h=111&m=6', w: 111, h: 111 },\n sm: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n md: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n lg: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n xl: { q: 'w=130&h=130&m=6', w: 130, h: 130 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n return (\n \n );\n};\n\n/**\n * Render Product Description.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst renderProductDescription = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\n const product = props.data.product.result;\n return (\n \n
    {renderProductImage(props)}
    \n
    \n
    {product?.Name}
    \n
    {product?.Name}
    \n
    {product?.ItemId}
    \n
    \n
    \n );\n};\n\n/**\n * Build Review modal.\n * @param props - Review list ViewProps.\n * @returns JSX Element.\n */\nconst createReviewModal = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\n const { resources, moduleProps, reviewModal } = props;\n return (\n \n {reviewModal.modalHeader}\n \n \n \n {renderProductDescription(props)}\n \n
    {resources.selectRatingLabel}
    \n {reviewModal.rating}\n
    \n
    \n \n {resources.reviewTitleLabel}\n {reviewModal.titleInput}\n \n \n {resources.reviewTextLabel}\n {reviewModal.textInput}\n \n {reviewModal.privacyPolicyUrl}\n {reviewModal.error}\n
    \n
    \n \n {reviewModal.submitButton}\n {reviewModal.cancelButton}\n \n
    \n );\n};\n\n/**\n * Build Review modal.\n * @param props - Review modal ViewProps.\n * @param state - Review List State.\n * @returns JSX Element.\n */\nconst createReportModal = (props: IReportReviewModalViewProps, state: IReviewsListState): JSX.Element => {\n return (\n \n {state.reported ? props.headerSubmitted : props.header}\n \n {state.reported ? props.reportSubmittedMessage : [props.reportMessage, props.radioButtons, props.error]}\n \n {state.reported ? props.succesfulButton : [props.submitButton, props.cancelButton]}\n \n );\n};\n\n/**\n * ReviewsList view.\n * @param props - Ratings ReviewsList ViewProps.\n * @returns ReviewsList view module.\n */\nconst ReviewsListview: React.FC> = props => {\n const {\n filterByDropdown,\n heading,\n moduleProps,\n noReviewsMessage,\n noReviewsWithFilterMessage,\n pageControls,\n refineReviewsProps,\n reportReviewModal,\n reviewsListProps,\n reviewCards,\n sortByDropdown,\n state,\n userReview,\n resources\n } = props;\n\n if (!userReview && !ArrayExtensions.hasElements(reviewCards) && !state.isFilterApplied) {\n return {noReviewsMessage};\n }\n\n return (\n \n {heading}\n \n {sortByDropdown}\n {filterByDropdown}\n \n \n {userReview && buildReviewCard(userReview, resources, true)}\n {reviewCards.map(review => {\n return buildReviewCard(review, resources, false);\n })}\n \n {!ArrayExtensions.hasElements(reviewCards) && state.isFilterApplied && noReviewsWithFilterMessage}\n {pageControls}\n {createReviewModal(props)}\n {createReportModal(reportReviewModal, state)}\n \n );\n};\n\nexport default ReviewsListview;\n"],"names":["UncontrolledPagination","React","constructor","props","super","this","maxPages","items","Math","ceil","itemsPerPage","qsps","splitUrl","url","split","parsedQsps","qsp","qspPair","render","_this$props","className","baseUrl","startingItem","previousText","nextText","previousAriaLabel","nextAriaLabel","listClassName","cssModule","children","size","tag","Tag","listTag","ListTag","label","role","_objectWithoutProperties","_excluded","activeQsp","paginationClasses","mapToCssModules","classNames","listpaginationClasses","Object","assign","_generatePageLinks","_generatePaginationArrow","next","disable","tooltipId","nextId","prevId","ariaDescribedBy","nextAreaDescribed","prevAreaDescribed","placement","PaginationItem","disabled","PaginationLink","id","previous","onClick","onPageChange","page","UncontrolledTooltip","target","_generatePaginationItem","active","_generateEllipse","leftDistance","rightDistance","leftEllipse","pagesDisplayed","rightEllipse","min","pages","displayedPagesOnLeft","startingIndex","max","endIndex","push","i","defaultProps","AriSearchResults","_queryResultSettings$","_this$props$data$ariR","_this$props$data$ariR2","_renderPrev","paginationPreviousText","_renderNext","paginationNextText","queryResultSettings","QueryResultSettingsProxy","fromInputData","context","actionContext","QueryResultSettings","Paging","Skip","config","state","models","data","ariResults","result","ariSearchResults","Models","totalCount","TotalCount","handlePaginationPageChange","bind","then","results","setState","getModelDetailPageUrl","modelId","brandCode","generateAriModelDetailUrl","updateModelResults","_this$props$context$r","top","Top","searchTerm","request","query","q","apiSettings","pageType","urlTokens","categoryId","searchModelInput","SearchModelsInput","getModelsBySearchText","getModelTable","modelsList","length","modelsListWithPageLinks","map","model","_objectSpread","detailPageUrl","Id","toString","BrandCode","modelHeading","manufacturerHeading","tableHeading","descriptionHeading","resources","ariSearchResultTableResources","AriSearchResultTableComponent","searchResults","pageNumber","generateUrlForPagination","requestUrl","renderPagination","paginationAriaLabel","Pagination","viewProps","modelTable","pagination","renderView","outerWidth","setOuterWidth","window","removeEventListener","addEventListener","passive","Table","colSpan","key","href","Name","Description","ListGroup","ListGroupItem","ListGroupItemHeading","ListGroupItemText","BackOrderList","BackOrderList_1","_this$props$data$back","_this$props$data$back2","_this$props$data$back3","_this$props$data$back4","_this$props$data$back5","numItemsToDisplay","backOrderItemsPerPage","defaultBackOrderItemsPerPage","_renderSortingType","sortingSelectLabelText","name","value","selectedSort","onChange","handleSortingTypeChange","defaultSortingSelectOption","availableSortOptions","sortOptions","backOrders","backOrderResults","backOrderData","BackOrderLines","RecordCount","AvailableSortOptions","sortOrder","SortOrder","SelectedSort","setBackOrderListResults","updateBackOrderResults","toggleSortOrder","componentDidMount","reaction","_this$props$data$back6","backOrderListResponse","async","skip","res","getBackOrderListAsync","callerContext","backOrderListTitleText","backOrderListItemsText","orderNumberHeadingText","poNumberHeadingText","mfrHeadingText","partNumberHeadingText","deliveryTypeHeadingText","qtyHeadingText","totalHeadingText","noBackOrdersMessageText","estShipDateHeadingText","backOrdersListResources","BackOrderTableComponent","backOrderEtaBuffer","ctx","sortingDropdown","sortOrderButton","renderSortOrderButton","currencyFormatter","cultureFormatter","formatCurrency","e","__decorate","observer","format","order","index","_order$ShippingDate","_order$ShippingDate2","deliveryType","DeliveryType","shipDateString","ShippingDate","startIndex","indexOf","parseFloat","substring","estShipDateRes","Date","setDate","getDate","SalesId","PurchaseOrderNumber","ManufacturerNumber","ItemId","Quantity","Total","formatDate","_order$ShippingDate3","_order$ShippingDate4","date","bufferInDays","undefined","defaultDate","getFullYear","getMonth","setTime","getTime","getTimezoneOffset","year","month","day","CourseTableComponent","courseList","cart","additionalInfo","viewState","setLoading","courseListHeading","courseListResultsHeading","courseNameHeading","courseDateHeading","courseRegistrationDetailsHeading","courseAddToCartHeading","addToCartButtonLabel","startLabel","endLabel","registrationEndsLabel","maximumAttendeesLabel","currentAttendeesLabel","courseExpiredMessage","courseFullMessage","errMessage","setErrMessage","fmt","timeZoneName","second","hour","minute","_handleAddToCart","cartId","addCourseToCartAsync","refreshCart","textContent","isLoading","Msdyn365","text","c","RecId","HRMCourseId","GDNCourseFee","StartDateTime","toLocaleString","EndDateTime","LastDateOfSignup","MaxAttendees","CurrentAttendees","CourseStatus","EducationTraining","_this$props$data$cour","_this$props$data$cour2","courses","courseResults","courseResponse","Courses","setCourseResults","setCartState","_this$props$data$cour3","_this$props$data$cart","prevState","getCourseDataAsync","educationTrainingResources","channelId","EveQuickOrderRow","onDelete","quantity","onRowChange","product","isLastRow","onAddRows","manufacturerCodes","defaultManufacturerCodeText","productEligibilityText","supersededProductText","rowError","manufacturerCode","advancedNotes","addRows","isToolTipOpen","setIsToolTipOpen","toggleTooltip","removeSpacesFromItemId","itemId","replace","code","GDNManufacturerCode","type","onFocus","RowError","None","_product$ExtensionPro","supersessionName","ExtensionProperties","find","ep","Key","SupersessionKey","SupersededName","Value","StringValue","notes","Tooltip","isOpen","toggle","note","TextValue","InvalidQuantity","ProductNotFound","MultipleChoicesAvailable","NotEligbile","Unavailable","getRowStatusMessage","Price","_product$ExtensionPro2","Inventory","handleRowDelete","xmlns","width","height","fill","viewBox","d","fillRule","getAvailability","EveQuickOrderButtonRow","clearAllText","addAllToCartText","canAddToCart","handleClearAll","handleAddToCart","EveQuickOrderHeader","heading","helpText","EveQuickOrder","_defaultMinQueryLength","_manufacturerCodeExtensionPropertyKey","getProductSupersessionProperty","extensionKey","properties","_properties$find","pr","_getManufacturerCodeList","row","availableProducts","availableCodes","p","_getManufacturerCodeForRow","filter","includes","_getExtensionPropertyValueByKey","valueType","_properties$find2","property","handleGuideTextChange","event","orderUploadGuideText","_handleRowDelete","_generateRow","_renderTable","_updateRowValue","_addTwoRows","_handleUploadedItems","_tableInit","_handleSelectedProductChange","_reorderRows","rows","debounce","_initDebounceFn","loading","defaultRows","_generateEmptyRow","_debounce","responseData","getProductSearchResult","searchText","ArrayExtensions","hasElements","Products","_responseData$0$Produ","getAdvancedNotesAsync","_updateRowProduct","idx","findIndex","r","_updateRowErrorState","combinedProducts","reduce","acc","cur","_ref","_cur$product","parseInt","cartState","input","count","catalogId","addProductsToCart","itemIds","response","getProductsByManufacturerItemIdAsync","list","inventoryRanges","_cart$result","_eligibilityData$resu","newItemIds","forEach","_r$Products","GetProductEligibilityInput","eligibilityData","GetProductEligibilityAction","getInventoryLevelRangesAsync","products","_eligibilityData$resu2","Promise","all","CommercePropertyValueEnum","string","String","IsEligible","IsAssorted","_pr$Products","_inventoryRanges","eligibilityRecord","l","IsUnavailable","currentInvString","currentInventory","ir","_ir$Profile","tempInvRange","Profile","invP","Code","OosUpperBound","hasOwnProperty","UpperBoundInclusive","_renderHeading","clearFormText","title","_getAllAddedProducts","_renderButtonRow","_this$props$data$cart2","addMoreRowsText","courseInCartText","invoiceInCartText","courseId","hasInvoiceLine","cartlines","CartLines","_row$product","RecordId","isLast","defaultDropdownText","deleteText","deleteHeading","onSelectedProductChange","productId","itemids","it","manufacturer","part_number","chunks","chunk","slice","promises","promiseResult","rowId","responseMatch","_it$manufacturer","_it$part_number","_r$SearchText","partNum","toLowerCase","partNumWithMfr","SearchText","foundProduct","qty","_generateRowData","_stripManufacturerFromSearchText","RegExp","prod","every","manufacturerCodeTableHeading","partNumberTableHeading","quantityTableHeading","itemNameHeading","priceHeading","availabilityHeading","splice","newRowId","_row$product2","maxQuantity","Number","isNaN","_getProductByRowQuery","_getProductManufacturerById","mfrCode","_product","minQueryLength","textToSearch","guideText","editProps","onEdit","requestContext","handleUploadedItems","quickOrderTable","quickOrderHeader","quickOrderWrapper","moduleProps","orderUploadWrapper","onUploadItems","slots","orderUpload","Module","Node","_renderGuide","orderUploadHelpLink","orderUploadHelpLinkDisplayText","ariaLabel","linkUrl","destinationUrl","InvoiceDetailsHeaderComponent","msdyn365Commerce","createComponent","component","_gdnInvoiceDetails$In","_gdnInvoiceDetails$In2","_gdnInvoiceDetails$In3","_gdnInvoiceDetails$In4","_gdnInvoiceDetails$In5","_gdnInvoiceDetails$In6","_gdnInvoiceDetails$In7","_gdnInvoiceDetails$In8","_gdnInvoiceDetails$In9","_gdnInvoiceDetails$In10","_gdnInvoiceDetails$In11","_gdnInvoiceDetails$In12","gdnInvoiceDetails","custNumberLabel","salesOrderNumLabel","purchaseOrderNumLabel","shipToLabel","shipViaLabel","invoiceDateLabel","orderDateLabel","invoiceNumberText","invoiceIdLabel","InvoiceDetails","InvoiceNumber","invoiceInfoContainerClassName","orderInfoContainerClassName","orderInfoClassName","orderMainInfoClassName","actionsClassName","amountSummaryClassName","invoiceDate","formatShortDate","InvoiceDate","orderDate","OrderDate","CustomerAccount","SalesOrderNumber","PoNumber","DeliveryAddress","DeliveryLocation","InvoiceLocation","InvoiceAddress","ShipVia","print","InvoiceDetailsPaymentDetailsComponent","currencyCode","detachText","billToSummaryLabel","invoiceSummaryLabel","orderSummaryLabel","totalPiecesSummaryLabel","termsSummaryLabel","invoicePaymentInvoiceTotal","invoiceAmountDueText","invoicePaymentDueDateText","invoiceDetails","lineClassName","lines","ObjectExtensions","isNullOrUndefined","SubTotal","invoicePaymentSubtotal","Tax","invoicePaymentTax","line","classnames","BillToAccount","TotalPieces","formatAmount","InvoiceAmount","Terms","AmountDue","DueDate","InvoiceDetailsProductsTableComponent","invoiceLines","itemIdHeading","quantityHeading","listPriceHeading","unitPriceHeading","totalHeading","custItemNumLabel","freightList","FreightList","combinedFreightList","reducedFreightList","fl","FreightAmount","FreightCode","FreightDescription","prototype","call","details","productUrl","ProductId","getProductPageUrlSync","LineNum","ItemNumber","CustItemNumber","ListPrice","UnitPrice","newDate","toUTCString","amount","errorState","errorMessage","otherError","_this$state$gdnInvoic","header","_renderHeader","_renderProducts","paymentDetails","_renderPaymentDetails","shipmentDetails","_renderShipmentInformation","invoiceDetailsError","ErrorMessage","_className","noInvoiceDetailsFoundErrorMessage","typeName","productsTableResources","InvoiceLineDetails","shippingInformationHeadingText","containerIdLabelText","weightLabelText","shippingCarrierLabelText","trackingLabel","shippingInformation","ShippingContainerInformation","_c$ContainerLinesList","ContainerId","Weight","ShippingCarrier","TrackingNumber","ContainerLinesList","cLines","InvoiceDetailsView","AriPartsListTableComponent","tableHeadings","parts","baseClassName","goToId","addPartToCart","partIdPrefix","selectedRow","isAuthenticated","requiresAuthentication","loginToViewPricingText","signInUrl","isMobile","isDrawerOpen","unavailableText","addToCartText","closePartDrawer","priceFormatter","yPosition","setYPosition","pageYOffset","selectedPartIdName","part","_part$Product6","PartId","Sku","Product","Qty","defaultValue","th","_part$Product","_part$Product2","_part$Product3","_part$Product4","_part$Product5","partId","description","getExtensionPropertyValueByKey","oosUpperBound","oosUpperBoundLimit","isEligible","JSON","stringify","BasePrice","element","document","getElementById","scrollTo","getBoundingClientRect","scrollDownClickHandler","RenderCard","rowText","buttonText","isButtonDisabled","dropdown","ReportsExport","_getPartList","PartNo","_toggleModalNotificationActive","isModalActive","_renderModal","isModalMessageSuccess","modalMessage","requestFailed","requestSuccessFul","Modal","ModalHeader","ModalBody","handleHeadingChange","_setManufacturerCodeState","_setSalesByPartSearchTypeState","_handleButtonClick","priceByMfrSelectedMfrMultiSelect","priceByMfrSelectedMfrCodes","salesByMfrSelectedMfrMultiSelect","salesByMfrSelectedMfrCodes","salesByPartSelectedPartMultiSelect","salesByPartSelectedPartCodes","salesByPartSelectedSearchType","selectedMfrCodes","reportIdentifier","priceFilesReportText","salesByMfrReportText","salesByPartReportText","newSelectedMfrCodeList","_clearSelectedManufacturers","_setMultiSelectRendering","selected","numOfSelectedManufacturers","noSelectedManufacturers","selectedString","_renderSalesDropdown","organizationDropdownLabel","locationDropdownLabel","pleaseSelectDefaultLabel","searchTypeList","searchType","_renderManufacturerDropdown","selectManufacturersLabel","numOfSelectedParts","noSelectedParts","selectPartsLabel","options","noneSelectedLabel","numOfSelectedLabel","selectLabel","mfrCodeList","optionRow","partList","MultiSelect","_getMultiSelectValue","selectedCodes","labelledBy","disableSearch","valueRenderer","mfrCodeListString","join","getPriceByManufacturerAsync","_setModalMessageAndToggle","PriceByManufacturerMessage","DidPriceByManufacturerComplete","salesReportResult","getSalesReportAsync","SalesReportMessage","DidSalesReportComplete","ex","message","console","log","messageSuccess","requestSuccessfulMessageText","requestFailedMessageText","_renderRow","requestReportsBtnText","rowTextList","AccountOrderTemplatesTile","reportsList","modal","_renderItem","quantityLabel","ProductsTableRow","selectLine","productImage","productPrice","productNumber","addToBagButton","removeButton","productInfo","productUnitOfMeasure","productQuantityView","productQuantity","popUp","OrderTemplateLines","status","statusMessage","ProductsTable","ProductsTableHeading","orderLines","productsStatusMessage","OrderTemplateActions","orderActions","itemAddedToCartDialog","bulkOrderLineActions","isDetailsDisplayed","detailedProductView","toggleDetailsDisplayed","cancelBtnLabel","productNumberText","productText","productUnitPriceText","productUOMText","productQuantityText","toggleDetails","addTemplateToBag","renameTemplate","removeTemplate","wrapClassName","autoFocus","fade","applicationNode","ModalFooter","Button","renderCategorySuggestionsTitle","inCategoriesHeading","categoryAutoSuggestionHeading","CategorySuggestionsComponent","noResultText","isLoadingAutoSuggest","isLoadingNode","autosuggestCategory","CategorySuggest","UlCategory","MobileAutoSuggestEmptyComponent","noSearchResultImage","src","Image","altText","gridSettings","imageSettings","lazyload","viewports","xs","w","h","renderProductNotFoundResultsImage","emptyMobileSearchTextHeading","emptyMobileSearchText","FormComponent","form","searchForm","formWrapper","clearSearchButtonText","isSearchText","clearSearch","cancelBtn","renderClearButton","submitBtn","renderKeywordSuggestionsTitle","keywordsHeading","KeywordSuggestionsComponent","keywordSuggest","ulKeyword","keywordSuggestions","renderProductSuggestionsTitle","productSuggestionsHeading","productAutoSuggestionHeading","renderProductNotFoundResults","noResultContentHeadingText","noResultContentParagraphText","ProductSuggestionsComponent","productSuggest","ulProduct","productSuggestions","productSuggestionHeading","item","_item$id","LiProduct","AProduct","thumbnail","price","AriSuggestionsComponent","noResultsText","loadingNode","ariModelResultsHeading","renderTitle","searchSuggestionHeading","searchTextString","concat","searchAutoSuggestionHeading","Search","AutoSuggestAriaLabel","AutoSuggestAriaLabelText","AutoSuggest","KeywordSuggest","ProductSuggest","UlKeyword","UlProduct","autosuggestKeyword","autosuggestProduct","SearchForm","FormWrapper","topResultsCount","categorySuggestionHeading","setSearchTextString","useState","isMobilePort","setIsMobile","setAriSearchResults","ariSearchLoading","setAriSearchLoading","debouncedSearchHandler","useMemo","search","getAriSearchResults","useEffect","cancel","propsFormInput","propsFormInputCurrent","ref","current","action","isMobileViewport","useCallback","isMobileView","variant","VariantType","Browser","StringExtensions","isNullOrEmpty","SearchModelsAction","cancelBtnAriaLabel","isSearchFormExpanded","_appendQueryParams","route","MsDyn365","isBrowser","queryUrl","URL","location","searchParams","set","_generateSeeMoreUrl","app","searchQueryStringParameter","searchQsp","getUrlSync","AccountInvoiceTileDescription","_mapEditableLinks","linkdata","telemetryContent","editableLinks","payLoad","getPayloadObject","link","contentAction","etext","linkText","attributes","getTelemetryAttributes","editableLink","openInNewTab","additionalProperties","links","onTextChange","AccountInvoiceTile","handleLinkTextChange","linkIndex","getTelemetryObject","telemetryPageName","friendlyName","telemetry","_data$customerBalance","accountInvoiceTileDescription","invoiceTotalAmount","customerBalance","OpenInvoiceBalance","toFixed","LinksComponent","FooterItem","handleTextChange","image","footerItemClassName","_createHeading","_createImageMarkup","_createText","_createLinkText","EditableLink","_createLink","HeadingContainer","ItemContainer","Link","onTelemetryClick","ariaHiddenAttr","lg","loadFailureBehavior","shouldSkipToMainImage","FooterItemView","_renderElement","componentClassName","buttonClassName","buttonActiveClassName","buttonInactiveClassName","OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState","OrderHistoryWithSearchAndFiltersOrganizationWideSelectorComponent","_props$resources$curr","_props$resources","_props$resources$curr2","_props$resources2","_props$resources$curr3","_props$resources3","_props$resources4","_props$resources$curr4","_props$resources5","_props$resources6","_props$resources7","_props$resources$orga","_props$resources8","_props$resources9","_props$resources$orga2","_props$resources10","_props$resources11","_props$resources12","customer","IsB2bAdmin","selectorState","setSelectorState","currentSelectorState","onClickHandler","newSelectorState","currentUserOrderHistoryAttributes","currentUserOptionLabel","orgWideOrderHistoryAttributes","CurrentUser","currentUserOptionAriaLabel","OrganizationWide","organizationWideOptionAriaLabel","organizationWideOptionLabel","SitePicker","_cookieName","_cookieExpirationInSeconds","_escFunction","keyCode","expandSiteOptions","KeyCodes","Escape","setTimeout","_this$_sitePickerMenu","_this$_sitePickerMenu2","nextFocus","activeElement","_this$_sitePickerMenu3","_sitePickerMenuButton","contains","_sitePickerMenuNode","_resetSiteOptionsState","focus","Tab","_this$_sitePickerMenu4","_this$_sitePickerMenu5","_handleOutsideClick","_this$_sitePickerMenu6","_this$_sitePickerMenu7","_handleChange","_renderSiteOptions","_updateViewport","viewport","device","Type","_document","_document2","body","resizeThrottledEventHandler","addThrottledEvent","componentWillUnmount","_document3","_document4","_this$props$config$he","_this$props$config$he2","SitePickerMenu","SitePickerMenuSpan","SitePickerMenuList","SitePickerMenuListItem","SitePickerMobileContainer","Drawer","toggleButtonText","openGlyph","closeGlyph","glyphPlacement","SitePickerMenuListItemArray","_renderSitePickerImage","renderSiteOptions","resetSiteOptionsState","siteOptionsState","expandSiteOptionsState","preventDefault","currentTarget","cookies","isConsentGiven","cookieConfig","maxAge","defaultImageSettings","sm","md","xl","siteOptions","_image$imageSettings","_item$siteRedirectUrl","siteImage","imageProps","tabIndex","siteRedirectUrl","siteName","_getViewport","innerWidth","observable","computed","_renderSitePicker","_renderSiteOptionsList","onMouseLeave","_props$SitePickerMenu","_renderMobileView","_props$config$heading","_renderDesktopView","buildReviewCard","isUserReview","cardProps","headerProps","rating","cardBodyProps","reviewProps","reviewTitle","reviewText","responseProps","responseName","responseDate","responseText","controlsProps","wasReviewHelpfulText","like","dislike","edit","renderProductDescription","_props$data$product$r","primaryImageSource","PrimaryImageUrl","imageUrl","generateImageUrl","cropFocalRegion","renderProductImage","filterByDropdown","noReviewsMessage","noReviewsWithFilterMessage","pageControls","refineReviewsProps","reportReviewModal","reviewsListProps","reviewCards","sortByDropdown","userReview","isFilterApplied","review","reviewModal","modalHeader","modalBody","inputRow","selectRatingLabel","reviewTitleLabel","titleInput","reviewTextLabel","textInput","privacyPolicyUrl","error","modalFooter","submitButton","cancelButton","createReviewModal","createReportModal","reported","headerSubmitted","reportSubmittedMessage","reportMessage","radioButtons","succesfulButton"],"sourceRoot":""}