Newer
Older
import SubstitutionCard from "./substitutions/SubstitutionCard.vue";
import InfiniteScrollingDateSortedCRUDIterator from "aleksis.core/components/generic/InfiniteScrollingDateSortedCRUDIterator.vue";
import SubjectChip from "aleksis.apps.cursus/components/SubjectChip.vue";
import {
amendedLessonsFromAbsences,
createOrUpdateSubstitutions,
} from "./amendLesson.graphql";
<infinite-scrolling-date-sorted-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-search="true"
:enable-create="false"
:show-create="false"
:enable-delete="false"
:enable-edit="true"
:elevated="false"
:force-model-item-update="true"
>
<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"
<v-switch
:loading="$apollo.queries.groups.loading"
:label="$t('chronos.substitutions.overview.filter.missing')"
v-model="incomplete"
dense
inset
hide-details
class="ml-6"
/>
<v-alert type="info" outlined dense class="full-width">
<v-row align="center" no-gutters>
<v-col class="grow">
{{ $t("chronos.substitutions.overview.info_alert.text") }}
</v-col>
<v-spacer></v-spacer>
<v-col class="shrink">
<v-btn
color="info"
outlined
small
:to="{ name: 'kolego.absences' }"
>
{{ $t("chronos.substitutions.overview.info_alert.button") }}
</v-btn>
</v-col>
</v-row>
</v-alert>
</template>
<template #item="{ item, lastQuery }">
<substitution-card
:substitution="item"
:affected-query="lastQuery"
:is-create="false"
:gql-patch-mutation="gqlPatchMutation"
/>
</template>
<template #itemLoader>
<v-card class="my-2 full-width">
<div class="full-width d-flex flex-column align-stretch flex-md-row">
<v-card-text>
<v-skeleton-loader
type="avatar, heading, chip"
class="d-flex full-width align-center gap"
height="100%"
/>
</v-card-text>
<v-card-text>
<v-skeleton-loader
type="heading"
class="d-flex full-width align-center gap"
height="100%"
/>
</v-card-text>
<v-card-text>
<v-skeleton-loader
type="button"
class="d-flex full-width align-center justify-end gap"
height="100%"
/>
</v-card-text>
</div>
</v-card>
</template>
</infinite-scrolling-date-sorted-c-r-u-d-iterator>
name: "SubstitutionOverview",
props: {
objId: {
type: [Number, String],
required: false,
default: null,
},
data() {
return {
gqlQuery: amendedLessonsFromAbsences,
gqlPatchMutation: createOrUpdateSubstitutions,
};
},
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,
},
},
computed: {
gqlQueryArgs() {
return {
objId: this.objId ? Number(this.objId) : null,
return this.groups.find((o) => o.id === this.objId);
},
},
apollo: {