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(
☑️ Reached end of results