2023-06-21 22:28:24 +00:00
|
|
|
import { colorList } from "@utils/app";
|
2023-06-04 02:02:07 +00:00
|
|
|
import classNames from "classnames";
|
2021-02-22 02:39:04 +00:00
|
|
|
import { Component } from "inferno";
|
2023-06-14 12:20:40 +00:00
|
|
|
import {
|
|
|
|
AddAdmin,
|
|
|
|
AddModToCommunity,
|
|
|
|
BanFromCommunity,
|
|
|
|
BanPerson,
|
|
|
|
BlockPerson,
|
|
|
|
CommentId,
|
|
|
|
CommunityModeratorView,
|
|
|
|
CreateComment,
|
|
|
|
CreateCommentLike,
|
|
|
|
CreateCommentReport,
|
|
|
|
DeleteComment,
|
|
|
|
DistinguishComment,
|
|
|
|
EditComment,
|
|
|
|
GetComments,
|
|
|
|
Language,
|
|
|
|
MarkCommentReplyAsRead,
|
|
|
|
MarkPersonMentionAsRead,
|
|
|
|
PersonView,
|
|
|
|
PurgeComment,
|
|
|
|
PurgePerson,
|
|
|
|
RemoveComment,
|
|
|
|
SaveComment,
|
|
|
|
TransferCommunity,
|
|
|
|
} from "lemmy-js-client";
|
2023-05-11 18:32:32 +00:00
|
|
|
import { CommentNodeI, CommentViewType } from "../../interfaces";
|
2021-02-22 02:39:04 +00:00
|
|
|
import { CommentNode } from "./comment-node";
|
2020-09-06 16:15:25 +00:00
|
|
|
|
|
|
|
interface CommentNodesProps {
|
|
|
|
nodes: CommentNodeI[];
|
2023-01-04 16:56:24 +00:00
|
|
|
moderators?: CommunityModeratorView[];
|
2023-05-11 18:32:32 +00:00
|
|
|
admins?: PersonView[];
|
2023-01-04 16:56:24 +00:00
|
|
|
maxCommentsShown?: number;
|
2020-09-06 16:15:25 +00:00
|
|
|
noBorder?: boolean;
|
|
|
|
noIndent?: boolean;
|
|
|
|
viewOnly?: boolean;
|
|
|
|
locked?: boolean;
|
|
|
|
markable?: boolean;
|
|
|
|
showContext?: boolean;
|
|
|
|
showCommunity?: boolean;
|
2022-06-21 21:42:29 +00:00
|
|
|
enableDownvotes?: boolean;
|
2022-07-30 13:28:08 +00:00
|
|
|
viewType: CommentViewType;
|
2022-09-22 15:14:58 +00:00
|
|
|
allLanguages: Language[];
|
2022-12-19 15:57:29 +00:00
|
|
|
siteLanguages: number[];
|
2022-11-19 02:02:38 +00:00
|
|
|
hideImages?: boolean;
|
2023-06-04 02:02:07 +00:00
|
|
|
isChild?: boolean;
|
|
|
|
depth?: number;
|
2023-06-14 12:20:40 +00:00
|
|
|
finished: Map<CommentId, boolean | undefined>;
|
|
|
|
onSaveComment(form: SaveComment): void;
|
|
|
|
onCommentReplyRead(form: MarkCommentReplyAsRead): void;
|
|
|
|
onPersonMentionRead(form: MarkPersonMentionAsRead): void;
|
|
|
|
onCreateComment(form: EditComment | CreateComment): void;
|
|
|
|
onEditComment(form: EditComment | CreateComment): void;
|
|
|
|
onCommentVote(form: CreateCommentLike): void;
|
|
|
|
onBlockPerson(form: BlockPerson): void;
|
|
|
|
onDeleteComment(form: DeleteComment): void;
|
|
|
|
onRemoveComment(form: RemoveComment): void;
|
|
|
|
onDistinguishComment(form: DistinguishComment): void;
|
|
|
|
onAddModToCommunity(form: AddModToCommunity): void;
|
|
|
|
onAddAdmin(form: AddAdmin): void;
|
|
|
|
onBanPersonFromCommunity(form: BanFromCommunity): void;
|
|
|
|
onBanPerson(form: BanPerson): void;
|
|
|
|
onTransferCommunity(form: TransferCommunity): void;
|
|
|
|
onFetchChildren?(form: GetComments): void;
|
|
|
|
onCommentReport(form: CreateCommentReport): void;
|
|
|
|
onPurgePerson(form: PurgePerson): void;
|
|
|
|
onPurgeComment(form: PurgeComment): void;
|
2020-09-06 16:15:25 +00:00
|
|
|
}
|
|
|
|
|
2021-02-22 02:39:04 +00:00
|
|
|
export class CommentNodes extends Component<CommentNodesProps, any> {
|
2023-04-15 14:47:10 +00:00
|
|
|
constructor(props: CommentNodesProps, context: any) {
|
2020-09-06 16:15:25 +00:00
|
|
|
super(props, context);
|
|
|
|
}
|
|
|
|
|
|
|
|
render() {
|
2023-06-04 02:02:07 +00:00
|
|
|
const maxComments = this.props.maxCommentsShown ?? this.props.nodes.length;
|
2021-11-16 14:46:12 +00:00
|
|
|
|
2023-06-04 02:02:07 +00:00
|
|
|
const borderColor = this.props.depth
|
|
|
|
? colorList[this.props.depth % colorList.length]
|
|
|
|
: colorList[0];
|
|
|
|
|
2023-06-15 01:14:21 +00:00
|
|
|
return (
|
|
|
|
this.props.nodes.length > 0 && (
|
|
|
|
<ul
|
|
|
|
className={classNames("comments", {
|
|
|
|
"ms-1": !!this.props.isChild,
|
|
|
|
"border-top border-light": !this.props.noBorder,
|
|
|
|
})}
|
|
|
|
style={`border-left: 2px solid ${borderColor} !important;`}
|
|
|
|
>
|
|
|
|
{this.props.nodes.slice(0, maxComments).map(node => (
|
|
|
|
<CommentNode
|
|
|
|
key={node.comment_view.comment.id}
|
|
|
|
node={node}
|
|
|
|
noBorder={this.props.noBorder}
|
|
|
|
noIndent={this.props.noIndent}
|
|
|
|
viewOnly={this.props.viewOnly}
|
|
|
|
locked={this.props.locked}
|
|
|
|
moderators={this.props.moderators}
|
|
|
|
admins={this.props.admins}
|
|
|
|
markable={this.props.markable}
|
|
|
|
showContext={this.props.showContext}
|
|
|
|
showCommunity={this.props.showCommunity}
|
|
|
|
enableDownvotes={this.props.enableDownvotes}
|
|
|
|
viewType={this.props.viewType}
|
|
|
|
allLanguages={this.props.allLanguages}
|
|
|
|
siteLanguages={this.props.siteLanguages}
|
|
|
|
hideImages={this.props.hideImages}
|
|
|
|
onCommentReplyRead={this.props.onCommentReplyRead}
|
|
|
|
onPersonMentionRead={this.props.onPersonMentionRead}
|
|
|
|
finished={this.props.finished}
|
|
|
|
onCreateComment={this.props.onCreateComment}
|
|
|
|
onEditComment={this.props.onEditComment}
|
|
|
|
onCommentVote={this.props.onCommentVote}
|
|
|
|
onBlockPerson={this.props.onBlockPerson}
|
|
|
|
onSaveComment={this.props.onSaveComment}
|
|
|
|
onDeleteComment={this.props.onDeleteComment}
|
|
|
|
onRemoveComment={this.props.onRemoveComment}
|
|
|
|
onDistinguishComment={this.props.onDistinguishComment}
|
|
|
|
onAddModToCommunity={this.props.onAddModToCommunity}
|
|
|
|
onAddAdmin={this.props.onAddAdmin}
|
|
|
|
onBanPersonFromCommunity={this.props.onBanPersonFromCommunity}
|
|
|
|
onBanPerson={this.props.onBanPerson}
|
|
|
|
onTransferCommunity={this.props.onTransferCommunity}
|
|
|
|
onFetchChildren={this.props.onFetchChildren}
|
|
|
|
onCommentReport={this.props.onCommentReport}
|
|
|
|
onPurgePerson={this.props.onPurgePerson}
|
|
|
|
onPurgeComment={this.props.onPurgeComment}
|
|
|
|
/>
|
|
|
|
))}
|
|
|
|
</ul>
|
|
|
|
)
|
|
|
|
);
|
2020-09-06 16:15:25 +00:00
|
|
|
}
|
|
|
|
}
|