Skip to content
Snippets Groups Projects
Select Git revision
  • ef93a9e16066aaa378ded61bb12ae995a9eab68e
  • annotation-on-video default protected
  • demo_ci
  • 3-upstream-01022023
  • master
  • gh3538-captions
  • 16-adapt-for-images-annot
  • 15-api-for-annotations-on-video
  • 15-annotations-on-videos
  • video_for_annotations
  • wip-1-annotations-on-videos
  • 9-videoviewer-tests
  • 9_wip_videotests
  • 6-fix-tests-and-ci
  • _fix_ci
  • wip-webpack-from-git
16 results

webpack.config.js

Blame
  • MiradorViewer.js 2.64 KiB
    import React from 'react';
    import ReactDOM from 'react-dom';
    import { Provider } from 'react-redux';
    import deepmerge from 'deepmerge';
    import App from '../containers/App';
    import createRootReducer from '../state/reducers/index';
    import createStore from '../state/createStore';
    import * as actions from '../state/actions';
    import settings from '../config/settings';
    
    /**
     * Default Mirador instantiation
     */
    class MiradorViewer {
      /**
       */
      constructor(config) {
        this.store = createStore();
        this.config = config;
        this.processPlugins();
        this.processConfig();
        const viewer = {
          actions,
          store: this.store,
        };
    
        ReactDOM.render(
          <Provider store={this.store}>
            <App config={config} />
          </Provider>,
          document.getElementById(config.id),
        );
    
        return viewer;
      }
    
      /**
       * Process config into actions
       */
      processConfig() {
        const mergedConfig = deepmerge(settings, this.config);
        const action = actions.setConfig(mergedConfig);
        this.store.dispatch(action);
    
        mergedConfig.windows.forEach((miradorWindow) => {
          let thumbnailNavigationPosition;
          if (miradorWindow.thumbnailNavigationPosition !== undefined) {
            ({ thumbnailNavigationPosition } = miradorWindow);
          } else {
            thumbnailNavigationPosition = mergedConfig.thumbnailNavigation.defaultPosition;
          }
          this.store.dispatch(actions.fetchManifest(miradorWindow.loadedManifest));
          this.store.dispatch(actions.addWindow({
            canvasIndex: (miradorWindow.canvasIndex || 0),
            manifestId: miradorWindow.loadedManifest,
            thumbnailNavigationPosition,
          }));
        });
      }
    
      /**
       * Process Plugins
       */
      processPlugins() {
        const plugins = this.config.plugins || [];
        const actionCreators = [];
        const reducers = [];
    
        plugins.forEach((pluginName) => {
          const plugin = window.Mirador.plugins[pluginName];
    
          // Add Actions
          if (plugin.actions) {
            Object.keys(plugin.actions)
              .forEach(actionName => actionCreators.push({
                name: actionName,
                action: plugin.actions[actionName],
              }));
          }
          // Add Reducers
          if (plugin.reducers) {
            Object.keys(plugin.reducers)
              .forEach(reducerName => reducers.push({
                name: reducerName,
                reducer: plugin.reducers[reducerName],
              }));
          }
        });
    
        actionCreators.forEach((action) => { actions[action.name] = action.action; });
        reducers.forEach((reducer) => { this.store.pluginReducers[reducer.name] = reducer.reducer; });
        this.store.replaceReducer(createRootReducer(this.store.pluginReducers));
      }
    }
    
    export default MiradorViewer;