corporate-frontend-mithril
Version:
Corporate frontend MithrilJS modules
113 lines (100 loc) • 3.36 kB
JavaScript
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;
};