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} />