{"version":3,"file":"static/js/20.4599cdb4dfee07520f0c.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/header/utilities/mock-utilities.ts?d017","webpack://Msdyn365.Commerce.Online/./src/modules/header/components/header-preferred-store.tsx?ee9c","webpack://Msdyn365.Commerce.Online/./src/modules/header/components/logo.tsx?f27e","webpack://Msdyn365.Commerce.Online/./src/modules/header/components/nav-icon.tsx?2475","webpack://Msdyn365.Commerce.Online/./src/modules/header/header.tsx?e91a","webpack://Msdyn365.Commerce.Online/./src/modules/header/header.view.tsx?cf0f","webpack://Msdyn365.Commerce.Online/./src/invoice-summary-lineitem.tsx?5f61","webpack://Msdyn365.Commerce.Online/./src/modules/media-gallery/utils/helper.ts?b895","webpack://Msdyn365.Commerce.Online/./src/modules/media-gallery/utils/get-valid-product-images.ts?a364","webpack://Msdyn365.Commerce.Online/./src/modules/media-gallery/media-gallery.tsx?24d7","webpack://Msdyn365.Commerce.Online/./src/modules/media-gallery/media-gallery.view.tsx?5061"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { buildHydratedMockActionContext, buildMockRequest, ICoreContext, IRequestContext } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { AsyncResult, Customer, Employee } from '@msdyn365-commerce/retail-proxy';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\n\nimport { IHeaderData } from '../header.data';\nimport { IHeaderConfig, IHeaderResources } from '../header.props.autogenerated';\n\nconst mockRequest: IRequestContext = buildMockRequest();\nmockRequest.gridSettings = {\n xs: { w: 767, h: 0 },\n sm: { w: 991, h: 0 },\n md: { w: 1199, h: 0 },\n lg: { w: 1599, h: 0 },\n xl: { w: 1600, h: 0 }\n};\nmockRequest.user.isAuthenticated = true;\nmockRequest.user.signInUrl = '/signin';\nmockRequest.user.signOutUrl = '/signout';\nmockRequest.user.signUpUrl = '/signup';\n\nconst mockAnonRequest = buildMockRequest();\nmockAnonRequest.user.isAuthenticated = false;\nmockAnonRequest.user.signInUrl = '/signin';\nmockAnonRequest.user.signOutUrl = '/signout';\nmockAnonRequest.user.signUpUrl = '/signup';\n\nconst mockSigninErrorRequest = buildMockRequest();\nmockSigninErrorRequest.user.isAuthenticated = false;\nmockSigninErrorRequest.user.retailServerErrorCode = 'Microsoft_Dynamics_Commerce_Runtime_CustomerNotFound_WhenAutoLinking';\nmockSigninErrorRequest.user.signInUrl = '/signin';\nmockSigninErrorRequest.user.signOutUrl = '/signout';\nmockSigninErrorRequest.user.signUpUrl = '/signup';\n\nconst mockActionContext = buildHydratedMockActionContext();\n\n/**\n * Method to mock auth context.\n */\n// @ts-expect-error\nexport const mockAuthContext: ICoreContext = {\n actionContext: mockActionContext,\n request: mockRequest,\n app: {\n config: {\n disableTooltip: true\n },\n routes: {\n wishlist: '/wishlist'\n }\n }\n};\n\n// @ts-expect-error\nexport const mockAnonContext: ICoreContext = {\n actionContext: mockActionContext,\n request: mockAnonRequest,\n app: {\n config: {\n disableTooltip: true\n },\n routes: {\n wishlist: '/wishlist'\n }\n }\n};\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment -- Due to partial mock.\n// @ts-expect-error\nexport const mockSigninContext: ICoreContext = {\n actionContext: mockActionContext,\n request: mockSigninErrorRequest,\n app: {\n config: {\n disableTooltip: true\n },\n routes: {\n wishlist: '/wishlist'\n }\n }\n};\n\nexport const mockHeaderConfig: IHeaderConfig = {\n logoLink: {\n linkUrl: {\n destinationUrl: 'https://ppe.fabrikam.com/fe'\n },\n ariaLabel: 'fabrikam'\n },\n logoImage: {\n src: 'https://img-prod-cms-mr-microsoft-com.akamaized.net/cms/api/fabrikam/imageFileData/MA1G3L'\n }\n};\n\nexport const mockResources: IHeaderResources = {\n mobileHamburgerAriaLabel: 'Mobile view hamburger aria label',\n wishlistTooltipText: 'My wishlist',\n cartLabel: 'Shopping bag, ({0}) items',\n cartQtyLabel: '({0})',\n signInLinkText: 'Sign In',\n signInLinkAriaText: 'Sign In',\n signOutLinkText: 'Sign Out',\n signOutLinkAriaText: 'Sign Out',\n shoppingAsText: 'Shopping as {0}',\n switchCustomerLinkText: 'Switch customer',\n switchCustomerLinkAriaText: 'Switch customer',\n headerPreferredStoreText: 'Select store',\n headerPreferredStoreAriaLabel: 'select preferred store',\n signUpCustomerNotFoundTitle: 'Error message if cutsomer not found',\n signUpMultipleCustomerFoundTitle: 'Multiple customer found error msg',\n closeNotificationLabel: 'Close',\n wishlistCountLabel: '({0})',\n headerAriaLabel: 'Header'\n};\n\nexport const getMockData = (totalItemsInCart: number = 0, accountNumber: string = '2', firstName: string = ''): IHeaderData => {\n return {\n cart: >{\n status: 'SUCCESS',\n result: {\n totalItemsInCart\n }\n },\n employee: >{\n status: 'SUCCESS',\n result: {\n Name: 'Worker'\n }\n },\n accountInformation: >{\n status: 'SUCCESS',\n result: {\n AccountNumber: accountNumber,\n FirstName: firstName\n }\n },\n storeSelectorStateManager: >{\n status: 'SUCCESS',\n result: {}\n }\n };\n};\n\nexport const getMockErrorData = (): IHeaderData => {\n return {\n cart: >{\n status: 'FAILED',\n result: undefined\n },\n employee: >{\n status: 'FAILED',\n result: undefined\n },\n accountInformation: >{\n status: 'FAILED',\n result: undefined\n },\n storeSelectorStateManager: >{\n status: 'FAILED',\n result: undefined\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 { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IHeaderData } from '../header.data';\nimport { IHeaderProps } from '../header.props.autogenerated';\n\n/**\n * The header preferred store component.\n */\n@observer\nexport class HeaderPreferredStore extends React.PureComponent> {\n private readonly modalCloseButtonRef: React.RefObject = React.createRef();\n\n /**\n * Handle click on the store selector.\n * @returns : Promise void.\n */\n public handleClick = () => {\n return this._findPreferredStoreOnClick(this.props);\n };\n\n public render(): JSX.Element | undefined {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n slots,\n resources\n } = this.props;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- slots can be undefined.\n if (ArrayExtensions.hasElements(slots?.storeSelector)) {\n const storeName =\n storeSelectorStateManager?.preferredStore && storeSelectorStateManager.preferredStore.StoreName\n ? storeSelectorStateManager.preferredStore.StoreName\n : resources.headerPreferredStoreText;\n\n return (\n
\n \n {storeName}\n \n {slots.storeSelector}\n
\n );\n }\n\n return undefined;\n }\n\n private async _findPreferredStoreOnClick(props: IHeaderProps): Promise {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n modules\n } = props;\n if (!storeSelectorStateManager) {\n return;\n }\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && ArrayExtensions.hasElements(modules.storeSelector)) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n await storeSelectorStateManager\n .openDialog({\n id: storeSelectorId,\n showMapViewLink: true,\n parentElementRef: this.modalCloseButtonRef,\n onLocationSelected: orgUnitLocation => {\n return Promise.resolve();\n }\n })\n .catch((error: Error) => {\n if (props.telemetry) {\n props.telemetry.error(error.message);\n props.telemetry.debug('Unable to set preferred store');\n }\n });\n }\n}\n\nexport default HeaderPreferredStore;\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, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ILogoProps {\n image: Msdyn365.IImageData;\n gridSettings?: Msdyn365.IGridSettings;\n link?: ILinkData;\n className?: string;\n telemetryContent?: ITelemetryContent;\n requestContext: Msdyn365.IRequestContext;\n typeName?: string;\n}\n\nexport interface ILinkData {\n linkUrl: Msdyn365.ILinkData;\n ariaLabel?: string;\n openInNewTab?: boolean;\n linkText?: string;\n}\n\n/**\n *\n * Logo component.\n * @extends {React.PureComponent}\n */\nexport class Logo extends React.PureComponent {\n private readonly attributes?: Msdyn365.IDictionary;\n\n constructor(props: ILogoProps) {\n super(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.Logo);\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n return
{this._renderLogo(this.props)}
;\n }\n\n private _renderLogo(config: ILogoProps): JSX.Element {\n if (config.link && config.link.linkUrl.destinationUrl) {\n return (\n \n {this._renderImage(config)}\n \n );\n }\n return this._renderImage(config);\n }\n\n private _renderImage(config: ILogoProps): JSX.Element {\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=132&h=28&m=6', w: 0, h: 0 },\n lg: { q: 'w=160&h=48&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n return (\n \n );\n }\n}\n\nexport default Logo;\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 Button,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IHeaderResources } from '../header.props.autogenerated';\n\nexport interface INavIconProps {\n resources: IHeaderResources;\n isExpanded: boolean;\n targetId: string;\n telemetryContent?: ITelemetryContent;\n toggleNavBar(): void;\n}\n\n/**\n *\n * NavIcon component.\n * @extends {React.PureComponent}\n */\n\n@observer\nexport class NavIcon extends React.PureComponent {\n private readonly attributes?: Msdyn365.IDictionary;\n\n constructor(props: INavIconProps) {\n super(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.NavIcon);\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n return (\n \n );\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartIconComponent, WishListIconComponent } from '@msdyn365-commerce/components';\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\nimport { ErrorNotification, NotificationsManager } from '@msdyn365-commerce-modules/notifications-core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n format,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n KeyCodes,\n Modal,\n ModalBody,\n ModalHeader,\n onTelemetryClick,\n Popover,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { HeaderPreferredStore, Logo, NavIcon } from './components';\nimport { IHeaderData } from './header.data';\nimport { IHeaderProps, IHeaderResources, IMyAccountLinksData } from './header.props.autogenerated';\n\nexport interface IHeaderState {\n mobileMenuCollapsed: boolean;\n signinPopoverOpen: boolean;\n hasSigninerror?: boolean;\n}\n\nexport interface IHeaderViewProps extends IHeaderProps, IHeaderState {\n logo: React.ReactNode;\n wishListIconDesktop: React.ReactNode;\n wishListIconMobile: React.ReactNode;\n cartIcon: React.ReactNode;\n navIcon: React.ReactNode;\n className: string;\n menuBar: React.ReactNode[];\n search: React.ReactNode[];\n siteOptions: React.ReactNode[];\n HeaderTag: IModuleProps;\n HeaderContainer: INodeProps;\n MobileMenuContainer: INodeProps;\n MobileMenuHeader: React.ReactNode;\n MobileMenuBodyContainer: INodeProps;\n MobileMenuLinksContainer: INodeProps;\n HeaderTopBarContainer: INodeProps;\n Divider: INodeProps;\n\n AccountInfoDropdownParentContainer?: INodeProps;\n AccountInfoDropdownPopoverConentContainer?: INodeProps;\n accountInfoDropdownButton?: React.ReactNode;\n\n signOutLink?: React.ReactNode;\n signInLink?: React.ReactNode;\n switchCustomerLink?: React.ReactNode;\n isOBORequest?: boolean;\n accountLinks?: React.ReactNode[];\n preferredStore?: React.ReactNode;\n}\n\n/**\n *\n * Header component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass Header extends React.PureComponent, IHeaderState> {\n private readonly popOverRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private cart: ICartState | undefined;\n\n /**\n * The signed-in user name displayed in the header bar\n */\n @computed public get displayName(): Readonly {\n return MsDyn365.isOboRequest(this.props.context.request) ? this.workerName : this.customerName;\n }\n\n /**\n * OBO scenario. The name of worker who shops on behalf of customer.\n */\n @computed public get workerName(): Readonly {\n const worker = this.props.data.employee?.result;\n return worker?.Name;\n }\n\n @computed public get customerName(): Readonly {\n const customer = this.props.data.accountInformation?.result;\n if (MsDyn365.isOboRequest(this.props.context.request)) {\n // For OBO scenario, display full customer name because multiple customers may have the same first name.\n return customer ? customer.Name : undefined;\n } else {\n return customer ? customer.FirstName || customer.Name : undefined;\n }\n }\n\n public constructor(props: IHeaderProps) {\n super(props);\n this.popOverRef = React.createRef();\n this._toggleNavbar = this._toggleNavbar.bind(this);\n this._togglePopover = this._togglePopover.bind(this);\n this._keydown = this._keydown.bind(this);\n this.state = {\n mobileMenuCollapsed: true,\n signinPopoverOpen: false,\n hasSigninerror: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public componentDidMount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.addEventListener('keydown', this._keydown);\n }\n reaction(\n () => this.props.data.cart.result,\n () => {\n this.cart = this.props.data.cart.result;\n }\n );\n\n const {\n context: {\n request: { user }\n },\n resources: { signUpCustomerNotFoundTitle, signUpMultipleCustomerFoundTitle, closeNotificationLabel }\n } = this.props;\n\n const signinNotificationError = this._getSigninNotification(user, signUpMultipleCustomerFoundTitle, signUpCustomerNotFoundTitle);\n if (signinNotificationError !== undefined && this.state.hasSigninerror === false) {\n // For signup show simple error notification.\n NotificationsManager.instance().addNotification(new ErrorNotification(signinNotificationError, closeNotificationLabel));\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.removeEventListener('keydown', this._keydown, false);\n }\n }\n\n public render(): JSX.Element | null {\n const {\n id,\n typeName,\n data: { accountInformation, wishlists },\n context: {\n request: { user }\n },\n context,\n resources: { cartLabel, cartQtyLabel }\n } = this.props;\n const { logoLink, logoImage, shouldShowWishlistCount } = this.props.config;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- app config is generic\n const disableTooltip = this.props.context.app.config.disableTooltip || false;\n const headerToggleClass = this.state.mobileMenuCollapsed ? '' : 'ms-header-open';\n const headerClassName = classnames('ms-header', this.props.config.className, headerToggleClass);\n const navbarKey = 'header-nav-mobile';\n const customer = accountInformation && accountInformation.result;\n const cartIconSlot = this._getSlot('cartIcon');\n const menuBarSlot = this._getSlot('menuBar');\n const searchSlot = this._getSlot('search');\n let wishlistCount = 0;\n const siteOptionsSlot = this._getSlot('siteOptions');\n const preferredStoreSlot = this._getSlot('storeSelector');\n if (wishlists !== undefined) {\n if (\n !wishlists.result ||\n !ArrayExtensions.hasElements(wishlists.result) ||\n !wishlists.result[0].CommerceListLines ||\n !ArrayExtensions.hasElements(wishlists.result[0].CommerceListLines)\n ) {\n wishlistCount = 0;\n } else {\n wishlistCount = wishlists.result[0].CommerceListLines.length;\n }\n }\n const viewProps: IHeaderViewProps = {\n ...(this.props as IHeaderProps),\n ...this.state,\n logo: (\n \n ),\n wishListIconDesktop: (\n \n ),\n wishListIconMobile: (\n \n ),\n cartIcon: ArrayExtensions.hasElements(cartIconSlot) ? (\n cartIconSlot[0]\n ) : (\n \n ),\n navIcon: (\n \n ),\n menuBar: ArrayExtensions.hasElements(menuBarSlot) ? menuBarSlot : [],\n search: ArrayExtensions.hasElements(searchSlot) ? searchSlot : [],\n siteOptions: ArrayExtensions.hasElements(siteOptionsSlot) ? siteOptionsSlot : [],\n className: headerClassName,\n HeaderTag: {\n moduleProps: this.props,\n className: classnames(headerClassName),\n 'aria-label': this.props.resources.headerAriaLabel,\n tag: 'header'\n },\n HeaderContainer: {\n className: classnames('ms-header__container')\n },\n HeaderTopBarContainer: {\n className: classnames('ms-header__topbar')\n },\n Divider: {\n className: classnames('ms-header__divider')\n },\n MobileMenuContainer: {\n tag: Modal,\n id: navbarKey,\n className: 'ms-header__mobile-hamburger',\n isOpen: !this.state.mobileMenuCollapsed,\n wrapClassName: 'ms-header__modal',\n toggle: this._toggleNavbar\n },\n MobileMenuHeader: ,\n MobileMenuBodyContainer: {\n tag: ModalBody,\n className: 'ms-header__mobile-hamburger-menu-body'\n },\n MobileMenuLinksContainer: {\n className: 'ms-header__mobile-hamburger-menu-links'\n },\n AccountInfoDropdownParentContainer: {\n className: 'ms-header__account-info'\n },\n AccountInfoDropdownPopoverConentContainer: this.displayName\n ? {\n tag: Popover,\n id: 'myprofilePopover',\n className: 'ms-header__account-info-content',\n placement: 'bottom',\n isOpen: this.state.signinPopoverOpen,\n target: this.popOverRef,\n toggle: this._togglePopover\n }\n : undefined,\n signInLink: this._getSigninButton(user, this.props.resources),\n signOutLink: this._getSignOutButton(user, this.props.resources),\n isOBORequest: MsDyn365.isOboRequest(this.props.context.request),\n switchCustomerLink: this._getSwitchCustomerButton(user, this.props.resources),\n accountInfoDropdownButton: this._getAccountInfoDropdownButton(user, this.props.resources),\n accountLinks: this._getAccountLinks(customer),\n preferredStore: ArrayExtensions.hasElements(preferredStoreSlot) && \n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handle link text change.\n * @param linkIndex - Link Index.\n * @returns : Void.\n */\n public handleLinkTextChange = (linkIndex: number) => (event: MsDyn365.ContentEditableEvent): void => {\n if (this.props.config.myAccountLinks?.[linkIndex]) {\n this.props.config.myAccountLinks[linkIndex].linkText = event.target.value;\n }\n };\n\n /**\n * Get the slot.\n * @param slotName - Name of the slot.\n * @returns The slot.\n */\n private _getSlot(slotName: string): React.ReactNode[] | null {\n const { slots } = this.props;\n return (slots && slots[slotName] && slots[slotName].length && slots[slotName]) || null;\n }\n\n /**\n * Renders the sign in button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSigninButton(user: MsDyn365.IRequestContextUser | undefined, resources: IHeaderResources): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignIn);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n !this.displayName && (\n \n \n {resources.signInLinkText}\n \n \n )\n );\n }\n\n /**\n * Renders the sign out button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSignOutButton(user: MsDyn365.IRequestContextUser | undefined, resources: IHeaderResources): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignOut);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n this.displayName && (\n \n \n {resources.signOutLinkText}\n \n \n )\n );\n }\n\n /**\n * Renders the sign out button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSwitchCustomerButton(\n user: MsDyn365.IRequestContextUser | undefined,\n resources: IHeaderResources\n ): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SwitchCustomer);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n const isOBOAccountSelected =\n MsDyn365.isOboRequest(this.props.context.request) && this.props.context.request.cookies.getAccountSelectionCookie();\n return (\n this.displayName &&\n isOBOAccountSelected && (\n this.props.context.request.cookies.removeAccountSelectionCookie()}\n {...attributes}\n >\n
\n
{format(resources.shoppingAsText, this.customerName)}
\n
{resources.switchCustomerLinkText}
\n
\n \n )\n );\n }\n\n private getBusinessPartnerSelectionUrl(): string | undefined {\n const route = MsDyn365.getUrlSync('businessPartnerSelection', this.props.context.actionContext);\n if (!route || !MsDyn365.msdyn365Commerce.isBrowser) {\n return undefined;\n }\n\n // MsDyn365.getUrlSync persists some params in the route and remove other params.\n // Among the persisted params, we need to remove catalogid.\n const persistedParamToRemove = ['catalogid'];\n const url = new URL(route, window.location.href);\n persistedParamToRemove.forEach(param => url.searchParams.delete(param));\n return url.href;\n }\n\n private _getSigninNotification(\n user: MsDyn365.IRequestContextUser | undefined,\n signUpMultipleCustomerFoundTitle: string,\n signUpCustomerNotFoundTitle: string\n ): string | undefined {\n const { signUpCustomerNotFound, signUpMultipleCustomerFound } = this.props.config;\n const notFoundError = 'Microsoft_Dynamics_Commerce_Runtime_CustomerNotFound_WhenAutoLinking';\n const multipleAccountError = 'Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountsFoundWithSameEmailAddress';\n\n if (user?.retailServerErrorCode === notFoundError) {\n return signUpCustomerNotFound !== undefined ? signUpCustomerNotFound : signUpCustomerNotFoundTitle;\n } else if (user?.retailServerErrorCode === multipleAccountError) {\n return signUpMultipleCustomerFound !== undefined ? signUpMultipleCustomerFound : signUpMultipleCustomerFoundTitle;\n }\n return undefined;\n }\n\n private _getAccountInfoDropdownButton(\n user: MsDyn365.IRequestContextUser | undefined,\n resources: IHeaderResources\n ): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.MyProfile);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n this.displayName && (\n \n
\n
{this.displayName}
\n {MsDyn365.isOboRequest(this.props.context.request) && this.customerName && (\n
{format(resources.shoppingAsText, this.customerName)}
\n )}\n
\n \n )\n );\n }\n\n private _getAccountLinks(customer: Customer | undefined): React.ReactNode[] | undefined {\n const { myAccountLinks } = this.props.config;\n const payLoad = getPayloadObject('click', this.telemetryContent, '');\n if (!customer || !this.displayName || !myAccountLinks || !ArrayExtensions.hasElements(myAccountLinks)) {\n return undefined;\n }\n return myAccountLinks.map((cta: IMyAccountLinksData, index: number) => {\n payLoad.contentAction.etext = cta.linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n const editableLink: MsDyn365.ILinksData = {\n ariaLabel: cta.ariaLabel,\n className: 'ms-signin-info__account-link-button',\n linkText: cta.linkText,\n linkUrl: cta.linkUrl.destinationUrl,\n openInNewTab: cta.openInNewTab,\n role: 'link',\n additionalProperties: attributes\n };\n\n return (\n \n );\n });\n }\n\n private _toggleNavbar(): void {\n this.setState({\n mobileMenuCollapsed: !this.state.mobileMenuCollapsed\n });\n }\n\n private _togglePopover(): void {\n this.setState({\n signinPopoverOpen: !this.state.signinPopoverOpen\n });\n }\n\n private _keydown(event: KeyboardEvent): void {\n if (event.keyCode === KeyCodes.Escape) {\n this.setState({ mobileMenuCollapsed: true });\n }\n }\n}\n\nexport default Header;\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 { IHeaderViewProps } from './header';\n\nconst headerView: React.FC = props => {\n const {\n HeaderTag,\n HeaderContainer,\n HeaderTopBarContainer,\n MobileMenuContainer,\n MobileMenuBodyContainer,\n MobileMenuLinksContainer,\n Divider\n } = props;\n return (\n \n \n \n {props.navIcon}\n {props.logo}\n {_renderReactFragment(props.search)}\n {props.preferredStore}\n {_renderDesktopAccountBlock(props)}\n {props.wishListIconDesktop}\n \n {props.cartIcon}\n {_renderReactFragment(props.siteOptions)}\n \n \n \n {props.MobileMenuHeader}\n {_renderReactFragment(props.menuBar)}\n \n {props.accountLinks ? props.accountLinks.map(link => link) : false}\n {props.siteOptions}\n {props.wishListIconMobile}\n {props.signInLink}\n {props.signOutLink}\n \n \n \n {_renderReactFragment(props.menuBar)}\n \n \n );\n};\n\nfunction _renderDesktopAccountBlock(props: IHeaderViewProps): JSX.Element | null {\n const {\n AccountInfoDropdownParentContainer,\n AccountInfoDropdownPopoverConentContainer,\n accountInfoDropdownButton,\n signOutLink,\n signInLink,\n accountLinks\n } = props;\n\n if (AccountInfoDropdownParentContainer) {\n if (AccountInfoDropdownPopoverConentContainer) {\n return (\n \n {accountInfoDropdownButton}\n \n {accountLinks ? accountLinks.map(link => link) : false}\n {signOutLink}\n \n \n );\n } else if (signInLink) {\n return {signInLink};\n }\n }\n props.context.telemetry.error('Header content is empty, module wont render.');\n return null;\n}\n\nfunction _renderReactFragment(items: React.ReactNode[]): JSX.Element | null {\n return (\n <>\n {items && items.length > 0\n ? items.map((slot: React.ReactNode, index: number) => {\n return {slot};\n })\n : null}\n \n );\n}\n\nexport default headerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy';\nimport { format } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IInvoiceSummaryProps {\n orderTotalLabel: string;\n invoiceLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n id: string;\n typeName: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n}\n\nexport interface IInvoiceSummaryLines {\n orderTotal: React.ReactNode;\n invoices: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n}\n\ninterface IInvoiceSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n}\n\nconst InvoiceSummaryLine: React.FC = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel\n}) => {\n return (\n

