Refactor competence main view

This commit is contained in:
Daniel Egger 2022-10-07 16:32:07 +02:00
parent f4dafef005
commit 6f491ef661
4 changed files with 61 additions and 40 deletions

View File

@ -1,10 +1,12 @@
<script setup lang="ts"> <script setup lang="ts">
import ComptenceProgress from "@/components/competences/CompetenceProgress.vue"; import ComptenceProgress from "@/components/competences/CompetenceProgress.vue";
import PerformanceCriteriaRow from "@/components/competences/PerformanceCriteriaRow.vue"; import PerformanceCriteriaRow from "@/components/competences/PerformanceCriteriaRow.vue";
import { useCompetenceStore } from "@/stores/competence";
import type { CompetencePage } from "@/types"; import type { CompetencePage } from "@/types";
import _ from "lodash";
import { ref } from "vue"; import { ref } from "vue";
const competenceStore = useCompetenceStore();
const props = defineProps<{ const props = defineProps<{
competence: CompetencePage; competence: CompetencePage;
}>(); }>();
@ -14,23 +16,6 @@ const isOpen = ref(false);
const togglePerformanceCriteria = () => { const togglePerformanceCriteria = () => {
isOpen.value = !isOpen.value; isOpen.value = !isOpen.value;
}; };
const calcStatusCount = () => {
if (props.competence) {
const grouped = _.groupBy(props.competence.children, "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,
};
};
</script> </script>
<template> <template>
@ -46,7 +31,9 @@ const calcStatusCount = () => {
/> />
</button> </button>
</div> </div>
<ComptenceProgress :status-count="calcStatusCount()"></ComptenceProgress> <ComptenceProgress
:status-count="competenceStore.calcStatusCount(competence.children)"
></ComptenceProgress>
</div> </div>
<ul v-if="isOpen"> <ul v-if="isOpen">
<li <li

View File

@ -1,5 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
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 { useCompetenceStore } from "@/stores/competence";
import _ from "lodash"; import _ from "lodash";
import * as log from "loglevel"; import * as log from "loglevel";
@ -17,16 +18,27 @@ const failedCriteria = computed(() => {
.slice(0, 3); .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 countStatus = computed(() => {
const grouped = _.groupBy( return competenceStore.calcStatusCount(competenceStore.flatPerformanceCriteria);
competenceStore.flatPerformanceCriteria,
"completion_status"
);
return {
fail: grouped?.fail?.length || 0,
success: grouped?.success?.length || 0,
unknown: grouped?.unknown?.length || 0,
};
}); });
</script> </script>
@ -42,16 +54,18 @@ const countStatus = computed(() => {
<div> <div>
<h3 class="pb-4 border-b border-gray-500">Letzte verbesserte Kompetenzen</h3> <h3 class="pb-4 border-b border-gray-500">Letzte verbesserte Kompetenzen</h3>
<ul> <ul>
<!-- <li--> <li
<!-- v-for="competence in lastCompetences"--> v-for="competence in lastUpdatedCompetences"
<!-- :key="competence.description"--> :key="competence.id"
<!-- class="py-4 flex flex-col lg:flex-row lg:items-center border-b border-gray-500 last:mb-8"--> class="py-4 flex flex-col lg:flex-row lg:items-center border-b border-gray-500 last:mb-8"
<!-- >--> >
<!-- <p class="mb-4 lg:mb-0 lg:w-1/4 inline-block lg:mr-5">--> <p class="mb-4 lg:mb-0 lg:w-1/4 inline-block lg:mr-5">
<!-- {{ competence.description }}--> {{ competence.title }}
<!-- </p>--> </p>
<!-- <ComptenceProgress :total="7" :done="3" :open="2"></ComptenceProgress>--> <CompetenceProgress
<!-- </li>--> :status-count="competenceStore.calcStatusCount(competence.children)"
></CompetenceProgress>
</li>
</ul> </ul>
<router-link to="/mediacenter/handlungsfeldlist" class="flex items-center"> <router-link to="/mediacenter/handlungsfeldlist" class="flex items-center">
<span>Alle anschauen</span> <span>Alle anschauen</span>

View File

@ -1,6 +1,6 @@
import { itGet } from "@/fetchHelpers"; import { itGet } from "@/fetchHelpers";
import { useCompletionStore } from "@/stores/completion"; import { useCompletionStore } from "@/stores/completion";
import type { CompetenceProfilePage } from "@/types"; import type { CompetenceProfilePage, PerformanceCriteria } from "@/types";
import _ from "lodash"; import _ from "lodash";
import { defineStore } from "pinia"; import { defineStore } from "pinia";
@ -37,6 +37,22 @@ export const useCompetenceStore = defineStore({
}, },
}, },
actions: { 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) { async loadCompetenceProfilePage(slug: string, reload = false) {
if (this.competenceProfilePage && !reload) { if (this.competenceProfilePage && !reload) {
await this.parseCompletionData(); await this.parseCompletionData();
@ -68,8 +84,11 @@ export const useCompetenceStore = defineStore({
); );
if (completion) { if (completion) {
performanceCriteria.completion_status = completion.completion_status; performanceCriteria.completion_status = completion.completion_status;
performanceCriteria.completion_status_updated_at =
completion.updated_at;
} else { } else {
performanceCriteria.completion_status = "unknown"; performanceCriteria.completion_status = "unknown";
performanceCriteria.completion_status_updated_at = "";
} }
}); });
}); });

View File

@ -122,6 +122,7 @@ export interface CourseWagtailPage {
readonly translation_key: string; readonly translation_key: string;
readonly frontend_url: string; readonly frontend_url: string;
completion_status: CourseCompletionStatus; completion_status: CourseCompletionStatus;
completion_status_updated_at: string;
} }
export interface LearningContent extends CourseWagtailPage { export interface LearningContent extends CourseWagtailPage {