diff --git a/packages/frontend/@n8n/i18n/src/locales/en.json b/packages/frontend/@n8n/i18n/src/locales/en.json index 357cdd981ca..7c8bd638e63 100644 --- a/packages/frontend/@n8n/i18n/src/locales/en.json +++ b/packages/frontend/@n8n/i18n/src/locales/en.json @@ -1150,9 +1150,6 @@ "credentials.private.callout.connected": "Your account is connected", "credentials.private.callout.notConnected": "Your account isn't connected yet.", "credentials.private.callout.connect": "Connect", - "credentials.dynamic.warning.noResolver": "Dynamic credentials are enabled, but no resolver is selected. Select one in {workflowSettings} to resolve user accounts at run time.", - "credentials.dynamic.warning.noResolver.workflowSettings": "Workflow settings", - "credentials.dynamic.warning.noResolver.documentation": "documentation", "credentials.search.placeholder": "Search credentials...", "credentials.filters.type": "Type", "credentials.filters.setup": "Needs first setup", @@ -4129,7 +4126,6 @@ "workflows.item.availableInMCP": "Available in MCP", "workflows.dynamic.tooltip": "This workflow resolves credentials at runtime based on who executes it.", "workflows.dynamic.tooltipTitle": "Dynamic credentials", - "workflows.dynamic.resolverMissing": "Credential resolver missing", "workflows.dependencies.tooltip.workflow": "Click to view resources referenced by this workflow", "workflows.dependencies.tooltip.credential": "Click to view resources referencing this credential", "workflows.dependencies.tooltip.dataTable": "Click to view resources referencing this data table", diff --git a/packages/frontend/editor-ui/src/app/components/WorkflowCard.test.ts b/packages/frontend/editor-ui/src/app/components/WorkflowCard.test.ts index 6db5d2ece49..7f00b27c69e 100644 --- a/packages/frontend/editor-ui/src/app/components/WorkflowCard.test.ts +++ b/packages/frontend/editor-ui/src/app/components/WorkflowCard.test.ts @@ -1116,34 +1116,6 @@ describe('WorkflowCard', () => { expect(indicator).toBeNull(); }); - it('should show resolver missing badge when workflow has resolvable credentials but no resolver configured', () => { - const data = createWorkflow({ - hasResolvableCredentials: true, - settings: { - credentialResolverId: undefined, - }, - }); - - const { getByTestId } = renderComponent({ props: { data } }); - - const badge = getByTestId('workflow-card-resolver-missing'); - expect(badge).toBeVisible(); - }); - - it('should hide resolver missing badge when workflow has resolver configured', () => { - const data = createWorkflow({ - hasResolvableCredentials: true, - settings: { - credentialResolverId: 'resolver-123', - }, - }); - - const { queryByTestId } = renderComponent({ props: { data } }); - - const badge = queryByTestId('workflow-card-resolver-missing'); - expect(badge).toBeNull(); - }); - it('should show Archived text on archived workflows', async () => { const data = createWorkflow({ isArchived: true }); const { getByTestId, queryByTestId } = renderComponent({ props: { data } }); diff --git a/packages/frontend/editor-ui/src/app/components/WorkflowCard.vue b/packages/frontend/editor-ui/src/app/components/WorkflowCard.vue index cd35b442a37..153dd2a7b1d 100644 --- a/packages/frontend/editor-ui/src/app/components/WorkflowCard.vue +++ b/packages/frontend/editor-ui/src/app/components/WorkflowCard.vue @@ -321,14 +321,6 @@ const hasDynamicCredentials = computed(() => { return isDynamicCredentialsEnabled.value && props.data.hasResolvableCredentials; }); -const isResolverMissing = computed(() => { - return ( - isDynamicCredentialsEnabled.value && - props.data.hasResolvableCredentials && - !props.data.settings?.credentialResolverId - ); -}); - const workflowHasDependencies = computed(() => hasDependencies(props.data.id)); async function onClick(event?: KeyboardEvent | PointerEvent) { @@ -644,16 +636,6 @@ const tags = computed( - - - {{ locale.baseText('workflows.dynamic.resolverMissing') }} - -
@@ -852,14 +834,6 @@ const tags = computed( height: 18px; } -.resolverMissingBadge { - display: inline-flex; - align-items: center; - font-size: var(--font-size--3xs); - height: 18px; - color: var(--color--warning); -} - .tooltipContent { display: flex; flex-direction: column; diff --git a/packages/frontend/editor-ui/src/features/credentials/components/NodeCredentials.test.ts b/packages/frontend/editor-ui/src/features/credentials/components/NodeCredentials.test.ts index 965e4d99949..1c25c97eb5e 100644 --- a/packages/frontend/editor-ui/src/features/credentials/components/NodeCredentials.test.ts +++ b/packages/frontend/editor-ui/src/features/credentials/components/NodeCredentials.test.ts @@ -510,27 +510,6 @@ describe('NodeCredentials', () => { expect(screen.queryByTestId('node-credential-private-icon')).toBeInTheDocument(); }); - - it('should show warning when resolvable credential selected but workflow has no resolver', async () => { - setupResolvableCredential(); - workflowDocumentStore.setSettings({ executionOrder: 'v1' }); - - renderComponent(); - - expect(screen.queryByTestId('node-credential-resolver-warning')).toBeInTheDocument(); - }); - - it('should not show warning when resolvable credential selected and workflow has resolver', async () => { - setupResolvableCredential(); - workflowDocumentStore.setSettings({ - executionOrder: 'v1', - credentialResolverId: 'resolver-123', - }); - - renderComponent(); - - expect(screen.queryByTestId('node-credential-resolver-warning')).not.toBeInTheDocument(); - }); }); describe('quick connect', () => { diff --git a/packages/frontend/editor-ui/src/features/credentials/components/NodeCredentials.vue b/packages/frontend/editor-ui/src/features/credentials/components/NodeCredentials.vue index 939216c1271..a1864ff0833 100644 --- a/packages/frontend/editor-ui/src/features/credentials/components/NodeCredentials.vue +++ b/packages/frontend/editor-ui/src/features/credentials/components/NodeCredentials.vue @@ -8,7 +8,6 @@ import type { NodeParameterValueType, } from 'n8n-workflow'; import { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'; -import { I18nT } from 'vue-i18n'; import { useNodeHelpers } from '@/app/composables/useNodeHelpers'; import { @@ -23,7 +22,7 @@ import { useToast } from '@/app/composables/useToast'; import TitledList from '@/app/components/TitledList.vue'; import { useI18n } from '@n8n/i18n'; import { useTelemetry } from '@/app/composables/useTelemetry'; -import { CREDENTIAL_ONLY_NODE_PREFIX, WORKFLOW_SETTINGS_MODAL_KEY } from '@/app/constants'; +import { CREDENTIAL_ONLY_NODE_PREFIX } from '@/app/constants'; import { ndvEventBus } from '@/features/ndv/shared/ndv.eventBus'; import { useCredentialsStore } from '../credentials.store'; import { useQuickConnect } from '../quickConnect/composables/useQuickConnect'; @@ -161,10 +160,6 @@ const selected = computed>( () => props.node.credentials ?? {}, ); -const hasWorkflowResolver = computed(() => { - return !!workflowDocumentStore?.value?.settings?.credentialResolverId; -}); - function isCredentialResolvable(credentialType: string): boolean { if (!isDynamicCredentialsEnabled.value) return false; const credentialId = selected.value[credentialType]?.id; @@ -185,17 +180,6 @@ function isPrivateConnected(credentialType: string): boolean { return getSelectedPrivateCredential(credentialType)?.connectedByMe === true; } -function showResolvableWarning(credentialType: string): boolean { - return isCredentialResolvable(credentialType) && !hasWorkflowResolver.value; -} - -// TODO: use actual docs link when available -const dynamicCredentialsDocsUrl = ''; - -function openWorkflowSettings() { - uiStore.openModal(WORKFLOW_SETTINGS_MODAL_KEY); -} - watch( () => props.node.parameters, (newValue, oldValue) => { @@ -904,10 +888,7 @@ async function onQuickConnectSignIn(credentialTypeName: string) { />
-
+
- - - - - -