mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-30 15:03:57 +00:00
form view filters
This commit is contained in:
@@ -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':
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
@@ -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}
|
|
||||||
|
|||||||
@@ -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> -->
|
||||||
|
|||||||
Reference in New Issue
Block a user