source: frontend/web3-eDnevnik_Frontend/src/pages/KlasenRakovoditel_Pages/AddActivityToPlan/AddActivityToPlan.jsx@ 81cdf2d

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

initial commit

  • Property mode set to 100644
File size: 5.7 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";
5import styles from "./AddActivityToPlanStyles.module.css";
6
7const AddActivityToPlan = () => {
8 const { classId } = useParams();
9 const navigate = useNavigate();
10 const [predmeti, setPredmeti] = useState([]);
11 const [selectedPredmetId, setSelectedPredmetId] = 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: null,
22 });
23
24 useEffect(() => {
25 const fetchPlan = async () => {
26 try {
27 const res = await axios.get(
28 `http://localhost:8080/api/klas/${classId}/nedelenPlan`,
29 {
30 withCredentials: true,
31 }
32 );
33 setPlanId(res.data.id);
34 const resPredmeti = await axios.get(
35 `http://localhost:8080/api/klas/${classId}/predmeti`,
36
37 { withCredentials: true }
38 );
39 setPredmeti(resPredmeti.data);
40 } catch (err) {
41 console.error("Грешка при наоѓање на планот:", err);
42 } finally {
43 setLoading(false);
44 }
45 };
46 fetchPlan();
47 }, [classId]);
48 const handleChange = (e) => {
49 const { name, value } = e.target;
50
51 if (name === "predmetId") {
52 const index = parseInt(value);
53 const selectedPredmet = predmeti[index];
54
55 setSelectedPredmetId(value);
56 setFormData({
57 ...formData,
58 naslov: selectedPredmet ? selectedPredmet.ime : "",
59 predmet_id: selectedPredmet ? selectedPredmet.id : null,
60 });
61 } else {
62 setFormData({ ...formData, [name]: value });
63 }
64 };
65 const handleSubmit = async (e) => {
66 e.preventDefault();
67 if (!planId)
68 return (
69 <div class="alert alert-warning" role="alert">
70 Не е пронајден активен план за овој клас
71 </div>
72 );
73
74 setSubmitLoading(true);
75 try {
76 const resActivity = await axios.post(
77 "http://localhost:8080/api/nedelnaAktivnost",
78 formData,
79 { withCredentials: true }
80 );
81
82 await axios.post(
83 `http://localhost:8080/api/nedelenPlan/${planId}/aktivnosti`,
84 { aktivnostZaNedelenPlanId: resActivity.data.id },
85 { withCredentials: true }
86 );
87
88 <div className="alert alert-success" role="alert">
89 Успешно додадено
90 </div>;
91 navigate(`/klasenRakovoditelDashboard/${classId}/weeklyPlan`);
92 } catch (err) {
93 <div className="alert alert-danger" role="alert">
94 Грешка при додавање
95 </div>;
96 } finally {
97 setSubmitLoading(false);
98 }
99 };
100
101 if (loading)
102 return (
103 <div>
104 <Navbar />
105 <p>Вчитавање...</p>
106 </div>
107 );
108
109 return (
110 <div style={{ backgroundColor: "#f4f7f6", minHeight: "100vh" }}>
111 <Navbar />
112
113 <div className={styles.container}>
114 <div className={styles.addCard}>
115 <h2>Креирај и додади активност во неделниот план</h2>
116 <form onSubmit={handleSubmit}>
117 <div className={styles.inputGroup}>
118 <label>Предмет</label>
119 <select
120 name="predmetId"
121 value={selectedPredmetId}
122 required
123 onChange={handleChange}
124 >
125 <option value="">-- Избери Предмети --</option>
126 {predmeti.map((n, index) => (
127 <option key={n.id} value={index}>
128 {n.ime} {n.fond_csovi}
129 </option>
130 ))}
131 </select>
132 </div>
133 <div className={styles.inputGroup}>
134 <label>Наслов</label>
135 <input
136 type="text"
137 name="naslov"
138 value={formData.naslov}
139 onChange={handleChange}
140 required
141 />
142 </div>
143 <div className={styles.inputGroup}>
144 <label>Опис/Тема</label>
145 <textarea
146 name="opis"
147 value={formData.opis}
148 onChange={handleChange}
149 required
150 />
151 </div>
152 <div className={styles.inputGroup}>
153 <label>Ден во неделата</label>
154 <select
155 name="denVoNedelata"
156 value={formData.denVoNedelata}
157 onChange={handleChange}
158 >
159 <option value="Ponedelnik">Понеделник</option>
160 <option value="Vtornik">Вторник</option>
161 <option value="Sreda">Среда</option>
162 <option value="Cetvrtok">Четврток</option>
163 <option value="Petok">Петок</option>
164 <option value="Sabota">Сабота</option>
165 </select>
166 </div>
167 <div className="text-center">
168 <button
169 type="submit"
170 disabled={submitLoading}
171 className="btn btn-primary"
172 >
173 {submitLoading ? "Се процесира..." : "Зачувај активност"}
174 </button>
175 <button
176 onClick={() => navigate(-1)}
177 className="btn btn-danger m-3"
178 >
179 Откажи
180 </button>
181 </div>
182 </form>
183 </div>
184 </div>
185 </div>
186 );
187};
188
189export default AddActivityToPlan;
Note: See TracBrowser for help on using the repository browser.