From c43aa314a3916be3c264d0d4f94f9153151d118f Mon Sep 17 00:00:00 2001
From: Santo Cariotti <santo@dcariotti.me>
Date: Sun, 16 Oct 2022 19:30:29 +0200
Subject: Delete rows from admin cp

---
 pages/admin/reports.vue | 67 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 67 insertions(+)

(limited to 'pages/admin/reports.vue')

diff --git a/pages/admin/reports.vue b/pages/admin/reports.vue
index 7191060..5866335 100644
--- a/pages/admin/reports.vue
+++ b/pages/admin/reports.vue
@@ -1,6 +1,38 @@
 <template lang="pug">
   .mx-auto.w-90p.py-6(class="sm:px-6 lg:px-8 md:max-w-7xl")
     h1.text-3xl.font-bold(class="dark:text-white") Reports
+    .relative.z-10(aria-labelledby="modal-title", role="dialog", aria-modal="true" v-if="boxDeleteReport > 0")
+      .fixed.inset-0.bg-gray-900.bg-opacity-90.transition-opacity
+      .fixed.inset-0.z-10.overflow-y-auto
+        .flex.min-h-full.items-end.justify-center.p-4.text-center(class="sm:items-center sm:p-0")
+          .relative.transform.overflow-hidden.rounded-lg.bg-white.text-left.shadow-xl.transition-all(class="sm:my-8 sm:w-full sm:max-w-lg")
+            .bg-white.px-4.pt-5.pb-4(class="sm:p-6 sm:pb-4")
+              div(class="sm:flex sm:items-start")
+                .mx-auto.flex.h-12.w-12.flex-shrink-0.items-center.justify-center.rounded-full.bg-red-100(class="sm:mx-0 sm:h-10 sm:w-10")
+                  svg.h-6.w-6.text-red-600(xmlns="http://www.w3.org/2000/svg", fill="none", viewbox="0 0 24 24", stroke-width="1.5", stroke="currentColor", aria-hidden="true")
+                    path(stroke-linecap="round", stroke-linejoin="round", d="M12 10.5v3.75m-9.303 3.376C1.83 19.126 2.914 21 4.645 21h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 4.88c-.866-1.501-3.032-1.501-3.898 0L2.697 17.626zM12 17.25h.007v.008H12v-.008z")
+                .mt-3.text-center(class="sm:mt-0 sm:ml-4 sm:text-left")
+                  h3#modal-title.text-lg.font-medium.leading-6.text-gray-900 Are you sure?
+                  .mt-2
+                    p.text-sm.text-gray-500 This action cannot be undone.
+            .bg-gray-50.px-4.py-3(class="sm:flex sm:flex-row-reverse sm:px-6")
+              button.inline-flex.w-full.justify-center.rounded-md.border.border-transparent.bg-red-600.px-4.py-2.text-base.font-medium.text-white.shadow-sm(
+                type="button"
+                :class="{'hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 sm:ml-3 sm:w-auto sm:text-sm': true, 'opacity-25 cursor-default': isLoading}"
+                :disabled="isLoading"
+                :readonly="isLoading"
+                @click="deleteReport"
+              )
+                <svg class="animate-spin -ml-1 mr-3 h-5 w-5 text-white" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" v-if="isLoading">
+                  <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
+                  <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
+                </svg>
+                | Yes, confirm
+              button.mt-3.inline-flex.w-full.justify-center.rounded-md.border.border-gray-300.bg-white.px-4.py-2.text-base.font-medium.text-gray-700.shadow-sm(
+                type="button"
+                class="hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm"
+                @click="boxDeleteReport = 0"
+              ) Cancel
     .grid.grid-cols-6.mt-3
       div
         admin-sidebar
@@ -19,6 +51,7 @@
           :keys="['id', 'model_id', 'created', 'updated', 'user', 'resolved', 'note', 'admin_note']"
           :fields="warnings"
           :deleterow="true"
+          :delete="openModal"
         )
         pagination(:page="page" :pages="pages" v-if="count" path="/admin/reports")
 </template>
@@ -34,6 +67,7 @@ export default {
   name: "AdminView",
   head: { title: "Reports · Verden" },
   computed: {
+    ...mapGetters(["isLoading"]),
     ...mapGetters("auth", ["isLogged", "me"]),
     ...mapGetters("warnings", ["warnings", "count"]),
   },
@@ -42,6 +76,7 @@ export default {
       page: 0,
       pages: 0,
       notResolved: false,
+      boxDeleteReport: 0,
     };
   },
   components: {
@@ -82,5 +117,37 @@ export default {
       });
     }
   },
+  methods: {
+    openModal(id) {
+      this.boxDeleteReport = id;
+    },
+    deleteReport() {
+      if (this.boxDeleteReport) {
+        this.$store
+          .dispatch("warnings/deleteWarning", this.boxDeleteReport)
+          .then((response) => {
+            if (response.status == 204) {
+              if (this.notResolved) {
+                this.$store
+                  .dispatch("warnings/filterWarnings", { page: this.page })
+                  .then(() => {
+                    this.pages = Math.ceil(this.count / 20);
+                  });
+              } else {
+                this.$store
+                  .dispatch("warnings/getWarnings", this.page)
+                  .then(() => {
+                    this.pages = Math.ceil(this.count / 20);
+                  });
+              }
+              this.$toast.success("Report deleted!");
+              this.boxDeleteReport = 0;
+            } else {
+              this.$toast.error(response.data);
+            }
+          });
+      }
+    },
+  },
 };
 </script>
-- 
cgit v1.2.3-71-g8e6c

