perspective filter menu

This commit is contained in:
Jan Prochazka
2022-08-28 12:10:53 +02:00
parent f405db7685
commit 2284264a92
4 changed files with 45 additions and 16 deletions

View File

@@ -11,7 +11,12 @@
import Designer from '../designer/Designer.svelte';
import QueryDesignerReference from '../designer/QueryDesignerReference.svelte';
import { addToPerspectiveSort, clearPerspectiveSort, setPerspectiveSort } from './perspectiveMenu';
import {
addToPerspectiveFilter,
addToPerspectiveSort,
clearPerspectiveSort,
setPerspectiveSort,
} from './perspectiveMenu';
export let config: PerspectiveConfig;
export let dbInfos: MultipleDatabaseInfo;
@@ -153,6 +158,11 @@
text: 'Clear sort criteria',
onClick: () => onChange(cfg => clearPerspectiveSort(cfg, designerId)),
},
{ divider: true },
{
text: 'Add to filter',
onClick: () => onChange(cfg => addToPerspectiveFilter(cfg, designerId, column.columnName)),
},
];
},
createReferenceText: reference => (reference.isAutoGenerated ? 'FK' : 'Custom'),
@@ -195,6 +205,9 @@
const orderIndex = sort.length > 1 ? _.findIndex(sort, x => x.columnName == columnName) : -1;
return { order, orderIndex };
},
isColumnFiltered: (designerId, columnName) => {
return !!config.nodes.find(x => x.designerId == designerId)?.filters?.[columnName];
},
}}
referenceComponent={QueryDesignerReference}
value={createDesignerModel(config, dbInfos)}

View File

@@ -74,6 +74,10 @@
<span>{node.title}</span>
<SortOrderIcon order={node.sortOrder} orderIndex={node.sortOrderIndex} />
{#if node.getFilter()}
<FontIcon icon="img filter" />
{/if}
</div>
<style>

View File

@@ -64,6 +64,28 @@ export function clearPerspectiveSort(cfg: PerspectiveConfig, designerId: string)
};
}
export function addToPerspectiveFilter(
cfg: PerspectiveConfig,
designerId: string,
columnName: string,
filterValue: string = ''
) {
return {
...cfg,
nodes: cfg.nodes.map(n =>
n.designerId == designerId
? {
...n,
filters: {
...n.filters,
[columnName]: filterValue,
},
}
: n
),
};
}
export function getPerspectiveNodeMenu(props: PerspectiveNodeMenuProps) {
const { node, conid, database, root, config, setConfig } = props;
const customJoin = node.customJoinConfig;
@@ -120,21 +142,7 @@ export function getPerspectiveNodeMenu(props: PerspectiveNodeMenuProps) {
filterInfo && {
text: 'Add to filter',
onClick: () =>
setConfig(cfg => ({
...cfg,
nodes: cfg.nodes.map(n =>
n.designerId == parentDesignerId
? {
...n,
filters: {
...n.filters,
[columnName]: '',
},
}
: n
),
})),
onClick: () => setConfig(cfg => addToPerspectiveFilter(cfg, parentDesignerId, columnName)),
// setConfig(cfg => ({
// ...cfg,