1
0
mirror of https://github.com/XFox111/TabsAsideExtension.git synced 2026-04-22 07:58:01 +03:00
Files
TabsAsideExtension/entrypoints/sidepanel/layouts/collections/SortCollectionsButton.tsx
T
xfox111 2bd9337e63 Major 3.0 (#118)
Co-authored-by: Maison da Silva <maisonmdsgreen@hotmail.com>
2025-07-30 15:02:26 +03:00

47 lines
1.7 KiB
TypeScript

import { CollectionSortMode } from "@/entrypoints/sidepanel/utils/sortCollections";
import { Button, Menu, MenuItemRadio, MenuList, MenuPopover, MenuTrigger, Tooltip } from "@fluentui/react-components";
import * as ic from "@fluentui/react-icons";
export default function SortCollectionsButton({ value, onChange }: SortCollectionsButtonProps): React.ReactElement
{
const ColorSortIcon = ic.bundleIcon(ic.ArrowSort20Filled, ic.ArrowSort20Regular);
return (
<Menu
checkedValues={ { sort: value ? [value] : [] } }
onCheckedValueChange={ (_, e) => onChange?.(e.checkedItems[0] as CollectionSortMode) }
>
<Tooltip relationship="label" content={ i18n.t("main.list.searchbar.sort.title") }>
<MenuTrigger disableButtonEnhancement>
<Button appearance="subtle" icon={ <ColorSortIcon /> } />
</MenuTrigger>
</Tooltip>
<MenuPopover>
<MenuList>
{ Object.entries(sortIcons).map(([key, Icon]) =>
<MenuItemRadio key={ key } name="sort" value={ key } icon={ <Icon /> }>
{ i18n.t(`main.list.searchbar.sort.options.${key as CollectionSortMode}`) }
</MenuItemRadio>
) }
</MenuList>
</MenuPopover>
</Menu>
);
}
export type SortCollectionsButtonProps =
{
value?: CollectionSortMode | null;
onChange?: (value: CollectionSortMode) => void;
};
const sortIcons: Record<CollectionSortMode, ic.FluentIcon> =
{
newest: ic.bundleIcon(ic.Sparkle20Filled, ic.Sparkle20Regular),
oldest: ic.bundleIcon(ic.History20Filled, ic.History20Regular),
ascending: ic.bundleIcon(ic.TextSortAscending20Filled, ic.TextSortAscending20Regular),
descending: ic.bundleIcon(ic.TextSortDescending20Filled, ic.TextSortDescending20Regular),
custom: ic.bundleIcon(ic.Star20Filled, ic.Star20Regular)
};