From dd30e17ff566149d9a18eefcdea960ed35fe655d Mon Sep 17 00:00:00 2001 From: lana-k Date: Sun, 25 Jan 2026 22:15:48 +0100 Subject: [PATCH] #133 Add node data viewer --- src/components/Common/Splitpanes/index.vue | 17 +- src/components/DataView.vue | 16 +- src/components/Graph/index.vue | 48 ++++-- src/components/RunResult/index.vue | 148 +++++++----------- src/components/Tab.vue | 1 - .../{RunResult => }/ValueViewer.vue | 108 ++++++++----- 6 files changed, 180 insertions(+), 158 deletions(-) rename src/components/{RunResult => }/ValueViewer.vue (67%) diff --git a/src/components/Common/Splitpanes/index.vue b/src/components/Common/Splitpanes/index.vue index 5f5f53b..14e0c94 100644 --- a/src/components/Common/Splitpanes/index.vue +++ b/src/components/Common/Splitpanes/index.vue @@ -13,16 +13,16 @@ :style="movableSplitterStyle" />
-
+
@@ -114,10 +119,12 @@ export default { styles() { return { before: { - [this.horizontal ? 'height' : 'width']: `${this.paneBefore.size}%` + [this.horizontal ? 'height' : 'width']: + `${this.after.hidden ? 100 : this.paneBefore.size}%` }, after: { - [this.horizontal ? 'height' : 'width']: `${this.paneAfter.size}%` + [this.horizontal ? 'height' : 'width']: + `${this.before.hidden ? 100 : this.paneAfter.size}%` } } }, diff --git a/src/components/DataView.vue b/src/components/DataView.vue index c09e30c..9d70f61 100644 --- a/src/components/DataView.vue +++ b/src/components/DataView.vue @@ -11,6 +11,7 @@ :initOptions="initOptionsByMode[mode]" :data-sources="dataSource" :showViewSettings="showViewSettings" + :showValueViewer="viewValuePanelVisible" @loading-image-completed="loadingImage = false" @update="$emit('update')" /> @@ -56,6 +57,16 @@ + + + +
.
-
- -
+ + + @@ -35,17 +49,20 @@ import 'react-chart-editor/lib/react-chart-editor.css' import GraphEditor from '@/components/Graph/GraphEditor.vue' import { dataSourceIsValid } from '@/lib/graphHelper' +import ValueViewer from '@/components/ValueViewer' +import Splitpanes from '@/components/Common/Splitpanes' export default { name: 'Graph', - components: { GraphEditor }, + components: { GraphEditor, ValueViewer, Splitpanes }, props: { dataSources: Object, initOptions: Object, exportToPngEnabled: Boolean, exportToSvgEnabled: Boolean, exportToHtmlEnabled: Boolean, - showViewSettings: Boolean + showViewSettings: Boolean, + showValueViewer: Boolean }, emits: [ 'update:exportToSvgEnabled', @@ -57,7 +74,8 @@ export default { ], data() { return { - resizeObserver: null + resizeObserver: null, + selectedNode: {} } }, computed: { @@ -83,10 +101,10 @@ export default { }, mounted() { this.resizeObserver = new ResizeObserver(this.handleResize) - this.resizeObserver.observe(this.$refs.graphContainer) + this.resizeObserver.observe(this.$refs.graphEditorContainer) }, beforeUnmount() { - this.resizeObserver.unobserve(this.$refs.graphContainer) + this.resizeObserver.unobserve(this.$refs.graphEditorContainer) }, methods: { getOptionsForSave() { @@ -100,7 +118,7 @@ export default { return this.$refs.graphEditor.prepareCopy() }, async handleResize() { - const renderer = this.$refs.graphEditor.renderer + const renderer = this.$refs.graphEditor?.renderer if (renderer) { renderer.refresh() renderer.getCamera().animatedReset({ duration: 600 }) diff --git a/src/components/RunResult/index.vue b/src/components/RunResult/index.vue index 6b2d460..d85d702 100644 --- a/src/components/RunResult/index.vue +++ b/src/components/RunResult/index.vue @@ -1,40 +1,66 @@ @@ -151,7 +135,7 @@ import cIo from '@/lib/utils/clipboardIo' import time from '@/lib/utils/time' import loadingDialog from '@/components/Common/LoadingDialog' import events from '@/lib/utils/events' -import ValueViewer from './ValueViewer' +import ValueViewer from '@/components/ValueViewer' import Record from './Record/index.vue' export default { @@ -172,7 +156,6 @@ export default { Splitpanes }, props: { - tab: Object, result: Object, isGettingResults: Boolean, error: Object, @@ -194,20 +177,6 @@ export default { showLoadingDialog: false } }, - computed: { - resultSetTeleportTarget() { - if (!this.enableTeleport) { - return undefined - } - const base = `#${ - this.viewValuePanelVisible - ? 'run-result-left-pane' - : 'run-result-result-set' - }` - const tabIdPostfix = `-${this.tab.id}` - return base + tabIdPostfix - } - }, watch: { result() { this.defaultSelectedCell = null @@ -332,19 +301,12 @@ export default { width: 0; } -.result-set-container, -.result-set-container > div { +.result-set-container { position: relative; height: 100%; width: 100%; box-sizing: border-box; } -.value-viewer-container { - height: 100%; - width: 100%; - background-color: var(--color-white); - position: relative; -} .table-preview { position: absolute; diff --git a/src/components/Tab.vue b/src/components/Tab.vue index c7c4a70..51c3714 100644 --- a/src/components/Tab.vue +++ b/src/components/Tab.vue @@ -37,7 +37,6 @@ :disabled="!enableTeleport" >
-
- + + +
+ {{ emptyMessage }}
@@ -65,7 +73,9 @@ export default { Logs }, props: { - cellValue: [String, Number, Uint8Array] + cellValue: [String, Number, Uint8Array], + empty: Boolean, + emptyMessage: String }, data() { return { @@ -153,8 +163,10 @@ export default { .value-viewer { background-color: var(--color-white); height: 100%; + width: 100%; display: flex; flex-direction: column; + position: relative; } .value-viewer-toolbar { display: flex; @@ -219,4 +231,14 @@ export default { width: 1px; background: var(--color-text-base); } + +.empty-message { + position: absolute; + top: 40%; + left: 50%; + transform: translate(-50%, -50%); + color: var(--color-text-base); + font-size: 13px; + text-align: center; +}