import { useEffect, useState } from "react"; import { Button, Checkbox, FormControl, FormErrorMessage, FormLabel, Input, Modal, ModalOverlay, ModalContent, ModalHeader, ModalCloseButton, ModalBody, ModalFooter, Stack, Tab, Tabs, TabList, TabPanel, TabPanels, useToast, } from "@chakra-ui/react"; import { Formik, Form, Field } from "formik"; import { AdminPermissionSelector, PermissionSelector, PrettyButton, } from "src/components"; import { useUser, useSetUser } from "src/hooks"; import { intl } from "src/locale"; import { validateEmail, validateString } from "src/modules/Validations"; interface UserEditModalProps { userId: number; isOpen: boolean; onClose: () => void; } function UserEditModal({ userId, isOpen, onClose }: UserEditModalProps) { const toast = useToast(); const { status, data } = useUser(userId); const { mutate: setUser } = useSetUser(); const [capabilities, setCapabilities] = useState(data?.capabilities || []); const [capabilityOption, setCapabilityOption] = useState( data?.capabilities?.indexOf("full-admin") === -1 ? "restricted" : "admin", ); useEffect(() => { setCapabilities(data?.capabilities || []); setCapabilityOption( data?.capabilities?.indexOf("full-admin") === -1 ? "restricted" : "admin", ); }, [data]); const onSubmit = async (values: any, { setSubmitting }: any) => { const { ...payload } = { id: userId, ...values, ...{ capabilities, }, }; const showErr = (msg: string) => { toast({ description: intl.formatMessage({ id: `error.${msg}`, }), status: "error", position: "top", duration: 3000, isClosable: true, }); }; setUser(payload, { onError: (err: any) => showErr(err.message), onSuccess: () => onClose(), onSettled: () => setSubmitting(false), }); }; const resetForm = () => { setCapabilityOption("admin"); setCapabilities(["full-admin"]); }; return ( { resetForm(); onClose(); }} closeOnOverlayClick={false}> {status === "loading" ? ( // todo nicer

loading

) : ( {({ isSubmitting }) => (
{intl.formatMessage({ id: "user.edit" })} {intl.formatMessage({ id: "profile.title" })} {intl.formatMessage({ id: "permissions.title" })} {({ field, form }: any) => ( {intl.formatMessage({ id: "user.name" })} {form.errors.name} )} {({ field, form }: any) => ( {intl.formatMessage({ id: "user.nickname" })} {form.errors.nickname} )} {({ field, form }: any) => ( {intl.formatMessage({ id: "user.email" })} {form.errors.email} )} {({ field, form }: any) => ( {intl.formatMessage({ id: "user.disabled", })} {form.errors.isDisabled} )} { setCapabilityOption("admin"); setCapabilities(["full-admin"]); }} /> { if (capabilityOption === "admin") { setCapabilities([]); } setCapabilityOption("restricted"); }} onChange={setCapabilities} capabilities={capabilities} selected={capabilityOption === "restricted"} /> {intl.formatMessage({ id: "form.save" })} )}
)}
); } export { UserEditModal };