import React, { useState, useEffect } from 'react'; import { Button, Table, Modal, Form } from 'react-bootstrap'; import 'bootstrap/dist/css/bootstrap.min.css'; import { SERVER_URL } from '../../constants.js'; import { UserContext } from '../../context/UserContext.jsx'; import { useNavigate, useParams } from "react-router-dom"; import { getToken } from '../../utils/session.js'; const styles = { primaryButton: { backgroundColor: "var(--light-blue)", borderColor: "var(--light-blue)", }, infoButton: { backgroundColor: "var(--light-blue)", color: 'white', borderColor: "var(--light-blue)", }, modalHeader: { backgroundColor: "var(--blue)", color: 'white', }, }; const AdminManageScreen = () => { const { tenantCode } = useParams(); const [showModal, setShowModal] = useState(false); const [admins, setAdmins] = useState([]); const [adminEmail, setAdminEmail] = useState(''); const [adminPassword, setAdminPassword] = useState(''); const [selectedAdminIndex, setSelectedAdminIndex] = useState(null); const [emailError, setEmailError] = useState(''); const [passwordError, setPasswordError] = useState(''); useEffect(() => { if (getToken()) { fetchAdmins(); } }, []); const authHeaders = () => { const token = getToken(); return { 'Content-Type': 'application/json', ...(token ? { Authorization: `Bearer ${token}` } : {}), }; }; const fetchAdmins = async () => { try { const requestBody = JSON.stringify({ roleName: 'ROLE_BRANCH_ADMIN' }); const response = await fetch(`${ SERVER_URL }/api/v1/admin/${tenantCode}`, { method: 'POST', headers: authHeaders(), body: requestBody }); if (response.ok) { const data = await response.json(); setAdmins(data); } else { console.error('Unsuccessful API call'); } } catch (error) { console.error('Error while making API call:', error); } }; const validateEmail = (email) => { const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return re.test(String(email).toLowerCase()); }; const handleAddAdmin = async () => { const requestBody = { email: adminEmail, password: adminPassword, roleName: 'ROLE_BRANCH_ADMIN' }; try { const response = await fetch(`${ SERVER_URL }/api/v1/admin/${tenantCode}/user`, { method: 'POST', headers: authHeaders(), body: JSON.stringify(requestBody) }); if (response.ok) { const data = await response.json(); setAdmins([...admins, data]); setShowModal(false); setAdminEmail(''); setAdminPassword(''); } else { console.error('Unsuccessful API call'); } } catch (error) { console.error('Error while making API call:', error); } }; const handleEditAdmin = async () => { if (!validateEmail(adminEmail)) { setEmailError('Invalid email address'); return; } setEmailError(''); try { const updatedAdmin = { email: adminEmail }; const response = await fetch(`${ SERVER_URL }/api/v1/admin/${tenantCode}/user/${admins[selectedAdminIndex].id}`, { method: 'PUT', headers: authHeaders(), body: JSON.stringify(updatedAdmin), }); if (response.ok) { const updatedAdmins = [...admins]; updatedAdmins[selectedAdminIndex].email = adminEmail; setAdmins(updatedAdmins); setShowModal(false); setAdminEmail(''); } else { console.error('Unsuccessful API call'); } } catch (error) { console.error('Error while making API call:', error); } }; const handleDeleteAdmin = async (userId) => { try { const response = await fetch(`${ SERVER_URL }/api/v1/admin/${tenantCode}/user/${userId}`, { method: 'DELETE', headers: authHeaders(), }); if (response.ok) { const updatedAdmins = admins.filter(admin => admin.id !== userId); setAdmins(updatedAdmins); } else { console.error('Unsuccessful API call'); } } catch (error) { console.error('Error while making API call:', error); } }; const handleEditClick = (index) => { const admin = admins[index]; setSelectedAdminIndex(index); setAdminEmail(admin.email); setShowModal(true); }; return (
| ID | Actions | |
|---|---|---|
| {admin.id} | {admin.email} | {' '} |