feature: remember node positions after refreshing pages

This commit is contained in:
Cindy Chang
2024-07-01 10:39:53 +08:00
parent 69a3f27cb2
commit 24ccdd47ae
5 changed files with 60 additions and 40 deletions

View File

@@ -5,6 +5,8 @@ import 'tippy.js/dist/tippy.css';
import Gradient from 'javascript-color-gradient'; // 多個色階產生器
import { getTimeLabel } from '@/module/timeLabel.js'; // 時間格式轉換器
import CytoscapeStore from '@/stores/cytoscapeStore';
import { SAVE_KEY_NAME } from '@/constants/constants.js';
cytoscape.use( dagre );
@@ -227,19 +229,29 @@ export default function cytoscapeMap(mapData, dataLayerType, dataLayerOption, cu
const cytoscapeStore = CytoscapeStore();
cy.ready(() => {
cytoscapeStore.nodePositions.forEach(pos => {
const node = cy.getElementById(pos.id);
if (node) {
node.position(pos.position);
}
cytoscapeStore.loadPositionsFromStorage();
// 判斷localStorage是否儲存過拜訪資訊
// 若曾經儲存過拜訪後的座標位置則restore位置來渲染出來
if(localStorage.getItem(SAVE_KEY_NAME) && JSON.parse(localStorage.getItem(SAVE_KEY_NAME))) {
const allGraphsRemembered = JSON.parse(localStorage.getItem(SAVE_KEY_NAME));
const currentGraphNodesRemembered = allGraphsRemembered[cytoscapeStore.currentGraphId];
currentGraphNodesRemembered.forEach(nodeRemembered => {
const nodeToDecide = cy.getElementById(nodeRemembered.id);
if (nodeToDecide) {
nodeToDecide.position(nodeRemembered.position);
}
});
}
//存下此刻剛進入畫面時當前所有節點的座標位置
const allNodes = cy.nodes();
allNodes.map(nodeFirstlySave => {
cytoscapeStore.saveNodePosition(nodeFirstlySave.id(), nodeFirstlySave.position);
});
// 在改變節點位置後,盡可能地記錄節點線條的位置情報
cy.on('dragfree', 'node', (event) => {
const node = event.target;
const position = node.position();
cytoscapeStore.saveNodePosition(node.id(), position);
cytoscapeStore.savePositionsToStorage();
const nodeToSave = event.target;
cytoscapeStore.saveNodePosition(nodeToSave.id(), nodeToSave.position());
});
});