Projekt

Obecné

Profil

Stáhnout (6.77 KB) Statistiky
| Větev: | Tag: | Revize:
1
import React, { useState, useEffect } from 'react';
2
import './App.css';
3

    
4

    
5
const OverviewAdmin = () => {
6

    
7
   useEffect( () => {
8
      getData();
9
   }, []);
10

    
11
   const getData = async () => {
12
      try {
13
      const response = await fetch (
14
         'http://devcz.yoso.fi:8090/ymanager/users', {
15
          headers: {
16
            Authorization: 1          }
17
        }
18
      );
19
      
20
   if (response.ok) {
21

    
22
      const data = await response.json();
23
      setEmployees(data.map(user => {
24

    
25
         return (
26
            {
27
               name: user.firstName + ' ' + user.lastName,
28
               id: user.id,
29
               sickday: user.sickDayCount,
30
               holiday: user.vacationCount,
31
               role: user.role
32
            })
33
      }))
34
   }  else {
35
         if(response.status === 400) {
36
            alert('error 400 GET DATA (OVERVIEW, EMPLOYER)')
37
         }
38
            else if (response.status === 500) {
39
               alert ('error 500 GET DATA (OVERVIEW, EMPLOYER)')
40
            }
41
            else {
42
               alert('error GET DATA (OVERVIEW, EMPLOYER)')
43
            }
44
   }
45
} catch (e) {
46
   console.log(e)
47
   alert('spatne')
48
   }
49
}
50
   
51
   const [employees, setEmployees] = useState([
52
      {
53
         name: 'Sadam',
54
         id: 0,
55
         sickday: 10,
56
         holiday: 10
57
      }
58
   ]);
59

    
60
   const [isEdit, setEdit] = useState(false);
61
   const [editedUserId, setEditedUserId] = useState();
62
   
63
   const [prevEdit, setPrevEdit] = useState();
64

    
65
   function changeSickdays(newValue) {
66
      const newEmployees = employees.map(employee => {
67
         if (editedUserId === employee.id) {
68
            return {
69
               ...employee,
70
               sickday: newValue,
71
            };
72
         } else {
73
            return employee
74
         }
75
      })
76
      setEmployees(newEmployees);
77
   }
78

    
79
   function changeHoliday(newValue) {
80
      const newEmployees = employees.map(employee => {
81
         if (editedUserId === employee.id) {
82
            return {
83
               ...employee,
84
               holiday: newValue,
85
            };
86
         } else {
87
            return employee
88
         }
89
      })
90
      setEmployees(newEmployees);
91
   }
92

    
93
   const submitEdit = async (e) => {
94
      try {
95
      setEdit(isEdit === true ? false : true);
96
      setPrevEdit(employees);
97
      e.preventDefault();
98

    
99
      const found = employees.find(employee => editedUserId === employee.id);
100
      const foundPrevEdit = prevEdit.find(employee => editedUserId === employee.id);
101
      console.log(found)
102

    
103

    
104
   // send accepted request to server
105
       const response = await fetch('http://devcz.yoso.fi:8090/ymanager/user/settings', {
106
         headers: {
107
           Authorization: 1,
108
           'Content-Type': 'application/json',
109
         },
110
         method: 'PUT',
111

    
112
   // object which is sent to server
113
         body: JSON.stringify({
114
           id: found.id,
115
           vacationCount: Number(found.holiday) - foundPrevEdit.holiday,
116
           sickDayCount: Number(found.sickday),
117
           role: found.role
118
         }),        
119
       });
120
       console.log(response.status)
121
      if (response.status === 400) {
122
         alert('error 400 SAVE DATA (OVERVIEW, EMPLOYER)')
123
      }
124
         else if (response.status === 500) {
125
            alert('error 500 SAVE DATA (OVERVIEW, EMPLOYER)')
126
         }
127
            else if (!response.ok) {
128
               alert('error SAVE DATA (OVERVIEW, EMPLOYER)')
129
            }
130
                   
131
      } catch (e) {
132
         alert('error catch SAVE DATA (OVERVIEW, EMPLOYER')
133
      }
134
   }
135

    
136

    
137
   const cancel = () => {
138
      setEmployees(prevEdit)
139
      setEdit(false)
140
   }
141

    
142
   // ***** overview button ******
143

    
144
   const editEmployee = (employeeId, e) => {
145
      setEdit(true)
146
      setEditedUserId(employeeId)
147
      setPrevEdit(employees)
148
      
149
     e.preventDefault();
150
   }
151

    
152
   console.log(isEdit, editedUserId)
153
   
154
      return (
155
   <div>
156
      <div className="side-content">
157
         <div className="side-board column">
158
            <form className="column side-board-items" onSubmit={(e) => submitEdit(e)}>
159
            {/* <form className="column side-board-items" onSubmit={(e) => submitEdit(e)}> */}
160
            <div className="side-board-heading row">
161
               <h3>Overview</h3>
162
            </div>
163
            <div className="underline-1"></div>
164
            <div className="side-board-items column">
165
               <table border = "0">
166
               <tbody>
167
               <tr>
168
                  <th className="th-left">Name</th>
169
                  <th>Sick Days</th>
170
                  <th>Holiday</th>
171
                  <th></th>
172
               </tr>
173
                  {employees.map(employee => (
174
               <tr>
175
                  <td>{employee.name} {editedUserId}</td>
176
                  {/* SickDays Input */}
177
                  <td className="td-center">
178
                     {isEdit === true && editedUserId === employee.id ? (
179
                        <input className="offsInput" type="number" min="0" value={employee.sickday} onChange={(e) => changeSickdays(e.target.value)}/>
180
                     ) : (
181
                        employee.sickday
182
                     )}
183
                  </td>
184
                  {/* Holiday Input */}
185
                  <td className="td-center">
186
                     {isEdit === true && editedUserId === employee.id ? (
187
                       <input className="offsInput" type="number" min="0" value={employee.holiday} onChange={(e) => changeHoliday(e.target.value)}/>
188
                     ) : (
189
                        employee.holiday
190
                     )}</td>
191
                  {/* Edit Button */}
192
                  <button onClick={(e) => editEmployee(employee.id, e)} className="btn-edit">
193
                     <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-pencil" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
194
                        <path fill-rule="evenodd" d="M11.293 1.293a1 1 0 0 1 1.414 0l2 2a1 1 0 0 1 0 1.414l-9 9a1 1 0 0 1-.39.242l-3 1a1 1 0 0 1-1.266-1.265l1-3a1 1 0 0 1 .242-.391l9-9zM12 2l2 2-9 9-3 1 1-3 9-9z"/>
195
                        <path fill-rule="evenodd" d="M12.146 6.354l-2.5-2.5.708-.708 2.5 2.5-.707.708zM3 10v.5a.5.5 0 0 0 .5.5H4v.5a.5.5 0 0 0 .5.5H5v.5a.5.5 0 0 0 .5.5H6v-1.5a.5.5 0 0 0-.5-.5H5v-.5a.5.5 0 0 0-.5-.5H3z"/>
196
                     </svg>
197
                  </button>
198
                  {/* End of Edit Button */}
199
               </tr>
200
                  ))}
201
               </tbody>
202
            </table>
203
            {/* Submit & Reject Button */}
204
            <div className="column">
205
            {isEdit === true ? <button  type="submit" className="btn btn-submit">
206
            Save</button> : null}
207
            {isEdit === true ? (
208
            <button onClick={cancel} type="submit" className="btn btn-cancel">Cancel</button>
209
               ) : (null)}
210
            </div> 
211
          </div>
212
         </form>  
213
      </div>
214
   </div>
215
   </div>
216
   );    
217
   }
218

    
219

    
220
export default OverviewAdmin;
(9-9/16)