aboutsummaryrefslogtreecommitdiffstats
path: root/src/features
diff options
context:
space:
mode:
authorLibravatar Dominik Guzei <dominik.guzei@gmail.com>2019-01-14 17:11:27 +0100
committerLibravatar Dominik Guzei <dominik.guzei@gmail.com>2019-02-12 13:39:03 +0100
commit84755ddf8b8fb015ee2bfd70e9c4aa50d256f9d0 (patch)
treee680bd3e1aab13fa1e413ca54f2f6d7a27c35b20 /src/features
parentadd workspaces menu item in settings dialog (diff)
downloadferdium-app-84755ddf8b8fb015ee2bfd70e9c4aa50d256f9d0.tar.gz
ferdium-app-84755ddf8b8fb015ee2bfd70e9c4aa50d256f9d0.tar.zst
ferdium-app-84755ddf8b8fb015ee2bfd70e9c4aa50d256f9d0.zip
basic setup of workspaces settings screen
Diffstat (limited to 'src/features')
-rw-r--r--src/features/workspaces/api.js16
-rw-r--r--src/features/workspaces/index.js10
-rw-r--r--src/features/workspaces/state.js12
-rw-r--r--src/features/workspaces/store.js15
4 files changed, 37 insertions, 16 deletions
diff --git a/src/features/workspaces/api.js b/src/features/workspaces/api.js
index 1ee2440fe..97badbd01 100644
--- a/src/features/workspaces/api.js
+++ b/src/features/workspaces/api.js
@@ -1,9 +1,13 @@
1// TODO: use real server instead 1import { prepareAuthRequest } from '../../api/utils/auth';
2const workspaces = [ 2import { API, API_VERSION } from '../../environment';
3 { id: 'workspace-1', name: 'Private' },
4 { id: 'workspace-2', name: 'Office' },
5];
6 3
7export default { 4export default {
8 getUserWorkspaces: () => Promise.resolve(workspaces), 5 getUserWorkspaces: async () => {
6 const url = `${API}/${API_VERSION}/workspace`;
7 const request = await window.fetch(url, prepareAuthRequest({
8 method: 'GET',
9 }));
10 if (!request.ok) throw request;
11 return request.json();
12 },
9}; 13};
diff --git a/src/features/workspaces/index.js b/src/features/workspaces/index.js
index b4cfd3c2d..50ac3b414 100644
--- a/src/features/workspaces/index.js
+++ b/src/features/workspaces/index.js
@@ -1,14 +1,11 @@
1import { observable, reaction } from 'mobx'; 1import { reaction } from 'mobx';
2import { merge } from 'lodash';
3import WorkspacesStore from './store'; 2import WorkspacesStore from './store';
4import api from './api'; 3import api from './api';
4import { state, resetState } from './state';
5 5
6const debug = require('debug')('Franz:feature:workspaces'); 6const debug = require('debug')('Franz:feature:workspaces');
7 7
8let store = null; 8let store = null;
9const defaultState = { workspaces: [] };
10
11export const state = observable(defaultState);
12 9
13export default function initWorkspaces(stores, actions) { 10export default function initWorkspaces(stores, actions) {
14 const { features, user } = stores; 11 const { features, user } = stores;
@@ -27,8 +24,7 @@ export default function initWorkspaces(stores, actions) {
27 debug('Disabling `workspaces` feature'); 24 debug('Disabling `workspaces` feature');
28 store.teardown(); 25 store.teardown();
29 store = null; 26 store = null;
30 // Reset state to default 27 resetState(); // Reset state to default
31 merge(state, defaultState);
32 } 28 }
33 }, 29 },
34 { 30 {
diff --git a/src/features/workspaces/state.js b/src/features/workspaces/state.js
new file mode 100644
index 000000000..ed3fe9f00
--- /dev/null
+++ b/src/features/workspaces/state.js
@@ -0,0 +1,12 @@
1import { observable } from 'mobx';
2
3const defaultState = {
4 isLoading: false,
5 workspaces: [],
6};
7
8export const state = observable(defaultState);
9
10export function resetState() {
11 Object.assign(state, defaultState);
12}
diff --git a/src/features/workspaces/store.js b/src/features/workspaces/store.js
index 4b4e729ed..2b6d55cc7 100644
--- a/src/features/workspaces/store.js
+++ b/src/features/workspaces/store.js
@@ -1,6 +1,7 @@
1import { observable, reaction } from 'mobx'; 1import { observable, reaction } from 'mobx';
2import Store from '../../stores/lib/Store'; 2import Store from '../../stores/lib/Store';
3import CachedRequest from '../../stores/lib/CachedRequest'; 3import CachedRequest from '../../stores/lib/CachedRequest';
4import Workspace from '../../models/Workspace';
4 5
5const debug = require('debug')('Franz:feature:workspaces'); 6const debug = require('debug')('Franz:feature:workspaces');
6 7
@@ -18,12 +19,20 @@ export default class WorkspacesStore extends Store {
18 19
19 reaction( 20 reaction(
20 () => this.allWorkspacesRequest.result, 21 () => this.allWorkspacesRequest.result,
21 workspaces => this.setWorkspaces(workspaces), 22 workspaces => this._setWorkspaces(workspaces),
23 );
24 reaction(
25 () => this.allWorkspacesRequest.isExecuting,
26 isExecuting => this._setIsLoading(isExecuting),
22 ); 27 );
23 } 28 }
24 29
25 setWorkspaces = (workspaces) => { 30 _setWorkspaces = (workspaces) => {
26 debug('setting user workspaces', workspaces.slice()); 31 debug('setting user workspaces', workspaces.slice());
27 this.state.workspaces = workspaces; 32 this.state.workspaces = workspaces.map(data => new Workspace(data));
33 };
34
35 _setIsLoading = (isLoading) => {
36 this.state.isLoading = isLoading;
28 }; 37 };
29} 38}