fix: address confirmed bugs from LOTUS_BUGS.md audit
- useFileDrop: reset drag overlay when mouse leaves browser window (relatedTarget === null signals viewport exit, counter was getting stuck) - useDeviceVerificationStatus: add member count to useMemo deps so new room members' devices get checked, not just initial joined members - index.css: define --bg-surface-variant used by VoiceMessageRecorder, MessageSearch, SearchFilters, UserRoomProfile (was falling back to transparent) - syntaxHighlight: fix Python inline comments — # after space/tab was treated as plain text; only start-of-line was recognised - usePresenceUpdater: replace internal baseUrl cast with mx.getHomeserverUrl() - useLocalMessageSearch: scan all linked timelines via getUnfilteredTimelineSet() not just the live window, so scrolled-back history is included in E2EE search - RoomViewHeader: show search button in encrypted rooms — local search is implemented and handles them; the guard was a holdover from before it existed - recent-emoji: return emojis in recency order (array is already unshifted on use) instead of sorting by total usage count Skipped: media gallery memory leak (needs virtualization refactor), bookmark race condition (needs queue/lock), Night Light portal coverage (position:fixed already covers full viewport — not a real bug). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -115,8 +115,10 @@ export const useRoomUnverifiedDeviceCount = (
|
||||
|
||||
const memberIds = useMemo(
|
||||
() => room.getJoinedMembers().map((m) => m.userId),
|
||||
// room.roomId guards against room changes; getJoinedMemberCount() ensures
|
||||
// the list refreshes when members join/leave so new devices get checked.
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
[room.roomId],
|
||||
[room.roomId, room.getJoinedMemberCount()],
|
||||
);
|
||||
|
||||
const updateCount = useCallback(async () => {
|
||||
|
||||
@@ -42,7 +42,13 @@ export const useFileDropZone = (
|
||||
setActive(true);
|
||||
}
|
||||
};
|
||||
const handleDragLeave = () => {
|
||||
const handleDragLeave = (evt: DragEvent) => {
|
||||
if (evt.relatedTarget === null) {
|
||||
// Mouse left the browser window — reset unconditionally
|
||||
dragCounterRef.current = 0;
|
||||
setActive(false);
|
||||
return;
|
||||
}
|
||||
dragCounterRef.current -= 1;
|
||||
if (dragCounterRef.current <= 0) {
|
||||
dragCounterRef.current = 0;
|
||||
|
||||
@@ -77,7 +77,7 @@ export function usePresenceUpdater() {
|
||||
const handlePageHide = () => {
|
||||
const userId = mx.getUserId();
|
||||
const token = mx.getAccessToken();
|
||||
const baseUrl = (mx as unknown as { baseUrl: string }).baseUrl;
|
||||
const baseUrl = mx.getHomeserverUrl();
|
||||
if (!userId || !token || !baseUrl) return;
|
||||
|
||||
fetch(`${baseUrl}/_matrix/client/v3/presence/${encodeURIComponent(userId)}/status`, {
|
||||
|
||||
Reference in New Issue
Block a user