mirror of
https://github.com/nasa/openmct.git
synced 2024-12-19 05:07:52 +00:00
rework local storage mechanisms
* use one navigated local storage item instead one per node * use one expanded local storage item instead of one per node * fix navigated * collapse children when node collapsed
This commit is contained in:
parent
fa21911287
commit
0fd0da8331
@ -40,11 +40,8 @@
|
||||
import viewControl from '../components/viewControl.vue';
|
||||
import ObjectLabel from '../components/ObjectLabel.vue';
|
||||
|
||||
const LOCAL_STORAGE__TREE_STATE_ID = 'mct-tree--';
|
||||
|
||||
function makeLocalStorageStateKey(id) {
|
||||
return `${LOCAL_STORAGE__TREE_STATE_ID}${id}`;
|
||||
}
|
||||
const LOCAL_STORAGE_KEY__TREE_NAVIGATED = 'mct-tree-navigated';
|
||||
const LOCAL_STORAGE_KEY__TREE_EXPANDED = 'mct-tree-expanded';
|
||||
|
||||
export default {
|
||||
name: 'TreeItem',
|
||||
@ -92,15 +89,9 @@ export default {
|
||||
this.composition.load().then(this.finishLoading);
|
||||
this.isLoading = true;
|
||||
}
|
||||
this.setLocalStorageState();
|
||||
},
|
||||
navigated() {
|
||||
this.setLocalStorageState();
|
||||
this.setLocalStorageExpanded(this.navigateToPath);
|
||||
}
|
||||
},
|
||||
beforeMount() {
|
||||
this.initLocalStorageState();
|
||||
},
|
||||
mounted() {
|
||||
// TODO: should update on mutation.
|
||||
// TODO: click navigation should not fubar hash quite so much.
|
||||
@ -120,7 +111,18 @@ export default {
|
||||
}
|
||||
|
||||
this.openmct.router.on('change:path', this.highlightIfNavigated);
|
||||
this.getLocalStorageState();
|
||||
|
||||
this.getLocalStorageExpanded();
|
||||
this.getLocalStorageNavigated();
|
||||
},
|
||||
beforeDestroy() {
|
||||
/****
|
||||
* calling this.setLocalStorageExpanded explicitly here because for whatever reason,
|
||||
* the watcher on this.expanded is not triggering this.setLocalStorageExpanded(),
|
||||
* even though Vue documentation states, "At this stage the instance is still fully functional."
|
||||
*****/
|
||||
this.expanded = false;
|
||||
this.setLocalStorageExpanded();
|
||||
},
|
||||
destroyed() {
|
||||
this.openmct.router.off('change:path', this.highlightIfNavigated);
|
||||
@ -143,7 +145,6 @@ export default {
|
||||
let removeId = this.openmct.objects.makeKeyString(identifier);
|
||||
this.children = this.children
|
||||
.filter(c => c.id !== removeId);
|
||||
this.removeLocalStorageState(makeLocalStorageStateKey(removeId));
|
||||
},
|
||||
finishLoading() {
|
||||
this.isLoading = false;
|
||||
@ -158,41 +159,43 @@ export default {
|
||||
} else if (oldPath === this.navigateToPath) {
|
||||
this.navigated = false;
|
||||
}
|
||||
this.setLocalStorageNavigated(newPath);
|
||||
},
|
||||
initLocalStorageState() {
|
||||
this.key = makeLocalStorageStateKey(this.openmct.objects.makeKeyString(this.node.object.identifier))
|
||||
this.state = {
|
||||
expanded: [],
|
||||
navigated: ''
|
||||
};
|
||||
getLocalStorageNavigated() {
|
||||
const navigated = localStorage.getItem(LOCAL_STORAGE_KEY__TREE_NAVIGATED);
|
||||
this.navigated = navigated && JSON.parse(navigated) === this.navigateToPath;
|
||||
},
|
||||
getLocalStorageState() {
|
||||
const state = localStorage.getItem(this.key);
|
||||
setLocalStorageNavigated(path) {
|
||||
localStorage.setItem(LOCAL_STORAGE_KEY__TREE_NAVIGATED, JSON.stringify(path));
|
||||
},
|
||||
getLocalStorageExpanded() {
|
||||
let expandedPaths = localStorage.getItem(LOCAL_STORAGE_KEY__TREE_EXPANDED);
|
||||
|
||||
if (state) {
|
||||
this.state = JSON.parse(state);
|
||||
console.log(this.state.navigated)
|
||||
console.log(this.navigateToPath)
|
||||
this.expanded = this.state.expanded.includes(this.navigateToPath);
|
||||
this.navigated = this.state.navigated === this.navigateToPath;
|
||||
} else {
|
||||
this.setLocalStorageState();
|
||||
if (expandedPaths) {
|
||||
expandedPaths = JSON.parse(expandedPaths);
|
||||
this.expanded = expandedPaths.includes(this.navigateToPath);
|
||||
}
|
||||
},
|
||||
setLocalStorageState() {
|
||||
this.state.expanded = this.expanded
|
||||
? [...new Set([this.navigateToPath, ...this.state.expanded])]
|
||||
: this.state.expanded.filter(path => path !== this.navigateToPath);
|
||||
this.state.navigated = this.navigated ? this.navigateToPath : '';
|
||||
setLocalStorageExpanded() {
|
||||
let expandedPaths = localStorage.getItem(LOCAL_STORAGE_KEY__TREE_EXPANDED);
|
||||
expandedPaths = expandedPaths ? JSON.parse(expandedPaths) : [];
|
||||
|
||||
if ((this.state.expanded && this.state.expanded.length) || this.state.navigated) {
|
||||
localStorage.setItem(this.key, JSON.stringify(this.state));
|
||||
if (this.expanded) {
|
||||
if (!expandedPaths.includes(this.navigateToPath)) {
|
||||
expandedPaths.push(this.navigateToPath);
|
||||
}
|
||||
} else {
|
||||
this.removeLocalStorageState(this.key);
|
||||
// remove this node path and all children paths from stored expanded paths
|
||||
expandedPaths = expandedPaths.filter(path => !path.startsWith(this.navigateToPath));
|
||||
}
|
||||
|
||||
localStorage.setItem(LOCAL_STORAGE_KEY__TREE_EXPANDED, JSON.stringify(expandedPaths));
|
||||
},
|
||||
removeLocalStorageState(key) {
|
||||
localStorage.removeItem(key);
|
||||
removeLocalStorageExpanded() {
|
||||
let expandedPaths = localStorage.getItem(LOCAL_STORAGE_KEY__TREE_EXPANDED);
|
||||
expandedPaths = expandedPaths ? JSON.parse(expandedPaths) : [];
|
||||
expandedPaths = expandedPaths.filter(path => !path.startsWith(this.navigateToPath));
|
||||
localStorage.setItem(LOCAL_STORAGE_KEY__TREE_EXPANDED, JSON.stringify(expandedPaths));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user