blob: 8608680648c5235be9a763bd38bfc09020bc6472 [file] [log] [blame]
scmmishra1778b592018-10-30 18:25:49 +05301import Vue from 'vue/dist/vue.js';
2import VueRouter from 'vue-router/dist/vue-router.js'
scmmishra6678f5b2018-11-02 20:50:55 +05303
scmmishra1778b592018-10-30 18:25:49 +05304import AcademyRoot from "./web-academy/AcademyRoot.vue";
5import AcademyHome from "./web-academy/pages/AcademyHome.vue";
6import AcademyProgramPage from "./web-academy/pages/AcademyProgramPage.vue";
7import AcademyCoursePage from "./web-academy/pages/AcademyCoursePage.vue";
8
9Vue.use(VueRouter)
10
scmmishra6678f5b2018-11-02 20:50:55 +053011
scmmishra1778b592018-10-30 18:25:49 +053012const routes = [
scmmishra84297fa2018-11-01 17:17:30 +053013 {name: 'home', path: '', component: AcademyHome},
14 {name: 'program', path: '/Program/:code', component: AcademyProgramPage, props: true},
15 {name: 'content', path: '/Program/:code/:course/:type/:content', component: AcademyCoursePage, props: true},
scmmishra1778b592018-10-30 18:25:49 +053016];
17
scmmishra6678f5b2018-11-02 20:50:55 +053018var store = {
19 debug: true,
scmmishra1a04f772018-11-03 20:43:59 +053020 isLogin: false,
21 completedCourses: new Set(),
22 enrolledPrograms: new Set(),
23 enrolledCourses: {},
scmmishrabcafe842018-11-03 14:48:42 +053024
scmmishra6678f5b2018-11-02 20:50:55 +053025 addCompletedCourses (courseName){
26 if (this.debug) console.log('addCompletedCourses triggered with', courseName)
scmmishra1a04f772018-11-03 20:43:59 +053027 this.completedCourses.add(courseName)
scmmishra6678f5b2018-11-02 20:50:55 +053028 },
scmmishrabcafe842018-11-03 14:48:42 +053029
scmmishra6678f5b2018-11-02 20:50:55 +053030 checkCourseCompletion (courseName){
scmmishra1a04f772018-11-03 20:43:59 +053031 return this.completedCourses.has(courseName)
scmmishra6678f5b2018-11-02 20:50:55 +053032 },
scmmishrabcafe842018-11-03 14:48:42 +053033
34 checkProgramEnrollment (programName){
scmmishra1a04f772018-11-03 20:43:59 +053035 return this.enrolledPrograms.has(programName)
36 },
37
38 checkCourseEnrollment (courseName){
39 course = new Set(Object.keys(enrolledCourses))
40 return course.has(courseName)
scmmishrabcafe842018-11-03 14:48:42 +053041 },
42
scmmishraa0546552018-11-03 19:33:04 +053043 updateEnrolledPrograms (){
44 if (this.debug) console.log('Updating enrolledPrograms')
45 frappe.call("erpnext.www.academy.get_program_enrollments").then( r => {
46 for(var ii=0; ii < r.message.length; ii++){
scmmishra1a04f772018-11-03 20:43:59 +053047 this.enrolledPrograms.add(r.message[ii])
scmmishraa0546552018-11-03 19:33:04 +053048 }
49 })
scmmishra1a04f772018-11-03 20:43:59 +053050 if (this.debug) console.log('Updated State', this.enrolledPrograms)
scmmishraa0546552018-11-03 19:33:04 +053051 },
52
53 updateEnrolledCourses (){
54 if (this.debug) console.log('Updating enrolledCourses')
55 frappe.call("erpnext.www.academy.get_course_enrollments").then( r => {
scmmishra1a04f772018-11-03 20:43:59 +053056 this.enrolledCourses = r.message
scmmishraa0546552018-11-03 19:33:04 +053057 })
scmmishra1a04f772018-11-03 20:43:59 +053058 if (this.debug) console.log('Updated State', this.enrolledCourses)
scmmishraa0546552018-11-03 19:33:04 +053059 },
60
scmmishrabcafe842018-11-03 14:48:42 +053061 updateCompletedCourses (){
scmmishra6678f5b2018-11-02 20:50:55 +053062 if (this.debug) console.log('Updating States')
scmmishrabcafe842018-11-03 14:48:42 +053063 frappe.call("erpnext.www.academy.get_completed_courses").then( r => {
scmmishra6678f5b2018-11-02 20:50:55 +053064 for(var ii=0; ii < r.message.length; ii++){
scmmishra1a04f772018-11-03 20:43:59 +053065 this.completedCourses.add(r.message[ii])
scmmishra6678f5b2018-11-02 20:50:55 +053066 }
67 })
scmmishra1a04f772018-11-03 20:43:59 +053068 if (this.debug) console.log('Updated State', this.completedCourses)
scmmishrabcafe842018-11-03 14:48:42 +053069 },
70
71 checkLogin (){
72 if(frappe.session.user === "Guest"){
73 if (this.debug) console.log('No Session')
74 this.isLogin = false
75 }
76 else {
77 if (this.debug) console.log('Current User: ', frappe.session.user)
78 this.isLogin = true
79 }
80 return this.isLogin
81 },
82
83 updateState (){
84 this.updateCompletedCourses()
scmmishraa0546552018-11-03 19:33:04 +053085 this.updateEnrolledPrograms()
86 this.updateEnrolledCourses()
scmmishrabcafe842018-11-03 14:48:42 +053087 this.checkLogin()
88
89 },
scmmishra6678f5b2018-11-02 20:50:55 +053090}
91
scmmishra1778b592018-10-30 18:25:49 +053092const router = new VueRouter({
93 routes: routes,
94});
95
96frappe.ready(() => {
scmmishra84297fa2018-11-01 17:17:30 +053097 window.v = new Vue({
scmmishra6678f5b2018-11-02 20:50:55 +053098 el: "#academy",
scmmishra1778b592018-10-30 18:25:49 +053099 router: router,
scmmishra6678f5b2018-11-02 20:50:55 +0530100 data: store,
scmmishra1778b592018-10-30 18:25:49 +0530101 template: "<academy-root/>",
scmmishra6678f5b2018-11-02 20:50:55 +0530102 components: { AcademyRoot },
103 created: function() {
scmmishrabcafe842018-11-03 14:48:42 +0530104 if(store.checkLogin()){
105 store.updateState()
106 }
scmmishra6678f5b2018-11-02 20:50:55 +0530107 }
scmmishra1778b592018-10-30 18:25:49 +0530108 });
109})