{"version":3,"sources":["webpack:///./src/hoc/withRouter.tsx","webpack:///./node_modules/body-scroll-lock/lib/bodyScrollLock.esm.js","webpack:///./src/hoc/withQueryParams.tsx","webpack:///./src/hooks/useApi.ts","webpack:///./src/stories/Widgets/Listings/ResourceListing/ResourceListing.styles.ts","webpack:///./src/stories/Widgets/Listings/ResourceListing/ResourceListing.tsx","webpack:///./node_modules/react-use/esm/useFirstMountState.js","webpack:///./node_modules/lodash/noop.js"],"names":["withRouter","WrappedComponent","displayName","name","ComponentWithRouter","props","window","location","Error","React","createElement","StaticRouter","basename","context","BrowserRouter","hasPassiveEvents","passiveTestOptions","addEventListener","removeEventListener","isIosDevice","navigator","platform","test","maxTouchPoints","locks","documentListenerAdded","initialClientY","previousBodyOverflowSetting","previousBodyPaddingRight","allowTouchMove","el","some","lock","options","preventDefault","rawEvent","e","event","target","touches","length","restoreOverflowSetting","undefined","document","body","style","paddingRight","overflow","disableBodyScroll","targetElement","concat","arr","Array","isArray","i","arr2","from","_toConsumableArray","ontouchstart","targetTouches","clientY","ontouchmove","scrollTop","scrollHeight","clientHeight","isTargetElementTotallyScrolled","stopPropagation","handleScroll","passive","_reserveScrollBarGap","reserveScrollBarGap","scrollBarGap","innerWidth","documentElement","clientWidth","setOverflowHidden","console","error","enableBodyScroll","filter","withQueryParams","ComponentWithQueryParams","QueryParamProvider","ReactRouterRoute","Route","useApi","url","enable","jsonPostData","data","setData","useState","setError","loading","setLoading","useEffect","log","async","res","fetch","method","headers","ok","statusText","json","doAsync","ItemList","styled","div","Device","Tablet","Item","TabletLarge","Desktop","pageContext","favourites","filterAlignment","filterTheme","filterTitle","initialData","isLoggedIn","searchTerm","sectorFilter","sortByOptions","tailored","topicFilter","typeFilter","errorText","isFirstMount","useFirstMountState","queryParams","setQueryParams","useQueryParams","BooleanParam","pageIndex","NumberParam","sector","StringParam","sortBy","topic","type","filterValue","sortByValue","value","parameters","queryString","stringify","docId","documentId","pageSize","apiUrl","API_URLS","resources","items","totalItems","FilteredListing","filtersProps","alignment","filters","title","onFilterChange","key","val","onSortChange","renderItems","S","map","item","id","ResourceCard","onPageChange","isFirst","current","module","exports"],"mappings":"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","file":"ResourceListing-d33977c7a5d7169672c6.js","sourcesContent":["import React from 'react';\r\nimport { BrowserRouter, StaticRouter } from 'react-router-dom';\r\nexport function withRouter(WrappedComponent) {\r\n const displayName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\r\n const ComponentWithRouter = (props) => {\r\n if (typeof window === 'undefined') {\r\n if (!props.location) {\r\n throw new Error(`The \"location\" prop was not provided when the \"withRouter\" HOC was used. Ensure the Tag Helper is using the \"use-router\" parameter.`);\r\n }\r\n return (React.createElement(StaticRouter, { basename: props.basename, context: props.context, location: props.location },\r\n React.createElement(WrappedComponent, { ...props })));\r\n }\r\n return (React.createElement(BrowserRouter, { basename: props.basename },\r\n React.createElement(WrappedComponent, { ...props })));\r\n };\r\n ComponentWithRouter.displayName = `withRouter(${displayName})`;\r\n return ComponentWithRouter;\r\n}\r\n","function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n// Older browsers don't support event options, feature detect it.\n\n// Adopted and modified solution from Bohdan Didukh (2017)\n// https://stackoverflow.com/questions/41594997/ios-10-safari-prevent-scrolling-behind-a-fixed-overlay-and-maintain-scroll-posi\n\nvar hasPassiveEvents = false;\nif (typeof window !== 'undefined') {\n var passiveTestOptions = {\n get passive() {\n hasPassiveEvents = true;\n return undefined;\n }\n };\n window.addEventListener('testPassive', null, passiveTestOptions);\n window.removeEventListener('testPassive', null, passiveTestOptions);\n}\n\nvar isIosDevice = typeof window !== 'undefined' && window.navigator && window.navigator.platform && (/iP(ad|hone|od)/.test(window.navigator.platform) || window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1);\n\n\nvar locks = [];\nvar documentListenerAdded = false;\nvar initialClientY = -1;\nvar previousBodyOverflowSetting = void 0;\nvar previousBodyPaddingRight = void 0;\n\n// returns true if `el` should be allowed to receive touchmove events.\nvar allowTouchMove = function allowTouchMove(el) {\n return locks.some(function (lock) {\n if (lock.options.allowTouchMove && lock.options.allowTouchMove(el)) {\n return true;\n }\n\n return false;\n });\n};\n\nvar preventDefault = function preventDefault(rawEvent) {\n var e = rawEvent || window.event;\n\n // For the case whereby consumers adds a touchmove event listener to document.\n // Recall that we do document.addEventListener('touchmove', preventDefault, { passive: false })\n // in disableBodyScroll - so if we provide this opportunity to allowTouchMove, then\n // the touchmove event on document will break.\n if (allowTouchMove(e.target)) {\n return true;\n }\n\n // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).\n if (e.touches.length > 1) return true;\n\n if (e.preventDefault) e.preventDefault();\n\n return false;\n};\n\nvar setOverflowHidden = function setOverflowHidden(options) {\n // If previousBodyPaddingRight is already set, don't set it again.\n if (previousBodyPaddingRight === undefined) {\n var _reserveScrollBarGap = !!options && options.reserveScrollBarGap === true;\n var scrollBarGap = window.innerWidth - document.documentElement.clientWidth;\n\n if (_reserveScrollBarGap && scrollBarGap > 0) {\n previousBodyPaddingRight = document.body.style.paddingRight;\n document.body.style.paddingRight = scrollBarGap + 'px';\n }\n }\n\n // If previousBodyOverflowSetting is already set, don't set it again.\n if (previousBodyOverflowSetting === undefined) {\n previousBodyOverflowSetting = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n};\n\nvar restoreOverflowSetting = function restoreOverflowSetting() {\n if (previousBodyPaddingRight !== undefined) {\n document.body.style.paddingRight = previousBodyPaddingRight;\n\n // Restore previousBodyPaddingRight to undefined so setOverflowHidden knows it\n // can be set again.\n previousBodyPaddingRight = undefined;\n }\n\n if (previousBodyOverflowSetting !== undefined) {\n document.body.style.overflow = previousBodyOverflowSetting;\n\n // Restore previousBodyOverflowSetting to undefined\n // so setOverflowHidden knows it can be set again.\n previousBodyOverflowSetting = undefined;\n }\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\nvar isTargetElementTotallyScrolled = function isTargetElementTotallyScrolled(targetElement) {\n return targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false;\n};\n\nvar handleScroll = function handleScroll(event, targetElement) {\n var clientY = event.targetTouches[0].clientY - initialClientY;\n\n if (allowTouchMove(event.target)) {\n return false;\n }\n\n if (targetElement && targetElement.scrollTop === 0 && clientY > 0) {\n // element is at the top of its scroll.\n return preventDefault(event);\n }\n\n if (isTargetElementTotallyScrolled(targetElement) && clientY < 0) {\n // element is at the bottom of its scroll.\n return preventDefault(event);\n }\n\n event.stopPropagation();\n return true;\n};\n\nexport var disableBodyScroll = function disableBodyScroll(targetElement, options) {\n // targetElement must be provided\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error('disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.');\n return;\n }\n\n // disableBodyScroll must not have been called on this targetElement before\n if (locks.some(function (lock) {\n return lock.targetElement === targetElement;\n })) {\n return;\n }\n\n var lock = {\n targetElement: targetElement,\n options: options || {}\n };\n\n locks = [].concat(_toConsumableArray(locks), [lock]);\n\n if (isIosDevice) {\n targetElement.ontouchstart = function (event) {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n initialClientY = event.targetTouches[0].clientY;\n }\n };\n targetElement.ontouchmove = function (event) {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n handleScroll(event, targetElement);\n }\n };\n\n if (!documentListenerAdded) {\n document.addEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n documentListenerAdded = true;\n }\n } else {\n setOverflowHidden(options);\n }\n};\n\nexport var clearAllBodyScrollLocks = function clearAllBodyScrollLocks() {\n if (isIosDevice) {\n // Clear all locks ontouchstart/ontouchmove handlers, and the references.\n locks.forEach(function (lock) {\n lock.targetElement.ontouchstart = null;\n lock.targetElement.ontouchmove = null;\n });\n\n if (documentListenerAdded) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n documentListenerAdded = false;\n }\n\n // Reset initial clientY.\n initialClientY = -1;\n } else {\n restoreOverflowSetting();\n }\n\n locks = [];\n};\n\nexport var enableBodyScroll = function enableBodyScroll(targetElement) {\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error('enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.');\n return;\n }\n\n locks = locks.filter(function (lock) {\n return lock.targetElement !== targetElement;\n });\n\n if (isIosDevice) {\n targetElement.ontouchstart = null;\n targetElement.ontouchmove = null;\n\n if (documentListenerAdded && locks.length === 0) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n documentListenerAdded = false;\n }\n } else if (!locks.length) {\n restoreOverflowSetting();\n }\n};\n\n","import React from 'react';\r\nimport { Route } from 'react-router';\r\nimport { QueryParamProvider } from 'use-query-params';\r\nimport { withRouter } from './withRouter';\r\nexport function withQueryParams(WrappedComponent) {\r\n const displayName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\r\n const ComponentWithQueryParams = (props) => {\r\n return (React.createElement(QueryParamProvider, { ReactRouterRoute: Route },\r\n React.createElement(WrappedComponent, { ...props })));\r\n };\r\n ComponentWithQueryParams.displayName = `withQueryParams(${displayName})`;\r\n return withRouter(ComponentWithQueryParams);\r\n}\r\n","import React from 'react';\r\nexport function useApi(url, enable = true, jsonPostData = '') {\r\n const [data, setData] = React.useState();\r\n const [error, setError] = React.useState();\r\n const [loading, setLoading] = React.useState(false);\r\n React.useEffect(() => {\r\n console.log('useApi', url, enable, jsonPostData);\r\n if (!enable) {\r\n return;\r\n }\r\n doAsync();\r\n async function doAsync() {\r\n try {\r\n setLoading(true);\r\n const res = await fetch(url, {\r\n method: jsonPostData !== '' ? 'POST' : 'GET',\r\n body: jsonPostData !== '' ? jsonPostData : null,\r\n headers: {\r\n 'content-type': 'application/json',\r\n },\r\n });\r\n if (!res.ok) {\r\n setData(undefined);\r\n setError(new Error(res.statusText));\r\n setLoading(false);\r\n return;\r\n }\r\n const data = (await res.json());\r\n setData(data);\r\n setError(undefined);\r\n setLoading(false);\r\n }\r\n catch (error) {\r\n setData(undefined);\r\n setError(error);\r\n setLoading(false);\r\n }\r\n }\r\n }, [enable, url, jsonPostData]);\r\n return { data, error, loading };\r\n}\r\n","import { Device, from } from '@helpers/media';\r\nimport styled from 'styled-components';\r\nconst ItemList = styled.div `\r\n display: grid;\r\n gap: 10px;\r\n grid-template-columns: repeat(12, 1fr);\r\n margin-top: var(--sectionMargin);\r\n\r\n @media ${from(Device.Tablet)} {\r\n gap: 30px;\r\n }\r\n`;\r\nconst Item = styled.div `\r\n grid-column: span 6;\r\n\r\n @media ${from(Device.TabletLarge)} {\r\n grid-column: span 4;\r\n }\r\n\r\n @media ${from(Device.Desktop)} {\r\n grid-column: span 3;\r\n }\r\n`;\r\nexport default {\r\n Item,\r\n ItemList,\r\n};\r\n","import { API_URLS } from '@helpers/api';\r\nimport { withQueryParams } from '@hoc/withQueryParams';\r\nimport { useApi } from '@hooks/useApi';\r\nimport ResourceCard from '@stories/Components/Cards/ResourceCard/ResourceCard';\r\nimport FilteredListing from '@stories/Components/FilteredListing/FilteredListing';\r\nimport queryString from 'query-string';\r\nimport React from 'react';\r\nimport { useFirstMountState } from 'react-use';\r\nimport { BooleanParam, NumberParam, StringParam, useQueryParams } from 'use-query-params';\r\nimport S from './ResourceListing.styles';\r\nconst ResourceListing = ({ pageContext, favourites = false, filterAlignment = 'center', filterTheme = 'lightGrey', filterTitle, initialData, isLoggedIn, searchTerm = '', sectorFilter, sortByOptions, tailored = false, topicFilter, typeFilter, errorText, }) => {\r\n const isFirstMount = useFirstMountState();\r\n // Define query string parameters.\r\n const [queryParams, setQueryParams] = useQueryParams({\r\n favourites: BooleanParam,\r\n pageIndex: NumberParam,\r\n sector: StringParam,\r\n sortBy: StringParam,\r\n tailored: BooleanParam,\r\n topic: StringParam,\r\n type: StringParam,\r\n });\r\n // Create filter value structure.\r\n const filterValue = {\r\n sector: queryParams.sector ?? '',\r\n topic: queryParams.topic ?? '',\r\n type: queryParams.type ?? '',\r\n };\r\n // Get page index or default.\r\n const pageIndex = queryParams.pageIndex ?? 1;\r\n // Get sort by or default.\r\n const sortByValue = queryParams.sortBy ?? sortByOptions[0].value;\r\n // Construct API url.\r\n const parameters = queryString.stringify({\r\n docId: pageContext?.documentId,\r\n favourites: favourites,\r\n pageIndex: pageIndex,\r\n pageSize: 12,\r\n searchTerm: searchTerm,\r\n sector: filterValue.sector,\r\n tailored: tailored,\r\n topic: filterValue.topic,\r\n type: filterValue.type,\r\n sortBy: sortByValue,\r\n });\r\n const apiUrl = `${API_URLS.resources}?${parameters}`;\r\n // Fetch data.\r\n const { data, loading, error } = useApi(apiUrl, !isFirstMount);\r\n // Get items from response or initial items.\r\n const items = data?.items ?? initialData.items;\r\n const totalItems = data?.totalItems ?? initialData.totalItems;\r\n return (React.createElement(FilteredListing, { errorText: errorText, error: error, filtersProps: {\r\n alignment: filterAlignment,\r\n filters: [typeFilter, topicFilter, sectorFilter],\r\n filterTheme: filterTheme,\r\n filterValue: filterValue,\r\n sortByOptions: sortByOptions,\r\n sortByValue: sortByValue,\r\n title: filterTitle,\r\n onFilterChange: (key, val) => setQueryParams({ [key]: val, pageIndex: 1 }),\r\n onSortChange: (val) => setQueryParams({ sortBy: val, pageIndex: 1 }),\r\n }, items: items, loading: loading, pageIndex: pageIndex, renderItems: (items) => (React.createElement(S.ItemList, null, items.map((item) => (React.createElement(S.Item, { key: item.id },\r\n React.createElement(ResourceCard, { ...item, isLoggedIn: isLoggedIn })))))), totalItems: totalItems, onPageChange: (pageIndex) => {\r\n setQueryParams({ pageIndex });\r\n } }));\r\n};\r\nexport default withQueryParams(ResourceListing);\r\n","import { useRef } from 'react';\nexport function useFirstMountState() {\n var isFirst = useRef(true);\n if (isFirst.current) {\n isFirst.current = false;\n return true;\n }\n return isFirst.current;\n}\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = noop;\n"],"sourceRoot":""}