@@ -25,6 +25,8 @@ import { useMedia } from "../hooks/use-media";
2525import { useModalDialog } from "../hooks/use-modal-dialog" ;
2626import ContentLayout from "../layouts/content-layout" ;
2727import { media } from "../utils/media" ;
28+ import Toast from "../components/toast/toast" ;
29+ import { useToast } from "../hooks/use-toast" ;
2830
2931const Content = styled . div `
3032 & > div {
@@ -111,6 +113,8 @@ function MessagesPage() {
111113 onPrimaryAction,
112114 onDismissDialog,
113115 } = useModalDialog ( ) ;
116+ const [ toastMessage , setToastMessage ] = useState ( ) ;
117+ const [ hasMoreMessages , setHasMoreMessages ] = useState ( true ) ;
114118
115119 const isEditing = useMemo (
116120 ( ) => location . pathname . includes ( "edit" ) ,
@@ -121,6 +125,12 @@ function MessagesPage() {
121125 navigate ( "edit" ) ;
122126 } ;
123127
128+ const { showsToast, isOpen, setShowsToast, onDismiss } = useToast ( {
129+ timeout : 5000 ,
130+ } ) ;
131+
132+ const handleToastCloseClick = ( ) => setShowsToast ( false ) ;
133+
124134 const handleRollingPaperDelete = ( ) => {
125135 openDialog ( {
126136 title : `${ recipient . name } 님의 롤링 페이퍼를 삭제할까요?` ,
@@ -130,8 +140,9 @@ function MessagesPage() {
130140 await deleteRecipient ( { id : recipient . id } ) ;
131141 navigate ( `/list` ) ;
132142 } catch ( error ) {
133- // TODO: Error 처리
134143 console . log ( error ) ;
144+ setToastMessage ( error ) ;
145+ setShowsToast ( true ) ;
135146 }
136147 } ,
137148 } ) ;
@@ -152,8 +163,9 @@ function MessagesPage() {
152163 prev . filter ( ( prevMessage ) => prevMessage . id !== message . id )
153164 ) ;
154165 } catch ( error ) {
155- // TODO: Error 처리
156166 console . log ( error ) ;
167+ setToastMessage ( error ) ;
168+ setShowsToast ( true ) ;
157169 }
158170 } ,
159171 } ) ;
@@ -168,8 +180,11 @@ function MessagesPage() {
168180 } ;
169181
170182 const handleInfiniteScroll = async ( ) => {
171- const messages = await getNextPageMessages ( ) ;
172- if ( ! messages ) return ;
183+ if ( ! hasMoreMessages ) return ;
184+
185+ try {
186+ const messages = await getNextPageMessages ( ) ;
187+ if ( ! messages ) return ;
173188
174189 setMessages ( ( prev ) => {
175190 const newMessages = [ ...prev ] ;
@@ -181,6 +196,12 @@ function MessagesPage() {
181196
182197 return newMessages ;
183198 } ) ;
199+ } catch ( error ) {
200+ console . error ( error ) ;
201+ setToastMessage ( error ) ;
202+ setShowsToast ( true ) ;
203+ setHasMoreMessages ( false ) ;
204+ }
184205 } ;
185206
186207 useEffect ( ( ) => {
@@ -196,11 +217,12 @@ function MessagesPage() {
196217 } catch ( error ) {
197218 // TODO: Error 처리 필요
198219 console . error ( error ) ;
220+ navigate ( "/notfound" , { replace : true } ) ;
199221 }
200222 }
201223
202224 fetchRollingPaper ( ) ;
203- } , [ id ] ) ;
225+ } , [ id , navigate ] ) ;
204226
205227 const content = (
206228 < >
@@ -270,6 +292,15 @@ function MessagesPage() {
270292 }
271293 />
272294 </ Modal >
295+
296+ { showsToast &&
297+ < Toast
298+ isOpen = { isOpen }
299+ message = { `${ toastMessage } 🚨` }
300+ onClose = { handleToastCloseClick }
301+ onDismiss = { onDismiss }
302+ />
303+ }
273304 </ ContentLayout >
274305 ) ;
275306}
0 commit comments