Skip to content
Snippets Groups Projects
Select Git revision
  • 2323ee4efe7a4e4ff7010146b78ffa69f3fa906f
  • 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

CanvasWorld.js

Blame
  • App.js 2.32 KiB
    import React, { Component } from 'react';
    import { connect } from 'react-redux';
    import PropTypes from 'prop-types';
    import { actions } from '../store';
    import Display from './Display';
    import ManifestForm from './ManifestForm';
    import ManifestListItem from './ManifestListItem';
    import Workspace from './Workspace';
    
    /**
     * This is the top level Mirador component.
     * @prop {Object} manifests
     */
    class App extends Component {
      /**
       * constructor -
       */
      constructor(props) {
        super(props);
        this.state = {
          lastRequested: '',
        };
    
        this.setLastRequested = this.setLastRequested.bind(this);
      }
    
      /**
       * setLastRequested - Sets the state lastRequested
       *
       * @private
       */
      setLastRequested(requested) {
        this.setState({
          lastRequested: requested,
        });
      }
    
      /**
       * computedContent - computes the content to be displayed based on logic
       *
       * @return {type}  description
       * @private
       */
      computedContent() {
        const manifest = this.props.manifests[this.state.lastRequested];
        if (manifest) {
          if (manifest.isFetching) {
            return '☕';
          } else if (manifest.error) {
            return manifest.error.message;
          }
          return JSON.stringify(manifest.json, 0, 2);
        }
        return 'Nothing Selected Yet';
      }
    
      /**
       * render
       * @return {String} - HTML markup for the component
       */
      render() {
        const manifestList = Object.keys(this.props.manifests).map(manifest => (
          <ManifestListItem
            key={manifest}
            manifest={manifest}
          />
        ));
        return (
          <div className="App">
            <ManifestForm setLastRequested={this.setLastRequested} />
            <ul>{manifestList}</ul>
    
            <Display
              manifest={this.props.manifests[this.state.lastRequested]}
            />
            <Workspace />
          </div>
        );
      }
    }
    
    App.propTypes = {
      manifests: PropTypes.instanceOf(Object).isRequired,
    };
    
    /**
     * mapStateToProps - to hook up connect
     * @memberof App
     * @private
     */
    const mapStateToProps = state => (
      {
        manifests: state.manifests,
      }
    );
    
    /**
     * mapDispatchToProps - used to hook up connect to action creators
     * @memberof App
     * @private
     */
    const mapDispatchToProps = dispatch => ({
      fetchManifest: manifestUrl => (
        dispatch(actions.fetchManifest(manifestUrl))
      ),
    });
    
    export default connect(
      mapStateToProps,
      mapDispatchToProps,
    )(App);