Normally, these sequences are skipped. But if the user manually goes to the section, they should be notified why they can't access it. That can easily happen if they bookmarked the page or something. AA-1000
92 lines
3.0 KiB
JavaScript
92 lines
3.0 KiB
JavaScript
import { Factory } from 'rosie'; // eslint-disable-line import/no-extraneous-dependencies
|
|
import '../../../shared/data/__factories__/block.factory';
|
|
import { buildSimpleCourseBlocks } from '../../../shared/data/__factories__/courseBlocks.factory';
|
|
|
|
Factory.define('sequenceMetadata')
|
|
.option('courseId', (courseId) => {
|
|
if (courseId) {
|
|
return courseId;
|
|
}
|
|
throw new Error('courseId must be specified for sequenceMetadata factory.');
|
|
})
|
|
// An array of units
|
|
.option('unitBlocks', ['courseId'], courseId => ([
|
|
Factory.build(
|
|
'block',
|
|
{ type: 'vertical' },
|
|
{ courseId },
|
|
),
|
|
]))
|
|
.option(
|
|
'sequenceBlock', ['courseId', 'unitBlocks'], (courseId, unitBlocks) => (
|
|
Factory.build(
|
|
'block',
|
|
{ type: 'sequential', children: unitBlocks.map(unitBlock => unitBlock.id) },
|
|
{ courseId },
|
|
)
|
|
),
|
|
)
|
|
.attr('element_id', ['sequenceBlock'], sequenceBlock => sequenceBlock.block_id)
|
|
.attr('item_id', ['sequenceBlock'], sequenceBlock => sequenceBlock.id)
|
|
.attr('display_name', ['sequenceBlock'], sequenceBlock => sequenceBlock.display_name)
|
|
.attr('gated_content', ['sequenceBlock'], sequenceBlock => ({
|
|
gated: false,
|
|
prereq_url: null,
|
|
prereq_id: `${sequenceBlock.id}-prereq`,
|
|
prereq_section_name: `${sequenceBlock.display_name}-prereq`,
|
|
gated_section_name: sequenceBlock.display_name,
|
|
}))
|
|
.attr('items', ['unitBlocks', 'sequenceBlock'], (unitBlocks, sequenceBlock) => unitBlocks.map(
|
|
unitBlock => ({
|
|
href: '',
|
|
graded: unitBlock.graded,
|
|
id: unitBlock.id,
|
|
bookmarked: unitBlock.bookmarked || false,
|
|
path: `Chapter Display Name > ${sequenceBlock.display_name} > ${unitBlock.display_name}`,
|
|
type: unitBlock.type,
|
|
complete: unitBlock.complete || null,
|
|
content: '',
|
|
page_title: unitBlock.display_name,
|
|
contains_content_type_gated_content: unitBlock.contains_content_type_gated_content,
|
|
}),
|
|
))
|
|
.attrs({
|
|
exclude_units: true,
|
|
position: null,
|
|
next_url: null,
|
|
tag: 'sequential',
|
|
save_position: true,
|
|
prev_url: null,
|
|
is_time_limited: false,
|
|
is_hidden_after_due: false,
|
|
show_completion: true,
|
|
banner_text: null,
|
|
format: 'Homework',
|
|
});
|
|
|
|
/**
|
|
* Build a simple course and simple metadata for its sequence.
|
|
*/
|
|
export default function buildSimpleCourseAndSequenceMetadata(options = {}) {
|
|
const courseMetadata = options.courseMetadata || Factory.build('courseMetadata', {
|
|
course_access: {
|
|
has_access: false,
|
|
},
|
|
});
|
|
const courseId = courseMetadata.id;
|
|
const simpleCourseBlocks = buildSimpleCourseBlocks(courseId, courseMetadata.name, options);
|
|
const { unitBlocks, sequenceBlocks } = simpleCourseBlocks;
|
|
const sequenceMetadata = options.sequenceMetadata || sequenceBlocks.map(block => Factory.build(
|
|
'sequenceMetadata',
|
|
{},
|
|
{
|
|
courseId, unitBlocks, sequenceBlock: block,
|
|
},
|
|
));
|
|
return {
|
|
...simpleCourseBlocks,
|
|
courseMetadata,
|
|
sequenceMetadata,
|
|
};
|
|
}
|