From ee34c599da5ed99debefb776447dffdf3ad5c876 Mon Sep 17 00:00:00 2001 From: Mitchell McCaffrey Date: Wed, 9 Jun 2021 09:29:32 +1000 Subject: [PATCH] Add remove group items for maps and tokens --- src/components/map/MapEditBar.js | 2 +- src/components/token/TokenEditBar.js | 2 +- src/contexts/MapDataContext.js | 6 ++++++ src/contexts/TokenDataContext.js | 6 ++++++ src/helpers/group.js | 28 ++++++++++++++++++++++++++++ 5 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/components/map/MapEditBar.js b/src/components/map/MapEditBar.js index 2e6046c..0b5bb10 100644 --- a/src/components/map/MapEditBar.js +++ b/src/components/map/MapEditBar.js @@ -62,8 +62,8 @@ function MapEditBar({ currentMap, disabled, onMapChange, onMapReset, onLoad }) { setIsMapsRemoveModalOpen(false); const selectedMaps = getSelectedMaps(); const selectedMapIds = selectedMaps.map((map) => map.id); - await removeMaps(selectedMapIds); onGroupSelect(); + await removeMaps(selectedMapIds); // Removed the map from the map screen if needed if (currentMap && selectedMapIds.includes(currentMap.id)) { onMapChange(null, null); diff --git a/src/components/token/TokenEditBar.js b/src/components/token/TokenEditBar.js index f3b85e0..a2cafe7 100644 --- a/src/components/token/TokenEditBar.js +++ b/src/components/token/TokenEditBar.js @@ -44,8 +44,8 @@ function TokenEditBar({ disabled, onLoad }) { setIsTokensRemoveModalOpen(false); const selectedTokens = getSelectedTokens(); const selectedTokenIds = selectedTokens.map((token) => token.id); - await removeTokens(selectedTokenIds); onGroupSelect(); + await removeTokens(selectedTokenIds); onLoad(false); } diff --git a/src/contexts/MapDataContext.js b/src/contexts/MapDataContext.js index c5d3418..b110b18 100644 --- a/src/contexts/MapDataContext.js +++ b/src/contexts/MapDataContext.js @@ -5,6 +5,7 @@ import { useAuth } from "./AuthContext"; import { useDatabase } from "./DatabaseContext"; import { applyObservableChange } from "../helpers/dexie"; +import { removeGroupsItems } from "../helpers/group"; const MapDataContext = React.createContext(); @@ -105,6 +106,11 @@ export function MapDataProvider({ children }) { } } } + + const group = await database.table("groups").get("maps"); + let items = removeGroupsItems(group.items, ids); + await database.table("groups").update("maps", { items }); + await database.table("maps").bulkDelete(ids); await database.table("states").bulkDelete(ids); await database.table("assets").bulkDelete(assetIds); diff --git a/src/contexts/TokenDataContext.js b/src/contexts/TokenDataContext.js index e299a55..9771c31 100644 --- a/src/contexts/TokenDataContext.js +++ b/src/contexts/TokenDataContext.js @@ -5,6 +5,7 @@ import { useAuth } from "./AuthContext"; import { useDatabase } from "./DatabaseContext"; import { applyObservableChange } from "../helpers/dexie"; +import { removeGroupsItems } from "../helpers/group"; const TokenDataContext = React.createContext(); @@ -73,6 +74,11 @@ export function TokenDataProvider({ children }) { assetIds.push(token.thumbnail); } } + + const group = await database.table("groups").get("tokens"); + let items = removeGroupsItems(group.items, ids); + await database.table("groups").update("tokens", { items }); + await database.table("tokens").bulkDelete(ids); await database.table("assets").bulkDelete(assetIds); }, diff --git a/src/helpers/group.js b/src/helpers/group.js index a23313e..ba62aa4 100644 --- a/src/helpers/group.js +++ b/src/helpers/group.js @@ -236,3 +236,31 @@ export function renameGroup(groups, groupId, newName) { } return newGroups; } + +/** + * Remove items from groups including sub groups + * @param {Group[]} groups + * @param {string[]} itemIds + */ +export function removeGroupsItems(groups, itemIds) { + let newGroups = cloneDeep(groups); + + for (let i = newGroups.length - 1; i >= 0; i--) { + const group = newGroups[i]; + if (group.type === "item") { + if (itemIds.includes(group.id)) { + newGroups.splice(i, 1); + } + } else { + const items = group.items; + for (let j = items.length - 1; j >= 0; j--) { + const item = items[j]; + if (itemIds.includes(item.id)) { + newGroups[i].items.splice(j, 1); + } + } + } + } + + return newGroups; +}