Newer
Older
import SubstitutionDay from "./substitutions/SubstitutionDay.vue";
import CRUDIterator from "aleksis.core/components/generic/CRUDIterator.vue";

Hangzhi Yu
committed
import DateSelectFooter from "aleksis.core/components/generic/DateSelectFooter.vue";
import SubjectChip from "aleksis.apps.cursus/components/SubjectChip.vue";
import {
amendedLessonsFromAbsences,
groupsByOwner,
} from "./amendLesson.graphql";

Hangzhi Yu
committed
import dateSortedIteratorMixin from "../mixins/dateSortedIteratorMixin.js";
</script>
<template>
<c-r-u-d-iterator
:gql-query="gqlQuery"
:gql-additional-query-args="gqlQueryArgs"
:gql-patch-mutation="gqlPatchMutation"
:get-patch-data="gqlGetPatchData"
i18n-key="chronos.substitutions.overview"
:enable-create="false"
:show-create="false"
:enable-delete="false"
:enable-edit="true"
:force-model-item-update="true"
@lastQuery="lastQuery = $event"
fixed-header
disable-pagination
hide-default-footer
use-deep-search
<template #additionalActions="{ attrs, on }">
<v-autocomplete
:items="groups"
item-text="name"
clearable
return-object
filled
dense
hide-details
:placeholder="$t('chronos.substitutions.overview.filter.groups')"
:loading="$apollo.queries.groups.loading"
:value="currentObj"
@input="changeSelection"
@click:clear="changeSelection"
/>
</template>
<substitution-day

Hangzhi Yu
committed
v-for="{ date, itemsOfDay, first, last } in groupItemsByDay(items)"
v-intersect="{
handler: intersectHandler(date, first, last),
options: {
rootMargin: '-' + topMargin + 'px 0px 0px 0px',
threshold: [0, 1],
},
}"
:date="date"

Hangzhi Yu
committed
:substitutions="itemsOfDay"
:lastQuery="lastQuery"
:focus-on-mount="initDate && initDate.toMillis() === date.toMillis()"
@init="transition"
:key="'day-' + date"
ref="days"

Hangzhi Yu
committed
<date-select-footer
:value="currentDate"
@input="gotoDate"
@prev="gotoPrev"
@next="gotoNext"
</template>
</c-r-u-d-iterator>
</template>
<script>
name: "SubstitutionOverview",

Hangzhi Yu
committed
mixins: [dateSortedIteratorMixin],
props: {
objId: {
type: [Number, String],
required: false,
default: null,
},
data() {
return {
gqlQuery: amendedLessonsFromAbsences,
gqlPatchMutation: patchAmendLessonsWithAmends,
groups: [],
};
},
methods: {
gqlGetPatchData(item) {
return { id: item.id, teachers: item.teachers };
},
changeSelection(selection) {
this.$router.push({

Hangzhi Yu
committed
name: "chronos.substitutionOverview",
params: {
objId: selection.id,
},

Hangzhi Yu
committed
hash: this.$route.hash,

Hangzhi Yu
committed
this.resetDate();
},
},
computed: {
gqlQueryArgs() {
return {
objId: this.objId ? Number(this.objId) : null,
dateStart: this.dateStart,
dateEnd: this.dateEnd,
};
},
currentObj() {
return this.groups.find((o) => o.id === this.objId);
},
},
apollo: {
groups: groupsByOwner,
},
};