{"version":3,"file":"652.chunk.js","mappings":"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","sources":["webpack://orinovageskincareadvisor/./src/containers/ApiProvider.tsx","webpack://orinovageskincareadvisor/./src/containers/ErrorBoundary.ts","webpack://orinovageskincareadvisor/./src/containers/NovageSkincareAdvisor.tsx","webpack://orinovageskincareadvisor/./src/App.tsx","webpack://orinovageskincareadvisor/./src/AppRender.tsx","webpack://orinovageskincareadvisor/./src/contexts/configurationContext.ts","webpack://orinovageskincareadvisor/./src/hooks/useGetNovageSkincareConfiguration.ts","webpack://orinovageskincareadvisor/./src/hooks/useLogError.ts","webpack://orinovageskincareadvisor/./src/hooks/useOpenQueryParam.ts","webpack://orinovageskincareadvisor/./src/utils/isValidNovageSkincareConfiguration.ts","webpack://orinovageskincareadvisor/./src/utils/openQueryParam.ts","webpack://orinovageskincareadvisor/./src/utils/isValidProperty.ts","webpack://orinovageskincareadvisor/./src/utils/parseSpaConfig.ts","webpack://orinovageskincareadvisor/./src/utils/cookies.ts","webpack://orinovageskincareadvisor/./src/utils/revieve.ts"],"sourcesContent":["import { SWRConfig } from '@ori/fetching';\nimport { ApiClientProvider as StaticApiClientProvider } from '@ori/static-api-client-react';\nimport type { FC, PropsWithChildren } from 'react';\n\nimport { swrConfig } from '~/constants';\nimport { useConfiguration } from '~/contexts';\n\nexport const ApiProvider: FC = ({ children }) => {\n const { currentLanguage, staticApiUrl, tenant } = useConfiguration();\n\n return (\n \n \n {children}\n \n \n );\n};\n","import type { ErrorInfo } from 'react';\nimport { Component } from 'react';\n\ninterface ErrorBoundaryProps {\n children: JSX.Element;\n}\n\ninterface ErrorBoundaryState {\n error?: Error;\n}\n\nexport class ErrorBoundary extends Component {\n override readonly state: ErrorBoundaryState = {};\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n // eslint-disable-next-line class-methods-use-this -- no use for `this`\n override componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n // eslint-disable-next-line no-console -- log error to console\n console.error({ error, errorInfo });\n }\n\n override render() {\n const { children } = this.props;\n const { error } = this.state;\n\n return error ? null : children;\n }\n}\n","import useTestId from '@ori/testid-generator';\nimport type { FunctionComponent } from 'react';\nimport { lazy, Suspense } from 'react';\n\nimport type { RevieveProps } from '../components';\nimport { APP_NAME } from '../constants';\nimport { useConfiguration } from '../contexts';\nimport { useGetNovageSkincareConfiguration } from '../hooks/useGetNovageSkincareConfiguration';\nimport { useOpenQueryParam } from '../hooks/useOpenQueryParam';\nimport { isValidNovageSkincareConfiguration } from '../utils';\n\nconst Revieve = lazy>(async () =>\n import('../components/Revieve').then((module) => ({ default: module.Revieve })),\n);\n\nexport const NovageSkincareAdvisor = () => {\n const novageSkincareConfiguration = useGetNovageSkincareConfiguration();\n const openQueryParam = useOpenQueryParam();\n const { currentLanguage } = useConfiguration();\n const { getTestId } = useTestId();\n\n return (\n
\n \n {isValidNovageSkincareConfiguration(novageSkincareConfiguration) ? (\n \n ) : null}\n \n
\n );\n};\n","import { useToken } from '@ori/auth';\nimport { TranslationsNamespaceProvider, TranslationsProvider } from '@ori/i18n';\nimport { TestIdProvider } from '@ori/testid-generator';\nimport { Suspense } from 'react';\nimport type { FC } from 'react';\n\nimport { APP_TEAM_NAME, APP_NAME, defaultTranslations, translationsNamespace } from './constants';\nimport { ApiProvider, NovageSkincareAdvisor } from './containers';\nimport { ConfigurationProvider } from './contexts';\nimport type { AppConfiguration } from './models';\n\ninterface AppProps {\n configuration: AppConfiguration;\n}\n\nexport const App: FC = ({ configuration }) => {\n const { currentLanguage, staticApiUrl, tenant } = configuration;\n const { token } = useToken();\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","import { ThemeProvider } from '@ori-ui/mui';\nimport { UniversalTokenProvider } from '@ori/auth';\nimport { createRoot } from 'react-dom/client';\n\nimport { App } from './App';\nimport { APP_NAME } from './constants';\nimport { ErrorBoundary } from './containers';\nimport { parseSpaConfig } from './utils';\nimport type { AppConfiguration } from '~/models';\n\nexport const render = async (rootElement: HTMLElement): Promise => {\n if (!rootElement.dataset.config) {\n return false;\n }\n const config = parseSpaConfig(rootElement.dataset.config, [\n 'currentLanguage',\n 'customerId',\n 'staticApiUrl',\n 'tenant',\n ]);\n const configuration: AppConfiguration = {\n currentLanguage:\n typeof __CURRENT_LANGUAGE__ === 'string' ? __CURRENT_LANGUAGE__ : config.currentLanguage,\n customerId: config.customerId,\n staticApiUrl: config.staticApiUrl,\n tenant: typeof __TENANT__ === 'string' ? __TENANT__ : config.tenant,\n };\n createRoot(rootElement).render(\n \n \n \n \n \n \n ,\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 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 { getHeaders } from '@ori/fetching';\nimport { useGetTenantApplicationsAdvisorNovAgeSkincareConfiguration } from '@ori/static-api-client-react';\n\nimport { APP_NAME } from '../constants';\nimport { useConfiguration } from '../contexts';\nimport { useLogError } from './useLogError';\n\nexport const useGetNovageSkincareConfiguration = () => {\n const { currentLanguage, tenant } = useConfiguration();\n const { data, error } = useGetTenantApplicationsAdvisorNovAgeSkincareConfiguration(\n tenant,\n {\n lang: currentLanguage,\n },\n {\n request: {\n headers: getHeaders({ language: currentLanguage, sourceAppName: APP_NAME, tenant }),\n },\n },\n );\n useLogError(error);\n\n return data;\n};\n","import { useEffect } from 'react';\n\nexport const useLogError = (error?: unknown) =>\n useEffect(() => {\n if (error instanceof Error) {\n // eslint-disable-next-line no-console -- log error to console\n console.error(error);\n }\n }, [error]);\n","import { useEffect, useState } from 'react';\n\nimport { OPEN_QUERY_PARAM_VALID_VALUES } from '../constants';\nimport { getOpenQueryParam } from '../utils';\n\nexport const useOpenQueryParam = () => {\n const [param, setParam] = useState();\n useEffect(() => {\n const queryParam = getOpenQueryParam() ?? '';\n if (OPEN_QUERY_PARAM_VALID_VALUES.includes(queryParam)) {\n setParam(queryParam);\n }\n }, []);\n\n return param;\n};\n","import type { StaticApplicationsAdvisorNovAgeSkincareConfigurationDto } from '@ori/static-api-client-react';\n\nexport const isValidNovageSkincareConfiguration = (\n configuration: StaticApplicationsAdvisorNovAgeSkincareConfigurationDto | undefined,\n): configuration is Required =>\n Boolean(configuration?.environment && configuration.partnerId);\n","import { getCurrentUrl, replaceCurrentUrl } from '@ori/presentation-utils';\n\nimport { OPEN_QUERY_PARAM, OPEN_QUERY_PARAM_ONCE } from '../constants';\n\nexport const getOpenQueryParam = () => {\n const url = getCurrentUrl();\n\n return url.searchParams.get(OPEN_QUERY_PARAM);\n};\n\nexport const removeOpenQueryParam = () => {\n if (getOpenQueryParam()) {\n const url = getCurrentUrl();\n url.searchParams.delete(OPEN_QUERY_PARAM);\n replaceCurrentUrl(url);\n }\n};\n\nexport const setOpenQueryParam = () => {\n const url = getCurrentUrl();\n url.searchParams.set(OPEN_QUERY_PARAM, OPEN_QUERY_PARAM_ONCE);\n if (url.searchParams.get(OPEN_QUERY_PARAM) !== getOpenQueryParam()) {\n replaceCurrentUrl(url);\n }\n};\n","/**\n * Checks if defined project property is not null or is not empty\n */\nexport 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 { isValidProperty } from './isValidProperty';\nimport { configurationContextDefaultValues } from '~/contexts';\nimport type { AppDataConfiguration } from '~/models';\n\n/**\n * Takes a string and parses it as JSON. Throws error if resulting config does not have required keys\n * @param config config in JSON value\n * @param requiredProperties required properties from defined AppDataConfig type\n * @returns Type-safe parsed config value\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 // We should set default values to stay true to typings\n customerId: configurationContextDefaultValues.customerId,\n ...parsedConfig,\n };\n}\n","const createNameRegExp = (name: string) => new RegExp(`(^| )${name}=([^;]+)`);\n\nexport const getCookie = (name: string) => {\n const match = document.cookie.match(createNameRegExp(name));\n\n return (match ?? [])[2];\n};\n","import type { Revieve, RevieveUserId } from 'revieve';\n\nimport {\n ONE_TRUST_GROUP_PERFORMANCE,\n OPTANON_CONSENT_COOKIE,\n REVIEVE_USER_ID_COOKIE,\n} from '../constants';\nimport { getCookie } from './cookies';\n\nexport const getRevieveUserId = (): RevieveUserId | undefined => getCookie(REVIEVE_USER_ID_COOKIE);\n\nexport const hideRevieve = () => window.Revieve?.API.hide();\n\nexport const initRevieve: Revieve['Init'] = (config, callback) =>\n // eslint-disable-next-line new-cap -- 3rd party naming\n window.Revieve?.Init(config, callback);\n\nexport const isAnalyticsConsentGranted = (): boolean => {\n if (!getCookie(OPTANON_CONSENT_COOKIE)) {\n return true;\n }\n\n return new RegExp(`groups=[^;]*${ONE_TRUST_GROUP_PERFORMANCE}%3A1`).test(\n getCookie(OPTANON_CONSENT_COOKIE) ?? '',\n );\n};\n\nexport const showRevieve = () => window.Revieve?.API.show();\n\nexport const unmountRevieve = () => window.Revieve?.API.unmount();\n"],"names":["ApiProvider","children","useConfiguration","currentLanguage","staticApiUrl","tenant","value","swrConfig","baseUrl","language","ErrorBoundary","error","errorInfo","console","this","props","state","Component","Revieve","lazy","async","then","module","default","NovageSkincareAdvisor","novageSkincareConfiguration","useGetNovageSkincareConfiguration","openQueryParam","useOpenQueryParam","getTestId","useTestId","APP_NAME","Suspense","fallback","isValidNovageSkincareConfiguration","App","configuration","token","useToken","TestIdProvider","team","APP_TEAM_NAME","project","TranslationsProvider","defaultTranslationsWithNamespaces","translationsNamespace","defaultTranslations","clientFetchConfiguration","onError","TranslationsNamespaceProvider","namespace","render","rootElement","dataset","config","parseSpaConfig","__CURRENT_LANGUAGE__","customerId","__TENANT__","createRoot","UniversalTokenProvider","initialToken","ThemeProvider","enableCacheProvider","cacheKey","configurationContextDefaultValues","NOT_LOGGED_IN_USER_ID","configurationContext","createContext","ConfigurationProvider","Provider","useContext","useGetTenantApplicationsAdvisorNovAgeSkincareConfiguration","lang","request","headers","getHeaders","sourceAppName","data","useLogError","useEffect","Error","useState","param","setParam","queryParam","getOpenQueryParam","OPEN_QUERY_PARAM_VALID_VALUES","Boolean","environment","partnerId","getCurrentUrl","searchParams","get","OPEN_QUERY_PARAM","removeOpenQueryParam","url","delete","replaceCurrentUrl","setOpenQueryParam","set","OPEN_QUERY_PARAM_ONCE","isValidProperty","obj","property","requiredProperties","parsedConfig","JSON","parse","forEach","prop","String","getCookie","name","match","document","cookie","RegExp","createNameRegExp","getRevieveUserId","REVIEVE_USER_ID_COOKIE","hideRevieve","window","API","hide","initRevieve","callback","Init","isAnalyticsConsentGranted","OPTANON_CONSENT_COOKIE","ONE_TRUST_GROUP_PERFORMANCE","test","showRevieve","show","unmountRevieve","unmount"],"sourceRoot":""}