import { useState } from "react"; import { Button, FormControl, FormErrorMessage, FormLabel, Input, Modal, ModalOverlay, ModalContent, ModalHeader, ModalCloseButton, ModalBody, ModalFooter, Stack, Tab, Tabs, TabList, TabPanel, TabPanels, useToast, } from "@chakra-ui/react"; import { useQueryClient } from "@tanstack/react-query"; import { Formik, Form, Field } from "formik"; import { createUser } from "src/api/npm"; import { AdminPermissionSelector, PermissionSelector, PrettyButton, } from "src/components"; import { intl } from "src/locale"; import { validateEmail, validateString } from "src/modules/Validations"; interface Payload { name: string; nickname: string; email: string; password: string; } interface UserCreateModalProps { isOpen: boolean; onClose: () => void; } function UserCreateModal({ isOpen, onClose }: UserCreateModalProps) { const toast = useToast(); const queryClient = useQueryClient(); const [capabilities, setCapabilities] = useState(["full-admin"]); const [capabilityOption, setCapabilityOption] = useState("admin"); const onSubmit = async (values: Payload, { setSubmitting }: any) => { const { ...payload } = { ...values, ...{ isDisabled: false, auth: { type: "password", secret: values.password, }, capabilities, }, }; const showErr = (msg: string) => { toast({ description: intl.formatMessage({ id: `error.${msg}`, }), status: "error", position: "top", duration: 3000, isClosable: true, }); }; try { const response = await createUser(payload); if (response && typeof response.id !== "undefined" && response.id) { // ok queryClient.invalidateQueries({ queryKey: ["users"] }); onClose(); resetForm(); } else { showErr("cannot_create_user"); } } catch (err: any) { showErr(err.message); } setSubmitting(false); }; const resetForm = () => { setCapabilityOption("admin"); setCapabilities(["full-admin"]); }; return ( { resetForm(); onClose(); }} closeOnOverlayClick={false}> {({ isSubmitting }) => (
{intl.formatMessage({ id: "user.create" })} {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.password" })} {form.errors.password} )} { setCapabilityOption("admin"); setCapabilities(["full-admin"]); }} /> { if (capabilityOption === "admin") { setCapabilities([]); } setCapabilityOption("restricted"); }} onChange={setCapabilities} capabilities={capabilities} selected={capabilityOption === "restricted"} /> {intl.formatMessage({ id: "form.save" })} )}
); } export { UserCreateModal };