Files
FHC-Core/public/js/components/Cis/Mylv/Semester.js
T

58 lines
1.5 KiB
JavaScript

import MylvSemesterStudiengang from "./Semester/Studiengang.js";
export default {
name: 'Semester',
components: {
MylvSemesterStudiengang
},
provide() {
return {
studien_semester: Vue.computed(() => this.semester)
}
},
props: {
semester: [String, Number],
lvs: Array
},
computed: {
ready() { return this.lvs !== null; },
studiengaenge() {
return [... new Map(
this.lvs
.map(lv => [
lv.studiengang_kz + '#' + lv.semester,
{
studiengang_kz: lv.studiengang_kz,
bezeichnung: lv.sg_bezeichnung,
sg_bezeichnung_eng: lv.sg_bezeichnung_eng,
kuerzel: lv.studiengang_kuerzel,
semester: lv.semester
}
])
).values()].sort((a, b) => a.bezeichnung.toLowerCase() == b.bezeichnung.toLowerCase() ? a.semester > b.semester : a.bezeichnung.toLowerCase() > b.bezeichnung.toLowerCase());
},
},
methods: {
lvsForStudiengang(studiengang) {
return this.lvs.filter(lv => lv.studiengang_kz == studiengang.studiengang_kz && lv.semester == studiengang.semester);
}
},
template: /*html*/ `
<div class="mylv-semester" v-if="ready">
<mylv-semester-studiengang
v-for="studiengang in studiengaenge"
:key="studiengang.studiengang_kz"
v-bind="studiengang"
:lvs="lvsForStudiengang(studiengang)"
:semesterInfo="$props.semester"
>
<template #averageGrade>
<slot name="averageGrade"></slot>
</template>
</mylv-semester-studiengang>
</div>
<div class="mylv-semester text-center" v-else>
<i class="fa-solid fa-spinner fa-pulse fa-3x"></i>
</div>`
};