Skip to content

Commit 436ba70

Browse files
committed
imp: show toast for user who enter events page
1 parent 4c3f5f3 commit 436ba70

File tree

3 files changed

+28
-12
lines changed

3 files changed

+28
-12
lines changed

components/events/TimetableTemplate.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Days, Pagination, Timetable } from "@components/events";
33
import { Eraser } from "@components/icons";
44
import styled from "@emotion/styled";
55
import type { Attendees } from "@eventsTypes";
6+
import useToast from "@lib/hooks/useToast";
67
import type { FC } from "react";
78
import { useState } from "react";
89

@@ -26,7 +27,7 @@ const TimetableTemplate: FC<Props> = ({
2627
}) => {
2728
const [pageIndex, setPageIndex] = useState(0);
2829
const [isEraseMode, setIsEraseMode] = useState(false);
29-
const [showToast, setShowToast] = useState(0);
30+
const { isToastOpen, toastKeyVal, toggleToast } = useToast();
3031
// const toastId = useRef<Id>("");
3132
const handleClickPageUp = () => {
3233
setPageIndex((index) => index + 1);
@@ -53,13 +54,13 @@ const TimetableTemplate: FC<Props> = ({
5354
<EraserIconWrapper
5455
onClick={() => {
5556
setIsEraseMode((prev) => !prev);
56-
setShowToast((prev) => prev + 1);
57+
toggleToast();
5758
}}
5859
>
5960
<Eraser isEraseMode={isEraseMode} />
6061
</EraserIconWrapper>
6162
</EraserWrapper>
62-
{showToast > 0 && <Toast message={toastMessage} key={showToast} />}
63+
{isToastOpen && <Toast message={toastMessage} key={toastKeyVal} />}
6364
<Days startDate={startDate} pageIndex={pageIndex} />
6465
<Timetable
6566
pageIndex={pageIndex}

lib/hooks/useToast.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { useCallback, useState } from "react";
2+
const useToast = () => {
3+
const [toastKeyVal, setToastKeyVal] = useState(0);
4+
const toggleToast = useCallback(() => {
5+
setToastKeyVal((prev) => prev + 1);
6+
}, []);
7+
const isToastOpen = toastKeyVal > 0;
8+
return { isToastOpen, toastKeyVal, toggleToast } as const;
9+
};
10+
11+
export default useToast;

pages/events/[id].tsx

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Button, ErrorBox, Modal } from "@components/common";
1+
import { Button, ErrorBox, Modal, Toast } from "@components/common";
22
import {
33
EntranceInput,
44
TimetableInfo,
@@ -9,6 +9,7 @@ import styled from "@emotion/styled";
99
import useEventsStore from "@hooks/useEventsStore";
1010
import useUrlEventId from "@hooks/useUrlEventId";
1111
import { closePage } from "@lib/handleCrossPlatform";
12+
import useToast from "@lib/hooks/useToast";
1213
import type { NextPageWithLayout } from "@pages/_app";
1314
import Link from "next/link";
1415
import { useEffect, useState } from "react";
@@ -18,6 +19,7 @@ const getLocalStorageKey = (id: string) => {
1819

1920
const Events: NextPageWithLayout = () => {
2021
const [windowHeight, setWindowHeight] = useState<number>(0);
22+
const { isToastOpen, toggleToast } = useToast();
2123
useEffect(() => {
2224
const resizeHandlerForFixedHeight = () => {
2325
if (window !== undefined) {
@@ -60,20 +62,19 @@ const Events: NextPageWithLayout = () => {
6062
if (window !== undefined) {
6163
window.localStorage.setItem(getLocalStorageKey(id), name);
6264
}
63-
//TODO 모달 활용해서 알림해주기
65+
toggleToast();
6466
return "";
6567
};
6668

6769
useEffect(() => {
6870
if (window === undefined || !id) return;
69-
const userName = window.localStorage.getItem(getLocalStorageKey(id));
70-
setCurrentAttendee(
71-
window.localStorage.getItem(getLocalStorageKey(id)) || ""
72-
);
73-
if (userName) {
74-
//TODO 모달 활용해서 알림해주기
71+
const previousAttendee =
72+
window.localStorage.getItem(getLocalStorageKey(id)) || "";
73+
if (previousAttendee) {
74+
setCurrentAttendee(previousAttendee);
75+
toggleToast();
7576
}
76-
}, [id]);
77+
}, [id, toggleToast]);
7778

7879
if (status === "idle" || status === "loading") {
7980
return (
@@ -107,6 +108,9 @@ const Events: NextPageWithLayout = () => {
107108
<EntranceInput onClickEntrance={handleClickEntrance} />
108109
</Modal>
109110
)}
111+
{isToastOpen && (
112+
<Toast message={`${currentAttendee}님이 입장하셨습니다.`} />
113+
)}
110114
<Container>
111115
<Header>
112116
<Text>가능한 시간을 입력하세요!</Text>

0 commit comments

Comments
 (0)