{"version":3,"file":"coopse.script.4632.2904a2e3.chunk.js","mappings":"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","sources":["webpack:///./src/microApps/common/components/atoms/PageHead/PageHead.tsx","webpack:///./src/microApps/common/components/molecules/PageProperties/PageProperties.utils.ts","webpack:///./src/microApps/common/components/molecules/PageProperties/PageProperties.hooks.ts","webpack:///./src/microApps/common/components/molecules/PageProperties/PageProperties.tsx","webpack:///./src/microApps/common/hooks/useDocumentHeadIsPreparedForReactHelmet.ts","webpack:///./src/microApps/common/hooks/useSavedInRef.ts","webpack:///./src/microApps/common/utils/metaUtils.ts","webpack:///./src/microApps/episerver/components/base/EpiContentArea.tsx","webpack:///./src/microApps/ecommerce/components/pages/ecommercePage/EcommercePage.tsx","webpack:///./src/microApps/episerver/components/pages/EpiEcommercePage/EpiEcommercePage.tsx","webpack:///./src/microApps/episerver/epiUtils.ts"],"sourcesContent":["import type { FC } from 'react';\nimport Helmet from 'react-helmet';\n\nimport { isProductionEnvironment } from '../../../../../utility/environments';\nimport useDocumentHeadIsPreparedForReactHelmet from '../../../hooks/useDocumentHeadIsPreparedForReactHelmet';\nimport { getCanonical, getNextPage, getPrevPage } from '../../../utils/metaUtils';\nimport type { PageHeadData, PageHeadPagination } from './PageHead.types';\n\ninterface PageHeadProps {\n data: PageHeadData;\n pagination?: PageHeadPagination;\n}\n\nconst PageHead: FC<React.PropsWithChildren<PageHeadProps>> = (props) => {\n const link = { ...props.data.link };\n const meta = { ...props.data.meta };\n\n if (link && link.canonical) {\n link.canonical = getCanonical({\n path: link.canonical,\n page: props.pagination?.currentPage,\n });\n }\n\n let hasPrevPage = false;\n let hasNextPage = false;\n\n if (props.pagination) {\n hasPrevPage = props.pagination.currentPage !== 1;\n if (props.pagination.totalItems) {\n hasNextPage =\n props.pagination.pageSize * props.pagination.currentPage <=\n props.pagination.totalItems;\n }\n }\n\n if (hasPrevPage && link && props.pagination) {\n link.prevPage = getPrevPage(props.pagination.currentPage);\n }\n\n if (hasNextPage && link && props.pagination) {\n link.nextPage = getNextPage(props.pagination.currentPage);\n }\n\n const linkData =\n link &&\n Object.entries(link).filter(\n (item) => item[1] !== '' && item[1] !== undefined && item[1] !== null,\n );\n\n const metaData =\n meta &&\n Object.entries(meta).filter(\n (item) => item[1] !== '' && item[1] !== undefined && item[1] !== null,\n );\n\n let options: Parameters<typeof useDocumentHeadIsPreparedForReactHelmet>[0] = {\n link: linkData?.map(([key]) => ({ property: 'rel', value: key })),\n };\n\n if (metaData) {\n options = {\n ...options,\n meta: metaData.map(([key]) => ({ property: 'name', value: key })),\n };\n }\n\n const isDocumentHeadReadyForReactHelmet = useDocumentHeadIsPreparedForReactHelmet(options);\n\n return (\n // eslint-disable-next-line react/jsx-no-useless-fragment\n <>\n {isDocumentHeadReadyForReactHelmet && (\n <Helmet>\n {props.data.title && (\n <title>\n {props.data.title +\n (!isProductionEnvironment ? ' - NOT FOR COMMERCIAL USE' : '')}\n </title>\n )}\n {metaData?.map(([property, value]) => (\n <meta key={property} name={property} content={value} />\n ))}\n\n {linkData?.map(([property, value]) => (\n <link key={property} rel={property} href={value} />\n ))}\n\n {props.children}\n </Helmet>\n )}\n </>\n );\n};\n\nexport default PageHead;\n","const defaultQueryKeys = ['page'];\n\n/**\n * Filter current query string to only contain certain keys that are relevant for GA's virtual page view\n * @param queryString The complete query string of a location\n * @param keys List of allowed query string keys\n */\nexport const getFilteredQueryStringForVirtualPageView = (\n queryString: string,\n keys: string[] = [],\n) => {\n const triggerKeys = [...defaultQueryKeys, ...keys];\n\n const searchParams = new URLSearchParams(queryString);\n\n const filteredSearchParams = Array.from(searchParams.entries())\n .filter(([key]) => triggerKeys.includes(key))\n .reduce((acc, [key, value]) => {\n acc.set(key, value.toString());\n return acc;\n }, new URLSearchParams());\n\n return filteredSearchParams.toString();\n};\n","import { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport { useSavedInRef } from '../../../hooks/useSavedInRef';\nimport { useAppDispatch } from '../../../hooks/useThunkDispatch';\nimport { currentPageActions } from '../../../store/slices/currentPage/currentPageSlice';\nimport { getFilteredQueryStringForVirtualPageView } from './PageProperties.utils';\n\ninterface GaVirtualPageParams {\n pageTitle: string;\n canonicalUrl?: string;\n pageTypeName?: string;\n /**\n * Used to specify what key must have been changed in URL's query string to trigger Virtual Page View\n * By defualt, pagination's \"page\" is always a trigger, rest of the triggers are set on page-to-page basis\n */\n queryStringTriggers?: string[];\n}\n\nexport const useGaVirtualPageView = (options?: GaVirtualPageParams) => {\n const { search } = useLocation();\n const dispatch = useAppDispatch();\n\n const canonicalUrl =\n options &&\n options.canonicalUrl &&\n new URL(options.canonicalUrl, window.location.origin).toString();\n\n // used only in dependency array to trigger effect\n const triggerString = getFilteredQueryStringForVirtualPageView(\n search,\n (options && options.queryStringTriggers) || [],\n );\n\n const enable = !!options;\n\n const sendEvent = useSavedInRef(() => {\n if (canonicalUrl) {\n dispatch(\n currentPageActions.setPageGaData({\n canonicalUrl,\n gaPageTypeName: options && options.pageTypeName,\n title: options && options.pageTitle,\n queryString: window.location.search,\n }),\n );\n }\n });\n\n useEffect(() => {\n if (enable && canonicalUrl) {\n sendEvent.current();\n }\n }, [dispatch, enable, canonicalUrl, triggerString, sendEvent]);\n\n return {\n sendEvent,\n };\n};\n","import { type FC, useEffect } from 'react';\n\nimport { useAppDispatch } from '../../../hooks/useThunkDispatch';\nimport { currentPageActions } from '../../../store/slices/currentPage/currentPageSlice';\nimport type { PageHeadData, PageHeadPagination } from '../../atoms/PageHead';\nimport PageHead from '../../atoms/PageHead';\nimport { useGaVirtualPageView } from './PageProperties.hooks';\n\ninterface PagePropertiesProps {\n headData: PageHeadData;\n headPagination?: PageHeadPagination;\n pageTypeNameForAnalytics?: string;\n\n /** @see useGaVirtualPageView comments */\n virtualPageViewQueryStringTriggers?: string[];\n}\n\nconst PageProperties: FC<React.PropsWithChildren<PagePropertiesProps>> = (props) => {\n useGaVirtualPageView({\n canonicalUrl: props.headData.link?.canonical,\n pageTitle: props.headData.title,\n pageTypeName: props.pageTypeNameForAnalytics,\n queryStringTriggers: props.virtualPageViewQueryStringTriggers,\n });\n\n const dispatch = useAppDispatch();\n useEffect(() => {\n dispatch(currentPageActions.setTitle(props.headData.title));\n }, [dispatch, props.headData.title]);\n\n return <PageHead data={props.headData} pagination={props.headPagination} />;\n};\n\nexport default PageProperties;\n","import { useEffect, useState } from 'react';\n\ninterface ElementsToUpdate {\n [tag: string]: { property: string; value: string }[];\n}\n\n/**\n * React helmet only handles elements inside the head tag that contain data-react-helmet=\"true\"\n */\nconst useDocumentHeadIsPreparedForReactHelmet = (elementsToUpdateByTag: ElementsToUpdate) => {\n const [readyForReactHelmet, setReadyForReactHelmet] = useState(false);\n\n const stringifiedElements = JSON.stringify(elementsToUpdateByTag);\n\n useEffect(() => {\n const parsedElementsToUpdateByTag = JSON.parse(stringifiedElements) as ElementsToUpdate;\n if (parsedElementsToUpdateByTag) {\n const childrenOfHead = Array.from(document.getElementsByTagName('head')[0].children);\n\n childrenOfHead.forEach((child) => {\n const tagName = child?.tagName?.toLowerCase();\n\n parsedElementsToUpdateByTag[tagName]?.forEach((tagEl) => {\n if (child.getAttribute(tagEl.property) === tagEl.value) {\n child.setAttribute('data-react-helmet', 'true');\n }\n });\n });\n\n setReadyForReactHelmet(true);\n }\n }, [stringifiedElements]);\n\n return readyForReactHelmet;\n};\n\nexport default useDocumentHeadIsPreparedForReactHelmet;\n","import { useLayoutEffect, useRef } from 'react';\n\nexport const useSavedInRef = <T>(value: T) => {\n const ref = useRef<T>(value);\n\n useLayoutEffect(() => {\n ref.current = value;\n });\n\n return ref;\n};\n","import { addQueryParamsToUrl } from './urlUtils';\n\nexport const getRobotsContent = (noIndex?: boolean, noFollow?: boolean) => {\n if (noIndex && noFollow) {\n return 'NOINDEX,NOFOLLOW';\n }\n\n if (noIndex) {\n return 'NOINDEX';\n }\n\n if (noFollow) {\n return 'NOFOLLOW';\n }\n\n return undefined;\n};\n\nexport const getCanonical = ({ path, page }: { path: string; page?: number }) => {\n const url = new URL(path, window.location.origin).toString();\n\n return Number.isInteger(page) && page !== 1\n ? addQueryParamsToUrl(url, { page: String(page) })\n : url;\n};\n\nexport const getNextPage = (currentPage: number) => {\n const searchParams = new URLSearchParams();\n searchParams.set('page', (currentPage + 1).toString());\n\n const newUrl = `${\n window.location.origin + window.location.pathname\n }?${searchParams.toString()}`;\n\n return newUrl;\n};\n\nexport const getPrevPage = (currentPage: number) => {\n const searchParams = new URLSearchParams();\n const prevPage = currentPage - 1;\n if (prevPage > 1) {\n searchParams.set('page', prevPage.toString());\n } else {\n searchParams.delete('page');\n }\n const stringifiedParams = searchParams.toString();\n\n const newUrl =\n window.location.origin +\n window.location.pathname +\n (stringifiedParams ? `?${searchParams.toString()}` : '');\n\n return newUrl;\n};\n","/* eslint-disable react/no-array-index-key */\n/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/jsx-no-useless-fragment */\nimport classNames from 'classnames';\n\nimport { getCssClassForDisplayOptionWithDefaultTag } from '../../epiUtils';\nimport EpiComponentLoader from './EpiComponentLoader';\n\ninterface EpiContentAreaProps {\n items: ContentAreaItem[];\n epiTag?: DisplayOption;\n itemCssClass?: string;\n /** If you pass renderItem function, you are responsible for generating item itself as well as it's Grid cell.\n * Use contentAreaItem, contentAreaItemClasses parameters to get access to default values for items.\n */\n renderItem?: (\n componentProps: IContent,\n contentAreaItem: ContentAreaItem,\n contentAreaItemClasses: string,\n ) => React.ReactNode;\n}\n\nconst EpiContentArea = ({ items, epiTag, itemCssClass, renderItem }: EpiContentAreaProps) => {\n const areaItems = items?.filter((x) => !!x && !!x.contentLink.expanded) || [];\n\n return (\n <>\n {areaItems.map((contentAreaItem, index) => (\n <EpiComponentLoader\n expandedValue={contentAreaItem.contentLink.expanded!}\n options={{\n isContentAreaItem: true,\n }}\n key={`{${contentAreaItem.contentLink.guidValue}_${index}}`}\n >\n {(LazyComponent, epiComponentProps) => {\n const contentAreaItemClasses = classNames(\n getCssClassForDisplayOptionWithDefaultTag(\n contentAreaItem.displayOption || epiTag,\n ),\n itemCssClass,\n );\n\n return (\n <>\n {(renderItem &&\n renderItem(\n epiComponentProps,\n contentAreaItem,\n contentAreaItemClasses,\n )) || (\n <div className={contentAreaItemClasses}>\n <LazyComponent {...epiComponentProps} />\n </div>\n )}\n </>\n );\n }}\n </EpiComponentLoader>\n ))}\n </>\n );\n};\n\nexport default EpiContentArea;\n","import type { FC } from 'react';\n\nimport PageProperties from '../../../../common/components/molecules/PageProperties';\nimport type { PageBaseProps } from '../../../../common/models/props/PageBaseProps';\nimport EpiContentArea from '../../../../episerver/components/base/EpiContentArea';\n\ninterface EcommercePageProps extends PageBaseProps {\n blocks: ContentAreaItem[];\n}\n\nconst EcommercePage: FC<React.PropsWithChildren<EcommercePageProps>> = (props) => {\n return (\n <>\n <PageProperties\n headData={props.headData}\n pageTypeNameForAnalytics={props.pageTypeNameForAnalytics}\n />\n <div className=\"Grid Grid--gutterV Grid--gutterH2xsm\">\n <EpiContentArea items={props.blocks} />\n </div>\n </>\n );\n};\n\nexport default EcommercePage;\n","import type { FC } from 'react';\n\nimport EcommercePage from '../../../../ecommerce/components/pages/ecommercePage/EcommercePage';\nimport { mapEpiPageHeadData } from '../../../epiUtils';\nimport type { EpiEcommercePageType } from './epiEcommercePageType';\n\nconst EpiEcommercePage: FC<React.PropsWithChildren<EpiEcommercePageType>> = (props) => {\n return (\n <EcommercePage\n blocks={props.blocks}\n headData={mapEpiPageHeadData(props)}\n pageTypeNameForAnalytics={props.pageTypeNameForAnalytics}\n />\n );\n};\n\nexport default EpiEcommercePage;\n","import { appConfig } from '../../appConfig';\nimport type { PageHeadData } from '../common/components/atoms/PageHead';\nimport { ensureTrailingSlash } from '../common/utils/urlUtils';\nimport type { EpiPageTypes } from './components/pages/epiPageTypes';\nimport type { EpiSitePageType } from './components/pages/epiSitePageType';\n\nexport const getCssClassForDisplayOptionWithDefaultTag = (name: DisplayOption) => {\n const potentialCssClass = appConfig.coopSettings.epi.blockDisplayOptionToCssClass[name];\n\n if (potentialCssClass) {\n return `${appConfig.coopSettings.epi.baseChildrenCssClass} ${potentialCssClass}`;\n }\n\n return appConfig.coopSettings.epi.baseChildrenCssClass;\n};\n\nexport const filterContentArea = <T extends IContent>(\n contentArea: ContentAreaItem[],\n predicate: (content: IContent) => content is T,\n): T[] => {\n const contents =\n contentArea\n ?.map((x) => x.contentLink?.expanded)\n .filter(Boolean)\n .filter(predicate) || [];\n return contents;\n};\n\nexport const filterContent = <T extends IContent>(\n contentItems: IContent[],\n predicate: (content: IContent) => content is T,\n): T[] => {\n const filteredContents = contentItems?.filter(predicate) || [];\n return filteredContents;\n};\n\nexport const filterContentType = <T extends EpiPageTypes[keyof EpiPageTypes]>(\n contents: IContent[],\n contentType: keyof EpiPageTypes,\n): T[] => {\n return (contents?.filter((item) => item.contentType.includes(contentType)) as T[]) || [];\n};\n\n/**\n * Use with caution, EPI adds ?epieditmode=True in edit mode, but so can users\n */\nexport const isEpiEditMode = () =>\n new URLSearchParams(window.location.search).get('epieditmode') === 'True';\n\nexport const editTableProp = (name: string) => (window.epi?.inEditMode ? name : undefined);\n\nexport const mapEpiPageHeadData = (page: EpiSitePageType): PageHeadData => {\n const canonicalUrl = page.canonicalUrl && ensureTrailingSlash(page.canonicalUrl);\n\n return {\n title: page.pageTitle,\n link: {\n canonical: canonicalUrl,\n },\n meta: {\n description: page.metaDescription,\n 'og:url': canonicalUrl,\n 'og:description': page.metaDescription,\n },\n };\n};\n\nexport const isEpiPageViewSettings = (page: IContent): page is PageViewSettingsIContent => {\n return 'contentPageSize' in (page as PageViewSettingsIContent);\n};\n\nexport const isContentReference = (input: unknown): input is ContentReference => {\n return 'url' in (input as ContentReference);\n};\n"],"names":["props","link","data","meta","canonical","path","page","pagination","currentPage","hasPrevPage","hasNextPage","totalItems","pageSize","prevPage","nextPage","linkData","Object","entries","filter","item","undefined","metaData","options","map","key","property","value","isDocumentHeadReadyForReactHelmet","useDocumentHeadIsPreparedForReactHelmet","Helmet","title","name","content","rel","href","children","defaultQueryKeys","useGaVirtualPageView","search","dispatch","canonicalUrl","URL","window","location","origin","toString","triggerString","queryString","keys","triggerKeys","searchParams","URLSearchParams","Array","from","includes","reduce","acc","set","getFilteredQueryStringForVirtualPageView","queryStringTriggers","enable","sendEvent","useSavedInRef","c","setPageGaData","gaPageTypeName","pageTypeName","pageTitle","useEffect","current","headData","pageTypeNameForAnalytics","virtualPageViewQueryStringTriggers","setTitle","headPagination","elementsToUpdateByTag","readyForReactHelmet","setReadyForReactHelmet","useState","stringifiedElements","JSON","stringify","parsedElementsToUpdateByTag","parse","document","getElementsByTagName","forEach","child","tagName","toLowerCase","tagEl","getAttribute","setAttribute","ref","useRef","useLayoutEffect","getRobotsContent","noIndex","noFollow","getCanonical","url","Number","isInteger","String","getNextPage","pathname","getPrevPage","delete","stringifiedParams","items","epiTag","itemCssClass","renderItem","areaItems","x","contentLink","expanded","contentAreaItem","index","expandedValue","isContentAreaItem","LazyComponent","epiComponentProps","contentAreaItemClasses","displayOption","className","guidValue","PageProperties","EpiContentArea","blocks","getCssClassForDisplayOptionWithDefaultTag","potentialCssClass","coopSettings","epi","blockDisplayOptionToCssClass","baseChildrenCssClass","filterContentArea","contentArea","predicate","Boolean","filterContentType","contents","contentType","isEpiEditMode","get","mapEpiPageHeadData","description","metaDescription","isEpiPageViewSettings"],"sourceRoot":""}