From e229b272cafa08721b60f00aad43c41d661933b0 Mon Sep 17 00:00:00 2001 From: Anton Tranelis Date: Tue, 30 Jul 2024 21:26:29 +0200 Subject: [PATCH] changed tag url seperator to semikolon to avoid conflicts with tags that contain commas --- src/Components/Map/Tags.tsx | 8 +++++--- src/Components/Map/hooks/useFilter.tsx | 17 +++++++++-------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/Components/Map/Tags.tsx b/src/Components/Map/Tags.tsx index 2ef90b3e..b1552f46 100644 --- a/src/Components/Map/Tags.tsx +++ b/src/Components/Map/Tags.tsx @@ -24,10 +24,12 @@ const filterTags = useFilterTags() useEffect(() => { let params = new URLSearchParams(location.search); - let urlTags = params.get("tags")?.split(","); - if(urlTags?.some(ut => !filterTags.find(ft => ut.toLocaleLowerCase() === ft.name.toLocaleLowerCase()))||filterTags?.some(ft => !urlTags?.find(ut => ut.toLocaleLowerCase() === ft.name.toLocaleLowerCase()))) + let urlTags = params.get("tags") + let decodedTags = urlTags ? decodeURIComponent(urlTags) : ""; + let decodedTagsArray = decodedTags.split(";"); + if(decodedTagsArray?.some(ut => !filterTags.find(ft => ut.toLocaleLowerCase() === ft.name.toLocaleLowerCase()))||filterTags?.some(ft => !decodedTagsArray?.find(ut => ut.toLocaleLowerCase() === ft.name.toLocaleLowerCase()))) {resetFilterTags() - urlTags?.map(urlTag => { + decodedTagsArray?.map(urlTag => { const tag = tags.find(t => t.name.toLocaleLowerCase() === urlTag.toLocaleLowerCase()) tag && addFilterTag(tag) });} diff --git a/src/Components/Map/hooks/useFilter.tsx b/src/Components/Map/hooks/useFilter.tsx index cd948ce0..965c1efd 100644 --- a/src/Components/Map/hooks/useFilter.tsx +++ b/src/Components/Map/hooks/useFilter.tsx @@ -127,12 +127,13 @@ function useFilterManager(initialTags: Tag[]): { const [searchPhrase, searchPhraseSet] = React.useState(""); - const addFilterTag = (tag: Tag) => { - - let params = new URLSearchParams(window.location.search); - let urlTags = params.get("tags"); - if(!urlTags?.includes(tag.name)) - params.set("tags", `${urlTags ? urlTags : ""}${urlTags? ',' : ''}${tag.name}`) + const addFilterTag = useCallback((tag: Tag) => { + let params = new URLSearchParams(location.search); + let urlTags = params.get("tags") + let decodedTags = urlTags ? decodeURIComponent(urlTags) : ""; + + if(!decodedTags?.includes(tag.name)) + params.set("tags", `${urlTags ? urlTags : ""}${urlTags? ';' : ''}${tag.name}`) if(windowDimensions.width < 786 && location.pathname.split("/").length > 2) navigate("/" + `${params ? `?${params}` : ""}`); else navigate(location.pathname + `${params ? `?${params}` : ""}`); @@ -144,14 +145,14 @@ function useFilterManager(initialTags: Tag[]): { tag, }); - }; + }, []); const removeFilterTag = useCallback((name: string) => { let params = new URLSearchParams(window.location.search); let urlTags = params.get("tags"); let newUrlTags = ""; - let tags = urlTags?.split(","); + let tags = urlTags?.split(";"); if(tags?.length==0 && urlTags?.length && urlTags?.length > 0) tags[0]=urlTags; tags?.map(urlTag => { if(!(urlTag.toLocaleLowerCase() === name.toLocaleLowerCase()))