54 lines
1.3 KiB
TypeScript
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}`;
|
|
}
|