Skip to content

Commit f18e4c6

Browse files
committed
๐Ÿค– Refactor(#117): type ์ง€์ • ๋ฐ ๋ถˆํ•„์š”ํ•œ ๋กœ์ง ์ œ๊ฑฐ
1 parent bf413db commit f18e4c6

File tree

2 files changed

+72
-43
lines changed

2 files changed

+72
-43
lines changed

โ€Žsrc/components/landing/carousel/Carousel.tsx

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
"use client";
22
import RecommendItem from "./RecommendItem";
33
import { useEffect, useState } from "react";
4-
import { TagProps } from "@component/components/common-components/tag";
54
import Slider from "react-slick";
65
import "slick-carousel/slick/slick.css";
76
import "slick-carousel/slick/slick-theme.css";
@@ -11,6 +10,17 @@ import { useGetProjectRecommend } from "@component/hooks/useProject";
1110
import ArrowBackIosNewRoundedIcon from "@mui/icons-material/ArrowBackIosNewRounded";
1211
import ArrowForwardIosRoundedIcon from "@mui/icons-material/ArrowForwardIosRounded";
1312

13+
export interface RecommendData {
14+
createdAt: string;
15+
createdBy: string;
16+
field: string;
17+
profileImageUrl: string;
18+
progress: string;
19+
projectId: number;
20+
summary: string;
21+
title: string;
22+
}
23+
1424
const PrevArrow = ({ onClick }: any) => {
1525
return (
1626
<ArrowBackIosNewRoundedIcon
@@ -38,25 +48,29 @@ const settings = {
3848
slidesToShow: 3, // ํ™”๋ฉด์— ํ•œ ๋ฒˆ์— ํ‘œ์‹œํ•  ์Šฌ๋ผ์ด๋“œ ๊ฐœ์ˆ˜ ์„ค์ •
3949
slidesToScroll: 3, // ๋‹ค์Œ ๋ณด์—ฌ ์ค„ ์Šฌ๋ผ์ด๋“œ์˜ ๊ฐœ์ˆ˜ ์„ค์ •
4050
speed: 2000, // ํ™”๋ฉด์„ ๋„˜๊ธธ ๋•Œ ์†๋„
41-
autoplay: false, // TODO: ์ž๋™ ๋„˜๊น€ ๋…ผ์˜
51+
autoplay: false,
4252
autoplaySpeed: 5000, // ๊ฐ„๊ฒฉ
4353
nextArrow: <NextArrow />,
4454
prevArrow: <PrevArrow />,
4555
};
4656

4757
const Carousel = () => {
4858
const { data, error, isLoading } = useGetProjectRecommend();
49-
const [recommendData, setRecommendData] = useState<any>();
59+
const [recommendData, setRecommendData] = useState<RecommendData[]>();
5060

5161
useEffect(() => {
5262
if (data) {
53-
setRecommendData(data.data.data)
63+
setRecommendData(data.data.data);
5464
}
5565
}, [data]);
5666

5767
if (error) {
5868
console.log(error);
5969
}
70+
if (isLoading) {
71+
console.log('๋กœ๋”ฉ ์ค‘~~')
72+
return <div>๋กœ๋”ฉ์ค‘ ์ž…๋‹ˆ๋‹ค.</div>
73+
}
6074
return (
6175
<>
6276
<Slider {...settings} className="mt-[32.5px]">
@@ -71,7 +85,6 @@ const Carousel = () => {
7185
profileImg={item.profileImageUrl}
7286
nickname={item.createdBy}
7387
createdAt={item.createdAt}
74-
isLoading={isLoading}
7588
/>
7689
))}
7790
</Slider>
Lines changed: 54 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,61 @@
11
import Image from "next/image";
22
import Tag from "@component/components/common-components/tag/Tag";
33
import { useRouter } from "next/navigation";
4+
import { TagProps } from "@component/components/common-components/tag";
45

5-
const RecommendItem = ({
6-
projectId,
7-
fields,
8-
progress,
9-
title,
10-
content,
11-
profileImg,
12-
nickname,
13-
createdAt,
14-
isLoading
15-
}: any) => {
16-
const router = useRouter();
17-
return (
18-
<>
19-
{isLoading ? (
20-
<div className="w-[344px] h-[340px] rounded-[10px] border border-[1.5px] border-purple-main1 bg-purple-main5 flex justify-center items-center cursor-pointer">
21-
</div>
22-
) : (
23-
<div
24-
className="w-[344px] h-[340px] rounded-[10px] border border-[1.5px] border-purple-main1 bg-purple-main5 flex justify-center items-center cursor-pointer"
25-
onClick={() => {
26-
router.push(`/project/${projectId}`)
27-
}}
28-
>
29-
<div className="w-[261px] h-[296.93px] relative">
30-
<Tag type={fields} status={progress} />
31-
<div className="text-title mt-[12px] mb-[24px]">{title}</div>
32-
<div className="text-body1 text-gray-60 font-medium">{content}</div>
33-
<div className="absolute bottom-0 flex items-center">
34-
<Image src={profileImg} alt="์ž„์‹œ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€" width={20} height={20} className="w-[20px] h-[20px] rounded-full me-[10px]" />
35-
<div className="text-body1 text-gray-60 me-[24px] font-medium">{nickname}</div>
36-
<div className="text-body1 text-gray-60 font-medium">{createdAt}</div>
37-
</div>
38-
</div>
39-
</div>
40-
)}
41-
</>
42-
);
6+
interface RecommendItemData {
7+
projectId: number;
8+
fields: TagProps["type"];
9+
progress: TagProps["status"];
10+
title: string;
11+
content: string;
12+
profileImg: string;
13+
nickname: string;
14+
createdAt: string;
4315
}
4416

17+
const RecommendItem = ({
18+
projectId,
19+
fields,
20+
progress,
21+
title,
22+
content,
23+
profileImg,
24+
nickname,
25+
createdAt,
26+
}: RecommendItemData) => {
27+
const router = useRouter();
28+
return (
29+
<>
30+
<div
31+
className="w-[344px] h-[340px] rounded-[10px] border border-[1.5px] border-purple-main1 bg-purple-main5 flex justify-center items-center cursor-pointer"
32+
onClick={() => {
33+
router.push(`/project/${projectId}`);
34+
}}
35+
>
36+
<div className="w-[261px] h-[296.93px] relative">
37+
<Tag type={fields} status={progress} />
38+
<div className="text-title mt-[12px] mb-[24px]">{title}</div>
39+
<div className="text-body1 text-gray-60 font-medium">{content}</div>
40+
<div className="absolute bottom-0 flex items-center">
41+
<Image
42+
src={profileImg}
43+
alt="์ž„์‹œ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€"
44+
width={20}
45+
height={20}
46+
className="w-[20px] h-[20px] rounded-full me-[10px]"
47+
/>
48+
<div className="text-body1 text-gray-60 me-[24px] font-medium">
49+
{nickname}
50+
</div>
51+
<div className="text-body1 text-gray-60 font-medium">
52+
{createdAt}
53+
</div>
54+
</div>
55+
</div>
56+
</div>
57+
</>
58+
);
59+
};
60+
4561
export default RecommendItem;

0 commit comments

Comments
ย (0)