Projekt

Obecné

Profil

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

    
4

    
5
function UpcomingRequests(props) {
6

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

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

    
22
     if (response.ok) {
23
    const data = await response.json();
24
    props.setUser(data.map(request => {
25
      
26
      const a = request.date;
27
      const b = [a.slice(0, 4), "-", a.slice(5, 7), "-", a.slice(8, 10)].join('');
28

    
29
      return (
30
        {
31
          title: request.firstName + ' ' + request.lastName,
32
          id: request.id,
33
          type: request.type,
34
          start: b,
35
          end: null,
36
          status: request.status
37
      })
38
    }))
39
  } else {
40
    if(response.status === 400) {
41
      alert('error 400 GET DATA (UPCOMING REQUESTS)')
42
   }
43
      else if (response.status === 500) {
44
         alert ('error 500 GET DATA (UPCOMING REQUESTS)')
45
      }
46
      else {
47
         alert('error GET DATA (UPCOMING REQUESTS)')
48
      }
49
  }
50
} catch (e) {
51
  console.log(e)
52
  alert('error catch GET DATA (UPCOMING REQUESTS)')
53
  }    
54
}
55

    
56
  // send accepted request to server
57
  const acceptRequest = async (user) => {
58
    try {
59
    const response = await fetch('http://devcz.yoso.fi:8090/ymanager/user/requests?type=VACATION', {
60
      headers: {
61
        Authorization: 1,
62
        'Content-Type': 'application/json',
63
      },
64
      method: 'PUT',
65
      body: JSON.stringify({
66
        id: user.id,
67
        status: 'ACCEPTED',
68
      }),
69
    });
70

    
71
    if (response.ok) {
72
    const userProps = {
73
      title: user.title,
74
      id: 0,
75
      type: user.type, 
76
      start: user.start
77
  }
78
  //concat new request to current ones
79
      props.setRequest((acceptedRequest) => acceptedRequest.concat(userProps))
80
  //request accept button
81
      props.setUser((pendingRequest) => pendingRequest.filter((item) => item !== user));
82

    
83
    } else {
84
      if(response.status === 400) {
85
        alert('error 400 SEND ACCEPTED DATA (UPCOMING REQUESTS)')
86
     }
87
        else if (response.status === 500) {
88
           alert ('error 500 SEND ACCEPTED DATA (UPCOMING REQUESTS)')
89
        }
90
        else {
91
           alert('error SEND ACCEPTED DATA (UPCOMING REQUESTS)')
92
        }
93
    }
94
  } catch (e) {
95
    alert('error catch SEND ACCEPTED DATA (UPCOMING REQUESTS)')
96
    }
97
  }
98

    
99
  //send rejected request to server
100
  const declineRequest = async (user) => {
101
    try {
102
      const response = await fetch('http://devcz.yoso.fi:8090/ymanager/user/requests?type=VACATION', {
103
        headers: {
104
          Authorization: 1,
105
          'Content-Type': 'application/json',
106
        },
107
        method: 'PUT',
108
        body: JSON.stringify({
109
          id: user.id,
110
          status: 'REJECTED',
111
        }),
112
      });
113

    
114
    if (response.ok) {    
115
  //request cancel button
116
      props.setUser((acceptedRequest) => acceptedRequest.filter((item) => item !== user))
117

    
118
    } else {
119
      if(response.status === 400) {
120
        alert('error 400 SEND REJECTED DATA (UPCOMING REQUESTS)')
121
     }
122
        else if (response.status === 500) {
123
           alert ('error 500 SEND REJECTED DATA (UPCOMING REQUESTS)')
124
        }
125
        else {
126
           alert('error SEND REJECTED DATA (UPCOMING REQUESTS)')
127
        }
128
    }
129
  } catch (e) {
130
    console.log(e)
131
    alert('error catch SEND REJECTED DATA (UPCOMING REQUESTS)')
132
    }
133
  }
134

    
135
  return (
136
    <div className="offs-request column">
137
      <h3>New Requests</h3>
138
      <div className="underline-1"></div>
139
      <div className="offs-items column">
140
        <div className="offs-item row">
141
          <table>
142
            <tbody>
143
              <tr>
144
                <th>Name</th>
145
                <th>Type</th>
146
                <th>Date</th>    
147
              </tr>
148
              {props.userRequest.map(user => (
149
              <tr>
150
                <td>{user.title}</td>
151
                <td>{user.type}</td>    
152
                <td>{user.end ? user.start + " - " + user.end : user.start}</td>
153
                <div className="offs-btn row">
154
                  <button onClick={() => acceptRequest(user)} type="submit" className="btn btn-submit">Accept</button>
155
                  <button onClick={() => declineRequest(user)} type="submit" className="btn btn-cancel">Decline</button>     
156
              </div>
157
              </tr>
158
              ))}
159
            </tbody>
160
          </table>
161
        </div>
162
      </div>
163
    </div>
164
    )
165
  }
166

    
167
export default UpcomingRequests;
168

    
169
     
170

    
171

    
172
        // return (shouldRemoveThisItem === true) ? false : true;
173
        //})
174
      //)
175
      // props.setUser((pendingRequest) => pendingRequest.filter(
176
        
177
      //   function(item) {
178
      //   const shouldRemoveThisItem = item === user;
179
        
180
      //   if (shouldRemoveThisItem === true) {
181
      //     return false;
182
      //   } else {
183
      //     return true;
184
      //   }})
185
      // )
(11-11/16)