aboutsummaryrefslogtreecommitdiffstats
path: root/src/stores
diff options
context:
space:
mode:
authorLibravatar Stefan Malzner <stefan@adlk.io>2019-04-12 13:32:19 +0200
committerLibravatar Stefan Malzner <stefan@adlk.io>2019-04-12 13:32:19 +0200
commitf941074dd7520efb63e9507294df8c420715b9df (patch)
tree614d03296254f02fe93a67a5c3b2feef1446e3aa /src/stores
parentDon't invalidate user request on componentWillMount (diff)
parentfeat(App): Update electron to 4.1.4 (diff)
downloadferdium-app-f941074dd7520efb63e9507294df8c420715b9df.tar.gz
ferdium-app-f941074dd7520efb63e9507294df8c420715b9df.tar.zst
ferdium-app-f941074dd7520efb63e9507294df8c420715b9df.zip
Merge branch 'develop' into chore/streamline-dashboard
Diffstat (limited to 'src/stores')
-rw-r--r--src/stores/FeaturesStore.js29
-rw-r--r--src/stores/ServicesStore.js9
-rw-r--r--src/stores/UIStore.js9
-rw-r--r--src/stores/UserStore.js4
-rw-r--r--src/stores/lib/Request.js6
5 files changed, 40 insertions, 17 deletions
diff --git a/src/stores/FeaturesStore.js b/src/stores/FeaturesStore.js
index e60d79075..6200c9a16 100644
--- a/src/stores/FeaturesStore.js
+++ b/src/stores/FeaturesStore.js
@@ -1,4 +1,9 @@
1import { computed, observable, reaction } from 'mobx'; 1import {
2 computed,
3 observable,
4 reaction,
5 runInAction,
6} from 'mobx';
2 7
3import Store from './lib/Store'; 8import Store from './lib/Store';
4import CachedRequest from './lib/CachedRequest'; 9import CachedRequest from './lib/CachedRequest';
@@ -7,6 +12,7 @@ import delayApp from '../features/delayApp';
7import spellchecker from '../features/spellchecker'; 12import spellchecker from '../features/spellchecker';
8import serviceProxy from '../features/serviceProxy'; 13import serviceProxy from '../features/serviceProxy';
9import basicAuth from '../features/basicAuth'; 14import basicAuth from '../features/basicAuth';
15import workspaces from '../features/workspaces';
10import shareFranz from '../features/shareFranz'; 16import shareFranz from '../features/shareFranz';
11import settingsWS from '../features/settingsWS'; 17import settingsWS from '../features/settingsWS';
12 18
@@ -17,13 +23,16 @@ export default class FeaturesStore extends Store {
17 23
18 @observable featuresRequest = new CachedRequest(this.api.features, 'features'); 24 @observable featuresRequest = new CachedRequest(this.api.features, 'features');
19 25
26 @observable features = Object.assign({}, DEFAULT_FEATURES_CONFIG);
27
20 async setup() { 28 async setup() {
21 this.registerReactions([ 29 this.registerReactions([
30 this._updateFeatures,
22 this._monitorLoginStatus.bind(this), 31 this._monitorLoginStatus.bind(this),
23 ]); 32 ]);
24 33
25 await this.featuresRequest._promise; 34 await this.featuresRequest._promise;
26 setTimeout(this._enableFeatures.bind(this), 1); 35 setTimeout(this._setupFeatures.bind(this), 1);
27 36
28 // single key reaction 37 // single key reaction
29 reaction(() => this.stores.user.data.isPremium, () => { 38 reaction(() => this.stores.user.data.isPremium, () => {
@@ -37,13 +46,16 @@ export default class FeaturesStore extends Store {
37 return this.defaultFeaturesRequest.execute().result || DEFAULT_FEATURES_CONFIG; 46 return this.defaultFeaturesRequest.execute().result || DEFAULT_FEATURES_CONFIG;
38 } 47 }
39 48
40 @computed get features() { 49 _updateFeatures = () => {
50 const features = Object.assign({}, DEFAULT_FEATURES_CONFIG);
41 if (this.stores.user.isLoggedIn) { 51 if (this.stores.user.isLoggedIn) {
42 return this.featuresRequest.execute().result || DEFAULT_FEATURES_CONFIG; 52 const requestResult = this.featuresRequest.execute().result;
53 Object.assign(features, requestResult);
43 } 54 }
44 55 runInAction('FeaturesStore::_updateFeatures', () => {
45 return DEFAULT_FEATURES_CONFIG; 56 this.features = features;
46 } 57 });
58 };
47 59
48 _monitorLoginStatus() { 60 _monitorLoginStatus() {
49 if (this.stores.user.isLoggedIn) { 61 if (this.stores.user.isLoggedIn) {
@@ -53,11 +65,12 @@ export default class FeaturesStore extends Store {
53 } 65 }
54 } 66 }
55 67
56 _enableFeatures() { 68 _setupFeatures() {
57 delayApp(this.stores, this.actions); 69 delayApp(this.stores, this.actions);
58 spellchecker(this.stores, this.actions); 70 spellchecker(this.stores, this.actions);
59 serviceProxy(this.stores, this.actions); 71 serviceProxy(this.stores, this.actions);
60 basicAuth(this.stores, this.actions); 72 basicAuth(this.stores, this.actions);
73 workspaces(this.stores, this.actions);
61 shareFranz(this.stores, this.actions); 74 shareFranz(this.stores, this.actions);
62 settingsWS(this.stores, this.actions); 75 settingsWS(this.stores, this.actions);
63 } 76 }
diff --git a/src/stores/ServicesStore.js b/src/stores/ServicesStore.js
index 69e616f0c..0ec6bf550 100644
--- a/src/stores/ServicesStore.js
+++ b/src/stores/ServicesStore.js
@@ -12,6 +12,7 @@ import Request from './lib/Request';
12import CachedRequest from './lib/CachedRequest'; 12import CachedRequest from './lib/CachedRequest';
13import { matchRoute } from '../helpers/routing-helpers'; 13import { matchRoute } from '../helpers/routing-helpers';
14import { gaEvent } from '../lib/analytics'; 14import { gaEvent } from '../lib/analytics';
15import { workspaceStore } from '../features/workspaces';
15 16
16const debug = require('debug')('Franz:ServiceStore'); 17const debug = require('debug')('Franz:ServiceStore');
17 18
@@ -99,7 +100,6 @@ export default class ServicesStore extends Store {
99 return observable(services.slice().slice().sort((a, b) => a.order - b.order)); 100 return observable(services.slice().slice().sort((a, b) => a.order - b.order));
100 } 101 }
101 } 102 }
102
103 return []; 103 return [];
104 } 104 }
105 105
@@ -108,13 +108,16 @@ export default class ServicesStore extends Store {
108 } 108 }
109 109
110 @computed get allDisplayed() { 110 @computed get allDisplayed() {
111 return this.stores.settings.all.app.showDisabledServices ? this.all : this.enabled; 111 const services = this.stores.settings.all.app.showDisabledServices ? this.all : this.enabled;
112 return workspaceStore.filterServicesByActiveWorkspace(services);
112 } 113 }
113 114
114 // This is just used to avoid unnecessary rerendering of resource-heavy webviews 115 // This is just used to avoid unnecessary rerendering of resource-heavy webviews
115 @computed get allDisplayedUnordered() { 116 @computed get allDisplayedUnordered() {
117 const { showDisabledServices } = this.stores.settings.all.app;
116 const services = this.allServicesRequest.execute().result || []; 118 const services = this.allServicesRequest.execute().result || [];
117 return this.stores.settings.all.app.showDisabledServices ? services : services.filter(service => service.isEnabled); 119 const filteredServices = showDisabledServices ? services : services.filter(service => service.isEnabled);
120 return workspaceStore.filterServicesByActiveWorkspace(filteredServices);
118 } 121 }
119 122
120 @computed get filtered() { 123 @computed get filtered() {
diff --git a/src/stores/UIStore.js b/src/stores/UIStore.js
index bb7965a4a..a95a8e1e0 100644
--- a/src/stores/UIStore.js
+++ b/src/stores/UIStore.js
@@ -21,11 +21,12 @@ export default class UIStore extends Store {
21 return (settings.app.isAppMuted && settings.app.showMessageBadgeWhenMuted) || !settings.isAppMuted; 21 return (settings.app.isAppMuted && settings.app.showMessageBadgeWhenMuted) || !settings.isAppMuted;
22 } 22 }
23 23
24 @computed get theme() { 24 @computed get isDarkThemeActive() {
25 if (this.stores.settings.all.app.darkMode) { 25 return this.stores.settings.all.app.darkMode;
26 return theme('dark'); 26 }
27 }
28 27
28 @computed get theme() {
29 if (this.isDarkThemeActive) return theme('dark');
29 return theme('default'); 30 return theme('default');
30 } 31 }
31 32
diff --git a/src/stores/UserStore.js b/src/stores/UserStore.js
index 77d84afe1..534690fbb 100644
--- a/src/stores/UserStore.js
+++ b/src/stores/UserStore.js
@@ -142,6 +142,10 @@ export default class UserStore extends Store {
142 return this.getUserInfoRequest.execute().result || {}; 142 return this.getUserInfoRequest.execute().result || {};
143 } 143 }
144 144
145 @computed get isPremium() {
146 return !!this.data.isPremium;
147 }
148
145 @computed get legacyServices() { 149 @computed get legacyServices() {
146 return this.getLegacyServicesRequest.execute() || {}; 150 return this.getLegacyServicesRequest.execute() || {};
147 } 151 }
diff --git a/src/stores/lib/Request.js b/src/stores/lib/Request.js
index 04f528156..486de8a49 100644
--- a/src/stores/lib/Request.js
+++ b/src/stores/lib/Request.js
@@ -85,6 +85,8 @@ export default class Request {
85 return this.execute(...this._currentApiCall.args); 85 return this.execute(...this._currentApiCall.args);
86 } 86 }
87 87
88 retry = () => this.reload();
89
88 isExecutingWithArgs(...args) { 90 isExecutingWithArgs(...args) {
89 return this.isExecuting && this._currentApiCall && isEqual(this._currentApiCall.args, args); 91 return this.isExecuting && this._currentApiCall && isEqual(this._currentApiCall.args, args);
90 } 92 }
@@ -107,7 +109,7 @@ export default class Request {
107 Request._hooks.forEach(hook => hook(this)); 109 Request._hooks.forEach(hook => hook(this));
108 } 110 }
109 111
110 reset() { 112 reset = () => {
111 this.result = null; 113 this.result = null;
112 this.isExecuting = false; 114 this.isExecuting = false;
113 this.isError = false; 115 this.isError = false;
@@ -116,5 +118,5 @@ export default class Request {
116 this._promise = Promise; 118 this._promise = Promise;
117 119
118 return this; 120 return this;
119 } 121 };
120} 122}