From 405400e85cc51f39f84eac4b5b0c45331f5051bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Thu, 5 Mar 2026 14:34:18 +0100 Subject: [PATCH] nicolium: experimental timelines: account timeline 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 | 16 ++++++++++++++++ .../src/pages/accounts/account-timeline.tsx | 17 ++++++++++------- .../src/queries/timelines/use-timelines.ts | 18 ++++++++++++++++++ 3 files changed, 44 insertions(+), 7 deletions(-) diff --git a/packages/nicolium/src/columns/timeline.tsx b/packages/nicolium/src/columns/timeline.tsx index 2ff447a69..1089357d3 100644 --- a/packages/nicolium/src/columns/timeline.tsx +++ b/packages/nicolium/src/columns/timeline.tsx @@ -16,6 +16,7 @@ import { useFeatures } from '@/hooks/use-features'; import { useAccounts } from '@/queries/accounts/use-accounts'; import { type SelectedStatus, useStatus } from '@/queries/statuses/use-status'; import { + useAccountTimeline, useAntennaTimeline, useBubbleTimeline, useCircleTimeline, @@ -364,6 +365,20 @@ const WrenchedTimelineColumn = () => { return ; }; +interface IAccountTimelineColumn { + accountId: string; + excludeReplies?: boolean; +} + +const AccountTimelineColumn: React.FC = ({ + accountId, + excludeReplies = false, +}) => { + const timelineQuery = useAccountTimeline(accountId, { exclude_replies: excludeReplies }); + + return ; +}; + export { HomeTimelineColumn, PublicTimelineColumn, @@ -375,4 +390,5 @@ export { AntennaTimelineColumn, CircleTimelineColumn, WrenchedTimelineColumn, + AccountTimelineColumn, }; diff --git a/packages/nicolium/src/pages/accounts/account-timeline.tsx b/packages/nicolium/src/pages/accounts/account-timeline.tsx index 947e54260..c37c67648 100644 --- a/packages/nicolium/src/pages/accounts/account-timeline.tsx +++ b/packages/nicolium/src/pages/accounts/account-timeline.tsx @@ -2,6 +2,7 @@ import React, { useEffect } from 'react'; import { FormattedMessage } from 'react-intl'; import { fetchAccountTimeline } from '@/actions/timelines'; +import { AccountTimelineColumn } from '@/columns/timeline'; import MissingIndicator from '@/components/missing-indicator'; import StatusList from '@/components/statuses/status-list'; import Card, { CardBody } from '@/components/ui/card'; @@ -12,6 +13,7 @@ import { useAppDispatch } from '@/hooks/use-app-dispatch'; import { useAppSelector } from '@/hooks/use-app-selector'; import { useFeatures } from '@/hooks/use-features'; import { useAccountLookup } from '@/queries/accounts/use-account-lookup'; +import { usePinnedStatuses } from '@/queries/status-lists/use-pinned-statuses'; import { makeGetStatusIds } from '@/selectors'; import { useSettings } from '@/stores/settings'; @@ -32,12 +34,7 @@ const AccountTimelinePage: React.FC = () => { const statusIds = useAppSelector((state) => getStatusIds(state, { type: `account:${path}`, prefix: 'account_timeline' }), ); - const featuredStatusIds = useAppSelector((state) => - getStatusIds(state, { - type: `account:${account?.id}:with_replies:pinned`, - prefix: 'account_timeline', - }), - ); + const { data: featuredStatusIds } = usePinnedStatuses(account?.id || ''); const isBlocked = account?.relationship?.blocked_by && !features.blockersVisible; const isLoading = useAppSelector((state) => state.timelines[`account:${path}`]?.isLoading); @@ -83,7 +80,13 @@ const AccountTimelinePage: React.FC = () => { ); } - return ( + return settings.experimentalTimeline ? ( + + ) : ( , +) => { + const client = useClient(); + + return useTimeline( + `account:${accountId}${params?.exclude_replies ? ':exclude_replies' : ''}`, + (paginationParams) => + client.accounts.getAccountStatuses(accountId, { + ...params, + ...paginationParams, + }), + ); +}; + export { useHomeTimeline, usePublicTimeline, @@ -153,4 +170,5 @@ export { useAntennaTimeline, useCircleTimeline, useWrenchedTimeline, + useAccountTimeline, };