mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-24 16:17:57 -05:00
86 lines
2.8 KiB
CoffeeScript
86 lines
2.8 KiB
CoffeeScript
|
RootView = require 'views/core/RootView'
|
||
|
template = require 'templates/teachers-free-trial'
|
||
|
CocoCollection = require 'collections/CocoCollection'
|
||
|
TrialRequest = require 'models/TrialRequest'
|
||
|
|
||
|
# TODO: distinguish between this type of existing trial requests and others
|
||
|
|
||
|
module.exports = class TeachersFreeTrialView extends RootView
|
||
|
id: 'teachers-free-trial-view'
|
||
|
template: template
|
||
|
|
||
|
events:
|
||
|
'click .submit-button': 'onClickSubmit'
|
||
|
|
||
|
constructor: (options) ->
|
||
|
super options
|
||
|
@email = me.get('email')
|
||
|
@refreshData()
|
||
|
|
||
|
getRenderData: ->
|
||
|
context = super()
|
||
|
context.email = @email
|
||
|
context.existingRequests = @existingRequests.models
|
||
|
context.fetchingData = @fetchingData
|
||
|
context
|
||
|
|
||
|
refreshData: ->
|
||
|
@fetchingData = true
|
||
|
@existingRequests = new CocoCollection([], { url: '/db/trial.request/-/own', model: TrialRequest, comparator: '_id' })
|
||
|
@listenToOnce @existingRequests, 'sync', =>
|
||
|
@fetchingData = false
|
||
|
@render?()
|
||
|
@supermodel.loadCollection(@existingRequests, 'own_trial_requests', {cache: false})
|
||
|
|
||
|
onClickSubmit: (e) ->
|
||
|
email = $('.input-email-address').val()
|
||
|
location = $('.input-location').val()
|
||
|
age = $('input[name=age]:checked').val()
|
||
|
age = $('.input-age-other').val() if age is 'other'
|
||
|
numStudents = $('.input-num-students').val()
|
||
|
heardAbout = $('.input-heard-about').val()
|
||
|
|
||
|
# Validate input
|
||
|
$('.container-email-address').removeClass('has-error')
|
||
|
$('.container-location').removeClass('has-error')
|
||
|
$('.container-age').removeClass('has-error')
|
||
|
$('.container-num-students').removeClass('has-error')
|
||
|
$('.container-heard-about').removeClass('has-error')
|
||
|
$('.error-message').hide()
|
||
|
emailPattern = /^([\w.-]+)@([\w.-]+)\.([a-zA-Z.]{2,6})$/i
|
||
|
unless email?.match(emailPattern)
|
||
|
$('.container-email-address').addClass('has-error')
|
||
|
$('.error-message').show()
|
||
|
return
|
||
|
unless location
|
||
|
$('.container-location').addClass('has-error')
|
||
|
$('.error-message').show()
|
||
|
return
|
||
|
unless age
|
||
|
$('.container-age').addClass('has-error')
|
||
|
$('.error-message').show()
|
||
|
return
|
||
|
unless numStudents
|
||
|
$('.container-num-students').addClass('has-error')
|
||
|
$('.error-message').show()
|
||
|
return
|
||
|
unless heardAbout
|
||
|
$('.container-heard-about').addClass('has-error')
|
||
|
$('.error-message').show()
|
||
|
return
|
||
|
|
||
|
# Save trial request
|
||
|
trialRequest = new TrialRequest
|
||
|
type: 'subscription'
|
||
|
properties:
|
||
|
email: email
|
||
|
location: location
|
||
|
age: age
|
||
|
numStudents: numStudents
|
||
|
heardAbout: heardAbout
|
||
|
trialRequest.save {},
|
||
|
error: (model, response, options) =>
|
||
|
console.error 'Error saving trial request', response
|
||
|
success: (model, response, options) =>
|
||
|
@refreshData()
|