From feff8b681e2ab24d11c837863610f5e2237d7789 Mon Sep 17 00:00:00 2001
From: Deon Sanchez <69873175+deon-sanchez@users.noreply.github.com>
Date: Fri, 21 Feb 2025 11:43:00 -0700
Subject: [PATCH] feat: Add loading state and skeleton UI for FlowPage sidebar
(#6738)
* feat: Add loading state and skeleton UI for FlowPage sidebar
* fix: Improve UI components with minor styling and z-index adjustments
* refactor: Simplify SkeletonGroup component and update FlowPage sidebar loading state
* refactor: Adjust SkeletonGroup rendering and FlowPage sidebar styling
* refactor: Remove z-index from PageComponent loading state
* refactor: Update FlowPage sidebar skeleton height class
---
.../src/components/ui/skeletonGroup.tsx | 20 +++++
.../components/PageComponent/index.tsx | 12 ++-
.../components/sidebarFooterButtons/index.tsx | 2 +
.../components/flowSidebarComponent/index.tsx | 78 ++++++++++++-------
src/frontend/src/pages/FlowPage/index.tsx | 7 +-
5 files changed, 85 insertions(+), 34 deletions(-)
create mode 100644 src/frontend/src/components/ui/skeletonGroup.tsx
diff --git a/src/frontend/src/components/ui/skeletonGroup.tsx b/src/frontend/src/components/ui/skeletonGroup.tsx
new file mode 100644
index 000000000..a99ac636a
--- /dev/null
+++ b/src/frontend/src/components/ui/skeletonGroup.tsx
@@ -0,0 +1,20 @@
+import { Skeleton } from "@/components/ui/skeleton";
+import { cn } from "@/utils/utils";
+
+const SkeletonGroup = ({
+ count = 2,
+ className = "",
+}: {
+ count?: number;
+ className?: string;
+}) => {
+ return (
+ <>
+ {Array.from({ length: count }, (_, i) => (
+
+ ))}
+ >
+ );
+};
+
+export default SkeletonGroup;
diff --git a/src/frontend/src/pages/FlowPage/components/PageComponent/index.tsx b/src/frontend/src/pages/FlowPage/components/PageComponent/index.tsx
index 9996ad9a4..68d9fa1e0 100644
--- a/src/frontend/src/pages/FlowPage/components/PageComponent/index.tsx
+++ b/src/frontend/src/pages/FlowPage/components/PageComponent/index.tsx
@@ -79,7 +79,13 @@ const edgeTypes = {
default: DefaultEdge,
};
-export default function Page({ view }: { view?: boolean }): JSX.Element {
+export default function Page({
+ view,
+ setIsLoading,
+}: {
+ view?: boolean;
+ setIsLoading: (isLoading: boolean) => void;
+}): JSX.Element {
const uploadFlow = useUploadFlow();
const autoSaveFlow = useAutoSaveFlow();
const types = useTypesStore((state) => state.types);
@@ -184,6 +190,10 @@ export default function Page({ view }: { view?: boolean }): JSX.Element {
Object.keys(types).length > 0 &&
!isFetching;
+ useEffect(() => {
+ setIsLoading(!showCanvas);
+ }, [showCanvas]);
+
useEffect(() => {
useFlowStore.setState({ autoSaveFlow });
}, [autoSaveFlow]);
diff --git a/src/frontend/src/pages/FlowPage/components/flowSidebarComponent/components/sidebarFooterButtons/index.tsx b/src/frontend/src/pages/FlowPage/components/flowSidebarComponent/components/sidebarFooterButtons/index.tsx
index 7317945f0..b970b3e70 100644
--- a/src/frontend/src/pages/FlowPage/components/flowSidebarComponent/components/sidebarFooterButtons/index.tsx
+++ b/src/frontend/src/pages/FlowPage/components/flowSidebarComponent/components/sidebarFooterButtons/index.tsx
@@ -7,6 +7,7 @@ const SidebarMenuButtons = ({
hasStore = false,
customComponent,
addComponent,
+ isLoading = false,
}) => {
return (
<>
@@ -37,6 +38,7 @@ const SidebarMenuButtons = ({