Skip to content

Commit

Permalink
Pulling latest changes from origin main + resolving conflicts
Browse files Browse the repository at this point in the history
  • Loading branch information
jamiehewitt15 committed Aug 30, 2024
2 parents 06a4369 + a221025 commit e2a20b6
Show file tree
Hide file tree
Showing 12 changed files with 194 additions and 14 deletions.
178 changes: 178 additions & 0 deletions dashboard/src/components/Admin/TransferFees.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
import React, { useState } from 'react'
import {
TextField,
Button,
Alert,
Snackbar,
Dialog,
DialogTitle,
DialogContent,
DialogContentText,
DialogActions
} from '@mui/material'
import { useAdminContext } from '@context/AdminProvider'
import styles from './index.module.css'

export default function TransferFees() {
const [showChainInput, setShowTransferInput] = useState(false)
const [isLoading, setLoading] = useState(false)
const [chainId, setChainId] = useState<string>('')
const [tokenAddress, setTokenAddress] = useState<string>('')
const [tokenAmount, setTokenAmount] = useState<string>('')
const [destinationAddress, setDestinationAddress] = useState<string>('')
const { signature, expiryTimestamp } = useAdminContext()
const [error, setError] = useState<string | null>(null)
const [snackbarOpen, setSnackbarOpen] = useState(false)
const [dialogOpen, setDialogOpen] = useState(false)
const [responseMessage, setResponseMessage] = useState<string | null>(null)
const [txHash, setTxHash] = useState<string | null>(null)

const validateInputs = () => {
if (!chainId || !tokenAddress || !tokenAmount || !destinationAddress) {
setError('All fields are required.')
return false
}
if (isNaN(Number(tokenAmount))) {
setError('Token amount must be a number.')
return false
}
setError(null)
return true
}

async function transferFees() {
if (!validateInputs()) return

setLoading(true)
try {
const apiUrl = '/directCommand'
const response = await fetch(apiUrl, {
headers: {
Accept: 'application/json',
'Content-Type': 'application/json'
},
method: 'POST',
body: JSON.stringify({
command: 'collectFees',
chainId,
tokenAddress,
tokenAmount,
destinationAddress,
expiryTimestamp,
signature
})
})

if (response.status === 200) {
const jobData = await response.json()
if (jobData?.tx && jobData?.message) {
setTxHash(jobData.tx)
setResponseMessage(jobData.message)
setDialogOpen(true)
setSnackbarOpen(true)
setShowTransferInput(false)
}
} else {
setError('Error transferring fees. Please try again.')
}
} catch (error) {
console.error('error', error)
setError('Error transferring fees. Please try again.')
} finally {
setLoading(false)
}
}

const handleDialogClose = () => {
setDialogOpen(false)
}

return (
<div className={styles.column}>
<Button variant="text" onClick={() => setShowTransferInput(!showChainInput)}>
Transfer Fees
</Button>

{showChainInput && (
<div className={styles.filters}>
<TextField
label="Chain ID"
value={chainId}
onChange={(e) => setChainId(e.target.value)}
fullWidth
margin="normal"
variant="outlined"
type="number"
/>
<TextField
label="Token Address"
value={tokenAddress}
onChange={(e) => setTokenAddress(e.target.value)}
fullWidth
margin="normal"
variant="outlined"
/>
<TextField
label="Token Amount"
value={tokenAmount}
onChange={(e) => setTokenAmount(e.target.value)}
fullWidth
margin="normal"
variant="outlined"
type="number"
/>
<TextField
label="Destination Address"
value={destinationAddress}
onChange={(e) => setDestinationAddress(e.target.value)}
fullWidth
margin="normal"
variant="outlined"
/>
{error && <Alert severity="error">{error}</Alert>}
<Button
type="button"
onClick={transferFees}
variant="outlined"
disabled={isLoading}
fullWidth
>
Transfer Fees
</Button>
</div>
)}
<Snackbar
open={snackbarOpen}
autoHideDuration={6000}
onClose={() => setSnackbarOpen(false)}
message="Fees successfully transferred!"
/>
<Dialog
open={dialogOpen}
onClose={handleDialogClose}
aria-labelledby="alert-dialog-title"
aria-describedby="alert-dialog-description"
>
<DialogTitle id="alert-dialog-title">{'Transfer Successful'}</DialogTitle>
<DialogContent>
<DialogContentText id="alert-dialog-description">
{responseMessage && (
<span>
{responseMessage} <br />
<strong style={{ marginTop: '10px', display: 'block' }}>
Transaction Hash:
</strong>{' '}
{txHash}
</span>
)}
</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={handleDialogClose} autoFocus>
Close
</Button>
</DialogActions>
</Dialog>
</div>
)
}
2 changes: 2 additions & 0 deletions dashboard/src/components/Admin/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { ConnectButton } from '@rainbow-me/rainbowkit'
import Stack from '@mui/material/Stack'
import ReIndexChain from './ReindexChain'
import ReIndexTransaction from './ReindexTransaction'
import TransferFees from './TransferFees'

