Skip to content

Commit d35de42

Browse files
authored
feat: Add dynamic-routing (#34)
1 parent a5527cc commit d35de42

File tree

6 files changed

+91
-15
lines changed

6 files changed

+91
-15
lines changed

src/App.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import "./App.css";
2+
import Router from "./shared/Router";
23

34
function App() {
4-
return <h1 className="text-3xl font-bold underline">Hello world!</h1>;
5+
return <Router />;
56
}
67

78
export default App;

src/components/molecules/event-card/EventCard.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
11
import Image from "../../atoms/images/Image";
22

3-
const EventCard = ({ image, title }: { image: string; title: string }) => {
3+
interface EventCardProps {
4+
image: string;
5+
title: string;
6+
onClick?: () => void; // 클릭 시 실행될 함수 정의
7+
}
8+
9+
const EventCard = ({ image, title, onClick }: EventCardProps) => {
410
return (
5-
<div className="group relative overflow-hidden rounded-lg transition-all duration-300 hover:shadow-xl">
11+
<div
12+
onClick={onClick}
13+
className="group relative overflow-hidden rounded-lg transition-all duration-300 hover:shadow-xl"
14+
>
615
<div className="relative h-32 w-full overflow-hidden">
716
<Image src={image} alt={title} variant="rounded" />
817
<div className="absolute inset-0 bg-gradient-to-t from-black/60 to-transparent opacity-0 transition-opacity duration-300 group-hover:opacity-100" />

src/components/organisms/event-lists/EventList.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import EventCard from "../../molecules/event-card/EventCard";
22
import Grid from "../../layout/Grid";
3+
import { useNavigate } from "react-router-dom";
34

45
interface Event {
56
image: string;
@@ -11,11 +12,19 @@ interface EventListProps {
1112
}
1213

1314
const EventList = ({ events }: EventListProps) => {
15+
const navigate = useNavigate();
16+
1417
return (
1518
<Grid orientation="vertical">
1619
{events.map((event, index) => (
1720
<div key={index} className="w-full sm:w-1/2 md:w-1/3">
18-
<EventCard image={event.image} title={event.title} />
21+
<EventCard
22+
image={event.image}
23+
title={event.title}
24+
onClick={() => {
25+
navigate("/reservation");
26+
}}
27+
/>
1928
</div>
2029
))}
2130
</Grid>

src/components/pages/ReservationConfirmationPage.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import ReservationOverviewTemplate from "../templates/reservation-overview/ReservationOverviewTemplate";
22
import Header from "../templates/header/Header";
33

4-
const ReservationConfirmationPage = () => {
4+
interface ReservConfirmProps {
5+
title: string;
6+
}
7+
8+
const ReservationConfirmationPage = ({ title }: ReservConfirmProps) => {
59
const reservation = {
610
eventName: "콜드플레이 내한공연",
711
dateTime: "2024/12/01 19:00 PM",
@@ -13,7 +17,7 @@ const ReservationConfirmationPage = () => {
1317
<>
1418
<Header></Header>
1519
<ReservationOverviewTemplate
16-
title="예매가 완료되었습니다."
20+
title={title}
1721
reservation={reservation}
1822
></ReservationOverviewTemplate>
1923
</>

src/components/templates/header/Header.tsx

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import styled from "@emotion/styled";
44
import React from "react";
55
import Button from "../../atoms/buttons/Button";
66
import Image from "../../atoms/images/Image";
7+
import { Link } from "react-router-dom";
8+
import { useNavigate } from "react-router-dom";
79

810
export interface HeaderProps {
911
children?: React.ReactNode;
@@ -29,25 +31,43 @@ const UserAccountGroup = styled.div<HeaderProps>``;
2931
const UserAccountGroupWrapper = styled.div<HeaderProps>``;
3032

3133
const Header = ({ className, style }: HeaderProps) => {
34+
const navigate = useNavigate();
35+
3236
return (
3337
<StyledHeader className={className} style={style}>
3438
<HeaderWrapper className="flex justify-center items-center px-30 py-0 box-border w-full h-20 gap-5">
35-
<Logo className="flex justify-center items-center h-full w-1/12 p-1">
36-
<Image
37-
width=""
38-
height="100%"
39-
src="https://cdn.iconscout.com/icon/free/png-256/free-ticket-113-452641.png?f=webp"
40-
alt="소켓팅 로고"
41-
></Image>
39+
<Logo className="flex justify-center items-center h-full w-1/12 p-3">
40+
<Link to="/">
41+
<Image
42+
width=""
43+
height=""
44+
src="https://cdn.iconscout.com/icon/free/png-256/free-ticket-113-452641.png?f=webp"
45+
alt="소켓팅 로고"
46+
></Image>
47+
</Link>
4248
</Logo>
4349
<Menu className="flex justify-center items-center w-7/12 h-full p-3">
4450
<MenuWrapper className="w-full h-full"></MenuWrapper>
4551
</Menu>
4652
<UserAccountGroup className="flex justify-end items-center w-4/12 h-full p-3">
4753
<UserAccountGroupWrapper className="flex justify-end items-center gap-1 w-full h-full">
4854
<Button bgColor="brown">공연 등록</Button>
49-
<Button bgColor="orange">로그인</Button>
50-
<Button bgColor="orange">회원 가입</Button>
55+
<Button
56+
bgColor="orange"
57+
onClick={() => {
58+
navigate("/login");
59+
}}
60+
>
61+
로그인
62+
</Button>
63+
<Button
64+
bgColor="orange"
65+
onClick={() => {
66+
navigate("/join");
67+
}}
68+
>
69+
회원가입
70+
</Button>
5171
</UserAccountGroupWrapper>
5272
</UserAccountGroup>
5373
</HeaderWrapper>

src/shared/Router.tsx

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { BrowserRouter, Route, Routes } from "react-router-dom";
2+
import MainPage from "../components/pages/MainPage";
3+
import LoginPage from "../components/pages/LoginPage";
4+
import JoinPage from "../components/pages/JoinPage";
5+
import Mypage from "../components/pages/MyPage";
6+
import ReservationPage from "../components/pages/ReservationPage";
7+
import ReservationConfirmationPage from "../components/pages/ReservationConfirmationPage";
8+
9+
const Router = () => {
10+
return (
11+
<BrowserRouter>
12+
<Routes>
13+
<Route path="/" element={<MainPage />} />
14+
<Route path="login" element={<LoginPage />} />
15+
<Route path="join" element={<JoinPage />} />
16+
<Route path="mypage" element={<Mypage />} />
17+
<Route path="reservation" element={<ReservationPage />} />
18+
<Route
19+
path="reservation-confirmation"
20+
element={
21+
<ReservationConfirmationPage title="예매가 완료되었습니다." />
22+
}
23+
/>
24+
<Route
25+
path="reservation-info"
26+
element={<ReservationConfirmationPage title="예매 정보" />}
27+
/>
28+
</Routes>
29+
</BrowserRouter>
30+
);
31+
};
32+
33+
export default Router;

0 commit comments

Comments
 (0)