diff --git a/packages/web/src/appobj/DatabaseObjectAppObject.svelte b/packages/web/src/appobj/DatabaseObjectAppObject.svelte index de1fd3f4e..5a43f2f5f 100644 --- a/packages/web/src/appobj/DatabaseObjectAppObject.svelte +++ b/packages/web/src/appobj/DatabaseObjectAppObject.svelte @@ -39,6 +39,7 @@ procedures: 'img procedure', functions: 'img function', queries: 'img query-data', + triggers: 'icon trigger', }; const defaultTabs = { @@ -49,6 +50,7 @@ queries: 'QueryDataTab', procedures: 'SqlObjectTab', functions: 'SqlObjectTab', + triggers: 'SqlObjectTab', }; function createScriptTemplatesSubmenu(objectTypeField) { @@ -340,40 +342,8 @@ }, ]; case 'functions': - return [ - ...defaultDatabaseObjectAppObjectActions['functions'], - { - divider: true, - }, - hasPermission('dbops/model/edit') && { - label: 'Drop function', - isDrop: true, - requiresWriteAccess: true, - }, - hasPermission('dbops/model/edit') && { - label: 'Rename function', - isRename: true, - requiresWriteAccess: true, - }, - createScriptTemplatesSubmenu('functions'), - { - label: 'SQL generator', - submenu: [ - { - label: 'CREATE FUNCTION', - sqlGeneratorProps: { - createFunctions: true, - }, - }, - { - label: 'DROP FUNCTION', - sqlGeneratorProps: { - dropFunctions: true, - }, - }, - ], - }, - ]; + case 'triggers': + return [...defaultDatabaseObjectAppObjectActions['triggers']]; case 'collections': return [ ...defaultDatabaseObjectAppObjectActions['collections'], @@ -751,7 +721,7 @@ return; } - const availableDefaultActions = defaultDatabaseObjectAppObjectActions[objectTypeField]; + const availableDefaultActions = defaultDatabaseObjectAppObjectActions[objectTypeField] ?? []; const configuredActionId = getLastUsedDefaultActions()[objectTypeField]; const prefferedAction = @@ -953,6 +923,10 @@ function getExtInfo(data) { const res = []; + if (data.objectTypeField === 'triggers') { + res.push(`${data.triggerTiming ?? ''} ${data.eventType ?? ''}`.toLowerCase()); + } + if (data.objectComment) { res.push(data.objectComment); } diff --git a/packages/web/src/appobj/appObjectTools.ts b/packages/web/src/appobj/appObjectTools.ts index 1eb48e45f..7b3e0bb8c 100644 --- a/packages/web/src/appobj/appObjectTools.ts +++ b/packages/web/src/appobj/appObjectTools.ts @@ -60,6 +60,14 @@ export const defaultDatabaseObjectAppObjectActions = { icon: 'img sql-file', }, ], + triggers: [ + { + label: 'Show SQL', + tab: 'SqlObjectTab', + defaultActionId: 'showSql', + icon: 'img sql-file', + }, + ], collections: [ { label: 'Open data', diff --git a/packages/web/src/icons/FontIcon.svelte b/packages/web/src/icons/FontIcon.svelte index 4cf0e103a..0f4a63012 100644 --- a/packages/web/src/icons/FontIcon.svelte +++ b/packages/web/src/icons/FontIcon.svelte @@ -64,6 +64,7 @@ 'icon add-folder': 'mdi mdi-folder-plus-outline', 'icon add-column': 'mdi mdi-table-column-plus-after', 'icon parameter': 'mdi mdi-at', + 'icon trigger': 'mdi mdi-lightning-bolt', 'icon window-restore': 'mdi mdi-window-restore', 'icon window-maximize': 'mdi mdi-window-maximize', diff --git a/packages/web/src/utility/applyScriptTemplate.ts b/packages/web/src/utility/applyScriptTemplate.ts index 124e32f21..ac2de4b0f 100644 --- a/packages/web/src/utility/applyScriptTemplate.ts +++ b/packages/web/src/utility/applyScriptTemplate.ts @@ -166,6 +166,13 @@ export function getSupportedScriptTemplates(objectTypeField: string): { label: s scriptTemplate: 'CALL OBJECT', }, ]; + case 'triggers': + return [ + { + label: 'CREATE TRIGGER', + scriptTemplate: 'CREATE OBJECT', + }, + ]; } return []; diff --git a/packages/web/src/widgets/SqlObjectList.svelte b/packages/web/src/widgets/SqlObjectList.svelte index 7403ffe56..eb43fd116 100644 --- a/packages/web/src/widgets/SqlObjectList.svelte +++ b/packages/web/src/widgets/SqlObjectList.svelte @@ -80,7 +80,7 @@ // $: console.log('OBJECTS', $objects); $: objectList = _.flatten([ - ...['tables', 'collections', 'views', 'matviews', 'procedures', 'functions'].map(objectTypeField => + ...['tables', 'collections', 'views', 'matviews', 'procedures', 'functions', 'triggers'].map(objectTypeField => _.sortBy( (($objects || {})[objectTypeField] || []).map(obj => ({ ...obj, objectTypeField })), ['schemaName', 'pureName']