diff --git a/frontend/package.json b/frontend/package.json index 4838de41..4c99fbd4 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -39,7 +39,7 @@ "react-hook-form": "^6.9.2", "react-hubspot-form": "^1.3.7", "react-icons": "^4.3.1", - "react-pro-sidebar": "^0.6.0", + "react-pro-sidebar": "^0.7.1", "react-query": "^3.18.1", "react-showdown": "^2.3.0", "react-slick": "^0.28.1", diff --git a/frontend/pages/dashboard/[dashboardId].js b/frontend/pages/dashboard/[dashboardId].js index 713e4fa5..5c2eedd8 100644 --- a/frontend/pages/dashboard/[dashboardId].js +++ b/frontend/pages/dashboard/[dashboardId].js @@ -20,7 +20,6 @@ import { useRouter, useSubscriptions } from "../../src/core/hooks"; import { BiTrash } from "react-icons/bi"; import OverlayContext from "../../src/core/providers/OverlayProvider/context"; import SubscriptionReport from "../../src/components/SubscriptionReport"; -import { v4 } from "uuid"; import { DRAWER_TYPES } from "../../src/core/providers/OverlayProvider/constants"; import Page404 from "../../src/components/FourOFour"; import { BsGear } from "react-icons/bs"; @@ -158,7 +157,7 @@ const Analytics = () => { )?.label; return ( { {ui.isMobileView && - ALL_NAV_PATHES.map((pathToLink) => { + ALL_NAV_PATHES.map((pathToLink, idx) => { return ( - + {pathToLink.title} diff --git a/frontend/src/components/AutoCompleter.js b/frontend/src/components/AutoCompleter.js index a8227379..464ce719 100644 --- a/frontend/src/components/AutoCompleter.js +++ b/frontend/src/components/AutoCompleter.js @@ -1,6 +1,5 @@ import React, { useContext } from "react"; import Downshift from "downshift"; -import { v4 } from "uuid"; import { Stack, Box, @@ -124,7 +123,7 @@ const AutoCompleter = ({ px={4} py={1} alignItems="center" - key={v4()} + key={`autocomplete-item-${index}`} {...getItemProps({ index, item, diff --git a/frontend/src/components/CheckboxABI.js b/frontend/src/components/CheckboxABI.js index b22355e9..8a830c62 100644 --- a/frontend/src/components/CheckboxABI.js +++ b/frontend/src/components/CheckboxABI.js @@ -144,102 +144,4 @@ const SuggestABI = ({ subscriptionId, state }) => { const ChakraSuggestABI = chakra(SuggestABI); -export default ChakraSuggestABI; - -{ - /* -{getEvents(pickerItems).map((event, idx) => { - const pickedEvents = getEvents(pickedItems); - return ( - - pickedEvent.value === event.value - )} - onChange={() => { - const changedIndex = pickedItems.findIndex( - (pickedItem) => - event.type === "event" && - pickedItem.value === event.value - ); - if (changedIndex === -1) { - setPickedItems((currentlyPicked) => { - const newPicked = [...currentlyPicked]; - newPicked.push(event); - return newPicked; - }); - } else { - setPickedItems((currentlyPicked) => { - const newPicked = [...currentlyPicked]; - newPicked.splice(changedIndex, 1); - return newPicked; - }); - } - }} - > - {event.value} - - - {event.stateMutability === "view" && ( - - View - - )} - {event.stateMutability === "payable" && ( - - Payable - - )} - {event.stateMutability === "nonpayable" && ( - - Non-Payable - - )} - - ); -})} -{pickerItems - ?.filter((unfilteredItem) => unfilteredItem.type === "function") - .map((item, idx) => { - return ( - - - item.type === "function" && - pickedItem.value === item.value - )} - > - {item.value} - - - {item.stateMutability === "view" && ( - - View - - )} - {item.stateMutability === "payable" && ( - - Payable - - )} - {item.stateMutability === "nonpayable" && ( - - Non-Payable - - )} - - ); - })} - */ -} +export default ChakraSuggestABI; \ No newline at end of file diff --git a/frontend/src/components/CheckboxGrouped.js b/frontend/src/components/CheckboxGrouped.js index 7866668c..ea63fd80 100644 --- a/frontend/src/components/CheckboxGrouped.js +++ b/frontend/src/components/CheckboxGrouped.js @@ -1,6 +1,5 @@ import React from "react"; import { Stack, Checkbox } from "@chakra-ui/react"; -import { v4 } from "uuid"; const CheckboxGroupped = ({ groupName, @@ -27,7 +26,7 @@ const CheckboxGroupped = ({ return ( diff --git a/frontend/src/components/Footer.js b/frontend/src/components/Footer.js index b65044bd..174da02f 100644 --- a/frontend/src/components/Footer.js +++ b/frontend/src/components/Footer.js @@ -110,9 +110,9 @@ const Footer = () => ( - {Object.values(FOOTER_COLUMNS).map((columnEnum) => { + {Object.values(FOOTER_COLUMNS).map((columnEnum, colIndex) => { return ( - + {ALL_NAV_PATHES.filter( (navPath) => navPath.footerCategory === columnEnum ).length > 0 && ( @@ -120,9 +120,13 @@ const Footer = () => ( {columnEnum} {ALL_NAV_PATHES.filter( (navPath) => navPath.footerCategory === columnEnum - ).map((linkItem) => { + ).map((linkItem, linkItemIndex) => { return ( - + {linkItem.title} ); diff --git a/frontend/src/components/Report.js b/frontend/src/components/Report.js index 2b8d676b..87f43a41 100644 --- a/frontend/src/components/Report.js +++ b/frontend/src/components/Report.js @@ -103,4 +103,4 @@ const Report = ({ data, timeRange }) => { ); }; -export default Report; +export default React.memo(Report); diff --git a/frontend/src/components/Sidebar.js b/frontend/src/components/Sidebar.js index db408473..70e75a65 100644 --- a/frontend/src/components/Sidebar.js +++ b/frontend/src/components/Sidebar.js @@ -102,9 +102,9 @@ const Sidebar = () => { Login {ui.isMobileView && - ALL_NAV_PATHES.map((pathToLink) => { + ALL_NAV_PATHES.map((pathToLink, linkItemIndex) => { return ( - + {pathToLink.title} diff --git a/frontend/src/components/SubscriptionReport.js b/frontend/src/components/SubscriptionReport.js index 735b05fb..185bbef4 100644 --- a/frontend/src/components/SubscriptionReport.js +++ b/frontend/src/components/SubscriptionReport.js @@ -1,4 +1,4 @@ -import React from "react"; +import React, { useMemo } from "react"; import { usePresignedURL } from "../core/hooks"; import Report from "./Report"; import { @@ -30,6 +30,27 @@ const SubscriptionReport = ({ timeRange, url, id, refetchLinks }) => { hideToastOn404: true, }); const plotMinW = "250px"; + const eventKeys = useMemo( + () => + Object.keys(data?.events ?? {}).length > 0 + ? Object.keys(data?.events) + : undefined, + [data] + ); + const methodKeys = useMemo( + () => + Object.keys(data?.methods ?? {}).length > 0 + ? Object.keys(data?.methods) + : undefined, + [data] + ); + const genericKeys = useMemo( + () => + Object.keys(data?.generic ?? {}).length > 0 + ? Object.keys(data?.generic) + : undefined, + [data] + ); if (failureCount < 1 && (!data || isLoading)) return ; if (failureCount >= 1 && (!data || isLoading)) return ( @@ -79,7 +100,7 @@ const SubscriptionReport = ({ timeRange, url, id, refetchLinks }) => { flexWrap="wrap" alignContent={["inherit", "flex-start", null]} > - {data?.web3_metric.map((metric) => { + {data?.web3_metric.map((metric, web3MetricIndex) => { return ( { p={2} m={1} bgColor="blue.100" - key={v4()} + key={`web3-metric-${web3MetricIndex}`} size="sm" fontWeight="600" boxShadow="sm" @@ -111,7 +132,7 @@ const SubscriptionReport = ({ timeRange, url, id, refetchLinks }) => { ); })} - {data?.events && Object.keys(data?.events) && ( + {data?.events && eventKeys && ( { Events - {Object.keys(data.events).map((key) => { + {eventKeys.map((key) => { return ( { })} )} - {data?.functions && Object.keys(data?.functions) && ( + {data?.functions && methodKeys && ( { functions - {Object.keys(data.functions).map((key) => { + {methodKeys.map((key) => { return ( { })} )} - {data?.generic && Object.keys(data?.generic) && ( + {data?.generic && genericKeys && ( { {Object.keys(data.generic).map((key) => { return ( { ); }; -export default SubscriptionReport; +export default React.memo(SubscriptionReport); diff --git a/frontend/src/core/providers/UIProvider/index.js b/frontend/src/core/providers/UIProvider/index.js index 640a1aca..93f8f22f 100644 --- a/frontend/src/core/providers/UIProvider/index.js +++ b/frontend/src/core/providers/UIProvider/index.js @@ -260,26 +260,12 @@ const UIProvider = ({ children }) => { }, [onboardingStep, router.nextRouter.pathname, user, isAppReady]); useEffect(() => { - if ( - isInit && - router.nextRouter.isReady && - onboardingState && - !isLoggingOut && - !isLoggingIn && - onboardingRedirectCheckPassed - ) { + if (isInit && router.nextRouter.isReady && !isLoggingOut && !isLoggingIn) { setAppReady(true); } else { setAppReady(false); } - }, [ - isInit, - router, - onboardingState, - isLoggingOut, - isLoggingIn, - onboardingRedirectCheckPassed, - ]); + }, [isInit, router, isLoggingOut, isLoggingIn]); //***************New chart item 's state ************************/ const dashboardUpdateReducer = useCallback(