From 1db273b6b9dbc2adc9a4f3417ba3e9f5d738f4f0 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 --- .../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 b988a2c7df..427a9cbb06 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.30.2