Newer
Older
<script setup>
import DeleteButton from "aleksis.core/components/generic/buttons/DeleteButton.vue";
import LessonInformation from "./LessonInformation.vue";
import LessonRelatedObjectChip from "./LessonRelatedObjectChip.vue";
import { gqlPersons } from "./amendLesson.graphql";
import createOrPatchMixin from "aleksis.core/mixins/createOrPatchMixin.js";
</script>
<template>
<v-card class="my-2 full-width">
<!-- flex-md-row zeile ab medium -->
<!-- align-stretch - stretch full-width -->
<div
class="full-width d-flex flex-md-row flex-column align-center justify-space-between"
>
<lesson-information
class="flex-grow-1"
:lesson="$attrs['amended-lesson']"
/>
<v-autocomplete
v-model="teachers"
multiple
chips
deletable-chips
:items="amendableTeachers"
item-text="fullName"
item-value="id"
class="flex-grow-1 flex-shrink-0 mx-2"
@input="save"
>
<template #prepend-inner>
<v-chip
v-for="teacher in teachersWithStatus(
$attrs['amended-lesson'],
).filter((t) => t.status === 'removed')"
class="text-decoration-line-through text--secondary mb-2"
>{{ teacher.fullName }}</v-chip
>
</template>
</v-autocomplete>
<delete-button
class="flex-grow-1 mx-2"
color="red white--text"
outlined
@click="toggleCancel"
>{{
$attrs["amended-lesson"].cancelled
? $t("chronos.amend_lesson.overview.cancel.decancel")
: $t("chronos.amend_lesson.overview.cancel.cancel")
}}</delete-button
>
<!--<v-card-actions>-->
<!-- <v-spacer/>-->
<!-- <cancel-button @click="$emit('close')" :disabled="loading" />-->
<!-- <save-button-->
<!-- @click="save"-->
<!-- :loading="loading"-->
<!-- />-->
<!--</v-card-actions>-->
</v-card>
</template>
<script>
//import SaveButton from "aleksis.core/components/generic/buttons/SaveButton.vue";
//import CancelButton from "aleksis.core/components/generic/buttons/CancelButton.vue";
//import CancelButton from "aleksis.core/components/generic/buttons/CancelButton.vue";
//import { createOrUpdateDocumentations } from "../coursebook.graphql";
export default {
name: "AmendedLessonCard",
emits: ["open", "close"],
mixins: [createOrPatchMixin],
data() {
return {
loading: false,
teachers: [],
};
},
methods: {
teachersWithStatus(lesson) {
let oldIds = lesson.realAmends.teachers.map((teacher) => teacher.id);
let newIds = lesson.teachers.map((teacher) => teacher.id);
let teachersWithStatus = lesson.realAmends.teachers
.concat(lesson.teachers)
.map((teacher) => {
let status = "regular";
if (newIds.includes(teacher.id) && !oldIds.includes(teacher.id)) {
status = "new";
} else if (
!newIds.includes(teacher.id) &&
oldIds.includes(teacher.id)
) {
status = "removed";
}
return { ...teacher, status: status };
});
return teachersWithStatus;
},
save() {
this.createOrPatch([
{
id: this.$attrs["amended-lesson"].id,
teachers: this.teachers,
},
]);
this.createOrPatch([
{
id: this.$attrs["amended-lesson"].id,
cancelled: !this.$attrs["amended-lesson"].cancelled,
},
]);
},
},
apollo: {
amendableTeachers: gqlPersons,
},
mounted() {
this.teachers = this.$attrs["amended-lesson"].teachers.map(
(teacher) => teacher.id,
);