| 539 | } |
| 540 | |
| 541 | calculateHocStats () { |
| 542 | const hocCampaignSessions = ((store.getters != null ? store.getters['levelSessions/getSessionsForCampaign'](this.hourOfCodeOptions.campaignId) : undefined) || {}).sessions || [] |
| 543 | const campaignSessions = _.sortBy(hocCampaignSessions, s => s.changed) |
| 544 | const levelSessionMap = {} |
| 545 | campaignSessions.forEach(s => { levelSessionMap[s.level.original] = s }) |
| 546 | const userLevelStatusMap = {} |
| 547 | const levelsInCampaign = new Set() |
| 548 | this.campaignLevels.models.forEach(l => { |
| 549 | if (__guard__(levelSessionMap[l.get('original')], x => x.state.complete)) { |
| 550 | userLevelStatusMap[l.get('original')] = true |
| 551 | } else { |
| 552 | userLevelStatusMap[l.get('original')] = false |
| 553 | } |
| 554 | return levelsInCampaign.add(l.get('original')) |
| 555 | }) |
| 556 | const [started, completed, levelsDone] = Array.from(coursesHelper.hasUserCompletedCourse(userLevelStatusMap, levelsInCampaign)) // eslint-disable-line no-unused-vars |
| 557 | this.hocStats = { |
| 558 | complete: completed, |
| 559 | pctDone: ((levelsDone / this.campaignLevels.models.length) * 100).toFixed(1) + '%', |
| 560 | } |
| 561 | return this.hocStats |
| 562 | } |
| 563 | |
| 564 | courseInstanceHasProject (courseInstance) { |
| 565 | const classroom = this.classrooms.get(courseInstance.get('classroomID')) |