a05ccdd44f
## Issue 6712 Comment Moderation - time based bans ## Approach - Consolidated the 3 types of blocking buttons in the comment content menu (i.e. Block, Moderator Block, Admin Block) into 1 regular Block button. - Show a modal when Block is clicked. - Let user choose the blocklist. - Let user choose the timeout duration (this PR's impetus).
95 lines
2.5 KiB
JavaScript
95 lines
2.5 KiB
JavaScript
// @flow
|
|
import React from 'react';
|
|
import Button from 'component/button';
|
|
import { BLOCK_LEVEL } from 'constants/comment';
|
|
import { parseURI } from 'lbry-redux';
|
|
|
|
type Props = {
|
|
uri: string,
|
|
blockLevel?: string,
|
|
creatorUri?: string,
|
|
isBlocked: boolean,
|
|
isBlockingOrUnBlocking: boolean,
|
|
isToggling: boolean,
|
|
doCommentModUnBlock: (string, boolean) => void,
|
|
doCommentModBlock: (string, ?Number, boolean) => void,
|
|
doCommentModUnBlockAsAdmin: (string, string) => void,
|
|
doCommentModBlockAsAdmin: (string, string) => void,
|
|
doCommentModUnBlockAsModerator: (string, string, string) => void,
|
|
doCommentModBlockAsModerator: (string, string, string) => void,
|
|
};
|
|
|
|
function ChannelBlockButton(props: Props) {
|
|
const {
|
|
uri,
|
|
blockLevel,
|
|
creatorUri,
|
|
doCommentModUnBlock,
|
|
doCommentModBlock,
|
|
doCommentModUnBlockAsAdmin,
|
|
doCommentModBlockAsAdmin,
|
|
doCommentModUnBlockAsModerator,
|
|
doCommentModBlockAsModerator,
|
|
isBlocked,
|
|
isBlockingOrUnBlocking,
|
|
isToggling,
|
|
} = props;
|
|
|
|
function handleClick() {
|
|
switch (blockLevel) {
|
|
default:
|
|
case BLOCK_LEVEL.SELF:
|
|
if (isBlocked) {
|
|
doCommentModUnBlock(uri, false);
|
|
} else {
|
|
doCommentModBlock(uri, undefined, false);
|
|
}
|
|
break;
|
|
|
|
case BLOCK_LEVEL.MODERATOR:
|
|
if (creatorUri) {
|
|
const { channelClaimId } = parseURI(creatorUri);
|
|
if (isBlocked) {
|
|
doCommentModUnBlockAsModerator(uri, channelClaimId, '');
|
|
} else {
|
|
doCommentModBlockAsModerator(uri, channelClaimId, '');
|
|
}
|
|
}
|
|
break;
|
|
|
|
case BLOCK_LEVEL.ADMIN:
|
|
if (isBlocked) {
|
|
doCommentModUnBlockAsAdmin(uri, '');
|
|
} else {
|
|
doCommentModBlockAsAdmin(uri, '');
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function getButtonText(blockLevel) {
|
|
switch (blockLevel) {
|
|
default:
|
|
case BLOCK_LEVEL.SELF:
|
|
case BLOCK_LEVEL.ADMIN:
|
|
return isBlocked
|
|
? isBlockingOrUnBlocking
|
|
? __('Unblocking...')
|
|
: __('Unblock')
|
|
: isBlockingOrUnBlocking
|
|
? __('Blocking...')
|
|
: __('Block');
|
|
|
|
case BLOCK_LEVEL.MODERATOR:
|
|
if (isToggling) {
|
|
return isBlocked ? __('Unblocking...') : __('Blocking...');
|
|
} else {
|
|
return isBlocked ? __('Unblock') : __('Block');
|
|
}
|
|
}
|
|
}
|
|
|
|
return <Button button={isBlocked ? 'alt' : 'secondary'} label={getButtonText(blockLevel)} onClick={handleClick} />;
|
|
}
|
|
|
|
export default ChannelBlockButton;
|