From 631d232a0991753620fca8e640ecc232530d5b3e Mon Sep 17 00:00:00 2001 From: Mitchell McCaffrey Date: Sun, 14 Feb 2021 10:29:21 +1100 Subject: [PATCH] Fix import of tokens states --- src/modals/ImportExportModal.js | 39 ++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/src/modals/ImportExportModal.js b/src/modals/ImportExportModal.js index 1891895..b30fb72 100644 --- a/src/modals/ImportExportModal.js +++ b/src/modals/ImportExportModal.js @@ -48,6 +48,9 @@ function ImportExportModal({ isOpen, onRequestClose }) { setIsLoading(true); backgroundTaskRunningRef.current = true; try { + // Ensure import DB is cleared before importing new data + let importDB = getDatabase({}, importDBName); + importDB.delete(); await worker.importData( file, importDBName, @@ -115,13 +118,35 @@ function ImportExportModal({ isOpen, onRequestClose }) { const importDB = getDatabase({}, importDBName); const db = getDatabase({}); + // Keep track of a mapping of old token ids to new ones to apply them to the map states + let newTokenIds = {}; + if (checkedTokens.length > 0) { + const tokenIds = checkedTokens.map((token) => token.id); + const tokensToAdd = await importDB.table("tokens").bulkGet(tokenIds); + let newTokens = []; + for (let token of tokensToAdd) { + const newId = shortid.generate(); + newTokenIds[token.id] = newId; + // Generate new id and change owner + newTokens.push({ ...token, id: newId, owner: userId }); + } + await db.table("tokens").bulkAdd(newTokens); + } + if (checkedMaps.length > 0) { const mapIds = checkedMaps.map((map) => map.id); const mapsToAdd = await importDB.table("maps").bulkGet(mapIds); let newMaps = []; let newStates = []; for (let map of mapsToAdd) { - const state = await importDB.table("states").get(map.id); + let state = await importDB.table("states").get(map.id); + // Apply new token ids to imported state + for (let tokenState of Object.values(state.tokens)) { + if (tokenState.tokenId in newTokenIds) { + state.tokens[tokenState.id].tokenId = + newTokenIds[tokenState.tokenId]; + } + } const newId = shortid.generate(); // Generate new id and change owner newMaps.push({ ...map, id: newId, owner: userId }); @@ -130,18 +155,6 @@ function ImportExportModal({ isOpen, onRequestClose }) { await db.table("maps").bulkAdd(newMaps); await db.table("states").bulkAdd(newStates); } - if (checkedTokens.length > 0) { - const tokenIds = checkedTokens.map((token) => token.id); - const tokensToAdd = await importDB.table("tokens").bulkGet(tokenIds); - console.log(tokensToAdd); - let newTokens = []; - for (let token of tokensToAdd) { - const newId = shortid.generate(); - // Generate new id and change owner - newTokens.push({ ...token, id: newId, owner: userId }); - } - await db.table("tokens").bulkAdd(newTokens); - } await importDB.delete(); setIsLoading(false);