diff --git a/packages/editor-ui/src/App.vue b/packages/editor-ui/src/App.vue index 2d1e09cf36..2498681e81 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 cb153e3f1f..c90e18da3a 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 0000000000..d4b78a5654 --- /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 d3c3cff701..d9c8eb0ed1 100644 --- a/packages/editor-ui/src/components/MainSidebar.vue +++ b/packages/editor-ui/src/components/MainSidebar.vue @@ -26,19 +26,39 @@ /> -