v0.3.7-pre.010

This commit is contained in:
2026-09-02 18:56:09 +02:00
parent 97f84e5c58
commit 313d2a1ea6
20 changed files with 533 additions and 40 deletions

View File

@@ -1,5 +1,5 @@
// file: crates/ksp-app-backfill-desk/frontend/ts/main.ts
// version: 5
// version: 6
import "bootstrap";
import ResizeObserver from "resize-observer-polyfill";
@@ -7,6 +7,7 @@ import "simplebar";
import { listen } from "@tauri-apps/api/event";
import { getCurrentWindow } from "@tauri-apps/api/window";
import type { BackfillRunStatusDto } from "./bindings/ksp_app_backfill_desk/backfill_status/BackfillRunStatusDto.ts";
import type { BackfillCancelResponseDto } from "./bindings/ksp_app_backfill_desk/dto_backfill/BackfillCancelResponseDto.ts";
import type { BackfillRequestPreviewDto } from "./bindings/ksp_app_backfill_desk/dto_backfill/BackfillRequestPreviewDto.ts";
import type { BackfillStartRequestDto } from "./bindings/ksp_app_backfill_desk/dto_backfill/BackfillStartRequestDto.ts";
import type { BackfillStartResponseDto } from "./bindings/ksp_app_backfill_desk/dto_backfill/BackfillStartResponseDto.ts";
@@ -39,6 +40,7 @@ const scopeLabels: Record<string, string> = {
};
let compositionReadyForStart = false;
let currentRunStatus: BackfillRunStatusDto | null = null;
let runStartAccepted = false;
@@ -451,10 +453,15 @@ function bindBackfillRouteSelection(): void {
}
function renderBackfillRunStatus(status: BackfillRunStatusDto | null, source: "event" | "startup" | "start" | "user"): void {
function renderBackfillRunStatus(status: BackfillRunStatusDto | null, source: "cancel" | "event" | "startup" | "start" | "user"): void {
const card = document.querySelector<HTMLElement>("#backfillRunStatusCard");
const cancelButton = document.querySelector<HTMLButtonElement>("#cancelBackfillRun");
currentRunStatus = status;
if (!status) {
runStartAccepted = false;
if (cancelButton) {
cancelButton.disabled = true;
}
refreshStartButton();
if (card) {
card.hidden = true;
@@ -463,6 +470,9 @@ function renderBackfillRunStatus(status: BackfillRunStatusDto | null, source: "e
return;
}
runStartAccepted = status.active;
if (cancelButton) {
cancelButton.disabled = !status.active;
}
refreshStartButton();
if (card) {
card.hidden = false;
@@ -499,7 +509,7 @@ function renderBackfillRunStatus(status: BackfillRunStatusDto | null, source: "e
});
}
async function syncBackfillStatus(source: "startup" | "start" | "user"): Promise<void> {
async function syncBackfillStatus(source: "cancel" | "startup" | "start" | "user"): Promise<void> {
frontendDebug("main", "Backfill Desk latest-value status resynchronization started", { source });
const status = await invokeKsp<BackfillRunStatusDto | null>("main", "backfill_status");
renderBackfillRunStatus(status, source);
@@ -517,7 +527,40 @@ async function bindBackfillStatusMonitoring(): Promise<void> {
void syncBackfillStatus("user").catch(() => frontendWarn("main", "Backfill Desk latest-value status refresh failed"));
});
}
frontendTrace("main", "Backfill Desk latest-value monitoring listener installed");
const cancelButton = document.querySelector<HTMLButtonElement>("#cancelBackfillRun");
if (cancelButton) {
cancelButton.addEventListener("click", () => {
const status = currentRunStatus;
if (!status || !status.active) {
return;
}
cancelButton.disabled = true;
frontendDebug("main", "Backfill Desk cooperative cancellation requested", { jobId: status.jobId, state: status.state });
void invokeKsp<BackfillCancelResponseDto>("main", "backfill_cancel", { jobId: status.jobId })
.then(response => {
const feedback = document.querySelector<HTMLElement>("#backfillCancelFeedback");
if (feedback) {
feedback.hidden = false;
feedback.textContent = response.accepted
? `Annulation coopérative acceptée pour ${response.jobId}.`
: `Aucune nouvelle annulation acceptée pour ${response.jobId} (${response.state}).`;
}
frontendInfo("main", "Backfill Desk cooperative cancellation response received", {
accepted: response.accepted,
jobId: response.jobId,
state: response.state,
});
return syncBackfillStatus("cancel");
})
.catch(() => {
frontendWarn("main", "Backfill Desk cooperative cancellation failed");
if (currentRunStatus?.active) {
cancelButton.disabled = false;
}
});
});
}
frontendTrace("main", "Backfill Desk latest-value monitoring and cancellation handlers installed");
}
function renderRuntimeStatus(status: ShellStatusDto): void {