Bug 33417: Add toolbar imports and options
[koha.git] / koha-tmpl / intranet-tmpl / prog / js / vue / components / ERM / EHoldingsLocalPackagesList.vue
1 <template>
2     <div>
3         <div v-if="!initialized">{{ $__("Loading") }}</div>
4         <div v-else id="packages_list">
5             <Toolbar :options="this.toolbar_options" />
6             <div
7                 v-if="package_count > 0"
8                 id="package_list_result"
9                 class="page-section"
10             >
11                 <KohaTable
12                     ref="table"
13                     v-bind="tableOptions"
14                     @show="doShow"
15                     @edit="doEdit"
16                     @delete="doDelete"
17                 ></KohaTable>
18             </div>
19             <div v-else class="dialog message">
20                 {{ $__("There are no packages defined") }}
21             </div>
22         </div>
23     </div>
24 </template>
25
26 <script>
27 import Toolbar from "../Toolbar.vue"
28 import { inject, ref, reactive } from "vue"
29 import { storeToRefs } from "pinia"
30 import { APIClient } from "../../fetch/api-client.js"
31 import KohaTable from "../KohaTable.vue"
32
33 export default {
34     setup() {
35         const vendorStore = inject("vendorStore")
36         const { vendors } = storeToRefs(vendorStore)
37
38         const AVStore = inject("AVStore")
39         const { get_lib_from_av, map_av_dt_filter } = AVStore
40
41         const { setConfirmationDialog, setMessage } = inject("mainStore")
42
43         const table = ref()
44         const filters = reactive({
45             package_name: "",
46             content_type: "",
47         })
48
49         return {
50             vendors,
51             get_lib_from_av,
52             map_av_dt_filter,
53             table,
54             filters,
55             setConfirmationDialog,
56             setMessage,
57             escape_str,
58             eholdings_packages_table_settings,
59         }
60     },
61     data: function () {
62         this.filters = {
63             package_name: this.$route.query.package_name || "",
64             content_type: this.$route.query.content_type || "",
65         }
66         let filters = this.filters
67         return {
68             package_count: 0,
69             initialized: false,
70             tableOptions: {
71                 columns: this.getTableColumns(),
72                 url: "/api/v1/erm/eholdings/local/packages",
73                 options: {
74                     embed: "resources+count,vendor.name",
75                     searchCols: [
76                         { search: filters.package_name },
77                         null,
78                         null,
79                         { search: filters.content_type },
80                         null,
81                         null,
82                     ],
83                 },
84                 table_settings: this.eholdings_packages_table_settings,
85                 add_filters: true,
86                 filters_options: {
87                     1: () =>
88                         this.vendors.map(e => {
89                             e["_id"] = e["id"]
90                             e["_str"] = e["name"]
91                             return e
92                         }),
93                     2: () => this.map_av_dt_filter("av_package_types"),
94                     3: () => this.map_av_dt_filter("av_package_content_types"),
95                 },
96                 actions: {
97                     0: ["show"],
98                     "-1": ["edit", "delete"],
99                 },
100             },
101             toolbar_options: [
102                 {
103                     to: "EHoldingsLocalPackagesFormAdd",
104                     button_title: "New package",
105                 },
106             ],
107         }
108     },
109     beforeRouteEnter(to, from, next) {
110         next(vm => {
111             vm.getPackageCount().then(() => (vm.initialized = true))
112         })
113     },
114     methods: {
115         async getPackageCount() {
116             const client = APIClient.erm
117             await client.localPackages.count().then(
118                 count => {
119                     this.package_count = count
120                 },
121                 error => {}
122             )
123         },
124         doShow: function ({ package_id }, dt, event) {
125             event.preventDefault()
126             this.$router.push({
127                 name: "EHoldingsLocalPackagesShow",
128                 params: { package_id },
129             })
130         },
131         doEdit: function ({ package_id }, dt, event) {
132             this.$router.push({
133                 name: "EHoldingsLocalPackagesFormAddEdit",
134                 params: { package_id },
135             })
136         },
137         doDelete: function (erm_package, dt, event) {
138             this.setConfirmationDialog(
139                 {
140                     title: this.$__(
141                         "Are you sure you want to remove this package?"
142                     ),
143                     message: erm_package.name,
144                     accept_label: this.$__("Yes, delete"),
145                     cancel_label: this.$__("No, do not delete"),
146                 },
147                 () => {
148                     const client = APIClient.erm
149                     client.localPackages.delete(erm_package.package_id).then(
150                         success => {
151                             this.setMessage(
152                                 this.$__("Local package %s deleted").format(
153                                     erm_package.name
154                                 ),
155                                 true
156                             )
157                             dt.draw()
158                         },
159                         error => {}
160                     )
161                 }
162             )
163         },
164         getTableColumns: function () {
165             let get_lib_from_av = this.get_lib_from_av
166             let escape_str = this.escape_str
167             return [
168                 {
169                     title: __("Name"),
170                     data: "me.package_id:me.name",
171                     searchable: true,
172                     orderable: true,
173                     render: function (data, type, row, meta) {
174                         return (
175                             '<a href="/cgi-bin/koha/erm/eholdings/local/packages/' +
176                             row.package_id +
177                             '" class="show">' +
178                             escape_str(`${row.name} (#${row.package_id})`) +
179                             "</a>"
180                         )
181                     },
182                 },
183                 {
184                     title: __("Vendor"),
185                     data: "vendor_id",
186                     searchable: true,
187                     orderable: true,
188                     render: function (data, type, row, meta) {
189                         return row.vendor_id != undefined
190                             ? '<a href="/cgi-bin/koha/acqui/supplier.pl?booksellerid=' +
191                                   row.vendor_id +
192                                   '">' +
193                                   escape_str(row.vendor.name) +
194                                   "</a>"
195                             : ""
196                     },
197                 },
198                 {
199                     title: __("Type"),
200                     data: "package_type",
201                     searchable: true,
202                     orderable: true,
203                     render: function (data, type, row, meta) {
204                         return escape_str(
205                             get_lib_from_av(
206                                 "av_package_types",
207                                 row.package_type
208                             )
209                         )
210                     },
211                 },
212                 {
213                     title: __("Content type"),
214                     data: "content_type",
215                     searchable: true,
216                     orderable: true,
217                     render: function (data, type, row, meta) {
218                         return escape_str(
219                             get_lib_from_av(
220                                 "av_package_content_types",
221                                 row.content_type
222                             )
223                         )
224                     },
225                 },
226                 {
227                     title: __("Created on"),
228                     data: "created_on",
229                     searchable: false,
230                     orderable: true,
231                     render: function (data, type, row, meta) {
232                         return $date(row.created_on)
233                     },
234                 },
235                 {
236                     title: __("Notes"),
237                     data: "notes",
238                     searchable: true,
239                     orderable: true,
240                     render: function (data, type, row, meta) {
241                         return row.notes
242                     },
243                 },
244             ]
245         },
246     },
247     components: { Toolbar, KohaTable },
248     name: "EHoldingsLocalPackagesList",
249 }
250 </script>