Skip to content
Snippets Groups Projects
QuestionModerationSection.jsx 1.74 KiB
Newer Older
import React from "react";
import PropTypes from "prop-types";
import { connect } from "react-redux";

import { getLatestModerationReview } from "metabase-enterprise/moderation/service";
import { getIsModerator } from "metabase-enterprise/moderation/selectors";
import {
  verifyCard,
  removeCardReview,
} from "metabase-enterprise/moderation/actions";

import { BorderedModerationActions } from "./QuestionModerationSection.styled";
import ModerationReviewBanner from "../ModerationReviewBanner/ModerationReviewBanner";

const mapStateToProps = (state, props) => ({
  isModerator: getIsModerator(state, props),
});
const mapDispatchToProps = {
  verifyCard,
  removeCardReview,
};

export default connect(
  mapStateToProps,
  mapDispatchToProps,
)(QuestionModerationSection);

QuestionModerationSection.propTypes = {
  question: PropTypes.object.isRequired,
  verifyCard: PropTypes.func.isRequired,
  removeCardReview: PropTypes.func.isRequired,
  isModerator: PropTypes.bool.isRequired,
};

function QuestionModerationSection({
  question,
  verifyCard,
  removeCardReview,
  isModerator,
}) {
  const latestModerationReview = getLatestModerationReview(
    question.getModerationReviews(),
  );

  const onVerify = () => {
    const id = question.id();
    verifyCard(id);
  };

  const onRemoveModerationReview = () => {
    const id = question.id();
    removeCardReview(id);
  };

  return (
    <React.Fragment>
      <BorderedModerationActions
        moderationReview={latestModerationReview}
        onVerify={isModerator && onVerify}
      />
      {latestModerationReview && (
        <ModerationReviewBanner
          moderationReview={latestModerationReview}
          onRemove={isModerator && onRemoveModerationReview}
        />
      )}
    </React.Fragment>
  );
}