import { useParams } from 'common' import { toast } from 'sonner' import { Button, Modal } from 'ui' import { Admonition } from 'ui-patterns' import { useNetworkRestrictionsQuery } from '@/data/network-restrictions/network-restrictions-query' import { useNetworkRestrictionsApplyMutation } from '@/data/network-restrictions/network-retrictions-apply-mutation' interface RemoveRestrictionModalProps { visible: boolean selectedRestriction?: string onClose: () => void } const RemoveRestrictionModal = ({ visible, selectedRestriction, onClose, }: RemoveRestrictionModalProps) => { const { ref } = useParams() const { data } = useNetworkRestrictionsQuery({ projectRef: ref }, { enabled: visible }) const ipv4Restrictions = data?.config?.dbAllowedCidrs ?? [] // @ts-ignore [Joshen] API typing issue const ipv6Restrictions: string[] = data?.config?.dbAllowedCidrsV6 ?? [] const restrictedIps = ipv4Restrictions.concat(ipv6Restrictions) const { mutate: applyNetworkRestrictions, isPending: isApplying } = useNetworkRestrictionsApplyMutation({ onSuccess: () => onClose(), onError: (error) => { toast.error(`Failed to remove restriction: ${error.message}`) }, }) const isRemovingOnlyRestriction = restrictedIps.length === 1 && restrictedIps[0] === selectedRestriction const onSubmit = async () => { if (!ref) return console.error('Project ref is required') if (!selectedRestriction) return console.error('Missing selected restriction') const dbAllowedCidrs = ipv4Restrictions.includes(selectedRestriction) ? ipv4Restrictions.filter((ip) => ip !== selectedRestriction) : ipv4Restrictions const dbAllowedCidrsV6 = ipv6Restrictions.includes(selectedRestriction) ? ipv6Restrictions.filter((ip) => ip !== selectedRestriction) : ipv6Restrictions if (dbAllowedCidrs.length === 0 && dbAllowedCidrsV6.length === 0) { applyNetworkRestrictions({ projectRef: ref, dbAllowedCidrs: ['0.0.0.0/0'], dbAllowedCidrsV6: ['::/0'], }) } else { applyNetworkRestrictions({ projectRef: ref, dbAllowedCidrs, dbAllowedCidrsV6 }) } } return (

The IPv4 address {selectedRestriction} will be removed from your list of network restrictions {isRemovingOnlyRestriction ? '.' : ", and no longer have access to your project's database."}

{isRemovingOnlyRestriction && ( )}
) } export default RemoveRestrictionModal