From 508cf4e96754bf802373680c8566c33b68b18fd2 Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Tue, 30 Aug 2022 11:52:57 +0200 Subject: [PATCH] Add Weiter gehts to learning path overview --- client/src/stores/learningPath.ts | 65 ++++++++++++++++++++++++++- client/src/types.ts | 23 ++++++---- client/src/views/LearningPathView.vue | 25 ++++++++--- 3 files changed, 95 insertions(+), 18 deletions(-) diff --git a/client/src/stores/learningPath.ts b/client/src/stores/learningPath.ts index 8759565f..e2f605c7 100644 --- a/client/src/stores/learningPath.ts +++ b/client/src/stores/learningPath.ts @@ -1,24 +1,75 @@ import * as log from 'loglevel'; import {defineStore} from 'pinia' +import * as _ from 'lodash'; import type {LearningPath, Topic} from '@/types' import {itGet} from '@/fetchHelpers'; import {Circle} from '@/services/circle'; +import learningPathDiagram from "@/components/circle/LearningPathDiagram.vue"; export type LearningPathStoreState = { 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({ id: 'learningPath', state: () => { return { learningPath: undefined, + } as LearningPathStoreState; }, - getters: { - }, + getters: {}, actions: { async loadLearningPath(slug: string, reload = false) { if (this.learningPath && !reload) { @@ -30,7 +81,17 @@ export const useLearningPathStore = defineStore({ this.learningPath = learningPathData; + 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.circles = []; diff --git a/client/src/types.ts b/client/src/types.ts index f32bea45..3a8ff19b 100644 --- a/client/src/types.ts +++ b/client/src/types.ts @@ -108,6 +108,11 @@ export interface LearningPath extends LearningWagtailPage { children: LearningPathChild[]; topics: Topic[]; circles: Circle[]; + lastCompleted: CircleCompletion; + nextCircle: Circle; + nextLearningSequence: LearningSequence; + nextLearningUnit: LearningContent; + } export interface CircleCompletion { @@ -122,13 +127,13 @@ export interface CircleCompletion { json_data: any; } -export interface CircleDiagramData { - index: number - title: string - icon: string - startAngle: number - endAngle: number - arrowStartAngle: number - arrowEndAngle: number - done: boolean +export interface CircleDiagramData { + index: number + title: string + icon: string + startAngle: number + endAngle: number + arrowStartAngle: number + arrowEndAngle: number + done: boolean } diff --git a/client/src/views/LearningPathView.vue b/client/src/views/LearningPathView.vue index 0d1da953..a4407dfc 100644 --- a/client/src/views/LearningPathView.vue +++ b/client/src/views/LearningPathView.vue @@ -2,7 +2,7 @@ import * as log from 'loglevel'; -import {onMounted} from 'vue' +import {computed, onMounted} from 'vue' import {useLearningPathStore} from '@/stores/learningPath'; import {useUserStore} from '@/stores/user'; @@ -19,9 +19,20 @@ const props = defineProps<{ const learningPathStore = useLearningPathStore(); const userStore = useUserStore(); + + +// const continueRoute = computed(() => { +// if (learningPathStore.learningPath) { +// return"/cirlce/"+learningPathStore.learningPath.nextCircle.slug; +// } +// +// return false; +// }) + onMounted(async () => { log.info('LearningPathView mounted'); await learningPathStore.loadLearningPath(props.learningPathSlug); + console.log(learningPathStore) }); @@ -58,14 +69,14 @@ onMounted(async () => { Du hast bereits drei circles bearbeitet, mach weiter so!

-
+
Nächster Schirtt -

Analyse: Anwenden

- - Los geht's - -
+

{{learningPathStore.learningPath.nextCircle.title}}: {{learningPathStore.learningPath.nextLearningSequence.title}}

+ + Los geht's + +