mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-29 22:43:58 +00:00
perspective fixes
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user