Bug 32030: Some refactoring and improvements

Signed-off-by: Jonathan Field <jonathan.field@ptfs-europe.com>

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
Jonathan Druart 2022-06-24 14:32:02 +02:00 committed by Tomas Cohen Arazi
parent 769a1b3477
commit 87d64ea384
No known key found for this signature in database
GPG Key ID: 0A272EA1B2F3C15F
11 changed files with 637 additions and 681 deletions

View File

@ -52,7 +52,7 @@ sub build_title {
my @contributors = @{ $result->{contributorsList} };
my $first_author = first { $_->{type} eq 'author' || $_->{type} eq 'Author' } @contributors;
if ( $first_author ) {
$title->{first_author} = $first_author->{contributor}
$title->{first_author} = $first_author->{contributor};
}
}
for my $identifier ( @{ $result->{identifiersList} } ) {
@ -71,8 +71,9 @@ sub build_title {
sub build_vendor {
my ( $self, $result ) = @_;
my $vendor = {
vendor_id => $result->{vendorId},
name => $result->{vendorName},
vendor_id => $result->{vendorId},
name => $result->{vendorName},
package_type => $result->{packageType},
};
return $vendor;
}
@ -80,8 +81,13 @@ sub build_vendor {
sub build_package {
my ( $self, $result ) = @_;
my $package = {
package_id => $result->{packageId},
name => $result->{packageName},
package_id => $result->{vendorId} . '-' . $result->{packageId},
name => $result->{packageName},
content_type => $result->{contentType}, # This does not exist in /vendors/1/packages/2/titles/3
created_on => undef,
is_selected => $result->{isSelected},
package_type => $result->{packageType},
vendor_id => $result->{vendorId},
};
return $package;
}
@ -89,11 +95,90 @@ sub build_package {
sub build_resource {
my ( $self, $result ) = @_;
my $resource = {
resource_id => $result->{vendorId} . '-' . $result->{packageId} . '-'. $result->{titleId},
is_selected => $result->{isSelected},
}
resource_id => $result->{vendorId} . '-'
. $result->{packageId} . '-'
. $result->{titleId},
package_id => $result->{vendorId} . '-' . $result->{packageId},
title_id => $result->{titleId},
is_selected => $result->{isSelected},
started_on => $result->{managedCoverageList}->[0]->{beginCoverage},
ended_on => $result->{managedCoverageList}->[0]->{endCoverage},
};
return $resource;
}
sub build_additional_params {
my ( $self, $query_params ) = @_;
my $additional_params;
if ( $query_params->{q} ) {
my $q = decode_json $query_params->{q};
while ( my ( $attr, $value ) = each %$q ) {
$additional_params->{$attr} = $value;
}
}
return $additional_params;
}
sub embed {
my ( $self, $object, $info, $embed_header ) = @_;
$embed_header ||= q{};
my @embed_resources;
foreach my $embed_req ( split /\s*,\s*/, $embed_header ) {
if ( $embed_req eq 'vendor.name' ) {
$object->{vendor} = { name => $info->{vendorName}, };
}
elsif ( $embed_req eq 'vendor' ) {
$object->{vendor} = $self->build_vendor($info);
}
elsif ( $embed_req eq 'title' ) {
$object->{title} = $self->build_title($info);
}
elsif ( $embed_req eq 'resources+count' ) {
$object->{resources_count} = $info->{titleCount};
}
elsif ( $embed_req eq 'package' ) {
$object->{package} = $self->build_package($info);
}
elsif ( $embed_req eq 'package.name' ) {
$object->{package} = { name => $info->{packageName}, };
}
if ( $embed_req eq 'resources' || $embed_req eq 'resources.package' ) {
push @embed_resources, $embed_req;
}
}
if (@embed_resources) {
for my $r ( @{ $info->{customerResourcesList} } ) {
my $resource = {};
for my $embed_req ( @embed_resources ) {
if ( $embed_req eq 'resources' ) {
$resource = $self->build_resource($r);
}
elsif ( $embed_req eq 'resources.package' ) {
unless ( %$resource ) {
$resource = $self->build_resource($r);
}
$resource->{package} = $self->build_package($r);
}
}
push @{$object->{resources}}, $resource;
}
}
return $object;
}
sub build_query_pagination {
my ( $self, $params ) = @_;
my $per_page = $params->{_per_page}
// C4::Context->preference('RESTdefaultPageSize') // 20;
if ( $per_page == -1 || $per_page > 100 ) { $per_page = 100; }
my $page = $params->{_page} || 1;
return ( $per_page, $page );
}
sub build_query {
my ( $self, $url, $params ) = @_;

View File

@ -96,7 +96,7 @@ sub delete {
if ( $provider eq 'ebsco' ) {
die "invalid action";
} else {
return Koha::REST::V1::ERM::EHoldings::Packages::Manual::update(@_);
return Koha::REST::V1::ERM::EHoldings::Packages::Manual::delete(@_);
}
}

View File

@ -30,56 +30,30 @@ sub list {
return try {
my $args = $c->validation->output;
my $params = '?orderby=packagename&offset=1&count=1';
my $result =
Koha::ERM::Providers::EBSCO->request( GET => '/packages' . $params );
my $args = $c->validation->output;
my $params = '?orderby=packagename&offset=1&count=1';
my $ebsco = Koha::ERM::Providers::EBSCO->new;
my $result = $ebsco->request( GET => '/packages' . $params );
my $base_total = $result->{totalResults};
my $per_page = $args->{_per_page}
// C4::Context->preference('RESTdefaultPageSize') // 20;
if ( $per_page == -1 || $per_page > 100 ) { $per_page = 100; }
my $page = $args->{_page} || 1;
my ( $search, $content_type, $selection_type );
my $query_params = $c->req->params->to_hash;
my $additional_params;
if ( $query_params->{q} ) {
my $q = decode_json $query_params->{q};
while ( my ( $attr, $value ) = each %$q ) {
$additional_params->{$attr} = $value;
}
}
my ( $per_page, $page ) = $ebsco->build_query_pagination($args);
my $additional_params =
$ebsco->build_additional_params( $c->req->params->to_hash );
my $orderby = $additional_params->{name} ? 'relevance' : 'packagename';
$params = sprintf '?orderby=%s&offset=%s&count=%s', $orderby, $page,
$per_page;
$result = Koha::ERM::Providers::EBSCO->request(
$params = sprintf '?orderby=%s&offset=%s&count=%s', $orderby, $page, $per_page;
$result = $ebsco->request(
GET => '/packages' . $params,
$additional_params
);
my @packages;
for my $p ( @{ $result->{packagesList} } ) {
my $package = {
content_type => $p->{contentType},
created_on => undef,
is_selected => $p->{isSelected},
name => $p->{packageName},
package_id => $p->{vendorId} . '-' . $p->{packageId},
package_type => $p->{packageType},
vendor_id => $p->{vendorId},
};
my $embed_header = $c->req->headers->header('x-koha-embed') || q{};
foreach my $embed_req ( split /\s*,\s*/, $embed_header ) {
if ( $embed_req eq 'vendor.name' ) {
$package->{vendor} = { name => $p->{vendorName}, };
}
elsif ( $embed_req eq 'resources+count' ) {
$package->{resources_count} = $p->{titleCount};
}
}
push @packages, $package;
my $package = $ebsco->build_package($p);
$package =
$ebsco->embed( $package, $p, $c->req->headers->header('x-koha-embed') );
push @packages, $package;
}
my $total = $result->{totalResults};
$total = 10000 if $total > 10000;
@ -104,7 +78,8 @@ sub get {
return try {
my ( $vendor_id, $package_id ) = split '-',
$c->validation->param('package_id');
my $p = Koha::ERM::Providers::EBSCO->request(
my $ebsco = Koha::ERM::Providers::EBSCO->new;
my $p = $ebsco->request(
GET => '/vendors/' . $vendor_id . '/packages/' . $package_id );
unless ($p) {
return $c->render(
@ -113,31 +88,16 @@ sub get {
);
}
my $package = {
content_type => $p->{contentType},
name => $p->{packageName},
package_id => $p->{vendorId} . '-' . $p->{packageId},
package_type => $p->{packageType},
vendor_id => $p->{vendorId},
};
my $package = $ebsco->build_package($p);
my $embed_header = $c->req->headers->header('x-koha-embed') || q{};
foreach my $embed_req ( split /\s*,\s*/, $embed_header ) {
if ( $embed_req eq 'vendor' ) {
$package->{vendor} = {
id => $p->{vendorId},
name => $p->{vendorName},
};
}
elsif ( $embed_req eq 'resources+count' ) {
$package->{resources_count} = $p->{titleCount};
}
}
$package =
$ebsco->embed( $package, $p,
$c->req->headers->header('x-koha-embed') );
return $c->render(
return $c->render(
status => 200,
openapi => $package
);
);
}
catch {
$c->unhandled_exception($_);

View File

@ -39,8 +39,9 @@ sub list {
return try {
my $args = $c->validation->output;
my $ebsco = Koha::ERM::Providers::EBSCO->new;
# FIXME Do we need more validation here? Don't think so we have the API specs.
# FIXME Do we need more validation here? Don't think so we have the API specs.
my ( $vendor_id, $package_id ) = split '-',
$c->validation->param('package_id') || q{};
my $title_id = $c->validation->param('title_id') || q{};
@ -55,7 +56,7 @@ sub list {
my $result;
try {
$result =
Koha::ERM::Providers::EBSCO->request( GET => $url . $params );
$ebsco->request( GET => $url . $params );
}
catch {
if ( blessed $_ ) {
@ -73,26 +74,17 @@ sub list {
my $base_total = $result->{totalResults};
my $per_page = $args->{_per_page}
// C4::Context->preference('RESTdefaultPageSize') // 20;
if ( $per_page == -1 || $per_page > 100 ) { $per_page = 100; }
my $page = $args->{_page} || 1;
my ( $per_page, $page ) = $ebsco->build_query_pagination($args);
my ( $search, $content_type, $selection_type );
my $query_params = $c->req->params->to_hash;
my $additional_params;
if ( $query_params->{q} ) {
my $q = decode_json $query_params->{q};
while ( my ( $attr, $value ) = each %$q ) {
$additional_params->{$attr} = $value;
}
}
my $additional_params = $ebsco->build_additional_params( $c->req->params->to_hash );
my $searchfield = 'titlename';
$params =
sprintf '?orderby=titlename&offset=%s&count=%s&searchfield=%s',
$page, $per_page, $searchfield;
$result = Koha::ERM::Providers::EBSCO->request(
$result = $ebsco->request(
GET => $url . $params,
$additional_params
);
@ -101,30 +93,12 @@ sub list {
for my $t ( @{ $result->{titles} } ) {
my $r =
$t->{customerResourcesList}->[0]; # FIXME What about the others?
my $resource = {
resource_id => $r->{vendorId} . '-'
. $r->{packageId} . '-'
. $r->{titleId},
package_id => $r->{vendorId} . '-' . $r->{packageId},
title_id => $r->{titleId},
is_selected => $r->{isSelected},
started_on => $r->{managedCoverageList}->[0]->{beginCoverage},
ended_on => $r->{managedCoverageList}->[0]->{endCoverage},
};
my $embed_header = $c->req->headers->header('x-koha-embed') || q{};
foreach my $embed_req ( split /\s*,\s*/, $embed_header ) {
if ( $embed_req eq 'title.publication_title' ) {
$resource->{title} = {
publication_title => $t->{titleName},
publisher_name => $t->{publisherName},
publication_type => $t->{pubType},
};
}
elsif ( $embed_req eq 'package.name' ) {
$resource->{package} = { name => $t->{packageName}, };
}
}
my $resource = $ebsco->build_resource($r);
$resource = $ebsco->embed( $resource, $t,
$c->req->headers->header('x-koha-embed') );
push @resources, $resource;
}
my $total = $result->{totalResults};
@ -153,10 +127,9 @@ sub get {
return try {
my ( $vendor_id, $package_id, $resource_id ) = split '-',
$c->validation->param('resource_id');
my $t;
try {
$t =
Koha::ERM::Providers::EBSCO->request( GET => '/vendors/'
my $ebsco = Koha::ERM::Providers::EBSCO->new;
my $t = try {
return $ebsco->request( GET => '/vendors/'
. $vendor_id
. '/packages/'
. $package_id
@ -186,55 +159,9 @@ sub get {
}
my $r = $t->{customerResourcesList}->[0]; # FIXME What about the others?
my $resource = {
resource_id => $r->{vendorId} . '-'
. $r->{packageId} . '-'
. $r->{titleId},
package_id => $r->{vendorId} . '-' . $r->{packageId},
title_id => $r->{titleId},
started_on => $r->{managedCoverageList}->[0]->{beginCoverage},
ended_on => $r->{managedCoverageList}->[0]->{endCoverage},
};
my $resource = $ebsco->build_resource($r);
my $embed_header = $c->req->headers->header('x-koha-embed') || q{};
foreach my $embed_req ( split /\s*,\s*/, $embed_header ) {
if ( $embed_req eq 'title' ) {
$resource->{title} = {
publication_title => $t->{titleName},
publisher_name => $t->{publisherName},
publication_type => $t->{pubType},
};
for my $identifier ( @{ $t->{identifiersList} } ) {
# FIXME $identifier->{type} : 0 for ISSN and 1 for ISBN
if ( $identifier->{subtype} == 1 ) {
$resource->{title}->{print_identifier} =
$identifier->{id};
}
elsif ( $identifier->{subtype} == 1 ) {
$resource->{title}->{online_identifier} =
$identifier->{id};
}
}
}
elsif ( $embed_req eq 'package' ) {
$resource->{package} = {
#content_type => $e->{contentType}, FIXME We don't have that
name => $r->{packageName},
package_id => $r->{vendorId} . '-' . $r->{packageId},
package_type => $r->{packageType},
vendor_id => $r->{vendorId},
};
}
elsif ( $embed_req eq 'vendor' ) {
$resource->{vendor} = {
name => $r->{vendorName},
id => $r->{vendorId},
package_type => $r->{packageType},
};
}
}
$resource = $ebsco->embed( $resource, {%$t, %$r}, $c->req->headers->header('x-koha-embed') );
return $c->render(
status => 200,

View File

@ -43,24 +43,11 @@ sub list {
my $ebsco = Koha::ERM::Providers::EBSCO->new;
# We cannot get base_total as a search kw is required by the API
#my $params = '?orderby=relevance&offset=1&count=1&searchfield=titlename&search=a';
#my $result = $ebsco->request( GET => '/titles' . $params );
#my $base_total = $result->{totalResults};
my $per_page = $args->{_per_page}
// C4::Context->preference('RESTdefaultPageSize') // 20;
if ( $per_page == -1 || $per_page > 100 ) { $per_page = 100; }
my $page = $args->{_page} || 1;
my ( $per_page, $page ) = $ebsco->build_query_pagination($args);
my ( $search, $content_type, $selection_type );
my $query_params = $c->req->params->to_hash;
my $additional_params;
if ( $query_params->{q} ) {
my $q = decode_json $query_params->{q};
while ( my ( $attr, $value ) = each %$q ) {
$additional_params->{$attr} = $value;
}
}
my $additional_params = $ebsco->build_additional_params( $c->req->params->to_hash );
unless ( defined $additional_params->{publication_title} ) {
@ -85,16 +72,11 @@ sub list {
my $result =
$ebsco->request( GET => '/titles' . $params, $additional_params );
my $embed_header = $c->req->headers->header('x-koha-embed');
my @titles;
for my $t ( @{ $result->{titles} } ) {
my $title = $ebsco->build_title($t);
my $embed_header = $c->req->headers->header('x-koha-embed') || q{};
foreach my $embed_req ( split /\s*,\s*/, $embed_header ) {
if ( $embed_req eq 'vendor.name' ) {
$title->{vendor} = $ebsco->build_vendor($t);
}
}
$title = $ebsco->embed( $title, $t, $embed_header );
push @titles, $title;
}
my $total = $result->{totalResults};
@ -132,20 +114,9 @@ sub get {
);
}
my $title = $ebsco->build_title($t);
my $embed_header = $c->req->headers->header('x-koha-embed') || q{};
for my $r ( @{ $t->{customerResourcesList} } ) {
my $resource = {};
foreach my $embed_req ( split /\s*,\s*/, $embed_header ) {
if ( $embed_req eq 'resources' ) {
$resource = $ebsco->build_resource($r);
}
elsif ( $embed_req eq 'resources.package' ) {
$resource->{package} = $ebsco->build_package($r);
}
}
push @{ $title->{resources} }, $resource;
}
my $title = $ebsco->build_title($t);
$title =
$ebsco->embed( $title, $t, $c->req->headers->header('x-koha-embed') );
return $c->render(
status => 200,

View File

@ -7,7 +7,7 @@ function get_package() {
package_id: 1,
name: "package 1",
package_type: "complete",
content_type: "print",
content_type: "Print",
package_agreements: [],
};
}

View File

@ -12,12 +12,16 @@
<input
type="text"
id="publication_title_filter"
v-model="filters.publication_title"
@keyup.enter="filter_table"
/>
</li>
<li>
<label>{{ $t("Publication type") }}:</label>
<select id="publication_type_filter">
<select
id="publication_type_filter"
v-model="filters.publication_type"
>
<option value="">{{ $t("All") }}</option>
<option
v-for="type in av_title_publication_types"
@ -30,7 +34,10 @@
</li>
<li>
<label>{{ $t("Selection status") }}:</label>
<select id="selection_type_filter">
<select
id="selection_type_filter"
v-model="filters.selection_type"
>
<option value="0">{{ $t("All") }}</option>
<option value="1">{{ $t("Selected") }}</option>
<option value="2">{{ $t("Not selected") }}</option>
@ -69,6 +76,11 @@ export default {
},
data() {
return {
filters: {
publication_title: "",
publication_type: "",
selection_type: "",
},
display_filters: false,
}
},
@ -83,101 +95,99 @@ export default {
toggle_filters: function (e) {
this.display_filters = !this.display_filters
},
},
mounted() {
let show_resource = this.show_resource
let package_id = this.package_id
let get_lib_from_av = this.get_lib_from_av
build_datatable: function () {
let show_resource = this.show_resource
let package_id = this.package_id
let get_lib_from_av = this.get_lib_from_av
let filters = this.filters
window['av_title_publication_types'] = this.av_title_publication_types.map(e => {
e['_id'] = e['authorised_value']
e['_str'] = e['lib']
return e
})
window['av_title_publication_types'] = this.av_title_publication_types.map(e => {
e['_id'] = e['authorised_value']
e['_str'] = e['lib']
return e
})
let additional_filters = {}
if (erm_provider != 'manual') {
additional_filters = {
publication_title: function () {
let publication_title_search = $("#publication_title_filter").val()
if (!publication_title_search) return ""
return publication_title_search
},
publication_type: function () {
let content_type_search = $("#publication_type_filter").val()
if (!content_type_search) return ""
return content_type_search
},
selection_type: function () {
let selection_type_search = $("#selection_type_filter").val()
if (!selection_type_search) return ""
return selection_type_search
},
let additional_filters = {}
if (erm_provider != 'manual') {
additional_filters = {
publication_title: function () {
return filters.publication_title || ""
},
publication_type: function () {
return filters.publication_type || ""
},
selection_type: function () {
return filters.selection_type || ""
},
}
}
}
$('#title_list').kohaTable({
"ajax": {
"url": "/api/v1/erm/eholdings/packages/" + package_id + "/resources",
},
...(erm_provider != 'manual' ? { ordering: false } : {}),
...(erm_provider != 'manual' ? { dom: '<"top pager"<"table_entries"ilp>>tr<"bottom pager"ip>' } : {}),
...(erm_provider != 'manual' ? { lengthMenu: [[10, 20, 50, 100], [10, 20, 50, 100]] } : {}),
"embed": ['title.publication_title'],
autoWidth: false,
"columns": [
{
"title": __("Name"),
"data": "title.publication_title",
"searchable": (erm_provider == 'manual') ? 1 : 0,
"orderable": (erm_provider == 'manul') ? 1 : 0,
"render": function (data, type, row, meta) {
// Rendering done in drawCallback
return ""
}
$('#title_list').kohaTable({
"ajax": {
"url": "/api/v1/erm/eholdings/packages/" + package_id + "/resources",
},
{
"title": __("Publication type"),
"data": "title.publication_type",
"searchable": (erm_provider == 'manual') ? 1 : 0,
"orderable": (erm_provider == 'manul') ? 1 : 0,
"render": function (data, type, row, meta) {
return escape_str(get_lib_from_av("av_title_publication_types", row.title.publication_type))
}
},
],
drawCallback: function (settings) {
var api = new $.fn.dataTable.Api(settings)
$.each($(this).find("tbody tr td:first-child"), function (index, e) {
let row = api.row(index).data()
if (!row) return // Happen if the table is empty
let n = createVNode("a", {
role: "button",
href: "/cgi-bin/koha/erm/eholdings/resources/" + row.resource_id,
onClick: (e) => {
e.preventDefault()
show_resource(row.resource_id)
...(erm_provider != 'manual' ? { ordering: false } : {}),
...(erm_provider != 'manual' ? { dom: '<"top pager"<"table_entries"ilp>>tr<"bottom pager"ip>' } : {}),
...(erm_provider != 'manual' ? { aLengthMenu: [[10, 20, 50, 100], [10, 20, 50, 100]] } : {}),
"embed": ['title'],
autoWidth: false,
"columns": [
{
"title": __("Name"),
"data": "title.publication_title",
"searchable": (erm_provider == 'manual') ? 1 : 0,
"orderable": (erm_provider == 'manul') ? 1 : 0,
"render": function (data, type, row, meta) {
// Rendering done in drawCallback
return ""
}
},
`${row.title.publication_title}`
)
if (row.is_selected) {
n = createVNode('span', {}, [n, " ", createVNode("i", { class: "fa fa-check-square-o", style: { color: "green" }, title: __("Is selected") })])
{
"title": __("Publication type"),
"data": "title.publication_type",
"searchable": (erm_provider == 'manual') ? 1 : 0,
"orderable": (erm_provider == 'manul') ? 1 : 0,
"render": function (data, type, row, meta) {
return escape_str(get_lib_from_av("av_title_publication_types", row.title.publication_type))
}
},
],
drawCallback: function (settings) {
var api = new $.fn.dataTable.Api(settings)
$.each($(this).find("tbody tr td:first-child"), function (index, e) {
let row = api.row(index).data()
if (!row) return // Happen if the table is empty
let n = createVNode("a", {
role: "button",
href: "/cgi-bin/koha/erm/eholdings/resources/" + row.resource_id,
onClick: (e) => {
e.preventDefault()
show_resource(row.resource_id)
}
},
`${row.title.publication_title}`
)
if (row.is_selected) {
n = createVNode('span', {}, [n, " ", createVNode("i", { class: "fa fa-check-square-o", style: { color: "green" }, title: __("Is selected") })])
}
render(n, e)
})
},
...(erm_provider == 'manual' ? {
preDrawCallback: function (settings) {
var table_id = settings.nTable.id
if (erm_provider == 'manual') {
$("#" + table_id).find("thead th").eq(1).attr('data-filter', 'av_title_publication_types')
}
}
render(n, e)
})
},
...(erm_provider == 'manual' ? {
preDrawCallback: function (settings) {
var table_id = settings.nTable.id
if (erm_provider == 'manual') {
$("#" + table_id).find("thead th").eq(1).attr('data-filter', 'av_title_publication_types')
}
}
} : {}),
}, null, erm_provider == 'manual' ? 1 : 0, additional_filters)
} : {}),
}, null, erm_provider == 'manual' ? 1 : 0, additional_filters)
},
},
mounted() {
this.build_datatable()
},
beforeUnmount() {
$('#title_list')
@ -193,7 +203,7 @@ export default {
<style scoped>
#title_list_result {
width: 50%;
width: 60%;
padding-left: 10rem;
}
#title_list {

View File

@ -3,15 +3,13 @@
<div v-if="!this.initialized">{{ $t("Loading") }}</div>
<div v-else-if="this.packages" id="packages_list">
<Toolbar />
<table v-if="this.packages.length" id="package_list"></table>
<div v-if="this.packages.length" id="package_list_result">
<table id="package_list"></table>
</div>
<div v-else-if="this.initialized" class="dialog message">
{{ $t("There are no packages defined") }}
</div>
</div>
<div id="package_list_result">
<table id="package_list"></table>
</div>
</div>
<div v-else>
<fieldset>
@ -90,7 +88,7 @@ export default {
},
beforeRouteEnter(to, from, next) {
next(vm => {
vm.getPackages()
vm.getPackages().then(() => vm.build_datatable())
})
},
methods: {
@ -113,183 +111,183 @@ export default {
filter_table: function () {
$("#package_list_result").show()
$("#package_list").DataTable().draw()
}
},
updated() {
let show_package = this.show_package
let edit_package = this.edit_package
let delete_package = this.delete_package
let get_lib_from_av = this.get_lib_from_av
let filters = this.filters
},
build_datatable: function () {
let show_package = this.show_package
let edit_package = this.edit_package
let delete_package = this.delete_package
let get_lib_from_av = this.get_lib_from_av
let filters = this.filters
window['vendors'] = this.vendors.map(e => {
e['_id'] = e['id']
e['_str'] = e['name']
return e
})
window['av_package_types'] = this.av_package_types.map(e => {
e['_id'] = e['authorised_value']
e['_str'] = e['lib']
return e
})
window['av_package_content_types'] = this.av_package_content_types.map(e => {
e['_id'] = e['authorised_value']
e['_str'] = e['lib']
return e
})
window['vendors'] = this.vendors.map(e => {
e['_id'] = e['id']
e['_str'] = e['name']
return e
})
window['av_package_types'] = this.av_package_types.map(e => {
e['_id'] = e['authorised_value']
e['_str'] = e['lib']
return e
})
window['av_package_content_types'] = this.av_package_content_types.map(e => {
e['_id'] = e['authorised_value']
e['_str'] = e['lib']
return e
})
let additional_filters = {}
if (erm_provider != 'manual') {
additional_filters = {
name: function () {
return filters.package_name || ""
},
content_type: function () {
return filters.content_type || ""
},
selection_type: function () {
return filters.selection_type || ""
},
}
}
$('#package_list').kohaTable({
"ajax": {
"url": "/api/v1/erm/eholdings/packages",
},
"embed": ['resources+count', 'vendor.name'],
...(erm_provider == 'manual' ? { order: [[0, "asc"]] } : {}),
...(erm_provider != 'manual' ? { ordering: false } : {}),
...(erm_provider == 'manual' ? { search: { search: filters.package_name } } : {}),
...(erm_provider != 'manual' ? { dom: '<"top pager"<"table_entries"ilp>>tr<"bottom pager"ip>' } : {}),
...(erm_provider != 'manual' ? { lengthMenu: [[10, 20, 50, 100], [10, 20, 50, 100]] } : {}),
...(erm_provider != 'manual' ? { deferLoading: true } : {}),
autoWidth: false,
"columns": [
{
"title": __("Name"),
"data": "me.package_id:me.name",
"searchable": (erm_provider == 'manual'),
"orderable": (erm_provider == 'manul'),
"render": function (data, type, row, meta) {
// Rendering done in drawCallback
return ""
}
},
{
"title": __("Vendor"),
"data": "vendor_id",
"searchable": (erm_provider == 'manual'),
"orderable": (erm_provider == 'manul'),
"render": function (data, type, row, meta) {
return row.vendor ? escape_str(row.vendor.name) : ""
let additional_filters = {}
if (erm_provider != 'manual') {
additional_filters = {
name: function () {
return filters.package_name || ""
},
content_type: function () {
return filters.content_type || ""
},
selection_type: function () {
return filters.selection_type || ""
},
}
}
$('#package_list').kohaTable({
"ajax": {
"url": "/api/v1/erm/eholdings/packages",
},
{
"title": __("Type"),
"data": "package_type",
"searchable": (erm_provider == 'manual'),
"orderable": (erm_provider == 'manul'),
"render": function (data, type, row, meta) {
return escape_str(get_lib_from_av("av_package_types", row.package_type))
}
}, {
"searchable": (erm_provider == 'manual'),
"orderable": (erm_provider == 'manul'),
"searchable": true,
"orderable": true,
"render": function (data, type, row, meta) {
return escape_str(get_lib_from_av("av_package_content_types", row.content_type))
}
},
erm_provider == 'manual' ?
"embed": ['resources+count', 'vendor.name'],
...(erm_provider == 'manual' ? { order: [[0, "asc"]] } : {}),
...(erm_provider != 'manual' ? { ordering: false } : {}),
...(erm_provider == 'manual' ? { search: { search: filters.package_name } } : {}),
...(erm_provider != 'manual' ? { dom: '<"top pager"<"table_entries"ilp>>tr<"bottom pager"ip>' } : {}),
...(erm_provider != 'manual' ? { aLengthMenu: [[10, 20, 50, 100], [10, 20, 50, 100]] } : {}),
...(erm_provider != 'manual' ? { deferLoading: true } : {}),
autoWidth: false,
"columns": [
{
"title": __("Created on"),
"data": "created_on",
"title": __("Name"),
"data": "me.package_id:me.name",
"searchable": (erm_provider == 'manual'),
"orderable": (erm_provider == 'manul'),
"render": function (data, type, row, meta) {
// Rendering done in drawCallback
return ""
}
},
{
"title": __("Vendor"),
"data": "vendor_id",
"searchable": (erm_provider == 'manual'),
"orderable": (erm_provider == 'manul'),
"render": function (data, type, row, meta) {
return row.vendor ? escape_str(row.vendor.name) : ""
},
},
{
"title": __("Type"),
"data": "package_type",
"searchable": (erm_provider == 'manual'),
"orderable": (erm_provider == 'manul'),
"render": function (data, type, row, meta) {
return escape_str(get_lib_from_av("av_package_types", row.package_type))
}
}, {
"searchable": (erm_provider == 'manual'),
"orderable": (erm_provider == 'manul'),
"searchable": true,
"orderable": true,
"render": function (data, type, row, meta) {
return $date(row.created_on)
return escape_str(get_lib_from_av("av_package_content_types", row.content_type))
}
} : null,
erm_provider == 'manual' ?
{
"title": __("Actions"),
"data": function (row, type, val, meta) {
return '<div class="actions"></div>'
},
erm_provider == 'manual' ?
{
"title": __("Created on"),
"data": "created_on",
"searchable": true,
"orderable": true,
"render": function (data, type, row, meta) {
return $date(row.created_on)
}
} : null,
erm_provider == 'manual' ?
{
"title": __("Actions"),
"data": function (row, type, val, meta) {
return '<div class="actions"></div>'
},
"className": "actions noExport",
"searchable": false,
"orderable": false
} : null,
].filter(Boolean),
drawCallback: function (settings) {
var api = new $.fn.dataTable.Api(settings)
$.each($(this).find("td .actions"), function (index, e) {
let package_id = api.row(index).data().package_id
let editButton = createVNode("a", {
class: "btn btn-default btn-xs", role: "button", onClick: () => {
edit_package(package_id)
}
},
"className": "actions noExport",
"searchable": false,
"orderable": false
} : null,
].filter(Boolean),
drawCallback: function (settings) {
[createVNode("i", { class: "fa fa-pencil", 'aria-hidden': "true" }), __("Edit")])
var api = new $.fn.dataTable.Api(settings)
let deleteButton = createVNode("a", {
class: "btn btn-default btn-xs", role: "button", onClick: () => {
delete_package(package_id)
}
},
[createVNode("i", { class: "fa fa-trash", 'aria-hidden': "true" }), __("Delete")])
$.each($(this).find("td .actions"), function (index, e) {
let package_id = api.row(index).data().package_id
let editButton = createVNode("a", {
class: "btn btn-default btn-xs", role: "button", onClick: () => {
edit_package(package_id)
let n = createVNode('span', {}, [editButton, " ", deleteButton])
render(n, e)
})
$.each($(this).find("tbody tr td:first-child"), function (index, e) {
let row = api.row(index).data()
if (!row) return // Happen if the table is empty
let n = createVNode("a", {
role: "button",
href: "/cgi-bin/koha/erm/eholdings/packages/" + row.package_id,
onClick: (e) => {
e.preventDefault()
show_package(row.package_id)
}
},
`${row.name} (#${row.package_id})`
)
if (row.is_selected) {
n = createVNode('span', {}, [n, " ", createVNode("i", { class: "fa fa-check-square-o", style: { color: "green" }, title: __("Is selected") })])
}
},
[createVNode("i", { class: "fa fa-pencil", 'aria-hidden': "true" }), __("Edit")])
let deleteButton = createVNode("a", {
class: "btn btn-default btn-xs", role: "button", onClick: () => {
delete_package(package_id)
render(n, e)
})
},
...(erm_provider == 'manual' ? {
preDrawCallback: function (settings) {
var table_id = settings.nTable.id
if (erm_provider == 'manual') {
$("#" + table_id).find("thead th").eq(1).attr('data-filter', 'vendors')
}
},
[createVNode("i", { class: "fa fa-trash", 'aria-hidden': "true" }), __("Delete")])
let n = createVNode('span', {}, [editButton, " ", deleteButton])
render(n, e)
})
$.each($(this).find("tbody tr td:first-child"), function (index, e) {
let row = api.row(index).data()
if (!row) return // Happen if the table is empty
let n = createVNode("a", {
role: "button",
href: "/cgi-bin/koha/erm/eholdings/packages/" + row.package_id,
onClick: (e) => {
e.preventDefault()
show_package(row.package_id)
}
},
`${row.name} (#${row.package_id})`
)
if (row.is_selected) {
n = createVNode('span', {}, [n, " ", createVNode("i", { class: "fa fa-check-square-o", style: { color: "green" }, title: __("Is selected") })])
$("#" + table_id).find("thead th").eq(2).attr('data-filter', 'av_package_types')
$("#" + table_id).find("thead th").eq(3).attr('data-filter', 'av_package_content_types')
}
render(n, e)
})
},
...(erm_provider == 'manual' ? {
preDrawCallback: function (settings) {
var table_id = settings.nTable.id
if (erm_provider == 'manual') {
$("#" + table_id).find("thead th").eq(1).attr('data-filter', 'vendors')
}
$("#" + table_id).find("thead th").eq(2).attr('data-filter', 'av_package_types')
$("#" + table_id).find("thead th").eq(3).attr('data-filter', 'av_package_content_types')
} : {}),
}, eholdings_packages_table_settings, erm_provider == 'manual' ? 1 : 0, additional_filters)
if (erm_provider != 'manual') {
if (filters.package_name.length) {
this.filter_table()
}
} : {}),
}, eholdings_packages_table_settings, erm_provider == 'manual' ? 1 : 0, additional_filters)
if (erm_provider != 'manual') {
if (filters.package_name.length) {
this.filter_table()
}
}
},
},
beforeUnmount() {
$('#package_list')
.DataTable()
.destroy(true)
//$('#package_list')
// .DataTable()
// .destroy(true)
},
components: { Toolbar },
name: "EHoldingsPackagesList",
}
</script>
</script>

View File

@ -12,12 +12,16 @@
<input
type="text"
id="package_name_filter"
v-model="this.filters.package_name"
@keyup.enter="filter_table"
/>
</li>
<li>
<label>{{ $t("Selection status") }}:</label>
<select id="selection_type_filter">
<select
id="selection_type_filter"
v-model="this.filters.selection_type"
>
<option value="0">{{ $t("All") }}</option>
<option value="1">{{ $t("Selected") }}</option>
<option value="2">{{ $t("Not selected") }}</option>
@ -47,6 +51,10 @@ export default {
},
data() {
return {
filters: {
package_name: "",
selection_type: 0,
},
display_filters: false,
}
},
@ -61,75 +69,73 @@ export default {
filter_table: function () {
$("#package_list").DataTable().draw()
},
build_datatable: function () {
let show_resource = this.show_resource
let resources = this.resources
let filters = this.filters
$('#package_list').dataTable($.extend(true, {}, dataTablesDefaults, {
data: resources,
"embed": ['package.name'],
...(erm_provider == 'manual' ? { order: [[0, "asc"]] } : {}),
...(erm_provider != 'manual' ? { ordering: false } : {}),
...(erm_provider != 'manual' ? { dom: '<"top pager"<"table_entries"ilp>>tr<"bottom pager"ip>' } : {}),
...(erm_provider != 'manual' ? { aLengthMenu: [[10, 20, 50, 100], [10, 20, 50, 100]] } : {}),
autoWidth: false,
"columns": [
{
"title": __("Name"),
"data": "package.name",
"searchable": (erm_provider == 'manual'),
"orderable": (erm_provider == 'manul'),
"render": function (data, type, row, meta) {
// Rendering done in drawCallback
return ""
},
width: '100%',
},
],
drawCallback: function (settings) {
var api = new $.fn.dataTable.Api(settings)
$.each($(this).find("tbody tr td:first-child"), function (index, e) {
let row = api.row(index).data()
if (!row) return // Happen if the table is empty
let n = createVNode("a", {
role: "button",
href: "/cgi-bin/koha/erm/eholdings/resources/" + row.resource_id,
onClick: (e) => {
e.preventDefault()
show_resource(row.resource_id)
}
},
`${row.package.name}`
)
if (row.is_selected) {
n = createVNode('span', {}, [n, " ", createVNode("i", { class: "fa fa-check-square-o", style: { color: "green" }, title: __("Is selected") })])
}
render(n, e)
})
},
...(erm_provider != 'manual' ? {
initComplete: function () {
$.fn.dataTable.ext.search.push(
function (settings, data, dataIndex, row) {
console.log(filters.selection_type)
return row.package.name.match(new RegExp(filters.package_name, "i"))
&& (filters.selection_type == 0
|| filters.selection_type == 1 && row.is_selected
|| filters.selection_type == 2 && !row.is_selected)
}
)
}
} : {}),
}))
},
},
mounted() {
let show_resource = this.show_resource
let resources = this.resources
let additional_filters = {}
if (erm_provider != 'manual') {
additional_filters = {
name: function () {
let package_name_search = $("#package_name_filter").val()
if (!package_name_search) return ""
return package_name_search
},
selection_type: function () {
let selection_type_search = $("#selection_type_filter").val()
if (!selection_type_search) return ""
return selection_type_search
},
}
}
$('#package_list').dataTable($.extend(true, {}, dataTablesDefaults, {
data: resources,
...(erm_provider != 'manual' ? { dom: '<"top pager"<"table_entries"ilp>>tr<"bottom pager"ip>' } : {}),
...(erm_provider != 'manual' ? { lengthMenu: [[10, 20, 50, 100], [10, 20, 50, 100]] } : {}),
"embed": ['package.name'],
"columnDefs": [{ "width": "20%", "targets": 0 }
],
autoWidth: false,
"columns": [
{
"title": __("Name"),
"data": "package_name",
"searchable": true,
"orderable": true,
"render": function (data, type, row, meta) {
// Rendering done in drawCallback
return ""
},
width: '100%',
},
],
drawCallback: function (settings) {
var api = new $.fn.dataTable.Api(settings)
$.each($(this).find("tbody tr td:first-child"), function (index, e) {
let row = api.row(index).data()
if (!row) return // Happen if the table is empty
let n = createVNode("a", {
role: "button",
href: "/cgi-bin/koha/erm/eholdings/resources/" + row.resource_id,
onClick: (e) => {
e.preventDefault()
show_resource(row.resource_id)
}
},
`${row.package.name}`
)
if (row.is_selected) {
n = createVNode('span', {}, [n, " ", createVNode("i", { class: "fa fa-check-square-o", style: { color: "green" }, title: __("Is selected") })])
}
render(n, e)
})
},
}))
$('#package_list_result').css('display', 'block')
$("#package_list").DataTable().columns.adjust().draw()
this.build_datatable()
},
beforeUnmount() {
$('#package_list')
@ -145,7 +151,7 @@ export default {
<style scoped>
#package_list_result {
width: 50%;
width: 60%;
padding-left: 26rem;
}
#package_list {
@ -154,4 +160,4 @@ export default {
#filters fieldset {
margin: 0;
}
</style>
</style>

View File

@ -55,7 +55,7 @@ export default {
onSubmit(e) {
e.preventDefault()
let apiUrl = '/api/v1/erm/eholdings/titles' + this.title_id
let apiUrl = '/api/v1/erm/eholdings/titles/' + this.eholding.title_id
const options = {
method: 'DELETE',

View File

@ -3,14 +3,13 @@
<div v-if="!this.initialized">{{ $t("Loading") }}</div>
<div v-else-if="this.titles" id="titles_list">
<Toolbar />
<table v-if="this.titles.length" id="title_list"></table>
<div v-if="this.titles.length" id="title_list_result">
<table v-if="this.titles.length" id="title_list"></table>
</div>
<div v-else-if="this.initialized" class="dialog message">
{{ $t("There are no titles defined") }}
</div>
</div>
<div id="title_list_result">
<table id="title_list"></table>
</div>
</div>
<div v-else>
<fieldset>
@ -94,7 +93,7 @@ export default {
},
beforeRouteEnter(to, from, next) {
next(vm => {
vm.getTitles()
vm.getTitles().then(() => vm.build_datatable())
})
},
inject: ['erm_provider'],
@ -123,170 +122,170 @@ export default {
} else {
this.cannot_search = true
}
}
},
updated() {
let show_title = this.show_title
let edit_title = this.edit_title
let delete_title = this.delete_title
let get_lib_from_av = this.get_lib_from_av
let filters = this.filters
},
build_datatable: function () {
let show_title = this.show_title
let edit_title = this.edit_title
let delete_title = this.delete_title
let get_lib_from_av = this.get_lib_from_av
let filters = this.filters
window['vendors'] = this.vendors.map(e => {
e['_id'] = e['id']
e['_str'] = e['name']
return e
})
let vendors_map = this.vendors.reduce((map, e) => {
map[e.id] = e
return map
}, {})
window['av_title_publication_types'] = this.av_title_publication_types.map(e => {
e['_id'] = e['authorised_value']
e['_str'] = e['lib']
return e
})
window['vendors'] = this.vendors.map(e => {
e['_id'] = e['id']
e['_str'] = e['name']
return e
})
let vendors_map = this.vendors.reduce((map, e) => {
map[e.id] = e
return map
}, {})
window['av_title_publication_types'] = this.av_title_publication_types.map(e => {
e['_id'] = e['authorised_value']
e['_str'] = e['lib']
return e
})
let additional_filters = {}
if (erm_provider != 'manual') {
additional_filters = {
publication_title: function () {
return filters.publication_title || ""
},
publication_type: function () {
return filters.content_type_search || ""
},
selection_type: function () {
return filters.selection_type || ""
},
}
}
$('#title_list').kohaTable({
"ajax": {
"url": "/api/v1/erm/eholdings/titles",
},
embed: ["resources.package"],
...(erm_provider == 'manual' ? { order: [[0, "asc"]] } : {}),
...(erm_provider != 'manual' ? { ordering: false } : {}),
...(erm_provider == 'manual' ? { search: { search: filters.publication_title } } : {}),
...(erm_provider != 'manual' ? { dom: '<"top pager"<"table_entries"ilp>>tr<"bottom pager"ip>' } : {}),
...(erm_provider != 'manual' ? { lengthMenu: [[10, 20, 50, 100], [10, 20, 50, 100]] } : {}),
...(erm_provider != 'manual' ? { deferLoading: true } : {}),
autoWidth: false,
"columns": [
{
"title": __("Title"),
"data": "me.publication_title",
"searchable": (erm_provider == 'manual'),
"orderable": (erm_provider == 'manul'),
"render": function (data, type, row, meta) {
// Rendering done in drawCallback
return ""
}
},
{
"title": __("Vendor"),
"data": "vendor_id",
"searchable": (erm_provider == 'manual'),
"orderable": (erm_provider == 'manul'),
"render": function (data, type, row, meta) {
return row.vendor_id != undefined ? escape_str(vendors_map[row.vendor_id].name) : ""
}
},
{
"title": __("Publication type"),
"data": "publication_type",
"searchable": (erm_provider == 'manual'),
"orderable": (erm_provider == 'manul'),
"render": function (data, type, row, meta) {
return escape_str(get_lib_from_av("av_title_publication_types", row.publication_type))
}
},
{
"title": __("Identifier"),
"data": "print_identifier:online_identifier",
"searchable": (erm_provider == 'manual'),
"orderable": (erm_provider == 'manul'),
"render": function (data, type, row, meta) {
let print_identifier = row.print_identifier
let online_identifier = row.online_identifier
return (print_identifier ? escape_str(_("ISBN (Print): %s").format(print_identifier)) : "") +
(online_identifier ? escape_str(_("ISBN (Online): %s").format(online_identifier)) : "")
}
},
erm_provider == 'manual' ? {
"title": __("Actions"),
"data": function (row, type, val, meta) {
return '<div class="actions"></div>'
let additional_filters = {}
if (erm_provider != 'manual') {
additional_filters = {
publication_title: function () {
return filters.publication_title || ""
},
"className": "actions noExport",
"searchable": false,
"orderable": false
} : null,
].filter(Boolean),
drawCallback: function (settings) {
var api = new $.fn.dataTable.Api(settings)
$.each($(this).find("td .actions"), function (index, e) {
let title_id = api.row(index).data().title_id
let editButton = createVNode("a", {
class: "btn btn-default btn-xs", role: "button", onClick: () => {
edit_title(title_id)
}
publication_type: function () {
return filters.content_type_search || ""
},
[createVNode("i", { class: "fa fa-pencil", 'aria-hidden': "true" }), __("Edit")])
let deleteButton = createVNode("a", {
class: "btn btn-default btn-xs", role: "button", onClick: () => {
delete_title(title_id)
}
selection_type: function () {
return filters.selection_type || ""
},
[createVNode("i", { class: "fa fa-trash", 'aria-hidden': "true" }), __("Delete")])
let n = createVNode('span', {}, [editButton, " ", deleteButton])
render(n, e)
})
$.each($(this).find("tbody tr td:first-child"), function (index, e) {
let row = api.row(index).data()
if (!row) return // Happen if the table is empty
let n = createVNode("a", {
role: "button",
onClick: (e) => {
e.preventDefault()
show_title(row.title_id)
}
},
`${row.publication_title} (#${row.title_id})`
)
// TODO? We don't have is_selected at title level
//if (row.is_selected) {
// n = createVNode('span', {}, [n, " ", createVNode("i", { class: "fa fa-check-square-o", style: { color: "green" }, title: __("Is selected") })])
//}
render(n, e)
})
},
...(erm_provider == 'manual' ? {
preDrawCallback: function (settings) {
var table_id = settings.nTable.id
$("#" + table_id).find("thead th").eq(1).attr('data-filter', 'vendors')
}
} : {}),
}, eholdings_titles_table_settings, erm_provider == 'manual' ? 1 : 0, additional_filters)
if (erm_provider != 'manual') {
if (filters.publication_title.length) {
this.filter_table()
}
}
$('#title_list').kohaTable({
"ajax": {
"url": "/api/v1/erm/eholdings/titles",
},
embed: ["resources.package"],
...(erm_provider == 'manual' ? { order: [[0, "asc"]] } : {}),
...(erm_provider != 'manual' ? { ordering: false } : {}),
...(erm_provider == 'manual' ? { search: { search: filters.publication_title } } : {}),
...(erm_provider != 'manual' ? { dom: '<"top pager"<"table_entries"ilp>>tr<"bottom pager"ip>' } : {}),
...(erm_provider != 'manual' ? { aLengthMenu: [[10, 20, 50, 100], [10, 20, 50, 100]] } : {}),
...(erm_provider != 'manual' ? { deferLoading: true } : {}),
autoWidth: false,
"columns": [
{
"title": __("Title"),
"data": "me.publication_title",
"searchable": (erm_provider == 'manual'),
"orderable": (erm_provider == 'manul'),
"render": function (data, type, row, meta) {
// Rendering done in drawCallback
return ""
}
},
{
"title": __("Vendor"),
"data": "vendor_id",
"searchable": (erm_provider == 'manual'),
"orderable": (erm_provider == 'manul'),
"render": function (data, type, row, meta) {
return row.vendor_id != undefined ? escape_str(vendors_map[row.vendor_id].name) : ""
}
},
{
"title": __("Publication type"),
"data": "publication_type",
"searchable": (erm_provider == 'manual'),
"orderable": (erm_provider == 'manul'),
"render": function (data, type, row, meta) {
return escape_str(get_lib_from_av("av_title_publication_types", row.publication_type))
}
},
{
"title": __("Identifier"),
"data": "print_identifier:online_identifier",
"searchable": (erm_provider == 'manual'),
"orderable": (erm_provider == 'manul'),
"render": function (data, type, row, meta) {
let print_identifier = row.print_identifier
let online_identifier = row.online_identifier
return (print_identifier ? escape_str(_("ISBN (Print): %s").format(print_identifier)) : "") +
(online_identifier ? escape_str(_("ISBN (Online): %s").format(online_identifier)) : "")
}
},
erm_provider == 'manual' ? {
"title": __("Actions"),
"data": function (row, type, val, meta) {
return '<div class="actions"></div>'
},
"className": "actions noExport",
"searchable": false,
"orderable": false
} : null,
].filter(Boolean),
drawCallback: function (settings) {
var api = new $.fn.dataTable.Api(settings)
$.each($(this).find("td .actions"), function (index, e) {
let title_id = api.row(index).data().title_id
let editButton = createVNode("a", {
class: "btn btn-default btn-xs", role: "button", onClick: () => {
edit_title(title_id)
}
},
[createVNode("i", { class: "fa fa-pencil", 'aria-hidden': "true" }), __("Edit")])
let deleteButton = createVNode("a", {
class: "btn btn-default btn-xs", role: "button", onClick: () => {
delete_title(title_id)
}
},
[createVNode("i", { class: "fa fa-trash", 'aria-hidden': "true" }), __("Delete")])
let n = createVNode('span', {}, [editButton, " ", deleteButton])
render(n, e)
})
$.each($(this).find("tbody tr td:first-child"), function (index, e) {
let row = api.row(index).data()
if (!row) return // Happen if the table is empty
let n = createVNode("a", {
role: "button",
onClick: (e) => {
e.preventDefault()
show_title(row.title_id)
}
},
`${row.publication_title} (#${row.title_id})`
)
// TODO? We don't have is_selected at title level
//if (row.is_selected) {
// n = createVNode('span', {}, [n, " ", createVNode("i", { class: "fa fa-check-square-o", style: { color: "green" }, title: __("Is selected") })])
//}
render(n, e)
})
},
...(erm_provider == 'manual' ? {
preDrawCallback: function (settings) {
var table_id = settings.nTable.id
$("#" + table_id).find("thead th").eq(1).attr('data-filter', 'vendors')
}
} : {}),
}, eholdings_titles_table_settings, erm_provider == 'manual' ? 1 : 0, additional_filters)
if (erm_provider != 'manual') {
if (filters.publication_title.length) {
this.filter_table()
}
}
},
},
beforeUnmount() {
$('#title_list')
.DataTable()
.destroy(true)
//$('#title_list')
// .DataTable()
// .destroy(true)
},
components: { Toolbar },
name: "EHoldingsTitlesList",
}
</script>
</script>