# UNDF: UNDF-2026-000000729 --- a/apps/web/src/TextForEvent.tsx +++ b/apps/web/src/TextForEvent.tsx @@ -565,8 +565,10 @@ function textForPinnedEvent(event: MatrixEvent, client: MatrixClient, isTwelveHo const pinned = Array.isArray(content.pinned) ? content.pinned : []; const previouslyPinned: string[] = Array.isArray(prevContent.pinned) ? prevContent.pinned : []; - const newlyPinned = pinned.filter((item) => previouslyPinned.indexOf(item) < 0); - const newlyUnpinned = previouslyPinned.filter((item) => pinned.indexOf(item) < 0); + // Use Set for O(1) membership test; avoids O(P×Q) from indexOf inside filter + const pinnedSet = new Set(pinned); + const previouslyPinnedSet = new Set(previouslyPinned); + const newlyPinned = pinned.filter((item) => !previouslyPinnedSet.has(item)); + const newlyUnpinned = previouslyPinned.filter((item) => !pinnedSet.has(item));