diff --git a/admin/DashboardController.php b/admin/DashboardController.php index 0df2dab..039df60 100644 --- a/admin/DashboardController.php +++ b/admin/DashboardController.php @@ -1808,7 +1808,37 @@ HTML; SessionAuth::require(); $user = SessionAuth::user(); $userName = self::h($user['name'] ?? 'Admin'); - $companies = CompanyRepository::findAll(); + + // Pre-load conversations for inline embedding (no extra HTTP round-trip) + $companyMap = []; + foreach (CompanyRepository::findAll() as $co) { + $companyMap[(int)$co['id']] = $co['name']; + } + $convRows = db()->query(" + SELECT c.phone_number, + MAX(c.contact_name) as contact_name, + MAX(c.company_id) as company_id, + MAX(c.created_at) as last_time, + (SELECT content FROM conversations c2 WHERE c2.phone_number = c.phone_number ORDER BY c2.id DESC LIMIT 1) as last_message, + (SELECT COUNT(*) FROM conversations c3 WHERE c3.phone_number = c.phone_number AND c3.direction = 'inbound' + AND c3.id > COALESCE((SELECT MAX(c4.id) FROM conversations c4 WHERE c4.phone_number = c.phone_number AND c4.direction = 'outbound'),0)) as unread_count + FROM conversations c + GROUP BY c.phone_number + ORDER BY last_time DESC + ")->fetchAll(); + $initialConvs = []; + foreach ($convRows as $r) { + $cid = (int)$r['company_id']; + $initialConvs[] = [ + 'phone' => $r['phone_number'], + 'contact_name' => $r['contact_name'] ?? '', + 'company_name' => $companyMap[$cid] ?? '', + 'last_message' => mb_substr($r['last_message'] ?? '', 0, 80), + 'last_time' => $r['last_time'], + 'unread_count' => (int)$r['unread_count'], + ]; + } + $initialConvsJson = json_encode($initialConvs, JSON_UNESCAPED_UNICODE | JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT); http_response_code(200); header('Content-Type: text/html; charset=utf-8'); @@ -1917,16 +1947,42 @@ HTML;