nft dashboard works with mock data

pull/237/head
Tim Pechersky 2021-09-08 17:47:45 +02:00
rodzic d4a5a2b1e8
commit 611a9c3cf4
8 zmienionych plików z 530 dodań i 182 usunięć

Wyświetl plik

@ -15,6 +15,7 @@
"@emotion/react": "^11.4.0",
"@emotion/styled": "^11.3.0",
"@nivo/bar": "^0.73.1",
"@nivo/core": "^0.73.0",
"@stripe/stripe-js": "^1.16.0",
"axios": "^0.21.1",
"focus-visible": "^5.2.0",

Wyświetl plik

@ -6,6 +6,7 @@ import "highlight.js/styles/github.css";
import "focus-visible/dist/focus-visible";
import dynamic from "next/dynamic";
import { QueryClient, QueryClientProvider } from "react-query";
import { ReactQueryDevtools } from "react-query/devtools";
const HeadSEO = dynamic(() => import("../src/components/HeadSEO"), {
ssr: false,
@ -69,6 +70,7 @@ export default function CachingApp({ Component, pageProps }) {
{pageProps.metaTags && <HeadSEO {...pageProps.metaTags} />}
<HeadLinks links={headLinks} />
<QueryClientProvider client={queryClient}>
<ReactQueryDevtools initialIsOpen={false} />
<AppContext>{getLayout(<Component {...pageProps} />)}</AppContext>
</QueryClientProvider>
</>

Wyświetl plik

@ -6,12 +6,13 @@ import React, {
useState,
} from "react";
import { getLayout } from "../src/layouts/AppLayout";
import { Spinner, Flex, Heading, Stack } from "@chakra-ui/react";
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";
@ -25,7 +26,7 @@ const Analytics = () => {
const windowSize = useWindowSize();
useEffect(() => {
if (typeof window !== "undefined") {
document.title = `Analytics: Page under construction`;
document.title = `NFT Analytics`;
}
}, []);
@ -33,11 +34,15 @@ const Analytics = () => {
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) => {
@ -67,13 +72,40 @@ const Analytics = () => {
[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_];
const items = [
nTxRef_,
valueRef_,
mintsRef_,
uniqueNFTOwnersRef_,
mintersRef_,
];
console.log("useeffect fired");
if (nTxRef_.current) {
if (items.some((item) => !!item.current)) {
console.log("brder fun");
var firstItemInCurrentRow = items[0];
items.forEach((item) => {
if (item.current) {
@ -99,7 +131,12 @@ const Analytics = () => {
}
}, [nodesReady, windowSize]);
const keys = ["NFTs", "Other"];
if (nftCache.isLoading) return <Spinner />;
const plotMinW = "500px";
return (
<Scrollable>
<Flex
@ -111,20 +148,22 @@ const Analytics = () => {
alignItems="center"
minH="100vh"
>
<Heading as="h1" py={4} fontSize={["md", "xl"]}>
NFT market analysis
</Heading>
<RangeSelector
placeSelf="flex-start"
initialRange={timeRange}
ranges={Object.keys(timeMap)}
size={["sm", "md", null]}
onChange={(e) => setTimeRange(e)}
/>
<Stack direction="row" w="100%" placeItems="center">
<Heading as="h1" py={2} fontSize={["md", "xl"]}>
NFT market analysis
</Heading>
<Spacer />
<RangeSelector
initialRange={timeRange}
ranges={Object.keys(timeMap)}
size={["sm", "md", null]}
onChange={(e) => setTimeRange(e)}
/>
</Stack>
<Stack
w="100%"
wrap="wrap"
my={12}
my={2}
h="auto"
direction="row"
minW="240px"
@ -132,33 +171,207 @@ const Analytics = () => {
boxShadow="md"
borderRadius="lg"
bgColor="gray.100"
// divider={<StackDivider borderColor="gray.800" />}
>
<StatsCard
ref={(node) => nTxRef(node)}
// borderTopLeftRadius="inherit"
labelKey="transactions"
labelKey="nft_transfers"
totalKey="num_transactions"
timeRange={timeMap[timeRange]}
netLabel="Ethereum mainnet"
label="Number of transactions"
/>
<StatsCard
ref={(node) => valueRef(node)}
labelKey="values"
labelKey="nft_transfer_value"
totalKey="total_value"
timeRange={timeMap[timeRange]}
netLabel="Ethereum mainnet"
label="Value of transactions"
/>
<StatsCard
ref={(node) => mintsRef(node)}
// borderTopRightRadius="inherit"
// borderRightWidth="0"
labelKey="mints"
labelKey="nft_mints"
timeRange={timeMap[timeRange]}
netLabel="Ethereum mainnet"
label="Minted NFTs"
/>
<StatsCard
ref={(node) => uniqueNFTOwnersRef(node)}
labelKey="nft_owners"
timeRange={timeMap[timeRange]}
netLabel="Ethereum mainnet"
label="NFTs owners"
/>
<StatsCard
ref={(node) => mintersRef(node)}
labelKey="nft_minters"
timeRange={timeMap[timeRange]}
netLabel="Ethereum mainnet"
label="NFTs minters"
/>
</Stack>
<Flex w="100%" direction="row" flexWrap="wrap">
<Flex
flexBasis={plotMinW}
flexGrow={1}
minW={plotMinW}
minH="320px"
maxH="420px"
direction="column"
boxShadow="md"
m={2}
>
<Text
w="100%"
py={2}
bgColor="gray.50"
fontWeight="600"
textAlign="center"
>
NFT owners dynamic
</Text>
<NFTChart keyPosition={`nft_owners`} timeRange={timeRange} />
</Flex>
<Flex
flexBasis={plotMinW}
flexGrow={1}
minW={plotMinW}
minH="320px"
maxH="420px"
direction="column"
boxShadow="md"
m={2}
>
<Text
w="100%"
py={2}
bgColor="gray.50"
fontWeight="600"
textAlign="center"
>
NFT values compared to total
</Text>
<NFTChart
keyPosition={`nft_transfer_value`}
keyTotal={`total_value`}
timeRange={timeRange}
/>
</Flex>
<Flex
flexBasis={plotMinW}
flexGrow={1}
minW={plotMinW}
minH="320px"
maxH="420px"
direction="column"
boxShadow="md"
m={2}
>
<Text
w="100%"
py={2}
bgColor="gray.50"
fontWeight="600"
textAlign="center"
>
NFT Minting activity
</Text>
<NFTChart keyPosition={`nft_mints`} timeRange={timeRange} />
</Flex>
<Flex
flexBasis={plotMinW}
flexGrow={1}
minW={plotMinW}
minH="320px"
maxH="420px"
direction="column"
boxShadow="md"
m={2}
>
<Text
w="100%"
py={2}
bgColor="gray.50"
fontWeight="600"
textAlign="center"
>
Unique minters number
</Text>
<NFTChart keyPosition={`nft_minters`} timeRange={timeRange} />
</Flex>
<Flex
flexBasis={plotMinW}
flexGrow={1}
minW={plotMinW}
minH="320px"
maxH="420px"
direction="column"
boxShadow="md"
m={2}
>
<Text
w="100%"
py={2}
bgColor="gray.50"
fontWeight="600"
textAlign="center"
>
Number of NFT owners accounts
</Text>
<NFTChart keyPosition={`nft_owners`} timeRange={timeRange} />
</Flex>
<Flex
flexBasis={plotMinW}
flexGrow={1}
minW={plotMinW}
minH="320px"
maxH="420px"
direction="column"
boxShadow="md"
m={2}
>
<Text
w="100%"
py={2}
bgColor="gray.50"
fontWeight="600"
textAlign="center"
>
NFT transactions vs all Ethereum
</Text>
<NFTChart
keyPosition={`nft_transfers`}
keyTotal={`num_transactions`}
timeRange={timeRange}
/>
</Flex>
<Flex
flexBasis={plotMinW}
flexGrow={1}
minW={plotMinW}
minH="320px"
maxH="420px"
direction="column"
boxShadow="md"
m={2}
>
<Text
w="100%"
py={2}
bgColor="gray.50"
fontWeight="600"
textAlign="center"
>
NFT transfers vs all Ethereum
</Text>
<NFTChart
keyPosition={`nft_transfers`}
keyTotal={`num_transactions`}
timeRange={timeRange}
/>
</Flex>
</Flex>
</Flex>
</Scrollable>
);

Wyświetl plik

@ -0,0 +1,176 @@
import React, { useCallback } from "react";
import { Spinner } from "@chakra-ui/react";
import useNFTs from "../core/hooks/useNFTs";
import { ResponsiveBarCanvas } from "@nivo/bar";
import moment from "moment";
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 NFTChart = ({ timeRange, keyPosition, keyTotal }) => {
const { nftCache } = useNFTs();
const getHourlyData = useCallback(
(keyPosition, keyTotal) => {
const retval = [];
nftCache?.data?.forEach((block, idx) => {
let diff =
keyTotal && Number(block[keyTotal]) - Number(block[keyPosition]);
let date = moment(block.crawled_at).format(`HH`);
//group by days if not hour key
if (idx < 23) {
retval.push({
date: date,
NFTs: Number(block[keyPosition]),
Other: keyTotal && diff,
});
}
});
return retval;
},
[nftCache.data]
);
const getDailyData = useCallback(
(keyPosition, keyTotal) => {
const retval = [];
nftCache?.data?.forEach((block, idx) => {
if (idx < 7 * 24) {
let diff =
keyTotal && Number(block[keyTotal]) - Number(block[keyPosition]);
let date = moment(block.crawled_at).format(`l`);
let existingIdx = retval.findIndex(
(element) => element.date === date
);
if (existingIdx !== -1) {
const prevValue = retval[existingIdx];
const newValue = {
date: prevValue.date,
NFTs: prevValue.NFTs + Number(block[keyPosition]),
Other: prevValue.Other + Number(block[keyPosition]),
};
retval[existingIdx] = { ...newValue };
} else {
retval.push({
date: date,
NFTs: Number(block[keyPosition]),
Other: keyTotal && diff,
});
}
}
});
return retval;
},
[nftCache.data]
);
const getWeeklyData = useCallback(
(keyPosition, keyTotal) => {
const retval = [];
nftCache?.data?.forEach((block, idx) => {
if (idx < 28 * 24) {
let diff =
keyTotal && Number(block[keyTotal]) - Number(block[keyPosition]);
let date = moment(block.crawled_at).format(`l`);
let existingIdx = retval.findIndex(
(element) => element.date === date
);
if (existingIdx !== -1) {
const prevValue = retval[existingIdx];
const newValue = {
date: prevValue.date,
NFTs: prevValue.NFTs + Number(block[keyPosition]),
Other: prevValue.Other + Number(block[keyPosition]),
};
retval[existingIdx] = { ...newValue };
} else {
retval.push({
date: date,
NFTs: Number(block[keyPosition]),
Other: keyTotal && diff,
});
}
}
});
return retval;
},
[nftCache.data]
);
const plotData =
timeRange === HOUR_KEY
? getHourlyData(keyPosition, keyTotal)
: timeRange === DAY_KEY
? getDailyData(keyPosition, keyTotal)
: getWeeklyData(keyPosition, keyTotal);
plotData.forEach((item, index) => {
plotData[index].NFTs = plotData[index].NFTs / 1e18;
plotData[index].Other = plotData[index].Other / 1e18;
});
if (nftCache.isLoading) return <Spinner />;
return (
<ResponsiveBarCanvas
colors={["#7a7fbc", "#fe9a67"]}
animate={true}
data={plotData}
valueScale={{
type: "linear",
}}
enableLabel={false}
keys={keyTotal ? ["Other", "NFTs"] : ["NFTs"]}
padding={0}
axisBottom={
timeRange === WEEK_KEY
? null
: {
tickSize: 5,
tickPadding: 5,
tickRotation: 45,
// legend: "Time",
legendPosition: "middle",
legendOffset: 62,
}
}
indexBy="date"
offsetType="expand"
margin={{ top: 50, right: 110, bottom: 50, left: 60 }}
// legendLabel={(d) => labelLookup[d.id]}
// tooltipLabel={(d) => labelLookup[d.id]}
legends={[
{
anchor: "bottom-right",
direction: "column",
translateX: 100,
itemWidth: 80,
itemHeight: 20,
itemTextColor: "#999999",
symbolSize: 12,
symbolShape: "circle",
effects: [
{
on: "hover",
style: {
itemTextColor: "#000000",
},
},
],
},
]}
/>
);
};
export default NFTChart;

Wyświetl plik

@ -20,7 +20,7 @@ const RangeSelector_ = ({
}, [range, onChange]);
return (
<Stack direction="row" className={className}>
<Stack direction="row" className={className} h="min-content">
{ranges.map((item, idx) => {
const isActive = item === range ? true : false;
return (
@ -37,6 +37,7 @@ const RangeSelector_ = ({
bgColor: isActive ? "secondary.900" : "secondary.50",
}}
cursor="pointer"
py="2px"
>
{item}
</Container>

Wyświetl plik

@ -4,11 +4,6 @@ import { TriangleDownIcon, TriangleUpIcon } from "@chakra-ui/icons";
import useNFTs from "../core/hooks/useNFTs";
import { fromWei } from "web3-utils";
const TIME_PERIOD = {
current: 0,
previous: 1,
};
const isNumberNonzeroAndFinite = (str) => {
return !(isNaN(Number(str)) || Number(str) === 0);
};
@ -39,6 +34,7 @@ const nFormatter = (num, digits) => {
};
const getChange = (a, b) => {
console.log(`change:`, a, b);
if (isNumberNonzeroAndFinite(a) && isNumberNonzeroAndFinite(b)) {
let retval = (Math.abs(Number(a) - Number(b)) * 100) / Number(b);
retval =
@ -53,7 +49,7 @@ const getDiff = (a, b) => {
if (isNaN(a) || isNaN(b)) {
return "-";
} else {
return Number(a) - Number(b);
return Number(Number(a) - Number(b)).toFixed(2);
}
};
@ -67,26 +63,61 @@ const StatsCard_ = ({
label,
netLabel,
labelKey,
totalKey,
timeRange,
innerRef,
}) => {
console.log("stats card");
const { nftCache } = useNFTs();
const [nftData, setData] = useState();
useEffect(() => {
if (nftCache.data[TIME_PERIOD.current][labelKey][timeRange]) {
const cacheData = nftCache.data[TIME_PERIOD.current][labelKey][timeRange];
const prevCacheData =
nftCache.data[TIME_PERIOD.previous][labelKey][timeRange];
const valueChange = getChange(cacheData.amount, prevCacheData.amount);
const share = isNaN(cacheData.percentage)
? "-"
: Number(cacheData.percentage).toFixed(2);
const shareChange = getDiff(
cacheData.percentage,
prevCacheData.percentage
if (nftCache.data) {
const resolution =
timeRange === "hour" ? 1 : timeRange === "day" ? 24 : 24 * 7;
let currentPeriod = 0,
previousPeriod = 0,
currentTotalPeriod = 0,
previousTotalPeriod = 0;
for (let i = 0; i < resolution; i++) {
currentPeriod += Number(nftCache.data[i][labelKey]);
previousPeriod += Number(nftCache.data[resolution + i][labelKey]);
if (totalKey) {
currentTotalPeriod += Number(nftCache.data[i][totalKey]);
previousTotalPeriod += Number(
nftCache.data[resolution + i][totalKey]
);
}
}
console.log(
"card,",
totalKey,
labelKey,
currentPeriod,
currentTotalPeriod
);
// percentage =
// const cacheData = nftCache.data[TIME_PERIOD.current][labelKey][timeRange];
// const prevCacheData =
// nftCache.data[TIME_PERIOD.previous][labelKey][timeRange];
const valueChange = getChange(currentPeriod, previousPeriod);
totalKey &&
console.log(
"getting change in share",
currentPeriod,
currentTotalPeriod
);
const share = !totalKey
? "-"
: getChange(currentPeriod, currentTotalPeriod);
const shareChange = getDiff(
share,
getChange(previousPeriod, previousTotalPeriod)
);
totalKey && console.log("share", share);
setData({
dimension: labelKey === "values" ? "Eth" : "#",
@ -96,12 +127,13 @@ const StatsCard_ = ({
shareChange,
share,
value:
labelKey === "values"
? getEthValue(cacheData.amount)
: nFormatter(cacheData.amount, 2),
labelKey === "total_value"
? getEthValue(currentPeriod)
: nFormatter(currentPeriod, 2),
});
}
}, [nftCache?.data, nftCache.isLoading, labelKey, timeRange]);
}, [nftCache?.data, nftCache.isLoading, labelKey, totalKey, timeRange]);
console.log("nftData", nftData);
if (nftCache.isLoading || !nftData) return "";
return (

Wyświetl plik

@ -19,6 +19,9 @@ export const makenum = (length) => {
for (var i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
if (result[0] === "0") {
result = "1" + result.slice(1, result.length);
}
return result;
};
@ -27,6 +30,28 @@ const randDate = () => {
new Date(+new Date() - Math.floor(Math.random() * 10000000000))
).format("MM/DD/YYYY");
};
const generateMockNFTData = (days) => {
const retArr = [];
console.log("calculating array...");
for (let i = 0; i < days * 24; i++) {
let total_value = makenum(23);
let nft_transfer_value = makenum(22);
retArr.push({
num_transactions: makenum(5),
total_value: total_value.toString(),
nft_transfers: makenum(4),
nft_transfer_value: nft_transfer_value.toString(),
nft_mints: makenum(4),
nft_owners: makenum(4),
nft_minters: makenum(4),
crawled_at: moment.utc().subtract(i, "hours"),
});
}
return retArr;
};
const mockNFTData = generateMockNFTData(100);
export let MockSubscriptions = [
{
label: "Bobs wallet",
@ -74,132 +99,7 @@ const enableMockupRequests = (axiosInstance) => {
//assume all currency units are in wei
mock.onGet(`${MOCK_API}/nft`).reply(200, {
data: [
{
crawled_at: "2021-09-06T06:10:10.889073+00:00",
blocks: {
hour: {
start: 13170228,
end: 13271506,
},
day: {
start: 13164032,
end: 14270506,
},
week: {
start: 13154612,
end: 14270508,
},
},
transactions: {
hour: {
total: "50017",
amount: "1076",
percentage: "6.323468771476769",
},
day: {
total: "1534628",
amount: "68423",
percentage: "4.149088511829428",
},
week: {
total: "3036720",
amount: "252081",
percentage: "2.3611565469979405",
},
},
values: {
hour: {
total: "32108237248132871265869",
amount: "902575483711416563753",
percentage: "3.222693614745530439610725634",
},
day: {
total: "1248742881687945808996123",
amount: "36532034623835761073277",
percentage: "2.967167722185197815518956241",
},
week: {
total: "4496907645654832424013847",
amount: "171796514135927551452190",
percentage: "4.053142988352582169869986652",
},
},
mints: {
hour: {
amount: 1884,
},
day: {
amount: 45131,
},
week: {
amount: 1281978,
},
},
},
{
crawled_at: "2021-09-06T06:10:10.889073+00:00",
blocks: {
hour: {
start: 13170228,
end: 13170506,
},
day: {
start: 13164032,
end: 13170506,
},
week: {
start: 13154612,
end: 13170508,
},
},
transactions: {
hour: {
total: "48017",
amount: "2076",
percentage: "4.323468771476769",
},
day: {
total: "1134628",
amount: "58423",
percentage: "5.149088511829428",
},
week: {
total: "2836720",
amount: "152081",
percentage: "5.3611565469979405",
},
},
values: {
hour: {
total: "36108237248132871265869",
amount: "802575483711416563753",
percentage: "2.222693614745530439610725634",
},
day: {
total: "1348742881687945808996123",
amount: "26532034623835761073277",
percentage: "1.967167722185197815518956241",
},
week: {
total: "3496907645654832424013847",
amount: "71796514135927551452190",
percentage: "2.053142988352582169869986652",
},
},
mints: {
hour: {
amount: 2884,
},
day: {
amount: 95131,
},
week: {
amount: 281978,
},
},
},
],
data: [...mockNFTData],
});
// mock.onGet(`${MOCK_API}/subscription_types/`).reply(200, {
@ -245,7 +145,7 @@ const enableMockupRequests = (axiosInstance) => {
// gas: 2265656,
// gasPrice: 1000000000,
// hash: "0x5f0b6e212e55c7120f36fe6f88d46eb001c848064fd099116b42805bb3564ae6",
// value: 0,
// values: 0,
// input:
// "0x606061026b61014039602061026b60c03960c05160a01c1561002057600080fd5b61014051600055610160516001556001546101805181818301101561004457600080fd5b80820190509050600255600254421061005c57600080fd5b61025356600436101561000d576101ec565b600035601c52600051631998aeef8114156100855760015442101561003157600080fd5b600254421061003f57600080fd5b600454341161004d57600080fd5b600660035460e05260c052604060c020805460045481818301101561007157600080fd5b808201905090508155503360035534600455005b341561009057600080fd5b633ccfd60b8114156100db5760063360e05260c052604060c0205461014052600060063360e05260c052604060c02055600060006000600061014051336000f16100d957600080fd5b005b63fe67a54b811415610124576002544210156100f657600080fd5b6005541561010357600080fd5b600160055560006000600060006004546000546000f161012257600080fd5b005b6338af3eed81141561013c5760005460005260206000f35b634f245ef78114156101545760015460005260206000f35b632a24f46c81141561016c5760025460005260206000f35b6391f901578114156101845760035460005260206000f35b63d57bde7981141561019c5760045460005260206000f35b6312fa6feb8114156101b45760055460005260206000f35b6326b387bb8114156101ea5760043560a01c156101d057600080fd5b600660043560e05260c052604060c0205460005260206000f35b505b60006000fd5b61006161025303610061600039610061610253036000f30000000000000000000000002e337e0fb68f5e51ce9295e80bcd02273d7420c40000000000000000000000000000000000000000000000000000000060d2b04a00000000000000000000000000000000000000000000000000000000616b46ca",
// },
@ -257,7 +157,7 @@ const enableMockupRequests = (axiosInstance) => {
// gas: 2265656,
// gasPrice: 1000000000,
// hash: "0x5f0b6e212e55c7120f36fe6f88d46eb001c848064fd099116b42805bb3564ae6",
// value: 0,
// values: 0,
// input:
// "0x606061026b61014039602061026b60c03960c05160a01c1561002057600080fd5b61014051600055610160516001556001546101805181818301101561004457600080fd5b80820190509050600255600254421061005c57600080fd5b61025356600436101561000d576101ec565b600035601c52600051631998aeef8114156100855760015442101561003157600080fd5b600254421061003f57600080fd5b600454341161004d57600080fd5b600660035460e05260c052604060c020805460045481818301101561007157600080fd5b808201905090508155503360035534600455005b341561009057600080fd5b633ccfd60b8114156100db5760063360e05260c052604060c0205461014052600060063360e05260c052604060c02055600060006000600061014051336000f16100d957600080fd5b005b63fe67a54b811415610124576002544210156100f657600080fd5b6005541561010357600080fd5b600160055560006000600060006004546000546000f161012257600080fd5b005b6338af3eed81141561013c5760005460005260206000f35b634f245ef78114156101545760015460005260206000f35b632a24f46c81141561016c5760025460005260206000f35b6391f901578114156101845760035460005260206000f35b63d57bde7981141561019c5760045460005260206000f35b6312fa6feb8114156101b45760055460005260206000f35b6326b387bb8114156101ea5760043560a01c156101d057600080fd5b600660043560e05260c052604060c0205460005260206000f35b505b60006000fd5b61006161025303610061600039610061610253036000f30000000000000000000000002e337e0fb68f5e51ce9295e80bcd02273d7420c40000000000000000000000000000000000000000000000000000000060d2b04a00000000000000000000000000000000000000000000000000000000616b46ca",
// },
@ -269,7 +169,7 @@ const enableMockupRequests = (axiosInstance) => {
// gas: 2265656,
// gasPrice: 1000000000,
// hash: "0x5f0b6e212e55c7120f36fe6f88d46eb001c848064fd099116b42805bb3564ae6",
// value: 0,
// values: 0,
// input:
// "0x606061026b61014039602061026b60c03960c05160a01c1561002057600080fd5b61014051600055610160516001556001546101805181818301101561004457600080fd5b80820190509050600255600254421061005c57600080fd5b61025356600436101561000d576101ec565b600035601c52600051631998aeef8114156100855760015442101561003157600080fd5b600254421061003f57600080fd5b600454341161004d57600080fd5b600660035460e05260c052604060c020805460045481818301101561007157600080fd5b808201905090508155503360035534600455005b341561009057600080fd5b633ccfd60b8114156100db5760063360e05260c052604060c0205461014052600060063360e05260c052604060c02055600060006000600061014051336000f16100d957600080fd5b005b63fe67a54b811415610124576002544210156100f657600080fd5b6005541561010357600080fd5b600160055560006000600060006004546000546000f161012257600080fd5b005b6338af3eed81141561013c5760005460005260206000f35b634f245ef78114156101545760015460005260206000f35b632a24f46c81141561016c5760025460005260206000f35b6391f901578114156101845760035460005260206000f35b63d57bde7981141561019c5760045460005260206000f35b6312fa6feb8114156101b45760055460005260206000f35b6326b387bb8114156101ea5760043560a01c156101d057600080fd5b600660043560e05260c052604060c0205460005260206000f35b505b60006000fd5b61006161025303610061600039610061610253036000f30000000000000000000000002e337e0fb68f5e51ce9295e80bcd02273d7420c40000000000000000000000000000000000000000000000000000000060d2b04a00000000000000000000000000000000000000000000000000000000616b46ca",
// },
@ -281,7 +181,7 @@ const enableMockupRequests = (axiosInstance) => {
// gas: 2265656,
// gasPrice: 1000000000,
// hash: "0x5f0b6e212e55c7120f36fe6f88d46eb001c848064fd099116b42805bb3564ae6",
// value: 0,
// values: 0,
// input:
// "0x606061026b61014039602061026b60c03960c05160a01c1561002057600080fd5b61014051600055610160516001556001546101805181818301101561004457600080fd5b80820190509050600255600254421061005c57600080fd5b61025356600436101561000d576101ec565b600035601c52600051631998aeef8114156100855760015442101561003157600080fd5b600254421061003f57600080fd5b600454341161004d57600080fd5b600660035460e05260c052604060c020805460045481818301101561007157600080fd5b808201905090508155503360035534600455005b341561009057600080fd5b633ccfd60b8114156100db5760063360e05260c052604060c0205461014052600060063360e05260c052604060c02055600060006000600061014051336000f16100d957600080fd5b005b63fe67a54b811415610124576002544210156100f657600080fd5b6005541561010357600080fd5b600160055560006000600060006004546000546000f161012257600080fd5b005b6338af3eed81141561013c5760005460005260206000f35b634f245ef78114156101545760015460005260206000f35b632a24f46c81141561016c5760025460005260206000f35b6391f901578114156101845760035460005260206000f35b63d57bde7981141561019c5760045460005260206000f35b6312fa6feb8114156101b45760055460005260206000f35b6326b387bb8114156101ea5760043560a01c156101d057600080fd5b600660043560e05260c052604060c0205460005260206000f35b505b60006000fd5b61006161025303610061600039610061610253036000f30000000000000000000000002e337e0fb68f5e51ce9295e80bcd02273d7420c40000000000000000000000000000000000000000000000000000000060d2b04a00000000000000000000000000000000000000000000000000000000616b46ca",
// },
@ -293,7 +193,7 @@ const enableMockupRequests = (axiosInstance) => {
// gas: 2265656,
// gasPrice: 1000000000,
// hash: "0x5f0b6e212e55c7120f36fe6f88d46eb001c848064fd099116b42805bb3564ae6",
// value: 0,
// values: 0,
// input:
// "0x606061026b61014039602061026b60c03960c05160a01c1561002057600080fd5b61014051600055610160516001556001546101805181818301101561004457600080fd5b80820190509050600255600254421061005c57600080fd5b61025356600436101561000d576101ec565b600035601c52600051631998aeef8114156100855760015442101561003157600080fd5b600254421061003f57600080fd5b600454341161004d57600080fd5b600660035460e05260c052604060c020805460045481818301101561007157600080fd5b808201905090508155503360035534600455005b341561009057600080fd5b633ccfd60b8114156100db5760063360e05260c052604060c0205461014052600060063360e05260c052604060c02055600060006000600061014051336000f16100d957600080fd5b005b63fe67a54b811415610124576002544210156100f657600080fd5b6005541561010357600080fd5b600160055560006000600060006004546000546000f161012257600080fd5b005b6338af3eed81141561013c5760005460005260206000f35b634f245ef78114156101545760015460005260206000f35b632a24f46c81141561016c5760025460005260206000f35b6391f901578114156101845760035460005260206000f35b63d57bde7981141561019c5760045460005260206000f35b6312fa6feb8114156101b45760055460005260206000f35b6326b387bb8114156101ea5760043560a01c156101d057600080fd5b600660043560e05260c052604060c0205460005260206000f35b505b60006000fd5b61006161025303610061600039610061610253036000f30000000000000000000000002e337e0fb68f5e51ce9295e80bcd02273d7420c40000000000000000000000000000000000000000000000000000000060d2b04a00000000000000000000000000000000000000000000000000000000616b46ca",
// },
@ -305,7 +205,7 @@ const enableMockupRequests = (axiosInstance) => {
// gas: 2265656,
// gasPrice: 1000000000,
// hash: "0x5f0b6e212e55c7120f36fe6f88d46eb001c848064fd099116b42805bb3564ae6",
// value: 0,
// values: 0,
// input:
// "0x606061026b61014039602061026b60c03960c05160a01c1561002057600080fd5b61014051600055610160516001556001546101805181818301101561004457600080fd5b80820190509050600255600254421061005c57600080fd5b61025356600436101561000d576101ec565b600035601c52600051631998aeef8114156100855760015442101561003157600080fd5b600254421061003f57600080fd5b600454341161004d57600080fd5b600660035460e05260c052604060c020805460045481818301101561007157600080fd5b808201905090508155503360035534600455005b341561009057600080fd5b633ccfd60b8114156100db5760063360e05260c052604060c0205461014052600060063360e05260c052604060c02055600060006000600061014051336000f16100d957600080fd5b005b63fe67a54b811415610124576002544210156100f657600080fd5b6005541561010357600080fd5b600160055560006000600060006004546000546000f161012257600080fd5b005b6338af3eed81141561013c5760005460005260206000f35b634f245ef78114156101545760015460005260206000f35b632a24f46c81141561016c5760025460005260206000f35b6391f901578114156101845760035460005260206000f35b63d57bde7981141561019c5760045460005260206000f35b6312fa6feb8114156101b45760055460005260206000f35b6326b387bb8114156101ea5760043560a01c156101d057600080fd5b600660043560e05260c052604060c0205460005260206000f35b505b60006000fd5b61006161025303610061600039610061610253036000f30000000000000000000000002e337e0fb68f5e51ce9295e80bcd02273d7420c40000000000000000000000000000000000000000000000000000000060d2b04a00000000000000000000000000000000000000000000000000000000616b46ca",
// },
@ -317,7 +217,7 @@ const enableMockupRequests = (axiosInstance) => {
// gas: 2265656,
// gasPrice: 1000000000,
// hash: "0x5f0b6e212e55c7120f36fe6f88d46eb001c848064fd099116b42805bb3564ae6",
// value: 0,
// values: 0,
// input:
// "0x606061026b61014039602061026b60c03960c05160a01c1561002057600080fd5b61014051600055610160516001556001546101805181818301101561004457600080fd5b80820190509050600255600254421061005c57600080fd5b61025356600436101561000d576101ec565b600035601c52600051631998aeef8114156100855760015442101561003157600080fd5b600254421061003f57600080fd5b600454341161004d57600080fd5b600660035460e05260c052604060c020805460045481818301101561007157600080fd5b808201905090508155503360035534600455005b341561009057600080fd5b633ccfd60b8114156100db5760063360e05260c052604060c0205461014052600060063360e05260c052604060c02055600060006000600061014051336000f16100d957600080fd5b005b63fe67a54b811415610124576002544210156100f657600080fd5b6005541561010357600080fd5b600160055560006000600060006004546000546000f161012257600080fd5b005b6338af3eed81141561013c5760005460005260206000f35b634f245ef78114156101545760015460005260206000f35b632a24f46c81141561016c5760025460005260206000f35b6391f901578114156101845760035460005260206000f35b63d57bde7981141561019c5760045460005260206000f35b6312fa6feb8114156101b45760055460005260206000f35b6326b387bb8114156101ea5760043560a01c156101d057600080fd5b600660043560e05260c052604060c0205460005260206000f35b505b60006000fd5b61006161025303610061600039610061610253036000f30000000000000000000000002e337e0fb68f5e51ce9295e80bcd02273d7420c40000000000000000000000000000000000000000000000000000000060d2b04a00000000000000000000000000000000000000000000000000000000616b46ca",
// },
@ -329,7 +229,7 @@ const enableMockupRequests = (axiosInstance) => {
// gas: 2265656,
// gasPrice: 1000000000,
// hash: "0x5f0b6e212e55c7120f36fe6f88d46eb001c848064fd099116b42805bb3564ae6",
// value: 0,
// values: 0,
// input:
// "0x606061026b61014039602061026b60c03960c05160a01c1561002057600080fd5b61014051600055610160516001556001546101805181818301101561004457600080fd5b80820190509050600255600254421061005c57600080fd5b61025356600436101561000d576101ec565b600035601c52600051631998aeef8114156100855760015442101561003157600080fd5b600254421061003f57600080fd5b600454341161004d57600080fd5b600660035460e05260c052604060c020805460045481818301101561007157600080fd5b808201905090508155503360035534600455005b341561009057600080fd5b633ccfd60b8114156100db5760063360e05260c052604060c0205461014052600060063360e05260c052604060c02055600060006000600061014051336000f16100d957600080fd5b005b63fe67a54b811415610124576002544210156100f657600080fd5b6005541561010357600080fd5b600160055560006000600060006004546000546000f161012257600080fd5b005b6338af3eed81141561013c5760005460005260206000f35b634f245ef78114156101545760015460005260206000f35b632a24f46c81141561016c5760025460005260206000f35b6391f901578114156101845760035460005260206000f35b63d57bde7981141561019c5760045460005260206000f35b6312fa6feb8114156101b45760055460005260206000f35b6326b387bb8114156101ea5760043560a01c156101d057600080fd5b600660043560e05260c052604060c0205460005260206000f35b505b60006000fd5b61006161025303610061600039610061610253036000f30000000000000000000000002e337e0fb68f5e51ce9295e80bcd02273d7420c40000000000000000000000000000000000000000000000000000000060d2b04a00000000000000000000000000000000000000000000000000000000616b46ca",
// },
@ -341,7 +241,7 @@ const enableMockupRequests = (axiosInstance) => {
// gas: 2265656,
// gasPrice: 1000000000,
// hash: "0x5f0b6e212e55c7120f36fe6f88d46eb001c848064fd099116b42805bb3564ae6",
// value: 0,
// values: 0,
// input:
// "0x606061026b61014039602061026b60c03960c05160a01c1561002057600080fd5b61014051600055610160516001556001546101805181818301101561004457600080fd5b80820190509050600255600254421061005c57600080fd5b61025356600436101561000d576101ec565b600035601c52600051631998aeef8114156100855760015442101561003157600080fd5b600254421061003f57600080fd5b600454341161004d57600080fd5b600660035460e05260c052604060c020805460045481818301101561007157600080fd5b808201905090508155503360035534600455005b341561009057600080fd5b633ccfd60b8114156100db5760063360e05260c052604060c0205461014052600060063360e05260c052604060c02055600060006000600061014051336000f16100d957600080fd5b005b63fe67a54b811415610124576002544210156100f657600080fd5b6005541561010357600080fd5b600160055560006000600060006004546000546000f161012257600080fd5b005b6338af3eed81141561013c5760005460005260206000f35b634f245ef78114156101545760015460005260206000f35b632a24f46c81141561016c5760025460005260206000f35b6391f901578114156101845760035460005260206000f35b63d57bde7981141561019c5760045460005260206000f35b6312fa6feb8114156101b45760055460005260206000f35b6326b387bb8114156101ea5760043560a01c156101d057600080fd5b600660043560e05260c052604060c0205460005260206000f35b505b60006000fd5b61006161025303610061600039610061610253036000f30000000000000000000000002e337e0fb68f5e51ce9295e80bcd02273d7420c40000000000000000000000000000000000000000000000000000000060d2b04a00000000000000000000000000000000000000000000000000000000616b46ca",
// },
@ -353,7 +253,7 @@ const enableMockupRequests = (axiosInstance) => {
// gas: 2265656,
// gasPrice: 1000000000,
// hash: "0x5f0b6e212e55c7120f36fe6f88d46eb001c848064fd099116b42805bb3564ae6",
// value: 0,
// values: 0,
// input:
// "0x606061026b61014039602061026b60c03960c05160a01c1561002057600080fd5b61014051600055610160516001556001546101805181818301101561004457600080fd5b80820190509050600255600254421061005c57600080fd5b61025356600436101561000d576101ec565b600035601c52600051631998aeef8114156100855760015442101561003157600080fd5b600254421061003f57600080fd5b600454341161004d57600080fd5b600660035460e05260c052604060c020805460045481818301101561007157600080fd5b808201905090508155503360035534600455005b341561009057600080fd5b633ccfd60b8114156100db5760063360e05260c052604060c0205461014052600060063360e05260c052604060c02055600060006000600061014051336000f16100d957600080fd5b005b63fe67a54b811415610124576002544210156100f657600080fd5b6005541561010357600080fd5b600160055560006000600060006004546000546000f161012257600080fd5b005b6338af3eed81141561013c5760005460005260206000f35b634f245ef78114156101545760015460005260206000f35b632a24f46c81141561016c5760025460005260206000f35b6391f901578114156101845760035460005260206000f35b63d57bde7981141561019c5760045460005260206000f35b6312fa6feb8114156101b45760055460005260206000f35b6326b387bb8114156101ea5760043560a01c156101d057600080fd5b600660043560e05260c052604060c0205460005260206000f35b505b60006000fd5b61006161025303610061600039610061610253036000f30000000000000000000000002e337e0fb68f5e51ce9295e80bcd02273d7420c40000000000000000000000000000000000000000000000000000000060d2b04a00000000000000000000000000000000000000000000000000000000616b46ca",
// },

Wyświetl plik

@ -1299,6 +1299,24 @@
lodash "^4.17.21"
react-motion "^0.5.2"
"@nivo/core@^0.73.0":
version "0.73.0"
resolved "https://registry.yarnpkg.com/@nivo/core/-/core-0.73.0.tgz#58fac20c8cd7eac12bfdc96619554764ca225cdf"
integrity sha512-NFKSk5NQgC2NB3olG8hltN4b4Ri0rB0vt3q1yGmQj+RdGRS4f82Dtwt5Ratxu6QeZD8lt0DhqN9Q7TJ+j/kt0g==
dependencies:
"@nivo/recompose" "0.73.0"
"@react-spring/web" "9.2.4"
d3-color "^2.0.0"
d3-format "^1.4.4"
d3-hierarchy "^1.1.8"
d3-interpolate "^2.0.1"
d3-scale "^3.2.3"
d3-scale-chromatic "^2.0.0"
d3-shape "^1.3.5"
d3-time-format "^3.0.0"
lodash "^4.17.21"
resize-observer-polyfill "^1.5.1"
"@nivo/legends@0.73.0":
version "0.73.0"
resolved "https://registry.yarnpkg.com/@nivo/legends/-/legends-0.73.0.tgz#ef344038c4ff03249ffffebaf14412d012004fda"
@ -2596,7 +2614,12 @@ d3-format@^1.4.4:
resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.5.tgz#374f2ba1320e3717eb74a9356c67daee17a7edb4"
integrity sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==
"d3-interpolate@1 - 2", "d3-interpolate@1.2.0 - 2":
d3-hierarchy@^1.1.8:
version "1.1.9"
resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz#2f6bee24caaea43f8dc37545fa01628559647a83"
integrity sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==
"d3-interpolate@1 - 2", "d3-interpolate@1.2.0 - 2", d3-interpolate@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-2.0.1.tgz#98be499cfb8a3b94d4ff616900501a64abc91163"
integrity sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==
@ -2627,7 +2650,7 @@ d3-scale@^3.2.3:
d3-time "^2.1.1"
d3-time-format "2 - 3"
d3-shape@^1.2.2:
d3-shape@^1.2.2, d3-shape@^1.3.5:
version "1.3.7"
resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7"
integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==