60 lines
1.4 KiB
TypeScript
60 lines
1.4 KiB
TypeScript
export type SenderLabelParams = {
|
|
name?: string;
|
|
username?: string;
|
|
tag?: string;
|
|
e164?: string;
|
|
id?: string;
|
|
};
|
|
|
|
function normalize(value?: string): string | undefined {
|
|
const trimmed = value?.trim();
|
|
return trimmed ? trimmed : undefined;
|
|
}
|
|
|
|
function normalizeSenderLabelParams(params: SenderLabelParams) {
|
|
return {
|
|
name: normalize(params.name),
|
|
username: normalize(params.username),
|
|
tag: normalize(params.tag),
|
|
e164: normalize(params.e164),
|
|
id: normalize(params.id),
|
|
};
|
|
}
|
|
|
|
export function resolveSenderLabel(params: SenderLabelParams): string | null {
|
|
const { name, username, tag, e164, id } = normalizeSenderLabelParams(params);
|
|
|
|
const display = name ?? username ?? tag ?? "";
|
|
const idPart = e164 ?? id ?? "";
|
|
if (display && idPart && display !== idPart) {
|
|
return `${display} (${idPart})`;
|
|
}
|
|
return display || idPart || null;
|
|
}
|
|
|
|
export function listSenderLabelCandidates(params: SenderLabelParams): string[] {
|
|
const candidates = new Set<string>();
|
|
const { name, username, tag, e164, id } = normalizeSenderLabelParams(params);
|
|
|
|
if (name) {
|
|
candidates.add(name);
|
|
}
|
|
if (username) {
|
|
candidates.add(username);
|
|
}
|
|
if (tag) {
|
|
candidates.add(tag);
|
|
}
|
|
if (e164) {
|
|
candidates.add(e164);
|
|
}
|
|
if (id) {
|
|
candidates.add(id);
|
|
}
|
|
const resolved = resolveSenderLabel(params);
|
|
if (resolved) {
|
|
candidates.add(resolved);
|
|
}
|
|
return Array.from(candidates);
|
|
}
|