import { Box, Container, Grid, Image,GridItem, Heading, HStack, Icon, Link, Select, Text, useColorMode, useToast, VStack } 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"; 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 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: () => ( ), }); }) .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`); } }; return ( Subnet ID - {params?.id} Total Value Locked (TVL) {Number(data?.data?.tvl).toFixed(3)} RBT {/* View total number of records */} {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, }, index ) => ( {index + 1}. {/* */} copyToClipboard(transactionId)} /> Sender: copyToClipboard(sender)} /> Receiver: navigate(`/did-info/${receiver}`)} > {receiver} copyToClipboard(receiver)} /> {smartContract && ( Smart contract ID : {smartContract} )} Date and Time Stamp : {formatUTCToDDMMYYHHMMSS(timestamp)} Amount: {amount} Transaction type : {transactionType} {subNetworkId === "MainNet" ? "Main net" : "Subnet ID"} : {subNetworkId} {/* */} ) )} } ); }; export default SubnetInner;