diff --git a/packages/editor-ui/src/Interface.ts b/packages/editor-ui/src/Interface.ts
index 972ef0cbd8..745e0f11fb 100644
--- a/packages/editor-ui/src/Interface.ts
+++ b/packages/editor-ui/src/Interface.ts
@@ -428,3 +428,20 @@ export interface ITimeoutHMS {
}
export type WorkflowTitleStatus = 'EXECUTING' | 'IDLE' | 'ERROR';
+
+export type MenuItemType = 'link';
+export type MenuItemPosition = 'top' | 'bottom';
+
+export interface IMenuItem {
+ id: string;
+ type: MenuItemType;
+ position: MenuItemPosition;
+ properties: ILinkMenuItemProperties;
+}
+
+export interface ILinkMenuItemProperties {
+ title: string;
+ icon: string;
+ href: string;
+ newWindow?: boolean;
+}
\ No newline at end of file
diff --git a/packages/editor-ui/src/components/MainSidebar.vue b/packages/editor-ui/src/components/MainSidebar.vue
index 2b6ae3e054..6de1de6c98 100644
--- a/packages/editor-ui/src/components/MainSidebar.vue
+++ b/packages/editor-ui/src/components/MainSidebar.vue
@@ -21,6 +21,22 @@
+
+
+
+ {{ item.properties.title }}
+
+
+
@@ -152,6 +168,22 @@
+
+
+
+ {{ item.properties.title }}
+
+
+
@@ -167,6 +199,7 @@ import {
IExecutionResponse,
IExecutionsStopData,
IWorkflowDataUpdate,
+ IMenuItem,
} from '../Interface';
import About from '@/components/About.vue';
@@ -266,6 +299,12 @@ export default mixins(
workflowRunning (): boolean {
return this.$store.getters.isActionActive('workflowRunning');
},
+ sidebarMenuTopItems(): IMenuItem[] {
+ return this.$store.getters.sidebarMenuItems.filter((item: IMenuItem) => item.position === 'top');
+ },
+ sidebarMenuBottomItems(): IMenuItem[] {
+ return this.$store.getters.sidebarMenuItems.filter((item: IMenuItem) => item.position === 'bottom');
+ },
},
methods: {
clearExecutionData () {
@@ -533,6 +572,11 @@ export default mixins(
.el-menu-item {
a {
color: #666;
+
+ &.primary-item {
+ color: $--color-primary;
+ vertical-align: baseline;
+ }
}
&.logo-item {
diff --git a/packages/editor-ui/src/main.ts b/packages/editor-ui/src/main.ts
index f79cc1acef..af74cd0fcd 100644
--- a/packages/editor-ui/src/main.ts
+++ b/packages/editor-ui/src/main.ts
@@ -56,6 +56,7 @@ import {
faFilePdf,
faFolderOpen,
faHdd,
+ faHome,
faHourglass,
faImage,
faInbox,
@@ -136,6 +137,7 @@ library.add(faFileImport);
library.add(faFilePdf);
library.add(faFolderOpen);
library.add(faHdd);
+library.add(faHome);
library.add(faHourglass);
library.add(faImage);
library.add(faInbox);
diff --git a/packages/editor-ui/src/store.ts b/packages/editor-ui/src/store.ts
index 349b11f8a9..0309075d68 100644
--- a/packages/editor-ui/src/store.ts
+++ b/packages/editor-ui/src/store.ts
@@ -21,12 +21,13 @@ import {
ICredentialsResponse,
IExecutionResponse,
IExecutionsCurrentSummaryExtended,
- IPushDataExecutionFinished,
- IPushDataNodeExecuteAfter,
- IWorkflowDb,
+ IMenuItem,
INodeUi,
INodeUpdatePropertiesInformation,
+ IPushDataExecutionFinished,
+ IPushDataNodeExecuteAfter,
IUpdateInformation,
+ IWorkflowDb,
XYPositon,
} from './Interface';
@@ -79,6 +80,7 @@ export const store = new Vuex.Store({
nodes: [] as INodeUi[],
settings: {} as IWorkflowSettings,
} as IWorkflowDb,
+ sidebarMenuItems: [] as IMenuItem[],
},
mutations: {
// Active Actions
@@ -597,6 +599,11 @@ export const store = new Vuex.Store({
Vue.set(state, 'nodeTypes', updatedNodes);
state.nodeTypes = updatedNodes;
},
+
+ addSidebarMenuItems (state, menuItems: IMenuItem[]) {
+ const updated = state.sidebarMenuItems.concat(menuItems);
+ Vue.set(state, 'sidebarMenuItems', updated);
+ },
},
getters: {
@@ -834,6 +841,9 @@ export const store = new Vuex.Store({
return workflowRunData[nodeName];
},
+ sidebarMenuItems: (state): IMenuItem[] => {
+ return state.sidebarMenuItems;
+ },
},
});