Skip to content

feat: redesign integrations page with Appwrite-style provider grid an… - #366

Merged
yash-pouranik merged 2 commits into
mainfrom
feature/settings-integrations-page
Jul 25, 2026
Merged

feat: redesign integrations page with Appwrite-style provider grid an…#366
yash-pouranik merged 2 commits into
mainfrom
feature/settings-integrations-page

Conversation

@yash-pouranik

@yash-pouranik yash-pouranik commented Jul 25, 2026

Copy link
Copy Markdown
Member

settings page redesign

Summary by CodeRabbit

  • New Features

    • Added a searchable OAuth2 provider grid with status indicators and branded provider icons.
    • Added a modal for enabling or disabling providers and editing client credentials.
    • Added redirect URL display with copy-to-clipboard support.
    • Added an OAuth2 & Social Providers shortcut from authentication settings to Integrations.
  • Improvements

    • Updated mail settings guidance and save behavior.
    • Clarified storage settings as “Storage Engines (BYOS)”.

@vercel

vercel Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
ur-backend-web-dashboard Ready Ready Preview, Comment Jul 25, 2026 12:38pm
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
urbackend Skipped Skipped Jul 25, 2026 12:38pm

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@yash-pouranik, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 31 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: be234608-f77e-411f-b8fe-42efafd03a3e

📥 Commits

Reviewing files that changed from the base of the PR and between 1198f8d and a17e56c.

📒 Files selected for processing (2)
  • apps/web-dashboard/src/components/Settings/IntegrationsSettings.jsx
  • apps/web-dashboard/src/pages/Auth.jsx
📝 Walkthrough

Walkthrough

OAuth provider management is consolidated in IntegrationsSettings.jsx with searchable provider cards and an editing modal. Auth.jsx removes its configuration flow and links to Integrations settings. Mail and storage settings receive related UI updates.

Changes

OAuth settings consolidation

Layer / File(s) Summary
OAuth provider grid and modal flow
apps/web-dashboard/src/components/Settings/IntegrationsSettings.jsx
Adds branded provider cards, search filtering, status states, credential editing, redirect URL copying, and API-backed provider updates.
Mail and storage settings updates
apps/web-dashboard/src/components/Settings/IntegrationsSettings.jsx
Updates mail hint text, save-button behavior, and the storage section label while retaining StorageConfigForm.
Auth page configuration handoff
apps/web-dashboard/src/pages/Auth.jsx
Removes page-local OAuth configuration and modal rendering, replacing it with a link to the Integrations settings tab.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant IntegrationsSettings
  participant AuthProvidersAPI
  User->>IntegrationsSettings: Select OAuth provider
  IntegrationsSettings->>IntegrationsSettings: Edit provider settings
  IntegrationsSettings->>AuthProvidersAPI: PATCH provider configuration
  AuthProvidersAPI-->>IntegrationsSettings: Return updated configuration
  IntegrationsSettings-->>User: Show updated provider status
Loading

Possibly related PRs

Suggested reviewers: nitin-kumar-yadav1307, udaycodespace

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title matches the main change: a redesign of the integrations page into an Appwrite-style provider grid with a settings modal.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/settings-integrations-page

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🧹 Nitpick comments (3)
apps/web-dashboard/src/pages/Auth.jsx (1)

407-416: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Update documentation for the relocated OAuth configuration flow.

OAuth provider setup moved from the Auth page to Settings → Integrations; repository docs and in-dashboard docs that reference the old location need updating. Want me to open an issue to track this?

As per coding guidelines: "When a user-facing flow changes, update both repository documentation and in-dashboard documentation."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/web-dashboard/src/pages/Auth.jsx` around lines 407 - 416, Update the
repository documentation and in-dashboard documentation references to OAuth
provider setup so they point to Settings → Integrations instead of the Auth
page. Locate references associated with the “OAuth2 & Social Providers” section
and preserve the existing provider configuration guidance while correcting the
navigation path.

Source: Coding guidelines

apps/web-dashboard/src/components/Settings/IntegrationsSettings.jsx (2)

379-398: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add dialog semantics and Escape handling to the modal.

The overlay lacks role="dialog"/aria-modal/labelling and does not close on Escape, unlike typical modal behavior. Focus also stays on the card behind it when opened.

♻️ Suggested additions
+                <div
+                    className="modal-overlay"
+                    role="dialog"
+                    aria-modal="true"
+                    aria-label={`${selectedProviderModal === 'github' ? 'GitHub' : 'Google'} OAuth2 settings`}

Plus an effect while the modal is open:

useEffect(() => {
    if (!selectedProviderModal) return;
    const onKey = (e) => { if (e.key === 'Escape') setSelectedProviderModal(null); };
    window.addEventListener('keydown', onKey);
    return () => window.removeEventListener('keydown', onKey);
}, [selectedProviderModal]);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/web-dashboard/src/components/Settings/IntegrationsSettings.jsx` around
lines 379 - 398, Update the selectedProviderModal modal flow to add
role="dialog", aria-modal="true", and an accessible label referencing the modal
heading. Add a useEffect keyed to selectedProviderModal that closes the modal on
Escape and removes the keydown listener on cleanup; also move focus into the
opened modal, such as focusing the existing close button or dialog container.

