Skip to content
Snippets Groups Projects
Select Git revision
  • 4624b6f969685736d1e9762985d438f12e671f15
  • mui5-annotation-on-video-stable default
  • get_setter_canvasSizeInformations
  • fix-error-div-into-p
  • annotation-on-video-v2
  • detached
  • annotation-on-video-r17
  • mui5
  • mui5-react-18
  • jacob-test
  • annotation-on-video protected
  • master
  • test-antoinev1
  • 20-fetch-thumbnail-on-annotation
  • add-research-field
  • Save
  • add-plugin
  • 14-wip-no-seek-to
  • 14-bug-on-video-time-control
  • 9_wip_videotests
  • _upgrade_material_ui
  • latest-tetras-16
  • v3.3.0
  • v3.2.0
  • v3.1.1
  • v3.1.0
  • v3.0.0
  • v3.0.0-rc.7
  • v3.0.0-rc.6
  • v3.0.0-rc.5
  • v3.0.0-rc.4
  • v3.0.0-rc.3
  • v3.0.0-rc.2
  • v3.0.0-rc.1
  • v3.0.0-beta.10
  • v3.0.0-beta.9
  • v3.0.0-beta.8
  • v3.0.0-beta.7
  • v3.0.0-beta.6
  • v3.0.0-beta.5
  • v3.0.0-beta.3
41 results

ThumbnailCanvasGrouping.js

Blame
  • ThumbnailCanvasGrouping.js 3.03 KiB
    import { PureComponent } from 'react';
    import PropTypes from 'prop-types';
    import classNames from 'classnames';
    import IIIFThumbnail from '../containers/IIIFThumbnail';
    import ns from '../config/css-ns';
    
    /** */
    export class ThumbnailCanvasGrouping extends PureComponent {
      /** */
      constructor(props) {
        super(props);
        this.setCanvas = this.setCanvas.bind(this);
      }
    
      /** */
      setCanvas(e) {
        const { setCanvas } = this.props;
        setCanvas(e.currentTarget.dataset.canvasId);
      }
    
      /**
       * Determines whether the current index is the rendered canvas, providing
       * a useful class.
       */
      currentCanvasClass(canvasIndices) {
        const { index } = this.props;
        if (canvasIndices.includes(index)) return 'current-canvas-grouping';
        return '';
      }
    
      /** */
      render() {
        const {
          index, style, data, classes, currentCanvasId,
        } = this.props;
        const {
          canvasGroupings, position, height,
        } = data;
        const currentGroupings = canvasGroupings[index];
        const SPACING = 8;
        return (
          <div
            style={{
              ...style,
              boxSizing: 'content-box',
              height: (Number.isInteger(style.height)) ? style.height - SPACING : null,
              left: (Number.isInteger(style.left)) ? style.left + SPACING : null,
              top: style.top + SPACING,
              width: (Number.isInteger(style.width)) ? style.width - SPACING : null,
            }}
            className={ns('thumbnail-nav-container')}
            role="gridcell"
            aria-colindex={index + 1}
          >
            <div
              role="button"
              data-canvas-id={currentGroupings[0].id}
              data-canvas-index={currentGroupings[0].index}
              onKeyUp={this.setCanvas}
              onClick={this.setCanvas}
              tabIndex={-1}
              style={{
                height: (position === 'far-right') ? 'auto' : `${height - SPACING}px`,
                width: (position === 'far-bottom') ? 'auto' : `${style.width}px`,
              }}
              className={classNames(
                ns(['thumbnail-nav-canvas', `thumbnail-nav-canvas-${index}`, this.currentCanvasClass(currentGroupings.map(canvas => canvas.index))]),
                classes.canvas,
                {
                  [classes.currentCanvas]: currentGroupings
                    .map(canvas => canvas.id).includes(currentCanvasId),
                },
              )}
            >
              {currentGroupings.map((canvas, i) => (
                <IIIFThumbnail
                  key={canvas.id}
                  resource={canvas}
                  labelled
                  maxHeight={(position === 'far-right') ? style.height - (1.5 * SPACING) : height - (1.5 * SPACING)}
                  variant="inside"
                />
              ))}
            </div>
          </div>
        );
      }
    }
    
    ThumbnailCanvasGrouping.propTypes = {
      classes: PropTypes.objectOf(PropTypes.string).isRequired,
      currentCanvasId: PropTypes.string.isRequired,
      data: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
      index: PropTypes.number.isRequired,
      setCanvas: PropTypes.func.isRequired,
      style: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
    };