Added academy namespace
This commit is contained in:
parent
892b0c23fc
commit
708756ed40
@ -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: "<academy-root/>",
|
||||
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
|
||||
})
|
@ -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)
|
||||
});
|
||||
}
|
||||
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)
|
||||
});
|
||||
}
|
||||
});
|
@ -10,65 +10,61 @@
|
||||
</div>
|
||||
<div class='card-footer text-right'>
|
||||
<!-- <a class='video-btn btn btn-secondary btn-sm' data-toggle="modal" data-src=" insert jinja stuff here " data-target="#myModal">Watch Intro</a> -->
|
||||
<a v-if="this.$root.$data.isLogin" class='btn btn-secondary btn-sm' @click="primaryAction()">{{ buttonName }}</a>
|
||||
<a-button
|
||||
v-if="enrolled"
|
||||
type="primary"
|
||||
size="sm"
|
||||
:route="programPageRoute"
|
||||
>
|
||||
{{ buttonName }}
|
||||
</a-button>
|
||||
<a v-else-if="isLogin" class='btn btn-secondary btn-sm' @click="enroll()">Enroll</a>
|
||||
<a v-else class='btn btn-secondary btn-sm' href="/login#signup">Sign Up</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import AButton from './Button.vue';
|
||||
export default {
|
||||
props: ['program_code'],
|
||||
props: ['program', 'enrolled'],
|
||||
name: "AcademyProgramCard",
|
||||
data() {
|
||||
return {
|
||||
program: ''
|
||||
isLogin: academy.store.isLogin
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
frappe.call({
|
||||
method: "erpnext.www.academy.get_program_details",
|
||||
args: {
|
||||
program_name: this.program_code
|
||||
}
|
||||
}).then(r => {
|
||||
this.program = r.message
|
||||
})
|
||||
created() {
|
||||
},
|
||||
methods: {
|
||||
primaryAction(){
|
||||
if(this.$root.$data.isLogin){
|
||||
if(this.$root.$data.checkProgramEnrollment(this.program_code)){
|
||||
this.$router.push('/Program/' + program.name)
|
||||
}
|
||||
else {
|
||||
this.enroll()
|
||||
}
|
||||
}
|
||||
},
|
||||
enroll() {
|
||||
frappe.call({
|
||||
method: "erpnext.www.academy.enroll_in_program",
|
||||
args:{
|
||||
program_name: this.program_code,
|
||||
student_email_id: frappe.session.user
|
||||
}
|
||||
})
|
||||
this.$root.$data.enrolledPrograms.add(this.program_code)
|
||||
this.$root.$data.updateEnrolledPrograms()
|
||||
academy.call('enroll_in_program', {
|
||||
program_name: this.program.name,
|
||||
}).then(
|
||||
academy.store.enrolledPrograms.add(this.program.name),
|
||||
academy.store.updateEnrolledPrograms(),
|
||||
this.router.push('Program/' + this.program.name)
|
||||
)
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
buttonName() {
|
||||
if(this.$root.$data.isLogin){
|
||||
if(this.$root.$data.checkProgramEnrollment(this.program_code)){
|
||||
if(this.enrolled){
|
||||
return "Start Course"
|
||||
}
|
||||
else {
|
||||
return "Enroll"
|
||||
}
|
||||
}
|
||||
},
|
||||
programPageRoute() {
|
||||
return `Program/${this.program.name}`
|
||||
},
|
||||
isEnrolled() {
|
||||
return academy.store.enrolledPrograms.has(this.program.name)
|
||||
}
|
||||
},
|
||||
components: {
|
||||
AButton
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
@ -1,10 +1,10 @@
|
||||
<template>
|
||||
<div>
|
||||
<AcademyTopSection :title="title" :description="description">
|
||||
<AcademyTopSection :title="portal.title" :description="portal.description">
|
||||
<AcademyTopSectionButton/>
|
||||
</AcademyTopSection>
|
||||
<AcademyList :title="'Featured Programs'" :description="'Master ERPNext'">
|
||||
<AcademyProgramCard v-for="program in featured_programs" :key="program.name" :program_code="program"/>
|
||||
<AcademyProgramCard v-for="item in featuredPrograms" :key="item.program.name" :program="item.program" :enrolled="item.is_enrolled"/>
|
||||
</AcademyList>
|
||||
</div>
|
||||
</template>
|
||||
@ -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")
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
@ -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},
|
||||
|
@ -3,6 +3,6 @@
|
||||
{% block title %}{{ heading or "Academy"}}{% endblock %}
|
||||
|
||||
{% block page_content %}
|
||||
<div id="academy"></div>
|
||||
<div id="academy-app"></div>
|
||||
<script type="text/javascript" src="/assets/js/academy.min.js"></script>
|
||||
{% endblock %}
|
Loading…
x
Reference in New Issue
Block a user