Availability Slider - #346
Conversation
📝 WalkthroughWalkthroughAdds a minimum-availability slider filter to the event results page. A new ChangesAvailability Filters Feature
Estimated code review effort🎯 4 (Complex) | ⏱️ ~50 minutes 🚥 Pre-merge checks | ❌ 1❌ Failed checks (1 warning)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
frontend/src/features/event/results/lib/use-results.ts (1)
66-88: 🎯 Functional Correctness | 🟠 MajorKeep the server mutation inside the transition.
removeOptimisticParticipant(...)andupdateOptimisticAvailabilities(...)run instartTransition, butawait removePerson(...)happens after that transition ends. With React 19useOptimistic, the optimistic overlay only stays while the action/transition is pending, so the removed participant can briefly reappear until revalidation lands. Await the mutation inside the same transition/action.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 8c2bae8b-788c-45f1-8c34-24cba5ad1bc8
⛔ Files ignored due to path filters (1)
frontend/package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (12)
frontend/package.jsonfrontend/src/app/(event)/[event-code]/page-client.tsxfrontend/src/features/event/results/attendees/mobile-drawer.tsxfrontend/src/features/event/results/attendees/participant-chip.tsxfrontend/src/features/event/results/attendees/participant-list.tsxfrontend/src/features/event/results/components/availability-filters.tsxfrontend/src/features/event/results/components/banners.tsxfrontend/src/features/event/results/components/display-settings.tsxfrontend/src/features/event/results/components/share-menu.tsxfrontend/src/features/event/results/lib/use-results.tsfrontend/src/features/event/results/lib/utils.tsfrontend/src/lib/messages.ts
💤 Files with no reviewable changes (1)
- frontend/src/features/event/results/components/display-settings.tsx
| /> | ||
| </Slider.Track> | ||
|
|
||
| <div className="pointer-events-none absolute inset-0 mt-10 md:m-2 md:mt-1"> |
There was a problem hiding this comment.
Instead of adding side margins to the ticks, I think it would look better to have the knob extend slightly over the bounds of the track. This way, the knob can be centered on the ticks, and the ticks on the ends can be lined up with the concentric points of the ends.
Let me know if that doesn't make sense.
There was a problem hiding this comment.
The radix library does not allow for extending the knob over the track. It intentionally keeps it within the bounds of the track to maintain calculations.
|
Also, I think it would make more sense to have the availability slider displayed above the time zone selector, since it will probably be used more often. |
This PR adds a slider to the results page that allows users to only show time slots with at least a certain number of people are available.
Availability Slider
The slider lives in the same panel as the "show best times" checkbox within a component named
AvailabilityFilters. It acts as a master filter with the following interactions:To improve visual feedback, the slider has tick marks that are scaled and positioned based on the total number of participants. The endpoints are explicitly labeled with numbers and each major interval (multiples of 10 and 5) have sightly taller markers. The standard one by one increments are hidden if there are 50 or more participants to prevent overcrowding.
AvailabilityFiltersToast ReplacementOriginally, when a user selected the checkbox and no matching times existed, a toast would appear in the bottom right corner, blocking the filter panel. This toast has been replaced with an inline banner to communicate problematic filter combinations.
Mobile Button
For mobile screens, a new filters button was added to the persistent footer, next to the Share button. The slider track was modified to be thicker for easier interaction.