61 lines
2.9 KiB
TypeScript
61 lines
2.9 KiB
TypeScript
// file: kb-app-demo-desktop/frontend/ts/demo_sql_diag.ts
|
|
// version: 3
|
|
|
|
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_sql_tables";
|
|
import type { DemoSqlDiagPayload } from "./bindings/kb_app_demo_desktop/demo_sql_diag/DemoSqlDiagPayload";
|
|
|
|
(window as Window & typeof globalThis & { bootstrap?: typeof bootstrap }).bootstrap = bootstrap;
|
|
(window as Window & typeof globalThis & { ResizeObserver?: typeof ResizeObserver }).ResizeObserver = ResizeObserver;
|
|
|
|
let latestPayload: DemoSqlDiagPayload | null = null;
|
|
|
|
async function refreshDiagnostics(): Promise<void> {
|
|
setText("#sqlDiagStatus", "Chargement...");
|
|
try {
|
|
const payload = await invoke<DemoSqlDiagPayload>("load_demo_sql_diag");
|
|
setText("#sqlDiagConfigPath", payload.configPath);
|
|
setText("#sqlDiagProfile", payload.activeProfileName);
|
|
setText("#sqlDiagBackend", payload.backend);
|
|
setText("#sqlDiagDsn", payload.maskedDsn);
|
|
setText("#sqlDiagSchema", payload.currentSchema ?? "—");
|
|
setText("#sqlDiagHealth", payload.healthStatus);
|
|
setText("#sqlDiagMigration", payload.migrationStatus);
|
|
setText("#sqlDiagStatus", "OK");
|
|
renderTables("#sqlDiagTable", "#sqlDiagTableBody", payload.tables);
|
|
latestPayload = payload;
|
|
renderJsonViewer("#sqlDiagJson", payload);
|
|
frontendDebug("kb_app_demo_desktop.frontend.demo_sql_diag", "SQL diagnostics refreshed");
|
|
} catch (caughtError) {
|
|
const message = caughtError instanceof Error ? caughtError.message : String(caughtError);
|
|
setText("#sqlDiagStatus", `Erreur : ${message}`);
|
|
latestPayload = null;
|
|
renderJsonViewer("#sqlDiagJson", { error: message });
|
|
frontendError("kb_app_demo_desktop.frontend.demo_sql_diag", `SQL 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_sql_diag");
|
|
frontendDebug("kb_app_demo_desktop.frontend.demo_sql_diag", "SQL 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();
|
|
});
|