Skip to content

feat(webapp): redesign integrations page#5176

Merged
kaposke merged 45 commits intomasterfrom
gui/NAN-4480/feat-redesign-integrations-page
Jan 5, 2026
Merged

feat(webapp): redesign integrations page#5176
kaposke merged 45 commits intomasterfrom
gui/NAN-4480/feat-redesign-integrations-page

Conversation

@kaposke
Copy link
Contributor

@kaposke kaposke commented Dec 19, 2025

Deployed to development for testing (check if it's still there!) Server deployment is having problems, so if you're having bugs saving auth settings, checkout to the branch and test locally

Huge redesign of the integrations page. This includes:

  • List of functions (now a table with tabs)
  • Individual functions page
    • New way of rendering inputs and outputs
  • Settings page (with all the coverage for every auth type)

Video walkthrough:
https://www.loom.com/share/d84c46fb8f6742a1b159d4688ffe5bf5

It's a lot of code so I expect to have a few very visible mistakes, or duplicated code here and there. Don't hesitate to point anything out.


The functions tab now groups entries with inline enable/disable confirmations and deep links into a dedicated detail view that renders expandable JSON schemas for inputs and outputs, while the settings tab uses reusable inline editors with per-field confirmation flows to update each authentication mode in place.

Affected Areas

• packages/webapp/src/pages/Integrations/providerConfigKey
• packages/webapp/src/components-v2
• packages/server/lib/controllers/v1/integrations/providerConfigKey/patchIntegration.ts
• packages/server/lib/routes.private.ts
• packages/types/lib/integration/api.ts
• packages/webapp/src/index.css
• packages/webapp/package.json


This summary was automatically generated by @propel-code-bot

@linear
Copy link

linear bot commented Dec 19, 2025

@my-senior-dev-pr-review
Copy link

my-senior-dev-pr-review bot commented Dec 19, 2025

🤖 My Senior Dev — Analysis Complete

👤 For @kaposke

📁 Expert in packages/ (71 edits) • ⚡ 4th PR this month

View your contributor analytics →


📊 50 files reviewed • 7 high risk • 11 need attention

🚨 High Risk:

  • packages/server/lib/controllers/v1/integrations/providerConfigKey/patchIntegration.ts — Changes affect authentication handling and may expose APIs to incorrect data handling.
  • packages/webapp/src/pages/Integrations/providerConfigKey/Settings/components/AppPrivateKeyInput.tsx — Critical for managing sensitive data, requiring careful handling of input values for security.

⚠️ Needs Attention:

  • packages/webapp/src/pages/Integrations/components/AuthBadge.tsx — Modifications might impact UI functionality with possible errors in rendering states.
  • packages/webapp/src/pages/Integrations/components/FunctionSwitch.tsx — Handles toggle actions which could affect state management and user input.
  • +3 more concerns...

🚀 Open Interactive Review →

The full interface unlocks features not available in GitHub:

  • 💬 AI Chat — Ask questions on any file, get context-aware answers
  • 🔍 Smart Hovers — See symbol definitions and usage without leaving the diff
  • 📚 Code Archeology — Understand how files evolved over time (/archeology)
  • 🎯 Learning Insights — See how this PR compares to similar changes

💬 Chat here: @my-senior-dev explain this change — or try @chaos-monkey @security-auditor @optimizer @skeptic @junior-dev

📖 View all 12 personas & slash commands

You can interact with me by mentioning @my-senior-dev in any comment:

In PR comments or on any line of code:

  • Ask questions about the code or PR
  • Request explanations of specific changes
  • Get suggestions for improvements

Slash commands:

  • /help — Show all available commands
  • /archeology — See the history and evolution of changed files
  • /profile — Performance analysis and suggestions
  • /expertise — Find who knows this code best
  • /personas — List all available AI personas

AI Personas (mention to get their perspective):

Persona Focus
@chaos-monkey 🐵 Edge cases & failure scenarios
@skeptic 🤨 Challenge assumptions
@optimizer Performance & efficiency
@security-auditor 🔒 Security vulnerabilities
@accessibility-advocate Inclusive design
@junior-dev 🌱 Simple explanations
@tech-debt-collector 💳 Code quality & shortcuts
@ux-champion 🎨 User experience
@devops-engineer 🚀 Deployment & scaling
@documentation-nazi 📚 Documentation gaps
@legacy-whisperer 🏛️ Working with existing code
@test-driven-purist Testing & TDD

For the best experience, view this PR on myseniordev.com — includes AI chat, file annotations, and interactive reviews.

@kaposke kaposke changed the base branch from master to gui/NAN-4480/feat-new-components-for-integrations-page December 19, 2025 01:14
@kaposke kaposke force-pushed the gui/NAN-4480/feat-redesign-integrations-page branch 3 times, most recently from 5a40f7f to a3d6fe2 Compare December 19, 2025 16:17
Base automatically changed from gui/NAN-4480/feat-new-components-for-integrations-page to master December 19, 2025 16:22
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Had to make things optional because we now do per-field saves. Not a single form for these anymore. Curious if there's any unforeseen consequence.

Copy link
Collaborator

Choose a reason for hiding this comment

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

can a partial but invalid state be processed and stored successfully?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Hmm not sure I got what you mean

Copy link
Contributor

Choose a reason for hiding this comment

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

Technically for a PATCH endpoint that's fine to only send partial updates.

@kaposke kaposke requested a review from a team December 19, 2025 18:19
@kaposke kaposke marked this pull request as ready for review December 19, 2025 18:19
onFunctionClick?: (func: NangoSyncConfig) => void;
integration: ApiIntegration;
}> = ({ groupedFunctions, onFunctionClick, integration }) => {
return (
Copy link
Collaborator

@TBonnin TBonnin Dec 19, 2025

Choose a reason for hiding this comment

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

the hover and group header background color seems to be the same. Making it hard to differentiate when hovering with the mouse

Image

Copy link
Contributor Author

Choose a reason for hiding this comment

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

good catch, it had the wrong hover color


return (
<div className="flex flex-col gap-1.5">
{Object.entries(schema.properties || {}).map(([name, property]) => (
Copy link
Collaborator

Choose a reason for hiding this comment

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

should we only show the N first top level properties in case a schema has tons of them?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Sure. I'm curious to see a case where it gets crazy enough though

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I'd say it looks Ok until level 7 (this is in it's minimum width). I'll cap it there.
image

Copy link
Collaborator

Choose a reason for hiding this comment

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

I'll cap it at 3-4. I feel like everything more complicated isn't going to be read in the browser anyway

if (body.appLink !== undefined) {
integration.app_link = body.appLink;
}
if (body.appId !== undefined || body.privateKey !== undefined) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

why the if combine with the spread operator below with the same condition

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Removed

@marcindobry
Copy link
Contributor

Food for thought:

If the action output only has 1 schema, would it make sense to just hide that schema name at the top? Otherwise it looks out-of-place and it's not clear what it means. If there were 2, then clicking between them would make it clear what they are.

image

@marcindobry
Copy link
Contributor

It's hard to show on video, but when I click the "Enabled" toggle on the actions page, turning on shows a spinner indicating it is loading, but turning off doesn't have any feedback that stuff is happening in the background and it the toggle does turn off after a moment, but it feels a bit more as if the UI was "frozen". Should we add a spinner to both transitions while the request is in-flight?

https://www.loom.com/share/934dfc1f835f448eb79460465504d45c

Copy link
Contributor

@marcindobry marcindobry left a comment

Choose a reason for hiding this comment

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

Pretty sure I missed some things but hopefully nothing major 🙈

@kaposke kaposke added this pull request to the merge queue Jan 5, 2026
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to no response for status checks Jan 5, 2026
@kaposke kaposke added this pull request to the merge queue Jan 5, 2026
Merged via the queue into master with commit c77c777 Jan 5, 2026
24 checks passed
@kaposke kaposke deleted the gui/NAN-4480/feat-redesign-integrations-page branch January 5, 2026 18:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants