Files
boursecu_admin/src/utils/customerPresence.ts
T
2026-08-01 15:54:13 +03:30

31 lines
1.2 KiB
TypeScript

import { toJalali } from '@core/utils/useDataTime'
/** هم‌تراز با CustomerPresenceService::ONLINE_THRESHOLD_SECONDS روی سرور */
export const CUSTOMER_ONLINE_THRESHOLD_MS = 2 * 60 * 1000
export type CustomerPresenceKind = 'online' | 'offline' | 'never'
export function getCustomerPresenceKind(
lastSeenAt: string | Date | null | undefined
): CustomerPresenceKind {
if (!lastSeenAt) return 'never'
const t = lastSeenAt instanceof Date ? lastSeenAt.getTime() : new Date(lastSeenAt).getTime()
if (!Number.isFinite(t)) return 'never'
if (Date.now() - t < CUSTOMER_ONLINE_THRESHOLD_MS) return 'online'
return 'offline'
}
export function isCustomerOnline(lastSeenAt: string | Date | null | undefined): boolean {
return getCustomerPresenceKind(lastSeenAt) === 'online'
}
/** متن وضعیت برای چت (به‌جای «نامشخص») */
export function formatCustomerPresenceLabel(
lastSeenAt: string | Date | null | undefined
): string {
const kind = getCustomerPresenceKind(lastSeenAt)
if (kind === 'online') return 'آنلاین'
if (kind === 'never') return 'آفلاین'
return lastSeenAt ? `آخرین بازدید ${toJalali(lastSeenAt as string)}` : 'آفلاین'
}