From a35d5525a3e180dad89e3d49907df3d2d7513cd8 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Mon, 8 Mar 2021 20:00:51 +0100 Subject: [PATCH] query grid --- packages/web/src/datagrid/JslDataGrid.svelte | 29 +++++++ .../web/src/datagrid/JslDataGridCore.svelte | 83 +++++++++++++++++++ .../src/datagrid/LoadingDataGridCore.svelte | 11 ++- packages/web/src/datagrid/RowsArrayGrider.ts | 13 +++ packages/web/src/elements/TabControl.svelte | 7 ++ packages/web/src/query/ResultTabs.svelte | 66 +++++++++++++++ .../web/src/query/SocketMessageView.svelte | 5 -- packages/web/src/tabs/QueryTab.svelte | 27 +++--- packages/web/src/utility/memberStore.ts | 1 - packages/web/src/utility/useFetch.ts | 21 +++++ 10 files changed, 244 insertions(+), 19 deletions(-) create mode 100644 packages/web/src/datagrid/JslDataGrid.svelte create mode 100644 packages/web/src/datagrid/JslDataGridCore.svelte create mode 100644 packages/web/src/datagrid/RowsArrayGrider.ts create mode 100644 packages/web/src/query/ResultTabs.svelte create mode 100644 packages/web/src/utility/useFetch.ts diff --git a/packages/web/src/datagrid/JslDataGrid.svelte b/packages/web/src/datagrid/JslDataGrid.svelte new file mode 100644 index 000000000..3f17d79da --- /dev/null +++ b/packages/web/src/datagrid/JslDataGrid.svelte @@ -0,0 +1,29 @@ + + +{#key jslid} + +{/key} diff --git a/packages/web/src/datagrid/JslDataGridCore.svelte b/packages/web/src/datagrid/JslDataGridCore.svelte new file mode 100644 index 000000000..4c606eb12 --- /dev/null +++ b/packages/web/src/datagrid/JslDataGridCore.svelte @@ -0,0 +1,83 @@ + + + + + diff --git a/packages/web/src/datagrid/LoadingDataGridCore.svelte b/packages/web/src/datagrid/LoadingDataGridCore.svelte index dfd4197c0..77d75b9f0 100644 --- a/packages/web/src/datagrid/LoadingDataGridCore.svelte +++ b/packages/web/src/datagrid/LoadingDataGridCore.svelte @@ -15,7 +15,7 @@ let loadedTime = new Date().getTime(); let allRowCount = null; let errorMessage = null; - let loadNextDataToken = 0; + const loadNextDataRef = { current: false }; const loadedTimeRef = { current: null }; const handleLoadRowCount = async () => { @@ -23,8 +23,9 @@ allRowCount = rowCount; }; - async function loadNextData() { + export async function loadNextData() { if (isLoading) return; + loadNextDataRef.current = false; isLoading = true; const loadStart = new Date().getTime(); @@ -60,6 +61,9 @@ // })); } + if (loadNextDataRef.current) { + loadNextData(); + } // console.log('LOADED', nextRows, loadedRows); } @@ -82,7 +86,8 @@ isLoadedAll = false; loadedTime = new Date().getTime(); errorMessage = null; - loadNextDataToken = 0; + loadNextDataRef.current = false; + // loadNextDataToken = 0; } $: if (display.cache.refreshTime > loadedTime) { diff --git a/packages/web/src/datagrid/RowsArrayGrider.ts b/packages/web/src/datagrid/RowsArrayGrider.ts new file mode 100644 index 000000000..0e21c75e2 --- /dev/null +++ b/packages/web/src/datagrid/RowsArrayGrider.ts @@ -0,0 +1,13 @@ +import Grider, { GriderRowStatus } from './Grider'; + +export default class RowsArrayGrider extends Grider { + constructor(private rows: any[]) { + super(); + } + getRowData(index: any) { + return this.rows[index]; + } + get rowCount() { + return this.rows.length; + } +} diff --git a/packages/web/src/elements/TabControl.svelte b/packages/web/src/elements/TabControl.svelte index 88d917ac2..f91eb7161 100644 --- a/packages/web/src/elements/TabControl.svelte +++ b/packages/web/src/elements/TabControl.svelte @@ -9,6 +9,13 @@ export let tabs: TabDef[]; export let value = 0; export let isInline = false; + + export function setValue(index) { + value = index; + } + export function getValue() { + return value; + }
diff --git a/packages/web/src/query/ResultTabs.svelte b/packages/web/src/query/ResultTabs.svelte new file mode 100644 index 000000000..5e85cfbd0 --- /dev/null +++ b/packages/web/src/query/ResultTabs.svelte @@ -0,0 +1,66 @@ + + + + + + + + + + + + diff --git a/packages/web/src/query/SocketMessageView.svelte b/packages/web/src/query/SocketMessageView.svelte index d48ee9b44..b6a42715a 100644 --- a/packages/web/src/query/SocketMessageView.svelte +++ b/packages/web/src/query/SocketMessageView.svelte @@ -18,12 +18,10 @@ let displayedMessages = []; const displayCachedMessages = _.throttle(() => { - console.log('THROTTLE', cachedMessagesRef.current); displayedMessages = [...cachedMessagesRef.current]; }, 500); const handleInfo = info => { - console.log('ACCEPTED', info); cachedMessagesRef.current.push(info); displayCachedMessages(); }; @@ -40,15 +38,12 @@ $: { if (executeNumber >= 0) { - console.log('CLEAR'); displayedMessages = []; cachedMessagesRef.current = []; } } $: $effect; - - $: console.log('displayedMessages', displayedMessages); {#if !displayedMessages || displayedMessages.length == 0} diff --git a/packages/web/src/tabs/QueryTab.svelte b/packages/web/src/tabs/QueryTab.svelte index 56ef177a7..9db2d61cd 100644 --- a/packages/web/src/tabs/QueryTab.svelte +++ b/packages/web/src/tabs/QueryTab.svelte @@ -48,6 +48,7 @@ import SocketMessageView from '../query/SocketMessageView.svelte'; import memberStore from '../utility/memberStore'; import useEffect from '../utility/useEffect'; + import ResultTabs from '../query/ResultTabs.svelte'; export let tabid; export let conid; @@ -71,15 +72,17 @@ $: connection = useConnectionInfo({ conid }); $: effect = useEffect(() => { - if (sessionId) { - const sid = sessionId; + return onSession(sessionId); + }); + function onSession(sid) { + if (sid) { socket.on(`session-done-${sid}`, handleSessionDone); return () => { socket.off(`session-done-${sid}`, handleSessionDone); }; } return () => {}; - }); + } $: $effect; $: { @@ -161,12 +164,16 @@ /> - + + + + + diff --git a/packages/web/src/utility/memberStore.ts b/packages/web/src/utility/memberStore.ts index 98179a389..d3cb4c4f0 100644 --- a/packages/web/src/utility/memberStore.ts +++ b/packages/web/src/utility/memberStore.ts @@ -8,7 +8,6 @@ export default function memberStore(store, extractStore) { if (unsubscribeSub) unsubscribeSub(); unsubscribeSub = subStore.subscribe(subValue => { if (res) { - console.log('subValue', subValue); res.set(subValue); } else { res = writable(subValue); diff --git a/packages/web/src/utility/useFetch.ts b/packages/web/src/utility/useFetch.ts new file mode 100644 index 000000000..f73117155 --- /dev/null +++ b/packages/web/src/utility/useFetch.ts @@ -0,0 +1,21 @@ +import _ from 'lodash'; +import axios from './axios'; +import { writable } from 'svelte/store'; + +export default function useFetch({ url, data = undefined, params = undefined, defaultValue = undefined, ...config }) { + const result = writable(defaultValue); + + axios + .request({ + method: 'get', + params, + url, + data, + ...config, + }) + .then(resp => { + result.set(resp.data); + }); + + return result; +}