import React, { useState } from 'react'; import { faTrashAlt } from '@fortawesome/free-solid-svg-icons'; import tw from 'twin.macro'; import Icon from '@/components/elements/Icon'; import { ServerContext } from '@/state/server'; import deleteServerAllocation from '@/api/server/network/deleteServerAllocation'; import getServerAllocations from '@/api/swr/getServerAllocations'; import { useFlashKey } from '@/plugins/useFlash'; import { Dialog } from '@/components/elements/dialog'; import { Button } from '@/components/elements/button/index'; interface Props { allocation: number; } const DeleteAllocationButton = ({ allocation }: Props) => { const [confirm, setConfirm] = useState(false); const uuid = ServerContext.useStoreState((state) => state.server.data!.uuid); const setServerFromState = ServerContext.useStoreActions((actions) => actions.server.setServerFromState); const { mutate } = getServerAllocations(); const { clearFlashes, clearAndAddHttpError } = useFlashKey('server:network'); const deleteAllocation = () => { clearFlashes(); mutate((data) => data?.filter((a) => a.id !== allocation), false); setServerFromState((s) => ({ ...s, allocations: s.allocations.filter((a) => a.id !== allocation) })); deleteServerAllocation(uuid, allocation).catch((error) => { clearAndAddHttpError(error); mutate(); }); }; return ( <> setConfirm(false)} title={'Remove Allocation'} confirm={'Delete'} onConfirmed={deleteAllocation} > This allocation will be immediately removed from your server. setConfirm(true)} > ); }; export default DeleteAllocationButton;