mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-29 18:03:58 +00:00
perspective filters supports lookup
This commit is contained in:
@@ -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 };
|
||||||
|
|||||||
@@ -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,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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 => ({
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user