import React, { useState, useEffect } from "react"; import { IInventoryItem, IStakingSource, IStake, IOption } from "typings"; import { calculateRemainingTime, getObjectFromArray, } from "../../../utils/helpers"; import SelectDropdown from "../SelectDropdown"; import Image from "next/image"; const StakingSource = (props: { stakingSource: IStakingSource; inventoryItems: IInventoryItem[] | null | undefined; claimStake: (stakingEventId: number) => void; startStake: ( inventoryItemId: number, storeItemId: string, wellId: number ) => void; }) => { const [activeStakes, setActiveStakes] = useState([]); const [selectedItemId, setSelectedItemId] = useState(null); const [selectedStoreItemId, setSelectedStoreItemId] = useState( null ); const [selectedWellId, setSelectedWellId] = useState(null); const [showInfo, setShowInfo] = useState(false); // Check if claimable every second useEffect(() => { const updatedActiveStakes = props.stakingSource.activeStakes.map( (stake) => { const remainingTime = calculateRemainingTime( stake.startTime, stake.durationInMins ); const obj = { ...stake, remainingTime: remainingTime, }; return obj; } ); const intervalId = setInterval(() => { setActiveStakes(updatedActiveStakes); }, 1000); return () => { clearInterval(intervalId); }; }); const handleStartMining = () => { if (selectedItemId && selectedWellId && selectedStoreItemId) { props.startStake(selectedItemId, selectedStoreItemId, selectedWellId); } }; const handleClaim = (stakingEventId: number) => { props.claimStake(stakingEventId); }; const handleSelectChange = ( wellId: string, itemId: number, storeitemId: string ) => { setSelectedWellId(Number(wellId)); setSelectedStoreItemId(storeitemId); setSelectedItemId(itemId); }; const Countdown = (props: { remainingTime: number }) => { const hours = Math.floor((props.remainingTime / (1000 * 60 * 60)) % 24) .toString() .padStart(2, "0"); const minutes = Math.floor((props.remainingTime / (1000 * 60)) % 60) .toString() .padStart(2, "0"); const seconds = Math.floor((props.remainingTime / 1000) % 60) .toString() .padStart(2, "0"); return ( {hours} : {minutes} : {seconds} ); }; const RenderButtonOrCountdown = (props: { stake: IStake }) => { if (!props.stake.remainingTime) return

Error

; if (props.stake.remainingTime <= 0) { return ( ); } else { return ; } }; const isActive = (item: IInventoryItem): boolean => { return props.stakingSource.activeStakes.some( (obj) => obj.inventoryItemId === item.id ); }; return (
Moon setShowInfo(!showInfo)} className="hover:cursor-pointer" /> {showInfo && (

{props.stakingSource.name}

{props.stakingSource.description}

Active Drills

{activeStakes && activeStakes.map((stake, id) => (

Drill: {props.inventoryItems && getObjectFromArray( props.inventoryItems, "id", stake.inventoryItemId )?.storeItem.name}

Resource: {stake.resourceType}

Yield: {stake.stakeAmount}

))}

Inactive Drills

{props.inventoryItems && props.inventoryItems.map( (item, id) => !isActive(item) && (

{item.storeItem.name}

Select Resource

({ value: well.id, label: well.resourceType, }) )} onChange={(value) => handleSelectChange( value, item.id, item.storeItem.id ) } isActive={selectedItemId === item.id} /> {selectedItemId === item.id ? ( ) : ( <> )}
) )}
)}
); }; export default StakingSource;