import { PermissionAction } from '@supabase/shared-types/out/constants' import { HTMLProps, ReactNode, useCallback, useState } from 'react' import { useParams } from 'common' import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' import { ButtonTooltip } from 'components/ui/ButtonTooltip' import { FDW, useFDWsQuery } from 'data/fdw/fdws-query' import { useCheckPermissions } from 'hooks/misc/useCheckPermissions' import { Sheet, SheetContent } from 'ui' import { INTEGRATIONS } from '../Landing/Integrations.constants' import { CreateWrapperSheet } from './CreateWrapperSheet' import { WrapperTable } from './WrapperTable' import DeleteWrapperModal from './DeleteWrapperModal' import { wrapperMetaComparator } from './Wrappers.utils' export const WrappersTab = () => { const { id } = useParams() const { project } = useProjectContext() const [selectedWrapperForDelete, setSelectedWrapperForDelete] = useState(null) const [createWrapperShown, setCreateWrapperShown] = useState(false) const [isClosingCreateWrapper, setisClosingCreateWrapper] = useState(false) const canCreateWrapper = useCheckPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'wrappers') const { data } = useFDWsQuery({ projectRef: project?.ref, connectionString: project?.connectionString, }) const wrappers = data ?? [] const integration = INTEGRATIONS.find((i) => i.id === id) // this contains a collection of all wrapper instances for the wrapper type const createdWrappers = integration?.type === 'wrapper' ? wrappers.filter((w) => wrapperMetaComparator(integration.meta, w)) : [] const Container = useCallback( ({ ...props }: { children: ReactNode } & HTMLProps) => (
{props.children} setisClosingCreateWrapper(true)}> {integration?.type === 'wrapper' && ( { setCreateWrapperShown(false) setisClosingCreateWrapper(false) }} isClosing={isClosingCreateWrapper} setIsClosing={setisClosingCreateWrapper} /> )}
), [createWrapperShown, integration, isClosingCreateWrapper] ) if (!integration || integration.type !== 'wrapper') { return
Missing integration.
} if (createdWrappers.length === 0) { return (

No {integration.meta.label} wrappers have been installed

setCreateWrapperShown(true)} disabled={!canCreateWrapper} tooltip={{ content: { text: !canCreateWrapper ? 'You need additional permissions to create a foreign data wrapper' : undefined, }, }} > Add new wrapper
) } return ( {selectedWrapperForDelete && ( setSelectedWrapperForDelete(null)} /> )} ) }