import type React from 'react'; import { type FC, useState } from 'react'; import { Box, Button, Divider, styled, Typography, useTheme, } from '@mui/material'; import type { ChangeRequestType } from '../../changeRequest.types'; import { Link } from 'react-router-dom'; import { ChangeRequestStatusBadge } from '../../ChangeRequestStatusBadge/ChangeRequestStatusBadge.tsx'; import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender'; import { changesCount } from '../../changesCount.js'; import { Separator, StyledFlexAlignCenterBox, StyledSuccessIcon, } from '../ChangeRequestSidebar.tsx'; import { AddCommentField } from '../../ChangeRequestOverview/ChangeRequestComments/AddCommentField.tsx'; import { useAuthUser } from 'hooks/api/getters/useAuth/useAuthUser'; import Input from 'component/common/Input/Input'; import { ChangeRequestTitle } from './ChangeRequestTitle.tsx'; import { UpdateCount } from 'component/changeRequest/UpdateCount'; import { useChangeRequestApi } from 'hooks/api/actions/useChangeRequestApi/useChangeRequestApi'; import { useUiFlag } from 'hooks/useUiFlag'; import { DraftChangeRequestActions } from '../DraftChangeRequestActions/DraftChangeRequestActions.tsx'; import type { AvailableReviewerSchema } from 'hooks/api/getters/useAvailableChangeRequestReviewers/useAvailableChangeRequestReviewers.ts'; const SubmitChangeRequestButton: FC<{ onClick: () => void; count: number; disabled?: boolean; }> = ({ onClick, count, disabled = false }) => ( ); const ChangeRequestHeader = styled(Box)(({ theme }) => ({ padding: theme.spacing(3, 3, 1, 3), border: '2px solid', borderColor: theme.palette.divider, borderRadius: `${theme.shape.borderRadiusLarge}px ${theme.shape.borderRadiusLarge}px 0 0`, borderBottom: 'none', overflow: 'hidden', backgroundColor: theme.palette.neutral.light, })); const ChangeRequestContent = styled(Box)(({ theme }) => ({ padding: theme.spacing(3, 3, 3, 3), border: '2px solid', marginBottom: theme.spacing(5), borderColor: theme.palette.divider, borderRadius: `0 0 ${theme.shape.borderRadiusLarge}px ${theme.shape.borderRadiusLarge}px`, borderTop: 'none', overflow: 'hidden', })); export const EnvironmentChangeRequest: FC<{ environmentChangeRequest: ChangeRequestType; onClose: () => void; onReview: (changeState: (project: string) => Promise) => void; onDiscard: (id: number) => void; children?: React.ReactNode; }> = ({ environmentChangeRequest, onClose, onReview, onDiscard, children }) => { const theme = useTheme(); const [commentText, setCommentText] = useState(''); const { user } = useAuthUser(); const [title, setTitle] = useState(environmentChangeRequest.title); const { changeState, updateRequestedApprovers } = useChangeRequestApi(); const [reviewers, setReviewers] = useState([]); const [disabled, setDisabled] = useState(false); const approversEnabled = useUiFlag('changeRequestApproverEmails'); const sendToReview = async (project: string) => { setDisabled(true); try { await changeState(project, environmentChangeRequest.id, 'Draft', { state: 'In review', comment: commentText, }); if (reviewers && reviewers.length > 0) { await updateRequestedApprovers( project, environmentChangeRequest.id, reviewers.map((reviewer) => reviewer.id), ); } } catch (e) { setDisabled(false); } }; return ( {environmentChangeRequest.environment} Updates: {}} disabled={true} /> {children} } /> } elseShow={ <> onReview(sendToReview) } count={changesCount( environmentChangeRequest, )} disabled={disabled} /> } /> } /> Draft successfully sent to review } /> ); };