From f993213c2944aee67665dacbb5da07fbde72757a Mon Sep 17 00:00:00 2001 From: alanv Date: Mon, 9 Feb 2026 15:35:55 -0800 Subject: [PATCH] Add loading spinner to chat interface --- .../src/org/labkey/devtools/view/chat.jsp | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/devtools/src/org/labkey/devtools/view/chat.jsp b/devtools/src/org/labkey/devtools/view/chat.jsp index 82e001cca21..50772d33c8c 100644 --- a/devtools/src/org/labkey/devtools/view/chat.jsp +++ b/devtools/src/org/labkey/devtools/view/chat.jsp @@ -27,6 +27,14 @@ background-color: lightgray; } + .loading-spinner { + margin: 8px 0; + } + + .loading-spinner--hidden { + display: none; + } + function startChatting(chatEndpoint) @@ -79,18 +87,23 @@ function startChatting(chatEndpoint) { appendTextResponse('Request failed: ' + req.status + ' ' + (req.statusText || '')); } + + const loadingSpinner = document.querySelector('.loading-spinner'); + loadingSpinner.classList.add('loading-spinner--hidden'); } } function sendMessage(prompt) { - var url = new URL(chatEndpoint); - url.searchParams.set('prompt', prompt); - var req = new XMLHttpRequest(); - req.open('GET', url.toString(), true); - req.onreadystatechange = handleChatResponse; - req.send(); - } + var url = new URL(chatEndpoint); + url.searchParams.set('prompt', prompt); + var req = new XMLHttpRequest(); + req.open('GET', url.toString(), true); + req.onreadystatechange = handleChatResponse; + req.send(); + const loadingSpinner = document.querySelector('.loading-spinner'); + loadingSpinner.classList.remove('loading-spinner--hidden'); + } let firstChat = true; elPrompt.addEventListener('keydown', function (ev) @@ -120,4 +133,9 @@ LABKEY.Utils.onReady(function()
+ +
+ +
+