From 3fa56ea7a17a2a908212f636baf4f48c0d213eaf Mon Sep 17 00:00:00 2001 From: ruby10127130 <52684045+ruby10127130@users.noreply.github.com> Date: Tue, 1 Oct 2024 23:29:10 +0800 Subject: [PATCH] feat: show skeleton group card when loading (#80) --- .../Group/GroupList/SkeletonGroupCard.jsx | 71 +++++++++++++++++++ components/Group/GroupList/index.jsx | 21 +++++- 2 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 components/Group/GroupList/SkeletonGroupCard.jsx diff --git a/components/Group/GroupList/SkeletonGroupCard.jsx b/components/Group/GroupList/SkeletonGroupCard.jsx new file mode 100644 index 00000000..11002463 --- /dev/null +++ b/components/Group/GroupList/SkeletonGroupCard.jsx @@ -0,0 +1,71 @@ +import { Skeleton } from '@mui/material'; +import { + StyledContainer, + StyledFooter, + StyledGroupCard, + StyledInfo, + StyledText, +} from './GroupCard.styled'; + +function SkeletonGroupCard({ _id }) { + return ( + + + + + + + + + + + + + + + + + + + + + + ); +} + +export default SkeletonGroupCard; diff --git a/components/Group/GroupList/index.jsx b/components/Group/GroupList/index.jsx index 5d7e3931..3aa27d00 100644 --- a/components/Group/GroupList/index.jsx +++ b/components/Group/GroupList/index.jsx @@ -6,6 +6,7 @@ import { Box } from '@mui/material'; import useSearchParamsManager from '@/hooks/useSearchParamsManager'; import { setQuery } from '@/redux/actions/group'; import GroupCard from './GroupCard'; +import SkeletonGroupCard from './SkeletonGroupCard'; export const StyledGroupItem = styled.li` position: relative; @@ -56,7 +57,25 @@ function GroupList() { return ( <> - {items?.length || isLoading ? ( + {isLoading ? ( + // always show 3 || 6 skeleton cards in mobile || desktop screen + Array.from({ length: isMobileScreen ? 3 : 6 }, (_, index) => { + const isLast = index === (isMobileScreen ? 2 : 5); + const shouldRenderDivider = + (isMobileScreen && !isLast) || + (isPadScreen && !isLast && index % 2 === 1) || + (isDeskTopScreen && !isLast && index % 3 === 2); + + return ( + + + + + {shouldRenderDivider && } + + ); + }) + ) : items?.length ? ( items.map((data, index) => { const isLast = index === items.length - 1; const shouldRenderDivider =