2 <div v-if="!this.initialized">Loading...</div>
3 <div v-else-if="this.licenses" id="licenses_list">
5 <table v-if="licenses.length" id="license_list"></table>
6 <div v-else-if="this.initialized" class="dialog message">
7 There are no licenses defined.
13 import Toolbar from "./LicensesToolbar.vue"
14 import ButtonEdit from "./ButtonEdit.vue"
15 import ButtonDelete from "./ButtonDelete.vue"
16 import { createVNode, render } from 'vue'
17 import { useAVStore } from "../../stores/authorised_values"
18 import { storeToRefs } from "pinia"
19 import { fetchLicenses } from "../../fetch"
23 const AVStore = useAVStore()
27 } = storeToRefs(AVStore)
35 let show_license = this.show_license
36 let edit_license = this.edit_license
37 let delete_license = this.delete_license
38 window['av_license_types'] = this.av_license_types.map(e => {
39 e['_id'] = e['authorised_value']
43 let av_license_types_map = this.av_license_types.reduce((map, e) => {
44 map[e.authorised_value] = e
47 window['av_license_statuses'] = this.av_license_statuses.map(e => {
48 e['_id'] = e['authorised_value']
52 let av_license_statuses_map = this.av_license_statuses.reduce((map, e) => {
53 map[e.authorised_value] = e
57 $('#license_list').kohaTable({
59 "url": licenses_table_url,
61 "order": [[1, "asc"]],
64 "render": function (data, type, row, meta) {
65 if (type == 'display') {
66 return escape_str(data)
74 "data": ["me.license_id", "me.name"],
77 // Rendering done in drawCallback
80 "title": __("Description"),
81 "data": "description",
90 "render": function (data, type, row, meta) {
91 return escape_str(av_license_types_map[row.type].lib)
95 "title": __("Status"),
99 "render": function (data, type, row, meta) {
100 return escape_str(av_license_statuses_map[row.status].lib)
104 "title": __("Started on"),
105 "data": "started_on",
108 "render": function (data, type, row, meta) {
109 return escape_str(row.started_on)
113 "title": __("Ended on"),
117 "render": function (data, type, row, meta) {
118 return escape_str(row.ended_on)
122 "title": __("Actions"),
123 "data": function (row, type, val, meta) {
124 return '<div class="actions"></div>'
126 "className": "actions noExport",
131 drawCallback: function (settings) {
133 var api = new $.fn.dataTable.Api(settings)
135 $.each($(this).find("td .actions"), function (index, e) {
136 let license_id = api.row(index).data().license_id
137 let editButton = createVNode(ButtonEdit, {
139 edit_license(license_id)
142 let deleteButton = createVNode(ButtonDelete, {
144 delete_license(license_id)
147 let n = createVNode('span', {}, [editButton, " ", deleteButton])
151 $.each($(this).find("tbody tr td:first-child"), function (index, e) {
152 let row = api.row(index).data()
153 if (!row) return // Happen if the table is empty
154 let n = createVNode("a", {
157 show_license(row.license_id)
160 escape_str(`${row.name} (#${row.license_id})`)
165 preDrawCallback: function (settings) {
166 var table_id = settings.nTable.id
167 $("#" + table_id).find("thead th").eq(2).attr('data-filter', 'av_license_types')
168 $("#" + table_id).find("thead th").eq(3).attr('data-filter', 'av_license_statuses')
171 }, table_settings, 1)
184 beforeRouteEnter(to, from, next) {
190 async getLicenses() {
191 const licenses = await fetchLicenses()
192 this.licenses = licenses
193 this.initialized = true
195 show_license: function (license_id) {
196 this.$router.push("/cgi-bin/koha/erm/licenses/" + license_id)
198 edit_license: function (license_id) {
199 this.$router.push("/cgi-bin/koha/erm/licenses/edit/" + license_id)
201 delete_license: function (license_id) {
202 this.$router.push("/cgi-bin/koha/erm/licenses/delete/" + license_id)
206 av_license_types: Array,
207 av_license_statuses: Array,
209 components: { Toolbar },
210 name: "LicensesList",