perspective fixes

This commit is contained in:
Jan Prochazka
2022-10-13 15:01:45 +02:00
parent 225518df3e
commit bf4eb19ef5
2 changed files with 71 additions and 44 deletions

View File

@@ -715,6 +715,7 @@ export class PerspectiveTableColumnNode extends PerspectiveTreeNode {
pureName: this.foreignKey.refTableName, pureName: this.foreignKey.refTableName,
conid: this.databaseConfig.conid, conid: this.databaseConfig.conid,
database: this.databaseConfig.database, database: this.databaseConfig.database,
objectTypeField: this.table.objectTypeField,
}; };
} }
return null; return null;
@@ -743,8 +744,9 @@ export class PerspectivePatternColumnNode extends PerspectiveTreeNode {
refTable: TableInfo; refTable: TableInfo;
constructor( constructor(
public owner: NamedObjectInfo, public table: TableInfo | ViewInfo | CollectionInfo,
public column: PerspectiveDataPatternColumn, public column: PerspectiveDataPatternColumn,
public tableColumn: ColumnInfo,
dbs: MultipleDatabaseInfo, dbs: MultipleDatabaseInfo,
config: PerspectiveConfig, config: PerspectiveConfig,
setConfig: ChangePerspectiveConfigFunc, setConfig: ChangePerspectiveConfigFunc,
@@ -848,10 +850,11 @@ export class PerspectivePatternColumnNode extends PerspectiveTreeNode {
} }
get isSortable() { get isSortable() {
return true; return !this.isChildColumn;
} }
get filterType(): FilterType { get filterType(): FilterType {
if (this.tableColumn) return getFilterType(this.tableColumn.dataType);
return 'mongo'; return 'mongo';
} }
@@ -859,8 +862,9 @@ export class PerspectivePatternColumnNode extends PerspectiveTreeNode {
return this.column.columns.map( return this.column.columns.map(
column => column =>
new PerspectivePatternColumnNode( new PerspectivePatternColumnNode(
this.owner, this.table,
column, column,
this.tableColumn,
this.dbs, this.dbs,
this.config, this.config,
this.setConfig, this.setConfig,
@@ -895,8 +899,8 @@ export class PerspectivePatternColumnNode extends PerspectiveTreeNode {
return { return {
columnName: this.columnName, columnName: this.columnName,
filterType: this.filterType, filterType: this.filterType,
pureName: this.owner.pureName, pureName: this.table.pureName,
schemaName: this.owner.schemaName, schemaName: this.table.schemaName,
foreignKey: this.foreignKey, foreignKey: this.foreignKey,
}; };
} }
@@ -1013,6 +1017,7 @@ export class PerspectiveTableNode extends PerspectiveTreeNode {
pureName: this.table.pureName, pureName: this.table.pureName,
conid: this.databaseConfig.conid, conid: this.databaseConfig.conid,
database: this.databaseConfig.database, database: this.databaseConfig.database,
objectTypeField: this.table.objectTypeField,
}; };
} }
@@ -1309,6 +1314,7 @@ export function getTableChildPerspectiveNodes(
? new PerspectivePatternColumnNode( ? new PerspectivePatternColumnNode(
table, table,
pattern?.columns?.find(x => x.name == col.columnName), pattern?.columns?.find(x => x.name == col.columnName),
col,
dbs, dbs,
config, config,
setConfig, setConfig,
@@ -1338,6 +1344,7 @@ export function getTableChildPerspectiveNodes(
new PerspectivePatternColumnNode( new PerspectivePatternColumnNode(
table, table,
col, col,
null,
dbs, dbs,
config, config,
setConfig, setConfig,

View File

@@ -16,6 +16,7 @@
ChangePerspectiveConfigFunc, ChangePerspectiveConfigFunc,
PerspectiveConfig, PerspectiveConfig,
PerspectiveDisplay, PerspectiveDisplay,
PerspectivePatternColumnNode,
PerspectiveTableColumnNode, PerspectiveTableColumnNode,
PerspectiveTreeNode, PerspectiveTreeNode,
PERSPECTIVE_PAGE_SIZE, PERSPECTIVE_PAGE_SIZE,
@@ -41,6 +42,24 @@
import { getFilterValueExpression } from 'dbgate-filterparser'; import { getFilterValueExpression } from 'dbgate-filterparser';
import StatusBarTabItem from '../widgets/StatusBarTabItem.svelte'; import StatusBarTabItem from '../widgets/StatusBarTabItem.svelte';
const TABS_BY_FIELD = {
tables: {
text: 'table',
tabComponent: 'TableDataTab',
icon: 'img table',
},
views: {
text: 'view',
tabComponent: 'ViewDataTab',
icon: 'img view',
},
collections: {
text: 'collection',
tabComponent: 'CollectionDataTab',
icon: 'img collection',
},
};
const dbg = debug('dbgate:PerspectiveTable'); const dbg = debug('dbgate:PerspectiveTable');
export const activator = createActivator('PerspectiveTable', true, ['Designer']); export const activator = createActivator('PerspectiveTable', true, ['Designer']);
@@ -210,24 +229,28 @@
const tableNode = root?.findNodeByDesignerId(tableNodeDesignerId); const tableNode = root?.findNodeByDesignerId(tableNodeDesignerId);
if (tableNode?.headerTableAttributes) { if (tableNode?.headerTableAttributes) {
const { pureName, schemaName, conid, database } = tableNode?.headerTableAttributes; const { pureName, schemaName, conid, database, objectTypeField } = tableNode?.headerTableAttributes;
res.push({ console.log('objectTypeField', objectTypeField);
text: `Open table ${pureName}`, const tab = TABS_BY_FIELD[objectTypeField];
onClick: () => { if (tab) {
openNewTab({ res.push({
title: pureName, text: `Open ${tab.text} ${pureName}`,
icon: 'img table', onClick: () => {
tabComponent: 'TableDataTab', openNewTab({
props: { title: pureName,
schemaName, icon: tab.icon,
pureName, tabComponent: tab.tabComponent,
conid: conid, props: {
database: database, schemaName,
objectTypeField: 'tables', pureName,
}, conid: conid,
}); database: database,
}, objectTypeField,
}); },
});
},
});
}
} }
const setColumnDisplay = type => { const setColumnDisplay = type => {
@@ -291,42 +314,39 @@
const value = display.rows[rowIndex].rowData[columnIndex]; const value = display.rows[rowIndex].rowData[columnIndex];
const { dataNode } = column; const { dataNode } = column;
if (dataNode instanceof PerspectiveTableColumnNode) { if (
dataNode.filterInfo &&
(dataNode instanceof PerspectiveTableColumnNode || dataNode instanceof PerspectivePatternColumnNode)
) {
const { table } = dataNode; const { table } = dataNode;
let tabComponent = null;
let icon = null; const tab = TABS_BY_FIELD[table.objectTypeField];
let objectTypeField = null; const filterExpression = getFilterValueExpression(
if (dataNode.isTable) { value,
tabComponent = 'TableDataTab'; dataNode instanceof PerspectiveTableColumnNode ? dataNode.column.dataType : null
icon = 'img table'; );
objectTypeField = 'tables';
} if (tab) {
if (dataNode.isView) {
tabComponent = 'ViewDataTab';
icon = 'img view';
objectTypeField = 'views';
}
if (tabComponent) {
res.push({ res.push({
text: 'Open filtered table', text: 'Open filtered grid',
onClick: () => { onClick: () => {
openNewTab( openNewTab(
{ {
title: table.pureName, title: table.pureName,
icon, icon: tab.icon,
tabComponent, tabComponent: tab.tabComponent,
props: { props: {
schemaName: table.schemaName, schemaName: table.schemaName,
pureName: table.pureName, pureName: table.pureName,
conid, conid,
database, database,
objectTypeField, objectTypeField: table.objectTypeField,
}, },
}, },
{ {
grid: { grid: {
filters: { filters: {
[dataNode.columnName]: getFilterValueExpression(value, dataNode.column.dataType), [dataNode.columnName]: filterExpression,
}, },
// isFormView: true, // isFormView: true,
}, },
@@ -350,7 +370,7 @@
...n, ...n,
filters: { filters: {
...n.filters, ...n.filters,
[dataNode.columnName]: getFilterValueExpression(value, dataNode.column.dataType), [dataNode.columnName]: filterExpression,
}, },
} }
: n : n