1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-09-28 17:55:15 +02:00
unleash.unleash/frontend/src/component/archive/ArchiveTable/ArchiveBatchActions.tsx
2023-03-22 13:15:53 +01:00

98 lines
3.4 KiB
TypeScript

import { FC, useState } from 'react';
import { Button } from '@mui/material';
import { Delete, Undo } from '@mui/icons-material';
import {
DELETE_FEATURE,
UPDATE_FEATURE,
} from 'component/providers/AccessProvider/permissions';
import { PermissionHOC } from 'component/common/PermissionHOC/PermissionHOC';
import useProjectApi from 'hooks/api/actions/useProjectApi/useProjectApi';
import { formatUnknownError } from 'utils/formatUnknownError';
import { useFeaturesArchive } from 'hooks/api/getters/useFeaturesArchive/useFeaturesArchive';
import useToast from 'hooks/useToast';
import { ArchivedFeatureDeleteConfirm } from './ArchivedFeatureActionCell/ArchivedFeatureDeleteConfirm/ArchivedFeatureDeleteConfirm';
import { usePlausibleTracker } from 'hooks/usePlausibleTracker';
interface IArchiveBatchActionsProps {
selectedIds: string[];
projectId: string;
}
export const ArchiveBatchActions: FC<IArchiveBatchActionsProps> = ({
selectedIds,
projectId,
}) => {
const { reviveFeatures } = useProjectApi();
const { setToastData, setToastApiError } = useToast();
const { refetchArchived } = useFeaturesArchive(projectId);
const [deleteModalOpen, setDeleteModalOpen] = useState(false);
const { trackEvent } = usePlausibleTracker();
const onRevive = async () => {
try {
await reviveFeatures(projectId, selectedIds);
await refetchArchived();
setToastData({
type: 'success',
title: "And we're back!",
text: 'The feature toggles have been revived.',
});
trackEvent('batch_operations', {
props: {
eventType: 'features revived',
},
});
} catch (error: unknown) {
setToastApiError(formatUnknownError(error));
}
};
const onDelete = async () => {
setDeleteModalOpen(true);
};
return (
<>
<PermissionHOC projectId={projectId} permission={UPDATE_FEATURE}>
{({ hasAccess }) => (
<Button
disabled={!hasAccess}
startIcon={<Undo />}
variant="outlined"
size="small"
onClick={onRevive}
>
Revive
</Button>
)}
</PermissionHOC>
<PermissionHOC projectId={projectId} permission={DELETE_FEATURE}>
{({ hasAccess }) => (
<Button
disabled={!hasAccess}
startIcon={<Delete />}
variant="outlined"
size="small"
onClick={onDelete}
>
Delete
</Button>
)}
</PermissionHOC>
<ArchivedFeatureDeleteConfirm
deletedFeatures={selectedIds}
projectId={projectId}
open={deleteModalOpen}
setOpen={setDeleteModalOpen}
refetch={() => {
refetchArchived();
trackEvent('batch_operations', {
props: {
eventType: 'features deleted',
},
});
}}
/>
</>
);
};