diff options
author | Dominik Guzei <dominik.guzei@gmail.com> | 2019-01-14 17:11:27 +0100 |
---|---|---|
committer | Dominik Guzei <dominik.guzei@gmail.com> | 2019-02-12 13:39:03 +0100 |
commit | 84755ddf8b8fb015ee2bfd70e9c4aa50d256f9d0 (patch) | |
tree | e680bd3e1aab13fa1e413ca54f2f6d7a27c35b20 /src/features | |
parent | add workspaces menu item in settings dialog (diff) | |
download | ferdium-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.js | 16 | ||||
-rw-r--r-- | src/features/workspaces/index.js | 10 | ||||
-rw-r--r-- | src/features/workspaces/state.js | 12 | ||||
-rw-r--r-- | src/features/workspaces/store.js | 15 |
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 | 1 | import { prepareAuthRequest } from '../../api/utils/auth'; |
2 | const workspaces = [ | 2 | import { API, API_VERSION } from '../../environment'; |
3 | { id: 'workspace-1', name: 'Private' }, | ||
4 | { id: 'workspace-2', name: 'Office' }, | ||
5 | ]; | ||
6 | 3 | ||
7 | export default { | 4 | export 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 @@ | |||
1 | import { observable, reaction } from 'mobx'; | 1 | import { reaction } from 'mobx'; |
2 | import { merge } from 'lodash'; | ||
3 | import WorkspacesStore from './store'; | 2 | import WorkspacesStore from './store'; |
4 | import api from './api'; | 3 | import api from './api'; |
4 | import { state, resetState } from './state'; | ||
5 | 5 | ||
6 | const debug = require('debug')('Franz:feature:workspaces'); | 6 | const debug = require('debug')('Franz:feature:workspaces'); |
7 | 7 | ||
8 | let store = null; | 8 | let store = null; |
9 | const defaultState = { workspaces: [] }; | ||
10 | |||
11 | export const state = observable(defaultState); | ||
12 | 9 | ||
13 | export default function initWorkspaces(stores, actions) { | 10 | export 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 @@ | |||
1 | import { observable } from 'mobx'; | ||
2 | |||
3 | const defaultState = { | ||
4 | isLoading: false, | ||
5 | workspaces: [], | ||
6 | }; | ||
7 | |||
8 | export const state = observable(defaultState); | ||
9 | |||
10 | export 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 @@ | |||
1 | import { observable, reaction } from 'mobx'; | 1 | import { observable, reaction } from 'mobx'; |
2 | import Store from '../../stores/lib/Store'; | 2 | import Store from '../../stores/lib/Store'; |
3 | import CachedRequest from '../../stores/lib/CachedRequest'; | 3 | import CachedRequest from '../../stores/lib/CachedRequest'; |
4 | import Workspace from '../../models/Workspace'; | ||
4 | 5 | ||
5 | const debug = require('debug')('Franz:feature:workspaces'); | 6 | const 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 | } |