()
| 355 | } |
| 356 | |
| 357 | onLoaded () { |
| 358 | // Get latest courses for student assignment dropdowns |
| 359 | this.getLatestCourses() |
| 360 | this.removeDeletedStudents() // TODO: Move this to mediator listeners? For both classroom and students? |
| 361 | this.calculateProgressAndLevels() |
| 362 | |
| 363 | // render callback setup |
| 364 | this.listenTo(this.courseInstances, 'sync change update', this.debouncedRender) |
| 365 | this.listenTo(this.state, 'sync change', function () { |
| 366 | if (_.isEmpty(_.omit(this.state.changed, 'searchTerm'))) { |
| 367 | return this.renderSelectors('#license-status-table') |
| 368 | } else { |
| 369 | return this.debouncedRender() |
| 370 | } |
| 371 | }) |
| 372 | this.listenTo(this.students, 'sort', this.debouncedRender) |
| 373 | this.getCourseAssessmentPairs() |
| 374 | |
| 375 | this.courses.models.forEach(course => { |
| 376 | const levels = this.classroom.getLevels({ courseID: course.id }).models.map(level => { |
| 377 | let left, left1 |
| 378 | return { key: level.get('original'), practice: (left = level.get('practice')) != null ? left : false, assessment: (left1 = level.get('assessment')) != null ? left1 : false } |
| 379 | }) |
| 380 | return this.campaignLevelNumberMap[course.get('campaignID')] = utils.createLevelNumberMap(levels) |
| 381 | }) |
| 382 | return super.onLoaded() |
| 383 | } |
| 384 | |
| 385 | afterRender () { |
| 386 | super.afterRender(...arguments) |
nothing calls this directly
no test coverage detected