1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-02-09 00:18:00 +01:00

min approvals from cr not config (#2556)

This commit is contained in:
Mateusz Kwasniewski 2022-11-29 12:42:36 +01:00 committed by GitHub
parent 87211dd22e
commit 9f983f4ed6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 46 deletions

View File

@ -197,8 +197,7 @@ export const ChangeRequestOverview: FC = () => {
} }
/> />
<ChangeRequestReviewStatus <ChangeRequestReviewStatus
state={changeRequest.state} changeRequest={changeRequest}
environment={changeRequest.environment}
/> />
<StyledButtonBox> <StyledButtonBox>
<ConditionallyRender <ConditionallyRender

View File

@ -11,36 +11,14 @@ import {
StyledReviewTitle, StyledReviewTitle,
StyledDivider, StyledDivider,
} from './ChangeRequestReviewStatus.styles'; } from './ChangeRequestReviewStatus.styles';
import { ChangeRequestState } from 'component/changeRequest/changeRequest.types'; import {
import { useRequiredPathParam } from '../../../../hooks/useRequiredPathParam'; ChangeRequestState,
import { useChangeRequestConfig } from '../../../../hooks/api/getters/useChangeRequestConfig/useChangeRequestConfig'; IChangeRequest,
} from 'component/changeRequest/changeRequest.types';
interface ISuggestChangeReviewsStatusProps { interface ISuggestChangeReviewsStatusProps {
state: ChangeRequestState; changeRequest: IChangeRequest;
environment: string;
} }
export const useChangeRequestRequiredApprovals = (projectId: string) => {
const { data } = useChangeRequestConfig(projectId);
const getChangeRequestRequiredApprovals = React.useCallback(
(environment: string): number => {
const config = data.find(draft => {
return (
draft.environment === environment &&
draft.changeRequestEnabled
);
});
return config?.requiredApprovals || 1;
},
[data]
);
return {
getChangeRequestRequiredApprovals,
};
};
const resolveBorder = (state: ChangeRequestState, theme: Theme) => { const resolveBorder = (state: ChangeRequestState, theme: Theme) => {
if (state === 'Approved') { if (state === 'Approved') {
return `2px solid ${theme.palette.success.main}`; return `2px solid ${theme.palette.success.main}`;
@ -76,30 +54,35 @@ const resolveIconColors = (state: ChangeRequestState, theme: Theme) => {
export const ChangeRequestReviewStatus: FC< export const ChangeRequestReviewStatus: FC<
ISuggestChangeReviewsStatusProps ISuggestChangeReviewsStatusProps
> = ({ state, environment }) => { > = ({ changeRequest }) => {
const theme = useTheme(); const theme = useTheme();
return ( return (
<StyledOuterContainer> <StyledOuterContainer>
<StyledButtonContainer {...resolveIconColors(state, theme)}> <StyledButtonContainer
{...resolveIconColors(changeRequest.state, theme)}
>
<ChangesAppliedIcon <ChangesAppliedIcon
style={{ style={{
transform: `scale(1.5)`, transform: `scale(1.5)`,
}} }}
/> />
</StyledButtonContainer> </StyledButtonContainer>
<StyledReviewStatusContainer border={resolveBorder(state, theme)}> <StyledReviewStatusContainer
<ResolveComponent state={state} environment={environment} /> border={resolveBorder(changeRequest.state, theme)}
>
<ResolveComponent changeRequest={changeRequest} />
</StyledReviewStatusContainer> </StyledReviewStatusContainer>
</StyledOuterContainer> </StyledOuterContainer>
); );
}; };
interface IResolveComponentProps { interface IResolveComponentProps {
state: ChangeRequestState; changeRequest: IChangeRequest;
environment: string;
} }
const ResolveComponent = ({ state, environment }: IResolveComponentProps) => { const ResolveComponent = ({ changeRequest }: IResolveComponentProps) => {
const { state } = changeRequest;
if (!state) { if (!state) {
return null; return null;
} }
@ -116,7 +99,7 @@ const ResolveComponent = ({ state, environment }: IResolveComponentProps) => {
return <Cancelled />; return <Cancelled />;
} }
return <ReviewRequired environment={environment} />; return <ReviewRequired minApprovals={changeRequest.minApprovals} />;
}; };
const Approved = () => { const Approved = () => {
@ -151,15 +134,11 @@ const Approved = () => {
}; };
interface IReviewRequiredProps { interface IReviewRequiredProps {
environment: string; minApprovals: number;
} }
const ReviewRequired = ({ environment }: IReviewRequiredProps) => { const ReviewRequired = ({ minApprovals }: IReviewRequiredProps) => {
const theme = useTheme(); const theme = useTheme();
const projectId = useRequiredPathParam('projectId');
const { getChangeRequestRequiredApprovals } =
useChangeRequestRequiredApprovals(projectId);
const approvals = getChangeRequestRequiredApprovals(environment);
return ( return (
<> <>
@ -170,8 +149,8 @@ const ReviewRequired = ({ environment }: IReviewRequiredProps) => {
Review required Review required
</StyledReviewTitle> </StyledReviewTitle>
<Typography> <Typography>
At least {approvals} approvals must be submitted before At least {minApprovals} approval(s) must be submitted
changes can be applied before changes can be applied
</Typography> </Typography>
</Box> </Box>
</StyledFlexAlignCenterBox> </StyledFlexAlignCenterBox>

View File

@ -6,6 +6,7 @@ export interface IChangeRequest {
state: ChangeRequestState; state: ChangeRequestState;
project: string; project: string;
environment: string; environment: string;
minApprovals: number;
createdBy: Pick<IUser, 'id' | 'username' | 'imageUrl'>; createdBy: Pick<IUser, 'id' | 'username' | 'imageUrl'>;
createdAt: Date; createdAt: Date;
features: IChangeRequestFeature[]; features: IChangeRequestFeature[];