c32a95a885
* 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).
143 lines
4.5 KiB
JavaScript
143 lines
4.5 KiB
JavaScript
// @flow
|
|
import * as ICONS from 'constants/icons';
|
|
import React from 'react';
|
|
import { MenuList, MenuItem } from '@reach/menu-button';
|
|
import ChannelThumbnail from 'component/channelThumbnail';
|
|
import Icon from 'component/common/icon';
|
|
|
|
type Props = {
|
|
uri: string,
|
|
clearPlayingUri: () => void,
|
|
authorUri: string, // full LBRY Channel URI: lbry://@channel#123...
|
|
commentId: string, // sha256 digest identifying the comment
|
|
commentIsMine: boolean, // if this comment was signed by an owned channel
|
|
deleteComment: (string, ?string) => void,
|
|
linkedComment?: any,
|
|
isPinned: boolean,
|
|
pinComment: (string, boolean) => Promise<any>,
|
|
blockChannel: (string) => void,
|
|
fetchComments: (string) => void,
|
|
handleEditComment: () => void,
|
|
contentChannelPermanentUrl: any,
|
|
activeChannelClaim: ?ChannelClaim,
|
|
isTopLevel: boolean,
|
|
commentModBlock: (string) => void,
|
|
playingUri: ?PlayingUri,
|
|
disableEdit?: boolean,
|
|
disableRemove?: boolean,
|
|
};
|
|
|
|
function CommentMenuList(props: Props) {
|
|
const {
|
|
uri,
|
|
authorUri,
|
|
commentIsMine,
|
|
commentId,
|
|
deleteComment,
|
|
blockChannel,
|
|
pinComment,
|
|
clearPlayingUri,
|
|
activeChannelClaim,
|
|
contentChannelPermanentUrl,
|
|
isTopLevel,
|
|
isPinned,
|
|
handleEditComment,
|
|
fetchComments,
|
|
commentModBlock,
|
|
playingUri,
|
|
disableEdit,
|
|
disableRemove,
|
|
} = props;
|
|
const activeChannelIsCreator = activeChannelClaim && activeChannelClaim.permanent_url === contentChannelPermanentUrl;
|
|
|
|
function handlePinComment(commentId, remove) {
|
|
pinComment(commentId, remove).then(() => fetchComments(uri));
|
|
}
|
|
|
|
function handleDeleteComment() {
|
|
if (playingUri && playingUri.source === 'comment') {
|
|
clearPlayingUri();
|
|
}
|
|
deleteComment(commentId, commentIsMine ? undefined : contentChannelPermanentUrl);
|
|
}
|
|
|
|
function handleCommentBlock() {
|
|
commentModBlock(authorUri);
|
|
}
|
|
|
|
function handleCommentMute() {
|
|
blockChannel(authorUri);
|
|
}
|
|
|
|
return (
|
|
<MenuList className="menu__list">
|
|
{activeChannelIsCreator && <div className="comment__menu-title">{__('Creator tools')}</div>}
|
|
|
|
{activeChannelIsCreator && isTopLevel && (
|
|
<MenuItem
|
|
className="comment__menu-option menu__link"
|
|
onSelect={isPinned ? () => handlePinComment(commentId, true) : () => handlePinComment(commentId, false)}
|
|
>
|
|
<span className={'button__content'}>
|
|
<Icon aria-hidden icon={ICONS.PIN} className={'icon'} />
|
|
{isPinned ? __('Unpin') : __('Pin')}
|
|
</span>
|
|
</MenuItem>
|
|
)}
|
|
|
|
{!disableRemove &&
|
|
activeChannelClaim &&
|
|
(activeChannelClaim.permanent_url === authorUri ||
|
|
activeChannelClaim.permanent_url === contentChannelPermanentUrl) && (
|
|
<MenuItem className="comment__menu-option" onSelect={handleDeleteComment}>
|
|
<div className="menu__link">
|
|
<Icon aria-hidden icon={ICONS.DELETE} />
|
|
{__('Remove')}
|
|
</div>
|
|
</MenuItem>
|
|
)}
|
|
|
|
{commentIsMine && activeChannelClaim && activeChannelClaim.permanent_url === authorUri && !disableEdit && (
|
|
<MenuItem className="comment__menu-option menu__link" onSelect={handleEditComment}>
|
|
<Icon aria-hidden icon={ICONS.EDIT} />
|
|
{__('Edit')}
|
|
</MenuItem>
|
|
)}
|
|
|
|
{!commentIsMine && (
|
|
<MenuItem className="comment__menu-option" onSelect={handleCommentBlock}>
|
|
<div className="menu__link">
|
|
<Icon aria-hidden icon={ICONS.BLOCK} />
|
|
{__('Block')}
|
|
</div>
|
|
{activeChannelIsCreator && (
|
|
<span className="comment__menu-help">{__('Prevent this channel from interacting with you.')}</span>
|
|
)}
|
|
</MenuItem>
|
|
)}
|
|
|
|
{!commentIsMine && (
|
|
<MenuItem className="comment__menu-option" onSelect={handleCommentMute}>
|
|
<div className="menu__link">
|
|
<Icon aria-hidden icon={ICONS.MUTE} />
|
|
{__('Mute')}
|
|
</div>
|
|
{activeChannelIsCreator && (
|
|
<span className="comment__menu-help">{__('Hide this channel for you only.')}</span>
|
|
)}
|
|
</MenuItem>
|
|
)}
|
|
|
|
{activeChannelClaim && (
|
|
<div className="comment__menu-active">
|
|
<ChannelThumbnail uri={activeChannelClaim.permanent_url} />
|
|
<div className="comment__menu-channel">
|
|
{__('Interacting as %channelName%', { channelName: activeChannelClaim.name })}
|
|
</div>
|
|
</div>
|
|
)}
|
|
</MenuList>
|
|
);
|
|
}
|
|
|
|
export default CommentMenuList;
|