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;
+}