diff --git a/erpnext/public/js/education/academy/academy.js b/erpnext/public/js/education/academy/academy.js index 08cfc37af4..961dc3926a 100644 --- a/erpnext/public/js/education/academy/academy.js +++ b/erpnext/public/js/education/academy/academy.js @@ -7,131 +7,110 @@ import './call'; Vue.use(VueRouter) - - - -frappe.provide('academy') - -frappe.utils.make_event_emitter(academy); - -academy.store = { - debug: true, +var store = { isLogin: false, completedCourses: new Set(), enrolledPrograms: new Set(), - enrolledCourses: {}, - - addCompletedCourses (courseName){ - if (this.debug) console.log('addCompletedCourses triggered with', courseName) - 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 (){ - if (this.debug) console.log('Updating enrolledPrograms') - frappe.call({ - method: "erpnext.www.academy.get_program_enrollments", - args:{ - email: frappe.session.user - } - }).then( r => { - if(r.message){ - for(var ii=0; ii < r.message.length; ii++){ - this.enrolledPrograms.add(r.message[ii]) - } - } - }) - if (this.debug) console.log('Updated State', this.enrolledPrograms) - }, - - updateEnrolledCourses (){ - if (this.debug) console.log('Updating enrolledCourses') - frappe.call({ - method: "erpnext.www.academy.get_course_enrollments", - args:{ - email: frappe.session.user - } - }).then( r => { - this.enrolledCourses = r.message - }) - if (this.debug) console.log('Updated State', this.enrolledCourses) - }, - - updateCompletedCourses (){ - if (this.debug) console.log('Updating States') - frappe.call({ - method: "erpnext.www.academy.get_completed_courses", - 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]) - } - } - }) - if (this.debug) console.log('Updated State', this.completedCourses) - }, - - checkLogin (){ - if(frappe.session.user === "Guest"){ - if (this.debug) console.log('No Session') - this.isLogin = false - } - else { - if (this.debug) console.log('Current User: ', frappe.session.user) - this.isLogin = true - } - return this.isLogin - }, - - updateState (){ - this.updateCompletedCourses() - this.updateEnrolledPrograms() - this.updateEnrolledCourses() - this.checkLogin() - }, + enrolledCourses: {} } frappe.ready(() => { - window.v = new Vue({ - el: "#academy", + frappe.provide('academy') + // frappe.utils.make_event_emitter(academy); + + academy.store = new Vue({ + data: store, + methods: { + addCompletedCourses (courseName){ + if (academy.debug) console.log('addCompletedCourses triggered with', courseName) + 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 (){ + if (academy.debug) console.log('Updating enrolledPrograms') + academy.call("get_program_enrollments").then(data => { + data.forEach(element => { + this.enrolledPrograms.add(element) + }) + }); + if (academy.debug) console.log('Updated State', this.enrolledPrograms) + }, + + updateEnrolledCourses (){ + if (academy.debug) console.log('Updating enrolledCourses') + frappe.call({ + method: "erpnext.www.academy.get_course_enrollments", + args:{ + email: frappe.session.user + } + }).then( r => { + this.enrolledCourses = r.message + }) + if (academy.debug) console.log('Updated State', this.enrolledCourses) + }, + + updateCompletedCourses (){ + if (academy.debug) console.log('Updating States') + frappe.call({ + method: "erpnext.www.academy.get_completed_courses", + 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]) + } + } + }) + if (academy.debug) console.log('Updated State', this.completedCourses) + }, + + checkLogin (){ + if(frappe.session.user === "Guest"){ + if (academy.debug) console.log('No Session') + this.isLogin = false + } + else { + if (academy.debug) console.log('Current User: ', frappe.session.user) + this.isLogin = true + } + return this.isLogin + }, + + updateState (){ + this.updateCompletedCourses() + this.updateEnrolledPrograms() + this.updateEnrolledCourses() + this.checkLogin() + }, + } + }); + + academy.view = new Vue({ + el: "#academy-app", router: new VueRouter({ routes }), template: "", components: { AcademyRoot }, created: function() { - if(store.checkLogin()){ - store.updateState() - } - } - }); - academy.store = new Vue({ - data: store, - methods: { - checkLogin (){ - if(frappe.session.user === "Guest"){ - if (this.debug) console.log('No Session') - this.isLogin = false - } - else { - if (this.debug) console.log('Current User: ', frappe.session.user) - this.isLogin = true - } - return this.isLogin + if(academy.store.checkLogin()){ + academy.store.updateState() } } }); + + academy.debug = true }) \ No newline at end of file diff --git a/erpnext/public/js/education/academy/call.js b/erpnext/public/js/education/academy/call.js index 108a6e1d36..64f914d69b 100644 --- a/erpnext/public/js/education/academy/call.js +++ b/erpnext/public/js/education/academy/call.js @@ -1,13 +1,15 @@ -frappe.provide('academy'); +frappe.ready(() => { + frappe.provide('academy'); -academy.call = (method, args) => { - const method_path = 'erpnext.www.academy.' + method; - return new Promise((resolve, reject) => { - return frappe.call({ - method: method_path, - args, - }) - .then(r => resolve(r.message)) - .fail(reject) - }); -} \ No newline at end of file + academy.call = (method, args) => { + const method_path = 'erpnext.www.academy.' + method; + return new Promise((resolve, reject) => { + return frappe.call({ + method: method_path, + args, + }) + .then(r => resolve(r.message)) + .fail(reject) + }); + } +}); \ No newline at end of file diff --git a/erpnext/public/js/education/academy/components/AcademyProgramCard.vue b/erpnext/public/js/education/academy/components/AcademyProgramCard.vue index ef3ac0896b..bea2acf825 100644 --- a/erpnext/public/js/education/academy/components/AcademyProgramCard.vue +++ b/erpnext/public/js/education/academy/components/AcademyProgramCard.vue @@ -10,65 +10,61 @@ diff --git a/erpnext/public/js/education/academy/pages/AcademyHome.vue b/erpnext/public/js/education/academy/pages/AcademyHome.vue index 630573a757..e59074567e 100644 --- a/erpnext/public/js/education/academy/pages/AcademyHome.vue +++ b/erpnext/public/js/education/academy/pages/AcademyHome.vue @@ -1,10 +1,10 @@ @@ -18,9 +18,9 @@ export default { name: "AcademyHome", data() { return{ - title: '', - description: '', - featured_programs: [] + portal: {}, + featuredPrograms: [], + // enrolledPrograms: new Set() } }, components: { @@ -28,15 +28,28 @@ export default { AcademyList, AcademyProgramCard, AcademyTopSectionButton - }, - mounted() { - frappe.call("erpnext.www.academy.get_portal_details").then(r => { - this.title = r.message.title, - this.description = r.message.description - }); - frappe.call("erpnext.www.academy.get_featured_programs").then(r => { - this.featured_programs = r.message - }); }, + beforeMount() { + // this.updateEnrolledPrograms().then(data => { + // data.forEach(element => { + // this.enrolledPrograms.add(element) + // }) + // }); + }, + mounted() { + this.getPortalDetails().then(data => this.portal = data); + this.getFeaturedPrograms().then(data => this.featuredPrograms = data); + }, + methods: { + // updateEnrolledPrograms(){ + // return academy.call("get_program_enrollments") + // }, + getPortalDetails() { + return academy.call("get_portal_details") + }, + getFeaturedPrograms() { + return academy.call("get_featured_programs") + } + } }; \ No newline at end of file diff --git a/erpnext/public/js/education/academy/routes.js b/erpnext/public/js/education/academy/routes.js index 51c280d72a..7896b1d94c 100644 --- a/erpnext/public/js/education/academy/routes.js +++ b/erpnext/public/js/education/academy/routes.js @@ -1,6 +1,6 @@ -import AcademyHome from "./academy/pages/AcademyHome.vue"; -import AcademyProgramPage from "./academy/pages/AcademyProgramPage.vue"; -import AcademyCoursePage from "./academy/pages/AcademyCoursePage.vue"; +import AcademyHome from "./pages/AcademyHome.vue"; +import AcademyProgramPage from "./pages/AcademyProgramPage.vue"; +import AcademyCoursePage from "./pages/AcademyCoursePage.vue"; const routes = [ {name: 'home', path: '', component: AcademyHome}, diff --git a/erpnext/www/academy.html b/erpnext/www/academy.html index 9d3cec8a51..f078b3695c 100644 --- a/erpnext/www/academy.html +++ b/erpnext/www/academy.html @@ -3,6 +3,6 @@ {% block title %}{{ heading or "Academy"}}{% endblock %} {% block page_content %} -
+
{% endblock %} \ No newline at end of file