From ec09021afe12728e1cb61d209ae49621063f16f4 Mon Sep 17 00:00:00 2001
From: Julian Leucker <leuckerj@gmail.com>
Date: Fri, 23 Aug 2024 14:07:59 +0200
Subject: [PATCH] Migrate markAsAbsentDay logic to sendToServer hooks

---
 .../absences/ManageStudentsDialog.vue         | 65 ++++---------------
 1 file changed, 13 insertions(+), 52 deletions(-)

diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsDialog.vue b/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsDialog.vue
index 99b7a40c6..38668b1b5 100644
--- a/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsDialog.vue
+++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsDialog.vue
@@ -75,58 +75,6 @@ export default {
     },
   },
   methods: {
-    sendToServer(participations, field, value) {
-      let fieldValue;
-
-      if (field === "absenceReason") {
-        fieldValue = {
-          absenceReason: value === "present" ? null : value,
-        };
-      } else if (field === "tardiness") {
-        fieldValue = {
-          tardiness: value,
-        };
-      } else {
-        console.error(`Wrong field '${field}' for sendToServer`);
-        return;
-      }
-
-      this.markAsAbsentDay.showAlert = false;
-      this.markAsAbsentDay.participationIDs = [];
-
-      this.mutate(
-        updateParticipationStatuses,
-        {
-          input: participations.map((participation) => ({
-            id: participation.id,
-            ...fieldValue,
-          })),
-        },
-        (storedDocumentations, incomingStatuses) => {
-          const documentation = storedDocumentations.find(
-            (doc) => doc.id === this.documentation.id,
-          );
-
-          incomingStatuses.forEach((newStatus) => {
-            const participationStatus = documentation.participations.find(
-              (part) => part.id === newStatus.id,
-            );
-            participationStatus.absenceReason = newStatus.absenceReason;
-            participationStatus.tardiness = newStatus.tardiness;
-            participationStatus.isOptimistic = newStatus.isOptimistic;
-          });
-
-          this.markAsAbsentDay.reason = incomingStatuses[0].absenceReason?.name;
-          this.markAsAbsentDay.num = incomingStatuses.length;
-
-          return storedDocumentations;
-        },
-      );
-
-      if (field === "absenceReason" && value !== "present") {
-        this.$once("save", this.activateFullDayDialog);
-      }
-    },
     handleMultipleAction(field, id) {
       this.loadSelected = true;
       this.sendToServer(this.selected, field, id);
@@ -152,6 +100,19 @@ export default {
       this.markAsAbsentDay.loading = false;
       this.markAsAbsentDay.showAlert = true;
     },
+    beforeSendToServer() {
+      this.markAsAbsentDay.showAlert = false;
+      this.markAsAbsentDay.participationIDs = [];
+    },
+    duringUpdateSendToServer(_participations, _field, _value, incomingStatuses) {
+      this.markAsAbsentDay.reason = incomingStatuses[0].absenceReason?.name;
+      this.markAsAbsentDay.num = incomingStatuses.length;
+    },
+    afterSendToServer(_participations, field, value) {
+      if (field === "absenceReason" && value !== "present") {
+        this.$once("save", this.activateFullDayDialog);
+      }
+    },
     markAsAbsentDayClick() {
       this.markAsAbsentDay.loading = true;
 
-- 
GitLab