From 4cf1357d564f434846668c20101f1874cc227543 Mon Sep 17 00:00:00 2001
From: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Date: Thu, 11 Jul 2024 15:55:38 +0200
Subject: [PATCH] Bug 37301: Remove toToResource* methods to BaseResource

---
 .../prog/js/vue/components/BaseResource.vue   | 37 +++++++++++++++++--
 .../vue/components/ERM/AgreementResource.vue  | 26 ++++---------
 .../js/vue/components/ERM/AgreementsList.vue  |  7 +---
 .../js/vue/components/ERM/AgreementsShow.vue  | 10 ++++-
 .../prog/js/vue/components/ToolbarButton.vue  | 11 ++++--
 5 files changed, 58 insertions(+), 33 deletions(-)

diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/BaseResource.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/BaseResource.vue
index 701b1056cf1..1c782bc44ab 100644
--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/BaseResource.vue
+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/BaseResource.vue
@@ -2,15 +2,46 @@
 import { inject } from "vue"
 
 export default {
-    setup() {
+    setup(props) {
         //global setup for all resource (list and show for now, but maybe others?) components here
         const { setConfirmationDialog, setMessage, setError } =
             inject("mainStore")
-        return { setConfirmationDialog, setMessage, setError }
+        return { ...props, setConfirmationDialog, setMessage, setError }
     },
     methods: {
-        // goToResourceEdit: function () {},
+        /**
+         * Navigates to the edit page of the given resource.
+         *
+         * @param {Object} resource - The resource to navigate to (optional)
+         * @return {void}
+         */
+        goToResourceEdit: function (resource) {
+            this.$router.push({
+                name: this.edit_component,
+                params: {
+                    [this.id_attr]: resource
+                        ? resource[this.id_attr]
+                        : this[this.resource_name][this.id_attr],
+                },
+            })
+        },
+        /**
+         * Navigates to the creation page of the given resource.
+         *
+         * @return {void}
+         */
+        goToResourceAdd: function () {
+            this.$router.push({
+                name: this.add_component,
+            })
+        },
     },
     name: "BaseResource",
+    props: {
+        resource_name: String,
+        id_attr: String,
+        add_component: String,
+        edit_component: String,
+    },
 }
 </script>
diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementResource.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementResource.vue
index 5442eee1efb..a05a0f028f8 100644
--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementResource.vue
+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementResource.vue
@@ -3,28 +3,18 @@ import BaseResource from "../BaseResource.vue"
 
 export default {
     extends: BaseResource,
-    setup() {
+    setup(props) {
         return {
-            ...BaseResource.setup(),
+            ...BaseResource.setup({
+                resource_name: "agreement",
+                id_attr: "agreement_id",
+                add_component: "AgreementsFormAdd",
+                edit_component: "AgreementsFormAddEdit",
+            }),
             //AgreementResource specific setup here
         }
     },
-    methods: {
-        /**
-         * Navigates to the edit page of the given agreement.
-         *
-         * @param {Object} agreement - The agreement to navigate to (optional)
-         * @return {void}
-         */
-        goToResourceEdit: function (agreement) {
-            let agreement_id =
-                agreement?.agreement_id || this.agreement.agreement_id
-            this.$router.push({
-                name: "AgreementsFormAddEdit",
-                params: { agreement_id: agreement_id },
-            })
-        },
-    },
+    methods: {},
     name: "AgreementResource",
 }
 </script>
diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsList.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsList.vue
index eabfdd32702..a7ffea17ff7 100644
--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsList.vue
+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsList.vue
@@ -4,7 +4,7 @@
         <Toolbar v-if="!embedded">
             <ToolbarButton
                 action="add"
-                @addResource="add_agreement"
+                @go-to-add-resource="goToResourceAdd"
                 :title="$__('New agreement')"
             />
         </Toolbar>
@@ -222,11 +222,6 @@ export default {
                     })
                 })
         },
-        add_agreement: function () {
-            this.$router.push({
-                name: "AgreementsFormAdd",
-            })
-        },
         doShow: function ({ agreement_id }, dt, event) {
             event.preventDefault()
             this.$router.push({
diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsShow.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsShow.vue
index 0867e15bd03..36ed6d13e70 100644
--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsShow.vue
+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementsShow.vue
@@ -2,8 +2,14 @@
     <div v-if="!initialized">{{ $__("Loading") }}</div>
     <div v-else id="agreements_show">
         <Toolbar>
-            <ToolbarButton action="edit" @editResource="goToResourceEdit" />
-            <ToolbarButton action="delete" @deleteResource="delete_agreement" />
+            <ToolbarButton
+                action="edit"
+                @go-to-edit-resource="goToResourceEdit"
+            />
+            <ToolbarButton
+                action="delete"
+                @delete_resource="delete_agreement"
+            />
         </Toolbar>
 
         <h2>
diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ToolbarButton.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ToolbarButton.vue
index f74760d79c3..65019eacb2c 100644
--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ToolbarButton.vue
+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ToolbarButton.vue
@@ -1,16 +1,19 @@
 <template>
-    <a v-if="action === 'add'" @click="$emit('addResource')" class="btn btn-default"
+    <a
+        v-if="action === 'add'"
+        @click="$emit('go-to-add-resource')"
+        class="btn btn-default"
         ><font-awesome-icon icon="plus" /> {{ title }}</a
     >
     <a
         v-else-if="action === 'delete'"
-        @click="$emit('deleteResource')"
+        @click="$emit('delete-resource')"
         class="btn btn-default"
         ><font-awesome-icon icon="trash" /> {{ $__("Delete") }}</a
     >
     <a
         v-else-if="action === 'edit'"
-        @click="$emit('editResource')"
+        @click="$emit('go-to-edit-resource')"
         class="btn btn-default"
         ><font-awesome-icon icon="pencil" /> {{ $__("Edit") }}</a
     >
@@ -35,7 +38,7 @@ export default {
             type: String,
         },
     },
-    emits: ["addResource", "deleteResource", "editResource"],
+    emits: ["go-to-add-resource", "go-to-edit-resource", "delete-resource"],
     name: "Toolbar",
 }
 </script>
-- 
2.39.5