From c43aa314a3916be3c264d0d4f94f9153151d118f Mon Sep 17 00:00:00 2001 From: Santo Cariotti Date: Sun, 16 Oct 2022 19:30:29 +0200 Subject: Delete rows from admin cp --- components/VTable.vue | 7 ++++-- pages/admin/models.vue | 58 ++++++++++++++++++++++++++++++++++++++++++ pages/admin/reports.vue | 67 +++++++++++++++++++++++++++++++++++++++++++++++++ store/warnings.js | 25 ++++++++++++++++++ 4 files changed, 155 insertions(+), 2 deletions(-) diff --git a/components/VTable.vue b/components/VTable.vue index 326d17f..8785c73 100644 --- a/components/VTable.vue +++ b/components/VTable.vue @@ -45,7 +45,7 @@ svg(xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6 cursor-pointer") path(stroke-linecap="round" stroke-linejoin="round" d="M16.862 4.487l1.687-1.688a1.875 1.875 0 112.652 2.652L6.832 19.82a4.5 4.5 0 01-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 011.13-1.897L16.863 4.487zm0 0L19.5 7.125") div(v-if="deleterow") - svg(xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6 text-red-500 cursor-pointer") + svg(xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6 text-red-500 cursor-pointer" @click="handleDelete(field.id)") path(stroke-linecap="round" stroke-linejoin="round" d="M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0") @@ -54,7 +54,7 @@ import UserAvatar from "@/components/UserAvatar.vue"; export default { - props: ["keys", "fields", "path", "deleterow"], + props: ["keys", "fields", "path", "deleterow", "delete"], components: { "user-avatar": UserAvatar, }, @@ -65,6 +65,9 @@ export default { isBool(variable) { return typeof variable == "boolean"; }, + handleDelete(id) { + this.delete(id); + }, }, }; diff --git a/pages/admin/models.vue b/pages/admin/models.vue index e1f65d7..ca84932 100644 --- a/pages/admin/models.vue +++ b/pages/admin/models.vue @@ -1,6 +1,39 @@ @@ -25,6 +59,7 @@ export default { name: "AdminView", head: { title: "Models · Verden" }, computed: { + ...mapGetters(["isLoading"]), ...mapGetters("auth", ["isLogged", "me"]), ...mapGetters("models", ["models", "count"]), }, @@ -32,6 +67,7 @@ export default { return { page: 0, pages: 0, + boxDeleteModel: 0, }; }, components: { @@ -51,5 +87,27 @@ export default { this.pages = Math.ceil(this.count / 20); }); }, + methods: { + openModal(id) { + this.boxDeleteModel = id; + }, + deleteModel() { + if (this.boxDeleteModel) { + this.$store + .dispatch("models/deleteModel", this.boxDeleteModel) + .then((response) => { + if (response.status == 204) { + this.$store.dispatch("models/getModels", this.page).then(() => { + this.pages = Math.ceil(this.count / 20); + }); + this.$toast.success("Model deleted!"); + this.boxDeleteModel = 0; + } else { + this.$toast.error(response.data); + } + }); + } + }, + }, }; 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 @@ @@ -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); + } + }); + } + }, + }, }; diff --git a/store/warnings.js b/store/warnings.js index 65f1c92..d2983bd 100644 --- a/store/warnings.js +++ b/store/warnings.js @@ -124,6 +124,31 @@ export const actions = { commit("loadingStatus", false, { root: true }); + return res; + }, + // Delete a warning + async deleteWarning({ commit, rootGetters }, id) { + commit("loadingStatus", true, { root: true }); + let res = { status: 0, data: null }; + let api = this.$config.api; + + await fetch(`${api}/v1/warnings/${id}`, { + method: "DELETE", + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${rootGetters["auth/accessToken"]}`, + }, + }) + .then(async (response) => { + res.status = response.status; + res.data = await response.text(); + }) + .catch((e) => { + res.status = e.status; + }); + + commit("loadingStatus", false, { root: true }); + return res; }, }; -- cgit v1.2.3-18-g5258