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;