Add bulk recheck and auto-refresh to the IPs dashboard page
"Перепроверить выбранные" joins the existing "Удалить выбранные" / "Очистить всё" bulk actions, using the checked-row selection the same way delete already does — no control-api changes needed, since forcing a recheck of a batch of addresses (new, finished, or already-queued, skipping anything mid-check) is exactly what POST /api/v1/admin/ips (db.SubmitIPs) already does, and the dashboard's own SubmitIPs client method already backs both the top add/recheck form and the single-row recheck button. The page also now auto-refreshes every 5s (handleIPsFragment + GET /ips/fragment), mirroring the overview page's existing hx-trigger="every Ns" polling and reusing the same config-driven interval (Cfg.OverviewPollIntervalS) rather than adding a duplicate knob. Since the table now polls itself, each row's selection checkbox gets a stable id plus hx-preserve so a checked box survives the refresh (its own DOM node is kept) while the rest of the row still updates live. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
6117c044b5
commit
ec44d54ac1
4 files changed
+78
-3
No files matched your search
@@ -38,7 +38,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="ips-table-wrap">
|
||||
<div id="ips-table-wrap" hx-get="/ips/fragment" hx-trigger="every {{.PollSeconds}}s" hx-swap="innerHTML">
|
||||
{{template "ips_table" .}}
|
||||
</div>
|
||||
{{end}}
|
||||
@@ -47,6 +47,7 @@
|
||||
<form id="ips-form">
|
||||
<div class="panel">
|
||||
<div class="panel-body" style="display:flex; gap:8px; align-items:center;">
|
||||
<button type="button" class="btn btn-ghost btn-sm" hx-post="/ips/recheck" hx-target="#ips-table-wrap" hx-swap="innerHTML">Перепроверить выбранные</button>
|
||||
<button type="button" class="btn btn-danger-ghost btn-sm" hx-post="/ips/delete" hx-target="#ips-table-wrap" hx-swap="innerHTML" hx-confirm="Удалить выбранные адреса без возможности восстановления?">Удалить выбранные</button>
|
||||
<button type="button" class="btn btn-danger-ghost btn-sm" hx-post="/ips/clear" hx-target="#ips-table-wrap" hx-swap="innerHTML" hx-confirm="Удалить ВСЕ адреса из очереди, включая те, что сейчас проверяются? Действие необратимо.">Очистить всё</button>
|
||||
</div>
|
||||
@@ -58,7 +59,7 @@
|
||||
{{$b := ipBadge .State .OverallResult .FIPAssociatedAt $.FIPSettleSeconds}}
|
||||
{{$terminal := or (eq .State "done") (eq .State "failed") (eq .State "occupied")}}
|
||||
<tr>
|
||||
<td data-label=""><input type="checkbox" name="addresses" value="{{.IPAddress}}"></td>
|
||||
<td data-label=""><input type="checkbox" name="addresses" value="{{.IPAddress}}" id="ip-select-{{.IPAddress}}" hx-preserve="true"></td>
|
||||
<td class="addr" data-label="Адрес"><a href="/ips/{{.IPAddress}}">{{.IPAddress}}</a></td>
|
||||
<td data-label="Состояние"><span class="pill {{$b.Class}}">{{$b.Label}}</span></td>
|
||||
<td data-label="Валидатор">{{deref .OwnerValidatorID}}</td>
|
||||
|
||||
Reference in new issue
Block a user