UNPKG

core-resource-app-test

Version:

App that contains assets and scripts for the core apps

111 lines (97 loc) 3.13 kB
import React, { PropTypes, createClass } from 'react'; import Translate from '../i18n/Translate.mixin'; import Toggle from 'material-ui/Toggle/Toggle'; import ClearFix from 'material-ui/internal/ClearFix'; import { config } from 'd2/lib/d2'; config.i18n.strings.add('can_view'); config.i18n.strings.add('can_edit'); export default createClass({ propTypes: { accessMask: PropTypes.oneOf([ '--------', 'r-------', 'rw------', ]).isRequired, onChange: PropTypes.func.isRequired, name: PropTypes.string.isRequired, label: PropTypes.string.isRequired, style: PropTypes.object, disabled: PropTypes.bool, }, mixins: [Translate], getDefaultProps() { return { name: `${Date.now()}`, // TODO: Not strictly unique, but perhaps good enough. accessMask: '--------', }; }, getInitialState() { return { view: this.hasView(), edit: this.hasEdit(), }; }, onChange() { const viewChar = (this.state.view || this.state.edit) ? 'r' : '-'; const editChar = this.state.edit ? 'w' : '-'; const accessMask = `${viewChar}${editChar}------`; if (this.props.onChange) { this.props.onChange(accessMask); } }, render() { const style = Object.assign({ marginTop: '.5rem', paddingTop: '.5rem', borderTop: '1px solid #CCC', }, this.props.style); return ( <div style={style} classnName="sharing--access-mask-switches"> <div>{this.props.label}</div> <ClearFix> <Toggle style={{ width: '40%', float: 'left', }} ref="toggleView" name={`${this.props.name}View`} label={this.getTranslation('can_view')} checked={this.hasView()} onToggle={this.setView} disabled={this.props.disabled || this.hasEdit()} /> <Toggle style={{ width: '40%', float: 'right', }} ref="toggleEdit" name={`${this.props.name}Edit`} label={this.getTranslation('can_edit')} checked={this.hasEdit()} onToggle={this.setEdit} disabled={this.props.disabled} /> </ClearFix> </div> ); }, hasView() { return /^r/.test(this.props.accessMask); }, setView() { this.setState({ view: !this.state.view, }, () => this.onChange()); }, hasEdit() { return /^rw/.test(this.props.accessMask); }, setEdit() { this.setState({ view: true, edit: !this.state.edit, }, () => this.onChange()); }, });