diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsTrigger.vue b/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsTrigger.vue new file mode 100644 index 0000000000000000000000000000000000000000..f46cb30d0929a61d95e2c9f6b11204e5132b70f3 --- /dev/null +++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsTrigger.vue @@ -0,0 +1,53 @@ +<script> +import { DateTime } from "luxon"; +import ManageStudentsDialog from "./ManageStudentsDialog.vue"; +import documentationPartMixin from "../documentation/documentationPartMixin"; + +export default { + name: "ManageStudentsTrigger", + components: { ManageStudentsDialog }, + mixins: [documentationPartMixin], + data() { + return { + canOpenParticipation: false, + timeout: null, + }; + }, + mounted() { + const lessonStart = DateTime.fromISO(this.documentation.datetimeStart); + const now = DateTime.now(); + this.canOpenParticipation = now >= lessonStart; + + if (!this.canOpenParticipation) { + this.timeout = setTimeout( + () => (this.canOpenParticipation = true), + lessonStart.diff(now).toObject().milliseconds, + ); + } + }, + beforeDestroy() { + if (this.timeout) { + clearTimeout(this.timeout); + } + }, +}; +</script> + +<template> + <manage-students-dialog v-bind="documentationPartProps"> + <template #activator="{ attrs, on }"> + <v-chip + dense + color="primary" + outlined + :disabled="!canOpenParticipation" + v-bind="attrs" + v-on="on" + > + <v-icon>$edit</v-icon> + </v-chip> + </template> + </manage-students-dialog> +</template> + +<style scoped></style> diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonNotes.vue b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonNotes.vue index 9206dd398e426aef0694e18a58e242a1539b1884..d593cb8660203ccc4729a4b08d825c34f9698d3a 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonNotes.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonNotes.vue @@ -28,23 +28,17 @@ Hausaufgaben vergessen </v-chip> <!-- eslint-enable @intlify/vue-i18n/no-raw-text --> - <manage-students-dialog v-bind="documentationPartProps"> - <template #activator="{ attrs, on }"> - <v-chip dense color="primary" outlined v-bind="attrs" v-on="on"> - <v-icon>$edit</v-icon> - </v-chip> - </template> - </manage-students-dialog> + <manage-students-trigger v-bind="documentationPartProps" /> </div> </template> <script> import documentationPartMixin from "./documentationPartMixin"; -import ManageStudentsDialog from "../absences/ManageStudentsDialog.vue"; +import ManageStudentsTrigger from "../absences/ManageStudentsTrigger.vue"; export default { name: "LessonNotes", - components: {ManageStudentsDialog}, + components: { ManageStudentsTrigger }, mixins: [documentationPartMixin], }; </script>