Skip to content
Snippets Groups Projects
DocumentationAbsences.vue 2.53 KiB
<template>
  <v-card :class="{ 'my-1 full-width': true, 'd-flex flex-column': !compact }">
    <v-card-title v-if="!compact">
      <lesson-information v-bind="documentationPartProps" />
    </v-card-title>

    <v-card-text
      class="full-width main-body"
      :class="{
        vertical: !compact || $vuetify.breakpoint.mobile,
        'pa-2': compact,
      }"
    >
      <lesson-information v-if="compact" v-bind="documentationPartProps" />
      <v-spacer />
      <lesson-notes v-bind="documentationPartProps" />
      <participation-list :include-present="false" class="participation-list" v-bind="documentationPartProps" v-on="selectListeners" />
    </v-card-text>
    <v-spacer />
    <v-divider />
    <v-card-actions v-if="!compact">
      <v-spacer />
      <cancel-button
        v-if="documentation.canEdit"
        @click="$emit('close')"
        :disabled="loading"
      />
      <save-button
        v-if="documentation.canEdit"
        @click="save"
        :loading="loading"
      />
      <cancel-button
        v-if="!documentation.canEdit"
        i18n-key="actions.close"
        @click="$emit('close')"
      />
    </v-card-actions>
  </v-card>
</template>

<script>
import ParticipationList from "./ParticipationList.vue";
import LessonInformation from "../documentation/LessonInformation.vue";
import LessonNotes from "../documentation/LessonNotes.vue";

import SaveButton from "aleksis.core/components/generic/buttons/SaveButton.vue";
import CancelButton from "aleksis.core/components/generic/buttons/CancelButton.vue";

import { createOrUpdateDocumentations } from "../coursebook.graphql";

import selectParticipationMixin from "./selectParticipationMixin.js";
import documentationPartMixin from "../documentation/documentationPartMixin";

export default {
  name: "DocumentationAbsences",
  components: {
    ParticipationList,
    LessonInformation,
    LessonNotes,
    SaveButton,
    CancelButton,
  },
  emits: ["open", "close"],
  mixins: [documentationPartMixin, selectParticipationMixin],
  data() {
    return {
      loading: false,
      documentationsMutation: createOrUpdateDocumentations,
      selectedParticipations: [],
    };
  },
  methods: {
    save() {
      this.$refs.summary.save();
      this.$emit("close");
    },
  },
};
</script>

<style scoped>
.main-body {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: min-content min-content;
  gap: 1em;
}
.participation-list {
  grid-column-start: 1;
  grid-column-end: span 3;
  grid-row-start: 2;
}
.vertical {
  grid-template-columns: 1fr;
}
</style>