v0.1.0-pre.057

This commit is contained in:
2026-07-26 19:40:18 +02:00
parent 562f5c08ed
commit e56f2561c5
10 changed files with 97 additions and 57 deletions

View File

@@ -21,6 +21,7 @@ import type {DemoWsUnsubscribeRequest} from "./bindings/kb_app_demo_desktop/demo
let roleOptions: DemoWsRoleOption[] = [];
let methodOptions: DemoWsMethodOption[] = [];
let wsMessageBuffer = "Aucune connexion active.";
const maxResultOutputCharacters = 200_000;
const maxIncomingMessageCharacters = 25_000;
@@ -51,16 +52,33 @@ function capTextareaValue(value: string): string {
return `... historique tronqué côté UI ...\n${value.slice(value.length - maxResultOutputCharacters)}`;
}
function writeWsMessages(value: string): void {
wsMessageBuffer = capTextareaValue(value);
writeTextarea("#wsResultOutput", wsMessageBuffer);
const element = document.querySelector<HTMLTextAreaElement>("#wsResultOutput");
if (element) {
element.scrollTop = element.scrollHeight;
}
}
function appendTextarea(selector: string, value: string): void {
const element = document.querySelector<HTMLTextAreaElement>(selector);
if (!element) {
if (selector !== "#wsResultOutput") {
const element = document.querySelector<HTMLTextAreaElement>(selector);
if (element) {
const previous = element.value.trim();
const safeValue = truncateIncomingMessage(value);
element.value = capTextareaValue(previous.length > 0 ? `${previous}\n\n${safeValue}` : safeValue);
element.scrollTop = element.scrollHeight;
}
return;
}
const previous = element.value.trim();
const previous = wsMessageBuffer.trim();
const safeValue = truncateIncomingMessage(value);
const nextValue = previous.length > 0 ? `${previous}\n\n${safeValue}` : safeValue;
element.value = capTextareaValue(nextValue);
element.scrollTop = element.scrollHeight;
writeWsMessages(previous.length > 0 ? `${previous}\n\n${safeValue}` : safeValue);
}
function clearWsMessages(): void {
writeWsMessages("");
}
function jsonText(value: unknown): string {
@@ -195,7 +213,7 @@ async function refreshWsOptions(): Promise<void> {
refreshMethodList();
} catch (caughtError) {
const message = caughtError instanceof Error ? caughtError.message : String(caughtError);
writeTextarea("#wsResultOutput", `Erreur options WebSocket : ${message}`);
writeWsMessages(`Erreur options WebSocket : ${message}`);
frontendError("kb-app-demo-desktop.frontend.demo_ws", `WebSocket options loading failed: ${message}`);
}
}
@@ -230,15 +248,15 @@ async function connectWsRequest(): Promise<void> {
filterJson: textInputValue("#wsFilterInput") || null,
configJson: textInputValue("#wsConfigInput") || null,
};
writeTextarea("#wsResultOutput", "Souscription en cours sur la connexion WebSocket...");
writeWsMessages("Souscription en cours sur la connexion WebSocket...");
try {
const response = await invoke<DemoWsExecutionPayload>("demo_ws_connect", { request });
writeTextarea("#wsResultOutput", formatWsExecutionPayload(response));
writeWsMessages(formatWsExecutionPayload(response));
frontendDebug("kb-app-demo-desktop.frontend.demo_ws", `WebSocket subscribed: ${response.method}`);
await refreshWsStatus();
} catch (caughtError) {
const message = caughtError instanceof Error ? caughtError.message : String(caughtError);
writeTextarea("#wsResultOutput", `Erreur : ${message}`);
writeWsMessages(`Erreur : ${message}`);
frontendError("kb-app-demo-desktop.frontend.demo_ws", `WebSocket subscription failed: ${message}`);
await refreshWsStatus();
}
@@ -318,6 +336,7 @@ document.addEventListener("DOMContentLoaded", () => {
document.querySelector<HTMLButtonElement>("#copyWsResultButton")?.addEventListener("click", () => {
void copyTextarea("#wsResultOutput");
});
document.querySelector<HTMLButtonElement>("#clearWsResultButton")?.addEventListener("click", clearWsMessages);
void installWsEventListeners();
void refreshWsOptions();
void refreshWsPool();