* Moving model-store into “generic” sub-directory. Also adding a README.md to explain what belongs in “generic” * Moving user-messages into “generic” sub-directory. * Moving PageLoading into “generic” sub-directory. * Moving “tabs” module into “generic” sub-directory. * Moving InstructorToolbar and MasqueradeWidget up to instructor-toolbar. The masquerade widget is a sub-module of instructor-toolbar. * Co-locating celebration APIs with celebration utils. Also adding an ADR about thunk/API naming conventions and making some other areas of the code adhere to it. * Moving courseware data (thunks, api) into the courseware module. Note that cousre-home/data/api still uses normalizeBlocks - this should be fixed so it’s not reaching across. Maybe we pull that particular API up top. This PR includes a few TODOs for things I saw, as well as a tiny bit of whitespace cleanup.
25 lines
1.2 KiB
JavaScript
25 lines
1.2 KiB
JavaScript
/* eslint-disable import/prefer-default-export */
|
|
|
|
import { useSelector } from 'react-redux';
|
|
import { useModel } from '../../../../generic/model-store';
|
|
import { sequenceIdsSelector } from '../../../data/selectors';
|
|
|
|
export function useSequenceNavigationMetadata(currentSequenceId, currentUnitId) {
|
|
const sequenceIds = useSelector(sequenceIdsSelector);
|
|
const sequence = useModel('sequences', currentSequenceId);
|
|
const courseStatus = useSelector(state => state.courseware.courseStatus);
|
|
|
|
// If we don't know the sequence and unit yet, then assume no.
|
|
if (courseStatus !== 'loaded' || !currentSequenceId || !currentUnitId) {
|
|
return { isFirstUnit: false, isLastUnit: false };
|
|
}
|
|
const isFirstSequence = sequenceIds.indexOf(currentSequenceId) === 0;
|
|
const isFirstUnitInSequence = sequence.unitIds.indexOf(currentUnitId) === 0;
|
|
const isFirstUnit = isFirstSequence && isFirstUnitInSequence;
|
|
const isLastSequence = sequenceIds.indexOf(currentSequenceId) === sequenceIds.length - 1;
|
|
const isLastUnitInSequence = sequence.unitIds.indexOf(currentUnitId) === sequence.unitIds.length - 1;
|
|
const isLastUnit = isLastSequence && isLastUnitInSequence;
|
|
|
|
return { isFirstUnit, isLastUnit };
|
|
}
|