{"version":3,"file":"event_search.js","sources":["../../../../../src/components/Event/EventResult.jsx","../../../../../src/components/Event/EventSearch.jsx","../../../../../src/components/Select.jsx","../../../../../src/components/Switch.jsx","../../../../../src/components/Event/EventFilter.jsx","../../../../../src/event_search.js"],"sourcesContent":["export const EventResult = (props) => {\n return
\n}\n","import {useCallback, useEffect, useRef, useState} from \"react\"\nimport Masonry, {ResponsiveMasonry} from \"react-responsive-masonry\"\nimport {loadSolrResults} from \"../../services/solr.service.js\"\nimport {EventResult} from \"./EventResult.jsx\"\n// import {calculatePosition} from \"../../services/masonry.service.js\";\nimport {getTranslations} from \"../../services/language.service.js\";\n\nexport const EventSearch = () => {\n const [search, setSearch] = useState('')\n const [filter, setFilter] = useState({})\n\n const [items, setItems] = useState([])\n const [isLoading, setIsLoading] = useState(false);\n const [hasMore, setHasMore] = useState(true);\n const [currentPage, setCurrentPage] = useState(1);\n const container = useRef(null);\n const LANG = getTranslations()\n\n\n\n const mapResults = {\n lectures: (element) => {\n const lectures = []\n\n for (const e of element.children) {\n lectures.push(e.textContent)\n }\n\n return lectures\n },\n url: 'string',\n title: 'string',\n subTitle: 'string',\n teaser: 'string',\n date: 'string',\n category: 'string',\n speciality: 'string',\n eventType: 'string',\n eventClient: 'string',\n place: 'string',\n freeSeats: 'number',\n availabilityText: 'string',\n stickyNews: 'boolean',\n image: 'string'\n }\n\n useEffect(() => {\n document.addEventListener('filter', (e) => {\n setFilter(e.detail)\n setCurrentPage(1);\n setItems([])\n setHasMore(true)\n })\n\n document.addEventListener('search', (e) => {\n setSearch(e.detail)\n setCurrentPage(1);\n setItems([])\n setHasMore(true)\n })\n\n document.addEventListener('reset', () => {\n setSearch('')\n setCurrentPage(1);\n setItems([])\n setHasMore(true)\n loadResponse()\n })\n },[])\n\n useEffect(() => {\n setIsLoading(true);\n loadResponse()\n }, [search, filter]);\n\n useEffect(() => {\n setIsLoading(true);\n }, []);\n\n const loadNextItems = useCallback(async () => {\n if (isLoading) return;\n\n setIsLoading(true);\n\n loadResponse()\n }, [currentPage,isLoading]);\n\n useEffect(() => {\n const handleScroll = () => {\n const { clientHeight } =\n document.documentElement;\n const { top,height } =\n container.current.getBoundingClientRect();\n if (top + height - clientHeight < 400) {\n void loadNextItems();\n\n }\n };\n if (hasMore) {\n window.addEventListener(\"scroll\", handleScroll);\n }\n return () => {\n window.removeEventListener(\"scroll\", handleScroll);\n };\n }, [loadNextItems]);\n\n const loadResponse = () => {\n if (!hasMore) {\n return\n }\n const solrParams = {\n q: search === '' ? '*' : search.replace('*', ''),\n page: currentPage\n }\n\n const filtersWithoutSearch = Object.fromEntries(Object.entries(filter).filter(([key]) => key !== 'search'));\n\n\n const filters = {\n ...filtersWithoutSearch,\n type: '40'\n }\n\n loadSolrResults(solrParams, filters, mapResults).then((response) => {\n setItems((prevItems) => [...prevItems, ...response.results]);\n setCurrentPage((prevIndex) => prevIndex + 1);\n if (!response.hasMore) {\n setHasMore(false)\n }\n document.dispatchEvent(new CustomEvent('facets', {\n detail: response.facets\n }))\n setIsLoading(false)\n })\n }\n\n // useEffect(() => {\n // if (!isLoading && items.length > 4) {\n // setItems(() => [...calculatePosition(items)]);\n // }\n // },[isLoading])\n\n return (\n{LANG.noResults}
}\n