diff --git a/src/__mocks/AICard.mock.ts b/src/__mocks/AICard.mock.ts new file mode 100644 index 0000000..32235e9 --- /dev/null +++ b/src/__mocks/AICard.mock.ts @@ -0,0 +1,19 @@ +type Item = { + id: string | number; + name: string; + serenity: number; + themeTag: string; + likeCount: number; + thumbnail?: string; +}; //목데이터용 임시타입... + +export const mockAICard: Item[] = [ + { id: '1001', name: '경포해수욕장', serenity: 2, themeTag: '자연관광지', likeCount: 0 }, + { id: '1002', name: '안목해변 커피거리', serenity: 1, themeTag: '체험관광지', likeCount: 12 }, + { id: '1003', name: '하회마을', serenity: 3, themeTag: '역사관광지', likeCount: 87 }, + { id: '1004', name: '가천대학교', serenity: 1, themeTag: '문화시설', likeCount: 1002 }, + { id: '5', name: '행궁동', serenity: 5, themeTag: '자연관광지', likeCount: 11 }, + { id: '6', name: '문막천 산책길', serenity: 5, themeTag: '산책', likeCount: 11 }, + { id: '7', name: '물향기수목원', serenity: 5, themeTag: '자연관광지', likeCount: 11 }, + { id: '8', name: '물향기수목원', serenity: 5, themeTag: '자연관광지', likeCount: 11 }, +]; diff --git a/src/component/common/Badge/Badge.styled.ts b/src/component/common/Badge/Badge.styled.ts index 510c960..4595b3f 100644 --- a/src/component/common/Badge/Badge.styled.ts +++ b/src/component/common/Badge/Badge.styled.ts @@ -1,4 +1,4 @@ -export const BADGE_BASE = 'items-center justify-center inline-flex w-fit text-caption2'; +export const BADGE_BASE = 'items-center justify-center inline-flex w-fit text-caption2 shrink-0'; export const BADGE_SIZE = { sm: 'px-[11px] py-[3px]', diff --git a/src/component/common/Card/PlaceCard.tsx b/src/component/common/Card/PlaceCard.tsx index cc3c3b7..9c70410 100644 --- a/src/component/common/Card/PlaceCard.tsx +++ b/src/component/common/Card/PlaceCard.tsx @@ -9,6 +9,7 @@ type PlaceCardProps = { likeCount: number; showRemoveButton?: boolean; onRemove?: () => void; + onClick?: () => void; }; export default function PlaceCard({ @@ -19,9 +20,13 @@ export default function PlaceCard({ likeCount, showRemoveButton, onRemove, + onClick, }: PlaceCardProps) { return ( -
+
{/*썸네일*/}
{imgUrl ? ( @@ -38,7 +43,7 @@ export default function PlaceCard({
{/* 뱃지 2개 */} -
+
한적함 @@ -57,9 +62,11 @@ export default function PlaceCard({
)} {/* 좋아요 수 */} -
+
- {likeCount} + + {likeCount > 99 ? '99+' : likeCount} +
diff --git a/src/index.css b/src/index.css index f8254ea..c44cc12 100644 --- a/src/index.css +++ b/src/index.css @@ -209,6 +209,9 @@ .bg-green4 { background-color: var(--color-green4); } + .bg-red1 { + background-color: var(--color-red1); + } .bg-red2 { background-color: var(--color-red2); } diff --git a/src/pages/ai/AIResultPage.tsx b/src/pages/ai/AIResultPage.tsx new file mode 100644 index 0000000..4940b16 --- /dev/null +++ b/src/pages/ai/AIResultPage.tsx @@ -0,0 +1,65 @@ +import { Header, PlaceCard, Sidebar } from '@/component'; +import { useState } from 'react'; +import { mockAICard } from '@/__mocks/AICard.mock'; +import { useNavigate } from 'react-router-dom'; + +function getRankBadgeClass(n: number) { + if (n === 1) return 'bg-red1 text-black'; + if (n === 2) return 'bg-orange text-black'; + if (n === 3) return 'bg-mint text-black'; + return 'bg-gray1 text-gray-700'; +} + +export default function AIResultPage() { + const navigate = useNavigate(); + const [isSidebarOpen, setIsSidebarOpen] = useState(false); + + const handleMenuClick = () => { + setIsSidebarOpen(true); + }; + + const handleSidebarClose = () => { + setIsSidebarOpen(false); + }; + //투두: 추후 API 연결하면서 로딩 화면 연결 + + return ( +
+
+ {' '} +
+
+ AI 맞춤 여행지 탐색 +
+
    + {mockAICard.map((it, idx) => { + const rank = idx + 1; + return ( +
  • +
    + {/*순위*/} + + {rank} + + +
    + navigate(`/place/${it.id}`)} + /> +
    +
    +
  • + ); + })} +
+
+
+ ); +} diff --git a/src/routes/router.tsx b/src/routes/router.tsx index 1964ef2..9a6b18d 100644 --- a/src/routes/router.tsx +++ b/src/routes/router.tsx @@ -11,6 +11,7 @@ import ThemeSelcetPage from '@/pages/ai/ThemeSelect'; import Filter from '@/pages/explore/Filter'; import TravelSpotDetail from '@/pages/ai/TravelSpotDetail'; import AILoadingPage from '@/pages/ai/AILoadingPage'; +import AIResultPage from '@/pages/ai/AIResultPage'; export const router = createBrowserRouter([ { path: '/', @@ -41,6 +42,10 @@ export const router = createBrowserRouter([ path: 'loading', element: , }, + { + path: 'result', + element: , + }, ], }, //여행지 상세페이지