mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-30 12:43:58 +00:00
Merge pull request #1230 from dbgate/feature/disable-filter
Feature/disable filter
This commit is contained in:
@@ -31,6 +31,8 @@ export interface GridConfig extends GridConfigColumns {
|
|||||||
formFilterColumns: string[];
|
formFilterColumns: string[];
|
||||||
multiColumnFilter?: string;
|
multiColumnFilter?: string;
|
||||||
searchInColumns?: string;
|
searchInColumns?: string;
|
||||||
|
disabledFilterColumns: string[];
|
||||||
|
disabledMultiColumnFilter?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface GridCache {
|
export interface GridCache {
|
||||||
@@ -48,6 +50,7 @@ export function createGridConfig(): GridConfig {
|
|||||||
focusedColumns: null,
|
focusedColumns: null,
|
||||||
grouping: {},
|
grouping: {},
|
||||||
formFilterColumns: [],
|
formFilterColumns: [],
|
||||||
|
disabledFilterColumns: [],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -233,6 +233,7 @@ export abstract class GridDisplay {
|
|||||||
if (!filter) continue;
|
if (!filter) continue;
|
||||||
const column = displayedColumnInfo[uniqueName];
|
const column = displayedColumnInfo[uniqueName];
|
||||||
if (!column) continue;
|
if (!column) continue;
|
||||||
|
if (this.isFilterDisabled(uniqueName)) continue;
|
||||||
try {
|
try {
|
||||||
const condition = parseFilter(
|
const condition = parseFilter(
|
||||||
filter,
|
filter,
|
||||||
@@ -259,7 +260,7 @@ export abstract class GridDisplay {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.baseTableOrView && this.config.multiColumnFilter) {
|
if (this.baseTableOrView && this.config.multiColumnFilter && !this.isMultiColumnFilterDisabled()) {
|
||||||
const orCondition: CompoudCondition = {
|
const orCondition: CompoudCondition = {
|
||||||
conditionType: 'or',
|
conditionType: 'or',
|
||||||
conditions: [],
|
conditions: [],
|
||||||
@@ -416,6 +417,7 @@ export abstract class GridDisplay {
|
|||||||
[uniqueName]: value,
|
[uniqueName]: value,
|
||||||
},
|
},
|
||||||
formViewRecordNumber: 0,
|
formViewRecordNumber: 0,
|
||||||
|
disabledFilterColumns: cfg.disabledFilterColumns.filter(x => x != uniqueName),
|
||||||
}));
|
}));
|
||||||
this.reload();
|
this.reload();
|
||||||
}
|
}
|
||||||
@@ -425,6 +427,7 @@ export abstract class GridDisplay {
|
|||||||
...cfg,
|
...cfg,
|
||||||
multiColumnFilter: value,
|
multiColumnFilter: value,
|
||||||
formViewRecordNumber: 0,
|
formViewRecordNumber: 0,
|
||||||
|
disabledMultiColumnFilter: false,
|
||||||
}));
|
}));
|
||||||
this.reload();
|
this.reload();
|
||||||
}
|
}
|
||||||
@@ -448,6 +451,7 @@ export abstract class GridDisplay {
|
|||||||
...cfg,
|
...cfg,
|
||||||
filters: _.omit(cfg.filters, [uniqueName]),
|
filters: _.omit(cfg.filters, [uniqueName]),
|
||||||
formFilterColumns: (cfg.formFilterColumns || []).filter(x => x != uniqueName),
|
formFilterColumns: (cfg.formFilterColumns || []).filter(x => x != uniqueName),
|
||||||
|
disabledFilterColumns: (cfg.disabledFilterColumns).filter(x => x != uniqueName),
|
||||||
}));
|
}));
|
||||||
this.reload();
|
this.reload();
|
||||||
}
|
}
|
||||||
@@ -463,6 +467,37 @@ export abstract class GridDisplay {
|
|||||||
this.reload();
|
this.reload();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toggleFilterEnabled(uniqueName) {
|
||||||
|
if (this.isFilterDisabled(uniqueName)) {
|
||||||
|
this.setConfig(cfg => ({
|
||||||
|
...cfg,
|
||||||
|
disabledFilterColumns: cfg.disabledFilterColumns.filter(x => x != uniqueName),
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
this.setConfig(cfg => ({
|
||||||
|
...cfg,
|
||||||
|
disabledFilterColumns: [...cfg.disabledFilterColumns, uniqueName],
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
this.reload();
|
||||||
|
}
|
||||||
|
|
||||||
|
isFilterDisabled(uniqueName: string) {
|
||||||
|
return this.config.disabledFilterColumns.includes(uniqueName);
|
||||||
|
}
|
||||||
|
|
||||||
|
toggleMultiColumnFilterEnabled() {
|
||||||
|
this.setConfig(cfg => ({
|
||||||
|
...cfg,
|
||||||
|
disabledMultiColumnFilter: !cfg.disabledMultiColumnFilter,
|
||||||
|
}));
|
||||||
|
this.reload();
|
||||||
|
}
|
||||||
|
|
||||||
|
isMultiColumnFilterDisabled() {
|
||||||
|
return this.config.disabledMultiColumnFilter;
|
||||||
|
}
|
||||||
|
|
||||||
setSort(uniqueName, order) {
|
setSort(uniqueName, order) {
|
||||||
this.setConfig(cfg => ({
|
this.setConfig(cfg => ({
|
||||||
...cfg,
|
...cfg,
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
export let onCustomCommand = null;
|
export let onCustomCommand = null;
|
||||||
export let customCommandTooltip = null;
|
export let customCommandTooltip = null;
|
||||||
export let formatterFunction = null;
|
export let formatterFunction = null;
|
||||||
|
export let filterDisabled = false;
|
||||||
|
|
||||||
export let pureName = null;
|
export let pureName = null;
|
||||||
export let schemaName = null;
|
export let schemaName = null;
|
||||||
@@ -47,6 +48,7 @@
|
|||||||
let isError;
|
let isError;
|
||||||
let isOk;
|
let isOk;
|
||||||
let domInput;
|
let domInput;
|
||||||
|
let isDisabled;
|
||||||
|
|
||||||
$: if (onGetReference && domInput) onGetReference(domInput);
|
$: if (onGetReference && domInput) onGetReference(domInput);
|
||||||
|
|
||||||
@@ -257,6 +259,7 @@
|
|||||||
try {
|
try {
|
||||||
isOk = false;
|
isOk = false;
|
||||||
isError = false;
|
isError = false;
|
||||||
|
isDisabled = filterDisabled;
|
||||||
if (value) {
|
if (value) {
|
||||||
parseFilter(value, filterBehaviour);
|
parseFilter(value, filterBehaviour);
|
||||||
isOk = true;
|
isOk = true;
|
||||||
@@ -287,6 +290,7 @@
|
|||||||
on:paste={handlePaste}
|
on:paste={handlePaste}
|
||||||
class:isError
|
class:isError
|
||||||
class:isOk
|
class:isOk
|
||||||
|
class:isDisabled
|
||||||
{placeholder}
|
{placeholder}
|
||||||
data-testid={`DataFilterControl_input_${uniqueName}`}
|
data-testid={`DataFilterControl_input_${uniqueName}`}
|
||||||
/>
|
/>
|
||||||
@@ -345,4 +349,8 @@
|
|||||||
input.isOk {
|
input.isOk {
|
||||||
background-color: var(--theme-bg-green);
|
background-color: var(--theme-bg-green);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
input.isDisabled {
|
||||||
|
text-decoration: line-through;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -2059,6 +2059,7 @@
|
|||||||
selectTopmostCell(col.uniqueName);
|
selectTopmostCell(col.uniqueName);
|
||||||
}}
|
}}
|
||||||
dataType={col.dataType}
|
dataType={col.dataType}
|
||||||
|
filterDisabled={display.isFilterDisabled(col.uniqueName)}
|
||||||
/>
|
/>
|
||||||
</td>
|
</td>
|
||||||
{/each}
|
{/each}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
import ColumnLabel from '../elements/ColumnLabel.svelte';
|
import ColumnLabel from '../elements/ColumnLabel.svelte';
|
||||||
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 CheckboxField from '../forms/CheckboxField.svelte';
|
||||||
|
|
||||||
export let uniqueName;
|
export let uniqueName;
|
||||||
export let display;
|
export let display;
|
||||||
@@ -42,6 +43,13 @@
|
|||||||
{:else}
|
{:else}
|
||||||
{uniqueName}
|
{uniqueName}
|
||||||
{/if}
|
{/if}
|
||||||
|
<div class="flex items-center gap-2">
|
||||||
|
<CheckboxField
|
||||||
|
checked={!display.isFilterDisabled(uniqueName)}
|
||||||
|
on:change={() => {
|
||||||
|
display.toggleFilterEnabled(uniqueName);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
<InlineButton
|
<InlineButton
|
||||||
square
|
square
|
||||||
narrow
|
narrow
|
||||||
@@ -52,6 +60,7 @@
|
|||||||
<FontIcon icon="icon close" />
|
<FontIcon icon="icon close" />
|
||||||
</InlineButton>
|
</InlineButton>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
<DataFilterControl
|
<DataFilterControl
|
||||||
filterBehaviour={computeFilterBehavoir(column, display, isDynamicStructure)}
|
filterBehaviour={computeFilterBehavoir(column, display, isDynamicStructure)}
|
||||||
filter={filters[uniqueName]}
|
filter={filters[uniqueName]}
|
||||||
@@ -64,6 +73,7 @@
|
|||||||
columnName={column ? (column.uniquePath.length == 1 ? column.uniquePath[0] : null) : uniqueName}
|
columnName={column ? (column.uniquePath.length == 1 ? column.uniquePath[0] : null) : uniqueName}
|
||||||
foreignKey={column?.foreignKey}
|
foreignKey={column?.foreignKey}
|
||||||
dataType={column?.dataType}
|
dataType={column?.dataType}
|
||||||
|
filterDisabled={display.isFilterDisabled(uniqueName)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
import keycodes from '../utility/keycodes';
|
import keycodes from '../utility/keycodes';
|
||||||
import FormViewFilterColumn from './FormViewFilterColumn.svelte';
|
import FormViewFilterColumn from './FormViewFilterColumn.svelte';
|
||||||
import { stringFilterBehaviour } from 'dbgate-tools';
|
import { stringFilterBehaviour } from 'dbgate-tools';
|
||||||
|
import CheckboxField from '../forms/CheckboxField.svelte';
|
||||||
// import PrimaryKeyFilterEditor from './PrimaryKeyFilterEditor.svelte';
|
// import PrimaryKeyFilterEditor from './PrimaryKeyFilterEditor.svelte';
|
||||||
|
|
||||||
export let managerSize;
|
export let managerSize;
|
||||||
@@ -64,6 +65,13 @@
|
|||||||
<div class="space-between">
|
<div class="space-between">
|
||||||
<span>Multi column filter</span>
|
<span>Multi column filter</span>
|
||||||
{#if multiColumnFilter}
|
{#if multiColumnFilter}
|
||||||
|
<div class="flex items-center gap-2">
|
||||||
|
<CheckboxField
|
||||||
|
checked={!display.isMultiColumnFilterDisabled()}
|
||||||
|
on:change={() => {
|
||||||
|
display.toggleMultiColumnFilterEnabled();
|
||||||
|
}}
|
||||||
|
/>
|
||||||
<InlineButton
|
<InlineButton
|
||||||
square
|
square
|
||||||
narrow
|
narrow
|
||||||
@@ -73,6 +81,7 @@
|
|||||||
>
|
>
|
||||||
<FontIcon icon="icon close" />
|
<FontIcon icon="icon close" />
|
||||||
</InlineButton>
|
</InlineButton>
|
||||||
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -85,6 +94,7 @@
|
|||||||
{database}
|
{database}
|
||||||
{schemaName}
|
{schemaName}
|
||||||
{pureName}
|
{pureName}
|
||||||
|
filterDisabled={display.isMultiColumnFilterDisabled()}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
Reference in New Issue
Block a user