Store the progress setInterval ID in a ref and clear it in a
useEffect cleanup. Previously the interval was stored in a local
variable and only cleared in onSuccess/onError callbacks, leaking
if the component unmounted mid-upload.
Fixes#1090
Fix two timer cleanup bugs in onboarding-tour.tsx:
1. Remove cleanup return from useCallback (only works in useEffect).
Clear retryTimerRef at the start of updateTarget and in a
dedicated useEffect cleanup instead.
2. Track recursive setTimeout calls via startCheckTimerRef so they
are properly cancelled on unmount instead of leaking.
Fixes#1091
Wrap scroll handlers in thread.tsx, InboxSidebar.tsx, and
DocumentsTableShell.tsx with requestAnimationFrame batching so scroll
position state updates fire at most once per animation frame instead of
on every scroll event (up to 60/sec at 60fps). Add cleanup useEffect to
cancel pending frames on unmount.
Fixes#1103
- Updated maximum file size limit to 500 MB per file.
- Removed restrictions on the number of files per upload and total upload size.
- Enhanced handling of user-mentioning documents in the knowledge base search middleware.
- Improved document reading and processing logic to accommodate new features and optimizations.
Components were calling useSearchParams() at the top level but only
reading the value inside useEffect or callbacks, never in JSX. This
subscribed the entire component tree to every URL query change.
Fix: read from window.location.search directly inside the effect so
no React subscription is created.
Changes:
- new-chat/page.tsx: read commentId inside effect + popstate listener
for SPA back/forward support; removes subscription from 1500+ line tree
- dashboard/page.tsx: read window.location.search at redirect time;
removes searchParams from dep array
- public-chat-footer.tsx: one-shot mount read for action=clone param
- TokenHandler.tsx: one-shot mount read for token + refresh_token params
Implements Vercel React Best Practices Rule: rerender-defer-reads (5.2)
Apply content-visibility: auto to off-screen list and sidebar items
to skip browser layout and painting until they scroll into view.
Changes:
- globals.css: add .list-item-lazy (48px) and .sidebar-item-lazy (40px) utilities
- DocumentsTableShell: apply list-item-lazy to desktop <tr> rows and mobile card divs
- AllPrivateChatsSidebar: apply sidebar-item-lazy to thread items
- AllSharedChatsSidebar: apply sidebar-item-lazy to thread items
- InboxSidebar: apply content-visibility inline (80px intrinsic height) to inbox items
Implements Vercel React Best Practices Rule: rendering-content-visibility (6.2)