import { FC, useState } from "react"; import * as Yup from "yup"; import { useFormik } from "formik"; import { isNotEmpty, toAbsoluteUrl } from "../../../../../_digifi/helpers"; import { initialUser, User } from "../core/_models"; import clsx from "clsx"; import { useListView } from "../core/ListViewProvider"; import { UsersListLoading } from "../components/loading/UsersListLoading"; import { createUser, updateUser } from "../core/_requests"; import { useQueryResponse } from "../core/QueryResponseProvider"; type Props = { isUserLoading: boolean; user: User; }; const editUserSchema = Yup.object().shape({ email: Yup.string() .email("Wrong email format") .min(3, "Minimum 3 symbols") .max(50, "Maximum 50 symbols") .required("Email is required"), name: Yup.string() .min(3, "Minimum 3 symbols") .max(50, "Maximum 50 symbols") .required("Name is required"), }); const UserEditModalForm: FC = ({ user, isUserLoading }) => { const { setItemIdForUpdate } = useListView(); const { refetch } = useQueryResponse(); const [userForEdit] = useState({ ...user, avatar: user.avatar || initialUser.avatar, role: user.role || initialUser.role, position: user.position || initialUser.position, name: user.name || initialUser.name, email: user.email || initialUser.email, }); const cancel = (withRefresh?: boolean) => { if (withRefresh) { refetch(); } setItemIdForUpdate(undefined); }; const blankImg = toAbsoluteUrl("media/svg/avatars/blank.svg"); const userAvatarImg = toAbsoluteUrl(`media/${userForEdit.avatar}`); const formik = useFormik({ initialValues: userForEdit, validationSchema: editUserSchema, onSubmit: async (values, { setSubmitting }) => { setSubmitting(true); try { if (isNotEmpty(values.id)) { await updateUser(values); } else { await createUser(values); } } catch (ex) { console.error(ex); } finally { setSubmitting(true); cancel(true); } }, }); return ( <>
{/* begin::Scroll */}
{/* begin::Input group */}
{/* begin::Label */} {/* end::Label */} {/* begin::Image input */}
{/* begin::Preview existing avatar */}
{/* end::Preview existing avatar */} {/* begin::Label */} {/* */} {/* end::Label */} {/* begin::Cancel */} {/* */} {/* end::Cancel */} {/* begin::Remove */} {/* */} {/* end::Remove */}
{/* end::Image input */} {/* begin::Hint */} {/*
Allowed file types: png, jpg, jpeg.
*/} {/* end::Hint */}
{/* end::Input group */} {/* begin::Input group */}
{/* begin::Label */} {/* end::Label */} {/* begin::Input */} {formik.touched.name && formik.errors.name && (
{formik.errors.name}
)} {/* end::Input */}
{/* end::Input group */} {/* begin::Input group */}
{/* begin::Label */} {/* end::Label */} {/* begin::Input */} {/* end::Input */} {formik.touched.email && formik.errors.email && (
{formik.errors.email}
)}
{/* end::Input group */} {/* begin::Input group */}
{/* begin::Label */} {/* end::Label */} {/* begin::Roles */} {/* begin::Input row */}
{/* begin::Radio */}
{/* begin::Input */} {/* end::Input */} {/* begin::Label */} {/* end::Label */}
{/* end::Radio */}
{/* end::Input row */}
{/* begin::Input row */}
{/* begin::Radio */}
{/* begin::Input */} {/* end::Input */} {/* begin::Label */} {/* end::Label */}
{/* end::Radio */}
{/* end::Input row */}
{/* begin::Input row */}
{/* begin::Radio */}
{/* begin::Input */} {/* end::Input */} {/* begin::Label */} {/* end::Label */}
{/* end::Radio */}
{/* end::Input row */}
{/* begin::Input row */}
{/* begin::Radio */}
{/* begin::Input */} {/* end::Input */} {/* begin::Label */} {/* end::Label */}
{/* end::Radio */}
{/* end::Input row */}
{/* begin::Input row */}
{/* begin::Radio */}
{/* begin::Input */} {/* end::Input */} {/* begin::Label */} {/* end::Label */}
{/* end::Radio */}
{/* end::Input row */} {/* end::Roles */}
{/* end::Input group */}
{/* end::Scroll */} {/* begin::Actions */}
{/* end::Actions */}
{(formik.isSubmitting || isUserLoading) && } ); }; export { UserEditModalForm };