1
0
mirror of https://github.com/lana-k/sqliteviz.git synced 2026-08-05 23:39:17 +08:00

Compare commits

..

2 Commits

Author SHA1 Message Date
lana-k
b6ec71338b fix plotly warnings see issue 7809 2026-07-05 19:12:24 +02:00
lana-k
4bb6676648 selection view wip 2026-05-25 17:50:57 +02:00
5 changed files with 76 additions and 30 deletions

6
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "sqliteviz", "name": "sqliteviz",
"version": "0.29.0", "version": "0.30.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "sqliteviz", "name": "sqliteviz",
"version": "0.29.0", "version": "0.30.0",
"hasInstallScript": true, "hasInstallScript": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
@@ -24,7 +24,7 @@
"nanoid": "^3.1.12", "nanoid": "^3.1.12",
"papaparse": "^5.4.1", "papaparse": "^5.4.1",
"pivottable": "^2.23.0", "pivottable": "^2.23.0",
"plotly.js": "^2.35.2", "plotly.js": "^2.35.3",
"promise-worker": "^2.0.1", "promise-worker": "^2.0.1",
"react": "^16.14.0", "react": "^16.14.0",
"react-chart-editor": "^0.46.1", "react-chart-editor": "^0.46.1",

View File

@@ -28,7 +28,7 @@
"nanoid": "^3.1.12", "nanoid": "^3.1.12",
"papaparse": "^5.4.1", "papaparse": "^5.4.1",
"pivottable": "^2.23.0", "pivottable": "^2.23.0",
"plotly.js": "^2.35.2", "plotly.js": "^2.35.3",
"promise-worker": "^2.0.1", "promise-worker": "^2.0.1",
"react": "^16.14.0", "react": "^16.14.0",
"react-chart-editor": "^0.46.1", "react-chart-editor": "^0.46.1",

View File

@@ -0,0 +1,12 @@
diff --git a/node_modules/plotly.js/src/plot_api/plot_api.js b/node_modules/plotly.js/src/plot_api/plot_api.js
index 75e98f5..5c38053 100644
--- a/node_modules/plotly.js/src/plot_api/plot_api.js
+++ b/node_modules/plotly.js/src/plot_api/plot_api.js
@@ -2394,6 +2394,7 @@ var layoutUIControlPatterns = [
{pattern: /^legend\.(x|y)$/, attr: 'editrevision'},
{pattern: /^(shapes|annotations)/, attr: 'editrevision'},
+ {pattern: /^selections/, attr: 'selectionrevision'},
{pattern: /^title\.text$/, attr: 'editrevision'}
];

View File

