Files
khadhroony-bot3/kb-app-demo-desktop/frontend/ts/demo_store_diag.ts

61 lines
3.0 KiB
TypeScript

// file: kb-app-demo-desktop/frontend/ts/demo_store_diag.ts
// version: 6
import * as bootstrap from "bootstrap";
import "simplebar";
import ResizeObserver from "resize-observer-polyfill";
import { invoke } from "@tauri-apps/api/core";
import { frontendDebug, frontendError, installFrontendConsoleBridge } from "./frontend_log";
import { jsonText, renderJsonViewer, renderTables, setText } from "./demo_store_tables";
import type { DemoStoreDiagPayload } from "./bindings/kb_app_demo_desktop/demo_store_diag/DemoStoreDiagPayload";
(window as Window & typeof globalThis & { bootstrap?: typeof bootstrap }).bootstrap = bootstrap;
(window as Window & typeof globalThis & { ResizeObserver?: typeof ResizeObserver }).ResizeObserver = ResizeObserver;
let latestPayload: DemoStoreDiagPayload | null = null;
async function refreshDiagnostics(): Promise<void> {
setText("#storeDiagStatus", "Chargement...");
try {
const payload = await invoke<DemoStoreDiagPayload>("load_demo_store_diag");
setText("#storeDiagConfigPath", payload.configPath);
setText("#storeDiagProfile", payload.activeProfileName);
setText("#storeDiagBackend", payload.backend);
setText("#storeDiagConnection", payload.connectionDescriptor);
setText("#storeDiagSchema", payload.namespace ?? "—");
setText("#storeDiagHealth", payload.healthStatus);
setText("#storeDiagMigration", payload.migrationStatus);
setText("#storeDiagStatus", "OK");
renderTables("#storeDiagTable", "#storeDiagTableBody", payload.resources);
latestPayload = payload;
renderJsonViewer("#storeDiagJson", payload);
frontendDebug("kb_app_demo_desktop.frontend.demo_store_diag", "Store diagnostics refreshed");
} catch (caughtError) {
const message = caughtError instanceof Error ? caughtError.message : String(caughtError);
setText("#storeDiagStatus", `Erreur : ${message}`);
latestPayload = null;
renderJsonViewer("#storeDiagJson", { error: message });
frontendError("kb_app_demo_desktop.frontend.demo_store_diag", `Store diagnostics loading failed: ${message}`);
}
}
async function copyDiagnostics(): Promise<void> {
if (latestPayload) {
await navigator.clipboard.writeText(jsonText(latestPayload));
}
}
document.addEventListener("DOMContentLoaded", () => {
installFrontendConsoleBridge("kb_app_demo_desktop.frontend.demo_store_diag");
frontendDebug("kb_app_demo_desktop.frontend.demo_store_diag", "Store diagnostics demo window loaded");
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]');
Array.from(tooltipTriggerList).map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl));
document.querySelector<HTMLButtonElement>("#refreshStoreDiagButton")?.addEventListener("click", () => {
void refreshDiagnostics();
});
document.querySelector<HTMLButtonElement>("#copyStoreDiagButton")?.addEventListener("click", () => {
void copyDiagnostics();
});
void refreshDiagnostics();
});