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 ( <> Name Tables Encrypted key Actions {(isLatest ? wrappers.slice(0, 3) : wrappers).map((x) => { return })} tr>td]:hover:bg-inherit', // Conditionally remove the border-top if there are no wrappers wrappers.length === 0 ? 'border-t-0' : '' )} > {wrappers.length} {integration?.name} {wrappers.length === 0 || wrappers.length > 1 ? 's' : ''} created
{ if (!open) setIsClosingEditWrapper(true) }} > {selectedWrapperToEdit && ( { setSelectedWrapperToEdit(null) setIsClosingEditWrapper(false) }} isClosing={isClosingEditWrapper} setIsClosing={setIsClosingEditWrapper} /> )} ) }