diff --git a/src/Components/Input/TextAreaInput.tsx b/src/Components/Input/TextAreaInput.tsx index 9b6520af..8f72ff4c 100644 --- a/src/Components/Input/TextAreaInput.tsx +++ b/src/Components/Input/TextAreaInput.tsx @@ -32,7 +32,7 @@ export function TextAreaInput({ labelTitle, dataField, labelStyle, containerStyl let values: KeyValue[] = []; tags.map(tag => { - values.push({ key: tag.id, value: tag.id, color: tag.color }) + values.push({ key: tag.name, value: tag.name, color: tag.color }) }) var tribute = new Tribute({ diff --git a/src/Components/Map/Layer.tsx b/src/Components/Map/Layer.tsx index b091c5ff..4775a752 100644 --- a/src/Components/Map/Layer.tsx +++ b/src/Components/Map/Layer.tsx @@ -122,7 +122,7 @@ export const Layer = ({ addTag(newtag); setNewTagsToAdd(current => current.filter(tag => { - return tag.id !== newtag.id; + return tag.name !== newtag.name; }), ) }) @@ -135,7 +135,7 @@ export const Layer = ({ items. filter(item => item.layer?.name === name)?. filter(item => - filterTags.length == 0 ? item : filterTags.every(tag => getItemTags(item).some(filterTag => filterTag.id.toLocaleLowerCase() === tag.id.toLocaleLowerCase())))?. + filterTags.length == 0 ? item : filterTags.every(tag => getItemTags(item).some(filterTag => filterTag.name.toLocaleLowerCase() === tag.name.toLocaleLowerCase())))?. filter(item => item.layer && isLayerVisible(item.layer)). map((item: Item) => { if (getValue(item, itemLongitudeField) && getValue(item, itemLatitudeField)) { @@ -152,8 +152,8 @@ export const Layer = ({ } if(allTagsLoaded) { item[itemTextField].toLocaleLowerCase().match(hashTagRegex)?.map(tag=> { - if ((!tags.find((t) => t.id.toLocaleLowerCase() === tag.slice(1).toLocaleLowerCase()))&& !newTagsToAdd.find((t) => t.id.toLocaleLowerCase() === tag.slice(1).toLocaleLowerCase())) { - const newTag = {id: tag.slice(1).toLocaleLowerCase(), color: randomColor()}; + if ((!tags.find((t) => t.name.toLocaleLowerCase() === tag.slice(1).toLocaleLowerCase()))&& !newTagsToAdd.find((t) => t.name.toLocaleLowerCase() === tag.slice(1).toLocaleLowerCase())) { + const newTag = {id: crypto.randomUUID(), name: tag.slice(1).toLocaleLowerCase(), color: randomColor()}; setNewTagsToAdd(current => [...current, newTag]); } }); diff --git a/src/Components/Map/Subcomponents/Controls/SearchControl.tsx b/src/Components/Map/Subcomponents/Controls/SearchControl.tsx index b454b59f..98d4213e 100644 --- a/src/Components/Map/Subcomponents/Controls/SearchControl.tsx +++ b/src/Components/Map/Subcomponents/Controls/SearchControl.tsx @@ -61,7 +61,7 @@ export const SearchControl = ({ clusterRef }) => { if (item.layer?.itemTextField) item.text = getValue(item, item.layer.itemTextField) return item.name?.toLowerCase().includes(value.toLowerCase()) || item.text?.toLowerCase().includes(value.toLowerCase()) })) - setTagsResults(tags.filter(tag => tag.id?.toLowerCase().includes(value.toLowerCase()))) + setTagsResults(tags.filter(tag => tag.name?.toLowerCase().includes(value.toLowerCase()))) }, 500, [value]); @@ -93,11 +93,11 @@ export const SearchControl = ({ clusterRef }) => { {tagsResults.length > 0 &&
{tagsResults.map(tag => ( -
{ +
{ addFilterTag(tag) window.history.pushState({}, "", `/`) }}> - #{capitalizeFirstLetter(tag.id)} + #{capitalizeFirstLetter(tag.name)}
))}
diff --git a/src/Components/Map/Subcomponents/Controls/TagsControl.tsx b/src/Components/Map/Subcomponents/Controls/TagsControl.tsx index c3d8cc0f..5f51d35a 100644 --- a/src/Components/Map/Subcomponents/Controls/TagsControl.tsx +++ b/src/Components/Map/Subcomponents/Controls/TagsControl.tsx @@ -13,7 +13,7 @@ export const TagsControl = () => {
-
#{capitalizeFirstLetter(tag.id)} +
#{capitalizeFirstLetter(tag.name)}
) } diff --git a/src/Components/Map/Subcomponents/ItemFormPopup.tsx b/src/Components/Map/Subcomponents/ItemFormPopup.tsx index 459bb155..78abc2c6 100644 --- a/src/Components/Map/Subcomponents/ItemFormPopup.tsx +++ b/src/Components/Map/Subcomponents/ItemFormPopup.tsx @@ -57,8 +57,8 @@ export function ItemFormPopup(props: ItemFormPopupProps) { setSpinner(true); formItem.text && formItem.text.toLocaleLowerCase().match(hashTagRegex)?.map(tag=> { - if (!tags.find((t) => t.id.toLocaleLowerCase() === tag.slice(1).toLocaleLowerCase())) { - addTag({id: tag.slice(1).toLocaleLowerCase(), color: randomColor()}) + if (!tags.find((t) => t.name.toLocaleLowerCase() === tag.slice(1).toLocaleLowerCase())) { + addTag({id: crypto.randomUUID(), name: tag.slice(1).toLocaleLowerCase(), color: randomColor()}) } }); diff --git a/src/Components/Map/Subcomponents/ItemPopupComponents/TextView.tsx b/src/Components/Map/Subcomponents/ItemPopupComponents/TextView.tsx index 308aebb3..fa484269 100644 --- a/src/Components/Map/Subcomponents/ItemPopupComponents/TextView.tsx +++ b/src/Components/Map/Subcomponents/ItemPopupComponents/TextView.tsx @@ -92,7 +92,7 @@ export const TextView = ({ item, truncate = false}: { item?: Item, truncate?: bo return ( { e.stopPropagation(); addFilterTag(tag!); @@ -123,7 +123,7 @@ export const TextView = ({ item, truncate = false}: { item?: Item, truncate?: bo ); } if (href?.startsWith("#")) { - const tag = tags.find(t => t.id.toLowerCase() == decodeURI(href).slice(1).toLowerCase()) + const tag = tags.find(t => t.name.toLowerCase() == decodeURI(href).slice(1).toLowerCase()) return {children}; } else { return ( diff --git a/src/Components/Map/hooks/useTags.tsx b/src/Components/Map/hooks/useTags.tsx index 78b10d49..f9c607c8 100644 --- a/src/Components/Map/hooks/useTags.tsx +++ b/src/Components/Map/hooks/useTags.tsx @@ -13,7 +13,6 @@ type UseTagManagerResult = ReturnType; const TagContext = createContext({ tags: [], addTag: () => { }, - removeTag: () => { }, setTagApi: () => { }, setTagData: () => { }, getItemTags: () => [], @@ -23,7 +22,6 @@ const TagContext = createContext({ function useTagsManager(initialTags: Tag[]): { tags: Tag[]; addTag: (tag: Tag) => void; - removeTag: (id: string) => void; setTagApi: (api: ItemsApi) => void; setTagData: (data: Tag[]) => void; getItemTags: (item: Item) => Tag[]; @@ -36,16 +34,13 @@ function useTagsManager(initialTags: Tag[]): { switch (action.type) { case "ADD": const exist = state.find((tag) => - tag.id.toLocaleLowerCase() === action.tag.id.toLocaleLowerCase() ? true : false + tag.id === action.tag.id ? true : false ); if (!exist) return [ ...state, - { ...action.tag, id: action.tag.id.toLocaleLowerCase() } + { ...action.tag} ]; else return state; - - case "REMOVE": - return state.filter(({ id }) => id !== action.id.toLocaleLowerCase()); default: throw new Error(); } @@ -58,7 +53,7 @@ function useTagsManager(initialTags: Tag[]): { const result = await api.getItems(); if (result) { result.map(tag => { - tag.id = tag.id.toLocaleLowerCase(); + tag.name = tag.name.toLocaleLowerCase(); dispatch({ type: "ADD", tag }) }) setallTagsLoaded(true); @@ -67,7 +62,7 @@ function useTagsManager(initialTags: Tag[]): { const setTagData = useCallback((data: Tag[]) => { data.map(tag => { - tag.id = tag.id.toLocaleLowerCase(); + tag.name = tag.name.toLocaleLowerCase(); dispatch({ type: "ADD", tag }) }) }, []); @@ -77,33 +72,26 @@ function useTagsManager(initialTags: Tag[]): { type: "ADD", tag, }); - if (!tags.some((t) => t.id.toLocaleLowerCase() === tag.id.toLocaleLowerCase())) { + if (!tags.some((t) => t.name.toLocaleLowerCase() === tag.name.toLocaleLowerCase())) { api?.createItem && api.createItem(tag); } }; - const removeTag = useCallback((id: string) => { - dispatch({ - type: "REMOVE", - id, - }); - api?.deleteItem && api.deleteItem(id); - }, []); const getItemTags = useCallback((item: Item) => { const text = item?.layer?.itemTextField && item ? getValue(item, item.layer?.itemTextField) : undefined; const itemTagStrings = text?.toLocaleLowerCase().match(hashTagRegex); const itemTags: Tag[] = []; itemTagStrings?.map(tag => { - if (tags.find(t => t.id === tag.slice(1))) { - itemTags.push(tags.find(t => t.id === tag.slice(1))!) + if (tags.find(t => t.name === tag.slice(1))) { + itemTags.push(tags.find(t => t.name === tag.slice(1))!) } }) return itemTags }, [tags]); - return { tags, addTag, removeTag, setTagApi, setTagData, getItemTags, allTagsLoaded }; + return { tags, addTag, setTagApi, setTagData, getItemTags, allTagsLoaded }; } export const TagsProvider: React.FunctionComponent<{ @@ -124,11 +112,6 @@ export const useAddTag = (): UseTagManagerResult["addTag"] => { return addTag; }; -export const useRemoveTag = (): UseTagManagerResult["removeTag"] => { - const { removeTag } = useContext(TagContext); - return removeTag; -}; - export const useSetTagApi = (): UseTagManagerResult["setTagApi"] => { const { setTagApi } = useContext(TagContext); return setTagApi; diff --git a/src/types.ts b/src/types.ts index 770e8ede..309fa6e9 100644 --- a/src/types.ts +++ b/src/types.ts @@ -70,6 +70,7 @@ export class Geometry { export interface Tag { color: string; id: string; + name: string; } export interface ItemsApi {