diff --git a/packages/datalib/src/PerspectiveConfig.ts b/packages/datalib/src/PerspectiveConfig.ts
index 40c0726e7..6f26b04ae 100644
--- a/packages/datalib/src/PerspectiveConfig.ts
+++ b/packages/datalib/src/PerspectiveConfig.ts
@@ -1,4 +1,4 @@
-import { DatabaseInfo, ForeignKeyInfo } from 'dbgate-types';
+import { DatabaseInfo, ForeignKeyInfo, NamedObjectInfo } from 'dbgate-types';
export interface PerspectiveConfigColumns {
expandedColumns: string[];
@@ -28,6 +28,7 @@ export interface PerspectiveFilterColumnInfo {
foreignKey: ForeignKeyInfo;
}
export interface PerspectiveConfig extends PerspectiveConfigColumns {
+ rootObject: { schemaName?: string; pureName: string };
filters: { [uniqueName: string]: string };
filterInfos: { [uniqueName: string]: PerspectiveFilterColumnInfo };
sort: {
@@ -39,7 +40,7 @@ export interface PerspectiveConfig extends PerspectiveConfigColumns {
customJoins: PerspectiveCustomJoinConfig[];
}
-export function createPerspectiveConfig(): PerspectiveConfig {
+export function createPerspectiveConfig(rootObject: { schemaName?: string; pureName: string }): PerspectiveConfig {
return {
expandedColumns: [],
checkedColumns: [],
@@ -48,6 +49,7 @@ export function createPerspectiveConfig(): PerspectiveConfig {
filters: {},
filterInfos: {},
sort: {},
+ rootObject,
};
}
diff --git a/packages/datalib/src/tests/PerspectiveDisplay.test.ts b/packages/datalib/src/tests/PerspectiveDisplay.test.ts
index 798cfce90..ef7e26f4c 100644
--- a/packages/datalib/src/tests/PerspectiveDisplay.test.ts
+++ b/packages/datalib/src/tests/PerspectiveDisplay.test.ts
@@ -12,7 +12,7 @@ test('test flat view', () => {
const root = new PerspectiveTableNode(
artistTable,
{ conid: { db: chinookDbInfo } },
- createPerspectiveConfig(),
+ createPerspectiveConfig({ pureName: 'Artist' }),
null,
null,
{ conid: 'conid', database: 'db' },
@@ -38,7 +38,7 @@ test('test one level nesting', () => {
const root = new PerspectiveTableNode(
artistTable,
{ conid: { db: chinookDbInfo } },
- { ...createPerspectiveConfig(), checkedColumns: ['Artist.Album'] },
+ { ...createPerspectiveConfig({ pureName: 'Artist' }), checkedColumns: ['Artist.Album'] },
null,
null,
{ conid: 'conid', database: 'db' },
@@ -88,7 +88,7 @@ test('test two level nesting', () => {
const root = new PerspectiveTableNode(
artistTable,
{ conid: { db: chinookDbInfo } },
- { ...createPerspectiveConfig(), checkedColumns: ['Artist.Album', 'Artist.Album.Track'] },
+ { ...createPerspectiveConfig({ pureName: 'Artist' }), checkedColumns: ['Artist.Album', 'Artist.Album.Track'] },
null,
null,
{ conid: 'conid', database: 'db' },
diff --git a/packages/web/src/appobj/SavedFileAppObject.svelte b/packages/web/src/appobj/SavedFileAppObject.svelte
index 3389f8b81..3f57beb67 100644
--- a/packages/web/src/appobj/SavedFileAppObject.svelte
+++ b/packages/web/src/appobj/SavedFileAppObject.svelte
@@ -65,6 +65,14 @@
currentConnection: true,
};
+ const perspectives: FileTypeHandler = {
+ icon: 'img perspective',
+ format: 'json',
+ tabComponent: 'PerspectiveTab',
+ folder: 'pesrpectives',
+ currentConnection: true,
+ };
+
export const SAVED_FILE_HANDLERS = {
sql,
shell,
@@ -73,10 +81,14 @@
query,
sqlite,
diagrams,
+ perspectives,
};
export const extractKey = data => data.file;
- export const createMatcher = ({ file }) => filter => filterName(filter, file);
+ export const createMatcher =
+ ({ file }) =>
+ filter =>
+ filterName(filter, file);
diff --git a/packages/web/src/tabs/PerspectiveTab.svelte b/packages/web/src/tabs/PerspectiveTab.svelte
index c23d2dda3..171052e63 100644
--- a/packages/web/src/tabs/PerspectiveTab.svelte
+++ b/packages/web/src/tabs/PerspectiveTab.svelte
@@ -13,14 +13,24 @@
onClick: () => getCurrentEditor().refresh(),
});
+ registerFileCommands({
+ idPrefix: 'perspective',
+ category: 'Perspective',
+ getCurrentEditor,
+ folder: 'perspectives',
+ format: 'json',
+ fileExtension: 'perspective',
+
+ undoRedo: true,
+ });
+
export const allowAddToFavorites = props => true;