diff --git a/packages/nicolium/src/columns/timeline.tsx b/packages/nicolium/src/columns/timeline.tsx index ea4b747ba..2d2a3110d 100644 --- a/packages/nicolium/src/columns/timeline.tsx +++ b/packages/nicolium/src/columns/timeline.tsx @@ -13,6 +13,7 @@ import Portal from '@/components/ui/portal'; import Emojify from '@/features/emoji/emojify'; import PlaceholderStatus from '@/features/placeholder/components/placeholder-status'; import PendingStatus from '@/features/ui/components/pending-status'; +import { useAppSelector } from '@/hooks/use-app-selector'; import { useFeatures } from '@/hooks/use-features'; import { useAccounts } from '@/queries/accounts/use-accounts'; import { type SelectedStatus, useStatus } from '@/queries/statuses/use-status'; @@ -305,9 +306,26 @@ const Timeline: React.FC = ({ query, contextType = 'public', ...props }; const HomeTimelineColumn: React.FC = (props) => { - const timelineQuery = useHomeTimeline(); + const me = useAppSelector((state) => state.me); + const marker = `nicolium:${me}:homeTimelinePosition`; + const restoredPosition = useRef(localStorage.getItem(marker)); - return ; + const timelineQuery = useHomeTimeline(undefined, restoredPosition.current || undefined); + + const handleTopItemChanged = (index: number) => { + const entry = timelineQuery.entries[index]; + if (!entry || entry.type !== 'status') return; + localStorage.setItem(marker, entry.originalId); + }; + + return ( + + ); }; interface IPublicTimelineColumn extends IBaseTimeline { diff --git a/packages/nicolium/src/components/scrollable-list.tsx b/packages/nicolium/src/components/scrollable-list.tsx index 74af0acef..d844cee2a 100644 --- a/packages/nicolium/src/components/scrollable-list.tsx +++ b/packages/nicolium/src/components/scrollable-list.tsx @@ -223,7 +223,7 @@ const ScrollableList = React.forwardRef( // HACK: using the first index can be buggy. // Track the second item instead, unless the endIndex comes before it (eg one 1 item in view). topIndex.current = Math.min(range.startIndex + 1, range.endIndex); - onTopItemChanged?.(topIndex.current); + onTopItemChanged?.(range.startIndex); handleScroll(); };