import { PermissionAction } from '@supabase/shared-types/out/constants' import Link from 'next/link' import { useState } from 'react' import toast from 'react-hot-toast' import { extensions } from 'shared-data' import { Badge, IconExternalLink, IconLoader, Modal, Toggle } from 'ui' import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal' import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' import { useDatabaseExtensionDisableMutation } from 'data/database-extensions/database-extension-disable-mutation' import { useCheckPermissions } from 'hooks' import EnableExtensionModal from './EnableExtensionModal' interface ExtensionCardProps { extension: any } const ExtensionCard = ({ extension }: ExtensionCardProps) => { const { project } = useProjectContext() const isOn = extension.installed_version !== null const [showConfirmEnableModal, setShowConfirmEnableModal] = useState(false) const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || '' const { mutate: disableExtension, isLoading: isDisabling } = useDatabaseExtensionDisableMutation({ onSuccess: () => { toast.success(`${extension.name} is off.`) setIsDisableModalOpen(false) }, }) const canUpdateExtensions = useCheckPermissions( PermissionAction.TENANT_SQL_ADMIN_WRITE, 'extensions' ) async function enableExtension() { return setShowConfirmEnableModal(true) } const [isDisableModalOpen, setIsDisableModalOpen] = useState(false) function openDisableModal() { setIsDisableModalOpen(true) } const onConfirmDisable = () => { if (project === undefined) return console.error('Project is required') disableExtension({ projectRef: project.ref, connectionString: project.connectionString, id: extension.name, }) } return ( <>

{extension.name}

{extension?.installed_version ?? extension.default_version}

{extensions.find((item: any) => item.name === extension.name) ? ( item.name === extension.name) ?.link.startsWith('/guides') ? siteUrl === 'http://localhost:8082' ? `http://localhost:3001/docs${ extensions.find((item: any) => item.name === extension.name)?.link }` : `https://supabase.com/docs${ extensions.find((item: any) => item.name === extension.name)?.link }` : extensions.find((item: any) => item.name === extension.name)?.link ?? '' } className="max-w-[85%] cursor-default zans" target="_blank" rel="noreferrer" > ) : null}
{isDisabling ? ( ) : ( (isOn ? openDisableModal() : enableExtension())} /> )}

{extension.comment}

{isOn && extension.schema && (
Schema: {`${extension.schema}`}
)}
setShowConfirmEnableModal(false)} /> setIsDisableModalOpen(false)} onSelectConfirm={() => onConfirmDisable()} >

Are you sure you want to turn OFF the "{extension.name}" extension?

) } export default ExtensionCard