3 <div v-if="!initialized">{{ $__("Loading") }}</div>
4 <div v-else-if="titles" id="titles_list">
6 <div v-if="titles.length" id="title_list_result">
7 <table v-if="titles.length" :id="table_id"></table>
9 <div v-else-if="initialized" class="dialog message">
10 {{ $__("There are no titles defined") }}
17 import Toolbar from "./EHoldingsLocalTitlesToolbar.vue"
18 import { inject, createVNode, render } from "vue"
19 import { storeToRefs } from "pinia"
20 import { fetchLocalTitles } from "../../fetch"
21 import { useDataTable } from "../../composables/datatables"
25 const AVStore = inject("AVStore")
26 const { av_title_publication_types } = storeToRefs(AVStore)
27 const { get_lib_from_av, map_av_dt_filter } = AVStore
29 const table_id = "title_list"
30 useDataTable(table_id)
33 av_title_publication_types,
44 publication_title: this.$route.query.publication_title || "",
45 publication_type: this.$route.query.publication_type || "",
50 beforeRouteEnter(to, from, next) {
52 vm.getTitles().then(() => vm.build_datatable())
57 const titles = await fetchLocalTitles()
59 this.initialized = true
61 show_title: function (title_id) {
63 "/cgi-bin/koha/erm/eholdings/local/titles/" + title_id
66 edit_title: function (title_id) {
68 "/cgi-bin/koha/erm/eholdings/local/titles/edit/" + title_id
71 delete_title: function (title_id) {
73 "/cgi-bin/koha/erm/eholdings/local/titles/delete/" + title_id
76 build_datatable: function () {
77 let show_title = this.show_title
78 let edit_title = this.edit_title
79 let delete_title = this.delete_title
80 let get_lib_from_av = this.get_lib_from_av
81 let map_av_dt_filter = this.map_av_dt_filter
82 let filters = this.filters
83 let table_id = this.table_id
85 window["av_title_publication_types"] = map_av_dt_filter(
86 "av_title_publication_types"
89 $("#" + table_id).kohaTable(
92 url: "/api/v1/erm/eholdings/local/titles",
94 embed: ["resources.package"],
98 { search: filters.publication_title },
100 { search: filters.publication_type },
106 data: "me.publication_title",
109 render: function (data, type, row, meta) {
110 // Rendering done in drawCallback
115 title: __("Contributors"),
116 data: "first_author:first_editor",
119 render: function (data, type, row, meta) {
121 escape_str(row.first_author) +
122 (row.first_author && row.first_editor
125 escape_str(row.first_editor)
130 title: __("Publication type"),
131 data: "publication_type",
134 render: function (data, type, row, meta) {
137 "av_title_publication_types",
144 title: __("Identifier"),
145 data: "print_identifier:online_identifier",
148 render: function (data, type, row, meta) {
149 let print_identifier = row.print_identifier
150 let online_identifier = row.online_identifier
154 _("ISBN (Print): %s").format(
161 _("ISBN (Online): %s").format(
170 title: __("Actions"),
171 data: function (row, type, val, meta) {
172 return '<div class="actions"></div>'
174 className: "actions noExport",
179 drawCallback: function (settings) {
180 var api = new $.fn.dataTable.Api(settings)
183 $(this).find("td .actions"),
184 function (index, e) {
185 let tr = $(this).parent().parent()
186 let title_id = api.row(tr).data().title_id
187 let editButton = createVNode(
190 class: "btn btn-default btn-xs",
198 class: "fa fa-pencil",
199 "aria-hidden": "true",
205 let deleteButton = createVNode(
208 class: "btn btn-default btn-xs",
211 delete_title(title_id)
216 class: "fa fa-trash",
217 "aria-hidden": "true",
223 let n = createVNode("span", {}, [
233 $(this).find("tbody tr td:first-child"),
234 function (index, e) {
235 let tr = $(this).parent()
236 let row = api.row(tr).data()
237 if (!row) return // Happen if the table is empty
243 "/cgi-bin/koha/erm/eholdings/local/titles/" +
247 show_title(row.title_id)
250 `${row.publication_title} (#${row.title_id})`
256 preDrawCallback: function (settings) {
260 .attr("data-filter", "av_title_publication_types")
263 eholdings_titles_table_settings,
268 components: { Toolbar },
269 name: "EHoldingsLocalTitlesList",