diff --git a/components/ConnectButton/Skeleton.tsx b/components/ConnectButton/Skeleton.tsx
new file mode 100644
index 00000000..bcebdc96
--- /dev/null
+++ b/components/ConnectButton/Skeleton.tsx
@@ -0,0 +1,15 @@
+import { Skeleton } from "@livepeer/design-system";
+
+const ConnectButtonSkeleton = () => (
+
+);
+
+export default ConnectButtonSkeleton;
diff --git a/components/OrchestratorList/Skeleton.tsx b/components/OrchestratorList/Skeleton.tsx
new file mode 100644
index 00000000..4b8c1790
--- /dev/null
+++ b/components/OrchestratorList/Skeleton.tsx
@@ -0,0 +1,81 @@
+import { Box, Flex, Skeleton } from "@livepeer/design-system";
+
+const OrchestratorListSkeleton = () => {
+ return (
+
+ {/* Input section skeleton */}
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* Table header skeleton */}
+
+
+
+
+
+
+
+
+
+
+ {/* Table rows skeleton (10 rows) */}
+ {Array.from({ length: 10 }).map((_, i) => (
+
+
+
+
+
+
+
+
+
+ ))}
+
+ {/* Pagination skeleton */}
+
+
+
+
+
+
+ );
+};
+
+export default OrchestratorListSkeleton;
diff --git a/layouts/main.tsx b/layouts/main.tsx
index a02fee05..af71252d 100644
--- a/layouts/main.tsx
+++ b/layouts/main.tsx
@@ -57,7 +57,7 @@ import React, {
} from "react";
import { isMobile } from "react-device-detect";
import ReactGA from "react-ga";
-import { useWindowSize } from "react-use";
+
import { Chain } from "viem";
import {
@@ -108,8 +108,11 @@ const DesignSystemProviderTyped = DesignSystemProvider as React.FC<{
children?: React.ReactNode;
}>;
+import ConnectButtonSkeleton from "../components/ConnectButton/Skeleton";
+
const ConnectButton = dynamic(() => import("../components/ConnectButton"), {
ssr: false,
+ loading: () => ,
});
const Claim = dynamic(() => import("../components/Claim"), { ssr: false });
@@ -134,7 +137,6 @@ const Layout = ({ children, title = "Livepeer Explorer" }) => {
const activeChain = useActiveChain();
const [drawerOpen, setDrawerOpen] = useState(false);
const [bannerActive, setBannerActive] = useState(false);
- const { width } = useWindowSize();
const ref = useRef(null);
const currentRound = useCurrentRoundData();
const pendingFeesAndStake = usePendingFeesAndStakeData(accountAddress);
@@ -208,16 +210,6 @@ const Layout = ({ children, title = "Livepeer Explorer" }) => {
return () => window.removeEventListener("storage", onStorage);
}, [isReady, isBannerDisabledByQuery]);
- useEffect(() => {
- if (width >= 1200) {
- document.body.removeAttribute("style");
- }
-
- if (width < 1200 && drawerOpen) {
- document.body.style.overflow = "hidden";
- }
- }, [drawerOpen, width]);
-
useEffect(() => {
ReactGA.set({
customBrowserType: !isMobile
diff --git a/pages/index.tsx b/pages/index.tsx
index 0e5b1782..d5c4c79c 100644
--- a/pages/index.tsx
+++ b/pages/index.tsx
@@ -5,6 +5,7 @@ import type { Group } from "@components/ExplorerChart";
import ExplorerChart from "@components/ExplorerChart";
import OrchestratorList from "@components/OrchestratorList";
import RoundStatus from "@components/RoundStatus";
+import OrchestratorListSkeleton from "@components/OrchestratorList/Skeleton";
import Spinner from "@components/Spinner";
import TransactionsList, {
FILTERED_EVENT_TYPENAMES,
@@ -461,11 +462,7 @@ const Home = ({ hadError, orchestrators, events, protocol }: PageProps) => {
protocolData={protocol?.protocol}
/>
) : (
-
- Loading orchestrators…
-
+
)}
)}