import React, { useCallback, useEffect, useLayoutEffect, useRef, useState, } from "react"; import { getLayout } from "../src/layouts/AppLayout"; import { Spinner, Flex, Heading, Stack, Text, Spacer } from "@chakra-ui/react"; import Scrollable from "../src/components/Scrollable"; import useNFTs from "../src/core/hooks/useNFTs"; import RangeSelector from "../src/components/RangeSelector"; // import StatsCard from "../src/components/StatsCard"; import useWindowSize from "../src/core/hooks/useWindowSize"; // import NFTChart from "../src/components/NFTChart"; const HOUR_KEY = "Hourly"; const DAY_KEY = "Daily"; // const WEEK_KEY = "Weekly"; let timeMap = {}; timeMap[HOUR_KEY] = "hour"; timeMap[DAY_KEY] = "day"; // timeMap[WEEK_KEY] = "week"; const Analytics = () => { const windowSize = useWindowSize(); useEffect(() => { if (typeof window !== "undefined") { document.title = `NFT Analytics`; } }, []); const [nodesReady, setNodeReady] = useState({ ntx: false, values: false, mints: false, NFTOwners: false, minters: false, }); const nTxRef_ = useRef(); const valueRef_ = useRef(); const mintsRef_ = useRef(); const uniqueNFTOwnersRef_ = useRef(); const mintersRef_ = useRef(); const nTxRef = useCallback( (node) => { if (node !== null && !nodesReady.ntx) { setNodeReady({ ...nodesReady, ntx: true }); nTxRef_.current = node; } }, [nodesReady] ); const valueRef = useCallback( (node) => { if (node !== null && !nodesReady.values) { setNodeReady({ ...nodesReady, values: true }); valueRef_.current = node; } }, [nodesReady] ); const mintsRef = useCallback( (node) => { if (node !== null && !nodesReady.mints) { setNodeReady({ ...nodesReady, mints: true }); mintsRef_.current = node; } }, [nodesReady] ); const uniqueNFTOwnersRef = useCallback( (node) => { if (node !== null && !nodesReady.NFTOwners) { setNodeReady({ ...nodesReady, NFTOwners: true }); uniqueNFTOwnersRef_.current = node; } }, [nodesReady] ); const mintersRef = useCallback( (node) => { if (node !== null && !nodesReady.minters) { setNodeReady({ ...nodesReady, minters: true }); mintersRef_.current = node; } }, [nodesReady] ); const [timeRange, setTimeRange] = useState(HOUR_KEY); const { nftCache } = useNFTs(); useLayoutEffect(() => { const items = [ nTxRef_, valueRef_, mintsRef_, uniqueNFTOwnersRef_, mintersRef_, ]; console.log("useeffect fired"); if (items.some((item) => !!item.current)) { console.log("brder fun"); var firstItemInCurrentRow = items[0]; items.forEach((item) => { if (item.current) { if (item !== firstItemInCurrentRow) { // Check if the current item is at the same // height as the first item in the current row. if ( item.current.offsetTop === firstItemInCurrentRow.current.offsetTop ) { item.current.style.borderLeft = "3px dashed var(--chakra-colors-gray-600)"; } else { // This item was lower, it must be // the first in a new row. firstItemInCurrentRow = item; item.current.style.borderLeft = "0px dashed black"; } } } else { firstItemInCurrentRow = item; } }); } }, [nodesReady, windowSize]); if (nftCache.isLoading) return ; const plotMinW = "500px"; return ( NFT market analysis setTimeRange(e)} /> {/* nTxRef(node)} labelKey="nft_transfers" totalKey="num_transactions" timeRange={timeMap[timeRange]} netLabel="Ethereum mainnet" label="Number of NFT purchases" /> valueRef(node)} labelKey="nft_transfer_value" totalKey="total_value" timeRange={timeMap[timeRange]} netLabel="Ethereum mainnet" label="Money spent" /> mintsRef(node)} labelKey="nft_mints" timeRange={timeMap[timeRange]} netLabel="Ethereum mainnet" label="NFTs created" /> uniqueNFTOwnersRef(node)} labelKey="nft_owners" timeRange={timeMap[timeRange]} netLabel="Ethereum mainnet" label="Number of buyers" /> mintersRef(node)} labelKey="nft_minters" timeRange={timeMap[timeRange]} netLabel="Ethereum mainnet" label="Number of creators" /> */} New NFTs {/* */} NFT creators {/* */} NFT Buyers {/* */} Transaction volume {/* */} Transaction value {/* */} ); }; Analytics.getLayout = getLayout; export default Analytics;