import { FC, VFC } from 'react'; import { Box, Button, styled, Typography, useTheme } from '@mui/material'; import { DynamicSidebarModal } from 'component/common/SidebarModal/SidebarModal'; import { PageContent } from 'component/common/PageContent/PageContent'; import { PageHeader } from 'component/common/PageHeader/PageHeader'; import { CheckCircle } from '@mui/icons-material'; import { ChangeRequest } from '../ChangeRequest/ChangeRequest'; import { usePendingChangeRequests } from 'hooks/api/getters/usePendingChangeRequests/usePendingChangeRequests'; import { useChangeRequestApi } from 'hooks/api/actions/useChangeRequestApi/useChangeRequestApi'; import useToast from 'hooks/useToast'; import { formatUnknownError } from 'utils/formatUnknownError'; import { EnvironmentChangeRequest } from './EnvironmentChangeRequest/EnvironmentChangeRequest'; import { ReviewChangesHeader } from './ReviewChangesHeader/ReviewChangesHeader'; interface IChangeRequestSidebarProps { open: boolean; project: string; onClose: () => void; } const StyledPageContent = styled(PageContent)(({ theme }) => ({ height: '100vh', overflow: 'auto', minWidth: '50vw', padding: theme.spacing(6), [theme.breakpoints.down('md')]: { padding: theme.spacing(4, 2), }, '& .header': { padding: theme.spacing(0, 0, 2, 0), }, '& .body': { padding: theme.spacing(3, 0, 0, 0), }, borderRadius: `${theme.spacing(1.5, 0, 0, 1.5)} !important`, })); const BackButton = styled(Button)(({ theme }) => ({ marginTop: theme.spacing(2), marginLeft: 'auto', })); export const StyledSuccessIcon = styled(CheckCircle)(({ theme }) => ({ color: theme.palette.success.main, height: '32px', width: '32px', marginRight: theme.spacing(1), })); export const StyledFlexAlignCenterBox = styled(Box)(() => ({ marginLeft: 'auto', display: 'flex', alignItems: 'center', })); export const Separator = () => ( | ); export const UpdateCount: FC<{ count: number }> = ({ count }) => ( Updates:{' '} {count} {count === 1 ? 'feature toggle' : 'feature toggles'} ); export const ChangeRequestSidebar: VFC = ({ open, project, onClose, }) => { const { data, loading, refetch: refetchChangeRequest, } = usePendingChangeRequests(project); const { changeState, discardDraft } = useChangeRequestApi(); const { setToastApiError } = useToast(); const onReview = async (draftId: number) => { try { await changeState(project, draftId, { state: 'In review' }); refetchChangeRequest(); } catch (error: unknown) { setToastApiError(formatUnknownError(error)); } }; const onDiscard = async (draftId: number) => { try { await discardDraft(project, draftId); refetchChangeRequest(); } catch (error: unknown) { setToastApiError(formatUnknownError(error)); } }; if (!loading && !data) { return ( } > There are no changes to review. {/* FIXME: empty state */} Close ); } return ( } > {data?.map(environmentChangeRequest => ( ))} ); };