Projekt

Obecné

Profil

Stáhnout (3.21 KB) Statistiky
| Větev: | Tag: | Revize:
1
import React, { useEffect } from 'react';
2
import './App.css';
3
import moment from 'moment';
4
import * as api from './api';
5
import convertVacationType from './convertVacationType';
6

    
7
export default function UpcomingRequests(props) {
8

    
9
  useEffect(() => {
10
    getData();
11
  }, []); // eslint-disable-line
12

    
13
  // get requests from server
14
  async function getData() {
15
    api.loadAdminRequests().then((data) => {
16
      props.setUser(data.map(request => {
17
        const convertedStartDate = request.date.split('/').join('-');
18

    
19
        return ({
20
          title: request.firstName + ' ' + request.lastName,
21
          id: request.id,
22
          type: convertVacationType(request.type),
23
          start: moment(convertedStartDate).format('D.M.YYYY'),
24
          end: null,
25
          status: request.status.toLowerCase(),
26
        });
27
      }));
28
    }).catch(reason => {
29
      alert(reason);
30
    });
31
  }
32

    
33
  // send accepted request to server
34
  async function acceptRequest(user) {
35
    try {
36
      const acceptedRequests = {
37
        id: user.id,
38
        status: 'ACCEPTED',
39
      };
40

    
41
      await api.sendAcceptedRequest(acceptedRequests).then(() => {
42
        const userProps = {
43
          title: user.title,
44
          type: user.type,
45
          start: user.start,
46
        };
47
        //concat new request to current ones
48
        props.setAcceptedRequest((acceptedRequest) => acceptedRequest.concat(userProps));
49
        //request accept button
50
        props.setUser((pendingRequest) => pendingRequest.filter((item) => item !== user));
51
      });
52
    } catch (e) {
53
      alert(e);
54
    }
55
  }
56

    
57
  //send rejected request to server
58
  async function declineRequest(user) {
59
    try {
60
      const rejectedRequest = {
61
        id: user.id,
62
        status: 'REJECTED',
63
      };
64

    
65
      await api.sendRejectedRequest(rejectedRequest);
66

    
67
      props.setUser((acceptedRequest) => acceptedRequest.filter((item) => item !== user));
68

    
69
      const usersOverview = await api.getUsersOverview();
70
      props.setEmployees(usersOverview);
71

    
72
    } catch (e) {
73
      alert(e);
74
    }
75
  }
76

    
77
  return (
78
    <div className="offs-request column">
79
      <h3>New Requests</h3>
80
      <div className="underline-1"></div>
81
      <div className="offs-items column">
82
        <div className="offs-item row">
83
          <table>
84
            {props.user.length > 0 ? (
85
              <tbody>
86
                <tr>
87
                  <th>Name</th>
88
                  <th>Type</th>
89
                  <th>Date</th>
90
                </tr>
91
                {props.user.map(user => (
92
                  <tr key={user.id}>
93
                    <td>{user.title}</td>
94
                    <td>{user.type}</td>
95
                    <td>{user.end ? user.start + ' - ' + user.end : user.start}</td>
96
                    <div className="offs-btn row">
97
                      <button onClick={() => acceptRequest(user)} type="submit" className="btn btn-submit">Accept</button>
98
                      <button onClick={() => declineRequest(user)} type="submit" className="btn btn-cancel">Decline</button>
99
                    </div>
100
                  </tr>
101
                ))}
102
              </tbody>
103
            ) : (
104
              <tbody>
105
                <p>There are no requests.</p>
106
              </tbody>
107
            )}
108
          </table>
109
        </div>
110
      </div>
111
    </div>
112
  );
113
}
(12-12/19)