import React, { useState, useEffect, useMemo } from "react"; import { AddIcon, InfoIcon } from "@chakra-ui/icons"; import { Modal, ModalOverlay, ModalContent, ModalHeader, ModalBody, ModalCloseButton, useDisclosure, Button, Text, FormControl, FormLabel, Input, Tooltip, Icon, Stack, Alert, Flex, useToast, } from "@chakra-ui/react"; import { Select } from "chakra-react-select"; import { __ } from "@wordpress/i18n"; import { addManagerRole } from "./RoleAndPermissionAPI"; const UserDisplayModal = ({ wp_roles, context = "", value = {}, setUserAdded=false }) => { const { isOpen, onOpen, onClose } = useDisclosure(); const [userEmail, setUserEmail] = useState(""); const [permissions, setPermissions] = useState([]); const [errors, setErrors] = useState([]); const toast = useToast(); useEffect(() => { if (context === "edit") { setUserEmail(value.email || ""); setPermissions(value.permission || []); } }, [context, value]); const selectedPermissions = useMemo(() => { return ( permissions?.map((val) => ({ value: val, label: value.permission_details?.[val], })) || [] ); }, [permissions, value.permission_details]); const all_permissions = useMemo(() => { return Object.entries(wp_roles).map(([key, label]) => ({ label: label, value: key, })); }, [wp_roles]); const handleMultiplePermission = (selectedOptions) => { const selectedValues = selectedOptions ? selectedOptions.map((option) => option.value) : []; setPermissions(selectedValues); }; const handleAddManager = (email, assignedPermissions) => { addManagerRole(email, assignedPermissions).then((res) => { setErrors([]); if (!res.success) { const errorList = Object.entries(res.message).map( ([key, message]) => ({ key, message }) ); setErrors(errorList); } else { setUserAdded(true); onClose(); toast({ title: res.message, status: "success", duration: 3000, }); } }); }; const addButtonStyles = { width: "113px", height: "41px", backgroundColor: "#7545BB", padding: "10px 16px", gap: "6px", fontWeight: "500", lineHeight: "21px", fontSize: "14px", color: "#FFFFFF", }; const editButtonStyle = { color: "#475BB2", fontWeight: "400", fontSize: "13px", backgroundColor: "#ffffff", padding: 0, }; return ( <> {context === "edit" ? "Edit User" : "Add User"} View and manage the list of current managers, their assigned roles, and permissions. User Email setUserEmail(e.target.value)} /> {errors.map((error, index) => error.key === "user_email" ? ( {error.message} ) : null )} User Permission