diff options
Diffstat (limited to 'src/stores/RequestStore.js')
-rw-r--r-- | src/stores/RequestStore.js | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/stores/RequestStore.js b/src/stores/RequestStore.js new file mode 100644 index 000000000..4140ca362 --- /dev/null +++ b/src/stores/RequestStore.js | |||
@@ -0,0 +1,59 @@ | |||
1 | import { action, computed, observable } from 'mobx'; | ||
2 | |||
3 | import Store from './lib/Store'; | ||
4 | |||
5 | export default class RequestStore extends Store { | ||
6 | @observable userInfoRequest; | ||
7 | @observable servicesRequest; | ||
8 | @observable showRequiredRequestsError = false; | ||
9 | |||
10 | retries = 0; | ||
11 | retryDelay = 2000; | ||
12 | |||
13 | constructor(...args) { | ||
14 | super(...args); | ||
15 | |||
16 | this.actions.requests.retryRequiredRequests.listen(this._retryRequiredRequests.bind(this)); | ||
17 | |||
18 | this.registerReactions([ | ||
19 | this._autoRetry.bind(this), | ||
20 | ]); | ||
21 | } | ||
22 | |||
23 | setup() { | ||
24 | this.userInfoRequest = this.stores.user.getUserInfoRequest; | ||
25 | this.servicesRequest = this.stores.services.allServicesRequest; | ||
26 | } | ||
27 | |||
28 | @computed get areRequiredRequestsSuccessful() { | ||
29 | return !this.userInfoRequest.isError | ||
30 | && !this.servicesRequest.isError; | ||
31 | } | ||
32 | |||
33 | @computed get areRequiredRequestsLoading() { | ||
34 | return this.userInfoRequest.isExecuting | ||
35 | || this.servicesRequest.isExecuting; | ||
36 | } | ||
37 | |||
38 | @action _retryRequiredRequests() { | ||
39 | this.userInfoRequest.reload(); | ||
40 | this.servicesRequest.reload(); | ||
41 | } | ||
42 | |||
43 | // Reactions | ||
44 | _autoRetry() { | ||
45 | const delay = (this.retries <= 10 ? this.retries : 10) * this.retryDelay; | ||
46 | if (!this.areRequiredRequestsSuccessful && this.stores.user.isLoggedIn) { | ||
47 | setTimeout(() => { | ||
48 | this.retries += 1; | ||
49 | this._retryRequiredRequests(); | ||
50 | if (this.retries === 4) { | ||
51 | this.showRequiredRequestsError = true; | ||
52 | } | ||
53 | |||
54 | this._autoRetry(); | ||
55 | console.debug(`Retry required requests delayed in ${(delay) / 1000}s`); | ||
56 | }, delay); | ||
57 | } | ||
58 | } | ||
59 | } | ||