source: frontend/web3-eDnevnik_Frontend/src/pages/PredmetenNastavnikPages/PredmetenNastavnik_AddAktivnostZaKlas/PredmetenNastavnik_AddAktivnostZaKlas.jsx

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

initial commit

  • Property mode set to 100644
File size: 8.5 KB
Line 
1import React, { useState, useEffect } from "react";
2import axios from "axios";
3import { useParams, useNavigate, Link } from "react-router-dom";
4import Navbar from "../../../components/nav/Navbar.jsx";
5
6const PredmetenNastavnik_AddAktivnostZaKlas = () => {
7 const { classId } = useParams();
8 const navigate = useNavigate();
9 const [predmeti, setPredmeti] = useState([]);
10 const [selectedPredmetId, setSelectedPredmetId] = useState("");
11 const [selectedRedenCas, setSelectedRedenCas] = useState("");
12
13 const [planId, setPlanId] = useState(null);
14 const [loading, setLoading] = useState(true);
15 const [submitLoading, setSubmitLoading] = useState(false);
16
17 const [formData, setFormData] = useState({
18 naslov: "",
19 opis: "",
20 denVoNedelata: "Ponedelnik",
21 predmet_id: "",
22 reden_cas: "",
23 });
24
25 useEffect(() => {
26 const fetchPlan = async () => {
27 try {
28 const res = await axios.get(
29 `http://localhost:8080/api/klas/${classId}/nedelenPlan`,
30 {
31 withCredentials: true,
32 }
33 );
34 setPlanId(res.data.id);
35 const resPredmeti = await axios.get(
36 `http://localhost:8080/api/klas/${classId}/predmeti`,
37
38 { withCredentials: true }
39 );
40 setPredmeti(resPredmeti.data);
41 } catch (err) {
42 console.error(
43 "Грешка при наоѓање на планот или предметите за класот:",
44 err
45 );
46 } finally {
47 setLoading(false);
48 }
49 };
50 fetchPlan();
51 }, [classId]);
52
53 const handleChange = (e) => {
54 const { name, value } = e.target;
55
56 if (name === "predmetId") {
57 setSelectedPredmetId(value);
58
59 const selectedPredmet = predmeti.find(
60 (p) => String(p.id) === String(value)
61 );
62 console.log("value:", value, "found:", selectedPredmet);
63
64 if (!selectedPredmet) return;
65
66 setFormData({
67 ...formData,
68 naslov: selectedPredmet.ime,
69 predmet_id: selectedPredmet.id,
70 });
71 } else if (name === "reden_cas") {
72 const redenCasNum = Number(value);
73 setSelectedRedenCas(redenCasNum);
74
75 setFormData({
76 ...formData,
77 reden_cas: redenCasNum,
78 });
79 } else {
80 setFormData({ ...formData, [name]: value });
81 }
82 };
83 const handleSubmit = async (e) => {
84 e.preventDefault();
85 if (!planId)
86 return (
87 <div class="alert alert-warning" role="alert">
88 Не е пронајден активен план за овој клас
89 </div>
90 );
91
92 setSubmitLoading(true);
93 try {
94 const resActivity = await axios.post(
95 "http://localhost:8080/api/nedelnaAktivnost",
96 formData,
97 { withCredentials: true }
98 );
99
100 await axios.post(
101 `http://localhost:8080/api/nedelenPlan/${planId}/aktivnosti`,
102 { aktivnostZaNedelenPlanId: resActivity.data.id },
103 { withCredentials: true }
104 );
105
106 <div className="alert alert-success" role="alert">
107 Успешно додадено
108 </div>;
109 navigate(-1);
110 } catch (err) {
111 <div className="alert alert-danger" role="alert">
112 Грешка при додавање
113 </div>;
114 } finally {
115 setSubmitLoading(false);
116 }
117 };
118
119 if (loading)
120 return (
121 <div>
122 <Navbar />
123 <p>Вчитавање...</p>
124 </div>
125 );
126
127 return (
128 <div style={{ backgroundColor: "#f4f7f6", minHeight: "100vh" }}>
129 <Navbar />
130 <div>
131 <div className="navbar navbar-expand-lg bg-secondary justify-content-start ">
132 <ul className="navbar-nav">
133 <li className="nav-item active">
134 <Link className="nav-link text-white fs-4">
135 {" "}
136 Соопштенија за класот{" "}
137 </Link>
138 </li>
139
140 <li className="nav-item">
141 <Link
142 className="nav-link text-white fs-4"
143 to={`/predmetenNastavnikDashboard/klas/${classId}/weeklyPlan`}
144 >
145 {" "}
146 Неделни активности
147 </Link>
148 </li>
149 <li className="nav-item">
150 <Link
151 className="nav-link text-white fs-4"
152 to={`/predmetenNastavnikDashboard/klas/${classId}/schedule`}
153 >
154 {" "}
155 Распоред
156 </Link>
157 </li>
158 <li className="nav-item">
159 <Link
160 className="nav-link text-white fs-4"
161 to={`/predmetenNastavnikDashboard/klas/${classId}/students`}
162 >
163 {" "}
164 Студенти
165 </Link>
166 </li>
167 <li className="nav-item">
168 <Link
169 className="nav-link text-white fs-4"
170 to={`/predmetenNastavnikDashboard/klas/${classId}/subjects`}
171 >
172 {" "}
173 Види слушани предмети
174 </Link>
175 </li>
176 </ul>
177 </div>
178 <div className="container">
179 <h2 className="m-3">Додади активност во распоредот</h2>
180 <form onSubmit={handleSubmit}>
181 <div>
182 <label className="form-label">Предмет</label>
183 <select
184 name="predmetId"
185 value={selectedPredmetId}
186 required
187 onChange={handleChange}
188 className="form-control"
189 >
190 <option value="">-- Избери Предмети --</option>
191 {predmeti.map((n) => (
192 <option key={n.id} value={n.id}>
193 {n.ime} {n.fond_csovi}
194 </option>
195 ))}
196 </select>
197 </div>
198 <div>
199 <label className="form-label">Реден час</label>
200 <select
201 name="reden_cas"
202 value={selectedRedenCas}
203 required
204 onChange={handleChange}
205 className="form-control"
206 >
207 <option value="">-- Избери реден час --</option>
208
209 <option value="1">1</option>
210 <option value="2">2</option>
211 <option value="3">3</option>
212 <option value="4">4</option>
213 <option value="5">5</option>
214 <option value="6">6</option>
215 <option value="7">7</option>
216 <option value="8">8</option>
217 </select>
218 </div>
219 <div>
220 <label className="form-label">Наслов</label>
221 <input
222 type="text"
223 name="naslov"
224 value={formData.naslov}
225 onChange={handleChange}
226 className="form-control"
227 required
228 />
229 </div>
230 <div>
231 <label className="form-label">Опис/Тема</label>
232 <textarea
233 name="opis"
234 value={formData.opis}
235 onChange={handleChange}
236 required
237 className="form-control"
238 />
239 </div>
240 <div>
241 <label className="form-label">Ден во неделата</label>
242 <select
243 name="denVoNedelata"
244 value={formData.denVoNedelata}
245 onChange={handleChange}
246 className="form-control"
247 >
248 <option value="Ponedelnik">Понеделник</option>
249 <option value="Vtornik">Вторник</option>
250 <option value="Sreda">Среда</option>
251 <option value="Cetvrtok">Четврток</option>
252 <option value="Petok">Петок</option>
253 <option value="Sabota">Сабота</option>
254 </select>
255 </div>
256 <div className="text-center m-3">
257 <button
258 type="submit"
259 disabled={submitLoading}
260 className="btn btn-primary"
261 >
262 {submitLoading ? "Се процесира..." : "Зачувај активност"}
263 </button>
264 <button className="btn btn-danger" onClick={() => navigate(-1)}>
265 Откажи
266 </button>
267 </div>
268 </form>
269 </div>
270 </div>
271 </div>
272 );
273};
274
275export default PredmetenNastavnik_AddAktivnostZaKlas;
Note: See TracBrowser for help on using the repository browser.