mirror of
https://github.com/stronk-dev/LivepeerEvents.git
synced 2025-07-06 03:05:10 +02:00
Merge tickets with events in render
This commit is contained in:
parent
9cc5323ef5
commit
02969a634e
@ -10,7 +10,7 @@ const unbondColour = "rgba(122, 23, 51, 0.3)";
|
|||||||
const claimColour = "rgba(77, 91, 42, 0.3)";
|
const claimColour = "rgba(77, 91, 42, 0.3)";
|
||||||
|
|
||||||
const ticketTransferColour = "rgba(88, 91, 42, 0.3)";
|
const ticketTransferColour = "rgba(88, 91, 42, 0.3)";
|
||||||
const ticketRedeemColour = "rgba(42, 91, 44, 0.3)";
|
const ticketRedeemColour = "rgba(42, 44, 91, 0.3)";
|
||||||
|
|
||||||
const thresholdStaking = 0.001;
|
const thresholdStaking = 0.001;
|
||||||
const thresholdFees = 0.00009;
|
const thresholdFees = 0.00009;
|
||||||
@ -96,7 +96,7 @@ export const getEvents = () => async dispatch => {
|
|||||||
let tmpWhen = "";
|
let tmpWhen = "";
|
||||||
// Group Events into transactions. Always reset when the transactionID changes
|
// Group Events into transactions. Always reset when the transactionID changes
|
||||||
{
|
{
|
||||||
for (const eventObj of data.slice(0).reverse()) {
|
for (const eventObj of data) {
|
||||||
if (currentTx === "") {
|
if (currentTx === "") {
|
||||||
currentTx = eventObj.transactionHash;
|
currentTx = eventObj.transactionHash;
|
||||||
currentUrl = eventObj.transactionUrl;
|
currentUrl = eventObj.transactionUrl;
|
||||||
@ -370,7 +370,7 @@ export const getTickets = () => async dispatch => {
|
|||||||
let currentTime = 0;
|
let currentTime = 0;
|
||||||
// Parse Tickets
|
// Parse Tickets
|
||||||
{
|
{
|
||||||
for (const eventObj of data.slice(0).reverse()) {
|
for (const eventObj of data) {
|
||||||
if (currentTx === "") {
|
if (currentTx === "") {
|
||||||
currentTx = eventObj.transactionHash;
|
currentTx = eventObj.transactionHash;
|
||||||
currentUrl = eventObj.transactionUrl;
|
currentUrl = eventObj.transactionUrl;
|
||||||
|
@ -11,6 +11,7 @@ const withdrawStakeColour = "rgba(115, 110, 22, 0.3)";
|
|||||||
const stakeColour = "rgba(71, 23, 122, 0.3)";
|
const stakeColour = "rgba(71, 23, 122, 0.3)";
|
||||||
const claimColour = "rgba(77, 91, 42, 0.3)";
|
const claimColour = "rgba(77, 91, 42, 0.3)";
|
||||||
const unbondColour = "rgba(122, 23, 51, 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 greyColour = "rgba(122, 128, 127, 0.3)";
|
||||||
|
|
||||||
const defaultMaxShown = 100;
|
const defaultMaxShown = 100;
|
||||||
@ -23,6 +24,7 @@ const EventViewer = (obj) => {
|
|||||||
const [withdrawActivated, setWithdrawActivated] = useState(true);
|
const [withdrawActivated, setWithdrawActivated] = useState(true);
|
||||||
const [stakeActivated, setStakeActivated] = useState(true);
|
const [stakeActivated, setStakeActivated] = useState(true);
|
||||||
const [delegatorRewardActivated, setDelegatorRewardActivated] = useState(true);
|
const [delegatorRewardActivated, setDelegatorRewardActivated] = useState(true);
|
||||||
|
const [ticketRedemptionActivated, setTicketRedemptionActivated] = useState(true);
|
||||||
const [unbondActivated, setUnbondActivated] = useState(true);
|
const [unbondActivated, setUnbondActivated] = useState(true);
|
||||||
console.log("Rendering EventViewer");
|
console.log("Rendering EventViewer");
|
||||||
let unfiltered = 0;
|
let unfiltered = 0;
|
||||||
@ -40,6 +42,8 @@ const EventViewer = (obj) => {
|
|||||||
stakeActivatedColour = stakeActivated ? stakeColour : greyColour;
|
stakeActivatedColour = stakeActivated ? stakeColour : greyColour;
|
||||||
let delegatorActivatedColour;
|
let delegatorActivatedColour;
|
||||||
delegatorActivatedColour = delegatorRewardActivated ? claimColour : greyColour;
|
delegatorActivatedColour = delegatorRewardActivated ? claimColour : greyColour;
|
||||||
|
let ticketActivatedColour;
|
||||||
|
ticketActivatedColour = ticketRedemptionActivated ? ticketRedeemColour : greyColour;
|
||||||
let unbondActivatedColour;
|
let unbondActivatedColour;
|
||||||
unbondActivatedColour = unbondActivated ? unbondColour : greyColour;
|
unbondActivatedColour = unbondActivated ? unbondColour : greyColour;
|
||||||
|
|
||||||
@ -75,72 +79,101 @@ const EventViewer = (obj) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let eventList = [];
|
let eventList = [];
|
||||||
for (const eventObj of obj.events) {
|
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;
|
||||||
|
}
|
||||||
if (unfiltered > obj.maxAmount) {
|
if (unfiltered > obj.maxAmount) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Filter by minimum value
|
// Filter by minimum value
|
||||||
if (obj.amountFilter !== "") {
|
if (obj.amountFilter !== "") {
|
||||||
if (parseFloat(obj.amountFilter) > eventObj.eventValue) {
|
if (parseFloat(obj.amountFilter) > thisEvent.eventValue) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Filter name on from, to, caller
|
// Filter name on from, to, caller
|
||||||
if (obj.searchTerm !== "") {
|
if (obj.searchTerm !== "") {
|
||||||
let isFiltered = true;
|
let isFiltered = true;
|
||||||
if (eventObj.eventCaller.toLowerCase().includes(obj.searchTerm.toLowerCase())) isFiltered = false;
|
if (thisEvent.eventCaller.toLowerCase().includes(obj.searchTerm.toLowerCase())) isFiltered = false;
|
||||||
if (eventObj.eventFrom.toLowerCase().includes(obj.searchTerm.toLowerCase())) isFiltered = false;
|
if (thisEvent.eventFrom.toLowerCase().includes(obj.searchTerm.toLowerCase())) isFiltered = false;
|
||||||
if (eventObj.eventTo.toLowerCase().includes(obj.searchTerm.toLowerCase())) isFiltered = false;
|
if (thisEvent.eventTo.toLowerCase().includes(obj.searchTerm.toLowerCase())) isFiltered = false;
|
||||||
if (isFiltered) continue;
|
if (isFiltered) continue;
|
||||||
}
|
}
|
||||||
// Filter Events on filter buttons
|
// Filter Events on filter buttons
|
||||||
let isFiltered = true;
|
let isFiltered = true;
|
||||||
// Check boolean filters on eventObj.eventType
|
// Check boolean filters on thisEvent.eventType
|
||||||
let count = 0;
|
let count = 0;
|
||||||
if (filterActivated) {
|
if (filterActivated) {
|
||||||
if (eventObj.eventType === "Activate") {
|
if (thisEvent.eventType === "Activate") {
|
||||||
isFiltered = false;
|
isFiltered = false;
|
||||||
}
|
}
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
if (rewardActivated) {
|
if (rewardActivated) {
|
||||||
if (eventObj.eventType === "Reward") {
|
if (thisEvent.eventType === "Reward") {
|
||||||
isFiltered = false;
|
isFiltered = false;
|
||||||
}
|
}
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
if (updateActivated) {
|
if (updateActivated) {
|
||||||
if (eventObj.eventType === "Update") {
|
if (thisEvent.eventType === "Update") {
|
||||||
isFiltered = false;
|
isFiltered = false;
|
||||||
}
|
}
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
if (withdrawActivated) {
|
if (withdrawActivated) {
|
||||||
if (eventObj.eventType === "Withdraw") {
|
if (thisEvent.eventType === "Withdraw") {
|
||||||
isFiltered = false;
|
isFiltered = false;
|
||||||
}
|
}
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
if (stakeActivated) {
|
if (stakeActivated) {
|
||||||
if (eventObj.eventType === "Stake") {
|
if (thisEvent.eventType === "Stake") {
|
||||||
isFiltered = false;
|
isFiltered = false;
|
||||||
}
|
}
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
if (stakeActivated) {
|
if (stakeActivated) {
|
||||||
if (eventObj.eventType === "Migrate") {
|
if (thisEvent.eventType === "Migrate") {
|
||||||
isFiltered = false;
|
isFiltered = false;
|
||||||
}
|
}
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
if (unbondActivated) {
|
if (unbondActivated) {
|
||||||
if (eventObj.eventType === "Unbond") {
|
if (thisEvent.eventType === "Unbond") {
|
||||||
isFiltered = false;
|
isFiltered = false;
|
||||||
}
|
}
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
if (delegatorRewardActivated) {
|
if (delegatorRewardActivated) {
|
||||||
if (eventObj.eventType === "Claim") {
|
if (thisEvent.eventType === "Claim") {
|
||||||
|
isFiltered = false;
|
||||||
|
}
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
if (ticketRedemptionActivated) {
|
||||||
|
if (thisEvent.eventType === "RedeemTicket") {
|
||||||
isFiltered = false;
|
isFiltered = false;
|
||||||
}
|
}
|
||||||
count++;
|
count++;
|
||||||
@ -151,19 +184,19 @@ const EventViewer = (obj) => {
|
|||||||
|
|
||||||
if (unfiltered < obj.maxAmount) {
|
if (unfiltered < obj.maxAmount) {
|
||||||
unfiltered++;
|
unfiltered++;
|
||||||
if (prevBlock === eventObj.transactionBlock) {
|
if (prevBlock === thisEvent.transactionBlock) {
|
||||||
eventList.push(<EventButton
|
eventList.push(<EventButton
|
||||||
key={eventObj.transactionHash + unfiltered}
|
key={thisEvent.transactionHash + unfiltered}
|
||||||
eventObj={eventObj}
|
eventObj={thisEvent}
|
||||||
setSearchTerm={obj.setSearchTerm}
|
setSearchTerm={obj.setSearchTerm}
|
||||||
/>);
|
/>);
|
||||||
} else {
|
} else {
|
||||||
prevBlock = eventObj.transactionBlock;
|
prevBlock = thisEvent.transactionBlock;
|
||||||
eventList.push(<EventButton
|
eventList.push(<EventButton
|
||||||
key={eventObj.transactionHash + unfiltered}
|
key={thisEvent.transactionHash + unfiltered}
|
||||||
eventObj={eventObj}
|
eventObj={thisEvent}
|
||||||
isFirstOfBlock={prevBlock}
|
isFirstOfBlock={prevBlock}
|
||||||
time={eventObj.transactionTime}
|
time={thisEvent.transactionTime}
|
||||||
setSearchTerm={obj.setSearchTerm}
|
setSearchTerm={obj.setSearchTerm}
|
||||||
/>);
|
/>);
|
||||||
}
|
}
|
||||||
@ -296,6 +329,11 @@ const EventViewer = (obj) => {
|
|||||||
}}>
|
}}>
|
||||||
<h3>Unbond</h3>
|
<h3>Unbond</h3>
|
||||||
</button>
|
</button>
|
||||||
|
<button className={ticketRedemptionActivated ? "row nonHomeButton active" : "row nonHomeButton"} style={{ backgroundColor: ticketActivatedColour }} onClick={() => {
|
||||||
|
setTicketRedemptionActivated(!ticketRedemptionActivated);
|
||||||
|
}}>
|
||||||
|
<h3>Tickets</h3>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -6,7 +6,6 @@ import { getOrchestratorInfo, clearOrchestrator } from "./actions/livepeer";
|
|||||||
import EventViewer from "./eventViewer";
|
import EventViewer from "./eventViewer";
|
||||||
import Orchestrator from "./orchestratorViewer";
|
import Orchestrator from "./orchestratorViewer";
|
||||||
import Stat from "./statViewer";
|
import Stat from "./statViewer";
|
||||||
import TicketViewer from './ticketViewer';
|
|
||||||
|
|
||||||
// Shows the EventViewer and other Livepeer related info
|
// Shows the EventViewer and other Livepeer related info
|
||||||
const defaultMaxShown = 100;
|
const defaultMaxShown = 100;
|
||||||
@ -16,7 +15,6 @@ const Livepeer = (obj) => {
|
|||||||
const [maxAmount, setMaxAmount] = useState(defaultMaxShown);
|
const [maxAmount, setMaxAmount] = useState(defaultMaxShown);
|
||||||
const [prefill, setPrefill] = useSearchParams();
|
const [prefill, setPrefill] = useSearchParams();
|
||||||
const [searchTerm, setSearchTerm] = useState("");
|
const [searchTerm, setSearchTerm] = useState("");
|
||||||
const [showTickets, setShowTickets] = useState("");
|
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const livepeer = useSelector((state) => state.livepeerstate);
|
const livepeer = useSelector((state) => state.livepeerstate);
|
||||||
const [redirectToHome, setRedirectToHome] = useState(false);
|
const [redirectToHome, setRedirectToHome] = useState(false);
|
||||||
@ -136,12 +134,6 @@ const Livepeer = (obj) => {
|
|||||||
if (livepeer.tickets) {
|
if (livepeer.tickets) {
|
||||||
ticketList = livepeer.tickets;
|
ticketList = livepeer.tickets;
|
||||||
}
|
}
|
||||||
if (showTickets) {
|
|
||||||
ticketBit =
|
|
||||||
<div className="rightContent">
|
|
||||||
<TicketViewer tickets={ticketList} forceVertical={true} />
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
let thisOrchObj;
|
let thisOrchObj;
|
||||||
let headerString;
|
let headerString;
|
||||||
@ -199,12 +191,6 @@ const Livepeer = (obj) => {
|
|||||||
}}>
|
}}>
|
||||||
<h4>✖️ Clear</h4>
|
<h4>✖️ Clear</h4>
|
||||||
</button>
|
</button>
|
||||||
<p>Tickets</p>
|
|
||||||
<div className="toggle-container" onClick={() => setShowTickets(!showTickets)}>
|
|
||||||
<div className={`dialog-button ${showTickets ? "" : "disabled"}`}>
|
|
||||||
{showTickets ? "Show" : "Hide"}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<p>Sidebar</p>
|
<p>Sidebar</p>
|
||||||
<div className="toggle-container" onClick={() => setShowSidebar(!showSidebar)}>
|
<div className="toggle-container" onClick={() => setShowSidebar(!showSidebar)}>
|
||||||
<div className={`dialog-button ${showSidebar ? "" : "disabled"}`}>
|
<div className={`dialog-button ${showSidebar ? "" : "disabled"}`}>
|
||||||
@ -224,9 +210,8 @@ const Livepeer = (obj) => {
|
|||||||
<div className="mainContent">
|
<div className="mainContent">
|
||||||
<EventViewer events={eventsList} searchTerm={searchTerm} setSearchTerm={setSearchTerm}
|
<EventViewer events={eventsList} searchTerm={searchTerm} setSearchTerm={setSearchTerm}
|
||||||
forceVertical={true} showFilter={showFilter} setAmountFilter={setAmountFilter} amountFilter={amountFilter}
|
forceVertical={true} showFilter={showFilter} setAmountFilter={setAmountFilter} amountFilter={amountFilter}
|
||||||
maxAmount={maxAmount} setMaxAmount={setMaxAmount} />
|
maxAmount={maxAmount} setMaxAmount={setMaxAmount} tickets={ticketList} />
|
||||||
</div>
|
</div>
|
||||||
{ticketBit}
|
|
||||||
</div>
|
</div>
|
||||||
</div >
|
</div >
|
||||||
);
|
);
|
||||||
|
@ -1,49 +0,0 @@
|
|||||||
import React, { useState } from "react";
|
|
||||||
import EventButton from "./eventButton";
|
|
||||||
import ScrollContainer from 'react-indiana-drag-scroll';
|
|
||||||
|
|
||||||
const TicketViewer = (obj) => {
|
|
||||||
console.log("Rendering TicketViewer");
|
|
||||||
let unfiltered = 0;
|
|
||||||
let prevBlock = 0;
|
|
||||||
let ticketList = [];
|
|
||||||
for (const ticketObj of obj.tickets) {
|
|
||||||
unfiltered++;
|
|
||||||
if (prevBlock === ticketObj.transactionBlock) {
|
|
||||||
ticketList.push(<EventButton
|
|
||||||
key={ticketObj.transactionHash + unfiltered}
|
|
||||||
eventObj={ticketObj}
|
|
||||||
setSearchTerm={obj.setSearchTerm}
|
|
||||||
/>);
|
|
||||||
} else {
|
|
||||||
prevBlock = ticketObj.transactionBlock;
|
|
||||||
ticketList.push(<EventButton
|
|
||||||
key={ticketObj.transactionHash + unfiltered}
|
|
||||||
eventObj={ticketObj}
|
|
||||||
isFirstOfBlock={prevBlock}
|
|
||||||
time={ticketObj.transactionTime}
|
|
||||||
setSearchTerm={obj.setSearchTerm}
|
|
||||||
/>);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className="strokeSmollLeft" style={{ padding: 0, margin: 0, height: 'calc( 100vh - 50px)' }}>
|
|
||||||
<div className="row" style={{ padding: 0, margin: 0, width: '100%', height: '100%' }}>
|
|
||||||
<div className="stroke roundedOpaque" style={{ padding: 0, margin: 0, width: 'unset', height: '100%', marginRight: '1em', overflow: 'hidden', marginTop: '1em', overflowX: 'scroll' }}>
|
|
||||||
<div className="content-wrapper" style={{ width: '100%' }}>
|
|
||||||
<ScrollContainer className="overflow-container" hideScrollbars={false}>
|
|
||||||
<div className="overflow-content" style={{ cursor: 'grab', paddingTop: 0 }}>
|
|
||||||
<div className={obj.forceVertical ? "flexContainer forceWrap" : "flexContainer"} style={{ margin: 0, textAlign: 'center', alignItems: 'center', justifyContent: 'center' }}>
|
|
||||||
{ticketList}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</ScrollContainer>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
export default TicketViewer;
|
|
Loading…
x
Reference in New Issue
Block a user