aboutsummaryrefslogtreecommitdiffstats
path: root/src/features/announcements/store.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/features/announcements/store.js')
-rw-r--r--src/features/announcements/store.js49
1 files changed, 30 insertions, 19 deletions
diff --git a/src/features/announcements/store.js b/src/features/announcements/store.js
index 004a44062..c59700926 100644
--- a/src/features/announcements/store.js
+++ b/src/features/announcements/store.js
@@ -1,28 +1,39 @@
1import { action, observable, reaction } from 'mobx'; 1import { action, observable, reaction } from 'mobx';
2import semver from 'semver'; 2import semver from 'semver';
3 3import { FeatureStore } from '../utils/FeatureStore';
4import Request from '../../stores/lib/Request'; 4import { getAnnouncementRequest, getCurrentVersionRequest } from './api';
5import Store from '../../stores/lib/Store';
6 5
7const debug = require('debug')('Franz:feature:announcements:store'); 6const debug = require('debug')('Franz:feature:announcements:store');
8 7
9export class AnnouncementsStore extends Store { 8export class AnnouncementsStore extends FeatureStore {
10 @observable getCurrentVersion = new Request(this.api, 'getCurrentVersion');
11 9
12 @observable getAnnouncement = new Request(this.api, 'getAnnouncementForVersion'); 10 @observable announcement = null;
13 11
14 constructor(stores, api, actions, state) { 12 @observable currentVersion = null;
15 super(stores, api, actions); 13
16 this.state = state; 14 @observable lastUsedVersion = null;
17 } 15
16 @observable isAnnouncementVisible = false;
18 17
19 async setup() { 18 @observable isFeatureActive = false;
19
20 async start(stores, actions) {
21 debug('AnnouncementsStore::start');
22 this.stores = stores;
23 this.actions = actions;
20 await this.fetchLastUsedVersion(); 24 await this.fetchLastUsedVersion();
21 await this.fetchCurrentVersion(); 25 await this.fetchCurrentVersion();
22 await this.fetchReleaseAnnouncement(); 26 await this.fetchReleaseAnnouncement();
23 this.showAnnouncementIfNotSeenYet(); 27 this.showAnnouncementIfNotSeenYet();
24 28
25 this.actions.announcements.show.listen(this._showAnnouncement.bind(this)); 29 this.actions.announcements.show.listen(this._showAnnouncement.bind(this));
30 this.isFeatureActive = true;
31 }
32
33 stop() {
34 debug('AnnouncementsStore::stop');
35 this.isFeatureActive = false;
36 this.isAnnouncementVisible = false;
26 } 37 }
27 38
28 // ====== PUBLIC ====== 39 // ====== PUBLIC ======
@@ -35,14 +46,14 @@ export class AnnouncementsStore extends Store {
35 46
36 async fetchCurrentVersion() { 47 async fetchCurrentVersion() {
37 debug('getting current version from api'); 48 debug('getting current version from api');
38 const version = await this.getCurrentVersion.execute(); 49 const version = await getCurrentVersionRequest.execute();
39 this._setCurrentVersion(version); 50 this._setCurrentVersion(version);
40 } 51 }
41 52
42 async fetchReleaseAnnouncement() { 53 async fetchReleaseAnnouncement() {
43 debug('getting release announcement from api'); 54 debug('getting release announcement from api');
44 try { 55 try {
45 const announcement = await this.getAnnouncement.execute(this.state.currentVersion); 56 const announcement = await getAnnouncementRequest.execute(this.currentVersion);
46 this._setAnnouncement(announcement); 57 this._setAnnouncement(announcement);
47 } catch (error) { 58 } catch (error) {
48 this._setAnnouncement(null); 59 this._setAnnouncement(null);
@@ -50,7 +61,7 @@ export class AnnouncementsStore extends Store {
50 } 61 }
51 62
52 showAnnouncementIfNotSeenYet() { 63 showAnnouncementIfNotSeenYet() {
53 const { announcement, currentVersion, lastUsedVersion } = this.state; 64 const { announcement, currentVersion, lastUsedVersion } = this;
54 if (announcement && semver.gt(currentVersion, lastUsedVersion)) { 65 if (announcement && semver.gt(currentVersion, lastUsedVersion)) {
55 debug(`${currentVersion} < ${lastUsedVersion}: announcement is shown`); 66 debug(`${currentVersion} < ${lastUsedVersion}: announcement is shown`);
56 this._showAnnouncement(); 67 this._showAnnouncement();
@@ -64,21 +75,21 @@ export class AnnouncementsStore extends Store {
64 75
65 @action _setCurrentVersion(version) { 76 @action _setCurrentVersion(version) {
66 debug(`setting current version to ${version}`); 77 debug(`setting current version to ${version}`);
67 this.state.currentVersion = version; 78 this.currentVersion = version;
68 } 79 }
69 80
70 @action _setLastUsedVersion(version) { 81 @action _setLastUsedVersion(version) {
71 debug(`setting last used version to ${version}`); 82 debug(`setting last used version to ${version}`);
72 this.state.lastUsedVersion = version; 83 this.lastUsedVersion = version;
73 } 84 }
74 85
75 @action _setAnnouncement(announcement) { 86 @action _setAnnouncement(announcement) {
76 debug(`setting announcement to ${announcement}`); 87 debug(`setting announcement to ${announcement}`);
77 this.state.announcement = announcement; 88 this.announcement = announcement;
78 } 89 }
79 90
80 @action _showAnnouncement() { 91 @action _showAnnouncement() {
81 this.state.isAnnouncementVisible = true; 92 this.isAnnouncementVisible = true;
82 this.actions.service.blurActive(); 93 this.actions.service.blurActive();
83 const dispose = reaction( 94 const dispose = reaction(
84 () => this.stores.services.active, 95 () => this.stores.services.active,
@@ -90,6 +101,6 @@ export class AnnouncementsStore extends Store {
90 } 101 }
91 102
92 @action _hideAnnouncement() { 103 @action _hideAnnouncement() {
93 this.state.isAnnouncementVisible = false; 104 this.isAnnouncementVisible = false;
94 } 105 }
95} 106}