blob: e6b48ecb28034f703b4e7e0a83e970365d282352 [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')
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 => {
scmmishraa0546552018-11-03 19:33:04 +053051 for(var ii=0; ii < r.message.length; ii++){
scmmishra1a04f772018-11-03 20:43:59 +053052 this.enrolledPrograms.add(r.message[ii])
scmmishraa0546552018-11-03 19:33:04 +053053 }
54 })
scmmishra1a04f772018-11-03 20:43:59 +053055 if (this.debug) console.log('Updated State', this.enrolledPrograms)
scmmishraa0546552018-11-03 19:33:04 +053056 },
57
58 updateEnrolledCourses (){
59 if (this.debug) console.log('Updating enrolledCourses')
scmmishraa3afe2a2018-11-05 11:01:54 +053060 frappe.call({
61 method: "erpnext.www.academy.get_course_enrollments",
62 args:{
63 email: frappe.session.user
64 }
65 }).then( r => {
scmmishra1a04f772018-11-03 20:43:59 +053066 this.enrolledCourses = r.message
scmmishraa0546552018-11-03 19:33:04 +053067 })
scmmishra1a04f772018-11-03 20:43:59 +053068 if (this.debug) console.log('Updated State', this.enrolledCourses)
scmmishraa0546552018-11-03 19:33:04 +053069 },
70
scmmishrabcafe842018-11-03 14:48:42 +053071 updateCompletedCourses (){
scmmishra6678f5b2018-11-02 20:50:55 +053072 if (this.debug) console.log('Updating States')
scmmishraa3afe2a2018-11-05 11:01:54 +053073 frappe.call({
74 method: "erpnext.www.academy.get_completed_courses",
75 args:{
76 email: frappe.session.user
77 }
78 }).then( r => {
scmmishra6678f5b2018-11-02 20:50:55 +053079 for(var ii=0; ii < r.message.length; ii++){
scmmishra1a04f772018-11-03 20:43:59 +053080 this.completedCourses.add(r.message[ii])
scmmishra6678f5b2018-11-02 20:50:55 +053081 }
82 })
scmmishra1a04f772018-11-03 20:43:59 +053083 if (this.debug) console.log('Updated State', this.completedCourses)
scmmishrabcafe842018-11-03 14:48:42 +053084 },
85
86 checkLogin (){
87 if(frappe.session.user === "Guest"){
88 if (this.debug) console.log('No Session')
89 this.isLogin = false
90 }
91 else {
92 if (this.debug) console.log('Current User: ', frappe.session.user)
93 this.isLogin = true
94 }
95 return this.isLogin
96 },
97
98 updateState (){
99 this.updateCompletedCourses()
scmmishraa0546552018-11-03 19:33:04 +0530100 this.updateEnrolledPrograms()
101 this.updateEnrolledCourses()
scmmishrabcafe842018-11-03 14:48:42 +0530102 this.checkLogin()
103
104 },
scmmishra6678f5b2018-11-02 20:50:55 +0530105}
106
scmmishra1778b592018-10-30 18:25:49 +0530107const router = new VueRouter({
108 routes: routes,
109});
110
111frappe.ready(() => {
scmmishra84297fa2018-11-01 17:17:30 +0530112 window.v = new Vue({
scmmishra6678f5b2018-11-02 20:50:55 +0530113 el: "#academy",
scmmishra1778b592018-10-30 18:25:49 +0530114 router: router,
scmmishra6678f5b2018-11-02 20:50:55 +0530115 data: store,
scmmishra1778b592018-10-30 18:25:49 +0530116 template: "<academy-root/>",
scmmishra6678f5b2018-11-02 20:50:55 +0530117 components: { AcademyRoot },
118 created: function() {
scmmishrabcafe842018-11-03 14:48:42 +0530119 if(store.checkLogin()){
120 store.updateState()
121 }
scmmishra6678f5b2018-11-02 20:50:55 +0530122 }
scmmishra1778b592018-10-30 18:25:49 +0530123 });
124})