v0.5.3-pre.002
This commit is contained in:
60
kb-app-demo-desktop/frontend/ts/demo_store_diag.ts
Normal file
60
kb-app-demo-desktop/frontend/ts/demo_store_diag.ts
Normal file
@@ -0,0 +1,60 @@
|
||||
// file: kb-app-demo-desktop/frontend/ts/demo_store_diag.ts
|
||||
// version: 5
|
||||
|
||||
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>("#refreshSqlDiagButton")?.addEventListener("click", () => {
|
||||
void refreshDiagnostics();
|
||||
});
|
||||
document.querySelector<HTMLButtonElement>("#copySqlDiagButton")?.addEventListener("click", () => {
|
||||
void copyDiagnostics();
|
||||
});
|
||||
void refreshDiagnostics();
|
||||
});
|
||||
Reference in New Issue
Block a user