fix: handle purged posts in quote availability and mobile author counts

This commit is contained in:
plebeius
2026-03-07 13:52:48 +08:00
parent 1b9f69839d
commit 58abae7e38
3 changed files with 9 additions and 5 deletions
+1 -1
View File
@@ -197,7 +197,7 @@ const PostInfoAndMedia = ({ post, postReplyCount = 0, roles, threadNumber }: Pos
const handleUserAddressClick = useAuthorAddressClick();
const numberOfPostsByAuthor = (() => {
if (!showUserID || deleted || removed || !shortAddress || !postCid || typeof document === 'undefined') {
if (!showUserID || deleted || removed || purged || !shortAddress || !postCid || typeof document === 'undefined') {
return 0;
}
@@ -11,13 +11,15 @@ describe('quote-link-utils', () => {
expect(getQuoteTargetAvailability(undefined)).toBe('unresolved');
expect(getQuoteTargetAvailability({ deleted: true, removed: false })).toBe('unavailable');
expect(getQuoteTargetAvailability({ deleted: false, removed: true })).toBe('unavailable');
expect(getQuoteTargetAvailability({ deleted: false, removed: false, commentModeration: { purged: true } })).toBe('unavailable');
expect(getQuoteTargetAvailability({ deleted: false, removed: false })).toBe('available');
});
it('marks deleted and removed comments as unavailable quote targets', () => {
it('marks deleted, removed, and purged comments as unavailable quote targets', () => {
expect(isUnavailableQuoteTarget(undefined)).toBe(false);
expect(isUnavailableQuoteTarget({ deleted: true, removed: false })).toBe(true);
expect(isUnavailableQuoteTarget({ deleted: false, removed: true })).toBe(true);
expect(isUnavailableQuoteTarget({ deleted: false, removed: false, commentModeration: { purged: true } })).toBe(true);
expect(isUnavailableQuoteTarget({ deleted: false, removed: false })).toBe(false);
});
+5 -3
View File
@@ -4,15 +4,17 @@ type QuoteTargetAvailability = 'available' | 'unresolved' | 'unavailable';
export const formatQuoteNumber = (number?: number) => `>>${number ?? '?'}`;
export const getQuoteTargetAvailability = (comment?: Partial<Pick<Comment, 'deleted' | 'removed'>> | null): QuoteTargetAvailability => {
type QuoteTargetComment = Partial<Pick<Comment, 'deleted' | 'removed' | 'commentModeration'>>;
export const getQuoteTargetAvailability = (comment?: QuoteTargetComment | null): QuoteTargetAvailability => {
if (!comment) {
return 'unresolved';
}
return comment.deleted || comment.removed ? 'unavailable' : 'available';
return comment.deleted || comment.removed || comment.commentModeration?.purged ? 'unavailable' : 'available';
};
export const isUnavailableQuoteTarget = (comment?: Partial<Pick<Comment, 'deleted' | 'removed'>> | null) => getQuoteTargetAvailability(comment) === 'unavailable';
export const isUnavailableQuoteTarget = (comment?: QuoteTargetComment | null) => getQuoteTargetAvailability(comment) === 'unavailable';
export const shouldShowFloatingQuotePreview = ({
hoveredCid,