Skip to content

Commit 194fc4e

Browse files
authored
Merge branch 'main' into fix/home
2 parents c94cf96 + badba6f commit 194fc4e

34 files changed

+631
-244
lines changed

src/app/not-found.tsx

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
"use client";
2+
3+
import { PageNotFound } from "@/assets/images";
4+
import { Button } from "@/components/atoms";
5+
import { ROUTER } from "@/constants";
6+
import { color, flex } from "@/styles";
7+
import Image from "next/image";
8+
import { useRouter } from "next/navigation";
9+
import React from "react";
10+
import styled from "styled-components";
11+
12+
const NotFound = () => {
13+
const router = useRouter();
14+
return (
15+
<Container>
16+
<StyledImage width={999} height={999} src={PageNotFound} alt="404" />
17+
<Button
18+
color={color.primary_blue}
19+
onClick={() => router.push(ROUTER.HOME)}
20+
>
21+
홈으로 돌아가기
22+
</Button>
23+
</Container>
24+
);
25+
};
26+
27+
const Container = styled.div`
28+
width: 100%;
29+
height: 70vh;
30+
${flex.COLUMN_CENTER};
31+
`;
32+
33+
const StyledImage = styled(Image)`
34+
width: 50%;
35+
height: fit-content;
36+
`;
37+
38+
export default NotFound;

src/assets/images/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ export { default as ThinkingFace } from "./thinking_face.png";
88
export { default as HuggingFace } from "./hugging_face.png";
99
export { default as TestBanner } from "./test_banner.png";
1010
export { default as TestSmallBanner } from "./test_small_banner.png";
11+
export { default as PageNotFound } from "./page_not_found.png";

src/assets/images/page_not_found.png

56.8 KB
Loading

src/components/common/Header/Navigation.tsx

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,40 @@
11
import styled from "styled-components";
22
import { color, flex, font } from "@/styles";
3+
import useWindow from "@/hooks/useWindow";
34

45
const navigationTypes = [
56
{
67
name: "학교",
8+
isDisplayNoneAtResponsive: false,
79
},
810
{
911
name: "기숙사",
12+
isDisplayNoneAtResponsive: false,
1013
},
1114
{
1215
name: "커뮤니티",
16+
isDisplayNoneAtResponsive: false,
1317
},
1418
{
1519
name: "기타 목록",
20+
isDisplayNoneAtResponsive: true,
1621
},
1722
];
1823

1924
const Navigation = () => {
25+
const { isWindow } = useWindow();
2026
return (
2127
<NavigationList>
22-
{navigationTypes.map((navigation) => (
23-
<NavigationListItem key={navigation.name}>
24-
{navigation.name}
25-
</NavigationListItem>
26-
))}
28+
{isWindow &&
29+
navigationTypes.map((navigation) => {
30+
if (navigation.isDisplayNoneAtResponsive && window.innerWidth <= 768)
31+
return;
32+
return (
33+
<NavigationListItem key={navigation.name}>
34+
{navigation.name}
35+
</NavigationListItem>
36+
);
37+
})}
2738
</NavigationList>
2839
);
2940
};

src/components/common/Header/SubNavigation.tsx

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import styled from "styled-components";
22
import { color, flex, font } from "@/styles";
33
import Link from "next/link";
4+
import useWindow from "@/hooks/useWindow";
45

56
const navigations = [
67
{
@@ -11,13 +12,15 @@ const navigations = [
1112
{ name: "🕐 시간표", href: "/timetable" },
1213
{ name: "🗓️ 캘린더", href: "/calender" },
1314
],
15+
isDisplayNoneAtResponsive: false,
1416
},
1517
{
1618
key: "기숙사 생활",
1719
items: [
18-
{ name: "🚪 입사 체크", href: "https://team-insert.com" },
20+
{ name: "🚪 (미완)", href: "/" },
1921
{ name: "☕️ 베르실 예약", href: "/reserve" },
2022
],
23+
isDisplayNoneAtResponsive: false,
2124
},
2225
{
2326
key: "커뮤니티",
@@ -26,25 +29,34 @@ const navigations = [
2629
{ name: "🎋 대나무숲", href: "/bamboo" },
2730
{ name: "📊 랭킹(미완)", href: "/rank" },
2831
],
32+
isDisplayNoneAtResponsive: false,
2933
},
3034
{
3135
key: "기타",
3236
items: [{ name: "💼 외부 서비스", href: "/applications" }],
37+
isDisplayNoneAtResponsive: true,
3338
},
3439
];
3540