export default function AdminActions() {
const { generateSignature, signature, validTimestamp, admin } = useAdminContext()
Expand All @@ -31,6 +32,7 @@ export default function AdminActions() {
<DownloadLogs />
<ReIndexChain />
<ReIndexTransaction />
<TransferFees />
<StopNode />
</Stack>
)}
Expand Down
2 changes: 1 addition & 1 deletion dist/dashboard/404.html
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><link rel="preload" href="/_next/static/css/28e16ff29a58442c.css" as="style" crossorigin=""/><link rel="stylesheet" href="/_next/static/css/28e16ff29a58442c.css" crossorigin="" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" crossorigin="" nomodule="" src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="/_next/static/chunks/webpack-fe817b75e2ea8908.js" defer="" crossorigin=""></script><script src="/_next/static/chunks/framework-ca706bf673a13738.js" defer="" crossorigin=""></script><script src="/_next/static/chunks/main-66d85fc6f7952338.js" defer="" crossorigin=""></script><script src="/_next/static/chunks/pages/_app-8a605b014f26ab32.js" defer="" crossorigin=""></script><script src="/_next/static/chunks/pages/_error-e4216aab802f5810.js" defer="" crossorigin=""></script><script src="/_next/static/909zKXn6zxuTB_MhSk32n/_buildManifest.js" defer="" crossorigin=""></script><script src="/_next/static/909zKXn6zxuTB_MhSk32n/_ssgManifest.js" defer="" crossorigin=""></script></head><body><div id="__next"><div data-rk=""><style>[data-rk]{--rk-blurs-modalOverlay:blur(0px);--rk-fonts-body:SFRounded, ui-rounded, "SF Pro Rounded", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--rk-radii-actionButton:9999px;--rk-radii-connectButton:12px;--rk-radii-menuButton:12px;--rk-radii-modal:24px;--rk-radii-modalMobile:28px;--rk-colors-accentColor:#0E76FD;--rk-colors-accentColorForeground:#FFF;--rk-colors-actionButtonBorder:rgba(0, 0, 0, 0.04);--rk-colors-actionButtonBorderMobile:rgba(0, 0, 0, 0.06);--rk-colors-actionButtonSecondaryBackground:rgba(0, 0, 0, 0.06);--rk-colors-closeButton:rgba(60, 66, 66, 0.8);--rk-colors-closeButtonBackground:rgba(0, 0, 0, 0.06);--rk-colors-connectButtonBackground:#FFF;--rk-colors-connectButtonBackgroundError:#FF494A;--rk-colors-connectButtonInnerBackground:linear-gradient(0deg, rgba(0, 0, 0, 0.03), rgba(0, 0, 0, 0.06));--rk-colors-connectButtonText:#25292E;--rk-colors-connectButtonTextError:#FFF;--rk-colors-connectionIndicator:#30E000;--rk-colors-downloadBottomCardBackground:linear-gradient(126deg, rgba(255, 255, 255, 0) 9.49%, rgba(171, 171, 171, 0.04) 71.04%), #FFFFFF;--rk-colors-downloadTopCardBackground:linear-gradient(126deg, rgba(171, 171, 171, 0.2) 9.49%, rgba(255, 255, 255, 0) 71.04%), #FFFFFF;--rk-colors-error:#FF494A;--rk-colors-generalBorder:rgba(0, 0, 0, 0.06);--rk-colors-generalBorderDim:rgba(0, 0, 0, 0.03);--rk-colors-menuItemBackground:rgba(60, 66, 66, 0.1);--rk-colors-modalBackdrop:rgba(0, 0, 0, 0.3);--rk-colors-modalBackground:#FFF;--rk-colors-modalBorder:transparent;--rk-colors-modalText:#25292E;--rk-colors-modalTextDim:rgba(60, 66, 66, 0.3);--rk-colors-modalTextSecondary:rgba(60, 66, 66, 0.6);--rk-colors-profileAction:#FFF;--rk-colors-profileActionHover:rgba(255, 255, 255, 0.5);--rk-colors-profileForeground:rgba(60, 66, 66, 0.06);--rk-colors-selectedOptionBorder:rgba(60, 66, 66, 0.1);--rk-colors-standby:#FFD641;--rk-shadows-connectButton:0px 4px 12px rgba(0, 0, 0, 0.1);--rk-shadows-dialog:0px 8px 32px rgba(0, 0, 0, 0.32);--rk-shadows-profileDetailsAction:0px 2px 6px rgba(37, 41, 46, 0.04);--rk-shadows-selectedOption:0px 2px 6px rgba(0, 0, 0, 0.24);--rk-shadows-selectedWallet:0px 2px 6px rgba(0, 0, 0, 0.12);--rk-shadows-walletLogo:0px 2px 16px rgba(0, 0, 0, 0.16);}</style><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"909zKXn6zxuTB_MhSk32n","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><link rel="preload" href="/_next/static/css/28e16ff29a58442c.css" as="style" crossorigin=""/><link rel="stylesheet" href="/_next/static/css/28e16ff29a58442c.css" crossorigin="" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" crossorigin="" nomodule="" src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="/_next/static/chunks/webpack-fe817b75e2ea8908.js" defer="" crossorigin=""></script><script src="/_next/static/chunks/framework-ca706bf673a13738.js" defer="" crossorigin=""></script><script src="/_next/static/chunks/main-66d85fc6f7952338.js" defer="" crossorigin=""></script><script src="/_next/static/chunks/pages/_app-8a605b014f26ab32.js" defer="" crossorigin=""></script><script src="/_next/static/chunks/pages/_error-e4216aab802f5810.js" defer="" crossorigin=""></script><script src="/_next/static/Y6w7oMjRjI-tffwCvjHC1/_buildManifest.js" defer="" crossorigin=""></script><script src="/_next/static/Y6w7oMjRjI-tffwCvjHC1/_ssgManifest.js" defer="" crossorigin=""></script></head><body><div id="__next"><div data-rk=""><style>[data-rk]{--rk-blurs-modalOverlay:blur(0px);--rk-fonts-body:SFRounded, ui-rounded, "SF Pro Rounded", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--rk-radii-actionButton:9999px;--rk-radii-connectButton:12px;--rk-radii-menuButton:12px;--rk-radii-modal:24px;--rk-radii-modalMobile:28px;--rk-colors-accentColor:#0E76FD;--rk-colors-accentColorForeground:#FFF;--rk-colors-actionButtonBorder:rgba(0, 0, 0, 0.04);--rk-colors-actionButtonBorderMobile:rgba(0, 0, 0, 0.06);--rk-colors-actionButtonSecondaryBackground:rgba(0, 0, 0, 0.06);--rk-colors-closeButton:rgba(60, 66, 66, 0.8);--rk-colors-closeButtonBackground:rgba(0, 0, 0, 0.06);--rk-colors-connectButtonBackground:#FFF;--rk-colors-connectButtonBackgroundError:#FF494A;--rk-colors-connectButtonInnerBackground:linear-gradient(0deg, rgba(0, 0, 0, 0.03), rgba(0, 0, 0, 0.06));--rk-colors-connectButtonText:#25292E;--rk-colors-connectButtonTextError:#FFF;--rk-colors-connectionIndicator:#30E000;--rk-colors-downloadBottomCardBackground:linear-gradient(126deg, rgba(255, 255, 255, 0) 9.49%, rgba(171, 171, 171, 0.04) 71.04%), #FFFFFF;--rk-colors-downloadTopCardBackground:linear-gradient(126deg, rgba(171, 171, 171, 0.2) 9.49%, rgba(255, 255, 255, 0) 71.04%), #FFFFFF;--rk-colors-error:#FF494A;--rk-colors-generalBorder:rgba(0, 0, 0, 0.06);--rk-colors-generalBorderDim:rgba(0, 0, 0, 0.03);--rk-colors-menuItemBackground:rgba(60, 66, 66, 0.1);--rk-colors-modalBackdrop:rgba(0, 0, 0, 0.3);--rk-colors-modalBackground:#FFF;--rk-colors-modalBorder:transparent;--rk-colors-modalText:#25292E;--rk-colors-modalTextDim:rgba(60, 66, 66, 0.3);--rk-colors-modalTextSecondary:rgba(60, 66, 66, 0.6);--rk-colors-profileAction:#FFF;--rk-colors-profileActionHover:rgba(255, 255, 255, 0.5);--rk-colors-profileForeground:rgba(60, 66, 66, 0.06);--rk-colors-selectedOptionBorder:rgba(60, 66, 66, 0.1);--rk-colors-standby:#FFD641;--rk-shadows-connectButton:0px 4px 12px rgba(0, 0, 0, 0.1);--rk-shadows-dialog:0px 8px 32px rgba(0, 0, 0, 0.32);--rk-shadows-profileDetailsAction:0px 2px 6px rgba(37, 41, 46, 0.04);--rk-shadows-selectedOption:0px 2px 6px rgba(0, 0, 0, 0.24);--rk-shadows-selectedWallet:0px 2px 6px rgba(0, 0, 0, 0.12);--rk-shadows-walletLogo:0px 2px 16px rgba(0, 0, 0, 0.16);}</style><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"Y6w7oMjRjI-tffwCvjHC1","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>

This file was deleted.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

This file was deleted.

Loading

0 comments on commit e2a20b6

Please sign in to comment.