import { Button, Form, Input, Select, Upload, Image, UploadFile, GetProp, UploadProps, message, Spin, } from "antd"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import { useUserSelector } from "@/store/userStore"; import { UserCreate as NewUserCreate } from "@/types/user"; import { UserService } from "@/services/userService"; import { LoadingOutlined } from "@ant-design/icons"; const { Option } = Select; type FileType = Parameters>[0]; const getBase64 = (file: FileType): Promise => new Promise((resolve, reject) => { const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = () => resolve(reader.result as string); reader.onerror = (error) => reject(error); }); interface UserCreateProps { closeDrawer: () => void; getUsers: () => Promise; } export default function UserCreate({ closeDrawer, getUsers }: UserCreateProps) { const user = useUserSelector(); const { t } = useTranslation(); const [previewOpen, setPreviewOpen] = useState(false); const [previewImage, setPreviewImage] = useState(""); const [loading, setLoading] = useState(false); const [fileList, setFileList] = useState([]); const handlePreview = async (file: UploadFile) => { if (!file.url && !file.preview) { file.preview = await getBase64(file.originFileObj as FileType); } setPreviewImage(file.url || (file.preview as string)); setPreviewOpen(true); }; const handleChange: UploadProps["onChange"] = ({ fileList: newFileList }) => setFileList(newFileList); const onFinish = async (values: NewUserCreate) => { setLoading(true); await UserService.createUser(values); await getUsers(); closeDrawer(); setLoading(false); message.info(t("createdAccountMessage"), 4); }; const customUploadButton = (
add_photo_alternate
{t("selectPhoto")}
); const photoToUpload = (
false} > {fileList.length > 0 ? null : customUploadButton} {previewImage && ( setPreviewOpen(visible), afterOpenChange: (visible) => !visible && setPreviewImage(""), }} src={previewImage} /> )}
); return (
{photoToUpload}
); }