Projekt

Obecné

Profil

Stáhnout (8.51 KB) Statistiky
| Větev: | Tag: | Revize:
1
import React, { useState, useEffect } from 'react';
2
import './App.css';
3
import FullCalendar from '@fullcalendar/react'
4
import dayGridPlugin from '@fullcalendar/daygrid'
5
import '@fullcalendar/core/main.css'
6
import '@fullcalendar/daygrid/main.css'
7
import interactionPlugin from '@fullcalendar/interaction';
8
import Popup from "reactjs-popup";
9
import moment from 'moment';
10

    
11

    
12
function Calendar(props) {
13
  
14
  useEffect( () => {
15
    if (props.userName.id !== undefined) {
16
      props.userName.role === 'EMPLOYER' ? getDataAdmin() : getData();
17
    }
18
  }, [props.userName.id]);
19

    
20
  // LOAD DATA from server to calendar **** EMPLOYEE ****
21
  const getData = async () => {
22
    try {
23
    const response = await fetch(
24
      `http://devcz.yoso.fi:8090/ymanager/user/${props.userName.id}/calendar?from=${todayTwo}&status=ACCEPTED&status=REJECTED`, {
25
        headers: {
26
          'Accept': 'application/json',
27
          Authorization: 6
28
        },
29
        method: 'GET',
30
      }
31
    );
32

    
33
    if (response.ok) {
34
    const data = await response.json();
35
    
36
    props.setRequest(data.filter(day => {
37
      return day.status !== 'PENDING'
38
    }).map(day => {
39

    
40
      const newDate = day.date.split("/").join("-");
41

    
42
      return ({
43
      title: props.userName.name,
44
      start: newDate,
45
      backgroundColor: day.status === 'REJECTED' ? 'red' : 'green'
46
      })
47
    }))
48
  } else {
49
    if(response.status === 400) {
50
      alert('error 400 LOADING DATA (CALENDAR, EMPLOYEE)')
51
   }
52
      else if (response.status === 500) {
53
         alert ('error 500 LOADING DATA (CALENDAR, EMPLOYEE)')
54
      }
55
      else {
56
         alert('error LOADING DATA (CALENDAR, EMPLOYEE)')
57
      }
58
  }
59
  } catch (e) {
60
    alert('error catch LOADING DATA (CALENDAR, EMPLOYEE)')
61
  }
62
  }
63
  // LOAD DATA from server to calendar **** EMPLOYER ****
64
  const getDataAdmin = async () => {
65
    try {
66
    const response = await fetch(
67
      'http://devcz.yoso.fi:8090/ymanager/users/requests/vacation?status=ACCEPTED', {
68
        headers: {
69
          'Accept': 'application/json',
70
          Authorization: 1
71
        },
72
        method: 'GET',
73
      }
74
    );
75

    
76
    if (response.ok) {
77
    const data = await response.json();
78
    
79
    props.setRequest(data.map(day => {
80

    
81
      const newDate = day.date.split("/").join("-");
82

    
83
      return ( {
84
      title: day.firstName + ' ' + day.lastName,
85
      start: newDate
86
      })
87
    }))
88
  } else {
89
    if(response.status === 400) {
90
      alert('error 400 LOADING DATA (CALENDAR, EMPLOYER)')
91
   }
92
      else if (response.status === 500) {
93
         alert ('error 500 LOADING DATA (CALENDAR, EMPLOYER))')
94
      }
95
      else {
96
         alert('error LOADING DATA (CALENDAR, EMPLOYER)')
97
      }
98
  }
99
  } catch (e) {
100
    alert('error catch LOADING DATA (CALENDAR, EMPLOYER)')
101
  }
102
}
103

    
104

    
105
  //states
106
  const [isOpen, setOpen] = useState(false)
107

    
108
  const [whatDate, setDate] = useState('')
109

    
110
  const [whatTime, setWhatTime] = useState(7.5)
111

    
112
  const [typeRadio, setType] = useState('sickday')
113

    
114
  var today = new Date();
115

    
116
  // setting date to right format
117
  today = today.toISOString().split('T')[0]
118
  const todayTwo = today.split("-").join("/")
119

    
120

    
121
// ********************* ADD EVENT - EMPLOYEE **************************
122

    
123
  const addEvent = async (e) => {
124
    e.preventDefault();
125

    
126
  // setting an object
127
    const newDate = whatDate.split("-").join("/");
128
      
129
    try {
130
  // send accepted request to server
131
      const response = await fetch('http://devcz.yoso.fi:8090/ymanager/user/calendar/create', {
132
        headers: {
133
          Authorization: 6,
134
          'Content-Type': 'application/json',
135
        },
136
        method: 'POST',
137
  // object which is sent to server
138
        body: JSON.stringify({
139
          type: typeRadio === 'sickday' ? 'SICK_DAY' : 'VACATION',
140
          date: newDate,
141
          from: typeRadio === 'sickday' ? null : "00:00",
142
          to: typeRadio === 'sickday' ? null : moment().startOf('day').add(whatTime, "hours").format("hh:mm"),
143
        }),
144
      });
145
      if (response.ok) {
146

    
147
      const response = await fetch(
148
        'http://devcz.yoso.fi:8090/ymanager/users/requests/vacation?status=PENDING', {
149
          headers: {
150
            Authorization: 1
151
          },
152
        }
153
  
154
       );
155
      const data = await response.json();
156

    
157
      props.setUser(data.map(request => {
158
        const a = request.date;
159
        const b = [a.slice(0, 4), "-", a.slice(5, 7), "-", a.slice(8, 10)].join('');
160
  
161
        return (
162
          {
163
            title: request.firstName + ' ' + request.lastName,
164
            id: request.id,
165
            type: request.type,
166
            start: b,
167
            end: null,
168
            status: request.status
169
        })
170
      }))
171

    
172
  } else {
173

    
174
    if(response.status === 400) {
175
    alert('error 400 ADD EVENT - EMPLOYEE')
176
 }
177
    else if (response.status === 500) {
178
       alert ('error 500 ADD EVENT - EMPLOYEE')
179
    }
180
    else {
181
       alert('error ADD EVENT - EMPLOYEE')
182
    }
183
    
184
  }
185
    } catch (e) {
186
      alert('error catch ADD EVENT - EMPLOYEE')
187
    }
188

    
189
    setOpen(false)}
190

    
191
  
192
// ********************* ADD EVENT ADMIN - EMPLOYER **************************
193

    
194
  const addEventAdmin = async (e) => {
195
    e.preventDefault();
196

    
197
  // setting an object
198
    const newDate = whatDate.split("-").join("/");
199
      
200
    try {
201
  // send accepted request to server
202
      const response = await fetch('http://devcz.yoso.fi:8090/ymanager/user/calendar/create', {
203
        headers: {
204
          Authorization: 1,
205
          'Content-Type': 'application/json',
206
        },
207
        method: 'POST',
208
  // object which is sent to server
209
        body: JSON.stringify({
210
          type: typeRadio === 'sickday' ? 'SICK_DAY' : 'VACATION',
211
          date: newDate,
212
          from: typeRadio === 'sickday' ? null : "00:00",
213
          to: typeRadio === 'sickday' ? null : moment().startOf('day').add(whatTime, "hours").format("hh:mm"),
214
        }),
215
      });
216
      if (response.ok) {
217
    
218

    
219
    const userProps = {
220
      title: props.userName.name,
221
      start: whatDate
222
    
223
  }
224
  //concat new request to current ones
225
      props.setRequest((acceptedRequest) => acceptedRequest.concat(userProps))
226
  } else {
227
    if(response.status === 400) {
228
      alert('error 400 ADD EVENT ADMIN - EMPLOYER')
229
   }
230
      else if (response.status === 500) {
231
         alert ('error 500 ADD EVENT ADMIN - EMPLOYER')
232
      }
233
      else {
234
         alert('error ADD EVENT ADMIN - EMPLOYER')
235
      }
236
  }
237
    } catch (e) {
238
      alert('error catch ADD EVENT ADMIN - EMPLOYER')
239
    }
240

    
241

    
242
    setOpen(false)}
243
    
244

    
245
  return (
246
    <div className="calendar">
247

    
248
    <FullCalendar defaultView="dayGridMonth" plugins={[ dayGridPlugin, interactionPlugin ]}
249

    
250
    dateClick={function(info) {
251
      //setOpen(true === info.dateStr > today ? true : false )
252
      setOpen(info.dateStr > today)
253
      setDate(info.dateStr)
254
      setWhatTime(7.5)
255
    }}
256
    events={[
257
      ...props.acceptedRequest
258
  ]}
259
    />
260

    
261
    <Popup 
262
    open={isOpen}
263
    position="right center" 
264
    modal
265
    closeOnDocumentClick
266
    onClose={() => setOpen(false)}
267
    >
268
    <div className="calendar-form">
269
      {/* <form onSubmit={(e) => addEvent(e)}> */}
270
      <form onSubmit={props.userName.role === 'EMPLOYER' ? (e) => addEventAdmin(e) : (e) => addEvent(e) }>
271
        <h2>Choose an option</h2>
272
        <div className="calendar-radio">
273
          <input checked={
274
            typeRadio === 'sickday' ? 'checked' : null}
275
            onChange={() => setType(typeRadio === 'holiday' ? 'sickday' : 'holiday')}
276
            type="radio" id="sickday" name="radiobutton" value="sickday"
277
          />
278
          <label for="sickday">Sickday</label>
279
        </div>
280
        <div className="calendar-radio">
281
          <input checked={
282
            typeRadio === 'holiday' ? 'checked' : null} 
283
            onChange={() => setType(typeRadio === 'holiday' ? 'sickday' : 'holiday')} 
284
            type="radio" id="holiday" name="radiobutton" value="holiday"
285
          />
286
          <label for="holiday">Extra Holiday</label>
287
        </div>
288
        <div>
289
          <h4>Date & Hours</h4>
290
          <div className="row">
291
            <input 
292
              className="date-input" 
293
              type='date' onChange={(e) => setDate(e.target.value)} 
294
              value={whatDate} min={today} 
295
            />
296
            {typeRadio === 'holiday' ? 
297
            <input
298
            className="input-time"
299
            step={0.5}
300
            min={0.5}
301
            max={7.5}
302
            type="number"
303
            onChange={(e) => setWhatTime(e.target.value)}
304
            required
305
            value={whatTime}
306
          /> : null}
307
             </div> 
308
          </div>
309
        <button className="btn btn-submit" type="submit">Submit</button>
310
      </form>
311
    </div>
312
    </Popup>
313

    
314
    </div>
315
  );
316
  }
317

    
318

    
319
export default Calendar;
(4-4/16)