Skip to content

Replace Select with Popover in webhook signature selection UI #7219

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

Conversation

AmineAfia
Copy link
Contributor

@AmineAfia AmineAfia commented May 30, 2025

[Dashboard] Feature: Replace Select with Popover for Event and Function Signature Selection

Notes for the reviewer

This PR replaces the Select component with a Popover component for both event and function signature selection in the webhook filter details step. The change improves the user experience by providing a more customizable dropdown interface.

Key changes:

  • Replaced Select/SelectContent/SelectItem with Popover/PopoverContent/PopoverTrigger
  • Added state hooks to manage popover open states
  • Improved styling and layout of signature selection options
  • Maintained existing functionality for selecting signatures and updating form values

How to test

Test the webhook creation flow, specifically when selecting event or function signatures. Verify that:

  1. The popover opens and closes correctly
  2. Selecting a signature properly updates the form
  3. The selected signature displays correctly in the trigger button
  4. The signature details (name, hash/selector) are properly displayed

PR-Codex overview

This PR refactors the FilterDetailsStep component by replacing the Select dropdowns with a new SignatureDropdown component that utilizes a Popover for better UI/UX. This change improves the selection of event and function signatures.

Detailed summary

  • Removed Select components for event and function signatures.
  • Introduced SignatureDropdown component to handle signature selection.
  • Used Popover for dropdown functionality in SignatureDropdown.
  • Updated state management and props in SignatureDropdown.
  • Enhanced UI with better styling and accessibility features.

✨ Ask PR-Codex anything about this PR by commenting with /codex {your question}

Summary by CodeRabbit

  • New Features

    • Introduced a new dropdown for selecting event and function signatures, offering a clearer and more interactive selection experience.
  • Style

    • Updated the signature selection interface to use a popover-based dropdown for improved usability and consistency.

Copy link

vercel bot commented May 30, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
thirdweb-www ✅ Ready (Inspect) Visit Preview 💬 Add feedback May 30, 2025 1:26am
4 Skipped Deployments
Name Status Preview Comments Updated (UTC)
docs-v2 ⬜️ Skipped (Inspect) May 30, 2025 1:26am
login ⬜️ Skipped (Inspect) May 30, 2025 1:26am
thirdweb_playground ⬜️ Skipped (Inspect) May 30, 2025 1:26am
wallet-ui ⬜️ Skipped (Inspect) May 30, 2025 1:26am

@vercel vercel bot temporarily deployed to Preview – docs-v2 May 30, 2025 01:00 Inactive
@vercel vercel bot temporarily deployed to Preview – wallet-ui May 30, 2025 01:00 Inactive
@vercel vercel bot temporarily deployed to Preview – thirdweb_playground May 30, 2025 01:00 Inactive
@vercel vercel bot temporarily deployed to Preview – login May 30, 2025 01:00 Inactive
Copy link

changeset-bot bot commented May 30, 2025

⚠️ No Changeset found

Latest commit: 5234124

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

Copy link
Contributor

coderabbitai bot commented May 30, 2025

Walkthrough

The code replaces a custom Select component for signature selection with a new SignatureDropdown component built on a Popover UI. The SignatureDropdown is reusable, manages its own open state, and displays both primary and secondary signature information. The rest of the form logic remains unchanged, with only the selection UI updated.

Changes

File(s) Change Summary
.../webhooks/components/FilterDetailsStep.tsx Replaced custom Select with new SignatureDropdown (Popover-based), added SignatureDropdown and its props type.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant FilterDetailsStep
    participant SignatureDropdown

    User->>FilterDetailsStep: Interacts with form
    FilterDetailsStep->>SignatureDropdown: Renders dropdown with signatures
    User->>SignatureDropdown: Clicks dropdown button
    SignatureDropdown->>SignatureDropdown: Opens popover, displays list
    User->>SignatureDropdown: Selects a signature
    SignatureDropdown->>FilterDetailsStep: Calls onChange with selected value
    FilterDetailsStep->>FilterDetailsStep: Updates form field and ABI
Loading

📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f4e5cd1 and 5234124.

