mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-19 09:36:01 +00:00
chart popup menu
This commit is contained in:
@@ -1,11 +1,13 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { onMount, afterUpdate, onDestroy } from 'svelte';
|
import { onMount, afterUpdate, onDestroy } from 'svelte';
|
||||||
import Chart from 'chart.js';
|
import Chart from 'chart.js';
|
||||||
|
import contextMenu from '../utility/contextMenu';
|
||||||
|
|
||||||
export let data;
|
export let data;
|
||||||
export let type = 'line';
|
export let type = 'line';
|
||||||
export let options = {};
|
export let options = {};
|
||||||
export let plugins = {};
|
export let plugins = {};
|
||||||
|
export let menu;
|
||||||
|
|
||||||
let chart = null;
|
let chart = null;
|
||||||
let domChart;
|
let domChart;
|
||||||
@@ -31,4 +33,4 @@
|
|||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<canvas bind:this={domChart} {...$$restProps} />
|
<canvas bind:this={domChart} {...$$restProps} use:contextMenu={menu} />
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
export let conid;
|
export let conid;
|
||||||
export let database;
|
export let database;
|
||||||
export let sql;
|
export let sql;
|
||||||
|
export let menu;
|
||||||
|
|
||||||
let availableColumnNames = [];
|
let availableColumnNames = [];
|
||||||
let error = null;
|
let error = null;
|
||||||
@@ -145,7 +146,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<svelte:fragment slot="2">
|
<svelte:fragment slot="2">
|
||||||
<DataChart data={data || loadedData} />
|
<DataChart data={data || loadedData} {menu} />
|
||||||
</svelte:fragment>
|
</svelte:fragment>
|
||||||
</HorizontalSplitter>
|
</HorizontalSplitter>
|
||||||
</FormProviderCore>
|
</FormProviderCore>
|
||||||
|
|||||||
@@ -100,6 +100,7 @@
|
|||||||
import { extractDataColumnColors, extractDataColumns } from './chartDataLoader';
|
import { extractDataColumnColors, extractDataColumns } from './chartDataLoader';
|
||||||
|
|
||||||
export let data;
|
export let data;
|
||||||
|
export let menu;
|
||||||
|
|
||||||
const { values } = getFormContext();
|
const { values } = getFormContext();
|
||||||
|
|
||||||
@@ -128,6 +129,7 @@
|
|||||||
data={chartData[0]}
|
data={chartData[0]}
|
||||||
type={$values.chartType}
|
type={$values.chartType}
|
||||||
options={chartData[1]}
|
options={chartData[1]}
|
||||||
|
{menu}
|
||||||
/>
|
/>
|
||||||
{/key}
|
{/key}
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -280,7 +280,7 @@ export function registerFileCommands({
|
|||||||
id: idPrefix + '.redo',
|
id: idPrefix + '.redo',
|
||||||
category,
|
category,
|
||||||
group: 'redo',
|
group: 'redo',
|
||||||
name: 'Replace',
|
name: 'Redo',
|
||||||
testEnabled: () => getCurrentEditor()?.canRedo(),
|
testEnabled: () => getCurrentEditor()?.canRedo(),
|
||||||
onClick: () => getCurrentEditor().redo(),
|
onClick: () => getCurrentEditor().redo(),
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,19 +1,44 @@
|
|||||||
|
<script lang="ts" context="module">
|
||||||
|
let lastFocusedEditor = null;
|
||||||
|
const getCurrentEditor = () =>
|
||||||
|
lastFocusedEditor?.getTabId && lastFocusedEditor?.getTabId() == getActiveTabId() ? lastFocusedEditor : null;
|
||||||
|
|
||||||
|
registerFileCommands({
|
||||||
|
idPrefix: 'chart',
|
||||||
|
category: 'Chart',
|
||||||
|
getCurrentEditor,
|
||||||
|
folder: 'charts',
|
||||||
|
format: 'json',
|
||||||
|
fileExtension: 'chart',
|
||||||
|
|
||||||
|
undoRedo: true,
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
|
import { getContext } from 'svelte';
|
||||||
|
import { get_current_component } from 'svelte/internal';
|
||||||
import { derived } from 'svelte/store';
|
import { derived } from 'svelte/store';
|
||||||
import ChartEditor from '../charts/ChartEditor.svelte';
|
import ChartEditor from '../charts/ChartEditor.svelte';
|
||||||
|
import invalidateCommands from '../commands/invalidateCommands';
|
||||||
|
import { registerFileCommands } from '../commands/stdCommands';
|
||||||
|
|
||||||
import ErrorInfo from '../elements/ErrorInfo.svelte';
|
import ErrorInfo from '../elements/ErrorInfo.svelte';
|
||||||
|
|
||||||
import LoadingInfo from '../elements/LoadingInfo.svelte';
|
import LoadingInfo from '../elements/LoadingInfo.svelte';
|
||||||
|
|
||||||
import useEditorData from '../query/useEditorData';
|
import useEditorData from '../query/useEditorData';
|
||||||
|
import { getActiveTabId } from '../stores';
|
||||||
import createUndoReducer from '../utility/createUndoReducer';
|
import createUndoReducer from '../utility/createUndoReducer';
|
||||||
|
|
||||||
export let tabid;
|
export let tabid;
|
||||||
export let conid;
|
export let conid;
|
||||||
export let database;
|
export let database;
|
||||||
|
|
||||||
|
const instance = get_current_component();
|
||||||
|
const tabVisible: any = getContext('tabVisible');
|
||||||
|
|
||||||
export function getData() {
|
export function getData() {
|
||||||
return $editorState.value || '';
|
return $editorState.value || '';
|
||||||
}
|
}
|
||||||
@@ -33,6 +58,13 @@
|
|||||||
|
|
||||||
$: setEditorData($modelState.value);
|
$: setEditorData($modelState.value);
|
||||||
|
|
||||||
|
$: if ($tabVisible) lastFocusedEditor = instance;
|
||||||
|
|
||||||
|
$: {
|
||||||
|
$modelState;
|
||||||
|
invalidateCommands();
|
||||||
|
}
|
||||||
|
|
||||||
const setConfig = config =>
|
const setConfig = config =>
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
dispatchModel({
|
dispatchModel({
|
||||||
@@ -48,6 +80,36 @@
|
|||||||
update: setConfig,
|
update: setConfig,
|
||||||
set: setConfig,
|
set: setConfig,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export function canUndo() {
|
||||||
|
return $modelState.canUndo;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function undo() {
|
||||||
|
dispatchModel({ type: 'undo' });
|
||||||
|
}
|
||||||
|
|
||||||
|
export function canRedo() {
|
||||||
|
return $modelState.canRedo;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function redo() {
|
||||||
|
dispatchModel({ type: 'redo' });
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getTabId() {
|
||||||
|
return tabid;
|
||||||
|
}
|
||||||
|
|
||||||
|
function createMenu() {
|
||||||
|
return [
|
||||||
|
{ command: 'chart.save' },
|
||||||
|
{ command: 'chart.saveAs' },
|
||||||
|
{ divider: true },
|
||||||
|
{ command: 'chart.undo' },
|
||||||
|
{ command: 'chart.redo' },
|
||||||
|
];
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if $editorState.isLoading}
|
{#if $editorState.isLoading}
|
||||||
@@ -61,5 +123,6 @@
|
|||||||
sql={$modelState.value && $modelState.value.sql}
|
sql={$modelState.value && $modelState.value.sql}
|
||||||
{conid}
|
{conid}
|
||||||
{database}
|
{database}
|
||||||
|
menu={createMenu}
|
||||||
/>
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -87,7 +87,7 @@
|
|||||||
$: {
|
$: {
|
||||||
busy;
|
busy;
|
||||||
sessionId;
|
sessionId;
|
||||||
$editorState;
|
$modelState;
|
||||||
invalidateCommands();
|
invalidateCommands();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user