MCPcopy Create free account
hub / github.com/codecombat/codecombat / applyCourseLogicToLevels

Method applyCourseLogicToLevels

app/views/play/CampaignView.js:2508–2598  ·  view source on GitHub ↗
(orderedLevels)

Source from the content-addressed store, hash-verified

2506 }
2507
2508 applyCourseLogicToLevels (orderedLevels) {
2509 const nextSlug = this.courseStats.levels.next?.get('slug') || this.courseStats.levels.first?.get('slug')
2510 if (!nextSlug) { return }
2511
2512 const courseOrder = ['junior', '65c56663d2ca2055e65676af'].includes(this.terrain) ? orderedLevels : _.sortBy(orderedLevels, 'courseIdx')
2513 let found = false
2514 let prev = null
2515 let lastNormalLevel = null
2516 let lockedByTeacher = false
2517 for (const level of courseOrder) {
2518 const playerState = this.levelStatusMap[level.slug]
2519 level.color = 'rgb(255, 80, 60)'
2520 level.disabled = false
2521
2522 const lockCheckOriginal = utils.findParentLevelOriginal(level, courseOrder)
2523
2524 if (level.slug === nextSlug && !this.classroom.isStudentOnLockedLevel(me.get('_id'), this.course.get('_id'), lockCheckOriginal)) {
2525 level.locked = false
2526 level.hidden = false
2527 level.next = true
2528 found = true
2529 } else if ([STARTED_STATUS, COMPLETE_STATUS].includes(playerState)) {
2530 level.hidden = false
2531 level.locked = false
2532 } else {
2533 if (level.practice) {
2534 if (prev?.next) {
2535 level.hidden = !prev?.practice
2536 level.locked = true
2537 } else if (prev) {
2538 level.hidden = prev.hidden
2539 level.locked = prev.locked
2540 } else {
2541 level.hidden = true
2542 level.locked = true
2543 }
2544 } else if (level.assessment) {
2545 level.hidden = false
2546 level.locked = this.levelStatusMap[lastNormalLevel?.slug] !== COMPLETE_STATUS
2547 } else {
2548 level.locked = found
2549 level.hidden = false
2550 }
2551 }
2552
2553 if ((!prev || !prev.locked) && level.locked && this.classroom.isStudentOnOptionalLevel(me.get('_id'), this.course.get('_id'), lockCheckOriginal)) {
2554 level.locked = false
2555 }
2556
2557 level.noFlag = !level.next
2558
2559 let lockSkippedLevel = false
2560 const startLockedLevel = this.courseInstance.get('startLockedLevel')
2561 const legacyLock = startLockedLevel && level.slug === startLockedLevel
2562
2563 if (legacyLock ||
2564 this.classroom.isStudentOnLockedLevel(me.get('_id'), this.course.get('_id'), lockCheckOriginal)) {
2565 if (!this.classroom.isStudentOnOptionalLevel(me.get('_id'), this.course.get('_id'), lockCheckOriginal)) {

Callers 2

determineNextLevelMethod · 0.95

Calls 6

isLevelCompletedMethod · 0.95
levelIsPracticeMethod · 0.80
levelIsAssessmentMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected