From b23ac21263baf065d00924449a366e3a8e6acd48 Mon Sep 17 00:00:00 2001 From: Pedro Amorim Date: Thu, 23 Feb 2023 12:28:18 +0000 Subject: [PATCH] Bug 32983: Use REST API route to retrieve authorised values Make one API call for all AV categories+values instead of one API call per AV category required Signed-off-by: Jonathan Druart Signed-off-by: Nick Clemens --- .../prog/js/vue/components/ERM/Main.vue | 27 +++++++++++++------ .../prog/js/vue/fetch/authorised-values.js | 12 ++++++--- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/Main.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/Main.vue index 563814d0f8c..8aa66d19be4 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/Main.vue +++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/Main.vue @@ -181,15 +181,26 @@ export default { av_package_content_types: "ERM_PACKAGE_CONTENT_TYPE", av_title_publication_types: "ERM_TITLE_PUBLICATION_TYPE", } - let promises = [] - Object.entries(authorised_values).forEach(([av_var, av_cat]) => { - promises.push( - av_client.values.getAll(av_cat).then(av => { - this.AVStore[av_var] = av - }) - ) + + let av_cat_array = Object.keys(authorised_values).map(function ( + av_cat + ) { + return '"' + authorised_values[av_cat] + '"' }) - Promise.all(promises).then(() => (this.mainStore.is_loading = false)) + + av_client.values + .getCategoriesWithValues(av_cat_array) + .then(av_categories => { + Object.entries(authorised_values).forEach( + ([av_var, av_cat]) => { + const av_match = av_categories.find( + element => element.category_name == av_cat + ) + this.AVStore[av_var] = av_match.authorised_values + } + ) + }) + .then(() => (this.mainStore.is_loading = false)) }, components: { Breadcrumb, diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/fetch/authorised-values.js b/koha-tmpl/intranet-tmpl/prog/js/vue/fetch/authorised-values.js index 639d8cf99fb..bd3887af534 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/vue/fetch/authorised-values.js +++ b/koha-tmpl/intranet-tmpl/prog/js/vue/fetch/authorised-values.js @@ -3,16 +3,20 @@ import HttpClient from "./http-client"; export class AVAPIClient extends HttpClient { constructor() { super({ - baseURL: "/api/v1/authorised_value_categories/", + baseURL: "/api/v1/authorised_value_categories", }); } get values() { return { - getAll: (category_name, query) => + getCategoriesWithValues: (cat_array) => this.get({ - endpoint: category_name + "/values?" + (query || "_per_page=-1"), - }), + endpoint: "?q={\"me.category_name\":["+(cat_array.join(", "))+"]}", + headers: { + "x-koha-embed": + "authorised_values", + }, + }), }; } } -- 2.25.1