{"version":3,"file":"108.chunk.js","mappings":"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","sources":["webpack://oriproductinfodialogspa/../../../src/constants/defaultTranslations.ts","webpack://oriproductinfodialogspa/../../src/constants-generated.ts","webpack://oriproductinfodialogspa/../../../src/constants/dialogMode.ts","webpack://oriproductinfodialogspa/../../../../src/components/Dialog/styles.ts","webpack://oriproductinfodialogspa/../../../../src/components/Dialog/Dialog.tsx","webpack://oriproductinfodialogspa/../../../../src/components/Dialog/constants.ts","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/constants.ts","webpack://oriproductinfodialogspa/../../../../src/components/Loading/Loading.tsx","webpack://oriproductinfodialogspa/../../../../src/components/ProductInfoDialogDrawer/styles.ts","webpack://oriproductinfodialogspa/../../../../src/components/ProductInfoDialogDrawer/ProductInfoDialogDrawer.tsx","webpack://oriproductinfodialogspa/../../../../src/components/ProductInfoDialogDrawer/constants.ts","webpack://oriproductinfodialogspa/../../../src/utils/getNonDiscontinuedAndCannotBeSold.ts","webpack://oriproductinfodialogspa/../../../src/containers/DialogContainer.tsx","webpack://oriproductinfodialogspa/../../../../src/hooks/internal/useSWRFetch.ts","webpack://oriproductinfodialogspa/../../../src/hooks/useGetProductBoxConfiguration.ts","webpack://oriproductinfodialogspa/../../../src/api/getProductBoxConfiguration.ts","webpack://oriproductinfodialogspa/../../../src/queries-net/getProductsQuery.ts","webpack://oriproductinfodialogspa/../../../src/api/mappers.ts","webpack://oriproductinfodialogspa/../../../src/hooks/useGetProductInfoDialogProducts.ts","webpack://oriproductinfodialogspa/../../../../src/api/getProductInfoDialogProducts/getProductInfoDialogProducts.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/utils/mapEventsToData.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/hooks/useTranslations.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 choose: 'Choose',\n favorites: 'Favorites',\n goBack: 'Go back',\n lowestPrice: 'Our lowest price, the last 30 days before current price, was',\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 replace: 'Replace',\n replaceWith: 'Replace with',\n reserve: 'Reserve',\n subscribe: 'Subscribe',\n viewMoreDetails: 'View more details',\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","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","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 useTestId from '@ori/testid-generator';\n\nimport { PRODUCT_INFO_DIALOG_DIALOG } from './constants';\nimport { Root } from './styles';\nimport type { DialogProps } from './types';\n\nexport const Dialog = ({ children, container, header, id, onClose, open, zIndex, isInfo = false }: DialogProps) => {\n const { getTestId } = useTestId();\n\n return (\n \n {children}\n \n );\n};\n","export const PRODUCT_INFO_DIALOG_DIALOG = 'product-info-dialog-dialog';\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 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: '8rem',\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","export const LOADING = 'loading';\n","import { Box, CircularProgress } from '@ori-ui/mui';\nimport useTestId from '@ori/testid-generator';\n\nimport { LOADING } from './constants';\n\nexport const Loading = () => {\n const { getTestId } = useTestId();\n\n return (\n \n \n \n );\n};\n","import { IconButton } from '@ori-ui/components';\nimport { Paper, styled, alpha } from '@ori-ui/mui';\n\nexport const TitleContainer = styled('div')({\n display: 'flex',\n justifyContent: 'center',\n width: '100%',\n userSelect: 'none',\n});\n\nexport const Root = styled(Paper)(({ theme }) => ({\n display: 'flex',\n justifyItems: 'center',\n flexDirection: 'column',\n gap: theme.spacing(4),\n position: 'relative',\n width: 400,\n outline: 0,\n height: '100%',\n}));\n\nexport const CloseButton = styled(IconButton)(({ theme }) => ({\n position: 'absolute',\n top: 0,\n right: 0,\n margin: theme.spacing(2),\n background: alpha(theme.palette.common.white, 0.75),\n}));\n","import { Clear } from '@ori-ui/icons';\nimport { Drawer, Typography } from '@ori-ui/mui';\nimport useTestId from '@ori/testid-generator';\nimport type { FC, PropsWithChildren } from 'react';\n\nimport { PRODUCT_INFO_DIALOG_DRAWER, PRODUCT_INFO_DIALOG_DRAWER_CLOSE_BUTTON } from './constants';\nimport { CloseButton, Root, TitleContainer } from './styles';\nimport type { ProductInfoDialogDrawerProps } from './types';\n\nexport const ProductInfoDialogDrawer: FC> = ({\n open,\n onClose,\n placement = 'right',\n title,\n children,\n PaperProps,\n}) => {\n const { getTestId } = useTestId();\n\n return (\n \n \n {title ? (\n \n \n {title}\n \n \n ) : null}\n {children}\n \n \n \n \n \n );\n};\n","export const PRODUCT_INFO_DIALOG_DRAWER = 'product-info-dialog-drawer';\nexport const PRODUCT_INFO_DIALOG_DRAWER_CLOSE_BUTTON = 'product-info-dialog-drawer-close-button';\n","import type { Product } from '../models';\n\nexport const getNonDiscontinuedAndCannotBeSold = (products: Product[]) =>\n products.filter((product) => !product.isDiscontinuedAndCannotBeSold);\n","import { useIsMobile } from '@ori/presentation-hooks';\nimport 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 { ProductInfoDialogDrawer } from '../components/ProductInfoDialogDrawer';\nimport { DIALOG_MODE_LOADING, NOT_FOUND, DISCONTINUED } from '../constants';\nimport { useTranslations } from '../hooks/useTranslations';\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 dialog = {},\n initialProductCode,\n mode = DIALOG_MODE_LOADING,\n products = [],\n shared = { isMrpStatementEnabled: false, isRatingsAndReviewsEnabled: false },\n replaceSubscription,\n}: ProductInfoDialogProps) => {\n const { translations } = useTranslations();\n const isMobile = useIsMobile();\n const isInfo = mode === NOT_FOUND || mode === DISCONTINUED;\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 initialProductCode,\n products,\n shared,\n replaceSubscription,\n ]);\n\n if (isMobile) {\n return (\n \n }>{content}\n \n );\n }\n const { open, onClose } = dialog;\n\n return (\n \n }>{content}\n \n );\n};\n","// istanbul ignore file -- No need to test swr wrapper\nimport 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","// istanbul ignore file -- api\nimport { useServiceUrls } from '@ori/configuration-manager';\nimport { useEnvironment } from '@ori/environment';\n\nimport { getProductBoxConfiguration } from '../api';\nimport { useSWRFetch } from './internal/useSWRFetch';\n\nexport const useGetProductBoxConfiguration = () => {\n const { staticApiUrl } = useServiceUrls(['staticApi']);\n const { tenant } = useEnvironment();\n\n return useSWRFetch({\n fallback: { isMrpStatementEnabled: false, isRatingsAndReviewsEnabled: false },\n fetcher: async () => getProductBoxConfiguration({ staticApiUrl, tenant }),\n key: [staticApiUrl, tenant],\n });\n};\n","import { ApiClient, getTenantApplicationsProductboxConfiguration } from '@ori/static-api-client-react';\n\nimport type { GetProductBoxConfigurationParams } from './types';\n\nexport const getProductBoxConfiguration = async ({ staticApiUrl, tenant }: GetProductBoxConfigurationParams) => {\n const client = new ApiClient({ baseUrl: staticApiUrl });\n const {\n data: { isMrpStatementEnabled, isRatingsAndReviewsEnabled },\n } = await getTenantApplicationsProductboxConfiguration(client, tenant);\n\n return { isMrpStatementEnabled, isRatingsAndReviewsEnabled };\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 shadeName\n hexColors\n colorImageUrl\n formattedPrice {\n bp\n price {\n basicCashback\n basicCataloguePrice\n currentPrice\n previousMinOfferPrice\n priceAfterImmediateDiscount\n }\n }\n isDiscontinued\n imageUrl\n labels {\n helpText\n labelKey\n productLabelDomain\n title\n }\n productExpectedInbound {\n expectedInboundLabel\n }\n pdpUrl {\n relativeUrl\n }\n productCode\n volumeValue\n volumeUnitText\n subscription {\n available\n frequency\n allowedFrequencies\n }\n }\n`;\n\nconst concept = gql`\n fragment Concept on Concept {\n brand {\n name\n url\n }\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\nexport const getProducts = gql`\n query GetProducts($productCodes: [ID]) {\n products(productCodes: $productCodes) {\n ...Product\n }\n }\n ${product}\n`;\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 GetProductsQuery,\n} from '../models/graphql-types/net';\n\nexport const getProductSize = ({ volumeValue, volumeUnitText }: ShadeFragment): Shade['size'] => {\n if (volumeValue != null && volumeUnitText != null) {\n return `${volumeValue} ${volumeUnitText.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 mapSubscription = (subscription: ShadeFragment['subscription']): Shade['subscription'] => ({\n available: subscription?.available ?? false,\n deliveryFrequencyOptions: [...(subscription?.allowedFrequencies ?? [])],\n recommendedFrequency: subscription?.frequency ?? 0,\n});\n\nexport const mapShades = (shades: ConceptFragment['products']): Shade[] =>\n (shades ?? [])\n .filter((shade): shade is NonNullable => shade != null)\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,\n color: {\n name: shade.shadeName ?? null,\n hexColors,\n imageUrl,\n },\n dealLabel: deal,\n imageUrl: shade.imageUrl ?? null,\n bonusPoints: shade.formattedPrice?.bp ?? 0,\n nextAvailableDateText: shade.productExpectedInbound?.expectedInboundLabel ?? null,\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 priceAfterImmediateDiscount: shade.formattedPrice?.price?.priceAfterImmediateDiscount ?? null,\n },\n productCode: shade.productCode,\n size: getProductSize(shade),\n subscription: mapSubscription(shade.subscription),\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 name: product.concept.name,\n ratingAverage: product.concept.ratingAverage ?? 0,\n ratingCount: product.concept.ratingCount ?? 0,\n shades,\n isDiscontinuedAndCannotBeSold: mapProductDiscontinuedAndCannotBeSold(shades),\n };\n};\n\nexport const mapProductFromGql = (product: NonNullable): Product | null => {\n const productBase = mapProductBase(product);\n if (!productBase) {\n return null;\n }\n const { brandName, brandUrl, code, name, ratingAverage, ratingCount, shades, isDiscontinuedAndCannotBeSold } =\n productBase;\n\n return {\n brandName,\n brandUrl,\n code,\n name,\n ratingAverage,\n ratingCount,\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","// istanbul ignore file -- api\nimport { useServiceUrls } from '@ori/configuration-manager';\nimport { useHeaders } from '@ori/presentation-http';\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\nexport const useGetProductInfoDialogProducts = ({\n productCodes,\n}: Pick) => {\n const { graphQlNetUrl } = useServiceUrls(['graphQlNet']);\n const { headers, loading: loadingHeaders } = useHeaders();\n const { data, error, fetch, isLoaded, isLoading } = useSWRFetch({\n fallback: [] as Product[],\n fetcher: async () =>\n getProductInfoDialogProducts({\n graphQlUrl: graphQlNetUrl,\n productCodes,\n headers,\n }),\n key: [graphQlNetUrl, ...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 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 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 type { GlobalEvent, UseDisclose } from '@ori/presentation-hooks';\nimport { useGlobalEvents } from '@ori/presentation-hooks';\nimport { useCallback, useMemo, useState } from 'react';\n\ntype CloseEvent = AddBackorderDemandEvent.Event | ReplaceShoppingBagItem.Event | ReplaceSubscriptionEvent.Event;\n\nexport const closeEvents = [\n AddBackorderDemandEvent.Name,\n ReplaceShoppingBagItem.Name,\n ReplaceSubscriptionEvent.Name,\n] as const;\n\nexport const useCloseEvents = ({ onClose }: Pick) => {\n const [closeEvent, setCloseEvent] = useState();\n const onBasketUpdated = useCallback(() => {\n if (closeEvent) {\n onClose();\n setCloseEvent(undefined);\n }\n }, [closeEvent, onClose]);\n const events = useMemo(\n () => [\n ...closeEvents.map((name) => ({ name, listener: setCloseEvent })),\n { name: BasketUpdatedEvent.Name, listener: onBasketUpdated },\n ],\n [onBasketUpdated],\n );\n\n useGlobalEvents(events);\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","// istanbul ignore file -- No need to test swr config constant\nimport 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 type { UseDisclose } from '@ori/presentation-hooks';\nimport { useInitialDisclose } from '@ori/presentation-hooks';\nimport { HeadersProvider, UserSegmentationDataProvider } from '@ori/presentation-http';\nimport {\n presentationProductDetailDefaultTranslations,\n presentationProductDetailTranslationsNamespace,\n} from '@ori/presentation-product-detail';\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(new Error('TranslationsProvider fetching failed', { cause: error }));\n\nconst TranslatedController = ({ open, onClose, onOpen }: Pick) => {\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: { lineNumber, position, placement },\n dialog: { onClose },\n initialProductCode,\n mode,\n productCodes,\n shared: { originalItemCode, originalQuantity },\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 { Event } from '@ori-events/open-product-info-dialog';\nimport { Name } from '@ori-events/open-product-info-dialog';\nimport type { GlobalEvent, UseDisclose } from '@ori/presentation-hooks';\nimport { useGlobalEvents } from '@ori/presentation-hooks';\nimport { isNonNullable } from '@ori/ts-utils';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { OpenProductInfoDialogExtendedData } from '../../models';\nimport { mapEventToData } from '../../utils/mapEventsToData';\n\nexport const useOpenEvent = ({ onOpen }: Pick) => {\n const [eventData, setEventData] = useState();\n\n const onOpenProductInfoDialog = useCallback(\n ({ detail }: Event) => {\n setEventData(mapEventToData(detail));\n onOpen();\n },\n [onOpen],\n );\n\n const events = useMemo(\n () => [{ name: Name, listener: onOpenProductInfoDialog }],\n [onOpenProductInfoDialog],\n );\n\n useGlobalEvents(events);\n\n return useMemo(() => {\n const { droppingId, subscriptionId, productCodes, ...otherData } = eventData ?? {};\n\n return {\n ...otherData,\n productCodes: productCodes ?? [],\n replaceSubscription:\n isNonNullable(droppingId) && isNonNullable(subscriptionId) ? { droppingId, subscriptionId } : undefined,\n };\n }, [eventData]);\n};\n","import type { Event } from '@ori-events/open-product-info-dialog';\n\nimport type { OpenProductInfoDialogExtendedData } from '../models';\n\nexport const mapEventToData = (detail: Event['detail']): OpenProductInfoDialogExtendedData => ({\n atpClusterId: detail.atpClusterId,\n droppingId: detail.replaceSubscription?.droppingId,\n initialProductCode: detail.initialProductCode,\n lineNumber: detail.lineNumber,\n mode: detail.mode,\n originalItemCode: detail.originalItemCode,\n originalQuantity: detail.originalQuantity,\n placement: detail.placement,\n position: detail.position,\n productCodes: detail.productCodes,\n subscriptionId: detail.replaceSubscription?.subscriptionId,\n});\n","import { useEnvironment } from '@ori/environment';\nimport { useDisclose } from '@ori/presentation-hooks';\nimport { getRetryErrorSwrOptions } from '@ori/presentation-utils';\nimport { useGetTenantFeatureToggle } from '@ori/static-api-client-react';\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 { useGetProductBoxConfiguration } from './useGetProductBoxConfiguration';\nimport { useGetProductInfoDialogProducts } from './useGetProductInfoDialogProducts';\n\n/** Enable personal subscriptions, docs: https://dev.azure.com/oriflame/GlobalDev/_wiki/wikis/GlobalDev.wiki/11422/Personal-subscriptions */\nconst PersonalSubscriptions = '7D673EF4-D085-44B5-BB1C-8FE57F1286BD';\n\nexport const useProductInfoDialog = ({\n dialog,\n fetchMode = FETCH_MODE_LAZY,\n mode = DIALOG_MODE_STANDARD_BUY,\n productCodes,\n shared,\n analytics,\n initialProductCode,\n replaceSubscription,\n}: UseProductInfoDialogProps) => {\n const { onClose: onCloseProp, ...dialogProps } = dialog ?? {};\n const { tenant } = useEnvironment();\n const {\n data: products,\n fetch: fetchProducts,\n isLoaded: areProductsLoaded,\n isLoading: areProductsLoading,\n } = useGetProductInfoDialogProducts({\n productCodes,\n });\n const {\n data,\n fetch: fetchShowMrpStatement,\n isLoaded: isProductBoxConfigurationLoaded,\n isLoading: isProductBoxConfigurationLoading,\n } = useGetProductBoxConfiguration();\n const { isMrpStatementEnabled, isRatingsAndReviewsEnabled } = data;\n const {\n data: { isEnabled: personalSubscriptionsEnabled } = { isEnabled: false },\n isLoading: isFeatureToggleLoading,\n } = useGetTenantFeatureToggle(tenant, PersonalSubscriptions, { swr: getRetryErrorSwrOptions() });\n\n const { open: isOpen, onClose, onOpen } = useDisclose();\n const isLoaded = isProductBoxConfigurationLoaded && areProductsLoaded;\n const isLoading = isProductBoxConfigurationLoading || areProductsLoading || isFeatureToggleLoading;\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 initialProductCode,\n replaceSubscription,\n dialogProps,\n dialogMode,\n products,\n shared,\n isMrpStatementEnabled,\n isRatingsAndReviewsEnabled,\n personalSubscriptionsEnabled,\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\nexport const MANUAL_REPLACEMENT = 'M';\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"],"names":["defaultTranslations","bonusPoints","buy","choose","favorites","goBack","lowestPrice","productIsDiscontinued","productIsDiscontinuedDescription","productNotFound","productNotFoundDescription","replace","replaceWith","reserve","subscribe","viewMoreDetails","translationsNamespace","APP_NAME","PACKAGE_NAME","DIALOG_MODE_LOADING","DISCONTINUED","NOT_FOUND","Root","styled","Dialog","shouldForwardProp","shouldNotForwardProp","zIndex","undefined","dialogClasses","closeButton","paperClasses","root","theme","breakpoints","up","props","isInfo","children","container","header","id","onClose","open","getTestId","useTestId","_jsx","size","display","flexDirection","alignItems","gap","spacing","padding","IconContainer","justifyContent","fontSize","justifySelf","color","palette","error","dark","ButtonContainer","marginTop","width","ErrorInfo","title","description","buttonTitle","handleButtonClick","_jsxs","ErrorCircle","Typography","variant","component","textAlign","Button","fullWidth","onClick","Loading","Box","height","CircularProgress","TitleContainer","userSelect","Paper","justifyItems","position","outline","CloseButton","IconButton","top","right","margin","background","alpha","common","white","ProductInfoDialogDrawer","placement","PaperProps","Drawer","anchor","elevation","Clear","getNonDiscontinuedAndCannotBeSold","products","filter","product","isDiscontinuedAndCannotBeSold","DialogContent","lazy","async","default","DialogContainer","analytics","dialog","initialProductCode","mode","shared","isMrpStatementEnabled","isRatingsAndReviewsEnabled","replaceSubscription","translations","useTranslations","isMobile","useIsMobile","content","useMemo","Suspense","fallback","useSWRFetch","fetcher","key","skip","formattedKey","JSON","stringify","currentKey","setCurrentKey","useState","matchingKey","data","useSWR","revalidateIfStale","revalidateOnFocus","revalidateOnReconnect","fetch","useCallback","isLoaded","isLoading","useGetProductBoxConfiguration","staticApiUrl","useServiceUrls","tenant","useEnvironment","client","ApiClient","baseUrl","getTenantApplicationsProductboxConfiguration","getProductBoxConfiguration","subscriptionBenefitBanner","gql","shade","concept","getProducts","getProductSize","volumeValue","volumeUnitText","trim","mapProductDiscontinuedAndCannotBeSold","shades","length","every","isDiscontinued","canBeSold","mapProductBase","map","hexColors","imageUrl","mapShade","deal","ppa","mapLabels","labels","canBeReserved","availability","isBackorder","mapCanBeReserved","mapCanBeSold","canBeSubscribed","mapCanBeSubscribed","name","shadeName","dealLabel","formattedPrice","bp","nextAvailableDateText","productExpectedInbound","expectedInboundLabel","pdpUrl","relativeUrl","ppaLabel","price","basicCashback","current","currentPrice","old","basicCataloguePrice","previousMinOfferPrice","priceAfterImmediateDiscount","productCode","subscription","available","deliveryFrequencyOptions","allowedFrequencies","recommendedFrequency","frequency","message","readMoreText","readMoreLink","readMoreUrl","registerText","registerLink","registerUrl","signInText","signInLink","mapShades","brandName","brand","brandUrl","url","code","ratingAverage","ratingCount","mapProductsFromGql","productBase","mapProductFromGql","useGetProductInfoDialogProducts","productCodes","graphQlNetUrl","headers","loading","loadingHeaders","useHeaders","graphQlUrl","fetchGraphql","query","variables","timeout","getProductInfoDialogProducts","Name","closeEvents","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","lineNumber","originalItemCode","originalQuantity","useOpenEvent","eventData","setEventData","onOpenProductInfoDialog","detail","atpClusterId","droppingId","subscriptionId","mapEventToData","events","listener","useGlobalEvents","otherData","isNonNullable","closeProductInfoDialog","openProductInfoDialog","productInfoDialog","useProductInfoDialog","fetchMode","FETCH_MODE_LAZY","onCloseProp","dialogProps","fetchProducts","areProductsLoaded","areProductsLoading","fetchShowMrpStatement","isProductBoxConfigurationLoaded","isProductBoxConfigurationLoading","isEnabled","personalSubscriptionsEnabled","isFeatureToggleLoading","useGetTenantFeatureToggle","swr","getRetryErrorSwrOptions","isOpen","useDisclose","fetchData","close","useEffect","FETCH_MODE_EAGER","dialogMode","shouldShowIsDiscontinuedErrorInfo","isProductInfoDialogOpen","useCloseEvents","closeEvent","setCloseEvent","onBasketUpdated","BasketUpdatedEvent","ProductInfoDialogController","customerId","initialOpenDone","useInitialDisclose","TestIdProvider","team","Team","Presentation","project","LoggerProvider","logger","ErrorBoundary","areaName","TranslationsProvider","clientFetchConfiguration","defaultTranslationsWithNamespaces","presentationProductDetailTranslationsNamespace","presentationProductDetailDefaultTranslations","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","MANUAL_REPLACEMENT","useTranslationsFromNamespace"],"sourceRoot":""}