From c19011003059aec6821fd9055086a7e37003a71d Mon Sep 17 00:00:00 2001 From: "B._.OMI" Date: Wed, 10 Jul 2024 19:24:07 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20#309=20=EA=B3=B5=EC=9A=A9=20?= =?UTF-8?q?=EC=8A=A4=EC=BC=88=EB=A0=88=ED=86=A4=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EA=B5=AC=ED=98=84=20=EB=B0=8F=20LinkList?= =?UTF-8?q?=EC=97=90=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/page.tsx | 119 +++++++++--------- .../common/LinkItem/LinkItemSkeleton.tsx | 36 ++++++ src/components/common/Skeleton/Skeleton.tsx | 14 +++ 3 files changed, 109 insertions(+), 60 deletions(-) create mode 100644 src/components/common/LinkItem/LinkItemSkeleton.tsx create mode 100644 src/components/common/Skeleton/Skeleton.tsx diff --git a/src/app/page.tsx b/src/app/page.tsx index 1d4d0e4d..37f507e2 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -4,6 +4,7 @@ import { CategoryList, Dropdown, LinkItem, Spinner } from '@/components' import FloatingButton from '@/components/FloatingButton/FloatingButton' import { ChipColors } from '@/components/common/Chip/Chip' import DeferredComponent from '@/components/common/DeferedComponent/DeferedComponent' +import LinkItemSkeleton from '@/components/common/LinkItem/LinkItemSkeleton' import MainSpaceList from '@/components/common/MainSpaceList/MainSpaceList' import { useCategoryParam, useSortParam } from '@/hooks' import useGetPopularLinks from '@/hooks/useGetPopularLinks' @@ -23,67 +24,65 @@ export default function Home() { return ( <> - {isPopularLinksLoading ? ( - - - - ) : ( - <> -
-

인기있는 링크

- {links && ( - - {links.map((link: PopularLinkResBody) => ( - - - - ))} - - )} -
-
-
-
-

스페이스 모음

- -
- -
- +

인기있는 링크

+ {isPopularLinksLoading ? ( + + + + ) : ( + links && ( + + {links.map((link: PopularLinkResBody) => ( + + + + ))} + + ) + )} +
+
+
+
+

스페이스 모음

