From 6b3fc3a6a06208c25721b75ffa98ac9bccc4d556 Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Fri, 21 Jul 2023 02:10:26 +0300 Subject: [PATCH] add support of table filter controls (#101) --- .../ahriman/templates/build-status.jinja2 | 19 +++--- .../build-status/key-import-modal.jinja2 | 2 +- .../build-status/package-add-modal.jinja2 | 8 +-- .../build-status/package-info-modal.jinja2 | 2 +- .../build-status/package-rebuild-modal.jinja2 | 4 +- .../templates/build-status/table.jinja2 | 51 ++++++++++++---- .../share/ahriman/templates/repo-index.jinja2 | 58 +++++++++++++++---- .../templates/utils/bootstrap-scripts.jinja2 | 45 +++++++++++--- .../ahriman/templates/utils/style.jinja2 | 14 +++-- 9 files changed, 153 insertions(+), 50 deletions(-) diff --git a/package/share/ahriman/templates/build-status.jinja2 b/package/share/ahriman/templates/build-status.jinja2 index 995088aa..0b0dac54 100644 --- a/package/share/ahriman/templates/build-status.jinja2 +++ b/package/share/ahriman/templates/build-status.jinja2 @@ -63,6 +63,8 @@ - - - - - - - - + + + + + + + +
package baseversionpackagesgroupslicensespackagerlast updatestatuspackage baseversionpackagesgroupslicensespackagerlast updatestatus
diff --git a/package/share/ahriman/templates/build-status/key-import-modal.jinja2 b/package/share/ahriman/templates/build-status/key-import-modal.jinja2 index dd5628d0..7def88d6 100644 --- a/package/share/ahriman/templates/build-status/key-import-modal.jinja2 +++ b/package/share/ahriman/templates/build-status/key-import-modal.jinja2 @@ -84,7 +84,7 @@ showSuccess("Success", `Key ${key} has been imported`); }, error: (jqXHR, _, errorThrown) => { - const message = _ => { return `Could not import key ${key} from ${server}`; }; + const message = _ => `Could not import key ${key} from ${server}`; showFailure("Action failed", message, jqXHR, errorThrown); }, }); diff --git a/package/share/ahriman/templates/build-status/package-add-modal.jinja2 b/package/share/ahriman/templates/build-status/package-add-modal.jinja2 index 86822c72..0dee9a14 100644 --- a/package/share/ahriman/templates/build-status/package-add-modal.jinja2 +++ b/package/share/ahriman/templates/build-status/package-add-modal.jinja2 @@ -60,8 +60,8 @@ const packages = packageInput.val(); if (packages) { packageAddModal.modal("hide"); - const onSuccess = update => { return `Packages ${update} have been added`; }; - const onFailure = error => { return `Package addition failed: ${error}`; }; + const onSuccess = update => `Packages ${update} have been added`; + const onFailure = error => `Package addition failed: ${error}`; doPackageAction("/api/v1/service/add", [packages], onSuccess, onFailure); } } @@ -70,8 +70,8 @@ const packages = packageInput.val(); if (packages) { packageAddModal.modal("hide"); - const onSuccess = update => { return `Packages ${update} have been requested`; }; - const onFailure = error => { return `Package request failed: ${error}`; }; + const onSuccess = update => `Packages ${update} have been requested`; + const onFailure = error => `Package request failed: ${error}`; doPackageAction("/api/v1/service/request", [packages], onSuccess, onFailure); } } diff --git a/package/share/ahriman/templates/build-status/package-info-modal.jinja2 b/package/share/ahriman/templates/build-status/package-info-modal.jinja2 index 5abdff21..e3eb5ff5 100644 --- a/package/share/ahriman/templates/build-status/package-info-modal.jinja2 +++ b/package/share/ahriman/templates/build-status/package-info-modal.jinja2 @@ -61,7 +61,7 @@ error: (jqXHR, _, errorThrown) => { // show failed modal in case if first time loading if (isPackageBaseSet) { - const message = error => { return `Could not load package ${packageBase} logs: ${error}`; }; + const message = error => `Could not load package ${packageBase} logs: ${error}`; showFailure("Load failure", message, jqXHR, errorThrown); } }, diff --git a/package/share/ahriman/templates/build-status/package-rebuild-modal.jinja2 b/package/share/ahriman/templates/build-status/package-rebuild-modal.jinja2 index 3663b12b..2724128d 100644 --- a/package/share/ahriman/templates/build-status/package-rebuild-modal.jinja2 +++ b/package/share/ahriman/templates/build-status/package-rebuild-modal.jinja2 @@ -33,8 +33,8 @@ const packages = dependencyInput.val(); if (packages) { packageRebuildModal.modal("hide"); - const onSuccess = update => { return `Repository rebuild has been run for packages which depend on ${update}`; }; - const onFailure = error => { return `Repository rebuild failed: ${error}`; }; + const onSuccess = update => `Repository rebuild has been run for packages which depend on ${update}`; + const onFailure = error => `Repository rebuild failed: ${error}`; doPackageAction("/api/v1/service/rebuild", [packages], onSuccess, onFailure); } } diff --git a/package/share/ahriman/templates/build-status/table.jinja2 b/package/share/ahriman/templates/build-status/table.jinja2 index 03b327da..337b9343 100644 --- a/package/share/ahriman/templates/build-status/table.jinja2 +++ b/package/share/ahriman/templates/build-status/table.jinja2 @@ -15,6 +15,25 @@ table.bootstrapTable(method, {field: "id", values: [data.id]}); } else showLogs(data.id); }); + table.on("created-controls.bs.table", () => { + const pickerInput = $(".bootstrap-table-filter-control-timestamp"); + pickerInput.daterangepicker({ + autoUpdateInput: false, + locale: { + cancelLabel: "Clear", + }, + }); + + pickerInput.on("apply.daterangepicker", (event, picker) => { + pickerInput.val(`${picker.startDate.format("YYYY-MM-DD")} - ${picker.endDate.format("YYYY-MM-DD")}`); + table.bootstrapTable("triggerSearch"); + }); + + pickerInput.on("cancel.daterangepicker", () => { + pickerInput.val(""); + table.bootstrapTable("triggerSearch"); + }); + }); const repositoryBadge = $("#badge-repository"); const statusBadge = $("#badge-status"); @@ -37,21 +56,21 @@ } function getSelection() { - return table.bootstrapTable("getSelections").map(row => { return row.id; }); + return table.bootstrapTable("getSelections").map(row => row.id); } function removePackages() { - const onSuccess = update => { return `Packages ${update} have been removed`; }; - const onFailure = error => { return `Could not remove packages: ${error}`; }; + const onSuccess = update => `Packages ${update} have been removed`; + const onFailure = error => `Could not remove packages: ${error}`; doPackageAction("/api/v1/service/remove", getSelection(), onSuccess, onFailure); } function updatePackages() { const currentSelection = getSelection(); const [url, onSuccess] = currentSelection.length === 0 - ? ["/api/v1/service/update", _ => { return "Repository update has been run"; }] - : ["/api/v1/service/add", update => { return `Run update for packages ${update}`; }]; - const onFailure = error => { return `Packages update failed: ${error}`; }; + ? ["/api/v1/service/update", _ => "Repository update has been run"] + : ["/api/v1/service/add", update => `Run update for packages ${update}`]; + const onFailure = error => `Packages update failed: ${error}`; doPackageAction(url, currentSelection, onSuccess, onFailure); } @@ -81,13 +100,13 @@ success: response => { const extractListProperties = (description, property) => { return Object.values(description.packages) - .map(pkg => { return pkg[property]; }) - .reduce((left, right) => { return left.concat(right); }, []); + .map(pkg => pkg[property]) + .reduce((left, right) => left.concat(right), []); }; const listToTable = data => { return Array.from(new Set(data)) .sort() - .map(entry => { return safe(entry); }) + .map(entry => safe(entry)) .join("
"); }; @@ -121,7 +140,7 @@ table.bootstrapTable("hideLoading"); } else { // other errors - const message = error => { return `Could not load list of packages: ${error}`; }; + const message = error => `Could not load list of packages: ${error}`; showFailure("Load failure", message, jqXHR, errorThrown); } hideControls(true); @@ -158,6 +177,18 @@ return {classes: cellClass(value)}; } + function filterListGroups() { + return extractDataList(table.bootstrapTable("getData"), "groups"); + } + + function filterListLicenses() { + return extractDataList(table.bootstrapTable("getData"), "licenses"); + } + + function filterListPackagers() { + return extractDataList(table.bootstrapTable("getData"), "packager"); + } + $(() => { table.bootstrapTable({}); statusBadge.popover(); diff --git a/package/share/ahriman/templates/repo-index.jinja2 b/package/share/ahriman/templates/repo-index.jinja2 index 139f21c1..ed8cfcd6 100644 --- a/package/share/ahriman/templates/repo-index.jinja2 +++ b/package/share/ahriman/templates/repo-index.jinja2 @@ -31,6 +31,8 @@ SigLevel = Database{% if has_repo_signed %}Required{% else %}Never{% endif %} Pa
- - - - - - - - - - - + + + + + + + + + + + @@ -96,6 +99,27 @@ SigLevel = Database{% if has_repo_signed %}Required{% else %}Never{% endif %} Pa diff --git a/package/share/ahriman/templates/utils/bootstrap-scripts.jinja2 b/package/share/ahriman/templates/utils/bootstrap-scripts.jinja2 index 5bf02282..fe090cde 100644 --- a/package/share/ahriman/templates/utils/bootstrap-scripts.jinja2 +++ b/package/share/ahriman/templates/utils/bootstrap-scripts.jinja2 @@ -1,16 +1,21 @@ - + - + + - + - - - + - + + + - + + + + + diff --git a/package/share/ahriman/templates/utils/style.jinja2 b/package/share/ahriman/templates/utils/style.jinja2 index 46dce85d..648ec0dd 100644 --- a/package/share/ahriman/templates/utils/style.jinja2 +++ b/package/share/ahriman/templates/utils/style.jinja2 @@ -1,11 +1,15 @@ - - + + - + - + - + + + + +
packageversionarchitecturedescriptionupstream urllicensesgroupsdependsarchive sizeinstalled sizebuild datepackageversionarchitecturedescriptionupstream urllicensesgroupsdependsarchive sizeinstalled sizebuild date