{"version":3,"file":"coopse.script.4204.a0bdf5af.chunk.js","mappings":"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","sources":["webpack:///../../packages/icons/src/stroke2/paper.svg","webpack:///./src/microApps/storeAndOffers/physicalOffers/components/Offer.module.less","webpack:///./src/microApps/common/api/clients/directAdobeCampaignAxiosClient.ts","webpack:///./src/microApps/common/components/atoms/CloudinaryImage.tsx","webpack:///./src/microApps/common/components/atoms/Image.tsx","webpack:///./src/microApps/common/components/atoms/FlyInOverlayLoader.tsx","webpack:///./src/microApps/common/components/atoms/Modal.tsx","webpack:///./src/microApps/common/components/atoms/RawHtml/RawHtml.tsx","webpack:///../../packages/icons/src/colored/splash-background.color.svg","webpack:///./src/microApps/common/components/atoms/Splash/Splash.tsx","webpack:///./src/microApps/common/components/atoms/Splash/Splash.module.less","webpack:///./src/microApps/common/components/molecules/TabSwitcher/TabSwitcher.hooks.ts","webpack:///./src/microApps/common/components/molecules/TabSwitcher/TabSwitcher.tsx","webpack:///./src/microApps/common/components/molecules/TabSwitcher/StatefulTabSwitcher.tsx","webpack:///./src/microApps/common/contexts/flyInContext.tsx","webpack:///./src/microApps/common/contexts/siteContext.tsx","webpack:///./src/microApps/common/api/adobeCampaign/directAdobeCampaignApi.ts","webpack:///./src/microApps/common/flow/adobeCampaignFlow.ts","webpack:///./src/microApps/common/hooks/useFlyInNavigationInterceptor.ts","webpack:///./src/microApps/common/hooks/useHtmlScriptParser.ts","webpack:///./src/microApps/common/hooks/useUserProfile.ts","webpack:///./src/microApps/common/selectors/userProfileSelectors.ts","webpack:///./src/microApps/common/utils/cloudinaryImageUtils.ts","webpack:///./src/microApps/common/utils/neoIdUtils.ts","webpack:///./src/microApps/ecommerce/components/ItemGrid/ItemGrid.tsx","webpack:///./src/microApps/shoppingList/base/AddToShoppingListModal.tsx","webpack:///./src/microApps/shoppingList/components/offer/AddOfferToShoppingListNotifications.tsx","webpack:///./src/microApps/shoppingList/components/offer/AddOfferToShoppingListModal.tsx","webpack:///./src/microApps/shoppingList/hooks/useAddOfferToShoppingList.ts","webpack:///./src/microApps/shoppingList/components/offer/AddOfferToShoppingListButton.tsx","webpack:///./src/microApps/shoppingList/components/offer/AddOfferToShoppingListButton.module.less","webpack:///./src/microApps/storeAndOffers/physicalOffers/components/StoreOfferTeaser/StoreOfferTeaser.utils.ts","webpack:///./src/microApps/storeAndOffers/physicalOffers/components/Offer.tsx","webpack:///./src/microApps/storeAndOffers/physicalOffers/components/ActivatableOffer/ActivatableOffer.tsx","webpack:///./src/microApps/storeAndOffers/physicalOffers/components/ActivatableOffer/ActivatableOffer.module.less","webpack:///./src/microApps/storeAndOffers/physicalOffers/components/PersonalOfferProductCard.tsx","webpack:///./src/microApps/storeAndOffers/physicalOffers/components/blocks/OfferPropositionsListBlock.module.scss","webpack:///./src/microApps/storeAndOffers/physicalOffers/components/blocks/OfferPropositionsListBlock.tsx","webpack:///./src/microApps/storeAndOffers/physicalOffers/hooks/useOfferPropositions.ts","webpack:///./src/microApps/storeAndOffers/storeQueries.ts","webpack:///./src/utility/logging.ts"],"sourcesContent":["var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgPaper = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8 2.99951C6.89543 2.99951 6 3.89494 6 4.99951V18.9995C6 20.1041 6.89543 20.9995 8 20.9995H12V15.9999C12 15.4476 12.4477 14.9999 12.9999 14.9999L18 14.9996V4.99951C18 3.89494 17.1046 2.99951 16 2.99951H15.4716C15.4687 2.99976 15.4519 3.00202 15.4198 3.01884C15.3782 3.04067 15.3244 3.08043 15.2697 3.14067C14.7282 3.73733 13.6568 4.59042 12 4.59042C10.3432 4.59042 9.27176 3.73733 8.73028 3.14067C8.67562 3.08043 8.62183 3.04067 8.58019 3.01884C8.54811 3.00202 8.53134 2.99976 8.52845 2.99951H8ZM17.9 16.9996L14 16.9998V20.8995C15.9591 20.5018 17.5023 18.9587 17.9 16.9996ZM4 4.99951C4 2.79037 5.79086 0.999512 8 0.999512H8.52876C9.26313 0.999512 9.8469 1.39504 10.2113 1.7966C10.5215 2.13844 11.095 2.59042 12 2.59042C12.905 2.59042 13.4785 2.13844 13.7887 1.7966C14.1531 1.39504 14.7369 0.999512 15.4712 0.999512H16C18.2091 0.999512 20 2.79037 20 4.99951V15.9995C20 19.8655 16.866 22.9995 13 22.9995H8C5.79086 22.9995 4 21.2087 4 18.9995V4.99951ZM8 7.99951C8 7.44723 8.44772 6.99951 9 6.99951H15C15.5523 6.99951 16 7.44723 16 7.99951C16 8.5518 15.5523 8.99951 15 8.99951H9C8.44772 8.99951 8 8.5518 8 7.99951ZM8 11.9995C8 11.4472 8.44772 10.9995 9 10.9995H13C13.5523 10.9995 14 11.4472 14 11.9995C14 12.5518 13.5523 12.9995 13 12.9995H9C8.44772 12.9995 8 12.5518 8 11.9995Z\"\n })));\n};\nexport default SvgPaper;","// extracted by mini-css-extract-plugin\nexport default {\"TeaserContainer\":\"Qq7KSafE\",\"BorderBadge\":\"HcIwYJfn\",\"BorderBadgeInner\":\"XXpPibvv\",\"PersonalOffersCard\":\"S7ulvpp7\",\"AllOffersBorder\":\"U6GBjAx5\",\"ActivatableOfferBottomBorder--green\":\"CFNiMtzj\",\"ActivatableOfferBottomBorder--pink\":\"kWYwLlTb\",\"Offer\":\"F0IK0SvH\",\"Gift\":\"IepzvYgE\",\"GiftImage\":\"jVXydYmn\",\"Student\":\"bWV_Mndd\",\"ValueCheck\":\"P9zT79td\",\"Image\":\"hDKvnnR5\",\"PointshopCard\":\"qZfZBgHg\",\"MinHeight\":\"GHunzgrI\",\"BackgroundSize\":\"X8u1lXeP\",\"PointshopOutline\":\"wvecQXhG\",\"Outline\":\"l2L4HqbX\",\"OutlineStudent\":\"TOLqbdoh\"};","import type { AxiosInstance } from 'axios';\n\nimport { appConfig } from '../../../../appConfig';\nimport axiosClientFactory from './clientFactory';\nimport type { CustomErrorInterceptor } from './localApiAxiosErrorInterceptors';\n\nconst getDirectAdobeCampaignAxiosClient = <TApiError = unknown>(\n accessToken?: string,\n neoId?: string,\n errorInterceptors?: CustomErrorInterceptor<TApiError>[],\n): AxiosInstance => {\n const directShoppingListAxiosClient = axiosClientFactory.createDirectApiClient(\n {\n baseURL: appConfig.coopSettings.serviceAccess.apimBaseUrl,\n headers: {\n Authorization: neoId ? `adobe ${btoa(neoId)}` : `Bearer ${accessToken}`,\n },\n params: {\n 'api-version': 'v1',\n },\n },\n errorInterceptors,\n );\n\n return directShoppingListAxiosClient;\n};\n\nexport default getDirectAdobeCampaignAxiosClient;\n","// Cloudinary url api:\n// http://cloudinary.com/documentation/image_transformations#reference\n\nimport type { FC } from 'react';\n\nimport { getFallbackImgUrl, getTransformedImageUrl } from '../../utils/cloudinaryImageUtils';\nimport Image from './Image';\n\nexport const removeStartingSlash = (str: string | null | undefined) => {\n if (!str) {\n return str;\n }\n\n if (str[0] === '/') {\n return str.slice(1);\n }\n\n return str;\n};\n\nexport const CLOUDINARY_ASPECT_RATIO_TRANSFORMS = {\n ratio16By9: {\n transform: `e_sharpen,f_auto,fl_progressive,q_auto,c_lpad,g_center,ar_${16 / 9},c_crop`,\n cssPadding: (9 / 16) * 100,\n },\n};\n\ninterface CloudinaryImageProps {\n // alt tag of image\n onClick?: React.MouseEventHandler<HTMLImageElement>;\n name: string;\n // title tag of image\n title?: string;\n url: string | undefined;\n // if url is missing, this will be fallback\n fallbackUrl?: string;\n retinaTransform?: string;\n transform: string;\n cssClass?: string;\n lazy?: boolean;\n fileExtenson?: string;\n width?: string | number;\n height?: string | number;\n}\n\nconst FallbackImg = (props: CloudinaryImageProps) => {\n return (\n <img\n className={props.cssClass}\n alt={props.name}\n title={props.title}\n src={getFallbackImgUrl(props.fallbackUrl)}\n width={props.width}\n height={props.height}\n />\n );\n};\n\ninterface TransformedImageProps extends Omit<CloudinaryImageProps, 'url'> {\n url: string;\n}\n\nconst TransformedImage = (props: TransformedImageProps) => {\n const transformedUrl = getTransformedImageUrl(\n props.url,\n props.transform,\n props.fileExtenson,\n undefined,\n props.name,\n );\n const srcSet = props.retinaTransform\n ? getTransformedImageUrl(\n props.url,\n props.transform,\n props.fileExtenson,\n props.retinaTransform,\n props.name,\n )\n : undefined;\n\n return (\n <Image\n width={props.width}\n height={props.height}\n alt={props.name}\n title={props.title}\n src={transformedUrl}\n srcSet={srcSet}\n onClick={props.onClick}\n cssClass={props.cssClass}\n unloader={FallbackImg(props)}\n loader={\n <img\n className={props.cssClass}\n src=\"/Assets/Images/missing-image-white.png\"\n alt=\"placeholder\"\n width={props.width}\n height={props.height}\n />\n }\n lazy={props.lazy}\n />\n );\n};\n\nconst CloudinaryImage: FC<React.PropsWithChildren<CloudinaryImageProps>> = (\n props: CloudinaryImageProps,\n) => {\n if (!props.url) {\n return FallbackImg(props);\n }\n return TransformedImage({ ...props, url: props.url });\n};\n\nexport default CloudinaryImage;\n","import classNames from 'classnames';\nimport type { FC } from 'react';\nimport { Img } from 'react-image';\n\ninterface ImageProps {\n src: string;\n alt?: string;\n title?: string;\n cssClass?: string;\n wrapperClassName?: string;\n lazy?: boolean;\n srcSet?: string;\n unloader?: JSX.Element;\n loader?: JSX.Element;\n width?: string | number;\n height?: string | number;\n onClick?: React.MouseEventHandler<HTMLImageElement>;\n ariaLabel?: string;\n}\n\nconst FallbackImg = (props: ImageProps) => {\n return <img className={props.cssClass} alt=\"\" />;\n};\n\nconst Image: FC<ImageProps> = (props: ImageProps) => {\n if (window.isPrerenderCrawler) {\n return (\n <div className={classNames('u-heightAll', props.wrapperClassName)}>\n <img\n className={props.cssClass}\n src={props.src}\n alt={props.alt || ''}\n srcSet={props.srcSet}\n draggable=\"false\"\n aria-label={props.ariaLabel}\n />\n </div>\n );\n }\n\n return (\n <Img\n onClick={props.onClick}\n alt={props.alt}\n title={props.title}\n src={props.src}\n srcSet={props.srcSet}\n decode={false}\n draggable=\"false\"\n className={props.cssClass}\n width={props.width}\n height={props.height}\n loading={props.lazy ? 'lazy' : undefined}\n unloader={props.unloader || FallbackImg(props)}\n loader={props.loader || FallbackImg(props)}\n />\n );\n};\n\nexport default Image;\n","import { OverlayLoader } from '@coop/components';\nimport type { FC } from 'react';\n\nimport { useAppSelector } from '../../hooks/useThunkDispatch';\n\nconst FlyInOverlayLoader: FC<React.PropsWithChildren<unknown>> = () => {\n const isLoading = useAppSelector((state) => state.modal.isLoading);\n\n return <OverlayLoader isLoading={isLoading} blocking />;\n};\n\nexport default FlyInOverlayLoader;\n","/* eslint-disable react/jsx-props-no-spreading */\nimport { Modal as BaseModal } from '@coop/components';\nimport classNames from 'classnames';\nimport { type PropsWithChildren } from 'react';\n\nimport { FlyInContextProvider } from '../../contexts/flyInContext';\nimport { SiteContextProvider, SiteContextType } from '../../contexts/siteContext';\nimport { useFlyInNavigationOutsideClickInterceptor } from '../../hooks/useFlyInNavigationInterceptor';\nimport { useAppSelector } from '../../hooks/useThunkDispatch';\nimport { ErrorGroup } from '../../store/structureDefinitions/errorsState';\nimport ErrorGroupNotification from '../molecules/GroupErrorNotifications/ErrorGroupNotification';\nimport FlyInOverlayLoader from './FlyInOverlayLoader';\n\nexport const MODAL_TOGGLE_TIME = 500;\n\ntype ModalProps = React.ComponentPropsWithoutRef<typeof BaseModal>;\n\nexport const Modal = (props: ModalProps) => {\n return (\n <SiteContextProvider siteContext={SiteContextType.Modal}>\n <BaseModal {...props}>\n {props.children}\n <ModalErrorNotification />\n </BaseModal>\n </SiteContextProvider>\n );\n};\n\ntype FlyInAlignment = 'left' | 'right';\n\ntype FlyInSizes = 250 | 375 | 460 | 510 | 540 | 1000;\n\nexport interface FlyInProps extends Omit<ModalProps, 'toggleTime'> {\n sizePx?: FlyInSizes;\n alignment?: FlyInAlignment;\n additionalClasses?: string;\n}\n\n// If you want to use a flyin that has it's own route and works with React Router, use FlyInRouted instead\nexport const FlyIn = ({\n alignment = 'right',\n sizePx = 540,\n ...props\n}: React.PropsWithChildren<FlyInProps>) => {\n return (\n <FlyInContextProvider>\n <FlyInInner\n isOpen={props.isOpen}\n afterClose={props.afterClose}\n close={props.close}\n alignment={alignment}\n sizePx={sizePx}\n additionalClasses={props.additionalClasses}\n disableOutsideClick={props.disableOutsideClick}\n asideModalContainerStyle={props.asideModalContainerStyle}\n idForDebug={props.idForDebug}\n renderTrigger={props.renderTrigger}\n afterOutsideClick={props.afterOutsideClick}\n disableOverlay={props.disableOverlay}\n initialFocusOnDialog={props.initialFocusOnDialog}\n animation={props.animation}\n additionalContainerClasses={props.additionalContainerClasses}\n >\n {props.children}\n </FlyInInner>\n </FlyInContextProvider>\n );\n};\n\nconst FlyInInner = (props: PropsWithChildren<FlyInProps>) => {\n const blockFlyIn = useAppSelector((state) => state.modal.blocked);\n\n const { outsideClick } = useFlyInNavigationOutsideClickInterceptor(props.close);\n return (\n <Modal\n alignment={props.alignment}\n isOpen={props.isOpen}\n afterClose={props.afterClose}\n close={outsideClick}\n disableOutsideClick={blockFlyIn || props.disableOutsideClick}\n asideModalContainerStyle={{\n ...props.asideModalContainerStyle,\n }}\n additionalClasses={classNames(\n 'FlyIn u-flex u-flexDirectionColumn u-heightAll u-textCenter mixinScroll u-bgWhite',\n getFlyInSizeClass(props.sizePx),\n props.additionalClasses,\n props.alignment === 'left' && 'FlyIn--left',\n props.alignment === 'right' && 'FlyIn--right',\n )}\n idForDebug={props.idForDebug}\n renderTrigger={props.renderTrigger}\n afterOutsideClick={props.afterOutsideClick}\n disableOverlay={props.disableOverlay}\n initialFocusOnDialog={props.initialFocusOnDialog}\n toggleTime={MODAL_TOGGLE_TIME}\n animation={props.animation}\n additionalContainerClasses={props.additionalContainerClasses}\n >\n <FlyInOverlayLoader />\n {props.children}\n <ModalErrorNotification />\n </Modal>\n );\n};\n\nconst getFlyInSizeClass = (sizePx?: FlyInSizes) => {\n switch (sizePx) {\n case 250:\n return 'FlyIn--size250';\n case 375:\n return 'FlyIn--size375';\n case 510:\n return 'FlyIn--size510';\n case 460:\n return 'FlyIn--size460';\n case 1000:\n return 'FlyIn--size1000';\n case 540:\n default:\n return 'FlyIn--size540';\n }\n};\n\nconst ModalErrorNotification = () =>\n ErrorGroupNotification({\n errorGroup: ErrorGroup.Modal,\n });\n","import dompurify from 'dompurify';\nimport type { FC } from 'react';\n\nimport useHtmlScriptParser from '../../../hooks/useHtmlScriptParser';\n\ninterface DangerousHtmlWrapper {\n dangerouslySetInnerHTML?: {\n __html: string;\n };\n}\n\ninterface RawHtmlProps {\n html: string;\n renderWrapper?: FC<React.PropsWithChildren<DangerousHtmlWrapper>>;\n sanitizeOptions?: DOMPurify.Config;\n parseScripts?: boolean;\n className?: string;\n}\n\nconst sanitizer = dompurify.sanitize;\n\nconst RawHtml = ({\n html,\n renderWrapper,\n sanitizeOptions,\n className,\n parseScripts = false,\n}: React.PropsWithChildren<RawHtmlProps>) => {\n const scriptsContainerRef = useHtmlScriptParser(html, parseScripts);\n\n if (!renderWrapper)\n return (\n <>\n <div\n className={className}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{\n __html: sanitizeOptions\n ? sanitizer(html, sanitizeOptions).toString()\n : sanitizer(html).toString(),\n }}\n />\n <div style={{ display: 'none' }} ref={scriptsContainerRef} />\n </>\n );\n\n return (\n <>\n {renderWrapper({\n dangerouslySetInnerHTML: {\n __html: sanitizeOptions\n ? sanitizer(html, sanitizeOptions).toString()\n : sanitizer(html).toString(),\n },\n })}\n <div style={{ display: 'none' }} ref={scriptsContainerRef} />\n </>\n );\n};\n\nexport default RawHtml;\n","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgSplashBackgroundcolor = _ref => {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 40 28\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Type=discount-splash background\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n id: \"layer\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.23529 25.8333C8.19266 24.9981 8.22455 24.3782 8.23529 23.537C8.07642 21.9633 7.29617 21.3293 5.29412 21.2407C4.59022 21.5382 3.73745 21.5841 2.94118 21.8148C2.78154 21.6259 2.67353 21.5199 2.35294 21.2407C3.25731 20.5345 4.1124 19.8011 4.70588 18.9444C5.21823 18.6549 5.38308 18.1635 5.88235 17.7963C5.17271 17.5403 4.7399 17.2309 4.11765 17.2222C3.06392 16.9814 1.84159 16.9083 0.588235 16.6481C0.591224 16.6275 0.556763 16.4624 0.588235 16.0741C1.25138 16.0153 1.99692 15.7666 2.94118 15.5C3.21848 15.202 3.6819 14.8604 4.11765 14.3519C3.74413 14.1282 3.38178 13.6017 2.94118 13.2037C2.1399 12.7926 1.28764 12.4733 0.588235 12.0556C0.280819 11.9079 -0.0470727 11.535 0 11.4815C0.122917 11.17 0.424063 10.9035 0.588235 10.9074C1.40157 10.6658 2.14402 10.6525 2.94118 10.3333C3.43193 10.3326 3.98304 10.0486 4.70588 9.75926C4.30502 9.2706 4.13735 8.66368 3.52941 8.03704C3.41367 7.63194 2.86255 7.20562 2.35294 6.88889C2.10339 6.38755 1.83541 6.03312 1.17647 5.16667C2.06507 5.4525 2.45828 5.46352 2.94118 5.74074C4.16923 5.82647 5.49289 6.1536 7.05882 6.31482C8.22198 6.70867 8.76358 6.25279 8.82353 5.16667C8.67512 4.34587 8.52827 3.80132 8.82353 3.44444C8.6458 2.47001 8.96057 2.02114 10 2.2963C10.8976 3.12928 11.953 3.59217 12.9412 4.01852C13.9157 4.49941 14.4607 4.19833 14.7059 3.44444C14.6924 2.63132 14.7284 2.03542 14.7059 1.72222C15.0825 0.964858 15.4155 0.49345 15.8824 0C16.1788 0.279789 16.7431 0.489943 17.0588 0.574074C17.8018 1.40646 18.3195 2.08526 18.8235 2.87037C20.0734 3.80232 20.3707 3.77026 21.7647 2.87037C22.597 1.99484 23.6363 1.25567 24.7059 0.574074C25.5663 0.0270521 26.1696 0.328633 26.4706 1.14815C26.4813 1.92546 26.5407 2.54791 26.4706 3.44444C26.8501 4.14248 27.4192 4.61889 28.2353 4.59259C29.6972 4.13972 30.9072 3.87922 32.3529 3.44444C33.3071 3.42885 33.6525 3.82361 33.5294 5.16667C32.3163 7.48115 32.7028 7.97536 35.2941 8.03704C36.2672 7.75643 37.0035 7.70283 37.6471 7.46296C37.8015 7.79175 37.8629 7.93052 37.6471 8.03704C37.3913 8.48484 36.8692 8.91517 36.4706 9.18519C34.8702 10.3702 34.9463 11.1642 36.4706 12.0556C37.7171 12.5008 38.8538 13.1022 40 13.7778C39.9676 13.8449 39.9349 14.0047 40 14.3519C39.2666 14.2251 38.6061 14.2023 38.2353 14.3519C37.3396 14.55 36.4186 14.7609 36.4706 15.5C35.9732 15.6642 36.3981 16.5296 36.4706 17.2222C37.3936 18.0415 38.1926 18.9109 39.4118 20.0926C37.9375 20.0859 37.0405 20.1528 35.8824 20.0926C34.4549 19.9148 33.7299 20.7101 34.7059 22.3889C35.0052 22.6972 35.0202 23.363 35.2941 24.1111C34.4642 24.0388 33.9758 23.9694 33.5294 23.537C32.8918 23.5606 32.2967 23.2217 31.7647 22.963C29.573 22.1406 29.0957 22.3117 28.2353 24.6852C27.9775 25.5279 27.4095 25.7922 26.4706 25.2593C25.5385 24.8671 24.6871 24.4764 24.1176 24.1111C23.0759 23.6713 22.4708 23.8171 21.7647 24.6852C21.4434 25.2268 20.8758 25.9076 20.5882 26.4074C19.906 27.1806 19.5025 27.1538 18.8235 26.4074C18.1773 26.0251 17.3232 24.9643 16.4706 24.6852C15.7643 24.9563 15.0326 26.1774 14.1176 26.9815C14.0775 27.0403 13.8288 27.1974 13.5294 27.5556C13.3484 26.7052 13.3592 26.0697 13.5294 25.2593C13.3214 24.2557 12.7582 23.8013 11.7647 24.1111C10.4874 24.6397 9.41191 25.2338 8.23529 25.8333Z\",\n fill: \"#FFF000\"\n }))));\n};\nexport default SvgSplashBackgroundcolor;","/* eslint-disable import/prefer-default-export */\n/* eslint-disable no-plusplus */\nimport { Icon } from '@coop/components';\nimport { SplashBackgroundColorIcon } from '@coop/icons';\nimport classnames from 'classnames';\n\nimport styles from './Splash.module.less';\n\ninterface SplashProps {\n type: 'default' | 'large' | 'medium' | 'small';\n prefix?: string;\n price: string;\n suffix?: string;\n decimal?: string;\n unit?: string;\n isMemberPrice?: boolean;\n allText?: string;\n label?: string;\n}\n\nconst Splash = (props: SplashProps) => {\n const hasDecimalOrUnit = !!props.decimal || !!props.unit;\n\n const splashClasses = classnames(\n styles.Splash,\n hasDecimalOrUnit &&\n props.type === 'default' &&\n props.price.length > 3 &&\n styles['Splash--fontSmall'],\n props.type === 'medium' && styles['Splash--medium'],\n props.type === 'small' && styles['Splash--small'],\n props.type === 'large' && styles['Splash--large'],\n );\n\n const hasCustomLabel = !!props.label;\n\n return (\n <div\n className={styles['Splash-container']}\n role={hasCustomLabel ? 'img' : undefined}\n aria-label={props.label}\n >\n <div className={splashClasses} aria-hidden={hasCustomLabel}>\n <Icon\n className={styles['Splash-bg']}\n color=\"yellow\"\n icon={SplashBackgroundColorIcon}\n aria-hidden\n />\n <div className={styles['Splash-content']} data-a11y-ignore=\"color-contrast\">\n {props.prefix && (\n <div\n className={styles['Splash-pricePre']}\n data-a11y-ignore=\"color-contrast\"\n >\n {props.prefix}\n </div>\n )}\n {props.price && (\n <div className={styles['Splash-price']}>\n <div\n className={styles['Splash-priceLarge']}\n data-a11y-ignore=\"color-contrast\"\n >\n {props.price}\n </div>\n {hasDecimalOrUnit && (\n <div className={styles['Splash-priceSupSub']}>\n <SubPrice decimal={props.decimal} unit={props.unit} />\n </div>\n )}\n </div>\n )}\n {props.allText && (\n <div className={styles['Splash-priceText']}>{props.allText}</div>\n )}\n {props.suffix && (\n <div className={styles['Splash-pricePost']}>{props.suffix}</div>\n )}\n </div>\n </div>\n {props.isMemberPrice && (\n <div\n aria-hidden={hasCustomLabel}\n className={classnames(\n styles['Splash-memberTag'],\n props.type === 'large' && styles['Splash-memberTag--large'],\n props.type === 'medium' && styles['Splash-memberTag--medium'],\n )}\n data-a11y-ignore=\"color-contrast\"\n >\n MEDLEMSPRIS\n </div>\n )}\n </div>\n );\n};\n\nconst SubPrice = (props: { decimal?: string; unit?: string }) => {\n const promoComponents = [];\n let index = 0;\n\n let promoPrice = null;\n\n if (props.decimal) {\n promoPrice = props.decimal.padStart(2, '0');\n } else {\n promoPrice = '00';\n }\n\n if (promoPrice) {\n promoComponents.push(\n <div\n key={index}\n className={styles['Splash-priceSup']}\n data-a11y-ignore=\"color-contrast\"\n >\n {promoPrice}\n </div>,\n );\n index++;\n }\n\n if (props.unit) {\n promoComponents.push(\n <div\n key={index}\n className={styles['Splash-priceSub']}\n data-a11y-ignore=\"color-contrast\"\n >\n {`/${props.unit}`}\n </div>,\n );\n index++;\n }\n\n // eslint-disable-next-line react/jsx-no-useless-fragment\n return <>{promoComponents}</>;\n};\n\nexport default Splash;\n","// extracted by mini-css-extract-plugin\nexport default {\"Splash-container\":\"EEqvmJwe\",\"Splash\":\"BpaA3FD0\",\"Splash-price\":\"IgfovQuR\",\"Splash-memberTag\":\"SlFPVeq_\",\"Splash-memberTag--large\":\"nWT4gPu2\",\"Splash-memberTag--medium\":\"eHOOL8Oi\",\"Splash-bg\":\"WwPPjSRB\",\"Splash-content\":\"x8dLMmVC\",\"Splash-pricePre\":\"QUeU6xhZ\",\"Splash-pricePost\":\"A4Ny9Mfg\",\"Splash-text\":\"bCQUUpFs\",\"Splash-priceLarge\":\"OXm1GQVM\",\"Splash-priceText\":\"IHhFM31T\",\"Splash-priceSupSub\":\"gNgfSLmt\",\"Splash-priceSup\":\"uHKGEzxo\",\"Splash-priceSub\":\"ew9hNB6_\",\"Splash--large\":\"eyPUtTO0\",\"Splash--medium\":\"fkNYUFbW\",\"Splash--small\":\"pDQK7TXk\",\"Splash--fontSmall\":\"BAree9IG\"};","import { useElementEvent } from '@coop/hooks';\nimport { useCallback, useLayoutEffect, useRef } from 'react';\nimport _ from 'underscore';\n\nexport const useTabSwitcher = () => {\n const indicatorRef = useRef<HTMLDivElement>(null);\n\n const tabScrollableRef = useRef<HTMLDivElement>(null);\n const activeItemRef = useRef<HTMLButtonElement>(null);\n const tabListRef = useRef<HTMLDivElement>(null);\n\n const renderIndicator = useCallback(() => {\n if (activeItemRef.current && indicatorRef.current) {\n const linkWidth = activeItemRef.current.offsetWidth;\n\n const linkPos = activeItemRef.current.offsetLeft;\n\n indicatorRef.current.style.width = `${linkWidth}px`;\n indicatorRef.current.style.left = `${linkPos}px`;\n }\n }, []);\n\n const onLeftArrowClick = (e: React.MouseEvent | React.FocusEvent) => {\n e.preventDefault();\n if (tabScrollableRef.current) {\n tabScrollableRef.current.scrollBy({\n left:\n tabScrollableRef.current.scrollLeft -\n tabScrollableRef.current.scrollWidth +\n 100,\n behavior: 'smooth',\n });\n }\n };\n\n const onRightArrowClick = (e: React.MouseEvent | React.FocusEvent) => {\n e.preventDefault();\n if (tabScrollableRef.current) {\n tabScrollableRef.current.scrollBy({\n left:\n tabScrollableRef.current.scrollLeft +\n tabScrollableRef.current.clientWidth -\n 100,\n behavior: 'smooth',\n });\n }\n };\n\n const arrowLeftRef = useRef<HTMLDivElement>(null);\n const arrowRightRef = useRef<HTMLDivElement>(null);\n\n const toggleNavigationButtons = useCallback(() => {\n const tabScrollable = tabScrollableRef.current;\n if (!tabScrollable) {\n return null;\n }\n const tabScrollableWidth = tabScrollable.clientWidth;\n\n if (!tabListRef.current) {\n return null;\n }\n\n const tabListWidth = tabListRef.current.clientWidth;\n const { scrollLeft } = tabScrollable;\n const leftButton = arrowLeftRef.current;\n const rightButton = arrowRightRef.current;\n\n if (tabListWidth > tabScrollableWidth) {\n if (leftButton) {\n if (scrollLeft > 0) {\n // leftButton.fadeIn(200);\n // leftButton.animate({ display: 'block' }, 200);\n leftButton.style.display = 'block'; // ({ display: 'block' }, 200);\n } else {\n // leftButton.fadeOut(200);\n // leftButton.animate({ display: 'none' }, 200);\n leftButton.style.display = 'none';\n }\n }\n\n if (rightButton) {\n if (scrollLeft + tabScrollableWidth < tabListWidth - 2) {\n // rightButton.fadeIn(200);\n // rightButton.animate({ display: 'block' }, 200);\n rightButton.style.display = 'block';\n } else {\n // rightButton.fadeOut(200);\n // rightButton.animate({ display: 'none' }, 200);\n rightButton.style.display = 'none';\n }\n }\n } else {\n // leftButton.fadeOut(200);\n // rightButton.fadeOut(200);\n // leftButton.animate({ display: 'none' }, 200);\n if (leftButton) {\n leftButton.style.display = 'none';\n }\n\n // rightButton.animate({ display: 'none' }, 200);\n if (rightButton) {\n rightButton.style.display = 'none';\n }\n }\n }, [tabListRef, tabScrollableRef]);\n\n const centerSelected = useCallback(() => {\n const tabScrollable = tabScrollableRef.current;\n const tabActive = activeItemRef.current;\n if (!tabScrollable || !tabActive) {\n return null;\n }\n const tabActiveWidth = tabActive.clientWidth;\n const lastKnownScrollPosition = tabScrollable.scrollLeft;\n\n const tabActivePosition = tabActive.getBoundingClientRect().left + tabActiveWidth;\n\n tabScrollable.scroll({ left: lastKnownScrollPosition, behavior: 'smooth' });\n tabScrollable.scrollBy({\n left: tabActivePosition - window.innerWidth / 2 - tabActiveWidth / 2,\n behavior: 'smooth',\n });\n }, [activeItemRef, tabScrollableRef]);\n\n const onResize = useCallback(\n () =>\n _.debounce(() => {\n toggleNavigationButtons();\n centerSelected();\n renderIndicator();\n }, 200),\n [centerSelected, renderIndicator, toggleNavigationButtons],\n );\n\n useLayoutEffect(() => {\n renderIndicator();\n centerSelected();\n toggleNavigationButtons();\n }, [centerSelected, renderIndicator, toggleNavigationButtons]);\n\n const onItemClick = () => {\n renderIndicator();\n centerSelected();\n toggleNavigationButtons();\n };\n\n useElementEvent(window, 'resize', onResize, true);\n useElementEvent(tabScrollableRef.current, 'scroll', toggleNavigationButtons, true);\n\n return {\n onItemClick,\n indicatorRef,\n tabScrollableRef,\n activeItemRef,\n tabListRef,\n onLeftArrowClick,\n onRightArrowClick,\n arrowLeftRef,\n arrowRightRef,\n };\n};\n","/* eslint-disable react/no-danger */\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useLayoutEffect, useRef } from 'react';\n\nimport { useTabSwitcher } from './TabSwitcher.hooks';\nimport type { TabItem, TabItemRenderer } from './TabSwitcher.types';\n\ntype AlignType = 'left' | 'center' | 'right';\n\nexport interface TabSwitcherProps<TData, TId extends string> {\n items: TabItem<TData, TId>[];\n align?: AlignType;\n wrapperClasses?: string;\n containerClasses?: string;\n itemClasses?: (isActive: boolean) => string;\n listClasses?: string;\n renderNextToTabs?: () => React.ReactNode;\n panelClasses?: string;\n handleClick: (tab: TabItem<TData, TId>) => void;\n renderTabItem?: TabItemRenderer<TData, TId>;\n activeTabId: TId;\n forcePanelRerenderOnTabChange?: boolean;\n panelSlot?: React.ReactNode;\n disableTabAnimation?: boolean;\n hidePanelsWithCss?: boolean /** Use when SEO is important - this will render all content up front and hide with css, making it crawlable */;\n noTabIndicator?: boolean;\n}\n\n/**\n * The TabSwitcher is always scrollable and animated\n * */\nconst TabSwitcher = <TData, TId extends string>(props: TabSwitcherProps<TData, TId>) => {\n const ref = useRef<HTMLDivElement>(null);\n const {\n indicatorRef,\n tabScrollableRef,\n activeItemRef: currentLinkRef,\n tabListRef,\n onLeftArrowClick,\n onRightArrowClick,\n arrowLeftRef,\n arrowRightRef,\n onItemClick,\n } = useTabSwitcher();\n\n useLayoutEffect(() => {\n onItemClick();\n }, [props.activeTabId, onItemClick]);\n\n const handleNavItemClick = (item: TabItem<TData, TId>) => {\n props.handleClick?.(item);\n };\n\n const activeTab = props.items.find((item) => item.id === props.activeTabId);\n\n const getAlignmentClass = (align?: AlignType) => {\n if (align === 'left') return 'u-textLeft';\n if (align === 'right') return 'u-textRight';\n return 'u-textCenter';\n };\n\n const renderDefaultTab: TabItemRenderer<TData, TId> = (\n { tab, handleClick: handleTabClick, isActive },\n _ref,\n ) => {\n const cssClasses = classNames(\n 'Tab-item',\n isActive && 'is-active',\n props.itemClasses && props.itemClasses(isActive),\n );\n\n return (\n <button\n ref={_ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n className={cssClasses}\n onClick={() => {\n handleTabClick(tab);\n }}\n aria-label={tab.ariaLabel}\n dangerouslySetInnerHTML={{ __html: tab.name }}\n />\n );\n };\n\n return (\n <div\n ref={ref}\n className={classNames(\n 'Tab',\n !props.disableTabAnimation && 'Tab--animated',\n 'Tab--scrollable',\n props.wrapperClasses,\n )}\n >\n <div\n ref={tabScrollableRef}\n className={classNames(\n 'Tab-container',\n getAlignmentClass(props.align),\n props.containerClasses,\n )}\n >\n <div ref={tabListRef} className={classNames('Tab-list', props.listClasses)}>\n {props.items.map((item) => {\n const isActive = props.activeTabId === item.id;\n return (\n <TabNavigationItem\n ref={isActive ? currentLinkRef : null}\n key={item.id}\n tabItem={item}\n isActive={isActive}\n renderTabItem={\n props.renderTabItem ? props.renderTabItem : renderDefaultTab\n }\n handleNavItemClick={() => handleNavItemClick(item)}\n additinalClasses={props.itemClasses}\n />\n );\n })}\n {props.noTabIndicator || <div ref={indicatorRef} className=\"Tab-indicator\" />}\n </div>\n {props.renderNextToTabs && props.renderNextToTabs()}\n </div>\n {props.hidePanelsWithCss\n ? props.items.map((item) => {\n const isActive = props.activeTabId === item.id;\n return (\n <TabPanel\n key={item.id}\n isActive={isActive}\n panelClasses={props.panelClasses}\n >\n {item.component}\n </TabPanel>\n );\n })\n : props.panelSlot || (\n <TabPanel\n key={props.forcePanelRerenderOnTabChange ? props.activeTabId : undefined}\n isActive={props.activeTabId === activeTab?.id}\n panelClasses={props.panelClasses}\n >\n {activeTab?.component}\n </TabPanel>\n )}\n <div\n ref={arrowLeftRef}\n className=\"Tab-arrow Tab-arrow--left\"\n style={{ display: 'none' }}\n onClick={onLeftArrowClick}\n onMouseOver={onLeftArrowClick}\n onFocus={onLeftArrowClick}\n />\n <div\n ref={arrowRightRef}\n className=\"Tab-arrow Tab-arrow--right\"\n style={{ display: 'none' }}\n onClick={onRightArrowClick}\n onMouseOver={onRightArrowClick}\n onFocus={onRightArrowClick}\n />\n </div>\n );\n};\n\nconst TabNavigationItemInner = <TData, TId>(\n props: {\n isActive: boolean;\n tabItem: TabItem<TData, TId>;\n handleNavItemClick: (tab: TabItem<TData, TId>) => void;\n additinalClasses?: (isActive: boolean) => string;\n renderTabItem: TabItemRenderer<TData, TId>;\n },\n ref: React.Ref<HTMLButtonElement>,\n) => {\n return (\n <>\n {props.renderTabItem(\n {\n tab: props.tabItem,\n handleClick: props.handleNavItemClick,\n isActive: props.isActive,\n },\n ref,\n )}\n </>\n );\n};\n\nconst TabNavigationItem = React.forwardRef(TabNavigationItemInner);\n\ninterface TabPanelProps {\n children: React.ReactNode;\n isActive: boolean;\n panelClasses?: string;\n}\n\nconst TabPanel = ({ children, isActive, panelClasses }: TabPanelProps) => {\n const cssClasses = classNames('Tab-panel ', isActive ? 'is-active' : null, panelClasses);\n\n return <div className={cssClasses}>{children}</div>;\n};\n\nexport default TabSwitcher;\n","import { useEffect, useState } from 'react';\n\nimport type { TabSwitcherProps } from './TabSwitcher';\nimport TabSwitcher from './TabSwitcher';\n\ntype StatefulTabSwitcherProps<T, TId extends string> = {\n initialActiveId?: TId;\n} & Omit<TabSwitcherProps<T, TId>, 'activeTabId' | 'setActiveTabId' | 'handleClick'> &\n Partial<Pick<TabSwitcherProps<T, TId>, 'handleClick'>>;\n\nconst StatefulTabSwitcher = <T, TId extends string>(props: StatefulTabSwitcherProps<T, TId>) => {\n const [activeTabId, setActiveTabId] = useState(props.initialActiveId ?? props.items[0].id);\n\n useEffect(() => {\n if (props.initialActiveId) {\n setActiveTabId(props.initialActiveId);\n }\n }, [props.initialActiveId]);\n\n const handleItemClick: (typeof props)['handleClick'] = (tab) => {\n setActiveTabId(tab.id);\n props.handleClick?.(tab);\n };\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return <TabSwitcher {...props} activeTabId={activeTabId} handleClick={handleItemClick} />;\n};\n\nexport default StatefulTabSwitcher;\n","import type { Dispatch, FC, Reducer } from 'react';\nimport { createContext, useCallback, useContext, useReducer } from 'react';\n\nimport { logMissingContext } from '../../../utility/logging';\n\ninterface BlockingContext {\n outsideClickBlocked: boolean;\n backBlocked: boolean;\n closeBlocked: boolean;\n}\n\ninterface StateContextType {\n block: BlockingContext;\n triedToBack: boolean;\n triedToClose: boolean;\n triedToOutsideClick: boolean;\n}\n\nconst StateContext = createContext<StateContextType | null>(null);\n\nconst DispatchContext = createContext<Dispatch<DispatchAction> | null>(null);\n\ntype DispatchAction =\n | { type: 'setTriedToClose'; payload: boolean }\n | { type: 'setTriedToBack'; payload: boolean }\n | { type: 'setTriedToOutsideClick'; payload: boolean }\n | { type: 'setBlockingContext'; payload: BlockingContext }\n | { type: 'blockAll' }\n | { type: 'unblockAll' }\n | { type: 'reset' };\n\nconst flyInContextReducer: Reducer<StateContextType, DispatchAction> = (state, action) => {\n switch (action.type) {\n case 'setTriedToClose':\n return {\n ...state,\n triedToClose: action.payload,\n };\n case 'setTriedToBack':\n return {\n ...state,\n triedToBack: action.payload,\n };\n case 'setTriedToOutsideClick':\n return {\n ...state,\n triedToOutsideClick: action.payload,\n };\n case 'setBlockingContext':\n return {\n ...state,\n block: action.payload,\n };\n case 'unblockAll':\n return {\n ...state,\n block: {\n outsideClickBlocked: false,\n backBlocked: false,\n closeBlocked: false,\n },\n };\n case 'blockAll':\n return {\n ...state,\n block: {\n outsideClickBlocked: true,\n backBlocked: true,\n closeBlocked: true,\n },\n };\n case 'reset':\n return {\n ...state,\n triedToClose: false,\n triedToBack: false,\n triedToOutsideClick: false,\n };\n default:\n return state;\n }\n};\n\nexport const FlyInContextProvider: FC<React.PropsWithChildren<unknown>> = (props) => {\n const [state, dispatch] = useReducer<Reducer<StateContextType, DispatchAction>>(\n flyInContextReducer,\n {\n block: {\n outsideClickBlocked: false,\n backBlocked: false,\n closeBlocked: false,\n },\n triedToBack: false,\n triedToClose: false,\n triedToOutsideClick: false,\n },\n );\n\n return (\n <DispatchContext.Provider value={dispatch}>\n <StateContext.Provider value={state}>{props.children}</StateContext.Provider>\n </DispatchContext.Provider>\n );\n};\n\nexport const useFlyInStateContext = () => {\n const state = useContext(StateContext);\n\n return state;\n};\n\nexport const useFlyInDispatchContext = () => {\n const dispatch = useContext(DispatchContext);\n\n const dispatchOrError = useCallback(\n (action: DispatchAction) => {\n if (dispatch) {\n dispatch(action);\n } else {\n logMissingContext('FlyIn');\n }\n },\n [dispatch],\n );\n\n const unblockAll = useCallback(() => {\n dispatchOrError({\n type: 'unblockAll',\n });\n }, [dispatchOrError]);\n\n const blockAll = useCallback(() => {\n dispatchOrError({\n type: 'blockAll',\n });\n }, [dispatchOrError]);\n\n const setTriedToOutsideClick = useCallback(() => {\n dispatchOrError({\n type: 'setTriedToOutsideClick',\n payload: true,\n });\n }, [dispatchOrError]);\n\n const setTriedToClose = useCallback(() => {\n dispatchOrError({\n type: 'setTriedToClose',\n payload: true,\n });\n }, [dispatchOrError]);\n\n const setTriedToBack = useCallback(() => {\n dispatchOrError({\n type: 'setTriedToBack',\n payload: true,\n });\n }, [dispatchOrError]);\n\n const unsetTriedToClose = useCallback(() => {\n dispatchOrError({\n type: 'setTriedToClose',\n payload: false,\n });\n }, [dispatchOrError]);\n\n const unsetTriedToBack = useCallback(() => {\n dispatchOrError({\n type: 'setTriedToBack',\n payload: false,\n });\n }, [dispatchOrError]);\n\n const unsetTriedToOutsideClick = useCallback(() => {\n dispatchOrError({\n type: 'setTriedToOutsideClick',\n payload: false,\n });\n }, [dispatchOrError]);\n\n const reset = useCallback(() => {\n dispatchOrError({\n type: 'reset',\n });\n }, [dispatchOrError]);\n\n return {\n reset,\n setTriedToBack,\n setTriedToClose,\n unsetTriedToBack,\n unsetTriedToClose,\n setTriedToOutsideClick,\n unsetTriedToOutsideClick,\n blockAll,\n unblockAll,\n };\n};\n","import type { FC } from 'react';\nimport { createContext, useContext, useMemo } from 'react';\n\nexport const enum SiteContextType {\n /** Whole visible page container (except the Header) */\n Global,\n\n /** Main content of a page */\n PageContent,\n\n /** Side content, i.e. sidebar menu */\n Side,\n\n Header,\n Footer,\n\n Modal,\n}\n\ninterface ISiteContext {\n siteContextType?: SiteContextType;\n}\n\nconst SiteContext = createContext<ISiteContext>({ siteContextType: undefined });\n\nexport const useSiteContext = () => {\n const featureContext = useContext(SiteContext);\n return featureContext;\n};\n\nexport const useIsInsideModalContext = () => {\n const context = useContext(SiteContext);\n\n return context?.siteContextType === SiteContextType.Modal;\n};\n\nexport const SiteContextProvider: FC<React.PropsWithChildren<{ siteContext: SiteContextType }>> = (\n props,\n) => {\n const value = useMemo<ISiteContext>(\n () => ({ siteContextType: props.siteContext }),\n [props.siteContext],\n );\n\n return <SiteContext.Provider value={value}>{props.children}</SiteContext.Provider>;\n};\n","import { createDefaultException } from '../../exceptions/exceptionUtils';\nimport getDirectAdobeCampaignAxiosClient from '../clients/directAdobeCampaignAxiosClient';\nimport type { CustomErrorInterceptor } from '../clients/localApiAxiosErrorInterceptors';\nimport type {\n ActivatePropositionDto,\n OfferPropositionDto,\n OfferPropositionResponseDto,\n} from './directAdobeCampaignApiModels';\n\nconst baseUrl = '/external/ac/offers';\n\ntype AcApiException = {\n status: number;\n title: string;\n};\n\nconst acErrorInterceptor: CustomErrorInterceptor<AcApiException> = (error) => {\n const exception = createDefaultException(\n error.response.data.title,\n error.response.data.status.toString(),\n );\n return exception;\n};\n\nconst getPropositionsByNeoId = async (\n neoId: string,\n storeLedgerId?: string,\n): Promise<OfferPropositionDto[]> => {\n let storeIdString;\n if (storeLedgerId) {\n storeIdString = ensureLedgerIdFormat(storeLedgerId);\n }\n\n const url = `${baseUrl}/offer-propositions`;\n const urlParams = new URLSearchParams();\n urlParams.set('api-version', 'v1');\n urlParams.set('channels', 'Coopse');\n urlParams.set('indexFrom', '0');\n urlParams.set('indexTo', '50');\n urlParams.set('includeRedeemed', 'true');\n urlParams.set('maxDaysSinceRedeemed', '30');\n urlParams.set('sortValidityEndDate', 'Desc');\n\n if (storeIdString) {\n urlParams.set('storeList', storeIdString);\n }\n\n const response = await getDirectAdobeCampaignAxiosClient(undefined, neoId, [\n acErrorInterceptor,\n ]).get<OfferPropositionResponseDto>(url, { params: urlParams });\n\n return response.data?.offerPropositions;\n};\nconst getPropositions = async (accessToken: string): Promise<OfferPropositionDto[]> => {\n const url = `${baseUrl}/offer-propositions`;\n const urlParams = new URLSearchParams();\n urlParams.set('api-version', 'v1');\n urlParams.set('channels', 'Coopse');\n urlParams.set('indexFrom', '0');\n urlParams.set('indexTo', '50');\n urlParams.set('includeRedeemed', 'true');\n urlParams.set('maxDaysSinceRedeemed', '30');\n const response = await getDirectAdobeCampaignAxiosClient(\n accessToken,\n ).get<OfferPropositionResponseDto>(url, { params: urlParams });\n return response.data?.offerPropositions;\n};\n\nconst activatePropositionByNeoId = async (\n neoId: string,\n propositionId: number,\n): Promise<boolean> => {\n const response = await getDirectAdobeCampaignAxiosClient(\n undefined,\n neoId,\n ).post<ActivatePropositionDto>(`${baseUrl}/offer-propositions/${propositionId}/activate`);\n return response.data.offerActivated;\n};\n\nconst getPropositionsByLedgerId = async (\n accessToken: string,\n storeLedgerId: string,\n): Promise<OfferPropositionDto[]> => {\n const storeIdString = ensureLedgerIdFormat(storeLedgerId);\n\n const url = `${baseUrl}/offer-propositions`;\n const urlParams = new URLSearchParams();\n urlParams.set('api-version', 'v1');\n urlParams.set('channels', 'Coopse');\n urlParams.set('indexFrom', '0');\n urlParams.set('indexTo', '50');\n urlParams.set('includeRedeemed', 'true');\n urlParams.set('maxDaysSinceRedeemed', '30');\n urlParams.set('sortValidityEndDate', 'Desc');\n if (storeIdString) {\n urlParams.set('storeList', storeIdString);\n }\n\n const response = await getDirectAdobeCampaignAxiosClient(\n accessToken,\n ).get<OfferPropositionResponseDto>(url, { params: urlParams });\n return response.data?.offerPropositions;\n};\n\nconst getPropositionsHistory = async (\n accessToken: string,\n includeRedeemed: boolean,\n): Promise<OfferPropositionDto[]> => {\n const url = `${baseUrl}/offer-propositions`;\n\n const urlParams = new URLSearchParams();\n urlParams.set('api-version', 'v1');\n urlParams.set('indexFrom', '0');\n urlParams.set('indexTo', '500');\n urlParams.set('offerType', 'MemberStore');\n urlParams.set('includeRedeemed', includeRedeemed.toString());\n\n const response = await getDirectAdobeCampaignAxiosClient(\n accessToken,\n ).get<OfferPropositionResponseDto>(url, { params: urlParams });\n return response.data?.offerPropositions;\n};\n\nconst activateProposition = async (\n accessToken: string,\n propositionId: number,\n): Promise<boolean> => {\n const response = await getDirectAdobeCampaignAxiosClient(\n accessToken,\n ).post<ActivatePropositionDto>(`${baseUrl}/offer-propositions/${propositionId}/activate`);\n return response.data.offerActivated;\n};\n\nconst setPropositionStatus = async (\n accessToken: string,\n propositionId: number,\n status: number,\n): Promise<boolean> => {\n const response = await getDirectAdobeCampaignAxiosClient(\n accessToken,\n ).post<ActivatePropositionDto>(\n `${baseUrl}/offer-propositions/${propositionId}/status/${status}`,\n );\n return response.data.offerActivated;\n};\n\n// Ensures that store ledger account number is in format with leading zeros, i.e. 016001\nconst ensureLedgerIdFormat = (storeLedgerId: number | string) => {\n if (!storeLedgerId) {\n return null;\n }\n\n let storeIdString = storeLedgerId.toString();\n\n while (storeIdString.length < 6) {\n storeIdString = `0${storeIdString}`;\n }\n\n return storeIdString;\n};\n\nconst adobeCampaignApi = {\n getPropositionsByLedgerId,\n activateProposition,\n getPropositionsByNeoId,\n activatePropositionByNeoId,\n /** Only for test! */\n setPropositionStatus,\n getPropositionsHistory,\n getPropositions,\n};\n\nexport { adobeCampaignApi };\n","import { appConfig } from '../../../appConfig';\nimport { adobeCampaignApi } from '../api/adobeCampaign/directAdobeCampaignApi';\nimport { getAuthToken } from '../api/auth/getAuthToken';\n\nconst getPropositions = async (\n neoId: string | undefined,\n storeLedgerId: string | undefined,\n isAuthenticated: boolean,\n) => {\n let offerPropositions;\n let identity;\n\n if (isAuthenticated) {\n identity = await getAuthToken();\n }\n\n if (identity) {\n if (storeLedgerId) {\n offerPropositions = await adobeCampaignApi.getPropositionsByLedgerId(\n identity.token,\n storeLedgerId,\n );\n } else {\n offerPropositions = await adobeCampaignApi.getPropositions(identity.token);\n }\n } else if (neoId) {\n offerPropositions = await adobeCampaignApi.getPropositionsByNeoId(neoId, storeLedgerId);\n }\n\n return offerPropositions;\n};\n\nconst activateProposition = async (propositionId: number) => {\n const { isAuthenticated } = appConfig.coopUserSettings;\n let token;\n if (isAuthenticated) {\n const spaToken = await getAuthToken();\n token = spaToken?.token;\n }\n\n if (token) {\n const offerActivated = await adobeCampaignApi.activateProposition(token, propositionId);\n return offerActivated;\n }\n\n return false;\n};\n\nconst activatePropositionByNeoId = async (neoId: string, propositionId: number) => {\n const offerActivated = await adobeCampaignApi.activatePropositionByNeoId(neoId, propositionId);\n return offerActivated;\n};\n\nconst getPropositionsHistory = async (includeRedeemed: boolean = true) => {\n const { isAuthenticated } = appConfig.coopUserSettings;\n let token;\n if (isAuthenticated) {\n const spaToken = await getAuthToken();\n token = spaToken?.token;\n }\n\n if (token) {\n const offerPropositions = await adobeCampaignApi.getPropositionsHistory(\n token,\n includeRedeemed,\n );\n return offerPropositions;\n }\n\n return null;\n};\n\nconst setPropositionStatus = async (propositionId: number, status: number) => {\n const { isAuthenticated } = appConfig.coopUserSettings;\n let token;\n if (isAuthenticated) {\n const spaToken = await getAuthToken();\n token = spaToken?.token;\n }\n if (token) {\n const offerActivated = await adobeCampaignApi.setPropositionStatus(\n token,\n propositionId,\n status,\n );\n return offerActivated;\n }\n\n return false;\n};\n\nconst adobeCampaignFlow = {\n activateProposition,\n activatePropositionByNeoId,\n getPropositionsHistory,\n setPropositionStatus,\n getPropositions,\n};\n\nexport default adobeCampaignFlow;\n","import { useEffect } from 'react';\n\nimport { useFlyInDispatchContext, useFlyInStateContext } from '../contexts/flyInContext';\n\nexport const useFlyInNavigationCloseInterceptor = (close?: () => void) => {\n const { unsetTriedToClose } = useFlyInDispatchContext();\n\n const { setTriedToClose } = useFlyInDispatchContext();\n\n const context = useFlyInStateContext();\n const triedToClose = context?.triedToClose;\n const closeBlocked = context?.block?.closeBlocked;\n\n useEffect(() => {\n if (!closeBlocked && triedToClose && !!close) {\n unsetTriedToClose();\n close();\n }\n }, [triedToClose, closeBlocked, close, unsetTriedToClose]);\n\n return {\n close: setTriedToClose,\n };\n};\n\nexport const useFlyInNavigationBackInterceptor = (back?: () => void) => {\n const { unsetTriedToBack } = useFlyInDispatchContext();\n\n const { setTriedToBack } = useFlyInDispatchContext();\n\n const context = useFlyInStateContext();\n const triedToBack = context?.triedToBack;\n const backBlocked = context?.block?.backBlocked;\n\n useEffect(() => {\n if (!backBlocked && triedToBack && !!back) {\n unsetTriedToBack();\n back();\n }\n }, [triedToBack, backBlocked, back, unsetTriedToBack]);\n\n return {\n back: setTriedToBack,\n };\n};\n\nexport const useFlyInNavigationOutsideClickInterceptor = (outsideClick?: () => void) => {\n const { unsetTriedToOutsideClick } = useFlyInDispatchContext();\n\n const { setTriedToOutsideClick } = useFlyInDispatchContext();\n\n const context = useFlyInStateContext();\n const triedToOutsideClick = context?.triedToOutsideClick;\n const outsideClickBlocked = context?.block?.outsideClickBlocked;\n\n useEffect(() => {\n if (!outsideClickBlocked && triedToOutsideClick && !!outsideClick) {\n unsetTriedToOutsideClick();\n outsideClick();\n }\n }, [outsideClick, outsideClickBlocked, unsetTriedToOutsideClick, triedToOutsideClick]);\n\n return {\n outsideClick: setTriedToOutsideClick,\n };\n};\n","import { useEffect, useRef } from 'react';\n\nimport { SyncronQueue } from '../api/SyncronQueue';\n\nconst createScriptElement = (scriptElement: HTMLScriptElement) => {\n const script = document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n\n // pass all attributes from original script tag\n Array.from(scriptElement.attributes).forEach((attr) => {\n script.setAttribute(attr.name, attr.value);\n });\n\n if (scriptElement.innerHTML) {\n script.append(scriptElement.innerHTML);\n }\n\n return script;\n};\n\nconst useHtmlScriptParser = (html: string, enabled: boolean) => {\n const queue = useRef(new SyncronQueue());\n const scriptsContainerRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (enabled) {\n const template = document.createElement('div');\n template.innerHTML = html;\n const scriptsFromRawHtml = Array.from(template.getElementsByTagName('script'));\n\n // we need to create new elements so browser parses them\n const scriptElements = scriptsFromRawHtml.map((script) => createScriptElement(script));\n\n // all scripts dynamically added to the DOM are ALWAYS asynchronous\n // that means that inline scripts that wait for their external ones will fail when added instantly to DOM as they were not loaded yet\n // so resolve scripts in a queue in the order they were added in html string\n const promises = scriptElements.map((exScript) => () => {\n const promise = new Promise((resolve, reject) => {\n if (exScript.src) {\n // eslint-disable-next-line no-param-reassign\n exScript.onload = () => {\n resolve(`${exScript.src} loaded`);\n };\n\n // eslint-disable-next-line no-param-reassign\n exScript.onerror = reject;\n scriptsContainerRef.current?.append(exScript);\n } else {\n scriptsContainerRef.current?.append(exScript);\n resolve('inline script loaded');\n }\n });\n\n return promise;\n });\n\n promises.forEach((func) => queue.current.run(func));\n }\n }, [html, enabled]);\n\n return scriptsContainerRef;\n};\n\nexport default useHtmlScriptParser;\n","import { userProfileSelectors } from '../selectors/userProfileSelectors';\nimport { useAppSelector } from './useThunkDispatch';\n\nexport const useUserProfile = () => {\n const state = useAppSelector(userProfileSelectors.profile);\n return state;\n};\n\nexport const useIsUserAuthenticated = () => {\n const state = useAppSelector(userProfileSelectors.isAuthenticated);\n return state;\n};\n\nexport const useIsUserAMember = () => {\n const state = useAppSelector(userProfileSelectors.isMember);\n return state;\n};\n\nexport const useIsUserCompany = () => {\n const state = useAppSelector(userProfileSelectors.isCompany);\n return state;\n};\n\nexport const useHasUserAKimCustomerId = () => {\n const state = useAppSelector(userProfileSelectors.hasKimCustomerId);\n return state;\n};\n\nexport const useShoppingUserId = () => {\n const state = useAppSelector(userProfileSelectors.shoppingUserId);\n return state;\n};\n\nexport const useUserId = () => {\n const state = useAppSelector(userProfileSelectors.id);\n return state;\n};\n","import { createSelector } from '@reduxjs/toolkit';\n\nimport type { RootState } from '../store/structureDefinitions/cartState';\n\nconst selectProfile = (state: RootState) => state.user.profile;\nconst selectFirstName = createSelector(selectProfile, (state) => state?.firstName);\nconst selectLastName = createSelector(selectProfile, (state) => state?.lastName);\nconst selectIsAuthenticated = createSelector(selectProfile, (state) => !!state?.isAuthenticated);\nconst selectIsCompany = createSelector(selectProfile, (state) => !!state?.isCompany);\nconst selectIsMember = createSelector(selectProfile, (state) => !!state?.medmeraId);\nconst selectHasKimCustomerId = createSelector(selectProfile, (state) => !!state?.hasKimCustomerId);\nconst selectShoppingUserId = createSelector(selectProfile, (state) => state?.shoppingUserId);\nconst selectUserId = createSelector(selectProfile, (state) => state?.id);\nconst selectIsEpiUser = createSelector(selectProfile, (state) => state?.isEpiUser);\n\nconst selectFullName = createSelector(selectFirstName, selectLastName, (first, last) => {\n if (!first || !last) {\n return undefined;\n }\n return `${first} ${last}`;\n});\n\nconst selectInitials = createSelector(selectFirstName, selectLastName, (first, last) => {\n if (!first || !last) {\n return undefined;\n }\n\n return `${first.charAt(0)}${last.charAt(0)}`;\n});\n\nexport const userProfileSelectors = {\n profile: selectProfile,\n fullName: selectFullName,\n initials: selectInitials,\n isAuthenticated: selectIsAuthenticated,\n isMember: selectIsMember,\n isCompany: selectIsCompany,\n hasKimCustomerId: selectHasKimCustomerId,\n shoppingUserId: selectShoppingUserId,\n id: selectUserId,\n isEpiUser: selectIsEpiUser,\n};\n","import { Cloudinary } from '../../../utility/cloudinary';\n\n// Cloudinary url api:\n// http://cloudinary.com/documentation/image_transformations#reference\n\nexport const getCloudinaryUrl = (\n url: string,\n transform: string,\n fallbackUrl?: string,\n fileExtenson?: string,\n retinaTransform?: string,\n altText?: string,\n) => {\n if (!url) {\n return getFallbackImgUrl(fallbackUrl);\n }\n return getTransformedImageUrl(url, transform, fileExtenson, retinaTransform, altText);\n};\n\nexport const getFallbackImgUrl = (fallbackUrl?: string) => {\n const missingImageUrl = '/Assets/Images/missing-image.png';\n const src = fallbackUrl || missingImageUrl;\n\n return src;\n};\n\nexport const getTransformedImageUrl = (\n url: string,\n transform: string,\n fileExtenson?: string,\n retinaTransform?: string,\n altText?: string,\n) => {\n const sanitizedUrl = Cloudinary.sanitize(url, fileExtenson); // //res.cloudinary.com/coopsverige/image/upload/v1442921161/52045.jpg\n let imagePath = Cloudinary.imagePath(sanitizedUrl); // //res.cloudinary.com/coopsverige/image/upload/\n let imageIdentifier = Cloudinary.imageIdentifier(sanitizedUrl); // /v1442921161/52045.jpg\n\n if (!imageIdentifier) {\n return sanitizedUrl;\n }\n\n // Make more SEO friendly\n if (altText) {\n if (imagePath) {\n imagePath = Cloudinary.makeImagePathSeoFriendly(imagePath);\n }\n\n imageIdentifier = Cloudinary.makeImageIdentifierSeoFriendly(imageIdentifier, altText);\n }\n\n const transformedUrl = retinaTransform\n ? `${imagePath}${retinaTransform}/${removeStartingSlash(imageIdentifier)} 2x`\n : `${imagePath}${transform}/${removeStartingSlash(imageIdentifier)}`;\n\n return transformedUrl;\n};\n\nconst removeStartingSlash = (str: string) => {\n if (!str) {\n return str;\n }\n\n if (str[0] === '/') {\n return str.slice(1);\n }\n\n return str;\n};\n","import { appConfig } from '../../../appConfig';\nimport { Helpers } from '../../../utility/helpers';\n\nconst NEOID_HEADER = 'neoId';\nconst SESSION_STORAGE_NEO_IDENTITY = 'user.identity.neo';\n/**\n * This will return neoId if it exists as a query parameter.\n * If user is not authenticated, it will store neoId to session storage.\n * If user doesn't have it in query parameter and is still not authenticated it will return neoId from session storage.\n */\nexport const getNeoId = () => {\n const neoId = Helpers.getParameterByName(NEOID_HEADER);\n\n if (!appConfig.coopUserSettings.isAuthenticated) {\n if (neoId) {\n window.sessionStorage.setItem(SESSION_STORAGE_NEO_IDENTITY, neoId);\n } else {\n const storedNeoId = window.sessionStorage.getItem(SESSION_STORAGE_NEO_IDENTITY);\n return storedNeoId ?? undefined;\n }\n }\n\n return neoId;\n};\n","import classNames from 'classnames';\nimport * as React from 'react';\n\nexport const calculateRowFromIndex = (index: number, elementsInRow: number) => {\n const row = Math.trunc(index / elementsInRow);\n const rowPosition = index % elementsInRow;\n\n return {\n row,\n rowPosition,\n };\n};\n\nexport interface ItemGridProps<TItem> {\n cellsInRow: number;\n styles?: React.CSSProperties;\n gridClasses?: string;\n itemClasses?: string;\n noDefaultClasses?: boolean;\n items?: TItem[];\n renderItem: (item: TItem, index: number) => React.ReactNode;\n itemUniqueKey: (item: TItem, index: number) => string;\n renderAtRowStart?: (row: number) => React.ReactNode;\n renderAtRowEnd?: (row: number) => React.ReactNode;\n renderLast?: () => React.ReactNode;\n ariaLabel?: string;\n}\n\nconst ItemGrid = <T,>(props: ItemGridProps<T>, ref?: React.Ref<HTMLUListElement>) => {\n if (!props.items) {\n return null;\n }\n\n return (\n // Voiceover needs explicit role for ul elements, otherwise it might not treat it as a list landmark when list-style: none is used in CSS\n // eslint-disable-next-line jsx-a11y/no-redundant-roles\n <ul\n ref={ref}\n role=\"list\"\n aria-label={props.ariaLabel}\n className={classNames('Grid Grid-items', props.gridClasses)}\n style={props.styles}\n >\n {props.items.map((item, index, array) => (\n // eslint-disable-next-line react/no-array-index-key\n <React.Fragment key={props.itemUniqueKey(item, index)}>\n {index % props.cellsInRow === 0 &&\n props.renderAtRowStart &&\n props.renderAtRowStart(calculateRowFromIndex(index, props.cellsInRow).row)}\n <li\n className={classNames(\n 'Grid-cell',\n props.noDefaultClasses ? null : `u-size1of${props.cellsInRow}`,\n props.itemClasses,\n )}\n >\n {props.renderItem(item, index)}\n </li>\n\n {((index + 1) % props.cellsInRow === 0 || index === array.length - 1) && // append block after full row end OR after last item in a partially empty row\n props.renderAtRowEnd &&\n props.renderAtRowEnd(calculateRowFromIndex(index, props.cellsInRow).row)}\n </React.Fragment>\n ))}\n {props.renderLast && props.renderLast()}\n </ul>\n );\n};\n\nexport default React.forwardRef(ItemGrid);\n","import { Button, ChipIconButton, Icon, OverlayLoader } from '@coop/components';\nimport { CheckmarkIcon, CloseIcon, PaperIcon } from '@coop/icons';\nimport type { FC } from 'react';\n\nimport { Modal } from '../../common/components/atoms/Modal';\nimport type { ShoppingListModel } from '../models';\n\ninterface AddToShoppingListModalProps {\n isOpen: boolean;\n close: () => void;\n lists?: ShoppingListModel[];\n onAddToNewListClick: () => void;\n onAddClick: (item: ShoppingListModel) => void;\n onRemoveClick: (item: ShoppingListModel) => void;\n isLoadingLists: boolean;\n isItemAdded: (item: ShoppingListModel) => boolean;\n notification?: React.ReactNode;\n}\n\nconst AddToShoppingListModal: FC<React.PropsWithChildren<AddToShoppingListModalProps>> = ({\n isOpen,\n close,\n lists,\n isLoadingLists,\n isItemAdded,\n onAddToNewListClick,\n onAddClick,\n onRemoveClick,\n notification,\n}) => {\n return (\n <Modal\n isOpen={isOpen}\n close={close}\n additionalClasses=\"u-size1of1 u-sm-size2of3 u-lg-size1of2 u-xlg-size1of3\"\n >\n <div\n className=\"u-bgWhite u-paddingAmd u-borderRadius8 u-posRelative u-overflowAuto mixinScroll\"\n style={{ minHeight: 500, maxHeight: 500 }}\n >\n {notification}\n <OverlayLoader isLoading={isLoadingLists} />\n <div>\n <h2 className=\"Heading Heading--h4 u-textLarge\">Lägg till i inköpslista</h2>\n <div className=\"FlyIn-close\">\n <ChipIconButton\n theme=\"whiteGreen\"\n onClick={close}\n size={32}\n icon={CloseIcon}\n label=\"Stäng\"\n />\n </div>\n </div>\n\n <ul className=\"u-paddingAz u-listStyleTypeNone\">\n {lists?.map((list) => {\n const isAdded = isItemAdded(list);\n return (\n <li key={list.ID}>\n <button\n type=\"button\"\n className=\"u-size1of1 u-greenHover u-flex u-flexAlignCenter u-borderBottom u-paddingBsm u-marginBsm\"\n onClick={() =>\n isAdded ? onRemoveClick(list) : onAddClick(list)\n }\n >\n <Icon icon={PaperIcon} color=\"green\" width={16} height={16} />\n <span className=\"u-marginLsm\">{list.Name}</span>\n {isAdded && (\n <div className=\"u-marginLauto\">\n <Icon\n icon={CheckmarkIcon}\n color=\"green\"\n width={24}\n height={24}\n />\n </div>\n )}\n </button>\n </li>\n );\n })}\n </ul>\n <div className=\"u-flex u-flexJustifyCenter\">\n <Button size={40} theme=\"primary\" onClick={onAddToNewListClick}>\n + Lägg till i ny lista\n </Button>\n </div>\n </div>\n </Modal>\n );\n};\n\nexport default AddToShoppingListModal;\n","import { Notification } from '@coop/components';\nimport type { FC } from 'react';\nimport { useEffect, useState } from 'react';\n\ninterface AddOfferToShoppingListNotificationsProps {\n error: string;\n reset: () => void;\n addOfferStatus: string;\n removeOfferStatus: string;\n}\n\nconst AddOfferToShoppingListNotifications: FC<\n React.PropsWithChildren<AddOfferToShoppingListNotificationsProps>\n> = ({ error, reset, addOfferStatus, removeOfferStatus }) => {\n const [showAddSuccessNotice, setShowAddSuccessNotice] = useState(false);\n const [showRemoveSuccessNotice, setShowRemoveSuccessNotice] = useState(false);\n\n useEffect(() => {\n if (addOfferStatus === 'success') {\n setShowAddSuccessNotice(true);\n reset();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [addOfferStatus]);\n\n useEffect(() => {\n if (removeOfferStatus === 'success') {\n setShowRemoveSuccessNotice(true);\n reset();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [removeOfferStatus]);\n\n return (\n <>\n <Notification show={error?.length > 0} type=\"alert\" close={reset} message={error} />\n <Notification\n show={showAddSuccessNotice}\n type=\"success\"\n close={() => setShowAddSuccessNotice(false)}\n message=\"Du la till erbjudandet i inköpslistan!\"\n />\n <Notification\n show={showRemoveSuccessNotice}\n type=\"success\"\n close={() => setShowRemoveSuccessNotice(false)}\n message=\"Du tog bort erbjudandet från inköpslistan!\"\n />\n </>\n );\n};\n\nexport default AddOfferToShoppingListNotifications;\n","import type { FC } from 'react';\nimport { useEffect } from 'react';\n\nimport { ga4ShoppingListTracking } from '../../../common/tracking/ga4/shoppingList';\nimport AddToShoppingListModal from '../../base/AddToShoppingListModal';\nimport useAddOfferToShoppingList from '../../hooks/useAddOfferToShoppingList';\nimport type { OfferType, ShoppingListModel } from '../../models';\nimport AddOfferToShoppingListNotifications from './AddOfferToShoppingListNotifications';\n\ninterface AddOfferModalProps {\n isOpen: boolean;\n offerId: string;\n offerType: OfferType;\n close: () => void;\n}\n\nconst AddOfferToShoppingListModal: FC<React.PropsWithChildren<AddOfferModalProps>> = ({\n isOpen,\n close,\n offerId,\n offerType,\n}) => {\n const {\n fetchListsDispatcher: { execute: fetchLists, result: lists, isLoading: isLoadingLists },\n addOfferToNewListDispatcher: {\n execute: addOfferToNewList,\n error: addOfferToNewListError,\n reset: addOfferToNewListReset,\n },\n addOfferToListDispatcher: {\n execute: addOfferToList,\n status: addOfferStatus,\n error: addOfferError,\n reset: addOfferReset,\n },\n removeOfferFromListDispatcher: {\n execute: removeOfferFromList,\n status: removeOfferStatus,\n error: removeOfferError,\n reset: removeOfferReset,\n },\n } = useAddOfferToShoppingList();\n\n useEffect(() => {\n const noLists = lists === undefined;\n if (noLists && isOpen) {\n fetchLists();\n }\n }, [fetchLists, lists, isOpen]);\n\n const onAddOfferToNewListClick = () => {\n ga4ShoppingListTracking.create();\n ga4ShoppingListTracking.add();\n addOfferToNewList(offerId, offerType);\n };\n\n const onAddOfferToList = (list: ShoppingListModel) => {\n ga4ShoppingListTracking.add();\n addOfferToList(list, offerId, offerType);\n };\n\n const onRemoveOfferClick = (list: ShoppingListModel) => {\n ga4ShoppingListTracking.remove();\n removeOfferFromList(list, offerId);\n };\n\n return (\n <AddToShoppingListModal\n isOpen={isOpen}\n close={close}\n lists={lists}\n isLoadingLists={isLoadingLists}\n onAddToNewListClick={onAddOfferToNewListClick}\n isItemAdded={(list) =>\n !!list.Products?.filter((p) => p.offerIdentifier === offerId.toString())?.length\n }\n onAddClick={onAddOfferToList}\n onRemoveClick={onRemoveOfferClick}\n notification={\n <AddOfferToShoppingListNotifications\n error={\n addOfferError?.friendlyMessage ||\n removeOfferError?.friendlyMessage ||\n addOfferToNewListError?.friendlyMessage\n }\n reset={() => {\n addOfferReset();\n removeOfferReset();\n addOfferToNewListReset();\n }}\n addOfferStatus={addOfferStatus}\n removeOfferStatus={removeOfferStatus}\n />\n }\n />\n );\n};\n\nexport default AddOfferToShoppingListModal;\n","import { getAuthToken } from '../../common/api/auth/getAuthToken';\nimport { useAsyncDispatcher } from '../../common/hooks/useAsyncDispatcher';\nimport shoppingListApi from '../api/shoppingListApi';\nimport type { OfferType, ShoppingListModel } from '../models';\nimport { getDefaultListName } from '../utils';\n\nconst useAddOfferToShoppingList = () => {\n const fetchListsDispatcher = useAsyncDispatcher(\n async () => {\n const spaToken = await getAuthToken();\n return shoppingListApi.getLists(spaToken.token);\n },\n { keepPreviousResult: true },\n );\n\n const removeOfferFromListDispatcher = useAsyncDispatcher(\n async (list: ShoppingListModel, _offerId: string) => {\n const spaToken = await getAuthToken();\n\n await shoppingListApi.list.offer.remove({\n token: spaToken.token,\n listId: list.ID,\n offerId: _offerId,\n });\n\n fetchListsDispatcher.execute();\n },\n );\n\n const addOfferToListDispatcher = useAsyncDispatcher(\n async (list: ShoppingListModel, _offerId: string, _offerType: OfferType) => {\n const spaToken = await getAuthToken();\n const currentList = await shoppingListApi.list.get(spaToken.token, list.ID);\n\n await shoppingListApi.list.offer.add({\n token: spaToken.token,\n listId: currentList.ID,\n offerId: _offerId,\n offerType: _offerType,\n });\n\n fetchListsDispatcher.execute();\n },\n );\n\n const addOfferToNewListDispatcher = useAsyncDispatcher(\n async (_offerId: string, _offerType: OfferType) => {\n const spaToken = await getAuthToken();\n const createRequest = { name: getDefaultListName() };\n const newList = await shoppingListApi.list.create(spaToken.token, createRequest);\n await addOfferToListDispatcher.execute(newList, _offerId, _offerType);\n },\n );\n\n return {\n fetchListsDispatcher,\n addOfferToListDispatcher,\n removeOfferFromListDispatcher,\n addOfferToNewListDispatcher,\n };\n};\n\nexport default useAddOfferToShoppingList;\n","import { Button, Icon } from '@coop/components';\nimport { PaperIcon } from '@coop/icons';\nimport type { FC } from 'react';\nimport { useMemo } from 'react';\nimport _ from 'underscore';\n\nimport useModal from '../../../common/hooks/useModal';\nimport { ShoppingListType } from '../../../common/store/structureDefinitions/modalState';\nimport type { OfferType } from '../../models';\nimport styles from './AddOfferToShoppingListButton.module.less';\nimport AddOfferToShoppingListModal from './AddOfferToShoppingListModal';\n\nexport interface AddOfferToShoppingListButtonProps {\n offerId: string;\n offerType: OfferType;\n}\n\nconst AddOfferToShoppingListButton: FC<\n React.PropsWithChildren<AddOfferToShoppingListButtonProps>\n> = ({ offerId, offerType }) => {\n const uniqueIdForShoppinglist = useMemo(() => _.uniqueId('Shoppinglist-'), []);\n\n const { isOpen, close, open } = useModal(\n ShoppingListType.addToShoppingList,\n undefined,\n uniqueIdForShoppinglist,\n );\n\n return (\n <>\n <AddOfferToShoppingListModal\n isOpen={isOpen}\n close={close}\n offerId={offerId}\n offerType={offerType}\n />\n\n <Button\n rightSlot={<Icon icon={PaperIcon} width={16} height={16} />}\n onClick={open}\n theme=\"primaryOutline\"\n fullWidth\n className={styles.ShoppingListButton}\n >\n Lägg till lista{' '}\n </Button>\n </>\n );\n};\n\nexport default AddOfferToShoppingListButton;\n","// extracted by mini-css-extract-plugin\nexport default {\"ShoppingListButton\":\"KBXV_tz2\"};","import type { ApiDkeStoreOffer } from '../../../../common/api/dke/dkeModels';\nimport type { SvgIcons } from './StoreOfferTeaser';\n\nexport const resolvePersonalText = (discountValue: number, isPercentageDiscount: boolean) => {\n if (!discountValue) {\n return null;\n }\n\n return isPercentageDiscount ? 'rabatt' : null;\n};\n\nexport const formatOrdinaryPriceText = (\n categoryGroup: string,\n roleDescriptions: string[],\n ordinaryPrice: string,\n unit: string | undefined,\n formattedComparativePriceText: string,\n) => {\n if (categoryGroup === 'Nonfood' && roleDescriptions?.includes('OP') && ordinaryPrice)\n return `Jfr-pris ${ordinaryPrice} ${unit ? `/${unit}` : ''}`;\n\n if (Number(ordinaryPrice) === 0)\n return categoryGroup !== 'Nonfood'\n ? `Jfr-pris ${formattedComparativePriceText}`\n : `Jfr-pris ${formattedComparativePriceText}`;\n return categoryGroup !== 'Nonfood'\n ? `Jfr-pris ${formattedComparativePriceText}`\n : `Ord. pris ${ordinaryPrice} ${unit ? `/${unit}` : ''}`;\n};\n\nexport const configuringCssIcons = (roleDescriptions: string[]) => {\n const arr: { key: string; value: string }[] = [];\n let household = true;\n\n if (roleDescriptions.includes('SE')) {\n arr.push({ value: 'shopexpress', key: 'ShopExpress' });\n return { arr, household };\n }\n\n roleDescriptions.forEach((role) => {\n if (role === 'SE') {\n arr.push({ value: 'shopexpress', key: 'ShopExpress' });\n }\n if (role === 'MF') {\n household = false;\n arr.push({\n value: 'medlem',\n key: 'Medlemspris',\n });\n }\n if (role === 'KP') arr.push({ value: 'kanon', key: 'Kanonpris' });\n });\n return { arr, household };\n};\n\nexport const resolveDiscountFullText = (\n discountValue?: number,\n isItemDiscount?: boolean,\n minimumAmount?: number,\n) => {\n if (!discountValue || !isItemDiscount || !minimumAmount || minimumAmount < 2) {\n return undefined;\n }\n\n return `KÖP ${minimumAmount} BETALA FÖR ${discountValue}`;\n};\n\nexport const isFromSweden = (otherLogos: string[]) => {\n return otherLogos.map((logo) => {\n if (logo === 'Svensk kött' || logo === 'Svensk fågel') {\n return true;\n }\n return false;\n });\n};\n\nexport const isBusinessEcommerceFuc = (isBusinessEcommerce: boolean) => {\n if (isBusinessEcommerce) {\n return 'order';\n }\n return 'hushåll';\n};\n\nexport const splashHasLongValueOnly = (unifiedSplash?: {\n prefix?: string;\n value: string;\n decimal?: string;\n suffix?: string;\n unit?: string;\n}) => {\n if (unifiedSplash) {\n return (\n !unifiedSplash.prefix &&\n !unifiedSplash.suffix &&\n !unifiedSplash.unit &&\n !unifiedSplash.decimal &&\n unifiedSplash.value &&\n unifiedSplash.value.length > 10\n );\n }\n\n return false;\n};\nexport const svgIconsForClusterOffers = (offers: ApiDkeStoreOffer[]) => {\n const arr: SvgIcons[] = [];\n const uniqueArray = offers.reduce((acc: ApiDkeStoreOffer[], current: ApiDkeStoreOffer) => {\n if (!acc.some((item) => item.ageRestriction === current.ageRestriction)) {\n acc.push(current);\n }\n return acc;\n }, []);\n uniqueArray.forEach((offer) => {\n if (offer.ageRestriction === '15-års åldersgräns' || offer.ageRestriction === '15') {\n arr.push({\n url: '/Assets/Icons/badge-15arsgrans.svg',\n alt: 'Åldersgräns: 15 år',\n });\n }\n if (offer.ageRestriction === '18-års åldersgräns' || offer.ageRestriction === '18') {\n arr.push({\n url: '/Assets/Icons/badge-18arsgrans.svg',\n alt: 'Åldersgräns: 18 år',\n });\n }\n });\n return arr;\n};\n","/* eslint-disable react/jsx-props-no-spreading */\nimport classNames from 'classnames';\nimport type { FC } from 'react';\n\nimport CloudinaryImage from '../../../common/components/atoms/CloudinaryImage';\nimport RawHtml from '../../../common/components/atoms/RawHtml';\nimport { useIsMobile } from '../../../common/components/atoms/ResponsiveBreakpoints';\nimport Splash from '../../../common/components/atoms/Splash';\nimport type { DealScoringType } from '../api/models';\nimport styles from './Offer.module.less';\nimport { splashHasLongValueOnly } from './StoreOfferTeaser/StoreOfferTeaser.utils';\n\ninterface OfferBlockProps {\n heading: string;\n descriptionHeader: string;\n descriptionBody: string;\n descriptionFooter: string;\n footerValidityEndDate?: string;\n footerValidityStore?: string;\n footerLimitationText?: string;\n imageUrl: string;\n unifiedSplash?: {\n prefix?: string;\n value: string;\n decimal?: string;\n suffix?: string;\n unit?: string;\n tag?: string;\n };\n campaignClass?: string;\n dealType?: DealScoringType;\n innerProps?: JSX.Element;\n offerName?: string;\n isActivatable?: boolean;\n actionSlot?: React.ReactNode;\n}\n\nconst Offer: FC<React.PropsWithChildren<OfferBlockProps>> = ({\n heading,\n descriptionHeader,\n descriptionBody,\n footerValidityEndDate,\n footerValidityStore,\n footerLimitationText,\n imageUrl,\n unifiedSplash,\n campaignClass,\n dealType,\n isActivatable,\n actionSlot,\n}) => {\n const showFrame = campaignClass?.toUpperCase() === 'MEMBERSTORE' && !isActivatable;\n const isGift = dealType?.toUpperCase() === 'GIFT';\n const isStudentOffer = dealType?.toUpperCase() === 'STUDENT';\n const isValueCheck = dealType?.toUpperCase() === 'KVITTORABATT';\n\n const badge = getDealType(dealType);\n const isMobile = useIsMobile();\n\n const splashShowAllTextOnly = splashHasLongValueOnly(unifiedSplash);\n\n return (\n <article className=\"u-size1of1\">\n <div\n className={classNames(\n 'ItemTeaser-content u-borderRadius20',\n styles.TeaserContainer,\n )}\n >\n <div\n className={classNames(isStudentOffer ? styles.OutlineStudent : styles.Outline)}\n />\n <div\n className={classNames(\n 'ItemTeaser-media',\n styles.AllOffersBorder,\n !isMobile && 'ItemTeaser-media-cards',\n styles.Offer,\n isGift && styles.Gift,\n isStudentOffer && styles.Student,\n isValueCheck && styles.ValueCheck,\n )}\n >\n <div className=\"ItemTeaser-image ItemTeaser-image--flexCenter\">\n <CloudinaryImage\n url={imageUrl}\n cssClass={styles.Image}\n name=\"Produktbild\"\n transform=\"e_sharpen,fl_clip,fl_progressive,q_auto,f_auto,c_lpad,g_center,h_200,w_200\"\n retinaTransform=\"e_sharpen,fl_clip,fl_progressive,q_auto,f_auto,c_lpad,g_center,h_200,w_200\"\n />\n </div>\n {(unifiedSplash || badge) && (\n <div className=\"ItemTeaser-promos\">\n {unifiedSplash && unifiedSplash.value && !showFrame && (\n <div className={classNames('ItemTeaser-splash', styles.Splash)}>\n <Splash\n type={isMobile ? 'default' : 'medium'}\n allText={splashShowAllTextOnly ? unifiedSplash.value : ''}\n price={!splashShowAllTextOnly ? unifiedSplash.value : ''}\n prefix={unifiedSplash.prefix}\n decimal={unifiedSplash.decimal}\n unit={unifiedSplash.unit}\n suffix={unifiedSplash.suffix}\n />\n </div>\n )}\n {badge && (\n <img\n className=\"ItemTeaser-badge u-marginLsm u-marginTsm\"\n src={`/Assets/Icons/${badge.url}`}\n alt={badge.description}\n />\n )}\n </div>\n )}\n {isGift && (\n <div className=\"ItemTeaser-promos\">\n <img\n className={classNames(styles.GiftImage, 'ItemTeaser-splash')}\n src=\"/Assets/Images/gift-splash.png\"\n alt=\"gift splash\"\n />\n </div>\n )}\n </div>\n\n {isStudentOffer && (\n <div className={classNames(styles.BorderBadge)}>\n <div\n className={classNames(\n styles.BorderBadgeInner,\n 'u-textFamilySecondary u-colorGreenDark',\n )}\n >\n STUDENT\n </div>\n </div>\n )}\n <div className=\"ItemTeaser-info\">\n <h3\n className={classNames(\n 'ItemTeaser-heading u-textBreakWord u-marginTsm u-textWeightBold u-textCenter',\n isMobile ? 'u-textMedium' : 'u-textXLarge',\n )}\n >\n {heading}\n </h3>\n <div className=\"ItemTeaser-description u-textCenter u-colorBlack u-textSmall\">\n {descriptionHeader && (\n <span className=\"ItemTeaser-brand\">{descriptionHeader}. </span>\n )}\n <RawHtml\n // eslint-disable-next-line react/jsx-props-no-spreading\n renderWrapper={(props) => <span {...props} />}\n html={descriptionBody}\n />{' '}\n </div>\n <div className=\"u-marginTsm\">\n {footerValidityEndDate && (\n <span\n className={classNames(\n isActivatable ? 'u-colorBlack' : 'u-colorRed1',\n ' u-block u-textXSmall u-textCenter',\n )}\n >\n {footerValidityEndDate}\n </span>\n )}\n {footerValidityStore && (\n <span\n className={classNames(\n isActivatable ? 'u-colorBlack' : 'u-colorRed1',\n ' u-block u-textXSmall u-textCenter',\n )}\n >\n {footerValidityStore}\n </span>\n )}\n {footerLimitationText && (\n <span\n className={classNames(\n isActivatable ? 'u-colorBlack' : 'u-colorRed1',\n ' u-block u-textXSmall u-textCenter',\n )}\n >\n {footerLimitationText}\n </span>\n )}\n </div>\n </div>\n {actionSlot}\n </div>\n </article>\n );\n};\n\nconst getDealType = (dealType?: string) => {\n if (!dealType) return null;\n\n switch (dealType) {\n case 'WYML':\n case 'FHIH':\n case 'SA':\n case 'UTFV':\n case 'BKH':\n case 'BKP':\n case 'BKE':\n case 'BKG':\n return {\n url: 'badge-tips-green-bubble.svg',\n description: 'En vara du kanske vill prova',\n } as const;\n case 'BFH':\n case 'BFP':\n case 'BFE':\n case 'BFG':\n case 'WYL':\n return { url: 'badge-favorit.svg', description: 'En vara du brukar köpa' } as const;\n case 'NYA':\n case 'BRON':\n case 'GULD':\n return {\n url: 'badge-nyhet.svg',\n description: 'En ny vara vi vill visa för dig',\n } as const;\n\n case 'MYCHOICE':\n default:\n break;\n }\n return undefined;\n};\n\nexport default Offer;\n","import { Button, Icon, Notification } from '@coop/components';\nimport { PlusIcon } from '@coop/icons';\nimport type { FC } from 'react';\nimport { useState } from 'react';\n\nimport adobeCampaignFlow from '../../../../common/flow/adobeCampaignFlow';\nimport type { DealScoringType } from '../../api/models';\nimport Offer from '../Offer';\nimport styles from './ActivatableOffer.module.less';\n\ninterface OfferBlockProps {\n heading: string;\n descriptionHeader: string;\n descriptionBody: string;\n descriptionFooter: string;\n footerValidityEndDate: string;\n footerValidityStore: string;\n footerLimitationText: string;\n imageUrl: string;\n unifiedSplash?: {\n prefix?: string;\n value: string;\n suffix?: string;\n decimal?: string;\n unit?: string;\n tag?: string;\n };\n campaignClass?: string;\n dealType: DealScoringType;\n status?: string;\n propositionId: number;\n /** used for authentication with neolane recipientid instead of accesstoken */\n neoId?: string;\n isActivatable?: boolean;\n offerId: number;\n}\n\nenum OfferState {\n presented,\n activating,\n showSuccess,\n done,\n error,\n}\n\nconst ActivatableOffer: FC<React.PropsWithChildren<OfferBlockProps>> = ({\n propositionId,\n heading,\n descriptionHeader,\n descriptionBody,\n descriptionFooter,\n footerValidityEndDate,\n footerValidityStore,\n footerLimitationText,\n imageUrl,\n unifiedSplash,\n campaignClass,\n dealType,\n neoId,\n isActivatable,\n}) => {\n const [state, setState] = useState<OfferState>(OfferState.presented);\n\n const handleActivate = async (_propositionId: number, _neoId?: string) => {\n try {\n setState(OfferState.activating);\n if (!_neoId) {\n await adobeCampaignFlow.activateProposition(_propositionId);\n } else {\n await adobeCampaignFlow.activatePropositionByNeoId(_neoId, _propositionId);\n }\n setState(OfferState.showSuccess);\n } catch {\n setState(OfferState.error);\n }\n };\n\n // let isActivated = isActivatable && (state === OfferState.done || state === OfferState.showSuccess);\n let isActivated = isActivatable;\n\n if (state === OfferState.done || state === OfferState.showSuccess) {\n isActivated = false;\n }\n\n // Erbjudandet har lagts till.\n return (\n <div\n className={`u-size1of1 u-flex ${\n state === OfferState.done || state === OfferState.showSuccess ? '' : 'is-disabled'\n }`}\n >\n <Notification\n type=\"success\"\n message=\"Erbjudandet är laddat på ditt kort!\"\n close={() => {\n setState(OfferState.done);\n }}\n show={state === OfferState.showSuccess}\n />\n <Notification\n message=\"Det gick inte att aktivera ditt erbjudande.\"\n close={() => {\n setState(OfferState.presented);\n }}\n show={state === OfferState.error}\n type=\"alert\"\n />\n <Offer\n heading={heading}\n descriptionHeader={descriptionHeader}\n descriptionBody={descriptionBody}\n descriptionFooter={descriptionFooter}\n footerValidityEndDate={footerValidityEndDate}\n footerValidityStore={footerValidityStore}\n footerLimitationText={footerLimitationText}\n imageUrl={imageUrl}\n unifiedSplash={unifiedSplash}\n campaignClass={campaignClass}\n dealType={dealType}\n isActivatable={isActivated}\n actionSlot={\n <div className=\"u-marginHmd u-marginBmd u-flex u-flexJustifyCenter u-zIndex1\">\n <Button\n rightSlot={<Icon icon={PlusIcon} width={16} height={16} />}\n onClick={() => handleActivate(propositionId, neoId)}\n isLoading={state === OfferState.activating}\n theme=\"primary\"\n fullWidth\n className={styles.ActivatableButton}\n >\n Aktivera\n </Button>\n </div>\n }\n />\n </div>\n );\n};\n\nexport default ActivatableOffer;\n","// extracted by mini-css-extract-plugin\nexport default {\"ActivatableButton\":\"JnwzQtOB\"};","import classNames from 'classnames';\nimport type { FC } from 'react';\n\nimport styles from './Offer.module.less';\n\nconst PersonalOfferProductCard: FC<React.PropsWithChildren<unknown>> = () => {\n return (\n <div className=\"Grid-cell\">\n <div\n className={classNames(\n 'ItemTeaser-content ItemTeaser-personal-offers-card u-borderRadius20',\n styles.PersonalOffersCard,\n )}\n >\n <h2 className=\"u-textFamilySecondary u-paddingHxlg u-colorWhite u-textWeightBold u-textCenter u-text4XLarge\">\n Utvalda just för dig!\n </h2>\n </div>\n </div>\n );\n};\n\nexport default PersonalOfferProductCard;\n","// extracted by mini-css-extract-plugin\nexport default {\"OfferContainer\":\"c9eSx17S\",\"OfferTeaser-UsedOfferBottomContainer\":\"TPPfWxE8\",\"OfferTeaser-ButtonWrapper\":\"jlrN1QRk\",\"Tabs\":\"EYOyLhzz\",\"TabContainer\":\"QT5CgNOp\",\"TabsActive\":\"FSKoDwUv\",\"ResponsivePadding\":\"CtS6AXVA\",\"Form-summary\":\"E5CEhc7c\",\"Form-summary-icon\":\"wBEhOUAT\",\"Form-summary-content\":\"jbICO0YX\"};","import { Icon, Loader } from '@coop/components';\nimport { Info1Icon } from '@coop/icons';\nimport classNames from 'classnames';\nimport type { FC } from 'react';\nimport { useMemo } from 'react';\n\nimport { appConfig } from '../../../../../appConfig';\nimport { CoopSwiperBreakpoints } from '../../../../../utility/coopSwiperBreakpoints';\nimport type { TabItem } from '../../../../common/components/molecules/TabSwitcher';\nimport { TabSwitcher } from '../../../../common/components/molecules/TabSwitcher';\nimport { getNeoId } from '../../../../common/utils/neoIdUtils';\nimport ItemGrid from '../../../../ecommerce/components/ItemGrid/ItemGrid';\nimport { useBreakpointsSidebar } from '../../../../ecommerce/hooks/useBreakpoints';\nimport AddOfferToShoppingListButton from '../../../../shoppingList/components/offer/AddOfferToShoppingListButton';\nimport type { OfferPropositionDto } from '../../api/models';\nimport { useOfferPropositions } from '../../hooks/useOfferPropositions';\nimport ActivatableOffer from '../ActivatableOffer/ActivatableOffer';\nimport Offer from '../Offer';\nimport PersonalOfferProductCard from '../PersonalOfferProductCard';\nimport styles from './OfferPropositionsListBlock.module.scss';\n\ninterface OfferPropositionsListBlockProps {\n ledgerId?: string;\n neoId?: string;\n}\n\nconst OfferPropositionsListBlock: FC<React.PropsWithChildren<OfferPropositionsListBlockProps>> = ({\n ledgerId,\n neoId,\n}) => {\n const { isLoading, error, data: offers } = useOfferPropositions(neoId, ledgerId);\n\n if (isLoading) {\n <Loader theme=\"green\" />;\n }\n\n // User might not be a member, then AC returns with access denied/forbidden for personal offers\n if (error && (error.code === '401' || error.code === '403')) {\n return null;\n }\n\n if (error) {\n return (\n <div className={classNames(styles['Form-summary'], 'u-marginTsm')}>\n <div className={styles['Form-summary-icon']}>\n <Icon icon={Info1Icon} width={20} height={20} />\n </div>\n <div className={styles['Form-summary-content']}>\n <strong>Dina personliga erbjudanden</strong>\n <span>\n Just nu kan vi inte visa dina personliga erbjudanden på grund av ett\n tekniskt fel. Försök igen senare.\n </span>\n </div>\n </div>\n );\n }\n if (error || !offers) {\n return null;\n }\n const currentOffers = offers.filter((offer: OfferPropositionDto) => offer.remainingUse !== 0);\n const usedOffers = offers.filter((offer: OfferPropositionDto) => offer.remainingUse === 0);\n const items: TabItem[] = [\n {\n id: '1',\n name: `Aktuella <span>${currentOffers.length}</span>`,\n component: (\n <div\n className={classNames(\n 'u-paddingB u-bgGreenLight2',\n styles.ResponsivePadding,\n styles.OfferContainer,\n )}\n >\n {!currentOffers || currentOffers.length === 0 ? (\n <div className=\"u-flex u-flexDirectionColumn u-flexAlignCenter u-paddingVxxlg\">\n <div>\n <img\n src=\"/Assets/Images/gift-boxes.svg\"\n alt=\"gift boxes\"\n width=\"175px\"\n />\n </div>\n <div className={styles['OfferTeaser-noOffers--text']}>\n <h3 className=\"u-textWeightBold u-textCenter\">\n Du har inga personliga erbjudanden just nu\n </h3>\n </div>\n </div>\n ) : (\n <Offers\n neoId={neoId}\n offers={currentOffers}\n showProductCard\n showOneRow={false}\n />\n )}\n </div>\n ),\n },\n {\n id: '2',\n name: `Använda <span>${usedOffers.length}</span>`,\n component: (\n <div\n className={classNames(\n 'u-paddingB u-bgGreenLight2 u-borderRadius20',\n styles.ResponsivePadding,\n styles.OfferContainer,\n )}\n >\n {usedOffers.length === 0 ? (\n <div className=\"u-bgWhite u-textCenter u-paddingVlg u-borderRadius20 u-paddingHsm\">\n <h3 className=\"u-textWeightBold u-marginBxxsm\">Tomt!</h3>\n <p className=\"u-marginTz\">\n Senaste månaden har ingen i ditt hushåll tagit del av något\n personligt erbjudande.\n </p>\n </div>\n ) : (\n <Offers\n neoId={neoId}\n offers={usedOffers}\n showProductCard\n showOneRow={false}\n />\n )}\n </div>\n ),\n },\n ];\n\n return (\n <>\n <div className=\"Grid-cell u-sizeFull\">\n <h2 className=\"u-paddingT u-marginBz u-textCenter u-sm-text4XLarge u-text2XLarge u-textFamilySecondary u-colorGreenDark u-textWeightBold u-sizeFull\">\n Dina personliga erbjudanden\n </h2>\n <p className=\"u-textCenter u-sm-textXLarge u-textSizeMedium u-marginTxxsm u-marginBlg\">\n Personliga butikserbjudanden som du kan nyttja i ditt närmsta Coop\n </p>\n </div>\n <TabSwitcher\n align=\"center\"\n items={items}\n initialActiveId=\"1\"\n itemClasses={(isActive) =>\n isActive ? `${styles.TabsActive} ${styles.Tabs}` : styles.Tabs\n }\n forcePanelRerenderOnTabChange\n hidePanelsWithCss\n noTabIndicator\n containerClasses={styles.TabContainer}\n />\n </>\n );\n};\n\nconst OfferPropositionsListBlockWrapper: FC<\n React.PropsWithChildren<OfferPropositionsListBlockProps>\n> = (props) => {\n const neoId = (!appConfig.coopUserSettings.isMedmeraCustomer && getNeoId()) || undefined;\n\n if (!appConfig.coopUserSettings.isMedmeraCustomer && !neoId) {\n return null;\n }\n\n return <OfferPropositionsListBlock ledgerId={props.ledgerId} neoId={neoId} />;\n};\n\nexport default OfferPropositionsListBlockWrapper;\ninterface OffersProps {\n offers?: OfferPropositionDto[];\n neoId?: string;\n showProductCard: boolean;\n showOneRow?: boolean;\n ledgerId?: string;\n}\nexport const Offers: FC<React.PropsWithChildren<OffersProps>> = (props) => {\n const { cellsInRow } = useBreakpointsSidebar(CoopSwiperBreakpoints.AREA_PERSONAL_OFFERS_LIST);\n const sortedItems = useMemo(\n () =>\n props.offers && [\n ...props.offers.sort((a, b) => {\n if (a.status === b.status) {\n return a.id < b.id ? 1 : -1;\n }\n return a.status < b.status ? 1 : -1;\n }),\n ],\n [props.offers],\n );\n\n const itemsToDisplay = useMemo(\n () => sortedItems && [{ productCard: props.showProductCard }, ...sortedItems],\n [props.showProductCard, sortedItems],\n );\n if (itemsToDisplay === undefined) {\n return null;\n }\n\n return (\n <ItemGrid\n items={itemsToDisplay}\n gridClasses={`Grid--gutterAxsm ${props.showOneRow && 'Grid--horizontalHidden'} `}\n renderItem={(item, index) => {\n const product = item as { productCard: boolean };\n if (index === 0) {\n if (product.productCard) return <PersonalOfferProductCard />;\n return null;\n }\n const proposition = item as OfferPropositionDto;\n if (proposition.status === '4') {\n return (\n <ActivatableOffer\n propositionId={proposition.id}\n heading={proposition.offer.heading}\n descriptionHeader={proposition.offer.descriptionHeader}\n descriptionBody={proposition.offer.descriptionBody}\n imageUrl={proposition.offer.imageUrl}\n descriptionFooter={proposition.offer.descriptionFooter}\n footerValidityEndDate={proposition.offer.footerValidityEndDate}\n footerValidityStore={proposition.offer.footerValidityStore}\n footerLimitationText={proposition.offer.footerLimitationText}\n unifiedSplash={proposition.offer.unifiedSplash}\n campaignClass={proposition.offer.campaignClass}\n dealType={proposition.offer.dealScoringType}\n neoId={props.neoId}\n status={proposition.status}\n isActivatable={proposition.status === '4'}\n offerId={proposition.offer.id}\n />\n );\n }\n return (\n <Offer\n key={proposition.id}\n heading={proposition.offer.heading}\n descriptionHeader={proposition.offer.descriptionHeader}\n descriptionBody={proposition.offer.descriptionBody}\n imageUrl={proposition.offer.imageUrl}\n descriptionFooter={proposition.offer.descriptionFooter}\n footerValidityEndDate={\n proposition.remainingUse === 1\n ? proposition.offer.footerValidityEndDate\n : undefined\n }\n footerValidityStore={\n proposition.remainingUse === 1\n ? proposition.offer.footerValidityStore\n : undefined\n }\n footerLimitationText={\n proposition.remainingUse === 1\n ? proposition.offer.footerLimitationText\n : undefined\n }\n unifiedSplash={proposition.offer.unifiedSplash}\n campaignClass={proposition.offer.campaignClass}\n dealType={proposition.offer.dealScoringType}\n actionSlot={\n proposition.remainingUse === 0 ? (\n <div\n className={classNames(\n styles['OfferTeaser-UsedOfferBottomContainer'],\n 'u-flex u-flexJustifyCenter u-zIndex1',\n )}\n >\n <h3 className=\"u-textSmall u-sm-textMedium u-textWeightBold u-marginVsm u-textCenter u-marginHxsm\">\n Erbjudandet har redan använts av dig eller ditt hushåll\n </h3>\n </div>\n ) : (\n <div className=\"u-marginHmd u-marginBmd u-flex u-flexJustifyCenter u-zIndex1\">\n <AddOfferToShoppingListButton\n offerId={proposition.offer.id.toString()}\n offerType=\"ADOBE\"\n />\n </div>\n )\n }\n />\n );\n }}\n cellsInRow={cellsInRow}\n itemUniqueKey={(item, index) => {\n if (index === 0) {\n return 'product card';\n }\n const proposition = item as OfferPropositionDto;\n return proposition.id.toString();\n }}\n />\n );\n};\n","import { useQuery } from '@tanstack/react-query';\n\nimport adobeCampaignFlow from '../../../common/flow/adobeCampaignFlow';\nimport { useIsUserAuthenticated } from '../../../common/hooks/useUserProfile';\nimport { storeQueryKeys } from '../../storeQueries';\n\nexport const useOfferPropositions = (\n neoId: string | undefined,\n storeLedgerId: string | undefined,\n) => {\n const isAuthenticated = useIsUserAuthenticated();\n const query = useQuery({\n queryKey: storeQueryKeys.personalOffers(neoId, storeLedgerId),\n queryFn: () => adobeCampaignFlow.getPropositions(neoId, storeLedgerId, isAuthenticated),\n staleTime: Infinity,\n });\n\n return query;\n};\n","export const storeQueryKeys = {\n allStores: ['allStores'],\n storeByLedgerId: (ledgerId: string) => ['store', { ledgerId }],\n storeByPostalCode: (postalCode: string) => ['store', { postalCode }],\n storeDkeOffers: (ledgerId: string) => ['storeDkeOffers', { ledgerId }],\n favoriteStores: ['favoriteStores'],\n storeSearch: (searchTerm: string) => ['storeSearch', { searchTerm }],\n storeDr: (store: string) => ['storeDr', { store }],\n personalOffers: (neoId: string | undefined, ledgerId: string | undefined) => [\n 'PersonalOffers',\n neoId,\n ledgerId,\n ],\n storeTvOffers: ['storeTvOffers'],\n lastVisitedStore: ['lastVisitedStore'],\n};\n","import { appInsights } from '../appInsights';\n\nexport const logPropertyMissing = (err: Error) => {\n appInsights.trackException({\n exception: {\n ...err,\n message: `Runtime property missing. ${err.message}`,\n },\n });\n};\n\nexport const logMissingContext = (contextName: string) => {\n const error = new Error(`React Context missing: ${contextName}`);\n\n appInsights.trackException({\n exception: {\n ...error,\n },\n });\n};\n"],"names":["_path","_extends","Object","assign","bind","n","e","arguments","length","t","r","hasOwnProperty","call","apply","_ref","title","titleId","props","width","height","viewBox","xmlns","id","fillRule","clipRule","d","accessToken","neoId","errorInterceptors","createDirectApiClient","baseURL","coopSettings","serviceAccess","apimBaseUrl","headers","Authorization","btoa","params","CLOUDINARY_ASPECT_RATIO_TRANSFORMS","ratio16By9","transform","cssPadding","FallbackImg","className","cssClass","alt","name","src","fallbackUrl","url","transformedUrl","fileExtenson","undefined","srcSet","retinaTransform","onClick","unloader","loader","lazy","TransformedImage","window","isPrerenderCrawler","wrapperClassName","draggable","ariaLabel","Img","decode","loading","isLoading","state","modal","OverlayLoader","blocking","MODAL_TOGGLE_TIME","siteContext","Modal","children","ModalErrorNotification","FlyIn","alignment","sizePx","FlyInInner","isOpen","afterClose","close","additionalClasses","disableOutsideClick","asideModalContainerStyle","idForDebug","renderTrigger","afterOutsideClick","disableOverlay","initialFocusOnDialog","animation","additionalContainerClasses","blockFlyIn","blocked","outsideClick","getFlyInSizeClass","toggleTime","ErrorGroupNotification","errorGroup","sanitizer","html","renderWrapper","sanitizeOptions","parseScripts","scriptsContainerRef","useHtmlScriptParser","dangerouslySetInnerHTML","__html","toString","style","display","ref","_g","fill","SubPrice","promoComponents","index","promoPrice","decimal","padStart","push","unit","hasDecimalOrUnit","splashClasses","type","price","hasCustomLabel","label","role","Icon","color","icon","prefix","allText","suffix","isMemberPrice","TabNavigationItem","renderTabItem","tab","tabItem","handleClick","handleNavItemClick","isActive","TabPanel","panelClasses","cssClasses","useRef","indicatorRef","tabScrollableRef","activeItemRef","currentLinkRef","tabListRef","onLeftArrowClick","onRightArrowClick","arrowLeftRef","arrowRightRef","onItemClick","renderIndicator","useCallback","current","linkWidth","offsetWidth","linkPos","offsetLeft","left","toggleNavigationButtons","tabScrollable","tabScrollableWidth","clientWidth","tabListWidth","scrollLeft","leftButton","rightButton","centerSelected","tabActive","tabActiveWidth","lastKnownScrollPosition","tabActivePosition","getBoundingClientRect","scroll","behavior","scrollBy","innerWidth","onResize","useLayoutEffect","useElementEvent","preventDefault","scrollWidth","useTabSwitcher","activeTabId","activeTab","items","find","item","renderDefaultTab","handleTabClick","itemClasses","disableTabAnimation","wrapperClasses","align","containerClasses","listClasses","map","additinalClasses","noTabIndicator","renderNextToTabs","hidePanelsWithCss","component","panelSlot","forcePanelRerenderOnTabChange","onMouseOver","onFocus","setActiveTabId","useState","initialActiveId","useEffect","StateContext","createContext","DispatchContext","flyInContextReducer","action","triedToClose","payload","triedToBack","triedToOutsideClick","block","outsideClickBlocked","backBlocked","closeBlocked","FlyInContextProvider","dispatch","useReducer","Provider","value","useFlyInStateContext","useContext","useFlyInDispatchContext","dispatchOrError","unblockAll","blockAll","setTriedToOutsideClick","setTriedToClose","setTriedToBack","unsetTriedToClose","unsetTriedToBack","unsetTriedToOutsideClick","reset","SiteContextType","SiteContext","siteContextType","useIsInsideModalContext","context","SiteContextProvider","useMemo","baseUrl","acErrorInterceptor","error","response","data","status","ensureLedgerIdFormat","storeLedgerId","storeIdString","activateProposition","propositionId","isAuthenticated","appConfig","coopUserSettings","token","spaToken","getAuthToken","post","offerActivated","adobeCampaignApi","activatePropositionByNeoId","getPropositionsHistory","includeRedeemed","urlParams","URLSearchParams","set","get","offerPropositions","setPropositionStatus","getPropositions","identity","useFlyInNavigationCloseInterceptor","useFlyInNavigationBackInterceptor","back","useFlyInNavigationOutsideClickInterceptor","enabled","queue","template","document","createElement","innerHTML","Array","from","getElementsByTagName","script","scriptElement","setAttribute","attributes","forEach","attr","append","createScriptElement","exScript","Promise","resolve","reject","onload","onerror","func","run","useUserProfile","profile","useIsUserAuthenticated","useIsUserAMember","isMember","useIsUserCompany","isCompany","useHasUserAKimCustomerId","hasKimCustomerId","useShoppingUserId","shoppingUserId","selectProfile","user","selectFirstName","firstName","selectLastName","lastName","selectIsAuthenticated","selectIsCompany","selectIsMember","medmeraId","selectHasKimCustomerId","selectShoppingUserId","selectUserId","selectIsEpiUser","isEpiUser","userProfileSelectors","fullName","first","last","initials","charAt","getCloudinaryUrl","altText","getTransformedImageUrl","getFallbackImgUrl","sanitizedUrl","sanitize","imagePath","imageIdentifier","makeImagePathSeoFriendly","makeImageIdentifierSeoFriendly","removeStartingSlash","str","slice","SESSION_STORAGE_NEO_IDENTITY","getNeoId","getParameterByName","storedNeoId","sessionStorage","getItem","setItem","calculateRowFromIndex","elementsInRow","row","Math","trunc","rowPosition","gridClasses","styles","array","cellsInRow","renderAtRowStart","noDefaultClasses","renderItem","renderAtRowEnd","itemUniqueKey","renderLast","lists","isLoadingLists","isItemAdded","onAddToNewListClick","onAddClick","onRemoveClick","notification","minHeight","maxHeight","theme","size","list","isAdded","Name","ID","addOfferStatus","removeOfferStatus","showAddSuccessNotice","setShowAddSuccessNotice","showRemoveSuccessNotice","setShowRemoveSuccessNotice","Notification","show","message","offerId","offerType","fetchListsDispatcher","execute","fetchLists","result","addOfferToNewListDispatcher","addOfferToNewList","addOfferToNewListError","addOfferToNewListReset","addOfferToListDispatcher","addOfferToList","addOfferError","addOfferReset","removeOfferFromListDispatcher","removeOfferFromList","removeOfferError","removeOfferReset","useAsyncDispatcher","shoppingListApi","getLists","keepPreviousResult","_offerId","offer","remove","listId","_offerType","currentList","add","createRequest","newList","create","AddToShoppingListModal","A","Products","filter","p","offerIdentifier","friendlyMessage","uniqueIdForShoppinglist","open","useModal","addToShoppingList","Button","rightSlot","fullWidth","formatOrdinaryPriceText","categoryGroup","roleDescriptions","ordinaryPrice","formattedComparativePriceText","includes","Number","configuringCssIcons","arr","household","key","isBusinessEcommerceFuc","isBusinessEcommerce","splashHasLongValueOnly","unifiedSplash","svgIconsForClusterOffers","offers","reduce","acc","some","ageRestriction","OfferState","heading","descriptionHeader","descriptionBody","footerValidityEndDate","footerValidityStore","footerLimitationText","imageUrl","campaignClass","dealType","isActivatable","actionSlot","showFrame","toUpperCase","isGift","isStudentOffer","isValueCheck","badge","description","getDealType","isMobile","splashShowAllTextOnly","TeaserContainer","OutlineStudent","Outline","AllOffersBorder","Offer","Gift","Student","ValueCheck","CloudinaryImage","Image","Splash","GiftImage","BorderBadge","BorderBadgeInner","RawHtml","descriptionFooter","setState","presented","isActivated","done","showSuccess","handleActivate","_propositionId","_neoId","activating","adobeCampaignFlow","PersonalOffersCard","OfferPropositionsListBlock","ledgerId","useOfferPropositions","Loader","code","currentOffers","remainingUse","usedOffers","ResponsivePadding","OfferContainer","Offers","showProductCard","showOneRow","TabSwitcher","TabsActive","Tabs","TabContainer","isMedmeraCustomer","useBreakpoints","AREA_PERSONAL_OFFERS_LIST","sortedItems","sort","a","b","itemsToDisplay","productCard","ItemGrid","proposition","dealScoringType","AddOfferToShoppingListButton","queryKey","s","personalOffers","queryFn","staleTime","Infinity","storeQueryKeys","allStores","storeByLedgerId","storeByPostalCode","postalCode","storeDkeOffers","favoriteStores","storeSearch","searchTerm","storeDr","store","storeTvOffers","lastVisitedStore","logMissingContext","contextName","Error","trackException","exception"],"sourceRoot":""}