3641
const SubNavigation = () => {
42+
const { isWindow } = useWindow();
43+
3744
return (
3845
<SubNavigationList>
39-
{navigations.map((navigation) => (
40-
<SubNavigationListItem key={navigation.key}>
41-
{navigation.items.map((item) => (
42-
<SubNavigationListItemLink key={item.href} href={item.href}>
43-
{item.name}
44-
</SubNavigationListItemLink>
45-
))}
46-
</SubNavigationListItem>
47-
))}
46+
{isWindow &&
47+
navigations.map((navigation) => {
48+
if (navigation.isDisplayNoneAtResponsive && window.innerWidth <= 768)
49+
return;
50+
return (
51+
<SubNavigationListItem key={navigation.key}>
52+
{navigation.items.map((item) => (
53+
<SubNavigationListItemLink key={item.href} href={item.href}>
54+
{item.name}
55+
</SubNavigationListItemLink>
56+
))}
57+
</SubNavigationListItem>
58+
);
59+
})}
4860
</SubNavigationList>
4961
);
5062
};
@@ -68,6 +80,14 @@ const SubNavigationListItemLink = styled(Link)`
6880
font-weight: 500;
6981
width: 90px;
7082
cursor: pointer;
83+
84+
@media screen and (max-width: 570px) {
85+
width: 85px;
86+
}
87+
88+
@media screen and (max-width: 490px) {
89+
width: 80px;
90+
}
7191
`;
7292

7393
export default SubNavigation;

src/components/common/Header/index.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,18 @@ const Header = () => {
1616
>>(null);
1717

1818
const handleMouseEnter = () => {
19-
if (isHover) return setIsHover(true);
20-
setDelayHandeler(setTimeout(() => setIsHover(true), 400));
19+
if (isHover) return setIsHover((prev) => !prev);
20+
setDelayHandeler(setTimeout(() => setIsHover((prev) => !prev), 300));
2121
};
2222

2323
const handleMouseLeave = () => {
2424
if (!isHover && delayHandler) return clearTimeout(delayHandler);
25-
setIsHover(false);
25+
setIsHover((prev) => !prev);
2626
};
2727

2828
return (
2929
<HeaderLayout
30-
onMouseOver={handleMouseEnter}
30+
onMouseEnter={handleMouseEnter}
3131
onMouseLeave={handleMouseLeave}
3232
>
3333
<Layout>
@@ -46,6 +46,7 @@ const Header = () => {
4646

4747
const HeaderLayout = styled.div`
4848
${flex.COLUMN};
49+
background-color: green;
4950
`;
5051

5152
const Layout = styled.div`

src/components/common/Modal/LoginModal/index.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
import Storage from "@/apis/storage";
22
import { Logo } from "@/assets/icons";
33
import { ROUTER, TOKEN } from "@/constants";
4+
import useWindow from "@/hooks/useWindow";
45
import { color, flex, font } from "@/styles";
56
import { useRouter } from "next/navigation";
67
import React from "react";
78
import styled from "styled-components";
89

910
const LoginModal = () => {
1011
const router = useRouter();
12+
const { isWindow } = useWindow();
1113

1214
const handleLoginButtonClick = () => {
13-
Storage.setItem(TOKEN.PATH, window.location.pathname);
14-
router.push(process.env.NEXT_PUBLIC_OAUTH_URL || ROUTER.HOME);
15+
if (isWindow) {
16+
Storage.setItem(TOKEN.PATH, window.location.pathname);
17+
router.push(process.env.NEXT_PUBLIC_OAUTH_URL || ROUTER.HOME);
18+
}
1519
};
1620

1721
return (

src/components/common/Modal/PlanAddModal/index.tsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import { useAddCalenderPlanMutation } from "@/templates/calender/services/mutati
77
import { color, flex, font } from "@/styles";
88
import React from "react";
99
import styled from "styled-components";
10+
import { toast } from "react-toastify";
11+
import getPlanType from "@/helpers/getPlanType.helper";
1012

1113
interface IPlanAddModalProps {
1214
date: string;
@@ -21,12 +23,16 @@ const PlanAddModal = ({ date }: IPlanAddModalProps) => {
2123
const textareaRef = React.useRef<HTMLTextAreaElement>(null);
2224

2325
const handleAddButtonClick = () => {
26+
if (!title.trim()) return toast.error("내용을 입력해주세요!");
27+
const gradeClassType = planType === "학급 일정" ? "CLASS" : "GRADE";
28+
const type = planType === "학교 일정" ? "SCHOOL" : gradeClassType;
29+
2430
mutate({
2531
title,
2632
priority: 0,
2733
date,
2834
color: "#000",
29-
type: planType,
35+
type,
3036
grade: user.grade,
3137
classNumber: user.classNum,
3238
});
@@ -56,8 +62,8 @@ const PlanAddModal = ({ date }: IPlanAddModalProps) => {
5662
<Select
5763
label=""
5864
width="100px"
59-
options={["CLASS", "GRADE", "SCHOOL"]}
60-
defaultOption={planType}
65+
options={["학급 일정", "학년 일정", "학교 일정"]}
66+
defaultOption={getPlanType(planType)}
6167
handler={setPlanType}
6268
/>
6369
</Column>

0 commit comments

Comments
 (0)