diff --git a/src/Components/Map/Subcomponents/Controls/SearchControl.tsx b/src/Components/Map/Subcomponents/Controls/SearchControl.tsx index 9ee2c2cb..93a8ed5f 100644 --- a/src/Components/Map/Subcomponents/Controls/SearchControl.tsx +++ b/src/Components/Map/Subcomponents/Controls/SearchControl.tsx @@ -1,5 +1,5 @@ import * as React from 'react' -import { useAddFilterTag, useSetSearchPhrase } from '../../hooks/useFilter' +import { useAddFilterTag, useFilterTags, useResetFilterTags, useSetSearchPhrase } from '../../hooks/useFilter' import useWindowDimensions from '../../hooks/useWindowDimension'; import axios from 'axios'; import { useRef, useState } from 'react'; @@ -9,6 +9,7 @@ import { useDebounce } from '../../hooks/useDebounce'; import { useTags } from '../../hooks/useTags'; import { useItems } from '../../hooks/useItems'; import { useLeafletRefs } from '../../hooks/useLeafletRefs'; +import { getValue } from '../../../../Utils/GetValue'; @@ -26,6 +27,8 @@ export const SearchControl = ({ clusterRef }) => { const items = useItems(); const leafletRefs = useLeafletRefs(); const addFilterTag = useAddFilterTag(); + const resetFilterTags = useResetFilterTags(); + const filterTags = useFilterTags(); useDebounce(() => { const searchGeo = async () => { @@ -40,7 +43,10 @@ export const SearchControl = ({ clusterRef }) => { } }; searchGeo(); - setItemsResults(items.filter(item => item.name?.toLowerCase().includes(value.toLowerCase()) || item.text?.toLowerCase().includes(value.toLowerCase()))) + setItemsResults(items.filter(item => { + if (item.layer?.itemTitleField) item.name = getValue(item, item.layer.itemTitleField) + return item.name?.toLowerCase().includes(value.toLowerCase()) || item.text?.toLowerCase().includes(value.toLowerCase()) + })) setTagsResults(tags.filter(tag => tag.id?.toLowerCase().includes(value.toLowerCase()))) @@ -52,7 +58,7 @@ export const SearchControl = ({ clusterRef }) => { return (<> {!(windowDimensions.height < 500) &&
- setValue(e.target.value)} onFocus={() => setHideSuggestions(false)} @@ -61,7 +67,7 @@ export const SearchControl = ({ clusterRef }) => { setHideSuggestions(true); }, 200); }} /> - {hideSuggestions || Array.from(geoResults).length == 0 && itemsResults.length == 0 && tagsResults.length == 0 || value.length==0 ? "" : + {hideSuggestions || Array.from(geoResults).length == 0 && itemsResults.length == 0 && tagsResults.length == 0 || value.length == 0 ? "" :
{tagsResults.length > 0 &&
@@ -79,15 +85,22 @@ export const SearchControl = ({ clusterRef }) => { {itemsResults.slice(0, 10).map(item => (
{ const marker = Object.entries(leafletRefs).find(r => r[1].item == item)?.[1].marker; - marker !== null && clusterRef?.current?.zoomToShowLayer(marker, () => { - marker?.openPopup(); - }); + + if (filterTags.length > 0) { + marker !== null && window.history.pushState({}, "", `/${item.layer.name}/${item.id}`) + resetFilterTags(); + } + else { + marker !== null && clusterRef?.current?.zoomToShowLayer(marker, () => { + marker?.openPopup(); + }); + } } }>{item.name}
))} {Array.from(geoResults).length > 0 && (itemsResults.length > 0 || tagsResults.length > 0) &&
} {Array.from(geoResults).map((geo) => ( -
{ searchInput.current?.blur(); if (geo.properties.extent) map.fitBounds(new LatLngBounds(new LatLng(geo.properties.extent[1], geo.properties.extent[0]), new LatLng(geo.properties.extent[3], geo.properties.extent[2])));