diff --git a/src/app/page.tsx b/src/app/page.tsx
index c3e2313a..f58aa766 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -1,10 +1,19 @@
+/* eslint-disable @typescript-eslint/no-unused-vars */
+
+'use client';
+
import classNames from 'classnames/bind';
+import { MOCK_BANNER_DATA, MOCK_PRODUCT_LIST, MOCK_RECOMMEND_PRODUCTS } from '@mocks/homeHandler/mocks';
+import useBanner from '@remote/queries/home/useBanner';
+import useProductList from '@remote/queries/home/useProductList';
+import useRecommendProducts from '@remote/queries/home/useRecommendProducts';
import BottomNav from '@shared/bottom-nav/BottomNav';
import Banner from '@shared/carousel/Banner';
import RecommendList from '@shared/carousel/RecommendList';
import Flex from '@shared/flex/Flex';
import Header from '@shared/header/Header';
+import Loader from '@shared/loader/Loader';
import ProductArticle from '@shared/product-article/ProductArticle';
import Radio from '@shared/radio/Radio';
import ScrollToTop from '@shared/scroll-to-top/ScrollToTop';
@@ -15,535 +24,19 @@ import styles from './page.module.scss';
const cx = classNames.bind(styles);
-const bannerData = [
- {
- id: 1,
- link: '/',
- src: '/assets/banner.png',
- alt: '그림',
- },
- {
- id: 2,
- link: '/',
- src: '/assets/banner.png',
- alt: '그림',
- },
- {
- id: 3,
- link: '/',
- src: '/assets/banner.png',
- alt: '그림',
- },
- {
- id: 4,
- link: '/',
- src: '/assets/banner.png',
- alt: '그림',
- },
-];
-
-const recommendListData = [
- {
- id: 1,
- link: '/',
- src: '/assets/recommendItem1.png',
- alt: '그림',
- productName: '카샴푸',
- },
- {
- id: 2,
- link: '/',
- src: '/assets/recommendItem2.png',
- alt: '그림',
- productName: '휠 클리너',
- },
- {
- id: 3,
- link: '/',
- src: '/assets/recommendItem3.png',
- alt: '그림',
- productName: '타올',
-
- },
- {
- id: 4,
- link: '/',
- src: '/assets/recommendItem4.png',
- alt: '그림',
- productName: '먼지털이개',
-
- },
- {
- id: 5,
- link: '/',
- src: '/assets/recommendItem4.png',
- alt: '그림',
- productName: '먼지털이개',
-
- },
- {
- id: 6,
- link: '/',
- src: '/assets/recommendItem4.png',
- alt: '그림',
- productName: '먼지털이개',
-
- },
-];
+function Home() {
+ // TODO: 비로그인 회원과 부가정보를 입력하지 않은 회원은 부가정보 입력 배너 보이도록 UI 추가
+ const { data: bannerData, isLoading: bannerLoading } = useBanner();
+ const {
+ data: recommendProductsData, isLoading:
+ recommendProductsLoading,
+ } = useRecommendProducts();
+ const { data: productListData, isLoading: productListLoading } = useProductList();
-const productArticleData = [
- {
- brand: '카믹스',
- category: '코팅제',
- id: 1,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 2,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 3,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 4,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 1,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 2,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 3,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 4,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 1,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 2,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 3,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 4,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 1,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 2,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 3,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 4,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 1,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 2,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 3,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 4,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 1,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 2,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 3,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 4,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 1,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 2,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 3,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 4,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 1,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 2,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 3,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 4,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 1,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 2,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 3,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 4,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 1,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 2,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 3,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 4,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 1,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 2,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 3,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 4,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 1,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 2,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 3,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 4,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 1,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 2,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 3,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 4,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 1,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 2,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 3,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
- {
- brand: '카믹스',
- category: '코팅제',
- id: 4,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- warningLevel: 'warning',
- },
-];
+ if (bannerLoading || recommendProductsLoading || productListLoading) {
+ return ;
+ }
-export default function Home() {
- // TODO: 비로그인 회원과 부가정보를 입력하지 않은 회원은 부가정보 입력 배너 보이도록 UI 추가
return (
<>
@@ -552,13 +45,13 @@ export default function Home() {
-
+
추천 세차용품
-
+
WashPedia 랭킹
@@ -571,7 +64,7 @@ export default function Home() {
- {productArticleData.map((item) => {
+ {MOCK_PRODUCT_LIST?.value.map((item) => {
return
;
})}
@@ -582,3 +75,5 @@ export default function Home() {
>
);
}
+
+export default Home;
diff --git a/src/components/shared/carousel/Banner.stories.tsx b/src/components/shared/carousel/Banner.stories.tsx
index cdef9c83..f6e97c9f 100644
--- a/src/components/shared/carousel/Banner.stories.tsx
+++ b/src/components/shared/carousel/Banner.stories.tsx
@@ -1,5 +1,7 @@
import type { Meta, StoryObj } from '@storybook/react';
+import { MOCK_BANNER_DATA } from '@mocks/homeHandler/mocks';
+
import Banner from './Banner';
const meta = {
@@ -20,17 +22,6 @@ type Story = StoryObj
;
export const AdBanner: Story = {
args: {
- bannerData: [{
- id: 1, link: '/', src: '/assets/banner.png', alt: '그림',
- },
- {
- id: 2, link: '/', src: '/assets/banner.png', alt: '그림',
- },
- {
- id: 3, link: '/', src: '/assets/banner.png', alt: '그림',
- },
- {
- id: 4, link: '/', src: '/assets/banner.png', alt: '그림',
- }],
+ bannerData: MOCK_BANNER_DATA,
},
};
diff --git a/src/components/shared/carousel/Banner.tsx b/src/components/shared/carousel/Banner.tsx
index 9d8ec36f..4a2b0145 100644
--- a/src/components/shared/carousel/Banner.tsx
+++ b/src/components/shared/carousel/Banner.tsx
@@ -6,7 +6,7 @@ import Image from 'next/image';
import Link from 'next/link';
import './Banner.scss';
-import { IBannerData } from './types/carousel.type';
+import { BannerType } from '@remote/api/types/home';
const settings = {
dots: true,
@@ -20,11 +20,13 @@ const settings = {
arrows: false,
};
-function Banner({ bannerData }: { bannerData: IBannerData[] }) {
+function Banner({ bannerData }: { bannerData: BannerType }) {
+ const bannerList = bannerData.value;
+
return (
- {bannerData.map((slide) => {
+ {bannerList.map((slide) => {
return (
;
@@ -20,53 +19,6 @@ type Story = StoryObj;
export const AdBanner: Story = {
args: {
- recommendListData: [
- {
- id: 1,
- link: '/',
- src: '/assets/recommendItem1.png',
- alt: '그림',
- productName: '카샴푸',
- },
- {
- id: 2,
- link: '/',
- src: '/assets/recommendItem2.png',
- alt: '그림',
- productName: '휠 클리너',
- },
- {
- id: 3,
- link: '/',
- src: '/assets/recommendItem3.png',
- alt: '그림',
- productName: '타올',
-
- },
- {
- id: 4,
- link: '/',
- src: '/assets/recommendItem4.png',
- alt: '그림',
- productName: '먼지털이개',
-
- },
- {
- id: 5,
- link: '/',
- src: '/assets/recommendItem4.png',
- alt: '그림',
- productName: '먼지털이개',
-
- },
- {
- id: 6,
- link: '/',
- src: '/assets/recommendItem4.png',
- alt: '그림',
- productName: '먼지털이개',
-
- },
- ],
+ recommendProductsData: MOCK_RECOMMEND_PRODUCTS,
},
};
diff --git a/src/components/shared/carousel/RecommendList.tsx b/src/components/shared/carousel/RecommendList.tsx
index 24dc3ac1..0b7ba42c 100644
--- a/src/components/shared/carousel/RecommendList.tsx
+++ b/src/components/shared/carousel/RecommendList.tsx
@@ -5,11 +5,10 @@ import Slider from 'react-slick';
import Image from 'next/image';
import Link from 'next/link';
+import { RecommendProductsType } from '@remote/api/types/home';
import Flex from '@shared/flex/Flex';
import Text from '@shared/text/Text';
-import { IRecommendList } from './types/carousel.type';
-
const settings = {
dots: false,
infinite: true,
@@ -22,10 +21,13 @@ const settings = {
arrows: false,
};
-function RecommendList({ recommendListData }: { recommendListData: IRecommendList[] }) {
+// eslint-disable-next-line max-len
+function RecommendList({ recommendProductsData }: { recommendProductsData: RecommendProductsType }) {
+ const recommendList = recommendProductsData.value;
+
return (
- {recommendListData?.map((slide) => {
+ {recommendList?.map((slide) => {
return (
diff --git a/src/components/shared/product-article/ProductArticle.stories.tsx b/src/components/shared/product-article/ProductArticle.stories.tsx
index 012fc0f2..8f2e999b 100644
--- a/src/components/shared/product-article/ProductArticle.stories.tsx
+++ b/src/components/shared/product-article/ProductArticle.stories.tsx
@@ -1,5 +1,7 @@
import type { Meta, StoryObj } from '@storybook/react';
+import { MOCK_PRODUCT_LIST } from '@mocks/homeHandler/mocks';
+
import ProductArticle from './ProductArticle';
const meta: Meta = {
@@ -12,7 +14,7 @@ const meta: Meta = {
control: 'object',
},
},
-}satisfies Meta;
+} satisfies Meta;
export default meta;
type Story = StoryObj;
@@ -20,27 +22,13 @@ type Story = StoryObj;
export const MainPage: Story = {
args: {
isRow: false,
- itemData: {
- id: 1,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
- brand: '카믹스',
- category: '코팅제',
- warningLevel: 'warning',
- },
+ itemData: MOCK_PRODUCT_LIST,
},
};
export const SearchPage: Story = {
args: {
isRow: true,
- itemData: {
- id: 2,
- img: '/assets/profile.JPG',
- name: '아머올 세차용품 스피드 왁스 스프레이 500ml',
- brand: '카믹스',
- category: '코팅제',
- warningLevel: 'safe',
- },
+ itemData: MOCK_PRODUCT_LIST,
},
};
diff --git a/src/components/shared/product-article/ProductArticle.tsx b/src/components/shared/product-article/ProductArticle.tsx
index fac5f03c..5896b363 100644
--- a/src/components/shared/product-article/ProductArticle.tsx
+++ b/src/components/shared/product-article/ProductArticle.tsx
@@ -2,14 +2,14 @@ import classNames from 'classnames/bind';
import Image from 'next/image';
import Heart from '@components/icons/Heart';
+import { IProduct } from '@remote/api/types/home';
import Text from '@shared/text/Text';
import styles from './ProductArticle.module.scss';
-import { IItemData } from './types/ProductArticleType';
interface ProductArticleProps {
isRow?: boolean;
- itemData: IItemData
+ itemData: IProduct
}
const cx = classNames.bind(styles);
diff --git a/src/components/shared/product-article/types/ProductArticleType.ts b/src/components/shared/product-article/types/ProductArticleType.ts
deleted file mode 100644
index b88793c9..00000000
--- a/src/components/shared/product-article/types/ProductArticleType.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-export interface IItemData {
- id: number
- img: string
- name: string
- brand: string
- category: string
- warningLevel: string
-}
diff --git a/src/mocks/handlers.ts b/src/mocks/handlers.ts
index 4c9df97b..fd9cf584 100644
--- a/src/mocks/handlers.ts
+++ b/src/mocks/handlers.ts
@@ -1,5 +1,7 @@
import { authHandlers } from './authHandler';
+import { homeHandlers } from './homeHandler';
export const handlers = [
...authHandlers,
+ ...homeHandlers,
];
diff --git a/src/mocks/homeHandler/index.ts b/src/mocks/homeHandler/index.ts
new file mode 100644
index 00000000..5cb857f3
--- /dev/null
+++ b/src/mocks/homeHandler/index.ts
@@ -0,0 +1,23 @@
+// eslint-disable-next-line import/no-extraneous-dependencies
+import { http, HttpResponse } from 'msw';
+
+import {
+ MOCK_BANNER_DATA, MOCK_PRODUCT_LIST, MOCK_RECOMMEND_PRODUCTS,
+} from './mocks';
+
+export const homeHandlers = [
+ /* ----- 배너 api ----- */
+ http.get(`${process.env.NEXT_PUBLIC_BASE_URL}/banner`, () => {
+ return HttpResponse.json(MOCK_BANNER_DATA);
+ }),
+
+ /* ----- 추천 제품 정보 api ----- */
+ http.get(`${process.env.NEXT_PUBLIC_BASE_URL}/recommend_products`, () => {
+ return HttpResponse.json(MOCK_RECOMMEND_PRODUCTS);
+ }),
+
+ /* ----- 제품 목록 정보 api ----- */
+ http.get(`${process.env.NEXT_PUBLIC_BASE_URL}/products?sortType=viewcnt_order`, () => {
+ return HttpResponse.json(MOCK_PRODUCT_LIST);
+ }),
+];
diff --git a/src/mocks/homeHandler/mocks.ts b/src/mocks/homeHandler/mocks.ts
new file mode 100644
index 00000000..e5170576
--- /dev/null
+++ b/src/mocks/homeHandler/mocks.ts
@@ -0,0 +1,256 @@
+/* ----- 배너 정보 MOCK DATA ----- */
+export const MOCK_BANNER_DATA = {
+ status: 200,
+ code: 'PMB001',
+ message: '추천제품정보 조회 성공',
+ value: [
+ {
+ id: 1,
+ link: '/',
+ src: '/assets/banner.png',
+ alt: '그림',
+ },
+ {
+ id: 2,
+ link: '/',
+ src: '/assets/banner.png',
+ alt: '그림',
+ },
+ {
+ id: 3,
+ link: '/',
+ src: '/assets/banner.png',
+ alt: '그림',
+ },
+ {
+ id: 4,
+ link: '/',
+ src: '/assets/banner.png',
+ alt: '그림',
+ },
+ ],
+};
+
+/* ----- 추천 제품 정보 MOCK DATA ----- */
+export const MOCK_RECOMMEND_PRODUCTS = {
+ status: 200,
+ code: 'BMB001',
+ message: '배너정보 조회 성공',
+ value: [
+ {
+ id: 1,
+ link: '/',
+ src: '/assets/recommendItem1.png',
+ alt: '그림',
+ productName: '카샴푸',
+ },
+ {
+ id: 2,
+ link: '/',
+ src: '/assets/recommendItem2.png',
+ alt: '그림',
+ productName: '휠 클리너',
+ },
+ {
+ id: 3,
+ link: '/',
+ src: '/assets/recommendItem3.png',
+ alt: '그림',
+ productName: '타올',
+
+ },
+ {
+ id: 4,
+ link: '/',
+ src: '/assets/recommendItem4.png',
+ alt: '그림',
+ productName: '먼지털이개',
+
+ },
+ {
+ id: 5,
+ link: '/',
+ src: '/assets/recommendItem4.png',
+ alt: '그림',
+ productName: '먼지털이개',
+
+ },
+ {
+ id: 6,
+ link: '/',
+ src: '/assets/recommendItem4.png',
+ alt: '그림',
+ productName: '먼지털이개',
+
+ },
+ ],
+};
+
+/* ----- 제품 목록 MOCK DATA ----- */
+export const MOCK_PRODUCT_LIST = {
+ status: 200,
+ code: 'PMB002',
+ message: '제품정보 조회 성공',
+ value: [
+ {
+ brand: '카믹스',
+ category: '코팅제',
+ id: 1,
+ img: '/assets/profile.JPG',
+ name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
+ warningLevel: 'warning',
+ },
+ {
+ brand: '카믹스',
+ category: '코팅제',
+ id: 2,
+ img: '/assets/profile.JPG',
+ name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
+ warningLevel: 'warning',
+ },
+ {
+ brand: '카믹스',
+ category: '코팅제',
+ id: 3,
+ img: '/assets/profile.JPG',
+ name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
+ warningLevel: 'warning',
+ },
+ {
+ brand: '카믹스',
+ category: '코팅제',
+ id: 4,
+ img: '/assets/profile.JPG',
+ name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
+ warningLevel: 'warning',
+ },
+ {
+ brand: '카믹스',
+ category: '코팅제',
+ id: 5,
+ img: '/assets/profile.JPG',
+ name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
+ warningLevel: 'warning',
+ },
+ {
+ brand: '카믹스',
+ category: '코팅제',
+ id: 6,
+ img: '/assets/profile.JPG',
+ name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
+ warningLevel: 'warning',
+ },
+ {
+ brand: '카믹스',
+ category: '코팅제',
+ id: 7,
+ img: '/assets/profile.JPG',
+ name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
+ warningLevel: 'warning',
+ },
+ {
+ brand: '카믹스',
+ category: '코팅제',
+ id: 8,
+ img: '/assets/profile.JPG',
+ name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
+ warningLevel: 'warning',
+ },
+ {
+ brand: '카믹스',
+ category: '코팅제',
+ id: 9,
+ img: '/assets/profile.JPG',
+ name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
+ warningLevel: 'warning',
+ },
+ {
+ brand: '카믹스',
+ category: '코팅제',
+ id: 10,
+ img: '/assets/profile.JPG',
+ name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
+ warningLevel: 'warning',
+ },
+ {
+ brand: '카믹스',
+ category: '코팅제',
+ id: 11,
+ img: '/assets/profile.JPG',
+ name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
+ warningLevel: 'warning',
+ },
+ {
+ brand: '카믹스',
+ category: '코팅제',
+ id: 12,
+ img: '/assets/profile.JPG',
+ name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
+ warningLevel: 'warning',
+ },
+ {
+ brand: '카믹스',
+ category: '코팅제',
+ id: 13,
+ img: '/assets/profile.JPG',
+ name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
+ warningLevel: 'warning',
+ },
+ {
+ brand: '카믹스',
+ category: '코팅제',
+ id: 14,
+ img: '/assets/profile.JPG',
+ name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
+ warningLevel: 'warning',
+ },
+ {
+ brand: '카믹스',
+ category: '코팅제',
+ id: 15,
+ img: '/assets/profile.JPG',
+ name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
+ warningLevel: 'warning',
+ },
+ {
+ brand: '카믹스',
+ category: '코팅제',
+ id: 16,
+ img: '/assets/profile.JPG',
+ name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
+ warningLevel: 'warning',
+ },
+ {
+ brand: '카믹스',
+ category: '코팅제',
+ id: 17,
+ img: '/assets/profile.JPG',
+ name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
+ warningLevel: 'warning',
+ },
+ {
+ brand: '카믹스',
+ category: '코팅제',
+ id: 18,
+ img: '/assets/profile.JPG',
+ name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
+ warningLevel: 'warning',
+ },
+ {
+ brand: '카믹스',
+ category: '코팅제',
+ id: 19,
+ img: '/assets/profile.JPG',
+ name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
+ warningLevel: 'warning',
+ },
+ {
+ brand: '카믹스',
+ category: '코팅제',
+ id: 20,
+ img: '/assets/profile.JPG',
+ name: '아머올 세차용품 스피드 왁스 스프레이 500ml스피드 왁스 스프레이 500ml',
+ warningLevel: 'warning',
+ },
+ ],
+};
diff --git a/src/remote/api/requests/home/home.get.api.ts b/src/remote/api/requests/home/home.get.api.ts
new file mode 100644
index 00000000..fcbd6c57
--- /dev/null
+++ b/src/remote/api/requests/home/home.get.api.ts
@@ -0,0 +1,25 @@
+import {
+ BannerType, ProductType, RecommendProductsType,
+} from '../../types/home';
+import { getRequest } from '../requests.api';
+
+/* ----- 배너 api ----- */
+export const getBanner = async () => {
+ const response = await getRequest('/banner');
+
+ return response;
+};
+
+/* ----- 추천 제품 정보 api ----- */
+export const getRecommendProducts = async () => {
+ const response = await getRequest('/recommend_products');
+
+ return response;
+};
+
+/* ----- 제품 목록 정보 api ----- */
+export const getProductList = async () => {
+ const response = await getRequest('/products?sortType=viewcnt_order');
+
+ return response;
+};
diff --git a/src/remote/api/types/common.ts b/src/remote/api/types/common.ts
new file mode 100644
index 00000000..a3b3bb84
--- /dev/null
+++ b/src/remote/api/types/common.ts
@@ -0,0 +1,6 @@
+export interface ICommon {
+ status: number
+ code: string,
+ message: string,
+ value: T[]
+}
diff --git a/src/remote/api/types/home.ts b/src/remote/api/types/home.ts
new file mode 100644
index 00000000..5cf257f0
--- /dev/null
+++ b/src/remote/api/types/home.ts
@@ -0,0 +1,25 @@
+import { ICommon } from './common';
+
+export interface IBanner {
+ id: number
+ link: string
+ src: string
+ alt: string
+}
+
+export interface IRecommendProducts extends IBanner {
+ productName: string
+}
+
+export interface IProduct {
+ id: number
+ img: string
+ name: string
+ brand: string
+ category: string
+ warningLevel: string
+}
+
+export type BannerType = ICommon;
+export type RecommendProductsType = ICommon;
+export type ProductType = ICommon;
diff --git a/src/remote/queries/home/useBanner.ts b/src/remote/queries/home/useBanner.ts
new file mode 100644
index 00000000..42385daa
--- /dev/null
+++ b/src/remote/queries/home/useBanner.ts
@@ -0,0 +1,10 @@
+import { useQuery } from '@tanstack/react-query';
+
+import { getBanner } from '@remote/api/requests/home/home.get.api';
+import { BannerType } from '@remote/api/types/home';
+
+function useBanner() {
+ return useQuery({ queryKey: ['banner'], queryFn: getBanner });
+}
+
+export default useBanner;
diff --git a/src/remote/queries/home/useProductList.ts b/src/remote/queries/home/useProductList.ts
new file mode 100644
index 00000000..e7110dd9
--- /dev/null
+++ b/src/remote/queries/home/useProductList.ts
@@ -0,0 +1,10 @@
+import { useQuery } from '@tanstack/react-query';
+
+import { getProductList } from '@remote/api/requests/home/home.get.api';
+import { ProductType } from '@remote/api/types/home';
+
+function useProductList() {
+ return useQuery({ queryKey: ['productList'], queryFn: getProductList });
+}
+
+export default useProductList;
diff --git a/src/remote/queries/home/useRecommendProducts.ts b/src/remote/queries/home/useRecommendProducts.ts
new file mode 100644
index 00000000..209b247f
--- /dev/null
+++ b/src/remote/queries/home/useRecommendProducts.ts
@@ -0,0 +1,10 @@
+import { useQuery } from '@tanstack/react-query';
+
+import { getRecommendProducts } from '@remote/api/requests/home/home.get.api';
+import { RecommendProductsType } from '@remote/api/types/home';
+
+function useRecommendProducts() {
+ return useQuery({ queryKey: ['recommendProducts'], queryFn: getRecommendProducts });
+}
+
+export default useRecommendProducts;