import { useContracts } from "../../useContracts/useContracts"; import { useState } from "react"; import { doTransaction } from "../../../utils/transactions/transactions"; import { useUserPositions } from "../useUserPositions/useUserPositions"; import { usePollForPositionChange } from "../usePollForPositionChange/usePollForPositionChange"; import { UserPosition } from "../../../state"; /** * A hook to deposit to an existing position (deposit), with approval if required */ export const useUpdatePosition = (positionId: number) => { const [loading, setLoading] = useState(false); const { reliquary } = useContracts(); const { userPositions } = useUserPositions(); const poll = usePollForPositionChange(positionId); const position = userPositions[positionId]; const update = async () => { try { setLoading(true); await doTransaction(() => reliquary.updatePosition(positionId)); const positionDidChangeFromUpgrade = (pos: UserPosition) => pos.level > position.level; const updatedPosition = await poll(positionDidChangeFromUpgrade); setLoading(false); return updatedPosition; } catch (e: any) { setLoading(false); throw e; } }; return { loading, update, }; };