85 lines
3.7 KiB
TypeScript
85 lines
3.7 KiB
TypeScript
// file: kb-app-demo-desktop/frontend/ts/demo_config.ts
|
|
// version: 6
|
|
|
|
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.ts";
|
|
import type { DemoConfigPayload } from "./bindings/kb_app_demo_desktop/demo_config/DemoConfigPayload.ts";
|
|
|
|
(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<HTMLElement>(selector);
|
|
if (element) {
|
|
element.textContent = value;
|
|
}
|
|
}
|
|
|
|
function renderJsonViewer(selector: string, value: unknown): void {
|
|
const container = document.querySelector<HTMLElement>(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<void> {
|
|
try {
|
|
const payload = await invoke<DemoConfigPayload>("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-desktop.frontend.demo_config", `Configuration loading failed: ${message}`);
|
|
}
|
|
}
|
|
|
|
document.addEventListener("DOMContentLoaded", async () => {
|
|
installFrontendConsoleBridge("kb-app-demo-desktop.frontend.demo_config");
|
|
|
|
frontendDebug("kb-app-demo-desktop.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();
|
|
});
|