Skip to content

feat(editor): Action/credentials tab in node settings in zoomed view (no-changelog) #17730

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 45 commits into from
Aug 1, 2025

Conversation

autologie
Copy link
Contributor

@autologie autologie commented Jul 28, 2025

Summary

To better fit with the limited width and height, we're re-organizing tabs in NDV in the zoomed view.

  • Introduce new "Action" and "Auth" tab for resource, operation and credentials
  • Change "Settings" and "Docs" tab to icons

To try out, set N8N_EXPERIMENTAL_MIN_ZOOM_NODE_SETTINGS_IN_CANVAS to 2 in local storage and zoom in the canvas.

Screenshot 2025-08-01 at 10 57 50

Related Linear tickets, Github issues, and Community forum posts

https://linear.app/n8n/issue/SUG-94/zoomed-view-add-action-and-cred-tabs

Review / Merge checklist

  • PR title and summary are descriptive. (conventions)
  • Docs updated or follow-up ticket created.
  • Tests included.
  • PR Labeled with release/backport (if the PR is an urgent fix that needs to be backported)

autologie and others added 8 commits July 25, 2025 06:36
- Add dedicated content panels for credential and action tabs in embedded canvas view
- Fix credential tab visibility condition to use isDisplayingCredentials instead of parametersByTab.credential.length
- Order tab panels as: action, credential, params, settings for logical workflow
- Action tab displays resource/operation parameters using ParameterInputList
- Credential tab displays NodeCredentials component with proper event handling

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
@autologie autologie changed the base branch from master to refactor-node-settings July 28, 2025 07:58
@n8n-assistant n8n-assistant bot added the n8n team Authored by the n8n team label Jul 28, 2025
Copy link

bundlemon bot commented Jul 28, 2025

BundleMon

Files added (2)
Status Path Size Limits
WASM Dependencies
tree-sitter-bash.wasm
+181.26KB -
WASM Dependencies
tree-sitter.wasm
+74.47KB -

Total files change +255.73KB

Groups added (2)
Status Path Size Limits
**/*.js
+5.34MB -
**/*.css
+188.02KB -

Final result: ✅

View report in BundleMon website ➡️


Current branch size history

Copy link

codecov bot commented Jul 28, 2025

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
9269 1 9268 0
View the top 1 failed test(s) by shortest run time
ActiveExecutions shutdown Should cancel only executions with response-promises by default
Stack Traces | 0.01s run time
Error: expect(received).toHaveLength(expected)

Expected length: 4
Received length: 3
Received array:  [{"id": "1010", "mode": "manual", "retryOf": undefined, "startedAt": 2025-08-01T10:07:59.171Z, "status": "waiting", "workflowId": "123"}, {"id": "1101", "mode": "manual", "retryOf": undefined, "startedAt": 2025-08-01T10:07:59.171Z, "status": "new", "workflowId": "123"}, {"id": "1541", "mode": "manual", "retryOf": undefined, "startedAt": 2025-08-01T10:07:59.171Z, "status": "waiting", "workflowId": "123"}]
    at Object.<anonymous> (.../src/__tests__/active-executions.test.ts:318:51)
    at Promise.then.completed (.../n8n/node_modules/.pnpm/[email protected]..../jest-circus/build/utils.js:300:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../n8n/node_modules/.pnpm/[email protected]..../jest-circus/build/utils.js:233:10)
    at _callCircusTest (.../n8n/node_modules/.pnpm/[email protected]..../jest-circus/build/run.js:315:40)
    at _runTest (.../n8n/node_modules/.pnpm/[email protected]..../jest-circus/build/run.js:251:3)
    at _runTestsForDescribeBlock (.../n8n/node_modules/.pnpm/[email protected]..../jest-circus/build/run.js:125:9)
    at _runTestsForDescribeBlock (.../n8n/node_modules/.pnpm/[email protected]..../jest-circus/build/run.js:120:9)
    at _runTestsForDescribeBlock (.../n8n/node_modules/.pnpm/[email protected]..../jest-circus/build/run.js:120:9)
    at run (.../n8n/node_modules/.pnpm/[email protected]..../jest-circus/build/run.js:70:3)
    at runAndTransformResultsToJestFormat (.../n8n/node_modules/.pnpm/[email protected]..../build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21)
    at jestAdapter (.../n8n/node_modules/.pnpm/[email protected]..../build/legacy-code-todo-rewrite/jestAdapter.js:79:19)
    at runTestInternal (.../n8n/node_modules/.pnpm/[email protected]..../jest-runner/build/runTest.js:367:16)
    at runTest (.../n8n/node_modules/.pnpm/[email protected]..../jest-runner/build/runTest.js:444:34)
    at Object.worker (.../n8n/node_modules/.pnpm/[email protected]..../jest-runner/build/testWorker.js:106:12)

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@autologie autologie changed the title feat(editor): Action/cred tab in node settings in zoomed view (no-changelog) feat(editor): Action/credentials tab in node settings in zoomed view (no-changelog) Jul 28, 2025
@CLAassistant
Copy link

