source: frontend/web3-eDnevnik_Frontend/src/pages/KlasenRakovoditel_Pages/Klasen_NedelenPlan/Klasen_NedelenPlan.jsx

Last change on this file was 81cdf2d, checked in by Nikola Janev <nikolajanev57@…>, 9 days ago

initial commit

  • Property mode set to 100644
File size: 5.0 KB
Line 
1import React, { useState, useEffect } from "react";
2import axios from "axios";
3import { useParams, useNavigate, Link } from "react-router-dom";
4import styles from "./Klasen_NedelenPlanStyles.module.css";
5import NavbarKlasen from "../../../components/navbarKlasen/NavbarKlasen.jsx";
6
7const Klasen_NedelenPlan = () => {
8 const { classId } = useParams();
9
10 const navigate = useNavigate();
11 const [plan, setPlan] = useState(null);
12 const [classDetails, setClassDetails] = useState(null);
13 const [loading, setLoading] = useState(true);
14
15 const daysMapping = [
16 { label: "Понеделник", key: "Ponedelnik" },
17 { label: "Вторник", key: "Vtornik" },
18 { label: "Среда", key: "Sreda" },
19 { label: "Четврток", key: "Cetvrtok" },
20 { label: "Петок", key: "Petok" },
21 { label: "Сабота", key: "Sabota" },
22 ];
23
24 const nastavniCasovi = [1, 2, 3, 4, 5, 6, 7, 8];
25
26 const fetchAllData = async () => {
27 try {
28 setLoading(true);
29 const [resPlan, resClass] = await Promise.all([
30 axios.get(`http://localhost:8080/api/klas/${classId}/nedelenPlan`, {
31 withCredentials: true,
32 }),
33 axios.get(`http://localhost:8080/api/klas/${classId}`, {
34 withCredentials: true,
35 }),
36 ]);
37 setPlan(resPlan.data);
38 console.log(resPlan.data);
39 setClassDetails(resClass.data);
40 } catch (err) {
41 console.error("Грешка при вчитување:", err);
42 } finally {
43 setLoading(false);
44 }
45 };
46
47 useEffect(() => {
48 if (classId) fetchAllData();
49 }, [classId]);
50
51 if (loading)
52 return (
53 <div className={styles.wrapper}>
54 <NavbarKlasen />
55 <div className={styles.loaderContainer}>
56 <h2>Вчитување на неделниот план...</h2>
57 </div>
58 </div>
59 );
60
61 return (
62 <div className={styles.wrapper}>
63 <NavbarKlasen />
64 <div className={styles.contentContainer}>
65 <div className={styles.headerRow}>
66 <div className="bg-success d-flex flex-row justify-content-flex-start">
67 <a
68 href="/dashboard"
69 className="text-white m-3 fs-5 text-decoration-none"
70 >
71 Соопштенија
72 </a>
73 <Link
74 to={`/klasenRakovoditelDashboard/${classId}/weeklyPlan`}
75 className="text-white m-3 fs-5"
76 >
77 Види неделни активности
78 </Link>
79 <Link
80 to={`/klasenRakovoditelDashboard/${classId}/raspored`}
81 className="text-white m-3 fs-5 text-decoration-none"
82 >
83 Види распоред
84 </Link>
85 </div>
86 <h1 className="text-center m-3">
87 Клас {classDetails?.oddelenie}-{classDetails?.paralelka} — Неделни
88 активности
89 </h1>
90 <Link
91 className="btn btn-primary m-3"
92 to={`/klasenRakovoditelDashboard/${classId}/addActivity`}
93 >
94 Креирај неделна активност
95 </Link>
96 </div>
97
98 <div className="float-left">
99 <span className={styles.dateRange}>
100 Период: <strong>{plan?.datumOd}</strong> до{" "}
101 <strong>{plan?.datumDo}</strong>
102 </span>
103 </div>
104
105 <div className={styles.tableWrapper}>
106 <table className={styles.weeklyTable}>
107 <thead>
108 <tr>
109 <th className={styles.hourCol}>Час</th>
110 {daysMapping.map((day) => (
111 <th key={day.key} className={styles.dayHeader}>
112 {day.label}
113 </th>
114 ))}
115 </tr>
116 </thead>
117 <tbody>
118 {nastavniCasovi.map((casBroj, index) => (
119 <tr key={casBroj}>
120 <td className={styles.hourCell}>{casBroj}</td>
121 {daysMapping.map((day) => {
122 const активностиЗаДенот = plan?.timetable?.[day.key] || [];
123 const активност = активностиЗаДенот[index];
124
125 return (
126 <td key={day.key} className={styles.tableCell}>
127 {активност ? (
128 <div className={styles.activityCard}>
129 <div className={styles.subjectName}>
130 {активност.naslov}
131 </div>
132 <div className={styles.subjectOpis}>
133 {активност.opis}
134 </div>
135 </div>
136 ) : (
137 <div className={styles.emptyCell}>—</div>
138 )}
139 </td>
140 );
141 })}
142 </tr>
143 ))}
144 </tbody>
145 </table>
146 </div>
147 </div>
148 </div>
149 );
150};
151
152export default Klasen_NedelenPlan;
Note: See TracBrowser for help on using the repository browser.