diff --git a/packages/page-parachains/src/Crowdloan/Fund.tsx b/packages/page-parachains/src/Crowdloan/Fund.tsx index 2b8048d7ee..f45cf70c6e 100644 --- a/packages/page-parachains/src/Crowdloan/Fund.tsx +++ b/packages/page-parachains/src/Crowdloan/Fund.tsx @@ -1,14 +1,16 @@ // Copyright 2017-2025 @polkadot/app-parachains authors & contributors // SPDX-License-Identifier: Apache-2.0 +import type { ParaId } from '@polkadot/types/interfaces'; import type { BN } from '@polkadot/util'; import type { Campaign, LeasePeriod } from '../types.js'; import React, { useEffect, useMemo, useState } from 'react'; -import { AddressMini, Expander, Icon, ParaLink, Table, TxButton } from '@polkadot/react-components'; -import { useAccounts, useApi, useParaEndpoints } from '@polkadot/react-hooks'; -import { BlockToTime, FormatBalance } from '@polkadot/react-query'; +import { AddressMini, Button, Expander, Icon, InputAddress, Modal, ParaLink, Table, TxButton } from '@polkadot/react-components'; +import { useAccounts, useApi, useParaEndpoints, useToggle } from '@polkadot/react-hooks'; +import { CallExpander } from '@polkadot/react-params'; +import { Available, BlockToTime, FormatBalance } from '@polkadot/react-query'; import { formatNumber } from '@polkadot/util'; import { useTranslation } from '../translate.js'; @@ -32,7 +34,6 @@ interface LastChange { function Fund ({ bestHash, bestNumber, className = '', isOngoing, leasePeriod, value: { info: { cap, depositor, end, firstPeriod, lastPeriod, raised, verifier }, isCapped, isEnded, isWinner, paraId } }: Props): React.ReactElement { const { t } = useTranslation(); - const { api } = useApi(); const { isAccount } = useAccounts(); const endpoints = useParaEndpoints(paraId); const { blockHash, contributorsHex, hasLoaded, myAccounts, myAccountsHex, myContributions } = useContributions(paraId); @@ -156,18 +157,11 @@ function Fund ({ bestHash, bestNumber, className = '', isOngoing, leasePeriod, v )} {canDissolve && ( - )} {isOngoing && canContribute && ( @@ -192,4 +186,74 @@ function Fund ({ bestHash, bestNumber, className = '', isOngoing, leasePeriod, v ); } +interface IDissolveCrowdloan{ + isEnded?: boolean; + paraId: ParaId; + isDepositor: boolean; + hasEnded: boolean; +} + +function DissolveCrowdloan ({ hasEnded, isDepositor, isEnded, paraId }: IDissolveCrowdloan) { + const { t } = useTranslation(); + const { api } = useApi(); + const [isDissolveOpen, toggleDissolveOpen] = useToggle(); + const [accountId, setAccountId] = useState(null); + + const extrinsic = useMemo(() => api.tx.crowdloan.dissolve(paraId), [api.tx.crowdloan, paraId]); + + return <> + {isDissolveOpen && ( + + + + {t('transferable')}} + params={accountId} + /> + } + onChange={setAccountId} + type='account' + /> + + + + + + + + + + )} +