diff --git a/src/SingleCanvasDialog.js b/src/SingleCanvasDialog.js new file mode 100644 index 0000000000000000000000000000000000000000..56e959cb23d4893d6b6223d65dd4f8b91e1f0e90 --- /dev/null +++ b/src/SingleCanvasDialog.js @@ -0,0 +1,61 @@ +import React, { Component } from 'react'; +import Button from '@material-ui/core/Button'; +import Dialog from '@material-ui/core/Dialog'; +import DialogActions from '@material-ui/core/DialogActions'; +import DialogContent from '@material-ui/core/DialogContent'; +import DialogContentText from '@material-ui/core/DialogContentText'; +import DialogTitle from '@material-ui/core/DialogTitle'; +import Typography from '@material-ui/core/Typography'; +import PropTypes from 'prop-types'; + +export class SingleCanvasDialog extends Component { + constructor(props) { + super(props); + this.confirm = this.confirm.bind(this); + } + + confirm() { + this.props.switchToSingleCanvasView(); + this.props.openCreateAnnotationCompanionWindow(); + this.props.handleClose(); + } + + render() { + return ( + <Dialog + onClose={this.props.hideDialog} + open={this.props.open} + > + <DialogTitle disableTypography> + <Typography variant="h2"> + Switch view type to single view? + </Typography> + </DialogTitle> + <DialogContent> + <DialogContentText variant="body2" color="inherit"> + Annotations can only be edited in single canvas view type. Switch view type to single view now? + </DialogContentText> + <DialogActions> + <Button onClick={this.confirm} variant="contained"> + Switch and start annotating + </Button> + <Button onClick={this.props.handleClose} variant="contained"> + Cancel + </Button> + </DialogActions> + </DialogContent> + </Dialog> + ); + } +} + +SingleCanvasDialog.propTypes = { + handleClose: PropTypes.func.isRequired, + open: PropTypes.bool, + openCreateAnnotationCompanionWindow: PropTypes.func.isRequired, + switchToSingleCanvasView: PropTypes.func.isRequired, +} + +SingleCanvasDialog.defaultProps = { + open: false, +} diff --git a/src/plugins/miradorAnnotationPlugin.js b/src/plugins/miradorAnnotationPlugin.js index 9ebeec69b9daceea4768575206e6f5ed08ede9f0..034991f40fc563719d552b65e7e45e805767fa7b 100644 --- a/src/plugins/miradorAnnotationPlugin.js +++ b/src/plugins/miradorAnnotationPlugin.js @@ -1,15 +1,22 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import * as actions from 'mirador/dist/es/src/state/actions'; +import { getWindowViewType } from 'mirador/dist/es/src/state/selectors'; import AddBoxIcon from '@material-ui/icons/AddBox'; import { MiradorMenuButton } from 'mirador/dist/es/src/components/MiradorMenuButton'; +import { SingleCanvasDialog } from '../SingleCanvasDialog'; + /** */ class MiradorAnnotation extends Component { /** */ constructor(props) { super(props); + this.state = { + singleCanvasDialogOpen: false, + }; this.openCreateAnnotationCompanionWindow = this.openCreateAnnotationCompanionWindow.bind(this); + this.toggleSingleCanvasDialogOpen = this.toggleSingleCanvasDialogOpen.bind(this); } /** */ @@ -23,6 +30,12 @@ class MiradorAnnotation extends Component { }); } + toggleSingleCanvasDialogOpen() { + this.setState({ + singleCanvasDialogOpen: !this.state.singleCanvasDialogOpen, + }); + } + /** */ render() { const { TargetComponent, targetProps } = this.props; @@ -33,11 +46,21 @@ class MiradorAnnotation extends Component { /> <MiradorMenuButton aria-label="Create new annotation" - onClick={this.openCreateAnnotationCompanionWindow} + onClick={this.props.windowViewType === 'single' ? this.openCreateAnnotationCompanionWindow : this.toggleSingleCanvasDialogOpen} size="small" > <AddBoxIcon /> </MiradorMenuButton> + { + this.state.singleCanvasDialogOpen && ( + <SingleCanvasDialog + open={this.state.singleCanvasDialogOpen} + handleClose={this.toggleSingleCanvasDialogOpen} + openCreateAnnotationCompanionWindow={this.openCreateAnnotationCompanionWindow} + switchToSingleCanvasView={this.props.switchToSingleCanvasView} + /> + ) + } </div> ); } @@ -57,11 +80,19 @@ const mapDispatchToProps = (dispatch, props) => ({ addCompanionWindow: (content, additionalProps) => dispatch( actions.addCompanionWindow(props.targetProps.windowId, { content, ...additionalProps }), ), + switchToSingleCanvasView: () => dispatch( + actions.setWindowViewType(props.targetProps.windowId, 'single') + ) +}); + +const mapStateToProps = (state, props) => ({ + windowViewType: getWindowViewType(state, { windowId: props.targetProps.windowId }), }); export default { component: MiradorAnnotation, mapDispatchToProps, + mapStateToProps, mode: 'wrap', target: 'AnnotationSettings', };