import { FC, useState } from 'react' import { observer } from 'mobx-react-lite' import { toast } from 'react-hot-toast' import { Badge, Typography, 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 { 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 { toast.success(`${extension.name.toUpperCase()} is on.`) } } catch (error: any) { toast.error(`Toggle ${extension.name.toUpperCase()} failed: ${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 { toast(`${extension.name.toUpperCase()} is off.`) } } catch (error: any) { toast.error(`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)