4 {{ $__("Package name") }}:
7 id="package_name_filter"
8 v-model="filters.package_name"
9 @keyup.enter="filter_table"
11 {{ $__("Content type") }}:
12 <select id="content_type_filter" v-model="filters.content_type">
13 <option value="">{{ $__("All") }}</option>
15 v-for="type in av_package_content_types"
16 :key="type.authorised_values"
17 :value="type.authorised_value"
22 {{ $__("Selection status") }}:
23 <select id="selection_type_filter" v-model="filters.selection_type">
24 <option value="0">{{ $__("All") }}</option>
25 <option value="1">{{ $__("Selected") }}</option>
26 <option value="2">{{ $__("Not selected") }}</option>
32 :value="$__('Submit')"
36 <!-- We need to display the table element to initiate DataTable -->
38 id="package_list_result"
39 :style="show_table ? 'display: block' : 'display: none'"
43 local_count_packages !== undefined &&
44 local_count_packages !== null
47 <router-link :to="local_packages_url">
49 $__("%s packages found locally").format(
55 <div id="package_list_result">
56 <table :id="table_id"></table>
63 import { inject, createVNode, render } from 'vue'
64 import { storeToRefs } from "pinia"
65 import { fetchCountLocalPackages } from './../../fetch'
66 import { useDataTable, build_url_params, build_url } from "../../composables/datatables"
70 const vendorStore = inject('vendorStore')
71 const { vendors } = storeToRefs(vendorStore)
73 const AVStore = inject('AVStore')
74 const { av_package_types, av_package_content_types } = storeToRefs(AVStore)
75 const { get_lib_from_av, map_av_dt_filter } = AVStore
77 const table_id = "package_list"
78 useDataTable(table_id)
83 av_package_content_types,
95 package_name: this.$route.query.package_name || "",
96 content_type: this.$route.query.content_type || "",
97 selection_type: this.$route.query.selection_type || "",
100 local_count_packages: null,
104 local_packages_url() { return build_url("/cgi-bin/koha/erm/eholdings/local/packages", this.filters) },
106 beforeRouteEnter(to, from, next) {
112 show_package: function (package_id) {
113 this.$router.push("/cgi-bin/koha/erm/eholdings/ebsco/packages/" + package_id)
115 filter_table: async function () {
116 let new_route = build_url("/cgi-bin/koha/erm/eholdings/ebsco/packages", this.filters)
117 this.$router.push(new_route)
118 this.show_table = true
119 this.local_count_packages = null
120 $('#' + this.table_id).DataTable().draw()
121 if (this.erm_providers.includes('local')) {
122 this.local_count_packages = await fetchCountLocalPackages(this.filters)
125 build_datatable: function () {
126 let show_package = this.show_package
127 let get_lib_from_av = this.get_lib_from_av
128 let map_av_dt_filter = this.map_av_dt_filter
130 if (!this.show_table) {
131 this.show_table = build_url_params(this.filters).length ? true : false
133 let filters = this.filters
134 let show_table = this.show_table
135 let table_id = this.table_id
137 window['vendors'] = this.vendors.map(e => {
139 e['_str'] = e['name']
142 let avs = ['av_package_types', 'av_package_content_types']
143 avs.forEach(function (av_cat) {
144 window[av_cat] = map_av_dt_filter(av_cat)
147 let additional_filters = {
149 return filters.package_name || ""
151 content_type: function () {
152 return filters.content_type || ""
154 selection_type: function () {
155 return filters.selection_type || ""
159 $('#' + table_id).kohaTable({
161 url: "/api/v1/erm/eholdings/ebsco/packages",
163 embed: ['resources+count', 'vendor.name'],
165 dom: '<"top pager"<"table_entries"ilp>>tr<"bottom pager"ip>',
166 aLengthMenu: [[10, 20, 50, 100], [10, 20, 50, 100]],
167 deferLoading: show_table ? false : true,
172 data: "me.package_id:me.name",
175 render: function (data, type, row, meta) {
176 // Rendering done in drawCallback
185 render: function (data, type, row, meta) {
186 return row.vendor ? escape_str(row.vendor.name) : ""
191 data: "package_type",
194 render: function (data, type, row, meta) {
195 return escape_str(get_lib_from_av("av_package_types", row.package_type))
198 title: __("Content type"),
201 render: function (data, type, row, meta) {
202 return escape_str(get_lib_from_av("av_package_content_types", row.content_type))
206 drawCallback: function (settings) {
208 var api = new $.fn.dataTable.Api(settings)
210 $.each($(this).find("tbody tr td:first-child"), function (index, e) {
211 let tr = $(this).parent()
212 let row = api.row(tr).data()
213 if (!row) return // Happen if the table is empty
214 let n = createVNode("a", {
216 href: "/cgi-bin/koha/erm/eholdings/ebsco/packages/" + row.package_id,
219 show_package(row.package_id)
222 `${row.name} (#${row.package_id})`
224 if (row.is_selected) {
225 n = createVNode('span', {}, [n, " ", createVNode("i", { class: "fa fa-check-square-o", style: { color: "green", float: "right" }, title: __("Is selected") })])
230 }, null, 0, additional_filters)
232 if (filters.package_name.length) {
237 name: "EHoldingsEBSCOPackagesList",