Files
beavergram/frontend/src/lib/format/peer.ts
T

54 lines
1.3 KiB
TypeScript

import type { Account, PeerView } from "#lib/api/types.js";
import { t } from "#lib/i18n/locale.svelte.js";
const PEER_COLOR_COUNT = 7;
export function peerColorIndex(id: number): number {
return Math.abs(id) % PEER_COLOR_COUNT;
}
export function peerName(peer: PeerView | null): string {
if (!peer) {
return "";
}
if (peer.is_deleted_account) {
return t("chat.deletedAccount");
}
const parts = [peer.first_name, peer.last_name].filter(Boolean);
if (parts.length > 0) {
return parts.join(" ");
}
if (peer.username) {
return `@${peer.username}`;
}
return t("chat.deletedAccount");
}
export function accountName(account: Account): string {
return (
account.label ??
account.phone ??
String(account.tg_user_id ?? account.account_id)
);
}
const WHITESPACE = /\s+/;
export function initials(name: string): string {
const words = name.trim().split(WHITESPACE).filter(Boolean);
if (words.length === 0) {
return "?";
}
const first = words[0].charAt(0);
if (words.length === 1) {
return first.toUpperCase();
}
const lastWord = words.at(-1);
const last = lastWord ? lastWord[0] : "";
return (first + last).toUpperCase();
}
export function formatPhone(phone: string): string {
return phone.startsWith("+") ? phone : `+${phone}`;
}