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 = ({