import { PermissionAction } from '@supabase/shared-types/out/constants' import { Book, Github, Loader2, Settings } from 'lucide-react' import { useState } from 'react' import toast from 'react-hot-toast' import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' import { useDatabaseExtensionDisableMutation } from 'data/database-extensions/database-extension-disable-mutation' import { DatabaseExtension } from 'data/database-extensions/database-extensions-query' import { useCheckPermissions } from 'hooks/misc/useCheckPermissions' import { extensions } from 'shared-data' import { Button, Switch } from 'ui' import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal' import EnableExtensionModal from './EnableExtensionModal' import Link from 'next/link' interface ExtensionCardProps { extension: DatabaseExtension } const ExtensionCard = ({ extension }: ExtensionCardProps) => { const { project } = useProjectContext() const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || '' const isOn = extension.installed_version !== null const [isDisableModalOpen, setIsDisableModalOpen] = useState(false) const [showConfirmEnableModal, setShowConfirmEnableModal] = useState(false) const canUpdateExtensions = useCheckPermissions( PermissionAction.TENANT_SQL_ADMIN_WRITE, 'extensions' ) const extensionMeta = extensions.find((item: any) => item.name === extension.name) const { mutate: disableExtension, isLoading: isDisabling } = useDatabaseExtensionDisableMutation({ onSuccess: () => { toast.success(`${extension.name} is off.`) setIsDisableModalOpen(false) }, }) 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}

{isDisabling ? ( ) : ( isOn ? setIsDisableModalOpen(true) : setShowConfirmEnableModal(true) } /> )}
{isOn && (

Installed in {extension.schema} schema

)}

{extension.comment}

{extensionMeta?.github_url && ( )}
{extensionMeta?.product && (

{extension.name} is used by{' '} {extensionMeta.product_url ? ( {extensionMeta.product} ) : ( extensionMeta.product )}

{!isOn && (

Install extension to use {extensionMeta.product}

)}
)}
setShowConfirmEnableModal(false)} /> setIsDisableModalOpen(false)} onConfirm={() => onConfirmDisable()} >

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

) } export default ExtensionCard