{"version":3,"file":"448.chunk.js","mappings":"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","sources":["webpack://orifavoritesprovider/../../src/ConfigurationContext.ts","webpack://orifavoritesprovider/../../src/parseSpaConfig.ts","webpack://orifavoritesprovider/../../src/isValidProperty.ts","webpack://orifavoritesprovider/../../src/useToken.ts","webpack://orifavoritesprovider/../../src/getToken.ts","webpack://orifavoritesprovider/./src/utils/mapUpdate.ts","webpack://orifavoritesprovider/./src/hooks/useFavorites.ts","webpack://orifavoritesprovider/./src/api/getFavoriteProductsList.ts","webpack://orifavoritesprovider/./src/api/createFavoriteProductsList.ts","webpack://orifavoritesprovider/./src/utils/mapCurrent.ts","webpack://orifavoritesprovider/./src/utils/mapToggle.ts","webpack://orifavoritesprovider/./src/utils/dispatchFavoritesUpdatedEvent.ts","webpack://orifavoritesprovider/./src/hooks/useDebouncedAddEventListener.ts","webpack://orifavoritesprovider/./src/components/FavoritesProvider.ts","webpack://orifavoritesprovider/./src/hooks/useLoadedEvent.ts","webpack://orifavoritesprovider/./src/hooks/useRequestEvent.ts","webpack://orifavoritesprovider/./src/hooks/useToggleEvent.ts","webpack://orifavoritesprovider/./src/containers/ApiProvider.tsx","webpack://orifavoritesprovider/./src/App.tsx","webpack://orifavoritesprovider/./src/AppRender.tsx"],"sourcesContent":["import { NOT_LOGGED_IN_USER_ID } from '@ori/auth';\nimport { useContext, createContext } from 'react';\n\nimport type { AppConfiguration } from './AppConfiguration';\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(configurationContextDefaultValues);\n\nexport const ConfigurationProvider = configurationContext.Provider;\n\nexport const useConfiguration = () => useContext(configurationContext);\n","import { configurationContextDefaultValues } from '@ori/favorites-context';\nimport type { AppDataConfiguration } from '@ori/favorites-context';\n\nimport { isValidProperty } from './isValidProperty';\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(config: string, requiredProperties: T[] = []) {\n if (!config) {\n throw new Error('No config provided!');\n }\n\n const parsedConfig = JSON.parse(config) as Partial & 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","/**\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 { configurationContextDefaultValues, useConfiguration } from '@ori/favorites-context';\nimport { getToken } from '@ori/favorites-utils';\nimport { useSWR } from '@ori/fetching';\nimport { useCallback, useMemo } from 'react';\n\nexport const useToken = () => {\n const { customerId, identityUrl, tenant } = useConfiguration();\n const fetcher = useCallback(\n async () =>\n getToken({\n identityUrl,\n tenant,\n customerId,\n }),\n [customerId, identityUrl, tenant],\n );\n const { data } = useSWR('token', fetcher);\n\n return useMemo(\n () => ({\n customerId: data?.getClaim('customer_id') ?? configurationContextDefaultValues.customerId,\n token: data?.toString(),\n }),\n [data],\n );\n};\n","import type { TokenData } from '@ori/auth';\nimport { IDENTITY_CLIENT_ID, OidcAccessToken, OidcClient, OidcTokenStorage } from '@ori/auth';\n\nexport interface TokenConfiguration {\n customerId: number;\n forceReload?: boolean;\n identityUrl?: string;\n tenant: string;\n}\n\nexport const getToken = async ({ customerId, tenant, identityUrl, forceReload }: 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 -- Used to display error to console\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 -- Used to display error to console\n console.log('getPublicToken error: %o', error);\n }\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 -- Used to display error to console\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 -- Used to display error to console\n console.log('sessionStorage PublicToken error: %o', error);\n }\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\n try {\n token = oidcTokenStorage.getAccessToken();\n } catch {\n throw new Error('Failed to obtain token');\n }\n\n if (token && !forceReload) {\n return token;\n }\n if (identityUrl) {\n const clientId = IDENTITY_CLIENT_ID;\n\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\n oidcClient.doLogin();\n }\n }\n\n throw new Error('Unsupported token configuration');\n};\n","export const mapUpdate = (favorites: string[]) => favorites.map((itemCode) => ({ itemCode }));\n","import { isAuthenticatedCustomer } from '@ori/auth';\nimport { useToken } from '@ori/favorites-hooks';\nimport { updateCustomerProductListTypeProductList, useApiClient } from '@ori/global-api-client-react';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport { createFavoriteProductsList, getFavoriteProductsList } from '../api';\nimport { mapCurrent, mapToggle, mapUpdate } from '../utils';\n\nexport const useFavorites = () => {\n const [isFirstRequest, setIsFirstRequest] = useState(true);\n const [favorites, setFavorites] = useState([]);\n const [id, setId] = useState();\n const client = useApiClient();\n const { customerId } = useToken();\n const fetchOrCreate = useCallback(async () => {\n if (isAuthenticatedCustomer(customerId)) {\n const fetched = await getFavoriteProductsList({ client, customerId });\n if (fetched === undefined) {\n return createFavoriteProductsList({ client, customerId });\n }\n\n return fetched;\n }\n\n return { items: [], productListId: undefined };\n }, [client, customerId]);\n const request = useCallback(async () => {\n if (isFirstRequest) {\n setIsFirstRequest(false);\n const { items, productListId } = await fetchOrCreate();\n const current = mapCurrent(items);\n setFavorites(current);\n setId(productListId);\n\n return { favorites: current, id: productListId };\n }\n\n return { favorites, id };\n }, [favorites, fetchOrCreate, id, isFirstRequest]);\n const toggle = useCallback(\n async (productCode: string) => {\n if (id) {\n const current = mapToggle(productCode, favorites);\n await updateCustomerProductListTypeProductList(client, customerId, 'Favorite', id, {\n items: mapUpdate(current),\n productListId: id,\n });\n setFavorites(current);\n\n return { favorites: current, id };\n }\n\n return { favorites, id };\n },\n [client, customerId, favorites, id],\n );\n\n return useMemo(\n () => ({\n id,\n favorites,\n request,\n toggle,\n }),\n [id, favorites, request, toggle],\n );\n};\n","import { getCustomerProductListTypeProductLists } from '@ori/global-api-client-react';\n\nimport type { ApiProps } from './types';\n\nexport const getFavoriteProductsList = async ({ client, customerId }: ApiProps) => {\n const { data } = await getCustomerProductListTypeProductLists(client, customerId, 'Favorite');\n if (data.productLists[0]) {\n const [list] = data.productLists;\n const { items, productListId } = list;\n\n return { items, productListId };\n }\n\n return undefined;\n};\n","import { createCustomerProductListTypeProductList } from '@ori/global-api-client-react';\n\nimport type { ApiProps } from './types';\n\nexport const createFavoriteProductsList = async ({ client, customerId }: ApiProps) => {\n const { data } = await createCustomerProductListTypeProductList(client, customerId, 'Favorite', {\n items: [],\n });\n const { items, productListId } = data;\n\n return { items, productListId };\n};\n","import type { GlobalSharedProductListItemDto } from '@ori/global-api-client-react';\nimport { isNonNullable } from '@ori/ts-utils';\n\nexport const mapCurrent = (items: GlobalSharedProductListItemDto[]) =>\n items.map(({ itemCode }) => itemCode).filter(isNonNullable);\n","export const mapToggle = (code: string, favorites: string[]) => {\n if (favorites.includes(code)) {\n return favorites.filter((favorite) => favorite !== code);\n }\n\n return [...favorites, code];\n};\n","import { Name } from '@ori-events/favorites-updated';\nimport type { Data } from '@ori-events/favorites-updated';\n\nexport const dispatchFavoritesUpdatedEvent = (detail: Data) =>\n window.dispatchEvent(new CustomEvent(Name, { detail }));\n","import { useCallback, useEffect, useRef } from 'react';\n\nexport const useDebouncedAddEventListener = <\n Event extends keyof WindowEventMap,\n Handler extends (event: WindowEventMap[Event]) => void,\n>(\n event: Event,\n handler: Handler,\n) => {\n const timeout = useRef();\n const debouncedAddEventListener = useCallback(() => {\n clearTimeout(timeout.current);\n timeout.current = setTimeout(() => {\n window.removeEventListener(event, handler);\n window.addEventListener(event, handler);\n });\n }, [event, handler]);\n useEffect(() => {\n debouncedAddEventListener();\n\n return () => {\n clearTimeout(timeout.current);\n window.removeEventListener(event, handler);\n };\n }, [debouncedAddEventListener, event, handler]);\n};\n","import type { FunctionComponent } from 'react';\n\nimport { useFavorites, useLoadedEvent, useRequestEvent, useToggleEvent } from '../hooks';\n\nexport const FavoritesProvider: FunctionComponent = () => {\n const { favorites, request, toggle } = useFavorites();\n useLoadedEvent(favorites);\n useRequestEvent(request);\n useToggleEvent(toggle);\n\n return null;\n};\n","import { isAuthenticatedCustomer } from '@ori/auth';\nimport { useToken } from '@ori/favorites-hooks';\nimport { useEffect } from 'react';\n\nimport type { useFavorites } from './useFavorites';\nimport { dispatchFavoritesUpdatedEvent } from '../utils';\n\nexport const useLoadedEvent = (favorites: ReturnType['favorites']) => {\n const { customerId } = useToken();\n useEffect(() => {\n const onLoaded = () => {\n if (isAuthenticatedCustomer(customerId)) {\n dispatchFavoritesUpdatedEvent({ favorites, lastUpdated: null });\n }\n };\n const timeout = setTimeout(onLoaded);\n\n return () => clearTimeout(timeout);\n }, [customerId, favorites]);\n};\n","import { Name } from '@ori-events/request-favorites';\nimport { useCallback } from 'react';\n\nimport { useDebouncedAddEventListener } from './useDebouncedAddEventListener';\nimport type { useFavorites } from './useFavorites';\nimport { dispatchFavoritesUpdatedEvent } from '../utils';\n\nexport const useRequestEvent = (request: ReturnType['request']) => {\n const onRequest = useCallback(() => {\n request()\n .then(({ favorites }) => dispatchFavoritesUpdatedEvent({ favorites, lastUpdated: null }))\n // eslint-disable-next-line no-console -- log error to console\n .catch(console.error);\n }, [request]);\n useDebouncedAddEventListener(Name, onRequest);\n};\n","import type { Event } from '@ori-events/toggle-favorite';\nimport { Name } from '@ori-events/toggle-favorite';\nimport { useCallback } from 'react';\n\nimport { useDebouncedAddEventListener } from './useDebouncedAddEventListener';\nimport type { useFavorites } from './useFavorites';\nimport { dispatchFavoritesUpdatedEvent } from '../utils';\n\nexport const useToggleEvent = (toggle: ReturnType['toggle']) => {\n const onToggle = useCallback(\n ({ detail: { code } }: Event) => {\n toggle(code)\n .then(({ favorites }) => dispatchFavoritesUpdatedEvent({ favorites, lastUpdated: code }))\n // eslint-disable-next-line no-console -- log error to console\n .catch(console.error);\n },\n [toggle],\n );\n useDebouncedAddEventListener(Name, onToggle);\n};\n","import { useConfiguration } from '@ori/favorites-context';\nimport { useToken } from '@ori/favorites-hooks';\nimport { ApiClientProvider } from '@ori/global-api-client-react';\nimport type { ReactElement } from 'react';\n\ninterface ApiProviderProps {\n children: ReactElement;\n}\n\nexport const ApiProvider = ({ children }: ApiProviderProps) => {\n const { globalApiUrl, tenant } = useConfiguration();\n const { token } = useToken();\n\n return (\n \n {children}\n \n );\n};\n","import type { AppConfiguration } from '@ori/favorites-context';\nimport { ConfigurationProvider } from '@ori/favorites-context';\nimport { ErrorBoundary } from '@ori/presentation-components';\n\nimport { FavoritesProvider } from './components';\nimport { ApiProvider } from './containers';\n\nexport interface AppProps {\n configuration: AppConfiguration;\n}\n\nexport const App = ({ configuration }: AppProps) => (\n \n \n \n \n \n \n \n);\n","import { AuthorizationCodeTokenClient, OidcUrlHelper } from '@ori/auth';\nimport type { AppConfiguration } from '@ori/favorites-context';\nimport { parseSpaConfig } from '@ori/favorites-utils';\n\nimport { App } from './App';\nimport { IDENTITY_CLIENT_ID } from './constants';\n\nexport const render = async (rootElement: HTMLElement): Promise => {\n if (!rootElement.dataset.config) {\n // if there is no config in the dataset then we will not even try to do anything else\n return false;\n }\n const config = parseSpaConfig(rootElement.dataset.config, ['customerId', 'globalApiUrl', 'tenant']);\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 // Actual configuration that app will use\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 onlineBaseUrl: config.onlineBaseUrl ?? window.location.origin,\n staticApiUrl: config.staticApiUrl ?? '',\n tenant: config.tenant,\n };\n const { createRoot } = await import('react-dom/client');\n createRoot(rootElement).render();\n\n return true;\n};\n"],"names":["configurationContextDefaultValues","currentLanguage","customerId","NOT_LOGGED_IN_USER_ID","globalApiUrl","graphqlUrl","identityUrl","staticApiUrl","tenant","configurationContext","createContext","ConfigurationProvider","Provider","useConfiguration","useContext","parseSpaConfig","config","requiredProperties","arguments","length","undefined","Error","parsedConfig","JSON","parse","forEach","prop","obj","property","String","concat","_objectSpread","useToken","_useConfiguration","fetcher","useCallback","async","_ref","_window$ori","forceReload","window","ori","tokenService","oriToken","getToken","OidcAccessToken","Token","error","console","log","getPublicToken","authToken","sessionStorage","getItem","token","publicToken","data","useSWR","useMemo","_data$getClaim","getClaim","toString","mapUpdate","favorites","map","itemCode","useFavorites","_useState","useState","_useState2","_slicedToArray","isFirstRequest","setIsFirstRequest","_useState3","_useState4","setFavorites","_useState5","_useState6","id","setId","client","useApiClient","fetchOrCreate","isAuthenticatedCustomer","fetched","getCustomerProductListTypeProductLists","productLists","list","items","productListId","getFavoriteProductsList","createCustomerProductListTypeProductList","createFavoriteProductsList","request","_await$fetchOrCreate","current","filter","isNonNullable","mapCurrent","toggle","productCode","code","includes","favorite","_toConsumableArray","mapToggle","updateCustomerProductListTypeProductList","dispatchFavoritesUpdatedEvent","detail","dispatchEvent","CustomEvent","Name","useDebouncedAddEventListener","event","handler","timeout","useRef","debouncedAddEventListener","clearTimeout","setTimeout","removeEventListener","addEventListener","useEffect","FavoritesProvider","_useFavorites","lastUpdated","useLoadedEvent","onRequest","then","catch","useRequestEvent","onToggle","_ref2","useToggleEvent","ApiProvider","children","_jsx","ApiClientProvider","baseUrl","App","configuration","ErrorBoundary","value","render","rootElement","_config$currentLangua","_config$graphqlUrl","_config$identityUrl2","_config$onlineBaseUrl","_config$staticApiUrl","dataset","onlineBaseUrl","location","origin","createRoot"],"sourceRoot":""}