blob: 8088a5060d5be817346882a567ef457f95331aa9 [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 = {
scmmishrab409f7a2018-11-07 22:12:55 +053019 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')
scmmishraa3afe2a2018-11-05 11:01:54 +053045 frappe.call({
46 method: "erpnext.www.academy.get_program_enrollments",
47 args:{
48 email: frappe.session.user
49 }
50 }).then( r => {
scmmishra8fa9ade2018-11-08 13:01:55 +053051 if(r.message){
52 for(var ii=0; ii < r.message.length; ii++){
53 this.enrolledPrograms.add(r.message[ii])
54 }
scmmishraa0546552018-11-03 19:33:04 +053055 }
56 })
scmmishra1a04f772018-11-03 20:43:59 +053057 if (this.debug) console.log('Updated State', this.enrolledPrograms)
scmmishraa0546552018-11-03 19:33:04 +053058 },
59
60 updateEnrolledCourses (){
61 if (this.debug) console.log('Updating enrolledCourses')
scmmishraa3afe2a2018-11-05 11:01:54 +053062 frappe.call({
63 method: "erpnext.www.academy.get_course_enrollments",
64 args:{
65 email: frappe.session.user
66 }
67 }).then( r => {
scmmishra1a04f772018-11-03 20:43:59 +053068 this.enrolledCourses = r.message
scmmishraa0546552018-11-03 19:33:04 +053069 })
scmmishra1a04f772018-11-03 20:43:59 +053070 if (this.debug) console.log('Updated State', this.enrolledCourses)
scmmishraa0546552018-11-03 19:33:04 +053071 },
72
scmmishrabcafe842018-11-03 14:48:42 +053073 updateCompletedCourses (){
scmmishra6678f5b2018-11-02 20:50:55 +053074 if (this.debug) console.log('Updating States')
scmmishraa3afe2a2018-11-05 11:01:54 +053075 frappe.call({
76 method: "erpnext.www.academy.get_completed_courses",
77 args:{
78 email: frappe.session.user
79 }
80 }).then( r => {
scmmishra8fa9ade2018-11-08 13:01:55 +053081 if(r.message){
82 for(var ii=0; ii < r.message.length; ii++){
83 this.completedCourses.add(r.message[ii])
84 }
scmmishra6678f5b2018-11-02 20:50:55 +053085 }
86 })
scmmishra1a04f772018-11-03 20:43:59 +053087 if (this.debug) console.log('Updated State', this.completedCourses)
scmmishrabcafe842018-11-03 14:48:42 +053088 },
89
90 checkLogin (){
91 if(frappe.session.user === "Guest"){
92 if (this.debug) console.log('No Session')
93 this.isLogin = false
94 }
95 else {
96 if (this.debug) console.log('Current User: ', frappe.session.user)
97 this.isLogin = true
98 }
99 return this.isLogin
100 },
101
102 updateState (){
103 this.updateCompletedCourses()
scmmishraa0546552018-11-03 19:33:04 +0530104 this.updateEnrolledPrograms()
105 this.updateEnrolledCourses()
scmmishrabcafe842018-11-03 14:48:42 +0530106 this.checkLogin()
107
108 },
scmmishra6678f5b2018-11-02 20:50:55 +0530109}
110
scmmishra1778b592018-10-30 18:25:49 +0530111const router = new VueRouter({
112 routes: routes,
113});
114
115frappe.ready(() => {
scmmishra84297fa2018-11-01 17:17:30 +0530116 window.v = new Vue({
scmmishra6678f5b2018-11-02 20:50:55 +0530117 el: "#academy",
scmmishra1778b592018-10-30 18:25:49 +0530118 router: router,
scmmishra6678f5b2018-11-02 20:50:55 +0530119 data: store,
scmmishra1778b592018-10-30 18:25:49 +0530120 template: "<academy-root/>",
scmmishra6678f5b2018-11-02 20:50:55 +0530121 components: { AcademyRoot },
122 created: function() {
scmmishrabcafe842018-11-03 14:48:42 +0530123 if(store.checkLogin()){
124 store.updateState()
125 }
scmmishra6678f5b2018-11-02 20:50:55 +0530126 }
scmmishra1778b592018-10-30 18:25:49 +0530127 });
128})