31 lines
1.2 KiB
TypeScript
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)}` : 'آفلاین'
|
|
}
|