From 32e6a605b0ee8de57d9136812c5f92ef9a81e15a Mon Sep 17 00:00:00 2001 From: pkupczyk <piotr.kupczyk@id.ethz.ch> Date: Mon, 22 Jun 2020 19:52:03 +0200 Subject: [PATCH] NG_UI : SSDM-7583 : ObjectType form - introduce separate 'view' and 'edit' modes --- .../common/form/AutocompleterField.jsx | 18 +++++++++ .../components/common/form/CheckboxField.jsx | 17 ++++++-- .../components/common/form/FormFieldView.jsx | 37 +++++++++++++++++ .../js/components/common/form/SelectField.jsx | 19 +++++++++ .../js/components/common/form/TextField.jsx | 18 +++++++++ .../components/common/theme/ThemeProvider.jsx | 6 ++- .../src/js/components/types/form/TypeForm.jsx | 8 +++- .../components/types/form/TypeFormButtons.jsx | 36 ++++++++++++++++- .../types/form/TypeFormController.js | 10 +++++ .../types/form/TypeFormControllerCancel.js | 13 ++++++ .../types/form/TypeFormControllerEdit.js | 13 ++++++ .../types/form/TypeFormControllerLoad.js | 1 + .../types/form/TypeFormParameters.jsx | 4 ++ .../types/form/TypeFormParametersProperty.jsx | 40 +++++++++++++------ .../types/form/TypeFormParametersSection.jsx | 5 ++- .../types/form/TypeFormParametersType.jsx | 39 ++++++++++++------ .../components/types/form/TypeFormPreview.jsx | 6 ++- .../types/form/TypeFormPreviewProperty.jsx | 9 ++++- .../types/form/TypeFormPreviewSection.jsx | 9 ++++- 19 files changed, 268 insertions(+), 40 deletions(-) create mode 100644 openbis_ng_ui/src/js/components/common/form/FormFieldView.jsx create mode 100644 openbis_ng_ui/src/js/components/types/form/TypeFormControllerCancel.js create mode 100644 openbis_ng_ui/src/js/components/types/form/TypeFormControllerEdit.js diff --git a/openbis_ng_ui/src/js/components/common/form/AutocompleterField.jsx b/openbis_ng_ui/src/js/components/common/form/AutocompleterField.jsx index 441f325c32e..d1409a98c49 100644 --- a/openbis_ng_ui/src/js/components/common/form/AutocompleterField.jsx +++ b/openbis_ng_ui/src/js/components/common/form/AutocompleterField.jsx @@ -6,6 +6,7 @@ import logger from '@src/js/common/logger.js' import FormFieldContainer from './FormFieldContainer.jsx' import FormFieldLabel from './FormFieldLabel.jsx' +import FormFieldView from './FormFieldView.jsx' const styles = theme => ({ paper: { @@ -61,6 +62,23 @@ class AutocompleterFormField extends React.PureComponent { render() { logger.log(logger.DEBUG, 'AutocompleterFormField.render') + const { mode = 'edit' } = this.props + + if (mode === 'view') { + return this.renderView() + } else if (mode === 'edit') { + return this.renderEdit() + } else { + throw 'Unsupported mode: ' + mode + } + } + + renderView() { + const { label, value } = this.props + return <FormFieldView label={label} value={value} /> + } + + renderEdit() { const { name, options, diff --git a/openbis_ng_ui/src/js/components/common/form/CheckboxField.jsx b/openbis_ng_ui/src/js/components/common/form/CheckboxField.jsx index d88f68828c6..555a15c46b1 100644 --- a/openbis_ng_ui/src/js/components/common/form/CheckboxField.jsx +++ b/openbis_ng_ui/src/js/components/common/form/CheckboxField.jsx @@ -10,11 +10,15 @@ import FormFieldLabel from './FormFieldLabel.jsx' const styles = () => ({ container: { display: 'flex', - alignItems: 'center' + alignItems: 'center', + marginLeft: '-4px' }, label: { cursor: 'pointer' }, + labelDisabled: { + cursor: 'inherit' + }, checkbox: { padding: '2px', marginRight: '4px' @@ -73,11 +77,18 @@ class CheckboxFormField extends React.PureComponent { disabled, error, metadata, + mode = 'edit', styles, classes, onClick } = this.props + if (mode !== 'view' && mode !== 'edit') { + throw 'Unsupported mode: ' + mode + } + + const isDisabled = disabled || mode !== 'edit' + return ( <FormFieldContainer description={description} @@ -92,7 +103,7 @@ class CheckboxFormField extends React.PureComponent { action={action => (this.action = action)} value={name} checked={!!value} - disabled={disabled} + disabled={isDisabled} onChange={this.handleChange} onFocus={this.handleFocus} classes={{ root: classes.checkbox }} @@ -100,7 +111,7 @@ class CheckboxFormField extends React.PureComponent { /> <Typography component='label' - className={classes.label} + className={isDisabled ? classes.labelDisabled : classes.label} onClick={this.handleLabelClick} > <FormFieldLabel diff --git a/openbis_ng_ui/src/js/components/common/form/FormFieldView.jsx b/openbis_ng_ui/src/js/components/common/form/FormFieldView.jsx new file mode 100644 index 00000000000..7880f74ac39 --- /dev/null +++ b/openbis_ng_ui/src/js/components/common/form/FormFieldView.jsx @@ -0,0 +1,37 @@ +import React from 'react' +import { withStyles } from '@material-ui/core/styles' +import Typography from '@material-ui/core/Typography' + +const styles = theme => ({ + label: { + fontSize: theme.typography.label.fontSize, + color: theme.typography.label.color + }, + value: { + paddingBottom: theme.spacing(1) / 2, + borderBottomStyle: 'dotted', + borderBottomWidth: '1px', + borderBottomColor: theme.typography.label.color, + '&:after': { + content: '"\\00a0"' + } + } +}) + +class FormFieldView extends React.PureComponent { + render() { + const { label, value, classes } = this.props + return ( + <div> + <Typography variant='body2' className={classes.label}> + {label} + </Typography> + <Typography variant='body2' className={classes.value}> + {value ? value : ''} + </Typography> + </div> + ) + } +} + +export default withStyles(styles)(FormFieldView) diff --git a/openbis_ng_ui/src/js/components/common/form/SelectField.jsx b/openbis_ng_ui/src/js/components/common/form/SelectField.jsx index 3773366d5bd..d0710e77d32 100644 --- a/openbis_ng_ui/src/js/components/common/form/SelectField.jsx +++ b/openbis_ng_ui/src/js/components/common/form/SelectField.jsx @@ -6,6 +6,7 @@ import logger from '@src/js/common/logger.js' import FormFieldContainer from './FormFieldContainer.jsx' import FormFieldLabel from './FormFieldLabel.jsx' +import FormFieldView from './FormFieldView.jsx' const styles = theme => ({ textField: { @@ -54,6 +55,24 @@ class SelectFormField extends React.PureComponent { render() { logger.log(logger.DEBUG, 'SelectFormField.render') + const { mode = 'edit' } = this.props + + if (mode === 'view') { + return this.renderView() + } else if (mode === 'edit') { + return this.renderEdit() + } else { + throw 'Unsupported mode: ' + mode + } + } + + renderView() { + const { label, value, options } = this.props + const option = options.find(option => option.value === value) + return <FormFieldView label={label} value={option ? option.label : null} /> + } + + renderEdit() { const { reference, name, diff --git a/openbis_ng_ui/src/js/components/common/form/TextField.jsx b/openbis_ng_ui/src/js/components/common/form/TextField.jsx index 7b4cffc089b..ff2c92e6a0e 100644 --- a/openbis_ng_ui/src/js/components/common/form/TextField.jsx +++ b/openbis_ng_ui/src/js/components/common/form/TextField.jsx @@ -6,6 +6,7 @@ import logger from '@src/js/common/logger.js' import FormFieldContainer from './FormFieldContainer.jsx' import FormFieldLabel from './FormFieldLabel.jsx' +import FormFieldView from './FormFieldView.jsx' const styles = theme => ({ startAdornment: { @@ -26,6 +27,23 @@ class TextFormField extends React.PureComponent { render() { logger.log(logger.DEBUG, 'TextFormField.render') + const { mode = 'edit' } = this.props + + if (mode === 'view') { + return this.renderView() + } else if (mode === 'edit') { + return this.renderEdit() + } else { + throw 'Unsupported mode: ' + mode + } + } + + renderView() { + const { label, value } = this.props + return <FormFieldView label={label} value={value} /> + } + + renderEdit() { const { reference, id, diff --git a/openbis_ng_ui/src/js/components/common/theme/ThemeProvider.jsx b/openbis_ng_ui/src/js/components/common/theme/ThemeProvider.jsx index 37c13343d06..cdd4015b050 100644 --- a/openbis_ng_ui/src/js/components/common/theme/ThemeProvider.jsx +++ b/openbis_ng_ui/src/js/components/common/theme/ThemeProvider.jsx @@ -5,7 +5,11 @@ import lightBlue from '@material-ui/core/colors/lightBlue' const theme = createMuiTheme({ typography: { - useNextVariants: true + useNextVariants: true, + label: { + fontSize: '0.7em', + color: '#0000008a' + } }, palette: { grey: { diff --git a/openbis_ng_ui/src/js/components/types/form/TypeForm.jsx b/openbis_ng_ui/src/js/components/types/form/TypeForm.jsx index ba99c7ca8d8..27dd562c81d 100644 --- a/openbis_ng_ui/src/js/components/types/form/TypeForm.jsx +++ b/openbis_ng_ui/src/js/components/types/form/TypeForm.jsx @@ -96,7 +96,8 @@ class TypeForm extends React.PureComponent { sections, selection, removePropertyDialogOpen, - removeSectionDialogOpen + removeSectionDialogOpen, + mode } = this.state let { classes } = this.props @@ -111,6 +112,7 @@ class TypeForm extends React.PureComponent { properties={properties} sections={sections} selection={selection} + mode={mode} onOrderChange={controller.handleOrderChange} onSelectionChange={controller.handleSelectionChange} /> @@ -138,6 +140,7 @@ class TypeForm extends React.PureComponent { properties={properties} sections={sections} selection={selection} + mode={mode} onChange={controller.handleChange} onSelectionChange={controller.handleSelectionChange} onBlur={controller.handleBlur} @@ -150,8 +153,11 @@ class TypeForm extends React.PureComponent { onAddSection={controller.handleAddSection} onAddProperty={controller.handleAddProperty} onRemove={controller.handleRemove} + onEdit={controller.handleEdit} onSave={controller.handleSave} + onCancel={controller.handleCancel} selection={selection} + mode={mode} /> <TypeFormDialogRemoveSection open={removeSectionDialogOpen} diff --git a/openbis_ng_ui/src/js/components/types/form/TypeFormButtons.jsx b/openbis_ng_ui/src/js/components/types/form/TypeFormButtons.jsx index 5c8380e25fb..cd29075d160 100644 --- a/openbis_ng_ui/src/js/components/types/form/TypeFormButtons.jsx +++ b/openbis_ng_ui/src/js/components/types/form/TypeFormButtons.jsx @@ -26,12 +26,40 @@ class TypeFormButtons extends React.PureComponent { render() { logger.log(logger.DEBUG, 'TypeFormButtons.render') + const { mode } = this.props + + if (mode === 'view') { + return this.renderView() + } else if (mode === 'edit') { + return this.renderEdit() + } else { + throw 'Unsupported mode: ' + mode + } + } + + renderView() { + const { classes, onEdit } = this.props + + return ( + <Container className={classes.container}> + <Button + name='edit' + label='Edit' + styles={{ root: classes.button }} + onClick={onEdit} + /> + </Container> + ) + } + + renderEdit() { const { classes, onAddSection, onAddProperty, onRemove, - onSave + onSave, + onCancel } = this.props return ( @@ -63,6 +91,12 @@ class TypeFormButtons extends React.PureComponent { styles={{ root: classes.button }} onClick={onSave} /> + <Button + name='cancel' + label='Cancel' + styles={{ root: classes.button }} + onClick={onCancel} + /> </Container> ) } diff --git a/openbis_ng_ui/src/js/components/types/form/TypeFormController.js b/openbis_ng_ui/src/js/components/types/form/TypeFormController.js index d6c2e6cf994..c1bb6c49e73 100644 --- a/openbis_ng_ui/src/js/components/types/form/TypeFormController.js +++ b/openbis_ng_ui/src/js/components/types/form/TypeFormController.js @@ -1,6 +1,8 @@ import autoBind from 'auto-bind' import TypeFormControllerLoad from './TypeFormControllerLoad.js' import TypeFormControllerValidate from './TypeFormControllerValidate.js' +import TypeFormControllerEdit from './TypeFormControllerEdit.js' +import TypeFormControllerCancel from './TypeFormControllerCancel.js' import TypeFormControllerSave from './TypeFormControllerSave.js' import TypeFormControllerRemove from './TypeFormControllerRemove.js' import TypeFormControllerAddSection from './TypeFormControllerAddSection.js' @@ -64,6 +66,14 @@ export default class TypeFormController { new TypeFormControllerRemove(this).executeCancel() } + handleEdit() { + return new TypeFormControllerEdit(this).execute() + } + + handleCancel() { + return new TypeFormControllerCancel(this).execute() + } + handleSave() { return new TypeFormControllerSave(this).execute() } diff --git a/openbis_ng_ui/src/js/components/types/form/TypeFormControllerCancel.js b/openbis_ng_ui/src/js/components/types/form/TypeFormControllerCancel.js new file mode 100644 index 00000000000..edd22720071 --- /dev/null +++ b/openbis_ng_ui/src/js/components/types/form/TypeFormControllerCancel.js @@ -0,0 +1,13 @@ +export default class TypeFormControllerEdit { + constructor(controller) { + this.controller = controller + this.context = controller.context + } + + execute() { + this.context.setState(state => ({ + ...state, + mode: 'view' + })) + } +} diff --git a/openbis_ng_ui/src/js/components/types/form/TypeFormControllerEdit.js b/openbis_ng_ui/src/js/components/types/form/TypeFormControllerEdit.js new file mode 100644 index 00000000000..3d9bfab7049 --- /dev/null +++ b/openbis_ng_ui/src/js/components/types/form/TypeFormControllerEdit.js @@ -0,0 +1,13 @@ +export default class TypeFormControllerEdit { + constructor(controller) { + this.controller = controller + this.context = controller.context + } + + execute() { + this.context.setState(state => ({ + ...state, + mode: 'edit' + })) + } +} diff --git a/openbis_ng_ui/src/js/components/types/form/TypeFormControllerLoad.js b/openbis_ng_ui/src/js/components/types/form/TypeFormControllerLoad.js index 793e8223ea1..9e03e95ca8d 100644 --- a/openbis_ng_ui/src/js/components/types/form/TypeFormControllerLoad.js +++ b/openbis_ng_ui/src/js/components/types/form/TypeFormControllerLoad.js @@ -11,6 +11,7 @@ export default class TypeFormControllerLoad { async execute() { await this.context.setState({ + mode: 'view', loading: true, validate: false }) diff --git a/openbis_ng_ui/src/js/components/types/form/TypeFormParameters.jsx b/openbis_ng_ui/src/js/components/types/form/TypeFormParameters.jsx index 2265ef2a856..c1b23a944d7 100644 --- a/openbis_ng_ui/src/js/components/types/form/TypeFormParameters.jsx +++ b/openbis_ng_ui/src/js/components/types/form/TypeFormParameters.jsx @@ -22,6 +22,7 @@ class TypeFormParameters extends React.PureComponent { sections, properties, selection, + mode, onChange, onSelectionChange, onBlur @@ -33,6 +34,7 @@ class TypeFormParameters extends React.PureComponent { controller={controller} type={type} selection={selection} + mode={mode} onChange={onChange} onSelectionChange={onSelectionChange} onBlur={onBlur} @@ -40,6 +42,7 @@ class TypeFormParameters extends React.PureComponent { <TypeFormParametersSection sections={sections} selection={selection} + mode={mode} onChange={onChange} onSelectionChange={onSelectionChange} onBlur={onBlur} @@ -49,6 +52,7 @@ class TypeFormParameters extends React.PureComponent { type={type} properties={properties} selection={selection} + mode={mode} onChange={onChange} onSelectionChange={onSelectionChange} onBlur={onBlur} diff --git a/openbis_ng_ui/src/js/components/types/form/TypeFormParametersProperty.jsx b/openbis_ng_ui/src/js/components/types/form/TypeFormParametersProperty.jsx index 5b9a40d253e..f1c7cd8a36f 100644 --- a/openbis_ng_ui/src/js/components/types/form/TypeFormParametersProperty.jsx +++ b/openbis_ng_ui/src/js/components/types/form/TypeFormParametersProperty.jsx @@ -208,7 +208,7 @@ class TypeFormParametersProperty extends React.PureComponent { { label: 'Global', value: 'global' } ] - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> <SelectField @@ -219,6 +219,7 @@ class TypeFormParametersProperty extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} options={options} onChange={this.handleChange} onFocus={this.handleFocus} @@ -235,7 +236,7 @@ class TypeFormParametersProperty extends React.PureComponent { return null } - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> <TextField @@ -246,6 +247,7 @@ class TypeFormParametersProperty extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -261,7 +263,7 @@ class TypeFormParametersProperty extends React.PureComponent { return null } - const { classes, controller } = this.props + const { mode, classes, controller } = this.props if (property.scope.value === 'local') { return ( @@ -274,6 +276,7 @@ class TypeFormParametersProperty extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -298,6 +301,7 @@ class TypeFormParametersProperty extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -314,7 +318,7 @@ class TypeFormParametersProperty extends React.PureComponent { return null } - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> <TextField @@ -325,6 +329,7 @@ class TypeFormParametersProperty extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -347,7 +352,7 @@ class TypeFormParametersProperty extends React.PureComponent { } }) - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> <SelectField @@ -359,6 +364,7 @@ class TypeFormParametersProperty extends React.PureComponent { disabled={!enabled} value={value} options={options} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -374,7 +380,7 @@ class TypeFormParametersProperty extends React.PureComponent { return null } - const { classes, controller } = this.props + const { mode, classes, controller } = this.props const { vocabularies = [] } = controller.getDictionaries() let options = [] @@ -400,6 +406,7 @@ class TypeFormParametersProperty extends React.PureComponent { disabled={!enabled} value={value} options={options} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -415,7 +422,7 @@ class TypeFormParametersProperty extends React.PureComponent { return null } - const { classes, controller } = this.props + const { mode, classes, controller } = this.props const { materialTypes = [] } = controller.getDictionaries() let options = [] @@ -441,6 +448,7 @@ class TypeFormParametersProperty extends React.PureComponent { disabled={!enabled} value={value} options={options} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -456,7 +464,7 @@ class TypeFormParametersProperty extends React.PureComponent { return null } - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> @@ -468,6 +476,7 @@ class TypeFormParametersProperty extends React.PureComponent { disabled={!enabled} value={value} multiline={true} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -483,7 +492,7 @@ class TypeFormParametersProperty extends React.PureComponent { return null } - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> @@ -495,6 +504,7 @@ class TypeFormParametersProperty extends React.PureComponent { disabled={!enabled} value={value} multiline={true} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -510,7 +520,7 @@ class TypeFormParametersProperty extends React.PureComponent { return null } - const { classes, controller } = this.props + const { mode, classes, controller } = this.props const { dynamicPlugins = [] } = controller.getDictionaries() let options = [] @@ -535,6 +545,7 @@ class TypeFormParametersProperty extends React.PureComponent { disabled={!enabled} value={value} options={options} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -550,7 +561,7 @@ class TypeFormParametersProperty extends React.PureComponent { return null } - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> <CheckboxField @@ -560,6 +571,7 @@ class TypeFormParametersProperty extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -577,7 +589,7 @@ class TypeFormParametersProperty extends React.PureComponent { return null } - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> <TextField @@ -588,6 +600,7 @@ class TypeFormParametersProperty extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -603,7 +616,7 @@ class TypeFormParametersProperty extends React.PureComponent { return null } - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> <CheckboxField @@ -613,6 +626,7 @@ class TypeFormParametersProperty extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} diff --git a/openbis_ng_ui/src/js/components/types/form/TypeFormParametersSection.jsx b/openbis_ng_ui/src/js/components/types/form/TypeFormParametersSection.jsx index 00f889990fa..07348b69f56 100644 --- a/openbis_ng_ui/src/js/components/types/form/TypeFormParametersSection.jsx +++ b/openbis_ng_ui/src/js/components/types/form/TypeFormParametersSection.jsx @@ -38,7 +38,7 @@ class TypeFormParametersSection extends React.PureComponent { focus() { const section = this.getSection(this.props) - if (section) { + if (section && this.reference && this.reference.current) { this.reference.current.focus() } } @@ -87,7 +87,7 @@ class TypeFormParametersSection extends React.PureComponent { return null } - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> <TextField @@ -97,6 +97,7 @@ class TypeFormParametersSection extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} onChange={this.handleChange} onBlur={this.handleBlur} /> diff --git a/openbis_ng_ui/src/js/components/types/form/TypeFormParametersType.jsx b/openbis_ng_ui/src/js/components/types/form/TypeFormParametersType.jsx index fec37933406..e3313ed26f5 100644 --- a/openbis_ng_ui/src/js/components/types/form/TypeFormParametersType.jsx +++ b/openbis_ng_ui/src/js/components/types/form/TypeFormParametersType.jsx @@ -147,7 +147,7 @@ class TypeFormParametersType extends React.PureComponent { return null } - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> <TextField @@ -158,6 +158,7 @@ class TypeFormParametersType extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -173,7 +174,7 @@ class TypeFormParametersType extends React.PureComponent { return null } - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> <TextField @@ -183,6 +184,7 @@ class TypeFormParametersType extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -198,7 +200,7 @@ class TypeFormParametersType extends React.PureComponent { return null } - const { classes, controller } = this.props + const { mode, classes, controller } = this.props const { validationPlugins = [] } = controller.getDictionaries() let options = [] @@ -223,6 +225,7 @@ class TypeFormParametersType extends React.PureComponent { disabled={!enabled} value={value} options={options} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -238,7 +241,7 @@ class TypeFormParametersType extends React.PureComponent { return null } - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> <CheckboxField @@ -248,6 +251,7 @@ class TypeFormParametersType extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -263,7 +267,7 @@ class TypeFormParametersType extends React.PureComponent { return null } - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> <CheckboxField @@ -273,6 +277,7 @@ class TypeFormParametersType extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -288,7 +293,7 @@ class TypeFormParametersType extends React.PureComponent { return null } - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> <CheckboxField @@ -298,6 +303,7 @@ class TypeFormParametersType extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -313,7 +319,7 @@ class TypeFormParametersType extends React.PureComponent { return null } - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> <CheckboxField @@ -323,6 +329,7 @@ class TypeFormParametersType extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -338,7 +345,7 @@ class TypeFormParametersType extends React.PureComponent { return null } - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> <TextField @@ -349,6 +356,7 @@ class TypeFormParametersType extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -364,7 +372,7 @@ class TypeFormParametersType extends React.PureComponent { return null } - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> <CheckboxField @@ -374,6 +382,7 @@ class TypeFormParametersType extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -389,7 +398,7 @@ class TypeFormParametersType extends React.PureComponent { return null } - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> <CheckboxField @@ -399,6 +408,7 @@ class TypeFormParametersType extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -414,7 +424,7 @@ class TypeFormParametersType extends React.PureComponent { return null } - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> <CheckboxField @@ -424,6 +434,7 @@ class TypeFormParametersType extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -439,7 +450,7 @@ class TypeFormParametersType extends React.PureComponent { return null } - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> <TextField @@ -449,6 +460,7 @@ class TypeFormParametersType extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} @@ -464,7 +476,7 @@ class TypeFormParametersType extends React.PureComponent { return null } - const { classes } = this.props + const { mode, classes } = this.props return ( <div className={classes.field}> <TextField @@ -474,6 +486,7 @@ class TypeFormParametersType extends React.PureComponent { error={error} disabled={!enabled} value={value} + mode={mode} onChange={this.handleChange} onFocus={this.handleFocus} onBlur={this.handleBlur} diff --git a/openbis_ng_ui/src/js/components/types/form/TypeFormPreview.jsx b/openbis_ng_ui/src/js/components/types/form/TypeFormPreview.jsx index edc8b241f3e..35a170b31b6 100644 --- a/openbis_ng_ui/src/js/components/types/form/TypeFormPreview.jsx +++ b/openbis_ng_ui/src/js/components/types/form/TypeFormPreview.jsx @@ -104,7 +104,7 @@ class TypeFormPreview extends React.PureComponent { } renderSection(section, index) { - const { properties, selection, onSelectionChange } = this.props + const { mode, properties, selection, onSelectionChange } = this.props const sectionProperties = section.properties.map(id => _.find(properties, ['id', id]) @@ -116,6 +116,7 @@ class TypeFormPreview extends React.PureComponent { section={section} index={index} selection={selection} + mode={mode} onSelectionChange={onSelectionChange} > {this.renderProperties(sectionProperties, 0)} @@ -124,7 +125,7 @@ class TypeFormPreview extends React.PureComponent { } renderProperties(properties, index) { - const { controller, selection, onSelectionChange } = this.props + const { mode, controller, selection, onSelectionChange } = this.props return properties.map((property, offset) => { return ( @@ -134,6 +135,7 @@ class TypeFormPreview extends React.PureComponent { property={property} index={index + offset} selection={selection} + mode={mode} onSelectionChange={onSelectionChange} /> ) diff --git a/openbis_ng_ui/src/js/components/types/form/TypeFormPreviewProperty.jsx b/openbis_ng_ui/src/js/components/types/form/TypeFormPreviewProperty.jsx index c0d39db6cb5..7f2c44e3a08 100644 --- a/openbis_ng_ui/src/js/components/types/form/TypeFormPreviewProperty.jsx +++ b/openbis_ng_ui/src/js/components/types/form/TypeFormPreviewProperty.jsx @@ -15,6 +15,7 @@ const EMPTY = 'empty' const styles = theme => ({ draggable: { width: '100%', + cursor: 'pointer', padding: theme.spacing(1), boxSizing: 'border-box', borderWidth: '2px', @@ -170,7 +171,7 @@ class TypeFormPreviewProperty extends React.PureComponent { render() { logger.log(logger.DEBUG, 'TypeFormPreviewProperty.render') - let { property, selection, index, classes } = this.props + let { mode, property, selection, index, classes } = this.props const selected = selection && @@ -178,7 +179,11 @@ class TypeFormPreviewProperty extends React.PureComponent { selection.params.id === property.id return ( - <Draggable draggableId={property.id} index={index}> + <Draggable + draggableId={property.id} + index={index} + isDragDisabled={mode !== 'edit'} + > {provided => ( <div ref={provided.innerRef} diff --git a/openbis_ng_ui/src/js/components/types/form/TypeFormPreviewSection.jsx b/openbis_ng_ui/src/js/components/types/form/TypeFormPreviewSection.jsx index 6de3d19b500..d3a99ef55be 100644 --- a/openbis_ng_ui/src/js/components/types/form/TypeFormPreviewSection.jsx +++ b/openbis_ng_ui/src/js/components/types/form/TypeFormPreviewSection.jsx @@ -9,6 +9,7 @@ import util from '@src/js/common/util.js' const styles = theme => ({ draggable: { width: '100%', + cursor: 'pointer', marginBottom: theme.spacing(1), '&:hover $droppable': { borderColor: theme.palette.background.secondary @@ -53,7 +54,7 @@ class TypeFormPreviewSection extends React.PureComponent { render() { logger.log(logger.DEBUG, 'TypeFormPreviewSection.render') - let { section, index, children, selection, classes } = this.props + let { mode, section, index, children, selection, classes } = this.props let { id, name } = section const selected = @@ -62,7 +63,11 @@ class TypeFormPreviewSection extends React.PureComponent { selection.params.id === section.id return ( - <Draggable draggableId={id} index={index}> + <Draggable + draggableId={id} + index={index} + isDragDisabled={mode !== 'edit'} + > {provided => ( <div ref={provided.innerRef} -- GitLab