temp root in perspectives

This commit is contained in:
Jan Prochazka
2022-09-01 19:12:03 +02:00
parent 5724067974
commit 917c2f49a0
7 changed files with 60 additions and 7 deletions

View File

@@ -134,6 +134,7 @@ export class PerspectiveDataProvider {
for (; groupIndex < props.bindingValues.length; groupIndex++) { for (; groupIndex < props.bindingValues.length; groupIndex++) {
const groupValues = props.bindingValues[groupIndex]; const groupValues = props.bindingValues[groupIndex];
const group = tableCache.getBindingGroup(groupValues); const group = tableCache.getBindingGroup(groupValues);
if (!group) continue;
if (group.loadedAll) continue; if (group.loadedAll) continue;
if (group.groupSize == 0) { if (group.groupSize == 0) {
group.loadedAll = true; group.loadedAll = true;

View File

@@ -241,6 +241,7 @@
use:moveDrag={settings?.canSelectColumns ? [handleMoveStart, handleMove, handleMoveEnd] : null} use:moveDrag={settings?.canSelectColumns ? [handleMoveStart, handleMove, handleMoveEnd] : null}
use:contextMenu={settings?.canSelectColumns ? createMenu : '__no_menu'} use:contextMenu={settings?.canSelectColumns ? createMenu : '__no_menu'}
style={getTableColorStyle($currentThemeDefinition, table)} style={getTableColorStyle($currentThemeDefinition, table)}
on:click={settings?.onClickTableHeader ? () => settings?.onClickTableHeader(designerId) : null}
> >
<div> <div>
{#if settings?.canCheckTables} {#if settings?.canCheckTables}

View File

@@ -25,6 +25,8 @@
export let setConfig; export let setConfig;
export let onClickTableHeader = null;
function createDesignerModel(config: PerspectiveConfig, dbInfos: MultipleDatabaseInfo) { function createDesignerModel(config: PerspectiveConfig, dbInfos: MultipleDatabaseInfo) {
return { return {
...config, ...config,
@@ -272,6 +274,7 @@
return false; return false;
}, },
onClickTableHeader,
}} }}
referenceComponent={QueryDesignerReference} referenceComponent={QueryDesignerReference}
value={createDesignerModel(config, dbInfos)} value={createDesignerModel(config, dbInfos)}

View File

@@ -14,6 +14,7 @@
export let database; export let database;
export let node: PerspectiveTreeNode; export let node: PerspectiveTreeNode;
export let root: PerspectiveTreeNode; export let root: PerspectiveTreeNode;
export let tempRoot: PerspectiveTreeNode;
export let config: PerspectiveConfig; export let config: PerspectiveConfig;
export let setConfig: ChangePerspectiveConfigFunc; export let setConfig: ChangePerspectiveConfigFunc;
@@ -25,12 +26,13 @@
root, root,
config, config,
setConfig, setConfig,
designerId: node?.designerId,
}); });
} }
</script> </script>
<div class="row" use:contextMenu={createMenu}> <div class="row" use:contextMenu={createMenu}>
<span class="expandColumnIcon" style={`margin-right: ${5 + node.level * 10}px`}> <span class="expandColumnIcon" style={`margin-right: ${5 + (node.level - (tempRoot?.level ?? 0)) * 10}px`}>
<FontIcon <FontIcon
icon={node.isExpandable ? plusExpandIcon(node.isExpanded) : 'icon invisible-box'} icon={node.isExpandable ? plusExpandIcon(node.isExpanded) : 'icon invisible-box'}
on:click={() => { on:click={() => {
@@ -74,7 +76,7 @@
<span>{node.title}</span> <span>{node.title}</span>
<SortOrderIcon order={node.sortOrder} orderIndex={node.sortOrderIndex} /> <SortOrderIcon order={node.sortOrder} orderIndex={node.sortOrderIndex} />
{#if node.getFilter()} {#if node.getFilter()}
<FontIcon icon="img filter" /> <FontIcon icon="img filter" />
{/if} {/if}

View File

@@ -181,6 +181,7 @@
node: column.dataNode, node: column.dataNode,
root, root,
setConfig, setConfig,
designerId: null,
}) })
); );
td.classList.add('highlight'); td.classList.add('highlight');

View File

