1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-05-26 01:17:00 +02:00
unleash.unleash/frontend/src/component/common/ApiTokenTable/RemoveApiTokenButton/RemoveApiTokenButton.tsx
Fredrik Strand Oseberg f8c826450e
Fix/decouple api token list (#3171)
Decouples the API token list and adds tracking.
2023-02-21 14:27:46 +01:00

78 lines
2.3 KiB
TypeScript

import { Delete } from '@mui/icons-material';
import { styled } from '@mui/material';
import { IApiToken } from 'hooks/api/getters/useApiTokens/useApiTokens';
import { useState } from 'react';
import { Dialogue } from 'component/common/Dialogue/Dialogue';
import useToast from 'hooks/useToast';
import PermissionIconButton from 'component/common/PermissionIconButton/PermissionIconButton';
import { formatUnknownError } from 'utils/formatUnknownError';
const StyledUl = styled('ul')({
marginBottom: 0,
});
interface IRemoveApiTokenButtonProps {
token: IApiToken;
permission: string;
onRemove: () => void;
project?: string;
}
export const RemoveApiTokenButton = ({
token,
permission,
onRemove,
project,
}: IRemoveApiTokenButtonProps) => {
const [open, setOpen] = useState(false);
const { setToastData, setToastApiError } = useToast();
const onRemoveToken = async () => {
try {
await onRemove();
setOpen(false);
setToastData({
type: 'success',
title: 'API token removed',
});
} catch (error: unknown) {
setToastApiError(formatUnknownError(error));
}
};
return (
<>
<PermissionIconButton
permission={permission}
projectId={project}
tooltipProps={{ title: 'Delete token', arrow: true }}
onClick={() => setOpen(true)}
size="large"
>
<Delete />
</PermissionIconButton>
<Dialogue
open={open}
onClick={onRemoveToken}
onClose={() => setOpen(false)}
title="Confirm deletion"
>
<div>
Are you sure you want to delete the following API token?
<br />
<StyledUl>
<li>
<strong>username</strong>:{' '}
<code>{token.username}</code>
</li>
<li>
<strong>type</strong>: <code>{token.type}</code>
</li>
</StyledUl>
</div>
</Dialogue>
</>
);
};