perspective filters supports lookup

This commit is contained in:
Jan Prochazka
2022-08-06 13:24:51 +02:00
parent ae6c486db5
commit c6dbb31748
8 changed files with 47 additions and 9 deletions

View File

@@ -1,3 +1,5 @@
import { ForeignKeyInfo } from "dbgate-types";
export interface PerspectiveConfigColumns { export interface PerspectiveConfigColumns {
expandedColumns: string[]; expandedColumns: string[];
checkedColumns: string[]; checkedColumns: string[];
@@ -21,7 +23,9 @@ export interface PerspectiveCustomJoinConfig {
export interface PerspectiveFilterColumnInfo { export interface PerspectiveFilterColumnInfo {
columnName: string; columnName: string;
filterType: string; filterType: string;
tableName: string; pureName: string;
schemaName: string;
foreignKey: ForeignKeyInfo;
} }
export interface PerspectiveConfig extends PerspectiveConfigColumns { export interface PerspectiveConfig extends PerspectiveConfigColumns {
filters: { [uniqueName: string]: string }; filters: { [uniqueName: string]: string };

View File

@@ -353,7 +353,9 @@ export class PerspectiveTableColumnNode extends PerspectiveTreeNode {
return { return {
columnName: this.columnName, columnName: this.columnName,
filterType: this.filterType, filterType: this.filterType,
tableName: this.column.pureName, pureName: this.column.pureName,
schemaName: this.column.schemaName,
foreignKey: this.foreignKey,
}; };
} }

View File

@@ -3,7 +3,7 @@ import moment from 'moment';
export type FilterMultipleValuesMode = 'is' | 'is_not' | 'contains' | 'begins' | 'ends'; export type FilterMultipleValuesMode = 'is' | 'is_not' | 'contains' | 'begins' | 'ends';
export function getFilterValueExpression(value, dataType) { export function getFilterValueExpression(value, dataType?) {
if (value == null) return 'NULL'; if (value == null) return 'NULL';
if (isTypeDateTime(dataType)) return moment(value).format('YYYY-MM-DD HH:mm:ss'); if (isTypeDateTime(dataType)) return moment(value).format('YYYY-MM-DD HH:mm:ss');
if (value === true) return 'TRUE'; if (value === true) return 'TRUE';

View File

@@ -1,6 +1,6 @@
<script lang="ts"> <script lang="ts">
export let width; export let width;
export let isFlex; export let isFlex = false;
</script> </script>
<div style={`max-width: ${width}px`} class:isFlex> <div style={`max-width: ${width}px`} class:isFlex>

View File

@@ -4,13 +4,17 @@
import _ from 'lodash'; import _ from 'lodash';
import ManagerInnerContainer from '../elements/ManagerInnerContainer.svelte'; import ManagerInnerContainer from '../elements/ManagerInnerContainer.svelte';
import FontIcon from '../icons/FontIcon.svelte'; import FontIcon from '../icons/FontIcon.svelte';
import PerspectiveFiltersColumn from './PerspectiveFiltersColumn.svelte'; import PerspectiveFiltersColumn from './PerspectiveFiltersColumn.svelte';
export let managerSize; export let managerSize;
export let config: PerspectiveConfig; export let config: PerspectiveConfig;
export let setConfig: ChangePerspectiveConfigFunc; export let setConfig: ChangePerspectiveConfigFunc;
export let conid;
export let database;
export let driver;
$: allFilterNames = _.keys(config.filterInfos || {}); $: allFilterNames = _.keys(config.filterInfos || {});
</script> </script>
@@ -25,6 +29,9 @@ import FontIcon from '../icons/FontIcon.svelte';
<PerspectiveFiltersColumn <PerspectiveFiltersColumn
filterInfo={config.filterInfos[uniqueName]} filterInfo={config.filterInfos[uniqueName]}
{uniqueName} {uniqueName}
{conid}
{database}
{driver}
filter={config.filters[uniqueName]} filter={config.filters[uniqueName]}
onSetFilter={value => onSetFilter={value =>
setConfig(cfg => ({ setConfig(cfg => ({

View File

@@ -4,22 +4,39 @@
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 { getFilterType } from 'dbgate-filterparser'; import { getFilterType, getFilterValueExpression } from 'dbgate-filterparser';
import { PerspectiveFilterColumnInfo } from 'dbgate-datalib'; import { PerspectiveFilterColumnInfo } from 'dbgate-datalib';
import { showModal } from '../modals/modalTools';
import DictionaryLookupModal from '../modals/DictionaryLookupModal.svelte';
import ValueLookupModal from '../modals/ValueLookupModal.svelte';
export let filterInfo: PerspectiveFilterColumnInfo; export let filterInfo: PerspectiveFilterColumnInfo;
export let filter; export let filter;
export let onSetFilter; export let onSetFilter;
export let onRemoveFilter; export let onRemoveFilter;
export let conid;
export let database;
export let driver;
</script> </script>
<div class="m-1"> <div class="m-1">
<div class="space-between"> <div class="space-between">
{filterInfo.columnName} ({filterInfo.tableName}) {filterInfo.columnName} ({filterInfo.pureName})
<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={filterInfo.filterType} {filter} setFilter={onSetFilter} /> <DataFilterControl
filterType={filterInfo.filterType}
{filter}
setFilter={onSetFilter}
{conid}
{database}
{driver}
columnName={filterInfo.columnName}
pureName={filterInfo.pureName}
foreignKey={filterInfo.foreignKey}
/>
</div> </div>

View File

@@ -58,6 +58,7 @@
export let database; export let database;
export let schemaName; export let schemaName;
export let pureName; export let pureName;
export let driver;
export let config: PerspectiveConfig; export let config: PerspectiveConfig;
export let setConfig: ChangePerspectiveConfigFunc; export let setConfig: ChangePerspectiveConfigFunc;
@@ -118,7 +119,7 @@
</WidgetColumnBarItem> </WidgetColumnBarItem>
<WidgetColumnBarItem title="Filters" name="tableFilters"> <WidgetColumnBarItem title="Filters" name="tableFilters">
<PerspectiveFilters {managerSize} {config} {setConfig} /> <PerspectiveFilters {managerSize} {config} {setConfig} {conid} {database} {driver} />
</WidgetColumnBarItem> </WidgetColumnBarItem>
</WidgetColumnBar> </WidgetColumnBar>
</div> </div>

View File

@@ -26,6 +26,9 @@
import createActivator, { getActiveComponent } from '../utility/createActivator'; import createActivator, { getActiveComponent } from '../utility/createActivator';
import ToolStripContainer from '../buttons/ToolStripContainer.svelte'; import ToolStripContainer from '../buttons/ToolStripContainer.svelte';
import ToolStripCommandButton from '../buttons/ToolStripCommandButton.svelte'; import ToolStripCommandButton from '../buttons/ToolStripCommandButton.svelte';
import { findEngineDriver } from 'dbgate-tools';
import { useConnectionInfo } from '../utility/metadataLoaders';
import { extensions } from '../stores';
export let tabid; export let tabid;
export let conid; export let conid;
@@ -35,6 +38,9 @@
export const activator = createActivator('PerspectiveTab', true); export const activator = createActivator('PerspectiveTab', true);
$: connection = useConnectionInfo({ conid });
$: driver = findEngineDriver($connection, $extensions);
const config = usePerspectiveConfig(tabid); const config = usePerspectiveConfig(tabid);
const cache = new PerspectiveCache(); const cache = new PerspectiveCache();
const loadedCounts = writable({}); const loadedCounts = writable({});
@@ -51,6 +57,7 @@
{database} {database}
{schemaName} {schemaName}
{pureName} {pureName}
{driver}
config={$config} config={$config}
setConfig={(value, reload) => { setConfig={(value, reload) => {
if (reload) { if (reload) {