{"version":3,"file":"849.chunk.js","mappings":"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","sources":["webpack://oriproductinfodialog/./src/containers/ApiProvider.tsx","webpack://oriproductinfodialog/./src/containers/I18nContainer.tsx","webpack://oriproductinfodialog/./src/containers/ProductInfoDialog.tsx","webpack://oriproductinfodialog/./src/App.tsx","webpack://oriproductinfodialog/./src/AppRender.tsx","webpack://oriproductinfodialog/./src/contexts/configurationContext.ts","webpack://oriproductinfodialog/./src/hooks/useCloseEvents.ts","webpack://oriproductinfodialog/./src/hooks/useLocalizationQuery.ts","webpack://oriproductinfodialog/./src/hooks/useOpenEvent.ts","webpack://oriproductinfodialog/./src/hooks/useToken.ts","webpack://oriproductinfodialog/./src/models/ApiError.ts","webpack://oriproductinfodialog/./src/models/TranslationKeys.ts","webpack://oriproductinfodialog/./src/hooks/useTranslations.ts","webpack://oriproductinfodialog/./src/utils/getToken.ts","webpack://oriproductinfodialog/./src/utils/isValidProperty.ts","webpack://oriproductinfodialog/./src/utils/parseSpaConfig.ts"],"sourcesContent":["import { ApiClientProvider as StaticApiClientProvider } from '@ori/static-api-client-react';\nimport type { FC, PropsWithChildren } from 'react';\nimport { SWRConfig } from 'swr';\n\nimport { useConfiguration } from '../contexts';\nimport { useToken } from '../hooks';\nimport { swrConfig } from '~/constants';\n\nexport const ApiProvider: FC = ({ children }) => {\n const { currentLanguage, staticApiUrl, tenant } = useConfiguration();\n const token = useToken();\n\n return token ? (\n \n \n {children}\n \n \n ) : null;\n};\n","import i18next from 'i18next';\nimport type { FC, PropsWithChildren } from 'react';\nimport { useEffect } from 'react';\nimport { I18nextProvider, initReactI18next } from 'react-i18next';\n\nimport { defaultTranslations } from '~/constants';\nimport { useLocalizationQuery } from '~/hooks';\nimport type { TranslationKey } from '~/models';\n\nconst DEFAULT_LANGUAGE_KEY = 'default';\nconst DEFAULT_NAMESPACE = 'translations';\n\nconst i18nextInstance = i18next\n .createInstance({\n keySeparator: '::',\n lng: DEFAULT_LANGUAGE_KEY,\n defaultNS: DEFAULT_NAMESPACE,\n resources: {\n [DEFAULT_LANGUAGE_KEY]: {\n [DEFAULT_NAMESPACE]: defaultTranslations,\n },\n },\n\n interpolation: {\n escapeValue: false, // react already safes from xss\n prefix: '{',\n suffix: '}',\n },\n\n react: {\n bindI18n: 'added removed languageChanged',\n bindI18nStore: 'added removed',\n },\n })\n .use(initReactI18next);\n\ni18nextInstance.init();\n\nexport const I18nContainer: FC<\n PropsWithChildren<{\n preloadedTranslations?: Record;\n }>\n> = ({ children, preloadedTranslations }) => {\n const { data } = useLocalizationQuery({\n isPaused: () => !!preloadedTranslations,\n suspense: !preloadedTranslations,\n });\n\n useEffect(() => {\n // If translations package has changed we will change provided package in i18next too\n i18nextInstance.addResourceBundle(\n DEFAULT_LANGUAGE_KEY,\n DEFAULT_NAMESPACE,\n data?.localizations ?? preloadedTranslations ?? {},\n false,\n true,\n );\n }, [data?.localizations, preloadedTranslations]);\n\n return {children};\n};\n","import type { FunctionComponent } from 'react';\nimport { lazy, Suspense } from 'react';\n\nimport type { DialogProps } from '../components';\nimport { useToken } from '../hooks';\n\nconst Dialog = lazy>(async () => ({\n default: (await import('../components')).Dialog,\n}));\n\nexport const ProductInfoDialog = () => {\n const token = useToken();\n\n return {token ? : null};\n};\n","import { Suspense } from 'react';\nimport { SWRConfig } from 'swr';\nimport type { SWRConfiguration } from 'swr';\n\nimport { ApiProvider, I18nContainer, ProductInfoDialog } from './containers';\nimport { ConfigurationProvider } from './contexts';\nimport type { AppConfiguration } from './models';\n\ninterface AppProps {\n configuration: AppConfiguration;\n}\n\nconst swrConfig: SWRConfiguration = {\n errorRetryCount: 3,\n errorRetryInterval: 10000,\n focusThrottleInterval: 300000,\n shouldRetryOnError: true,\n suspense: false,\n};\n\nexport const App = ({ configuration }: AppProps) => (\n \n \n \n \n \n \n \n \n \n \n \n);\n","import { AuthorizationCodeTokenClient, OidcUrlHelper } from '@ori/auth';\nimport { version as ReactVersion } from 'react';\n\nimport { App } from './App';\nimport { IDENTITY_CLIENT_ID } from './constants';\nimport type { AppConfiguration } from './models';\nimport { parseSpaConfig } from './utils';\n\nexport const render = async (root: HTMLElement) => {\n if (!root.dataset.config) {\n return false;\n }\n const config = parseSpaConfig(root.dataset.config, [\n 'currentLanguage',\n 'customerId',\n 'globalApiUrl',\n 'graphqlUrl',\n 'identityUrl',\n 'staticApiUrl',\n 'tenant',\n ]);\n // extract token from URL; only on dev machine, not needed elsewhere\n if (process.env.NODE_ENV !== 'production') {\n const searchParams = new URLSearchParams(window.location.hash.split('?')[1]);\n if (searchParams.has('state')) {\n const oidcUrlHelper = new OidcUrlHelper();\n const tokenClient = new AuthorizationCodeTokenClient({\n clientId: IDENTITY_CLIENT_ID,\n identityUrl: config.identityUrl,\n });\n oidcUrlHelper.storeAuthCodeFromParams(searchParams);\n await tokenClient.initializeTokenFromAuthorizationCode();\n oidcUrlHelper.handleRedirectAfterLogin();\n }\n }\n const configuration: AppConfiguration = {\n currentLanguage: config.currentLanguage,\n customerId: config.customerId,\n globalApiUrl: config.globalApiUrl,\n graphqlUrl: config.graphqlUrl,\n identityUrl: config.identityUrl,\n staticApiUrl: config.staticApiUrl,\n tenant: config.tenant,\n };\n if (ReactVersion.startsWith('18')) {\n const { createRoot } = await import('react-dom/client');\n createRoot(root).render();\n } else {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console -- log error to console\n console.error('react-dom/client cannot be imported using legacy render');\n }\n const { render: reactDomRender } = await import('react-dom');\n reactDomRender(, root);\n }\n\n return true;\n};\n","import { useContext, createContext } from 'react';\n\nimport { NOT_LOGGED_IN_USER_ID } from '../constants';\nimport type { AppConfiguration } from '../models';\n\nexport const configurationContextDefaultValues: AppConfiguration = {\n currentLanguage: '',\n customerId: NOT_LOGGED_IN_USER_ID,\n globalApiUrl: '',\n graphqlUrl: '',\n identityUrl: '',\n staticApiUrl: '',\n tenant: '',\n};\n\nexport const configurationContext = createContext(\n configurationContextDefaultValues,\n);\n\nexport const ConfigurationProvider = configurationContext.Provider;\n\nexport const useConfiguration = () => useContext(configurationContext);\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 =\n | AddBackorderDemandEvent.Event\n | ReplaceShoppingBagItem.Event\n | ReplaceSubscriptionEvent.Event;\n\nconst events = [\n AddBackorderDemandEvent.Name,\n ReplaceShoppingBagItem.Name,\n ReplaceSubscriptionEvent.Name,\n] 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 type { StaticLocalizationsSingleLanguageLocalizationsDto } from '@ori/static-api-client-react';\nimport { useGetTenantLocalization } from '@ori/static-api-client-react';\nimport type { BareFetcher, SWRConfiguration } from 'swr';\n\nimport { APP_NAME } from '~/constants';\nimport { useConfiguration } from '~/contexts';\n\nexport function useLocalizationQuery(\n config?: SWRConfiguration<\n StaticLocalizationsSingleLanguageLocalizationsDto,\n Error,\n BareFetcher\n >,\n) {\n const { currentLanguage, tenant } = useConfiguration();\n\n return useGetTenantLocalization(\n tenant,\n APP_NAME,\n { lang: currentLanguage },\n {\n swr: {\n revalidateIfStale: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n ...config,\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)\n ? { droppingId, subscriptionId }\n : 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 { useCallback } from 'react';\nimport useSWR from 'swr';\n\nimport { useConfiguration } from '../contexts';\nimport { getToken } from '../utils';\n\nexport const useToken = () => {\n const { customerId, identityUrl, tenant } = useConfiguration();\n const fetcher = useCallback(\n async () =>\n getToken({\n customerId,\n identityUrl,\n tenant,\n }),\n [customerId, identityUrl, tenant],\n );\n const { data } = useSWR('token', fetcher);\n\n return data;\n};\n","import type { AxiosError } from 'axios';\n\nexport class ApiError extends Error {\n data: AxiosError;\n\n constructor(message: string, data: AxiosError) {\n super(message);\n this.name = 'ApiError';\n this.data = data;\n }\n}\n","// DO NOT EDIT MANUALLY!\n// This file is generated, edit `resources/Localizations.json` and run `npm run generate-translation-keys` to update.\n\nexport enum TranslationKeys {\n buy = 'buy',\n choose = 'choose',\n inclusiveOfAllTaxes = 'inclusiveOfAllTaxes',\n lowestPriceText = 'lowestPriceText',\n newEdition = 'newEdition',\n newEditionAvailable = 'newEditionAvailable',\n replace = 'replace',\n replaceWith = 'replaceWith',\n reserve = 'reserve',\n save = 'save',\n}\n","import type { ProductInfoDialogProps } from '@ori/product-info-dialog-lib';\nimport { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { TranslationKeys } from '../models';\n\nexport const useTranslations = (): ProductInfoDialogProps['translations'] => {\n const [translate] = useTranslation();\n\n return useMemo(\n () => ({\n buy: translate(TranslationKeys.buy),\n choose: translate(TranslationKeys.choose),\n lowestPrice: translate(TranslationKeys.lowestPriceText),\n mrpStatement: translate(TranslationKeys.inclusiveOfAllTaxes),\n newEdition: translate(TranslationKeys.newEdition),\n newEditionAvailable: translate(TranslationKeys.newEditionAvailable),\n replace: translate(TranslationKeys.replace),\n replaceWith: translate(TranslationKeys.replaceWith),\n reserve: translate(TranslationKeys.reserve),\n save: translate(TranslationKeys.save),\n }),\n [translate],\n );\n};\n","import type { TokenData } from '@ori/auth';\nimport { OidcAccessToken, OidcClient, OidcTokenStorage } from '@ori/auth';\n\nimport { IDENTITY_CLIENT_ID } from '../constants';\n\nexport interface TokenConfiguration {\n customerId: number;\n forceReload?: boolean;\n identityUrl?: string;\n tenant: string;\n}\n\nexport const getToken = async ({\n customerId,\n tenant,\n identityUrl,\n forceReload,\n}: TokenConfiguration) => {\n // try to get the token from tokenService\n if (window.ori?.tokenService) {\n if (customerId > 0) {\n try {\n const oriToken = await window.ori.tokenService.getToken();\n if (oriToken) {\n return new OidcAccessToken(oriToken.Token);\n }\n } catch (error) {\n // eslint-disable-next-line no-console -- log getToken error\n console.log('getToken error: %o', error);\n }\n } else {\n try {\n const oriToken = await window.ori.tokenService.getPublicToken();\n if (oriToken) {\n return new OidcAccessToken(oriToken.Token);\n }\n } catch (error) {\n // eslint-disable-next-line no-console -- log public token error\n console.log('getPublicToken error: %o', error);\n }\n }\n }\n // try to get the token from session storage\n if (customerId > 0) {\n try {\n const authToken = sessionStorage.getItem('AuthToken');\n if (authToken) {\n const transformed = JSON.parse(authToken) as TokenData;\n const token = transformed.Token;\n\n return new OidcAccessToken(token);\n }\n } catch (error) {\n // eslint-disable-next-line no-console -- log session storage token error\n console.log('sessionStorage AuthToken error: %o', error);\n }\n } else {\n try {\n const publicToken = sessionStorage.getItem('PublicToken');\n if (publicToken) {\n const transformed = JSON.parse(publicToken) as TokenData;\n const token = transformed.Token;\n\n return new OidcAccessToken(token);\n }\n } catch (error) {\n // eslint-disable-next-line no-console -- log public token error\n console.log('sessionStorage PublicToken error: %o', error);\n }\n }\n // only on dev machine, not needed elsewhere\n if (process.env.NODE_ENV !== 'production') {\n const oidcTokenStorage = new OidcTokenStorage();\n let token;\n try {\n token = oidcTokenStorage.getAccessToken();\n } catch {\n throw new Error('Failed to obtain token');\n }\n if (token && !forceReload) {\n return token;\n }\n if (identityUrl) {\n const clientId = IDENTITY_CLIENT_ID;\n const oidcClient = new OidcClient(\n {\n callbackUrl: '#/',\n redirectUrl: window.location.href,\n },\n {\n clientId,\n identityUrl,\n\n acrValues: `tenant:${tenant}`,\n scope: 'openid profile user_identification',\n },\n );\n oidcClient.doLogin();\n }\n }\n throw new Error('Unsupported token configuration');\n};\n","export function isValidProperty(obj: Record, property: keyof typeof obj) {\n if (property in obj) {\n return obj[property] != null && obj[property] !== '';\n }\n\n return false;\n}\n","import { NOT_LOGGED_IN_USER_ID } from '../constants';\nimport { isValidProperty } from './isValidProperty';\nimport type { AppDataConfiguration } from '~/models';\n\nexport function parseSpaConfig(\n config: string,\n requiredProperties: T[] = [],\n) {\n if (!config) {\n throw new Error('No config provided!');\n }\n\n const parsedConfig = JSON.parse(config) as Partial &\n Required>;\n\n requiredProperties.forEach((prop) => {\n if (!isValidProperty(parsedConfig, String(prop))) {\n throw new Error(`Missing ${String(prop)} config property!`);\n }\n });\n\n return {\n customerId: NOT_LOGGED_IN_USER_ID,\n ...parsedConfig,\n };\n}\n"],"names":["ApiProvider","children","useConfiguration","currentLanguage","staticApiUrl","tenant","useToken","value","swrConfig","baseUrl","language","DEFAULT_LANGUAGE_KEY","DEFAULT_NAMESPACE","i18nextInstance","i18next","keySeparator","lng","defaultNS","resources","defaultTranslations","interpolation","escapeValue","prefix","suffix","react","bindI18n","bindI18nStore","use","initReactI18next","init","I18nContainer","preloadedTranslations","data","useLocalizationQuery","isPaused","suspense","useEffect","addResourceBundle","localizations","i18n","Dialog","lazy","async","default","ProductInfoDialog","token","Suspense","fallback","errorRetryCount","errorRetryInterval","focusThrottleInterval","shouldRetryOnError","App","configuration","render","root","dataset","config","parseSpaConfig","customerId","globalApiUrl","graphqlUrl","identityUrl","ReactVersion","createRoot","reactDomRender","configurationContextDefaultValues","NOT_LOGGED_IN_USER_ID","configurationContext","createContext","ConfigurationProvider","Provider","useContext","events","AddBackorderDemandEvent","ReplaceShoppingBagItem","ReplaceSubscriptionEvent","useCloseEvents","onClose","useState","closeEvent","setCloseEvent","onBasketUpdated","useCallback","undefined","forEach","event","window","addEventListener","BasketUpdatedEvent","removeEventListener","useGetTenantLocalization","APP_NAME","lang","swr","revalidateIfStale","revalidateOnFocus","revalidateOnReconnect","useOpenEvent","onOpen","atpClusterId","setAtpClusterId","initialProductCode","setInitialProductCode","lineNumber","setLineNumber","DialogMode","mode","setMode","originalItemCode","setOriginalItemCode","originalQuantity","setOriginalQuantity","placement","setPlacement","position","setPosition","productCodes","setProductCodes","droppingId","setDroppingId","subscriptionId","setSubscriptionId","onOpenProductInfoDialog","detail","replaceSubscription","Name","useMemo","isNonNullable","fetcher","getToken","useSWR","TranslationKeys","Error","useTranslations","useTranslation","translate","buy","choose","lowestPrice","lowestPriceText","mrpStatement","inclusiveOfAllTaxes","newEdition","newEditionAvailable","replace","replaceWith","reserve","save","forceReload","ori","tokenService","oriToken","OidcAccessToken","Token","error","console","log","getPublicToken","authToken","sessionStorage","getItem","JSON","parse","publicToken","isValidProperty","obj","property","requiredProperties","parsedConfig","prop","String"],"sourceRoot":""}