UNPKG

corporate-frontend-mithril

Version:

Corporate frontend MithrilJS modules

113 lines (100 loc) 3.36 kB
const _ = require('lodash'); const model = require('./news-subscription-m'); const url = 'https://news-opinion.sydney.edu.au/scripts/subscribe/subscribe.php'; const frequencyErrMsg = 'Please select a how often you would like to receive news articles.'; const emailErrMsg = 'You must enter a valid email address'; const formStateCompleted = 'formStateCompleted'; const formStateLoading = 'formStateLoading'; const formStateDefault = 'formStateDefault'; module.exports = function() { let _formState = formStateDefault; let _resultMsg = ''; let vm = { get rolePlaceholder(){ return model.rolePlaceholder; }, get roles() { return model.roles; }, get categories() { return model.categories; }, get frequencies() { return model.frequencies; }, get subscription() { return model.subscription; }, get formState() { return _formState; }, get resultMsg() { return _resultMsg; }, formStateCompleted, formStateLoading, formStateDefault, }; //------------------- View Handlers --------------------- vm.setItem = function({key,v}) { vm.subscription.st[key] = v; }; vm.selectedRole = function({key,obj}) { vm.subscription.cu[key] = obj.value; }; vm.selectedCategory = function({category, v}) { category.selected = v; }; vm.selectedFrequency = function({frequency, v}) { frequency.selected = v; }; vm.getFrequencySpace = function(frequency) { return frequency.name.length > 8 ? '2/5' : '1/5'; }; vm.getCategoryInitialCheckedState = function(category) { if(!category.isInit) { category.isInit = true; return {checked: category.selected}; } return {}; }; vm.submit = function() { if(!vm.subscription.st['EMAIL']) { alert(emailErrMsg); return; } let gr = []; let frequencies = _.filter(vm.frequencies, function(obj) {return obj.selected === true;}); if(!frequencies || frequencies.length == 0) { alert(frequencyErrMsg); return; } gr = frequencies.map(obj => obj.value); let categories = _.filter(vm.categories, function(obj) {return obj.selected === true;}); if(categories && categories.length > 0) { gr = [...gr,...categories.map(obj => obj.value)]; frequencies.forEach((frequency)=>{ categories.forEach((category)=> { let r = category.frequencies.find(obj => obj.id === frequency.id); if(r) { gr.push(r.value); } }); }); } vm.subscription.gr = gr; _formState = formStateLoading; m.request({ method: 'POST', url: url, data: vm.subscription, }).then((result)=> { _resultMsg = result.message; _formState = formStateCompleted; }).catch((err)=> { _resultMsg = 'Submission failed, please contact the administrator.'; _formState = formStateCompleted; }); }; return vm; };