mirror of
https://github.com/astuto/astuto.git
synced 2025-12-15 19:27:52 +01:00
91 lines
2.5 KiB
TypeScript
91 lines
2.5 KiB
TypeScript
import * as React from 'react';
|
|
|
|
import Comment from './Comment';
|
|
|
|
import IComment from '../../interfaces/IComment';
|
|
import { ReplyFormState } from '../../reducers/replyFormReducer';
|
|
|
|
interface Props {
|
|
comments: Array<IComment>;
|
|
replyForms: Array<ReplyFormState>;
|
|
parentId: number;
|
|
level: number;
|
|
|
|
toggleCommentReply(commentId: number): void;
|
|
setCommentReplyBody(commentId: number, body: string): void;
|
|
|
|
handleSubmitComment(body: string, parentId: number, isPostUpdate: boolean): void;
|
|
handleUpdateComment(commentId: number, body: string, isPostUpdate: boolean, onSuccess: Function): void;
|
|
handleDeleteComment(id: number): void;
|
|
|
|
isLoggedIn: boolean;
|
|
isPowerUser: boolean;
|
|
userEmail: string;
|
|
}
|
|
|
|
const CommentList = ({
|
|
comments,
|
|
replyForms,
|
|
parentId,
|
|
level,
|
|
|
|
toggleCommentReply,
|
|
setCommentReplyBody,
|
|
handleSubmitComment,
|
|
handleUpdateComment,
|
|
handleDeleteComment,
|
|
|
|
isLoggedIn,
|
|
isPowerUser,
|
|
userEmail,
|
|
}: Props) => (
|
|
<>
|
|
{comments.map((comment, i) => {
|
|
if (comment.parentId === parentId) {
|
|
return (
|
|
<div className="commentList" key={i}>
|
|
<Comment
|
|
replyForm={replyForms.find(replyForm => replyForm.commentId === comment.id)}
|
|
handleToggleCommentReply={() => toggleCommentReply(comment.id)}
|
|
handleCommentReplyBodyChange={
|
|
(e: React.FormEvent) => (
|
|
setCommentReplyBody(comment.id, (e.target as HTMLTextAreaElement).value)
|
|
)
|
|
}
|
|
|
|
handleSubmitComment={handleSubmitComment}
|
|
handleUpdateComment={handleUpdateComment}
|
|
handleDeleteComment={handleDeleteComment}
|
|
|
|
{...comment}
|
|
|
|
isLoggedIn={isLoggedIn}
|
|
isPowerUser={isPowerUser}
|
|
currentUserEmail={userEmail}
|
|
/>
|
|
|
|
<CommentList
|
|
comments={comments}
|
|
replyForms={replyForms}
|
|
parentId={comment.id}
|
|
level={level+1}
|
|
|
|
toggleCommentReply={toggleCommentReply}
|
|
setCommentReplyBody={setCommentReplyBody}
|
|
|
|
handleSubmitComment={handleSubmitComment}
|
|
handleUpdateComment={handleUpdateComment}
|
|
handleDeleteComment={handleDeleteComment}
|
|
|
|
isLoggedIn={isLoggedIn}
|
|
isPowerUser={isPowerUser}
|
|
userEmail={userEmail}
|
|
/>
|
|
</div>
|
|
);
|
|
} else return null;
|
|
})}
|
|
</>
|
|
);
|
|
|
|
export default CommentList; |