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

setupJest.js

Blame
  • App.js 2.47 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';
    import ns from '../config/css-ns';
    
    /**
     * 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 { manifests } = this.props;
        const { lastRequested } = this.state;
        const manifest = manifests[lastRequested];
        if (manifest) {
          if (manifest.isFetching) {
            return '☕';
          }
          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 { manifests } = this.props;
        const { lastRequested } = this.state;
        const manifestList = Object.keys(manifests).map(manifest => (
          <ManifestListItem
            key={manifest}
            manifest={manifest}
          />
        ));
        return (
          <div className={ns('app')}>
            <Workspace />
            <div className={ns('control-panel')}>
              <ManifestForm setLastRequested={this.setLastRequested} />
              <ul>{manifestList}</ul>
    
              <Display
                manifest={manifests[lastRequested]}
              />
            </div>
          </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 = { fetchManifest: actions.fetchManifest };
    
    export default connect(
      mapStateToProps,
      mapDispatchToProps,
    )(App);