Tighten admin visitor facts and add widget branding
This commit is contained in:
+18
-2
@@ -192,9 +192,13 @@ function renderConversations() {
|
||||
<button class="conversation-open" type="button" data-open="${item.id}">
|
||||
<span class="row"><strong>${escapeHtml(item.visitor.name || item.visitor.email || "Navstevnik")}</strong>${item.imageCount ? `<span class="photo-count">foto ${item.imageCount}</span>` : ""}</span>
|
||||
<span class="preview">${escapeHtml(item.lastBody || "")}</span>
|
||||
<span class="meta">${flag(item.countryCode)} ${escapeHtml(item.language || "")} ${escapeHtml(item.currentUrl || "")}</span>
|
||||
<span class="visitor-facts">
|
||||
<span title="Zeme">${visitorCountry(item)}</span>
|
||||
<span title="Doba na webu">${formatDuration(item.sessionSeconds)}</span>
|
||||
<span title="Navstivene stranky">${Number(item.pageCount || 0)} str.</span>
|
||||
<span title="Pocet chatu">${Number(item.visitorConversationCount || 1)}x chat</span>
|
||||
</span>
|
||||
</button>
|
||||
${item.firstImageUrl ? `<button class="list-photo" type="button" data-photo-url="${escapeHtml(item.firstImageUrl)}" data-photo-name="Fotka v chatu"><img src="${escapeHtml(item.firstImageUrl)}" alt="Fotka v chatu"></button>` : ""}
|
||||
<div class="conversation-actions">
|
||||
<select class="status-select ${item.status}" data-status-for="${item.id}" aria-label="Zmenit stav chatu">
|
||||
${statusOptions(item.status)}
|
||||
@@ -242,6 +246,18 @@ function statusOptions(currentStatus) {
|
||||
].map(([value, label]) => `<option value="${value}" ${value === currentStatus ? "selected" : ""}>${label}</option>`).join("");
|
||||
}
|
||||
|
||||
function visitorCountry(item) {
|
||||
return item.countryCode ? `${flag(item.countryCode)} ${escapeHtml(item.countryCode)}` : "zeme ?";
|
||||
}
|
||||
|
||||
function formatDuration(seconds) {
|
||||
const value = Number(seconds || 0);
|
||||
if (value < 60) return `${Math.max(0, value)}s`;
|
||||
const minutes = Math.floor(value / 60);
|
||||
if (minutes < 60) return `${minutes}m`;
|
||||
return `${Math.floor(minutes / 60)}h ${minutes % 60}m`;
|
||||
}
|
||||
|
||||
async function updateConversationStatus(id, status) {
|
||||
await api(`/api/admin/conversations/${id}/status`, {
|
||||
method: "PATCH",
|
||||
|
||||
Reference in New Issue
Block a user