import { Box, Container, Grid, Image,GridItem, Heading, HStack, Icon, Link, Select, Text, useColorMode, useToast, VStack, Button, Tooltip } from "@chakra-ui/react";
import React, { useContext, useEffect, useState } from "react";
import GlobalStateContext from "../Contexts/GlobalStateContext";
import Pagination from "../components/Pagination";
import { MdContentCopy, MdOutlineErrorOutline } from "react-icons/md";
import ToastBox from "../components/ToastBox";
import bannerImage from "../assets/images/bannerImg.png";
import { useNavigate, useParams } from "react-router-dom";
import { useGetSubnetByIdQuery } from "../Services/api.service";
import rbtLogoOutline from "../assets/images/rubix-filled.svg";
import { HiOutlineRefresh } from "react-icons/hi";
import { rotate } from "../components/LatestTransactions/LatestTransactions";
import Search from '../assets/images/search.png'
import { formatUTCToDDMMYYHHMMSS } from "../Constants/Constants";
import FullScreenLoaader from "../components/FullScreenLoaader/FullScreenLoaader";
const SubnetInner = () => {
const { overview } = useContext(GlobalStateContext);
const { colorMode} = useColorMode();
const navigate = useNavigate()
const params = useParams()
const [isRotating, setIsRotating] = useState(false);
const [currentPage, setCurrentPage] = useState(1); // Tracks the current page
const [pageSize, setPageSize] = useState(10); // Number of items per page
const [totalItems, setTotalItems] = useState(null); // Total items in the dataset
const [lastRefreshedTime, setLastRefreshedTime] = useState(new Date()); // Store the last refresh time
const [relativeRefreshTime, setRelativeRefreshTime] = useState("Just now");
const [ isLoadingURL, setIsLoading ] = useState(false)
const toast = useToast()
useEffect(() => {
window.scrollTo({ top: 0, behavior: "smooth" }); // Scroll to top smoothly when params change
}, []);
function copyToClipboard(text) {
navigator.clipboard
.writeText(text)
.then(() => {
// console.log('Text copied to clipboard');
// alert('Text copied to clipboard');
toast({
render: () => (
),
});
setIsLoading(false)
})
.catch((err) => {
console.error("Failed to copy text: ", err);
});
}
const {
data,
isLoading,
refetch
} = useGetSubnetByIdQuery({
id:params?.id,
pageNumber: currentPage,
pageSize: pageSize,
})
useEffect(() => {
setTotalItems(data?.data?.totalCount);
}, [data]);
const handleRefreshClick = () => {
setIsRotating(true); // Start rotation
refetch();
setTimeout(() => {
setIsRotating(false); // Stop rotation after 500ms
}, 500);
setLastRefreshedTime(new Date()); // Set the new refresh time
setRelativeRefreshTime("Just now"); // Reset relative time to "Just now"
};
useEffect(() => {
// Update relative time every minute
const intervalId = setInterval(() => {
updateRelativeTime();
}, 60000); // 60 seconds = 60000ms
return () => clearInterval(intervalId); // Cleanup the interval on unmount
}, [lastRefreshedTime]);
const updateRelativeTime = () => {
const now = new Date();
const timeDiff = Math.floor((now - lastRefreshedTime) / 60000); // Difference in minutes
if (timeDiff < 1) {
setRelativeRefreshTime("Just now");
} else if (timeDiff === 1) {
setRelativeRefreshTime("1 minute ago");
} else {
setRelativeRefreshTime(`${timeDiff} minutes ago`);
}
};
const handleGenrateShortURL = async () => {
setIsLoading(true)
const fullUrl = window.location.href;
try {
const response = await fetch(`${import.meta.env.VITE_BASE_URL}ShortUrl/create`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(fullUrl), // Sending searchTerm as a JSON string
});
if (!response.ok) {
throw new Error('Failed to generate short URL');
}
const result = await response.json();
copyToClipboard(result?.shortUrl)
// You can handle the result here, e.g., by updating a state with the short URL
} catch (error) {
console.error("Error generating short URL:", error);
}
};
return (
Subnet ID - {params?.id}
Total Value Locked (TVL) {Number(data?.data?.tvl).toFixed(3)} RBT
{/*
View total number of records
*/}
{isLoading ? :
{data?.data?.items?.length===0 || isLoading?
{"No records found"}
:
Sr. no
Transactions
Last refresh {relativeRefreshTime}{" "}
{data?.data?.items?.map(
(
{
transactionId,
smartContract,
sender,
receiver,
contract,
timestamp,
amount,
transactionType,
subNetworkId,
executor,
deployer,
creator,
pledgeAmount,
scTokenHash
},
index
) => (
{index + 1}.
{/* */}
navigate(`/transaction/${transactionId}`)}
>
{transactionId}
copyToClipboard(transactionId)}
/>
{sender&&
Sender:
navigate(`/did-info/${sender}`)}
>
{sender}
copyToClipboard(sender)} />
}
{receiver&&
Receiver:
navigate(`/did-info/${receiver}`)}
>
{receiver}
copyToClipboard(receiver)}
/>
}
{creator&&
Creator:
navigate(`/did-info/${creator}`)}
>
{creator}
copyToClipboard(creator)}
/>
}
{executor&&
Executor:
navigate(`/did-info/${executor}`)}
>
{executor}
copyToClipboard(executor)}
/>
}
{deployer&&
Deployer:
navigate(`/did-info/${deployer}`)}
>
{deployer}
copyToClipboard(deployer)}
/>
}
{scTokenHash && (
Smart contract ID :
{scTokenHash}
)}
Date and Time Stamp :
{formatUTCToDDMMYYHHMMSS(timestamp)}
{amount&&
Amount:
{amount}
}
{pledgeAmount&&
Pledge Amount:
{pledgeAmount}
}
{/* */}
Transaction type :
{transactionType}
{subNetworkId === "MainNet" ? "Main net" : "Subnet ID"}:
{subNetworkId === "MainNet" ?{subNetworkId}:
{subNetworkId}
}
{/* */}
)
)}
}
}
);
};
export default SubnetInner;