@abcagency/hc-ui-components 1.7.3 → 1.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/HireControlMap.js +2 -1
- package/dist/components/HireControlMap.js.map +1 -1
- package/dist/components/containers/accordions/map-accordion-item-container.js +3 -1
- package/dist/components/containers/accordions/map-accordion-item-container.js.map +1 -1
- package/dist/components/containers/filter/commute-container.js +11 -3
- package/dist/components/containers/filter/commute-container.js.map +1 -1
- package/dist/components/containers/maps/map-container.js +2 -0
- package/dist/components/containers/maps/map-container.js.map +1 -1
- package/dist/components/containers/maps/map-list-container.js +34 -3
- package/dist/components/containers/maps/map-list-container.js.map +1 -1
- package/dist/components/modules/filter/commute.js +3 -1
- package/dist/components/modules/filter/commute.js.map +1 -1
- package/dist/components/modules/filter/index.js +1 -0
- package/dist/components/modules/filter/index.js.map +1 -1
- package/dist/components/modules/filter/item.js +1 -0
- package/dist/components/modules/filter/item.js.map +1 -1
- package/dist/components/modules/list/list-item/list-item.js +85 -14
- package/dist/components/modules/list/list-item/list-item.js.map +1 -1
- package/dist/contexts/mapContext.js +13 -7
- package/dist/contexts/mapContext.js.map +1 -1
- package/dist/contexts/mapListContext.js +16 -3
- package/dist/contexts/mapListContext.js.map +1 -1
- package/dist/hooks/useList.js +3 -1
- package/dist/hooks/useList.js.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/node_modules/@algolia/requester-node-http/dist/requester.http.js +82 -0
- package/dist/node_modules/@algolia/requester-node-http/dist/requester.http.js.map +1 -0
- package/dist/node_modules/algoliasearch/dist/lite/builds/node.js +269 -0
- package/dist/node_modules/algoliasearch/dist/lite/builds/node.js.map +1 -0
- package/dist/styles/index.css +1 -1
- package/package.json +4 -1
- package/src/components/HireControlMap.js +0 -3
- package/src/components/containers/accordions/map-accordion-item-container.js +3 -1
- package/src/components/containers/filter/commute-container.js +11 -3
- package/src/components/containers/maps/map-container.js +2 -0
- package/src/components/containers/maps/map-list-container.js +30 -3
- package/src/components/modules/filter/commute.js +7 -5
- package/src/components/modules/filter/index.js +2 -0
- package/src/components/modules/filter/item.js +1 -0
- package/src/components/modules/list/list-item/list-item.jsx +97 -24
- package/src/contexts/mapContext.tsx +12 -6
- package/src/contexts/mapListContext.tsx +13 -3
- package/src/hooks/useList.js +3 -1
- package/src/index.js +1 -2
- package/src/components/modules/skeleton/map-skeleton.js +0 -51
|
@@ -30,6 +30,7 @@ var Filter = function Filter(_ref) {
|
|
|
30
30
|
setShowFixedFooter = _useState4[1];
|
|
31
31
|
var transitionTimeoutRef = useRef(null);
|
|
32
32
|
useEffect(function () {
|
|
33
|
+
if (typeof window === 'undefined') return;
|
|
33
34
|
var checkOverflow = function checkOverflow() {
|
|
34
35
|
if (contentRef.current) {
|
|
35
36
|
// Add a small tolerance (5px) to avoid false positives from rounding/padding
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/modules/filter/index.js"],"sourcesContent":["\"use client\";\nimport Button from \"~/components/modules/buttons/default\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { twMerge } from '~/util/twMerge';\nimport { useMapList } from \"~/contexts/mapListContext\";\n\nconst Filter = ({\n\tclassName,\n\thasActiveFilters,\n\tfilteredListings,\n\tselectedFilters,\n\tsetMobileTab,\n\thandleReset,\n\tisDesktop = false,\n\tstyle,\n\tchildren\n}) => {\n\tconst { filterConfig } = useMapList();\n\tconst contentRef = useRef(null);\n\tconst containerRef = useRef(null);\n\tconst [hasOverflow, setHasOverflow] = useState(false);\n\tconst [showFixedFooter, setShowFixedFooter] = useState(false);\n\tconst transitionTimeoutRef = useRef(null);\n\n\tuseEffect(() => {\n\t\tconst checkOverflow = () => {\n\t\t\tif (contentRef.current) {\n\t\t\t\t// Add a small tolerance (5px) to avoid false positives from rounding/padding\n\t\t\t\tconst hasScroll = contentRef.current.scrollHeight > contentRef.current.clientHeight + 5;\n\n\t\t\t\tif (hasScroll !== hasOverflow) {\n\t\t\t\t\tsetHasOverflow(hasScroll);\n\n\t\t\t\t\t// Clear any pending transitions\n\t\t\t\t\tif (transitionTimeoutRef.current) {\n\t\t\t\t\t\tclearTimeout(transitionTimeoutRef.current);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add a delay when transitioning to fixed footer to smooth the transition\n\t\t\t\t\tif (hasScroll) {\n\t\t\t\t\t\ttransitionTimeoutRef.current = setTimeout(() => setShowFixedFooter(true), 200);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Delay hiding fixed footer to allow animation to complete and prevent flashing\n\t\t\t\t\t\ttransitionTimeoutRef.current = setTimeout(() => setShowFixedFooter(false), 200);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Delay initial check to ensure layout is complete\n\t\tsetTimeout(checkOverflow, 100);\n\n\t\t// Check on resize\n\t\twindow.addEventListener('resize', checkOverflow);\n\n\t\t// Use ResizeObserver to detect container size changes\n\t\tconst resizeObserver = new ResizeObserver(() => {\n\t\t\tsetTimeout(checkOverflow, 50);\n\t\t});\n\t\tif (containerRef.current) {\n\t\t\tresizeObserver.observe(containerRef.current);\n\t\t}\n\t\tif (contentRef.current) {\n\t\t\tresizeObserver.observe(contentRef.current);\n\t\t}\n\n\t\t// Use MutationObserver to detect content changes\n\t\tconst mutationObserver = new MutationObserver(() => {\n\t\t\tsetTimeout(checkOverflow, 50);\n\t\t});\n\t\tif (contentRef.current) {\n\t\t\tmutationObserver.observe(contentRef.current, { childList: true, subtree: true, attributes: true });\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('resize', checkOverflow);\n\t\t\tresizeObserver.disconnect();\n\t\t\tmutationObserver.disconnect();\n\t\t\t// Clear timeout on unmount\n\t\t\tif (transitionTimeoutRef.current) {\n\t\t\t\tclearTimeout(transitionTimeoutRef.current);\n\t\t\t}\n\t\t};\n\t}, [children, hasOverflow]);\n\n\t// Reusable button component\n\tconst MobileButtons = () => (\n\t\t<>\n\t\t\t<Button.Btn\n\t\t\t\tonClick={handleReset}\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\tclassName={filterConfig?.classNames?.resetButton}\n\t\t\t>\n\t\t\t\tReset All\n\t\t\t</Button.Btn>\n\t\t\t{selectedFilters && Object.keys(selectedFilters).length > 0 && (\n\t\t\t\t<Button.Btn\n\t\t\t\t\tonClick={() => setMobileTab(\"listTab\")}\n\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tclassName={twMerge(\n\t\t\t\t\t\t`${hasActiveFilters ? \"hc-opacity-0 hc-pointer-events-none\" : \"hc-opacity-100\"}`,\n\t\t\t\t\t\tfilterConfig?.classNames?.showJobsButton\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<Button.Body>\n\t\t\t\t\t\t<Button.Icon icon=\"fluent:search-12-filled\" size=\"hc-size-3.5\" />\n\t\t\t\t\t\tShow {filteredListings.length} Jobs\n\t\t\t\t\t</Button.Body>\n\t\t\t\t</Button.Btn>\n\t\t\t)}\n\t\t</>\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tstyle={isDesktop ? style : undefined}\n\t\t\tclassName={twMerge(\n `/* Mobile layout */\n hc-relative hc-w-full hc-h-full hc-flex hc-flex-col\n\n /* Desktop layout */\n md:hc-relative md:hc-flex md:hc-flex-col md:hc-max-h-[100%]\n\n ${className ?? \"\"}`,\n filterConfig?.classNames?.filterContainer\n )}\n\t\t>\n\t\t\t{/* Content area with scroll */}\n\t\t\t<div\n\t\t\t\tref={contentRef}\n\t\t\t\tclassName={twMerge(\n\t\t\t\t\t`hc-w-full hc-flex-grow hc-max-h-full hc-overflow-auto ${hasOverflow ? 'hc-pb-16' : ''} md:hc-overflow-y-auto ${hasOverflow ? 'md:hc-pb-16' : 'md:hc-pb-0'}`,\n\t\t\t\t\tfilterConfig?.classNames?.filterContent\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className=\"hc-px-4 md:hc-pt-4 hc-space-y-4\">\n\t\t\t\t\t{children}\n\n\t\t\t\t\t{/* Inline buttons when no overflow - both mobile and desktop */}\n\t\t\t\t\t{!hasOverflow && !showFixedFooter && (\n\t\t\t\t\t\t<div className={twMerge(\n\t\t\t\t\t\t\t\"hc-flex hc-items-center hc-justify-between hc-gap-2 hc-py-2 hc-border-t hc-border-gray-200 hc-animate-in hc-fade-in hc-duration-300\",\n\t\t\t\t\t\t\tfilterConfig?.classNames?.filterFooter\n\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t{/* Mobile buttons */}\n\t\t\t\t\t\t\t<div className=\"hc-flex hc-items-center hc-justify-between hc-gap-2 hc-w-full md:hc-hidden\">\n\t\t\t\t\t\t\t\t<MobileButtons />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{/* Desktop button */}\n\t\t\t\t\t\t\t<div className=\"hc-hidden md:hc-flex\">\n\t\t\t\t\t\t\t\t<Button.Btn\n\t\t\t\t\t\t\t\t\tonClick={handleReset}\n\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\tclassName={filterConfig?.classNames?.resetButton}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tReset All\n\t\t\t\t\t\t\t\t</Button.Btn>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* Mobile Footer - fixed at bottom (only when overflow) */}\n\t\t\t{showFixedFooter && (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"hc-w-full hc-absolute hc-bottom-0 hc-left-0 hc-right-0 hc-flex hc-items-center hc-justify-between hc-gap-2 hc-py-2 hc-px-4 hc-bg-gray-100 hc-border-t hc-border-gray-200 hc-z-50 md:hc-hidden hc-animate-in hc-fade-in hc-slide-in-from-bottom-2 hc-duration-200\"\n\t\t\t\t>\n\t\t\t\t\t<MobileButtons />\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Desktop Footer - fixed at bottom (only when overflow) */}\n\t\t\t{showFixedFooter && (\n\t\t\t\t<div className=\"hc-hidden md:hc-flex md:hc-justify-start hc-px-4 hc-py-4 hc-absolute hc-bottom-0 hc-left-0 hc-right-0 hc-bg-gray-100 hc-border-t hc-border-gray-200 hc-z-50 hc-animate-in hc-fade-in hc-slide-in-from-bottom-2 hc-duration-200\">\n\t\t\t\t\t<Button.Btn\n\t\t\t\t\t\tonClick={handleReset}\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tclassName={filterConfig?.classNames?.resetButton}\n\t\t\t\t\t>\n\t\t\t\t\t\tReset All\n\t\t\t\t\t</Button.Btn>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default Filter;\n"],"names":["Filter","_ref","_filterConfig$classNa3","_filterConfig$classNa4","_filterConfig$classNa5","_filterConfig$classNa6","_filterConfig$classNa7","className","hasActiveFilters","filteredListings","selectedFilters","setMobileTab","handleReset","_ref$isDesktop","isDesktop","style","children","_useMapList","useMapList","filterConfig","contentRef","useRef","containerRef","_useState","useState","_useState2","_slicedToArray","hasOverflow","setHasOverflow","_useState3","_useState4","showFixedFooter","setShowFixedFooter","transitionTimeoutRef","useEffect","checkOverflow","current","hasScroll","scrollHeight","clientHeight","clearTimeout","setTimeout","window","addEventListener","resizeObserver","ResizeObserver","observe","mutationObserver","MutationObserver","childList","subtree","attributes","removeEventListener","disconnect","MobileButtons","_filterConfig$classNa","_filterConfig$classNa2","React","createElement","Fragment","Button","Btn","onClick","variant","size","classNames","resetButton","Object","keys","length","twMerge","concat","showJobsButton","Body","Icon","icon","ref","undefined","filterContainer","filterContent","filterFooter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/modules/filter/index.js"],"sourcesContent":["\"use client\";\nimport Button from \"~/components/modules/buttons/default\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { twMerge } from '~/util/twMerge';\nimport { useMapList } from \"~/contexts/mapListContext\";\n\nconst Filter = ({\n\tclassName,\n\thasActiveFilters,\n\tfilteredListings,\n\tselectedFilters,\n\tsetMobileTab,\n\thandleReset,\n\tisDesktop = false,\n\tstyle,\n\tchildren\n}) => {\n\tconst { filterConfig } = useMapList();\n\tconst contentRef = useRef(null);\n\tconst containerRef = useRef(null);\n\tconst [hasOverflow, setHasOverflow] = useState(false);\n\tconst [showFixedFooter, setShowFixedFooter] = useState(false);\n\tconst transitionTimeoutRef = useRef(null);\n\n\tuseEffect(() => {\n\t\tif (typeof window === 'undefined') return;\n\t\t\n\t\tconst checkOverflow = () => {\n\t\t\tif (contentRef.current) {\n\t\t\t\t// Add a small tolerance (5px) to avoid false positives from rounding/padding\n\t\t\t\tconst hasScroll = contentRef.current.scrollHeight > contentRef.current.clientHeight + 5;\n\n\t\t\t\tif (hasScroll !== hasOverflow) {\n\t\t\t\t\tsetHasOverflow(hasScroll);\n\n\t\t\t\t\t// Clear any pending transitions\n\t\t\t\t\tif (transitionTimeoutRef.current) {\n\t\t\t\t\t\tclearTimeout(transitionTimeoutRef.current);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add a delay when transitioning to fixed footer to smooth the transition\n\t\t\t\t\tif (hasScroll) {\n\t\t\t\t\t\ttransitionTimeoutRef.current = setTimeout(() => setShowFixedFooter(true), 200);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Delay hiding fixed footer to allow animation to complete and prevent flashing\n\t\t\t\t\t\ttransitionTimeoutRef.current = setTimeout(() => setShowFixedFooter(false), 200);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Delay initial check to ensure layout is complete\n\t\tsetTimeout(checkOverflow, 100);\n\n\t\t// Check on resize\n\t\twindow.addEventListener('resize', checkOverflow);\n\n\t\t// Use ResizeObserver to detect container size changes\n\t\tconst resizeObserver = new ResizeObserver(() => {\n\t\t\tsetTimeout(checkOverflow, 50);\n\t\t});\n\t\tif (containerRef.current) {\n\t\t\tresizeObserver.observe(containerRef.current);\n\t\t}\n\t\tif (contentRef.current) {\n\t\t\tresizeObserver.observe(contentRef.current);\n\t\t}\n\n\t\t// Use MutationObserver to detect content changes\n\t\tconst mutationObserver = new MutationObserver(() => {\n\t\t\tsetTimeout(checkOverflow, 50);\n\t\t});\n\t\tif (contentRef.current) {\n\t\t\tmutationObserver.observe(contentRef.current, { childList: true, subtree: true, attributes: true });\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('resize', checkOverflow);\n\t\t\tresizeObserver.disconnect();\n\t\t\tmutationObserver.disconnect();\n\t\t\t// Clear timeout on unmount\n\t\t\tif (transitionTimeoutRef.current) {\n\t\t\t\tclearTimeout(transitionTimeoutRef.current);\n\t\t\t}\n\t\t};\n\t}, [children, hasOverflow]);\n\n\t// Reusable button component\n\tconst MobileButtons = () => (\n\t\t<>\n\t\t\t<Button.Btn\n\t\t\t\tonClick={handleReset}\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\tclassName={filterConfig?.classNames?.resetButton}\n\t\t\t>\n\t\t\t\tReset All\n\t\t\t</Button.Btn>\n\t\t\t{selectedFilters && Object.keys(selectedFilters).length > 0 && (\n\t\t\t\t<Button.Btn\n\t\t\t\t\tonClick={() => setMobileTab(\"listTab\")}\n\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tclassName={twMerge(\n\t\t\t\t\t\t`${hasActiveFilters ? \"hc-opacity-0 hc-pointer-events-none\" : \"hc-opacity-100\"}`,\n\t\t\t\t\t\tfilterConfig?.classNames?.showJobsButton\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<Button.Body>\n\t\t\t\t\t\t<Button.Icon icon=\"fluent:search-12-filled\" size=\"hc-size-3.5\" />\n\t\t\t\t\t\tShow {filteredListings.length} Jobs\n\t\t\t\t\t</Button.Body>\n\t\t\t\t</Button.Btn>\n\t\t\t)}\n\t\t</>\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tstyle={isDesktop ? style : undefined}\n\t\t\tclassName={twMerge(\n `/* Mobile layout */\n hc-relative hc-w-full hc-h-full hc-flex hc-flex-col\n\n /* Desktop layout */\n md:hc-relative md:hc-flex md:hc-flex-col md:hc-max-h-[100%]\n\n ${className ?? \"\"}`,\n filterConfig?.classNames?.filterContainer\n )}\n\t\t>\n\t\t\t{/* Content area with scroll */}\n\t\t\t<div\n\t\t\t\tref={contentRef}\n\t\t\t\tclassName={twMerge(\n\t\t\t\t\t`hc-w-full hc-flex-grow hc-max-h-full hc-overflow-auto ${hasOverflow ? 'hc-pb-16' : ''} md:hc-overflow-y-auto ${hasOverflow ? 'md:hc-pb-16' : 'md:hc-pb-0'}`,\n\t\t\t\t\tfilterConfig?.classNames?.filterContent\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div className=\"hc-px-4 md:hc-pt-4 hc-space-y-4\">\n\t\t\t\t\t{children}\n\n\t\t\t\t\t{/* Inline buttons when no overflow - both mobile and desktop */}\n\t\t\t\t\t{!hasOverflow && !showFixedFooter && (\n\t\t\t\t\t\t<div className={twMerge(\n\t\t\t\t\t\t\t\"hc-flex hc-items-center hc-justify-between hc-gap-2 hc-py-2 hc-border-t hc-border-gray-200 hc-animate-in hc-fade-in hc-duration-300\",\n\t\t\t\t\t\t\tfilterConfig?.classNames?.filterFooter\n\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t{/* Mobile buttons */}\n\t\t\t\t\t\t\t<div className=\"hc-flex hc-items-center hc-justify-between hc-gap-2 hc-w-full md:hc-hidden\">\n\t\t\t\t\t\t\t\t<MobileButtons />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{/* Desktop button */}\n\t\t\t\t\t\t\t<div className=\"hc-hidden md:hc-flex\">\n\t\t\t\t\t\t\t\t<Button.Btn\n\t\t\t\t\t\t\t\t\tonClick={handleReset}\n\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\tclassName={filterConfig?.classNames?.resetButton}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tReset All\n\t\t\t\t\t\t\t\t</Button.Btn>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* Mobile Footer - fixed at bottom (only when overflow) */}\n\t\t\t{showFixedFooter && (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"hc-w-full hc-absolute hc-bottom-0 hc-left-0 hc-right-0 hc-flex hc-items-center hc-justify-between hc-gap-2 hc-py-2 hc-px-4 hc-bg-gray-100 hc-border-t hc-border-gray-200 hc-z-50 md:hc-hidden hc-animate-in hc-fade-in hc-slide-in-from-bottom-2 hc-duration-200\"\n\t\t\t\t>\n\t\t\t\t\t<MobileButtons />\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Desktop Footer - fixed at bottom (only when overflow) */}\n\t\t\t{showFixedFooter && (\n\t\t\t\t<div className=\"hc-hidden md:hc-flex md:hc-justify-start hc-px-4 hc-py-4 hc-absolute hc-bottom-0 hc-left-0 hc-right-0 hc-bg-gray-100 hc-border-t hc-border-gray-200 hc-z-50 hc-animate-in hc-fade-in hc-slide-in-from-bottom-2 hc-duration-200\">\n\t\t\t\t\t<Button.Btn\n\t\t\t\t\t\tonClick={handleReset}\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tclassName={filterConfig?.classNames?.resetButton}\n\t\t\t\t\t>\n\t\t\t\t\t\tReset All\n\t\t\t\t\t</Button.Btn>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default Filter;\n"],"names":["Filter","_ref","_filterConfig$classNa3","_filterConfig$classNa4","_filterConfig$classNa5","_filterConfig$classNa6","_filterConfig$classNa7","className","hasActiveFilters","filteredListings","selectedFilters","setMobileTab","handleReset","_ref$isDesktop","isDesktop","style","children","_useMapList","useMapList","filterConfig","contentRef","useRef","containerRef","_useState","useState","_useState2","_slicedToArray","hasOverflow","setHasOverflow","_useState3","_useState4","showFixedFooter","setShowFixedFooter","transitionTimeoutRef","useEffect","window","checkOverflow","current","hasScroll","scrollHeight","clientHeight","clearTimeout","setTimeout","addEventListener","resizeObserver","ResizeObserver","observe","mutationObserver","MutationObserver","childList","subtree","attributes","removeEventListener","disconnect","MobileButtons","_filterConfig$classNa","_filterConfig$classNa2","React","createElement","Fragment","Button","Btn","onClick","variant","size","classNames","resetButton","Object","keys","length","twMerge","concat","showJobsButton","Body","Icon","icon","ref","undefined","filterContainer","filterContent","filterFooter"],"mappings":"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"}
|
|
@@ -31,6 +31,7 @@ var FilterItem = function FilterItem(_ref) {
|
|
|
31
31
|
React.createElement("label", _extends({
|
|
32
32
|
onClick: function onClick() {
|
|
33
33
|
if (!isExternalLink) return;
|
|
34
|
+
if (typeof window === 'undefined') return;
|
|
34
35
|
trackEvent(eventTypes.EXTERNAL_LINK_CLICKED, {
|
|
35
36
|
link: externalLinkUrl
|
|
36
37
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item.js","sources":["../../../../src/components/modules/filter/item.js"],"sourcesContent":["import React from 'react';\nimport Icon from '~/components/modules/icon';\nimport { twMerge } from '~/util/twMerge';\nimport { useMapList } from '~/contexts/mapListContext';\n\nconst FilterItem = ({\n\tclassName,\n\titem,\n\ttype,\n\titemKey,\n\thasCount,\n\tfield,\n\tactiveItem,\n\tsetActiveItem,\n\tchangeHandler,\n\tisExternalLink = false,\n\texternalLinkUrl,\n\ttrackEvent,\n\teventTypes,\n\t...rest\n}) => {\n\tconst { filterConfig } = useMapList();\n\tconst itemName = item.name ? item.name : item;\n\n\treturn (\n\t\t// eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions\n\t\t<label\n\t\t onClick={() =>\n\t\t\t{\n\t\t\t\tif(!isExternalLink) return;\n\t\t\t trackEvent(eventTypes.EXTERNAL_LINK_CLICKED, { link: externalLinkUrl });\n\t\t\t\twindow.location.href = externalLinkUrl;\n\t\t\t}}\n\t\t\tclassName={`\n hc-flex hc-items-start hc-gap-2 hc-px-2 hc-py-1.5 hc-rounded-sm hc-text-sm hc-cursor-pointer hc-transition hover:hc-bg-uiAccent/5\n ${className ?? \"\"}\n `}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{isExternalLink ? (\n\t\t\t\t<Icon\n\t\t\t\t\ticon=\"tabler:external-link\"\n\t\t\t\t\tsize=\"hc-size-4\"\n\t\t\t\t\tclassName={'hc-size-4 hc-mt-px hc-text-primary hc-border-uiAccent/30'}\n\t\t\t\t></Icon>\n\t\t\t) : (\n\t\t\t\t<input\n\t\t\t\t\tid={itemKey}\n\t\t\t\t\tname={field}\n\t\t\t\t\tdisabled={item.count === 0}\n\t\t\t\t\tvalue={itemName}\n\t\t\t\t\ttype={type}\n\t\t\t\t\tclassName={twMerge(\n\t\t\t\t\t\t\"hc-size-4 hc-mt-px hc-text-primary hc-border-uiAccent/30 hc-transition-colors hc-rounded-sm\",\n\t\t\t\t\t\tfilterConfig?.classNames?.filterItemCheckbox\n\t\t\t\t\t)}\n\t\t\t\t\tchecked={activeItem}\n\t\t\t\t\tonChange={() => {\n\t\t\t\t\t\tsetActiveItem(!activeItem);\n\t\t\t\t\t\tchangeHandler();\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<span className={twMerge(\n\t\t\t\t\"hc-text-left hc-font-medium\",\n\t\t\t\tfilterConfig?.classNames?.filterItemLabel\n\t\t\t)}>{itemName}</span>\n\t\t\t{hasCount && !isExternalLink && (\n\t\t\t\t<span className={twMerge(\n\t\t\t\t\t\"hc-inline-block hc-mt-1 hc-ml-auto hc-text-xs hc-leading-none hc-text-primary\",\n\t\t\t\t\tfilterConfig?.classNames?.filterItemCount\n\t\t\t\t)}>\n ({item.count})\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</label>\n\t);\n};\n\nexport default FilterItem;\n"],"names":["FilterItem","_ref","_filterConfig$classNa","_filterConfig$classNa2","_filterConfig$classNa3","className","item","type","itemKey","hasCount","field","activeItem","setActiveItem","changeHandler","_ref$isExternalLink","isExternalLink","externalLinkUrl","trackEvent","eventTypes","rest","_objectWithoutProperties","_excluded","_useMapList","useMapList","filterConfig","itemName","name","React","createElement","_extends","onClick","
|
|
1
|
+
{"version":3,"file":"item.js","sources":["../../../../src/components/modules/filter/item.js"],"sourcesContent":["import React from 'react';\nimport Icon from '~/components/modules/icon';\nimport { twMerge } from '~/util/twMerge';\nimport { useMapList } from '~/contexts/mapListContext';\n\nconst FilterItem = ({\n\tclassName,\n\titem,\n\ttype,\n\titemKey,\n\thasCount,\n\tfield,\n\tactiveItem,\n\tsetActiveItem,\n\tchangeHandler,\n\tisExternalLink = false,\n\texternalLinkUrl,\n\ttrackEvent,\n\teventTypes,\n\t...rest\n}) => {\n\tconst { filterConfig } = useMapList();\n\tconst itemName = item.name ? item.name : item;\n\n\treturn (\n\t\t// eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions\n\t\t<label\n\t\t onClick={() =>\n\t\t\t{\n\t\t\t\tif(!isExternalLink) return;\n\t\t\t\tif (typeof window === 'undefined') return;\n\t\t\t trackEvent(eventTypes.EXTERNAL_LINK_CLICKED, { link: externalLinkUrl });\n\t\t\t\twindow.location.href = externalLinkUrl;\n\t\t\t}}\n\t\t\tclassName={`\n hc-flex hc-items-start hc-gap-2 hc-px-2 hc-py-1.5 hc-rounded-sm hc-text-sm hc-cursor-pointer hc-transition hover:hc-bg-uiAccent/5\n ${className ?? \"\"}\n `}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{isExternalLink ? (\n\t\t\t\t<Icon\n\t\t\t\t\ticon=\"tabler:external-link\"\n\t\t\t\t\tsize=\"hc-size-4\"\n\t\t\t\t\tclassName={'hc-size-4 hc-mt-px hc-text-primary hc-border-uiAccent/30'}\n\t\t\t\t></Icon>\n\t\t\t) : (\n\t\t\t\t<input\n\t\t\t\t\tid={itemKey}\n\t\t\t\t\tname={field}\n\t\t\t\t\tdisabled={item.count === 0}\n\t\t\t\t\tvalue={itemName}\n\t\t\t\t\ttype={type}\n\t\t\t\t\tclassName={twMerge(\n\t\t\t\t\t\t\"hc-size-4 hc-mt-px hc-text-primary hc-border-uiAccent/30 hc-transition-colors hc-rounded-sm\",\n\t\t\t\t\t\tfilterConfig?.classNames?.filterItemCheckbox\n\t\t\t\t\t)}\n\t\t\t\t\tchecked={activeItem}\n\t\t\t\t\tonChange={() => {\n\t\t\t\t\t\tsetActiveItem(!activeItem);\n\t\t\t\t\t\tchangeHandler();\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<span className={twMerge(\n\t\t\t\t\"hc-text-left hc-font-medium\",\n\t\t\t\tfilterConfig?.classNames?.filterItemLabel\n\t\t\t)}>{itemName}</span>\n\t\t\t{hasCount && !isExternalLink && (\n\t\t\t\t<span className={twMerge(\n\t\t\t\t\t\"hc-inline-block hc-mt-1 hc-ml-auto hc-text-xs hc-leading-none hc-text-primary\",\n\t\t\t\t\tfilterConfig?.classNames?.filterItemCount\n\t\t\t\t)}>\n ({item.count})\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</label>\n\t);\n};\n\nexport default FilterItem;\n"],"names":["FilterItem","_ref","_filterConfig$classNa","_filterConfig$classNa2","_filterConfig$classNa3","className","item","type","itemKey","hasCount","field","activeItem","setActiveItem","changeHandler","_ref$isExternalLink","isExternalLink","externalLinkUrl","trackEvent","eventTypes","rest","_objectWithoutProperties","_excluded","_useMapList","useMapList","filterConfig","itemName","name","React","createElement","_extends","onClick","window","EXTERNAL_LINK_CLICKED","link","location","href","concat","Icon","icon","size","id","disabled","count","value","twMerge","classNames","filterItemCheckbox","checked","onChange","filterItemLabel","filterItemCount"],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { objectWithoutProperties as _objectWithoutProperties, extends as _extends, toConsumableArray as _toConsumableArray } from '../../../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
-
import React, { forwardRef } from 'react';
|
|
1
|
+
import { objectWithoutProperties as _objectWithoutProperties, slicedToArray as _slicedToArray, extends as _extends, toConsumableArray as _toConsumableArray } from '../../../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
+
import React, { forwardRef, useState, useRef, useEffect } from 'react';
|
|
3
3
|
import Grid from '../../grid.js';
|
|
4
4
|
import IconContained from '../../icon.js';
|
|
5
5
|
import FieldMapperDesktop from '../field-mapper-desktop.js';
|
|
6
6
|
import FieldMapperMobile from '../field-mapper-mobile.js';
|
|
7
7
|
|
|
8
|
-
var _excluded = ["isActive", "bodyClassName", "className", "item", "fieldsShown", "specialFeatures", "onItemSelected", "showMap", "setMobileTab", "handleSettingFavorites", "favorites", "includeFavorite", "siteConfig", "
|
|
9
|
-
var ListItem = /*#__PURE__*/forwardRef(function (_ref,
|
|
10
|
-
var _item$
|
|
8
|
+
var _excluded = ["isActive", "bodyClassName", "className", "item", "fieldsShown", "specialFeatures", "onItemSelected", "showMap", "setMobileTab", "handleSettingFavorites", "favorites", "includeFavorite", "siteConfig", "index"];
|
|
9
|
+
var ListItem = /*#__PURE__*/forwardRef(function (_ref, _ref2) {
|
|
10
|
+
var _item$mapDetails;
|
|
11
11
|
var isActive = _ref.isActive,
|
|
12
12
|
bodyClassName = _ref.bodyClassName,
|
|
13
13
|
className = _ref.className,
|
|
@@ -21,10 +21,69 @@ var ListItem = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
21
21
|
favorites = _ref.favorites,
|
|
22
22
|
_ref$includeFavorite = _ref.includeFavorite,
|
|
23
23
|
includeFavorite = _ref$includeFavorite === void 0 ? true : _ref$includeFavorite,
|
|
24
|
-
siteConfig = _ref.siteConfig
|
|
25
|
-
|
|
26
|
-
props = _objectWithoutProperties(_ref, _excluded);
|
|
27
|
-
|
|
24
|
+
siteConfig = _ref.siteConfig;
|
|
25
|
+
_ref.index;
|
|
26
|
+
var props = _objectWithoutProperties(_ref, _excluded);
|
|
27
|
+
!showMap ? null : siteConfig.colors.primary.replace("#", "");
|
|
28
|
+
|
|
29
|
+
// Mobile detection for bandwidth optimization
|
|
30
|
+
var _useState = useState(false),
|
|
31
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
32
|
+
isMobile = _useState2[0],
|
|
33
|
+
setIsMobile = _useState2[1];
|
|
34
|
+
|
|
35
|
+
// Individual item loading based on scroll position
|
|
36
|
+
var _useState3 = useState(false),
|
|
37
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
38
|
+
isMapLoaded = _useState4[0],
|
|
39
|
+
setIsMapLoaded = _useState4[1];
|
|
40
|
+
var itemRef = useRef(null);
|
|
41
|
+
useEffect(function () {
|
|
42
|
+
if (typeof window === 'undefined') return;
|
|
43
|
+
var checkIsMobile = function checkIsMobile() {
|
|
44
|
+
setIsMobile(window.innerWidth < 768); // md breakpoint in Tailwind
|
|
45
|
+
};
|
|
46
|
+
checkIsMobile();
|
|
47
|
+
window.addEventListener('resize', checkIsMobile);
|
|
48
|
+
return function () {
|
|
49
|
+
return window.removeEventListener('resize', checkIsMobile);
|
|
50
|
+
};
|
|
51
|
+
}, []);
|
|
52
|
+
|
|
53
|
+
// Load individual map when item comes into view
|
|
54
|
+
useEffect(function () {
|
|
55
|
+
if (typeof window === 'undefined') return;
|
|
56
|
+
if (!isMobile || !showMap || !itemRef.current || isMapLoaded) return;
|
|
57
|
+
var checkIfInView = function checkIfInView() {
|
|
58
|
+
if (!itemRef.current || isMapLoaded) return;
|
|
59
|
+
var rect = itemRef.current.getBoundingClientRect();
|
|
60
|
+
var windowHeight = window.innerHeight;
|
|
61
|
+
|
|
62
|
+
// Load only when item is actually visible or very close to viewport
|
|
63
|
+
// Much more conservative - only load what's immediately needed
|
|
64
|
+
var isInView = rect.top < windowHeight && rect.bottom > 0;
|
|
65
|
+
if (isInView) {
|
|
66
|
+
setIsMapLoaded(true);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// Check immediately
|
|
71
|
+
checkIfInView();
|
|
72
|
+
|
|
73
|
+
// Only check on scroll, not continuously
|
|
74
|
+
var scrollTimeout;
|
|
75
|
+
var handleScroll = function handleScroll() {
|
|
76
|
+
clearTimeout(scrollTimeout);
|
|
77
|
+
scrollTimeout = setTimeout(checkIfInView, 300); // Much less frequent
|
|
78
|
+
};
|
|
79
|
+
window.addEventListener('scroll', handleScroll, {
|
|
80
|
+
passive: true
|
|
81
|
+
});
|
|
82
|
+
return function () {
|
|
83
|
+
window.removeEventListener('scroll', handleScroll);
|
|
84
|
+
clearTimeout(scrollTimeout);
|
|
85
|
+
};
|
|
86
|
+
}, [isMobile, showMap, isMapLoaded]);
|
|
28
87
|
var handleClick = function handleClick() {
|
|
29
88
|
if (onItemSelected) {
|
|
30
89
|
onItemSelected(item);
|
|
@@ -46,7 +105,18 @@ var ListItem = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
46
105
|
handleSettingFavorites(updatedFavorites);
|
|
47
106
|
};
|
|
48
107
|
return /*#__PURE__*/React.createElement("button", _extends({
|
|
49
|
-
ref: ref
|
|
108
|
+
ref: function ref(el) {
|
|
109
|
+
// Forward the ref to the parent component
|
|
110
|
+
if (_ref2) {
|
|
111
|
+
if (typeof _ref2 === 'function') {
|
|
112
|
+
_ref2(el);
|
|
113
|
+
} else {
|
|
114
|
+
_ref2.current = el;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Also store our own ref for scroll detection
|
|
118
|
+
itemRef.current = el;
|
|
119
|
+
},
|
|
50
120
|
onClick: function onClick() {
|
|
51
121
|
handleClick();
|
|
52
122
|
},
|
|
@@ -92,16 +162,17 @@ var ListItem = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
92
162
|
onClick: function onClick(e) {
|
|
93
163
|
handleFavouriteClick(e, item);
|
|
94
164
|
}
|
|
95
|
-
}))), showMap && item.mapDetails
|
|
165
|
+
}))), showMap && ((_item$mapDetails = item.mapDetails) === null || _item$mapDetails === void 0 ? void 0 : _item$mapDetails.staticMapUrl) && /*#__PURE__*/React.createElement("div", {
|
|
96
166
|
onClick: function onClick() {
|
|
97
167
|
setMobileTab("mapTab");
|
|
98
168
|
handleClick();
|
|
99
169
|
},
|
|
100
170
|
className: "md:hc-hidden hc-w-2/5 sm:hc-w-1/3 hc-p-1.5 hc-my-1 hc-bg-uiAccent/5 hc-border hc-border-uiAccent/10 hc-rounded-sm"
|
|
101
171
|
}, /*#__PURE__*/React.createElement("img", {
|
|
102
|
-
src:
|
|
103
|
-
alt: "Map of location for ".concat(
|
|
104
|
-
className: "hc-w-full hc-h-full hc-object-cover"
|
|
172
|
+
src: item.mapDetails.staticMapUrl,
|
|
173
|
+
alt: "Map of location for ".concat(item.fields.position),
|
|
174
|
+
className: "hc-w-full hc-h-full hc-object-cover",
|
|
175
|
+
loading: "lazy"
|
|
105
176
|
})));
|
|
106
177
|
});
|
|
107
178
|
ListItem.displayName = "ListItem";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-item.js","sources":["../../../../../src/components/modules/list/list-item/list-item.jsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport Grid from '~/components/modules/grid';\nimport Icon from '~/components/modules/icon';\nimport FieldMapper from '~/components/modules/list/field-mapper-desktop';\nimport FieldMapperMobile from '~/components/modules/list/field-mapper-mobile';\nconst ListItem = forwardRef(\n\t(\n\t\t{\n\t\t\tisActive,\n\t\t\tbodyClassName,\n\t\t\tclassName,\n\t\t\titem,\n\t\t\tfieldsShown,\n\t\t\tspecialFeatures,\n\t\t\tonItemSelected,\n\t\t\tshowMap,\n\t\t\tsetMobileTab,\n\t\t\thandleSettingFavorites,\n\t\t\tfavorites,\n\t\t\tincludeFavorite = true,\n\t\t\tsiteConfig,\n\t\t\tgoogleMapsApiKey,\n\t\t\t...props\n\t\t},\n\t\tref\n\t) => {\n\t\tconst mapPinColor = !showMap ? null : siteConfig.colors.primary.replace(\"#\", \"\");\n\n\t\tconst handleClick = () => {\n\t\t\tif (onItemSelected) {\n\t\t\t\tonItemSelected(item);\n\t\t\t}\n\t\t};\n\t\tlet isFavorite = favorites.includes(item.id);\n\n\t\tconst handleFavouriteClick = (event, item) => {\n\t\t\tif(!includeFavorite)return;\n\t\t\tevent.stopPropagation();\n\t\t\tlet updatedFavorites;\n\t\t\tif (isFavorite) {\n\t\t\t\tupdatedFavorites = favorites.filter(fav => fav !== item.id);\n\t\t\t} else {\n\t\t\t\tupdatedFavorites = [...favorites, item.id];\n\t\t\t}\n\t\t\tisFavorite = !isFavorite;\n\t\t\thandleSettingFavorites(updatedFavorites);\n\t\t};\n\t\treturn (\n\t\t\t<button\n\t\t\t\tref={ref}\n\t\t\t\tonClick={() => { handleClick(); }}\n\t\t\t\tclassName={`\n\t\t\t\thc-group hc-relative hc-flex md:hc-flex-col hc-w-full hc-text-left hc-bg-clip-border hc-border hc-border-transparent hc-break-words hc-overflow-hidden hc-cursor-pointer hc-transition-colors hover:hc-bg-uiAccent/5 focus:hover:hc-bg-uiAccent/5\n\t\t\t\t${isActive ? \"hc-bg-uiAccent/5 hc-border-secondary hc-border\" : \"hc-text-uiText hc-bg-white\"}\n\t\t\t\t${className ?? \"\"}\n\t\t\t\t`}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{/* This Grid is displayed as block on mobile and grid on desktop */}\n\t\t\t\t<Grid\n\t\t\t\t\tcolumns=\"hc-pl-2 hc-md-pl-0 hc-grid-flow-col hc-auto-cols-fr\"\n\t\t\t\t\tgap=\"hc-gap-0\"\n\t\t\t\t\tclassName={`\n hc-block md:hc-grid hc-py-2 hc-w-full hc-grow hc-leading-tight hc-text-sm md:hc-text-xs lg:hc-text-sm\n ${bodyClassName ?? \"\"}\n `}\n\t\t\t\t>\n\t\t\t\t\t{/* DESKTOP ONLY: This expand icon is hidden on mobile (hc-hidden) and visible on desktop (md:hc-block) */}\n\t\t\t\t\t<Grid.Item className=\"hc-hidden md:hc-block md:hc-absolute md:hc-left-1.5 hc-top-1.5\">\n\t\t\t\t\t\t<span className=\"hc-sr-only\">Expand row</span>\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\ticon=\"fluent-emoji-high-contrast:plus\"\n\t\t\t\t\t\t\tsize=\"hc-size-2.5\"\n\t\t\t\t\t\t\tclassName={`\n hc-opacity-0 hc-text-uiText/60 hc-transition group-hover:hc-opacity-100 group-active:hc-opacity-100\n ${isActive ? \"hc-opacity-100 hc-rotate-45\" : \"\"}\n `}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid.Item>\n\t\t\t\t\t<FieldMapper\n\t\t\t\t\t\titem={item}\n\t\t\t\t\t\tfieldsShown={fieldsShown}\n\t\t\t\t\t\tspecialFeatures={specialFeatures}\n\t\t\t\t\t\tisFavorite={isFavorite}\n\t\t\t\t\t\tincludeFavorite={includeFavorite}\n\t\t\t\t\t\thandleFavouriteClick={handleFavouriteClick}\n\t\t\t\t\t/>\n\t\t\t\t\t<FieldMapperMobile\n\t\t\t\t\t\titem={item}\n\t\t\t\t\t\tfieldsShown={fieldsShown}\n\t\t\t\t\t\tspecialFeatures={specialFeatures}\n\t\t\t\t\t\tisFavorite={isFavorite}\n\t\t\t\t\t\tincludeFavorite={includeFavorite}\n\t\t\t\t\t\thandleFavouriteClick={handleFavouriteClick}\n\t\t\t\t\t/>\n\t\t\t\t\t{includeFavorite &&\n\t\t\t\t\t/* DESKTOP ONLY: This favorites icon is hidden on mobile (hc-hidden) and visible on desktop (md:hc-block) */\n\t\t\t\t\t<Grid.Item\n\t\t\t\t\t\tkey={\"favorites\"}\n\t\t\t\t\t\tclassName=\"hc-hidden md:hc-block hc-col-span-1 hc-px-2\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\ticon={isFavorite ? \"mdi:heart\" : \"mdi:heart-outline\"}\n\t\t\t\t\t\t\tsize=\"hc-size-3.5\"\n\t\t\t\t\t\t\ticonClasses={isFavorite ? \"hc-text-primary\" : \"\"}\n\t\t\t\t\t\t\ttitle={!isFavorite ? 'Add job to favorites' : 'Remove job from favorites'}\n\t\t\t\t\t\t\tclassName=\"hc-pr-2 hc-transition-opacity hc-duration-300 hc-cursor-pointer hc-opacity-100\"\n\t\t\t\t\t\t\tonClick={e => {handleFavouriteClick(e, item);}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid.Item>\n\t\t\t\t\t}\n\t\t\t\t</Grid>\n\t\t\t\t{/* MOBILE ONLY: This map section is visible on mobile and hidden on desktop (md:hc-hidden) */}\n\t\t\t\t{showMap && item.mapDetails && googleMapsApiKey && (\n\t\t\t\t\t<div onClick={() => { setMobileTab(\"mapTab\"); handleClick(); }} className=\"md:hc-hidden hc-w-2/5 sm:hc-w-1/3 hc-p-1.5 hc-my-1 hc-bg-uiAccent/5 hc-border hc-border-uiAccent/10 hc-rounded-sm\">\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={`https://maps.googleapis.com/maps/api/staticmap?scale=2¢er=${item.mapDetails.latitude},${item.mapDetails.longitude}&zoom=10&size=240x180&maptype=roadmap&markers=color:0x${mapPinColor}%7Clabel:•%7C${item.mapDetails.latitude},${item.mapDetails.longitude}&key=${googleMapsApiKey}`}\n\t\t\t\t\t\t\talt={`Map of location for ${item.fields?.position || item.fields?.title || 'job'}`}\n\t\t\t\t\t\t\tclassName=\"hc-w-full hc-h-full hc-object-cover\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t);\n\t}\n);\n\nListItem.displayName = \"ListItem\";\n\nexport default React.memo(ListItem, (prevProps, nextProps) => {\n\treturn (\n\t\tprevProps.isActive === nextProps.isActive &&\n\t\tprevProps.favorites === nextProps.favorites &&\n prevProps.item.id === nextProps.item.id &&\n\tprevProps.item.fields.travelTime === nextProps.item.fields.travelTime &&\n prevProps.fieldsShown === nextProps.fieldsShown &&\n prevProps.bodyClassName === nextProps.bodyClassName &&\n prevProps.className === nextProps.className\n\t);\n});\n"],"names":["ListItem","forwardRef","_ref","ref","_item$fields","_item$fields2","isActive","bodyClassName","className","item","fieldsShown","specialFeatures","onItemSelected","showMap","setMobileTab","handleSettingFavorites","favorites","_ref$includeFavorite","includeFavorite","siteConfig","googleMapsApiKey","props","_objectWithoutProperties","_excluded","mapPinColor","colors","primary","replace","handleClick","isFavorite","includes","id","handleFavouriteClick","event","stopPropagation","updatedFavorites","filter","fav","concat","_toConsumableArray","React","createElement","_extends","onClick","Grid","columns","gap","Item","Icon","icon","size","FieldMapper","FieldMapperMobile","key","iconClasses","title","e","mapDetails","src","latitude","longitude","alt","fields","position","displayName","memo","prevProps","nextProps","travelTime"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"list-item.js","sources":["../../../../../src/components/modules/list/list-item/list-item.jsx"],"sourcesContent":["import React, { forwardRef, useState, useEffect, useRef } from 'react';\nimport Grid from '~/components/modules/grid';\nimport Icon from '~/components/modules/icon';\nimport FieldMapper from '~/components/modules/list/field-mapper-desktop';\nimport FieldMapperMobile from '~/components/modules/list/field-mapper-mobile';\nconst ListItem = forwardRef(\n\t(\n\t\t{\n\t\t\tisActive,\n\t\t\tbodyClassName,\n\t\t\tclassName,\n\t\t\titem,\n\t\t\tfieldsShown,\n\t\t\tspecialFeatures,\n\t\t\tonItemSelected,\n\t\t\tshowMap,\n\t\t\tsetMobileTab,\n\t\t\thandleSettingFavorites,\n\t\t\tfavorites,\n\t\t\tincludeFavorite = true,\n\t\t\tsiteConfig,\n\t\t\tindex,\n\t\t\t...props\n\t\t},\n\t\tref\n\t) => {\n\t\tconst mapPinColor = !showMap ? null : siteConfig.colors.primary.replace(\"#\", \"\");\n\n\t\t// Mobile detection for bandwidth optimization\n\t\tconst [isMobile, setIsMobile] = useState(false);\n\n\t\t// Individual item loading based on scroll position\n\t\tconst [isMapLoaded, setIsMapLoaded] = useState(false);\n\t\tconst itemRef = useRef(null);\n\n\t\tuseEffect(() => {\n\t\tif (typeof window === 'undefined') return;\n\t\t\n\t\tconst checkIsMobile = () => {\n\t\t\tsetIsMobile(window.innerWidth < 768); // md breakpoint in Tailwind\n\t\t};\n\n\t\tcheckIsMobile();\n\t\twindow.addEventListener('resize', checkIsMobile);\n\n\t\treturn () => window.removeEventListener('resize', checkIsMobile);\n\t}, []);\n\n\t// Load individual map when item comes into view\n\tuseEffect(() => {\n\t\tif (typeof window === 'undefined') return;\n\t\tif (!isMobile || !showMap || !itemRef.current || isMapLoaded) return;\n\n\t\tconst checkIfInView = () => {\n\t\t\tif (!itemRef.current || isMapLoaded) return;\n\n\t\t\tconst rect = itemRef.current.getBoundingClientRect();\n\t\t\tconst windowHeight = window.innerHeight;\n\n\t\t\t// Load only when item is actually visible or very close to viewport\n\t\t\t// Much more conservative - only load what's immediately needed\n\t\t\tconst isInView = rect.top < windowHeight && rect.bottom > 0;\n\n\t\t\tif (isInView) {\n\t\t\t\tsetIsMapLoaded(true);\n\t\t\t}\n\t\t};\n\n\t\t// Check immediately\n\t\tcheckIfInView();\n\n\t\t// Only check on scroll, not continuously\n\t\tlet scrollTimeout;\n\t\tconst handleScroll = () => {\n\t\t\tclearTimeout(scrollTimeout);\n\t\t\tscrollTimeout = setTimeout(checkIfInView, 300); // Much less frequent\n\t\t};\n\n\t\twindow.addEventListener('scroll', handleScroll, { passive: true });\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('scroll', handleScroll);\n\t\t\tclearTimeout(scrollTimeout);\n\t\t};\n\t}, [isMobile, showMap, isMapLoaded]);\n\n\tconst handleClick = () => {\n\t\tif (onItemSelected) {\n\t\t\tonItemSelected(item);\n\t\t}\n\t};\n\tlet isFavorite = favorites.includes(item.id);\n\n\tconst handleFavouriteClick = (event, item) => {\n\t\tif(!includeFavorite)return;\n\t\tevent.stopPropagation();\n\t\tlet updatedFavorites;\n\t\tif (isFavorite) {\n\t\t\tupdatedFavorites = favorites.filter(fav => fav !== item.id);\n\t\t} else {\n\t\t\tupdatedFavorites = [...favorites, item.id];\n\t\t}\n\t\tisFavorite = !isFavorite;\n\t\thandleSettingFavorites(updatedFavorites);\n\t};\n\t\treturn (\n\t\t\t<button\n\t\t\t\tref={(el) => {\n\t\t\t\t\t// Forward the ref to the parent component\n\t\t\t\t\tif (ref) {\n\t\t\t\t\t\tif (typeof ref === 'function') {\n\t\t\t\t\t\t\tref(el);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tref.current = el;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// Also store our own ref for scroll detection\n\t\t\t\t\titemRef.current = el;\n\t\t\t\t}}\n\t\t\t\tonClick={() => { handleClick(); }}\n\t\t\t\tclassName={`\n\t\t\t\thc-group hc-relative hc-flex md:hc-flex-col hc-w-full hc-text-left hc-bg-clip-border hc-border hc-border-transparent hc-break-words hc-overflow-hidden hc-cursor-pointer hc-transition-colors hover:hc-bg-uiAccent/5 focus:hover:hc-bg-uiAccent/5\n\t\t\t\t${isActive ? \"hc-bg-uiAccent/5 hc-border-secondary hc-border\" : \"hc-text-uiText hc-bg-white\"}\n\t\t\t\t${className ?? \"\"}\n\t\t\t\t`}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{/* This Grid is displayed as block on mobile and grid on desktop */}\n\t\t\t\t<Grid\n\t\t\t\t\tcolumns=\"hc-pl-2 hc-md-pl-0 hc-grid-flow-col hc-auto-cols-fr\"\n\t\t\t\t\tgap=\"hc-gap-0\"\n\t\t\t\t\tclassName={`\n hc-block md:hc-grid hc-py-2 hc-w-full hc-grow hc-leading-tight hc-text-sm md:hc-text-xs lg:hc-text-sm\n ${bodyClassName ?? \"\"}\n `}\n\t\t\t\t>\n\t\t\t\t\t{/* DESKTOP ONLY: This expand icon is hidden on mobile (hc-hidden) and visible on desktop (md:hc-block) */}\n\t\t\t\t\t<Grid.Item className=\"hc-hidden md:hc-block md:hc-absolute md:hc-left-1.5 hc-top-1.5\">\n\t\t\t\t\t\t<span className=\"hc-sr-only\">Expand row</span>\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\ticon=\"fluent-emoji-high-contrast:plus\"\n\t\t\t\t\t\t\tsize=\"hc-size-2.5\"\n\t\t\t\t\t\t\tclassName={`\n hc-opacity-0 hc-text-uiText/60 hc-transition group-hover:hc-opacity-100 group-active:hc-opacity-100\n ${isActive ? \"hc-opacity-100 hc-rotate-45\" : \"\"}\n `}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid.Item>\n\t\t\t\t\t<FieldMapper\n\t\t\t\t\t\titem={item}\n\t\t\t\t\t\tfieldsShown={fieldsShown}\n\t\t\t\t\t\tspecialFeatures={specialFeatures}\n\t\t\t\t\t\tisFavorite={isFavorite}\n\t\t\t\t\t\tincludeFavorite={includeFavorite}\n\t\t\t\t\t\thandleFavouriteClick={handleFavouriteClick}\n\t\t\t\t\t/>\n\t\t\t\t\t<FieldMapperMobile\n\t\t\t\t\t\titem={item}\n\t\t\t\t\t\tfieldsShown={fieldsShown}\n\t\t\t\t\t\tspecialFeatures={specialFeatures}\n\t\t\t\t\t\tisFavorite={isFavorite}\n\t\t\t\t\t\tincludeFavorite={includeFavorite}\n\t\t\t\t\t\thandleFavouriteClick={handleFavouriteClick}\n\t\t\t\t\t/>\n\t\t\t\t\t{includeFavorite &&\n\t\t\t\t\t/* DESKTOP ONLY: This favorites icon is hidden on mobile (hc-hidden) and visible on desktop (md:hc-block) */\n\t\t\t\t\t<Grid.Item\n\t\t\t\t\t\tkey={\"favorites\"}\n\t\t\t\t\t\tclassName=\"hc-hidden md:hc-block hc-col-span-1 hc-px-2\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\ticon={isFavorite ? \"mdi:heart\" : \"mdi:heart-outline\"}\n\t\t\t\t\t\t\tsize=\"hc-size-3.5\"\n\t\t\t\t\t\t\ticonClasses={isFavorite ? \"hc-text-primary\" : \"\"}\n\t\t\t\t\t\t\ttitle={!isFavorite ? 'Add job to favorites' : 'Remove job from favorites'}\n\t\t\t\t\t\t\tclassName=\"hc-pr-2 hc-transition-opacity hc-duration-300 hc-cursor-pointer hc-opacity-100\"\n\t\t\t\t\t\t\tonClick={e => {handleFavouriteClick(e, item);}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid.Item>\n\t\t\t\t\t}\n\t\t\t\t</Grid>\n\t\t\t\t{/* MOBILE ONLY: This map section is visible on mobile and hidden on desktop (md:hc-hidden) */}\n\t\t\t\t{showMap && item.mapDetails?.staticMapUrl && (\n\t\t\t\t\t<div \n\t\t\t\t\t\tonClick={() => { setMobileTab(\"mapTab\"); handleClick(); }} \n\t\t\t\t\t\tclassName=\"md:hc-hidden hc-w-2/5 sm:hc-w-1/3 hc-p-1.5 hc-my-1 hc-bg-uiAccent/5 hc-border hc-border-uiAccent/10 hc-rounded-sm\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={item.mapDetails.staticMapUrl}\n\t\t\t\t\t\t\talt={`Map of location for ${item.fields.position}`}\n\t\t\t\t\t\t\tclassName=\"hc-w-full hc-h-full hc-object-cover\"\n\t\t\t\t\t\t\tloading=\"lazy\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t);\n\t}\n);\n\nListItem.displayName = \"ListItem\";\n\nexport default React.memo(ListItem, (prevProps, nextProps) => {\n\treturn (\n\t\tprevProps.isActive === nextProps.isActive &&\n\t\tprevProps.favorites === nextProps.favorites &&\n prevProps.item.id === nextProps.item.id &&\n\tprevProps.item.fields.travelTime === nextProps.item.fields.travelTime &&\n prevProps.fieldsShown === nextProps.fieldsShown &&\n prevProps.bodyClassName === nextProps.bodyClassName &&\n prevProps.className === nextProps.className\n\t);\n});"],"names":["ListItem","forwardRef","_ref","ref","_item$mapDetails","isActive","bodyClassName","className","item","fieldsShown","specialFeatures","onItemSelected","showMap","setMobileTab","handleSettingFavorites","favorites","_ref$includeFavorite","includeFavorite","siteConfig","index","props","_objectWithoutProperties","_excluded","colors","primary","replace","_useState","useState","_useState2","_slicedToArray","isMobile","setIsMobile","_useState3","_useState4","isMapLoaded","setIsMapLoaded","itemRef","useRef","useEffect","window","checkIsMobile","innerWidth","addEventListener","removeEventListener","current","checkIfInView","rect","getBoundingClientRect","windowHeight","innerHeight","isInView","top","bottom","scrollTimeout","handleScroll","clearTimeout","setTimeout","passive","handleClick","isFavorite","includes","id","handleFavouriteClick","event","stopPropagation","updatedFavorites","filter","fav","concat","_toConsumableArray","React","createElement","_extends","el","onClick","Grid","columns","gap","Item","Icon","icon","size","FieldMapper","FieldMapperMobile","key","iconClasses","title","e","mapDetails","staticMapUrl","src","alt","fields","position","loading","displayName","memo","prevProps","nextProps","travelTime"],"mappings":"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"}
|
|
@@ -22,14 +22,18 @@ const MapProvider = ({ children, resetFilters, defaultZoomOverride, localStorage
|
|
|
22
22
|
setStorageObject(localStorageKey + "selectedListItem", selectedListItem);
|
|
23
23
|
}, [selectedListItem, localStorageKey]);
|
|
24
24
|
useEffect(() => {
|
|
25
|
-
|
|
25
|
+
if (typeof window !== 'undefined') {
|
|
26
|
+
localStorage.setItem(localStorageKey + "zoom", zoom.toString());
|
|
27
|
+
}
|
|
26
28
|
}, [zoom, localStorageKey]);
|
|
27
29
|
useEffect(() => {
|
|
28
|
-
if (
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
if (typeof window !== 'undefined') {
|
|
31
|
+
if (location == null) {
|
|
32
|
+
localStorage.removeItem(localStorageKey + "location");
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
setStorageObject(localStorageKey + "location", location);
|
|
36
|
+
}
|
|
33
37
|
}
|
|
34
38
|
}, [location, localStorageKey]);
|
|
35
39
|
useEffect(() => {
|
|
@@ -61,7 +65,9 @@ const MapProvider = ({ children, resetFilters, defaultZoomOverride, localStorage
|
|
|
61
65
|
}
|
|
62
66
|
}, [resetFilters]);
|
|
63
67
|
const selectLocationEntity = (location) => {
|
|
64
|
-
|
|
68
|
+
if (typeof window !== 'undefined') {
|
|
69
|
+
localStorage.removeItem(localStorageKey + "selectedListItem");
|
|
70
|
+
}
|
|
65
71
|
setTimeout(() => setLocation(location), 200);
|
|
66
72
|
setSelectedListItem(null);
|
|
67
73
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapContext.js","sources":["../../src/contexts/mapContext.tsx"],"sourcesContent":["import React, { createContext, useState, useContext, useEffect, useRef, ReactNode } from 'react';\nimport { getStorageObject, setStorageObject } from '~/util/localStorageUtil';\nimport { Listing } from '~/types/Listings';\nimport { LatLng } from '~/types/LatLng';\ninterface IMapContext {\n selectedListItem: Listing | null;\n setSelectedListItem: (item: Listing | null) => void;\n location: any | null;\n setLocation: (location: LatLng | null) => void;\n center: LatLng;\n setCenter: (center: LatLng) => void;\n zoom: number;\n setZoom: (zoom: number) => void;\n selectedPlaces: string[];\n setSelectedPlaces: (places: string[]) => void;\n mapInteracted: boolean;\n setMapInteracted: (interacted: boolean) => void;\n userSetZoom: React.MutableRefObject<boolean>;\n firstLoadListItem: any;\n selectItem: (item: Listing, itemLocation: LatLng | null, zoom: number, center: LatLng) => void;\n filterReset: () => void;\n selectLocationEntity: (location: LatLng) => void;\n\tdefaultZoomOverride?: number | null;\n}\n\nconst MapContext = createContext<IMapContext | undefined>(undefined);\n\nexport const useMap = () => {\n\tconst context = useContext(MapContext);\n\tif (!context) {\n\t\tthrow new Error(\"useMap must be used within a MapProvider\");\n\t}\n\treturn context;\n};\n\ninterface MapProviderProps {\n children: ReactNode;\n resetFilters: boolean;\n\tdefaultZoomOverride?: number | null;\n\tlocalStorageKey?: string;\n}\n\nexport const MapProvider: React.FC<MapProviderProps> = ({ children, resetFilters, defaultZoomOverride, localStorageKey = '' }) => {\n\tconst [selectedListItem, setSelectedListItem] = useState<Listing | null>(getStorageObject(localStorageKey + 'selectedListItem'));\n\tconst [location, setLocation] = useState<any>(getStorageObject(localStorageKey + 'location'));\n\tconst [center, setCenter] = useState<LatLng>(getStorageObject(localStorageKey + \"center\", { lat: 39.8283, lng: -98.5795 }) || { lat: 39.8283, lng: -98.5795 });\n\tconst [zoom, setZoom] = useState<number>(getStorageObject(localStorageKey + \"zoom\", 9) || 9);\n\tconst [selectedPlaces, setSelectedPlaces] = useState<string[]>([]);\n\tconst [mapInteracted, setMapInteracted] = useState<boolean>(false);\n\tconst [firstLoadListItem] = useState<any>(getStorageObject(localStorageKey + 'selectedListItem', { id: \"defaultId\" }));\n\tconst userSetZoom = useRef<boolean>(true);\n\n\tuseEffect(() => {\n\t\tsetStorageObject(localStorageKey + \"selectedListItem\", selectedListItem);\n\t}, [selectedListItem, localStorageKey]);\n\n\tuseEffect(() => {\n\t\tlocalStorage.setItem(localStorageKey + \"zoom\", zoom.toString());\n\t}, [zoom, localStorageKey]);\n\n\tuseEffect(() => {\n\t\tif (location == null) {\n\t\t\tlocalStorage.removeItem(localStorageKey + \"location\");\n\t\t} else {\n\t\t\tsetStorageObject(localStorageKey + \"location\", location);\n\t\t}\n\t}, [location, localStorageKey]);\n\n\tuseEffect(() => {\n\t\tsetStorageObject(localStorageKey + \"center\", center);\n\t}, [center, localStorageKey]);\n\n\tconst selectItem = (item: Listing, itemLocation: LatLng | null, zoom: number, center: LatLng) => {\n\t\tsetSelectedListItem(item);\n\t\tif (mapInteracted === false && itemLocation != null) {\n\t\t\tsetLocation(itemLocation);\n\t\t}\n\t\tif (mapInteracted === false || itemLocation != null) {\n\t\t\tsetLocation(itemLocation);\n\t\t\tsetCenter(center);\n\t\t}\n\t\tif (mapInteracted === false) {\n\t\t\tsetZoom(zoom);\n\t\t}\n\t};\n\n\tconst filterReset = () => {\n\t\tsetSelectedPlaces([]);\n\t\tsetSelectedListItem(null);\n\t\tsetLocation(null);\n\t\tsetZoom(8);\n\t\tsetMapInteracted(false);\n\t};\n\n\tuseEffect(() => {\n\t\tif (resetFilters === true) {\n\t\t\tfilterReset();\n\t\t}\n\t}, [resetFilters]);\n\n\tconst selectLocationEntity = (location: LatLng) => {\n\t\tlocalStorage.removeItem(localStorageKey + \"selectedListItem\");\n\t\tsetTimeout(() => setLocation(location), 200);\n\t\tsetSelectedListItem(null);\n\t};\n\n\treturn (\n\t\t<MapContext.Provider\n\t\t\tvalue={{\n\t\t\t\tselectedListItem,\n\t\t\t\tsetSelectedListItem,\n\t\t\t\tlocation,\n\t\t\t\tcenter,\n\t\t\t\tsetCenter,\n\t\t\t\tzoom,\n\t\t\t\tsetZoom,\n\t\t\t\tselectItem,\n\t\t\t\tsetSelectedPlaces,\n\t\t\t\tselectedPlaces,\n\t\t\t\tselectLocationEntity,\n\t\t\t\tsetLocation,\n\t\t\t\tsetMapInteracted,\n\t\t\t\tmapInteracted,\n\t\t\t\tuserSetZoom,\n\t\t\t\tfirstLoadListItem,\n\t\t\t\tfilterReset,\n\t\t\t\tdefaultZoomOverride\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</MapContext.Provider>\n\t);\n};\n"],"names":[],"mappings":";;;AAyBA,MAAM,UAAU,GAAG,aAAa,CAA0B,SAAS,CAAC,CAAC;AAE9D,MAAM,MAAM,GAAG,MAAK;AAC1B,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE;AACb,QAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;AAC5D,KAAA;AACD,IAAA,OAAO,OAAO,CAAC;AAChB,EAAE;AASW,MAAA,WAAW,GAA+B,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,mBAAmB,EAAE,eAAe,GAAG,EAAE,EAAE,KAAI;AAChI,IAAA,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAiB,gBAAgB,CAAC,eAAe,GAAG,kBAAkB,CAAC,CAAC,CAAC;AACjI,IAAA,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAM,gBAAgB,CAAC,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC;AAC9F,IAAA,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAS,gBAAgB,CAAC,eAAe,GAAG,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;AAC/J,IAAA,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAS,gBAAgB,CAAC,eAAe,GAAG,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7F,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IACnE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;AACnE,IAAA,MAAM,CAAC,iBAAiB,CAAC,GAAG,QAAQ,CAAM,gBAAgB,CAAC,eAAe,GAAG,kBAAkB,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;AACvH,IAAA,MAAM,WAAW,GAAG,MAAM,CAAU,IAAI,CAAC,CAAC;IAE1C,SAAS,CAAC,MAAK;AACd,QAAA,gBAAgB,CAAC,eAAe,GAAG,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;AAC1E,KAAC,EAAE,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC,CAAC;IAExC,SAAS,CAAC,MAAK;AACd,QAAA,YAAY,CAAC,OAAO,CAAC,eAAe,GAAG,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"mapContext.js","sources":["../../src/contexts/mapContext.tsx"],"sourcesContent":["import React, { createContext, useState, useContext, useEffect, useRef, ReactNode } from 'react';\nimport { getStorageObject, setStorageObject } from '~/util/localStorageUtil';\nimport { Listing } from '~/types/Listings';\nimport { LatLng } from '~/types/LatLng';\ninterface IMapContext {\n selectedListItem: Listing | null;\n setSelectedListItem: (item: Listing | null) => void;\n location: any | null;\n setLocation: (location: LatLng | null) => void;\n center: LatLng;\n setCenter: (center: LatLng) => void;\n zoom: number;\n setZoom: (zoom: number) => void;\n selectedPlaces: string[];\n setSelectedPlaces: (places: string[]) => void;\n mapInteracted: boolean;\n setMapInteracted: (interacted: boolean) => void;\n userSetZoom: React.MutableRefObject<boolean>;\n firstLoadListItem: any;\n selectItem: (item: Listing, itemLocation: LatLng | null, zoom: number, center: LatLng) => void;\n filterReset: () => void;\n selectLocationEntity: (location: LatLng) => void;\n\tdefaultZoomOverride?: number | null;\n}\n\nconst MapContext = createContext<IMapContext | undefined>(undefined);\n\nexport const useMap = () => {\n\tconst context = useContext(MapContext);\n\tif (!context) {\n\t\tthrow new Error(\"useMap must be used within a MapProvider\");\n\t}\n\treturn context;\n};\n\ninterface MapProviderProps {\n children: ReactNode;\n resetFilters: boolean;\n\tdefaultZoomOverride?: number | null;\n\tlocalStorageKey?: string;\n}\n\nexport const MapProvider: React.FC<MapProviderProps> = ({ children, resetFilters, defaultZoomOverride, localStorageKey = '' }) => {\n\tconst [selectedListItem, setSelectedListItem] = useState<Listing | null>(getStorageObject(localStorageKey + 'selectedListItem'));\n\tconst [location, setLocation] = useState<any>(getStorageObject(localStorageKey + 'location'));\n\tconst [center, setCenter] = useState<LatLng>(getStorageObject(localStorageKey + \"center\", { lat: 39.8283, lng: -98.5795 }) || { lat: 39.8283, lng: -98.5795 });\n\tconst [zoom, setZoom] = useState<number>(getStorageObject(localStorageKey + \"zoom\", 9) || 9);\n\tconst [selectedPlaces, setSelectedPlaces] = useState<string[]>([]);\n\tconst [mapInteracted, setMapInteracted] = useState<boolean>(false);\n\tconst [firstLoadListItem] = useState<any>(getStorageObject(localStorageKey + 'selectedListItem', { id: \"defaultId\" }));\n\tconst userSetZoom = useRef<boolean>(true);\n\n\tuseEffect(() => {\n\t\tsetStorageObject(localStorageKey + \"selectedListItem\", selectedListItem);\n\t}, [selectedListItem, localStorageKey]);\n\n\tuseEffect(() => {\n\t\tif (typeof window !== 'undefined') {\n\t\t\tlocalStorage.setItem(localStorageKey + \"zoom\", zoom.toString());\n\t\t}\n\t}, [zoom, localStorageKey]);\n\n\tuseEffect(() => {\n\t\tif (typeof window !== 'undefined') {\n\t\t\tif (location == null) {\n\t\t\t\tlocalStorage.removeItem(localStorageKey + \"location\");\n\t\t\t} else {\n\t\t\t\tsetStorageObject(localStorageKey + \"location\", location);\n\t\t\t}\n\t\t}\n\t}, [location, localStorageKey]);\n\n\tuseEffect(() => {\n\t\tsetStorageObject(localStorageKey + \"center\", center);\n\t}, [center, localStorageKey]);\n\n\tconst selectItem = (item: Listing, itemLocation: LatLng | null, zoom: number, center: LatLng) => {\n\t\tsetSelectedListItem(item);\n\t\tif (mapInteracted === false && itemLocation != null) {\n\t\t\tsetLocation(itemLocation);\n\t\t}\n\t\tif (mapInteracted === false || itemLocation != null) {\n\t\t\tsetLocation(itemLocation);\n\t\t\tsetCenter(center);\n\t\t}\n\t\tif (mapInteracted === false) {\n\t\t\tsetZoom(zoom);\n\t\t}\n\t};\n\n\tconst filterReset = () => {\n\t\tsetSelectedPlaces([]);\n\t\tsetSelectedListItem(null);\n\t\tsetLocation(null);\n\t\tsetZoom(8);\n\t\tsetMapInteracted(false);\n\t};\n\n\tuseEffect(() => {\n\t\tif (resetFilters === true) {\n\t\t\tfilterReset();\n\t\t}\n\t}, [resetFilters]);\n\n\tconst selectLocationEntity = (location: LatLng) => {\n\t\tif (typeof window !== 'undefined') {\n\t\t\tlocalStorage.removeItem(localStorageKey + \"selectedListItem\");\n\t\t}\n\t\tsetTimeout(() => setLocation(location), 200);\n\t\tsetSelectedListItem(null);\n\t};\n\n\treturn (\n\t\t<MapContext.Provider\n\t\t\tvalue={{\n\t\t\t\tselectedListItem,\n\t\t\t\tsetSelectedListItem,\n\t\t\t\tlocation,\n\t\t\t\tcenter,\n\t\t\t\tsetCenter,\n\t\t\t\tzoom,\n\t\t\t\tsetZoom,\n\t\t\t\tselectItem,\n\t\t\t\tsetSelectedPlaces,\n\t\t\t\tselectedPlaces,\n\t\t\t\tselectLocationEntity,\n\t\t\t\tsetLocation,\n\t\t\t\tsetMapInteracted,\n\t\t\t\tmapInteracted,\n\t\t\t\tuserSetZoom,\n\t\t\t\tfirstLoadListItem,\n\t\t\t\tfilterReset,\n\t\t\t\tdefaultZoomOverride\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</MapContext.Provider>\n\t);\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -43,6 +43,9 @@ const MapListProvider = ({ children, siteConfig, googleMapsApiKey, resetFilters,
|
|
|
43
43
|
}
|
|
44
44
|
} }) => {
|
|
45
45
|
const firstLoadFilters = () => {
|
|
46
|
+
if (typeof window === 'undefined') {
|
|
47
|
+
return getStorageObject(localStorageKey + 'selectedFilters', {}) || {};
|
|
48
|
+
}
|
|
46
49
|
let urlData = filtersFromURL(window.location);
|
|
47
50
|
let urlFilters = urlData?.filters;
|
|
48
51
|
// If ls-ignore=true is in URL, don't load from localStorage
|
|
@@ -54,6 +57,8 @@ const MapListProvider = ({ children, siteConfig, googleMapsApiKey, resetFilters,
|
|
|
54
57
|
const firstLoadQuery = () => {
|
|
55
58
|
if (resetFilters)
|
|
56
59
|
return null;
|
|
60
|
+
if (typeof window === 'undefined')
|
|
61
|
+
return getQuery(localStorageKey);
|
|
57
62
|
// Check URL first
|
|
58
63
|
const urlData = filtersFromURL(window.location);
|
|
59
64
|
// If ls-ignore=true is in URL, don't load from localStorage
|
|
@@ -88,9 +93,13 @@ const MapListProvider = ({ children, siteConfig, googleMapsApiKey, resetFilters,
|
|
|
88
93
|
useEffect(() => {
|
|
89
94
|
if (!sortSetting)
|
|
90
95
|
return;
|
|
91
|
-
|
|
96
|
+
if (typeof window !== 'undefined') {
|
|
97
|
+
localStorage.setItem(localStorageKey + 'sortSetting', JSON.stringify(sortSetting));
|
|
98
|
+
}
|
|
92
99
|
}, [sortSetting, localStorageKey]);
|
|
93
100
|
useEffect(() => {
|
|
101
|
+
if (typeof window === 'undefined')
|
|
102
|
+
return;
|
|
94
103
|
const loadedFavorites = JSON.parse(localStorage.getItem(localStorageKey + 'favorites') || '[]');
|
|
95
104
|
setFavorites(loadedFavorites);
|
|
96
105
|
}, [localStorageKey]);
|
|
@@ -192,10 +201,12 @@ const MapListProvider = ({ children, siteConfig, googleMapsApiKey, resetFilters,
|
|
|
192
201
|
else if (!firstLoad) {
|
|
193
202
|
setStorageObject(localStorageKey + 'selectedFilters', tempSelectedFilters);
|
|
194
203
|
}
|
|
195
|
-
if (setFiltersUrl === true) {
|
|
204
|
+
if (setFiltersUrl === true && typeof window !== 'undefined') {
|
|
196
205
|
updateURLWithFilters(tempSelectedFilters, window.location, tempQuery, handleUrlUpdate);
|
|
197
206
|
}
|
|
198
|
-
|
|
207
|
+
if (typeof window !== 'undefined') {
|
|
208
|
+
tempQuery != null ? localStorage.setItem(localStorageKey + 'query', tempQuery) : localStorage.removeItem(localStorageKey + 'query');
|
|
209
|
+
}
|
|
199
210
|
if (tempSelectedFilters) {
|
|
200
211
|
const keys = Object.keys(tempSelectedFilters);
|
|
201
212
|
const lastKey = keys[keys.length - 1];
|
|
@@ -242,6 +253,8 @@ const MapListProvider = ({ children, siteConfig, googleMapsApiKey, resetFilters,
|
|
|
242
253
|
setSelectedFilters(newFilters);
|
|
243
254
|
};
|
|
244
255
|
const handleSettingFavorites = (newFavorites) => {
|
|
256
|
+
if (typeof window === 'undefined')
|
|
257
|
+
return;
|
|
245
258
|
if (newFavorites == null) {
|
|
246
259
|
localStorage.removeItem(localStorageKey + 'favorites');
|
|
247
260
|
}
|