From 990cef31a336f5d323e0a4c638661033b0b2a6cd Mon Sep 17 00:00:00 2001 From: David Joy Date: Fri, 10 Jan 2020 11:52:37 -0500 Subject: [PATCH] Improving file organization. --- src/learning-sequence/CourseBreadcrumbs.jsx | 2 +- .../LearningSequencePage.jsx | 6 +- src/learning-sequence/SubSection.jsx | 239 ------------------ src/learning-sequence/api.js | 150 ----------- src/learning-sequence/data/api.js | 16 ++ src/learning-sequence/{ => data}/hooks.js | 5 +- src/learning-sequence/data/utils.js | 67 +++++ .../sub-section/SubSection.jsx | 28 ++ .../SubSectionNavigation.jsx | 7 +- .../{ => sub-section}/Unit.jsx | 0 src/learning-sequence/sub-section/data/api.js | 11 + .../sub-section/data/hooks.js | 31 +++ 12 files changed, 162 insertions(+), 400 deletions(-) delete mode 100644 src/learning-sequence/SubSection.jsx delete mode 100644 src/learning-sequence/api.js create mode 100644 src/learning-sequence/data/api.js rename src/learning-sequence/{ => data}/hooks.js (93%) create mode 100644 src/learning-sequence/data/utils.js create mode 100644 src/learning-sequence/sub-section/SubSection.jsx rename src/learning-sequence/{ => sub-section}/SubSectionNavigation.jsx (89%) rename src/learning-sequence/{ => sub-section}/Unit.jsx (100%) create mode 100644 src/learning-sequence/sub-section/data/api.js create mode 100644 src/learning-sequence/sub-section/data/hooks.js diff --git a/src/learning-sequence/CourseBreadcrumbs.jsx b/src/learning-sequence/CourseBreadcrumbs.jsx index 68acd1df..7a0115e2 100644 --- a/src/learning-sequence/CourseBreadcrumbs.jsx +++ b/src/learning-sequence/CourseBreadcrumbs.jsx @@ -6,7 +6,7 @@ import { faChevronRight } from '@fortawesome/free-solid-svg-icons'; import { getConfig } from '@edx/frontend-platform'; import CourseStructureContext from './CourseStructureContext'; -import { useBlockAncestry } from './hooks'; +import { useBlockAncestry } from './data/hooks'; const CourseBreadcrumbs = () => { const { courseId, unitId } = useContext(CourseStructureContext); diff --git a/src/learning-sequence/LearningSequencePage.jsx b/src/learning-sequence/LearningSequencePage.jsx index fdd5f571..d89135b5 100644 --- a/src/learning-sequence/LearningSequencePage.jsx +++ b/src/learning-sequence/LearningSequencePage.jsx @@ -4,12 +4,10 @@ import { injectIntl, intlShape } from '@edx/frontend-platform/i18n'; import PageLoading from './PageLoading'; import messages from './messages'; - import CourseBreadcrumbs from './CourseBreadcrumbs'; -import SubSection from './SubSection'; - -import { useCourseStructure } from './hooks'; import CourseStructureContext from './CourseStructureContext'; +import { useCourseStructure } from './data/hooks'; +import SubSection from './sub-section/SubSection'; function LearningSequencePage({ match, intl }) { const { diff --git a/src/learning-sequence/SubSection.jsx b/src/learning-sequence/SubSection.jsx deleted file mode 100644 index abe455ef..00000000 --- a/src/learning-sequence/SubSection.jsx +++ /dev/null @@ -1,239 +0,0 @@ -import React, { Component, useContext, useEffect, useState } from 'react'; -import PropTypes from 'prop-types'; -import { getConfig } from '@edx/frontend-platform'; - -import SubSectionNavigation from './SubSectionNavigation'; -import { getSubSectionMetadata } from './api'; -import CourseStructureContext from './CourseStructureContext'; -import Unit from './Unit'; - -function useSubSectionMetadata(courseId, subSectionId) { - const [metadata, setMetadata] = useState(null); - const [loaded, setLoaded] = useState(false); - - useEffect(() => { - setLoaded(false); - getSubSectionMetadata(courseId, subSectionId).then((data) => { - setMetadata(data); - setLoaded(true); - }); - }, [courseId, subSectionId]); - - return { - metadata, - loaded, - }; -} - -function useExamRedirect(metadata, blocks) { - useEffect(() => { - if (metadata !== null && blocks !== null) { - if (metadata.isTimeLimited) { - global.location.href = blocks[metadata.itemId].lmsWebUrl; - } - } - }, [metadata, blocks]); -} - -/* - - - const calculateUnitId = (metadata, options) => { - const { first, last, preferredUnitId } = options; - let position = metadata.position - 1; // metadata's position is 1's indexed - position = first ? 0 : position; - position = last ? metadata.unitIds.length - 1 : position; - position = preferredUnitId ? metadata.unitIds.indexOf(preferredUnitId) : position; - const unitId = metadata.items[position].id; - - return unitId; - } - - handleUnitChange = (unitId) => { - this.setState({ - unitId, - }); - } - - */ - -export default function SubSection() { - const { - courseId, - subSectionId, - unitId, - blocks, - } = useContext(CourseStructureContext); - const { metadata } = useSubSectionMetadata(courseId, subSectionId); - - useExamRedirect(metadata, blocks); - - if (blocks === null || metadata === null) { - return null; - } - - const unit = blocks[unitId]; - - // units={this.state.units} - // unitIds={this.state.subSectionMetadata.unitIds} - // activeUnitId={this.state.unitId} - // unitClickHandler={this.handleUnitChange} - // nextClickHandler={this.handleNextClick} - // previousClickHandler={this.handlePreviousClick} - return ( -
- - - -
- ); -} - - -/* - -

{course.displayName}

- - - - -