{"version":3,"sources":["webpack:///./presentation/components/FaqJsonLd/FaqJsonLd.tsx","webpack:///./presentation/components/FaqJsonLd/index.ts"],"names":["createAnswer","answer","parsedAnswer","stringedAnswer","explodeShortcode","shortcode","push","elements","forEach","value","type","text","name","attributes","label","join","startsWith","substring","endsWith","slice","length","split","trim","createMainEntity","ribbons","reduce","mainEntity","ribbon","ribbonEntity","props","items","map","item","question","concat","FaqJsonLd","jsonLD","faqRibbons","filter","RibbonType","ELABORATE","context","isNilOrEmpty","getJsonLd","isNotNilNorEmpty","Helmet","JSON","stringify"],"mappings":"8HA2BA,MAAMA,EAAgBC,IACpB,MAAMC,EAAe,GACrB,IAAIC,EAAiB,GACrB,MAAMC,EAAoBC,IAA8B,MACtD,GAAyB,iBAAdA,EAET,YADAH,EAAaI,KAAKD,IAGP,SAAGA,aAAH,EAAGA,EAAWE,UAAd,EAA0BF,GAC/BG,SAAQ,SAAUC,GACH,iBAAVA,GAAsBA,GAC/BP,EAAaI,KAAKG,GAED,SAAfA,EAAMC,MAAmBD,EAAME,MACjCT,EAAaI,KAAKG,EAAME,MAGP,YAAfF,EAAMG,MAAsBH,EAAMF,UAAYE,EAAMI,WAAWC,OAEjEZ,EAAaI,KAAQG,EAAMI,WAAWC,MAAnB,MAEjBL,EAAMF,UACRH,EAAiBK,GAGA,YAAfA,EAAMG,MAAsBH,EAAMF,UAAYE,EAAMI,WAAWC,OACjEZ,EAAaI,KAAK,SAqBxB,OAjBAF,EAAiBH,GAEjBE,EAAiBD,EAAaa,KAAK,IAEnCZ,EAAiBA,EAAea,WAAW,MAAQb,EAAec,UAAU,GAAKd,EAEjFA,EAAiBA,EAAee,SAAS,MAClCf,EAAegB,MAAM,EAAGhB,EAAeiB,OAAS,GAAlD,IACDjB,EAEJA,EAAiBA,EAAekB,MAAM,QAAQN,KAAK,MAEnDZ,EAAiBA,EAAekB,MAAM,OAAON,KAAK,KAElDZ,EAAiBA,EAAekB,MAAM,MAAMN,KAAK,MAEjDZ,EAAiBA,EAAemB,OACzBnB,GAGHoB,EAAoBC,GACjBA,EAAQC,OAAO,CAACC,EAAmCC,KAAmB,QAC3E,MACMC,GADK,mBAAGD,EAAOE,aAAV,aAAG,EAAcC,OAAjB,EAA0B,IACVC,IAAKC,IAAD,CAC7B,QAAS,WACT,KAAQA,EAAKC,SACb,eAAkB,CAChB,QAAS,SAET,KAAQjC,EAAagC,EAAK/B,YAI9B,OAAOyB,EAAWQ,OAAON,IACxB,IAkCUO,MAfG,IAA6B,IAA5B,QAAEX,GAA0B,EAC7C,MAAMY,EAjBkBZ,KACxB,MAAMa,EAAab,EAAQc,OAAQX,GAC1BA,EAAOjB,OAAS6B,IAAWC,WAAsC,QAAzBb,EAAOE,MAAMY,SAG9D,OAAIC,YAAaL,GACR,KAGF,CACL,WAAY,qBACZ,QAAS,UACT,WAAcd,EAAiBc,KAKlBM,CAAUnB,GAGzB,OAFkBoB,YAAiBR,GAI/B,cAACS,EAAA,OAAD,UACE,wBAAQnC,KAAK,sBAAb,SAAoCoC,KAAKC,UAAUX,OAKlD,MCxHMD","file":"pex-static/34/258.9214cec8946f5527e521.chunk.js","sourcesContent":["import React from 'react';\nimport { Helmet } from 'react-helmet';\nimport { Type as RibbonType } from 'domain/constants/ribbons';\nimport { isNotNilNorEmpty, isNilOrEmpty } from 'presentation/utils/generalUtils';\nimport { Ribbon, Ribbons } from 'core/page';\n\nimport { ShortcodeProps } from '../Shortcode';\n\nexport interface OuterProps {\n ribbons: Ribbons;\n}\n\nexport interface MainEntityType {\n '@type': string;\n 'name': string;\n 'acceptedAnswer': {\n '@type': string;\n 'text': string;\n };\n}\n\ninterface ItemType {\n answer: ShortcodeProps;\n defaultOpen: boolean;\n question: 'Q3';\n}\n\nconst createAnswer = (answer: ShortcodeProps) => {\n const parsedAnswer = [] as Array;\n let stringedAnswer = '' as string;\n const explodeShortcode = (shortcode: ShortcodeProps) => {\n if (typeof shortcode === 'string') {\n parsedAnswer.push(shortcode);\n return;\n }\n const toParse = shortcode?.elements ?? shortcode;\n toParse.forEach(function (value: ShortcodeProps) {\n if (typeof value === 'string' && value) {\n parsedAnswer.push(value);\n }\n if (value.type === 'text' && value.text) {\n parsedAnswer.push(value.text);\n }\n // @ts-ignore: error after upgrading to ux-configs\n if (value.name === 'tooltip' && value.elements && value.attributes.label) {\n // @ts-ignore: error after upgrading to ux-configs\n parsedAnswer.push(`${value.attributes.label} (`);\n }\n if (value.elements) {\n explodeShortcode(value);\n }\n // @ts-ignore: error after upgrading to ux-configs\n if (value.name === 'tooltip' && value.elements && value.attributes.label) {\n parsedAnswer.push(')');\n }\n });\n };\n explodeShortcode(answer);\n // transform back into array\n stringedAnswer = parsedAnswer.join('');\n // sometimes we start with a newline, we don't want to change it to a comma\n stringedAnswer = stringedAnswer.startsWith('\\n') ? stringedAnswer.substring(1) : stringedAnswer;\n // sometimes we end with a newline, we don't want to change it to a comma\n stringedAnswer = stringedAnswer.endsWith('\\n')\n ? `${stringedAnswer.slice(0, stringedAnswer.length - 1)}.`\n : stringedAnswer;\n // replace full stops\n stringedAnswer = stringedAnswer.split('\\n\\n').join('. ');\n // replace start line stops\n stringedAnswer = stringedAnswer.split(' \\n').join(' ');\n // replace end line stops\n stringedAnswer = stringedAnswer.split('\\n').join(', ');\n // trim any remaining noise\n stringedAnswer = stringedAnswer.trim();\n return stringedAnswer;\n};\n\nconst createMainEntity = (ribbons: Ribbons) => {\n return ribbons.reduce((mainEntity: Array, ribbon: Ribbon) => {\n const items = ribbon.props?.items ?? [];\n const ribbonEntity = items.map((item: ItemType) => ({\n '@type': 'Question',\n 'name': item.question,\n 'acceptedAnswer': {\n '@type': 'Answer',\n // replace multiple spaces\n 'text': createAnswer(item.answer),\n },\n }));\n\n return mainEntity.concat(ribbonEntity);\n }, []);\n};\n\nexport const getJsonLd = (ribbons: Ribbons) => {\n const faqRibbons = ribbons.filter((ribbon: Ribbon) => {\n return ribbon.type === RibbonType.ELABORATE && ribbon.props.context === 'FAQ';\n });\n\n if (isNilOrEmpty(faqRibbons)) {\n return null;\n }\n\n return {\n '@context': 'https://schema.org',\n '@type': 'FAQPage',\n 'mainEntity': createMainEntity(faqRibbons),\n };\n};\n\nconst FaqJsonLd = ({ ribbons }: OuterProps) => {\n const jsonLD = getJsonLd(ribbons);\n const hasJsonLD = isNotNilNorEmpty(jsonLD);\n\n if (hasJsonLD) {\n return (\n \n \n \n );\n }\n\n return null;\n};\n\nexport default FaqJsonLd;\n","import FaqJsonLd from './FaqJsonLd';\n\nexport default FaqJsonLd;\n"],"sourceRoot":""}