perspective column filter

This commit is contained in:
Jan Prochazka
2022-08-06 13:49:05 +02:00
parent c6dbb31748
commit f77cc1023b
3 changed files with 35 additions and 14 deletions

View File

@@ -36,6 +36,7 @@
input { input {
flex: 1; flex: 1;
min-width: 10px; min-width: 10px;
min-height: 22px;
width: 10px; width: 10px;
border: none; border: none;
} }

View File

@@ -1,5 +1,12 @@
<script lang="ts"> <script lang="ts">
import { ChangeConfigFunc, ChangePerspectiveConfigFunc, GridConfig, PerspectiveConfig } from 'dbgate-datalib'; import {
ChangeConfigFunc,
ChangePerspectiveConfigFunc,
GridConfig,
PerspectiveConfig,
PerspectiveTreeNode,
} from 'dbgate-datalib';
import { filterName } from 'dbgate-tools';
import PerspectiveNodeRow from './PerspectiveNodeRow.svelte'; import PerspectiveNodeRow from './PerspectiveNodeRow.svelte';
@@ -8,23 +15,28 @@
export let setConfig: ChangePerspectiveConfigFunc; export let setConfig: ChangePerspectiveConfigFunc;
export let conid; export let conid;
export let database; export let database;
export let filter;
function processFlatColumns(res, columns) { function getFlatColumns(node: PerspectiveTreeNode, filter: string) {
for (const col of columns) { const res = [];
res.push(col); for (const col of node?.childNodes) {
if (col.isExpanded) { if (filterName(filter, col.title)) {
processFlatColumns(res, col.childNodes); res.push(col);
if (col.isExpanded) {
res.push(...getFlatColumns(col, filter));
}
} else if (col.isExpanded) {
const children = getFlatColumns(col, filter);
if (children.length > 0) {
res.push(col);
res.push(...children);
}
} }
} }
}
function getFlatColumns(root) {
const res = [];
processFlatColumns(res, root?.childNodes || []);
return res; return res;
} }
</script> </script>
{#each getFlatColumns(root) as node} {#each getFlatColumns(root, filter) as node}
<PerspectiveNodeRow {node} {config} {setConfig} {root} {conid} {database} /> <PerspectiveNodeRow {node} {config} {setConfig} {root} {conid} {database} />
{/each} {/each}

View File

@@ -51,6 +51,9 @@
import CustomJoinModal from './CustomJoinModal.svelte'; import CustomJoinModal from './CustomJoinModal.svelte';
import JsonViewFilters from '../jsonview/JsonViewFilters.svelte'; import JsonViewFilters from '../jsonview/JsonViewFilters.svelte';
import PerspectiveFilters from './PerspectiveFilters.svelte'; import PerspectiveFilters from './PerspectiveFilters.svelte';
import SearchBoxWrapper from '../elements/SearchBoxWrapper.svelte';
import SearchInput from '../elements/SearchInput.svelte';
import CloseSearchButton from '../buttons/CloseSearchButton.svelte';
const dbg = debug('dbgate:PerspectiveView'); const dbg = debug('dbgate:PerspectiveView');
@@ -67,7 +70,7 @@
export let cache; export let cache;
let managerSize; let managerSize;
let nextCacheRef = createRef(null); let filter;
export const activator = createActivator('PerspectiveView', true); export const activator = createActivator('PerspectiveView', true);
@@ -111,9 +114,14 @@
<div class="left" slot="1"> <div class="left" slot="1">
<WidgetColumnBar> <WidgetColumnBar>
<WidgetColumnBarItem title="Choose data" name="perspectiveTree" height={'70%'}> <WidgetColumnBarItem title="Choose data" name="perspectiveTree" height={'70%'}>
<SearchBoxWrapper>
<SearchInput placeholder="Search column or table" bind:value={filter} />
<CloseSearchButton bind:filter />
</SearchBoxWrapper>
<ManagerInnerContainer width={managerSize}> <ManagerInnerContainer width={managerSize}>
{#if root} {#if root}
<PerspectiveTree {root} {config} {setConfig} {conid} {database} /> <PerspectiveTree {root} {config} {setConfig} {conid} {database} {filter} />
{/if} {/if}
</ManagerInnerContainer> </ManagerInnerContainer>
</WidgetColumnBarItem> </WidgetColumnBarItem>