// @flow import { SITE_NAME } from 'config'; import * as ICONS from 'constants/icons'; import * as PAGES from 'constants/pages'; import React from 'react'; import Comment from 'component/comment'; import Button from 'component/button'; import CommentCreate from 'component/commentCreate'; import { useHistory } from 'react-router'; type Props = { comments: Array, uri: string, claimIsMine: boolean, myChannels: ?Array, linkedComment?: Comment, parentId: string, commentingEnabled: boolean, doToast: ({ message: string }) => void, }; function CommentsReplies(props: Props) { const { uri, comments, claimIsMine, myChannels, linkedComment, parentId, commentingEnabled, doToast } = props; const { push, location: { pathname }, } = useHistory(); const [isReplying, setReplying] = React.useState(false); const [isExpanded, setExpanded] = React.useState(false); const [start, setStart] = React.useState(0); const [end, setEnd] = React.useState(9); const sortedComments = comments ? [...comments].reverse() : []; const numberOfComments = comments ? comments.length : 0; const linkedCommentId = linkedComment ? linkedComment.comment_id : ''; const commentsIndexOfLInked = comments && sortedComments.findIndex(e => e.comment_id === linkedCommentId); const hasChannels = myChannels && myChannels.length > 0; function showMore() { if (start > 0) { setStart(0); } else { setEnd(numberOfComments); } } // todo: implement comment_list --mine in SDK so redux can grab with selectCommentIsMine function isMyComment(channelId: string) { if (myChannels != null && channelId != null) { for (let i = 0; i < myChannels.length; i++) { if (myChannels[i].claim_id === channelId) { return true; } } } return false; } function handleCommentDone() { if (!isExpanded) { setExpanded(true); setStart(numberOfComments || 0); } setEnd(numberOfComments + 1); setReplying(false); } function handleCommentReply() { if (!hasChannels) { push(`/$/${PAGES.CHANNEL_NEW}?redirect=${pathname}`); doToast({ message: __('A channel is required to comment on %SITE_NAME%', { SITE_NAME }) }); } else { setReplying(!isReplying); } } React.useEffect(() => { if ( setStart && setEnd && setExpanded && linkedCommentId && Number.isInteger(commentsIndexOfLInked) && commentsIndexOfLInked > -1 ) { setStart(commentsIndexOfLInked); setEnd(commentsIndexOfLInked + 1); setExpanded(true); } }, [setStart, setEnd, setExpanded, linkedCommentId, commentsIndexOfLInked]); const displayedComments = sortedComments.slice(start, end); return (
  • {comments && displayedComments && isExpanded && (
    {!isReplying && (
    )} {isExpanded && comments && (end < numberOfComments || start > 0) && (
    )} {isReplying ? ( handleCommentDone()} onCancelReplying={() => setReplying(false)} /> ) : ( '' )}
  • ); } export default CommentsReplies;