"use client";
import { useTranslations } from "next-intl";
import { EntityMultiSelector } from "../../../../components/forms/EntityMultiSelector";
import { Modules } from "../../../../core";
import { Avatar, AvatarFallback, AvatarImage } from "../../../../shadcnui";
import { useCurrentUserContext } from "../../contexts";
import { UserInterface } from "../../data";
import { UserService } from "../../data/user.service";
function UserAvatarIcon({ className, url, name }: { className?: string; url?: string; name?: string }) {
return (
{name
? name
.split(" ")
.map((n: string) => n.charAt(0).toUpperCase())
.join("")
: "U"}
);
}
type UserMultiSelectProps = {
id: string;
form: any;
currentUser?: UserInterface;
label?: string;
placeholder?: string;
onChange?: (users?: UserInterface[]) => void;
maxCount?: number;
isRequired?: boolean;
};
export function UserMultiSelect({
id,
form,
currentUser,
label,
placeholder,
onChange,
isRequired = false,
}: UserMultiSelectProps) {
const t = useTranslations();
const { company } = useCurrentUserContext();
return (
id={id}
form={form}
label={label}
placeholder={placeholder || t("ui.search.button")}
emptyText={t("ui.search.no_results", { type: t("entities.users", { count: 2 }) })}
isRequired={isRequired}
retriever={(params) => UserService.findAllUsers(params)}
retrieverParams={{ companyId: company?.id }}
module={Modules.User}
getLabel={(user) => user.name}
toFormValue={(user) => ({ id: user.id, name: user.name, avatar: user.avatar })}
excludeId={currentUser?.id}
onChange={onChange}
renderOption={(user) => (
{user.name}
)}
/>
);
}