diff --git a/client/src/components/competences/CompetenceDetail.vue b/client/src/components/competences/CompetenceDetail.vue index a000bab8..e080236a 100644 --- a/client/src/components/competences/CompetenceDetail.vue +++ b/client/src/components/competences/CompetenceDetail.vue @@ -1,10 +1,12 @@ @@ -46,7 +31,9 @@ const calcStatusCount = () => { /> - + -import { default as PerformanceCriteriaRow } from "@/components/competences/PerformanceCriteriaRow.vue"; +import CompetenceProgress from "@/components/competences/CompetenceProgress.vue"; +import PerformanceCriteriaRow from "@/components/competences/PerformanceCriteriaRow.vue"; import { useCompetenceStore } from "@/stores/competence"; import _ from "lodash"; import * as log from "loglevel"; @@ -17,16 +18,27 @@ const failedCriteria = computed(() => { .slice(0, 3); }); +const lastUpdatedCompetences = computed(() => { + if (competenceStore.competenceProfilePage?.children.length) { + return _.orderBy( + competenceStore.competenceProfilePage.children, + [ + (competence) => { + return ( + _.maxBy(competence.children, "completion_status_updated_at") + ?.completion_status_updated_at || "" + ); + }, + ], + ["desc"] + ).slice(0, 3); + } + + return []; +}); + const countStatus = computed(() => { - const grouped = _.groupBy( - competenceStore.flatPerformanceCriteria, - "completion_status" - ); - return { - fail: grouped?.fail?.length || 0, - success: grouped?.success?.length || 0, - unknown: grouped?.unknown?.length || 0, - }; + return competenceStore.calcStatusCount(competenceStore.flatPerformanceCriteria); }); @@ -42,16 +54,18 @@ const countStatus = computed(() => { Letzte verbesserte Kompetenzen - - - - - - - - - - + + + {{ competence.title }} + + + Alle anschauen diff --git a/client/src/stores/competence.ts b/client/src/stores/competence.ts index 5b6cb9e4..0ab2d9c1 100644 --- a/client/src/stores/competence.ts +++ b/client/src/stores/competence.ts @@ -1,6 +1,6 @@ import { itGet } from "@/fetchHelpers"; import { useCompletionStore } from "@/stores/completion"; -import type { CompetenceProfilePage } from "@/types"; +import type { CompetenceProfilePage, PerformanceCriteria } from "@/types"; import _ from "lodash"; import { defineStore } from "pinia"; @@ -37,6 +37,22 @@ export const useCompetenceStore = defineStore({ }, }, actions: { + calcStatusCount(criteria: PerformanceCriteria[]) { + if (criteria) { + const grouped = _.groupBy(criteria, "completion_status"); + return { + fail: grouped?.fail?.length || 0, + success: grouped?.success?.length || 0, + unknown: grouped?.unknown?.length || 0, + }; + } + + return { + success: 0, + fail: 0, + unknown: 0, + }; + }, async loadCompetenceProfilePage(slug: string, reload = false) { if (this.competenceProfilePage && !reload) { await this.parseCompletionData(); @@ -68,8 +84,11 @@ export const useCompetenceStore = defineStore({ ); if (completion) { performanceCriteria.completion_status = completion.completion_status; + performanceCriteria.completion_status_updated_at = + completion.updated_at; } else { performanceCriteria.completion_status = "unknown"; + performanceCriteria.completion_status_updated_at = ""; } }); }); diff --git a/client/src/types.ts b/client/src/types.ts index 64bfc94a..38281960 100644 --- a/client/src/types.ts +++ b/client/src/types.ts @@ -122,6 +122,7 @@ export interface CourseWagtailPage { readonly translation_key: string; readonly frontend_url: string; completion_status: CourseCompletionStatus; + completion_status_updated_at: string; } export interface LearningContent extends CourseWagtailPage {
+ {{ competence.title }} +