| author | ymh <ymh.work@gmail.com> |
| Mon, 26 Jun 2017 15:21:06 +0200 | |
| changeset 87 | dbcee57de2c6 |
| parent 83 | 76a4e4b11762 |
| child 97 | 69eaef18b01b |
| permissions | -rw-r--r-- |
|
62
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
1 |
class APIClient { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
2 |
constructor(baseURL) { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
3 |
this.baseURL = baseURL; |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
4 |
} |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
5 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
6 |
setStore = (store) => { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
7 |
this.store = store; |
|
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 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
10 |
createRequest = (method, uri, data, headers) => { |
|
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 |
headers = headers || new Headers(); |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
13 |
headers.append("Content-Type", "application/json"); |
|
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 |
var options = { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
16 |
method: method, |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
17 |
headers: headers, |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
18 |
}; |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
19 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
20 |
if (data) { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
21 |
options.body = JSON.stringify(data); |
|
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 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
24 |
// TODO : use URL-module to build URL |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
25 |
return new Request(this.baseURL + uri, options); |
|
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 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
28 |
getToken = () => { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
29 |
const state = this.store.getState(); |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
30 |
return state['token']; |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
31 |
} |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
32 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
33 |
hasToken = () => { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
34 |
const token = this.getToken(); |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
35 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
36 |
return token !== null && token !== ''; |
|
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 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
39 |
createAuthorizedRequest = (method, uri, data) => { |
|
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 |
var headers = new Headers(), |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
42 |
token = this.getToken() || ''; |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
43 |
headers.append("Authorization", "JWT " + token); |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
44 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
45 |
return this.createRequest(method, uri, data, headers); |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
46 |
} |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
47 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
48 |
request = (method, uri, data) => { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
49 |
console.log(method + ' ' + uri); |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
50 |
var req = this.hasToken() ? this.createAuthorizedRequest(method, uri, data) : this.createRequest(method, uri, data); |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
51 |
return this.fetch(req, { credentials: 'include' }); |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
52 |
} |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
53 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
54 |
get = (uri, data) => { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
55 |
return this.request('GET', uri, data); |
|
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 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
58 |
post = (uri, data) => { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
59 |
return this.request('POST', uri, data); |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
60 |
} |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
61 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
62 |
put = (uri, data) => { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
63 |
return this.request('PUT', uri, data); |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
64 |
} |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
65 |
|
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
66 |
fetch = (req) => { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
67 |
return new Promise((resolve, reject) => { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
68 |
fetch(req) |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
69 |
.then((response) => { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
70 |
if (response.ok) { |
|
83
76a4e4b11762
add server request for note update and delete
ymh <ymh.work@gmail.com>
parents:
62
diff
changeset
|
71 |
let resJsonPromise; |
|
76a4e4b11762
add server request for note update and delete
ymh <ymh.work@gmail.com>
parents:
62
diff
changeset
|
72 |
if(response.status === 204) { |
|
76a4e4b11762
add server request for note update and delete
ymh <ymh.work@gmail.com>
parents:
62
diff
changeset
|
73 |
resJsonPromise = Promise.resolve({}); |
|
76a4e4b11762
add server request for note update and delete
ymh <ymh.work@gmail.com>
parents:
62
diff
changeset
|
74 |
} else { |
|
76a4e4b11762
add server request for note update and delete
ymh <ymh.work@gmail.com>
parents:
62
diff
changeset
|
75 |
resJsonPromise = response.json(); |
|
76a4e4b11762
add server request for note update and delete
ymh <ymh.work@gmail.com>
parents:
62
diff
changeset
|
76 |
} |
|
76a4e4b11762
add server request for note update and delete
ymh <ymh.work@gmail.com>
parents:
62
diff
changeset
|
77 |
return resJsonPromise.then((data) => resolve(data)); |
|
76a4e4b11762
add server request for note update and delete
ymh <ymh.work@gmail.com>
parents:
62
diff
changeset
|
78 |
|
|
62
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
79 |
} else { |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
80 |
return response.json().then((data) => reject(data)); |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
81 |
} |
|
87
dbcee57de2c6
Add first implementation of network monitor
ymh <ymh.work@gmail.com>
parents:
83
diff
changeset
|
82 |
}) |
|
dbcee57de2c6
Add first implementation of network monitor
ymh <ymh.work@gmail.com>
parents:
83
diff
changeset
|
83 |
.catch((error) => { |
|
dbcee57de2c6
Add first implementation of network monitor
ymh <ymh.work@gmail.com>
parents:
83
diff
changeset
|
84 |
reject({error}); |
|
62
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 |
} |
|
b2514a9bcd49
migrate to redux-offline + various optimisation
ymh <ymh.work@gmail.com>
parents:
diff
changeset
|
88 |
} |
|
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 |
export default APIClient |