import { Button, Checkbox, CircularProgress, DialogActions, DialogContent, DialogTitle, FormControl, FormControlLabel, FormHelperText, FormLabel, Grid, Stack, TextField, Typography } from "@mui/material"; import {useTranslations} from "next-intl"; import useRequest from "@/lib/app/hooks/useRequest"; import * as Yup from "yup"; import {useFormik} from "formik"; import {ADD_ROLE} from "@/core/data/apiRoutes"; import usePermissions from "@/lib/app/hooks/usePermissions"; const CreateContent = ({mutate, fetchUrl, setOpenConfirmDialog}) => { const t = useTranslations(); const requestServer = useRequest({auth: true}) const {permissions_list, isLoading} = usePermissions() const validationSchema = Yup.object().shape({ name_en: Yup.string().required(t("AddDialog.name_en_error")), name_fa: Yup.string().required(t("AddDialog.name_fa_error")), permissions: Yup.array().min(1, t("AddDialog.permission_min_error")).required(t("AddDialog.permission")), }); const formik = useFormik({ initialValues: { name_en: "", name_fa: "", permissions: [], }, validationSchema, onSubmit: (values, {setSubmitting}) => { const formData = new FormData(); formData.append("name", values.name_en); formData.append("name_fa", values.name_fa); for (let i = 0; i < values.permissions.length; i++) { formData.append(`permissions[${i}]`, values.permissions[i]); } requestServer(ADD_ROLE, 'post', { data: formData, }).then(() => { setOpenConfirmDialog(false) mutate(fetchUrl) update_notification() }).catch(() => { }).finally(() => { setSubmitting(false); }); }, }); return ( <> {t("AddDialog.add")} {t("AddDialog.permission")}
{formik.touched.permissions && formik.errors.permissions} {isLoading ? {t("AddDialog.loading_permissions_list")} : ( <> {permissions_list.map((permission) => ( { if (e.target.checked) { formik.setFieldValue("permissions", [...formik.values.permissions, permission.id]) } else { formik.setFieldValue("permissions", formik.values.permissions.filter((id) => id !== permission.id)) } }} /> } label={permission.name_fa} /> ))} ) }
) } export default CreateContent