+ -
- - )} + + + + + ) diff --git a/src/components/common/LinkItem/LinkItemSkeleton.tsx b/src/components/common/LinkItem/LinkItemSkeleton.tsx new file mode 100644 index 00000000..50759235 --- /dev/null +++ b/src/components/common/LinkItem/LinkItemSkeleton.tsx @@ -0,0 +1,36 @@ +import Skeleton from '../Skeleton/Skeleton' + +export interface LinkItemSkeletonProps { + type?: 'list' | 'card' +} + +const LinkItemSkeleton = ({ type }: LinkItemSkeletonProps) => { + return ( + <> + {type === 'list' ? ( +
+ +
+ ) : ( +
+
+ + +
+ +
+
+
+ + +
+ +
+
+
+ )} + + ) +} + +export default LinkItemSkeleton diff --git a/src/components/common/Skeleton/Skeleton.tsx b/src/components/common/Skeleton/Skeleton.tsx new file mode 100644 index 00000000..f5442735 --- /dev/null +++ b/src/components/common/Skeleton/Skeleton.tsx @@ -0,0 +1,14 @@ +interface SkeletonProps { + className?: string +} + +const Skeleton = ({ className }: SkeletonProps) => { + return ( +
+ ) +} + +export default Skeleton From ce5dfb6f15ff784f73d3fad1bd01c5ef73d0257a Mon Sep 17 00:00:00 2001 From: "B._.OMI" Date: Thu, 11 Jul 2024 20:53:00 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20#309=20=EB=A9=94=EC=9D=B8=EC=8A=A4?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=8A=A4=EC=BC=88=EB=A0=88?= =?UTF-8?q?=ED=86=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/common/MainSpaceList/MainSpaceSkeleton.tsx | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/components/common/MainSpaceList/MainSpaceSkeleton.tsx diff --git a/src/components/common/MainSpaceList/MainSpaceSkeleton.tsx b/src/components/common/MainSpaceList/MainSpaceSkeleton.tsx new file mode 100644 index 00000000..60144a97 --- /dev/null +++ b/src/components/common/MainSpaceList/MainSpaceSkeleton.tsx @@ -0,0 +1,5 @@ +const MainSpaceSkeleton = () => { + return
+} + +export default MainSpaceSkeleton From 480762a12f456359fef6f289c0a2c05f1c7b355d Mon Sep 17 00:00:00 2001 From: "B._.OMI" Date: Sat, 13 Jul 2024 22:49:41 +0900 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20#309=20=EC=8A=A4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=8A=A4=20=EC=8A=A4=EC=BC=88=EB=A0=88=ED=86=A4=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/(routes)/space/[spaceId]/page.tsx | 43 ++++++++++--------- .../common/MainSpaceList/MainSpaceList.tsx | 4 +- .../MainSpaceList/MainSpaceSkeleton.tsx | 22 +++++++++- src/components/common/Space/SpaceSkeleton.tsx | 38 ++++++++++++++++ 4 files changed, 84 insertions(+), 23 deletions(-) create mode 100644 src/components/common/Space/SpaceSkeleton.tsx diff --git a/src/app/(routes)/space/[spaceId]/page.tsx b/src/app/(routes)/space/[spaceId]/page.tsx index d28105ba..2eaf4934 100644 --- a/src/app/(routes)/space/[spaceId]/page.tsx +++ b/src/app/(routes)/space/[spaceId]/page.tsx @@ -5,6 +5,7 @@ import Button from '@/components/common/Button/Button' import DeferredComponent from '@/components/common/DeferedComponent/DeferedComponent' import useViewLink from '@/components/common/LinkList/hooks/useViewLink' import Space from '@/components/common/Space/Space' +import SpaceSkeleton from '@/components/common/Space/SpaceSkeleton' import useGetSpace from '@/components/common/Space/hooks/useGetSpace' import useGetTags from '@/components/common/Space/hooks/useGetTags' import Tab from '@/components/common/Tab/Tab' @@ -36,27 +37,29 @@ const SpacePage = ({ params }: { params: { spaceId: number } }) => { }) const { tag, tagIndex, handleTagChange } = useTagParam({ tags }) - return isSpaceLoading || isTagsLoading ? ( - - - - ) : ( + return ( <> - {space && ( - + {isSpaceLoading ? ( + + + + ) : ( + space && ( + + ) )} {tabList.length > MIN_TAB_NUMBER && ( diff --git a/src/components/common/MainSpaceList/MainSpaceList.tsx b/src/components/common/MainSpaceList/MainSpaceList.tsx index bf34e221..6c821a87 100644 --- a/src/components/common/MainSpaceList/MainSpaceList.tsx +++ b/src/components/common/MainSpaceList/MainSpaceList.tsx @@ -6,9 +6,9 @@ import useMainSpacesQuery from '@/components/SpaceList/hooks/useMainSpacesQuery' import { CATEGORIES_RENDER } from '@/constants' import useInfiniteScroll from '@/hooks/useInfiniteScroll' import { SearchSpaceReqBody, SpaceResBody } from '@/types' -import { Spinner } from '../..' import DeferredComponent from '../DeferedComponent/DeferedComponent' import Space from '../Space/Space' +import MainSpaceSkeleton from './MainSpaceSkeleton' export interface SpaceListProps { memberId?: number @@ -50,7 +50,7 @@ const MainSpaceList = ({ return isSpacesLoading ? ( - + ) : ( <> diff --git a/src/components/common/MainSpaceList/MainSpaceSkeleton.tsx b/src/components/common/MainSpaceList/MainSpaceSkeleton.tsx index 60144a97..172501d4 100644 --- a/src/components/common/MainSpaceList/MainSpaceSkeleton.tsx +++ b/src/components/common/MainSpaceList/MainSpaceSkeleton.tsx @@ -1,5 +1,25 @@ +import SpaceSkeleton from '../Space/SpaceSkeleton' + const MainSpaceSkeleton = () => { - return
+ return ( +
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+ ) } export default MainSpaceSkeleton diff --git a/src/components/common/Space/SpaceSkeleton.tsx b/src/components/common/Space/SpaceSkeleton.tsx new file mode 100644 index 00000000..bc1b5468 --- /dev/null +++ b/src/components/common/Space/SpaceSkeleton.tsx @@ -0,0 +1,38 @@ +import Skeleton from '../Skeleton/Skeleton' + +interface SpaceSkeletonProps { + type?: 'Card' | 'Header' +} + +const SpaceSkeleton = ({ type }: SpaceSkeletonProps) => { + return ( + <> + {type === 'Card' ? ( +
+
+ + +
+ + +
+
+
+ ) : ( +
+
+ + +
+
+ + + +
+
+ )} + + ) +} + +export default SpaceSkeleton