import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "./ui/select"; import { mobile } from "@/utils/device.ts"; import React, { useEffect, useState } from "react"; import { Badge } from "./ui/badge.tsx"; export type SelectItemBadgeProps = { variant: "default" | "gold"; name: string; }; export type SelectItemProps = { name: string; value: string; badge?: SelectItemBadgeProps; tag?: any; icon?: React.ReactNode; }; type SelectGroupProps = { current: SelectItemProps; list: SelectItemProps[]; onChange?: (select: string) => void; maxElements?: number; className?: string; classNameDesktop?: string; classNameMobile?: string; side?: "left" | "right" | "top" | "bottom"; selectGroupTop?: SelectItemProps; selectGroupBottom?: SelectItemProps; }; function GroupSelectItem(props: SelectItemProps) { return (
{props.icon &&
{props.icon}
} {props.value} {props.badge && ( {props.badge.name} )}
); } function SelectGroupDesktop(props: SelectGroupProps) { const max: number = props.maxElements || 5; const range = props.list.length > max ? max : props.list.length; const display = props.list.slice(0, range); const hidden = props.list.slice(range); return (
{display.map((select: SelectItemProps, idx: number) => (
props.onChange?.(select.name)} className={`select-group-item ${ select == props.current ? "active" : "" }`} >
))} {props.list.length > max && ( )}
); } function SelectGroupMobile(props: SelectGroupProps) { return (
); } function SelectGroup(props: SelectGroupProps) { const [state, setState] = useState(mobile); useEffect(() => { window.addEventListener("resize", () => { setState(mobile); }); }, []); return state ? ( ) : ( ); } export default SelectGroup;