From d33e1269d44c550619e49aee9ed5a71e1bfa5e8f Mon Sep 17 00:00:00 2001 From: Antoine <antoine.roy@tetras-libre.fr> Date: Wed, 20 Dec 2023 15:52:29 +0100 Subject: [PATCH] Tentative de rendre compatible le plugin annotation avec Mirador qui fonctionne avec React 17 --- .eslintrc | 4 ++ package.json | 3 +- src/AnnotationCreation.js | 95 ++++++++++++++------------ src/AnnotationExportDialog.js | 23 ++++--- src/CanvasListItem.js | 8 +-- src/HMSInput.js | 5 +- src/ImageFormField.js | 4 +- src/SingleCanvasDialog.js | 14 ++-- src/TextEditor.js | 10 +-- src/icons/Cursor.js | 2 +- src/plugins/miradorAnnotationPlugin.js | 4 +- 11 files changed, 93 insertions(+), 79 deletions(-) diff --git a/.eslintrc b/.eslintrc index b7539c7..9a432f4 100644 --- a/.eslintrc +++ b/.eslintrc @@ -10,6 +10,10 @@ "parser": "@babel/eslint-parser", "plugins": ["jest"], "rules": { + "import/no-extraneous-dependencies": [ + "error", +{"devDependencies": true} +], "import/prefer-default-export": "off", "no-console": "off", "react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx"] }], diff --git a/package.json b/package.json index 81fee8b..a6c75e3 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "test:ci": "jest --ci --reporters=default --reporters=jest-junit --watchAll=false" }, "dependencies": { + "@mui/system": "^5.15.1", "@psychobolt/react-paperjs": "^1.0.3", "@psychobolt/react-paperjs-editor": "0.0.11", "draft-js": "^0.11.6", @@ -43,9 +44,9 @@ "devDependencies": { "@babel/core": "^7.10.4", "@babel/eslint-parser": "^7.19.1", + "@babel/plugin-proposal-private-property-in-object": "^7.21.11", "@babel/preset-env": "^7.10.4", "@babel/preset-react": "^7.10.4", - "@babel/plugin-proposal-private-property-in-object":"^7.21.11" , "@mui/icons-material": "^5.11.16", "@mui/lab": "^5.0.0-alpha.134", "@mui/material": "^5.13.5", diff --git a/src/AnnotationCreation.js b/src/AnnotationCreation.js index a383aa1..95af50e 100644 --- a/src/AnnotationCreation.js +++ b/src/AnnotationCreation.js @@ -3,29 +3,29 @@ import PropTypes from 'prop-types'; import { Button, Paper, Grid, Popover, Divider, MenuList, MenuItem, ClickAwayListener, -} from '@material-ui/core'; -import { Alarm, LastPage } from '@material-ui/icons'; -import Typography from '@material-ui/core/Typography'; -import ToggleButton from '@material-ui/lab/ToggleButton'; -import ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup'; -import RectangleIcon from '@material-ui/icons/CheckBoxOutlineBlank'; -import CircleIcon from '@material-ui/icons/RadioButtonUnchecked'; -import PolygonIcon from '@material-ui/icons/Timeline'; -import GestureIcon from '@material-ui/icons/Gesture'; -import ClosedPolygonIcon from '@material-ui/icons/ChangeHistory'; -import OpenPolygonIcon from '@material-ui/icons/ShowChart'; -import FormatColorFillIcon from '@material-ui/icons/FormatColorFill'; -import StrokeColorIcon from '@material-ui/icons/BorderColor'; -import LineWeightIcon from '@material-ui/icons/LineWeight'; -import ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown'; -import FormatShapesIcon from '@material-ui/icons/FormatShapes'; +} from '@mui/material'; +import { Alarm, LastPage } from '@mui/icons-material'; +import Typography from '@mui/material/Typography'; +import ToggleButton from '@mui/lab/ToggleButton'; +import ToggleButtonGroup from '@mui/lab/ToggleButtonGroup'; +import RectangleIcon from '@mui/icons-material/CheckBoxOutlineBlank'; +import CircleIcon from '@mui/icons-material/RadioButtonUnchecked'; +import PolygonIcon from '@mui/icons-material/Timeline'; +import GestureIcon from '@mui/icons-material/Gesture'; +import ClosedPolygonIcon from '@mui/icons-material/ChangeHistory'; +import OpenPolygonIcon from '@mui/icons-material/ShowChart'; +import FormatColorFillIcon from '@mui/icons-material/FormatColorFill'; +import StrokeColorIcon from '@mui/icons-material/BorderColor'; +import LineWeightIcon from '@mui/icons-material/LineWeight'; +import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown'; +import FormatShapesIcon from '@mui/icons-material/FormatShapes'; import { SketchPicker } from 'react-color'; import { v4 as uuid } from 'uuid'; -import { withStyles } from '@material-ui/core/styles'; +import { styled } from '@mui/system'; import CompanionWindow from 'mirador/dist/es/src/containers/CompanionWindow'; import { VideosReferences } from 'mirador/dist/es/src/plugins/VideosReferences'; import { OSDReferences } from 'mirador/dist/es/src/plugins/OSDReferences'; -import Slider from '@material-ui/core/Slider'; +import Slider from '@mui/material/Slider'; import AnnotationDrawing from './AnnotationDrawing'; import TextEditor from './TextEditor'; import WebAnnotation from './WebAnnotation'; @@ -33,6 +33,7 @@ import CursorIcon from './icons/Cursor'; import HMSInput from './HMSInput'; import ImageFormField from './ImageFormField'; import { secondsToHMS } from './utils'; + /** Extract time information from annotation target */ function timeFromAnnoTarget(annotarget) { console.info('TODO proper time extraction from: ', annotarget); @@ -211,10 +212,14 @@ class AnnotationCreation extends Component { }; /** update annotation start time */ - updateTstart(value) { this.setState({ tstart: value }); } + updateTstart(value) { + this.setState({ tstart: value }); + } /** update annotation end time */ - updateTend(value) { this.setState({ tend: value }); } + updateTend(value) { + this.setState({ tend: value }); + } /** seekTo/goto annotation start time */ @@ -408,7 +413,7 @@ class AnnotationCreation extends Component { </div> <div> - { mediaIsVideo && ( + {mediaIsVideo && ( <> <Grid item xs={12} className={classes.paper}> <Typography id="range-slider" variant="overline"> @@ -570,23 +575,23 @@ class AnnotationCreation extends Component { <Divider flexItem orientation="vertical" className={classes.divider} /> { /* close / open polygon mode only for freehand drawing mode. */ - activeTool === 'freehand' - ? ( - <ToggleButtonGroup - size="small" - value={closedMode} - onChange={this.changeClosedMode} - > - <ToggleButton value="closed"> - <ClosedPolygonIcon /> - </ToggleButton> - <ToggleButton value="open"> - <OpenPolygonIcon /> - </ToggleButton> - </ToggleButtonGroup> - ) - : null - } + activeTool === 'freehand' + ? ( + <ToggleButtonGroup + size="small" + value={closedMode} + onChange={this.changeClosedMode} + > + <ToggleButton value="closed"> + <ClosedPolygonIcon /> + </ToggleButton> + <ToggleButton value="open"> + <OpenPolygonIcon /> + </ToggleButton> + </ToggleButtonGroup> + ) + : null + } </Grid> </Grid> </div> @@ -628,7 +633,7 @@ class AnnotationCreation extends Component { onClose={this.closeChooseColor} > <SketchPicker - // eslint-disable-next-line react/destructuring-assignment + // eslint-disable-next-line react/destructuring-assignment color={this.state[currentColorType] || {}} onChangeComplete={this.updateStrokeColor} /> @@ -637,6 +642,7 @@ class AnnotationCreation extends Component { ); } } + /** */ const styles = (theme) => ({ buttonTimeContainer: { @@ -731,11 +737,14 @@ AnnotationCreation.propTypes = { AnnotationCreation.defaultProps = { annotation: null, canvases: [], - closeCompanionWindow: () => {}, + closeCompanionWindow: () => { + }, currentTime: null, paused: true, - setCurrentTime: () => {}, - setSeekTo: () => {}, + setCurrentTime: () => { + }, + setSeekTo: () => { + }, }; -export default withStyles(styles)(AnnotationCreation); +export default styled(styles)(AnnotationCreation); diff --git a/src/AnnotationExportDialog.js b/src/AnnotationExportDialog.js index 9202209..bfa897c 100644 --- a/src/AnnotationExportDialog.js +++ b/src/AnnotationExportDialog.js @@ -1,15 +1,16 @@ import React, { Component } from 'react'; -import Dialog from '@material-ui/core/Dialog'; -import DialogContent from '@material-ui/core/DialogContent'; -import DialogTitle from '@material-ui/core/DialogTitle'; -import GetAppIcon from '@material-ui/icons/GetApp'; -import ListItemIcon from '@material-ui/core/ListItemIcon'; -import ListItemText from '@material-ui/core/ListItemText'; -import MenuList from '@material-ui/core/MenuList'; -import MenuItem from '@material-ui/core/MenuItem'; -import Typography from '@material-ui/core/Typography'; +import Dialog from '@mui/material/Dialog'; +import DialogContent from '@mui/material/DialogContent'; +import DialogTitle from '@mui/material/DialogTitle'; +import GetAppIcon from '@mui/icons-material/GetApp'; +import ListItemIcon from '@mui/material/ListItemIcon'; +import ListItemText from '@mui/material/ListItemText'; +import MenuList from '@mui/material/MenuList'; +import MenuItem from '@mui/material/MenuItem'; +import Typography from '@mui/material/Typography'; import PropTypes, { bool } from 'prop-types'; -import { withStyles } from '@material-ui/core'; +import { styled } from '@mui/system'; + /** */ const styles = (theme) => ({ @@ -137,4 +138,4 @@ AnnotationExportDialog.defaultProps = { classes: {}, }; -export default withStyles(styles)(AnnotationExportDialog); +export default styled(styles)(AnnotationExportDialog); diff --git a/src/CanvasListItem.js b/src/CanvasListItem.js index f3a6526..07824c5 100644 --- a/src/CanvasListItem.js +++ b/src/CanvasListItem.js @@ -1,9 +1,9 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; -import DeleteIcon from '@material-ui/icons/DeleteForever'; -import EditIcon from '@material-ui/icons/Edit'; -import ToggleButton from '@material-ui/lab/ToggleButton'; -import ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup'; +import DeleteIcon from '@mui/icons-material/DeleteForever'; +import EditIcon from '@mui/icons-material/Edit'; +import ToggleButton from '@mui/lab/ToggleButton'; +import ToggleButtonGroup from '@mui/lab/ToggleButtonGroup'; import flatten from 'lodash/flatten'; import AnnotationActionsContext from './AnnotationActionsContext'; diff --git a/src/HMSInput.js b/src/HMSInput.js index 06d7d46..1803c23 100644 --- a/src/HMSInput.js +++ b/src/HMSInput.js @@ -1,8 +1,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; -import { withStyles } from '@material-ui/core/styles'; -import { IconButton, Input, TextField } from '@material-ui/core'; -import { ArrowDownward, ArrowUpward } from '@material-ui/icons'; +import { withStyles } from '@mui/material/styles'; +import { Input } from '@mui/material'; import { secondsToHMSarray } from './utils'; /** hh:mm:ss input which behave like a single input for parent */ diff --git a/src/ImageFormField.js b/src/ImageFormField.js index b7162a4..09aaa85 100644 --- a/src/ImageFormField.js +++ b/src/ImageFormField.js @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; -import { withStyles } from '@material-ui/core/styles'; -import { TextField } from '@material-ui/core'; +import { withStyles } from '@mui/material/styles'; +import { TextField } from '@mui/material'; /** URL input with an <img> preview */ class ImageFormField extends Component { diff --git a/src/SingleCanvasDialog.js b/src/SingleCanvasDialog.js index 75fe392..9e3ad9f 100644 --- a/src/SingleCanvasDialog.js +++ b/src/SingleCanvasDialog.js @@ -1,11 +1,11 @@ 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 Button from '@mui/material/Button'; +import Dialog from '@mui/material/Dialog'; +import DialogActions from '@mui/material/DialogActions'; +import DialogContent from '@mui/material/DialogContent'; +import DialogContentText from '@mui/material/DialogContentText'; +import DialogTitle from '@mui/material/DialogTitle'; +import Typography from '@mui/material/Typography'; import PropTypes from 'prop-types'; /** diff --git a/src/TextEditor.js b/src/TextEditor.js index 5f24d6d..925f655 100644 --- a/src/TextEditor.js +++ b/src/TextEditor.js @@ -1,11 +1,11 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { Editor, EditorState, RichUtils } from 'draft-js'; -import ToggleButton from '@material-ui/lab/ToggleButton'; -import ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup'; -import BoldIcon from '@material-ui/icons/FormatBold'; -import ItalicIcon from '@material-ui/icons/FormatItalic'; -import { withStyles } from '@material-ui/core/styles'; +import ToggleButton from '@mui/lab/ToggleButton'; +import ToggleButtonGroup from '@mui/lab/ToggleButtonGroup'; +import BoldIcon from '@mui/icons-material/FormatBold'; +import ItalicIcon from '@mui/icons-material/FormatItalic'; +import { withStyles } from '@mui/material/styles'; import { stateToHTML } from 'draft-js-export-html'; import { stateFromHTML } from 'draft-js-import-html'; diff --git a/src/icons/Cursor.js b/src/icons/Cursor.js index 5eee80d..85b7420 100644 --- a/src/icons/Cursor.js +++ b/src/icons/Cursor.js @@ -1,5 +1,5 @@ import React from 'react'; -import SvgIcon from '@material-ui/core/SvgIcon'; +import SvgIcon from '@mui/material/SvgIcon'; /** * CursorIcon ~ diff --git a/src/plugins/miradorAnnotationPlugin.js b/src/plugins/miradorAnnotationPlugin.js index e3a06fc..f8f01aa 100644 --- a/src/plugins/miradorAnnotationPlugin.js +++ b/src/plugins/miradorAnnotationPlugin.js @@ -2,8 +2,8 @@ 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 GetAppIcon from '@material-ui/icons/GetApp'; +import AddBoxIcon from '@mui/icons-material/AddBox'; +import GetAppIcon from '@mui/icons-material/GetApp'; import { MiradorMenuButton } from 'mirador/dist/es/src/components/MiradorMenuButton'; import { getVisibleCanvases } from 'mirador/dist/es/src/state/selectors/canvases'; import SingleCanvasDialog from '../SingleCanvasDialog'; -- GitLab