import { FC, useState } from 'react' import { observer } from 'mobx-react-lite' import { Badge, Toggle } from '@supabase/ui' import { useStore } from 'hooks' import { confirmAlert } from 'components/to-be-cleaned/ModalsDeprecated/ConfirmModal' interface Props { extension: any } const ExtensionCard: FC = ({ extension }) => { const { ui, meta } = useStore() const isOn = extension.installed_version !== null const [loading, setLoading] = useState(false) async function enableExtension() { confirmAlert({ title: 'Confirm to turn on', message: `Are you sure you want to turn ON "${extension.name}" extension?`, onAsyncConfirm: async () => { try { setLoading(true) const response = await meta.extensions.create({ name: extension.name, schema: 'extensions', version: extension.default_version, cascade: true, }) if (response.error) { throw response.error } else { ui.setNotification({ category: 'success', message: `${extension.name.toUpperCase()} is on.`, }) } } catch (error: any) { ui.setNotification({ category: 'error', message: `Failed to toggle ${extension.name.toUpperCase()}: ${error.message}`, }) } finally { setLoading(false) } }, }) } async function disableExtension() { confirmAlert({ title: 'Confirm to turn off', 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}`}

)}
) } export default observer(ExtensionCard)