{"version":3,"file":"static/js/27.1014465d84c50ffd5fc4.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/model-viewer/components/AriHotspotImage.component.tsx?7aff","webpack://Msdyn365.Commerce.Online/./src/modules/model-viewer/components/AriPartsListTable.component.tsx?cb62","webpack://Msdyn365.Commerce.Online/./src/modules/model-viewer/components/assemblyDropdown.component.tsx?9cc7","webpack://Msdyn365.Commerce.Online/./src/modules/model-viewer/model-viewer.tsx?52ad","webpack://Msdyn365.Commerce.Online/./src/modules/model-viewer/model-viewer.view.tsx?9691","webpack://Msdyn365.Commerce.Online/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.array.flat-map.js?a1b3","webpack://Msdyn365.Commerce.Online/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.array.unscopables.flat-map.js?8a78"],"sourcesContent":["import React from 'react';\r\nimport { IAriServiceHotSpot, IAriServiceAssemblyInformation } from '../../../actions/DataServiceEntities.g';\r\nimport { ReactZoomPanPinchRef, TransformComponent, TransformWrapper } from 'react-zoom-pan-pinch';\r\n\r\n/**\r\n * Resource strings from definition file\r\n */\r\ninterface IAriHotspotImageResources {\r\n centerButtonText: string;\r\n resetButtonText: string;\r\n zoomInButtonText: string;\r\n zoomOutButtonText: string;\r\n hotspotUsageHelpText: string;\r\n assemblyOptionsPlaceholderText: string;\r\n}\r\n\r\n/**\r\n * Component props\r\n */\r\ninterface IAriHotspotImageProps {\r\n renderHeader(renderToolButtonRow: JSX.Element | null): JSX.Element;\r\n assemblyDetailState: IAriServiceAssemblyInformation | undefined;\r\n resources: IAriHotspotImageResources;\r\n baseClassName: string;\r\n ImageUrl?: string;\r\n HotSpots?: IAriServiceHotSpot[];\r\n Name?: string;\r\n transformRef: React.Ref;\r\n goToPart(id: string, selectedPartIdName: string): void;\r\n tagIdPrefix: string;\r\n isMobile: boolean;\r\n}\r\n\r\n/**\r\n * Component to render the image with hotspots\r\n * @param props component props\r\n */\r\nexport const AriHotspotImage: React.FC = props => {\r\n const {\r\n baseClassName,\r\n // ImageUrl,\r\n // HotSpots,\r\n // Name,\r\n transformRef,\r\n resources: {\r\n centerButtonText,\r\n zoomInButtonText,\r\n zoomOutButtonText,\r\n resetButtonText,\r\n hotspotUsageHelpText,\r\n assemblyOptionsPlaceholderText\r\n },\r\n goToPart,\r\n tagIdPrefix,\r\n isMobile,\r\n renderHeader,\r\n assemblyDetailState\r\n } = props;\r\n\r\n const [mapUsed, setMapUsed] = React.useState(false);\r\n const [shouldRender, setShouldRender] = React.useState(true);\r\n\r\n React.useEffect(() => {\r\n // console.log(`In timeout: ${shouldRender}`);\r\n setShouldRender(false);\r\n setTimeout(() => {\r\n setShouldRender(true);\r\n }, 50);\r\n }, [assemblyDetailState]);\r\n\r\n /**\r\n * Generates the style required for the hotspot\r\n * @param hs hotspot\r\n */\r\n const generateHotspotStyle = (hs: IAriServiceHotSpot): React.CSSProperties => {\r\n const cssProperties: React.CSSProperties = {};\r\n if (!hs.TopLeft?.X || !hs.TopLeft.Y) {\r\n return {};\r\n }\r\n cssProperties.left = `${hs.TopLeft.X}px`;\r\n cssProperties.top = `${hs.TopLeft.Y}px`;\r\n if (hs.BottomRight?.X && hs.BottomRight.Y) {\r\n cssProperties.height = `${parseInt(hs.BottomRight.X, 10) - parseInt(hs.TopLeft.X, 10) + 10}px`;\r\n cssProperties.width = `${parseInt(hs.BottomRight.Y, 10) - parseInt(hs.TopLeft.Y, 10) + 10}px`;\r\n }\r\n return cssProperties;\r\n };\r\n\r\n const renderToolButtonRow = (\r\n baseClassName: string,\r\n zoomIn: () => void,\r\n zoomOut: () => void,\r\n resetTransform: () => void,\r\n centerView: () => void,\r\n centerButtonText: string,\r\n zoomInButtonText: string,\r\n zoomOutButtonText: string,\r\n resetButtonText: string\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 const handleHelperWrapperClick = () => setMapUsed(true);\r\n const initialScale = isMobile ? 0.4 : 0.6;\r\n const initialPositionX = isMobile ? 0 : 150;\r\n const isMobileToolsClassName = isMobile ? `${baseClassName}__tools--mobile` : '';\r\n const isMobileTransformWrapperClassName = isMobile ? `${baseClassName}__transform-wrapper--mobile` : '';\r\n const selectedPartIdName = `${baseClassName}__part-selection-popover`;\r\n return (\r\n \r\n {({ zoomIn, zoomOut, resetTransform, centerView, ...rest }) => (\r\n \r\n {assemblyDetailState && shouldRender ? (\r\n <>\r\n {renderHeader(\r\n renderToolButtonRow(\r\n baseClassName,\r\n zoomIn,\r\n zoomOut,\r\n resetTransform,\r\n centerView,\r\n centerButtonText,\r\n zoomInButtonText,\r\n zoomOutButtonText,\r\n resetButtonText\r\n )\r\n )}\r\n \r\n
\r\n {!mapUsed ? (\r\n
\r\n {hotspotUsageHelpText}\r\n
\r\n ) : null}\r\n {assemblyDetailState.Name}\r\n
\r\n {!isMobile &&\r\n assemblyDetailState.HotSpots &&\r\n assemblyDetailState.HotSpots.map(hs => (\r\n goToPart(hs.Tag!, selectedPartIdName)}\r\n id={`${tagIdPrefix}${hs.Tag}`}\r\n />\r\n ))}\r\n
\r\n
\r\n
\r\n \r\n ) : (\r\n <>\r\n {renderHeader(null)}\r\n \r\n
\r\n \r\n
\r\n {assemblyOptionsPlaceholderText}\r\n
\r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n};\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 React from 'react';\r\nimport { IAriServiceModelAssemblySearch } from '../../../actions/DataServiceEntities.g';\r\n\r\ninterface IAssemblyDropdownComponent {\r\n baseClassName: string;\r\n assemblyData: IAriServiceModelAssemblySearch[];\r\n onAssemblySelect(id: number): void;\r\n defaultOptionString: string;\r\n}\r\n\r\nexport const AssemblyDropdownComponent: React.FC = ({\r\n baseClassName,\r\n assemblyData,\r\n onAssemblySelect,\r\n defaultOptionString\r\n}) => {\r\n const handleAssemblySelect = (e: React.ChangeEvent) => {\r\n const id = e.target.value;\r\n onAssemblySelect(parseInt(id, 10));\r\n };\r\n if (!assemblyData) {\r\n return null;\r\n }\r\n\r\n return (\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 { computed, observable } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\n\r\nimport { IModelViewerData } from './model-viewer.data';\r\nimport { IModelViewerProps } from './model-viewer.props.autogenerated';\r\nimport { getAriAssemblyDetailsAsync, getManufacturerBrandNameAsync } from '../../actions/DataActionExtension.g';\r\nimport { IAriServiceAssemblyInformation, IAriServiceAssemblyPart } from '../../actions/DataServiceEntities.g';\r\nimport { ReactZoomPanPinchRef } from 'react-zoom-pan-pinch';\r\nimport { AssemblyDropdownComponent } from './components/assemblyDropdown.component';\r\nimport { AriHotspotImage } from './components/AriHotspotImage.component';\r\nimport { AriPartsListTableComponent } from './components/AriPartsListTable.component';\r\nimport { ProductSearchResult, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport * as _ from 'lodash';\r\nimport getPartStateAction, { GetPartStateInput, IProductSearchResultWithState } from '../../actions/get-part-state.action';\r\nimport getExtensionPropertyValueByKey from '../../utils/getExtensionPropertyValueByKey';\r\nimport { CommercePropertyValueEnum } from '../../modules/allowable-freight/utils/CommercePropertyValueEnum';\r\n\r\n/**\r\n * Props for the view component\r\n */\r\nexport interface IModelViewerViewProps extends IModelViewerProps {\r\n assemblyList: React.ReactNode;\r\n hotspotImage: React.ReactNode | null;\r\n partsList: React.ReactNode | null;\r\n baseClassName: string;\r\n heading: React.ReactNode | null;\r\n isMobile: boolean;\r\n}\r\n\r\nexport interface IAriServiceAssemblyPartProductCombinations extends IAriServiceAssemblyPart {\r\n Product?: IProductSearchResultWithState;\r\n}\r\n\r\ntype GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n/**\r\n * State for the component\r\n */\r\ninterface IModelViewerState {\r\n assemblyDetail: IAriServiceAssemblyInformation | undefined;\r\n isPartResponseError: boolean;\r\n selectedRow: string | undefined;\r\n isDrawerOpen: boolean;\r\n ariBrandName: string;\r\n manufacturerCode: string;\r\n gotProductData: boolean;\r\n}\r\n\r\nexport interface RowFeedback {\r\n message: string;\r\n success: boolean;\r\n}\r\n\r\nexport enum SupersessionKey {\r\n SupersededId = 'superseded-from-id',\r\n SupersededName = 'superseded-from-name',\r\n Inventory = 'inventory'\r\n}\r\n\r\n/**\r\n *\r\n * ModelViewer component\r\n * @extends {React.PureComponent>}\r\n */\r\n@observer\r\nclass ModelViewer extends React.PureComponent, IModelViewerState> {\r\n /**\r\n * Base class name for the elements on the page\r\n * @private\r\n */\r\n private _baseClassName = 'ari-model-viewer';\r\n /**\r\n * React Ref pointing to the transition component\r\n * @private\r\n */\r\n private _transformRef = React.createRef();\r\n /**\r\n * Id prefix for the part\r\n * @private\r\n */\r\n private _partIdPrefix = 'part__';\r\n /**\r\n * Id prefix for the tag\r\n * @private\r\n */\r\n private _tagIdPrefix = 'ref__';\r\n\r\n @observable\r\n private _viewport: GridSize;\r\n\r\n constructor(props: IModelViewerProps) {\r\n super(props);\r\n\r\n this._viewport =\r\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\r\n\r\n this.state = {\r\n assemblyDetail: undefined,\r\n isPartResponseError: false,\r\n selectedRow: undefined,\r\n isDrawerOpen: false,\r\n ariBrandName: '',\r\n manufacturerCode: '',\r\n gotProductData: false\r\n };\r\n\r\n this._updateViewport = this._updateViewport.bind(this);\r\n this.getAssemblyDetails = this.getAssemblyDetails.bind(this);\r\n this.goToId = this.goToId.bind(this);\r\n this.goToPart = this.goToPart.bind(this);\r\n this.closePartDrawer = this.closePartDrawer.bind(this);\r\n this.renderAssemblyHeader = this.renderAssemblyHeader.bind(this);\r\n this.addPartToCart = this.addPartToCart.bind(this);\r\n }\r\n\r\n @computed get isMobile(): boolean {\r\n // return this._viewport === 'xs' || this._viewport === 'sm';\r\n return this._viewport === 'xs';\r\n }\r\n\r\n public componentDidMount(): void {\r\n const {\r\n context: {\r\n request: { query }\r\n }\r\n } = this.props;\r\n if (MsDyn365.isBrowser) {\r\n window.addEventListener('resize', this._updateViewport);\r\n this._updateViewport();\r\n }\r\n void this._getManufacturerCodeName(query!.brandCode);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.isBrowser) {\r\n window.removeEventListener('resize', this._updateViewport);\r\n }\r\n }\r\n\r\n /**\r\n * Renders the assembly header\r\n * @private\r\n */\r\n private renderAssemblyHeader(renderToolButtonRow: JSX.Element | null) {\r\n const {\r\n data: {\r\n assemblyList: { result }\r\n },\r\n resources: { defaultAssemblyOption, selectedOptionPrefix }\r\n } = this.props;\r\n const { assemblyDetail } = this.state;\r\n const isMobileClassName = this.isMobile ? `${this._baseClassName}__header--mobile` : '';\r\n if (!result) {\r\n return
;\r\n } else {\r\n return (\r\n
\r\n {assemblyDetail ? (\r\n
\r\n

\r\n {selectedOptionPrefix} {assemblyDetail?.Name}\r\n

\r\n
\r\n ) : null}\r\n
\r\n \r\n {renderToolButtonRow}\r\n
\r\n
\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Renders the page title\r\n * @private\r\n */\r\n private renderTitle() {\r\n const {\r\n data: {\r\n assemblyList: { result }\r\n }\r\n } = this.props;\r\n if (result && result.ariAssemblyData?.length) {\r\n const firstAssembly = result.ariAssemblyData[0];\r\n return (\r\n
\r\n

{`${\r\n this.state.ariBrandName ? `${this.state.ariBrandName} - ` : ''\r\n }${firstAssembly.ParentName}`}

\r\n
\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private async _getManufacturerCodeName(brandCode: string): Promise {\r\n const codesResults = this.props.data.manufacturerCodes.result ? this.props.data.manufacturerCodes.result : [];\r\n\r\n if (codesResults.length === 0) {\r\n return;\r\n }\r\n try {\r\n const response = await getManufacturerBrandNameAsync({ callerContext: this.props.context.actionContext }, brandCode);\r\n this.setState({ ariBrandName: response[0].Description || '', manufacturerCode: response[0].ManufacturerCode || '' });\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n\r\n /**\r\n * Gets assembly details from the data service\r\n * @param assemblyId Assembly Id to get details for\r\n * @private\r\n */\r\n private async getAssemblyDetails(assemblyId: number) {\r\n if (assemblyId === 0) {\r\n return;\r\n }\r\n const {\r\n context: {\r\n request: {\r\n // @ts-ignore\r\n query: { brandCode, modelId }\r\n }\r\n }\r\n } = this.props;\r\n try {\r\n const response = await getAriAssemblyDetailsAsync(\r\n { callerContext: this.props.context.actionContext },\r\n brandCode,\r\n parseInt(modelId, 10),\r\n assemblyId\r\n );\r\n\r\n this.setState(\r\n {\r\n assemblyDetail: response\r\n },\r\n () => this.loadProductMappings()\r\n );\r\n } catch (err) {\r\n this.setState({ isPartResponseError: true });\r\n }\r\n }\r\n\r\n private async loadProductMappings() {\r\n const mfrCode = this.state.manufacturerCode;\r\n const baseParts = this.state.assemblyDetail?.Parts;\r\n\r\n if (!baseParts) {\r\n return;\r\n }\r\n\r\n const mfrCodes: string[] = [];\r\n\r\n if (mfrCode === 'HRT' || mfrCode === 'TTI' || mfrCode === 'HOM') {\r\n mfrCodes.push(...['HOM', 'HRT', 'TTI'].filter(c => c !== mfrCode));\r\n }\r\n mfrCodes.unshift(mfrCode);\r\n const partIds: string[] = baseParts.flatMap(p => {\r\n return mfrCodes.map(m => {\r\n return `${m}${p.Sku}`;\r\n });\r\n });\r\n\r\n if (partIds && Array.isArray(partIds)) {\r\n const promises = await this.getProducts(partIds);\r\n const response = _.flatten(promises);\r\n const partproducts: IAriServiceAssemblyPartProductCombinations[] = [];\r\n const parts = baseParts?.slice() as IAriServiceAssemblyPartProductCombinations[];\r\n\r\n parts?.forEach(part => {\r\n const codes = mfrCodes.map(m => `${m}${part.Sku || ''}`);\r\n const responseProduct = response.find(p => {\r\n const supersededIdRes = getExtensionPropertyValueByKey(\r\n p.ExtensionProperties,\r\n SupersessionKey.SupersededId,\r\n CommercePropertyValueEnum.string\r\n );\r\n const supersededId = typeof supersededIdRes === 'string' ? supersededIdRes : undefined;\r\n const foundCode = codes.find(c => p.ItemId === c || (supersededId && supersededId === c));\r\n return foundCode ? p : null;\r\n // return p.ItemId === code || (supersededId && supersededId === code);\r\n });\r\n partproducts.push({ ...part, Product: responseProduct });\r\n });\r\n\r\n const stateAssemblyCopy = this.state.assemblyDetail;\r\n\r\n if (stateAssemblyCopy) {\r\n stateAssemblyCopy.Parts = partproducts;\r\n\r\n this.setState({\r\n assemblyDetail: stateAssemblyCopy,\r\n gotProductData: true\r\n });\r\n }\r\n }\r\n }\r\n\r\n private async getProducts(partIds: string[]): Promise {\r\n const cart = await this.props.data.cart;\r\n const cartId = cart.cart.Id;\r\n const addressId = cart.cart.ShippingAddress?.RecordId || 0;\r\n const input = new GetPartStateInput(partIds, addressId, cartId, this.props.context.request.channel!.RecordId);\r\n const partresponse = await getPartStateAction(input, this.props.context.actionContext);\r\n\r\n // needed to get list of products excluded from criteriaResponse data action in getPartStateAction\r\n const missingProducts = [];\r\n if (this.state.assemblyDetail?.Parts) {\r\n for (let i = 0; i < this.state.assemblyDetail?.Parts?.length; i++) {\r\n let found = false;\r\n for (let j = 0; j < partresponse.productResults.length; j++) {\r\n // if (partresponse.productResults[j].ItemId === this.state.assemblyDetail?.Parts[i].PartId) {\r\n if (partresponse.productResults[j].ItemId?.substring(3) === this.state.assemblyDetail?.Parts[i].Sku) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (!found) {\r\n const tempProduct: IProductSearchResultWithState = {\r\n ItemId: `${this.state.manufacturerCode}${this.state.assemblyDetail?.Parts[i].Sku}`,\r\n Name: this.state.assemblyDetail?.Parts[i].Description,\r\n Description: this.state.assemblyDetail?.Parts[i].Description,\r\n Price: this.state.assemblyDetail?.Parts[i].MSRP,\r\n RecordId: 0\r\n };\r\n missingProducts.push(tempProduct);\r\n }\r\n }\r\n // end get missing list of products\r\n }\r\n return partresponse.productResults.concat(missingProducts);\r\n }\r\n\r\n /**\r\n * Renders the hotspot image\r\n * @private\r\n */\r\n private renderHotspotImage() {\r\n const {\r\n resources: {\r\n assemblyOptionsPlaceholderText,\r\n centerButtonText,\r\n resetButtonText,\r\n zoomInButtonText,\r\n zoomOutButtonText,\r\n hotspotUsageHelpText\r\n }\r\n } = this.props;\r\n const resources = {\r\n centerButtonText,\r\n resetButtonText,\r\n zoomInButtonText,\r\n zoomOutButtonText,\r\n hotspotUsageHelpText,\r\n assemblyOptionsPlaceholderText\r\n };\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Renders the parts list\r\n * @private\r\n */\r\n private renderPartsList() {\r\n if (this.state.assemblyDetail === undefined) {\r\n return null;\r\n }\r\n const {\r\n state: {\r\n assemblyDetail: { Parts },\r\n selectedRow,\r\n isDrawerOpen\r\n },\r\n _baseClassName,\r\n goToId,\r\n addPartToCart,\r\n closePartDrawer,\r\n _partIdPrefix\r\n } = this;\r\n\r\n const {\r\n resources: {\r\n refIdColHeading,\r\n partNoColHeading,\r\n descriptionColHeading,\r\n availabilityColHeading,\r\n yourPriceColHeading,\r\n listPriceColHeading,\r\n qtyColHeading,\r\n loginToViewPricingText,\r\n addToCartText,\r\n unavailableText,\r\n orderColHeading\r\n },\r\n context: {\r\n request: {\r\n user: { isAuthenticated, signInUrl }\r\n },\r\n cultureFormatter: { formatCurrency }\r\n }\r\n } = this.props;\r\n const tableHeadings = [\r\n refIdColHeading,\r\n partNoColHeading,\r\n descriptionColHeading,\r\n availabilityColHeading,\r\n listPriceColHeading,\r\n yourPriceColHeading,\r\n qtyColHeading,\r\n orderColHeading\r\n ];\r\n\r\n return this.state.gotProductData ? (\r\n \r\n ) : (\r\n <>\r\n );\r\n }\r\n\r\n /**\r\n * Scrolls the page to the hotspot on the image after clicking the ref in the part list, causes the hotspot to flash\r\n * @param id id of the hotspot to go to\r\n * @private\r\n */\r\n private async goToId(id: string) {\r\n if (this._transformRef?.current?.zoomToElement) {\r\n const target = `${this._tagIdPrefix}${id}`;\r\n window.scrollTo({ top: 0, left: 0, behavior: 'smooth' });\r\n await this.waitForScroll();\r\n const elementList = document.querySelectorAll(`#${target}`);\r\n this._transformRef.current.zoomToElement(target, elementList.length === 1 ? 2 : 1);\r\n if (elementList.length) {\r\n elementList.forEach(el => {\r\n const classToAdd = `${this._baseClassName}__part-flash`;\r\n el.classList.add(classToAdd);\r\n setTimeout(() => el.classList.remove(classToAdd), 4000);\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Scrolls the page to the hotspot on the image after clicking the ref in the part list, causes the hotspot to flash\r\n * @param id id of the hotspot to go to\r\n * @private\r\n */\r\n private async addPartToCart(part: ProductSearchResult, partId: string) {\r\n let cart;\r\n let partQty;\r\n let partEl: HTMLElement | null;\r\n\r\n if (!part || !partId) {\r\n return; // {\"message\":\"Sorry,there was an error retrieving the part.\",\"success\": false};\r\n }\r\n\r\n partEl = document.querySelector(`p.hide-status-${partId}`);\r\n partQty = parseInt((document.getElementById(partId) as HTMLInputElement).value, 10);\r\n cart = await this.props.data.cart;\r\n\r\n if (!cart) {\r\n if (partEl) {\r\n partEl.textContent = this.props.resources.errorRetrievingCart;\r\n partEl.style.display = 'block';\r\n setTimeout(() => {\r\n partEl!.style.display = 'none';\r\n }, 7000);\r\n }\r\n }\r\n\r\n const product: SimpleProduct = {\r\n AdjustedPrice: part.Price,\r\n ProductTypeValue: 0,\r\n BasePrice: part.BasePrice || 0,\r\n Name: part.Name,\r\n Price: part.Price,\r\n ItemId: part.ItemId,\r\n RecordId: part.RecordId,\r\n ExtensionProperties: part.ExtensionProperties\r\n };\r\n\r\n await cart\r\n .addProductToCart({ product, count: partQty, catalogId: 0 })\r\n .then(response => {\r\n if (response.status === 'SUCCESS') {\r\n if (partEl) {\r\n partEl.textContent = this.props.resources.addToCartSuccess;\r\n partEl.style.display = 'block';\r\n\r\n setTimeout(() => {\r\n partEl!.style.display = 'none';\r\n }, 7000);\r\n }\r\n } else {\r\n if (partEl) {\r\n partEl.textContent = this.props.resources.errorAddingtoCart;\r\n partEl.style.display = 'block';\r\n\r\n setTimeout(() => {\r\n partEl!.style.display = 'none';\r\n }, 7000);\r\n }\r\n }\r\n })\r\n .catch(() => {\r\n if (partEl) {\r\n partEl.textContent = this.props.resources.errorAddingtoCart;\r\n partEl.style.display = 'block';\r\n\r\n setTimeout(() => {\r\n partEl!.style.display = 'none';\r\n }, 7000);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * displays the part associated with the hotspot in a slide up box at the bottom of the screen\r\n * @param id part id\r\n * @private\r\n */\r\n private goToPart(id: string, selectedPartIdName: string) {\r\n this.setState({\r\n selectedRow: id,\r\n isDrawerOpen: true\r\n });\r\n const elementIdName = `${selectedPartIdName}-table--body`;\r\n this.clearPartSelection(elementIdName);\r\n const elementId = `#${this._partIdPrefix}${id}`;\r\n const selectedElements = document.querySelectorAll(elementId);\r\n const destinationElement = document.getElementById(`${elementIdName}`);\r\n\r\n selectedElements.forEach(element => {\r\n const clonedElement = element.cloneNode(true);\r\n if (destinationElement) {\r\n destinationElement.appendChild(clonedElement);\r\n const cartBtn = (clonedElement as HTMLTableRowElement).querySelector('.add-to-cart-btn') as HTMLButtonElement;\r\n const part = JSON.parse(element.dataset.part || '');\r\n cartBtn?.addEventListener('click', () => this.addPartToCart(part.Product, part.PartId));\r\n }\r\n });\r\n }\r\n\r\n private clearPartSelection(elementIdName: string) {\r\n const destinationElement = document.getElementById(elementIdName);\r\n if (destinationElement) {\r\n destinationElement.innerHTML = '';\r\n }\r\n }\r\n private closePartDrawer() {\r\n this.setState({\r\n isDrawerOpen: false\r\n });\r\n }\r\n\r\n /**\r\n * Waits for scrolling to finish and returns a promise when it does.\r\n */\r\n private waitForScroll(): Promise {\r\n let lastChangedFrame = 0;\r\n let lastX = window.scrollX;\r\n let lastY = window.scrollY;\r\n return new Promise(resolve => {\r\n function tick(frames: number) {\r\n if (frames >= 500 || frames - lastChangedFrame > 20) {\r\n resolve();\r\n } else {\r\n if (window.scrollX !== lastX || window.scrollY !== lastY) {\r\n lastChangedFrame = frames;\r\n lastX = window.scrollX;\r\n lastY = window.scrollY;\r\n }\r\n requestAnimationFrame(tick.bind(null, frames + 1));\r\n }\r\n }\r\n tick(0);\r\n });\r\n }\r\n\r\n private _updateViewport(): void {\r\n this._viewport = this._getViewport();\r\n }\r\n\r\n private readonly _getViewport = (): GridSize => {\r\n const { context } = this.props;\r\n\r\n if (MsDyn365.isBrowser && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n }\r\n return 'xl';\r\n }\r\n }\r\n\r\n return 'xs';\r\n };\r\n\r\n public render(): JSX.Element | null {\r\n const viewProps: IModelViewerViewProps = {\r\n ...this.props,\r\n assemblyList: this.renderAssemblyHeader(null),\r\n hotspotImage: this.renderHotspotImage(),\r\n partsList: this.renderPartsList(),\r\n heading: this.renderTitle(),\r\n baseClassName: this._baseClassName,\r\n isMobile: this.isMobile\r\n };\r\n return this.props.renderView(viewProps);\r\n }\r\n}\r\n\r\nexport default ModelViewer;\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 { IModelViewerViewProps } from './model-viewer';\r\n\r\nexport default (props: IModelViewerViewProps) => {\r\n const isMobileClassName = props.isMobile ? `${props.baseClassName}__image-wrapper--mobile` : '';\r\n return (\r\n
\r\n {props.heading}\r\n
{props.hotspotImage}
\r\n {props.partsList}\r\n
\r\n );\r\n};\r\n","'use strict';\nvar $ = require('../internals/export');\nvar flattenIntoArray = require('../internals/flatten-into-array');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\n// `Array.prototype.flatMap` method\n// https://tc39.es/ecma262/#sec-array.prototype.flatmap\n$({ target: 'Array', proto: true }, {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen = lengthOfArrayLike(O);\n var A;\n aCallable(callbackfn);\n A = arraySpeciesCreate(O, 0);\n A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return A;\n }\n});\n","'use strict';\n// this method was added to unscopables after implementation\n// in popular engines, so it's moved to a separate module\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('flatMap');\n"],"names":["AriHotspotImage","props","baseClassName","transformRef","resources","centerButtonText","zoomInButtonText","zoomOutButtonText","resetButtonText","hotspotUsageHelpText","assemblyOptionsPlaceholderText","goToPart","tagIdPrefix","isMobile","renderHeader","assemblyDetailState","mapUsed","setMapUsed","React","shouldRender","setShouldRender","setTimeout","generateHotspotStyle","hs","_hs$TopLeft","_hs$BottomRight","cssProperties","TopLeft","X","Y","left","top","BottomRight","height","parseInt","width","handleHelperWrapperClick","initialScale","initialPositionX","isMobileToolsClassName","isMobileTransformWrapperClassName","selectedPartIdName","TransformWrapper","limitToBounds","ref","minScale","wheel","wheelDisabled","_ref","zoomIn","zoomOut","resetTransform","centerView","_objectWithoutProperties","_excluded","renderToolButtonRow","className","onClick","TransformComponent","wrapperClass","src","ImageUrl","alt","Name","HotSpots","map","key","AssemblyId","Tag","style","id","AriPartsListTableComponent","tableHeadings","parts","goToId","addPartToCart","partIdPrefix","selectedRow","isAuthenticated","requiresAuthentication","loginToViewPricingText","signInUrl","isDrawerOpen","unavailableText","addToCartText","closePartDrawer","priceFormatter","yPosition","setYPosition","window","removeEventListener","pageYOffset","addEventListener","passive","ListGroup","part","_part$Product6","ListGroupItem","PartId","active","ListGroupItemHeading","mfrCode","Sku","ListGroupItemText","Description","Product","Price","Qty","href","defaultValue","type","disabled","min","Table","th","_part$Product","_part$Product2","_part$Product3","_part$Product4","_part$Product5","product","partId","ItemId","description","currentInvString","getExtensionPropertyValueByKey","ExtensionProperties","CommercePropertyValueEnum","string","currentInventory","isNaN","oosUpperBound","oosUpperBoundLimit","canAddToCart","isEligible","JSON","stringify","classnames","BasePrice","colSpan","e","element","document","getElementById","scrollTo","getBoundingClientRect","scrollDownClickHandler","AssemblyDropdownComponent","assemblyData","onAssemblySelect","defaultOptionString","onChange","target","value","assembly","Id","SupersessionKey","ModelViewer","constructor","super","_baseClassName","_transformRef","_partIdPrefix","_tagIdPrefix","_getViewport","context","this","MsDyn365","isBrowser","innerWidth","gridSettings","request","xs","w","sm","md","lg","_viewport","device","Type","state","assemblyDetail","undefined","isPartResponseError","ariBrandName","manufacturerCode","gotProductData","_updateViewport","bind","getAssemblyDetails","renderAssemblyHeader","componentDidMount","query","_getManufacturerCodeName","brandCode","componentWillUnmount","data","assemblyList","result","defaultAssemblyOption","selectedOptionPrefix","isMobileClassName","ariAssemblyData","renderTitle","_result$ariAssemblyDa","length","firstAssembly","ParentName","async","manufacturerCodes","response","getManufacturerBrandNameAsync","callerContext","actionContext","setState","ManufacturerCode","err","console","error","assemblyId","modelId","getAriAssemblyDetailsAsync","loadProductMappings","_this$state$assemblyD","baseParts","Parts","mfrCodes","push","filter","c","unshift","partIds","flatMap","p","m","Array","isArray","promises","getProducts","_flatten","partproducts","slice","forEach","codes","responseProduct","find","supersededIdRes","SupersededId","supersededId","_objectSpread","stateAssemblyCopy","_cart$cart$ShippingAd","_this$state$assemblyD2","cart","cartId","addressId","ShippingAddress","RecordId","input","GetPartStateInput","channel","partresponse","getPartStateAction","missingProducts","i","_this$state$assemblyD3","found","j","productResults","_partresponse$product","_this$state$assemblyD4","substring","_this$state$assemblyD5","_this$state$assemblyD6","_this$state$assemblyD7","_this$state$assemblyD8","tempProduct","MSRP","concat","renderHotspotImage","renderPartsList","refIdColHeading","partNoColHeading","descriptionColHeading","availabilityColHeading","yourPriceColHeading","listPriceColHeading","qtyColHeading","orderColHeading","user","cultureFormatter","formatCurrency","config","onlyShowPriceWhenAuthenticated","_this$_transformRef","current","zoomToElement","behavior","waitForScroll","elementList","querySelectorAll","el","classToAdd","classList","add","remove","partQty","partEl","querySelector","textContent","errorRetrievingCart","display","AdjustedPrice","ProductTypeValue","addProductToCart","count","catalogId","then","status","addToCartSuccess","errorAddingtoCart","catch","elementIdName","clearPartSelection","elementId","selectedElements","destinationElement","clonedElement","cloneNode","appendChild","cartBtn","parse","dataset","innerHTML","lastChangedFrame","lastX","scrollX","lastY","scrollY","Promise","resolve","tick","frames","requestAnimationFrame","render","viewProps","hotspotImage","partsList","heading","renderView","__decorate","observable","computed","observer","$","flattenIntoArray","aCallable","toObject","lengthOfArrayLike","arraySpeciesCreate","proto","callbackfn","A","O","sourceLen","arguments","addToUnscopables"],"sourceRoot":""}