Add visitor read receipts
This commit is contained in:
+18
-1
@@ -435,10 +435,19 @@ function renderActive() {
|
||||
${message.body ? `<p>${escapeHtml(message.body)}</p>` : ""}
|
||||
${renderAttachments(message.attachments)}
|
||||
</article>
|
||||
`).join("");
|
||||
`).join("") + adminReadReceipt(conversation, messages);
|
||||
$("#messages").scrollTop = $("#messages").scrollHeight;
|
||||
}
|
||||
|
||||
function adminReadReceipt(conversation, messages) {
|
||||
const lastAdminMessage = [...messages].reverse().find((message) => message.senderType === "admin");
|
||||
if (!lastAdminMessage) return "";
|
||||
const seenAt = conversation.visitorSeenAt;
|
||||
const isSeen = Boolean(seenAt && String(seenAt) >= String(lastAdminMessage.createdAt));
|
||||
const text = isSeen ? `Precteno zakaznikem ${formatTime(seenAt)}` : "Zatim neprecteno";
|
||||
return `<div class="read-receipt ${isSeen ? "seen" : "unseen"}">${escapeHtml(text)}</div>`;
|
||||
}
|
||||
|
||||
function filteredConversations() {
|
||||
if (state.statusFilter === "all") return state.conversations;
|
||||
if (state.statusFilter === "active") return state.conversations.filter((item) => item.status === "new" || item.status === "open");
|
||||
@@ -641,6 +650,14 @@ function formatVisitedAt(value) {
|
||||
return date.toLocaleTimeString("cs-CZ", { hour: "2-digit", minute: "2-digit" });
|
||||
}
|
||||
|
||||
function formatTime(value) {
|
||||
const text = String(value || "");
|
||||
const normalized = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/.test(text) ? `${text.replace(" ", "T")}Z` : text;
|
||||
const date = new Date(normalized);
|
||||
if (Number.isNaN(date.getTime())) return "";
|
||||
return date.toLocaleTimeString("cs-CZ", { hour: "2-digit", minute: "2-digit" });
|
||||
}
|
||||
|
||||
function deviceLabel(device = {}, language, timezone) {
|
||||
return [device.platform, device.viewport, language, timezone].filter(Boolean).join(" | ");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user