Skip to content
Snippets Groups Projects
Select Git revision
  • 1afb02cfb9b0f66ff0be17b07c7312f69f162e6b
  • mui5-tetras-main-stable default protected
  • mui5-tetras-main-old-stable
  • preprod protected
  • 75-dernieres-ameliorations-avant-workshop-du-7-02
  • wip-fix-xywh
  • wip-positionement-annot
  • wip-surface-transformer
  • uploads-file
  • 69-la-video-demare-quand-on-fait-glisser-le-slider-et-le-clic-creer-un-decalage-entre-le-player
  • 61-recettage-des-outils-d-annotation
  • gestion_multiple_ouverture_pannel_annotation
  • autorisation_un_pannel_annotation
  • autorisation_un_pannel_edition_annotation
  • récupération_temps_video
  • save-shapes-and-position
  • fix-error-create-annotation-pannel
  • time-saving-on-annotation
  • tetras-main protected
  • fix-poc-mirador
  • tetras-antho-test
21 results

utils.js

Blame
  • WindowSideBarCanvasPanel.js 4.21 KiB
    import React, { Component } from 'react';
    import PropTypes from 'prop-types';
    import classNames from 'classnames';
    import Typography from '@material-ui/core/Typography';
    import List from '@material-ui/core/List';
    import ListItem from '@material-ui/core/ListItem';
    import FilledInput from '@material-ui/core/FilledInput';
    import MenuItem from '@material-ui/core/MenuItem';
    import FormControl from '@material-ui/core/FormControl';
    import Select from '@material-ui/core/Select';
    import { CanvasThumbnail } from './CanvasThumbnail';
    import ManifestoCanvas from '../lib/ManifestoCanvas';
    import CompanionWindow from '../containers/CompanionWindow';
    import { getIdAndLabelOfCanvases } from '../state/selectors';
    
    /**
     * a panel showing the canvases for a given manifest
     */
    export class WindowSideBarCanvasPanel extends Component {
      /** */
      constructor(props) {
        super(props);
    
        this.state = { variant: 'thumbnail' };
        this.handleVariantChange = this.handleVariantChange.bind(this);
      }
    
      /** */
      handleVariantChange(event) {
        this.setState({ variant: event.target.value });
      }
    
      /** */
      renderCompact(canvas, otherCanvas) {
        const {
          classes,
        } = this.props;
    
        return (
          <>
            <Typography
              className={classNames(classes.label)}
              variant="body1"
            >
              {canvas.label}
            </Typography>
          </>
        );
      }
    
      /** */
      renderThumbnail(canvas, otherCanvas) {
        const {
          classes, config,
        } = this.props;
        const { width, height } = config.canvasNavigation;
        const manifestoCanvas = new ManifestoCanvas(otherCanvas);
    
        return (
          <>
            <div style={{ minWidth: 50 }}>
              <CanvasThumbnail
                className={classNames(classes.clickable)}
                isValid={manifestoCanvas.hasValidDimensions}
                imageUrl={manifestoCanvas.thumbnail(width, height)}
                maxHeight={config.canvasNavigation.height}
                maxWidth={config.canvasNavigation.width}
                aspectRatio={manifestoCanvas.aspectRatio}
              />
            </div>
            <Typography
              className={classNames(classes.label)}
              variant="body1"
            >
              {canvas.label}
            </Typography>
          </>
        );
      }
    
      /**
       * render
       */
      render() {
        const {
          canvases, setCanvas, t, windowId, id,
        } = this.props;
    
        const { variant } = this.state;
    
    
        const canvasesIdAndLabel = getIdAndLabelOfCanvases(canvases);
        return (
          <CompanionWindow
            title={t('canvasIndex')}
            id={id}
            windowId={windowId}
            titleControls={(
              <FormControl variant="filled">
                <Select
                  value={variant}
                  onChange={this.handleVariantChange}
                  name="variant"
                  autoWidth
                  variant="filled"
                  input={<FilledInput name="variant" />}
                >
                  <MenuItem value="compact">{ t('compactList') }</MenuItem>
                  <MenuItem value="thumbnail">{ t('thumbnailList') }</MenuItem>
                </Select>
              </FormControl>
              )}
          >
            <List>
              {
                canvasesIdAndLabel.map((canvas, canvasIndex) => {
                  const onClick = () => { setCanvas(windowId, canvasIndex); }; // eslint-disable-line require-jsdoc, max-len
    
                  return (
                    <ListItem
                      key={canvas.id}
                      alignItems="flex-start"
                      onClick={onClick}
                      button
                      component="li"
                    >
                      {variant === 'compact' && this.renderCompact(canvas, canvases[canvasIndex])}
                      {variant === 'thumbnail' && this.renderThumbnail(canvas, canvases[canvasIndex])}
                    </ListItem>
                  );
                })
              }
            </List>
          </CompanionWindow>
        );
      }
    }
    
    WindowSideBarCanvasPanel.propTypes = {
      canvases: PropTypes.array.isRequired, // eslint-disable-line react/forbid-prop-types
      classes: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
      config: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
      setCanvas: PropTypes.func.isRequired,
      t: PropTypes.func.isRequired,
      windowId: PropTypes.string.isRequired,
      id: PropTypes.string.isRequired,
    };