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?.installed_version ?? extension.default_version}
Installed in {extension.schema} schema
{extension.comment}
{extension.name} is used by{' '} {extensionMeta.product_url ? ( {extensionMeta.product} ) : ( extensionMeta.product )}
{!isOn && (Install extension to use {extensionMeta.product}
)}Are you sure you want to turn OFF the "{extension.name}" extension?