form view filters

This commit is contained in:
Jan Prochazka
2023-01-22 18:03:29 +01:00
parent 268c010a22
commit 98b26bb119
5 changed files with 61 additions and 35 deletions

View File

@@ -330,6 +330,7 @@ export abstract class GridDisplay {
...cfg.filters, ...cfg.filters,
[uniqueName]: value, [uniqueName]: value,
}, },
formViewRecordNumber: 0,
})); }));
this.reload(); this.reload();
} }
@@ -762,7 +763,7 @@ export abstract class GridDisplay {
case 'next': case 'next':
this.setConfig(cfg => ({ this.setConfig(cfg => ({
...cfg, ...cfg,
formViewRecordNumber: Math.max(Math.min((cfg.formViewRecordNumber || 0) + 1, allRowCount - 1), 0), formViewRecordNumber: Math.max((cfg.formViewRecordNumber || 0) + 1, 0),
})); }));
break; break;
case 'end': case 'end':

View File

@@ -155,6 +155,8 @@
</script> </script>
<script lang="ts"> <script lang="ts">
import { getFilterValueExpression } from 'dbgate-filterparser';
import { filterName } from 'dbgate-tools'; import { filterName } from 'dbgate-tools';
import _ from 'lodash'; import _ from 'lodash';
@@ -223,7 +225,14 @@
$: rowCountInfo = getRowCountInfo(allRowCount); $: rowCountInfo = getRowCountInfo(allRowCount);
function getRowCountInfo(allRowCount) { function getRowCountInfo(allRowCount) {
if (rowData == null) return 'No data'; if (rowData == null) {
if (allRowCount != null) {
return `Out of bounds: ${(
(display.config.formViewRecordNumber || 0) + 1
).toLocaleString()} / ${allRowCount.toLocaleString()}`;
}
return 'No data';
}
if (allRowCount == null || display == null) return 'Loading row count...'; if (allRowCount == null || display == null) return 'Loading row count...';
return `Row: ${( return `Row: ${(
(display.config.formViewRecordNumber || 0) + 1 (display.config.formViewRecordNumber || 0) + 1
@@ -274,11 +283,33 @@
} }
export function filterSelectedValue() { export function filterSelectedValue() {
// display.filterCellValue(getCellColumn(currentCell), rowData); const column = getCellColumn(currentCell);
if (!column || !rowData) return;
const value = rowData[column.uniqueName];
const expr = getFilterValueExpression(value, column.dataType);
if (expr) {
setConfig(cfg => ({
...cfg,
formViewRecordNumber: 0,
filters: {
...cfg.filters,
[column.uniqueName]: expr,
},
addedColumns: cfg.addedColumns.includes(column.uniqueName)
? cfg.addedColumns
: [...cfg.addedColumns, column.uniqueName],
}));
display.reload();
}
} }
export function addToFilter() { export function addToFilter() {
// display.addFilterColumn(getCellColumn(currentCell)); const column = getCellColumn(currentCell);
if (!column) return;
setConfig(cfg => ({
...cfg,
formFilterColumns: [...(cfg.formFilterColumns || []), column.uniqueName],
}));
} }
export const activator = createActivator('FormView', false); export const activator = createActivator('FormView', false);

View File

@@ -8,7 +8,7 @@
import FontIcon from '../icons/FontIcon.svelte'; import FontIcon from '../icons/FontIcon.svelte';
export let column; export let column;
export let formDisplay; export let display;
export let filters; export let filters;
export let driver; export let driver;
@@ -26,7 +26,7 @@
square square
narrow narrow
on:click={() => { on:click={() => {
formDisplay.removeFilter(column.uniqueName); display.removeFilter(column.uniqueName);
}} }}
> >
<FontIcon icon="icon close" /> <FontIcon icon="icon close" />
@@ -35,7 +35,7 @@
<DataFilterControl <DataFilterControl
filterType={getFilterType(column.dataType)} filterType={getFilterType(column.dataType)}
filter={filters[column.uniqueName]} filter={filters[column.uniqueName]}
setFilter={value => formDisplay.setFilter(column.uniqueName, value)} setFilter={value => display.setFilter(column.uniqueName, value)}
{driver} {driver}
{conid} {conid}
{database} {database}

View File

@@ -4,10 +4,10 @@
import ManagerInnerContainer from '../elements/ManagerInnerContainer.svelte'; import ManagerInnerContainer from '../elements/ManagerInnerContainer.svelte';
import keycodes from '../utility/keycodes'; import keycodes from '../utility/keycodes';
import FormViewFilterColumn from './FormViewFilterColumn.svelte'; import FormViewFilterColumn from './FormViewFilterColumn.svelte';
import PrimaryKeyFilterEditor from './PrimaryKeyFilterEditor.svelte'; // import PrimaryKeyFilterEditor from './PrimaryKeyFilterEditor.svelte';
export let managerSize; export let managerSize;
export let formDisplay; export let display;
export let setConfig; export let setConfig;
export let driver; export let driver;
@@ -16,9 +16,9 @@
export let schemaName; export let schemaName;
export let pureName; export let pureName;
$: baseTable = formDisplay?.baseTable; $: baseTable = display?.baseTable;
$: formFilterColumns = formDisplay?.config?.formFilterColumns; $: formFilterColumns = display?.config?.formFilterColumns;
$: filters = formDisplay?.config?.filters; $: filters = display?.config?.filters;
$: allFilterNames = _.union(_.keys(filters || {}), formFilterColumns || []); $: allFilterNames = _.union(_.keys(filters || {}), formFilterColumns || []);
</script> </script>
@@ -28,7 +28,7 @@
<div class="flex"> <div class="flex">
<input <input
type="text" type="text"
value={formDisplay?.config?.formColumnFilterText || ''} value={display?.config?.formColumnFilterText || ''}
on:keydown={e => { on:keydown={e => {
if (e.keyCode == keycodes.escape) { if (e.keyCode == keycodes.escape) {
setConfig(x => ({ setConfig(x => ({
@@ -47,23 +47,17 @@
</div> </div>
</div> </div>
{#if baseTable?.primaryKey} <ManagerInnerContainer width={managerSize}>
<ManagerInnerContainer width={managerSize}> {#each allFilterNames as uniqueName}
{#each baseTable.primaryKey.columns as col} <FormViewFilterColumn
<PrimaryKeyFilterEditor {baseTable} column={col} {formDisplay} /> column={display.formColumns.find(x => x.uniqueName == uniqueName)}
{/each} {display}
{filters}
{#each allFilterNames as uniqueName} {driver}
<FormViewFilterColumn {conid}
column={formDisplay.columns.find(x => x.uniqueName == uniqueName)} {database}
{formDisplay} {schemaName}
{filters} {pureName}
{driver} />
{conid} {/each}
{database} </ManagerInnerContainer>
{schemaName}
{pureName}
/>
{/each}
</ManagerInnerContainer>
{/if}

View File

@@ -1,4 +1,4 @@
<script lang="ts"> <!-- <script lang="ts">
import ColumnLabel from '../elements/ColumnLabel.svelte'; import ColumnLabel from '../elements/ColumnLabel.svelte';
import InlineButton from '../buttons/InlineButton.svelte'; import InlineButton from '../buttons/InlineButton.svelte';
@@ -48,4 +48,4 @@
<div class="flex"> <div class="flex">
<input bind:this={domEditor} type="text" on:blur={applyFilter} on:keydown={handleKeyDown} /> <input bind:this={domEditor} type="text" on:blur={applyFilter} on:keydown={handleKeyDown} />
</div> </div>
</div> </div> -->