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; +}