lbry-desktop/ui/component/claimMenuList/view.jsx

128 lines
3.4 KiB
React
Raw Normal View History

// @flow
2021-03-12 14:48:42 +01:00
import { URL, SHARE_DOMAIN_URL } from 'config';
import * as ICONS from 'constants/icons';
2021-03-31 10:01:49 +02:00
import * as PAGES from 'constants/pages';
import React from 'react';
import classnames from 'classnames';
import { Menu, MenuButton, MenuList, MenuItem } from '@reach/menu-button';
import Icon from 'component/common/icon';
2021-03-12 14:48:42 +01:00
import { generateShareUrl } from 'util/url';
2021-03-31 10:01:49 +02:00
import { useHistory } from 'react-router';
2021-03-12 14:48:42 +01:00
const SHARE_DOMAIN = SHARE_DOMAIN_URL || URL;
type Props = {
2021-03-12 14:48:42 +01:00
uri: string,
claim: ?Claim,
inline?: boolean,
claimIsMine: boolean,
channelIsMuted: boolean,
channelIsBlocked: boolean,
doToggleMuteChannel: (string) => void,
doCommentModBlock: (string) => void,
doCommentModUnBlock: (string) => void,
channelIsMine: boolean,
isRepost: boolean,
};
function ClaimMenuList(props: Props) {
const {
2021-03-12 14:48:42 +01:00
uri,
claim,
inline = false,
claimIsMine,
doToggleMuteChannel,
channelIsMuted,
channelIsBlocked,
doCommentModBlock,
doCommentModUnBlock,
} = props;
2021-03-31 10:01:49 +02:00
const { push } = useHistory();
const channelUri =
claim &&
(claim.value_type === 'channel'
? claim.permanent_url
: claim.signing_channel && claim.signing_channel.permanent_url);
2021-03-12 14:48:42 +01:00
const shareUrl: string = generateShareUrl(SHARE_DOMAIN, uri);
if (!channelUri || !claim) {
return null;
}
function handleToggleMute() {
doToggleMuteChannel(channelUri);
}
function handleToggleBlock() {
if (channelIsBlocked) {
doCommentModUnBlock(channelUri);
} else {
doCommentModBlock(channelUri);
}
}
function handleCopyLink() {
2021-03-12 14:48:42 +01:00
navigator.clipboard.writeText(shareUrl);
}
function handleReportContent() {
2021-03-31 10:01:49 +02:00
push(`/$/${PAGES.REPORT_CONTENT}?claimId=${claim.claim_id}`);
}
return (
<Menu>
<MenuButton
className={classnames('menu__button', { 'claim__menu-button': !inline, 'claim__menu-button--inline': inline })}
onClick={(e) => {
e.stopPropagation();
e.preventDefault();
}}
>
<Icon size={20} icon={ICONS.MORE_VERTICAL} />
</MenuButton>
<MenuList className="menu__list">
{!claimIsMine && (
<>
<MenuItem className="comment__menu-option" onSelect={handleToggleBlock}>
<div className="menu__link">
<Icon aria-hidden icon={ICONS.BLOCK} />
{channelIsBlocked ? __('Unblock Channel') : __('Block Channel')}
</div>
</MenuItem>
<MenuItem className="comment__menu-option" onSelect={handleToggleMute}>
<div className="menu__link">
<Icon aria-hidden icon={ICONS.MUTE} />
{channelIsMuted ? __('Unmute Channel') : __('Mute Channel')}
</div>
</MenuItem>
<hr className="menu__separator" />
</>
)}
<MenuItem className="comment__menu-option" onSelect={handleCopyLink}>
<div className="menu__link">
<Icon aria-hidden icon={ICONS.SHARE} />
{__('Copy Link')}
</div>
</MenuItem>
{!claimIsMine && (
<MenuItem className="comment__menu-option" onSelect={handleReportContent}>
<div className="menu__link">
<Icon aria-hidden icon={ICONS.REPORT} />
{__('Report Content')}
</div>
</MenuItem>
)}
</MenuList>
</Menu>
);
}
export default ClaimMenuList;