1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-08-27 13:49:10 +02:00

chore: set up context for sidebar CRs

This commit is contained in:
Thomas Heartman 2024-02-02 16:25:02 +09:00
parent e04bccace5
commit e98fbf82cb
No known key found for this signature in database
GPG Key ID: BD1F880DAED1EE78
2 changed files with 41 additions and 25 deletions

View File

@ -1,4 +1,4 @@
import { VFC } from 'react';
import { useState, VFC } from 'react';
import { Box, Button, styled, Typography } from '@mui/material';
import { DynamicSidebarModal } from 'component/common/SidebarModal/SidebarModal';
import { PageContent } from 'component/common/PageContent/PageContent';
@ -11,6 +11,7 @@ import useToast from 'hooks/useToast';
import { formatUnknownError } from 'utils/formatUnknownError';
import { EnvironmentChangeRequest } from './EnvironmentChangeRequest/EnvironmentChangeRequest';
import { ReviewChangesHeader } from './ReviewChangesHeader/ReviewChangesHeader';
import { ChangeRequestPlausibleProvider } from '../ChangeRequestContext';
interface IChangeRequestSidebarProps {
open: boolean;
@ -76,15 +77,18 @@ export const ChangeRequestSidebar: VFC<IChangeRequestSidebarProps> = ({
loading,
refetch: refetchChangeRequest,
} = usePendingChangeRequests(project);
const { changeState, discardDraft } = useChangeRequestApi();
const { discardDraft } = useChangeRequestApi();
const { setToastApiError } = useToast();
const [
changeRequestChangesWillOverwrite,
setChangeRequestChangesWillOverwrite,
] = useState(false);
const onReview = async (draftId: number, comment?: string) => {
const onReview = async (
changeState: (project: string) => Promise<void>,
) => {
try {
await changeState(project, draftId, 'Draft', {
state: 'In review',
comment,
});
await changeState(project);
refetchChangeRequest();
} catch (error: unknown) {
setToastApiError(formatUnknownError(error));
@ -130,19 +134,29 @@ export const ChangeRequestSidebar: VFC<IChangeRequestSidebarProps> = ({
header={<ReviewChangesHeader />}
>
{data?.map((environmentChangeRequest) => (
<EnvironmentChangeRequest
<ChangeRequestPlausibleProvider
key={environmentChangeRequest.id}
environmentChangeRequest={environmentChangeRequest}
onClose={onClose}
onReview={onReview}
onDiscard={onDiscard}
value={{
willOverwriteStrategyChanges:
changeRequestChangesWillOverwrite,
registerWillOverwriteStrategyChanges: () =>
setChangeRequestChangesWillOverwrite(true),
}}
>
<ChangeRequest
changeRequest={environmentChangeRequest}
onNavigate={onClose}
onRefetch={refetchChangeRequest}
/>
</EnvironmentChangeRequest>
<EnvironmentChangeRequest
key={environmentChangeRequest.id}
environmentChangeRequest={environmentChangeRequest}
onClose={onClose}
onReview={onReview}
onDiscard={onDiscard}
>
<ChangeRequest
changeRequest={environmentChangeRequest}
onNavigate={onClose}
onRefetch={refetchChangeRequest}
/>
</EnvironmentChangeRequest>
</ChangeRequestPlausibleProvider>
))}
</StyledPageContent>
</DynamicSidebarModal>

View File

@ -23,6 +23,7 @@ import { useAuthUser } from 'hooks/api/getters/useAuth/useAuthUser';
import Input from 'component/common/Input/Input';
import { ChangeRequestTitle } from './ChangeRequestTitle';
import { UpdateCount } from 'component/changeRequest/UpdateCount';
import { useChangeRequestApi } from 'hooks/api/actions/useChangeRequestApi/useChangeRequestApi';
const SubmitChangeRequestButton: FC<{ onClick: () => void; count: number }> = ({
onClick,
@ -56,7 +57,7 @@ const ChangeRequestContent = styled(Box)(({ theme }) => ({
export const EnvironmentChangeRequest: FC<{
environmentChangeRequest: ChangeRequestType;
onClose: () => void;
onReview: (id: number, comment?: string) => void;
onReview: (changeState: (project: string) => Promise<void>) => void;
onDiscard: (id: number) => void;
}> = ({ environmentChangeRequest, onClose, onReview, onDiscard, children }) => {
const theme = useTheme();
@ -64,6 +65,12 @@ export const EnvironmentChangeRequest: FC<{
const [commentText, setCommentText] = useState('');
const { user } = useAuthUser();
const [title, setTitle] = useState(environmentChangeRequest.title);
const { changeState } = useChangeRequestApi();
const sendToReview = async (project: string) =>
changeState(project, environmentChangeRequest.id, 'Draft', {
state: 'In review',
comment: commentText,
});
return (
<Box key={environmentChangeRequest.id}>
@ -141,12 +148,7 @@ export const EnvironmentChangeRequest: FC<{
show={
<>
<SubmitChangeRequestButton
onClick={() =>
onReview(
environmentChangeRequest.id,
commentText,
)
}
onClick={() => onReview(sendToReview)}
count={changesCount(
environmentChangeRequest,
)}