feat: implement <DropdownRadio* /> to <PresetMenu /> (#21910)

This pull-request implements a `<CheckboxRadioGroup />` and
`<CheckboxRadioItem />` to our filtering menus. This means that people
will be able to actively see what preset filter is applied when opening
the filtering dropdown menu.

| Old | New | 
| --- | --- |
| <img width="286" height="407" alt="OLD_FILTER_MENU"
src="https://github.com/user-attachments/assets/791ba518-a949-4f69-b0e7-ad09ec521971"
/> | <img width="286" height="407" alt="NEW_FILTER_MENU"
src="https://github.com/user-attachments/assets/7e789d75-cb4c-4ad0-8c32-5a7087fb1626"
/> |
This commit is contained in:
Jake Howell
2026-02-04 21:27:11 +11:00
committed by GitHub
parent 83f9d0dcd7
commit ad1cdb3a1c
2 changed files with 17 additions and 8 deletions
@@ -165,6 +165,7 @@ export const DropdownMenuRadioItem = forwardRef<
"relative flex cursor-default select-none items-center rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none transition-colors",
"focus:bg-surface-secondary focus:text-content-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
"data-[state=checked]:bg-surface-secondary data-[state=checked]:text-content-primary",
"font-medium",
],
className,
)}
+16 -8
View File
@@ -11,6 +11,8 @@ import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuRadioGroup,
DropdownMenuRadioItem,
DropdownMenuSeparator,
DropdownMenuTrigger,
} from "components/DropdownMenu/DropdownMenu";
@@ -223,6 +225,7 @@ export const Filter: FC<FilterProps> = ({
) : (
<>
<PresetMenu
value={filter.query}
onSelect={(query) => filter.update(query)}
presets={presets}
learnMoreLink={learnMoreLink}
@@ -265,6 +268,7 @@ export const Filter: FC<FilterProps> = ({
};
interface PresetMenuProps {
value: string;
presets: PresetFilter[];
learnMoreLink?: string;
learnMoreLabel2?: string;
@@ -273,6 +277,7 @@ interface PresetMenuProps {
}
const PresetMenu: FC<PresetMenuProps> = ({
value,
presets,
learnMoreLink,
learnMoreLabel2,
@@ -288,14 +293,17 @@ const PresetMenu: FC<PresetMenuProps> = ({
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent side="bottom" align="start">
{presets.map((presetFilter) => (
<DropdownMenuItem
onSelect={() => onSelect(presetFilter.query)}
key={presetFilter.name}
>
{presetFilter.name}
</DropdownMenuItem>
))}
<DropdownMenuRadioGroup value={value}>
{presets.map((presetFilter) => (
<DropdownMenuRadioItem
value={presetFilter.query}
onSelect={() => onSelect(presetFilter.query)}
key={presetFilter.name}
>
{presetFilter.name}
</DropdownMenuRadioItem>
))}
</DropdownMenuRadioGroup>
{(learnMoreLink || learnMoreLink2) && <DropdownMenuSeparator />}
{learnMoreLink && (
<DropdownMenuItem asChild>