diff --git a/solidity/dashboard/src/css/buttons.less b/solidity/dashboard/src/css/buttons.less index c6b73799df..079994c11b 100644 --- a/solidity/dashboard/src/css/buttons.less +++ b/solidity/dashboard/src/css/buttons.less @@ -24,6 +24,9 @@ button, .btn { &:hover:disabled, &hover[disabled] { cursor: not-allowed; + &::after { + opacity: 0 + } } } diff --git a/solidity/dashboard/src/pages/TokensPageContainer.jsx b/solidity/dashboard/src/pages/TokensPageContainer.jsx index bc50341d10..0ce1150a1d 100644 --- a/solidity/dashboard/src/pages/TokensPageContainer.jsx +++ b/solidity/dashboard/src/pages/TokensPageContainer.jsx @@ -381,7 +381,7 @@ const useSubscribeToTopUpsEvents = () => { if (delegation) { dispatch({ type: TOP_UP_INITIATED, payload: event.returnValues }) } - if (!delegation.isFromGrant) { + if (delegation && !delegation.isFromGrant) { refreshKeepTokenBalance() } } diff --git a/solidity/dashboard/src/reducers/tokens-page.reducer.js b/solidity/dashboard/src/reducers/tokens-page.reducer.js index becfcffe1f..3ad0711a4c 100644 --- a/solidity/dashboard/src/reducers/tokens-page.reducer.js +++ b/solidity/dashboard/src/reducers/tokens-page.reducer.js @@ -1,6 +1,7 @@ import { add, sub, gt } from "../utils/arithmetics.utils" import { findIndexAndObject, compareEthAddresses } from "../utils/array.utils" import { isSameEthAddress } from "../utils/general.utils" +import moment from "moment" export const REFRESH_KEEP_TOKEN_BALANCE = "REFRESH_KEEP_TOKEN_BALANCE" export const REFRESH_GRANT_TOKEN_BALANCE = "REFRESH_GRANT_TOKEN_BALANCE" @@ -123,10 +124,7 @@ const tokensPageReducer = (state, action) => { ({ operatorAddress }) => !isSameEthAddress(operatorAddress, action.payload.operator) ), - delegations: updateDelegationAmount( - [...state.delegations], - action.payload - ), + delegations: topUpCompleted([...state.delegations], action.payload), } case GRANT_DEPOSITED: return { @@ -231,7 +229,11 @@ const topUpInitiated = (topUps, { operator, topUp }) => { ) if (indexInArray === null) { return [ - { operatorAddress: operator, availableTopUpAmount: topUp }, + { + operatorAddress: operator, + availableTopUpAmount: topUp, + createdAt: moment.unix(), + }, ...topUps, ] } @@ -240,12 +242,13 @@ const topUpInitiated = (topUps, { operator, topUp }) => { topUpToUpdate.availableTopUpAmount, topUp ) + topUpToUpdate.createdAt = moment.unix() topUps[indexInArray] = topUpToUpdate return topUps } -const updateDelegationAmount = (delegations, { operator, newAmount }) => { +const topUpCompleted = (delegations, { operator, newAmount }) => { const { indexInArray, obj: delegationsToUpdate } = findIndexAndObject( "operatorAddress", operator, diff --git a/solidity/dashboard/src/services/top-ups.service.js b/solidity/dashboard/src/services/top-ups.service.js index 9bf5f6fce7..7fd4f1ffdb 100644 --- a/solidity/dashboard/src/services/top-ups.service.js +++ b/solidity/dashboard/src/services/top-ups.service.js @@ -9,7 +9,7 @@ export const commitTopUp = async (operator, onTransactionHashCallback) => { .on("transactionHash", onTransactionHashCallback) } -export const fetchAvailableTopUps = async (_, operators) => { +export const fetchAvailableTopUps = async (web3Context, operators) => { const availableTopUps = [] if (isEmptyArray(operators)) { @@ -31,27 +31,33 @@ export const fetchAvailableTopUps = async (_, operators) => { ).reduce(reduceByOperator, {}) for (const operator of operators) { - const topUpInitiated = toupUpsInitiatedByOperator[operator] - const topUpCompleted = topUpsCompletedByOperator[operator] + const topUpsInitiated = toupUpsInitiatedByOperator[operator] + const topUpsCompleted = topUpsCompletedByOperator[operator] - const latestTopUpCompletedEvent = !isEmptyArray(topUpCompleted) - ? [...topUpCompleted].pop() + const latestTopUpCompletedEvent = !isEmptyArray(topUpsCompleted) + ? [...topUpsCompleted].pop() : undefined - if (!isEmptyArray(topUpInitiated)) { + if (!isEmptyArray(topUpsInitiated)) { const availableOperatorTopUps = latestTopUpCompletedEvent - ? topUpInitiated.filter( + ? topUpsInitiated.filter( filterByAfterLatestCompletedTopUp(latestTopUpCompletedEvent) ) - : topUpInitiated + : topUpsInitiated const availableTopUpAmount = availableOperatorTopUps.reduce( reduceAmount, 0 ) + const createdAt = ( + await web3Context.eth.getBlock( + topUpsInitiated[topUpsInitiated.length - 1].blockNumber + ) + ).timestamp if (availableTopUpAmount > 0) availableTopUps.push({ operatorAddress: operator, availableTopUpAmount, + createdAt, }) } }