import * as React from 'react'; import I18n from 'i18n-js'; import Box from '../../common/Box'; import SiteSettingsInfoBox from '../../common/SiteSettingsInfoBox'; import { UserRoles } from '../../../interfaces/IUser'; import { TenantSettingFeedbackApprovalPolicy } from '../../../interfaces/ITenantSetting'; import Badge, { BADGE_TYPE_LIGHT } from '../../common/Badge'; import ActionLink from '../../common/ActionLink'; import { SettingsIcon } from '../../common/Icons'; import IPost, { PostApprovalStatus } from '../../../interfaces/IPost'; import FeedbackModerationList from './FeedbackModerationList'; interface Props { currentUserRole: UserRoles; changeFeedbackModerationSettingsUrl: string; tenantSettingAllowAnonymousFeedback: boolean; tenantSettingFeedbackApprovalPolicy: TenantSettingFeedbackApprovalPolicy; authenticityToken: string; posts: Array; areLoading: boolean; areUpdating: boolean; error: string; requestPostsForModeration(): void; updatePostApprovalStatus( id: number, approvalStatus: PostApprovalStatus, authenticityToken: string ): Promise; } interface State { filter: 'pending' | 'rejected'; } class FeedbackModerationP extends React.Component { constructor(props: Props) { super(props); this.state = { filter: 'pending', }; } componentDidMount() { this.props.requestPostsForModeration(); } getFeedbackPolicyString(tenantSettingFeedbackApprovalPolicy: TenantSettingFeedbackApprovalPolicy): string { switch (tenantSettingFeedbackApprovalPolicy) { case 'anonymous_require_approval': return I18n.t('site_settings.general.feedback_approval_policy_anonymous_require_approval'); case 'never_require_approval': return I18n.t('site_settings.general.feedback_approval_policy_never_require_approval'); case 'always_require_approval': return I18n.t('site_settings.general.feedback_approval_policy_always_require_approval'); } } render() { const { currentUserRole, changeFeedbackModerationSettingsUrl, tenantSettingAllowAnonymousFeedback, tenantSettingFeedbackApprovalPolicy, posts, areLoading, areUpdating, error, updatePostApprovalStatus, authenticityToken, } = this.props; const { filter } = this.state; const pendingPosts = posts.filter(post => post.approvalStatus === 'pending'); const rejectedPosts = posts.filter(post => post.approvalStatus === 'rejected'); return ( <>

{ I18n.t('moderation.menu.feedback') }

{ (currentUserRole === 'admin' || currentUserRole === 'owner') && <>
{ tenantSettingAllowAnonymousFeedback ? I18n.t('moderation.feedback.anonymous_feedback_allowed') : I18n.t('moderation.feedback.anonymous_feedback_not_allowed') } { this.getFeedbackPolicyString(tenantSettingFeedbackApprovalPolicy) }
window.location.href = changeFeedbackModerationSettingsUrl} icon={} customClass="changeFeedbackModerationSettingsLink" > { I18n.t('moderation.feedback.change_feedback_moderation_settings') } } { filter === 'pending' ? updatePostApprovalStatus(id, approvalStatus, authenticityToken) } /> : updatePostApprovalStatus(id, approvalStatus, authenticityToken) } hideRejectButton /> }
); } } export default FeedbackModerationP;