import React, { useState, useEffect } from "react"; import { IInventoryItem, IStakingSource, IStake, IOption } from "typings"; import CardLayout from "../Layouts/CardLayout"; import { calculateRemainingTime, prettifyTime, getObjectFromArray, } from "../../utils/helpers"; import SelectDropdown from "./SelectDropdown"; const StakingSource = (props: { stakingSource: IStakingSource; inventoryItems: IInventoryItem[] | null | undefined; claimStake: (stakingEventId: number) => void; startStake: (inventoryItemId: number, wellId: number) => void; }) => { const [activeStakes, setActiveStakes] = useState([]); const [selectedItemId, setSelectedItemId] = useState(null); const [selectedWellId, setSelectedWellId] = useState(null); // 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) { props.startStake(selectedItemId, selectedWellId); } }; const handleClaim = (stakingEventId: number) => { props.claimStake(stakingEventId); }; const handleSelectChange = (wellId: string, itemId: number) => { setSelectedWellId(Number(wellId)); setSelectedItemId(itemId); }; const RenderButtonOrCountdown = (props: { stake: IStake }) => { if (!props.stake.remainingTime) return

Error

; if (props.stake.remainingTime <= 0) { return ( ); } else { return ( // I'll fix it
{prettifyTime(props.stake.remainingTime).hours == 0 ? "00" : prettifyTime(props.stake.remainingTime).hours} : {prettifyTime(props.stake.remainingTime).minutes.toString() .length > 0 ? prettifyTime(props.stake.remainingTime).minutes : "0" + prettifyTime(props.stake.remainingTime).minutes.toString()} : {prettifyTime(props.stake.remainingTime).minutes.toString() .length > 0 ? prettifyTime(props.stake.remainingTime).seconds : "0" + prettifyTime(props.stake.remainingTime).seconds.toString()}
); } }; const isActive = (item: IInventoryItem): boolean => { return props.stakingSource.activeStakes.some( (obj) => obj.inventoryItemId === item.id ); }; return (

{props.stakingSource.name}

{props.stakingSource.description}

Stakes

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

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

Resource: {stake.resourceType}

Stake amount: {stake.stakeAmount}

Start Time:{" "} {stake.startTime}

))}

Activate Drills

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

{item.storeItem.name} ID{item.storeItem.id}

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