import { Field, Form, Formik } from "formik"; import { useState } from "react"; import { Alert } from "react-bootstrap"; import Modal from "react-bootstrap/Modal"; import { Button, Loading } from "src/components"; import { useSetUser, useUser } from "src/hooks"; import { intl } from "src/locale"; import { validateEmail, validateString } from "src/modules/Validations"; import { showSuccess } from "src/notifications"; interface Props { userId: number | "me" | "new"; onClose: () => void; } export function UserModal({ userId, onClose }: Props) { const { data, isLoading, error } = useUser(userId); const { data: currentUser, isLoading: currentIsLoading } = useUser("me"); const { mutate: setUser } = useSetUser(); const [errorMsg, setErrorMsg] = useState(null); if (data && currentUser) { console.log("DATA:", data); console.log("CURRENT:", currentUser); } const onSubmit = async (values: any, { setSubmitting }: any) => { setErrorMsg(null); const { ...payload } = { id: userId === "new" ? undefined : userId, roles: [], ...values, }; if (data?.id === currentUser?.id) { // Prevent user from locking themselves out delete payload.isDisabled; delete payload.roles; } else if (payload.isAdmin) { payload.roles = ["admin"]; } // this isn't a real field, just for the form delete payload.isAdmin; setUser(payload, { onError: (err: any) => setErrorMsg(err.message), onSuccess: () => { showSuccess(intl.formatMessage({ id: "notification.user-saved" })); onClose(); }, onSettled: () => setSubmitting(false), }); }; return ( {!isLoading && error && {error?.message || "Unknown error"}} {(isLoading || currentIsLoading) && } {!isLoading && !currentIsLoading && data && currentUser && ( {({ isSubmitting }) => (
{intl.formatMessage({ id: data?.id ? "user.edit" : "user.new" })} setErrorMsg(null)} dismissible> {errorMsg}
{({ field, form }: any) => (
{form.errors.name ? (
{form.errors.name && form.touched.name ? form.errors.name : null}
) : null}
)}
{({ field, form }: any) => (
{form.errors.nickname ? (
{form.errors.nickname && form.touched.nickname ? form.errors.nickname : null}
) : null}
)}
{({ field, form }: any) => (
{form.errors.email ? (
{form.errors.email && form.touched.email ? form.errors.email : null}
) : null}
)}
{currentUser && data && currentUser?.id !== data?.id ? (

Properties

) : null}
)}
)}
); }