diff --git a/frontend/src/component/changeRequest/ChangeRequestSidebar/ChangeRequestSidebar.tsx b/frontend/src/component/changeRequest/ChangeRequestSidebar/ChangeRequestSidebar.tsx index fb291f32d7..3a8a8610a4 100644 --- a/frontend/src/component/changeRequest/ChangeRequestSidebar/ChangeRequestSidebar.tsx +++ b/frontend/src/component/changeRequest/ChangeRequestSidebar/ChangeRequestSidebar.tsx @@ -21,6 +21,8 @@ import { useChangeRequestApi } from 'hooks/api/actions/useChangeRequestApi/useCh import { ChangeRequestStatusBadge } from '../ChangeRequestStatusBadge/ChangeRequestStatusBadge'; import CloseIcon from '@mui/icons-material/Close'; import { useNavigate } from 'react-router-dom'; +import useToast from 'hooks/useToast'; +import { formatUnknownError } from 'utils/formatUnknownError'; interface IChangeRequestSidebarProps { open: boolean; @@ -123,26 +125,26 @@ export const ChangeRequestSidebar: VFC = ({ loading, refetch: refetchChangeRequest, } = useChangeRequestOpen(project); - const { changeState } = useChangeRequestApi(); + const { changeState, discardDraft } = useChangeRequestApi(); const theme = useTheme(); const navigate = useNavigate(); + const { setToastApiError } = useToast(); const onReview = async (draftId: number) => { try { await changeState(project, draftId, { state: 'In review' }); refetchChangeRequest(); - } catch (e) { - console.log('something went wrong'); + } catch (error: unknown) { + setToastApiError(formatUnknownError(error)); } }; - const onDiscard = async () => { - alert('discard'); - }; - const onApply = async () => { + + const onDiscard = async (draftId: number) => { try { - alert('apply'); - } catch (e) { - console.log(e); + await discardDraft(project, draftId); + refetchChangeRequest(); + } catch (error: unknown) { + setToastApiError(formatUnknownError(error)); } }; @@ -257,36 +259,6 @@ export const ChangeRequestSidebar: VFC = ({ onRefetch={refetchChangeRequest} /> - Applied} - /> - Applied} - /> - - - - } - /> = ({ @@ -318,7 +294,9 @@ export const ChangeRequestSidebar: VFC = ({ diff --git a/frontend/src/component/changeRequest/DraftBanner/DraftBanner.tsx b/frontend/src/component/changeRequest/DraftBanner/DraftBanner.tsx index 1911b9dbaf..6559321097 100644 --- a/frontend/src/component/changeRequest/DraftBanner/DraftBanner.tsx +++ b/frontend/src/component/changeRequest/DraftBanner/DraftBanner.tsx @@ -28,7 +28,7 @@ const DraftBannerContent: FC<{ - + Draft mode! – You have changes{' '} + - ); @@ -84,7 +87,9 @@ export const DraftBanner: VFC = ({ project }) => { {draft && draft .filter(changeRequest => - ['Draft', 'In review'].includes(changeRequest.state) + ['Draft', 'In review', 'Approved'].includes( + changeRequest.state + ) ) .map(changeRequest => ( { method: 'PUT', body: JSON.stringify({ changeRequestsEnabled: enabled }), }); + + try { + return await makeRequest(req.caller, req.id); + } catch (e) { + throw e; + } + }; + + const discardDraft = async (projectId: string, draftId: number) => { + const path = `api/admin/projects/${projectId}/change-requests/${draftId}`; + const req = createRequest(path, { + method: 'DELETE', + }); + try { return await makeRequest(req.caller, req.id); } catch (e) { @@ -89,6 +103,7 @@ export const useChangeRequestApi = () => { changeState, discardChangeRequestEvent, updateChangeRequestEnvironmentConfig, + discardDraft, errors, loading, };