{"version":3,"file":"static/js/6667.146979a8558bf42a52e8.js","mappings":"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","sources":["components/BlogSection/ArticleSectionPageHelmet.jsx","components/BlogSection/BlogComponents/HOC/BlogHOC.tsx","components/ScriptHelmet.jsx","helpers/articleScriptHelper.js","helpers/editorFormHelper.js","helpers/form.js","hooks/useUTMFormValues.ts","services/apiService.ts","helpers/objectHelper.ts","services/marketingCloudPublicService.ts"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useStaticValues } from '@stateManagement/StaticValuesContext';\nimport { PageHelmet } from '../../components/PageHelmet';\nimport { ScriptHelmet } from '@components/ScriptHelmet';\nimport geotabShare from '@images/geotabShareImage.jpg';\n\nfunction truncateDescription(bio) {\n const seoDescriptionLimit = 120;\n\n if (bio.length < seoDescriptionLimit) {\n return bio;\n } else {\n const lastSentenceIndex = bio.substring(0, seoDescriptionLimit).lastIndexOf('.');\n if (lastSentenceIndex === -1) {\n return bio.substring(0, seoDescriptionLimit);\n } else {\n return bio.substring(0, lastSentenceIndex + 1);\n }\n }\n}\n\nfunction getAuthorSeo(blog, authorTranslation) {\n return {\n title: authorTranslation\n ? `${authorTranslation} - ${blog.authorPageData.author.name}`\n : blog.authorPageData.author.name,\n description: blog.authorPageData.author.shortBiography\n ? truncateDescription(blog.authorPageData.author.shortBiography)\n : `${blog.authorPageData.author.name} have written blog articles for Geotab.`,\n canonical: blog.authorPageData.author.canonical,\n datePublished: blog.authorPageData.author.publishedDateUtc,\n dateModified: blog.authorPageData.author.modifiedDateUtc,\n };\n}\n\nfunction getArticleHeaderImage(article, articleType, prefixStringWithBaseUrl) {\n if (article.articleData[articleType] && article.articleData[articleType].imageUrl) {\n return prefixStringWithBaseUrl(article.articleData[articleType].imageUrl);\n } else {\n return prefixStringWithBaseUrl(geotabShare);\n }\n}\n\nfunction getArticleSectionSeo(isAuthorPage, article, articleType, prefixStringWithBaseUrl, authorTranslation) {\n if (isAuthorPage && article.authorPageData && article.authorPageData.author) {\n return getAuthorSeo(article, authorTranslation);\n } else {\n return {\n title: article.articleData[articleType].pageTitle\n ? article.articleData[articleType].pageTitle\n : article.articleData[articleType].title,\n description: article.articleData[articleType].metaDescription\n ? article.articleData[articleType].metaDescription\n : article.articleData[articleType].description,\n imageUrl: getArticleHeaderImage(article, articleType, prefixStringWithBaseUrl),\n canonical: article.articleData[articleType].canonical,\n dateModified: article.articleData[articleType].modifiedDateUtc,\n datePublished: article.articleData[articleType].publishedDateUtc,\n };\n }\n}\n\nexport function ArticleSectionPageHelmet({\n isAuthorPage = false,\n noIndex = false,\n article,\n articleType,\n script,\n authorTranslation,\n}) {\n const { prefixStringWithBaseUrl } = useStaticValues();\n const seo = getArticleSectionSeo(isAuthorPage, article, articleType, prefixStringWithBaseUrl, authorTranslation);\n\n return (\n <>\n \n {script ? : null}\n \n );\n}\n\nArticleSectionPageHelmet.propTypes = {\n isAuthorPage: PropTypes.bool,\n noIndex: PropTypes.bool,\n articleType: PropTypes.string,\n article: PropTypes.objectOf(Object).isRequired,\n script: PropTypes.shape({\n type: PropTypes.string,\n body: PropTypes.string,\n }),\n authorTranslation: PropTypes.string,\n};\n","import React, { useMemo } from 'react';\nimport { useTranslation } from '@stateManagement/TranslationContext';\nimport { PageHelmet } from '@components/PageHelmet';\nimport { ArticleSectionPageHelmet } from '@components/BlogSection/ArticleSectionPageHelmet';\nimport { getTranslation } from '@helpers/languageTranslations';\nimport { getBlogStructuredDataScript } from '@helpers/articleScriptHelper';\nimport { useStaticValues } from '@stateManagement/StaticValuesContext';\n\ninterface BlogHOCProps {\n type?: 'authorPage' | 'articlePage' | 'categoryPage';\n noIndex?: boolean;\n children: React.ReactNode;\n}\n\nexport function BlogHOC({ type, noIndex, children }: BlogHOCProps): JSX.Element {\n const { prefixStringWithBaseUrl, blog, mediaUrlPrefix, fullUrl } = useStaticValues();\n const { selectedLanguageTranslation } = useTranslation();\n const categoriesTranslation = useMemo(\n () => getTranslation(selectedLanguageTranslation, 'categories'),\n [selectedLanguageTranslation]\n );\n\n const pageHelmet = useMemo(() => {\n switch (type) {\n case 'authorPage':\n return (\n \n );\n case 'articlePage':\n return (\n \n );\n case 'categoryPage':\n return (\n \n );\n default:\n return ;\n }\n }, [\n blog,\n noIndex,\n type,\n selectedLanguageTranslation,\n fullUrl,\n mediaUrlPrefix,\n prefixStringWithBaseUrl,\n categoriesTranslation,\n ]);\n\n return (\n <>\n {pageHelmet}\n
{children}
\n \n );\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Helmet from 'react-helmet';\n\nexport function ScriptHelmet({ script }) {\n return {script ? : null};\n}\n\nScriptHelmet.defaultProps = {\n script: null,\n};\n\nScriptHelmet.propTypes = {\n script: PropTypes.shape({\n type: PropTypes.string,\n body: PropTypes.string,\n }),\n};\n","import { resolveImagePath } from '@helpers/gallery';\nimport geotabShare from '@images/geotabShareImage.jpg';\nimport geotabLogoWithR from '@images/Navigation/geotab-logo-with-r-600x60.svg';\n\nconst getFaqArray = (faqContents) => {\n return Array.isArray(faqContents)\n ? faqContents.map(({ answer, question }) => {\n return {\n '@type': 'Question',\n name: question,\n acceptedAnswer: {\n '@type': 'Answer',\n text: answer,\n },\n };\n })\n : {};\n};\n\nexport const getBlogStructuredDataScript = (article, mediaUrlPrefix, prefixStringWithBaseUrl, fullUrl) => {\n const hyperTocJsonLd = getHyperTocStructuredData(article.htmlContent, fullUrl);\n\n const blogPostingJsonLd = {\n '@context': 'https://schema.org',\n '@type': 'BlogPosting',\n mainEntityOfPage: {\n '@type': 'WebPage',\n '@id': fullUrl,\n },\n headline: article.title ? article.title.replace(/\"/g, '\\\\\"') : article.pageTitle.replace(/\"/g, '\\\\\"'),\n image: getImageArray(article, mediaUrlPrefix, prefixStringWithBaseUrl),\n datePublished: article.publishedDateUtc,\n dateModified: article.modifiedDateUtc,\n author: {\n '@type': 'Person',\n name: article.author && article.author.name.replace(/\"/g, '\\\\\"'),\n },\n publisher: {\n '@type': 'Organization',\n name: 'Geotab',\n logo: {\n '@type': 'ImageObject',\n url: prefixStringWithBaseUrl(geotabLogoWithR),\n },\n },\n };\n\n if (article?.frequentlyAskedQuestions?.length) {\n blogPostingJsonLd.mainEntity = {\n '@type': 'FAQPage',\n mainEntity: getFaqArray(article.frequentlyAskedQuestions),\n };\n }\n\n return {\n type: 'application/ld+json',\n body: JSON.stringify({\n '@context': 'https://schema.org',\n '@graph': [blogPostingJsonLd, hyperTocJsonLd],\n }),\n };\n};\n\nexport const getPressReleaseStructuredDataScript = (article, mediaUrlPrefix, prefixStringWithBaseUrl, fullUrl) => {\n return {\n type: 'application/ld+json',\n body: `{\n \"@context\": \"https://schema.org\",\n \"@type\": \"NewsArticle\",\n \"url\": \"${fullUrl}\",\n \"mainEntityOfPage\": {\n \"@type\": \"WebPage\",\n \"@id\": \"${fullUrl}\"\n },\n \"headline\": \"${\n article && article.title ? article.title.replace(/\"/g, '') : article.pageTitle.replace(/\"/g, '')\n }\",\n \"image\": [${getImageArray(article, mediaUrlPrefix, prefixStringWithBaseUrl)}],\n \"datePublished\": \"${article && article.publishedDateUtc}\",\n \"dateModified\": \"${article && article.modifiedDateUtc}\",\n \"publisher\": {\n \"@type\": \"Organization\",\n \"name\": \"Geotab\",\n \"logo\": {\n \"@type\": \"ImageObject\",\n \"url\": \"${prefixStringWithBaseUrl(geotabLogoWithR)}\"\n }\n }\n }`,\n };\n};\n\nexport const getSuccessStoryStructuredDataScript = (article, mediaUrlPrefix, prefixStringWithBaseUrl, fullUrl) => {\n const hyperTocJsonLd = getHyperTocStructuredData(article.htmlContent, fullUrl);\n const successStoryJsonLd = {\n '@context': 'https://schema.org',\n '@type': 'Article',\n url: fullUrl,\n mainEntityOfPage: {\n '@type': 'WebPage',\n '@id': fullUrl,\n },\n name: article.title ? article.title.replace(/\"/g, '\\\\\"') : article.pageTitle.replace(/\"/g, '\\\\\"'),\n description: article.metaDescription\n ? article.metaDescription.replace(/\"/g, '\\\\\"')\n : article.description.replace(/\"/g, '\\\\\"'),\n headline: article.title ? article.title.replace(/\"/g, '\\\\\"') : article.pageTitle.replace(/\"/g, '\\\\\"'),\n image: getImageArray(article, mediaUrlPrefix, prefixStringWithBaseUrl),\n datePublished: article.publishedDateUtc,\n dateModified: article.modifiedDateUtc,\n publisher: {\n '@type': 'Organization',\n name: 'Geotab',\n logo: {\n '@type': 'ImageObject',\n url: prefixStringWithBaseUrl(geotabLogoWithR),\n },\n },\n };\n\n return {\n type: 'application/ld+json',\n body: JSON.stringify({\n '@context': 'https://schema.org',\n '@graph': [successStoryJsonLd, hyperTocJsonLd],\n }),\n };\n};\n\nexport const getGlossaryStructuredDataScript = (article, mediaUrlPrefix, prefixStringWithBaseUrl, fullUrl) => {\n const hyperTocJsonLd = getHyperTocStructuredData(article.htmlContent, fullUrl);\n\n const glossaryJsonLd = {\n '@context': 'https://schema.org',\n '@type': 'Article',\n url: fullUrl,\n mainEntityOfPage: {\n '@type': 'WebPage',\n '@id': fullUrl,\n },\n name: article.title ? article.title.replace(/\"/g, '\\\\\"') : article.pageTitle.replace(/\"/g, '\\\\\"'),\n description: article.metaDescription\n ? article.metaDescription.replace(/\"/g, '\\\\\"')\n : article.description.replace(/\"/g, '\\\\\"'),\n headline: article.title ? article.title.replace(/\"/g, '\\\\\"') : article.pageTitle.replace(/\"/g, '\\\\\"'),\n image: getImageArray(article, mediaUrlPrefix, prefixStringWithBaseUrl),\n datePublished: article.publishedDateUtc,\n dateModified: article.modifiedDateUtc,\n publisher: {\n '@type': 'Organization',\n name: 'Geotab',\n logo: {\n '@type': 'ImageObject',\n url: prefixStringWithBaseUrl(geotabLogoWithR),\n },\n },\n };\n\n if (article?.frequentlyAskedQuestions?.length) {\n glossaryJsonLd.mainEntity = {\n '@type': 'FAQPage',\n mainEntity: getFaqArray(article.frequentlyAskedQuestions),\n };\n }\n\n return {\n type: 'application/ld+json',\n body: JSON.stringify({\n '@context': 'https://schema.org',\n '@graph': [glossaryJsonLd, hyperTocJsonLd],\n }),\n };\n};\n\nconst getImageArray = (article, mediaUrlPrefix, prefixStringWithBaseUrl) => {\n const imageArray = [];\n if (article && article.imageUrl) {\n imageArray.push(`\"${resolveImagePath(mediaUrlPrefix, article.imageUrl)}\"`);\n }\n\n if (article && article.mobileImageUrl) {\n imageArray.push(`\"${resolveImagePath(mediaUrlPrefix, article.mobileImageUrl)}\"`);\n }\n\n if (article && !article.imageUrl && !article.mobileImageUrl) {\n imageArray.push(`\"${prefixStringWithBaseUrl(geotabShare)}\"`);\n }\n\n return imageArray;\n};\n\nexport const getHyperTocStructuredData = (content, fullUrl) => {\n const tocHeadingsRegexp = /(?:<[^>]+>)*([^<]+)(?:<\\/[^>]+>)*<\\/h\\1>/g;\n const tocEntries = [];\n let matches;\n\n while ((matches = tocHeadingsRegexp.exec(content)) !== null) {\n const id = matches[2];\n const text = matches[3].trim();\n\n tocEntries.push({\n '@type': 'HyperTocEntry',\n url: `${fullUrl}#${id}`,\n name: `${text}`,\n });\n }\n\n return {\n '@context': 'https://schema.org',\n '@type': 'HyperToc',\n tocEntry: tocEntries,\n };\n};\n","export const borderTypes = [\n {\n value: 'top',\n content: 'Top',\n },\n {\n value: 'bottom',\n content: 'Bottom',\n },\n {\n value: 'both',\n content: 'Top & bottom',\n },\n {\n value: 'none',\n content: 'None',\n },\n];\n\nexport const groupedAnimationTypes = [\n {\n value: 'bounceIn',\n content: 'Bounce In',\n group: 'Bounce',\n },\n {\n value: 'bounceInLeft',\n content: 'Bounce In Left',\n group: 'Bounce',\n },\n {\n value: 'bounceInRight',\n content: 'Bounce In Right',\n group: 'Bounce',\n },\n {\n value: 'bounceInUp',\n content: 'Bounce In Up',\n group: 'Bounce',\n },\n {\n value: 'bounceInDown',\n content: 'Bounce In Down',\n group: 'Bounce',\n },\n {\n value: 'fadeIn',\n content: 'Fade In',\n group: 'Fade',\n },\n {\n value: 'fadeInLeft',\n content: 'Fade In Left',\n group: 'Fade',\n },\n {\n value: 'fadeInRight',\n content: 'Fade In Right',\n group: 'Fade',\n },\n {\n value: 'fadeInUp',\n content: 'Fade In Up',\n group: 'Fade',\n },\n {\n value: 'fadeInDown',\n content: 'Fade In Down',\n group: 'Fade',\n },\n {\n value: 'rotateIn',\n content: 'Rotate Fade In',\n group: 'Rotate',\n },\n {\n value: 'rotateInDownLeft',\n content: 'Rotate Down Left Fade In',\n group: 'Rotate',\n },\n {\n value: 'rotateInUpLeft',\n content: 'Rotate Up Left Fade In',\n group: 'Rotate',\n },\n {\n value: 'rotateInDownRight',\n content: 'Rotate Down Right Fade In',\n group: 'Rotate',\n },\n {\n value: 'rotateInUpRight',\n content: 'Rotate Up right fade in',\n group: 'Rotate',\n },\n {\n value: 'zoomIn',\n content: 'Zoom in',\n group: 'Zoom',\n },\n {\n value: 'zoomInUp',\n content: 'Zoom In Up',\n group: 'Zoom',\n },\n {\n value: 'zoomInDown',\n content: 'Zoom In Down',\n group: 'Zoom',\n },\n {\n value: 'zoomInRight',\n content: 'Zoom In Right',\n group: 'Zoom',\n },\n {\n value: 'zoomInLeft',\n content: 'Zoom In Left',\n group: 'Zoom',\n },\n {\n value: 'slideInUp',\n content: 'Slide In up',\n group: 'Slide',\n },\n {\n value: 'slideInDown',\n content: 'Slide In down',\n group: 'Slide',\n },\n {\n value: 'slideInRight',\n content: 'Slide In right',\n group: 'Slide',\n },\n {\n value: 'slideInLeft',\n content: 'Slide in left',\n group: 'Slide',\n },\n {\n value: 'flipInX',\n content: 'Flip In Vertical',\n group: 'Other',\n },\n {\n value: 'flipInY',\n content: 'Flip In Horizontal',\n group: 'Other',\n },\n {\n value: 'rollIn',\n content: 'Roll In Left',\n group: 'Other',\n },\n {\n value: 'lightSpeedIn',\n content: 'Speedy Slide In Right',\n group: 'Other',\n },\n {\n value: 'none',\n content: 'None',\n group: 'Other',\n },\n];\n\nexport function deepCopyObject(objectToCopy) {\n return JSON.parse(JSON.stringify(objectToCopy));\n}\n\nexport function changeNestedObjectValue(keys, objectToChange, value) {\n const lastKey = keys[keys.length - 1];\n let resultObject = deepCopyObject(objectToChange);\n\n let currentObj = resultObject;\n\n for (let i = 0; i < keys.length - 1; i++) {\n currentObj = currentObj[keys[i]];\n }\n\n currentObj[lastKey] = value;\n\n return resultObject;\n}\n\nexport function updateObjectProperties(objectToUpdate, changeContentCallbackArray) {\n let updatedObject = objectToUpdate;\n changeContentCallbackArray.forEach((contentCallback) => {\n const [value, ...args] = contentCallback;\n const filteredArgs = args.filter((arg) => Number.isInteger(arg) || Boolean(arg));\n updatedObject = changeNestedObjectValue(filteredArgs, updatedObject, value);\n });\n\n return updatedObject;\n}\n\nexport function deepEqual(object1, object2) {\n if (!object1 || !object2) {\n return false;\n }\n\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (const key of keys1) {\n const val1 = object1[key];\n const val2 = object2[key];\n const areObjects = isObject(val1) && isObject(val2);\n if ((areObjects && !deepEqual(val1, val2)) || (!areObjects && val1 !== val2)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isObject(object) {\n return object != null && typeof object === 'object';\n}\n","import { hasValue } from '@helpers/operand';\nimport { getFormDefaults } from './languages';\nimport { deepCopyObject } from './editorFormHelper';\nimport { getLanguageRouteAndPrefixByCodeAndRouteKey } from '@helpers/languages';\nimport { LanguageCode } from '@models/languageCode';\nimport { hasLength, isNotEmpty } from '@helpers/validators';\n\nexport function getValueFromEvent(field, event) {\n let value = '';\n\n switch (field.type) {\n case 'checkbox': {\n value = event.target.checked;\n break;\n }\n case 'fileSelect':\n case 'status':\n case 'galleryImage':\n case 'galleryVideo':\n case 'accordionBlock':\n case 'richText':\n case 'faq':\n case 'select': {\n value = event;\n break;\n }\n case 'publishBox': {\n value = `${event.toISOString().slice(0, -5)}Z`;\n break;\n }\n case 'VideoGallery': {\n value = event;\n break;\n }\n default: {\n value = event.target.value;\n break;\n }\n }\n\n return value;\n}\n\nexport function getFormFieldFromId(id, allFields) {\n return allFields.find((field) => field.id === id);\n}\n\nexport function decorateListBox(entity) {\n const bullet = '\\u2022';\n let stringifiedList = Array.isArray(entity) ? entity.map((word) => `${bullet} ${word}\\n`).toString() : null;\n return stringifiedList !== null ? stringifiedList.replaceAll('\\n,', '\\n') : undefined;\n}\n\nexport function getFieldValue(formField, entity) {\n let value = '';\n\n if (\n formField.parentKey &&\n formField.key &&\n hasValue(entity[formField.parentKey]) &&\n hasValue(entity[formField.parentKey][formField.key])\n ) {\n value = entity[formField.parentKey][formField.key];\n } else if (!formField.parentKey && formField.key && hasValue(entity[formField.key])) {\n value = entity[formField.key];\n }\n\n if (formField.type === 'multiTagSelect' && value === '') {\n value = [];\n }\n\n if (formField.type === 'checkbox') {\n value = !!value;\n }\n\n if (formField.key === 'hreflangGroupName' && value === '') {\n value = 'None';\n }\n\n return value;\n}\n\nexport function getFilteredList(lists, field, entityState) {\n function fieldDefinesFieldValueBasedFilter(field) {\n return typeof field.listFilterOnField !== 'undefined' && field.listFilterListItemKey;\n }\n\n function fieldDefinesCallbackBasedFilter(field) {\n return typeof field.listFilterCallback !== 'undefined';\n }\n\n function getFilteredListItemsByFieldValue(list, entityState) {\n return (\n (list?.length &&\n list.filter((item) => item[field.listFilterListItemKey] === entityState[field.listFilterOnField])) ||\n []\n );\n }\n\n function getFilteredListItemsByCallback(list, field) {\n return (list && field.listFilterCallback(list)) || [];\n }\n\n if (lists && field.list && field.list in lists) {\n let list = lists[field.list];\n if (fieldDefinesFieldValueBasedFilter(field)) {\n return getFilteredListItemsByFieldValue(list, entityState);\n }\n\n if (fieldDefinesCallbackBasedFilter(field)) {\n return getFilteredListItemsByCallback(list, field);\n }\n\n return list;\n }\n\n return [];\n}\n\nexport function getValidationRules(allFields) {\n const rules = {};\n\n allFields.forEach((field) => {\n const validators = [];\n\n if (field.required) {\n validators.push(isNotEmpty(`${field.name} is required`));\n }\n\n if (field.requiredCondition) {\n const conditionallyRequiredValidator = (value, values) =>\n values && field.requiredCondition(values) && !hasValue(value) ? `${field.name} is required` : null;\n validators.push(conditionallyRequiredValidator);\n }\n\n if (field.maxLength) {\n validators.push(\n hasLength({ max: field.maxLength }, `${field.name} may not exceed ${field.maxLength} characters`)\n );\n }\n\n if (field.validators) {\n validators.push(...field.validators);\n }\n\n if (validators.length) {\n rules[field.id] = validators;\n }\n });\n\n return rules;\n}\n\nexport function applyLanguageBasedDefaults(formObject, languageId) {\n const defaultProperties = getFormDefaults(languageId);\n const newFormObject = deepCopyObject(formObject);\n\n for (const propertyKey in defaultProperties) {\n if ('undefined' !== typeof newFormObject[propertyKey]) {\n newFormObject[propertyKey] = defaultProperties[propertyKey];\n }\n }\n\n return newFormObject;\n}\n\nfunction ensuresNoTrailingSpaces(string) {\n return string.trimRight();\n}\n\nexport function handleValueToLowerCaseOnChange(event) {\n const start = event.target.selectionStart;\n const end = event.target.selectionEnd;\n event.target.value = event.target.value.toLowerCase();\n event.target.setSelectionRange(start, end);\n}\n\nexport function getSanitizedFormInput(submittingData, formHelperModel) {\n const configurationFunctions = { autoTrim: ensuresNoTrailingSpaces };\n\n function formattedListBox(entity) {\n if (typeof entity === 'string') {\n const replaceNextLine = entity.replaceAll('\\n', '');\n const splitList = replaceNextLine.split('\\u2022 ');\n const formattedList = splitList.filter((word) => word !== '');\n return formattedList;\n } else {\n return entity;\n }\n }\n\n const sanitizedSubmittingData = { ...submittingData };\n\n formHelperModel.fields.forEach((fieldObject) => {\n for (let functionKey in configurationFunctions) {\n const fieldHasConfigurationFunction =\n fieldObject.sanitizationConfiguration && fieldObject.sanitizationConfiguration[functionKey];\n\n const configurationFunction = configurationFunctions[functionKey];\n if (fieldHasConfigurationFunction) {\n const parentKeyFieldExists =\n fieldObject.parentKey &&\n submittingData[fieldObject.parentKey] &&\n submittingData[fieldObject.parentKey][fieldObject.key] != null;\n const fieldExists = submittingData[fieldObject.key] != null;\n\n if (parentKeyFieldExists) {\n const fieldValue = configurationFunction(submittingData[fieldObject.parentKey][fieldObject.key]);\n sanitizedSubmittingData[fieldObject.parentKey][fieldObject.key] = fieldValue;\n } else if (fieldExists) {\n const fieldValue = configurationFunction(submittingData[fieldObject.key]);\n sanitizedSubmittingData[fieldObject.key] = fieldValue;\n }\n } else if (fieldObject.type === 'listBox') {\n const fieldValue = submittingData[fieldObject.key];\n sanitizedSubmittingData[fieldObject.key] = fieldValue ? formattedListBox(fieldValue) : null;\n }\n }\n });\n\n return sanitizedSubmittingData;\n}\n\nexport function redirectToThankyou(\n formReturnURL,\n selectedLanguage = LanguageCode.en,\n dataLayerFormValues,\n isBlogPage = false\n) {\n if (window) {\n dataLayerFormValues ? sessionStorage.setItem('dataLayerFormValues', JSON.stringify(dataLayerFormValues)) : null;\n const redirectUrl =\n formReturnURL ||\n getLanguageRouteAndPrefixByCodeAndRouteKey(\n selectedLanguage,\n isBlogPage ? 'thankYouBlogUrl' : 'thankYouUrl'\n );\n\n if (redirectUrl.startsWith('http://') || redirectUrl.startsWith('https://')) {\n window.location = redirectUrl;\n } else {\n window.location.pathname = redirectUrl;\n }\n }\n}\n\nexport const standardFormSettingNames = {\n //TODO: Add all other shared form settings here and update references on forms and unit tests\n leadSource: 'lead-source',\n leadSourceAdditionalDetails: 'lead-source-additional-details',\n campaignId: 'campaign-id',\n assetName: 'asset-name',\n assetType: 'asset-type',\n assetUrl: 'asset-url',\n};\n\nexport const standardFormFieldNames = {\n //TODO: Add all other shared form field names here and update references on forms and unit tests\n gatedWPleadSource: 'leadSource',\n leadSource: 'LeadSource',\n leadSourceAdditionalDetails: 'Lead_Source_Additional_Details__c',\n campaignId: 'campaign_id',\n assetName: 'assetName',\n assetType: 'assetType',\n assetUrl: 'assetUrl',\n formLanguageCountry: 'Form_Language_Country__c',\n};\n","import { useState } from 'react';\n\ninterface UTMValues {\n /* eslint-disable camelcase */\n Lead_Source_URL__c: string;\n utm_source__c: string | null;\n utm_medium__c: string | null;\n utm_campaign__c: string | null;\n utm_content__c: string | null;\n utm_term__c: string | null;\n utm_id__c: string | null;\n GCLID__c: string | null;\n /* eslint-enable camelcase */\n}\n\ntype UTMFormValues> = FormValues & UTMValues;\n\ntype UTMFormValuesReturnType> = [\n UTMFormValues,\n React.Dispatch>>,\n];\n\nexport const useUTMFormValues = >(\n initialFormValues: FormValues\n): UTMFormValuesReturnType => {\n let utmSource: string | null = '';\n let utmTerm: string | null = '';\n let utmCampaign: string | null = '';\n let utmContent: string | null = '';\n let utmMedium: string | null = '';\n let utmID: string | null = '';\n let gclID: string | null = '';\n let leadSource = '';\n const utmParameters = getQuery();\n\n function getQuery(): UTMValues {\n if (typeof window !== 'undefined') {\n const query = new URLSearchParams(window.location.search);\n utmSource = query.get('utm_source');\n utmCampaign = query.get('utm_campaign');\n utmContent = query.get('utm_content');\n utmMedium = query.get('utm_medium');\n utmTerm = query.get('utm_term');\n utmID = query.get('utm_id');\n gclID = query.get('gclid');\n leadSource = window.location.href;\n }\n\n /* eslint-disable camelcase */\n return {\n Lead_Source_URL__c: leadSource,\n utm_source__c: utmSource,\n utm_medium__c: utmMedium,\n utm_campaign__c: utmCampaign,\n utm_content__c: utmContent,\n utm_term__c: utmTerm,\n utm_id__c: utmID,\n GCLID__c: gclID,\n };\n /* eslint-enable camelcase */\n }\n\n return useState({ ...initialFormValues, ...utmParameters });\n};\n","import { CookieKey } from '@models/cookie';\nimport { getCookie } from './cookieService';\n\nconst defaultHeaders: HeadersInit = { Accept: 'application/json', 'Content-Type': 'application/json' };\n\ninterface ErrorBody {\n Message?: string;\n StackTrace?: string;\n StatusCode?: number;\n}\n\nexport function httpGet(\n url: string,\n headers: HeadersInit | undefined = undefined,\n cache: RequestCache | null = null,\n returnOriginalError = false,\n includeAuthorizationHeader = true\n): Promise {\n const httpMethod = 'GET';\n const requestOptions = generateRequestOptions(httpMethod, headers, null, cache, includeAuthorizationHeader);\n return fetch(url, requestOptions).then(\n async (response) => await handleResponse(response, httpMethod, returnOriginalError)\n );\n}\n\nexport function httpPost(\n url: string,\n body: string | FormData | null = null,\n headers: HeadersInit | undefined = defaultHeaders\n): Promise {\n const httpMethod = 'POST';\n const requestOptions = generateRequestOptions(httpMethod, headers, body);\n return fetch(url, requestOptions).then(async (response) => await handleResponse(response, httpMethod));\n}\n\nexport function httpPut(url: string, body: string | null = null, headers = defaultHeaders): Promise {\n const httpMethod = 'PUT';\n const requestOptions = generateRequestOptions(httpMethod, headers, body);\n return fetch(url, requestOptions).then(async (response) => await handleResponse(response, httpMethod));\n}\n\nexport function httpPatch(\n url: string,\n body: string | null = null,\n headers: HeadersInit | undefined = defaultHeaders\n): Promise {\n const httpMethod = 'PATCH';\n const requestOptions = generateRequestOptions(httpMethod, headers, body);\n return fetch(url, requestOptions).then(async (response) => await handleResponse(response, httpMethod));\n}\n\nexport function httpDelete(url: string, headers: HeadersInit | undefined = undefined): Promise {\n const httpMethod = 'DELETE';\n const requestOptions = generateRequestOptions(httpMethod, headers);\n return fetch(url, requestOptions).then(async (response) => await handleResponse(response, httpMethod));\n}\n\nasync function handleResponse(response: Response, httpMethod: string, returnOriginalError = false): Promise {\n if (!response.ok) {\n let errorBody: ErrorBody = {};\n const text = await response.text();\n try {\n if (typeof text === 'string') {\n errorBody.Message = extractMessageFromText(text);\n errorBody.StatusCode = response.status;\n } else {\n errorBody = JSON.parse(text);\n errorBody.Message = errorBody.StackTrace?.split('\\n')[0];\n }\n } catch (e) {\n errorBody = {\n Message: 'An unknown error occurred.',\n StackTrace: '',\n StatusCode: response.status,\n };\n }\n\n console.error(`${httpMethod} failed with status code ${errorBody.StatusCode}: ${errorBody.Message}`);\n if (returnOriginalError) {\n throw { response, errorBody };\n }\n throw new Error(`Failed to ${httpMethod} with status code ${errorBody.StatusCode}: ${errorBody.Message}`);\n }\n\n return response;\n}\n\nfunction extractMessageFromText(text: string): string {\n try {\n const errorBody = JSON.parse(text);\n return errorBody.message || text;\n } catch {\n return text;\n }\n}\n\nfunction generateRequestOptions(\n httpMethod: string,\n headers: HeadersInit | undefined = undefined,\n body: string | FormData | null = null,\n cache: RequestCache | null = null,\n includeAuthorizationHeader = true\n): RequestInit {\n const requestOptions: RequestInit = { method: httpMethod };\n const jwtCookieValue = getCookie(CookieKey.CmsJwtToken);\n\n if (body) {\n requestOptions.body = body;\n }\n\n if (headers) {\n requestOptions.headers = headers;\n }\n\n if (includeAuthorizationHeader && jwtCookieValue) {\n requestOptions.headers = { ...requestOptions.headers, Authorization: `Bearer ${jwtCookieValue}` };\n }\n\n if (cache) {\n requestOptions.cache = cache;\n }\n\n return requestOptions;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport const trimObjectValues = (inputObject: Record): Record => {\n Object.keys(inputObject).forEach((i) => {\n const value = inputObject[i];\n if (typeof value === 'string') {\n inputObject[i] = value.trim();\n } else if (value === 'object') {\n if (value !== null && value !== undefined) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n inputObject[i] = trimObjectValues(value as Record);\n } else {\n inputObject[i] = null;\n }\n }\n });\n\n return inputObject;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { trimObjectValues } from '@helpers/objectHelper';\nimport { updateGeotabSourceCookie } from '@helpers/geotabSourceCookieHelper';\nimport { httpPost } from './apiService';\n\nexport async function postMarketingCloudForm(\n formId: string,\n jsonData: Record,\n recaptchaToken: string\n): Promise {\n const modifiedFormValues: Record = { ...trimObjectValues(jsonData) };\n\n modifiedFormValues.recaptchaToken = recaptchaToken;\n\n if (formId === 'generic-lead-form-test' || formId === 'generic-lead-form') {\n const geotabSourceCookieValue = updateGeotabSourceCookie();\n\n modifiedFormValues['Website_Cookie__c'] = geotabSourceCookieValue\n ? Object.keys(geotabSourceCookieValue)\n .map((key) => `${key}:${geotabSourceCookieValue[key as keyof typeof geotabSourceCookieValue]}`)\n .join()\n : '';\n }\n\n await httpPost(`/api/marketingcloud/${formId}/`, JSON.stringify(modifiedFormValues));\n}\n"],"names":["truncateDescription","bio","length","lastSentenceIndex","substring","lastIndexOf","getArticleHeaderImage","article","articleType","prefixStringWithBaseUrl","articleData","imageUrl","geotabShare","getArticleSectionSeo","isAuthorPage","authorTranslation","authorPageData","author","blog","title","name","description","shortBiography","canonical","datePublished","publishedDateUtc","dateModified","modifiedDateUtc","getAuthorSeo","pageTitle","metaDescription","ArticleSectionPageHelmet","noIndex","script","useStaticValues","seo","_jsxs","_Fragment","children","_jsx","PageHelmet","ScriptHelmet","propTypes","PropTypes","Object","isRequired","type","body","BlogHOC","mediaUrlPrefix","fullUrl","selectedLanguageTranslation","useTranslation","categoriesTranslation","useMemo","getTranslation","pageHelmet","geotabAuthor","getBlogStructuredDataScript","blogArticle","categoryPageData","category","page","pagedBlogArticles","currentPage","fleetManagementBlog","id","Helmet","defaultProps","getFaqArray","faqContents","Array","isArray","map","answer","question","acceptedAnswer","text","hyperTocJsonLd","getHyperTocStructuredData","htmlContent","blogPostingJsonLd","mainEntityOfPage","headline","replace","image","getImageArray","publisher","logo","url","geotabLogoWithR","frequentlyAskedQuestions","mainEntity","JSON","stringify","getPressReleaseStructuredDataScript","getSuccessStoryStructuredDataScript","successStoryJsonLd","getGlossaryStructuredDataScript","glossaryJsonLd","imageArray","push","resolveImagePath","mobileImageUrl","content","tocHeadingsRegexp","tocEntries","matches","exec","trim","tocEntry","borderTypes","value","groupedAnimationTypes","group","deepCopyObject","objectToCopy","parse","changeNestedObjectValue","keys","objectToChange","lastKey","resultObject","currentObj","i","updateObjectProperties","objectToUpdate","changeContentCallbackArray","updatedObject","forEach","contentCallback","args","filteredArgs","filter","arg","Number","isInteger","Boolean","deepEqual","object1","object2","keys1","keys2","key","val1","val2","areObjects","isObject","object","getValueFromEvent","field","event","target","checked","toISOString","slice","getFormFieldFromId","allFields","find","decorateListBox","entity","stringifiedList","word","toString","replaceAll","undefined","getFieldValue","formField","parentKey","hasValue","getFilteredList","lists","entityState","list","listFilterOnField","listFilterListItemKey","fieldDefinesFieldValueBasedFilter","item","getFilteredListItemsByFieldValue","listFilterCallback","fieldDefinesCallbackBasedFilter","getFilteredListItemsByCallback","getValidationRules","rules","validators","required","isNotEmpty","requiredCondition","conditionallyRequiredValidator","values","maxLength","hasLength","max","applyLanguageBasedDefaults","formObject","languageId","defaultProperties","getFormDefaults","newFormObject","propertyKey","ensuresNoTrailingSpaces","string","trimRight","handleValueToLowerCaseOnChange","start","selectionStart","end","selectionEnd","toLowerCase","setSelectionRange","getSanitizedFormInput","submittingData","formHelperModel","configurationFunctions","autoTrim","formattedListBox","split","sanitizedSubmittingData","fields","fieldObject","functionKey","fieldHasConfigurationFunction","sanitizationConfiguration","configurationFunction","parentKeyFieldExists","fieldExists","fieldValue","redirectToThankyou","formReturnURL","selectedLanguage","LanguageCode","en","dataLayerFormValues","isBlogPage","window","sessionStorage","setItem","redirectUrl","getLanguageRouteAndPrefixByCodeAndRouteKey","startsWith","location","pathname","standardFormSettingNames","leadSource","leadSourceAdditionalDetails","campaignId","assetName","assetType","assetUrl","standardFormFieldNames","gatedWPleadSource","formLanguageCountry","useUTMFormValues","initialFormValues","utmSource","utmTerm","utmCampaign","utmContent","utmMedium","utmID","gclID","utmParameters","query","URLSearchParams","search","get","href","Lead_Source_URL__c","utm_source__c","utm_medium__c","utm_campaign__c","utm_content__c","utm_term__c","utm_id__c","GCLID__c","getQuery","useState","defaultHeaders","Accept","httpGet","headers","cache","returnOriginalError","includeAuthorizationHeader","requestOptions","generateRequestOptions","fetch","then","async","handleResponse","response","httpPost","httpMethod","httpPatch","httpDelete","ok","errorBody","Message","message","extractMessageFromText","StatusCode","status","StackTrace","e","console","error","Error","method","jwtCookieValue","getCookie","CookieKey","CmsJwtToken","Authorization","trimObjectValues","inputObject","postMarketingCloudForm","formId","jsonData","recaptchaToken","modifiedFormValues","geotabSourceCookieValue","updateGeotabSourceCookie","join"],"sourceRoot":""}