From 45ff7bf7baa689290818d97451542c3e7cb0ed7d Mon Sep 17 00:00:00 2001
From: Julian Leucker <leuckerj@gmail.com>
Date: Thu, 2 May 2024 19:37:37 +0200
Subject: [PATCH] Move trigger button for ManageStudentsDialog to separate
 component

---
 .../absences/ManageStudentsTrigger.vue        | 53 +++++++++++++++++++
 .../coursebook/documentation/LessonNotes.vue  | 12 ++---
 2 files changed, 56 insertions(+), 9 deletions(-)
 create mode 100644 aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsTrigger.vue

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 000000000..f46cb30d0
--- /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 9206dd398..d593cb866 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>
-- 
GitLab