From b3afb9f45d47ebc352b28eb106b22fffc2f17707 Mon Sep 17 00:00:00 2001 From: Dominik Guzei Date: Sun, 7 Apr 2019 19:50:40 +0200 Subject: render workspace service list like services + toggle --- src/components/ui/ServiceIcon.js | 67 ++++++++++++++++++++++ .../workspaces/components/EditWorkspaceForm.js | 4 +- .../workspaces/components/ServiceListItem.js | 48 ---------------- .../workspaces/components/WorkspaceItem.js | 6 +- .../components/WorkspaceServiceListItem.js | 50 ++++++++++++++++ 5 files changed, 122 insertions(+), 53 deletions(-) create mode 100644 src/components/ui/ServiceIcon.js delete mode 100644 src/features/workspaces/components/ServiceListItem.js create mode 100644 src/features/workspaces/components/WorkspaceServiceListItem.js (limited to 'src') diff --git a/src/components/ui/ServiceIcon.js b/src/components/ui/ServiceIcon.js new file mode 100644 index 000000000..0b9155a4e --- /dev/null +++ b/src/components/ui/ServiceIcon.js @@ -0,0 +1,67 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import { observer } from 'mobx-react'; +import injectSheet from 'react-jss'; +import classnames from 'classnames'; + +import ServiceModel from '../../models/Service'; + +const styles = theme => ({ + root: { + height: 'auto', + }, + icon: { + width: theme.serviceIcon.width, + }, + isCustomIcon: { + width: theme.serviceIcon.isCustom.width, + border: theme.serviceIcon.isCustom.border, + borderRadius: theme.serviceIcon.isCustom.borderRadius, + }, + isDisabled: { + filter: 'grayscale(100%)', + opacity: '.5', + }, +}); + +@injectSheet(styles) @observer +class ServiceIcon extends Component { + static propTypes = { + classes: PropTypes.object.isRequired, + service: PropTypes.instanceOf(ServiceModel).isRequired, + className: PropTypes.string, + }; + + static defaultProps = { + className: '', + }; + + render() { + const { + classes, + className, + service, + } = this.props; + + return ( +
+ +
+ ); + } +} + +export default ServiceIcon; diff --git a/src/features/workspaces/components/EditWorkspaceForm.js b/src/features/workspaces/components/EditWorkspaceForm.js index e4bf44248..bba4485ff 100644 --- a/src/features/workspaces/components/EditWorkspaceForm.js +++ b/src/features/workspaces/components/EditWorkspaceForm.js @@ -10,7 +10,7 @@ import Workspace from '../models/Workspace'; import Service from '../../../models/Service'; import Form from '../../../lib/Form'; import { required } from '../../../helpers/validation-helpers'; -import ServiceListItem from './ServiceListItem'; +import WorkspaceServiceListItem from './WorkspaceServiceListItem'; import Request from '../../../stores/lib/Request'; import { gaEvent } from '../../../lib/analytics'; import { GA_CATEGORY_WORKSPACES } from '../index'; @@ -151,7 +151,7 @@ class EditWorkspaceForm extends Component {

{intl.formatMessage(messages.servicesInWorkspaceHeadline)}

{services.map(s => ( - ({ - service: { - height: 'auto', - display: 'flex', - }, - name: { - marginTop: '4px', - }, -}); - -@injectSheet(styles) @observer -class ServiceListItem extends Component { - static propTypes = { - classes: PropTypes.object.isRequired, - isInWorkspace: PropTypes.bool.isRequired, - onToggle: PropTypes.func.isRequired, - service: PropTypes.instanceOf(Service).isRequired, - }; - - render() { - const { - classes, - isInWorkspace, - onToggle, - service, - } = this.props; - - return ( -
- -
- ); - } -} - -export default ServiceListItem; diff --git a/src/features/workspaces/components/WorkspaceItem.js b/src/features/workspaces/components/WorkspaceItem.js index a950a981a..cc4b1a3ba 100644 --- a/src/features/workspaces/components/WorkspaceItem.js +++ b/src/features/workspaces/components/WorkspaceItem.js @@ -8,10 +8,10 @@ import Workspace from '../models/Workspace'; const styles = theme => ({ row: { - height: 57, - borderBottom: `1px solid ${theme.workspaceSettings.listItemBorderColor}`, + height: theme.workspaces.settings.listItems.height, + borderBottom: `1px solid ${theme.workspaces.settings.listItems.borderColor}`, '&:hover': { - background: theme.workspaceSettings.listItemHoverBgColor, + background: theme.workspaces.settings.listItems.hoverBgColor, }, }, columnName: {}, diff --git a/src/features/workspaces/components/WorkspaceServiceListItem.js b/src/features/workspaces/components/WorkspaceServiceListItem.js new file mode 100644 index 000000000..7b516d056 --- /dev/null +++ b/src/features/workspaces/components/WorkspaceServiceListItem.js @@ -0,0 +1,50 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import { observer } from 'mobx-react'; +import injectSheet from 'react-jss'; +import { Toggle } from '@meetfranz/forms'; + +import Service from '../../../models/Service'; +import ServiceIcon from '../../../components/ui/ServiceIcon'; + +const styles = theme => ({ + service: { + height: theme.workspaceSettings.listItemHeight, + display: 'flex', + }, + name: { + marginTop: '4px', + }, +}); + +@injectSheet(styles) @observer +class ServiceListItem extends Component { + static propTypes = { + classes: PropTypes.object.isRequired, + isInWorkspace: PropTypes.bool.isRequired, + onToggle: PropTypes.func.isRequired, + service: PropTypes.instanceOf(Service).isRequired, + }; + + render() { + const { + classes, + isInWorkspace, + onToggle, + service, + } = this.props; + + return ( +
+ + +
+ ); + } +} + +export default ServiceListItem; -- cgit v1.2.3-54-g00ecf