// @flow import * as ICONS from 'constants/icons'; import Button from 'component/button'; import Comment from 'component/comment'; import React from 'react'; import Spinner from 'component/spinner'; type Props = { uri: string, linkedCommentId?: string, threadDepth: number, numDirectReplies: number, // Total replies for parentId as reported by 'comment[replies]'. Includes blocked items. hasMore: boolean, supportDisabled: boolean, onShowMore?: () => void, // redux fetchedReplies: Array<Comment>, claimIsMine: boolean, isFetching: boolean, }; export default function CommentsReplies(props: Props) { const { uri, fetchedReplies, claimIsMine, linkedCommentId, threadDepth, numDirectReplies, isFetching, hasMore, supportDisabled, onShowMore, } = props; const [isExpanded, setExpanded] = React.useState(true); return !numDirectReplies ? null : ( <div className="comment__replies-container"> {!isExpanded ? ( <div className="comment__actions--nested"> <Button className="comment__action" label={__('Show Replies')} onClick={() => setExpanded(!isExpanded)} icon={isExpanded ? ICONS.UP : ICONS.DOWN} /> </div> ) : ( <div className="comment__replies"> <Button className="comment__threadline" aria-label="Hide Replies" onClick={() => setExpanded(false)} /> <ul className="comments--replies"> {fetchedReplies.map((comment) => ( <Comment key={comment.comment_id} threadDepth={threadDepth} uri={uri} comment={comment} claimIsMine={claimIsMine} linkedCommentId={linkedCommentId} supportDisabled={supportDisabled} /> ))} </ul> </div> )} {isExpanded && fetchedReplies && hasMore && ( <div className="comment__actions--nested"> <Button button="link" label={__('Show more')} onClick={() => onShowMore && onShowMore()} className="button--uri-indicator" /> </div> )} {isFetching && ( <div className="comment__replies-container"> <div className="comment__actions--nested"> <Spinner type="small" /> </div> </div> )} </div> ); }