View | Details | Raw Unified | Return to bug 33066
Collapse All | Expand All

(-)a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsEBSCOPackagesList.vue (-162 / +114 lines)
Lines 53-66 Link Here
53
                >
53
                >
54
            </div>
54
            </div>
55
            <div id="package_list_result" class="page-section">
55
            <div id="package_list_result" class="page-section">
56
                <table :id="table_id"></table>
56
                <KohaTable
57
                    v-if="show_table"
58
                    ref="table"
59
                    v-bind="tableOptions"
60
                    @show="doShow"
61
                ></KohaTable>
57
            </div>
62
            </div>
58
        </div>
63
        </div>
59
    </div>
64
    </div>
60
</template>
65
</template>
61
66
62
<script>
67
<script>
63
import { inject, createVNode, render } from "vue"
68
import { inject, ref, reactive } from "vue"
64
import { storeToRefs } from "pinia"
69
import { storeToRefs } from "pinia"
65
import { APIClient } from "../../fetch/api-client.js"
70
import { APIClient } from "../../fetch/api-client.js"
66
import {
71
import {
Lines 68-73 import { Link Here
68
    build_url_params,
73
    build_url_params,
69
    build_url,
74
    build_url,
70
} from "../../composables/datatables"
75
} from "../../composables/datatables"
76
import KohaTable from "../KohaTable.vue"
71
77
72
export default {
78
export default {
73
    setup() {
79
    setup() {
Lines 79-107 export default { Link Here
79
            storeToRefs(AVStore)
85
            storeToRefs(AVStore)
80
        const { get_lib_from_av, map_av_dt_filter } = AVStore
86
        const { get_lib_from_av, map_av_dt_filter } = AVStore
81
87
82
        const table_id = "package_list"
88
        const table = ref()
83
        useDataTable(table_id)
89
        const filters = reactive({
90
            package_name: "",
91
            content_type: "",
92
            selection_type: "",
93
        })
84
94
85
        return {
95
        return {
86
            vendors,
96
            vendors,
87
            av_package_types,
97
            av_package_types,
88
            av_package_content_types,
98
            av_package_content_types,
89
            get_lib_from_av,
99
            get_lib_from_av,
100
            escape_str,
90
            map_av_dt_filter,
101
            map_av_dt_filter,
91
            erm_providers,
102
            erm_providers,
92
            table_id,
103
            table,
93
        }
104
        }
94
    },
105
    },
95
    data: function () {
106
    data: function () {
107
        this.filters = {
108
            package_name: this.$route.query.package_name || "",
109
            content_type: this.$route.query.content_type || "",
110
            selection_type: this.$route.query.selection_type || "",
111
        }
112
        let filters = this.filters
113
96
        return {
114
        return {
97
            packages: [],
115
            packages: [],
98
            initialized: true,
116
            initialized: true,
99
            filters: {
117
            tableOptions: {
100
                package_name: this.$route.query.package_name || "",
118
                columns: this.getTableColumns(),
101
                content_type: this.$route.query.content_type || "",
119
                url: "/api/v1/erm/eholdings/ebsco/packages",
102
                selection_type: this.$route.query.selection_type || "",
120
                options: {
121
                    embed: "resources+count,vendor.name",
122
                    ordering: false,
123
                    dom: '<"top pager"<"table_entries"ilp>>tr<"bottom pager"ip>',
124
                    aLengthMenu: [
125
                        [10, 20, 50, 100],
126
                        [10, 20, 50, 100],
127
                    ],
128
                },
129
                table_settings: this.eholdings_titles_table_settings,
130
                actions: { 0: ["show"] },
131
                default_filters: {
132
                    name: function () {
133
                        return filters.package_name || ""
134
                    },
135
                    content_type: function () {
136
                        return filters.content_type || ""
137
                    },
138
                    selection_type: function () {
139
                        return filters.selection_type || ""
140
                    },
141
                },
103
            },
142
            },
104
            show_table: false,
143
            show_table: build_url_params(filters).length ? true : false,
105
            local_count_packages: null,
144
            local_count_packages: null,
106
        }
145
        }
107
    },
146
    },
Lines 113-127 export default { Link Here
113
            )
152
            )
114
        },
153
        },
115
    },
