From 0c9ce3a2ec9487b4eb9130651927e91dcd0f85af Mon Sep 17 00:00:00 2001 From: Csaba Tuncsik Date: Wed, 26 Apr 2023 17:52:53 +0200 Subject: [PATCH] feat(editor): Add version controls settings (WIP) (#6036) * feat(editor): Version control paywall (WIP) * fix(editor): remove version control docs link * feat(editor): Adding version control settings (WIP) * feat(editor): Adding version control settings (WIP) * fix(editor): use rest api root path in version control * fix(editor): adding preferences * fix(editor): adding preferences * fix(editor): change store action name --- packages/editor-ui/src/App.vue | 9 ++ packages/editor-ui/src/Interface.ts | 11 ++ packages/editor-ui/src/api/versionControl.ts | 36 +++++ .../editor-ui/src/components/MainSidebar.vue | 95 ++++++++++++-- .../editor-ui/src/composables/useMessage.ts | 12 +- .../src/plugins/i18n/locales/en.json | 18 +++ .../editor-ui/src/stores/versionControl.ts | 74 ++++++++++- .../src/views/SettingsVersionControl.vue | 123 +++++++++++++++++- 8 files changed, 358 insertions(+), 20 deletions(-) create mode 100644 packages/editor-ui/src/api/versionControl.ts diff --git a/packages/editor-ui/src/App.vue b/packages/editor-ui/src/App.vue index 2d1e09cf364..2498681e81d 100644 --- a/packages/editor-ui/src/App.vue +++ b/packages/editor-ui/src/App.vue @@ -47,6 +47,7 @@ import { useNodeTypesStore } from './stores/nodeTypes'; import { useHistoryHelper } from '@/composables/useHistoryHelper'; import { newVersions } from '@/mixins/newVersions'; import { useRoute } from 'vue-router/composables'; +import { useVersionControlStore } from '@/stores/versionControl'; export default mixins(newVersions, showMessage, userHelpers).extend({ name: 'App', @@ -69,6 +70,7 @@ export default mixins(newVersions, showMessage, userHelpers).extend({ useTemplatesStore, useUIStore, useUsersStore, + useVersionControlStore, ), defaultLocale(): string { return this.rootStore.defaultLocale; @@ -196,6 +198,13 @@ export default mixins(newVersions, showMessage, userHelpers).extend({ if (this.defaultLocale !== 'en') { await this.nodeTypesStore.getNodeTranslationHeaders(); } + + if ( + this.versionControlStore.isEnterpriseVersionControlEnabled && + this.usersStore.isInstanceOwner + ) { + this.versionControlStore.getPreferences(); + } }, watch: { $route(route) { diff --git a/packages/editor-ui/src/Interface.ts b/packages/editor-ui/src/Interface.ts index cb153e3f1f7..c90e18da3a5 100644 --- a/packages/editor-ui/src/Interface.ts +++ b/packages/editor-ui/src/Interface.ts @@ -1432,3 +1432,14 @@ export type SamlPreferencesExtractedData = { entityID: string; returnUrl: string; }; + +export type VersionControlPreferences = { + connected: boolean; + repositoryUrl: string; + authorName: string; + authorEmail: string; + branchName: string; + branchReadOnly: boolean; + branchColor: string; + publicKey?: string; +}; diff --git a/packages/editor-ui/src/api/versionControl.ts b/packages/editor-ui/src/api/versionControl.ts new file mode 100644 index 00000000000..d4b78a56542 --- /dev/null +++ b/packages/editor-ui/src/api/versionControl.ts @@ -0,0 +1,36 @@ +import type { IRestApiContext, VersionControlPreferences } from '@/Interface'; +import { makeRestApiRequest } from '@/utils'; +import type { IDataObject } from 'n8n-workflow'; + +const versionControlApiRoot = '/version-control'; + +export const initSsh = (context: IRestApiContext, data: IDataObject): Promise => { + return makeRestApiRequest(context, 'POST', `${versionControlApiRoot}/init-ssh`, data); +}; + +export const initRepository = ( + context: IRestApiContext, +): Promise<{ branches: string[]; currentBranch: string }> => { + return makeRestApiRequest(context, 'POST', `${versionControlApiRoot}/init-repository`); +}; + +export const sync = (context: IRestApiContext, data: IDataObject): Promise => { + return makeRestApiRequest(context, 'POST', `${versionControlApiRoot}/push`, data); +}; + +export const getConfig = ( + context: IRestApiContext, +): Promise<{ remoteRepository: string; name: string; email: string; currentBranch: string }> => { + return makeRestApiRequest(context, 'GET', `${versionControlApiRoot}/config`); +}; + +export const setPreferences = ( + context: IRestApiContext, + preferences: Partial, +): Promise => { + return makeRestApiRequest(context, 'POST', `${versionControlApiRoot}/preferences`, preferences); +}; + +export const getPreferences = (context: IRestApiContext): Promise => { + return makeRestApiRequest(context, 'GET', `${versionControlApiRoot}/preferences`); +}; diff --git a/packages/editor-ui/src/components/MainSidebar.vue b/packages/editor-ui/src/components/MainSidebar.vue index d3c3cff7017..d9c8eb0ed17 100644 --- a/packages/editor-ui/src/components/MainSidebar.vue +++ b/packages/editor-ui/src/components/MainSidebar.vue @@ -26,19 +26,39 @@ /> -