Projekt

Obecné

Profil

Stáhnout (5.46 KB) Statistiky
| Větev: | Tag: | Revize:
1 c46ffe2f plundrichov
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 7495b9eb plundrichov
import * as api_fetch from './api'
11 c46ffe2f plundrichov
12
13
function Calendar(props) {
14
  
15
  useEffect( () => {
16 5bedee9e plundrichov
    if (props.currentUser !== undefined) {
17
      props.currentUser.role === 'EMPLOYER'
18 7495b9eb plundrichov
        ?
19 9f045397 plundrichov
          api_fetch.getAdminCalendar().then(adminCalendar => { 
20 1a58c244 plundrichov
            props.setAcceptedRequest(adminCalendar);
21 9f045397 plundrichov
          }).catch(reason => {
22
            alert(reason)
23 7495b9eb plundrichov
          })
24
        :
25 5bedee9e plundrichov
          api_fetch.getUserCalendar(props.currentUser, convertedDate).then(userCalendar => {
26 1a58c244 plundrichov
            props.setAcceptedRequest(userCalendar);
27 9f045397 plundrichov
          }).catch(reason => {
28
            alert(reason)
29 7495b9eb plundrichov
          });
30 c46ffe2f plundrichov
    }
31 5bedee9e plundrichov
  }, [props.currentUser]);
32 c46ffe2f plundrichov
33 9f045397 plundrichov
//states
34 c46ffe2f plundrichov
  const [isOpen, setOpen] = useState(false)
35
36
  const [whatDate, setDate] = useState('')
37
38
  const [whatTime, setWhatTime] = useState(7.5)
39
40
  const [typeRadio, setType] = useState('sickday')
41
42
  var today = new Date();
43
44 9f045397 plundrichov
// setting date to right format
45 c46ffe2f plundrichov
  today = today.toISOString().split('T')[0]
46 5bedee9e plundrichov
  const convertedDate = today.split("-").join("/")
47 9f045397 plundrichov
48 c46ffe2f plundrichov
// ********************* ADD EVENT - EMPLOYEE **************************
49
50 9f045397 plundrichov
const addEvent = async (e) => {
51
  e.preventDefault();
52 7495b9eb plundrichov
  
53 ebfe6347 plundrichov
  try {
54 9f045397 plundrichov
  // setting an object
55
  const newDate = whatDate.split("-").join("/");
56
57
  const dataAddEventEmployee = {
58
    type: typeRadio === 'sickday' ? 'SICK_DAY' : 'VACATION',
59
    date: newDate,
60
    from: typeRadio === 'sickday' ? null : "00:00",
61
    to: typeRadio === 'sickday' ? null : moment().startOf('day').add(whatTime, "hours").format("hh:mm"),
62
  }
63
64 ebfe6347 plundrichov
  await api_fetch.addEventApi(dataAddEventEmployee);
65
    if (typeRadio === 'holiday') {
66 5bedee9e plundrichov
      props.setCurrentUser({
67
        ...props.currentUser,
68
        holiday: props.currentUser.holiday - whatTime
69 ebfe6347 plundrichov
      })
70
    } else if (typeRadio === 'sickday') {
71 5bedee9e plundrichov
      props.setCurrentUser({
72
        ...props.currentUser,
73
        takenSickday: props.currentUser.takenSickday + 1
74 ebfe6347 plundrichov
      })
75
    }
76 9f045397 plundrichov
    
77
    setOpen(false)
78 ebfe6347 plundrichov
  } catch (e) {
79
    alert(e)
80 9f045397 plundrichov
  }
81 ebfe6347 plundrichov
}
82 7495b9eb plundrichov
// ********************* ADD EVENT ADMIN - EMPLOYER **************************
83
84
const addEventAdmin = async (e) => {
85
  e.preventDefault();
86 c46ffe2f plundrichov
87 7495b9eb plundrichov
// setting an object
88
  const newDate = whatDate.split("-").join("/");
89 c46ffe2f plundrichov
90 9f045397 plundrichov
  const dataAddEventAdmin = {
91 7495b9eb plundrichov
    type: typeRadio === 'sickday' ? 'SICK_DAY' : 'VACATION',
92
    date: newDate,
93
    from: typeRadio === 'sickday' ? null : "00:00",
94
    to: typeRadio === 'sickday' ? null : moment().startOf('day').add(whatTime, "hours").format("hh:mm"),
95
  };
96 c46ffe2f plundrichov
97 9f045397 plundrichov
  api_fetch.addEventApiAdmin(dataAddEventAdmin).then(() => {
98
    const userProps = {
99 5bedee9e plundrichov
      title: props.currentUser.name, 
100 9f045397 plundrichov
      start: whatDate      
101 c46ffe2f plundrichov
  }
102 9f045397 plundrichov
  //concat new request to current ones
103 1a58c244 plundrichov
      props.setAcceptedRequest((acceptedRequest) => acceptedRequest.concat(userProps))
104 9f045397 plundrichov
  }).catch(reason => {
105 ebfe6347 plundrichov
      alert(reason)
106 9f045397 plundrichov
  });
107 c46ffe2f plundrichov
108 9f045397 plundrichov
  setOpen(false)
109 ebfe6347 plundrichov
110
  api_fetch.getUsersOverview().then(usersOverview => {
111
    props.setEmployees(usersOverview);
112
    }).catch(reason => {
113
    alert(reason)
114
 });
115 9f045397 plundrichov
}
116 5bedee9e plundrichov
117
  const DEFAULT_MANDAY_HOURS = 7.5;
118
  
119 c46ffe2f plundrichov
    
120
  return (
121
    <div className="calendar">
122
123
    <FullCalendar defaultView="dayGridMonth" plugins={[ dayGridPlugin, interactionPlugin ]}
124
125
    dateClick={function(info) {
126
      setOpen(info.dateStr > today)
127
      setDate(info.dateStr)
128 5bedee9e plundrichov
      setWhatTime(DEFAULT_MANDAY_HOURS)
129 c46ffe2f plundrichov
    }}
130
    events={[
131
      ...props.acceptedRequest
132
  ]}
133
    />
134
135
    <Popup 
136
    open={isOpen}
137
    position="right center" 
138
    modal
139
    closeOnDocumentClick
140
    onClose={() => setOpen(false)}
141
    >
142
    <div className="calendar-form">
143 5bedee9e plundrichov
      <form onSubmit={props.currentUser !== undefined && props.currentUser.role === 'EMPLOYER' 
144 9f045397 plundrichov
      ? (e) => addEventAdmin(e)
145
      : (e) => addEvent(e)
146 7495b9eb plundrichov
      }>
147 5bedee9e plundrichov
        <h2>Choose vacation type</h2>
148 c46ffe2f plundrichov
        <div className="calendar-radio">
149
          <input checked={
150
            typeRadio === 'sickday' ? 'checked' : null}
151
            onChange={() => setType(typeRadio === 'holiday' ? 'sickday' : 'holiday')}
152
            type="radio" id="sickday" name="radiobutton" value="sickday"
153
          />
154
          <label for="sickday">Sickday</label>
155
        </div>
156
        <div className="calendar-radio">
157
          <input checked={
158
            typeRadio === 'holiday' ? 'checked' : null} 
159
            onChange={() => setType(typeRadio === 'holiday' ? 'sickday' : 'holiday')} 
160
            type="radio" id="holiday" name="radiobutton" value="holiday"
161
          />
162
          <label for="holiday">Extra Holiday</label>
163
        </div>
164
        <div>
165 5bedee9e plundrichov
          {typeRadio === 'holiday' ? <h4>Date & Hours</h4> : <h4>Date</h4>}
166
          <div className="row calendarInputs">
167 c46ffe2f plundrichov
            <input 
168
              className="date-input" 
169
              type='date' onChange={(e) => setDate(e.target.value)} 
170
              value={whatDate} min={today} 
171
            />
172
            {typeRadio === 'holiday' ? 
173
            <input
174
            className="input-time"
175
            step={0.5}
176
            min={0.5}
177
            max={7.5}
178
            type="number"
179
            onChange={(e) => setWhatTime(e.target.value)}
180
            required
181
            value={whatTime}
182
          /> : null}
183
             </div> 
184
          </div>
185 5bedee9e plundrichov
        <button className="btn btn-submit" type="submit">Request vacation</button>
186 c46ffe2f plundrichov
      </form>
187
    </div>
188
    </Popup>
189
190
    </div>
191
  );
192
  }
193
194
195
export default Calendar;