refactor: unify contact list summaries
This commit is contained in:
@@ -75,6 +75,23 @@ describe("web inbound helpers", () => {
|
|||||||
expect(body).toBe("<contact: Ada Lovelace, +15555550123>");
|
expect(body).toBe("<contact: Ada Lovelace, +15555550123>");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("trims and skips empty WhatsApp vcard phones", () => {
|
||||||
|
const body = extractText({
|
||||||
|
contactMessage: {
|
||||||
|
vcard: [
|
||||||
|
"BEGIN:VCARD",
|
||||||
|
"VERSION:3.0",
|
||||||
|
"FN:Ada Lovelace",
|
||||||
|
"TEL;TYPE=CELL: +15555550123 ",
|
||||||
|
"TEL;TYPE=HOME: ",
|
||||||
|
"TEL;TYPE=WORK:+15555550124",
|
||||||
|
"END:VCARD",
|
||||||
|
].join("\n"),
|
||||||
|
},
|
||||||
|
} as unknown as import("@whiskeysockets/baileys").proto.IMessage);
|
||||||
|
expect(body).toBe("<contact: Ada Lovelace, +15555550123 (+1 more)>");
|
||||||
|
});
|
||||||
|
|
||||||
it("extracts multiple WhatsApp contact cards", () => {
|
it("extracts multiple WhatsApp contact cards", () => {
|
||||||
const body = extractText({
|
const body = extractText({
|
||||||
contactsArrayMessage: {
|
contactsArrayMessage: {
|
||||||
|
|||||||
@@ -801,8 +801,7 @@ function formatContactsPlaceholder(labels: string[], total: number): string {
|
|||||||
const suffix = total === 1 ? "contact" : "contacts";
|
const suffix = total === 1 ? "contact" : "contacts";
|
||||||
return `<contacts: ${total} ${suffix}>`;
|
return `<contacts: ${total} ${suffix}>`;
|
||||||
}
|
}
|
||||||
const shown = cleaned.slice(0, 3);
|
const { shown, remaining } = summarizeList(cleaned, total, 3);
|
||||||
const remaining = Math.max(total - shown.length, 0);
|
|
||||||
const suffix = remaining > 0 ? ` +${remaining} more` : "";
|
const suffix = remaining > 0 ? ` +${remaining} more` : "";
|
||||||
return `<contacts: ${shown.join(", ")}${suffix}>`;
|
return `<contacts: ${shown.join(", ")}${suffix}>`;
|
||||||
}
|
}
|
||||||
@@ -822,10 +821,21 @@ function formatContactLabel(
|
|||||||
function formatPhoneList(phones?: string[]): string | undefined {
|
function formatPhoneList(phones?: string[]): string | undefined {
|
||||||
const cleaned = phones?.map((phone) => phone.trim()).filter(Boolean) ?? [];
|
const cleaned = phones?.map((phone) => phone.trim()).filter(Boolean) ?? [];
|
||||||
if (cleaned.length === 0) return undefined;
|
if (cleaned.length === 0) return undefined;
|
||||||
const [primary, ...rest] = cleaned;
|
const { shown, remaining } = summarizeList(cleaned, cleaned.length, 1);
|
||||||
|
const [primary] = shown;
|
||||||
if (!primary) return undefined;
|
if (!primary) return undefined;
|
||||||
if (rest.length === 0) return primary;
|
if (remaining === 0) return primary;
|
||||||
return `${primary} (+${rest.length} more)`;
|
return `${primary} (+${remaining} more)`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function summarizeList(
|
||||||
|
values: string[],
|
||||||
|
total: number,
|
||||||
|
maxShown: number,
|
||||||
|
): { shown: string[]; remaining: number } {
|
||||||
|
const shown = values.slice(0, maxShown);
|
||||||
|
const remaining = Math.max(total - shown.length, 0);
|
||||||
|
return { shown, remaining };
|
||||||
}
|
}
|
||||||
|
|
||||||
export function extractLocationData(
|
export function extractLocationData(
|
||||||
|
|||||||
Reference in New Issue
Block a user