154
    },
116
    beforeRouteEnter(to, from, next) {
117
        next(vm => {
118
            vm.build_datatable()
119
        })
120
    },
121
    methods: {
155
    methods: {
122
        show_package: function (package_id) {
156
        doShow: function (erm_package, dt, event) {
157
            event.preventDefault()
123
            this.$router.push(
158
            this.$router.push(
124
                "/cgi-bin/koha/erm/eholdings/ebsco/packages/" + package_id
159
                "/cgi-bin/koha/erm/eholdings/ebsco/packages/" +
160
                    erm_package.package_id
125
            )
161
            )
126
        },
162
        },
127
        filter_table: async function () {
163
        filter_table: async function () {
Lines 132-140 export default { Link Here
132
            this.$router.push(new_route)
168
            this.$router.push(new_route)
133
            this.show_table = true
169
            this.show_table = true
134
            this.local_count_packages = null
170
            this.local_count_packages = null
135
            $("#" + this.table_id)
171
136
                .DataTable()
137
                .draw()
138
            if (this.erm_providers.includes("local")) {
172
            if (this.erm_providers.includes("local")) {
139
                const client = APIClient.erm
173
                const client = APIClient.erm
140
                const query = this.filters
174
                const query = this.filters
Lines 152-310 export default { Link Here
152
                    error => {}
186
                    error => {}
153
                )
187
                )
154
            }
188
            }
155
        },
156
        build_datatable: function () {
157
            let show_package = this.show_package
158
            let get_lib_from_av = this.get_lib_from_av
159
            let map_av_dt_filter = this.map_av_dt_filter
160
189
161
            if (!this.show_table) {
190
            if (this.$refs.table) {
162
                this.show_table = build_url_params(this.filters).length
191
                this.$refs.table.redraw("/api/v1/erm/eholdings/ebsco/packages")
163
                    ? true
164
                    : false
165
            }
192
            }
166
            let filters = this.filters
193
        },
167
            let show_table = this.show_table
194
        getTableColumns: function () {
168
            let table_id = this.table_id
195
            let get_lib_from_av = this.get_lib_from_av
169
196
            let escape_str = this.escape_str
170
            window["vendors"] = this.vendors.map(e => {
171
                e["_id"] = e["id"]
172
                e["_str"] = e["name"]
173
                return e
174
            })
175
            let avs = ["av_package_types", "av_package_content_types"]
176
            avs.forEach(function (av_cat) {
177
                window[av_cat] = map_av_dt_filter(av_cat)
178
            })
179
197
180
            let additional_filters = {
198
            return [
181
                name: function () {
199
                {
182
                    return filters.package_name || ""
200
                    title: __("Name"),
183
                },
201
                    data: "me.package_id:me.name",
184
                content_type: function () {
202
                    searchable: false,
185
                    return filters.content_type || ""
203
                    orderable: false,
204
                    render: function (data, type, row, meta) {
205
                        let node =
206
                            '<a href="/cgi-bin/koha/erm/eholdings/ebsco/packages/' +
207
                            row.package_id +
208
                            '" class="show">' +
209
                            escape_str(`${row.name} (#${row.package_id})`) +
210
                            "</a>"
211
                        if (row.is_selected) {
212
                            node +=
213
                                " " +
214
                                '<i class="fa fa-check-square-o" style="color: green; float: right;" title="' +
215
                                __("Is selected") +
216
                                '" />'
217
                        }
218
                        return node
219
                    },
186
                },
220
                },
187
                selection_type: function () {
221
                {
188
                    return filters.selection_type || ""
222
                    title: __("Vendor"),
223
                    data: "vendor_id",
224
                    searchable: false,
225
                    orderable: false,
226
                    render: function (data, type, row, meta) {
227
                        return row.vendor ? escape_str(row.vendor.name) : ""
228
                    },
189
                },
229
                },
190
            }
191
192
            $("#" + table_id).kohaTable(
193
                {
230
                {
194
                    ajax: {
231
                    title: __("Type"),
195
                        url: "/api/v1/erm/eholdings/ebsco/packages",
232
                    data: "package_type",
233
                    searchable: false,
234
                    orderable: false,
235
                    render: function (data, type, row, meta) {
236
                        return escape_str(
237
                            get_lib_from_av(
238
                                "av_package_types",
239
                                row.package_type
240
                            )
241
                        )
196
                    },
242
                    },
197
                    embed: ["resources+count", "vendor.name"],
243
                },
198
                    ordering: false,
244
                {
199
                    dom: '<"top pager"<"table_entries"ilp>>tr<"bottom pager"ip>',
245
                    title: __("Content type"),
200
                    aLengthMenu: [
246
                    searchable: false,
201
                        [10, 20, 50, 100],
247
                    orderable: false,
202
                        [10, 20, 50, 100],
248
                    render: function (data, type, row, meta) {
203
                    ],
249
                        return escape_str(
204
                    deferLoading: show_table ? false : true,
250
                            get_lib_from_av(
205
                    autoWidth: false,
251
                                "av_package_content_types",
206
                    columns: [
252
                                row.content_type
207
                        {
253
                            )
208
                            title: __("Name"),
209
                            data: "me.package_id:me.name",
210
                            searchable: false,
211
                            orderable: false,
212
                            render: function (data, type, row, meta) {
213
                                // Rendering done in drawCallback
214
                                return ""
215
                            },
216
                        },
217
                        {
218
                            title: __("Vendor"),
219
                            data: "vendor_id",
220
                            searchable: false,
221
                            orderable: false,
222
                            render: function (data, type, row, meta) {
223
                                return row.vendor
224
                                    ? escape_str(row.vendor.name)
225
                                    : ""
226
                            },
227
                        },
228
                        {
229
                            title: __("Type"),
230
                            data: "package_type",
231
                            searchable: false,
232
                            orderable: false,
233
                            render: function (data, type, row, meta) {
234
                                return escape_str(
235
                                    get_lib_from_av(
236
                                        "av_package_types",
237
                                        row.package_type
238
                                    )
239
                                )
240
                            },
241
                        },
242
                        {
243
                            title: __("Content type"),
244
                            searchable: false,
245
                            orderable: false,
246
                            render: function (data, type, row, meta) {
247
                                return escape_str(
248
                                    get_lib_from_av(
249
                                        "av_package_content_types",
250
                                        row.content_type
251
                                    )
252
                                )
253
                            },
254
                        },
255
                    ],
256
                    drawCallback: function (settings) {
257
                        var api = new $.fn.dataTable.Api(settings)
258
259
                        $.each(
260
                            $(this).find("tbody tr td:first-child"),
261
                            function (index, e) {
262
                                let tr = $(this).parent()
263
                                let row = api.row(tr).data()
264
                                if (!row) return // Happen if the table is empty
265
                                let n = createVNode(
266
                                    "a",
267
                                    {
268
                                        role: "button",
269
                                        href:
270
                                            "/cgi-bin/koha/erm/eholdings/ebsco/packages/" +
271
                                            row.package_id,
272
                                        onClick: e => {
273
                                            e.preventDefault()
274
                                            show_package(row.package_id)
275
                                        },
276
                                    },
277
                                    `${row.name} (#${row.package_id})`
278
                                )
279
                                if (row.is_selected) {
280
                                    n = createVNode("span", {}, [
281
                                        n,
282
                                        " ",
283
                                        createVNode("i", {
284
                                            class: "fa fa-check-square-o",
285
                                            style: {
286
                                                color: "green",
287
                                                float: "right",
288
                                            },
289
                                            title: __("Is selected"),
290
                                        }),
291
                                    ])
292
                                }
293
                                render(n, e)
294
                            }
295
                        )
254
                        )
296
                    },
255
                    },
297
                },
256
                },
298
                null,
257
            ]
299
                0,
300
                additional_filters
301
            )
302
303
            if (filters.package_name.length) {
304
                this.filter_table()
305
            }
306
        },
258
        },
307
    },
259
    },
260
    components: { KohaTable },
308
    name: "EHoldingsEBSCOPackagesList",
261
    name: "EHoldingsEBSCOPackagesList",
309
}
262
}
310
</script>
263
</script>
311
- 

Return to bug 33066