{"version":3,"file":"static/chunks/469.deaa9f09f49444b7.js","mappings":"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","sources":["webpack://_N_E/./components/RekAI/RekAI.js","webpack://_N_E/./components/RekAI/index.js","webpack://_N_E/./components/RekAI/RekAI.module.scss"],"sourcesContent":["/* global dataLayer */\nimport React, { useEffect, useRef, useContext, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport Script from 'next/script';\nimport classNames from 'classnames';\nimport _ from 'lodash';\nimport { AppContext } from 'Layouts/App';\nimport { getRekAITreeFromUrls, getRekAIParams, transformToRekAILdjsonFilter } from '../../utils/rekai';\nimport ArticleList from 'Components/ArticleList';\nimport LinkModule from 'Components/LinkModule';\nimport s from './RekAI.module.scss';\n\n// For testing locally\nconst _rekaiProjectId = process.env.NEXT_PUBLIC_REKAI_PROJECT_ID || undefined;\nconst _rekaiSecretKey = process.env.NEXT_PUBLIC_REKAI_SECRET_KEY || undefined;\n\nconst RekAI = ({\n children = null,\n debugging = false,\n modifier = '',\n postType = null,\n loadWithJS = true,\n cols = null,\n nrofhits = null,\n renderstyle = null,\n subtree = null,\n excludetree = null,\n ldjsonFilter = {},\n headertext = null,\n headerheadinglevel = null,\n showdate = null,\n advancedMockData = false,\n title = '',\n text = '',\n link = null,\n customItems = [],\n dummyPredictions = [], // Only for Storybook\n}) => {\n const { isStorybook, rekaiId, rekaiReady, setRekaiReady } = useContext(AppContext);\n\n const rekaiRef = useRef();\n const customRef = useRef();\n\n const [isDone, setIsDone] = useState(false);\n const [items, setItems] = useState(customItems);\n const rekAiCount = nrofhits - customItems.length - dummyPredictions.length;\n\n const transformObject = (obj, prefix) => {\n if(_.isEmpty(obj)) {\n return {};\n }\n return Object.fromEntries(\n Object.entries(obj).map(([key, value]) => [\n `${prefix}${key}`,\n Array.isArray(value) ? value.join(\",\") : value,\n ])\n );\n };\n\n const subtreePath = getRekAITreeFromUrls(subtree);\n const excludetreePath = getRekAITreeFromUrls(excludetree);\n const ldjsonFilterOptions = transformObject(ldjsonFilter, 'ldjsonfilter.');\n const ldjsonFilterDataAttrs = transformObject(ldjsonFilter, 'data-ldjsonfilter.');\n\n // Custom style is only for rendering our own components instead of RekAI markup\n const isAdvanced = renderstyle === 'advanced';\n const isPills = renderstyle === 'pills';\n\n const articleClickHandler = (event) => {\n const href = event?.currentTarget?.href;\n if(href) {\n const url = new URL(href);\n dataLayer.push({\n 'event': 'rekai_predictions',\n 'rekai_type': postType || 'page',\n 'rekai_destination': url.pathname,\n 'rekai_origin': window.location.pathname,\n });\n }\n };\n\n const pillClickHandler = (event) => {\n const href = event?.currentTarget?.href;\n if(href) {\n const url = new URL(href);\n dataLayer.push({\n 'event': 'rekai_predictions',\n 'rekai_type': 'button',\n 'rekai_destination': url.pathname,\n 'rekai_origin': window.location.pathname,\n });\n }\n };\n\n const formatDate = (date) => {\n // Remove weekday in the beginning and convert swedish months\n const enDateString = date.replace(/^\\w+, /, '').replace('okt', 'oct').replace('maj', 'may');\n return new Date(enDateString).toLocaleString('sv-SE', {\n day: 'numeric',\n month: 'short',\n year: 'numeric',\n }).replace('.', '');\n };\n\n // Get the full url for making it absolute\n const getFullUrl = (data, path) => {\n const pageUrl = data.find(item => item['@type'] !== 'WebSite' && item?.url)?.url;\n if(pageUrl) {\n return pageUrl;\n }\n const siteUrl = data.find(item => item['@type'] === 'WebSite')?.url;\n return siteUrl ? siteUrl.replace(/\\/$/, '') + path : path;\n };\n\n const mapPredictions = (predictions) => {\n return predictions.map((item) => {\n // TODO: Render diffferent component depending on item type\n const ldData = _.get(item, 'ldjson[0]', {});\n const type = _.get(ldData, 'additionalType', 'news');\n\n // Get the full url for making it absolute\n const url = getFullUrl(item.ldjson, item.url);\n\n const imageUrl = item?.imgurl;\n // Skip image if it is fallback or static\n const isFallback = imageUrl.includes('_next/static') || imageUrl.includes('og-fallback');\n const hasImage = type !== 'course' && type !== 'event' && _.get(ldData, 'customHasImage', true);\n const date = _.get(ldData, 'datePublished', item.pubdate);\n return {\n ...item,\n url: url,\n type: type,\n title: item.title,\n excerpt: item.ingress,\n date: date,\n formattedDate: !!date ? formatDate(date) : '',\n customDate: _.get(ldData, 'customDate', ''),\n location: _.get(ldData, 'customLocation', ''),\n label: _.get(ldData, 'genre', _.get(ldData, 'customLabel', '')),\n signupText: _.get(ldData, 'customSignupText', ''),\n isExternal: _.get(ldData, 'customIsExternal', ''),\n isFull: _.get(ldData, 'customIsFull', ''),\n isFewSeats: _.get(ldData, 'customIsFewSeats', ''),\n isOpen: _.get(ldData, 'customIsOpen', ''),\n location: _.get(ldData, 'customLocation', ''),\n ...(!isFallback && hasImage && !!imageUrl && {\n image: {\n src: imageUrl,\n alt: item?.imgalt,\n },\n }),\n }\n });\n };\n\n useEffect(() => {\n // Only for storybook for testing map of predictions\n if(!_.isEmpty(dummyPredictions) && !isDone) {\n const predictions = mapPredictions(dummyPredictions);\n setItems([...items, ...predictions]);\n setIsDone(true);\n }\n }, []);\n\n useEffect(() => {\n const handleCustomPredictions = (data) => {\n const predictions = mapPredictions(data.predictions);\n setItems([...items, ...predictions]);\n setIsDone(true);\n };\n\n const predictionAdvancedReady = () => {\n if (rekaiRef && rekaiRef.current) {\n // Add click event to whole block for triggering a-tag\n const articles = rekaiRef.current.querySelectorAll(\n '.rekai-newsarticle-article'\n );\n if (articles.length > 0) {\n for (let i = 0; i < articles.length; i++) {\n const article = articles[i];\n article.addEventListener('click', () => {\n article\n .querySelector('.rekai-newsarticle-a')\n .click();\n });\n\n const link = article.querySelector('a');\n link.addEventListener('click', articleClickHandler);\n }\n }\n }\n };\n\n const options = {\n overwrite: {\n ...(_rekaiProjectId && {p: _rekaiProjectId}),\n ...(_rekaiSecretKey && {srek: _rekaiSecretKey}),\n ...(isStorybook && {advanced_mockdata: isStorybook}),\n addcontent: true,\n nrofhits: rekAiCount,\n subtree: subtreePath,\n excludetree: excludetreePath,\n ...ldjsonFilterOptions,\n }\n };\n\n if (rekAiCount > 0 && rekaiReady && window && window.__rekai) {\n if(loadWithJS) {\n if(!isDone) {\n window.__rekai.predict(options, handleCustomPredictions);\n }\n } else if(isAdvanced) {\n predictionAdvancedReady();\n }\n }\n }, [loadWithJS, rekaiReady, rekAiCount, isDone]);\n\n useEffect(() => {\n const selector = isAdvanced ? 'article a' : 'ul li a';\n const itemClickHandler = isAdvanced ? articleClickHandler : pillClickHandler;\n\n // Handle click event on links when custom prediction is done\n if(items.length > 0 && customRef && customRef.current) {\n const links = customRef.current.querySelectorAll(selector);\n if (links.length > 0 && typeof dataLayer !== 'undefined') {\n links.forEach((link) => {\n link.addEventListener('click', itemClickHandler);\n });\n }\n }\n return () => {\n if(items.length > 0 && customRef && customRef.current) {\n const links = customRef.current.querySelectorAll(selector);\n links.forEach((link) => {\n link.removeEventListener('click', itemClickHandler);\n });\n }\n };\n }, [items]);\n\n if(!rekaiId) {\n return null;\n }\n\n const classes = classNames(s['Root'], {\n [s[`Root--${modifier}`]]: modifier,\n [s[`Root--${_.upperFirst(renderstyle)}`]]: renderstyle,\n });\n\n const Component = isAdvanced ? ArticleList : isPills ? LinkModule : null;\n\n return (\n