@@ -10,7 +10,8 @@
import PerspectiveNodeRow from './PerspectiveNodeRow.svelte'; import PerspectiveNodeRow from './PerspectiveNodeRow.svelte';
export let root; export let root: PerspectiveTreeNode;
export let tempRoot: PerspectiveTreeNode;
export let config: PerspectiveConfig; export let config: PerspectiveConfig;
export let setConfig: ChangePerspectiveConfigFunc; export let setConfig: ChangePerspectiveConfigFunc;
export let conid; export let conid;
@@ -37,6 +38,6 @@
} }
</script> </script>
{#each getFlatColumns(root, filter) as node} {#each getFlatColumns(tempRoot ?? root, filter) as node}
<PerspectiveNodeRow {node} {config} {setConfig} {root} {conid} {database} /> <PerspectiveNodeRow {node} {config} {setConfig} {root} {tempRoot} {conid} {database} />
{/each} {/each}

View File

@@ -31,6 +31,7 @@
PerspectiveConfig, PerspectiveConfig,
PerspectiveDataProvider, PerspectiveDataProvider,
PerspectiveTableNode, PerspectiveTableNode,
PerspectiveTreeNode,
processPerspectiveDefaultColunns, processPerspectiveDefaultColunns,
shouldProcessPerspectiveDefaultColunns, shouldProcessPerspectiveDefaultColunns,
} from 'dbgate-datalib'; } from 'dbgate-datalib';
@@ -60,6 +61,10 @@
import { useMultipleDatabaseInfo } from '../utility/useMultipleDatabaseInfo'; import { useMultipleDatabaseInfo } from '../utility/useMultipleDatabaseInfo';
import VerticalSplitter from '../elements/VerticalSplitter.svelte'; import VerticalSplitter from '../elements/VerticalSplitter.svelte';
import PerspectiveDesigner from './PerspectiveDesigner.svelte'; import PerspectiveDesigner from './PerspectiveDesigner.svelte';
import { tick } from 'svelte';
import { sleep } from '../utility/common';
import FontIcon from '../icons/FontIcon.svelte';
import InlineButton from '../buttons/InlineButton.svelte';
const dbg = debug('dbgate:PerspectiveView'); const dbg = debug('dbgate:PerspectiveView');
@@ -69,6 +74,9 @@
export let config: PerspectiveConfig; export let config: PerspectiveConfig;
export let setConfig: ChangePerspectiveConfigFunc; export let setConfig: ChangePerspectiveConfigFunc;
let tempRootDesignerId: string = null;
export let loadedCounts; export let loadedCounts;
export let cache; export let cache;
@@ -140,6 +148,7 @@
config.rootDesignerId config.rootDesignerId
) )
: null; : null;
$: tempRoot = root?.findNodeByDesignerId(tempRootDesignerId);
$: { $: {
if (shouldProcessPerspectiveDefaultColunns(config, $dbInfos, conid, database)) { if (shouldProcessPerspectiveDefaultColunns(config, $dbInfos, conid, database)) {
@@ -155,6 +164,20 @@
<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%'}>
{#if tempRoot && tempRoot != root}
<div class="temp-root">
<div>
<FontIcon icon="img table" />
{tempRoot.title}
</div>
<InlineButton
on:click={() => {
tempRootDesignerId = tempRoot?.parentNode?.designerId;
}}>Go up</InlineButton
>
</div>
{/if}
<SearchBoxWrapper> <SearchBoxWrapper>
<SearchInput placeholder="Search column or table" bind:value={filter} /> <SearchInput placeholder="Search column or table" bind:value={filter} />
<CloseSearchButton bind:filter /> <CloseSearchButton bind:filter />
@@ -162,7 +185,7 @@
<ManagerInnerContainer width={managerSize}> <ManagerInnerContainer width={managerSize}>
{#if root} {#if root}
<PerspectiveTree {root} {config} {setConfig} {conid} {database} {filter} /> <PerspectiveTree {root} {tempRoot} {config} {setConfig} {conid} {database} {filter} />
{/if} {/if}
</ManagerInnerContainer> </ManagerInnerContainer>
</WidgetColumnBarItem> </WidgetColumnBarItem>
@@ -176,7 +199,19 @@
<svelte:fragment slot="2"> <svelte:fragment slot="2">
<VerticalSplitter allowCollapseChild1 allowCollapseChild2> <VerticalSplitter allowCollapseChild1 allowCollapseChild2>
<svelte:fragment slot="1"> <svelte:fragment slot="1">
<PerspectiveDesigner {config} {conid} {database} {setConfig} dbInfos={$dbInfos} {root} /> <PerspectiveDesigner
{config}
{conid}
{database}
{setConfig}
dbInfos={$dbInfos}
{root}
onClickTableHeader={designerId => {
sleep(100).then(() => {
tempRootDesignerId = designerId;
});
}}
/>
</svelte:fragment> </svelte:fragment>
<svelte:fragment slot="2"> <svelte:fragment slot="2">
<PerspectiveTable {root} {loadedCounts} {config} {setConfig} {conid} {database} /> <PerspectiveTable {root} {loadedCounts} {config} {setConfig} {conid} {database} />
@@ -191,4 +226,13 @@
flex: 1; flex: 1;
background-color: var(--theme-bg-0); background-color: var(--theme-bg-0);
} }
.temp-root {
border: 1px solid var(--theme-border);
background-color: var(--theme-bg-1);
display: flex;
justify-content: space-between;
align-items: center;
padding-left: 2px;
}
</style> </style>