{"version":3,"file":"sections-survey-excerpt.d457f0c2ac884dc3a808.js","mappings":"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","sources":["webpack://adjusters/./src/scripts/common/ajax.js","webpack://adjusters/./src/scripts/common/util.js","webpack://adjusters/./src/scripts/components/modal.js","webpack://adjusters/./src/scripts/react/common/components/InlineSpinner.js","webpack://adjusters/./src/scripts/react/common/components/Spinner.js","webpack://adjusters/./src/scripts/react/common/hooks/useIntersectionObserver.js","webpack://adjusters/./src/scripts/react/survey-excerpt/components/SurveyExcerpt.js","webpack://adjusters/./src/scripts/react/survey-excerpt/components/HideColumnButton.js","webpack://adjusters/./src/scripts/react/survey-excerpt/components/Surveys.js","webpack://adjusters/./src/scripts/react/survey-excerpt/components/Excerpts.js","webpack://adjusters/./src/scripts/react/survey-excerpt/components/ShowColumnButton.js","webpack://adjusters/./src/scripts/react/survey-excerpt/components/App.js","webpack://adjusters/./src/sections/survey-excerpt.js"],"sourcesContent":["import wretch from 'wretch'\n\nwretch.options({\n headers: { 'X-Requested-With': 'XMLHttpRequest' },\n})\n\nexport default wretch()\n","export const isTouchDevice = 'ontouchstart' in document.documentElement\n\nexport const isIos =\n /iPad|iPhone|iPod/.test(navigator.platform) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)\n\nexport const createUrl = (base, formData = {}, append = false) => {\n let data = formData\n\n if (formData instanceof FormData === false) {\n data = new FormData()\n\n for (const [key, value] of Object.entries(formData)) {\n data.append(key, value)\n }\n }\n\n if (typeof base === 'object') {\n const baseUrl = new URL(base)\n\n if (append) {\n const params = baseUrl.searchParams\n\n for (const [key, value] of data) {\n params.set(key, value)\n }\n\n return baseUrl\n } else {\n const params = new URLSearchParams(data)\n\n return new URL(`${base}?${params}`)\n }\n }\n\n if (typeof base === 'string') {\n const params = new URLSearchParams(formData)\n const url = new URL(`${base}?${params}`)\n\n return url\n }\n}\n\nexport const geolocate = (success, error) => {\n if (navigator.geolocation) {\n navigator.geolocation.getCurrentPosition(success, error, { maximumAge: 0 })\n } else {\n return false\n }\n}\n\nexport const trackGoogleAnalytics = (event) => {\n if (window.dataLayer) {\n dataLayer.push(event)\n }\n}\n","import '@styles/components/modal.css'\nimport ajax from '@common/ajax'\nimport { on, off } from 'delegated-events'\nimport A11yDialog from 'a11y-dialog'\n\nconst generateTemplate = (id, useDefaultClose = true, title = false) => {\n const role = useDefaultClose ? 'dialog' : 'alertdialog'\n const labeledBy = title ? 'aria-labelledby=\"modal-title\"' : ''\n\n const html = `\n
\n
\n\n ${\n useDefaultClose === true\n ? ''\n : ''\n }\n\n
\n \n \n \n
\n
\n `\n\n return html\n}\n\nconst populateModal = async (opts = {}, modalEl) => {\n const type = opts.type\n const title = opts.title ?? ''\n const url = opts.url\n\n let modalContent = ''\n\n if (type === 'video') {\n modalContent = `\n
\n

Watch ${title}

\n
\n \n\n \n
\n
\n `\n\n modalEl.querySelector('.modal-container').innerHTML = modalContent\n }\n\n if (type === 'letter') {\n modalContent = await ajax.get(url).text()\n\n modalEl.querySelector('.modal-container').innerHTML = modalContent\n\n const { default: component } = await import(\n /* webpackChunkName: \"components-modal-slider\" */ '@scripts/components/modal-slider'\n )\n\n component.init(modalEl)\n }\n\n if (type === 'content') {\n modalContent = await ajax.get(url).text()\n\n modalEl.querySelector('.modal-container').innerHTML = modalContent\n }\n\n if (type === 'subscribe') {\n modalContent = await ajax.get(url).text()\n\n modalEl.querySelector('.modal-container').innerHTML = modalContent\n\n const { default: component } = await import(\n /* webpackChunkName: \"components-modal-subscribe\" */ '@scripts/components/modal-subscribe'\n )\n\n component.init(modalEl)\n }\n\n if (type === 'form') {\n modalContent = await ajax.get(url).text()\n\n modalEl.querySelector('.modal-container').innerHTML = modalContent\n modalEl.classList.add('as-full')\n\n const { default: component } = await import(\n /* webpackChunkName: \"components-modal-form\" */ '@scripts/components/modal-form'\n )\n\n component.init(modalEl)\n }\n}\n\nconst handleModal = (e) => {\n e.preventDefault()\n\n const triggerEl = e.target.closest('[data-modal]')\n\n openModal({\n type: triggerEl.dataset.modal,\n title: triggerEl.dataset.modalTitle,\n url: triggerEl.href,\n updateUrl: triggerEl.dataset.modalUpdateUrl ?? false,\n useDefaultClose: triggerEl.dataset.modalDisableDefaultClose === undefined,\n })\n\n return false\n}\n\nconst openModal = (opts = {}) => {\n const type = opts.type\n const title = opts.title ?? false\n let useDefaultClose = opts.useDefaultClose ?? true\n\n if (type === 'video') {\n useDefaultClose = false\n }\n\n if (type === 'subscribe') {\n useDefaultClose = false\n }\n\n if (type === \"content\") {\n useDefaultClose = false;\n }\n\n const id = `modal-${Math.floor(Math.random() * Date.now())}`\n const template = generateTemplate(id, useDefaultClose, title)\n const node = document.createRange().createContextualFragment(template)\n\n document.body.append(node)\n\n const modalEl = document.getElementById(id)\n const modal = new A11yDialog(modalEl)\n\n const currentUrl = opts.defaultUrl ?? window.location.href\n\n if (useDefaultClose === false) {\n on('click', '.modal-custom-close', () => {\n modal.hide()\n });\n }\n\n modal.on('show', () => {\n document.documentElement.classList.add('has-modal-active')\n\n if (opts.updateUrl !== false) {\n window.history.replaceState({}, '', opts.updateUrl)\n }\n })\n\n modal.on('hide', () => {\n document.documentElement.classList.remove('has-modal-active')\n\n modal.destroy()\n\n if (opts.updateUrl !== false) {\n window.history.replaceState({}, '', currentUrl)\n }\n\n if (useDefaultClose === false) {\n off(\"click\", \".modal-custom-close\", () => {\n modal.hide()\n });\n }\n })\n\n modal.on('destroy', (el) => {\n el.remove()\n })\n\n modal.show()\n\n populateModal(\n {\n type: type,\n url: opts.url ?? false,\n updateUrl: opts.updateUrl,\n defaultUrl: opts.defaultUrl,\n },\n modalEl\n )\n}\n\nexport default {\n init: () => {\n const clickArgs = ['click', '[data-modal]', handleModal]\n off(...clickArgs)\n on(...clickArgs)\n\n // If we have video modals, load the YouTube API\n if (document.querySelectorAll('[data-modal=\"video\"]').length) {\n const tag = document.createElement('script')\n tag.src = 'https://www.youtube.com/iframe_api'\n\n const firstScriptTag = document.getElementsByTagName('script')[0]\n\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag)\n }\n },\n openModal,\n}\n","function InlineSpinner() {\n return (\n
\n \n \n \n
\n )\n}\n\nexport default InlineSpinner\n","function Spinner() {\n return (\n
\n \n \n \n
\n )\n}\n\nexport default Spinner\n","import { useEffect, useState } from 'react'\n\nfunction useIntersectionObserver(\n elementRef,\n { threshold = 0, root = null, rootMargin = '0%', freezeOnceVisible = false }\n) {\n const [entry, setEntry] = useState()\n\n const frozen = entry?.isIntersecting && freezeOnceVisible\n\n const updateEntry = ([entry]) => {\n setEntry(entry)\n }\n\n useEffect(() => {\n const node = elementRef?.current\n const hasIOSupport = !!window.IntersectionObserver\n\n if (!hasIOSupport || frozen || !node) return\n\n const observerParams = { threshold, root, rootMargin }\n const observer = new IntersectionObserver(updateEntry, observerParams)\n\n observer.observe(node)\n\n return () => observer.disconnect()\n }, [elementRef, JSON.stringify(threshold), root, rootMargin, frozen])\n\n return entry\n}\n\nexport default useIntersectionObserver\n","function SurveyExcerpt({ name, content, hasDetails, location, type, date, referenceUrl, reviewSourceTitle, reviewSourceImage }) {\n return (\n
\n \n \n \n\n \n\n {hasDetails && (\n
\n
\n {name &&
{name}
}\n {type &&
{type}
}\n {location &&
{location}
}\n {date &&
{date}
}\n {referenceUrl && (\n
\n \n View Reference Letter\n \n
\n )}\n
\n\n {reviewSourceImage && (\n \n )}\n\n {reviewSourceImage && (\n
\n {reviewSourceImage && {reviewSourceTitle} }\n {reviewSourceTitle &&
{reviewSourceTitle}
}\n
\n )}\n\n
\n )}\n
\n )\n}\n\nexport default SurveyExcerpt\n","function HideColumnButton({ column, hideColumn }) {\n const handleClick = () => {\n hideColumn(column)\n }\n\n return (\n \n )\n}\n\nexport default HideColumnButton\n","import { useState, useEffect, useRef } from 'react'\nimport { createUrl } from '@common/util'\nimport ajax from '@common/ajax'\nimport SurveyExcerpt from './SurveyExcerpt'\nimport HideColumnButton from './HideColumnButton'\nimport Spinner from '@react/common/components/Spinner'\nimport InlineSpinner from '@react/common/components/InlineSpinner'\nimport useIntersectionObserver from '@react/common/hooks/useIntersectionObserver'\n\nfunction Surveys({ data, isVisible, supportsTwoColumns, hideColumn, canHide }) {\n const [items, setItems] = useState(data.items)\n const [heading, setHeading] = useState(data.heading)\n const [hasMore, setHasMore] = useState(data.hasMore)\n const [hasScrollbar, setHasScrollbar] = useState(false)\n const [isLoading, setIsLoading] = useState(false)\n const scrollerRef = useRef(null)\n const loaderRef = useRef(null)\n const entry = useIntersectionObserver(loaderRef, {})\n const isLoaderVisible = !!entry?.isIntersecting\n\n const fetchItems = async (isLoadingMore = false) => {\n setIsLoading(true)\n\n const start = isLoadingMore ? items.length + 1 : 0\n const url = createUrl(window.location, { fetch: 'surveys', start }, true)\n const res = await ajax.get(url).json()\n\n if (start === 0) {\n setItems(res.items)\n } else {\n setItems((current) => [...current, ...res.items])\n }\n\n setHasMore(res.hasMore)\n setHeading(res.heading)\n setIsLoading(false)\n }\n\n useEffect(() => {\n if (isLoaderVisible && !isLoading) {\n fetchItems(true)\n }\n }, [isLoaderVisible, isLoading])\n\n useEffect(() => {\n if (scrollerRef && scrollerRef.current) {\n const el = scrollerRef.current\n\n setHasScrollbar(el.scrollHeight >= el.offsetHeight)\n }\n }, [scrollerRef])\n\n let containerClasses = 'grid gap-8 lg:gap-16'\n const asTwoColumns = !supportsTwoColumns || !canHide\n\n if (asTwoColumns) {\n containerClasses = 'grid md:grid-cols-2 gap-8 lg:gap-16'\n }\n\n return (\n
\n {isLoading && }\n\n
\n

{heading}

\n {supportsTwoColumns && canHide && (\n
\n \n
\n )}\n
\n\n
\n
\n
\n {items.map((item) => (\n \n ))}\n
\n\n {hasMore && (\n
\n \n
\n )}\n
\n
\n
\n )\n}\n\nexport default Surveys\n","import { useState, useEffect, useRef } from 'react'\nimport { createUrl } from '@common/util'\nimport ajax from '@common/ajax'\nimport SurveyExcerpt from './SurveyExcerpt'\nimport HideColumnButton from './HideColumnButton'\nimport Spinner from '@react/common/components/Spinner'\nimport InlineSpinner from '@react/common/components/InlineSpinner'\nimport useIntersectionObserver from '@react/common/hooks/useIntersectionObserver'\n\nfunction Excerpts({ data, isVisible, supportsTwoColumns, hideColumn, canHide }) {\n const [items, setItems] = useState(data.items)\n const [heading, setHeading] = useState(data.heading)\n const [hasMore, setHasMore] = useState(data.hasMore)\n const [hasScrollbar, setHasScrollbar] = useState(false)\n const [isLoading, setIsLoading] = useState(false)\n const scrollerRef = useRef(null)\n const loaderRef = useRef(null)\n const entry = useIntersectionObserver(loaderRef, {})\n const isLoaderVisible = !!entry?.isIntersecting\n\n const fetchItems = async (isLoadingMore = false) => {\n setIsLoading(true)\n\n const start = isLoadingMore ? items.length + 1 : 0\n const url = createUrl(window.location, { fetch: 'excerpts', start }, true)\n const res = await ajax.get(url).json()\n\n if (start === 0) {\n setItems(res.items)\n } else {\n setItems((current) => [...current, ...res.items])\n }\n\n setHasMore(res.hasMore)\n setHeading(res.heading)\n setIsLoading(false)\n }\n\n useEffect(() => {\n if (isLoaderVisible && !isLoading) {\n fetchItems(true)\n }\n }, [isLoaderVisible, isLoading])\n\n useEffect(() => {\n if (scrollerRef && scrollerRef.current) {\n const el = scrollerRef.current\n\n setHasScrollbar(el.scrollHeight >= el.offsetHeight)\n }\n }, [scrollerRef])\n\n let containerClasses = 'grid gap-8 lg:gap-16'\n const asTwoColumns = !supportsTwoColumns || !canHide\n\n if (asTwoColumns) {\n containerClasses = 'grid md:grid-cols-2 gap-8 lg:gap-16'\n }\n\n return (\n
\n {isLoading && }\n\n
\n

{heading}

\n {supportsTwoColumns && canHide && (\n
\n \n
\n )}\n
\n\n
\n
\n
\n {items.map((item) => (\n \n ))}\n
\n\n {hasMore && (\n
\n \n
\n )}\n
\n
\n
\n )\n}\n\nexport default Excerpts\n","function ShowColumnButton({ column, showColumn }) {\n const handleClick = () => {\n showColumn(column)\n }\n\n const label = column === 'surveys' ? 'Surveys' : 'Excerpts'\n\n return (\n \n )\n}\n\nexport default ShowColumnButton\n","import { useState, useEffect } from 'react'\nimport Surveys from './Surveys'\nimport Excerpts from './Excerpts'\nimport ShowColumnButton from './ShowColumnButton'\n\nlet windowWidth = window.innerWidth\n\nconst initialSurveys = document.getElementById('initial-surveys')?.textContent\nconst initialExcerpts = document.getElementById('initial-excerpts')?.textContent\n\nconst surveysData = initialSurveys ? JSON.parse(initialSurveys) : false\nconst excerptsData = initialExcerpts ? JSON.parse(initialExcerpts) : false\n\nconst supportsTwoColumns = surveysData && excerptsData\n\nconst isInitialMobileSize = window.matchMedia('(max-width: 767px)').matches\n\nfunction App() {\n const [isMobileSize, setIsMobileSize] = useState(isInitialMobileSize)\n const [surveysVisible, setSurveysVisible] = useState(true)\n const [excerptsVisible, setExcerptsVisible] = useState(supportsTwoColumns && !isInitialMobileSize)\n\n const containerClasses = surveysVisible && excerptsVisible ? 'grid grid-cols-2 gap-16' : ''\n const canHide = surveysVisible && excerptsVisible && !isMobileSize\n\n useEffect(() => {\n const handleResize = () => {\n if (window.innerWidth != windowWidth) {\n windowWidth = window.innerWidth\n\n setIsMobileSize(window.matchMedia('(max-width: 767px)').matches)\n }\n }\n\n window.addEventListener('resize', handleResize)\n\n return () => window.removeEventListener('resize', handleResize)\n }, [setIsMobileSize])\n\n const hideColumn = (column) => {\n if (column === 'surveys') {\n setSurveysVisible(false)\n }\n\n if (column === 'excerpts') {\n setExcerptsVisible(false)\n }\n }\n\n const showColumn = (column) => {\n if (column === 'surveys') {\n setSurveysVisible(true)\n\n if (isMobileSize) {\n setExcerptsVisible(false)\n }\n }\n\n if (column === 'excerpts') {\n setExcerptsVisible(true)\n\n if (isMobileSize) {\n setSurveysVisible(false)\n }\n }\n }\n\n return (\n
\n {supportsTwoColumns && (\n
\n {!surveysVisible && }\n {!excerptsVisible && }\n
\n )}\n
\n {surveysData && (\n \n )}\n {excerptsData && (\n \n )}\n
\n
\n )\n}\n\nexport default App\n","import React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport App from '@react/survey-excerpt/components/App'\nimport modal from '@scripts/components/modal'\n\nconst rootNode = document.getElementById('survey-excerpt-app')\n\nconst root = createRoot(rootNode)\n\nroot.render(\n \n \n \n)\n\nmodal.init()\n"],"names":["wretch","headers","isTouchDevice","document","documentElement","createUrl","test","navigator","platform","maxTouchPoints","base","formData","append","data","FormData","key","value","Object","entries","baseUrl","URL","params","searchParams","set","URLSearchParams","geolocate","success","error","geolocation","getCurrentPosition","maximumAge","trackGoogleAnalytics","event","window","dataLayer","push","generateTemplate","id","useDefaultClose","title","role","labeledBy","html","populateModal","async","opts","modalEl","type","url","modalContent","querySelector","innerHTML","ajax","text","default","component","init","classList","add","handleModal","e","preventDefault","triggerEl","target","closest","openModal","dataset","modal","modalTitle","href","updateUrl","modalUpdateUrl","undefined","modalDisableDefaultClose","Math","floor","random","Date","now","template","node","createRange","createContextualFragment","body","getElementById","A11yDialog","currentUrl","defaultUrl","location","on","hide","history","replaceState","remove","destroy","off","el","show","clickArgs","querySelectorAll","length","tag","createElement","src","firstScriptTag","getElementsByTagName","parentNode","insertBefore","className","viewBox","cx","cy","r","fill","strokeWidth","elementRef","threshold","root","rootMargin","freezeOnceVisible","entry","setEntry","useState","frozen","isIntersecting","updateEntry","useEffect","current","IntersectionObserver","observer","observe","disconnect","JSON","stringify","name","content","hasDetails","date","referenceUrl","reviewSourceTitle","reviewSourceImage","opacity","d","dangerouslySetInnerHTML","__html","width","height","alt","column","hideColumn","onClick","isVisible","supportsTwoColumns","canHide","items","setItems","heading","setHeading","hasMore","setHasMore","hasScrollbar","setHasScrollbar","isLoading","setIsLoading","scrollerRef","useRef","loaderRef","useIntersectionObserver","isLoaderVisible","isLoadingMore","start","fetch","res","json","fetchItems","scrollHeight","offsetHeight","containerClasses","Spinner","ref","map","item","InlineSpinner","showColumn","label","windowWidth","innerWidth","initialSurveys","textContent","initialExcerpts","surveysData","parse","excerptsData","isInitialMobileSize","matchMedia","matches","isMobileSize","setIsMobileSize","surveysVisible","setSurveysVisible","excerptsVisible","setExcerptsVisible","handleResize","addEventListener","removeEventListener","rootNode","createRoot","render"],"sourceRoot":""}