From 3aee46df2809186fd5184037cbdf8d0ad1470d1b Mon Sep 17 00:00:00 2001 From: digua Date: Sun, 9 Aug 2026 00:54:43 +0800 Subject: [PATCH] fix(analysis): preserve galaxy canvas during refresh --- .../GroupRelationshipGalaxyView.vue | 37 ++++++++++++++++--- .../group-relationship-galaxy-view.test.ts | 29 ++++++++++++++- .../group-relationship-galaxy-view.ts | 18 +++++++++ 3 files changed, 77 insertions(+), 7 deletions(-) diff --git a/src/components/analysis/relationship/GroupRelationshipGalaxyView.vue b/src/components/analysis/relationship/GroupRelationshipGalaxyView.vue index 4adf601a..227a09df 100644 --- a/src/components/analysis/relationship/GroupRelationshipGalaxyView.vue +++ b/src/components/analysis/relationship/GroupRelationshipGalaxyView.vue @@ -13,7 +13,10 @@ import LazyAvatar from '@/components/common/avatar/LazyAvatar.vue' import RelationshipGalaxyThreeCanvas from '@/components/charts/relationship-galaxy/RelationshipGalaxyThreeCanvas.vue' import { useDataService } from '@/services' import { reportError } from '@/services/log-report' -import { buildGroupRelationshipGalaxyConnections } from './group-relationship-galaxy-view' +import { + buildGroupRelationshipGalaxyConnections, + resolveGroupRelationshipGalaxyDisplayState, +} from './group-relationship-galaxy-view' type GalaxyCanvasInstance = { focusNode: (key: string) => boolean @@ -43,6 +46,14 @@ const selectedMember = computed(() => { }) const connections = computed(() => buildGroupRelationshipGalaxyConnections(galaxyData.value, selectedKey.value)) const hasGraph = computed(() => (galaxyData.value?.graph.nodes.length ?? 0) > 0) +const displayState = computed(() => + resolveGroupRelationshipGalaxyDisplayState({ + isLoading: isLoading.value, + hasGraph: hasGraph.value, + hasError: Boolean(loadError.value), + webglUnavailable: webglUnavailable.value, + }) +) const safeInsetRight = computed(() => (selectedMember.value && isWideLayout.value ? 392 : 0)) const numberFormatter = computed( () => new Intl.NumberFormat(locale.value, { maximumFractionDigits: 1, notation: 'compact' }) @@ -143,9 +154,13 @@ onBeforeUnmount(() => {