import React, { useState, useEffect } from "react"; import axios from "axios"; import AdminPanelStyleSheet from "./AdminPanelStyleSheet.module.css"; import Navbar from "../../../components/nav/Navbar.jsx"; import { Link, useNavigate } from "react-router-dom"; const DataCard = ({ title, columns, data, isLoading, type, onDelete, onRefresh, }) => { const [localData, setLocalData] = useState(data); const navigate = useNavigate(); const [filter, setFilter] = useState("all"); useEffect(() => { if (filter === "active") { setLocalData(data.filter((item) => item.active === true)); } else { setLocalData(data); } }, [filter, data]); const createLinks = { ucenik: "/korisnici/createUcenik", roditel: "/korisnici/createRoditel", blagajnik: "/korisnici/createBlagajnik", klasenRakovoditel: "/korisnici/nastavnici/createKlasenRakovoditel", predmetenNastavnik: "/korisnici/nastavnici/createPredmetenNastavnik", nastavnik: "/korisnici/nastavnici/createNastavnik", }; const infoLinks = { ucenik: (id) => `/adminDashboard/students/${id}/info`, roditel: (id) => `/adminDashboard/parents/${id}/info`, blagajnik: (id) => `/adminDashboard/treasurers/${id}/info`, klasenRakovoditel: (id) => `/adminDashboard/classTeacher/${id}/info`, predmetenNastavnik: (id) => `/adminDashboard/teacher/${id}/info`, }; const activationEndpoints = { ucenik: "ucenici", roditel: "roditeli", blagajnik: "blagajnici", nastavnik: "nastavnici", klasenRakovoditel: "nastavnici/klasniRakovoditeli", predmetenNastavnik: "nastavnici/predmetniNastavnici", }; const toggleActivation = async (id) => { try { const endpoint = activationEndpoints[type]; await axios.put( `http://localhost:8080/api/users/${endpoint}/${id}/toggleActivation`, {}, { withCredentials: true } ); onRefresh(); } catch (err) { console.error(err); alert("Грешка при менување статус."); } }; return (

{title}

Прикажи:
{createLinks[type] && ( + Додади )}
{columns.map((col, index) => ( ))} {isLoading ? ( ) : localData.length > 0 ? ( localData.map((item, index) => ( {type === "ucenik" && ( <> )} {(type === "roditel" || type === "nastavnik" || type === "klasenRakovoditel" || type === "predmetenNastavnik") && ( <> )} {type === "blagajnik" && ( <> )} )) ) : ( )}
Р.Бр{col}Акции
Вчитување...
{index + 1} {item.ime} {item.prezime} {item.e_posta} {item.klasDisplay} {item.roditelDisplay}{item.e_posta} {item.pol}{item.e_posta} {item.metamusk_adresa} {item.active ? "Активен" : "Неактивен"} {type !== "nastavnik" && ( )}
Нема податоци...
); }; const AdminPanel = () => { const [ucenici, setUcenici] = useState([]); const [blagajnici, setBlagajnici] = useState([]); const [klasni, setKlasni] = useState([]); const [roditeli, setRoditeli] = useState([]); const [predmetni, setPredmetni] = useState([]); const [nastavnici, setNastavnici] = useState([]); const [loading, setLoading] = useState(true); const fetchData = async () => { try { setLoading(true); const [resU, resB, resK, resR, resP, resN] = await Promise.all([ axios.get("http://localhost:8080/api/users/ucenici/all", { withCredentials: true, }), axios.get("http://localhost:8080/api/users/blagajnici/all", { withCredentials: true, }), axios.get( "http://localhost:8080/api/users/nastavnici/klasniRakovoditeli/all", { withCredentials: true } ), axios.get("http://localhost:8080/api/users/roditeli/all", { withCredentials: true, }), axios.get( "http://localhost:8080/api/users/nastavnici/predmetniNastavnici/all", { withCredentials: true } ), axios.get("http://localhost:8080/api/users/nastavnici/all", { withCredentials: true, }), ]); const extendedUcenici = await Promise.all( resU.data.map(async (u) => { try { const [kRes, rRes] = await Promise.all([ u.uciVoKlasId != null ? axios.get(`http://localhost:8080/api/klas/${u.uciVoKlasId}`, { withCredentials: true, }) : null, axios.get( `http://localhost:8080/api/users/roditeli/${u.staratelId}`, { withCredentials: true } ), ]); return { ...u, klasDisplay: kRes ? `${kRes.data.oddelenie}-${kRes.data.paralelka}` : "Нема клас", roditelDisplay: `${rRes.data.ime} ${rRes.data.prezime}`, }; } catch { return { ...u, klasDisplay: "N/A", roditelDisplay: "N/A" }; } }) ); setUcenici(extendedUcenici); setBlagajnici(resB.data); setKlasni(resK.data); setRoditeli(resR.data); setPredmetni(resP.data); setNastavnici(resN.data); } catch (err) { console.error("Грешка при вчитување:", err); } finally { setLoading(false); } }; useEffect(() => { fetchData(); }, []); const handleDelete = async (type, id) => { try { const endpoints = { ucenik: "ucenici", roditel: "roditeli", blagajnik: "blagajnici", nastavnik: "nastavnici", klasenRakovoditel: "nastavnici/klasniRakovoditeli", predmetenNastavnik: "nastavnici/predmetniNastavnici", }; await axios.delete( `http://localhost:8080/api/users/${endpoints[type]}/${id}`, { withCredentials: true } ); const filterData = (prev) => prev.filter((item) => item.id !== id); switch (type) { case "ucenik": setUcenici(filterData); break; case "roditel": setRoditeli(filterData); break; case "blagajnik": setBlagajnici(filterData); break; case "nastavnik": setNastavnici(filterData); break; case "klasenRakovoditel": setKlasni(filterData); break; case "predmetenNastavnik": setPredmetni(filterData); break; default: break; } ; } catch (err) { console.error("Грешка при бришење:", err); ; } }; return ( <>

Админ контролен панел

Корисници Класови Предмети Распореди Неделни планови Соопштенија за плаќање Статистика
); }; export default AdminPanel;