From c4feceab0612ce7ba974dac35eb095c9605925e3 Mon Sep 17 00:00:00 2001 From: diondiondion Date: Thu, 12 Jun 2025 05:24:58 +0200 Subject: [PATCH] [Glitch] fix: Fetch missing nested quotes Port d4d77ace97c105d6ef9823ced72eb9939fb52de6 to glitch-soc Signed-off-by: Claire --- .../glitch/components/status_quoted.tsx | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/app/javascript/flavours/glitch/components/status_quoted.tsx b/app/javascript/flavours/glitch/components/status_quoted.tsx index 0695d8ca58..dc23144212 100644 --- a/app/javascript/flavours/glitch/components/status_quoted.tsx +++ b/app/javascript/flavours/glitch/components/status_quoted.tsx @@ -1,4 +1,4 @@ -import { useMemo } from 'react'; +import { useEffect, useMemo } from 'react'; import { FormattedMessage } from 'react-intl'; @@ -14,8 +14,9 @@ import { Icon } from 'flavours/glitch/components/icon'; import StatusContainer from 'flavours/glitch/containers/status_container'; import type { Status } from 'flavours/glitch/models/status'; import type { RootState } from 'flavours/glitch/store'; -import { useAppSelector } from 'flavours/glitch/store'; +import { useAppDispatch, useAppSelector } from 'flavours/glitch/store'; +import { fetchStatus } from '../actions/statuses'; import { makeGetStatus } from '../selectors'; const MAX_QUOTE_POSTS_NESTING_LEVEL = 1; @@ -36,7 +37,7 @@ const QuoteWrapper: React.FC<{ ); }; -const QuoteLink: React.FC<{ +const NestedQuoteLink: React.FC<{ status: Status; }> = ({ status }) => { const accountId = status.get('account') as string; @@ -80,12 +81,18 @@ export const QuotedStatus: React.FC<{ variant?: 'full' | 'link'; nestingLevel?: number; }> = ({ quote, contextType, nestingLevel = 1, variant = 'full' }) => { + const dispatch = useAppDispatch(); const quotedStatusId = quote.get('quoted_status'); const quoteState = quote.get('state'); const status = useAppSelector((state) => quotedStatusId ? state.statuses.get(quotedStatusId) : undefined, ); - let quoteError: React.ReactNode = null; + + useEffect(() => { + if (!status) { + dispatch(fetchStatus(quotedStatusId)); + } + }, [status, quotedStatusId, dispatch]); // In order to find out whether the quoted post should be completely hidden // due to a matching filter, we run it through the selector used by `status_container`. @@ -96,6 +103,8 @@ export const QuotedStatus: React.FC<{ ); const isFilteredAndHidden = status && statusWithExtraData === null; + let quoteError: React.ReactNode = null; + if (isFilteredAndHidden) { quoteError = ( ; + return ; } const childQuote = status?.get('quote') as QuoteMap | undefined;