\n {label}\n {price || price === 0 ? (\n \n ) : (\n {toBeCalculatedText}\n )}\n

\n );\n};\n\nconst _buildPaymentSummarySection = (\n props: IInvoiceSummaryProps,\n price: number | undefined,\n label: string,\n cssLabel: string\n): React.ReactNode => {\n return (\n \n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nexport const InvoiceSummary = (props: IInvoiceSummaryProps) => {\n const { TotalAmount, CartLines } = props.cart;\n const invoiceLines = CartLines?.filter(cartLine => cartLine.IsInvoiceLine);\n const reactNodes: IInvoiceSummaryLines = {\n invoices: invoiceLines?.map((invoiceLine: CartLine) => {\n return _buildPaymentSummarySection(\n props,\n invoiceLine.InvoiceAmount,\n format(props.invoiceLabel, invoiceLine.InvoiceId),\n 'invoice'\n );\n }),\n orderTotal: _buildPaymentSummarySection(props, TotalAmount, props.orderTotalLabel, 'total')\n };\n\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildPaymentSummarySection(props, -loyaltyAmount, props.loyaltyLabel || 'Loyalty amount', 'loyalty');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildPaymentSummarySection(\n props,\n -giftCardAmount,\n props.giftcardLabel || 'Gift card amount',\n 'gift-card'\n );\n }\n\n reactNodes.orderTotal = _buildPaymentSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n props.orderTotalLabel,\n 'total'\n );\n }\n\n return reactNodes;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IRequestContext } from '@msdyn365-commerce/core';\n\n/**\n * Gets correct alt text for image based on configuration of site.\n * @param productName Product name.\n * @param context Current request context.\n * @param imageAltText Alt-text from CMS image.\n */\nexport function getAltText(\n context: IRequestContext,\n shouldUseCmsAltText: boolean,\n productName?: string,\n imageAltText?: string\n): string | undefined {\n if (!context?.app?.config?.OmniChannelMedia) {\n return productName;\n }\n if (shouldUseCmsAltText) {\n return imageAltText;\n }\n return productName;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { commerceApiRequest, getCatalogId, IActionContext, IImageData, IImageSettings } from '@msdyn365-commerce/core';\nimport { MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getMediaLocationsForSelectedVariant, MediaLocationsForSelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { getAltText } from './helper';\n\nasync function validateMediaLocationAsync(mediaLocation: MediaLocation): Promise<[IImageData, boolean]> {\n const imageData: IImageData = {\n src: mediaLocation.Uri || '',\n altText: mediaLocation.AltText || ''\n };\n if (mediaLocation.IsApplicableForChildEntities) {\n imageData.additionalProperties = { isApplicableForChildEntities: 'true' };\n }\n\n if (imageData.src === '') {\n return [imageData, false];\n }\n\n return new Promise<[IImageData, boolean]>(resolve => {\n try {\n const http = new XMLHttpRequest();\n http.open('HEAD', imageData.src!, true);\n\n http.addEventListener('load', () => {\n resolve([imageData, http.status === 200 || http.status === 201]);\n });\n\n http.addEventListener('error', () => {\n resolve([imageData, false]);\n });\n\n http.send();\n } catch {\n resolve([imageData, false]);\n }\n });\n}\n\nexport async function getValidProductImages(\n productId: number,\n channelId: number,\n actionContext: IActionContext,\n imageSettings: IImageSettings,\n selectedProduct?: SimpleProduct\n): Promise {\n const catalogId = getCatalogId(actionContext.requestContext);\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocationAsync(mediaLocation))).then(pairs => {\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\n });\n }\n\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n\n/**\n * Gets product variant images on dimension change of buy-box module for Omni scenario.\n * @param productId Product record id.\n * @param shouldUseCmsAltText Alt-text source to use.\n * @param channelId Current channel id.\n * @param actionContext Current action context.\n * @param productName Product name.\n * @param selectedProduct Currently selected variant product.\n * @returns List of images.\n */\n\nexport async function getProductImages(\n productId: number,\n shouldUseCmsAltText: boolean,\n channelId: number,\n actionContext: IActionContext,\n productName?: string,\n selectedProduct?: SimpleProduct\n): Promise {\n const catalogId = getCatalogId(actionContext.requestContext);\n if (actionContext.requestContext?.params?.isPreview) {\n const response = await commerceApiRequest(actionContext.requestContext, 'msdyn365-ochannel-product-info', 'post', {\n productId: productId,\n channelId: channelId,\n catalogId: catalogId\n });\n if (response.status !== 200) {\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant for preview scenario');\n return [];\n }\n const previewImageData = response?.data as MediaLocation[];\n if (previewImageData) {\n return previewImageData.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n }\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return mediaLocations.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n\nexport async function validateProductImages(\n mediaLocations: MediaLocation[],\n actionContext: IActionContext,\n imageSettings: IImageSettings\n): Promise {\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocationAsync(mediaLocation)))\n .then(pairs => {\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to validate product images');\n return [];\n });\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Carousel, ICarouselProps } from '@msdyn365-commerce/components';\nimport { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getFallbackImageUrl, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n defaultDataScale,\n IComponentNodeProps,\n ImagefullView,\n IModalViewProps,\n IModuleProps,\n inlineZoomImageOnHover,\n inlineZoomImageOnMouseMove,\n inlineZoomImageOnMouseOut,\n inlineZoomInitClick,\n INodeProps,\n ISingleSlideCarouselProps,\n isMobile,\n KeyCodes,\n NodeTag,\n onContainerZoomInit,\n onMouseMoveLensContainer,\n onMouseOutLensContainer,\n onMouseOverImageContainer,\n removeContainerZoomStyle,\n removeInlineZoomStyle,\n SingleSlideCarousel,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport * as React from 'react';\n\nimport { IMediaGalleryData } from './media-gallery.data';\nimport { imageSource, imageZoom, IMediaGalleryProps, thumbnailsOrientation } from './media-gallery.props.autogenerated';\nimport { getProductImages, getValidProductImages, validateProductImages } from './utils';\nimport { getAltText } from './utils/helper';\n\n/**\n * IMediaGalleryState Interface.\n */\nexport interface IMediaGalleryState {\n animating: boolean;\n activeIndex: number;\n isImageZoomed: boolean;\n modalIsOpen: boolean;\n lastUpdate?: number;\n isMobileImageZoomed?: boolean;\n mediaGalleryItems?: IImageData[];\n isInitialLoad?: boolean;\n shouldUseOptimizedImage?: boolean;\n}\n\n/**\n * IMediaGalleryThumbnailsViewProps Interface.\n */\nexport interface IMediaGalleryThumbnailsViewProps {\n ThumbnailsContainerProps: INodeProps;\n SingleSlideCarouselComponentProps: INodeProps;\n items?: IMediaGalleryThumbnailItemViewProps[];\n}\n\n/**\n * IMediaGalleryThumbnailItemViewProps Interface.\n */\nexport interface IMediaGalleryThumbnailItemViewProps {\n ThumbnailItemContainerProps: INodeProps;\n Picture: React.ReactElement;\n}\n\n/**\n * IMediaGalleryViewProps Interface.\n */\nexport interface IMediaGalleryViewProps extends IMediaGalleryProps {\n state: IMediaGalleryState;\n MediaGallery: IModuleProps;\n CarouselProps: INodeProps;\n Thumbnails: IMediaGalleryThumbnailsViewProps;\n Modal?: React.ReactElement | null;\n callbackToggle?(): void;\n callbackThumbnailClick?(index: number): void;\n callbackThumbnailKeyDown?(index: number): void;\n}\n\n/**\n * Props for carousel.\n */\ninterface IMediaGalleryCarouselItems {\n items: ItemType[];\n keys: (string | undefined)[];\n}\n\n/**\n * Media gallery component.\n */\nclass MediaGallery extends React.Component, IMediaGalleryState> {\n private readonly _inlineZoomDivRef: Map = new Map();\n\n private readonly fullScreenOverlayButtonRef: React.RefObject = React.createRef();\n\n private mediaGalleryImages: IImageData[] = [];\n\n private fallbackImage?: string;\n\n private readonly defaultGalleryImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=767&h=767&m=8', w: 0, h: 0 },\n sm: { q: 'w=600&h=600&m=8', w: 0, h: 0 },\n md: { q: 'w=600&h=772&m=8', w: 0, h: 0 },\n lg: { q: 'h=772&m=8', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n private readonly defaultThumbnailImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=100&m=8', w: 100, h: 0 },\n lg: { q: 'w=100&m=8', w: 100, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n private readonly _zoomedImageSettings: IImageSettings;\n\n public constructor(props: IMediaGalleryProps) {\n super(props);\n this._toggleModal = this._toggleModal.bind(this);\n this.state = {\n activeIndex: 0,\n animating: false,\n isImageZoomed: false,\n modalIsOpen: false,\n isInitialLoad: true,\n shouldUseOptimizedImage: !!this.props.config.skipImageValidation\n };\n\n this._zoomedImageSettings =\n props.config.zoomedImageSettings ?? props.config.galleryImageSettings ?? this.defaultGalleryImageSettings;\n\n this._onImageMouseOut = this._onImageMouseOut.bind(this);\n this._inlineZoomImageOnHover = this._inlineZoomImageOnHover.bind(this);\n this._onInlineImageClick = this._onInlineImageClick.bind(this);\n this._onContainerZoomImageClick = this._onContainerZoomImageClick.bind(this);\n this._onMouseOutLensContainer = this._onMouseOutLensContainer.bind(this);\n }\n\n public isMobile(): boolean {\n const size = isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n return size === 'xs';\n }\n\n public async componentDidMount(): Promise {\n const source = this.props.config.imageSource ?? imageSource.pageContext;\n const shouldUpdateOnPartialDimensionSelection = this.props.config.shouldUpdateOnPartialDimensionSelection;\n this._setRenderType();\n if (!this.props.context.request.app?.config?.OmniChannelMedia) {\n if (source === imageSource.pageContext) {\n if (this.state.mediaGalleryItems === undefined && this.props.data.mediaLocationsForSelectedVariant.result) {\n const images = await validateProductImages(\n this.props.data.mediaLocationsForSelectedVariant.result,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\n );\n this._setImages(images);\n } else if (this.state.mediaGalleryItems === undefined && this.props.data.product.result) {\n const product = this.props.data.product.result;\n const images = await getValidProductImages(\n product.RecordId,\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n product.productVariant\n );\n\n this._setImages(images);\n } else {\n this._setImages([]);\n }\n }\n }\n\n reaction(\n () => {\n const product = this.props.data.product.result;\n if (!product) {\n return null;\n }\n\n if (!shouldUpdateOnPartialDimensionSelection || !product.productVariant?.RecordId) {\n return `${product.RecordId}`;\n }\n\n return `${product.RecordId}-${product.productVariant.RecordId}`;\n },\n async () => {\n const product = this.props.data.product.result;\n let images: IImageData[] = [];\n if (product) {\n if (this.props.context.app?.config?.OmniChannelMedia) {\n images = await getProductImages(\n product.RecordId,\n this.shouldUseCmsAltText(),\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n product.Name,\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\n );\n } else {\n images = await getValidProductImages(\n product.RecordId,\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\n );\n }\n this._setImages(images);\n } else {\n this._setImages([]);\n }\n },\n { fireImmediately: true }\n );\n\n if (source === imageSource.productId && this.props.data.mediaLocations.result) {\n const images = await validateProductImages(\n this.props.data.mediaLocations.result,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\n );\n this._setImages(images);\n }\n }\n\n public shouldComponentUpdate(nextProps: IMediaGalleryProps, nextState: IMediaGalleryState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const { id, config, resources } = this.props;\n\n const { className, showPaginationTooltip } = config;\n\n const isVertical: boolean = config.thumbnailsOrientation === thumbnailsOrientation.vertical;\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- || is required.\n const isFullscreenAllowed: boolean = this.isMobile() || config.allowFullScreen || false;\n const zoomViewMode: string =\n config.imageZoom === imageZoom.inline ? imageZoom.inline : config.imageZoom === imageZoom.container ? imageZoom.container : '';\n const source = this.props.config.imageSource ?? imageSource.pageContext;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\n const emptyPlaceHolderImage = this.props.context.app.config?.placeholderImageName as string;\n if (this.props.data.product.result) {\n this.fallbackImage = getFallbackImageUrl(this.props.data.product.result.ItemId, this.props.context.request.apiSettings);\n }\n if (emptyPlaceHolderImage && this.fallbackImage) {\n this.fallbackImage = `${this.fallbackImage},${emptyPlaceHolderImage}`;\n }\n if (this.props.config.skipImageValidation && !this.state.mediaGalleryItems && this.state.isInitialLoad) {\n let images: IImageData[] = [];\n let mediaLocations: MediaLocation[] = [];\n if (source === imageSource.pageContext && this.props.data.mediaLocationsForSelectedVariant.result) {\n mediaLocations = this.props.data.mediaLocationsForSelectedVariant.result;\n } else if (source === imageSource.productId && this.props.data.mediaLocations.result) {\n mediaLocations = this.props.data.mediaLocations.result;\n }\n images = mediaLocations.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(\n this.props.context.actionContext.requestContext,\n this.shouldUseCmsAltText(),\n this.props.data.product.result?.Name,\n mediaLocation.AltText\n )\n };\n });\n const curatedImages = this.props.config.images ?? [];\n this.mediaGalleryImages = [...this._filterMasterImageFromVariant(images), ...curatedImages];\n }\n const mediaGalleryCarouselItems = this._getMediaGalleryItems(isFullscreenAllowed, zoomViewMode);\n const mediaGalleryThumbnailCarouselItems = this._getMediaGalleryThumbnailItems();\n const viewProps: IMediaGalleryViewProps = {\n ...(this.props as IMediaGalleryProps),\n state: this.state,\n MediaGallery: {\n moduleProps: this.props,\n className: classnames(`ms-media-gallery ${isVertical ? 'vertical' : ''}`, className)\n },\n Modal: isFullscreenAllowed ? this.imageModalSlider(zoomViewMode) : null,\n callbackToggle: this.openModalDialog,\n callbackThumbnailClick: this._generateOnThumbnailClick,\n callbackThumbnailKeyDown: this._generateOnThumbnailKeyDown,\n CarouselProps: {\n tag: Carousel,\n className: 'ms-media-gallery__carousel',\n items: mediaGalleryCarouselItems.items,\n activeIndex: this.state.activeIndex,\n next: this.next,\n previous: this.previous,\n interval: false,\n directionTextPrev: resources.previousScreenshotFlipperText,\n directionTextNext: resources.nextScreenshotFlipperText,\n onIndicatorsClickHandler: this.goToIndex,\n showPaginationTooltip: showPaginationTooltip === true,\n indicatorAriaText: resources.ariaLabelForSlide,\n handleOnExited: this.onExited,\n handleOnExiting: this.onExiting,\n key: mediaGalleryCarouselItems.keys\n } as IComponentNodeProps,\n Thumbnails: {\n ThumbnailsContainerProps: { className: 'ms-media-gallery__thumbnails-container' },\n SingleSlideCarouselComponentProps: {\n tag: SingleSlideCarousel,\n className: 'ms-media-gallery__thumbnails',\n vertical: isVertical,\n flipperPrevLabel: resources.previousScreenshotFlipperText,\n flipperNextLabel: resources.nextScreenshotFlipperText,\n parentId: id,\n useTabList: true,\n key: JSON.stringify(mediaGalleryThumbnailCarouselItems.keys)\n } as IComponentNodeProps,\n items: mediaGalleryThumbnailCarouselItems.items\n }\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Zoomed out image on previous/next click.\n */\n public updateZoomedInImage(): void {\n this.setState({ isImageZoomed: false });\n }\n\n private readonly onExiting = () => {\n this.setState({ animating: true });\n };\n\n private readonly onExited = () => {\n this.setState({ animating: false });\n };\n\n /**\n * On click next in carousel.\n */\n private readonly next = (): void => {\n removeInlineZoomStyle();\n if (this.isLastItem() === undefined) {\n return;\n }\n\n const nextIndex = this.isLastItem() ? 0 : this.state.activeIndex + 1;\n this.goToIndex(nextIndex);\n\n this.updateZoomedInImage();\n };\n\n /**\n * On click previous in carousel.\n */\n private readonly previous = (): void => {\n removeInlineZoomStyle();\n const images = this.state.mediaGalleryItems;\n const nextIndex = this.isFirstItem() ? (images ? images.length - 1 : 0) : this.state.activeIndex - 1;\n this.goToIndex(nextIndex);\n this.updateZoomedInImage();\n };\n\n private readonly goToIndex = (index: number): void => {\n this.setState({ activeIndex: index });\n };\n\n private _getMediaGalleryThumbnailItems(): IMediaGalleryCarouselItems {\n const mediaGalleryItems = this.state.mediaGalleryItems ?? this.mediaGalleryImages;\n const thumbnailImageSettings = this.props.config.thumbnailImageSettings;\n if (thumbnailImageSettings) {\n thumbnailImageSettings.cropFocalRegion = true;\n }\n\n const hasMediaGalleryItems = ArrayExtensions.hasElements(mediaGalleryItems);\n\n if (!hasMediaGalleryItems) {\n if (this.state.lastUpdate) {\n const defaultKey = 0;\n return {\n items: [this._getEmptyThumbnailItem(thumbnailImageSettings, defaultKey, this.state.activeIndex)],\n keys: ['empty']\n };\n }\n return { items: [], keys: [] };\n }\n\n return {\n items: [\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n ...mediaGalleryItems!.map((item: IImageData, index: number) =>\n this._getThumbnailItem(\n item,\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n index,\n this.state.activeIndex\n )\n )\n ],\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n keys: [...mediaGalleryItems!.map(item => item.src)]\n };\n }\n\n private _getMediaGalleryItems(isFullscreenAllowed: boolean, zoomViewMode: string): IMediaGalleryCarouselItems {\n const mediaGalleryItems = this.state.mediaGalleryItems ?? this.mediaGalleryImages;\n const galleryImageSettings = this.props.config.galleryImageSettings;\n if (galleryImageSettings) {\n galleryImageSettings.cropFocalRegion = true;\n }\n\n const zoomView = isFullscreenAllowed ? 'fullscreen' : zoomViewMode;\n\n const hasMediaGalleryItems = ArrayExtensions.hasElements(mediaGalleryItems);\n\n if (!hasMediaGalleryItems) {\n if (this.state.lastUpdate) {\n return { items: [this._renderEmptyImage(galleryImageSettings)], keys: ['empty'] };\n }\n return { items: [], keys: [] };\n }\n\n return {\n items: [\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n ...mediaGalleryItems!.map((item: IImageData, index: number) =>\n this._renderCarouselItemImageView(zoomView, item, galleryImageSettings ?? this.defaultGalleryImageSettings, index)\n )\n ],\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n keys: [...mediaGalleryItems!.map(item => item.src)]\n };\n }\n\n private _setImages(images?: IImageData[]): void {\n const curatedImage = this.props.config.images || [];\n const imagesToSet = this._filterMasterImageFromVariant(images);\n\n this.setState({\n mediaGalleryItems: [...imagesToSet, ...curatedImage],\n activeIndex: 0,\n lastUpdate: Date.now(),\n shouldUseOptimizedImage: false\n });\n }\n\n private _setRenderType(): void {\n this.setState({\n isInitialLoad: false\n });\n }\n\n private _renderCarouselItemImageView(\n zoomView: string,\n image: IImageData,\n imageSettings: IImageSettings,\n index: number,\n isInPopup: boolean = false\n ): React.ReactNode {\n if (this.isMobile()) {\n if (isInPopup) {\n return this._renderImageInContainerOnZoom(image, this._zoomedImageSettings, index);\n }\n return this._renderImageFullScreenOnZoom(image, imageSettings, index);\n }\n\n switch (zoomView) {\n case 'container': {\n return this._renderImageInContainerOnZoom(image, this._zoomedImageSettings, index);\n }\n case 'inline': {\n return this._renderImageInlineOnZoom(image, this._zoomedImageSettings, index);\n }\n case 'fullscreen': {\n return this._renderImageFullScreenOnZoom(image, imageSettings, index);\n }\n\n // No default\n }\n return <>{this._getCarouselItem(image, imageSettings, index, isInPopup)};\n }\n\n private _filterMasterImageFromVariant(images?: IImageData[]): IImageData[] {\n const shouldHidePrimaryImages = this.props.config.shouldHideMasterProductImagesForVariant ?? true;\n let variantImages = images ?? [];\n const isVariantProduct =\n !ObjectExtensions.isNullOrUndefined(this.props.data.product.result?.MasterProductId) ||\n !ObjectExtensions.isNullOrUndefined(this.props.data.product.result?.productVariant);\n const itemId = this.props.data.product.result?.ItemId;\n if (shouldHidePrimaryImages && isVariantProduct && itemId) {\n variantImages = variantImages.filter(item => {\n const isApplicableForChildEntities = item.additionalProperties?.isApplicableForChildEntities;\n return !isApplicableForChildEntities;\n });\n if (!ArrayExtensions.hasElements(variantImages)) {\n variantImages = images ?? [];\n }\n }\n return variantImages;\n }\n\n private readonly _getCarouselItem = (\n image: IImageData,\n imageSettings: IImageSettings,\n index: number,\n isInPopup: boolean = false\n ): React.ReactNode => (\n \n );\n\n private readonly _getThumbnailItem = (\n image: IImageData,\n imageSettings: IImageSettings,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps => {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: index,\n 'aria-label': image.altText,\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n };\n\n /**\n * Ref Handler.\n * @param index -Remove item click function.\n * @returns Set inline zoom.\n */\n private readonly _refHandler = (index: number) => (divRef: HTMLDivElement) => {\n this._inlineZoomDivRef.set(index, divRef);\n };\n\n private readonly _generateOnThumbnailKeyDown = (index: number) => {\n return (event: React.KeyboardEvent) => {\n if (event.which === KeyCodes.Enter || event.which === KeyCodes.Space) {\n event.preventDefault();\n\n this.goToIndex(index);\n }\n };\n };\n\n private readonly _generateOnThumbnailClick = (index: number) => {\n return (event: React.MouseEvent) => {\n event.preventDefault();\n\n this.goToIndex(index);\n };\n };\n\n private _renderImageInlineOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n \n \n \n \n );\n }\n\n private _inlineZoomImageOnHover(event: React.MouseEvent): void {\n inlineZoomImageOnHover(event, this.props.config.dataScale ?? String(defaultDataScale));\n }\n\n private _handleMobileViewZoomedImageClick(event: React.MouseEvent) {\n const target = this.state.shouldUseOptimizedImage ? (event.target as HTMLImageElement) : event.currentTarget;\n const mobileZoomedInImageClassName = 'msc-mobile-zoomed-in';\n if (!this.state.isMobileImageZoomed) {\n const bounds = target.getBoundingClientRect();\n const dataScale = Number(this.props.config.dataScale ?? defaultDataScale);\n\n const positionX = event.clientX - bounds.left;\n const positionY = event.clientY - bounds.top;\n const scaledPositionX = positionX * dataScale;\n const scaledPositionY = positionY * dataScale;\n\n target.style.transform = `scale(${dataScale})`;\n target.classList.add(mobileZoomedInImageClassName);\n target.parentElement!.style.overflow = 'auto';\n target.parentElement!.scrollTo(scaledPositionX - positionX, scaledPositionY - positionY);\n this.setState({\n isMobileImageZoomed: true\n });\n } else {\n target.style.transform = '';\n target.classList.remove(mobileZoomedInImageClassName);\n target.parentElement!.style.overflow = '';\n this.setState({\n isMobileImageZoomed: false\n });\n }\n }\n\n private _onInlineImageClick(event: React.MouseEvent): void {\n if (window.innerWidth <= 768) {\n // $msv-breakpoint-m\n this._handleMobileViewZoomedImageClick(event);\n return;\n }\n inlineZoomInitClick(event, this.props.config.dataScale ?? String(defaultDataScale));\n this.setState({\n isImageZoomed: true\n });\n }\n\n private _onImageMouseOut(event: React.MouseEvent): void {\n inlineZoomImageOnMouseOut(event);\n this.setState({\n isImageZoomed: false\n });\n }\n\n private _onContainerZoomImageClick(event: React.MouseEvent): void {\n if (window.innerWidth <= 768) {\n // $msv-breakpoint-m\n this._handleMobileViewZoomedImageClick(event);\n return;\n }\n\n onContainerZoomInit(event);\n\n this.setState({\n isImageZoomed: true\n });\n }\n\n private _onMouseOutLensContainer(event: React.MouseEvent): void {\n onMouseOutLensContainer(event);\n\n this.setState({\n isImageZoomed: false\n });\n }\n\n private _renderImageInContainerOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n
\n \n \n
\n );\n }\n\n private _renderImageFullScreenOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n
\n \n
\n {}\n \n
\n
\n );\n }\n\n private _mapProductToImageData(product: SimpleProduct): IImageData {\n return {\n src: product.PrimaryImageUrl ?? ''\n };\n }\n\n private _renderEmptyImage(imageSettings: IImageSettings | undefined): React.ReactNode {\n return (\n
\n \n
\n );\n }\n\n private _getEmptyThumbnailItem(\n imageSettings: IImageSettings | undefined,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: 'empty',\n 'aria-label': '',\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n }\n\n private readonly isFirstItem = () => this.state.activeIndex === 0;\n\n private readonly isLastItem = () => {\n const images = this.state.mediaGalleryItems;\n return images && this.state.activeIndex === images.length - 1;\n };\n\n private readonly openModalDialog = (): void => {\n this._toggleModal();\n };\n\n private _toggleModal(): void {\n if (this.state.modalIsOpen) {\n this.fullScreenOverlayButtonRef.current?.focus();\n const parentDiv = this._inlineZoomDivRef.get(this.state.activeIndex);\n if (parentDiv && parentDiv.children && parentDiv.children.length >= 2) {\n const image = parentDiv.children[1].querySelector('img');\n if (image) {\n image.removeAttribute('style');\n }\n }\n this.setState({\n isImageZoomed: false\n });\n }\n this.setState({\n isImageZoomed: false,\n modalIsOpen: !this.state.modalIsOpen\n });\n removeInlineZoomStyle();\n removeContainerZoomStyle();\n }\n\n private readonly imageModalSlider = (ZoomView: string): React.ReactElement => {\n const {\n data: {\n product: { result: product }\n },\n resources\n } = this.props;\n let mediaGalleryItems = this.state.mediaGalleryItems;\n\n if (!mediaGalleryItems && product) {\n mediaGalleryItems = [this._mapProductToImageData(product)];\n }\n const carouselprops = {\n tag: Carousel,\n className: 'ms-media-gallery__carousel',\n items:\n mediaGalleryItems &&\n mediaGalleryItems.map((item: IImageData, index: number) =>\n this._renderCarouselItemImageView(ZoomView, item, this._zoomedImageSettings, index, true)\n ),\n activeIndex: this.state.activeIndex,\n next: this.next,\n previous: this.previous,\n interval: false,\n directionTextPrev: resources.previousScreenshotFlipperText,\n directionTextNext: resources.nextScreenshotFlipperText,\n onIndicatorsClickHandler: this.goToIndex,\n showPaginationTooltip: true,\n hideIndicator: false,\n keyboard: false,\n handleOnExited: this.onExited,\n handleOnExiting: this.onExiting,\n isDisabledFunctionality: this.state.isMobileImageZoomed\n } as IComponentNodeProps;\n const carousel = ;\n\n const imageModalSliderProps: IModalViewProps = {\n modalIsOpen: this.state.modalIsOpen,\n ontoggle: this._toggleModal,\n galleryCarousel: carousel,\n classNames: classnames('ms-media-gallery__modal', 'msc-modal-input-required')\n };\n return ImagefullView(imageModalSliderProps) as React.ReactElement;\n };\n\n private shouldUseCmsAltText = (): boolean => {\n if (this.props.config.altTextSource === 'product') {\n return false;\n } else {\n return true;\n }\n };\n}\n\nexport default MediaGallery;\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 { IMediaGalleryThumbnailItemViewProps, IMediaGalleryThumbnailsViewProps, IMediaGalleryViewProps } from '../..';\n\nconst MediaGalleryView: React.FC = props => {\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\n\n return (\n \n \n {Modal}\n {_renderThumbnails(Thumbnails)}\n \n );\n};\n\nconst _renderThumbnails = (thumbnails: IMediaGalleryThumbnailsViewProps): JSX.Element => {\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps, items } = thumbnails;\n\n return (\n \n {items && items.map(_renderThumbnailItem)}\n \n );\n};\n\nconst _renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\n\n return {Picture};\n};\n\nexport default MediaGalleryView;\n"],"names":["mockRequest","buildMockRequest","gridSettings","xs","w","h","sm","md","lg","xl","user","isAuthenticated","signInUrl","signOutUrl","signUpUrl","mockAnonRequest","mockSigninErrorRequest","retailServerErrorCode","buildHydratedMockActionContext","HeaderPreferredStore","React","constructor","modalCloseButtonRef","handleClick","this","_findPreferredStoreOnClick","props","render","data","storeSelectorStateManager","result","slots","resources","ArrayExtensions","hasElements","storeSelector","storeName","preferredStore","StoreName","headerPreferredStoreText","className","color","headerPreferredStoreAriaLabel","onClick","ref","modules","storeSelectorId","Object","keys","length","id","openDialog","showMapViewLink","parentElementRef","onLocationSelected","orgUnitLocation","Promise","resolve","catch","error","telemetry","message","debug","__decorate","observer","Logo","super","payLoad","getPayloadObject","telemetryContent","TelemetryConstant","attributes","getTelemetryAttributes","_renderLogo","config","link","linkUrl","destinationUrl","assign","href","ariaLabel","target","openInNewTab","undefined","rel","_renderImage","Msdyn365","image","requestContext","imageSettings","viewports","q","lazyload","loadFailureBehavior","editProps","key","moduleType","typeName","imagePropertyName","shouldSkipToMainImage","NavIcon","Button","toggleNavBar","title","mobileHamburgerAriaLabel","isExpanded","targetId","Header","handleLinkTextChange","linkIndex","event","_this$props$config$my","myAccountLinks","linkText","value","popOverRef","_toggleNavbar","bind","_togglePopover","_keydown","state","mobileMenuCollapsed","signinPopoverOpen","hasSigninerror","getTelemetryObject","context","request","telemetryPageName","friendlyName","MsDyn365","workerName","customerName","_this$props$data$empl","worker","employee","Name","_this$props$data$acco","customer","accountInformation","FirstName","componentDidMount","isBrowser","window","addEventListener","reaction","cart","signUpCustomerNotFoundTitle","signUpMultipleCustomerFoundTitle","closeNotificationLabel","signinNotificationError","_getSigninNotification","NotificationsManager","instance","addNotification","ErrorNotification","componentWillUnmount","removeEventListener","wishlists","cartLabel","cartQtyLabel","logoLink","logoImage","shouldShowWishlistCount","disableTooltip","app","headerToggleClass","headerClassName","classnames","navbarKey","cartIconSlot","_getSlot","menuBarSlot","searchSlot","wishlistCount","siteOptionsSlot","preferredStoreSlot","CommerceListLines","viewProps","_objectSpread","logo","wishListIconDesktop","WishListIconComponent","showButtonTooltip","wishlistTooltipText","wishlistCountLabel","isDispayWishlistCount","wishListIconMobile","cartIcon","CartIconComponent","navIcon","menuBar","search","siteOptions","HeaderTag","moduleProps","headerAriaLabel","tag","HeaderContainer","HeaderTopBarContainer","Divider","MobileMenuContainer","Modal","isOpen","wrapClassName","toggle","MobileMenuHeader","ModalHeader","MobileMenuBodyContainer","ModalBody","MobileMenuLinksContainer","AccountInfoDropdownParentContainer","AccountInfoDropdownPopoverConentContainer","displayName","Popover","placement","signInLink","_getSigninButton","signOutLink","_getSignOutButton","isOBORequest","switchCustomerLink","_getSwitchCustomerButton","accountInfoDropdownButton","_getAccountInfoDropdownButton","accountLinks","_getAccountLinks","renderView","slotName","SignIn","signInLinkText","signInLinkAriaText","onTelemetryClick","_user$signOutUrl","SignOut","signOutLinkText","signOutLinkAriaText","SwitchCustomer","isOBOAccountSelected","cookies","getAccountSelectionCookie","switchCustomerLinkAriaText","switchCustomerLinkText","getBusinessPartnerSelectionUrl","role","removeAccountSelectionCookie","format","shoppingAsText","route","actionContext","url","URL","location","forEach","param","searchParams","delete","signUpCustomerNotFound","signUpMultipleCustomerFound","MyProfile","innerRef","map","cta","index","contentAction","etext","editableLink","additionalProperties","onTextChange","setState","keyCode","KeyCodes","Escape","computed","_renderReactFragment","items","slot","Module","Node","_renderDesktopAccountBlock","InvoiceSummaryLine","_ref","price","label","toBeCalculatedText","freeText","cssLabel","PriceComponent","CustomerContextualPrice","freePriceText","_buildPaymentSummarySection","_computedLoyaltyAmount","checkoutState","loyaltyAmount","InvoiceSummary","TotalAmount","CartLines","invoiceLines","filter","cartLine","IsInvoiceLine","reactNodes","invoices","invoiceLine","InvoiceAmount","invoiceLabel","InvoiceId","orderTotal","orderTotalLabel","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardExtends","reduce","giftCardCounter","count","giftCard","Balance","amount","Math","min","totalAmountAfterGiftCard","loyalty","loyaltyLabel","giftcardLabel","getAltText","shouldUseCmsAltText","productName","imageAltText","_context$app","OmniChannelMedia","async","validateMediaLocationAsync","mediaLocation","imageData","src","Uri","altText","AltText","IsApplicableForChildEntities","isApplicableForChildEntities","http","XMLHttpRequest","open","status","send","_unused","getValidProductImages","productId","channelId","selectedProduct","catalogId","getCatalogId","actionInput","MediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariant","then","mediaLocations","all","pairs","pair","exception","validateProductImages","MediaGallery","_this","_props$config$zoomedI","_inlineZoomDivRef","Map","fullScreenOverlayButtonRef","mediaGalleryImages","defaultGalleryImageSettings","cropFocalRegion","defaultThumbnailImageSettings","onExiting","animating","onExited","next","removeInlineZoomStyle","isLastItem","nextIndex","activeIndex","goToIndex","updateZoomedInImage","previous","images","mediaGalleryItems","isFirstItem","_getCarouselItem","isInPopup","arguments","Image","fallBackSrc","fallbackImage","bypassHideOnFailure","_getThumbnailItem","modifiedActiveIndex","ThumbnailItemContainerProps","tabIndex","_generateOnThumbnailClick","onKeyDown","_generateOnThumbnailKeyDown","Picture","imageFallbackOptimize","shouldUseOptimizedImage","_refHandler","divRef","set","which","Enter","Space","preventDefault","openModalDialog","_toggleModal","imageModalSlider","ZoomView","product","_mapProductToImageData","carouselprops","Carousel","item","_renderCarouselItemImageView","_zoomedImageSettings","interval","directionTextPrev","previousScreenshotFlipperText","directionTextNext","nextScreenshotFlipperText","onIndicatorsClickHandler","showPaginationTooltip","hideIndicator","keyboard","handleOnExited","handleOnExiting","isDisabledFunctionality","isMobileImageZoomed","carousel","imageModalSliderProps","modalIsOpen","ontoggle","galleryCarousel","classNames","ImagefullView","altTextSource","isImageZoomed","isInitialLoad","skipImageValidation","zoomedImageSettings","galleryImageSettings","_onImageMouseOut","_inlineZoomImageOnHover","_onInlineImageClick","_onContainerZoomImageClick","_onMouseOutLensContainer","isMobile","variant","VariantType","Viewport","_this$props$config$im","_this$props$context$r","source","imageSource","shouldUpdateOnPartialDimensionSelection","_setRenderType","mediaLocationsForSelectedVariant","_this$props$config$th","thumbnailImageSettings","_setImages","_this$props$config$th2","RecordId","apiSettings","productVariant","_product$productVaria","_this$props$context$a","_this$props$config$th3","_actionContext$reques","params","isPreview","response","commerceApiRequest","previewImageData","_mediaLocation$Uri","_mediaLocation$Uri2","getProductImages","fireImmediately","_this$props$config$th4","shouldComponentUpdate","nextProps","nextState","_this$props$config$im2","_this$props$context$a2","isVertical","thumbnailsOrientation","isFullscreenAllowed","allowFullScreen","zoomViewMode","imageZoom","emptyPlaceHolderImage","placeholderImageName","getFallbackImageUrl","ItemId","_this$props$config$im3","_this$props$data$prod","curatedImages","_filterMasterImageFromVariant","mediaGalleryCarouselItems","_getMediaGalleryItems","mediaGalleryThumbnailCarouselItems","_getMediaGalleryThumbnailItems","callbackToggle","callbackThumbnailClick","callbackThumbnailKeyDown","CarouselProps","indicatorAriaText","ariaLabelForSlide","Thumbnails","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","SingleSlideCarousel","vertical","flipperPrevLabel","flipperNextLabel","parentId","useTabList","JSON","stringify","_this$state$mediaGall","lastUpdate","defaultKey","_getEmptyThumbnailItem","_this$state$mediaGall2","zoomView","_renderEmptyImage","curatedImage","imagesToSet","Date","now","_renderImageInContainerOnZoom","_renderImageFullScreenOnZoom","_renderImageInlineOnZoom","_this$props$config$sh","_this$props$data$prod2","_this$props$data$prod3","_this$props$data$prod4","shouldHidePrimaryImages","shouldHideMasterProductImagesForVariant","variantImages","isVariantProduct","ObjectExtensions","isNullOrUndefined","MasterProductId","itemId","_item$additionalPrope","_this$props$config$da","dataScale","defaultDataScale","onMouseOver","onMouseMove","inlineZoomImageOnMouseMove","_this$props$config$da2","inlineZoomImageOnHover","String","_handleMobileViewZoomedImageClick","currentTarget","mobileZoomedInImageClassName","style","transform","classList","remove","parentElement","overflow","_this$props$config$da3","bounds","getBoundingClientRect","Number","positionX","clientX","left","positionY","clientY","top","scaledPositionX","scaledPositionY","add","scrollTo","_this$props$config$da4","innerWidth","inlineZoomInitClick","inlineZoomImageOnMouseOut","onContainerZoomInit","onMouseOutLensContainer","_this$props$config$da5","onMouseOut","onMouseMoveLensContainer","onMouseOverImageContainer","fullScreenTitleText","_product$PrimaryImage","PrimaryImageUrl","_this$fullScreenOverl","current","focus","parentDiv","get","children","querySelector","removeAttribute","removeContainerZoomStyle","_renderThumbnails","thumbnails","_renderThumbnailItem","thumbnail"],"sourceRoot":""}