import { useParams } from 'common' import { parseAsString, useQueryState } from 'nuqs' import { useEffect, useMemo, useState } from 'react' import { toast } from 'sonner' import { Card, cn, Sheet, SheetContent, Table, TableBody, TableCell, TableFooter, TableHead, TableHeader, TableRow, } from 'ui' import { INTEGRATIONS } from '../Landing/Integrations.constants' import { DeleteWrapperModal } from './DeleteWrapperModal' import { EditWrapperSheet } from './EditWrapperSheet' import { WrapperRow } from './WrapperRow' import { wrapperMetaComparator } from './Wrappers.utils' import { useFDWsQuery } from '@/data/fdw/fdws-query' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' interface WrapperTableProps { isLatest?: boolean } export const WrapperTable = ({ isLatest = false }: WrapperTableProps) => { const { id, ref } = useParams() const { data: project } = useSelectedProjectQuery() const integration = INTEGRATIONS.find((i) => i.id === id) const [isClosingEditWrapper, setIsClosingEditWrapper] = useState(false) const { data, isError } = useFDWsQuery({ projectRef: ref, connectionString: project?.connectionString, }) const wrappers = useMemo( () => integration && integration.type === 'wrapper' && data ? data.filter((wrapper) => wrapperMetaComparator(integration.meta, wrapper)) : [], [data, integration] ) const [selectedWrapperIdToEdit, setSelectedWrapperToEdit] = useQueryState('edit', parseAsString) const selectedWrapperToEdit = wrappers.find((w) => w.id.toString() === selectedWrapperIdToEdit) useEffect(() => { if (isError && !!selectedWrapperIdToEdit && !selectedWrapperToEdit) { toast('Wrapper not found') setSelectedWrapperToEdit(null) } }, [isError, selectedWrapperIdToEdit, selectedWrapperToEdit, setSelectedWrapperToEdit]) if (!integration || integration.type !== 'wrapper') { return (
The referenced ID doesn't correspond to a wrapper integration
) } return ( <>