// file: kb_app_demo/frontend/ts/demo_config.ts // version: 4 import * as bootstrap from "bootstrap"; import "simplebar"; import "@andypf/json-viewer"; import ResizeObserver from "resize-observer-polyfill"; import { invoke } from "@tauri-apps/api/core"; import { frontendDebug, frontendError, installFrontendConsoleBridge } from "./frontend_log"; import type { DemoConfigPayload } from "./bindings/kb_app_demo/demo_config/DemoConfigPayload"; (window as Window & typeof globalThis & { bootstrap?: typeof bootstrap }).bootstrap = bootstrap; (window as Window & typeof globalThis & { ResizeObserver?: typeof ResizeObserver }).ResizeObserver = ResizeObserver; function setText(selector: string, value: string): void { const element = document.querySelector(selector); if (element) { element.textContent = value; } } function renderJsonViewer(selector: string, value: unknown): void { const container = document.querySelector(selector); if (!container) { return; } const serialized = JSON.stringify(value, null, 2) ?? "null"; const viewer = document.createElement("andypf-json-viewer"); viewer.setAttribute("indent", "2"); viewer.setAttribute("expanded", "1"); viewer.setAttribute("theme", "default-light"); viewer.setAttribute("show-data-types", "true"); viewer.setAttribute("show-toolbar", "false"); viewer.setAttribute("expand-icon-type", "arrow"); viewer.setAttribute("show-copy", "true"); viewer.setAttribute("show-size", "true"); viewer.setAttribute("expand-empty", "false"); viewer.setAttribute("data", serialized); container.textContent = ""; container.appendChild(viewer); } function parseSchemaJson(schemaJson: string): unknown { try { return JSON.parse(schemaJson) as unknown; } catch (caughtError) { const message = caughtError instanceof Error ? caughtError.message : String(caughtError); return { error: `Schema JSON parsing failed: ${message}`, raw: schemaJson, }; } } async function loadDemoConfig(): Promise { try { const payload = await invoke("load_demo_config"); setText("#configPath", payload.config_path); setText("#activeProfileName", payload.active_profile_name); setText("#activeEnvironment", payload.environment); renderJsonViewer("#activeProfileJson", payload.active_profile); renderJsonViewer("#fullConfigJson", payload.app_config); renderJsonViewer("#schemaJson", parseSchemaJson(payload.schema_json)); } catch (caughtError) { const message = caughtError instanceof Error ? caughtError.message : String(caughtError); setText("#activeProfileJson", `Erreur pendant le chargement de la configuration : ${message}`); frontendError("kb_app_demo.frontend.demo_config", `Configuration loading failed: ${message}`); } } document.addEventListener("DOMContentLoaded", async () => { installFrontendConsoleBridge("kb_app_demo.frontend.demo_config"); frontendDebug("kb_app_demo.frontend.demo_config", "configuration demo window loaded"); const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]'); Array.from(tooltipTriggerList).map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl)); const toastElList = document.querySelectorAll('.toast'); Array.from(toastElList).map(toastEl => new bootstrap.Toast(toastEl)); const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]'); Array.from(popoverTriggerList).map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl)); await loadDemoConfig(); });