{"version":3,"file":"693.chunk.js","mappings":"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","sources":["webpack://oriproductinfodialogspa/../../../src/constants/defaultTranslations.ts","webpack://oriproductinfodialogspa/../../src/constants-generated.ts","webpack://oriproductinfodialogspa/../../../../src/components/Dialog/styles.ts","webpack://oriproductinfodialogspa/../../../../src/components/Dialog/Dialog.tsx","webpack://oriproductinfodialogspa/../../../../src/components/ErrorInfo/constants.ts","webpack://oriproductinfodialogspa/../../../../src/components/ErrorInfo/styles.ts","webpack://oriproductinfodialogspa/../../../../src/components/ErrorInfo/ErrorInfo.tsx","webpack://oriproductinfodialogspa/../../../../src/components/Loading/Loading.tsx","webpack://oriproductinfodialogspa/../../../src/utils/getNonDiscontinuedAndCannotBeSold.ts","webpack://oriproductinfodialogspa/../../../src/containers/DialogContainer.tsx","webpack://oriproductinfodialogspa/../../../src/queries-net/getProductsQuery.ts","webpack://oriproductinfodialogspa/../../../src/utils/isDeletedShade.ts","webpack://oriproductinfodialogspa/../../../src/api/mappers.ts","webpack://oriproductinfodialogspa/../../../../src/hooks/internal/useSWRFetch.ts","webpack://oriproductinfodialogspa/../../../src/hooks/useGetProductInfoDialogProducts.ts","webpack://oriproductinfodialogspa/../../../../src/api/getProductInfoDialogProducts/getProductInfoDialogProducts.ts","webpack://oriproductinfodialogspa/../../../src/api/getProductInfoDialogShowMrpStatement.ts","webpack://oriproductinfodialogspa/../../../src/hooks/useGetProductInfoDialogShowMrpStatement.ts","webpack://oriproductinfodialogspa/../../src/event.ts","webpack://oriproductinfodialogspa/../../../../src/hooks/internal/useCloseEvents.ts","webpack://oriproductinfodialogspa/../../src/logger.ts","webpack://oriproductinfodialogspa/../../../src/constants/swrConfig.ts","webpack://oriproductinfodialogspa/../../../../src/containers/ApiProvider/ApiProvider.tsx","webpack://oriproductinfodialogspa/../../../src/containers/ProductInfoDialogController.tsx","webpack://oriproductinfodialogspa/../../../../src/hooks/internal/useOpenEvent.ts","webpack://oriproductinfodialogspa/../../../src/hooks/useProductInfoDialog.tsx","webpack://oriproductinfodialogspa/../../../src/utils/shouldShowIsDiscontinuedErrorInfo.ts","webpack://oriproductinfodialogspa/./src/App.tsx","webpack://oriproductinfodialogspa/./src/appRender.tsx","webpack://oriproductinfodialogspa/./src/logger.ts","webpack://oriproductinfodialogspa/../../../src/constants/common.ts","webpack://oriproductinfodialogspa/../../../src/constants/dialogMode.ts","webpack://oriproductinfodialogspa/../../../../src/hooks/internal/useIsDesktop.ts","webpack://oriproductinfodialogspa/../../../src/hooks/useTranslations.ts","webpack://oriproductinfodialogspa/../../../src/utils/getInitialProduct.ts"],"sourcesContent":["/* istanbul ignore file */\n\n/**\n * DO NOT EDIT!\n * This file was autogenerated by npm script `localizations-codegen`.\n * Changes may cause incorrect behavior and will be lost when the file is regenerated.\n *\n * Run `npx localizations-codegen` to regenerate.\n */\nimport type { TranslationKey } from '../models/TranslationKey';\n\nexport type DefaultTranslations = Record;\n\nexport const defaultTranslations: DefaultTranslations = {\n bonusPoints: 'Bonus points',\n buy: 'Buy',\n cataloguePrice: 'Catalogue price',\n choose: 'Choose',\n favorites: 'Favorites',\n goBack: 'Go back',\n lowestPrice: 'Our lowest price, the last 30 days before current price, was',\n mrpStatement: 'Inclusive of all taxes',\n productIsDiscontinued: 'Product is discontinued',\n productIsDiscontinuedDescription: 'The product you are looking for has been discontinued and is no longer for sale.',\n productNotFound: 'Product not found',\n productNotFoundDescription: 'We are experiencing technical difficulties and the product cannot be found.',\n regularPrice: 'Regular price',\n replace: 'Replace',\n replaceWith: 'Replace with',\n reserve: 'Reserve',\n save: 'Save',\n share: 'Share',\n shareProductAndEarnPrice: 'Share product and earn {price}',\n subscribe: 'Subscribe',\n yourPrice: 'Your price',\n};\n\nexport const translationsNamespace = 'product-info-dialog';\n","/* istanbul ignore file */\n//\n// DO NOT EDIT!\n// This file was autogenerated by Eddie.\n// Changes may cause incorrect behavior and will be lost when the file is regenerated.\n//\n// Run `npx eddie update workspace` to regenerate.\n//\n\nexport const APP_NAME = 'product-info-dialog';\nexport const PACKAGE_NAME = '@ori/product-info-dialog';\nexport const TEAM_NAME = 'Presentation';\n\nexport const EMOTION_CACHE_KEY = `${APP_NAME}-emotion-cache-key`;\n\nexport const APP_ROOT_ELEMENT_ID = `${APP_NAME}-root`;\n","import { Dialog, dialogClasses } from '@ori-ui/components';\nimport { paperClasses, styled } from '@ori-ui/mui';\nimport { shouldNotForwardProp } from '@ori/presentation-utils';\n\nimport type { DialogProps } from './types';\n\nexport const Root = styled(Dialog, { shouldForwardProp: shouldNotForwardProp(['isInfo', 'zIndex']) })<\n Pick & { isInfo?: boolean }\n>`\n z-index: ${({ zIndex }) => zIndex};\n\n button {\n z-index: ${({ zIndex }) => (typeof zIndex === 'number' ? zIndex + 1 : undefined)};\n }\n\n & .${dialogClasses.closeButton} {\n z-index: 10;\n }\n\n & .${paperClasses.root} {\n ${({ theme }) => theme.breakpoints.up('sm')} {\n width: ${(props) => (props.isInfo ? '390px' : '720px')};\n max-width: 95vw;\n }\n\n ${({ theme }) => theme.breakpoints.up('md')} {\n height: ${(props) => (props.isInfo ? 'auto' : '450px')};\n overflow: visible;\n width: ${(props) => (props.isInfo ? '390px' : '900px')};\n max-width: 80vw;\n }\n\n ${({ theme }) => theme.breakpoints.up('lg')} {\n max-width: 75vw;\n }\n }\n`;\n","import { Root } from './styles';\nimport type { DialogProps } from './types';\n\nexport const Dialog = ({ children, container, header, id, onClose, open, zIndex, isInfo = false }: DialogProps) => (\n \n {children}\n \n);\n","export const ERROR_INFO = 'error-info';\n","import { styled } from '@ori-ui/mui';\n\nexport const Root = styled('div')(({ theme }) => ({\n display: 'flex',\n width: '100%',\n flexDirection: 'column',\n alignItems: 'center',\n gap: theme.spacing(3),\n padding: theme.spacing(6, 3),\n [theme.breakpoints.up('sm')]: {\n padding: theme.spacing(6),\n },\n}));\n\nexport const IconContainer = styled('div')(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 80,\n justifySelf: 'stretch',\n color: theme.palette.error.dark,\n}));\n\nexport const ButtonContainer = styled('div')(({ theme }) => ({\n marginTop: theme.spacing(3),\n width: '100%',\n}));\n","import { ErrorCircle } from '@ori-ui/icons';\nimport { Button, Typography } from '@ori-ui/mui';\nimport useTestId from '@ori/testid-generator';\n\nimport { ERROR_INFO } from './constants';\nimport { ButtonContainer, IconContainer, Root } from './styles';\nimport type { ErrorInfoProps } from './types';\n\nexport const ErrorInfo = ({ title, description, buttonTitle, handleButtonClick }: ErrorInfoProps) => {\n const { getTestId } = useTestId();\n\n return (\n \n \n \n \n \n {title}\n \n \n {description}\n \n \n \n {buttonTitle}\n \n \n \n );\n};\n","import { Box, CircularProgress } from '@ori-ui/mui';\n\nexport const Loading = () => (\n \n \n \n);\n","import type { Product } from '../models';\n\nexport const getNonDiscontinuedAndCannotBeSold = (products: Product[]) =>\n products.filter((product) => !product.isDiscontinuedAndCannotBeSold);\n","import type { FunctionComponent } from 'react';\nimport { lazy, Suspense, useMemo } from 'react';\n\nimport { Dialog } from '../components/Dialog';\nimport { ErrorInfo } from '../components/ErrorInfo';\nimport { Loading } from '../components/Loading';\nimport { DIALOG_MODE_LOADING, NOT_FOUND, DISCONTINUED } from '../constants';\nimport { useIsDesktop } from '../hooks/internal';\nimport { useTranslations } from '../hooks/useTranslations';\nimport { getInitialProduct } from '../utils';\nimport { getNonDiscontinuedAndCannotBeSold } from '../utils/getNonDiscontinuedAndCannotBeSold';\nimport type { DialogContentProps } from './DialogContent';\nimport type { ProductInfoDialogProps } from './types';\n\nexport const DialogContent = lazy>(async () => ({\n default: (await import(/* webpackChunkName: \"ProductInfoDialog_DialogContent\" */ './DialogContent')).DialogContent,\n}));\n\nexport const DialogContainer = ({\n analytics = {},\n customer = {},\n dialog = {},\n handlers = {},\n initialProductCode,\n mode = DIALOG_MODE_LOADING,\n products = [],\n shared = {},\n replaceSubscription,\n}: ProductInfoDialogProps) => {\n const { originalItemCode } = shared;\n const { shade } = getInitialProduct({ initialProductCode, products });\n const { canBeReserved } = shade ?? {};\n const { translations } = useTranslations();\n const isDesktop = useIsDesktop();\n const isInfo = mode === NOT_FOUND || mode === DISCONTINUED;\n const header = useMemo(() => {\n if (!isDesktop) {\n if (originalItemCode) {\n return translations.replaceWith;\n }\n if (canBeReserved) {\n return translations.reserve;\n }\n }\n\n return undefined;\n }, [canBeReserved, isDesktop, originalItemCode, translations.replaceWith, translations.reserve]);\n\n const content = useMemo(() => {\n switch (mode) {\n case DIALOG_MODE_LOADING:\n return ;\n case NOT_FOUND:\n return (\n \n );\n case DISCONTINUED:\n return (\n \n );\n default:\n return (\n }>\n \n \n );\n }\n }, [\n mode,\n translations.productNotFound,\n translations.productNotFoundDescription,\n translations.goBack,\n translations.productIsDiscontinued,\n translations.productIsDiscontinuedDescription,\n dialog.onClose,\n analytics,\n customer,\n handlers,\n initialProductCode,\n products,\n shared,\n replaceSubscription,\n ]);\n\n return (\n \n }>{content}\n \n );\n};\n","import { gql } from '@ori/fetching';\n\nconst subscriptionBenefitBanner = gql`\n fragment SubscriptionBenefitBanner on Product {\n subscriptionBenefitBanner {\n title\n message\n registerLink {\n title\n relativeUrl\n }\n readMoreLink {\n title\n relativeUrl\n }\n signInLink {\n title\n relativeUrl\n }\n }\n }\n`;\n\nconst shade = gql`\n ${subscriptionBenefitBanner}\n fragment Shade on Product {\n ...SubscriptionBenefitBanner\n availability {\n isBackorder\n }\n backInStockAvailability {\n showBackInStockNotification\n }\n color\n hexColors\n colorImageUrl\n formattedPrice {\n bp\n price {\n basicCashback\n basicCataloguePrice\n currentPrice\n previousMinOfferPrice\n sharingBonus\n priceAfterImmediateDiscount\n }\n }\n isDiscontinued\n isSample\n imageUrl\n labels {\n helpText\n labelKey\n productLabelDomain\n title\n }\n pdpUrl {\n relativeUrl\n }\n productCode\n volume\n volumeUnit\n }\n`;\n\nconst concept = gql`\n fragment Concept on Concept {\n benefits\n brand {\n name\n url\n }\n categories {\n taxonomyId\n }\n description\n name\n products {\n ...Shade\n }\n ratingAverage\n ratingCount\n }\n`;\n\nconst product = gql`\n ${concept}\n ${shade}\n fragment Product on Product {\n productCode\n concept {\n ...Concept\n }\n }\n`;\n\nconst replacement = gql`\n fragment Replacement on ProductReplacement {\n product {\n ...Product\n }\n }\n`;\n\nconst productWithReplacements = gql`\n ${product}\n ${replacement}\n fragment ProductWithReplacements on Product {\n ...Product\n replacements {\n ...Replacement\n }\n }\n`;\n\nexport const getProducts = gql`\n query GetProducts($productCodes: [ID]) {\n products(productCodes: $productCodes) {\n ...ProductWithReplacements\n }\n }\n ${productWithReplacements}\n`;\n","import type { ShadeFragment } from '../models/graphql-types/net';\n\nexport const isDeletedShade = (shade: ShadeFragment): boolean => shade.isDiscontinued == null;\n","import { mapCanBeReserved, mapCanBeSold, mapCanBeSubscribed, mapLabels, mapShade } from '@ori/product-box';\n\nimport type { Product, Shade, SubscriptionBenefitBannerData } from '../models';\nimport type {\n ShadeFragment,\n SubscriptionBenefitBannerFragment,\n ConceptFragment,\n ProductFragment,\n ReplacementFragment,\n ProductWithReplacementsFragment,\n GetProductsQuery,\n} from '../models/graphql-types/net';\nimport { isDeletedShade } from '../utils';\n\nexport const getProductSize = ({ volume, volumeUnit }: ShadeFragment): Shade['size'] => {\n if (volume != null && volumeUnit != null) {\n return `${volume} ${volumeUnit.trim()}`;\n }\n\n return null;\n};\n\nexport const mapProductDiscontinuedAndCannotBeSold = (\n shades: Array & Pick>,\n): boolean => {\n if (shades.length === 0) {\n return false;\n }\n\n return shades.every((shade) => shade.isDiscontinued && !shade.canBeSold);\n};\n\nexport const mapSubscriptionBenefitBanner = (\n data: NonNullable,\n): SubscriptionBenefitBannerData => ({\n title: data.title ?? '',\n message: data.message ?? '',\n readMoreText: data.readMoreLink?.title ?? '',\n readMoreUrl: data.readMoreLink?.relativeUrl ?? '',\n registerText: data.registerLink?.title ?? '',\n registerUrl: data.registerLink?.relativeUrl ?? '',\n signInText: data.signInLink?.title ?? '',\n});\n\nexport const mapShades = (shades: ConceptFragment['products']): Shade[] =>\n (shades ?? [])\n .filter((shade): shade is NonNullable => shade != null && !isDeletedShade(shade))\n .map((shade): Shade => {\n const { hexColors, imageUrl } = mapShade(shade);\n const { deal, ppa } = mapLabels(shade.labels) ?? {};\n\n return {\n canBeReserved: shade.availability?.isBackorder ?? mapCanBeReserved(shade.labels),\n canBeSold: mapCanBeSold(shade.labels),\n canBeSubscribed: mapCanBeSubscribed(shade.labels),\n isDiscontinued: shade.isDiscontinued ?? false,\n isSample: shade.isSample ?? false,\n color: {\n name: shade.color ?? null,\n hexColors,\n imageUrl,\n },\n dealLabel: deal,\n imageUrl: shade.imageUrl ?? null,\n bonusPoints: shade.formattedPrice?.bp ?? 0,\n pdpUrl: shade.pdpUrl?.relativeUrl ?? null,\n ppaLabel: ppa,\n price: {\n basicCashback: shade.formattedPrice?.price?.basicCashback ?? null,\n current: shade.formattedPrice?.price?.currentPrice ?? null,\n old: shade.formattedPrice?.price?.basicCataloguePrice ?? null,\n previousMinOfferPrice: shade.formattedPrice?.price?.previousMinOfferPrice ?? null,\n sharingBonus: shade.formattedPrice?.price?.sharingBonus ?? null,\n priceAfterImmediateDiscount: shade.formattedPrice?.price?.priceAfterImmediateDiscount ?? null,\n },\n productCode: shade.productCode,\n size: getProductSize(shade),\n showBackInStockNotification: shade.backInStockAvailability?.showBackInStockNotification ?? false,\n subscriptionBenefitBanner: shade.subscriptionBenefitBanner\n ? mapSubscriptionBenefitBanner(shade.subscriptionBenefitBanner)\n : null,\n };\n });\n\nexport const mapProductBase = (product: ProductFragment | null | undefined): Product | null | undefined => {\n const shades = mapShades(product?.concept?.products);\n if (!product?.concept?.name || shades.length === 0) {\n return null;\n }\n\n return {\n brandName: product.concept.brand?.name ?? null,\n brandUrl: product.concept.brand?.url ?? null,\n code: product.productCode,\n description: product.concept.description ?? null,\n keyFeatures: product.concept.benefits?.filter((benefit) => benefit != null) ?? [],\n name: product.concept.name,\n ratingAverage: product.concept.ratingAverage ?? 0,\n ratingCount: product.concept.ratingCount ?? 0,\n replacements: [],\n shades,\n isDiscontinuedAndCannotBeSold: mapProductDiscontinuedAndCannotBeSold(shades),\n };\n};\n\nexport const mapProductReplacementFromGql = (replacement?: ReplacementFragment | null | undefined): Product | null => {\n const productBase = mapProductBase(replacement?.product);\n if (!productBase) {\n return null;\n }\n const { brandName, brandUrl, code, description, keyFeatures, name, ratingAverage, ratingCount, shades } = productBase;\n\n return {\n brandName,\n brandUrl,\n code,\n description,\n keyFeatures,\n name,\n ratingAverage,\n ratingCount,\n replacements: [],\n shades,\n };\n};\n\nexport const mapProductReplacementsFromGql = ({\n replacements,\n}: NonNullable): Product[] =>\n (replacements ?? []).map(mapProductReplacementFromGql).filter((replacement) => replacement != null);\n\nexport const mapProductFromGql = (product: NonNullable): Product | null => {\n const productBase = mapProductBase(product);\n if (!productBase) {\n return null;\n }\n const {\n brandName,\n brandUrl,\n code,\n description,\n keyFeatures,\n name,\n ratingAverage,\n ratingCount,\n shades,\n isDiscontinuedAndCannotBeSold,\n } = productBase;\n\n return {\n brandName,\n brandUrl,\n code,\n description,\n keyFeatures,\n name,\n ratingAverage,\n ratingCount,\n replacements: mapProductReplacementsFromGql(product),\n shades,\n isDiscontinuedAndCannotBeSold,\n };\n};\n\nexport const mapProductsFromGql = (products: NonNullable): Product[] =>\n products.map((product) => (product ? mapProductFromGql(product) : null)).filter((product) => product != null);\n","import type { Key, Fetcher } from '@ori/fetching';\nimport { useSWR } from '@ori/fetching';\nimport { useCallback, useMemo, useState } from 'react';\n\nexport const useSWRFetch = >({\n fallback,\n fetcher,\n key,\n skip,\n}: {\n fallback: D;\n fetcher: F;\n key: K;\n skip?: boolean;\n}) => {\n const formattedKey = JSON.stringify({ key });\n const [currentKey, setCurrentKey] = useState(null);\n const matchingKey = currentKey === formattedKey;\n const { data, error } = useSWR(skip ? null : currentKey, fetcher, {\n revalidateIfStale: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n });\n const fetch = useCallback(() => {\n if (!matchingKey) {\n setCurrentKey(formattedKey);\n }\n }, [formattedKey, matchingKey]);\n\n return useMemo(\n () => ({\n data: data ?? fallback,\n error,\n fetch,\n isLoaded: matchingKey && data != null && error == null,\n isLoading: data == null && error == null,\n }),\n [data, error, fallback, fetch, matchingKey],\n );\n};\n","import { useServiceUrls } from '@ori/configuration-manager';\nimport { useEnvironment } from '@ori/environment';\nimport { useHeaders } from '@ori/presentation-http';\nimport { useGetTenantFeatureToggle } from '@ori/static-api-client-react';\nimport { useMemo } from 'react';\n\nimport { getProductInfoDialogProducts } from '../api';\nimport type { GetProductInfoDialogProductsProps } from '../api';\nimport type { Product } from '../models';\nimport { useSWRFetch } from './internal/useSWRFetch';\n\nconst useGraphQLNETFT = 'A46B2F16-A240-4B51-B532-6BAAB94115A7';\n\nexport const useGetProductInfoDialogProducts = ({\n productCodes,\n}: Pick) => {\n const { graphQlUrl, graphQlNetUrl } = useServiceUrls(['graphQl', 'graphQlNet']);\n const { headers, loading: loadingHeaders } = useHeaders();\n const { tenant } = useEnvironment();\n const { data: { isEnabled: useGraphQLNET } = { isEnabled: false } } = useGetTenantFeatureToggle(\n tenant,\n useGraphQLNETFT,\n {\n swr: {\n revalidateOnFocus: false,\n revalidateIfStale: false,\n revalidateOnReconnect: false,\n },\n },\n );\n const { data, error, fetch, isLoaded, isLoading } = useSWRFetch({\n fallback: [] as Product[],\n fetcher: async () =>\n getProductInfoDialogProducts({\n graphQlUrl: useGraphQLNET ? graphQlNetUrl : graphQlUrl,\n productCodes,\n headers,\n }),\n key: [graphQlUrl, ...productCodes],\n skip: loadingHeaders,\n });\n\n return useMemo(\n () => ({ data, error, fetch, isLoaded: isLoaded && data.length > 0, isLoading }),\n [data, error, fetch, isLoaded, isLoading],\n );\n};\n","import { fetchGraphql } from '@ori/fetching';\n\nimport type { GetProductsQuery, GetProductsQueryVariables } from '../../models/graphql-types/net';\nimport { getProducts } from '../../queries-net';\nimport { mapProductsFromGql } from '../mappers';\nimport type { GetProductInfoDialogProductsProps } from './types';\n\nexport const getProductInfoDialogProducts = async ({\n graphQlUrl,\n productCodes,\n headers,\n}: GetProductInfoDialogProductsProps) => {\n const { products } = await fetchGraphql({\n query: getProducts,\n url: graphQlUrl,\n variables: {\n productCodes,\n },\n headers,\n // It sometimes takes longer time GraphQL to respond.\n timeout: 15000,\n });\n\n return products ? mapProductsFromGql(products) : [];\n};\n","import { ApiClient, getTenantApplicationsProductDetailConfiguration } from '@ori/static-api-client-react';\n\nimport type { GetProductInfoDialogShowMrpStatementProps } from './types';\n\nexport const getProductInfoDialogShowMrpStatement = async ({\n staticApiUrl,\n tenant,\n}: GetProductInfoDialogShowMrpStatementProps) => {\n const client = new ApiClient({ baseUrl: staticApiUrl });\n const {\n data: { isMrpStatementEnabled },\n } = await getTenantApplicationsProductDetailConfiguration(client, tenant);\n\n return isMrpStatementEnabled;\n};\n","import { useServiceUrls } from '@ori/configuration-manager';\nimport { useEnvironment } from '@ori/environment';\n\nimport { getProductInfoDialogShowMrpStatement } from '../api';\nimport { useSWRFetch } from './internal/useSWRFetch';\n\nexport const useGetProductInfoDialogShowMrpStatement = () => {\n const { staticApiUrl } = useServiceUrls(['staticApi']);\n const { tenant } = useEnvironment();\n\n return useSWRFetch({\n fallback: false,\n fetcher: async () => getProductInfoDialogShowMrpStatement({ staticApiUrl, tenant }),\n key: [staticApiUrl, tenant],\n });\n};\n","import type { PositionData } from '@ori/analytics-data';\n\ntype EventName = typeof Name;\n\nexport const Name = 'open-product-info-dialog';\n\nexport const OpenProductInfoDialogDialog: EventName = Name;\n\nexport enum DialogMode {\n Favorites = 'favorites',\n Loading = 'loading',\n StandardBuy = 'standardBuy',\n}\n\ninterface ReplaceSubscriptionData {\n droppingId: number;\n subscriptionId: number;\n}\n\nexport interface Data extends PositionData {\n atpClusterId?: number;\n initialProductCode?: string;\n lineNumber?: number;\n mode: DialogMode;\n originalItemCode?: string;\n originalQuantity?: number;\n productCodes: string[];\n replaceSubscription?: ReplaceSubscriptionData;\n}\n\nexport interface Event extends CustomEvent {\n type: EventName;\n}\n\nexport default Event;\n","import * as AddBackorderDemandEvent from '@ori-events/add-backorder-demand';\nimport * as BasketUpdatedEvent from '@ori-events/basket-updated';\nimport * as ReplaceShoppingBagItem from '@ori-events/replace-shopping-bag-item';\nimport * as ReplaceSubscriptionEvent from '@ori-events/replace-subscription';\nimport { useCallback, useEffect, useState } from 'react';\n\nexport interface UseCloseEventsProps {\n onClose: () => void;\n}\n\ntype CloseEvent = AddBackorderDemandEvent.Event | ReplaceShoppingBagItem.Event | ReplaceSubscriptionEvent.Event;\n\nconst events = [AddBackorderDemandEvent.Name, ReplaceShoppingBagItem.Name, ReplaceSubscriptionEvent.Name] as const;\n\nexport const useCloseEvents = ({ onClose }: UseCloseEventsProps) => {\n const [closeEvent, setCloseEvent] = useState();\n const onBasketUpdated = useCallback(() => {\n if (closeEvent) {\n onClose();\n setCloseEvent(undefined);\n }\n }, [closeEvent, onClose]);\n useEffect(() => {\n events.forEach((event) => window.addEventListener(event, setCloseEvent));\n window.addEventListener(BasketUpdatedEvent.Name, onBasketUpdated);\n\n return () => {\n events.forEach((event) => window.removeEventListener(event, setCloseEvent));\n window.removeEventListener(BasketUpdatedEvent.Name, onBasketUpdated);\n };\n }, [onBasketUpdated, onClose]);\n};\n","import { Logger } from '@ori/logger';\n\nimport { PACKAGE_NAME, TEAM_NAME } from './constants-generated';\n\nexport const mainLogger = new Logger(PACKAGE_NAME, { teamName: TEAM_NAME });\n","import type { SWRConfiguration } from '@ori/fetching';\n\nexport const swrConfig: SWRConfiguration = {\n errorRetryCount: 3,\n errorRetryInterval: 10000,\n focusThrottleInterval: 300000,\n shouldRetryOnError: true,\n suspense: false,\n};\n","// istanbul ignore file -- No need to test usage of api providers\nimport { useToken } from '@ori/auth';\nimport { useServiceUrls } from '@ori/configuration-manager';\nimport { useEnvironment } from '@ori/environment';\nimport { SWRConfig } from '@ori/fetching';\nimport { ApiClientProvider as GlobalApiClientProvider } from '@ori/global-api-client-react';\nimport { useLanguage } from '@ori/i18n';\nimport { ApiClientProvider as StaticApiClientProvider } from '@ori/static-api-client-react';\nimport type { FC, PropsWithChildren } from 'react';\n\nimport { swrConfig } from '../../constants';\n\nexport const ApiProvider: FC = ({ children }) => {\n const { language } = useLanguage();\n const { tenant } = useEnvironment();\n const { globalApiUrl, staticApiUrl } = useServiceUrls(['globalApi', 'staticApi']);\n const { token } = useToken();\n\n return (\n \n \n \n {children}\n \n \n \n );\n};\n","// istanbul ignore file -- no need to test controller\nimport { useToken } from '@ori/auth';\nimport { useServiceUrls } from '@ori/configuration-manager';\nimport { useEnvironment } from '@ori/environment';\nimport { TranslationsNamespaceProvider, TranslationsProvider, useLanguage } from '@ori/i18n';\nimport { ErrorBoundary, LoggerProvider } from '@ori/logger';\nimport { useInitialDisclose } from '@ori/presentation-hooks';\nimport { HeadersProvider, UserSegmentationDataProvider } from '@ori/presentation-http';\nimport { Team, TestIdProvider } from '@ori/testid-generator';\nimport type { FunctionComponent } from 'react';\nimport { Suspense, useEffect } from 'react';\n\nimport { defaultTranslations, translationsNamespace } from '../constants';\nimport { APP_NAME, PACKAGE_NAME } from '../constants-generated';\nimport { useProductInfoDialog } from '../hooks';\nimport { useCloseEvents, useOpenEvent } from '../hooks/internal';\nimport { mainLogger } from '../logger';\nimport { ApiProvider } from './ApiProvider';\nimport type { ProductInfoDialogControllerProps } from './types';\n\nconst localLogger = mainLogger.createChild('TranslatedController');\nconst onError = (error: unknown) =>\n localLogger.error(\n new Error('TranslationsProvider fetching failed', {\n cause: error,\n }),\n );\n\ninterface TranslatedControllerProps {\n open: boolean;\n onClose: () => void;\n onOpen: () => void;\n}\n\nconst TranslatedController = ({ open, onClose, onOpen }: TranslatedControllerProps) => {\n const { customerId, isAnonymousUser } = useToken();\n const {\n initialProductCode,\n lineNumber,\n mode,\n originalItemCode,\n originalQuantity,\n placement,\n position,\n productCodes,\n replaceSubscription,\n } = useOpenEvent({ onOpen });\n\n const { closeProductInfoDialog, openProductInfoDialog, productInfoDialog } = useProductInfoDialog({\n analytics: {\n lineNumber,\n position,\n placement,\n },\n customer: {\n customerId,\n isAnonymousUser,\n },\n dialog: { onClose },\n initialProductCode,\n mode,\n productCodes,\n shared: {\n originalItemCode,\n originalQuantity,\n },\n replaceSubscription,\n });\n useCloseEvents({ onClose });\n useEffect(() => {\n if (open) {\n openProductInfoDialog();\n } else {\n closeProductInfoDialog();\n }\n }, [closeProductInfoDialog, open, openProductInfoDialog]);\n\n return productInfoDialog;\n};\n\nexport const ProductInfoDialogController: FunctionComponent = ({ translations }) => {\n const { staticApiUrl } = useServiceUrls(['staticApi']);\n const { tenant } = useEnvironment();\n const { language } = useLanguage();\n const { customerId, token } = useToken();\n const { initialOpenDone, open, onClose, onOpen } = useInitialDisclose();\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","import type { Data, Event } from '@ori-events/open-product-info-dialog';\nimport { DialogMode, Name } from '@ori-events/open-product-info-dialog';\nimport { isNonNullable } from '@ori/ts-utils';\nimport { useEffect, useMemo, useState } from 'react';\n\nexport interface UseOpenEventProps {\n onOpen: () => void;\n}\n\nexport const useOpenEvent = ({ onOpen }: UseOpenEventProps) => {\n const [atpClusterId, setAtpClusterId] = useState();\n const [initialProductCode, setInitialProductCode] = useState();\n const [lineNumber, setLineNumber] = useState();\n const [mode, setMode] = useState(DialogMode.StandardBuy);\n const [originalItemCode, setOriginalItemCode] = useState();\n const [originalQuantity, setOriginalQuantity] = useState();\n const [placement, setPlacement] = useState();\n const [position, setPosition] = useState();\n const [productCodes, setProductCodes] = useState([]);\n const [droppingId, setDroppingId] = useState();\n const [subscriptionId, setSubscriptionId] = useState();\n useEffect(() => {\n const onOpenProductInfoDialog = ({ detail }: Event) => {\n setAtpClusterId(detail.atpClusterId);\n setDroppingId(detail.replaceSubscription?.droppingId);\n setInitialProductCode(detail.initialProductCode);\n setLineNumber(detail.lineNumber);\n setMode(detail.mode);\n setOriginalItemCode(detail.originalItemCode);\n setOriginalQuantity(detail.originalQuantity);\n setPlacement(detail.placement);\n setPosition(detail.position);\n setProductCodes(detail.productCodes);\n setSubscriptionId(detail.replaceSubscription?.subscriptionId);\n onOpen();\n };\n window.addEventListener(Name, onOpenProductInfoDialog);\n\n return () => window.removeEventListener(Name, onOpenProductInfoDialog);\n }, [onOpen]);\n\n return useMemo(\n () => ({\n atpClusterId,\n initialProductCode,\n lineNumber,\n mode,\n originalItemCode,\n originalQuantity,\n placement,\n position,\n productCodes,\n replaceSubscription:\n isNonNullable(droppingId) && isNonNullable(subscriptionId) ? { droppingId, subscriptionId } : undefined,\n }),\n [\n atpClusterId,\n droppingId,\n initialProductCode,\n lineNumber,\n mode,\n originalItemCode,\n originalQuantity,\n placement,\n position,\n productCodes,\n subscriptionId,\n ],\n );\n};\n","import { useDisclose } from '@ori/presentation-hooks';\nimport { useCallback, useEffect, useMemo } from 'react';\n\nimport {\n DIALOG_MODE_LOADING,\n DIALOG_MODE_STANDARD_BUY,\n FETCH_MODE_EAGER,\n FETCH_MODE_LAZY,\n NOT_FOUND,\n DISCONTINUED,\n} from '../constants';\nimport { DialogContainer } from '../containers/DialogContainer';\nimport { shouldShowIsDiscontinuedErrorInfo } from '../utils/shouldShowIsDiscontinuedErrorInfo';\nimport type { UseProductInfoDialogProps } from './types';\nimport { useGetProductInfoDialogProducts } from './useGetProductInfoDialogProducts';\nimport { useGetProductInfoDialogShowMrpStatement } from './useGetProductInfoDialogShowMrpStatement';\n\nexport const useProductInfoDialog = ({\n customer,\n dialog,\n fetchMode = FETCH_MODE_LAZY,\n mode = DIALOG_MODE_STANDARD_BUY,\n productCodes,\n shared,\n analytics,\n handlers,\n initialProductCode,\n replaceSubscription,\n}: UseProductInfoDialogProps) => {\n const { onClose: onCloseProp, ...dialogProps } = dialog ?? {};\n const {\n data: products,\n fetch: fetchProducts,\n isLoaded: areProductsLoaded,\n isLoading: areProductsLoading,\n } = useGetProductInfoDialogProducts({\n productCodes,\n });\n const {\n data: showMrpStatement,\n fetch: fetchShowMrpStatement,\n isLoaded: isShowMrpStatementLoaded,\n isLoading: isShowMrpStatementLoading,\n } = useGetProductInfoDialogShowMrpStatement();\n\n const { open: isOpen, onClose, onOpen } = useDisclose();\n const isLoaded = isShowMrpStatementLoaded && areProductsLoaded;\n const isLoading = isShowMrpStatementLoading || areProductsLoading;\n const fetchData = useCallback(() => {\n if (!isLoaded) {\n fetchProducts();\n fetchShowMrpStatement();\n }\n }, [fetchProducts, fetchShowMrpStatement, isLoaded]);\n const close = useCallback(() => {\n onClose();\n onCloseProp?.();\n }, [onClose, onCloseProp]);\n const open = useCallback(() => {\n onOpen();\n if (fetchMode === FETCH_MODE_LAZY) {\n fetchData();\n }\n }, [fetchData, fetchMode, onOpen]);\n useEffect(() => {\n if (fetchMode === FETCH_MODE_EAGER) {\n fetchData();\n }\n }, [fetchData, fetchMode]);\n\n const dialogMode = useMemo(() => {\n if (isLoading) {\n return DIALOG_MODE_LOADING;\n } else if (products.length === 0) {\n return NOT_FOUND;\n } else if (shouldShowIsDiscontinuedErrorInfo(products)) {\n return DISCONTINUED;\n }\n\n return mode;\n }, [isLoading, mode, products]);\n\n return useMemo(\n () => ({\n closeProductInfoDialog: close,\n isProductInfoDialogOpen: isOpen,\n openProductInfoDialog: open,\n productInfoDialog: (\n \n ),\n }),\n [\n close,\n isOpen,\n open,\n analytics,\n handlers,\n initialProductCode,\n replaceSubscription,\n customer,\n dialogProps,\n dialogMode,\n products,\n shared,\n showMrpStatement,\n ],\n );\n};\n","import type { Product } from '../models';\n\nexport const shouldShowIsDiscontinuedErrorInfo = (products: Product[]) => {\n if (products.length > 0) {\n return products.every((product) => product.isDiscontinuedAndCannotBeSold);\n }\n\n return false;\n};\n","import type { PickClientAppDataConfigProps } from '@ori/client-app-config';\nimport { ServiceUrlsProvider } from '@ori/configuration-manager';\nimport { EnvironmentProvider } from '@ori/environment';\nimport { TranslationsProvider } from '@ori/i18n';\nimport { ProductInfoDialogController } from '@ori/product-info-dialog';\nimport { Team, TestIdProvider } from '@ori/testid-generator';\nimport { type FC } from 'react';\n\nimport { APP_NAME } from './constants-generated';\n\nexport type AppProps = PickClientAppDataConfigProps<\n 'currentLanguage' | 'globalApiUrl' | 'graphqlUrl' | 'graphqlNetUrl' | 'staticApiUrl' | 'tenant'\n>;\nexport const App: FC = ({\n currentLanguage,\n globalApiUrl = '',\n graphqlUrl,\n graphqlNetUrl,\n staticApiUrl = '',\n tenant,\n}) => (\n \n \n \n \n \n \n \n \n \n);\n","import { ThemeProvider } from '@ori-ui/mui';\nimport { doDevelopmentLogin, UniversalTokenProvider } from '@ori/auth';\nimport type { PickClientAppDataConfigProps } from '@ori/client-app-config';\nimport { parseClientAppConfig } from '@ori/client-app-config';\nimport { ApplicationInsights, ErrorBoundary, getClientApplicationInsightsConfig } from '@ori/logger';\nimport { createRoot } from 'react-dom/client';\n\nimport { App } from './App';\nimport type { AppProps as AppConfig } from './App';\nimport { EMOTION_CACHE_KEY } from './constants-generated';\nimport { mainLogger } from './logger';\n\nconst localLogger = mainLogger.createChild('appRender');\n\n/**\n * React app renderer that is used when app is used as a standalone app\n */\nexport async function render(rootElement: HTMLElement) {\n const { config = '' } = rootElement.dataset;\n const { identityUrl, ...appConfig } = parseClientAppConfig<\n AppConfig & PickClientAppDataConfigProps<'customerId' | 'identityUrl'>\n >(config, ['tenant', 'currentLanguage', 'graphqlUrl', 'graphqlNetUrl', 'staticApiUrl', 'globalApiUrl']);\n const { customerId, tenant } = appConfig;\n\n // Initialize Application Insights in production\n if (process.env.NODE_ENV === 'production') {\n ApplicationInsights.initialize(getClientApplicationInsightsConfig());\n }\n // When using Requestly we do not want to load token\n else if (process.env.REACT_APP_USE_REQUESTLY === '1') {\n localLogger.debug('USING REQUESTLY');\n }\n // Get token for local development\n else if (process.env.REACT_APP_ANONYMOUS_MODE !== '1') {\n if (identityUrl) {\n await doDevelopmentLogin({ identityUrl, tenant });\n } else {\n localLogger.error(new Error('Missing Identity URL!', { cause: identityUrl }));\n }\n }\n\n createRoot(rootElement).render(\n \n \n \n \n \n \n ,\n );\n}\n","import { Logger } from '@ori/logger';\n\nimport { PACKAGE_NAME, TEAM_NAME } from './constants-generated';\n\nexport const mainLogger = new Logger(PACKAGE_NAME, { teamName: TEAM_NAME });\n","export const FETCH_MODE_EAGER = 'eager';\n\nexport const FETCH_MODE_LAZY = 'lazy';\n\nexport const PRODUCT_INITIAL_QUANTITY = 1;\n","export const DIALOG_MODE_FAVORITES = 'favorites';\n\nexport const DIALOG_MODE_LOADING = 'loading';\n\nexport const DIALOG_MODE_STANDARD_BUY = 'standardBuy';\n\nexport const DISCONTINUED = 'discontinued';\n\nexport const NOT_FOUND = 'notFound';\n\nexport const DIALOG_MODES = [\n DIALOG_MODE_FAVORITES,\n DIALOG_MODE_LOADING,\n DIALOG_MODE_STANDARD_BUY,\n DISCONTINUED,\n NOT_FOUND,\n];\n","import type { Theme } from '@ori-ui/mui';\nimport { useMediaQuery } from '@ori-ui/mui';\n\nexport const useIsDesktop = () => useMediaQuery((theme) => theme.breakpoints.up('md'));\n","/* istanbul ignore file */\n\n/**\n * DO NOT EDIT!\n * This file was autogenerated by npm script `localizations-codegen`.\n * Changes may cause incorrect behavior and will be lost when the file is regenerated.\n *\n * Run `npx localizations-codegen` to regenerate.\n */\nimport { useTranslationsFromNamespace, type UseTranslationsFromNamespaceResult } from '@ori/i18n';\n\nimport type { DefaultTranslations } from '../constants/defaultTranslations';\n\n/**\n * A hook for accessing translations within a specific namespace along with a formatting function.\n *\n * @returns The translations within the specified namespace and a formatting function.\n */\nexport const useTranslations: () => UseTranslationsFromNamespaceResult = () =>\n useTranslationsFromNamespace();\n","import type { Product } from '../models';\n\nexport const getInitialProduct = ({\n initialProductCode,\n products,\n}: {\n initialProductCode?: string;\n products: Product[];\n}) => {\n if (initialProductCode) {\n const initialProduct = products.find(({ code }) => code === initialProductCode);\n const initialProductShade = initialProduct?.shades.find(({ productCode }) => productCode === initialProductCode);\n const productIndex = products.findIndex(({ code }) => code === initialProductCode);\n const index = productIndex < 0 ? 0 : productIndex;\n\n return { index, product: initialProduct, shade: initialProductShade };\n }\n\n return { index: 0, product: products[0], shade: products[0]?.shades?.[0] };\n};\n"],"names":["defaultTranslations","bonusPoints","buy","cataloguePrice","choose","favorites","goBack","lowestPrice","mrpStatement","productIsDiscontinued","productIsDiscontinuedDescription","productNotFound","productNotFoundDescription","regularPrice","replace","replaceWith","reserve","save","share","shareProductAndEarnPrice","subscribe","yourPrice","translationsNamespace","APP_NAME","PACKAGE_NAME","Root","styled","Dialog","shouldForwardProp","shouldNotForwardProp","zIndex","undefined","dialogClasses","closeButton","paperClasses","root","theme","breakpoints","up","props","isInfo","children","container","header","id","onClose","open","_jsx","size","display","width","flexDirection","alignItems","gap","spacing","padding","IconContainer","justifyContent","fontSize","justifySelf","color","palette","error","dark","ButtonContainer","marginTop","ErrorInfo","title","description","buttonTitle","handleButtonClick","getTestId","useTestId","_jsxs","ErrorCircle","Typography","variant","component","textAlign","Button","fullWidth","onClick","Loading","Box","height","CircularProgress","getNonDiscontinuedAndCannotBeSold","products","filter","product","isDiscontinuedAndCannotBeSold","DialogContent","lazy","async","default","DialogContainer","analytics","customer","dialog","handlers","initialProductCode","mode","DIALOG_MODE_LOADING","shared","replaceSubscription","originalItemCode","shade","getInitialProduct","canBeReserved","translations","useTranslations","isDesktop","useIsDesktop","NOT_FOUND","DISCONTINUED","useMemo","content","Suspense","fallback","subscriptionBenefitBanner","gql","concept","replacement","productWithReplacements","getProducts","getProductSize","volume","volumeUnit","trim","mapProductDiscontinuedAndCannotBeSold","shades","length","every","isDiscontinued","canBeSold","mapProductBase","isDeletedShade","map","hexColors","imageUrl","mapShade","deal","ppa","mapLabels","labels","availability","isBackorder","mapCanBeReserved","mapCanBeSold","canBeSubscribed","mapCanBeSubscribed","isSample","name","dealLabel","formattedPrice","bp","pdpUrl","relativeUrl","ppaLabel","price","basicCashback","current","currentPrice","old","basicCataloguePrice","previousMinOfferPrice","sharingBonus","priceAfterImmediateDiscount","productCode","showBackInStockNotification","backInStockAvailability","data","message","readMoreText","readMoreLink","readMoreUrl","registerText","registerLink","registerUrl","signInText","signInLink","mapShades","brandName","brand","brandUrl","url","code","keyFeatures","benefits","benefit","ratingAverage","ratingCount","replacements","mapProductReplacementFromGql","productBase","mapProductReplacementsFromGql","mapProductsFromGql","mapProductFromGql","useSWRFetch","fetcher","key","skip","formattedKey","JSON","stringify","currentKey","setCurrentKey","useState","matchingKey","useSWR","revalidateIfStale","revalidateOnFocus","revalidateOnReconnect","fetch","useCallback","isLoaded","isLoading","useGetProductInfoDialogProducts","productCodes","graphQlUrl","graphQlNetUrl","useServiceUrls","headers","loading","loadingHeaders","useHeaders","tenant","useEnvironment","isEnabled","useGraphQLNET","useGetTenantFeatureToggle","swr","fetchGraphql","query","variables","timeout","getProductInfoDialogProducts","useGetProductInfoDialogShowMrpStatement","staticApiUrl","client","ApiClient","baseUrl","isMrpStatementEnabled","getTenantApplicationsProductDetailConfiguration","getProductInfoDialogShowMrpStatement","Name","DialogMode","events","AddBackorderDemandEvent","ReplaceShoppingBagItem","ReplaceSubscriptionEvent","mainLogger","Logger","teamName","swrConfig","errorRetryCount","errorRetryInterval","focusThrottleInterval","shouldRetryOnError","suspense","ApiProvider","language","useLanguage","globalApiUrl","token","useToken","SWRConfig","value","StaticApiClientProvider","GlobalApiClientProvider","localLogger","createChild","onError","Error","cause","TranslatedController","onOpen","customerId","isAnonymousUser","lineNumber","originalQuantity","placement","position","useOpenEvent","atpClusterId","setAtpClusterId","setInitialProductCode","setLineNumber","setMode","StandardBuy","setOriginalItemCode","setOriginalQuantity","setPlacement","setPosition","setProductCodes","droppingId","setDroppingId","subscriptionId","setSubscriptionId","useEffect","onOpenProductInfoDialog","detail","window","addEventListener","removeEventListener","isNonNullable","closeProductInfoDialog","openProductInfoDialog","productInfoDialog","useProductInfoDialog","fetchMode","FETCH_MODE_LAZY","DIALOG_MODE_STANDARD_BUY","onCloseProp","dialogProps","fetchProducts","areProductsLoaded","areProductsLoading","showMrpStatement","fetchShowMrpStatement","isShowMrpStatementLoaded","isShowMrpStatementLoading","isOpen","useDisclose","fetchData","close","FETCH_MODE_EAGER","dialogMode","shouldShowIsDiscontinuedErrorInfo","isProductInfoDialogOpen","useCloseEvents","closeEvent","setCloseEvent","onBasketUpdated","forEach","event","BasketUpdatedEvent","ProductInfoDialogController","initialOpenDone","useInitialDisclose","TestIdProvider","team","Team","Presentation","project","LoggerProvider","logger","ErrorBoundary","areaName","TranslationsProvider","clientFetchConfiguration","defaultTranslationsWithNamespaces","translationsWithNamespaces","TranslationsNamespaceProvider","namespace","UserSegmentationDataProvider","disableFetching","HeadersProvider","sourceAppName","App","currentLanguage","graphqlUrl","graphqlNetUrl","ServiceUrlsProvider","serviceUrls","EnvironmentProvider","TEAM_NAME","render","rootElement","config","dataset","identityUrl","appConfig","parseClientAppConfig","ApplicationInsights","initialize","getClientApplicationInsightsConfig","createRoot","UniversalTokenProvider","initialToken","ThemeProvider","enableCacheProvider","cacheKey","EMOTION_CACHE_KEY","PRODUCT_INITIAL_QUANTITY","DIALOG_MODE_FAVORITES","useMediaQuery","useTranslationsFromNamespace","initialProduct","find","initialProductShade","productIndex","findIndex","index"],"sourceRoot":""}