Skip to content
Snippets Groups Projects
Commit 1b6eefa8 authored by permcu's avatar permcu
Browse files

Begin adapting timetable management frontend to courseBundles query

parent 77cb19b1
No related branches found
No related tags found
1 merge request!50Resolve "Implement bundled courses/lessons"
<script> <script>
import { defineComponent } from "vue"; import { defineComponent } from "vue";
import { import {
timeboundCourses, courseBundles,
createLessons, createLessons,
deleteLessons, deleteLessons,
gqlGroups, gqlGroups,
...@@ -166,12 +166,13 @@ export default defineComponent({ ...@@ -166,12 +166,13 @@ export default defineComponent({
return !this.internalTimeGrid; return !this.internalTimeGrid;
}, },
}, },
timeboundCourses: { courseBundles: {
query: timeboundCourses, query: courseBundles,
variables() { variables() {
return { return {
timeGrid: this.internalTimeGrid.id,
group: this.selectedGroup.id, group: this.selectedGroup.id,
validityRange: this.internalTimeGrid.validityRange.id,
}; };
}, },
skip() { skip() {
...@@ -179,8 +180,8 @@ export default defineComponent({ ...@@ -179,8 +180,8 @@ export default defineComponent({
}, },
result({ data }) { result({ data }) {
this.lessonQuotaTotal = this.lessonQuotaTotal =
data && data.timeboundCourses data && data.courseBundles
? data.timeboundCourses.reduce( ? data.courseBundles.reduce(
(accumulator, course) => accumulator + course.lessonQuota, (accumulator, course) => accumulator + course.lessonQuota,
0, 0,
) )
...@@ -281,21 +282,23 @@ export default defineComponent({ ...@@ -281,21 +282,23 @@ export default defineComponent({
this.$apollo.queries.groups.loading this.$apollo.queries.groups.loading
); );
}, },
griddedTimeboundCourses() { griddedCourseBundles() {
return this.timeboundCourses return this.courseBundles
? this.timeboundCourses.map((tc) => ({ ? this.courseBundles.map((bundle) => ({
x: "0", x: "0",
y: "0", y: "0",
w: 1, w: 1,
h: 1, h: 1,
key: "course-" + tc.course.id, key: "course-bundle-" + bundle.id,
data: { data: {
...tc.course, // TODO: A uniform interface between courseBundles and lessonBundles
teachers: tc.teachers, ...bundle,
lessonQuota: tc.lessonQuota, // TODO: lessonQuota: is used per bundle (smallest from courses?)
lessonsUsed: this.lessonsUsed[tc.course.id] || 0, // TODO: Adapt lessonsUsed key everywhere else
lessonsUsed: this.lessonsUsed[bundle.id] || 0,
lessonRatio: lessonRatio:
(this.lessonsUsed[tc.course.id] || 0) / tc.lessonQuota, // Again quota TODO
(this.lessonsUsed[bundle.id] || 0) / bundle.lessonQuota,
}, },
})) }))
: []; : [];
...@@ -375,7 +378,7 @@ export default defineComponent({ ...@@ -375,7 +378,7 @@ export default defineComponent({
group: this.selectedGroup.name, group: this.selectedGroup.name,
}), }),
); );
this.$apollo.queries.timeboundCourses.refetch(); this.$apollo.queries.courseBundles.refetch();
this.$apollo.queries.lessons.refetch(); this.$apollo.queries.lessons.refetch();
}, },
internalTimeGrid(newTimeGrid, oldTimeGrid) { internalTimeGrid(newTimeGrid, oldTimeGrid) {
...@@ -486,7 +489,7 @@ export default defineComponent({ ...@@ -486,7 +489,7 @@ export default defineComponent({
"lesrooster.timetable_management.snacks.lesson_move.error", "lesrooster.timetable_management.snacks.lesson_move.error",
); );
}); });
} else if (eventData.originGridId === "timeboundCourses") { } else if (eventData.originGridId === "courseBundles") {
let that = this; let that = this;
const rule = new RRule({ const rule = new RRule({
freq: RRule.WEEKLY, // TODO: Make this configurable freq: RRule.WEEKLY, // TODO: Make this configurable
...@@ -1057,7 +1060,7 @@ export default defineComponent({ ...@@ -1057,7 +1060,7 @@ export default defineComponent({
persistent-hint persistent-hint
/> />
<v-data-iterator <v-data-iterator
:items="griddedTimeboundCourses" :items="griddedCourseBundles"
item-key="key" item-key="key"
:items-per-page="-1" :items-per-page="-1"
single-expand single-expand
...@@ -1070,11 +1073,11 @@ export default defineComponent({ ...@@ -1070,11 +1073,11 @@ export default defineComponent({
:cols="3" :cols="3"
:rows="4" :rows="4"
:value="items" :value="items"
:loading="$apollo.queries.timeboundCourses.loading" :loading="$apollo.queries.courseBundles.loading"
no-highlight no-highlight
context="timetable" context="timetable"
@itemChanged="itemMovedToCourses" @itemChanged="itemMovedToCourses"
grid-id="timeboundCourses" grid-id="courseBundles"
@containerDragStart="handleContainerDrag($event, 'start')" @containerDragStart="handleContainerDrag($event, 'start')"
@containerDragEnd="handleContainerDrag($event, 'end')" @containerDragEnd="handleContainerDrag($event, 'end')"
> >
...@@ -1165,7 +1168,7 @@ export default defineComponent({ ...@@ -1165,7 +1168,7 @@ export default defineComponent({
<template #body> <template #body>
<ul class="text-body-1"> <ul class="text-body-1">
<li v-for="item in itemsToDelete" :key="'delete-' + item.id"> <li v-for="item in itemsToDelete" :key="'delete-' + item.id">
{{ item.subject?.name || item.course.subject.name }} {{ item.subject.name }}
</li> </li>
</ul> </ul>
</template> </template>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment