codecombat/app/views/courses/StudentCoursesView.coffee
2015-11-05 17:31:11 -08:00

75 lines
2.8 KiB
CoffeeScript

app = require 'core/application'
AuthModal = require 'views/core/AuthModal'
CocoCollection = require 'collections/CocoCollection'
Course = require 'models/Course'
Classroom = require 'models/Classroom'
User = require 'models/User'
CourseInstance = require 'models/CourseInstance'
RootView = require 'views/core/RootView'
template = require 'templates/courses/student-courses-view'
utils = require 'core/utils'
# TODO: Implement join class
# TODO: Implement course instance links
module.exports = class StudentCoursesView extends RootView
id: 'student-courses-view'
template: template
events:
'click #join-class-btn': 'onClickJoinClassButton'
constructor: (options) ->
super(options)
@courseInstances = new CocoCollection([], { url: "/db/user/#{me.id}/course_instances", model: CourseInstance})
@supermodel.loadCollection(@courseInstances, 'course_instances')
@classrooms = new CocoCollection([], { url: "/db/classroom", model: Classroom })
@supermodel.loadCollection(@classrooms, 'classrooms', { data: {memberID: me.id} })
@courses = new CocoCollection([], { url: "/db/course", model: Course})
@supermodel.loadCollection(@courses, 'courses')
if (@classCode = utils.getQueryVariable('_cc', false)) and not me.isAnonymous()
@joinClass()
onClickJoinClassButton: (e) ->
return @openModalView new AuthModal() if me.isAnonymous()
@classCode = @$('#classroom-code-input').val()
@joinClass()
joinClass: () ->
@state = 'enrolling'
@renderSelectors '#join-classroom-form'
$.ajax({
method: 'POST'
url: '/db/classroom/-/members'
data: code: @classCode
context: @
success: @onJoinClassroomSuccess
error: (jqxhr, textStatus, errorThrown) ->
application.tracker?.trackEvent 'Failed to join classroom with code', status: textStatus
@state = 'unknown_error'
if jqxhr.status is 422
@stateMessage = 'Please enter a code.'
else if jqxhr.status is 404
@stateMessage = 'Code not found.'
else
@stateMessage = "#{jqxhr.responseText}"
@renderSelectors '#join-classroom-form'
})
onJoinClassroomSuccess: (data, textStatus, jqxhr) ->
# application.tracker?.trackEvent 'Redeemed course prepaid code', {prepaidCode: prepaidID}
# me.fetch(cache: false).always =>
# if data?.length > 0 && data[0].courseID && data[0]._id
# courseID = data[0].courseID
# courseInstanceID = data[0]._id
# route = "/courses/#{courseID}/#{courseInstanceID}"
# viewArgs = [{}, courseID, courseInstanceID]
# Backbone.Mediator.publish 'router:navigate',
# route: route
# viewClass: 'views/courses/CourseDetailsView'
# viewArgs: viewArgs
# else
# @state = 'unknown_error'
# @stateMessage = "Database error."
# @render?()