diff --git a/packages/web/src/appobj/AppObjectCore.svelte b/packages/web/src/appobj/AppObjectCore.svelte
index 9df508d9d..b91c904c0 100644
--- a/packages/web/src/appobj/AppObjectCore.svelte
+++ b/packages/web/src/appobj/AppObjectCore.svelte
@@ -23,7 +23,7 @@
{#if expandIcon}
-
+
{/if}
diff --git a/packages/web/src/appobj/AppObjectGroup.svelte b/packages/web/src/appobj/AppObjectGroup.svelte
index 9f71da4d9..85a49ea70 100644
--- a/packages/web/src/appobj/AppObjectGroup.svelte
+++ b/packages/web/src/appobj/AppObjectGroup.svelte
@@ -1,4 +1,8 @@
(isExpanded = !isExpanded)}>
+
+
+
+
{group}
{items && `(${countText})`}
{#if isExpanded}
{#each filtered as item (module.extractKey(item.data))}
-
+
{/each}
{/if}
@@ -34,4 +42,7 @@
.group:hover {
background-color: var(--theme-bg-hover);
}
+ .expand-icon {
+ margin-right: 3px;
+ }
diff --git a/packages/web/src/appobj/AppObjectList.svelte b/packages/web/src/appobj/AppObjectList.svelte
index 273307506..92e3e74dc 100644
--- a/packages/web/src/appobj/AppObjectList.svelte
+++ b/packages/web/src/appobj/AppObjectList.svelte
@@ -10,6 +10,7 @@
export let expandOnClick = false;
export let isExpandable = undefined;
export let filter;
+ export let expandIconFunc = undefined;
export let groupFunc = undefined;
@@ -35,10 +36,18 @@
{#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 904d77333..9b88412e7 100644
--- a/packages/web/src/appobj/AppObjectListItem.svelte
+++ b/packages/web/src/appobj/AppObjectListItem.svelte
@@ -26,6 +26,10 @@
}
}
+ function handleExpandButton() {
+ isExpanded = !isExpanded;
+ }
+
$: expandable = data && isExpandable && isExpandable(data);
$: if (!expandable && isExpanded) isExpanded = false;
@@ -35,7 +39,7 @@
this={module.default}
{data}
on:click={handleExpand}
- on:expand={handleExpand}
+ on:expand={handleExpandButton}
expandIcon={getExpandIcon(expandable, subItemsComponent, isExpanded, expandIconFunc)}
/>
diff --git a/packages/web/src/appobj/ColumnAppObject.svelte b/packages/web/src/appobj/ColumnAppObject.svelte
new file mode 100644
index 000000000..4ee66bc29
--- /dev/null
+++ b/packages/web/src/appobj/ColumnAppObject.svelte
@@ -0,0 +1,22 @@
+
+
+
+
+
diff --git a/packages/web/src/appobj/DatabaseObjectAppObject.svelte b/packages/web/src/appobj/DatabaseObjectAppObject.svelte
index 802f4e4b6..a2a8cfabe 100644
--- a/packages/web/src/appobj/DatabaseObjectAppObject.svelte
+++ b/packages/web/src/appobj/DatabaseObjectAppObject.svelte
@@ -42,4 +42,5 @@
title={data.schemaName ? `${data.schemaName}.${data.pureName}` : data.pureName}
icon={icons[data.objectTypeField]}
on:click={handleClick}
+ on:expand
/>
diff --git a/packages/web/src/appobj/SubColumnParamList.svelte b/packages/web/src/appobj/SubColumnParamList.svelte
new file mode 100644
index 000000000..bdb86ccbc
--- /dev/null
+++ b/packages/web/src/appobj/SubColumnParamList.svelte
@@ -0,0 +1,16 @@
+
+
+ ({
+ ...col,
+ foreignKey: findForeignKeyForColumn(data, col),
+ }))}
+ module={columnAppObject}
+/>
diff --git a/packages/web/src/widgets/SqlObjectList.svelte b/packages/web/src/widgets/SqlObjectList.svelte
index 82303651c..54d79aa69 100644
--- a/packages/web/src/widgets/SqlObjectList.svelte
+++ b/packages/web/src/widgets/SqlObjectList.svelte
@@ -7,7 +7,8 @@
import AppObjectList from '../appobj/AppObjectList.svelte';
import _ from 'lodash';
import * as databaseObjectAppObject from '../appobj/DatabaseObjectAppObject.svelte';
- import { currentDatabase } from '../stores';
+ import SubColumnParamList from '../appobj/SubColumnParamList.svelte';
+ import { chevronExpandIcon } from '../icons/expandIcons';
export let conid;
export let database;
@@ -28,7 +29,7 @@
-
+
Refresh
@@ -36,6 +37,9 @@
list={objectList.map(x => ({ ...x, conid, database }))}
module={databaseObjectAppObject}
groupFunc={data => _.startCase(data.objectTypeField)}
+ subItemsComponent={SubColumnParamList}
+ isExpandable={data => data.objectTypeField == 'tables' || data.objectTypeField == 'views'}
+ expandIconFunc={chevronExpandIcon}
{filter}
/>