Remove checkbox column and batch-delete from trip history
This commit is contained in:
@@ -16,9 +16,6 @@
|
|||||||
<div class="card shadow-sm">
|
<div class="card shadow-sm">
|
||||||
<div class="card-header py-2 d-flex justify-content-between align-items-center">
|
<div class="card-header py-2 d-flex justify-content-between align-items-center">
|
||||||
<h6 class="text-primary fw-bold m-0">Recorded trips</h6>
|
<h6 class="text-primary fw-bold m-0">Recorded trips</h6>
|
||||||
<button id="delete-selected-btn" class="btn btn-sm btn-outline-danger" type="button" hidden title="Delete selected trips">
|
|
||||||
<i class="fas fa-trash fa-fw"></i> Delete selected
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body p-0">
|
<div class="card-body p-0">
|
||||||
<div id="trip-loading" class="text-center text-muted py-4">
|
<div id="trip-loading" class="text-center text-muted py-4">
|
||||||
@@ -42,7 +39,6 @@
|
|||||||
true
|
true
|
||||||
) }}
|
) }}
|
||||||
<script>document.getElementById('trip-list').dataset.deleteUrl = '/api/v1/portal/trip/';</script>
|
<script>document.getElementById('trip-list').dataset.deleteUrl = '/api/v1/portal/trip/';</script>
|
||||||
<script>document.getElementById('trip-list').dataset.batchDeleteUrl = '/api/v1/portal/trips/delete';</script>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+1
-24
@@ -199,26 +199,6 @@
|
|||||||
var tl = document.getElementById("trip-list");
|
var tl = document.getElementById("trip-list");
|
||||||
var del = tl && tl.dataset.deletable === "1";
|
var del = tl && tl.dataset.deletable === "1";
|
||||||
var dUrl = (tl && tl.dataset.deleteUrl) || "/api/trip/";
|
var dUrl = (tl && tl.dataset.deleteUrl) || "/api/trip/";
|
||||||
var bUrl = tl && tl.dataset.batchDeleteUrl;
|
|
||||||
var btD = document.getElementById("delete-selected-btn");
|
|
||||||
function cIds() { return Array.from(body.querySelectorAll("input.trip-checkbox:checked")).map(function (c) { return parseInt(c.value); }); }
|
|
||||||
function upBt() { if (!btD) return; var n = cIds().length; btD.hidden = !n; btD.textContent = "Delete selected (" + n + ")"; }
|
|
||||||
function slAll() {
|
|
||||||
var cbs = body.querySelectorAll("input.trip-checkbox");
|
|
||||||
var all = cbs.length && Array.from(cbs).every(function (c) { return c.checked; });
|
|
||||||
cbs.forEach(function (c) { c.checked = !all; }); upBt();
|
|
||||||
}
|
|
||||||
async function delSel() {
|
|
||||||
var ids = cIds(); if (!ids.length || !bUrl) return;
|
|
||||||
if (!(await window.confirmDelete("Delete " + ids.length + " trip(s)? Raw GPS data is kept."))) return;
|
|
||||||
try {
|
|
||||||
var r = await fetch(bUrl, {method: "POST", headers: {"Content-Type": "application/json"}, body: JSON.stringify({ids: ids})});
|
|
||||||
if (!r.ok) throw new Error("Delete failed");
|
|
||||||
ids.forEach(function (id) { var row = body.querySelector('tr[data-trip-id="' + id + '"]'); if (row) row.remove(); });
|
|
||||||
upBt();
|
|
||||||
} catch (e) { showErr(e.message); }
|
|
||||||
}
|
|
||||||
if (btD) btD.addEventListener("click", delSel);
|
|
||||||
|
|
||||||
function render(tt) {
|
function render(tt) {
|
||||||
body.replaceChildren();
|
body.replaceChildren();
|
||||||
@@ -228,12 +208,9 @@
|
|||||||
row.dataset.duration = t.duration_seconds; row.dataset.maxSpeed = t.max_speed_kmh;
|
row.dataset.duration = t.duration_seconds; row.dataset.maxSpeed = t.max_speed_kmh;
|
||||||
row.dataset.tripId = t.id; row.style.cursor = "pointer";
|
row.dataset.tripId = t.id; row.style.cursor = "pointer";
|
||||||
var db = del ? '<button class="btn btn-sm btn-outline-danger ms-1" type="button" data-delete-trip-id="' + t.id + '" title="Delete"><i class="fas fa-trash fa-fw"></i></button>' : "";
|
var db = del ? '<button class="btn btn-sm btn-outline-danger ms-1" type="button" data-delete-trip-id="' + t.id + '" title="Delete"><i class="fas fa-trash fa-fw"></i></button>' : "";
|
||||||
var cb = bUrl ? '<td class="text-center" onclick="event.stopPropagation()"><input type="checkbox" class="trip-checkbox form-check-input" value="' + t.id + '"></td>' : "";
|
row.innerHTML = "<td class=\"text-muted small text-end pe-1\" style=\"width:1%\">#" + t.id + "</td><td>" + fT(t.start_datetime) + "</td><td>" + fK(t.distance_km) + "</td><td>" + fD(t.duration_seconds) + "</td><td>" + fS(t.max_speed_kmh) + "</td><td class=\"text-muted small\">" + (t.odo_start_km != null ? t.odo_start_km.toFixed(0) + " \u2192 " + t.odo_end_km.toFixed(0) + " km" : "\u2014") + "</td><td class=\"text-end text-nowrap d-none d-sm-table-cell\">" + db + "</td>";
|
||||||
row.innerHTML = cb + "<td class=\"text-muted small text-end pe-1\" style=\"width:1%\">#" + t.id + "</td><td>" + fT(t.start_datetime) + "</td><td>" + fK(t.distance_km) + "</td><td>" + fD(t.duration_seconds) + "</td><td>" + fS(t.max_speed_kmh) + "</td><td class=\"text-muted small\">" + (t.odo_start_km != null ? t.odo_start_km.toFixed(0) + " \u2192 " + t.odo_end_km.toFixed(0) + " km" : "\u2014") + "</td><td class=\"text-end text-nowrap d-none d-sm-table-cell\">" + db + "</td>";
|
|
||||||
body.appendChild(row);
|
body.appendChild(row);
|
||||||
});
|
});
|
||||||
body.querySelectorAll("input.trip-checkbox").forEach(function (c) { c.addEventListener("change", upBt); });
|
|
||||||
upBt();
|
|
||||||
}
|
}
|
||||||
body.addEventListener("click", function (e) {
|
body.addEventListener("click", function (e) {
|
||||||
if (del) {
|
if (del) {
|
||||||
|
|||||||
Reference in New Issue
Block a user