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;