import { forwardRef, ReactNode } from "react"; import { IconProp } from "@fortawesome/fontawesome-svg-core"; import { faCaretDown, faCaretUp, faCheck } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import * as SelectPrimitive from "@radix-ui/react-select"; import { twMerge } from "tailwind-merge"; import { Spinner } from "../Spinner"; type Props = { children: ReactNode; placeholder?: string; className?: string; dropdownContainerClassName?: string; containerClassName?: string; isLoading?: boolean; position?: "item-aligned" | "popper"; isDisabled?: boolean; icon?: IconProp; isMulti?: boolean; iconClassName?: string; dropdownContainerStyle?: React.CSSProperties; side?: SelectPrimitive.SelectContentProps["side"]; }; export type SelectProps = Omit & Props; export const Select = forwardRef( ( { children, placeholder, className, isLoading, isDisabled, dropdownContainerClassName, position, containerClassName, iconClassName, dropdownContainerStyle, side, ...props }, ref ): JSX.Element => { return (
{ if (!props.onValueChange) return; const newValue = value === "EMPTY-VALUE" ? "" : value; props.onValueChange(newValue); }} disabled={isDisabled} >
{props.icon && }
{isLoading ? (
Loading...
) : ( children )}
); } ); Select.displayName = "Select"; export type SelectItemProps = Omit & { isDisabled?: boolean; isSelected?: boolean; customIcon?: IconProp; }; export const SelectItem = forwardRef( ({ children, className, isSelected, isDisabled, ...props }, forwardedRef) => { return ( {children} ); } ); SelectItem.displayName = "SelectItem"; export type SelectClearProps = Omit & { onClear: () => void; selectValue: string; }; export const SelectClear = forwardRef( ( { children, className, isSelected, isDisabled, onClear, selectValue, ...props }, forwardedRef ) => { return ( onClear()} onClick={() => onClear()} className={twMerge( "relative mb-0.5 flex cursor-pointer select-none items-center rounded-md py-2 pl-10 pr-4 text-sm outline-none transition-all hover:bg-mineshaft-500 data-[highlighted]:bg-mineshaft-700/80", isSelected && "bg-primary", isDisabled && "cursor-not-allowed text-gray-600 hover:bg-transparent hover:text-mineshaft-600", className )} ref={forwardedRef} >
{children}
); } ); SelectClear.displayName = "SelectClear";