/* global showLoginModal */
import { h, Component } from 'preact';
import PropTypes from 'prop-types';
import {
Button,
ButtonGroup,
Dropdown,
FormField,
RadioButton,
} from '@crayons';
export const COMMENT_SUBSCRIPTION_TYPE = Object.freeze({
ALL: 'all_comments',
TOP: 'top_level_comments',
AUTHOR: 'only_author_comments',
NOT_SUBSCRIBED: 'not_subscribed',
});
export class CommentSubscription extends Component {
constructor(props) {
const { subscriptionType } = props;
super(props);
const subscribed =
subscriptionType &&
(subscriptionType.length > 0 && subscriptionType) !==
COMMENT_SUBSCRIPTION_TYPE.NOT_SUBSCRIBED;
const initialState = {
subscriptionType: subscribed
? subscriptionType
: COMMENT_SUBSCRIPTION_TYPE.ALL,
subscribed,
showOptions: false,
};
this.state = initialState;
}
commentSubscriptionClick = (event) => {
this.setState({
subscriptionType: event.target.value,
});
};
render() {
const { subscriptionType, subscribed } = this.state;
const {
onSubscribe,
onUnsubscribe,
positionType = 'relative',
isLoggedIn,
} = this.props;
const CogIcon = () => (
);
return (
{
this.buttonGroupElement = element;
}}
>
{subscribed ? (
) : null}
{subscribed && (
{
this.dropdownElement = element;
}}
onOpen={() => this.setState({ showOptions: true })}
onClose={() => this.setState({ showOptions: false })}
>
)}
);
}
}
CommentSubscription.displayName = 'CommentSubscription';
CommentSubscription.propTypes = {
positionType: PropTypes.oneOf(['absolute', 'relative', 'static']).isRequired,
onSubscribe: PropTypes.func.isRequired,
onUnsubscribe: PropTypes.func.isRequired,
subscriptionType: PropTypes.oneOf(
Object.entries(COMMENT_SUBSCRIPTION_TYPE).map(([, value]) => value),
).isRequired,
isLoggedIn: PropTypes.bool.isRequired,
};