mango-v4-ui/components/modals/CloseAccountModal.tsx

69 lines
2.0 KiB
TypeScript
Raw Normal View History

2022-07-28 03:51:36 -07:00
import { ModalProps } from '../../types/modal'
import Modal from '../shared/Modal'
import mangoStore from '../../store/state'
import { notify } from '../../utils/notifications'
import { useWallet } from '@solana/wallet-adapter-react'
import Button from '../shared/Button'
import { useTranslation } from 'next-i18next'
import { useState } from 'react'
import BounceLoader from '../shared/BounceLoader'
const CloseAccountModal = ({ isOpen, onClose }: ModalProps) => {
const { t } = useTranslation('common')
2022-08-11 21:20:17 -07:00
const { wallet } = useWallet()
2022-07-28 03:51:36 -07:00
const [loading, setLoading] = useState(false)
2022-08-11 21:20:17 -07:00
const set = mangoStore((s) => s.set)
2022-07-28 03:51:36 -07:00
const handleCloseMangoAccount = async () => {
const client = mangoStore.getState().client
const mangoAccount = mangoStore.getState().mangoAccount.current
const group = mangoStore.getState().group
if (!mangoAccount || !group) return
setLoading(true)
try {
const tx = await client.closeMangoAccount(group, mangoAccount)
if (tx) {
setLoading(false)
onClose()
notify({
title: t('account-closed'),
type: 'success',
txid: tx,
})
2022-08-11 21:20:17 -07:00
set((state) => {
state.mangoAccount.current = undefined
})
2022-07-28 03:51:36 -07:00
}
} catch (e) {
setLoading(false)
2022-08-02 11:04:00 -07:00
console.error(e)
2022-07-28 03:51:36 -07:00
}
}
return (
<Modal isOpen={isOpen} onClose={onClose}>
<div className="h-56">
{loading ? (
<BounceLoader loadingMessage={t('closing-account')} />
) : (
<div className="flex h-full flex-col justify-between">
<div className="pb-6">
<h2 className="mb-1">{t('close-account')}</h2>
2022-07-28 05:13:42 -07:00
<p>{t('close-account-desc')}</p>
2022-07-28 03:51:36 -07:00
</div>
<Button
className="w-full"
onClick={handleCloseMangoAccount}
size="large"
>
{t('close-account')}
</Button>
</div>
)}
</div>
</Modal>
)
}
export default CloseAccountModal