diff --git a/packages/web/public/global.css b/packages/web/public/global.css
index d3679ddf8..a5228d520 100644
--- a/packages/web/public/global.css
+++ b/packages/web/public/global.css
@@ -28,6 +28,10 @@ body {
background-color: var(--theme-bg-2);
}
+.icon-invisible {
+ visibility: hidden;
+}
+
/* html, body {
position: relative;
width: 100%;
diff --git a/packages/web/src/appobj/AppObjectCore.svelte b/packages/web/src/appobj/AppObjectCore.svelte
index 2d29ded0c..5f07d3cc0 100644
--- a/packages/web/src/appobj/AppObjectCore.svelte
+++ b/packages/web/src/appobj/AppObjectCore.svelte
@@ -6,7 +6,6 @@
export let title;
export let isBold = false;
- export let prefix = '';
export let isBusy = false;
export let statusIcon = undefined;
export let statusTitle = undefined;
@@ -15,7 +14,7 @@
- {prefix}
+
{#if isBusy}
{:else}
diff --git a/packages/web/src/appobj/AppObjectGroup.svelte b/packages/web/src/appobj/AppObjectGroup.svelte
new file mode 100644
index 000000000..9f71da4d9
--- /dev/null
+++ b/packages/web/src/appobj/AppObjectGroup.svelte
@@ -0,0 +1,37 @@
+
+
+
(isExpanded = !isExpanded)}>
+ {group}
+ {items && `(${countText})`}
+
+
+{#if isExpanded}
+ {#each filtered as item (module.extractKey(item.data))}
+
+ {/each}
+{/if}
+
+
diff --git a/packages/web/src/appobj/AppObjectList.svelte b/packages/web/src/appobj/AppObjectList.svelte
index af4f7e6b2..273307506 100644
--- a/packages/web/src/appobj/AppObjectList.svelte
+++ b/packages/web/src/appobj/AppObjectList.svelte
@@ -1,10 +1,14 @@
-
-{#each filtered as data}
-
-{/each}
+{#if groupFunc}
+ {#each _.keys(groups) as group (group)}
+
+ {/each}
+{:else}
+ {#each filtered as data (module.extractKey(data))}
+
+ {/each}
+{/if}
diff --git a/packages/web/src/appobj/AppObjectListItem.svelte b/packages/web/src/appobj/AppObjectListItem.svelte
index 938719291..1521cb1c6 100644
--- a/packages/web/src/appobj/AppObjectListItem.svelte
+++ b/packages/web/src/appobj/AppObjectListItem.svelte
@@ -1,20 +1,52 @@
-
+{#if subItemsComponent}
+
+
+ {#if expandable}
+
+ {:else}
+
+ {/if}
+
+
+{:else}
+
+{/if}
{#if isExpanded && subItemsComponent}
-
+
+
+
{/if}
+
+
diff --git a/packages/web/src/appobj/ConnectionAppObject.svelte b/packages/web/src/appobj/ConnectionAppObject.svelte
index 7dd1c4c13..c8773cc9e 100644
--- a/packages/web/src/appobj/ConnectionAppObject.svelte
+++ b/packages/web/src/appobj/ConnectionAppObject.svelte
@@ -102,6 +102,8 @@
statusTitle={statusTitle || engineStatusTitle}
{extInfo}
menu={getContextMenu(data, $openedConnections)}
- on:click
on:click={() => ($openedConnections = _.uniq([...$openedConnections, data._id]))}
-/>
+ on:click
+>
+
+
diff --git a/packages/web/src/appobj/DatabaseAppObject.svelte b/packages/web/src/appobj/DatabaseAppObject.svelte
index 1e04fcefc..3a1460f39 100644
--- a/packages/web/src/appobj/DatabaseAppObject.svelte
+++ b/packages/web/src/appobj/DatabaseAppObject.svelte
@@ -1,3 +1,7 @@
+
+
+
+
+{#if isBlank}
+
+{:else}
+
+{/if}
diff --git a/packages/web/src/icons/FontIcon.svelte b/packages/web/src/icons/FontIcon.svelte
index a815eb34f..2ed5a29a1 100644
--- a/packages/web/src/icons/FontIcon.svelte
+++ b/packages/web/src/icons/FontIcon.svelte
@@ -102,4 +102,4 @@
};
-
+
diff --git a/packages/web/src/widgets/ConnectionList.svelte b/packages/web/src/widgets/ConnectionList.svelte
index 298301dbb..e0b94df68 100644
--- a/packages/web/src/widgets/ConnectionList.svelte
+++ b/packages/web/src/widgets/ConnectionList.svelte
@@ -8,6 +8,7 @@
import AppObjectList from '../appobj/AppObjectList.svelte';
import * as connectionAppObject from '../appobj/ConnectionAppObject.svelte';
import SubDatabaseList from '../appobj/SubDatabaseList.svelte';
+ import { openedConnections } from '../stores';
const connections = useConnectionList();
const serverStatus = useServerStatus();
@@ -30,6 +31,7 @@
module={connectionAppObject}
subItemsComponent={SubDatabaseList}
expandOnClick
+ isExpandable={data => $openedConnections.includes(data._id)}
{filter}
/>
diff --git a/packages/web/src/widgets/SqlObjectList.svelte b/packages/web/src/widgets/SqlObjectList.svelte
index 328fcb897..82303651c 100644
--- a/packages/web/src/widgets/SqlObjectList.svelte
+++ b/packages/web/src/widgets/SqlObjectList.svelte
@@ -12,6 +12,8 @@
export let conid;
export let database;
+ let filter = '';
+
$: objects = useDatabaseInfo({ conid, database });
$: status = useDatabaseStatus({ conid, database });
@@ -26,9 +28,14 @@
-
+
Refresh
- ({ ...x, conid, database }))} module={databaseObjectAppObject} />
+ ({ ...x, conid, database }))}
+ module={databaseObjectAppObject}
+ groupFunc={data => _.startCase(data.objectTypeField)}
+ {filter}
+ />