diff --git a/packages/editor-ui/src/components/ResourceLocator/ResourceLocator.vue b/packages/editor-ui/src/components/ResourceLocator/ResourceLocator.vue
index 5d891fbedee74..b11d7a2eca806 100644
--- a/packages/editor-ui/src/components/ResourceLocator/ResourceLocator.vue
+++ b/packages/editor-ui/src/components/ResourceLocator/ResourceLocator.vue
@@ -22,10 +22,13 @@
{{ $locale.baseText('resourceLocator.mode.list.error.title') }}
-
+
{{ $locale.baseText('resourceLocator.mode.list.error.description.part1') }}
- {{
- $locale.baseText('resourceLocator.mode.list.error.description.part2')
+ {{
+ $locale.baseText('resourceLocator.mode.list.error.description.part2.noCredentials')
+ }}
+ {{
+ $locale.baseText('resourceLocator.mode.list.error.description.part2.hasCredentials')
}}
@@ -157,7 +160,12 @@ import { debounceHelper } from '@/mixins/debounce';
import stringify from 'fast-json-stable-stringify';
import { workflowHelpers } from '@/mixins/workflowHelpers';
import { nodeHelpers } from '@/mixins/nodeHelpers';
-import { getAppNameFromNodeName, isResourceLocatorValue, hasOnlyListMode } from '@/utils';
+import {
+ getAppNameFromNodeName,
+ isResourceLocatorValue,
+ hasOnlyListMode,
+ getMainAuthField,
+} from '@/utils';
import { mapStores } from 'pinia';
import { useUIStore } from '@/stores/ui';
import { useWorkflowsStore } from '@/stores/workflows';
@@ -282,6 +290,17 @@ export default mixins(debounceHelper, workflowHelpers, nodeHelpers).extend({
}
return !!(node && node.credentials && Object.keys(node.credentials).length === 1);
},
+ credentialsNotSet(): boolean {
+ const nodeType = this.nodeTypesStore.getNodeType(this.node?.type);
+ if (nodeType) {
+ const usesCredentials =
+ nodeType.credentials !== undefined && nodeType.credentials.length > 0;
+ if (usesCredentials && !this.node?.credentials) {
+ return true;
+ }
+ }
+ return false;
+ },
inputPlaceholder(): string {
if (this.currentMode.placeholder) {
return this.currentMode.placeholder;
@@ -503,6 +522,18 @@ export default mixins(debounceHelper, workflowHelpers, nodeHelpers).extend({
const id = node.credentials[credentialKey].id;
this.uiStore.openExistingCredential(id);
},
+ createNewCredential(): void {
+ const nodeType = this.nodeTypesStore.getNodeType(this.node?.type);
+ if (!nodeType) {
+ return;
+ }
+ const mainAuthType = getMainAuthField(nodeType);
+ const showAuthSelector =
+ mainAuthType !== null &&
+ Array.isArray(mainAuthType.options) &&
+ mainAuthType.options?.length > 0;
+ this.uiStore.openNewCredential('', showAuthSelector);
+ },
findModeByName(name: string): INodePropertyMode | null {
if (this.parameter.modes) {
return this.parameter.modes.find((mode: INodePropertyMode) => mode.name === name) || null;
diff --git a/packages/editor-ui/src/plugins/i18n/locales/en.json b/packages/editor-ui/src/plugins/i18n/locales/en.json
index ecf79a1733010..44dd779f204d0 100644
--- a/packages/editor-ui/src/plugins/i18n/locales/en.json
+++ b/packages/editor-ui/src/plugins/i18n/locales/en.json
@@ -1038,7 +1038,8 @@
"resourceLocator.mode.list.disabled.title": "Change to Fixed mode to choose From List",
"resourceLocator.mode.list.error.title": "Could not load list",
"resourceLocator.mode.list.error.description.part1": "Please",
- "resourceLocator.mode.list.error.description.part2": "check your credential",
+ "resourceLocator.mode.list.error.description.part2.hasCredentials": "check your credential",
+ "resourceLocator.mode.list.error.description.part2.noCredentials": "add your credential",
"resourceLocator.mode.list.noResults": "No results",
"resourceLocator.mode.list.openUrl": "Open URL",
"resourceLocator.mode.list.placeholder": "Choose...",