import React, { useEffect, useState, useRef } from "react"; import { useFeatures } from "../../hooks/useMasterRole"; import { useForm } from "react-hook-form"; import { set, z } from "zod"; import { zodResolver } from "@hookform/resolvers/zod"; import { MasterRespository } from "../../repositories/MastersRepository"; import { cacheData, getCachedData } from "../../slices/apiDataManager"; import showToast from "../../services/toastService"; import { useCreateApplicationRole } from "../../hooks/masterHook/useMaster"; const schema = z.object({ role: z.string().min(1, { message: "Role is required" }), description: z .string() .min(1, { message: "Description is required" }) .max(255, { message: "Description cannot exceed 255 characters" }), selectedPermissions: z .array(z.string()) .min(1, { message: "Please select at least one permission" }), }); const CreateRole = ({ modalType, onClose }) => { const maxDescriptionLength = 255; const [descriptionLength, setDescriptionLength] = useState(0); const popoverRefs = useRef([]); const { masterFeatures } = useFeatures(); const { mutate: submitNewApplicationRole, isPending: isLoading } = useCreateApplicationRole(() => { onClose?.(); }); const { register, handleSubmit, formState: { errors }, reset, } = useForm({ resolver: zodResolver(schema), defaultValues: { role: "", description: "", selectedPermissions: [], }, }); const onSubmit = (values) => { const payload = { role: values.role, description: values.description, featuresPermission: values.selectedPermissions.map((id) => ({ id, isEnabled: true, })), }; submitNewApplicationRole(payload); }; // const onSubmit = (values) => { // setIsLoading(true) // const result = { // role: values.role, // description: values.description, // featuresPermission: values.selectedPermissions.map((id) => ({ // id, // isEnabled: true, // })), // }; // MasterRespository.createRole(result).then((resp) => { // setIsLoading(false) // const cachedData = getCachedData("Application Role"); // const updatedData = [...cachedData, resp.data]; // cacheData("Application Role", updatedData); // showToast("Application Role Added successfully.", "success"); // onClose() // }).catch((err) => { // showToast(err?.response?.data?.message, "error"); // setIsLoading(false) // onClose() // }) // }; useEffect(() => { setDescriptionLength(0); }, []); useEffect(() => { popoverRefs.current.forEach((el) => { if (el) { new bootstrap.Popover(el, { trigger: "focus", placement: "right", html: true, content: el.getAttribute("data-bs-content"), }); } }); }, [masterFeatures]); return (
); }; export default CreateRole;