aboutsummaryrefslogtreecommitdiffstats
path: root/src/features/workspaces/components
diff options
context:
space:
mode:
authorLibravatar Dominik Guzei <dominik.guzei@gmail.com>2019-03-21 15:04:31 +0100
committerLibravatar Dominik Guzei <dominik.guzei@gmail.com>2019-03-21 15:04:31 +0100
commita9734f24bf15ab322c8244fbb8e86c37caf30f4a (patch)
treeace7e455e817df831bf571aa4851a99b0e37e145 /src/features/workspaces/components
parentadd workspace drawer toggle menu item and shortcut (diff)
downloadferdium-app-a9734f24bf15ab322c8244fbb8e86c37caf30f4a.tar.gz
ferdium-app-a9734f24bf15ab322c8244fbb8e86c37caf30f4a.tar.zst
ferdium-app-a9734f24bf15ab322c8244fbb8e86c37caf30f4a.zip
improve workspace switching ux
Diffstat (limited to 'src/features/workspaces/components')
-rw-r--r--src/features/workspaces/components/WorkspaceDrawer.js7
-rw-r--r--src/features/workspaces/components/WorkspaceSwitchingIndicator.js56
-rw-r--r--src/features/workspaces/components/WorkspacesDashboard.js4
3 files changed, 62 insertions, 5 deletions
diff --git a/src/features/workspaces/components/WorkspaceDrawer.js b/src/features/workspaces/components/WorkspaceDrawer.js
index 27bf08361..c9c4d3bc9 100644
--- a/src/features/workspaces/components/WorkspaceDrawer.js
+++ b/src/features/workspaces/components/WorkspaceDrawer.js
@@ -54,7 +54,8 @@ class WorkspaceDrawer extends Component {
54 getServicesForWorkspace, 54 getServicesForWorkspace,
55 } = this.props; 55 } = this.props;
56 const { intl } = this.context; 56 const { intl } = this.context;
57 57 const { activeWorkspace, isSwitchingWorkspace, nextWorkspace } = workspacesState;
58 const actualWorkspace = isSwitchingWorkspace ? nextWorkspace : activeWorkspace;
58 return ( 59 return (
59 <div className={classes.drawer}> 60 <div className={classes.drawer}>
60 <H1 className={classes.headline}> 61 <H1 className={classes.headline}>
@@ -74,13 +75,13 @@ class WorkspaceDrawer extends Component {
74 name={intl.formatMessage(messages.allServices)} 75 name={intl.formatMessage(messages.allServices)}
75 onClick={() => workspaceActions.deactivate()} 76 onClick={() => workspaceActions.deactivate()}
76 services={getServicesForWorkspace(null)} 77 services={getServicesForWorkspace(null)}
77 isActive={workspacesState.activeWorkspace == null} 78 isActive={actualWorkspace == null}
78 /> 79 />
79 {workspacesState.workspaces.map(workspace => ( 80 {workspacesState.workspaces.map(workspace => (
80 <WorkspaceDrawerItem 81 <WorkspaceDrawerItem
81 key={workspace.id} 82 key={workspace.id}
82 name={workspace.name} 83 name={workspace.name}
83 isActive={workspacesState.activeWorkspace === workspace} 84 isActive={actualWorkspace === workspace}
84 onClick={() => workspaceActions.activate({ workspace })} 85 onClick={() => workspaceActions.activate({ workspace })}
85 services={getServicesForWorkspace(workspace)} 86 services={getServicesForWorkspace(workspace)}
86 /> 87 />
diff --git a/src/features/workspaces/components/WorkspaceSwitchingIndicator.js b/src/features/workspaces/components/WorkspaceSwitchingIndicator.js
new file mode 100644
index 000000000..4a279afaf
--- /dev/null
+++ b/src/features/workspaces/components/WorkspaceSwitchingIndicator.js
@@ -0,0 +1,56 @@
1import React, { Component } from 'react';
2import PropTypes from 'prop-types';
3import { observer } from 'mobx-react';
4import injectSheet from 'react-jss';
5import { workspacesState } from '../state';
6import LoaderComponent from '../../../components/ui/Loader';
7
8const styles = () => ({
9 wrapper: {
10 display: 'flex',
11 alignItems: 'flex-start',
12 position: 'absolute',
13 width: '100%',
14 marginTop: '20px',
15 },
16 component: {
17 background: 'rgba(20, 20, 20, 0.4)',
18 padding: 20,
19 width: 'auto',
20 height: 'auto',
21 margin: [0, 'auto'],
22 borderRadius: 6,
23 alignItems: 'flex-start',
24 zIndex: 200,
25 },
26 name: {
27 fontSize: 35,
28 marginBottom: '10px',
29 },
30});
31
32@injectSheet(styles) @observer
33class WorkspaceSwitchingIndicator extends Component {
34 static propTypes = {
35 classes: PropTypes.object.isRequired,
36 };
37
38 render() {
39 const { classes } = this.props;
40 const { isSwitchingWorkspace, nextWorkspace } = workspacesState;
41 if (!isSwitchingWorkspace) return null;
42 const nextWorkspaceName = nextWorkspace ? nextWorkspace.name : 'All services';
43 return (
44 <div className={classes.wrapper}>
45 <div className={classes.component}>
46 <h1 className={classes.name}>
47 {`Switching to ${nextWorkspaceName}`}
48 </h1>
49 <LoaderComponent />
50 </div>
51 </div>
52 );
53 }
54}
55
56export default WorkspaceSwitchingIndicator;
diff --git a/src/features/workspaces/components/WorkspacesDashboard.js b/src/features/workspaces/components/WorkspacesDashboard.js
index 917807302..df35b3590 100644
--- a/src/features/workspaces/components/WorkspacesDashboard.js
+++ b/src/features/workspaces/components/WorkspacesDashboard.js
@@ -30,7 +30,7 @@ const styles = () => ({
30class WorkspacesDashboard extends Component { 30class WorkspacesDashboard extends Component {
31 static propTypes = { 31 static propTypes = {
32 classes: PropTypes.object.isRequired, 32 classes: PropTypes.object.isRequired,
33 isLoading: PropTypes.bool.isRequired, 33 isLoadingWorkspaces: PropTypes.bool.isRequired,
34 onCreateWorkspaceSubmit: PropTypes.func.isRequired, 34 onCreateWorkspaceSubmit: PropTypes.func.isRequired,
35 onWorkspaceClick: PropTypes.func.isRequired, 35 onWorkspaceClick: PropTypes.func.isRequired,
36 workspaces: MobxPropTypes.arrayOrObservableArray.isRequired, 36 workspaces: MobxPropTypes.arrayOrObservableArray.isRequired,
@@ -60,7 +60,7 @@ class WorkspacesDashboard extends Component {
60 <div className={classes.createForm}> 60 <div className={classes.createForm}>
61 <CreateWorkspaceForm onSubmit={onCreateWorkspaceSubmit} /> 61 <CreateWorkspaceForm onSubmit={onCreateWorkspaceSubmit} />
62 </div> 62 </div>
63 {isLoading ? ( 63 {isLoadingWorkspaces ? (
64 <Loader /> 64 <Loader />
65 ) : ( 65 ) : (
66 <table className="workspace-table"> 66 <table className="workspace-table">