brotherton-erpnext/erpnext/public/js/education/lms/lms.js

116 lines
2.7 KiB
JavaScript
Raw Normal View History

2018-10-30 12:55:49 +00:00
import Vue from 'vue/dist/vue.js';
import VueRouter from 'vue-router/dist/vue-router.js'
2018-11-13 11:33:18 +00:00
import lmsRoot from "./lmsRoot.vue";
2018-11-09 06:17:09 +00:00
import routes from './routes';
import './call';
2018-10-30 12:55:49 +00:00
Vue.use(VueRouter)
2018-11-09 12:55:19 +00:00
var store = {
2018-11-03 15:13:59 +00:00
isLogin: false,
completedCourses: new Set(),
enrolledPrograms: new Set(),
2018-11-09 12:55:19 +00:00
enrolledCourses: {}
}
2018-10-30 12:55:49 +00:00
frappe.ready(() => {
2018-11-13 11:17:46 +00:00
frappe.provide('lms')
// frappe.utils.make_event_emitter(lms);
2018-11-09 12:55:19 +00:00
2018-11-13 11:17:46 +00:00
lms.store = new Vue({
2018-11-09 06:17:09 +00:00
data: store,
methods: {
2018-11-09 12:55:19 +00:00
addCompletedCourses (courseName){
2018-11-13 11:17:46 +00:00
if (lms.debug) console.log('addCompletedCourses triggered with', courseName)
2018-11-09 12:55:19 +00:00
this.completedCourses.add(courseName)
},
checkCourseCompletion (courseName){
return this.completedCourses.has(courseName)
},
checkProgramEnrollment (programName){
return this.enrolledPrograms.has(programName)
},
checkCourseEnrollment (courseName){
course = new Set(Object.keys(enrolledCourses))
return course.has(courseName)
},
updateEnrolledPrograms (){
2018-11-13 11:17:46 +00:00
if (lms.debug) console.log('Updating enrolledPrograms')
lms.call("get_program_enrollments").then(data => {
2018-11-09 12:55:19 +00:00
data.forEach(element => {
this.enrolledPrograms.add(element)
})
});
2018-11-13 11:17:46 +00:00
if (lms.debug) console.log('Updated State', this.enrolledPrograms)
2018-11-09 12:55:19 +00:00
},
updateEnrolledCourses (){
2018-11-13 11:17:46 +00:00
if (lms.debug) console.log('Updating enrolledCourses')
2018-11-09 12:55:19 +00:00
frappe.call({
2018-11-13 11:17:46 +00:00
method: "erpnext.www.lms.get_course_enrollments",
2018-11-09 12:55:19 +00:00
args:{
email: frappe.session.user
}
}).then( r => {
this.enrolledCourses = r.message
})
2018-11-13 11:17:46 +00:00
if (lms.debug) console.log('Updated State', this.enrolledCourses)
2018-11-09 12:55:19 +00:00
},
updateCompletedCourses (){
2018-11-13 11:17:46 +00:00
if (lms.debug) console.log('Updating States')
2018-11-09 12:55:19 +00:00
frappe.call({
2018-11-13 11:17:46 +00:00
method: "erpnext.www.lms.get_completed_courses",
2018-11-09 12:55:19 +00:00
args:{
email: frappe.session.user
}
}).then( r => {
if(r.message){
for(var ii=0; ii < r.message.length; ii++){
this.completedCourses.add(r.message[ii])
}
}
})
2018-11-13 11:17:46 +00:00
if (lms.debug) console.log('Updated State', this.completedCourses)
2018-11-09 12:55:19 +00:00
},
2018-11-09 06:17:09 +00:00
checkLogin (){
if(frappe.session.user === "Guest"){
2018-11-13 11:17:46 +00:00
if (lms.debug) console.log('No Session')
2018-11-09 06:17:09 +00:00
this.isLogin = false
}
else {
2018-11-13 11:17:46 +00:00
if (lms.debug) console.log('Current User: ', frappe.session.user)
2018-11-09 06:17:09 +00:00
this.isLogin = true
}
return this.isLogin
2018-11-09 12:55:19 +00:00
},
updateState (){
this.updateCompletedCourses()
this.updateEnrolledPrograms()
this.updateEnrolledCourses()
this.checkLogin()
},
}
});
2018-11-13 11:17:46 +00:00
lms.view = new Vue({
el: "#lms-app",
2018-11-09 12:55:19 +00:00
router: new VueRouter({ routes }),
2018-11-13 11:33:18 +00:00
template: "<lms-root/>",
components: { lmsRoot },
2018-11-09 12:55:19 +00:00
created: function() {
2018-11-13 11:17:46 +00:00
if(lms.store.checkLogin()){
lms.store.updateState()
2018-11-09 06:17:09 +00:00
}
}
});
2018-11-09 12:55:19 +00:00
2018-11-13 11:17:46 +00:00
lms.debug = true
2018-10-30 12:55:49 +00:00
})