mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-30 15:03:57 +00:00
perspectives:add to filter ctx menu
This commit is contained in:
@@ -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 };
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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: () =>
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
Reference in New Issue
Block a user