From 67356255b9c3c45638b872b0962b972e5e864f15 Mon Sep 17 00:00:00 2001 From: Mitchell McCaffrey Date: Sat, 27 Jun 2020 11:18:47 +1000 Subject: [PATCH] Added map settings change cache to improve editing performance --- src/components/map/MapTiles.js | 31 +++++++++-------- src/components/map/SelectMapButton.js | 6 +--- src/modals/SelectMapModal.js | 50 +++++++++++++++++++++------ 3 files changed, 57 insertions(+), 30 deletions(-) diff --git a/src/components/map/MapTiles.js b/src/components/map/MapTiles.js index bae2a30..88d7961 100644 --- a/src/components/map/MapTiles.js +++ b/src/components/map/MapTiles.js @@ -58,20 +58,23 @@ function MapTiles({ > - {maps.map((map) => ( - - ))} + {maps.map((map) => { + const isSelected = selectedMap && map.id === selectedMap.id; + return ( + + ); + })} {databaseStatus === "disabled" && ( diff --git a/src/components/map/SelectMapButton.js b/src/components/map/SelectMapButton.js index fb8c81f..799a1dd 100644 --- a/src/components/map/SelectMapButton.js +++ b/src/components/map/SelectMapButton.js @@ -19,12 +19,9 @@ function SelectMapButton({ currentMapState && updateMapState(currentMapState.mapId, currentMapState); setIsModalOpen(true); } - function closeModal() { - setIsModalOpen(false); - } function handleDone() { - closeModal(); + setIsModalOpen(false); } return ( @@ -38,7 +35,6 @@ function SelectMapButton({ ({ ...prevChanges, [key]: value })); } async function handleMapStateSettingsChange(key, value) { - await updateMapState(selectedMapId, { [key]: value }); + setMapStateSettingChanges((prevChanges) => ({ + ...prevChanges, + [key]: value, + })); } + async function applyMapChanges() { + if ( + selectedMapId && + (!isEmpty(mapSettingChanges) || !isEmpty(mapStateSettingChanges)) + ) { + await updateMap(selectedMapId, mapSettingChanges); + await updateMapState(selectedMapId, mapStateSettingChanges); + + setMapSettingChanges({}); + setMapStateSettingChanges({}); + } + } + + const selectedMapWithChanges = { ...selectedMap, ...mapSettingChanges }; + const selectedMapStateWithChanges = { + ...selectedMapState, + ...mapStateSettingChanges, + }; + return ( - + handleImagesUpload(event.target.files)} @@ -203,15 +231,15 @@ function SelectMapModal({ maps={ownedMaps} onMapAdd={openImageDialog} onMapRemove={handleMapRemove} - selectedMap={selectedMap} - selectedMapState={selectedMapState} + selectedMap={selectedMapWithChanges} + selectedMapState={selectedMapStateWithChanges} onMapSelect={handleMapSelect} onMapReset={handleMapReset} onDone={handleDone} />