273-286: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Duplicated section headings from nested SettingsCard.

DatabaseConfigForm renders its own SettingsCard title="Database (MongoDB)" and StorageConfigForm renders title="Storage (BYOS)", so the new outer cards/headers ("MongoDB", "Storage Engines (BYOS)") duplicate them visually. Consider passing a flag to suppress the inner card chrome, or dropping the outer wrapper.

Also applies to: 369-376

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/web-dashboard/src/components/Settings/IntegrationsSettings.jsx` around
lines 273 - 286, Remove the redundant outer card and header wrappers around
DatabaseConfigForm and StorageConfigForm, or pass an explicit prop that
suppresses their inner SettingsCard chrome. Ensure each section displays only
one heading, preserving the existing DatabaseConfigForm title “Database
(MongoDB)” and StorageConfigForm title “Storage (BYOS)”.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/web-dashboard/src/components/Settings/IntegrationsSettings.jsx`:
- Around line 222-239: Update the provider card div in the integrations settings
rendering to use the established clickable-card accessibility pattern: add an
appropriate button role, make enabled cards keyboard-focusable, and handle
Enter/Space in onKeyDown by invoking openOAuthModal while preserving disabled
behavior. Rename the invalid justify style key to justifyContent so the spacing
is applied.
- Around line 140-144: Normalize auth providers before updating state or project
data so every provider, especially github, has clientSecret defaulted to an
empty string when missing. Apply this consistently to the patch response handled
near setAuthProviders and the project-load effect, preserving existing
clientSecret values.
- Around line 119-138: Update handleSaveOAuthModal to validate the selected
provider before issuing the PATCH: when updatedProviderData.enabled is true,
require a non-empty clientId and either a newly supplied clientSecret or an
existing stored secret. If credentials are missing, show the established
validation feedback, stop the save flow, and avoid setting or retaining the
PATCH request.

---

Nitpick comments:
In `@apps/web-dashboard/src/components/Settings/IntegrationsSettings.jsx`:
- Around line 379-398: Update the selectedProviderModal modal flow to add
role="dialog", aria-modal="true", and an accessible label referencing the modal
heading. Add a useEffect keyed to selectedProviderModal that closes the modal on
Escape and removes the keydown listener on cleanup; also move focus into the
opened modal, such as focusing the existing close button or dialog container.
- Around line 273-286: Remove the redundant outer card and header wrappers
around DatabaseConfigForm and StorageConfigForm, or pass an explicit prop that
suppresses their inner SettingsCard chrome. Ensure each section displays only
one heading, preserving the existing DatabaseConfigForm title “Database
(MongoDB)” and StorageConfigForm title “Storage (BYOS)”.

In `@apps/web-dashboard/src/pages/Auth.jsx`:
- Around line 407-416: Update the repository documentation and in-dashboard
documentation references to OAuth provider setup so they point to Settings →
Integrations instead of the Auth page. Locate references associated with the
“OAuth2 & Social Providers” section and preserve the existing provider
configuration guidance while correcting the navigation path.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 20b80ead-3805-47e2-9097-3771e6f069de

📥 Commits

Reviewing files that changed from the base of the PR and between 530edbb and 1198f8d.

📒 Files selected for processing (2)
  • apps/web-dashboard/src/components/Settings/IntegrationsSettings.jsx
  • apps/web-dashboard/src/pages/Auth.jsx

Comment thread apps/web-dashboard/src/components/Settings/IntegrationsSettings.jsx
Comment thread apps/web-dashboard/src/components/Settings/IntegrationsSettings.jsx
Comment thread apps/web-dashboard/src/components/Settings/IntegrationsSettings.jsx
@yash-pouranik
yash-pouranik temporarily deployed to feature/settings-integrations-page - urBackend-frankfrut PR #366 July 25, 2026 12:37 — with Render Destroyed
@vercel
vercel Bot temporarily deployed to Preview – urbackend July 25, 2026 12:37 Inactive
@yash-pouranik
yash-pouranik merged commit 8479ca6 into main Jul 25, 2026
12 checks passed
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.

1 participant