import { Button, Input, Modal, ModalDialog, Radio, RadioGroup } from "@mui/joy"; import { isUndefined } from "lodash-es"; import { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import { useTranslation } from "react-i18next"; import useLoading from "../hooks/useLoading"; import useUserStore from "../stores/v1/user"; import Icon from "./Icon"; interface Props { user?: User; onClose: () => void; onConfirm?: () => void; } interface State { userCreate: UserCreate; } const roles: Role[] = ["USER", "ADMIN"]; const CreateUserDialog: React.FC = (props: Props) => { const { onClose, onConfirm, user } = props; const { t } = useTranslation(); const userStore = useUserStore(); const [state, setState] = useState({ userCreate: { email: "", nickname: "", password: "", role: "USER", }, }); const requestState = useLoading(false); const isCreating = isUndefined(user); useEffect(() => { if (user) { setState({ ...state, userCreate: Object.assign(state.userCreate, { email: user.email, nickname: user.nickname, password: "", role: user.role, }), }); } }, [user]); const setPartialState = (partialState: Partial) => { setState({ ...state, ...partialState, }); }; const handleEmailInputChange = (e: React.ChangeEvent) => { setPartialState({ userCreate: Object.assign(state.userCreate, { email: e.target.value.toLowerCase(), }), }); }; const handleNicknameInputChange = (e: React.ChangeEvent) => { setPartialState({ userCreate: Object.assign(state.userCreate, { nickname: e.target.value, }), }); }; const handlePasswordInputChange = (e: React.ChangeEvent) => { setPartialState({ userCreate: Object.assign(state.userCreate, { password: e.target.value, }), }); }; const handleRoleInputChange = (e: React.ChangeEvent) => { setPartialState({ userCreate: Object.assign(state.userCreate, { role: e.target.value, }), }); }; const handleSaveBtnClick = async () => { if (isCreating && (!state.userCreate.email || !state.userCreate.nickname || !state.userCreate.password)) { toast.error("Please fill all inputs"); return; } try { if (user) { const userPatch: UserPatch = { id: user.id, }; if (user.email !== state.userCreate.email) { userPatch.email = state.userCreate.email; } if (user.nickname !== state.userCreate.nickname) { userPatch.nickname = state.userCreate.nickname; } if (user.role !== state.userCreate.role) { userPatch.role = state.userCreate.role; } await userStore.patchUser(userPatch); } else { await userStore.createUser(state.userCreate); } if (onConfirm) { onConfirm(); } else { onClose(); } } catch (error: any) { console.error(error); toast.error(error.response.data.message); } }; return (
{isCreating ? "Create User" : "Edit User"}
Email *
Nickname *
{isCreating && (
Password *
)}
Role *
{roles.map((role) => ( ))}
); }; export default CreateUserDialog;