import { ButtonVariation, Color, Container, Icon, IconName, SplitButton, useToaster, Text, FontVariation, Layout } from '@harness/uicore' import { Menu, PopoverPosition } from '@blueprintjs/core' import cx from 'classnames' import { useMutate } from 'restful-react' import React, { useCallback, useState } from 'react' import { useStrings } from 'framework/strings' import type { EnumPullReqReviewDecision, TypesPullReq } from 'services/code' import type { GitInfoProps } from 'utils/GitUtils' import { getErrorMessage } from 'utils/Utils' import css from '../Changes.module.scss' interface PrReviewOption { method: EnumPullReqReviewDecision | 'reject' title: string disabled?: boolean icon: IconName color: Color } interface ReviewSplitButtonProps extends Pick { shouldHide: boolean pullRequestMetadata?: TypesPullReq refreshPr: () => void } const ReviewSplitButton = (props: ReviewSplitButtonProps) => { const { pullRequestMetadata, repoMetadata, shouldHide, refreshPr } = props const { getString } = useStrings() const { showError, showSuccess } = useToaster() const prDecisionOptions: PrReviewOption[] = [ { method: 'approved', title: getString('approve'), icon: 'tick-circle' as IconName, color: Color.GREEN_700 }, { method: 'changereq', title: getString('requestChanges'), icon: 'error' as IconName, color: Color.ORANGE_700 }, { method: 'reject', title: getString('reject'), disabled: true, icon: 'danger-icon' as IconName, color: Color.RED_700 } ] const [decisionOption, setDecisionOption] = useState(prDecisionOptions[0]) const { mutate, loading } = useMutate({ verb: 'POST', path: `/api/v1/repos/${repoMetadata.path}/+/pullreq/${pullRequestMetadata?.number}/reviews` }) const submitReview = useCallback(() => { mutate({ decision: decisionOption.method }) .then(() => { // setReset(true) showSuccess(getString('pr.reviewSubmitted')) refreshPr?.() }) .catch(exception => showError(getErrorMessage(exception))) }, [decisionOption, mutate, showError, showSuccess, getString]) return ( { submitReview() }}> {prDecisionOptions.map(option => { return ( {option.title} } onClick={() => { setDecisionOption(option) }} /> ) })} ) } export default ReviewSplitButton