import React, { useEffect, useState } from "react"; import { authFetch } from "../../../../utils/authFetch"; import { showToast } from "../../../toast/toastUtils.js"; import { useNavigate } from "react-router-dom"; import { useTranslation } from "react-i18next"; function VerifyUserSetPermission({ userData }) { const [allPermissions, setAllPermissions] = useState([]); const [selected, setSelected] = useState( Array.isArray(userData?.permissions) ? userData.permissions.map((p) => (typeof p === "string" ? p : p.name)) : [] ); const [submitting, setSubmitting] = useState(false); const [successMsg, setSuccessMsg] = useState(""); const [errorMsg, setErrorMsg] = useState(""); const navigate = useNavigate(); const { t } = useTranslation('verify_user'); // Fetch all available permissions useEffect(() => { async function fetchPermissions() { try { const res = await authFetch( `${import.meta.env.VITE_API_BASE_URL}/api/permissions`, { method: "GET" } ); console.log("[VerifyUserSetPermission] Permissions fetch response:", res); if (!res.ok) throw new Error("Failed to fetch permissions"); const data = await res.json(); console.log("[VerifyUserSetPermission] Permissions response data:", data); // If permissions are objects, map to names setAllPermissions( Array.isArray(data.permissions) ? data.permissions.map((perm) => typeof perm === "string" ? perm : perm.name ) : [] ); } catch (e) { setErrorMsg(t('messages.loadPermFail')); } } fetchPermissions(); }, []); // Log selected permissions whenever they change useEffect(() => { console.log("[VerifyUserSetPermission] Selected permissions:", selected); }, [selected]); // Handle checkbox change const handleCheckbox = (perm) => { setSelected((prev) => prev.includes(perm) ? prev.filter((p) => p !== perm) : [...prev, perm] ); }; // Handle verify & set permissions const handleVerify = async (e) => { e.preventDefault(); setSubmitting(true); setSuccessMsg(""); setErrorMsg(""); try { const res = await authFetch( `${import.meta.env.VITE_API_BASE_URL}/api/admin/verify-user/${ userData.user?.id || userData.user?.user_id || userData.user_id }`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ permissions: selected }), } ); if (!res.ok) { const errData = await res.json().catch(() => ({})); throw new Error(errData.message || "Verification failed"); } setSuccessMsg(t('messages.verifySuccess')); showToast({ type: "success", message: t('messages.verifySuccess') }); // Redirect after short delay setTimeout(() => { navigate("/admin/verify-users"); }, 1200); } catch (err) { setErrorMsg(err.message || t('messages.verifyFail')); showToast({ type: "error", message: err.message || t('messages.verifyFail') }); } setSubmitting(false); }; return (

{t('headings.setPermissionsTitle')}

{t('buttons.verify')}

{allPermissions.length === 0 ? ( {t('messages.noPermissions')} ) : ( allPermissions.map((perm) => ( )) )}
{successMsg && (
{successMsg}
)} {errorMsg && (
{errorMsg}
)}
); } export default VerifyUserSetPermission;