mirror of https://github.com/portainer/portainer
61 lines
1.4 KiB
TypeScript
61 lines
1.4 KiB
TypeScript
import { CellContext } from '@tanstack/react-table';
|
|
import { useRouter } from '@uirouter/react';
|
|
|
|
import { Authorized } from '@/react/hooks/useUser';
|
|
import { useDisconnectContainer } from '@/react/docker/networks/queries';
|
|
import { useEnvironmentId } from '@/react/hooks/useEnvironmentId';
|
|
|
|
import { LoadingButton } from '@@/buttons';
|
|
|
|
import { TableNetwork, isContainerNetworkTableMeta } from './types';
|
|
import { columnHelper } from './helper';
|
|
|
|
export const actions = columnHelper.display({
|
|
header: 'Actions',
|
|
cell: Cell,
|
|
});
|
|
|
|
function Cell({
|
|
row,
|
|
table: {
|
|
options: { meta },
|
|
},
|
|
}: CellContext<TableNetwork, unknown>) {
|
|
const router = useRouter();
|
|
const environmentId = useEnvironmentId();
|
|
const disconnectMutation = useDisconnectContainer();
|
|
|
|
return (
|
|
<Authorized authorizations="DockerNetworkDisconnect">
|
|
<LoadingButton
|
|
color="dangerlight"
|
|
isLoading={disconnectMutation.isLoading}
|
|
loadingText="Leaving network..."
|
|
type="button"
|
|
onClick={handleSubmit}
|
|
>
|
|
Leave network
|
|
</LoadingButton>
|
|
</Authorized>
|
|
);
|
|
|
|
function handleSubmit() {
|
|
if (!isContainerNetworkTableMeta(meta)) {
|
|
throw new Error('Invalid row meta');
|
|
}
|
|
|
|
disconnectMutation.mutate(
|
|
{
|
|
environmentId,
|
|
networkId: row.original.id,
|
|
containerId: meta.containerId,
|
|
},
|
|
{
|
|
onSuccess() {
|
|
router.stateService.reload();
|
|
},
|
|
}
|
|
);
|
|
}
|
|
}
|