-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feat/234 #259
Feat/234 #259
Changes from 6 commits
bb84361
05391c8
51af44e
c82d0fc
0b1dc3e
960b20a
857c48f
fe6156c
9f6377c
0e18934
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -24,7 +24,7 @@ | |
} | ||
|
||
&.medium { | ||
height: 185px; | ||
height: 140px; | ||
} | ||
|
||
.txt_brand_name { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
@import 'styles/mixins.module'; | ||
|
||
.area_thema { | ||
padding-top: 120px; | ||
|
||
.txt_title { | ||
@include font(35px, 700); | ||
|
||
display: block; | ||
padding-bottom: 40px; | ||
text-align: center; | ||
line-height: 51px; | ||
} | ||
|
||
.wrapper_item { | ||
display: grid; | ||
grid-template-columns: repeat(4, 1fr); | ||
gap: 50px 20px; | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
import { useQuery } from '@tanstack/react-query'; | ||
|
||
import ColumnProductItem from 'components/feature/ProductItem/ColumnProductItem'; | ||
import Spinner from 'components/ui/Spinner'; | ||
|
||
import { getThemaItems } from 'services/api/v1/thema'; | ||
|
||
import styles from './index.module.scss'; | ||
|
||
type ThemaListProps = { categoryId: number; title: string }; | ||
|
||
const ThemaList = ({ categoryId, title }: ThemaListProps) => { | ||
const { data: themaItems, isLoading } = useQuery({ | ||
queryKey: ['themaItems', categoryId], | ||
queryFn: () => getThemaItems(categoryId), | ||
}); | ||
|
||
if (isLoading) return <Spinner />; | ||
return ( | ||
themaItems && ( | ||
<section className={styles.area_thema}> | ||
<strong className={styles.txt_title}>{title}</strong> | ||
<ul className={styles.wrapper_item}> | ||
{themaItems.map((item) => ( | ||
<li key={item.productId}> | ||
<ColumnProductItem product={item} size="medium" /> | ||
</li> | ||
))} | ||
</ul> | ||
</section> | ||
) | ||
); | ||
}; | ||
|
||
export default ThemaList; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,54 @@ | ||
import ThemaList from './ThemaList'; | ||
|
||
const TITLE = [ | ||
'전하고픈 마음 가득 담아', | ||
'센스 넘치는 선물', | ||
'이런 선물 어때요 ?', | ||
'남녀노소 모두 좋아하는 선물', | ||
'반짝반짝 빛나는 마음', | ||
|
||
'부담 없이 마음을 전해요', | ||
'말없이 응원하고 싶을 때🍀', | ||
'이런 선물도 좋을 것 같아요.', | ||
'귀여운 게 최고야', | ||
'달콤한 진심을 전하는 선물', | ||
|
||
'고마운 사람들에게 전해요🎁', | ||
'변치 않는 마음을 전해요', | ||
'지금 안 사면 손해입니다 🚨', | ||
'전하고픈 마음 가득 담아', | ||
'활용도 높은 집들이 선물', | ||
|
||
'마음을 전하는 빛나는 선물', | ||
]; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 타이틀 사이사이에 들어간 엔터가 타이틀을 그룹핑하고 구분하는 느낌이 드는데, 실제로는 구분이 없으니 엔터를 빼도 될 것 같다고 생각합니다. 물론 줄바꿈이 있는 쪽이 더 가독성은 좋지만 타이틀 배열 같은 경우는 가독성이 크게 상관 없을 것 같아욥 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 반영했습니다. 857c48f |
||
|
||
const CATEGORY_ID = [ | ||
170, 171, 172, 176, 177, 178, 179, 181, 182, 184, 185, 188, 192, 194, 195, | ||
196, 202, 203, 204, 205, | ||
]; | ||
Comment on lines
+22
to
+25
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 살짝 하드코딩의 느낌이 나지만 어쩔 도리가 없어보이네요 😅 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ㅠㅠ 개인적으로 프론트에서 카테고리 id를 랜덤으로 선택해서 보내는게 애매하다는 생각이 들지만 아예 다른부분의 api를 가져다 쓰고있기 때문에 어쩔수 없네요.. |
||
|
||
const getRandomCategoryId = () => { | ||
const categoryIdx = Math.floor(Math.random() * CATEGORY_ID.length); | ||
return CATEGORY_ID[categoryIdx]; | ||
}; | ||
|
||
const getRandomTitle = () => { | ||
const titleIdx = Math.floor(Math.random() * TITLE.length); | ||
return TITLE[titleIdx]; | ||
}; | ||
Comment on lines
+27
to
+35
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
|
||
const Thema = () => { | ||
return <>이런 선물 어때요?</>; | ||
return ( | ||
<> | ||
<ThemaList categoryId={getRandomCategoryId()} title={getRandomTitle()} /> | ||
<ThemaList categoryId={getRandomCategoryId()} title={getRandomTitle()} /> | ||
<ThemaList categoryId={getRandomCategoryId()} title={getRandomTitle()} /> | ||
<ThemaList categoryId={getRandomCategoryId()} title={getRandomTitle()} /> | ||
<ThemaList categoryId={getRandomCategoryId()} title={getRandomTitle()} /> | ||
<ThemaList categoryId={getRandomCategoryId()} title={getRandomTitle()} /> | ||
<ThemaList categoryId={getRandomCategoryId()} title={getRandomTitle()} /> | ||
</> | ||
); | ||
}; | ||
|
||
export default Thema; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
.area_home { | ||
padding-bottom: 200px; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
import axios from 'axios'; | ||
|
||
import { ProductItem } from 'types/productItem'; | ||
|
||
const productApi = axios.create({ | ||
baseURL: import.meta.env.VITE_SERVER_URL, | ||
}); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 각 파일마다 axios 인스턴스를 만들어서 사용하고 있는데요. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 수정했습니다. 9f6377c |
||
|
||
export const getThemaItems = async (categoryId: number) => { | ||
const themaItem = await productApi.get( | ||
`/products?size=4&categoryId=${categoryId}`, | ||
); | ||
|
||
return themaItem.data.content as ProductItem[]; | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 컴포넌트가 여기서만 쓰이는 게 아닌데 css를 이렇게 수정하면 기존에 사용하고 있던 부분의 스타일도 바뀌잖아요.
그래서 클래스를 하나 만드는 게 더 좋은 방법이라는 생각이 드네요.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수정했습니다. fe6156c