From ab7085e203e9dc8f64870de7e0027cad8634afc2 Mon Sep 17 00:00:00 2001
From: Julian Leucker <leuckerj@gmail.com>
Date: Mon, 9 Dec 2024 16:44:46 +0100
Subject: [PATCH] Create component to delete personal notes

---
 .../DeleteExtraMarkPersonalNote.vue           | 70 +++++++++++++++++++
 .../statistics/StatisticsForPersonPage.vue    | 19 +++--
 2 files changed, 82 insertions(+), 7 deletions(-)
 create mode 100644 aleksis/apps/alsijil/frontend/components/coursebook/personal_notes/DeleteExtraMarkPersonalNote.vue

diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/personal_notes/DeleteExtraMarkPersonalNote.vue b/aleksis/apps/alsijil/frontend/components/coursebook/personal_notes/DeleteExtraMarkPersonalNote.vue
new file mode 100644
index 000000000..7666c60f4
--- /dev/null
+++ b/aleksis/apps/alsijil/frontend/components/coursebook/personal_notes/DeleteExtraMarkPersonalNote.vue
@@ -0,0 +1,70 @@
+<script>
+import { deletePersonalNotes } from "./personal_notes.graphql";
+import ConfirmDialog from "aleksis.core/components/generic/dialogs/ConfirmDialog.vue";
+import mutateMixin from "aleksis.core/mixins/mutateMixin.js";
+import personalNoteRelatedMixin from "./personalNoteRelatedMixin";
+
+export default {
+  name: "DeleteAssignedExtraMark",
+  components: {
+    ConfirmDialog,
+  },
+  mixins: [mutateMixin, personalNoteRelatedMixin],
+  props: {
+    personalNote: {
+      type: Object,
+      required: true,
+    },
+    person: {
+      type: Object,
+      required: true,
+    },
+  },
+  data() {
+    return {
+      showDeleteConfirm: false,
+    };
+  },
+  methods: {
+    deleteNote() {
+      this.mutate(
+        deletePersonalNotes,
+        {
+          ids: [this.personalNote.id],
+        },
+        (storedPersonalNotes) => {
+          const index = storedPersonalNotes.findIndex(
+            (n) => n.id === this.personalNote.id,
+          );
+          storedPersonalNotes.splice(index, 1);
+
+          return storedPersonalNotes;
+        },
+      );
+    },
+  },
+};
+</script>
+
+<template>
+  <v-btn color="error" icon @click.prevent.stop="showDeleteConfirm = true">
+    <v-icon color="error">$deleteContent</v-icon>
+    <confirm-dialog
+      v-model="showDeleteConfirm"
+      @confirm="deleteNote"
+      @cancel="showDeleteConfirm = false"
+    >
+      <template #title>
+        {{ $t("alsijil.personal_notes.confirm_delete") }}
+      </template>
+      <template #text>
+        {{
+          $t("alsijil.personal_notes.confirm_delete_extra_mark", {
+            extraMark: personalNote.extraMark.name,
+            name: person.firstName || person.fullName,
+          })
+        }}
+      </template>
+    </confirm-dialog>
+  </v-btn>
+</template>
diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/statistics/StatisticsForPersonPage.vue b/aleksis/apps/alsijil/frontend/components/coursebook/statistics/StatisticsForPersonPage.vue
index b82b76b7f..c84bbfc7a 100644
--- a/aleksis/apps/alsijil/frontend/components/coursebook/statistics/StatisticsForPersonPage.vue
+++ b/aleksis/apps/alsijil/frontend/components/coursebook/statistics/StatisticsForPersonPage.vue
@@ -57,14 +57,17 @@
                     <v-btn v-if="showEdit(item)" color="primary" icon>
                       <v-icon> $edit </v-icon>
                     </v-btn>
-                    <v-btn
+                    <delete-assigned-extra-mark
                       v-if="showDelete(item)"
-                      color="error"
-                      icon
-                      @click.prevent.stop
-                    >
-                      <v-icon color="error">$deleteContent</v-icon>
-                    </v-btn>
+                      :personal-note="item"
+                      :participation="item.participation || {}"
+                      :subjects="[]"
+                      :absence-reasons="[]"
+                      :extra-marks="[]"
+                      :affected-query="lastQuery"
+                      :documentation="item.relatedDocumentation"
+                      :person="personName"
+                    />
                   </template>
                   <v-row class="mr-2">
                     <v-col cols="12" md="6" class="pa-0">
@@ -239,10 +242,12 @@ import PersonalNoteChip from "../personal_notes/PersonalNoteChip.vue";
 import TextNote from "../personal_notes/TextNote.vue";
 import UpdateParticipation from "../absences/UpdateParticipation.vue";
 import TardinessChip from "../absences/TardinessChip.vue";
+import DeleteAssignedExtraMark from "../personal_notes/DeleteExtraMarkPersonalNote.vue";
 
 export default {
   name: "StatisticsForPersonPage",
   components: {
+    DeleteAssignedExtraMark,
     TardinessChip,
     UpdateParticipation,
     TextNote,
-- 
GitLab