aboutsummaryrefslogtreecommitdiffstats
path: root/src/stores/FeaturesStore.js
diff options
context:
space:
mode:
authorLibravatar Dominik Guzei <dominik.guzei@gmail.com>2019-04-11 16:54:01 +0200
committerLibravatar Stefan Malzner <stefan@adlk.io>2019-04-11 16:54:01 +0200
commit47c1c99d893517efc679ab29d675cc0bf44be8be (patch)
tree9cab9697096bef0ce56d8ee8709bc1c2c3a42deb /src/stores/FeaturesStore.js
parenttest package order (diff)
downloadferdium-app-47c1c99d893517efc679ab29d675cc0bf44be8be.tar.gz
ferdium-app-47c1c99d893517efc679ab29d675cc0bf44be8be.tar.zst
ferdium-app-47c1c99d893517efc679ab29d675cc0bf44be8be.zip
feat(App): Added Workspaces for all your daily routines 🥳
* merge default and fetched feature configs * ignore intellij project files * basic setup for workspaces feature * define workspaces as premium feature * add workspaces menu item in settings dialog * basic setup of workspaces settings screen * fix eslint error * assign react key prop to workspace items * add styles for workspace table * setup logic to display workspace edit page * consolidate workspace feature for further development * prepare basic workspace edit form * add on enter key handler for form input component * add form for creating workspaces * small fixes * adds flow for deleting workspaces * stop tracking google analytics in components * pin gulp-sass-variables version to 1.1.1 * fix merge conflict * fix bug in form input library * improve workspace form setup * finish basic workspace settings * finish workspaces mvp * fix eslint issues * remove dev logs * detach service when underlying webview unmounts * disable no-param-reassign eslint rule * add workspace drawer * change workspace switch shortcuts to start with zero * add workspace drawer toggle menu item and shortcut * improve workspace switching ux * style add workspace icon in drawer like the sidebar icons * improve workspace drawer layout * add i18n messages for service loading and workspace switching * small fixes * add tooltip to add workspace button in drawer * add workspaces count badge in settings navigation * fix merge conflicts with latest develop * refactor state management for workspace feature * reset api requests when workspace feature is stopped * hide workspace feature if it is disabled * handle get workspaces request errors in the ui * show infobox when updating workspaces * indicate any server interaction with spinners and infoboxes * add analytic events for workspace actions * improve styling of workspace switch indicator * add workspace premium notice to dashboard * add workspace feature info in drawer for free users * add workspace premium badge in settings nav * fix premium workspace badge in settings menu for light theme * fix active workspaces settings premium badge in light theme * give upgrade account button a bit more padding * add open last used workspace logic * use mobx-localstorage directly in the store * fix wrong workspace tooltip shortcut in sidebar * fix bug in workspace feature initialization * show workspaces intro in drawer when user has none yet * fix issues for users that have workspace but downgraded to free * border radius for premium intro in workspace settings * close workspace drawer after clicking on a workspace * add hover effect for drawer workspace items * ensure drawer is open on workspace settings routes * add small text label for adding new workspace to drawer * make workspace settings list items taller * refactor workspace table css away from legacy styles * render workspace service list like services + toggle * change plus icon in workspace drawer to settings icon * autofocus create workspace input field * add css transition to drawer workspace item hover * fix drawer add workspace label styles * refactors workspace theme vars into object structure * improve contrast of workspace switching indicator * added generic pro badge component for settings nav * add premium badge to workspace drawer headline * add context menu for workspace drawer items * handle deleted services that are attached to workspaces
Diffstat (limited to 'src/stores/FeaturesStore.js')
-rw-r--r--src/stores/FeaturesStore.js29
1 files changed, 21 insertions, 8 deletions
diff --git a/src/stores/FeaturesStore.js b/src/stores/FeaturesStore.js
index d2842083c..8fe576813 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';
11 17
12import { DEFAULT_FEATURES_CONFIG } from '../config'; 18import { DEFAULT_FEATURES_CONFIG } from '../config';
@@ -16,13 +22,16 @@ export default class FeaturesStore extends Store {
16 22
17 @observable featuresRequest = new CachedRequest(this.api.features, 'features'); 23 @observable featuresRequest = new CachedRequest(this.api.features, 'features');
18 24
25 @observable features = Object.assign({}, DEFAULT_FEATURES_CONFIG);
26
19 async setup() { 27 async setup() {
20 this.registerReactions([ 28 this.registerReactions([
29 this._updateFeatures,
21 this._monitorLoginStatus.bind(this), 30 this._monitorLoginStatus.bind(this),
22 ]); 31 ]);
23 32
24 await this.featuresRequest._promise; 33 await this.featuresRequest._promise;
25 setTimeout(this._enableFeatures.bind(this), 1); 34 setTimeout(this._setupFeatures.bind(this), 1);
26 35
27 // single key reaction 36 // single key reaction
28 reaction(() => this.stores.user.data.isPremium, () => { 37 reaction(() => this.stores.user.data.isPremium, () => {
@@ -36,13 +45,16 @@ export default class FeaturesStore extends Store {
36 return this.defaultFeaturesRequest.execute().result || DEFAULT_FEATURES_CONFIG; 45 return this.defaultFeaturesRequest.execute().result || DEFAULT_FEATURES_CONFIG;
37 } 46 }
38 47
39 @computed get features() { 48 _updateFeatures = () => {
49 const features = Object.assign({}, DEFAULT_FEATURES_CONFIG);
40 if (this.stores.user.isLoggedIn) { 50 if (this.stores.user.isLoggedIn) {
41 return this.featuresRequest.execute().result || DEFAULT_FEATURES_CONFIG; 51 const requestResult = this.featuresRequest.execute().result;
52 Object.assign(features, requestResult);
42 } 53 }
43 54 runInAction('FeaturesStore::_updateFeatures', () => {
44 return DEFAULT_FEATURES_CONFIG; 55 this.features = features;
45 } 56 });
57 };
46 58
47 _monitorLoginStatus() { 59 _monitorLoginStatus() {
48 if (this.stores.user.isLoggedIn) { 60 if (this.stores.user.isLoggedIn) {
@@ -52,11 +64,12 @@ export default class FeaturesStore extends Store {
52 } 64 }
53 } 65 }
54 66
55 _enableFeatures() { 67 _setupFeatures() {
56 delayApp(this.stores, this.actions); 68 delayApp(this.stores, this.actions);
57 spellchecker(this.stores, this.actions); 69 spellchecker(this.stores, this.actions);
58 serviceProxy(this.stores, this.actions); 70 serviceProxy(this.stores, this.actions);
59 basicAuth(this.stores, this.actions); 71 basicAuth(this.stores, this.actions);
72 workspaces(this.stores, this.actions);
60 shareFranz(this.stores, this.actions); 73 shareFranz(this.stores, this.actions);
61 } 74 }
62} 75}