@@ -1,47 +1,67 @@
<template> <template>
<div ref="chartContainer" class="chart-container"> <div class="chart-container">
<div v-show="!dataSources" class="warning data-view-warning"> <div v-show="!dataSources" class="warning data-view-warning">
There is no data to build a chart. Run your SQL query and make sure the There is no data to build a chart. Run your SQL query and make sure the
result is not empty. result is not empty.
</div> </div>
<div <splitpanes
:before="{ size: 70, max: 100 }"
:after="{ size: 30, max: 50, hidden: !showValueViewer }"
:default="{ before: 70, after: 30 }"
class="chart" class="chart"
:style="{ height: !dataSources ? 'calc(100% - 40px)' : '100%' }" :style="{ height: !dataSources ? 'calc(100% - 40px)' : '100%' }"
> >
<PlotlyEditor <template #left-pane>
ref="plotlyEditor" <div ref="chartContainer" :style="{ height: '100%' }">
:data="state.data" <PlotlyEditor
:layout="state.layout" ref="plotlyEditor"
:frames="state.frames" :data="state.data"
:config="config" :layout="state.layout"
:dataSources="dataSources" :frames="state.frames"
:dataSourceOptions="dataSourceOptions" :config="config"
:plotly="plotly" :dataSources="dataSources"
:useResizeHandler="useResizeHandler" :dataSourceOptions="dataSourceOptions"
:debug="true" :plotly="plotly"
:advancedTraceTypeSelector="true" :useResizeHandler="useResizeHandler"
:hideControls="!showViewSettings" :debug="true"
@update="update" :advancedTraceTypeSelector="true"
@render="onRender" :hideControls="!showViewSettings"
/> @update="update"
</div> @render="onRender"
/>
</div>
</template>
<template v-if="showValueViewer" #right-pane>
<value-viewer
:empty="!selectedItem"
emptyMessage="No points selected to view"
:value="JSON.stringify(selectedItem)"
defaultFormat="json"
/>
</template>
</splitpanes>
</div> </div>
</template> </template>
<script> <script>
import { applyPureReactInVue } from 'veaury' import { applyPureReactInVue } from 'veaury'
import plotly from 'plotly.js' import plotly from 'plotly.js/dist/plotly'
import 'react-chart-editor/lib/react-chart-editor.css' import 'react-chart-editor/lib/react-chart-editor.css'
import ReactPlotlyEditorWithPlotRef from '@/lib/ReactPlotlyEditorWithPlotRef.jsx' import ReactPlotlyEditorWithPlotRef from '@/lib/ReactPlotlyEditorWithPlotRef.jsx'
import chartHelper from '@/lib/chartHelper' import chartHelper from '@/lib/chartHelper'
import * as dereference from 'react-chart-editor/lib/lib/dereference' import * as dereference from 'react-chart-editor/lib/lib/dereference'
import fIo from '@/lib/utils/fileIo' import fIo from '@/lib/utils/fileIo'
import events from '@/lib/utils/events' import events from '@/lib/utils/events'
import Splitpanes from '@/components/Common/Splitpanes'
import ValueViewer from '@/components/ValueViewer.vue'
import { nextTick } from 'vue'
export default { export default {
name: 'Chart', name: 'Chart',
components: { components: {
PlotlyEditor: applyPureReactInVue(ReactPlotlyEditorWithPlotRef) PlotlyEditor: applyPureReactInVue(ReactPlotlyEditorWithPlotRef),
Splitpanes,
ValueViewer
}, },
props: { props: {
dataSources: Object, dataSources: Object,
@@ -49,7 +69,8 @@ export default {
exportToPngEnabled: Boolean, exportToPngEnabled: Boolean,
exportToSvgEnabled: Boolean, exportToSvgEnabled: Boolean,
forPivot: Boolean, forPivot: Boolean,
showViewSettings: Boolean showViewSettings: Boolean,
showValueViewer: Boolean
}, },
emits: [ emits: [
'update:exportToSvgEnabled', 'update:exportToSvgEnabled',
@@ -71,7 +92,8 @@ export default {
modeBarButtonsToRemove: ['toImage'] modeBarButtonsToRemove: ['toImage']
}, },
resizeObserver: null, resizeObserver: null,
useResizeHandler: this.$store.state.isWorkspaceVisible useResizeHandler: this.$store.state.isWorkspaceVisible,
selectedItem: null
} }
}, },
computed: { computed: {
@@ -115,13 +137,25 @@ export default {
this.$emit('update:exportToSvgEnabled', true) this.$emit('update:exportToSvgEnabled', true)
this.$emit('update:exportToHtmlEnabled', true) this.$emit('update:exportToHtmlEnabled', true)
}, },
mounted() { async mounted() {
this.resizeObserver = new ResizeObserver(this.handleResize) this.resizeObserver = new ResizeObserver(this.handleResize)
this.resizeObserver.observe(this.$refs.chartContainer) this.resizeObserver.observe(this.$refs.chartContainer)
if (this.dataSources) { if (this.dataSources) {
dereference.default(this.state.data, this.dataSources) dereference.default(this.state.data, this.dataSources)
} }
this.handleResize() this.handleResize()
await nextTick()
const plotlyDiv =
this.$refs.plotlyEditor.$el.querySelector('.js-plotly-plot')
plotlyDiv?.on('plotly_selected', selectionEvent => {
if (selectionEvent) {
console.log(this.dataSources)
this.selectedItem = 1
}
})
plotlyDiv?.on('plotly_deselect', () => {
this.selectedItem = null
})
}, },
activated() { activated() {
this.useResizeHandler = true this.useResizeHandler = true

View File

@@ -58,9 +58,9 @@
</icon-button> </icon-button>
<icon-button <icon-button
v-if="mode === 'graph'" v-if="mode !== 'pivot'"
ref="viewNodeOrEdgeBtn" ref="viewNodeOrEdgeBtn"
tooltip="View node or edge details" tooltip="View details"
tooltipPosition="top-left" tooltipPosition="top-left"
:active="viewValuePanelVisible" :active="viewValuePanelVisible"
@click="viewValuePanelVisible = !viewValuePanelVisible" @click="viewValuePanelVisible = !viewValuePanelVisible"