import { Stack } from "@mui/material"; import MenuItem from "@mui/material/MenuItem"; import { useTheme } from "@mui/material"; import { useTranslation } from "react-i18next"; import { useForm, Controller } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod/dist/zod.js"; import { Dialog, TextField, Select } from "@/Components/inputs"; import { useAddTeamMemberForm } from "@/Hooks/useAddTeamMemberForm"; import type { AddTeamMemberFormData } from "@/Validation/addTeamMember"; import type { UserRole, User } from "@/Types/User"; import { usePost } from "@/Hooks/UseApi"; import { LAYOUT } from "@/Utils/Theme/constants"; interface AddTeamMemberDialogProps { open: boolean; onClose: () => void; onSuccess?: () => void; } interface RegisterPayload { firstName: string; lastName: string; email: string; password: string; role: string[]; } export const AddTeamMemberDialog = ({ open, onClose, onSuccess, }: AddTeamMemberDialogProps) => { const theme = useTheme(); const { t } = useTranslation(); const { schema, defaults } = useAddTeamMemberForm(); const { post, loading } = usePost(); const { control, handleSubmit, reset, setError } = useForm({ resolver: zodResolver(schema), defaultValues: defaults, values: defaults, }); const roleOptions: { value: UserRole; label: string }[] = [ { value: "admin", label: t("common.auth.roles.admin") }, { value: "user", label: t("common.auth.roles.user") }, { value: "demo", label: t("common.auth.roles.demo") }, ]; const handleClose = () => { reset(); onClose(); }; const onSubmit = async (data: AddTeamMemberFormData) => { if (loading) return; const { confirm, ...userData } = data; const payload: RegisterPayload = userData; const result = await post("/auth/users", payload); if (result?.success) { reset(); onClose(); onSuccess?.(); } else if (result?.msg) { if (result.msg.toLowerCase().includes("email")) { setError("email", { message: result.msg }); } } }; return ( ( )} /> ( )} /> ( )} /> ( )} /> ( )} /> ( )} /> ); };