/** * [Gitea #128] "While you were deafened: Alice, Bob joined · Cole left". * Pure diff + wording; the hook snapshots the participant set on deafen and * calls this on undeafen. */ export const DEAFEN_CATCHUP_MIN_MS = 10_000; const MAX_NAMES = 3; const list = (names: string[]): string => { const shown = names.slice(0, MAX_NAMES); const more = names.length - shown.length; return more > 0 ? `${shown.join(', ')} and ${more} more` : shown.join(', '); }; export const deafenCatchUpText = ( before: Set, after: Set, nameOf: (userId: string) => string, ): string | null => { const joined = Array.from(after).filter((u) => !before.has(u)); const left = Array.from(before).filter((u) => !after.has(u)); if (joined.length === 0 && left.length === 0) return null; const parts: string[] = []; if (joined.length) parts.push(`${list(joined.map(nameOf))} joined`); if (left.length) parts.push(`${list(left.map(nameOf))} left`); return `While you were deafened: ${parts.join(' · ')}`; };