fix(quotes): avoid striking unresolved quote links

This commit is contained in:
plebeius
2026-03-06 19:24:49 +08:00
parent b243ec55b8
commit ec404569e7
5 changed files with 38 additions and 13 deletions
@@ -1,5 +1,5 @@
import { describe, expect, it } from 'vitest';
import { formatQuoteNumber, isUnavailableQuoteTarget, shouldShowFloatingQuotePreview } from '../quote-link-utils';
import { formatQuoteNumber, getQuoteTargetAvailability, isUnavailableQuoteTarget, shouldShowFloatingQuotePreview } from '../quote-link-utils';
describe('quote-link-utils', () => {
it('formats quote numbers with the expected prefix', () => {
@@ -7,6 +7,13 @@ describe('quote-link-utils', () => {
expect(formatQuoteNumber()).toBe('>>?');
});
it('distinguishes unresolved and unavailable quote targets', () => {
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 })).toBe('available');
});
it('marks deleted and removed comments as unavailable quote targets', () => {
expect(isUnavailableQuoteTarget(undefined)).toBe(false);
expect(isUnavailableQuoteTarget({ deleted: true, removed: false })).toBe(true);
+11 -1
View File
@@ -1,8 +1,18 @@
import type { Comment } from '@bitsocialhq/bitsocial-react-hooks';
type QuoteTargetAvailability = 'available' | 'unresolved' | 'unavailable';
export const formatQuoteNumber = (number?: number) => `>>${number ?? '?'}`;
export const isUnavailableQuoteTarget = (comment?: Partial<Pick<Comment, 'deleted' | 'removed'>> | null) => Boolean(comment?.deleted || comment?.removed);
export const getQuoteTargetAvailability = (comment?: Partial<Pick<Comment, 'deleted' | 'removed'>> | null): QuoteTargetAvailability => {
if (!comment) {
return 'unresolved';
}
return comment.deleted || comment.removed ? 'unavailable' : 'available';
};
export const isUnavailableQuoteTarget = (comment?: Partial<Pick<Comment, 'deleted' | 'removed'>> | null) => getQuoteTargetAvailability(comment) === 'unavailable';
export const shouldShowFloatingQuotePreview = ({
hoveredCid,