2026-03-09 17:01:35 +08:00
|
|
|
import type { Comment } from '@bitsocialnet/bitsocial-react-hooks';
|
2026-03-06 14:55:40 +08:00
|
|
|
|
2026-03-06 19:24:49 +08:00
|
|
|
type QuoteTargetAvailability = 'available' | 'unresolved' | 'unavailable';
|
|
|
|
|
|
2026-03-06 14:55:40 +08:00
|
|
|
export const formatQuoteNumber = (number?: number) => `>>${number ?? '?'}`;
|
|
|
|
|
|
2026-03-07 13:52:48 +08:00
|
|
|
type QuoteTargetComment = Partial<Pick<Comment, 'deleted' | 'removed' | 'commentModeration'>>;
|
|
|
|
|
|
|
|
|
|
export const getQuoteTargetAvailability = (comment?: QuoteTargetComment | null): QuoteTargetAvailability => {
|
2026-03-06 19:24:49 +08:00
|
|
|
if (!comment) {
|
|
|
|
|
return 'unresolved';
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-07 13:52:48 +08:00
|
|
|
return comment.deleted || comment.removed || comment.commentModeration?.purged ? 'unavailable' : 'available';
|
2026-03-06 19:24:49 +08:00
|
|
|
};
|
|
|
|
|
|
2026-03-07 13:52:48 +08:00
|
|
|
export const isUnavailableQuoteTarget = (comment?: QuoteTargetComment | null) => getQuoteTargetAvailability(comment) === 'unavailable';
|
2026-03-06 14:55:40 +08:00
|
|
|
|
|
|
|
|
export const shouldShowFloatingQuotePreview = ({
|
|
|
|
|
hoveredCid,
|
|
|
|
|
outOfViewCid,
|
|
|
|
|
quoteCid,
|
|
|
|
|
isUnavailable,
|
|
|
|
|
}: {
|
|
|
|
|
hoveredCid: string | null;
|
|
|
|
|
outOfViewCid: string | null;
|
|
|
|
|
quoteCid?: string;
|
|
|
|
|
isUnavailable?: boolean;
|
|
|
|
|
}) => Boolean(quoteCid && !isUnavailable && hoveredCid === quoteCid && outOfViewCid === quoteCid);
|