import React, { useState } from "react"; import EventButton from "./eventButton"; import ScrollContainer from 'react-indiana-drag-scroll'; 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 greyColour = "rgba(122, 128, 127, 0.3)"; const defaultMaxShown = 100; const defaultIncrementMaxShown = 100; const EventViewer = (obj) => { const [searchTerm, setSearchTerm] = useState(obj.prefill || ""); const [amountFilter, setAmountFilter] = useState("0"); const [maxAmount, setMaxAmount] = useState(defaultMaxShown); 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 [unbondActivated, setUnbondActivated] = useState(true); console.log("Rendering EventViewer"); let unfiltered = 0; let limitShown = obj.events.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 unbondActivatedColour; unbondActivatedColour = unbondActivated ? unbondColour : greyColour; let prevBlock = 0; let showMoreBlock; if (maxAmount < limitShown) { showMoreBlock =

} let showLessBlock; if (defaultMaxShown < maxAmount) { showLessBlock =

} else { showLessBlock =
} let searchTermText; if (searchTerm !== "") { if (searchTerm.length > 15) { searchTermText =

Only showing addresses containing {searchTerm.substring(0, 15)}...

} else { searchTermText =

Only showing addresses containing {searchTerm}

} } else { searchTermText =

Filter by Orchestrator address

} let eventList = []; for (const eventObj of obj.events) { if (unfiltered > maxAmount) { break; } // Filter by minimum value if (amountFilter !== "") { if (parseFloat(amountFilter) > eventObj.eventValue) { continue; } } // Filter name on from, to, caller if (searchTerm !== "") { let isFiltered = true; if (eventObj.eventCaller.toLowerCase().includes(searchTerm.toLowerCase())) isFiltered = false; if (eventObj.eventFrom.toLowerCase().includes(searchTerm.toLowerCase())) isFiltered = false; if (eventObj.eventTo.toLowerCase().includes(searchTerm.toLowerCase())) isFiltered = false; if (isFiltered) continue; } // Filter Events on filter buttons let isFiltered = true; // Check boolean filters on eventObj.eventType let count = 0; if (filterActivated) { if (eventObj.eventType === "Activate") { isFiltered = false; } count++; } if (rewardActivated) { if (eventObj.eventType === "Reward") { isFiltered = false; } count++; } if (updateActivated) { if (eventObj.eventType === "Update") { isFiltered = false; } count++; } if (withdrawActivated) { if (eventObj.eventType === "Withdraw") { isFiltered = false; } count++; } if (stakeActivated) { if (eventObj.eventType === "Stake") { isFiltered = false; } count++; } if (stakeActivated) { if (eventObj.eventType === "Migrate") { isFiltered = false; } count++; } if (unbondActivated) { if (eventObj.eventType === "Unbond") { isFiltered = false; } count++; } if (delegatorRewardActivated) { if (eventObj.eventType === "Claim") { isFiltered = false; } count++; } if (isFiltered && count) { continue; } if (unfiltered < maxAmount) { unfiltered++; if (prevBlock === eventObj.transactionBlock) { eventList.push(); } else { prevBlock = eventObj.transactionBlock; eventList.push(); } } } return (
{showLessBlock}

Showing max {maxAmount} results

{showMoreBlock}
{searchTermText} setSearchTerm(evt.target.value)} placeholder='Filter by Orchestrator address' type="text" />

{parseFloat(amountFilter) > 0 ? ("Only showing higher than " + amountFilter) : "Filter by minimum value"}

setAmountFilter(evt.target.value)} placeholder='Filter by minimum value' type="number" />

{eventList}
) } export default EventViewer;