WikiEducationFoundation/WikiEduDashboard

View on GitHub
app/assets/javascripts/components/timeline/TrainingModules/TrainingModulesViewMode.jsx

Summary

Maintainability
D
1 day
Test Coverage
A
100%
import React from 'react';
import PropTypes from 'prop-types';
import TrainingModules from '../TrainingModules/TrainingModules';
import {
    DISCUSSION_KIND, EXERCISE_KIND
  } from '../../../constants';

const TrainingModulesViewMode = (props) => {
    const block = props.block;
    const modules = [];
    const length = block.training_modules.length;

    if (!length) { return null; }

    const partitioned = block.training_modules.reduce((acc, mod) => {
      let key = 'modules';
        if (mod.kind === EXERCISE_KIND) key = 'exercises';
        if (mod.kind === DISCUSSION_KIND) key = 'discussions';
      acc[key].push(mod);
      return acc;
    }, { discussions: [], exercises: [], modules: [] });

    if (partitioned.modules.length) {
      modules.push(<TrainingModules
        all_modules={props.all_training_modules}
        block_modules={partitioned.modules}
        block={block}
        editable={props.editable}
        header={length > 1 && 'Training'}
        key="training-modules"
        trainingLibrarySlug={props.trainingLibrarySlug}
        isStudent={props.isStudent}
      />);
    }

    if (partitioned.exercises.length) {
      modules.push(<TrainingModules
        all_modules={props.all_training_modules}
        block_modules={partitioned.exercises}
        block={block}
        editable={props.editable}
        header={length > 1 && 'Exercise'}
        key="assignment-modules"
        trainingLibrarySlug={props.trainingLibrarySlug}
        isStudent={props.isStudent}
      />);
    }

    if (partitioned.discussions.length) {
      modules.push(<TrainingModules
        all_modules={props.all_training_modules}
        block_modules={partitioned.discussions}
        block={block}
        editable={props.editable}
        header={length > 1 && 'Discussion'}
        key="discussion-modules"
        trainingLibrarySlug={props.trainingLibrarySlug}
        isStudent={props.isStudent}
      />);
    }

    return modules;
  };
TrainingModulesViewMode.displayName = 'TrainingModulesViewMode';

TrainingModulesViewMode.propTypes = {
    block: PropTypes.object,
    all_training_modules: PropTypes.array,
    trainingLibrarySlug: PropTypes.string.isRequired,
    editable: PropTypes.bool,
    isStudent: PropTypes.bool
  };
export default TrainingModulesViewMode;