mirror of
https://github.com/Unleash/unleash.git
synced 2025-06-27 01:19:00 +02:00
This PR updates the diff calculation to work with both strategy changes and segment changes. It also adds the corresponding segment change conflict overview to segment updates. <img width="1225" alt="image" src="https://github.com/Unleash/unleash/assets/17786332/688a57a5-5cd7-4b0a-bd1e-df63189594d8">
106 lines
3.9 KiB
TypeScript
106 lines
3.9 KiB
TypeScript
import { VFC, FC, ReactNode } from 'react';
|
|
import { Box, styled, Typography } from '@mui/material';
|
|
import {
|
|
IChangeRequestDeleteSegment,
|
|
IChangeRequestUpdateSegment,
|
|
} from 'component/changeRequest/changeRequest.types';
|
|
import { useSegment } from 'hooks/api/getters/useSegment/useSegment';
|
|
import { SegmentDiff, SegmentTooltipLink } from '../../SegmentTooltipLink';
|
|
import { ConstraintAccordionList } from 'component/common/ConstraintAccordion/ConstraintAccordionList/ConstraintAccordionList';
|
|
import { SegmentChangesToOverwrite } from './StrategyChangeOverwriteWarning';
|
|
|
|
const ChangeItemCreateEditWrapper = styled(Box)(({ theme }) => ({
|
|
display: 'grid',
|
|
gridTemplateColumns: 'auto 40px',
|
|
gap: theme.spacing(1),
|
|
alignItems: 'center',
|
|
width: '100%',
|
|
margin: theme.spacing(0, 0, 1, 0),
|
|
}));
|
|
|
|
export const ChangeItemWrapper = styled(Box)({
|
|
display: 'flex',
|
|
justifyContent: 'space-between',
|
|
alignItems: 'center',
|
|
});
|
|
|
|
const ChangeItemInfo: FC = styled(Box)(({ theme }) => ({
|
|
display: 'grid',
|
|
gridTemplateColumns: '150px auto',
|
|
gridAutoFlow: 'column',
|
|
alignItems: 'center',
|
|
flexGrow: 1,
|
|
gap: theme.spacing(1),
|
|
}));
|
|
|
|
const SegmentContainer = styled(Box, {
|
|
shouldForwardProp: (prop) => prop !== 'conflict',
|
|
})<{ conflict: string | undefined }>(({ theme, conflict }) => ({
|
|
borderLeft: '1px solid',
|
|
borderRight: '1px solid',
|
|
borderTop: '1px solid',
|
|
borderBottom: '1px solid',
|
|
borderColor: conflict
|
|
? theme.palette.warning.border
|
|
: theme.palette.divider,
|
|
borderTopColor: theme.palette.divider,
|
|
padding: theme.spacing(3),
|
|
borderRadius: `0 0 ${theme.shape.borderRadiusLarge}px ${theme.shape.borderRadiusLarge}px`,
|
|
}));
|
|
|
|
export const SegmentChangeDetails: VFC<{
|
|
actions?: ReactNode;
|
|
change: IChangeRequestUpdateSegment | IChangeRequestDeleteSegment;
|
|
}> = ({ actions, change }) => {
|
|
const { segment: currentSegment } = useSegment(change.payload.id);
|
|
|
|
return (
|
|
<SegmentContainer conflict={change.conflict}>
|
|
{change.action === 'deleteSegment' && (
|
|
<ChangeItemWrapper>
|
|
<ChangeItemInfo>
|
|
<Typography
|
|
sx={(theme) => ({
|
|
color: theme.palette.error.main,
|
|
})}
|
|
>
|
|
- Deleting segment:
|
|
</Typography>
|
|
<SegmentTooltipLink change={change}>
|
|
<SegmentDiff
|
|
change={change}
|
|
currentSegment={currentSegment}
|
|
/>
|
|
</SegmentTooltipLink>
|
|
</ChangeItemInfo>
|
|
<div>{actions}</div>
|
|
</ChangeItemWrapper>
|
|
)}
|
|
{change.action === 'updateSegment' && (
|
|
<>
|
|
<SegmentChangesToOverwrite
|
|
currentSegment={currentSegment}
|
|
change={change}
|
|
/>
|
|
<ChangeItemCreateEditWrapper>
|
|
<ChangeItemInfo>
|
|
<Typography>Editing segment:</Typography>
|
|
<SegmentTooltipLink change={change}>
|
|
<SegmentDiff
|
|
change={change}
|
|
currentSegment={currentSegment}
|
|
/>
|
|
</SegmentTooltipLink>
|
|
</ChangeItemInfo>
|
|
<div>{actions}</div>
|
|
</ChangeItemCreateEditWrapper>
|
|
<ConstraintAccordionList
|
|
constraints={change.payload.constraints}
|
|
showLabel={false}
|
|
/>
|
|
</>
|
|
)}
|
|
</SegmentContainer>
|
|
);
|
|
};
|