diff --git a/src/Components/AppShell/AppShell.tsx b/src/Components/AppShell/AppShell.tsx index 70622618..f7b65cb9 100644 --- a/src/Components/AppShell/AppShell.tsx +++ b/src/Components/AppShell/AppShell.tsx @@ -9,6 +9,10 @@ import { AssetsApi } from '../../types' import { QueryClient, QueryClientProvider } from '@tanstack/react-query' import { PermissionsProvider } from '../Map/hooks/usePermissions' import { TagsProvider } from '../Map/hooks/useTags' +import { FilterProvider } from '../Map/hooks/useFilter' +import { ItemsProvider } from '../Map/hooks/useItems' +import { LayersProvider } from '../Map/hooks/useLayers' +import { LeafletRefsProvider } from '../Map/hooks/useLeafletRefs' export function AppShell({ appName, nameWidth, children, assetsApi }: { appName: string, nameWidth?: number, children: React.ReactNode, assetsApi: AssetsApi }) { @@ -19,29 +23,37 @@ export function AppShell({ appName, nameWidth, children, assetsApi }: { appName: return ( - - - - - - - -
- {children} -
-
-
-
-
+ + + + + + + + + + + +
+ {children} +
+
+
+
+
+
+
+
+
diff --git a/src/Components/Map/Layer.tsx b/src/Components/Map/Layer.tsx index 4686c8ac..57fee0bb 100644 --- a/src/Components/Map/Layer.tsx +++ b/src/Components/Map/Layer.tsx @@ -95,7 +95,6 @@ export const Layer = ({ } else { if (window.location.pathname.split("/")[1] == name) { - if (window.location.pathname.split("/")[2]) { const id = window.location.pathname.split("/")[2] const marker = leafletRefs[id]?.marker; diff --git a/src/Components/Map/Tags.tsx b/src/Components/Map/Tags.tsx index 5c24e141..01277f34 100644 --- a/src/Components/Map/Tags.tsx +++ b/src/Components/Map/Tags.tsx @@ -3,7 +3,7 @@ import { useEffect } from 'react'; import { ItemsApi, Tag } from '../../types'; import { useSetTagData, useSetTagApi, useTags } from './hooks/useTags' import { useLocation } from 'react-router-dom'; -import { useAddFilterTag } from './hooks/useFilter'; +import { useAddFilterTag, useResetFilterTags } from './hooks/useFilter'; export function Tags({data, api} : {data?: Tag[], api?: ItemsApi}) { const setTagData = useSetTagData(); @@ -17,12 +17,14 @@ useEffect(() => { const location = useLocation(); const addFilterTag = useAddFilterTag(); +const resetFilterTags = useResetFilterTags(); const tags = useTags(); useEffect(() => { let params = new URLSearchParams(location.search); let urlTags = params.get("tags"); + resetFilterTags() urlTags?.split(",").map(urlTag => { const tag = tags.find(t => t.name.toLocaleLowerCase() === urlTag.toLocaleLowerCase()) tag && addFilterTag(tag) diff --git a/src/Components/Map/UtopiaMap.tsx b/src/Components/Map/UtopiaMap.tsx index 05279b8a..042fc7ed 100644 --- a/src/Components/Map/UtopiaMap.tsx +++ b/src/Components/Map/UtopiaMap.tsx @@ -8,11 +8,7 @@ import MarkerClusterGroup from 'react-leaflet-cluster' import AddButton from "./Subcomponents/AddButton"; import { useEffect, useState } from "react"; import { ItemFormPopupProps } from "./Subcomponents/ItemFormPopup"; -import { ItemsProvider } from "./hooks/useItems"; -import { LayersProvider } from "./hooks/useLayers"; -import { FilterProvider } from "./hooks/useFilter"; import { SearchControl } from "./Subcomponents/Controls/SearchControl"; -import { LeafletRefsProvider } from "./hooks/useLeafletRefs"; import { LayerControl } from "./Subcomponents/Controls/LayerControl"; import { QuestControl } from "./Subcomponents/Controls/QuestControl"; import { Control } from "./Subcomponents/Controls/Control"; @@ -42,7 +38,7 @@ function UtopiaMap({ useMapEvents({ click: (e) => { let params = new URLSearchParams(window.location.search); - window.history.pushState({}, "", `/`+ `${params.toString() !== "" ? `?${params}` : ""}`) + window.history.pushState({}, "", `/` + `${params.toString() !== "" ? `?${params}` : ""}`) document.title = document.title.split("-")[0]; document.querySelector('meta[property="og:title"]')?.setAttribute("content", document.title); document.querySelector('meta[property="og:description"]')?.setAttribute("content", `${document.querySelector('meta[name="description"]')?.getAttribute("content")}`); @@ -56,8 +52,8 @@ function UtopiaMap({ moveend: (e) => { console.log(e); } - - + + }) return null } @@ -79,51 +75,45 @@ function UtopiaMap({ return ( <> - - - - - -
- - - - - - - - - - - - - { - React.Children.toArray(children).map((child) => - React.isValidElement<{ setItemFormPopup: React.Dispatch>, itemFormPopup: ItemFormPopupProps | null, clusterRef: React.MutableRefObject }>(child) ? - React.cloneElement(child, { setItemFormPopup: setItemFormPopup, itemFormPopup: itemFormPopup, clusterRef: clusterRef }) : child - ) - } - - - - - {selectNewItemPosition != null && -
-
-
- Select {selectNewItemPosition.name} position! -
-
-
- } -
-
-
-
-
+ + +
+ + + + + + + + + + + + + { + React.Children.toArray(children).map((child) => + React.isValidElement<{ setItemFormPopup: React.Dispatch>, itemFormPopup: ItemFormPopupProps | null, clusterRef: React.MutableRefObject }>(child) ? + React.cloneElement(child, { setItemFormPopup: setItemFormPopup, itemFormPopup: itemFormPopup, clusterRef: clusterRef }) : child + ) + } + + + + + {selectNewItemPosition != null && +
+
+
+ Select {selectNewItemPosition.name} position! +
+
+
+ } +
+ ); } diff --git a/src/Components/Profile/ActionsButton.tsx b/src/Components/Profile/ActionsButton.tsx index 6bfc19b1..59975b6c 100644 --- a/src/Components/Profile/ActionsButton.tsx +++ b/src/Components/Profile/ActionsButton.tsx @@ -6,11 +6,11 @@ import { TextView } from "../Map"; import { HeaderView } from "../Map/Subcomponents/ItemPopupComponents/HeaderView"; import { Item } from "../../types"; -export function ActionButton({ item, triggerAddButton, triggerItemSelected, existingRelations, itemType, color="#3D3846", collection = "items" }: { +export function ActionButton({ item, triggerAddButton, triggerItemSelected, existingRelations, itemType, color = "#3D3846", collection = "items" }: { triggerAddButton: any, triggerItemSelected: any, existingRelations: Item[], - itemType:string; + itemType: string; color: string, collection?: string, item: Item @@ -20,15 +20,15 @@ export function ActionButton({ item, triggerAddButton, triggerItemSelected, exis const items = useItems(); - const filterdItems = items.filter(i => i.type == itemType).filter(i => !existingRelations.some(s => s.id == i.id)).filter(i => i.id != item.id) - + const filterdItems = items.filter(i => i.type == itemType).filter(i => !existingRelations.some(s => s.id == i.id)).filter(i => i.id != item.id) + return ( - <>{hasUserPermission(collection, "create") && + <>{hasUserPermission(collection, "update", item) && <>
(setModalOpen(false))}> - {filterdItems.map(i =>
{triggerItemSelected(i.id);setModalOpen(false)}}> - -
)} +
+ {filterdItems.map(i =>
{ triggerItemSelected(i.id); setModalOpen(false) }}> + +
)} +
} diff --git a/src/Components/Profile/LinkedItemsHeaderView.tsx b/src/Components/Profile/LinkedItemsHeaderView.tsx index 42943eb5..eb73ece4 100644 --- a/src/Components/Profile/LinkedItemsHeaderView.tsx +++ b/src/Components/Profile/LinkedItemsHeaderView.tsx @@ -23,7 +23,7 @@ export function LinkedItemsHeaderView({ item, unlinkCallback, itemNameField, ite - + const hasUserPermission = useHasUserPermission(); return ( <> @@ -42,7 +42,7 @@ export function LinkedItemsHeaderView({ item, unlinkCallback, itemNameField, ite
e.stopPropagation()}> - { + { hasUserPermission("items", "update", item) &&