{"version":3,"file":"9818.2f895944d1707ab4b30a.js","mappings":"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","sources":["webpack://gyldendal-uddannelse/./node_modules/prop-types/factoryWithThrowingShims.js","webpack://gyldendal-uddannelse/./node_modules/prop-types/index.js","webpack://gyldendal-uddannelse/./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/ResponsiveImage/responsive-image.tsx","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/js/utils/string.ts","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/ArrowLink/arrow-link.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/CustomPrimaryCtaButton/custom-primary-cta-button.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/Tag/tag.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/hooks/useElementSize.ts","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/TeaserGrid/TeaserTile/teaser-tile.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/TitleLinkTop/title-link-top.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/TeaserGrid/TeaserGridVideoModal/teaser-grid-video.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/TeaserGrid/teaser-grid.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactViews/TeaserGrid/teaser-grid-view.js"],"sourcesContent":["/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","import React from \"react\";\r\n\r\nconst hasExistingQueryParam = (url: string) => url.indexOf(\"?\") > -1;\r\n\r\nconst getQueryParamDelimiter = (url: string) => (hasExistingQueryParam(url) ? \"&\" : \"?\");\r\n\r\nconst generateSrcSet = (srcSetSizes: number[], srcUrl: string) => {\r\n const generateSrcSetString = (srcSetSize: number) => {\r\n const parameterDelimiter = getQueryParamDelimiter(srcUrl);\r\n const srcSetSizeHighDensity = Math.round(srcSetSize * 1.5);\r\n\r\n return `\r\n ${srcUrl}${parameterDelimiter}w=${srcSetSize} ${srcSetSize}w,\r\n ${srcUrl}${parameterDelimiter}w=${srcSetSizeHighDensity} ${srcSetSizeHighDensity}w\r\n `;\r\n };\r\n\r\n return srcSetSizes.map(generateSrcSetString).join(\", \");\r\n};\r\n\r\ninterface ResponsiveImageProps\r\n extends React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement> {\r\n srcUrl: string;\r\n defaultSize: number;\r\n srcSetSizes: number[];\r\n role?: string;\r\n}\r\n\r\nconst ResponsiveImage = (props: ResponsiveImageProps) => {\r\n const { srcUrl, defaultSize, srcSetSizes, role, ...rest } = props;\r\n const src = `${srcUrl}${getQueryParamDelimiter(srcUrl)}w=${defaultSize}`;\r\n const srcSet = srcSetSizes ? generateSrcSet(srcSetSizes, srcUrl) : \"\";\r\n\r\n return <img src={src} srcSet={srcSet} loading=\"lazy\" alt={props.alt} role={role} {...rest} />;\r\n};\r\n\r\nexport default ResponsiveImage;\r\n","export const kebabCase = (string: string) =>\r\n string\r\n .replace(/([a-z])([A-Z])/g, \"$1-$2\")\r\n .replace(/[\\s_]+/g, \"-\")\r\n .toLowerCase();\r\n","import React from \"react\";\r\nimport classNames from \"classnames\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst ArrowLink = props => {\r\n const rootClasses = classNames(\"arrow-link\", props.ClassName, {\r\n [`${props.CtaTextColorClass}--text`]: props.CtaTextColorClass\r\n });\r\n\r\n return <div className={rootClasses} dangerouslySetInnerHTML={{ __html: props.CtaLink }} />;\r\n};\r\n\r\nArrowLink.propTypes = {\r\n ClassName: PropTypes.string,\r\n CtaLink: PropTypes.string,\r\n CtaTextColorClass: PropTypes.string\r\n};\r\n\r\nexport default ArrowLink;\r\n","import React from \"react\";\r\nimport classNames from \"classnames\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst CustomPrimaryCtaButton = props => {\r\n const rootClasses = classNames(\"custom-primary-cta-button\", props.ClassName, {\r\n [`${props.CtaBackgroundColorClass}--bg`]: props.CtaBackgroundColorClass,\r\n [`${props.CtaTextColorClass}--text`]: props.CtaTextColorClass\r\n });\r\n\r\n return <div className={rootClasses} dangerouslySetInnerHTML={{ __html: props.CtaLink }} />;\r\n};\r\n\r\nCustomPrimaryCtaButton.propTypes = {\r\n ClassName: PropTypes.string,\r\n CtaLink: PropTypes.string,\r\n CtaTextColorClass: PropTypes.string,\r\n CtaBackgroundColorClass: PropTypes.string\r\n};\r\n\r\nexport default CustomPrimaryCtaButton;\r\n","import * as React from \"react\";\r\nimport classNames from \"classnames\";\r\n\r\nconst Tag = ({ className, children }) => {\r\n const rootClasses = classNames(\"tag\", className);\r\n\r\n return <div className={rootClasses}>{children}</div>;\r\n};\r\n\r\nexport default Tag;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useRef, useLayoutEffect, useState, RefObject, useMemo } from \"react\";\r\n\r\ninterface SubscribeToSizeChanges {\r\n (el: HTMLElement, resizeCallback: (entries: any) => void): () => void;\r\n observerSingleton?: ResizeObserver;\r\n callbacks: Map<HTMLElement, (entries: any) => void>;\r\n}\r\n\r\nconst subscribe: SubscribeToSizeChanges = Object.assign(\r\n (el: HTMLElement, resizeCallback: (entries: any) => void) => {\r\n subscribe.callbacks.set(el, resizeCallback);\r\n if (!subscribe.observerSingleton) {\r\n subscribe.observerSingleton = new ResizeObserver(entries => {\r\n const callbacksEntries = [...subscribe.callbacks];\r\n callbacksEntries.forEach(([el, cb]) => cb(entries.filter(({ target }) => target === el)));\r\n });\r\n }\r\n subscribe.observerSingleton.observe(el);\r\n return () => {\r\n subscribe.observerSingleton?.unobserve(el);\r\n subscribe.callbacks.delete(el);\r\n };\r\n },\r\n {\r\n callbacks: new Map(),\r\n observerSingleton: undefined\r\n }\r\n);\r\n\r\nexport const useElementSize = <T extends HTMLElement>(ref?: RefObject<T>) => {\r\n const elRef = useRef<T>(null);\r\n const [{ height, width }, setSize] = useState<{\r\n height?: number;\r\n width?: number;\r\n }>(() => ({\r\n width: undefined, // so they can set default values\r\n height: undefined // in the consuming component\r\n }));\r\n\r\n useLayoutEffect(() => {\r\n const element = elRef.current || ref?.current;\r\n if (element) {\r\n const unsub = subscribe(element, (entries: any) => {\r\n entries.forEach(({ contentRect: { height, width } }: ResizeObserverEntry) => {\r\n setSize({ height, width });\r\n });\r\n });\r\n return () => unsub();\r\n }\r\n }, [ref]);\r\n\r\n return useMemo(() => ({ height, width, ref: elRef }), [height, width]);\r\n};\r\n","import React, { useState } from \"react\";\r\nimport classNames from \"classnames\";\r\nimport ResponsiveImage from \"../../Shared/ResponsiveImage/responsive-image\";\r\nimport TagComponent from \"../../Shared/Tag/tag\";\r\nimport ArrowLink from \"../../Shared/ArrowLink/arrow-link\";\r\nimport CustomPrimaryCtaButton from \"../../Shared/CustomPrimaryCtaButton/custom-primary-cta-button\";\r\nimport PropTypes from \"prop-types\";\r\nimport { useElementSize } from \"../../../hooks/useElementSize\";\r\nimport { kebabCase } from \"js/utils/string\";\r\n\r\nexport const tileType = {\r\n COL__1: \"col-1\",\r\n COL__2: \"col-2\",\r\n COL__4: \"col-4\"\r\n};\r\n\r\nconst tileTypes = {\r\n [tileType.COL__1]: {\r\n // Size 423px is needed for desktop, since col-1 can be both 25% and 33% wide\r\n srcSetSizes: [607, 402, 518, 423],\r\n sizes: `(max-width: 639px) 607px, (max-width: 867px) 402px, (max-width: 1099px) 518px, 423px`\r\n },\r\n [tileType.COL__2]: {\r\n // Size 867px is needed since template 3 and 4 show col-2 in 100% on this breakpoint\r\n srcSetSizes: [607, 835, 518, 651],\r\n sizes: `(max-width: 639px) 607px, (max-width: 867px) 835px, (max-width: 1099px) 518px, 651px`\r\n },\r\n [tileType.COL__4]: {\r\n srcSetSizes: [607, 835, 671, 838],\r\n sizes: \"(max-width: 639px) 607px, (max-width: 867px) 835px, (max-width: 1099px) 671px, 838px\"\r\n }\r\n};\r\n\r\nconst TeaserTile = ({\r\n ImageSrc,\r\n ImageAltText,\r\n Tag,\r\n Title,\r\n Trumpet,\r\n RichText,\r\n CtaUrl,\r\n CtaTarget,\r\n CtaLink,\r\n ShowCtaAsLink,\r\n UseCtaAsImageLink,\r\n tileType: tileTypeFromProps,\r\n VideoUrl,\r\n setVideoModal,\r\n parentAnchor,\r\n VideoAnchorId,\r\n focused\r\n}) => {\r\n const [richTextExpanded, setRichTextExpanded] = useState(false);\r\n const tileType = tileTypeFromProps || tileType.COL__1;\r\n const baseClass = \"teaser-tile\";\r\n const deepLinkId = parentAnchor && VideoAnchorId ? `${parentAnchor}+video-${VideoAnchorId}` : \"\";\r\n const rootClasses = classNames(\r\n baseClass,\r\n {\r\n \"teaser-tile--focused\": focused\r\n },\r\n [`${baseClass}--tile-type-${tileType}`]\r\n );\r\n\r\n const { height, ref: richTextRef } = useElementSize();\r\n\r\n const showRichTextExpandButton = height < richTextRef.current?.scrollHeight || richTextExpanded;\r\n\r\n const innerClasses = classNames(`${baseClass}__inner`, {\r\n [`${baseClass}__inner--expanded`]: richTextExpanded,\r\n [`${baseClass}__inner--expand-disabled`]:\r\n height === richTextRef.current?.scrollHeight && !richTextExpanded\r\n });\r\n\r\n return (\r\n <div className={rootClasses} id={deepLinkId}>\r\n {ImageSrc && !VideoUrl && (\r\n <a className={`${baseClass}__image-wrapper`} href={CtaUrl} target={CtaTarget}>\r\n <div className={`${baseClass}__image-container`}>\r\n <ResponsiveImage\r\n srcUrl={ImageSrc}\r\n defaultSize={639}\r\n srcSetSizes={tileTypes[tileType].srcSetSizes}\r\n sizes={tileTypes[tileType].sizes}\r\n alt={ImageAltText}\r\n />\r\n </div>\r\n </a>\r\n )}\r\n {ImageSrc && VideoUrl && (\r\n <div className={`${baseClass}__image-wrapper ${baseClass}__video-wrapper`}>\r\n <div className={`${baseClass}__image-container`}>\r\n <a\r\n className={`${baseClass}__interactive`}\r\n href={`#${deepLinkId}`}\r\n onClick={e => {\r\n history.pushState(null, null, \"#\" + deepLinkId);\r\n e.preventDefault();\r\n setVideoModal(true, VideoUrl);\r\n }}\r\n >\r\n <ResponsiveImage\r\n srcUrl={ImageSrc}\r\n defaultSize={639}\r\n srcSetSizes={tileTypes[tileType].srcSetSizes}\r\n sizes={tileTypes[tileType].sizes}\r\n alt={ImageAltText}\r\n />\r\n </a>\r\n </div>\r\n </div>\r\n )}\r\n <div className={`${baseClass}__content-wrapper`}>\r\n <div className={`${baseClass}__content-container`}>\r\n <div className={innerClasses}>\r\n {Tag && <TagComponent className={`${baseClass}__tag`}>{Tag}</TagComponent>}\r\n {Trumpet && <p className={`${baseClass}__subtitle`}>{Trumpet}</p>}\r\n {Title && (\r\n <a className={`${baseClass}__title-link`} href={CtaUrl} target={CtaTarget}>\r\n <h3\r\n className={`${baseClass}__title h3-style`}\r\n dangerouslySetInnerHTML={{ __html: Title }}\r\n />\r\n </a>\r\n )}\r\n {RichText && (\r\n <div className={`${baseClass}__rich-text`} ref={richTextRef}>\r\n {!showRichTextExpandButton ? (\r\n <span dangerouslySetInnerHTML={{ __html: RichText }} />\r\n ) : (\r\n <button\r\n type=\"button\"\r\n aria-controls={`${kebabCase(Title)}`}\r\n aria-expanded={richTextExpanded}\r\n className={`${baseClass}__rich-text-button`}\r\n onClick={() => setRichTextExpanded(!richTextExpanded)}\r\n >\r\n <span\r\n id={`${kebabCase(Title)}`}\r\n dangerouslySetInnerHTML={{ __html: RichText }}\r\n />\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n {CtaLink && !UseCtaAsImageLink && ShowCtaAsLink && (\r\n <ArrowLink ClassName=\"teaser-tile__arrow-link\" CtaLink={CtaLink} />\r\n )}\r\n {CtaLink && !UseCtaAsImageLink && !ShowCtaAsLink && (\r\n <CustomPrimaryCtaButton ClassName=\"teaser-tile__button\" CtaLink={CtaLink} />\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nTeaserTile.propTypes = {\r\n ImageSrc: PropTypes.string,\r\n ImageAltText: PropTypes.string,\r\n Tag: PropTypes.string,\r\n Title: PropTypes.string, // Recommended max: 28 characters\r\n Trumpet: PropTypes.string, // Recommended max: 30 characters\r\n RichText: PropTypes.string, // Recommended max: 262 characters\r\n CtaLink: PropTypes.string,\r\n CtaUrl: PropTypes.string,\r\n CtaTarget: PropTypes.string,\r\n ShowCtaAsLink: PropTypes.bool,\r\n UseCtaAsImageLink: PropTypes.bool,\r\n TwentyThreeVideoDomain: PropTypes.string,\r\n TwentyThreeVideoPlayerId: PropTypes.string,\r\n parentAnchor: PropTypes.string,\r\n VideoAnchorId: PropTypes.string,\r\n focused: PropTypes.bool,\r\n tileType: PropTypes.oneOf(Object.keys(tileType).map(key => tileType[key]))\r\n};\r\n\r\nexport default TeaserTile;\r\n","// @ts-check\r\nimport * as React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport classNames from \"classnames\";\r\nimport ArrowLink from \"../ArrowLink/arrow-link\";\r\n\r\nconst TitleLinkTop = ({ ClassName, Title, ViewMoreLink, TextColorClass }) => {\r\n const baseClass = \"title-link-top\";\r\n const componentClasses = classNames(baseClass, \"content-module-header\", ClassName);\r\n const titleClasses = classNames(`${baseClass}__title`, {\r\n [`${TextColorClass}--text`]: !!TextColorClass\r\n });\r\n\r\n const linkClasses = classNames(`${baseClass}__link`, {\r\n [`${TextColorClass}--text`]: !!TextColorClass\r\n });\r\n\r\n const headerTitle = Title && <h2 className={titleClasses} dangerouslySetInnerHTML={{ __html: Title }} />;\r\n const headerLink = ViewMoreLink && <ArrowLink ClassName={linkClasses} CtaLink={ViewMoreLink} />;\r\n\r\n return (\r\n <div className={componentClasses}>\r\n {headerTitle}\r\n {headerLink}\r\n </div>\r\n );\r\n};\r\n\r\nTitleLinkTop.propTypes = {\r\n ClassName: PropTypes.string,\r\n Title: PropTypes.string,\r\n ViewMoreLink: PropTypes.string,\r\n TextColorClass: PropTypes.string\r\n};\r\n\r\nexport default TitleLinkTop;\r\n","import React, { Component } from \"react\";\r\nimport Modal from \"../../Modal/modal\";\r\n\r\nclass TeaserGridVideo extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n getEmbeddedUrl(refUrl) {\r\n if (!refUrl || refUrl.length <= 0) {\r\n return \"\";\r\n }\r\n\r\n const regex = /(.*?)\\/secret\\/([0-9]+)\\/(.*$)/gm;\r\n const match = regex.exec(refUrl);\r\n\r\n const baseUrl = match[1],\r\n photoId = match[2],\r\n videoId = match[3];\r\n\r\n return `${baseUrl}/v.ihtml/player.html?token=${videoId}&photo_id=${photoId}`;\r\n }\r\n\r\n render() {\r\n const baseClass = \"teaser-grid-video\";\r\n\r\n return (\r\n <Modal\r\n toClose={() => {\r\n this.props.setVideoModal(false, \"\");\r\n }}\r\n isOpen={this.props.videoModalActive}\r\n showCloseButton\r\n size=\"auto\"\r\n >\r\n <div\r\n className={`${baseClass}__modal-content`}\r\n style={{\r\n margin: \"auto\"\r\n }}\r\n >\r\n <div className={`${baseClass}__video-wrapper`}>\r\n <iframe\r\n title={this.props.title}\r\n src={this.getEmbeddedUrl(this.props.VideoUrl)}\r\n allow=\"fullscreen\"\r\n />\r\n </div>\r\n </div>\r\n </Modal>\r\n );\r\n }\r\n}\r\n\r\nexport default TeaserGridVideo;\r\n","// @ts-check\r\nimport React, { Component } from \"react\";\r\nimport classNames from \"classnames\";\r\nimport TeaserTile, { tileType } from \"./TeaserTile/teaser-tile\";\r\nimport TitleLinkTop from \"../Shared/TitleLinkTop/title-link-top\";\r\nimport PropTypes from \"prop-types\";\r\nimport TeaserGridVideo from \"./TeaserGridVideoModal/teaser-grid-video\";\r\nimport SpinnerButton from \"../../ReactComponents/Shared/FormInputs/spinner-button\";\r\n\r\nexport const templateType = {\r\n T1: \"template-1\",\r\n T2: \"template-2\",\r\n T3: \"template-3\",\r\n T4: \"template-4\",\r\n T5: \"template-5\"\r\n};\r\n\r\nconst templateTypes = {\r\n [templateType.T1]: { repeats: true, pattern: [tileType.COL__1] },\r\n [templateType.T2]: { repeats: true, pattern: [tileType.COL__2] },\r\n [templateType.T3]: {\r\n repeats: true,\r\n pattern: [\r\n tileType.COL__2,\r\n tileType.COL__1,\r\n tileType.COL__1,\r\n tileType.COL__1,\r\n tileType.COL__1,\r\n tileType.COL__2\r\n ]\r\n },\r\n [templateType.T4]: {\r\n repeats: true,\r\n pattern: [\r\n tileType.COL__1,\r\n tileType.COL__1,\r\n tileType.COL__2,\r\n tileType.COL__2,\r\n tileType.COL__1,\r\n tileType.COL__1\r\n ]\r\n },\r\n [templateType.T5]: { repeats: false, pattern: [tileType.COL__4] }\r\n};\r\n\r\nclass TeaserGrid extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n videoModalActive: false,\r\n videoModalUrl: \"\",\r\n pageIndex: 0,\r\n allChunksLoaded: false,\r\n isLoadingChunk: false,\r\n teaserListChunks: [this.props.TeaserList.slice(0, this.props.PageSize)],\r\n isMounted: false\r\n };\r\n\r\n this.setVideoModal.bind(this);\r\n this.getVideoAnchorId.bind(this);\r\n this.loadNextChunk.bind(this);\r\n }\r\n\r\n setVideoModal(active, url) {\r\n // If we close modal, remove the hashtag from url\r\n if (!active && document) history.replaceState({}, document.title, window.location.pathname);\r\n\r\n this.setState({\r\n videoModalActive: active,\r\n videoModalUrl: url\r\n });\r\n }\r\n\r\n loadNextChunk() {\r\n // request to WebApiLoadMoreUrl with TagFilter\r\n if (this.props.WebApiLoadMore) {\r\n this.setState({ isLoadingChunk: true });\r\n\r\n fetch(this.props.WebApiLoadMoreUrl, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({\r\n PageSize: this.props.PageSize,\r\n TagFilter: this.props.TagFilter,\r\n Page: this.state.pageIndex + 1\r\n })\r\n })\r\n .then(res => (res.ok ? res : Promise.reject(res)))\r\n .then(res => res.json())\r\n .then(response => {\r\n if (response.Success) {\r\n const chunks = Object.assign([], this.state.teaserListChunks);\r\n chunks.push(response.Payload.Items);\r\n this.setState({\r\n teaserListChunks: chunks,\r\n pageIndex: this.state.pageIndex + 1,\r\n isLoadingChunk: false,\r\n allChunksLoaded: !response.Payload.HasNext\r\n });\r\n } else {\r\n this.setState({ allChunksLoaded: true });\r\n }\r\n });\r\n } else {\r\n const chunks = Object.assign([], this.state.teaserListChunks);\r\n chunks.push(\r\n this.props.TeaserList.slice(\r\n (this.state.pageIndex + 1) * this.props.PageSize,\r\n (this.state.pageIndex + 1) * this.props.PageSize + this.props.PageSize\r\n )\r\n );\r\n\r\n this.setState({\r\n teaserListChunks: chunks,\r\n allChunksLoaded: chunks.flatMap(x => x).length >= this.props.TeaserList.length,\r\n pageIndex: this.state.pageIndex + 1\r\n });\r\n }\r\n }\r\n\r\n getVideoAnchorId(hash) {\r\n if (hash) {\r\n // AnchorId-video+props.TeaserList[i].anchorId\r\n // This part is matched\r\n // |\r\n // |--------------|\r\n // http://dev.gu.dk/landingpages/landingpage-demos/ExamplePage%20-%20Anchors#teaser-grid-1+video-TeaserGridItem-1\r\n const match = /\\+video-(.*?)$/gm.exec(hash);\r\n if (match) {\r\n return match[1];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({ isMounted: true });\r\n const videoAnchorId = this.getVideoAnchorId(document.location.hash);\r\n\r\n if (videoAnchorId && this.props.TeaserList) {\r\n const videoToPlay = this.props.TeaserList.filter(\r\n teaserListItem => teaserListItem.VideoAnchorId == videoAnchorId\r\n ).map(teaserListItem => teaserListItem.VideoUrl)[0];\r\n\r\n if (videoToPlay) this.setVideoModal(true, videoToPlay);\r\n }\r\n }\r\n\r\n render() {\r\n const { pattern, repeats } = templateTypes[this.props.TemplateType] || templateTypes[templateType.T1];\r\n const getTileType = tileIndex => {\r\n if (this.props.TeaserList && this.props.TeaserList.length === 1) {\r\n return tileType.COL__4;\r\n }\r\n\r\n return repeats ? pattern[tileIndex % pattern.length] : pattern[tileIndex] || tileType.COL__1;\r\n };\r\n\r\n const baseClass = \"teaser-grid\";\r\n const componentClasses = classNames(\r\n baseClass,\r\n `${baseClass}--${this.props.TemplateType}`,\r\n \"content-module\",\r\n {\r\n \"content-module--bg\": !!this.props.BackgroundColorClass,\r\n [`${this.props.BackgroundColorClass}--bg`]: !!this.props.BackgroundColorClass,\r\n \"content-module--no-margin-top\": this.props.HasNoMarginTop,\r\n \"content-module--no-margin-bottom\": this.props.HasNoMarginBottom\r\n }\r\n );\r\n\r\n const gridAnchorId = this.props.AnchorId;\r\n\r\n return (\r\n <section className={componentClasses}>\r\n <TeaserGridVideo\r\n setVideoModal={this.setVideoModal.bind(this)}\r\n videoModalActive={this.state.videoModalActive}\r\n VideoUrl={this.state.videoModalUrl}\r\n title={this.props.Title}\r\n />\r\n\r\n <div className={`${baseClass}-inner`}>\r\n {(this.props.Title || this.props.ViewMoreLink) && (\r\n <TitleLinkTop\r\n Title={this.props.Title}\r\n ViewMoreLink={this.props.ViewMoreLink}\r\n TextColorClass={this.props.TextColorClass}\r\n />\r\n )}\r\n {this.props.TeaserList &&\r\n this.props.ShowLoadMore &&\r\n this.props.PageSize &&\r\n this.state.teaserListChunks.map((teaserList, teaserListIndex) => (\r\n <div key={teaserListIndex} className={`${baseClass}__items`}>\r\n {teaserList.map((item, index) => {\r\n const id =\r\n gridAnchorId && item.videoAnchorId\r\n ? `${gridAnchorId}+video-${item.videoAnchorId}`\r\n : \"\";\r\n\r\n return (\r\n <div key={index} className={`${baseClass}__item`} id={id}>\r\n <TeaserTile\r\n {...item}\r\n focused={\r\n this.state.isMounted &&\r\n item.VideoAnchorId != null &&\r\n item.VideoAnchorId ==\r\n this.getVideoAnchorId(document.location.hash)\r\n }\r\n parentAnchor={gridAnchorId}\r\n setVideoModal={this.setVideoModal.bind(this)}\r\n tileType={getTileType(index)}\r\n />\r\n </div>\r\n );\r\n })}\r\n </div>\r\n ))}\r\n\r\n {this.props.TeaserList && !this.props.ShowLoadMore && (\r\n <div className={`${baseClass}__items`}>\r\n {this.props.TeaserList.map((item, index) => {\r\n const id =\r\n gridAnchorId && item.VideoAnchorId\r\n ? `${gridAnchorId}+video-${item.VideoAnchorId}`\r\n : undefined;\r\n\r\n return (\r\n <div key={index} className={`${baseClass}__item`} id={id}>\r\n <TeaserTile\r\n {...item}\r\n focused={\r\n this.state.isMounted &&\r\n item.VideoAnchorId != null &&\r\n item.VideoAnchorId ==\r\n this.getVideoAnchorId(document.location.hash)\r\n }\r\n parentAnchor={gridAnchorId}\r\n setVideoModal={this.setVideoModal.bind(this)}\r\n tileType={getTileType(index)}\r\n />\r\n </div>\r\n );\r\n })}\r\n </div>\r\n )}\r\n\r\n {this.props.ShowLoadMore && !this.state.allChunksLoaded && (\r\n <div className={`${baseClass}__load-more-button-wrapper`}>\r\n <SpinnerButton\r\n isLoading={this.state.isLoadingChunk}\r\n className=\"button-load-more\"\r\n onClick={() => this.loadNextChunk()}\r\n label={this.props.LoadMoreLabel}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n </section>\r\n );\r\n }\r\n}\r\n\r\nTeaserGrid.propTypes = {\r\n Title: PropTypes.string,\r\n ViewMoreLink: PropTypes.string,\r\n TemplateType: PropTypes.oneOf(Object.keys(templateType).map(key => templateType[key])).isRequired,\r\n TeaserList: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n ImageSrc: PropTypes.string,\r\n ImageAltText: PropTypes.string,\r\n Tag: PropTypes.string,\r\n Title: PropTypes.string,\r\n Trumpet: PropTypes.string,\r\n RichText: PropTypes.string,\r\n CtaLink: PropTypes.string,\r\n CtaUrl: PropTypes.string,\r\n CtaTarget: PropTypes.string,\r\n ShowCtaAsLink: PropTypes.bool,\r\n UseCtaAsImageLink: PropTypes.bool,\r\n VideoUrl: PropTypes.string,\r\n parentAnchor: PropTypes.string,\r\n VideoAnchorId: PropTypes.string\r\n })\r\n ),\r\n BackgroundColorClass: PropTypes.string,\r\n TextColorClass: PropTypes.string,\r\n HasNoMarginTop: PropTypes.bool,\r\n HasNoMarginBottom: PropTypes.bool,\r\n TwentyThreeVideoDomain: PropTypes.string,\r\n TwentyThreeVideoPlayerId: PropTypes.string,\r\n AnchorId: PropTypes.string\r\n};\r\n\r\nexport default TeaserGrid;\r\n","import React from \"react\";\r\nimport TeaserGrid from \"@/ReactComponents/TeaserGrid/teaser-grid\";\r\n\r\nconst TeaserGridView = props => <TeaserGrid {...props} />;\r\n\r\nexport default TeaserGridView;\r\n"],"names":["ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","module","exports","shim","props","propName","componentName","location","propFullName","secret","err","Error","name","getShim","isRequired","ReactPropTypes","array","bigint","bool","func","number","object","string","symbol","any","arrayOf","element","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","getQueryParamDelimiter","url","indexOf","hasExistingQueryParam","srcUrl","defaultSize","srcSetSizes","role","rest","src","srcSet","map","srcSetSize","parameterDelimiter","srcSetSizeHighDensity","Math","round","join","generateSrcSet","img","loading","alt","kebabCase","replace","toLowerCase","ArrowLink","rootClasses","classNames","ClassName","CtaTextColorClass","div","className","dangerouslySetInnerHTML","__html","CtaLink","propTypes","CustomPrimaryCtaButton","CtaBackgroundColorClass","children","subscribe","Object","assign","el","resizeCallback","callbacks","set","observerSingleton","ResizeObserver","entries","forEach","cb","filter","target","observe","unobserve","delete","Map","undefined","tileType","COL__1","COL__2","COL__4","tileTypes","sizes","TeaserTile","ImageSrc","richTextRef","ImageAltText","Tag","Title","Trumpet","RichText","CtaUrl","CtaTarget","ShowCtaAsLink","UseCtaAsImageLink","tileTypeFromProps","VideoUrl","setVideoModal","parentAnchor","VideoAnchorId","focused","useState","richTextExpanded","setRichTextExpanded","baseClass","deepLinkId","useElementSize","ref","elRef","useRef","width","height","setSize","useLayoutEffect","current","unsub","contentRect","useMemo","showRichTextExpandButton","scrollHeight","innerClasses","id","a","href","ResponsiveImage","onClick","e","history","pushState","preventDefault","TagComponent","p","h3","button","type","aria-controls","aria-expanded","span","TwentyThreeVideoDomain","TwentyThreeVideoPlayerId","keys","key","TitleLinkTop","ViewMoreLink","TextColorClass","componentClasses","titleClasses","linkClasses","headerTitle","h2","headerLink","TeaserGridVideo","getEmbeddedUrl","refUrl","length","match","exec","baseUrl","photoId","videoId","render","Modal","toClose","isOpen","this","videoModalActive","showCloseButton","size","style","margin","iframe","title","allow","Component","templateType","T1","T2","T3","T4","T5","templateTypes","repeats","pattern","TeaserGrid","state","videoModalUrl","pageIndex","allChunksLoaded","isLoadingChunk","teaserListChunks","TeaserList","slice","PageSize","isMounted","bind","getVideoAnchorId","loadNextChunk","active","document","replaceState","window","pathname","setState","WebApiLoadMore","fetch","WebApiLoadMoreUrl","method","headers","body","JSON","stringify","TagFilter","Page","then","res","ok","Promise","reject","json","response","Success","chunks","push","Payload","Items","HasNext","flatMap","x","hash","componentDidMount","videoAnchorId","videoToPlay","teaserListItem","TemplateType","getTileType","tileIndex","BackgroundColorClass","HasNoMarginTop","HasNoMarginBottom","gridAnchorId","AnchorId","section","ShowLoadMore","teaserList","teaserListIndex","item","index","SpinnerButton","isLoading","label","LoadMoreLabel"],"sourceRoot":""}