| author | ymh <ymh.work@gmail.com> |
| Thu, 03 Aug 2017 17:33:00 +0200 | |
| changeset 134 | be36eed5e6e0 |
| parent 129 | d48946d164c6 |
| permissions | -rw-r--r-- |
|
129
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
1 |
import qs from 'qs'; |
|
134
be36eed5e6e0
add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
129
diff
changeset
|
2 |
import { getToken, getClientId } from '../selectors/authSelectors' |
|
129
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
3 |
|
|
62
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
4 |
class APIClient { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
5 |
constructor(baseURL) { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
6 |
this.baseURL = baseURL; |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
7 |
} |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
8 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
9 |
setStore = (store) => { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
10 |
this.store = store; |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
11 |
} |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
12 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
13 |
createRequest = (method, uri, data, headers) => { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
14 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
15 |
headers = headers || new Headers(); |
|
97
69eaef18b01b
Improve the network saga. Try to avoid unnecessary token refresh
ymh <ymh.work@gmail.com>
parents:
87
diff
changeset
|
16 |
if(method !== 'HEAD') { |
|
69eaef18b01b
Improve the network saga. Try to avoid unnecessary token refresh
ymh <ymh.work@gmail.com>
parents:
87
diff
changeset
|
17 |
headers.append("Content-Type", "application/json"); |
|
69eaef18b01b
Improve the network saga. Try to avoid unnecessary token refresh
ymh <ymh.work@gmail.com>
parents:
87
diff
changeset
|
18 |
} else { |
|
69eaef18b01b
Improve the network saga. Try to avoid unnecessary token refresh
ymh <ymh.work@gmail.com>
parents:
87
diff
changeset
|
19 |
headers.append("Content-Type", "text/plain"); |
|
69eaef18b01b
Improve the network saga. Try to avoid unnecessary token refresh
ymh <ymh.work@gmail.com>
parents:
87
diff
changeset
|
20 |
} |
|
69eaef18b01b
Improve the network saga. Try to avoid unnecessary token refresh
ymh <ymh.work@gmail.com>
parents:
87
diff
changeset
|
21 |
|
|
62
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
22 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
23 |
var options = { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
24 |
method: method, |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
25 |
headers: headers, |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
26 |
}; |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
27 |
|
|
129
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
28 |
let queryparams = ''; |
|
62
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
29 |
if (data) { |
|
129
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
30 |
if(method !== 'HEAD' && method !== 'GET' && data) { |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
31 |
options.body = JSON.stringify(data); |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
32 |
} |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
33 |
else { |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
34 |
queryparams = "?"+qs.stringify(data); |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
35 |
} |
|
62
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
36 |
} |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
37 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
38 |
// TODO : use URL-module to build URL |
|
129
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
39 |
return new Request(this.baseURL + uri + queryparams, options); |
|
62
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
40 |
} |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
41 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
42 |
getToken = () => { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
43 |
const state = this.store.getState(); |
|
134
be36eed5e6e0
add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
129
diff
changeset
|
44 |
return getToken(state); |
|
129
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
45 |
} |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
46 |
|
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
47 |
getClientId = () => { |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
48 |
const state = this.store.getState(); |
|
134
be36eed5e6e0
add menu to change current group and create a new group
ymh <ymh.work@gmail.com>
parents:
129
diff
changeset
|
49 |
return getClientId(state); |
|
62
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
50 |
} |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
51 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
52 |
hasToken = () => { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
53 |
const token = this.getToken(); |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
54 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
55 |
return token !== null && token !== ''; |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
56 |
} |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
57 |
|
|
129
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
58 |
hasClientId = () => { |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
59 |
const clientId = this.getClientId(); |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
60 |
return clientId !== null && clientId !== ''; |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
61 |
} |
|
62
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
62 |
|
|
129
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
63 |
createAuthorizedHeader = (headers) => { |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
64 |
const token = this.getToken() || ''; |
|
62
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
65 |
headers.append("Authorization", "JWT " + token); |
|
129
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
66 |
return headers; |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
67 |
} |
|
62
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
68 |
|
|
129
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
69 |
createClientIdHeader = (headers) => { |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
70 |
const clientId = this.getClientId() || ''; |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
71 |
headers.append("Auditlog-Client", clientId); |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
72 |
return headers; |
|
62
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
73 |
} |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
74 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
75 |
request = (method, uri, data) => { |
|
129
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
76 |
var headers = new Headers(); |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
77 |
if(this.hasToken()) { |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
78 |
headers = this.createAuthorizedHeader(headers); |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
79 |
} |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
80 |
if(this.hasClientId()) { |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
81 |
headers = this.createClientIdHeader(headers); |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
82 |
} |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
83 |
var req = this.createRequest(method, uri, data, headers); |
|
62
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
84 |
return this.fetch(req, { credentials: 'include' }); |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
85 |
} |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
86 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
87 |
get = (uri, data) => { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
88 |
return this.request('GET', uri, data); |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
89 |
} |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
90 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
91 |
post = (uri, data) => { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
92 |
return this.request('POST', uri, data); |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
93 |
} |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
94 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
95 |
put = (uri, data) => { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
96 |
return this.request('PUT', uri, data); |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
97 |
} |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
98 |
|
|
129
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
99 |
delete = (uri, data) => { |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
100 |
return this.request('DELETE', uri, data); |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
101 |
} |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
102 |
|
|
62
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
103 |
fetch = (req) => { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
104 |
return new Promise((resolve, reject) => { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
105 |
fetch(req) |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
106 |
.then((response) => { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
107 |
if (response.ok) { |
|
83
76a4e4b11762
add server request for note update and delete
ymh <ymh.work@gmail.com>
parents:
62
diff
changeset
|
108 |
let resJsonPromise; |
|
76a4e4b11762
add server request for note update and delete
ymh <ymh.work@gmail.com>
parents:
62
diff
changeset
|
109 |
if(response.status === 204) { |
|
76a4e4b11762
add server request for note update and delete
ymh <ymh.work@gmail.com>
parents:
62
diff
changeset
|
110 |
resJsonPromise = Promise.resolve({}); |
|
76a4e4b11762
add server request for note update and delete
ymh <ymh.work@gmail.com>
parents:
62
diff
changeset
|
111 |
} else { |
|
97
69eaef18b01b
Improve the network saga. Try to avoid unnecessary token refresh
ymh <ymh.work@gmail.com>
parents:
87
diff
changeset
|
112 |
resJsonPromise = response.text().then(data => { |
|
69eaef18b01b
Improve the network saga. Try to avoid unnecessary token refresh
ymh <ymh.work@gmail.com>
parents:
87
diff
changeset
|
113 |
if(data.length > 0) { |
|
69eaef18b01b
Improve the network saga. Try to avoid unnecessary token refresh
ymh <ymh.work@gmail.com>
parents:
87
diff
changeset
|
114 |
return JSON.parse(data); |
|
69eaef18b01b
Improve the network saga. Try to avoid unnecessary token refresh
ymh <ymh.work@gmail.com>
parents:
87
diff
changeset
|
115 |
} else { |
|
69eaef18b01b
Improve the network saga. Try to avoid unnecessary token refresh
ymh <ymh.work@gmail.com>
parents:
87
diff
changeset
|
116 |
return {}; |
|
69eaef18b01b
Improve the network saga. Try to avoid unnecessary token refresh
ymh <ymh.work@gmail.com>
parents:
87
diff
changeset
|
117 |
} |
|
69eaef18b01b
Improve the network saga. Try to avoid unnecessary token refresh
ymh <ymh.work@gmail.com>
parents:
87
diff
changeset
|
118 |
}); |
|
83
76a4e4b11762
add server request for note update and delete
ymh <ymh.work@gmail.com>
parents:
62
diff
changeset
|
119 |
} |
|
97
69eaef18b01b
Improve the network saga. Try to avoid unnecessary token refresh
ymh <ymh.work@gmail.com>
parents:
87
diff
changeset
|
120 |
return resJsonPromise.then(data => resolve(data)); |
|
83
76a4e4b11762
add server request for note update and delete
ymh <ymh.work@gmail.com>
parents:
62
diff
changeset
|
121 |
|
|
62
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
122 |
} else { |
|
129
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
123 |
let errorResp = { |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
124 |
status: response.status, |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
125 |
statusText: response.statusText |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
126 |
} |
|
d48946d164c6
Add a first version of synchronisation
ymh <ymh.work@gmail.com>
parents:
97
diff
changeset
|
127 |
return response.json().then(data => reject({...errorResp,data })); |
|
62
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
128 |
} |
|
87
dbcee57de2c6
Add first implementation of network monitor
ymh <ymh.work@gmail.com>
parents:
83
diff
changeset
|
129 |
}) |
|
dbcee57de2c6
Add first implementation of network monitor
ymh <ymh.work@gmail.com>
parents:
83
diff
changeset
|
130 |
.catch((error) => { |
|
dbcee57de2c6
Add first implementation of network monitor
ymh <ymh.work@gmail.com>
parents:
83
diff
changeset
|
131 |
reject({error}); |
|
62
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
132 |
}); |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
133 |
}); |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
134 |
} |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
135 |
} |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
136 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
137 |
export default APIClient |