CLAassistant commented Jul 29, 2025

CLA assistant check
All committers have signed the CLA.

@autologie autologie changed the base branch from refactor-node-settings to master July 29, 2025 09:33
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Extracted from NodeCredentials.vue

@@ -848,10 +839,6 @@ onBeforeUnmount(() => {
</template>

<style lang="scss">
// Hide notice(.ndv-connection-hint-notice) warning when node has output connection
[data-has-output-connection='true'] .ndv-connection-hint-notice {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moving to NodeSettings.vue so I don't have to replicate this for embedded NDV too. .ndv-connection-hint-notice is set in ParameterInputList.vue which is inside of NodeSettings.vue, so the effect will remain the same.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Extracting some code into useNodeCredentialOptions for reuse

@autologie
Copy link
Contributor Author

@claude

Copy link

claude bot commented Aug 1, 2025

Claude finished @autologie's task —— View job


Analyzing your PR for the Action/Credentials tab feature...

Todo List

  • Read key files to understand the implementation
  • Analyze the failing test to determine if it's related to the changes
  • Review code quality and architecture decisions
  • Check for potential issues or improvements
  • Provide comprehensive feedback

Review Summary

This is a well-structured PR that introduces separate Action and Credentials tabs in the Node Details View (NDV) for zoomed view. The implementation is clean and follows good architecture patterns.

🟢 Strengths

Clean Architecture & Code Organization:

  • Excellent separation of concerns with useNodeCredentialOptions composable extracting credential logic from NodeCredentials.vue:87-98
  • New NodeActionsList.vue component is well-structured with proper action filtering and selection logic
  • Smart parameter categorization in nodeSettingsUtils.ts:700-727 cleanly separates action vs params based on context

User Experience Improvements:

  • Intuitive tab organization for constrained zoomed view interface
  • Action tab shows visual feedback for selected actions (NodeActionsList.vue:110)
  • Proper credential issue indication with warning icons (NodeSettingsTabs.vue:87-91)
  • Smooth workflow transitions between action selection and credential setup (NodeSettings.vue:571-578)

Implementation Quality:

  • Type-safe with proper TypeScript definitions (nodeSettings.ts)
  • Consistent prop passing and event handling throughout components
  • Good responsive design considerations for embedded canvas view
  • Proper Vue 3 Composition API usage with computed properties and watchers

🟡 Areas for Improvement

Minor Code Quality Issues:

  1. Unused import in NodeActionsList.vue:5 - CUSTOM_API_CALL_KEY is imported but only used in filter, consider adding a comment explaining its purpose
  2. Magic number in embedded header - 16 for icon size could be a named constant (ExperimentalEmbeddedNdvHeader.vue:31)
  3. Potential performance optimization - NodeActionsList.vue:28-57 computes action options on every render, consider useMemo for expensive operations

Edge Cases:

  • Consider what happens when a node has many actions (scrolling/virtualization might be needed)
  • Action selection state management could be improved with explicit loading states

🔴 Issues Found

Test Failure Analysis:
The failing test ActiveExecutions shutdown Should cancel only executions with response-promises by default appears to be unrelated to your changes. This looks like a flaky test in the backend execution layer, not related to the frontend NDV changes you've made.

Potential Issues:

  1. Tab state persistence - When switching between tabs, there's no clear state preservation mechanism for partially filled forms
  2. Accessibility - Tab navigation might need aria-labels for screen readers, especially for icon-only tabs in compact mode

🏆 Code Examples of Excellence

The action selection flow is particularly well implemented:

// NodeSettings.vue:566-579 - Clean action selection with automatic flow
function handleSelectAction(params: INodeParameters) {
  // Update parameters first
  for (const [key, value] of Object.entries(params)) {
    valueChanged({ name: `parameters.${key}`, value });
  }
  
  // Smart navigation to next required step
  if (isDisplayingCredentials.value && !areAllCredentialsSet.value) {
    onTabSelect('credential');
    return;
  }
  
  if (parametersByTab.value.params.length > 0) {
    onTabSelect('params');
  }
}

📋 Recommendations

  1. Add loading states for action selection to improve perceived performance
  2. Consider adding keyboard navigation for accessibility between tabs
  3. Add unit tests for the new useNodeCredentialOptions composable
  4. Document the tab flow logic in code comments for future maintainers

Overall Assessment

This is a high-quality implementation that successfully addresses the UX challenge of limited space in zoomed view. The code is clean, well-organized, and follows Vue 3 best practices. The failing test appears unrelated to your changes and shouldn't block the PR.

Recommendation: Approve with minor suggestions addressed


@autologie autologie marked this pull request as ready for review August 1, 2025 10:24
Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cubic analysis

1 issue found across 17 files • Review in cubic

React with 👍 or 👎 to teach cubic. You can also tag @cubic-dev-ai to give feedback, ask questions, or re-run the review.

Copy link
Contributor

@MiloradFilipovic MiloradFilipovic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks really nice 👌
Found two small visual glitches:

  1. When adding webhook auth for wait node, auth tab is added before params:
Screen.Recording.2025-08-01.at.13.21.53.mov
  1. Toggles look a bit weird in this view:
Image

@MiloradFilipovic MiloradFilipovic self-requested a review August 1, 2025 11:24
Copy link
Contributor

@MiloradFilipovic MiloradFilipovic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚀

@autologie
Copy link
Contributor Author

@MiloradFilipovic thank you, I think we didn't consider the case where auth field is conditional. I'll discuss this with David and Jake. The UI glitch is a known issue – we'll do an investigation.

Copy link

currents-bot bot commented Aug 1, 2025

E2E Tests: n8n tests passed after 5m 50.8s

🟢 500 · 🔴 0 · ⚪️ 0

View Run Details

Run Details

  • Project: n8n

  • Groups: 1

  • Framework: Currents

  • Run Status: Passed

  • Commit: f090c73

  • Spec files: 105

  • Overall tests: 500

  • Duration: 5m 50.8s

  • Parallelization: 1


This message was posted automatically by currents.dev | Integration Settings

@autologie autologie merged commit 4deb0b2 into master Aug 1, 2025
47 checks passed
@autologie autologie deleted the sug-94-cred-and-actions-tab branch August 1, 2025 11:36
cstuncsik pushed a commit that referenced this pull request Aug 1, 2025
despairblue pushed a commit that referenced this pull request Aug 4, 2025
@janober
Copy link
Member

janober commented Aug 4, 2025

Got released with [email protected]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
n8n team Authored by the n8n team Released
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants