mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
fix(posts): hide stale initializing footer
This commit is contained in:
@@ -53,6 +53,7 @@ const testState = vi.hoisted(() => ({
|
|||||||
pseudonymityMode: 'none',
|
pseudonymityMode: 'none',
|
||||||
replyComments: [] as Array<TestComment | undefined>,
|
replyComments: [] as Array<TestComment | undefined>,
|
||||||
setResetFunctionMock: vi.fn(),
|
setResetFunctionMock: vi.fn(),
|
||||||
|
stateString: undefined as string | undefined,
|
||||||
virtuosoProps: [] as Array<{ defaultItemHeight?: number; heightEstimates?: number[]; itemSize?: unknown }>,
|
virtuosoProps: [] as Array<{ defaultItemHeight?: number; heightEstimates?: number[]; itemSize?: unknown }>,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
@@ -242,7 +243,7 @@ vi.mock('../../hooks/use-hide', () => ({
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
vi.mock('../../hooks/use-state-string', () => ({
|
vi.mock('../../hooks/use-state-string', () => ({
|
||||||
default: () => undefined,
|
default: () => testState.stateString,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
vi.mock('../../hooks/use-scroll-to-reply', () => ({
|
vi.mock('../../hooks/use-scroll-to-reply', () => ({
|
||||||
@@ -460,6 +461,7 @@ describe('post community address compatibility', () => {
|
|||||||
testState.hasMoreReplies = false;
|
testState.hasMoreReplies = false;
|
||||||
testState.pseudonymityMode = 'none';
|
testState.pseudonymityMode = 'none';
|
||||||
testState.replyComments = [];
|
testState.replyComments = [];
|
||||||
|
testState.stateString = undefined;
|
||||||
testState.virtuosoProps = [];
|
testState.virtuosoProps = [];
|
||||||
|
|
||||||
container = document.createElement('div');
|
container = document.createElement('div');
|
||||||
@@ -496,6 +498,23 @@ describe('post community address compatibility', () => {
|
|||||||
expect(container.textContent).toContain('reply-1');
|
expect(container.textContent).toContain('reply-1');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('hides stale initializing post footers after a thread post has loaded', async () => {
|
||||||
|
testState.stateString = 'Initializing';
|
||||||
|
const post = {
|
||||||
|
...makeLegacyThreadWithoutReplies(),
|
||||||
|
state: 'initializing',
|
||||||
|
updatedAt: 1_710_000_100,
|
||||||
|
};
|
||||||
|
|
||||||
|
await renderWithRoute(createElement(PostDesktop, { post, showAllReplies: true }), '/mu/thread/post-1');
|
||||||
|
expect(container.textContent).not.toContain('Initializing');
|
||||||
|
expect(container.textContent).toContain('post-1');
|
||||||
|
|
||||||
|
await renderWithRoute(createElement(PostMobile, { post, showAllReplies: true }), '/mu/thread/post-1');
|
||||||
|
expect(container.textContent).not.toContain('Initializing');
|
||||||
|
expect(container.textContent).toContain('post-1');
|
||||||
|
});
|
||||||
|
|
||||||
it('renders known developer badges and keeps anonymous as the default name on desktop and mobile', async () => {
|
it('renders known developer badges and keeps anonymous as the default name on desktop and mobile', async () => {
|
||||||
const post = {
|
const post = {
|
||||||
...makeLegacyThread(),
|
...makeLegacyThread(),
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ import { getCommentUserID } from '../../lib/utils/comment-user-id-utils';
|
|||||||
import { getFeedPostHeightEstimate, getReplyHeightEstimates, reportReplyHeightAuditSample } from '../../lib/utils/pretext-height-estimates';
|
import { getFeedPostHeightEstimate, getReplyHeightEstimates, reportReplyHeightAuditSample } from '../../lib/utils/pretext-height-estimates';
|
||||||
import { getAuthorBadge } from '../../lib/utils/author-display-utils';
|
import { getAuthorBadge } from '../../lib/utils/author-display-utils';
|
||||||
import { hasCommentFlagsForDirectory } from '../../lib/comment-flag-selection';
|
import { hasCommentFlagsForDirectory } from '../../lib/comment-flag-selection';
|
||||||
|
import { shouldSuppressPostLoadingState } from '../../lib/utils/post-loading-state-utils';
|
||||||
|
|
||||||
const RepliesFooter = ({ hasMore, loadingString }: { hasMore: boolean; loadingString: string }) =>
|
const RepliesFooter = ({ hasMore, loadingString }: { hasMore: boolean; loadingString: string }) =>
|
||||||
hasMore ? (
|
hasMore ? (
|
||||||
@@ -1331,7 +1332,7 @@ const PostDesktop = ({
|
|||||||
stateString &&
|
stateString &&
|
||||||
!hasFailedState &&
|
!hasFailedState &&
|
||||||
state !== 'succeeded' &&
|
state !== 'succeeded' &&
|
||||||
!(resolvedPost?.timestamp && !resolvedPost?.updatedAt) &&
|
!shouldSuppressPostLoadingState(resolvedPost) &&
|
||||||
isInPostPageView &&
|
isInPostPageView &&
|
||||||
!(!showReplies && !showAllReplies) ? (
|
!(!showReplies && !showAllReplies) ? (
|
||||||
<div className={styles.stateString}>
|
<div className={styles.stateString}>
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ import { getCommentUserID } from '../../lib/utils/comment-user-id-utils';
|
|||||||
import { getFeedPostHeightEstimate, getReplyHeightEstimates, reportReplyHeightAuditSample } from '../../lib/utils/pretext-height-estimates';
|
import { getFeedPostHeightEstimate, getReplyHeightEstimates, reportReplyHeightAuditSample } from '../../lib/utils/pretext-height-estimates';
|
||||||
import { getAuthorBadge } from '../../lib/utils/author-display-utils';
|
import { getAuthorBadge } from '../../lib/utils/author-display-utils';
|
||||||
import { hasCommentFlagsForDirectory } from '../../lib/comment-flag-selection';
|
import { hasCommentFlagsForDirectory } from '../../lib/comment-flag-selection';
|
||||||
|
import { shouldSuppressPostLoadingState } from '../../lib/utils/post-loading-state-utils';
|
||||||
|
|
||||||
const RepliesFooter = ({ hasMore, loadingString }: { hasMore: boolean; loadingString: string }) =>
|
const RepliesFooter = ({ hasMore, loadingString }: { hasMore: boolean; loadingString: string }) =>
|
||||||
hasMore ? (
|
hasMore ? (
|
||||||
@@ -1031,7 +1032,7 @@ const PostMobile = ({
|
|||||||
stateString &&
|
stateString &&
|
||||||
!hasFailedState &&
|
!hasFailedState &&
|
||||||
state !== 'succeeded' &&
|
state !== 'succeeded' &&
|
||||||
!(resolvedPost?.timestamp && !resolvedPost?.updatedAt) &&
|
!shouldSuppressPostLoadingState(resolvedPost) &&
|
||||||
isInPostPageView &&
|
isInPostPageView &&
|
||||||
!(!showReplies && !showAllReplies) ? (
|
!(!showReplies && !showAllReplies) ? (
|
||||||
<div className={styles.stateString}>
|
<div className={styles.stateString}>
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
type PostLoadingStateComment = {
|
||||||
|
state?: string;
|
||||||
|
timestamp?: number;
|
||||||
|
updatedAt?: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const shouldSuppressPostLoadingState = (post: PostLoadingStateComment | undefined): boolean =>
|
||||||
|
Boolean(post?.timestamp && (!post.updatedAt || post.state === 'initializing'));
|
||||||
Reference in New Issue
Block a user