From 9561f2ba58f9076c9b58ffd644f47bdee7c65fb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Fri, 27 Feb 2026 22:15:59 +0100 Subject: [PATCH] nicolium: fix status with multiple accounts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/nicolium/src/actions/importer.ts | 9 ++++++++- .../src/components/accounts/avatar-stack.tsx | 2 +- .../chats/components/chat-search/results.tsx | 2 +- .../nicolium/src/queries/accounts/use-accounts.ts | 2 +- .../nicolium/src/queries/statuses/use-status.ts | 15 +++++++++++++-- packages/nicolium/src/reducers/statuses.ts | 10 +++++----- 6 files changed, 29 insertions(+), 11 deletions(-) diff --git a/packages/nicolium/src/actions/importer.ts b/packages/nicolium/src/actions/importer.ts index 29074a11c..022d1b599 100644 --- a/packages/nicolium/src/actions/importer.ts +++ b/packages/nicolium/src/actions/importer.ts @@ -14,7 +14,10 @@ import type { Translation, } from 'pl-api'; -type Status = BaseStatus | (StatusWithoutAccount & { expectsCard?: boolean }); +type Status = (BaseStatus | StatusWithoutAccount) & { + expectsCard?: boolean; + accounts?: Array; +}; const STATUS_IMPORT = 'STATUS_IMPORT' as const; const STATUSES_IMPORT = 'STATUSES_IMPORT' as const; @@ -80,6 +83,10 @@ const importEntities = processAccount(status.account); } + if (status.accounts) { + for (const account of status.accounts) processAccount(account); + } + if (status.quote && 'quoted_status' in status.quote && status.quote.quoted_status) processStatus(status.quote.quoted_status); if (status.reblog) processStatus(status.reblog); diff --git a/packages/nicolium/src/components/accounts/avatar-stack.tsx b/packages/nicolium/src/components/accounts/avatar-stack.tsx index e37ed52ce..a94cd9e4b 100644 --- a/packages/nicolium/src/components/accounts/avatar-stack.tsx +++ b/packages/nicolium/src/components/accounts/avatar-stack.tsx @@ -11,7 +11,7 @@ interface IAvatarStack { } const AvatarStack: React.FC = ({ accountIds, limit = 3 }) => { - const { accounts } = useAccounts(accountIds.slice(0, limit)); + const { data: accounts } = useAccounts(accountIds.slice(0, limit)); return ( diff --git a/packages/nicolium/src/features/chats/components/chat-search/results.tsx b/packages/nicolium/src/features/chats/components/chat-search/results.tsx index 46cad6b4b..dd45bd50a 100644 --- a/packages/nicolium/src/features/chats/components/chat-search/results.tsx +++ b/packages/nicolium/src/features/chats/components/chat-search/results.tsx @@ -19,7 +19,7 @@ interface IResults { const Results = ({ accountSearchResult, onSelect }: IResults) => { const { data: accountIds = [], isFetching, hasNextPage, fetchNextPage } = accountSearchResult; - const { accounts } = useAccounts(accountIds); + const { data: accounts } = useAccounts(accountIds); const [isNearBottom, setNearBottom] = useState(false); const [isNearTop, setNearTop] = useState(true); diff --git a/packages/nicolium/src/queries/accounts/use-accounts.ts b/packages/nicolium/src/queries/accounts/use-accounts.ts index a64ccb01e..c3c2ff382 100644 --- a/packages/nicolium/src/queries/accounts/use-accounts.ts +++ b/packages/nicolium/src/queries/accounts/use-accounts.ts @@ -31,7 +31,7 @@ const useAccounts = (accountIds: Array) => { ); return { - accounts, + data: accounts, isLoading: queries.some((query) => query.isLoading), isFetching: queries.some((query) => query.isFetching), }; diff --git a/packages/nicolium/src/queries/statuses/use-status.ts b/packages/nicolium/src/queries/statuses/use-status.ts index 2593bebf4..57c5e17f4 100644 --- a/packages/nicolium/src/queries/statuses/use-status.ts +++ b/packages/nicolium/src/queries/statuses/use-status.ts @@ -8,6 +8,7 @@ import { type NormalizedStatus, normalizeStatus } from '@/reducers/statuses'; import { useContextsActions } from '@/stores/contexts'; import { useAccount } from '../accounts/use-account'; +import { useAccounts } from '../accounts/use-accounts'; import { queryKeys } from '../keys'; import type { Context, AsyncRefreshHeader, Account } from 'pl-api'; @@ -28,6 +29,7 @@ type MinifiedContext = ReturnType; type SelectedStatus = NormalizedStatus & { account: Account; + accounts?: Array; reblog?: SelectedStatus; quote?: SelectedStatus; }; @@ -55,6 +57,9 @@ const useStatusQuery = (statusId?: string) => { }); const account = useAccount(statusQuery.data?.account_id ?? undefined); + const { data: accounts } = useAccounts( + statusQuery.data?.account_id ? [statusQuery.data.account_id] : [], + ); return useMemo(() => { if (!statusQuery.data) return statusQuery; @@ -63,9 +68,10 @@ const useStatusQuery = (statusId?: string) => { data: { ...statusQuery.data, account: account.data!, + accounts, }, }; - }, [statusQuery.data, account.data]) as unknown as UseQueryResult; + }, [statusQuery.data, account.data, accounts]) as unknown as UseQueryResult; }; const useStatus = ( @@ -93,7 +99,12 @@ const useStatus = ( }, refetchContext, }; - }, [statusQuery.data, reblogQuery.data, quoteQuery.data, account.data]); + }, [ + statusQuery.data, + reblogQuery.data, + quoteQuery.data, + account.data, + ]) as unknown as UseQueryResult & { refetchContext: () => void }; }; const useStatusContext = (statusId?: string) => { diff --git a/packages/nicolium/src/reducers/statuses.ts b/packages/nicolium/src/reducers/statuses.ts index f2c215bc8..83c578fbf 100644 --- a/packages/nicolium/src/reducers/statuses.ts +++ b/packages/nicolium/src/reducers/statuses.ts @@ -93,16 +93,15 @@ const getSearchIndex = ( const normalizeStatus = ( { account, + accounts, reblog, quote, poll, group, ...status - }: - | BaseStatus - | (StatusWithoutAccount & { - accounts?: Array; - }), + }: (BaseStatus | StatusWithoutAccount) & { + accounts?: Array; + }, oldStatus?: OldStatus, ) => { const searchIndex = getSearchIndex(status, oldStatus, poll); @@ -158,6 +157,7 @@ const normalizeStatus = ( return { account_id: accountId, + account_ids: accounts ? accounts.map(({ id }) => id) : [accountId], reblog_id: reblog?.id ?? null, poll_id: poll?.id ?? null, group_id: group?.id ?? null,