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(false);
const [updateActivated, setUpdateActivated] = useState(true);
const [withdrawActivated, setWithdrawActivated] = useState(false);
const [stakeActivated, setStakeActivated] = useState(true);
const [delegatorRewardActivated, setDelegatorRewardActivated] = useState(false);
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}
{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;