{"version":3,"file":"796.chunk.js","mappings":"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","sources":["webpack://oribasketbubble/./src/models/Localizations.ts","webpack://oribasketbubble/./src/models/AppConfiguration.ts","webpack://oribasketbubble/./src/components/Bubble.tsx","webpack://oribasketbubble/./src/components/constants/bubbleProps.ts","webpack://oribasketbubble/./src/helpers/minibagVisibility.ts","webpack://oribasketbubble/./src/components/BubbleGroup.tsx","webpack://oribasketbubble/./src/App.tsx","webpack://oribasketbubble/./src/helpers/getConfiguration.ts","webpack://oribasketbubble/./src/providers/translationsProvider.ts","webpack://oribasketbubble/./src/utils/createAxiosWithCache.ts","webpack://oribasketbubble/./src/AppRender.tsx"],"sourcesContent":["export const DEFAULT_TRANSLATIONS = {\n quantity: 'Quantity',\n};\n\nexport type Translations = typeof DEFAULT_TRANSLATIONS;\nexport type TranslationKey = keyof typeof DEFAULT_TRANSLATIONS;\nexport type TranslationKeys = {\n [key in TranslationKey]: key;\n};\n\n/**\n * Use this object to access the particular message ID / key.\n */\nexport const translationKeys = Object.fromEntries(\n Object.keys(DEFAULT_TRANSLATIONS).map((cur) => [cur, cur]),\n) as TranslationKeys;\n","import type { Translations } from './Localizations';\n\nexport interface AppConfiguration {\n tenant: string;\n onlineBaseUrl?: string;\n translations?: Translations;\n}\n\nexport const DEFAULT_CONFIG = {\n tenant: '',\n};\n","import useTestId from '@ori/testid-generator';\nimport { LastAddedItemMethod } from '@ori-events/basket-updated';\nimport { Products } from '@ori-ui/icons';\nimport { SHADOW_LEVEL3, styled } from '@ori-ui/mui';\nimport type { VFC } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nimport { bubbleHeight } from './constants';\nimport { DEFAULT_TRANSLATIONS as translations } from '../models';\n\nexport interface BubbleProps {\n code: string;\n quantity: number;\n name: string;\n price: string | null;\n image: string;\n points: number | null;\n methodType: LastAddedItemMethod;\n}\n\nconst BubbleWrapper = styled('div')(({ theme }) => ({\n display: 'flex',\n position: 'relative',\n width: theme.spacing(64),\n height: bubbleHeight,\n marginBottom: theme.spacing(2),\n padding: theme.spacing(1),\n border: `2px solid ${theme.palette.grey[100]}`,\n borderRadius: theme.spacing(2),\n background: theme.palette.common.white,\n boxShadow: SHADOW_LEVEL3,\n userSelect: 'none',\n pointerEvents: 'auto',\n}));\n\nconst ImageWrapper = styled('div')(({ theme }) => ({\n flex: theme.spacing(0, 0, 16),\n width: theme.spacing(16),\n height: theme.spacing(16),\n marginRight: theme.spacing(2),\n overflow: 'hidden',\n borderRadius: theme.spacing(1, 0, 0, 1),\n background: theme.palette.grey[100],\n position: 'relative',\n}));\n\nconst Image = styled('img')({\n width: '100%',\n maxWidth: '100%',\n height: '100%',\n maxHeight: '100%',\n objectFit: 'contain',\n});\n\nconst ImagePlaceholder = styled(Products)(({ theme }) => ({\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: '50%',\n height: 'auto',\n transform: 'translate(-50%, -50%)',\n color: theme.palette.grey[200],\n}));\n\nconst Details = styled('div')({\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flexStart',\n width: 216,\n});\n\nconst Name = styled('div')(({ theme }) => ({\n width: '100%',\n paddingTop: theme.spacing(2),\n overflow: 'hidden',\n color: theme.palette.text.primary,\n fontSize: theme.typography.pxToRem(14),\n fontWeight: 700,\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n}));\n\nconst Shade = styled('div')(({ theme }) => ({\n color: theme.palette.grey.A400,\n fontSize: theme.typography.pxToRem(12),\n}));\n\nconst Shopping = styled('div')({\n display: 'flex',\n alignItems: 'center',\n marginTop: 'auto',\n});\n\nconst Quantity = styled('div')(({ theme }) => ({\n flexGrow: 1,\n color: theme.palette.text.secondary,\n fontSize: theme.typography.pxToRem(12),\n}));\n\nconst Price = styled('div')(({ theme }) => ({\n marginLeft: 'auto',\n color: theme.palette.text.primary,\n fontSize: theme.typography.pxToRem(14),\n fontWeight: 700,\n}));\n\nconst Points = styled('div')(({ theme }) => ({\n position: 'absolute',\n right: theme.spacing(2),\n bottom: theme.spacing(2),\n width: theme.spacing(7),\n height: theme.spacing(7),\n borderRadius: '50%',\n background: theme.palette.offer.dark,\n color: theme.palette.common.white,\n fontSize: theme.typography.pxToRem(14),\n fontWeight: 'bold',\n lineHeight: theme.spacing(7),\n textAlign: 'center',\n}));\n\nfunction ignoreClickEvent(event: React.MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n}\n\nexport const Bubble: VFC = ({\n name,\n code,\n quantity,\n price,\n image,\n points,\n methodType,\n}) => {\n const { getTestId } = useTestId();\n const [translate] = useTranslation();\n const { BUY_FOR_MONEY, BUY_FOR_POINTS } = LastAddedItemMethod;\n\n return (\n \n \n {image ? (\n \n ) : (\n \n )}\n \n
\n {name}\n {code}\n \n \n {translate(translations.quantity)}: {quantity}\n \n {methodType === BUY_FOR_MONEY && {price}}\n {methodType === BUY_FOR_POINTS && {points}}\n \n
\n \n );\n};\n","export const bubbleHeight = 94;\nexport const bubbleDuration = 2000;\n","export const isMinibagVisible = () => {\n const element = document.querySelector('[data-testid=Checkout-shopping-mini-bag-fading-wrapper]');\n if (!element) {\n return false;\n }\n\n return window.getComputedStyle(element).visibility === 'visible';\n};\n","import type { LastAddedItemMethod } from '@ori-events/basket-updated';\nimport * as BasketUpdatedEvent from '@ori-events/basket-updated';\nimport * as ToggleMenuFlyoutEvent from '@ori-events/toggle-menu-flyout';\nimport { styled } from '@ori-ui/mui';\nimport type { VFC } from 'react';\nimport { useEffect, useState } from 'react';\nimport { Transition, TransitionGroup } from 'react-transition-group';\nimport { v4 } from 'uuid';\n\nimport type { BubbleProps } from './Bubble';\nimport { Bubble } from './Bubble';\nimport { bubbleHeight, bubbleDuration } from './constants';\nimport { isMinibagVisible } from '../helpers';\n\ninterface BubbleInstanceProps extends BubbleProps {\n id: string;\n}\n\nconst topNavHeightStyle = 'var(--top-nav-height, 0)';\nconst toolbarPositionStyle = 'var(--ecatalogue-toolbar-position, 0)';\n\nconst BasketBubbleWrapper = styled('div')<{\n ownerState: { isECatalogue: boolean };\n}>(({ theme, ownerState }) => ({\n boxSizing: 'border-box',\n width: theme.spacing(64),\n marginTop: '10px',\n pointerEvents: 'none',\n position: 'fixed',\n top: 0,\n right: '15px',\n transform: `translate(0, ${topNavHeightStyle})`,\n transition: `transform var(--top-nav-height-animation), 0.3s ease-in-out`,\n ...(ownerState.isECatalogue && {\n transform: `translate(0, ${toolbarPositionStyle})`,\n transition: `transform var(--ecatalogue-toolbar-position-animation), 0.3s ease-in-out`,\n }),\n zIndex: 10000,\n\n [theme.breakpoints.up('sm')]: {\n right: '30px',\n },\n\n '& *': {\n boxSizing: 'border-box',\n },\n}));\n\nconst AnimationWrapper = styled('div')<{\n ownerState: { state: string };\n}>(({ ownerState }) => ({\n transition: 'opacity 750ms',\n opacity: 0,\n\n ...(ownerState.state === 'entered' && {\n opacity: 1,\n }),\n\n ...(ownerState.state === 'exiting' && {\n opacity: 0,\n transition: 'margin-top 300ms 950ms, opacity 1250ms',\n marginTop: `-${bubbleHeight + 10}px`,\n }),\n}));\n\ninterface BubbleGroupProps {\n isECatalogue: boolean;\n}\n\nexport const BubbleGroup: VFC = ({ isECatalogue }) => {\n const [bubbles, setBubbles] = useState([]);\n\n const removeBasketBubble = (bubbleId: string) => {\n setBubbles((currentBubbles) =>\n currentBubbles.filter((currentBubble) => currentBubble.id !== bubbleId),\n );\n };\n\n const onToggleMenuFlyout = ((event: ToggleMenuFlyoutEvent.Event) => {\n const { menuType } = event.detail;\n if (menuType === ToggleMenuFlyoutEvent.MenuTypes.Minibag && isMinibagVisible()) {\n // hide all bubbles when minibag is being opened\n setBubbles([]);\n }\n }) as EventListener;\n\n const onBasketUpdate = ((event: BasketUpdatedEvent.Event) => {\n // don't show bubble if not add-to-basket update or if minibag is visible\n if (!event.detail.lastAddedItem || isMinibagVisible()) {\n return;\n }\n\n const { itemCode, method } = event.detail.lastAddedItem;\n const { shoppingBagItems, offers } = event.detail.shoppingBag;\n const offersItems = offers.reduce(\n (acc: BasketUpdatedEvent.ShoppingBagItem[], offer: BasketUpdatedEvent.ShoppingBagOffer) => [\n ...acc,\n ...offer.items,\n ],\n [],\n );\n\n // proper typing for method -- TODO\n const methodType = method as unknown as LastAddedItemMethod;\n\n const item =\n methodType === BasketUpdatedEvent.LastAddedItemMethod.BUY_FOR_MONEY\n ? shoppingBagItems.find((product) => product.itemCode === itemCode)\n : offersItems.find((product) => product.itemCode === itemCode);\n\n if (!item) {\n return;\n }\n\n const bubble: BubbleInstanceProps = {\n id: v4(),\n code: item.itemCode,\n name: item.itemDescription,\n price: item.totalPrice,\n quantity: item.requestedQuantity,\n image: item.itemImageSrc,\n points: item.totalRedeemedPoints,\n methodType,\n };\n setBubbles((currentBubbles) => [...currentBubbles, bubble]);\n setTimeout(() => removeBasketBubble(bubble.id), bubbleDuration);\n }) as EventListener;\n\n useEffect(() => {\n window.addEventListener(BasketUpdatedEvent.Name, onBasketUpdate);\n window.addEventListener(ToggleMenuFlyoutEvent.Name, onToggleMenuFlyout);\n\n return () => {\n window.removeEventListener(BasketUpdatedEvent.Name, onBasketUpdate);\n window.removeEventListener(ToggleMenuFlyoutEvent.Name, onToggleMenuFlyout);\n };\n });\n\n const ownerState = { isECatalogue };\n\n return (\n \n \n {bubbles.map(({ id, ...bubble }) => (\n \n {(state) => {\n const bubbleOwnerState = { state };\n\n return (\n \n \n \n );\n }}\n \n ))}\n \n \n );\n};\n","import { TestIdProvider } from '@ori/testid-generator';\nimport { ThemeProvider } from '@ori-ui/mui';\nimport i18next from 'i18next';\nimport type { VFC } from 'react';\nimport { I18nextProvider } from 'react-i18next';\n\nimport { BubbleGroup } from './components';\nimport type { DEFAULT_TRANSLATIONS } from './models';\n\ninterface AppProps {\n tenant: string;\n isECatalogue: boolean;\n translations: typeof DEFAULT_TRANSLATIONS;\n}\n\nexport const App: VFC = ({ tenant, translations, isECatalogue }) => {\n if (!tenant) {\n throw new Error('Missing config values!');\n }\n\n i18next.init({\n lng: 'default',\n resources: {\n default: {\n translation: translations,\n },\n },\n keySeparator: '::',\n });\n\n return (\n \n \n \n \n \n \n \n );\n};\n","import type { AppConfiguration } from '../models';\nimport { DEFAULT_CONFIG } from '../models';\n\nconst parseSpaConfig = (config: string) => {\n if (!config) {\n throw new Error('No config provided!');\n }\n\n return JSON.parse(config) as AppConfiguration;\n};\n\nexport const getConfiguration = (element: HTMLElement): AppConfiguration => {\n let finalConfig: AppConfiguration = DEFAULT_CONFIG;\n\n if ('config' in element.dataset) {\n finalConfig = parseSpaConfig(element.dataset.config as string);\n }\n\n return finalConfig;\n};\n","import { createAxiosWithCache } from '../utils';\nimport type { Translations } from '~/models';\n\nconst axiosWithCache = createAxiosWithCache({ maxAge: 15 });\n\nexport const translationsProvider = async (\n baseUrl: string,\n keys: Record,\n): Promise => {\n const url = new URL('/system/ajax/Localization/Translate', baseUrl);\n const values = Object.values(keys);\n\n if (values.length > 0) {\n values.forEach((key: string) => {\n url.searchParams.append('keys', key);\n });\n }\n\n try {\n const { data } = await axiosWithCache.get(url.toString());\n\n return data;\n } catch (error) {\n // eslint-disable-next-line no-console -- Log error to console.\n console.error(error);\n }\n\n return undefined;\n};\n","import axios from 'axios';\nimport type { AxiosRequestConfig } from 'axios';\nimport type { AxiosCacheInstance } from 'axios-cache-interceptor';\nimport { buildKeyGenerator, setupCache } from 'axios-cache-interceptor';\n\nexport interface AxiosWithCacheOptions {\n /**\n * Cache max-age in minutes\n */\n maxAge: number;\n /**\n * Custom cache key factory\n */\n key?: (request: AxiosRequestConfig) => string;\n}\n\n/**\n * Creates Axios instance pre-configured with cache (using axios-cache-adapter).\n * @param {AxiosWithCacheOptions} options Configuration options object\n * @returns {import('axios-cache-interceptor').AxiosCacheInstance} Pre-configured Axios instance with cache\n */\nexport function createAxiosWithCache({ key, maxAge }: AxiosWithCacheOptions): AxiosCacheInstance {\n return setupCache(axios, {\n generateKey: key && buildKeyGenerator(key),\n ttl: maxAge * 60 * 1000,\n });\n}\n","import ReactDOM from 'react-dom';\n\nimport { App } from './App';\nimport { getConfiguration } from './helpers/getConfiguration';\nimport { DEFAULT_TRANSLATIONS } from './models';\nimport { translationsProvider } from './providers';\n\nexport const render = async (rootElement: HTMLElement, isECatalogue: boolean): Promise => {\n const {\n translations: translationsFromDataset,\n onlineBaseUrl,\n ...otherConfig\n } = getConfiguration(rootElement);\n\n const translations =\n translationsFromDataset ??\n (await translationsProvider(onlineBaseUrl ?? window.location.origin, DEFAULT_TRANSLATIONS));\n\n ReactDOM.render(\n ,\n rootElement,\n );\n};\n"],"names":["DEFAULT_TRANSLATIONS","quantity","DEFAULT_CONFIG","Object","fromEntries","keys","map","cur","tenant","BubbleWrapper","styled","_ref","theme","display","position","width","spacing","height","marginBottom","padding","border","concat","palette","grey","borderRadius","background","common","white","boxShadow","SHADOW_LEVEL3","userSelect","pointerEvents","ImageWrapper","_ref2","flex","marginRight","overflow","Image","maxWidth","maxHeight","objectFit","ImagePlaceholder","Products","_ref3","top","left","transform","color","Details","flexDirection","justifyContent","Name","_ref4","paddingTop","text","primary","fontSize","typography","pxToRem","fontWeight","textOverflow","whiteSpace","Shade","_ref5","A400","Shopping","alignItems","marginTop","Quantity","_ref6","flexGrow","secondary","Price","_ref7","marginLeft","Points","_ref8","right","bottom","offer","dark","lineHeight","textAlign","ignoreClickEvent","event","preventDefault","stopPropagation","Bubble","_ref9","name","code","price","image","points","methodType","getTestId","useTestId","_useTranslation","useTranslation","translate","_slicedToArray","BUY_FOR_MONEY","LastAddedItemMethod","BUY_FOR_POINTS","_jsxs","onClick","children","_jsx","src","alt","translations","isMinibagVisible","element","document","querySelector","window","getComputedStyle","visibility","BasketBubbleWrapper","_objectSpread2","ownerState","_objectSpread","boxSizing","transition","isECatalogue","zIndex","_defineProperty","breakpoints","up","AnimationWrapper","opacity","state","bubbleHeight","BubbleGroup","_useState","useState","_useState2","bubbles","setBubbles","onToggleMenuFlyout","detail","menuType","ToggleMenuFlyoutEvent","onBasketUpdate","lastAddedItem","_event$detail$lastAdd","itemCode","method","_event$detail$shoppin","shoppingBag","shoppingBagItems","offersItems","offers","reduce","acc","_toConsumableArray","items","item","BasketUpdatedEvent","find","product","bubble","id","v4","itemDescription","totalPrice","requestedQuantity","itemImageSrc","totalRedeemedPoints","currentBubbles","setTimeout","bubbleId","filter","currentBubble","useEffect","addEventListener","removeEventListener","TransitionGroup","_objectWithoutProperties","_excluded","Transition","timeout","appear","enter","exit","bubbleOwnerState","_createElement","key","App","Error","i18next","lng","resources","default","translation","keySeparator","ThemeProvider","enableCacheProvider","cacheKey","I18nextProvider","i18n","TestIdProvider","team","project","getConfiguration","finalConfig","dataset","config","JSON","parse","parseSpaConfig","maxAge","axiosWithCache","setupCache","axios","generateKey","buildKeyGenerator","ttl","render","async","rootElement","_getConfiguration","translationsFromDataset","onlineBaseUrl","otherConfig","baseUrl","url","URL","values","length","forEach","searchParams","append","get","toString","data","error","console","translationsProvider","location","origin","ReactDOM"],"sourceRoot":""}