From 9bd95eee868fb92339c06f8022206bebe845ba1c Mon Sep 17 00:00:00 2001 From: Pedro Amorim Date: Wed, 8 Nov 2023 11:34:43 -0100 Subject: [PATCH] Bug 35287: Vue preparation - Extend KohaTable to consider searchable additional fields This follows the same pattern as in subscription serials searchable additional fields, i.e. if an additional field is searchable, it is added to the list table - with the corresponding search inputs and functionality Signed-off-by: Edith Speller Signed-off-by: Michaela Sieber --- .../prog/js/vue/components/KohaTable.vue | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/KohaTable.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/KohaTable.vue index b988a2c7df6..427a9cbb06a 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/KohaTable.vue +++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/KohaTable.vue @@ -16,6 +16,7 @@ import "datatables.net-buttons" import "datatables.net-buttons/js/buttons.html5" import "datatables.net-buttons/js/buttons.print" import "datatables.net-buttons/js/buttons.colVis" + DataTable.use(DataTablesLib) export default { @@ -81,6 +82,55 @@ export default { }, beforeMount() { if (this.actions.hasOwnProperty("-1")) { + if (this.searchable_additional_fields.length) { + this.searchable_additional_fields.forEach(searchable_field => { + var _customRender = (function (searchable_field) { + var _render = function (data, type, row, meta) { + return row._strings.additional_field_values + .filter( + field => + field.field_id == searchable_field.id + ) + .map(el => el.value_str) + } + return _render + })(searchable_field) + + this.tableColumns.push({ + name: searchable_field.name, + data: "extended_attributes", + datatype: "related-object", + related: "extended_attributes", + relatedKey: "field_id", + relatedValue: searchable_field.id, + relatedSearchOn: "value", + className: + "searchable-additional-column-" + + searchable_field.id, + title: searchable_field.name, + searchable: true, + sortable: false, + render: _customRender, + }) + + if (searchable_field.authorised_value_category) { + let options = + this.searchable_av_options[ + searchable_field.authorised_value_category + ] + + options.map(e => { + e["_id"] = e["value"] + e["_str"] = e["label"] + return e + }) + + this.filters_options[this.tableColumns.length - 1] = + options + } + }) + } + this.tableColumns = [ ...this.tableColumns, { @@ -234,6 +284,16 @@ export default { type: Object, required: false, }, + searchable_additional_fields: { + type: Array, + required: false, + default: [], + }, + searchable_av_options: { + type: Array, + required: false, + default: [], + }, }, } -- 2.39.2