source: frontend/web3-eDnevnik_Frontend/src/pages/PredmetenNastavnikPages/PredmetenNastavnik_VnesiPrisustvoZaStudent/PredmetenNastavnik_VnesiPrisustvoZaStudent.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.4 KB
Line 
1import NavbarKlasen from "../../../components/navbarKlasen/NavbarKlasen";
2import { useParams, useNavigate } from "react-router-dom";
3import { useState, useEffect } from "react";
4import { useAuth } from "../../../contexts/AuthContext";
5import axios from "axios";
6
7const PredmetenNastavnik_VnesiPrisustvoZaStudent = () => {
8 const navigate = useNavigate();
9 const params = useParams();
10 const { studentId, classId } = params;
11 const [selectedStatus, setSelectedStatus] = useState("PRISUTEN");
12 const [loading, setLoading] = useState(false);
13
14 const [casoviKoiGiPredavalOvaaNedela, setCasoviKoiGiPredavalOvaaNedela] =
15 useState([]);
16 const { user } = useAuth();
17 const [datum, setDatum] = useState("");
18 const [zabeleska, setZabeleska] = useState("");
19 const [selectedActivity, setSelectedActivity] = useState("");
20
21 const handleSelectChange = (e) => {
22 setSelectedStatus(e.target.value);
23 console.log(`Aktivnost: ${e.target.Id}`);
24 };
25
26 const getCasoviKoiGiPredavalOvaaNedela = async () => {
27 if (!user || !classId) {
28 return;
29 }
30 try {
31 setLoading(true);
32
33 const response = await axios.get(
34 `http://localhost:8080/api/users/nastavnici/${user.id}/classesThisWeek?classId=${classId}`,
35 { withCredentials: true }
36 );
37
38 setCasoviKoiGiPredavalOvaaNedela(response.data);
39 } catch (err) {
40 console.log(
41 `Error while fetching all classes who teach the teacher ${err}`
42 );
43 } finally {
44 setLoading(false);
45 }
46 };
47
48 useEffect(() => {
49 getCasoviKoiGiPredavalOvaaNedela();
50 }, [user, classId]);
51
52 const handleSubmit = async (e) => {
53 e.preventDefault();
54
55 try {
56 setLoading(true);
57
58 const selectedAktivnost = casoviKoiGiPredavalOvaaNedela.find(
59 (aktivnost) => aktivnost.id === selectedActivity
60 );
61
62 if (!selectedAktivnost) {
63 console.log("No activity selected");
64 return;
65 }
66
67 console.log("Selected activity:", selectedAktivnost);
68 console.log("Predmet ID:", selectedAktivnost?.predmetId);
69 console.log("Den:", selectedAktivnost?.denVo_Nedelata);
70
71 const casResponse = await axios.get(
72 `http://localhost:8080/api/casovi/getCasIdByPredmetId?predmetId=${selectedAktivnost.predmetId}`,
73 { withCredentials: true }
74 );
75
76 const casId = casResponse.data;
77
78 console.log("selected activity:", selectedAktivnost);
79 console.log("casId:", casId);
80
81 const prisustvoRequestDTO = {
82 datum: datum,
83 status: selectedStatus,
84 zabeleska: zabeleska,
85 evidentiranoOdId: user.id,
86 seOdnesuvaNaUcenikotId: studentId,
87 zaCasotId: casId,
88 };
89
90 console.log("Prisustvo DTO:", prisustvoRequestDTO);
91
92 const resp= await axios.post(
93 "http://localhost:8080/api/prisustvo",
94 prisustvoRequestDTO,
95 { withCredentials: true }
96 );
97 if(resp.status === 201){
98 navigate(`/predmetenNastavnikDashboard/klas/${classId}/student/${studentId}/attendance`)
99 }
100 } catch (err) {
101 console.log("Error while creating prisustvo:", err);
102 } finally {
103 setLoading(false);
104 }
105 };
106 return (
107 <>
108 <NavbarKlasen />
109 <div className="container">
110 <form onSubmit={handleSubmit}>
111 <div className="mb-3">
112 <label htmlFor="insertDate" className="form-label">
113 Датум на внесување
114 </label>
115 <input
116 type="date"
117 className="form-control"
118 id="insertDate"
119 onChange={(e) => setDatum(e.target.value)}
120 />
121 </div>
122
123 <div className="input-group">
124 <label className="form-label" htmlFor="custom-select">
125 Избери статус
126 </label>
127 <select
128 className="form-select"
129 id="custom-select"
130 value={selectedStatus}
131 onChange={handleSelectChange}
132 >
133 <option defaultValue="PRISUTEN">PRISUTEN</option>
134
135 <option value="OTSUTEN">OTSUTEN</option>
136 <option value="ZADOCNET">ZADOCNET</option>
137 </select>
138 </div>
139 <div className="mb-3">
140 <label htmlFor="exampleFormControlTextarea1" className="form-label">
141 Забелешка
142 </label>
143 <textarea
144 className="form-control"
145 id="exampleFormControlTextarea1"
146 rows="3"
147 onChange={(e) => setZabeleska(e.target.value)}
148 ></textarea>
149 </div>
150 <label htmlFor="activity" className="form-label">
151 Изберете активност кој го предавате за овој клас во текот на
152 неделата
153 </label>
154
155 <select
156 value={selectedActivity}
157 onChange={(e) => setSelectedActivity(e.target.value)}
158 >
159 <option value="">-- Изберете активност --</option>
160
161 {casoviKoiGiPredavalOvaaNedela.map((aktivnost) => (
162 <option key={aktivnost.id} value={aktivnost.id}>
163 {aktivnost.naslov}
164 </option>
165 ))}
166 </select>
167 <button type="submit" className="btn btn-primary">
168 Креирај присуство
169 </button>
170 </form>
171 </div>
172 </>
173 );
174};
175
176export default PredmetenNastavnik_VnesiPrisustvoZaStudent;
Note: See TracBrowser for help on using the repository browser.