From 0612e7303af9c562086f44247c07d7c210816ca5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Thu, 5 Mar 2026 17:46:42 +0100 Subject: [PATCH] nicolium: WIP timeline position restoring MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/nicolium/src/columns/timeline.tsx | 22 +++++++++++++++++-- .../src/components/scrollable-list.tsx | 2 +- 2 files changed, 21 insertions(+), 3 deletions(-) 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(); };