{"version":3,"sources":["webpack:///./src/js/components/Spinner.js","webpack:///./src/js/components/pager/utils.js","webpack:///./src/js/components/pager/index.js","webpack:///./src/js/modules/pages-utils/CollapsibleSearch.js","webpack:///./src/js/modules/pages-utils/PageFilter.js","webpack:///./src/js/modules/pages-utils/PageClearAll.js","webpack:///./src/js/modules/pages-utils/PageSorting.js","webpack:///./src/js/modules/article-listing/ArticleCard.js","webpack:///./src/js/modules/article-listing/ArticleListing.js","webpack:///./src/js/modules/article-listing/utils.js","webpack:///./src/js/modules/article-listing/index.js"],"names":["Spinner","props","loading","className","getPageSpread","pages","current","map","page","isCurrent","arrowDown","xmlns","width","height","viewBox","fill","d","transform","Pager","total","onChange","scrollRef","items","Array","from","keys","n","isEllipses","getPages","handleScroll","scroll","window","scrollTo","top","offsetTop","left","behavior","isPrevDisabled","isNextDisabled","previous","key","onClick","labelPrev","next","labelNext","p","CollapsibleSearch","children","label","labelClose","useState","isMobile","isTablet","isOpen","setIsOpen","ref","useRef","useEffect","type","prev","arrowUp","PageFilter","isExpanded","setIsExpanded","filterRef","options","filter","x","available","includes","value","clickOutside","length","toggleDisplay","hasSelections","trigger","selectedPrefixLabel","join","placeholder","htmlFor","option","id","checked","find","e","target","handleChange","PageClearAll","PageSorting","sessionStorage","getItem","selectedLabel","setSelectedLabel","setItem","handleSelect","ArticleCard","URL","location","href","src","image","alt","imageAlt","headline","date","by","authorUrl","author","url","summary","ArticleListing","setOpen","categories","JSON","parse","authors","sorting","defaultValues","_term","searchParams","get","categoriesInParams","authorsInParams","sortingInParams","_categories","_authors","_sorting","split","forEach","found","c","push","term","getDefaultValuesFromUrl","setTerm","selectedCategories","setSelectedCategories","selectedAuthors","setSelectedAuthors","selectedSorting","setSelectedSorting","availableCategories","setAvailableCategories","availableAuthors","setAvailableAuthors","availableSorting","setAvailableSorting","setPage","setItems","totalPages","setTotalPages","isLoaing","setIsLoading","labels","useMemo","searchFormRef","updateParams","_url","_reset","set","segments","startsWith","replace","reset","update","history","pushState","document","title","updateUrl","u","endpoint","fetch","toString","then","r","json","res","finally","fetchData","addEventListener","event","removeEventListener","heading","copy","clearLabel","clearFilters","sortBy","search","searchClose","searchLabel","name","searchPlaceholder","filterByCategory","filterByCategoryPlaceholder","filterByAuthor","filterByAuthorPlaceholder","clearAll","item","noResults"],"mappings":"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","file":"6.7c4724.js","sourcesContent":["import React from 'react';\r\n\r\nconst Spinner = props => {\r\n return props.loading ? (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n ) : null;\r\n};\r\n\r\nexport default Spinner;\r\n","const getPageSpread = (pages, current) => {\r\n const spreadPages = pages.map(page => ({\r\n page,\r\n isCurrent: current === page\r\n }));\r\n return spreadPages;\r\n};\r\n\r\nexport const getPages = (current, total) => {\r\n if (total <= 5) {\r\n const items = Array.from(new Array(total).keys()).map(n => n + 1);\r\n return getPageSpread(items, current);\r\n }\r\n if (current < 5) {\r\n const items = Array.from(new Array(4).keys()).map(n => n + 1);\r\n return [\r\n ...getPageSpread(items, current),\r\n { isEllipses: true, page: 5 },\r\n ...getPageSpread([total], current)\r\n ];\r\n }\r\n if (total > 5 && current >= total - 3) {\r\n return [\r\n ...getPageSpread([1], current),\r\n { isEllipses: true, page: total - 4 },\r\n ...getPageSpread([total - 3, total - 2, total - 1, total], current)\r\n ];\r\n }\r\n if (total > 6 && current > 4) {\r\n return [\r\n ...getPageSpread([1], current),\r\n { isEllipses: true, page: current - 2 },\r\n ...getPageSpread([current - 1, current, current + 1], current),\r\n { isEllipses: true, page: current + 2 },\r\n ...getPageSpread([total], current)\r\n ];\r\n }\r\n return [];\r\n};\r\n","import React from 'react';\r\nimport { getPages } from './utils';\r\n\r\nconst arrowDown = \r\n\r\nconst Pager = props => {\r\n const { page, total, onChange, scrollRef } = props;\r\n const pages = getPages(page, total);\r\n\r\n const handleScroll = scroll => {\r\n window.scrollTo({\r\n top: scroll.offsetTop,\r\n left: 0,\r\n behavior: 'smooth'\r\n });\r\n };\r\n\r\n if (pages <= 1) return null;\r\n\r\n const isPrevDisabled = page === 1;\r\n const isNextDisabled = page === total;\r\n const previous = (\r\n
  • \r\n { onChange(page - 1); handleScroll(scrollRef.current) } }\r\n className=\"pager__button\"\r\n >\r\n {props.labelPrev}\r\n {arrowDown}\r\n \r\n
  • \r\n );\r\n const next = (\r\n
  • \r\n { onChange(page + 1); handleScroll(scrollRef.current) }}\r\n className=\"pager__button\"\r\n >\r\n {props.labelNext}\r\n {arrowDown}\r\n \r\n
  • \r\n );\r\n return (\r\n
      \r\n {previous}\r\n {pages.map(p => (\r\n
    1. \r\n \r\n
    2. \r\n ))}\r\n {next}\r\n
    \r\n );\r\n};\r\n\r\nexport default Pager;\r\n","import React, { useState, useEffect, useRef } from 'react'\r\nimport { BrowserView, MobileView, isBrowser, isMobile, isTablet } from 'react-device-detect';\r\n\r\nfunction CollapsibleSearch({ children, label, labelClose }) {\r\n const [isOpen, setIsOpen] = useState(isMobile || isTablet? false : true);\r\n\r\n const handleSearchOpening = () => {\r\n setIsOpen(prev => !prev);\r\n };\r\n\r\n const ref = useRef(null);\r\n\r\n useEffect(() => {\r\n\r\n }, [isOpen]);\r\n\r\n return (\r\n <>\r\n
    \r\n \r\n {isOpen? labelClose : label}\r\n \r\n
    \r\n
    \r\n
    \r\n {isOpen &&
    {children}
    }\r\n
    \r\n
    \r\n \r\n )\r\n}\r\n\r\nexport default CollapsibleSearch\r\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport clickOutside from 'click-outside';\r\n\r\nconst arrowDown = \r\nconst arrowUp = \r\nconst cross = \r\n\r\nconst PageFilter = props => {\r\n const [isExpanded, setIsExpanded] = useState(false);\r\n const filterRef = useRef();\r\n const options = props.options.filter(x => props.available.includes(x.value));\r\n\r\n const handleClickOutside = () => {\r\n if (!filterRef.current) return;\r\n clickOutside(filterRef.current, () => setIsExpanded(false));\r\n }\r\n\r\n useEffect(handleClickOutside, [filterRef.current]);\r\n\r\n if (options.length < 1) return null;\r\n\r\n const toggleDisplay = () => setIsExpanded(!isExpanded);\r\n const hasSelections = props.value.length;\r\n\r\n const handleChange = (e, value) => {\r\n if (e.target.checked) {\r\n props.onChange([...props.value, value]);\r\n } else {\r\n props.onChange([...props.value.filter(x => x.value !== value.value)])\r\n }\r\n }\r\n\r\n const clear = () => props.onChange([]);\r\n\r\n const trigger = hasSelections ? (\r\n
    \r\n \r\n
    \r\n ) : (\r\n
    \r\n \r\n
    \r\n )\r\n\r\n const renderOption = option => (\r\n
  • \r\n x.value === option.value)}\r\n onChange={e => handleChange(e, option)}\r\n />\r\n \r\n
  • \r\n );\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n {trigger}\r\n {isExpanded &&
      \r\n {options.map(renderOption)}\r\n
    }\r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport default PageFilter\r\n","import React from 'react'\r\n\r\nconst cross = \r\n\r\nconst PageClearAll = props => {\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n}\r\n\r\nexport default PageClearAll\r\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport clickOutside from 'click-outside';\r\n\r\nconst arrowDown = \r\nconst arrowUp = \r\n\r\nconst PageSorting = props => {\r\n const [isExpanded, setIsExpanded] = useState(false);\r\n const [selectedLabel, setSelectedLabel] = useState(() => {\r\n const savedLabel = window.sessionStorage.getItem('selectedLabel');\r\n\r\n return savedLabel || props.label\r\n });\r\n\r\n const filterRef = useRef();\r\n const options = props.options.filter(x => props.available.includes(x.value));\r\n\r\n const handleClickOutside = () => {\r\n if (!filterRef.current) return;\r\n clickOutside(filterRef.current, () => setIsExpanded(false));\r\n }\r\n\r\n useEffect(handleClickOutside, [filterRef.current]);\r\n\r\n useEffect(() => {\r\n window.sessionStorage.setItem('selectedLabel', selectedLabel);\r\n }, [selectedLabel])\r\n\r\n\r\n if (options.length < 1) return null;\r\n\r\n const toggleDisplay = () => setIsExpanded(!isExpanded);\r\n const hasSelections = props.value.length;\r\n\r\n const handleSelect = (e, value) => {\r\n if (e.target.value) {\r\n props.onClick([value]);\r\n }\r\n\r\n setIsExpanded(false);\r\n\r\n setSelectedLabel(value.label);\r\n }\r\n\r\n const clear = () => props.onClick([]);\r\n\r\n const trigger = hasSelections ? (\r\n \r\n ) : (\r\n \r\n )\r\n\r\n const renderOption = option => (\r\n
  • \r\n handleSelect(e, option)}\r\n >\r\n {option.label}\r\n \r\n
  • \r\n );\r\n\r\n return (\r\n
    \r\n
    \r\n {trigger}\r\n {isExpanded &&
      \r\n {options.map(renderOption)}\r\n
    }\r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport default PageSorting\r\n","import React, { useRef } from 'react'\r\n\r\nconst ArticleCard = props => {\r\n const { current: url } = useRef(new window.URL(window.location.href));\r\n\r\n const getTagLink = () => {\r\n url.searchParams.set('categories', props.primaryTagId);\r\n url.searchParams.delete('term');\r\n url.searchParams.delete('authors');\r\n return url.toString();\r\n }\r\n\r\n const getAuthorLink = () => {\r\n url.searchParams.delete('categories');\r\n url.searchParams.delete('term');\r\n url.searchParams.set('authors', props.authorId);\r\n return url.toString();\r\n }\r\n\r\n return (\r\n
  • \r\n
    \r\n {props.imageAlt\r\n
    \r\n
    \r\n
    \r\n \r\n

    {props.by} {props.author}

    \r\n
    \r\n
    \r\n

    {props.headline}

    \r\n

    {props.summary}

    \r\n
    \r\n
    \r\n
  • \r\n )\r\n}\r\n\r\nexport default ArticleCard\r\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\r\nimport useHasChanged from './useHasValueChanged';\r\nimport CollapsibleSearch from '../pages-utils/CollapsibleSearch';\r\nimport PageSorting from '../pages-utils/PageSorting';\r\nimport PageFilter from '../pages-utils/PageFilter';\r\nimport PageClearAll from '../pages-utils/PageClearAll';\r\nimport ArticleCard from './ArticleCard';\r\nimport Spinner from '../../components/Spinner';\r\nimport Pager from '../../components/pager';\r\nimport { getDefaultValuesFromUrl } from './utils';\r\n\r\nconst ArticleListing = (props, ref) => {\r\n const [open, setOpen] = useState(setOpen);\r\n const { current: url } = useRef(new window.URL(window.location));\r\n const { current: categories } = useRef(JSON.parse(props.categories));\r\n const { current: authors } = useRef(JSON.parse(props.authors));\r\n const { current: sorting } = useRef(JSON.parse(props.sorting));\r\n const defaultValues = getDefaultValuesFromUrl({ url, categories, authors, sorting });\r\n const [term, setTerm] = useState(defaultValues.term);\r\n const [selectedCategories, setSelectedCategories] = useState(\r\n defaultValues.categories\r\n );\r\n const [selectedAuthors, setSelectedAuthors] = useState(defaultValues.authors);\r\n const [selectedSorting, setSelectedSorting] = useState(defaultValues.sorting);\r\n const [availableCategories, setAvailableCategories] = useState(\r\n defaultValues.categories\r\n );\r\n const [availableAuthors, setAvailableAuthors] = useState(\r\n defaultValues.authors\r\n );\r\n const [availableSorting, setAvailableSorting] = useState(\r\n defaultValues.sorting\r\n );\r\n const [page, setPage] = useState(1);\r\n const [items, setItems] = useState(null);\r\n const [totalPages, setTotalPages] = useState(0);\r\n const [isLoaing, setIsLoading] = useState(true);\r\n const labels = useMemo(() => JSON.parse(props.labels), []);\r\n const searchFormRef = useRef();\r\n const scrollRef = useRef(null);\r\n\r\n const updateParams = (_url, _reset) => {\r\n if (_reset) {\r\n _url.searchParams.set('term', '');\r\n _url.searchParams.set(\r\n 'categories', ''\r\n );\r\n _url.searchParams.set(\r\n 'authors', ''\r\n );\r\n _url.searchParams.set(\r\n 'sorting', ''\r\n );\r\n } else {\r\n _url.searchParams.set('term', term);\r\n\r\n\r\n\r\n const url = window.location.href;\r\n const segments = url.split('&');\r\n\r\n if (segments.length > 1 && segments[1].startsWith('categories=')) {\r\n const categories = segments[1].replace('categories=', '');\r\n\r\n if (categories !== '' && categories=== selectedCategories) {\r\n _url.searchParams.set('categories', categories);\r\n } else {\r\n _url.searchParams.set(\r\n 'categories',\r\n selectedCategories.map(c => c.value).join('_')\r\n );\r\n }\r\n } else {\r\n _url.searchParams.set(\r\n 'categories',\r\n selectedCategories.map(c => c.value).join('_')\r\n );\r\n }\r\n\r\n _url.searchParams.set(\r\n 'authors',\r\n selectedAuthors.map(c => c.value).join('_')\r\n );\r\n\r\n _url.searchParams.set(\r\n 'sorting',\r\n selectedSorting.map(c => c.value)\r\n );\r\n }\r\n };\r\n\r\n const updateUrl = reset => {\r\n updateParams(url, reset);\r\n window.history.pushState(null, document.title, url);\r\n };\r\n\r\n const fetchData = reset => {\r\n setIsLoading(true);\r\n const u = new window.URL(props.endpoint);\r\n\r\n updateParams(u, reset);\r\n\r\n u.searchParams.set('page', page);\r\n\r\n window\r\n .fetch(u.toString())\r\n .then(r => r.json())\r\n .then(res => {\r\n setItems(res.items);\r\n setTotalPages(res.totalPages);\r\n setAvailableCategories(res.availableCategories || []);\r\n setAvailableAuthors(res.availableAuthors || []);\r\n setAvailableSorting(res.availableSorting || ['date', 'rating']);\r\n })\r\n .finally(() => {\r\n setIsLoading(false);\r\n });\r\n };\r\n\r\n const reset = () => {\r\n setTerm('');\r\n setSelectedAuthors([]);\r\n setSelectedCategories([]);\r\n setSelectedSorting([]);\r\n searchFormRef?.current?.reset?.();\r\n update(true);\r\n };\r\n\r\n const update = reset => {\r\n updateUrl(reset);\r\n fetchData(reset);\r\n };\r\n\r\n const onSubmit = e => {\r\n if (page !== 1)\r\n setPage(1);\r\n else\r\n update();\r\n };\r\n\r\n useEffect(() => update(), [page, selectedSorting]);\r\n useEffect(() => {\r\n window.addEventListener('popstate', event => {\r\n reset();\r\n });\r\n return () => {\r\n window.removeEventListener('popstate')\r\n }\r\n }, []);\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n
    \r\n
    \r\n

    {labels.title}

    \r\n

    {props.heading}

    \r\n

    {props.copy}

    \r\n
    \r\n {\r\n setSelectedSorting(e);\r\n }}\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n {\r\n setTerm(e.target.value);\r\n }}\r\n />\r\n
    \r\n {availableCategories.length > 1 && (\r\n {\r\n setSelectedCategories(e);\r\n }}\r\n />\r\n )}\r\n {availableAuthors.length > 1 && (\r\n {\r\n setSelectedAuthors(e);\r\n }}\r\n />\r\n )}\r\n
    \r\n {
    \r\n
    \r\n
    \r\n \r\n {labels.search}\r\n \r\n
    \r\n \r\n
    \r\n
    }\r\n
    \r\n \r\n\r\n {items && !!items.length && (\r\n
      \r\n {items.map(item => (\r\n \r\n ))}\r\n
    \r\n )}\r\n {!items?.length && totalPages === 0 && (\r\n
    \r\n

    {props.noResults}

    \r\n
    \r\n )}\r\n \r\n
    \r\n
    \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ArticleListing;\r\n","export const getDefaultValuesFromUrl = ({ url, categories, authors, sorting }) => {\r\n const _term = url.searchParams.get('term') || '';\r\n const categoriesInParams = url.searchParams.get('categories');\r\n const authorsInParams = url.searchParams.get('authors');\r\n const sortingInParams = url.searchParams.get('sorting');\r\n const _categories = [];\r\n const _authors = [];\r\n const _sorting = [];\r\n\r\n\r\n if (categoriesInParams) {\r\n const items = categoriesInParams.split(',');\r\n items.forEach(x => {\r\n const found = categories.find(c => c.value === x);\r\n if (found) _categories.push(found);\r\n });\r\n }\r\n\r\n if (authorsInParams) {\r\n const items = authorsInParams.split(',');\r\n items.forEach(x => {\r\n const found = authors.find(c => c.value === x);\r\n if (found) _authors.push(found);\r\n });\r\n }\r\n\r\n if (sortingInParams) {\r\n const items = sortingInParams.split(',');\r\n items.forEach(x => {\r\n const found = sorting.find(c => c.value === x);\r\n if (found) _sorting.push(found);\r\n });\r\n }\r\n\r\n return {\r\n term: _term,\r\n categories: _categories,\r\n authors: _authors,\r\n sorting: _sorting\r\n }\r\n}\r\n","import ArticleListing from './ArticleListing';\r\nexport default ArticleListing;\r\n"],"sourceRoot":""}