import { FC, useState } from 'react' import { observer } from 'mobx-react-lite' import { Badge, IconLoader, Toggle } from '@supabase/ui' import { useStore } from 'hooks' import { confirmAlert } from 'components/to-be-cleaned/ModalsDeprecated/ConfirmModal' import EnableExtensionModal from './EnableExtensionModal' interface Props { extension: any } const ExtensionCard: FC = ({ extension }) => { const { ui, meta } = useStore() const isOn = extension.installed_version !== null const [loading, setLoading] = useState(false) const [showConfirmEnableModal, setShowConfirmEnableModal] = useState(false) async function enableExtension() { return setShowConfirmEnableModal(true) } async function disableExtension() { confirmAlert({ title: 'Confirm to disable extension', message: `Are you sure you want to turn OFF "${extension.name}" extension?`, onAsyncConfirm: async () => { try { setLoading(true) const response: any = await meta.extensions.del(extension.name) if (response.error) { throw response.error } else { ui.setNotification({ category: 'success', message: `${extension.name.toUpperCase()} is off.`, }) } } catch (error: any) { ui.setNotification({ category: 'error', message: `Toggle ${extension.name.toUpperCase()} failed: ${error.message}`, }) } finally { // Need to reload them because the delete function // removes the extension from the store meta.extensions.load() setLoading(false) } }, }) } return ( <>

{extension.name}

{loading ? ( ) : ( (isOn ? disableExtension() : enableExtension())} /> )}

{extension.comment}

{isOn && extension.schema && (
Schema: {`${extension.schema}`}
)}
setShowConfirmEnableModal(false)} /> ) } export default observer(ExtensionCard)