diff --git a/public/images/guide_image_1.webp b/public/images/guide_image_1.webp new file mode 100644 index 00000000..b7b71c75 Binary files /dev/null and b/public/images/guide_image_1.webp differ diff --git a/public/images/guide_image_2.webp b/public/images/guide_image_2.webp new file mode 100644 index 00000000..b67b09cd Binary files /dev/null and b/public/images/guide_image_2.webp differ diff --git a/public/images/guide_image_3.webp b/public/images/guide_image_3.webp new file mode 100644 index 00000000..55a9c07b Binary files /dev/null and b/public/images/guide_image_3.webp differ diff --git a/public/images/guide_image_4.webp b/public/images/guide_image_4.webp new file mode 100644 index 00000000..c545c7f9 Binary files /dev/null and b/public/images/guide_image_4.webp differ diff --git a/public/images/guide_image_5.webp b/public/images/guide_image_5.webp new file mode 100644 index 00000000..9af44b1a Binary files /dev/null and b/public/images/guide_image_5.webp differ diff --git a/public/images/guide_image_6.webp b/public/images/guide_image_6.webp new file mode 100644 index 00000000..ba794030 Binary files /dev/null and b/public/images/guide_image_6.webp differ diff --git a/src/pages/guide/constants/guide-images.ts b/src/pages/guide/constants/guide-images.ts new file mode 100644 index 00000000..ea76a5de --- /dev/null +++ b/src/pages/guide/constants/guide-images.ts @@ -0,0 +1,10 @@ +export const GUIDE_IMAGES = [ + { id: 1, src: 'images/guide_image_1.webp', alt: '가이드 1' }, + { id: 2, src: 'images/guide_image_2.webp', alt: '가이드 2' }, + { id: 3, src: 'images/guide_image_3.webp', alt: '가이드 3' }, + { id: 4, src: 'images/guide_image_4.webp', alt: '가이드 4' }, + { id: 5, src: 'images/guide_image_5.webp', alt: '가이드 5' }, + { id: 6, src: 'images/guide_image_6.webp', alt: '가이드 6' }, +] as const; + +export type GuideImage = (typeof GUIDE_IMAGES)[number]; diff --git a/src/pages/guide/guide.tsx b/src/pages/guide/guide.tsx new file mode 100644 index 00000000..27223fb8 --- /dev/null +++ b/src/pages/guide/guide.tsx @@ -0,0 +1,56 @@ +import CarouselIndicator from '@pages/match/groups/components/carousel_indicator'; +import { useSlide } from '@pages/match/hooks/useSlide'; +import { getSlideTransformStyle } from '@pages/match/styles/get-slide-transformstyle'; +import { useState } from 'react'; +import { GUIDE_IMAGES } from './constants/guide-images'; + +const Guide = () => { + const [currentIndex, setCurrentIndex] = useState(0); + + const { handleTouchStart, handleTouchEnd, handleMouseDown } = useSlide({ + length: GUIDE_IMAGES.length, + currentIndex, + onChange: setCurrentIndex, + }); + + return ( +
+ + +
+ `guide-${image.id}`)} + currentIndex={currentIndex} + onDotClick={setCurrentIndex} + /> +
+
+ ); +}; + +export default Guide; diff --git a/src/pages/home/components/top-section.tsx b/src/pages/home/components/top-section.tsx index 5472efb4..cfc0d565 100644 --- a/src/pages/home/components/top-section.tsx +++ b/src/pages/home/components/top-section.tsx @@ -1,9 +1,21 @@ import CardBanner from '@components/card/banner-card/banner-card'; +import { ROUTES } from '@routes/routes-config'; +import { useNavigate } from 'react-router-dom'; const TopSection = () => { + const navigate = useNavigate(); + + const handleBannerClick = () => { + navigate(ROUTES.GUIDE); + }; + return (
- +
); }; diff --git a/src/shared/components/bottom-navigation/bottom-navigation.tsx b/src/shared/components/bottom-navigation/bottom-navigation.tsx index 96cb0327..e79dfd44 100644 --- a/src/shared/components/bottom-navigation/bottom-navigation.tsx +++ b/src/shared/components/bottom-navigation/bottom-navigation.tsx @@ -16,7 +16,9 @@ const BottomNavigation = () => { const isActive = (path: string) => pathname === path; - const isDisabled = (path: string) => needsMatchingSetup && path !== ROUTES.HOME; + const isDisabled = (path: string) => { + return needsMatchingSetup && path !== ROUTES.HOME; + }; const handleTabClick = (path: string) => { if (isDisabled(path)) return; diff --git a/src/shared/components/bottom-navigation/constants/bottom-navigation.ts b/src/shared/components/bottom-navigation/constants/bottom-navigation.ts index 033f3844..1250f2b2 100644 --- a/src/shared/components/bottom-navigation/constants/bottom-navigation.ts +++ b/src/shared/components/bottom-navigation/constants/bottom-navigation.ts @@ -34,3 +34,12 @@ export const NAV_ITEMS = [ }, }, ]; + +export type NavItem = { + label: string; + path: string; + icon: { + filled: string; + lined: string; + }; +}; diff --git a/src/shared/components/card/banner-card/banner-card.tsx b/src/shared/components/card/banner-card/banner-card.tsx index ef7bc31d..a0f35a38 100644 --- a/src/shared/components/card/banner-card/banner-card.tsx +++ b/src/shared/components/card/banner-card/banner-card.tsx @@ -5,17 +5,18 @@ interface CardBannerProps { text: string; subText?: string; className?: string; + onClick?: () => void; } -const BannerCard = ({ text, subText, className }: CardBannerProps) => { +const BannerCard = ({ text, subText, onClick }: CardBannerProps) => { return ( -
+
+ ); }; diff --git a/src/shared/constants/header.ts b/src/shared/constants/header.ts index d157c107..81dbfac1 100644 --- a/src/shared/constants/header.ts +++ b/src/shared/constants/header.ts @@ -16,4 +16,10 @@ export const NO_HEADER_PATHS = [ ROUTES.CHAT, ]; -export const SHOW_BOTTOM_NAVIGATE_PATHS = [ROUTES.HOME, ROUTES.MATCH, ROUTES.CHAT, ROUTES.PROFILE]; +export const SHOW_BOTTOM_NAVIGATE_PATHS = [ + ROUTES.HOME, + ROUTES.MATCH, + ROUTES.CHAT, + ROUTES.PROFILE, + ROUTES.GUIDE, +]; diff --git a/src/shared/routes/lazy.ts b/src/shared/routes/lazy.ts index caaf4f80..f2d4923f 100644 --- a/src/shared/routes/lazy.ts +++ b/src/shared/routes/lazy.ts @@ -7,6 +7,9 @@ export const SignUp = lazy(() => import('@pages/sign-up/sign-up')); // Home export const Home = lazy(() => import('@pages/home/home')); +// Guide +export const Guide = lazy(() => import('@pages/guide/guide')); + // Matching export const Onboarding = lazy(() => import('@pages/onboarding/onboarding')); export const OnboardingGroup = lazy(() => import('@pages/onboarding/onboarding-group')); diff --git a/src/shared/routes/protected-routes.tsx b/src/shared/routes/protected-routes.tsx index 7f08bd9f..65c36aaf 100644 --- a/src/shared/routes/protected-routes.tsx +++ b/src/shared/routes/protected-routes.tsx @@ -5,6 +5,7 @@ import { EditProfile, GroupMates, GroupNew, + Guide, Home, Match, Onboarding, @@ -29,4 +30,5 @@ export const protectedRoutes = [ { path: ROUTES.RESULT(), element: }, { path: ROUTES.ONBOARDING, element: }, { path: ROUTES.ONBOARDING_GROUP, element: }, + { path: ROUTES.GUIDE, element: }, ]; diff --git a/src/shared/routes/routes-config.ts b/src/shared/routes/routes-config.ts index 7e628278..43a2bd4e 100644 --- a/src/shared/routes/routes-config.ts +++ b/src/shared/routes/routes-config.ts @@ -19,4 +19,5 @@ export const ROUTES = { ERROR: '/error', LOADING: '/loading', SPLASH: '/splash', + GUIDE: '/guide', };