import React, { useState, useRef } from "react"; import EventButton from "./eventButton"; import ScrollContainer from 'react-indiana-drag-scroll'; import Filter from './filterComponent'; import ReactPaginate from 'react-paginate'; /// A scrollable and filterable list of EventButtons const activationColour = "rgba(23, 60, 122, 0.3)"; const rewardColour = "rgba(20, 99, 29, 0.3)"; const updateColour = "rgba(122, 63, 23, 0.3)"; const withdrawStakeColour = "rgba(115, 110, 22, 0.3)"; const stakeColour = "rgba(71, 23, 122, 0.3)"; const claimColour = "rgba(77, 91, 42, 0.3)"; const unbondColour = "rgba(122, 23, 51, 0.3)"; const ticketRedeemColour = "rgba(42, 44, 91, 0.3)"; const greyColour = "rgba(122, 128, 127, 0.3)"; const defaultIncrementMaxShown = 100; const EventViewer = (obj) => { const listInnerRef = useRef(); const [filterActivated, setFilterActivated] = useState(true); const [rewardActivated, setRewardActivated] = useState(true); const [updateActivated, setUpdateActivated] = useState(true); const [withdrawActivated, setWithdrawActivated] = useState(true); const [stakeActivated, setStakeActivated] = useState(true); const [delegatorRewardActivated, setDelegatorRewardActivated] = useState(true); const [ticketRedemptionActivated, setTicketRedemptionActivated] = useState(true); const [unbondActivated, setUnbondActivated] = useState(true); console.log("Rendering EventViewer"); let unfiltered = 0; let filtered = 0; let hidden = 0; let prevBlock = 0; let limitShown = obj.events.length + obj.tickets.length; let filterActivatedColour; filterActivatedColour = filterActivated ? activationColour : greyColour; let rewardActivatedColour; rewardActivatedColour = rewardActivated ? rewardColour : greyColour; let updateActivatedColour; updateActivatedColour = updateActivated ? updateColour : greyColour; let withdrawActivatedColour; withdrawActivatedColour = withdrawActivated ? withdrawStakeColour : greyColour; let stakeActivatedColour; stakeActivatedColour = stakeActivated ? stakeColour : greyColour; let delegatorActivatedColour; delegatorActivatedColour = delegatorRewardActivated ? claimColour : greyColour; let ticketActivatedColour; ticketActivatedColour = ticketRedemptionActivated ? ticketRedeemColour : greyColour; let unbondActivatedColour; unbondActivatedColour = unbondActivated ? unbondColour : greyColour; const updateOnScroll = () => { if (unfiltered == 0) { return; } if (listInnerRef.current) { const { scrollTop, scrollHeight, clientHeight } = listInnerRef.current.container.current; if (scrollTop + clientHeight === scrollHeight) { obj.setMaxAmount(obj.maxAmount + defaultIncrementMaxShown); } } } let eventList = []; let thisEvent = {}; let eventIdx = obj.events.length - 1; let ticketIdx = obj.tickets.length - 1; while (eventIdx >= 0 || ticketIdx >= 0) { const latestEvent = obj.events[eventIdx]; let latestEventTime = 0; if (eventIdx >= 0) { latestEventTime = latestEvent.transactionTime; } const latestTicket = obj.tickets[ticketIdx]; let latestTicketTime = 0; if (ticketIdx >= 0) { latestTicketTime = latestTicket.transactionTime; } if (latestEventTime > latestTicketTime) { thisEvent = latestEvent; eventIdx -= 1; } else if (latestTicketTime) { thisEvent = latestTicket; ticketIdx -= 1; } else { console.log("error, breaky breaky"); break; } // Filter by minimum value if (obj.amountFilter !== "") { if (parseFloat(obj.amountFilter) > thisEvent.eventValue) { filtered++; continue; } } // Filter name on from, to, caller if (obj.searchTerm !== "") { let isFiltered = true; if (thisEvent.eventCaller.toLowerCase().includes(obj.searchTerm.toLowerCase())) isFiltered = false; if (thisEvent.eventFrom.toLowerCase().includes(obj.searchTerm.toLowerCase())) isFiltered = false; if (thisEvent.eventTo.toLowerCase().includes(obj.searchTerm.toLowerCase())) isFiltered = false; if (isFiltered) { filtered++; continue; } } // Filter Events on filter buttons let isFiltered = true; // Check boolean filters on thisEvent.eventType let count = 0; if (filterActivated) { if (thisEvent.eventType === "Activate") { isFiltered = false; } count++; } if (rewardActivated) { if (thisEvent.eventType === "Reward") { isFiltered = false; } count++; } if (updateActivated) { if (thisEvent.eventType === "Update") { isFiltered = false; } count++; } if (withdrawActivated) { if (thisEvent.eventType === "Withdraw") { isFiltered = false; } count++; } if (stakeActivated) { if (thisEvent.eventType === "Stake") { isFiltered = false; } count++; } if (stakeActivated) { if (thisEvent.eventType === "Migrate") { isFiltered = false; } count++; } if (unbondActivated) { if (thisEvent.eventType === "Unbond") { isFiltered = false; } count++; } if (delegatorRewardActivated) { if (thisEvent.eventType === "Claim") { isFiltered = false; } count++; } if (ticketRedemptionActivated) { if (thisEvent.eventType === "RedeemTicket") { isFiltered = false; } count++; } if (isFiltered && count) { filtered++; continue; } if (unfiltered < obj.maxAmount) { unfiltered++; if (prevBlock === thisEvent.transactionBlock) { eventList.push(); } else { prevBlock = thisEvent.transactionBlock; eventList.push(); } } else { hidden++; } } let showMoreButton; if (hidden == 0) { showMoreButton =

☑️ Reached end of results

} else { showMoreButton =
} let filterBit; if (obj.showFilter) { filterBit =
Showing {hidden + unfiltered} out of {limitShown} results
} return (
{filterBit}
{eventList} {showMoreButton}
) } export default EventViewer;