📒 Files selected for processing (1)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/FilterDetailsStep.tsx (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/FilterDetailsStep.tsx
⏰ Context from checks skipped due to timeout of 90000ms (8)
  • GitHub Check: E2E Tests (pnpm, esbuild)
  • GitHub Check: E2E Tests (pnpm, webpack)
  • GitHub Check: Size
  • GitHub Check: E2E Tests (pnpm, vite)
  • GitHub Check: Lint Packages
  • GitHub Check: Build Packages
  • GitHub Check: Unit Tests
  • GitHub Check: Analyze (javascript)
✨ Finishing Touches
  • 📝 Generate Docstrings

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor Author


How to use the Graphite Merge Queue

Add either label to this PR to merge it via the merge queue:

  • merge-queue - adds this PR to the back of the merge queue
  • hotfix - for urgent hot fixes, skip the queue and merge this PR next

You must have a Graphite account in order to use the merge queue. Sign up using this link.

An organization admin has enabled the Graphite Merge Queue in this repository.

Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue.

This stack of pull requests is managed by Graphite. Learn more about stacking.

@github-actions github-actions bot added the Dashboard Involves changes to the Dashboard. label May 30, 2025
Copy link

codecov bot commented May 30, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 55.63%. Comparing base (ac4ade6) to head (5234124).
Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #7219      +/-   ##
==========================================
- Coverage   55.65%   55.63%   -0.02%     
==========================================
  Files         908      908              
  Lines       58546    58546              
  Branches     4130     4128       -2     
==========================================
- Hits        32582    32572      -10     
- Misses      25858    25868      +10     
  Partials      106      106              
Flag Coverage Δ
packages 55.63% <ø> (ø)

see 1 file with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link
Contributor

github-actions bot commented May 30, 2025

size-limit report 📦

Path Size Loading time (3g) Running time (snapdragon) Total time
thirdweb (esm) 62.11 KB (0%) 1.3 s (0%) 196 ms (+118.28% 🔺) 1.5 s
thirdweb (cjs) 345.28 KB (0%) 7 s (0%) 642 ms (+5.99% 🔺) 7.6 s
thirdweb (minimal + tree-shaking) 5.7 KB (0%) 114 ms (0%) 74 ms (+1397% 🔺) 187 ms
thirdweb/chains (tree-shaking) 531 B (0%) 11 ms (0%) 21 ms (+867.41% 🔺) 31 ms
thirdweb/react (minimal + tree-shaking) 19.52 KB (0%) 391 ms (0%) 93 ms (+728.79% 🔺) 484 ms

@AmineAfia AmineAfia force-pushed the Replace_Select_with_Popover_in_webhook_signature_selection_UI branch from 604c55a to f4e5cd1 Compare May 30, 2025 01:07
@vercel vercel bot temporarily deployed to Preview – docs-v2 May 30, 2025 01:07 Inactive
@vercel vercel bot temporarily deployed to Preview – login May 30, 2025 01:07 Inactive
@vercel vercel bot temporarily deployed to Preview – wallet-ui May 30, 2025 01:07 Inactive
@vercel vercel bot temporarily deployed to Preview – thirdweb_playground May 30, 2025 01:07 Inactive
@AmineAfia AmineAfia marked this pull request as ready for review May 30, 2025 01:10
@AmineAfia AmineAfia requested review from a team as code owners May 30, 2025 01:10
Copy link
Contributor Author

@coderabbitai review

Copy link
Contributor

coderabbitai bot commented May 30, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@AmineAfia AmineAfia requested a review from joaquim-verges May 30, 2025 01:11
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (1)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/FilterDetailsStep.tsx (1)

61-117: Excellent SignatureDropdown component implementation.

The component is well-structured with proper:

  • State management using useState for open/close behavior
  • Accessibility with semantic button elements and keyboard navigation
  • Responsive design with proper width matching (--radix-popover-trigger-width)
  • Error handling with fallbacks for missing values
  • Clean separation of concerns with callback props

The implementation follows React and accessibility best practices.

Consider this minor performance optimization if the signatures array becomes large:

function SignatureDropdown({
  signatures,
  value,
  onChange,
  setAbi,
  buttonLabel,
  secondaryTextFormatter,
  disabled,
}: SignatureDropdownProps) {
  const [open, setOpen] = useState(false);
+ const selectedSignature = useMemo(
+   () => signatures.find((sig) => sig.signature === value),
+   [signatures, value]
+ );
  
  return (
    <Popover modal open={open} onOpenChange={setOpen}>
      <PopoverTrigger asChild>
        <button
          type="button"
          className={cn(
            "h-10 w-full rounded-md border bg-background px-3 py-2 text-left text-sm focus:outline-none focus:ring-2 focus:ring-ring disabled:opacity-50",
            !value && "text-muted-foreground",
          )}
          disabled={disabled}
        >
-         {value
-           ? signatures.find((sig) => sig.signature === value)?.name || ""
-           : buttonLabel}
+         {value ? selectedSignature?.name || "" : buttonLabel}
        </button>
      </PopoverTrigger>
      // ... rest of the component
    </Popover>
  );
}
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 819ce86 and f4e5cd1.

📒 Files selected for processing (1)
  • apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/FilterDetailsStep.tsx (3 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/FilterDetailsStep.tsx (1)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/utils/abiUtils.ts (1)
  • truncateMiddle (11-19)
⏰ Context from checks skipped due to timeout of 90000ms (2)
  • GitHub Check: Size
  • GitHub Check: Analyze (javascript)
🔇 Additional comments (3)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/FilterDetailsStep.tsx (3)

15-18: LGTM! Clean import updates for the UI refactor.

The imports are correctly updated to support the Popover-based implementation. Adding cn utility and useState hook are appropriate for the new component's functionality.

Also applies to: 21-21, 23-23


51-59: Well-defined interface with comprehensive typing.

The SignatureDropdownProps interface properly defines all necessary props with correct TypeScript types. The optional disabled prop and function signatures provide good flexibility.


376-385: Perfect integration of SignatureDropdown in the form.

Both usage instances correctly:

  • Pass all required props with proper values
  • Handle form state updates via onChange and setAbi callbacks
  • Provide contextually appropriate labels and formatters
  • Maintain existing form validation and error handling

The event signature uses truncateMiddle for better display of long signatures, while function signatures show the full selector - this differentiation makes sense for the respective use cases.

Also applies to: 389-398

Copy link
Contributor

graphite-app bot commented May 30, 2025

Merge activity

## [Dashboard] Feature: Replace Select with Popover for Event and Function Signature Selection

## Notes for the reviewer
This PR replaces the Select component with a Popover component for both event and function signature selection in the webhook filter details step. The change improves the user experience by providing a more customizable dropdown interface.

Key changes:
- Replaced Select/SelectContent/SelectItem with Popover/PopoverContent/PopoverTrigger
- Added state hooks to manage popover open states
- Improved styling and layout of signature selection options
- Maintained existing functionality for selecting signatures and updating form values

## How to test
Test the webhook creation flow, specifically when selecting event or function signatures. Verify that:
1. The popover opens and closes correctly
2. Selecting a signature properly updates the form
3. The selected signature displays correctly in the trigger button
4. The signature details (name, hash/selector) are properly displayed

<!-- start pr-codex -->

---

## PR-Codex overview
This PR refactors the `FilterDetailsStep` component to replace the `Select` dropdowns with a new `SignatureDropdown` component, enhancing the UI interaction by using a `Popover` for selecting event and function signatures.

### Detailed summary
- Removed `Select` dropdowns for event and function signatures.
- Introduced `SignatureDropdown` component for better UI/UX.
- Integrated `Popover` for displaying signature options.
- Updated state management for selected signatures and ABIs.
- Added new props for `SignatureDropdown` to handle selection and display.

> ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}`

<!-- end pr-codex -->

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Introduced a new dropdown for selecting event and function signatures, offering a clearer and more interactive selection experience.

- **Style**
  - Updated the signature selection interface to use a popover-based dropdown for improved usability and consistency.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@graphite-app graphite-app bot force-pushed the Replace_Select_with_Popover_in_webhook_signature_selection_UI branch from f4e5cd1 to 5234124 Compare May 30, 2025 01:19
@vercel vercel bot temporarily deployed to Preview – docs-v2 May 30, 2025 01:19 Inactive
@vercel vercel bot temporarily deployed to Preview – thirdweb_playground May 30, 2025 01:19 Inactive
@vercel vercel bot temporarily deployed to Preview – wallet-ui May 30, 2025 01:19 Inactive
@vercel vercel bot temporarily deployed to Preview – login May 30, 2025 01:19 Inactive
@graphite-app graphite-app bot merged commit 5234124 into main May 30, 2025
24 checks passed
@graphite-app graphite-app bot deleted the Replace_Select_with_Popover_in_webhook_signature_selection_UI branch May 30, 2025 01:27
@vercel vercel bot temporarily deployed to Production – docs-v2 May 30, 2025 01:27 Inactive
@vercel vercel bot temporarily deployed to Production – thirdweb_playground May 30, 2025 01:27 Inactive
@vercel vercel bot temporarily deployed to Production – login May 30, 2025 01:27 Inactive
@vercel vercel bot temporarily deployed to Production – wallet-ui May 30, 2025 01:27 Inactive
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Dashboard Involves changes to the Dashboard.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants