1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-10-04 11:17:02 +02:00
unleash.unleash/frontend/src/component/segments/RemoveSegmentButton/RemoveSegmentButton.tsx
Nuno Góis 2c2da4ad3f
Feat project segments permissions (#3346)
- Adds `UPDATE_PROJECT_SEGMENT` permission checks;
- Allows `PermissionIconButton` to evaluate multiple permissions, just
like `PermissionButton`;
- Also includes a possible fix for `hasAccess` in `AccessProvider`.
2023-03-17 17:43:48 +00:00

69 lines
2.5 KiB
TypeScript

import { ISegment } from 'interfaces/segment';
import PermissionIconButton from 'component/common/PermissionIconButton/PermissionIconButton';
import {
DELETE_SEGMENT,
UPDATE_PROJECT_SEGMENT,
} from 'component/providers/AccessProvider/permissions';
import { Delete } from '@mui/icons-material';
import { SEGMENT_DELETE_BTN_ID } from 'utils/testIds';
import { useSegments } from 'hooks/api/getters/useSegments/useSegments';
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
import useToast from 'hooks/useToast';
import { SegmentDelete } from 'component/segments/SegmentDelete/SegmentDelete';
import { useSegmentsApi } from 'hooks/api/actions/useSegmentsApi/useSegmentsApi';
import { formatUnknownError } from 'utils/formatUnknownError';
import { useState } from 'react';
import { useOptionalPathParam } from 'hooks/useOptionalPathParam';
interface IRemoveSegmentButtonProps {
segment: ISegment;
}
export const RemoveSegmentButton = ({ segment }: IRemoveSegmentButtonProps) => {
const projectId = useOptionalPathParam('projectId');
const { refetchSegments } = useSegments();
const { deleteSegment } = useSegmentsApi();
const { setToastData, setToastApiError } = useToast();
const [showModal, toggleModal] = useState(false);
const onRemove = async () => {
try {
await deleteSegment(segment.id);
await refetchSegments();
setToastData({
type: 'success',
title: 'Successfully deleted segment',
});
} catch (error: unknown) {
setToastApiError(formatUnknownError(error));
} finally {
toggleModal(false);
}
};
return (
<>
<PermissionIconButton
onClick={() => toggleModal(true)}
permission={[DELETE_SEGMENT, UPDATE_PROJECT_SEGMENT]}
projectId={projectId}
tooltipProps={{ title: 'Remove segment' }}
data-testid={`${SEGMENT_DELETE_BTN_ID}_${segment.name}`}
>
<Delete data-loading />
</PermissionIconButton>
<ConditionallyRender
condition={showModal}
show={() => (
<SegmentDelete
segment={segment}
open={showModal}
onClose={() => toggleModal(false)}
onRemove={onRemove}
/>
)}
/>
</>
);
};