blob: 2d6a1b909d832d5f3e757e496f43ce7ba6b6562f [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,
20 state: {
21 completedCourses: new Set(),
scmmishrabcafe842018-11-03 14:48:42 +053022 enrolledPrograms: new Set(),
scmmishra6678f5b2018-11-02 20:50:55 +053023 currentEnrollment: '',
scmmishrabcafe842018-11-03 14:48:42 +053024 student: '',
25 isLogin: false
scmmishra6678f5b2018-11-02 20:50:55 +053026 },
scmmishrabcafe842018-11-03 14:48:42 +053027
28 setCurrentEnrollment (enrollment) {
scmmishra6678f5b2018-11-02 20:50:55 +053029 if (this.debug) console.log('setCourseEnrollment triggered with', enrollment)
30 this.state.currentEnrollment = enrollment
31 },
scmmishrabcafe842018-11-03 14:48:42 +053032
33 getCurrentEnrollment () {
34 if (this.debug) console.log('getCourseEnrollment triggered')
35 return this.state.currentEnrollment
36 },
37
scmmishra6678f5b2018-11-02 20:50:55 +053038 addCompletedCourses (courseName){
39 if (this.debug) console.log('addCompletedCourses triggered with', courseName)
40 this.state.completedCourses.add(courseName)
41 },
scmmishrabcafe842018-11-03 14:48:42 +053042
scmmishra6678f5b2018-11-02 20:50:55 +053043 checkCourseCompletion (courseName){
44 return this.state.completedCourses.has(courseName)
45 },
scmmishrabcafe842018-11-03 14:48:42 +053046
47 checkProgramEnrollment (programName){
48 return this.state.enrolledPrograms.has(programName)
49 },
50
51 updateCompletedCourses (){
scmmishra6678f5b2018-11-02 20:50:55 +053052 if (this.debug) console.log('Updating States')
scmmishrabcafe842018-11-03 14:48:42 +053053 frappe.call("erpnext.www.academy.get_completed_courses").then( r => {
scmmishra6678f5b2018-11-02 20:50:55 +053054 this.state.completedCourses.clear()
55 for(var ii=0; ii < r.message.length; ii++){
56 this.state.completedCourses.add(r.message[ii])
57 }
58 })
59 if (this.debug) console.log('Updated State', this.state.completedCourses)
scmmishrabcafe842018-11-03 14:48:42 +053060 },
61
62 checkLogin (){
63 if(frappe.session.user === "Guest"){
64 if (this.debug) console.log('No Session')
65 this.isLogin = false
66 }
67 else {
68 if (this.debug) console.log('Current User: ', frappe.session.user)
69 this.isLogin = true
70 }
71 return this.isLogin
72 },
73
74 updateState (){
75 this.updateCompletedCourses()
76 this.checkLogin()
77
78 },
scmmishra6678f5b2018-11-02 20:50:55 +053079}
80
scmmishra1778b592018-10-30 18:25:49 +053081const router = new VueRouter({
82 routes: routes,
83});
84
85frappe.ready(() => {
scmmishra84297fa2018-11-01 17:17:30 +053086 window.v = new Vue({
scmmishra6678f5b2018-11-02 20:50:55 +053087 el: "#academy",
scmmishra1778b592018-10-30 18:25:49 +053088 router: router,
scmmishra6678f5b2018-11-02 20:50:55 +053089 data: store,
scmmishra1778b592018-10-30 18:25:49 +053090 template: "<academy-root/>",
scmmishra6678f5b2018-11-02 20:50:55 +053091 components: { AcademyRoot },
92 created: function() {
scmmishrabcafe842018-11-03 14:48:42 +053093 if(store.checkLogin()){
94 store.updateState()
95 }
scmmishra6678f5b2018-11-02 20:50:55 +053096 }
scmmishra1778b592018-10-30 18:25:49 +053097 });
98})