mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
45 lines
1.4 KiB
TypeScript
45 lines
1.4 KiB
TypeScript
import type { Comment } from '@bitsocial/bitsocial-react-hooks';
|
|
|
|
interface GetRenderableMobileBacklinksArgs {
|
|
cid?: string;
|
|
parentCid?: string;
|
|
quotedByMap?: Map<string, Comment[]>;
|
|
directRepliesByParentCid?: Map<string, Comment[]>;
|
|
}
|
|
|
|
interface RenderableMobileBacklinks {
|
|
opBacklinks: Comment[];
|
|
directReplyBacklinks: Comment[];
|
|
quotedReplyBacklinks: Comment[];
|
|
}
|
|
|
|
const isRenderableBacklinkReply = (reply?: Comment) => Boolean(reply?.cid && typeof reply.number === 'number' && !(reply.deleted || reply.removed));
|
|
|
|
export const getRenderableMobileBacklinks = ({ cid, parentCid, quotedByMap, directRepliesByParentCid }: GetRenderableMobileBacklinksArgs): RenderableMobileBacklinks => {
|
|
if (!cid) {
|
|
return {
|
|
opBacklinks: [],
|
|
directReplyBacklinks: [],
|
|
quotedReplyBacklinks: [],
|
|
};
|
|
}
|
|
|
|
const quotedReplies = quotedByMap?.get(cid) ?? [];
|
|
|
|
if (!parentCid) {
|
|
return {
|
|
opBacklinks: quotedReplies.filter(isRenderableBacklinkReply),
|
|
directReplyBacklinks: [],
|
|
quotedReplyBacklinks: [],
|
|
};
|
|
}
|
|
|
|
const directReplies = directRepliesByParentCid?.get(cid) ?? [];
|
|
|
|
return {
|
|
opBacklinks: [],
|
|
directReplyBacklinks: directReplies.filter((reply) => reply?.parentCid === cid && isRenderableBacklinkReply(reply)),
|
|
quotedReplyBacklinks: quotedReplies.filter((reply) => reply?.parentCid !== cid && isRenderableBacklinkReply(reply)),
|
|
};
|
|
};
|