mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-30 16:13:58 +00:00
SYNC: search in columns - show filtered column in grid
This commit is contained in:
committed by
Diflow
parent
f3ce6ad467
commit
4812519a4c
@@ -31,6 +31,7 @@ export interface GridConfig extends GridConfigColumns {
|
|||||||
formFilterColumns: string[];
|
formFilterColumns: string[];
|
||||||
formColumnFilterText?: string;
|
formColumnFilterText?: string;
|
||||||
multiColumnFilter?: string;
|
multiColumnFilter?: string;
|
||||||
|
searchInColumns?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface GridCache {
|
export interface GridCache {
|
||||||
|
|||||||
@@ -196,9 +196,24 @@ export abstract class GridDisplay {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setSearchInColumns(searchInColumns: string) {
|
||||||
|
this.setConfig(cfg => ({
|
||||||
|
...cfg,
|
||||||
|
searchInColumns,
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
get hiddenColumnIndexes() {
|
get hiddenColumnIndexes() {
|
||||||
// console.log('GridDisplay.hiddenColumn', this.config.hiddenColumns);
|
// console.log('GridDisplay.hiddenColumn', this.config.hiddenColumns);
|
||||||
return (this.config.hiddenColumns || []).map(x => _.findIndex(this.allColumns, y => y.uniqueName == x));
|
const res = (this.config.hiddenColumns || []).map(x => _.findIndex(this.allColumns, y => y.uniqueName == x));
|
||||||
|
if (this.config.searchInColumns) {
|
||||||
|
for (let i = 0; i < this.allColumns.length; i++) {
|
||||||
|
if (!filterName(this.config.searchInColumns, this.allColumns[i].columnName)) {
|
||||||
|
res.push(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _.sortBy(_.uniq(res));
|
||||||
}
|
}
|
||||||
|
|
||||||
isColumnChecked(column: DisplayColumn) {
|
isColumnChecked(column: DisplayColumn) {
|
||||||
|
|||||||
@@ -5,13 +5,18 @@
|
|||||||
|
|
||||||
export let filter;
|
export let filter;
|
||||||
export let showDisabled = false;
|
export let showDisabled = false;
|
||||||
|
export let onClearFilter = null;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if filter || showDisabled}
|
{#if filter || showDisabled}
|
||||||
<InlineButton
|
<InlineButton
|
||||||
on:click
|
on:click
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
filter = '';
|
if (onClearFilter) {
|
||||||
|
onClearFilter();
|
||||||
|
} else {
|
||||||
|
filter = '';
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
title="Clear filter"
|
title="Clear filter"
|
||||||
disabled={!filter}
|
disabled={!filter}
|
||||||
|
|||||||
@@ -28,7 +28,6 @@
|
|||||||
export let changeSetState: { value: ChangeSet } = null;
|
export let changeSetState: { value: ChangeSet } = null;
|
||||||
export let dispatchChangeSet = null;
|
export let dispatchChangeSet = null;
|
||||||
|
|
||||||
let filter;
|
|
||||||
let domFocusField;
|
let domFocusField;
|
||||||
|
|
||||||
let selectedColumns = [];
|
let selectedColumns = [];
|
||||||
@@ -36,7 +35,9 @@
|
|||||||
let dragStartColumnIndex = null;
|
let dragStartColumnIndex = null;
|
||||||
let shiftOriginColumnIndex = null;
|
let shiftOriginColumnIndex = null;
|
||||||
|
|
||||||
$: items = display?.getColumns(filter)?.filter(column => filterName(filter, column.columnName)) || [];
|
$: currentFilter = display?.config?.searchInColumns;
|
||||||
|
|
||||||
|
$: items = display?.getColumns(currentFilter)?.filter(column => filterName(currentFilter, column.columnName)) || [];
|
||||||
|
|
||||||
function selectColumnIndexCore(index, e) {
|
function selectColumnIndexCore(index, e) {
|
||||||
const uniqueName = items[index].uniqueName;
|
const uniqueName = items[index].uniqueName;
|
||||||
@@ -173,8 +174,12 @@
|
|||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
<SearchBoxWrapper>
|
<SearchBoxWrapper>
|
||||||
<SearchInput placeholder="Search columns" bind:value={filter} />
|
<SearchInput
|
||||||
<CloseSearchButton bind:filter />
|
placeholder="Search columns"
|
||||||
|
value={currentFilter}
|
||||||
|
onChange={value => display.setSearchInColumns(value)}
|
||||||
|
/>
|
||||||
|
<CloseSearchButton filter={currentFilter} onClearFilter={() => display.setSearchInColumns('')} />
|
||||||
{#if isDynamicStructure && !isJsonView}
|
{#if isDynamicStructure && !isJsonView}
|
||||||
<InlineButton
|
<InlineButton
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
@@ -235,7 +240,7 @@
|
|||||||
{columnIndex}
|
{columnIndex}
|
||||||
{allowChangeChangeSetStructure}
|
{allowChangeChangeSetStructure}
|
||||||
isSelected={selectedColumns.includes(column.uniqueName) || currentColumnUniqueName == column.uniqueName}
|
isSelected={selectedColumns.includes(column.uniqueName) || currentColumnUniqueName == column.uniqueName}
|
||||||
{filter}
|
filter={currentFilter}
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
if (domFocusField) domFocusField.focus();
|
if (domFocusField) domFocusField.focus();
|
||||||
selectedColumns = [column.uniqueName];
|
selectedColumns = [column.uniqueName];
|
||||||
|
|||||||
@@ -8,12 +8,17 @@
|
|||||||
$: searchValue = value || '';
|
$: searchValue = value || '';
|
||||||
export let isDebounced = false;
|
export let isDebounced = false;
|
||||||
export let onFocusFilteredList = null;
|
export let onFocusFilteredList = null;
|
||||||
|
export let onChange = null;
|
||||||
|
|
||||||
let domInput;
|
let domInput;
|
||||||
|
|
||||||
function handleKeyDown(e) {
|
function handleKeyDown(e) {
|
||||||
if (e.keyCode == keycodes.escape) {
|
if (e.keyCode == keycodes.escape) {
|
||||||
value = '';
|
if (onChange) {
|
||||||
|
onChange('');
|
||||||
|
} else {
|
||||||
|
value = '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (e.keyCode == keycodes.downArrow || e.keyCode == keycodes.pageDown || e.keyCode == keycodes.enter) {
|
if (e.keyCode == keycodes.downArrow || e.keyCode == keycodes.pageDown || e.keyCode == keycodes.enter) {
|
||||||
onFocusFilteredList?.();
|
onFocusFilteredList?.();
|
||||||
@@ -27,7 +32,11 @@
|
|||||||
domInput.focus();
|
domInput.focus();
|
||||||
if (text) {
|
if (text) {
|
||||||
domInput.value = text;
|
domInput.value = text;
|
||||||
value = text;
|
if (onChange) {
|
||||||
|
onChange(text);
|
||||||
|
} else {
|
||||||
|
value = text;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@@ -37,8 +46,12 @@
|
|||||||
{placeholder}
|
{placeholder}
|
||||||
value={searchValue}
|
value={searchValue}
|
||||||
on:input={e => {
|
on:input={e => {
|
||||||
if (isDebounced) debouncedSet(domInput.value);
|
if (onChange) {
|
||||||
else value = domInput.value;
|
onChange(domInput.value);
|
||||||
|
} else {
|
||||||
|
if (isDebounced) debouncedSet(domInput.value);
|
||||||
|
else value = domInput.value;
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
on:keydown={handleKeyDown}
|
on:keydown={handleKeyDown}
|
||||||
bind:this={domInput}
|
bind:this={domInput}
|
||||||
|
|||||||
Reference in New Issue
Block a user