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}. {/* */} copyToClipboard(transactionId)} /> {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;