From 3876b74ad838725cc2deefc9ebbbada57fa44d2e Mon Sep 17 00:00:00 2001 From: Matt Blenkinsop Date: Wed, 16 Apr 2025 16:04:31 +0100 Subject: [PATCH] Bug 38201: Move getResource to BaseResource Also adds refreshTemplateState, for use to update components on state changes when access to the component context is not available Signed-off-by: Michaela Sieber Signed-off-by: Jonathan Druart Signed-off-by: Lucas Gass --- .../prog/js/vue/components/BaseResource.vue | 27 ++++++++++++--- .../components/Preservation/TrainResource.vue | 2 +- .../js/vue/components/ResourceFormAdd.vue | 33 +++---------------- .../prog/js/vue/components/ResourceShow.vue | 18 ++-------- 4 files changed, 31 insertions(+), 49 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 977350ee84..7d78e62a81 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/BaseResource.vue +++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/BaseResource.vue @@ -48,7 +48,7 @@ v-if="['add', 'edit'].includes(routeAction)" v-bind="{ ...passCommonProps(), - resource: newResource, + newResource, onSubmit, ...optionalResourceProps, }" @@ -108,13 +108,11 @@ export default { appendToShow: this.appendToShow || null, nameAttr: this.nameAttr || null, idAttr: this.idAttr || null, - afterResourceFetch: - this.afterResourceFetch || - ((component, resource, caller) => null), }; return { resourceToBeGenerated: {}, optionalResourceProps, + refreshTemplate: false, }; }, methods: { @@ -141,6 +139,8 @@ export default { resourceAttrs: this.resourceAttrs, listComponent: this.listComponent, resourceNamePlural: this.resourceNamePlural, + getResource: this.getResource, + key: this.refreshTemplate, }; return commonProps; @@ -497,6 +497,25 @@ export default { return [...acc, groupInfo]; }, []); }, + async getResource(resourceId, componentData, caller) { + this.apiClient.get(resourceId).then( + resource => { + componentData.resource = resource; + if (this.afterResourceFetch) { + this.afterResourceFetch( + componentData, + resource, + caller + ); + } + componentData.initialized = true; + }, + error => {} + ); + }, + refreshTemplateState() { + this.refreshTemplate = !this.refreshTemplate; + }, }, computed: { /** diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/Preservation/TrainResource.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/Preservation/TrainResource.vue index 2e308275ac..d3e63001e5 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/Preservation/TrainResource.vue +++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/Preservation/TrainResource.vue @@ -180,7 +180,7 @@ export default { //if (train_id) { return client.trains .update(train, train_id) - .then(() => this.getTrain(train_id)); + .then(() => this.refreshTemplateState()); //} else { // return client.trains // .create(train) diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ResourceFormAdd.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ResourceFormAdd.vue index 53c3bf02a3..89cc29e495 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ResourceFormAdd.vue +++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ResourceFormAdd.vue @@ -147,7 +147,7 @@ export default { data() { return { initialized: false, - resourceToEdit: null, + resource: null, }; }, props: { @@ -156,46 +156,23 @@ export default { i18n: Object, resourceAttrs: Array, listComponent: String, - resource: Object, + newResource: Object, onSubmit: Function, resourceNamePlural: String, getFieldGroupings: Function, formGroupsDisplayMode: String, - afterResourceFetch: Function, + getResource: Function, }, created() { if (this.$route.params[this.idAttr]) { - this.getResource(this.$route.params[this.idAttr]); + this.getResource(this.$route.params[this.idAttr], this, "form"); } else { this.initialized = true; } }, - methods: { - async getResource(resourceId) { - const resourceAttrs = this.resourceAttrs; - this.apiClient.get(resourceId).then( - resource => { - resourceAttrs.forEach(attr => { - if ( - attr.formatForForm && - typeof attr.formatForForm === "function" - ) { - resource[attr.name] = attr.formatForForm( - resource[attr.name] - ); - } - }); - this.resourceToEdit = resource; - this.afterResourceFetch(this, resource, "form"); - this.initialized = true; - }, - error => {} - ); - }, - }, computed: { resourceToAddOrEdit() { - return this.resourceToEdit || this.resource; + return this.resource || this.newResource; }, }, components: { diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ResourceShow.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ResourceShow.vue index e627ee96f1..0a2d7fafa5 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ResourceShow.vue +++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ResourceShow.vue @@ -63,24 +63,10 @@ export default { appendToShow: Function, getToolbarButtons: Function, afterResourceFetch: Function, + getResource: Function, }, created() { - this.getResource(this.$route.params[this.idAttr]); - }, - // beforeRouteUpdate(to, from) { - // this.resource = this.getResource(to.params[this.idAttr]) - // }, - methods: { - async getResource(resourceId) { - this.apiClient.get(resourceId).then( - resource => { - this.resource = resource; - this.afterResourceFetch(this, resource, "show"); - this.initialized = true; - }, - error => {} - ); - }, + this.getResource(this.$route.params[this.idAttr], this, "show"); }, components: { Toolbar, ShowElement }, name: "ResourceShow",