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