import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; import { observer, PropTypes as MobxPropTypes, inject } from 'mobx-react'; import { defineMessages, intlShape } from 'react-intl'; import injectSheet from 'react-jss'; import { Infobox } from '@meetfranz/ui'; import Loader from '../../../components/ui/Loader'; import WorkspaceItem from './WorkspaceItem'; import CreateWorkspaceForm from './CreateWorkspaceForm'; import Request from '../../../stores/lib/Request'; import Appear from '../../../components/ui/effects/Appear'; import { workspaceStore } from '../index'; import PremiumFeatureContainer from '../../../components/ui/PremiumFeatureContainer'; import UIStore from '../../../stores/UIStore'; import ActivateTrialButton from '../../../components/ui/ActivateTrialButton'; const messages = defineMessages({ headline: { id: 'settings.workspaces.headline', defaultMessage: '!!!Your workspaces', }, noServicesAdded: { id: 'settings.workspaces.noWorkspacesAdded', defaultMessage: '!!!You haven\'t added any workspaces yet.', }, workspacesRequestFailed: { id: 'settings.workspaces.workspacesRequestFailed', defaultMessage: '!!!Could not load your workspaces', }, tryReloadWorkspaces: { id: 'settings.workspaces.tryReloadWorkspaces', defaultMessage: '!!!Try again', }, updatedInfo: { id: 'settings.workspaces.updatedInfo', defaultMessage: '!!!Your changes have been saved', }, deletedInfo: { id: 'settings.workspaces.deletedInfo', defaultMessage: '!!!Workspace has been deleted', }, workspaceFeatureInfo: { id: 'settings.workspaces.workspaceFeatureInfo', defaultMessage: '!!!Info about workspace feature', }, workspaceFeatureHeadline: { id: 'settings.workspaces.workspaceFeatureHeadline', defaultMessage: '!!!Less is More: Introducing Franz Workspaces', }, }); const styles = theme => ({ table: { width: '100%', '& td': { padding: '10px', }, }, createForm: { height: 'auto', }, appear: { height: 'auto', }, premiumAnnouncement: { padding: 20, // backgroundColor: '#3498db', marginLeft: -20, marginBottom: 40, paddingBottom: 40, height: 'auto', display: 'flex', borderBottom: [1, 'solid', theme.inputBackground], }, teaserImage: { width: 200, height: '100%', float: 'left', margin: [-8, 0, 0, -20], }, upgradeCTA: { marginTop: 20, }, }); @inject('stores') @injectSheet(styles) @observer class WorkspacesDashboard extends Component { static propTypes = { classes: PropTypes.object.isRequired, getUserWorkspacesRequest: PropTypes.instanceOf(Request).isRequired, createWorkspaceRequest: PropTypes.instanceOf(Request).isRequired, deleteWorkspaceRequest: PropTypes.instanceOf(Request).isRequired, updateWorkspaceRequest: PropTypes.instanceOf(Request).isRequired, onCreateWorkspaceSubmit: PropTypes.func.isRequired, onWorkspaceClick: PropTypes.func.isRequired, workspaces: MobxPropTypes.arrayOrObservableArray.isRequired, }; static contextTypes = { intl: intlShape, }; render() { const { classes, getUserWorkspacesRequest, createWorkspaceRequest, deleteWorkspaceRequest, updateWorkspaceRequest, onCreateWorkspaceSubmit, onWorkspaceClick, workspaces, } = this.props; const { intl } = this.context; return (

{intl.formatMessage(messages.headline)}

{/* ===== Workspace updated info ===== */} {updateWorkspaceRequest.wasExecuted && updateWorkspaceRequest.result && ( {intl.formatMessage(messages.updatedInfo)} )} {/* ===== Workspace deleted info ===== */} {deleteWorkspaceRequest.wasExecuted && deleteWorkspaceRequest.result && ( {intl.formatMessage(messages.deletedInfo)} )} {workspaceStore.isPremiumUpgradeRequired && (

{intl.formatMessage(messages.workspaceFeatureHeadline)}

{intl.formatMessage(messages.workspaceFeatureInfo)}

)} workspaceStore.isPremiumUpgradeRequired} gaEventInfo={{ category: 'User', event: 'upgrade', label: 'workspaces' }} > {/* ===== Create workspace form ===== */}
{getUserWorkspacesRequest.isExecuting ? ( ) : ( {/* ===== Workspace could not be loaded error ===== */} {getUserWorkspacesRequest.error ? ( {intl.formatMessage(messages.workspacesRequestFailed)} ) : ( {workspaces.length === 0 ? (
{/* ===== Workspaces empty state ===== */}

{intl.formatMessage(messages.noServicesAdded)}

) : ( {/* ===== Workspaces list ===== */} {workspaces.map(workspace => ( onWorkspaceClick(w)} /> ))}
)}
)}
)}
); } } export default WorkspacesDashboard; WorkspacesDashboard.wrappedComponent.propTypes = { stores: PropTypes.shape({ ui: PropTypes.instanceOf(UIStore).isRequired, }).isRequired, };