46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
import { ArrowDown2 } from "iconsax-react";
|
|
import { FC, SelectHTMLAttributes } from "react";
|
|
import { clx } from "../helpers/utils";
|
|
import Error from "./Error";
|
|
|
|
export type ItemsSelectType = {
|
|
value: string;
|
|
label: string;
|
|
};
|
|
type Props = {
|
|
className?: string;
|
|
items: ItemsSelectType[];
|
|
error_text?: string;
|
|
placeholder?: string;
|
|
label?: string;
|
|
labelClassName?: string;
|
|
} & SelectHTMLAttributes<HTMLSelectElement>;
|
|
|
|
const Select: FC<Props> = (props: Props) => {
|
|
return (
|
|
<div className="w-full relative">
|
|
{props.label && <label className={clx("text-sm", props.labelClassName)}>{props.label}</label>}
|
|
<div className={clx("relative", props.label && "mt-1")}>
|
|
<select {...props} className={clx("w-full text-black block border appearance-none border-border px-2.5 h-10 text-sm rounded-2.5 bg-gray", props.className)}>
|
|
{props.placeholder && (
|
|
<option value="" disabled selected={!props.value}>
|
|
{props.placeholder}
|
|
</option>
|
|
)}
|
|
{props.items?.map((item) => {
|
|
return (
|
|
<option key={item.value} value={item.value}>
|
|
{item.label}
|
|
</option>
|
|
);
|
|
})}
|
|
</select>
|
|
<ArrowDown2 size={16} color="black" className="absolute z-0 top-0 bottom-0 my-auto left-2" />
|
|
</div>
|
|
{props.error_text && props.error_text !== "" ? <Error errorText={props.error_text} /> : null}
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default Select;
|