Skip to content

Commit 2b4f872

Browse files
committed
fix(QA): 시간표 관련 오류 수정
1 parent 7da92db commit 2b4f872

File tree

7 files changed

+131
-71
lines changed

7 files changed

+131
-71
lines changed

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import styled, { css } from "styled-components";
2-
import { color } from "@/styles";
2+
import { color, flex } from "@/styles";
33
import ModalList from "./ModalList";
44
import ModalHeader from "./ModalHeader";
55

@@ -17,8 +17,13 @@ const EmojiModal = (direction: IEmojiModalProps) => {
1717
return (
1818
<>
1919
<Container {...direction}>
20-
<ModalHeader handleClickCloseButton={onClose} />
21-
<ModalList />
20+
아직 지원하지 않는 기능이에요.
21+
{false && (
22+
<>
23+
<ModalHeader handleClickCloseButton={onClose} />
24+
<ModalList />
25+
</>
26+
)}
2227
</Container>
2328
<ModalBackground onClick={onClose} />
2429
</>
@@ -35,9 +40,9 @@ const Container = styled.div<{
3540
z-index: 10;
3641
width: 30vw;
3742
border-radius: 12px;
43+
min-height: 20vh;
3844
height: fit-content;
39-
display: flex;
40-
flex-direction: column;
45+
${flex.COLUMN_CENTER};
4146
background-color: ${color.white};
4247
box-shadow: 2px 2px 10px 0 rgba(0, 0, 0, 0.1);
4348
${({ top, right, bottom, left }) => css`

src/provider/layoutProvider.helper.tsx

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import { Column } from "@/components/Flex";
21
import { Footer, Header, Modal } from "@/components/common";
3-
import { GlobalStyle } from "@/styles";
2+
import { GlobalStyle, flex } from "@/styles";
43
import React from "react";
54
import { ToastContainer, toast } from "react-toastify";
65
import styled from "styled-components";
@@ -12,11 +11,11 @@ const LayoutProvider = ({ children }: React.PropsWithChildren) => {
1211
<StyledToastify autoClose={1000} position={toast.POSITION.TOP_RIGHT} />
1312
<GlobalStyle />
1413
<Modal />
15-
<Column gap="6vh">
14+
<Layout>
1615
<Header />
17-
{children}
16+
<Container>{children}</Container>
1817
<Footer />
19-
</Column>
18+
</Layout>
2019
</>
2120
);
2221
};
@@ -28,4 +27,13 @@ const StyledToastify = styled(ToastContainer)`
2827
}
2928
`;
3029

30+
const Layout = styled.div`
31+
${flex.COLUMN};
32+
gap: 6vh;
33+
`;
34+
35+
const Container = styled.div`
36+
min-height: 80vh;
37+
`;
38+
3139
export default LayoutProvider;

src/templates/timetable/index.tsx

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,33 @@
11
import styled from "styled-components";
2+
import { flex } from "@/styles";
3+
import useUser from "@/hooks/useUser";
4+
import useModal from "@/hooks/useModal";
5+
import React from "react";
6+
import LoginModal from "@/components/common/Modal/LoginModal";
7+
import { useDidMountEffect } from "@/hooks/useDidMountEffect";
8+
import Storage from "@/apis/storage";
9+
import { TOKEN } from "@/constants";
210
import TimeTableBox from "./layouts/TimeTableBox";
311

412
const TimeTablePage = () => {
13+
const { isLogined } = useUser();
14+
const { openModal } = useModal();
15+
16+
useDidMountEffect(() => {
17+
if (!Storage.getItem(TOKEN.ACCESS)) {
18+
openModal({
19+
component: <LoginModal />,
20+
});
21+
}
22+
}, []);
23+
524
return (
625
<Layout>
7-
<Container>
8-
<TimeTableBox />
9-
</Container>
26+
{isLogined && (
27+
<Container>
28+
<TimeTableBox />
29+
</Container>
30+
)}
1031
</Layout>
1132
);
1233
};
@@ -17,9 +38,8 @@ const Layout = styled.div`
1738
`;
1839

1940
const Container = styled.div`
20-
width: 76%;
21-
display: flex;
22-
justify-content: center;
41+
width: 100%;
42+
${flex.CENTER}
2343
gap: 8px;
2444
`;
2545

src/templates/timetable/layouts/TimeTableBox.tsx

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import styled from "styled-components";
33
import useDate from "@/hooks/useDate";
44
import { useQueryClient } from "@tanstack/react-query";
55
import { KEY } from "@/constants";
6+
import Storage from "@/apis/storage";
67
import { emptyTimetable } from "@/assets/data";
78
import TimeTableBar from "./TimeTableBar";
89
import { useTimetableListQuery } from "../services/query.service";
@@ -16,7 +17,7 @@ const TimeTableBox = () => {
1617
getNowWeekDay({ type: "KOR" }),
1718
);
1819
const [timetableType, setTimetableType] = React.useState<"bar" | "table">(
19-
"bar",
20+
(Storage.getItem("timetable_type") as "bar" | "table") ?? "bar",
2021
);
2122

2223
const [dayTimeTable, setDayTimeTable] = React.useState(emptyTimetable);
@@ -32,21 +33,27 @@ const TimeTableBox = () => {
3233

3334
return (
3435
<Container>
35-
<TimeTableCategory
36-
weekdays={weekdays}
37-
checked={selectedDay}
38-
setChecked={setSelectedDay}
39-
timetableType={timetableType}
40-
setTimetableType={setTimetableType}
41-
/>
42-
{timetableType === "bar" && (
43-
<TimeTableBar
44-
weekday={translateDay(selectedDay, { to: "ENG_DETAIL" })}
45-
dayTimeTable={dayTimeTable}
36+
<TimeTableLayoutBox>
37+
<TimeTableCategory
38+
weekdays={weekdays}
39+
checked={selectedDay}
40+
setChecked={setSelectedDay}
41+
timetableType={timetableType}
42+
setTimetableType={setTimetableType}
4643
/>
47-
)}
48-
{timetableType === "table" && (
49-
<TimeTableTable dayTimeTable={dayTimeTable} />
44+
</TimeTableLayoutBox>
45+
{!!dayTimeTable[translateDay(selectedDay, { to: "ENG_DETAIL" })] && (
46+
<>
47+
{timetableType === "bar" && (
48+
<TimeTableBar
49+
weekday={translateDay(selectedDay, { to: "ENG_DETAIL" })}
50+
dayTimeTable={dayTimeTable}
51+
/>
52+
)}
53+
{timetableType === "table" && (
54+
<TimeTableTable dayTimeTable={dayTimeTable} />
55+
)}
56+
</>
5057
)}
5158
</Container>
5259
);
@@ -55,9 +62,15 @@ const TimeTableBox = () => {
5562
const Container = styled.div`
5663
display: flex;
5764
flex-direction: column;
58-
width: 100%;
65+
width: fit-content;
5966
justify-content: center;
67+
align-items: center;
6068
gap: 4vh;
69+
width: 56%;
70+
`;
71+
72+
const TimeTableLayoutBox = styled.div`
73+
margin-right: auto;
6174
`;
6275

6376
export default TimeTableBox;

src/templates/timetable/layouts/TimeTableCategory.tsx

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Column } from "@/components/Flex";
33
import { Category } from "@/components/atoms";
44
import { font } from "@/styles";
55
import { getTimetableType } from "@/helpers";
6+
import Storage from "@/apis/storage";
67

78
interface ITimeTableCategoryProps {
89
weekdays: Array<string>;
@@ -19,9 +20,31 @@ const TimeTableCategory = ({
1920
timetableType,
2021
setTimetableType,
2122
}: ITimeTableCategoryProps) => {
23+
const handleTimetableTypeChange = (
24+
e: React.ChangeEvent<HTMLInputElement>,
25+
) => {
26+
setTimetableType(e.target.id as "bar" | "table");
27+
Storage.setItem("timetable_type", e.target.id);
28+
};
29+
2230
return (
2331
<Column gap="16px">
2432
<Title />
33+
<Column gap="8px">
34+
<Label>시간표 형식</Label>
35+
<CategoryBox>
36+
{["bar", "table"].map((type) => (
37+
<Category
38+
key={type}
39+
id={type}
40+
label={getTimetableType(type)}
41+
checked={timetableType === type}
42+
onChange={handleTimetableTypeChange}
43+
name="date"
44+
/>
45+
))}
46+
</CategoryBox>
47+
</Column>
2548
{timetableType === "bar" && (
2649
<Column gap="8px">
2750
<Label>날짜</Label>
@@ -39,21 +62,6 @@ const TimeTableCategory = ({
3962
</CategoryBox>
4063
</Column>
4164
)}
42-
<Column gap="8px">
43-
<Label>시간표 형식</Label>
44-
<CategoryBox>
45-
{["bar", "table"].map((type) => (
46-
<Category
47-
key={type}
48-
id={type}
49-
label={getTimetableType(type)}
50-
checked={timetableType === type}
51-
onChange={(e) => setTimetableType(e.target.id as "bar" | "table")}
52-
name="date"
53-
/>
54-
))}
55-
</CategoryBox>
56-
</Column>
5765
</Column>
5866
);
5967
};

src/templates/timetable/layouts/TimeTableTable.tsx

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,32 +13,34 @@ const TimeTableTable = ({ dayTimeTable }: ITimeTableTableProps) => {
1313
const { weekdaysENGDetail: weekdays, translateDay } = useDate();
1414

1515
return (
16-
<Container>
17-
<Column>
18-
{Array.from({ length: 8 }).map((_, i) => (
19-
<TableItem color={color.content}>
20-
<TableHeadText>{i ? `${i}교시` : "교시 \\ 요일"}</TableHeadText>
21-
</TableItem>
22-
))}
23-
</Column>
24-
{weekdays.map((weekday) => {
25-
if (!dayTimeTable[weekday]) return;
26-
return (
27-
<TableBox>
16+
!!Object.entries(dayTimeTable).length && (
17+
<Container>
18+
<Column>
19+
{Array.from({ length: 8 }).map((_, i) => (
2820
<TableItem color={color.content}>
29-
<TableHeadText>
30-
{translateDay(weekday, { to: "KOR" })}요일
31-
</TableHeadText>
21+
<TableHeadText>{i ? `${i}교시` : "교시 \\ 요일"}</TableHeadText>
3222
</TableItem>
33-
{dayTimeTable[weekday]?.map((timetable) => (
34-
<TableItem color={color.white}>
35-
<TableText>{timetable.subject}</TableText>
23+
))}
24+
</Column>
25+
{weekdays.map((weekday) => {
26+
if (!dayTimeTable[weekday]) return;
27+
return (
28+
<TableBox>
29+
<TableItem color={color.content}>
30+
<TableHeadText>
31+
{translateDay(weekday, { to: "KOR" })}요일
32+
</TableHeadText>
3633
</TableItem>
37-
))}
38-
</TableBox>
39-
);
40-
})}
41-
</Container>
34+
{dayTimeTable[weekday]?.map((timetable) => (
35+
<TableItem color={color.white}>
36+
<TableText>{timetable.subject}</TableText>
37+
</TableItem>
38+
))}
39+
</TableBox>
40+
);
41+
})}
42+
</Container>
43+
)
4244
);
4345
};
4446

src/types/storageSettingKey.type.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1-
type StorageSettingKey = "theme" | "viewAllChildComments" | "post_render_limit";
1+
type StorageSettingKey =
2+
| "theme"
3+
| "viewAllChildComments"
4+
| "post_render_limit"
5+
| "timetable_type";
26

37
export default StorageSettingKey;

0 commit comments

Comments
 (0)