diff --git a/src/utils/calls/boards.ts b/src/utils/calls/boards.ts index f4b1e39..eeeda45 100644 --- a/src/utils/calls/boards.ts +++ b/src/utils/calls/boards.ts @@ -18,6 +18,12 @@ export const unstakeBoard = async (masterChefContract) => { return receipt.status } +export const unstakeForceBoard = async (masterChefContract) => { + const tx = await masterChefContract.emergencyWithdrawHCC(options) + const receipt = await tx.wait() + return receipt.status +} + export const harvestBoard = async (masterChefContract) => { const tx = await masterChefContract.harvest(options) const receipt = await tx.wait() diff --git a/src/views/Board/components/BoardCard/BoardCard.tsx b/src/views/Board/components/BoardCard/BoardCard.tsx index 4dc8657..62445c2 100644 --- a/src/views/Board/components/BoardCard/BoardCard.tsx +++ b/src/views/Board/components/BoardCard/BoardCard.tsx @@ -84,7 +84,7 @@ interface NodeCardProps { account?: string } -const NodeCard: React.FC = ({ board, account }) => { +const BoardCard: React.FC = ({ board, account }) => { const { t } = useTranslation() const [showExpandableSection, setShowExpandableSection] = useState(false) @@ -116,4 +116,4 @@ const NodeCard: React.FC = ({ board, account }) => { ) } -export default NodeCard +export default BoardCard diff --git a/src/views/Board/components/BoardCard/StakeAction.tsx b/src/views/Board/components/BoardCard/StakeAction.tsx index cf704b4..b10afa0 100644 --- a/src/views/Board/components/BoardCard/StakeAction.tsx +++ b/src/views/Board/components/BoardCard/StakeAction.tsx @@ -9,7 +9,7 @@ import { useTranslation } from 'contexts/Localization' import useToast from 'hooks/useToast' import DepositModal from '../DepositModal' import useStakeBoard from '../../hooks/useStakeBoard' -import useUnstakeBoard from '../../hooks/useUnstakeBoard' +import useUnstakeBoard, { useUnstakeForceBoard } from '../../hooks/useUnstakeBoard' import WithdrawModal from '../WithdrawModal' interface NodeCardActionsProps { @@ -31,6 +31,7 @@ const StakeAction: React.FC = ({ stakedBalance, tokenBalan const { toastWarning } = useToast() const { onStake } = useStakeBoard(pid) const { onUnstake } = useUnstakeBoard(pid) + const { onUnstake: onUnstakeForce } = useUnstakeForceBoard(pid) const { tokenDecimals = 18, minStakeAmount, userData } = useBoardsFromPid(pid) const rawStakedBalance = getBalanceNumber(stakedBalance, tokenDecimals, 8) const minStakedAmount = useMemo(() => { @@ -52,10 +53,10 @@ const StakeAction: React.FC = ({ stakedBalance, tokenBalan const handleUnstake = () => { const unlockTime = userData.unlockTime * 1000 if (unlockTime > new Date().getTime()) { - toastWarning(t('Unlock time %unlockTime%', { unlockTime: dayjs(unlockTime).format('YYYY-MM-DD HH:mm') })) - return + onUnstakeForce() + } else { + onUnstake() } - onUnstake() } const renderStakingButtons = () => { return rawStakedBalance === 0 ? ( diff --git a/src/views/Board/hooks/useUnstakeBoard.ts b/src/views/Board/hooks/useUnstakeBoard.ts index dcb211a..80a62cc 100644 --- a/src/views/Board/hooks/useUnstakeBoard.ts +++ b/src/views/Board/hooks/useUnstakeBoard.ts @@ -1,5 +1,5 @@ import { useCallback } from 'react' -import { unstakeBoard } from 'utils/calls' +import { unstakeBoard, unstakeForceBoard } from 'utils/calls' import { useBoardchef } from 'hooks/useContract' const useUnstakeBoard = (pid: number) => { @@ -12,4 +12,14 @@ const useUnstakeBoard = (pid: number) => { return { onUnstake: handleUnstake } } +export const useUnstakeForceBoard = (pid: number) => { + const boardChefContract = useBoardchef(pid) + + const handleUnstake = useCallback(async () => { + await unstakeForceBoard(boardChefContract) + }, [boardChefContract, pid]) + + return { onUnstake: handleUnstake } +} + export default useUnstakeBoard diff --git a/src/views/Board/index.tsx b/src/views/Board/index.tsx index 51ac545..559e604 100644 --- a/src/views/Board/index.tsx +++ b/src/views/Board/index.tsx @@ -18,7 +18,7 @@ import Page from 'components/Layout/Page' import { useBoards } from 'state/hooks' import useRefresh from 'hooks/useRefresh' import { fetchBoardUserDataAsync, fetchBoardsPublicDataAsync } from 'state/actions' -import { fetchBoardUserInfo } from 'state/boards/fetchBoardsUser' +import { useAccount } from 'state/userInfo/hooks' import { useTranslation } from 'contexts/Localization' import BoardCard from './components/BoardCard/BoardCard' import HeaderItem from './components/HeaderItem' @@ -43,8 +43,7 @@ const FlexLayoutMain = styled(FlexLayout)` const Boards: React.FC = () => { const { t } = useTranslation() const boardsList = useBoards() - const [query, setQuery] = useState('') - const { account } = useWeb3React() + const account = useAccount() const dispatch = useDispatch() const { fastRefresh } = useRefresh()