Skip to content
Snippets Groups Projects
SubstitutionInformation.vue 2.26 KiB
Newer Older
Hangzhi Yu's avatar
Hangzhi Yu committed
<script setup>
import PersonChip from "aleksis.core/components/person/PersonChip.vue";
import SubjectChip from "aleksis.apps.cursus/components/SubjectChip.vue";

import { DateTime } from "luxon";
</script>

<template>
  <div class="full-width grid">
    <div class="d-flex">
Hangzhi Yu's avatar
Hangzhi Yu committed
      <v-tooltip bottom v-if="substitution.cancelled">
Hangzhi Yu's avatar
Hangzhi Yu committed
        <template #activator="{ on, attrs }">
Hangzhi Yu's avatar
Hangzhi Yu committed
          <v-icon color="error" class="mr-md-4" v-on="on" v-bind="attrs"
Hangzhi Yu's avatar
Hangzhi Yu committed
            >mdi-cancel</v-icon
          >
        </template>
        <span>{{ $t("chronos.event.amend.cancelled") }}</span>
      </v-tooltip>
Hangzhi Yu's avatar
Hangzhi Yu committed
      <div class="text-right d-flex flex-column fit-content">
Hangzhi Yu's avatar
Hangzhi Yu committed
        <time :datetime="substitution.datetimeStart" class="text-no-wrap">
          {{ $d(toDateTime(substitution.datetimeStart), "shortTime") }}
Hangzhi Yu's avatar
Hangzhi Yu committed
        </time>
Hangzhi Yu's avatar
Hangzhi Yu committed
        <time :datetime="substitution.datetimeEnd" class="text-no-wrap">
          {{ $d(toDateTime(substitution.datetimeEnd), "shortTime") }}
Hangzhi Yu's avatar
Hangzhi Yu committed
        </time>
      </div>
    </div>
Hangzhi Yu's avatar
Hangzhi Yu committed
    <span class="text-subtitle-1 font-weight-medium">
Hangzhi Yu's avatar
Hangzhi Yu committed
      {{ course?.name }}
    </span>
Hangzhi Yu's avatar
Hangzhi Yu committed
    <div class="d-flex align-center flex-wrap gap justify-center">
      <subject-chip v-if="subject" :subject="subject" />
Hangzhi Yu's avatar
Hangzhi Yu committed
    </div>
  </div>
</template>

<script>
export default {
Hangzhi Yu's avatar
Hangzhi Yu committed
  name: "SubstitutionInformation",
Hangzhi Yu's avatar
Hangzhi Yu committed
  props: {
Hangzhi Yu's avatar
Hangzhi Yu committed
    substitution: {
Hangzhi Yu's avatar
Hangzhi Yu committed
      type: Object,
      required: true,
Hangzhi Yu's avatar
Hangzhi Yu committed
    },
Hangzhi Yu's avatar
Hangzhi Yu committed
  },
  methods: {
    toDateTime(dateString) {
      return DateTime.fromISO(dateString);
    },
  },
  computed: {
    subject() {
Hangzhi Yu's avatar
Hangzhi Yu committed
      return this.substitution.subject
        ? this.substitution.subject
        : this.substitution.course?.subject
          ? this.substitution.course.subject
          : this.substitution.amends?.subject
            ? this.substitution.amends.subject
Hangzhi Yu's avatar
Hangzhi Yu committed
            : undefined;
    },
    course() {
Hangzhi Yu's avatar
Hangzhi Yu committed
      return this.substitution.course
        ? this.substitution.course
        : this.substitution.amends?.course
          ? this.substitution.amends.course
Hangzhi Yu's avatar
Hangzhi Yu committed
          : undefined;
    },
Hangzhi Yu's avatar
Hangzhi Yu committed
  },
Hangzhi Yu's avatar
Hangzhi Yu committed
};
</script>

<style scoped>
.grid {
  display: grid;
  align-items: center;
  gap: 1em;
  grid-template-columns: 1fr 1fr 1fr;
  align-content: unset;
}

.grid:last-child {
  justify-self: end;
  justify-content: end;
}

.fit-content {
  width: fit-content;
}

.gap {
  gap: 0.25em;
}
</style>