diff --git a/public/widget.js b/public/widget.js index 92a3a4e..f01941d 100644 --- a/public/widget.js +++ b/public/widget.js @@ -158,6 +158,10 @@ if (!body.message.trim() && !body.attachments.length) return; const pendingMessage = queuePendingMessage(body); const submitButton = root.querySelector(".mf-send"); + form.message.value = ""; + selectedFiles = []; + renderSelectedFiles(attachmentList, selectedFiles); + addMessage(messages, "visitor", "Visitor", body.message, body.attachments || [], null); submitButton.disabled = true; try { @@ -165,9 +169,6 @@ removePendingMessage(pendingMessage.clientMessageId); session.conversationId = data.conversation.id; saveSession(); - form.message.value = ""; - selectedFiles = []; - renderSelectedFiles(attachmentList, selectedFiles); handleConversationUpdate(data, messages, panel, launcher, settings, messageEffectState, { notify: false }); connectEvents(messages, typing, panel, launcher, settings, messageEffectState); startConversationPolling(messages, panel, launcher, settings, messageEffectState); @@ -388,13 +389,23 @@ } const item = document.createElement("article"); item.className = `mf-message ${sender}`; - item.innerHTML = `${body ? `

${escapeHtml(body)}

` : ""}${attachments.map((a) => `${escapeHtml(a.name)}`).join("")}`; + item.innerHTML = `${body ? `

${escapeHtml(body)}

` : ""}${attachments.map((a) => { + const src = attachmentSrc(a); + return `${escapeHtml(a.name)}`; + }).join("")}`; messages.append(item); for (const image of item.querySelectorAll("img")) { image.addEventListener("load", () => scrollMessagesToBottom(messages), { once: true }); image.addEventListener("error", () => scrollMessagesToBottom(messages), { once: true }); } scrollMessagesToBottom(messages); + return item; + } + + function attachmentSrc(attachment) { + if (attachment?.dataBase64) return attachment.dataBase64; + if (attachment?.url) return `${apiBase}${attachment.url}`; + return ""; } function scrollMessagesToBottom(messages) {