From 03542bfb8306924df51e9ac89612c4912c05deff Mon Sep 17 00:00:00 2001 From: Oleg Ivaniv Date: Tue, 12 Nov 2024 07:44:16 +0100 Subject: [PATCH] Finish edit UI --- .../components/Node/NodeCreator/viewsData.ts | 2 +- .../WorkflowSelectorParameterInput.vue | 26 +- .../src/views/NewWorkflowEvaluationView.vue | 398 +++++++++++++++++- 3 files changed, 415 insertions(+), 11 deletions(-) diff --git a/packages/editor-ui/src/components/Node/NodeCreator/viewsData.ts b/packages/editor-ui/src/components/Node/NodeCreator/viewsData.ts index 14d19307c3..336225c040 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/viewsData.ts +++ b/packages/editor-ui/src/components/Node/NodeCreator/viewsData.ts @@ -60,7 +60,7 @@ import { useI18n } from '@/composables/useI18n'; import { useNodeTypesStore } from '@/stores/nodeTypes.store'; import type { SimplifiedNodeType } from '@/Interface'; import type { INodeTypeDescription, Themed } from 'n8n-workflow'; -import { NodeConnectionType } from 'n8n-workflow'; +import { CHAT_TRIGGER_NODE_TYPE, NodeConnectionType } from 'n8n-workflow'; import { useTemplatesStore } from '@/stores/templates.store'; import type { BaseTextKey } from '@/plugins/i18n'; import { camelCase } from 'lodash-es'; diff --git a/packages/editor-ui/src/components/WorkflowSelectorParameterInput/WorkflowSelectorParameterInput.vue b/packages/editor-ui/src/components/WorkflowSelectorParameterInput/WorkflowSelectorParameterInput.vue index 3a3817b58c..a9193e492e 100644 --- a/packages/editor-ui/src/components/WorkflowSelectorParameterInput/WorkflowSelectorParameterInput.vue +++ b/packages/editor-ui/src/components/WorkflowSelectorParameterInput/WorkflowSelectorParameterInput.vue @@ -18,6 +18,7 @@ import { useRouter } from 'vue-router'; import { useWorkflowResourceLocatorDropdown } from './useWorkflowResourceLocatorDropdown'; import { useWorkflowResourceLocatorModes } from './useWorkflowResourceLocatorModes'; import { useWorkflowResourcesLocator } from './useWorkflowResourcesLocator'; +import { VIEWS } from '@/constants'; interface Props { modelValue: INodeParameterResourceLocator; @@ -30,6 +31,7 @@ interface Props { forceShowExpression?: boolean; parameterIssues?: string[]; parameter: INodeProperties; + allowNew?: boolean; } const props = withDefaults(defineProps(), { @@ -40,6 +42,7 @@ const props = withDefaults(defineProps(), { forceShowExpression: false, expressionDisplayValue: '', parameterIssues: () => [], + allowNew: false, }); const emit = defineEmits<{ @@ -50,6 +53,7 @@ const emit = defineEmits<{ blur: []; }>(); +const NEW_WORKFLOW_VALUE = '__new_workflow__'; const router = useRouter(); const workflowsStore = useWorkflowsStore(); const i18n = useI18n(); @@ -81,6 +85,20 @@ const { getWorkflowUrl, } = useWorkflowResourcesLocator(router); +const resourcesWithNew = computed(() => { + if (!props.allowNew) return filteredResources.value; + + const route = router.resolve({ name: VIEWS.NEW_WORKFLOW }); + return [ + { + value: NEW_WORKFLOW_VALUE, + name: '+ Create new workflow', + url: route.href, + }, + ...filteredResources.value, + ]; +}); + const valueToDisplay = computed(() => { if (typeof props.modelValue !== 'object') { return props.modelValue; @@ -111,6 +129,11 @@ function setWidth() { function onInputChange(value: NodeParameterValue): void { if (typeof value !== 'string') return; + if (value === NEW_WORKFLOW_VALUE && props.allowNew) { + const route = router.resolve({ name: VIEWS.NEW_WORKFLOW }); + window.open(route.href, '_blank'); + return; + } const params: INodeParameterResourceLocator = { __rl: true, value, mode: selectedMode.value }; if (isListMode.value) { const resource = workflowsStore.getWorkflowById(value); @@ -189,13 +212,14 @@ onClickOutside(dropdown, () => { :show="isDropdownVisible" :filterable="true" :filter-required="false" - :resources="filteredResources" + :resources="resourcesWithNew" :loading="isLoadingResources" :filter="searchFilter" :has-more="hasMoreWorkflowsToLoad" :error-view="false" :width="width" :event-bus="eventBus" + :allow-new="allowNew" @update:model-value="onListItemSelected" @filter="onSearchFilter" @load-more="populateNextWorkflowsPage" diff --git a/packages/editor-ui/src/views/NewWorkflowEvaluationView.vue b/packages/editor-ui/src/views/NewWorkflowEvaluationView.vue index 037a72768f..89b57be360 100644 --- a/packages/editor-ui/src/views/NewWorkflowEvaluationView.vue +++ b/packages/editor-ui/src/views/NewWorkflowEvaluationView.vue @@ -1,25 +1,405 @@