perspectives:add to filter ctx menu

This commit is contained in:
Jan Prochazka
2022-08-04 08:26:35 +02:00
parent 9051ba2ee1
commit 97dc92e413
6 changed files with 53 additions and 27 deletions

View File

@@ -21,6 +21,7 @@ export interface PerspectiveCustomJoinConfig {
export interface PerspectiveFilterColumnInfo { export interface PerspectiveFilterColumnInfo {
columnName: string; columnName: string;
filterType: string; filterType: string;
tableName: string;
} }
export interface PerspectiveConfig extends PerspectiveConfigColumns { export interface PerspectiveConfig extends PerspectiveConfigColumns {
filters: { [uniqueName: string]: string }; filters: { [uniqueName: string]: string };

View File

@@ -5,6 +5,7 @@ import {
PerspectiveConfig, PerspectiveConfig,
PerspectiveConfigColumns, PerspectiveConfigColumns,
PerspectiveCustomJoinConfig, PerspectiveCustomJoinConfig,
PerspectiveFilterColumnInfo,
} from './PerspectiveConfig'; } from './PerspectiveConfig';
import _isEqual from 'lodash/isEqual'; import _isEqual from 'lodash/isEqual';
import _cloneDeep from 'lodash/cloneDeep'; import _cloneDeep from 'lodash/cloneDeep';
@@ -152,25 +153,25 @@ export abstract class PerspectiveTreeNode {
} }
} }
setFilter(value) { // setFilter(value) {
this.setConfig( // this.setConfig(
cfg => ({ // cfg => ({
...cfg, // ...cfg,
filters: { // filters: {
...cfg.filters, // ...cfg.filters,
[this.uniqueName]: value, // [this.uniqueName]: value,
}, // },
filterInfos: { // filterInfos: {
...cfg.filterInfos, // ...cfg.filterInfos,
[this.uniqueName]: { // [this.uniqueName]: {
columnName: this.columnName, // columnName: this.columnName,
filterType: this.filterType, // filterType: this.filterType,
}, // },
}, // },
}), // }),
true // true
); // );
} // }
getFilter() { getFilter() {
return this.config.filters[this.uniqueName]; return this.config.filters[this.uniqueName];
@@ -232,6 +233,10 @@ export abstract class PerspectiveTreeNode {
getBaseTableFromThis() { getBaseTableFromThis() {
return null; return null;
} }
get filterInfo(): PerspectiveFilterColumnInfo {
return null;
}
} }
export class PerspectiveTableColumnNode extends PerspectiveTreeNode { export class PerspectiveTableColumnNode extends PerspectiveTreeNode {
@@ -344,6 +349,14 @@ export class PerspectiveTableColumnNode extends PerspectiveTreeNode {
return this.refTable; return this.refTable;
} }
get filterInfo(): PerspectiveFilterColumnInfo {
return {
columnName: this.columnName,
filterType: this.filterType,
tableName: this.column.pureName,
};
}
parseFilterCondition() { parseFilterCondition() {
const filter = this.getFilter(); const filter = this.getFilter();
if (!filter) return null; if (!filter) return null;

View File

@@ -16,10 +16,9 @@
<ManagerInnerContainer width={managerSize}> <ManagerInnerContainer width={managerSize}>
{#each allFilterNames as uniqueName} {#each allFilterNames as uniqueName}
<PerspectiveFiltersColumn <PerspectiveFiltersColumn
columnName={config.filterInfos[uniqueName].columnName} filterInfo={config.filterInfos[uniqueName]}
{uniqueName} {uniqueName}
filter={config.filters[uniqueName]} filter={config.filters[uniqueName]}
filterType={config.filterInfos[uniqueName].filterType}
onSetFilter={value => onSetFilter={value =>
setConfig(cfg => ({ setConfig(cfg => ({
...cfg, ...cfg,

View File

@@ -5,20 +5,21 @@
import InlineButton from '../buttons/InlineButton.svelte'; import InlineButton from '../buttons/InlineButton.svelte';
import FontIcon from '../icons/FontIcon.svelte'; import FontIcon from '../icons/FontIcon.svelte';
import { getFilterType } from 'dbgate-filterparser'; import { getFilterType } from 'dbgate-filterparser';
import { PerspectiveFilterColumnInfo } from 'dbgate-datalib';
export let filterInfo: PerspectiveFilterColumnInfo;
export let filter; export let filter;
export let onSetFilter; export let onSetFilter;
export let onRemoveFilter; export let onRemoveFilter;
export let filterType;
export let columnName;
</script> </script>
<div class="m-1"> <div class="m-1">
<div class="space-between"> <div class="space-between">
{columnName} {filterInfo.columnName} ({filterInfo.tableName})
<InlineButton square narrow on:click={onRemoveFilter}> <InlineButton square narrow on:click={onRemoveFilter}>
<FontIcon icon="icon close" /> <FontIcon icon="icon close" />
</InlineButton> </InlineButton>
</div> </div>
<DataFilterControl {filterType} {filter} setFilter={onSetFilter} /> <DataFilterControl filterType={filterInfo.filterType} {filter} setFilter={onSetFilter} />
</div> </div>

View File

@@ -17,7 +17,19 @@
function createMenu() { function createMenu() {
const customJoin = node.customJoinConfig; const customJoin = node.customJoinConfig;
const filterInfo = node.filterInfo;
return [ return [
filterInfo && {
text: 'Add to filter',
onClick: () =>
setConfig(cfg => ({
...cfg,
filterInfos: {
...cfg.filterInfos,
[node.uniqueName]: filterInfo,
},
})),
},
customJoin && { customJoin && {
text: 'Remove custom join', text: 'Remove custom join',
onClick: () => onClick: () =>

View File

@@ -282,7 +282,7 @@
{/each} {/each}
</tr> </tr>
{/each} {/each}
<tr> <!-- <tr>
{#each display.columns as column} {#each display.columns as column}
<th class="filter"> <th class="filter">
<DataFilterControl <DataFilterControl
@@ -293,7 +293,7 @@
/> />
</th> </th>
{/each} {/each}
</tr> </tr> -->
</thead> </thead>
<tbody> <tbody>
{#each display.rows as row} {#each display.rows as row}