Add Weiter gehts to learning path overview

This commit is contained in:
Lorenz Padberg 2022-08-30 11:52:57 +02:00
parent 0730dc1c7a
commit 508cf4e967
3 changed files with 95 additions and 18 deletions

View File

@ -1,24 +1,75 @@
import * as log from 'loglevel'; import * as log from 'loglevel';
import {defineStore} from 'pinia' import {defineStore} from 'pinia'
import * as _ from 'lodash';
import type {LearningPath, Topic} from '@/types' import type {LearningPath, Topic} from '@/types'
import {itGet} from '@/fetchHelpers'; import {itGet} from '@/fetchHelpers';
import {Circle} from '@/services/circle'; import {Circle} from '@/services/circle';
import learningPathDiagram from "@/components/circle/LearningPathDiagram.vue";
export type LearningPathStoreState = { export type LearningPathStoreState = {
learningPath: LearningPath | undefined; learningPath: LearningPath | undefined;
} }
function getLastCompleted(completionData: any) {
return _.filter(_.orderBy(completionData, ['updated_at'], 'desc'), 'completed')[0]
}
function getFirstLearningContent(lastCopleted, learningPathData) {
const circles = _.filter(learningPathData.children, {'type': 'learnpath.Circle'})
let currentCircle = Circle.fromJson(circles[0])
const currentLearningUnit = currentCircle.flatChildren[0]
let currentLearningSequence = currentLearningUnit.parentLearningSequence
// delete currentCircle.children
// delete currentLearningUnit.children
// delete currentLearningSequence.children
return [currentCircle, currentLearningSequence, currentLearningUnit]
}
function getNextLearningContent(lastCopleted, learningPathData) {
let currentCircle, currentLearningSequence, currentLearningUnit
currentLearningUnit = getFirstLearningContent(lastCopleted, learningPathData)
if (lastCopleted) {
_.forEach(circles, circle => {
currentCircle = circle
debugger
//
// _.forEach(circle.children, learningSequence => {
// currentLearningSequence = learningSequence
// _.forEach(learningSequence.children, learningUnit => {
// currentLearningUnit = learningUnit
// console.log(lastCopleted.page_key, learningUnit.translation_key)
// if (lastCopleted.page_key === learningUnit.translation_key)
// return false
// }
// )
// });
})
}
return currentLearningUnit
}
export const useLearningPathStore = defineStore({ export const useLearningPathStore = defineStore({
id: 'learningPath', id: 'learningPath',
state: () => { state: () => {
return { return {
learningPath: undefined, learningPath: undefined,
} as LearningPathStoreState; } as LearningPathStoreState;
}, },
getters: { getters: {},
},
actions: { actions: {
async loadLearningPath(slug: string, reload = false) { async loadLearningPath(slug: string, reload = false) {
if (this.learningPath && !reload) { if (this.learningPath && !reload) {
@ -30,7 +81,17 @@ export const useLearningPathStore = defineStore({
this.learningPath = learningPathData; this.learningPath = learningPathData;
if (this.learningPath) { if (this.learningPath) {
this.learningPath.lastCompleted = getLastCompleted(completionData)
const nextLearningContent = getNextLearningContent(this.learningPath.lastCompleted, learningPathData)
console.log('nextLearningContent', nextLearningContent)
this.learningPath.nextCircle = nextLearningContent[0]
this.learningPath.nextLearningSequence = nextLearningContent[1]
this.learningPath.nextLearningUnit = nextLearningContent[2]
this.learningPath.topics = []; this.learningPath.topics = [];
this.learningPath.circles = []; this.learningPath.circles = [];

View File

@ -108,6 +108,11 @@ export interface LearningPath extends LearningWagtailPage {
children: LearningPathChild[]; children: LearningPathChild[];
topics: Topic[]; topics: Topic[];
circles: Circle[]; circles: Circle[];
lastCompleted: CircleCompletion;
nextCircle: Circle;
nextLearningSequence: LearningSequence;
nextLearningUnit: LearningContent;
} }
export interface CircleCompletion { export interface CircleCompletion {
@ -122,13 +127,13 @@ export interface CircleCompletion {
json_data: any; json_data: any;
} }
export interface CircleDiagramData { export interface CircleDiagramData {
index: number index: number
title: string title: string
icon: string icon: string
startAngle: number startAngle: number
endAngle: number endAngle: number
arrowStartAngle: number arrowStartAngle: number
arrowEndAngle: number arrowEndAngle: number
done: boolean done: boolean
} }

View File

@ -2,7 +2,7 @@
import * as log from 'loglevel'; import * as log from 'loglevel';
import {onMounted} from 'vue' import {computed, onMounted} from 'vue'
import {useLearningPathStore} from '@/stores/learningPath'; import {useLearningPathStore} from '@/stores/learningPath';
import {useUserStore} from '@/stores/user'; import {useUserStore} from '@/stores/user';
@ -19,9 +19,20 @@ const props = defineProps<{
const learningPathStore = useLearningPathStore(); const learningPathStore = useLearningPathStore();
const userStore = useUserStore(); const userStore = useUserStore();
// const continueRoute = computed(() => {
// if (learningPathStore.learningPath) {
// return"/cirlce/"+learningPathStore.learningPath.nextCircle.slug;
// }
//
// return false;
// })
onMounted(async () => { onMounted(async () => {
log.info('LearningPathView mounted'); log.info('LearningPathView mounted');
await learningPathStore.loadLearningPath(props.learningPathSlug); await learningPathStore.loadLearningPath(props.learningPathSlug);
console.log(learningPathStore)
}); });
</script> </script>
@ -58,14 +69,14 @@ onMounted(async () => {
Du hast bereits drei circles bearbeitet, mach weiter so! Du hast bereits drei circles bearbeitet, mach weiter so!
</p> </p>
</div> </div>
<div class="p-8 flex-1"> <div class="p-8 flex-1" v-if="learningPathStore.learningPath.nextCircle">
Nächster Schirtt Nächster Schirtt
<h3>Analyse: Anwenden</h3>
<router-link class="mt-4 btn-blue" to="/circle/analyse">
Los geht's
</router-link>
</div>
<h3>{{learningPathStore.learningPath.nextCircle.title}}: {{learningPathStore.learningPath.nextLearningSequence.title}}</h3>
<!-- <router-link class="mt-4 btn-blue" v-bind:to="this.continueRoute">-->
Los geht's
<!-- </router-link>-->
</div>
</div> </div>
<div class="topic"></div> <div class="topic"></div>