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

View File

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