From c32a95a8855947963af0dc9515ee0fa21b72d892 Mon Sep 17 00:00:00 2001 From: infinite-persistence <64950861+infinite-persistence@users.noreply.github.com> Date: Tue, 4 May 2021 23:08:36 +0800 Subject: [PATCH] Livestream comment delete/edit fix (#5971) * Fix ability to delete own comments in livestream ## Issue 5832: can't remove own comments in live stream mode (if you have multiple channels?) Looks like it was just missing `commentIsMine` for the new component. * Disable editing livestream comments It doesn't do anything at the moment, anyways. * Disable deleting hyperchats The "total tipped" will get deducted when hyperchats are deleted, which doesn't make sense (doesn't reflect actual total that the creator received). --- ui/component/commentMenuList/view.jsx | 9 +++++++-- ui/component/livestreamComment/view.jsx | 9 ++++++++- ui/component/livestreamComments/index.js | 3 ++- ui/component/livestreamComments/view.jsx | 15 +++++++++++++++ 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/ui/component/commentMenuList/view.jsx b/ui/component/commentMenuList/view.jsx index 7d7150c6c..ce279085c 100644 --- a/ui/component/commentMenuList/view.jsx +++ b/ui/component/commentMenuList/view.jsx @@ -23,6 +23,8 @@ type Props = { isTopLevel: boolean, commentModBlock: (string) => void, playingUri: ?PlayingUri, + disableEdit?: boolean, + disableRemove?: boolean, }; function CommentMenuList(props: Props) { @@ -43,6 +45,8 @@ function CommentMenuList(props: Props) { fetchComments, commentModBlock, playingUri, + disableEdit, + disableRemove, } = props; const activeChannelIsCreator = activeChannelClaim && activeChannelClaim.permanent_url === contentChannelPermanentUrl; @@ -81,7 +85,8 @@ function CommentMenuList(props: Props) { )} - {activeChannelClaim && + {!disableRemove && + activeChannelClaim && (activeChannelClaim.permanent_url === authorUri || activeChannelClaim.permanent_url === contentChannelPermanentUrl) && ( @@ -92,7 +97,7 @@ function CommentMenuList(props: Props) { )} - {commentIsMine && activeChannelClaim && activeChannelClaim.permanent_url === authorUri && ( + {commentIsMine && activeChannelClaim && activeChannelClaim.permanent_url === authorUri && !disableEdit && ( {__('Edit')} diff --git a/ui/component/livestreamComment/view.jsx b/ui/component/livestreamComment/view.jsx index b6c821912..67392d358 100644 --- a/ui/component/livestreamComment/view.jsx +++ b/ui/component/livestreamComment/view.jsx @@ -71,7 +71,14 @@ function Comment(props: Props) { icon={ICONS.MORE_VERTICAL} /> - + 0} + /> diff --git a/ui/component/livestreamComments/index.js b/ui/component/livestreamComments/index.js index c71f6e35d..071e9aa87 100644 --- a/ui/component/livestreamComments/index.js +++ b/ui/component/livestreamComments/index.js @@ -1,5 +1,5 @@ import { connect } from 'react-redux'; -import { makeSelectClaimForUri } from 'lbry-redux'; +import { makeSelectClaimForUri, selectMyChannelClaims } from 'lbry-redux'; import { doCommentSocketConnect, doCommentSocketDisconnect } from 'redux/actions/websocket'; import { doCommentList, doSuperChatList } from 'redux/actions/comments'; import { @@ -16,6 +16,7 @@ const select = (state, props) => ({ fetchingComments: selectIsFetchingComments(state), superChats: makeSelectSuperChatsForUri(props.uri)(state), superChatsTotalAmount: makeSelectSuperChatTotalAmountForUri(props.uri)(state), + myChannels: selectMyChannelClaims(state), }); export default connect(select, { diff --git a/ui/component/livestreamComments/view.jsx b/ui/component/livestreamComments/view.jsx index c442a87c1..27b99a5b9 100644 --- a/ui/component/livestreamComments/view.jsx +++ b/ui/component/livestreamComments/view.jsx @@ -23,6 +23,7 @@ type Props = { doSuperChatList: (string) => void, superChats: Array, superChatsTotalAmount: number, + myChannels: ?Array, }; const VIEW_MODE_CHAT = 'view_chat'; @@ -41,6 +42,7 @@ export default function LivestreamComments(props: Props) { doSuperChatList, superChats, superChatsTotalAmount, + myChannels, } = props; const commentsRef = React.createRef(); const hasScrolledComments = React.useRef(); @@ -50,6 +52,18 @@ export default function LivestreamComments(props: Props) { const commentsLength = comments && comments.length; const commentsToDisplay = viewMode === VIEW_MODE_CHAT ? comments : superChats; + // 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; + } + React.useEffect(() => { if (claimId) { doCommentList(uri); @@ -177,6 +191,7 @@ export default function LivestreamComments(props: Props) { commentId={comment.comment_id} message={comment.comment} supportAmount={comment.support_amount} + commentIsMine={comment.channel_id && isMyComment(comment.channel_id)} /> ))}