aboutsummaryrefslogtreecommitdiffstats
path: root/src/features/workspaces/components/WorkspacesDashboard.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/features/workspaces/components/WorkspacesDashboard.js')
-rw-r--r--src/features/workspaces/components/WorkspacesDashboard.js167
1 files changed, 86 insertions, 81 deletions
diff --git a/src/features/workspaces/components/WorkspacesDashboard.js b/src/features/workspaces/components/WorkspacesDashboard.js
index 059a681de..70e213912 100644
--- a/src/features/workspaces/components/WorkspacesDashboard.js
+++ b/src/features/workspaces/components/WorkspacesDashboard.js
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
3import { observer, PropTypes as MobxPropTypes, inject } from 'mobx-react'; 3import { observer, PropTypes as MobxPropTypes, inject } from 'mobx-react';
4import { defineMessages, intlShape } from 'react-intl'; 4import { defineMessages, intlShape } from 'react-intl';
5import injectSheet from 'react-jss'; 5import injectSheet from 'react-jss';
6import { Infobox } from '@meetfranz/ui'; 6import { Infobox, Badge } from '@meetfranz/ui';
7 7
8import Loader from '../../../components/ui/Loader'; 8import Loader from '../../../components/ui/Loader';
9import WorkspaceItem from './WorkspaceItem'; 9import WorkspaceItem from './WorkspaceItem';
@@ -11,9 +11,9 @@ import CreateWorkspaceForm from './CreateWorkspaceForm';
11import Request from '../../../stores/lib/Request'; 11import Request from '../../../stores/lib/Request';
12import Appear from '../../../components/ui/effects/Appear'; 12import Appear from '../../../components/ui/effects/Appear';
13import { workspaceStore } from '../index'; 13import { workspaceStore } from '../index';
14import PremiumFeatureContainer from '../../../components/ui/PremiumFeatureContainer';
15import UIStore from '../../../stores/UIStore'; 14import UIStore from '../../../stores/UIStore';
16import ActivateTrialButton from '../../../components/ui/ActivateTrialButton'; 15import globalMessages from '../../../i18n/globalMessages';
16import UpgradeButton from '../../../components/ui/UpgradeButton';
17 17
18const messages = defineMessages({ 18const messages = defineMessages({
19 headline: { 19 headline: {
@@ -50,7 +50,7 @@ const messages = defineMessages({
50 }, 50 },
51}); 51});
52 52
53const styles = theme => ({ 53const styles = () => ({
54 table: { 54 table: {
55 width: '100%', 55 width: '100%',
56 '& td': { 56 '& td': {
@@ -64,23 +64,24 @@ const styles = theme => ({
64 height: 'auto', 64 height: 'auto',
65 }, 65 },
66 premiumAnnouncement: { 66 premiumAnnouncement: {
67 padding: 20,
68 // backgroundColor: '#3498db',
69 marginLeft: -20,
70 marginBottom: 40,
71 paddingBottom: 40,
72 height: 'auto', 67 height: 'auto',
68 },
69 premiumAnnouncementContainer: {
73 display: 'flex', 70 display: 'flex',
74 borderBottom: [1, 'solid', theme.inputBackground], 71 },
72 announcementHeadline: {
73 marginBottom: 0,
75 }, 74 },
76 teaserImage: { 75 teaserImage: {
77 width: 200, 76 width: 250,
78 height: '100%', 77 margin: [-8, 0, 0, 20],
79 float: 'left', 78 alignSelf: 'center',
80 margin: [-8, 0, 0, -20],
81 }, 79 },
82 upgradeCTA: { 80 upgradeCTA: {
83 marginTop: 20, 81 margin: [40, 'auto'],
82 },
83 proRequired: {
84 margin: [10, 0, 40],
84 }, 85 },
85}); 86});
86 87
@@ -152,76 +153,80 @@ class WorkspacesDashboard extends Component {
152 153
153 {workspaceStore.isPremiumUpgradeRequired && ( 154 {workspaceStore.isPremiumUpgradeRequired && (
154 <div className={classes.premiumAnnouncement}> 155 <div className={classes.premiumAnnouncement}>
155 <img src={`./assets/images/workspaces/teaser_${this.props.stores.ui.isDarkThemeActive ? 'dark' : 'light'}.png`} className={classes.teaserImage} alt="" /> 156
156 <div> 157 <h1 className={classes.announcementHeadline}>{intl.formatMessage(messages.workspaceFeatureHeadline)}</h1>
157 <h2>{intl.formatMessage(messages.workspaceFeatureHeadline)}</h2> 158 <Badge className={classes.proRequired}>{intl.formatMessage(globalMessages.proRequired)}</Badge>
158 <p>{intl.formatMessage(messages.workspaceFeatureInfo)}</p> 159 <div className={classes.premiumAnnouncementContainer}>
159 <ActivateTrialButton 160 <div className={classes.premiumAnnouncementContent}>
160 className={classes.upgradeCTA} 161 <p>{intl.formatMessage(messages.workspaceFeatureInfo)}</p>
161 gaEventInfo={{ category: 'Workspaces', event: 'upgrade' }} 162 <UpgradeButton
162 short 163 className={classes.upgradeCTA}
163 /> 164 gaEventInfo={{ category: 'Workspaces', event: 'upgrade' }}
165 short
166 requiresPro
167 />
168 </div>
169 <img src={`https://cdn.franzinfra.com/announcements/assets/workspaces_${this.props.stores.ui.isDarkThemeActive ? 'dark' : 'light'}.png`} className={classes.teaserImage} alt="" />
164 </div> 170 </div>
165 </div> 171 </div>
166 )} 172 )}
167 173
168 <PremiumFeatureContainer 174 {!workspaceStore.isPremiumUpgradeRequired && (
169 condition={() => workspaceStore.isPremiumUpgradeRequired} 175 <>
170 gaEventInfo={{ category: 'User', event: 'upgrade', label: 'workspaces' }} 176 {/* ===== Create workspace form ===== */}
171 > 177 <div className={classes.createForm}>
172 {/* ===== Create workspace form ===== */} 178 <CreateWorkspaceForm
173 <div className={classes.createForm}> 179 isSubmitting={createWorkspaceRequest.isExecuting}
174 <CreateWorkspaceForm 180 onSubmit={onCreateWorkspaceSubmit}
175 isSubmitting={createWorkspaceRequest.isExecuting} 181 />
176 onSubmit={onCreateWorkspaceSubmit} 182 </div>
177 /> 183 {getUserWorkspacesRequest.isExecuting ? (
178 </div> 184 <Loader />
179 {getUserWorkspacesRequest.isExecuting ? ( 185 ) : (
180 <Loader /> 186 <Fragment>
181 ) : ( 187 {/* ===== Workspace could not be loaded error ===== */}
182 <Fragment> 188 {getUserWorkspacesRequest.error ? (
183 {/* ===== Workspace could not be loaded error ===== */} 189 <Infobox
184 {getUserWorkspacesRequest.error ? ( 190 icon="alert"
185 <Infobox 191 type="danger"
186 icon="alert" 192 ctaLabel={intl.formatMessage(messages.tryReloadWorkspaces)}
187 type="danger" 193 ctaLoading={getUserWorkspacesRequest.isExecuting}
188 ctaLabel={intl.formatMessage(messages.tryReloadWorkspaces)} 194 ctaOnClick={getUserWorkspacesRequest.retry}
189 ctaLoading={getUserWorkspacesRequest.isExecuting} 195 >
190 ctaOnClick={getUserWorkspacesRequest.retry} 196 {intl.formatMessage(messages.workspacesRequestFailed)}
191 > 197 </Infobox>
192 {intl.formatMessage(messages.workspacesRequestFailed)} 198 ) : (
193 </Infobox> 199 <Fragment>
194 ) : ( 200 {workspaces.length === 0 ? (
195 <Fragment> 201 <div className="align-middle settings__empty-state">
196 {workspaces.length === 0 ? ( 202 {/* ===== Workspaces empty state ===== */}
197 <div className="align-middle settings__empty-state"> 203 <p className="settings__empty-text">
198 {/* ===== Workspaces empty state ===== */} 204 <span className="emoji">
199 <p className="settings__empty-text"> 205 <img src="./assets/images/emoji/sad.png" alt="" />
200 <span className="emoji"> 206 </span>
201 <img src="./assets/images/emoji/sad.png" alt="" /> 207 {intl.formatMessage(messages.noServicesAdded)}
202 </span> 208 </p>
203 {intl.formatMessage(messages.noServicesAdded)} 209 </div>
204 </p> 210 ) : (
205 </div> 211 <table className={classes.table}>
206 ) : ( 212 {/* ===== Workspaces list ===== */}
207 <table className={classes.table}> 213 <tbody>
208 {/* ===== Workspaces list ===== */} 214 {workspaces.map(workspace => (
209 <tbody> 215 <WorkspaceItem
210 {workspaces.map(workspace => ( 216 key={workspace.id}
211 <WorkspaceItem 217 workspace={workspace}
212 key={workspace.id} 218 onItemClick={w => onWorkspaceClick(w)}
213 workspace={workspace} 219 />
214 onItemClick={w => onWorkspaceClick(w)} 220 ))}
215 /> 221 </tbody>
216 ))} 222 </table>
217 </tbody> 223 )}
218 </table> 224 </Fragment>
219 )} 225 )}
220 </Fragment> 226 </Fragment>
221 )} 227 )}
222 </Fragment> 228 </>
223 )} 229 )}
224 </PremiumFeatureContainer>
225 </div> 230 </div>
226 </div> 231 </div>
227 ); 232 );