@@ -9,6 +9,12 @@ import getInvitations, {
99import postInvite from '@/lib/invite/postInvite' ;
1010import styles from './InviteTitle.module.css' ;
1111import InviteList from './InviteList' ;
12+ import AuthModal from '@/components/common/modal/auth/AuthModal' ;
13+ import { toast } from 'react-toastify' ;
14+
15+ const INITIAL_VALUES = {
16+ email : '' ,
17+ } ;
1218
1319export default function InviteTitle ( ) {
1420 const [ members , setMembers ] = useState < GetInvitationsResponse [ 'invitations' ] > (
@@ -17,9 +23,13 @@ export default function InviteTitle() {
1723 const [ currentPage , setCurrentPage ] = useState ( 1 ) ;
1824 const [ totalPages , setTotalPages ] = useState ( 1 ) ;
1925 const [ isModalOpen , setIsModalOpen ] = useState ( false ) ;
20- const [ emailValue , setEmailValue ] = useState < { email : string } > ( {
21- email : '' ,
22- } ) ;
26+ const [ emailValue , setEmailValue ] = useState < { email : string } > (
27+ INITIAL_VALUES ,
28+ ) ;
29+ const [ isModalVisible , setIsModalVisible ] = useState ( false ) ;
30+ const [ responseMessage , setResponseMessage ] = useState ( '' ) ;
31+ const [ alertMessage , setAlertMessage ] = useState < string | null > ( null ) ;
32+
2333 const router = useRouter ( ) ;
2434
2535 useEffect ( ( ) => {
@@ -41,21 +51,31 @@ export default function InviteTitle() {
4151 }
4252 } ;
4353 fetchInvitations ( ) ;
44- } , [ router . query . id , currentPage ] ) ;
54+ } , [ router . query . id , currentPage , isModalOpen ] ) ;
4555
46- const handleCancelClick = ( ) => {
47- setIsModalOpen ( false ) ;
48- } ;
56+ // 초대 요청을 보내고 alert
57+ useEffect ( ( ) => {
58+ if ( ! isModalOpen && alertMessage ) {
59+ toast . success ( alertMessage ) ;
60+ setAlertMessage ( null ) ;
61+ }
62+ } , [ isModalOpen , alertMessage ] ) ;
4963
5064 const submitInvite = async ( ) => {
5165 const id = Number ( router . query . id ) ;
5266
5367 try {
54- await postInvite ( { id, email : emailValue . email } ) ;
68+ const response = await postInvite ( { id, email : emailValue . email } ) ;
5569 setIsModalOpen ( false ) ;
56- router . reload ( ) ;
70+ setEmailValue ( INITIAL_VALUES ) ;
71+ setAlertMessage (
72+ `${ response . invitee . nickname } 님께 초대 요청을 보냈습니다.` ,
73+ ) ;
5774 } catch ( error ) {
58- throw new Error ( `${ error } ` ) ;
75+ setIsModalOpen ( false ) ;
76+ setResponseMessage ( error . message ) ;
77+ setIsModalVisible ( true ) ;
78+ setEmailValue ( INITIAL_VALUES ) ;
5979 }
6080 } ;
6181
@@ -67,6 +87,11 @@ export default function InviteTitle() {
6787 }
6888 } ;
6989
90+ const handleCancelClick = ( ) => {
91+ setIsModalOpen ( false ) ;
92+ setIsModalVisible ( false ) ;
93+ } ;
94+
7095 return (
7196 < section className = { styles [ 'title-container' ] } >
7297 < div className = { styles [ 'member-section' ] } >
@@ -101,24 +126,29 @@ export default function InviteTitle() {
101126 < div className = { styles [ 'name-section' ] } >
102127 < h2 className = { styles [ 'sub-title' ] } > 이메일</ h2 >
103128 < div className = { styles [ 'list' ] } >
104- < InviteList members = { members } />
129+ < InviteList members = { members } setMembers = { setMembers } />
105130 </ div >
106131 </ div >
107- < div >
108- < InviteModal
109- label = "이메일"
110- placeholder = "이메일을 입력해 주세요"
111- isOpen = { isModalOpen }
112- onClose = { handleCancelClick }
113- title = "초대하기"
114- inputValue = { emailValue . email }
115- onInputChange = { ( value ) => setEmailValue ( { email : value } ) }
116- cancelTitle = "취소"
117- adaptTitle = "생성"
132+ < InviteModal
133+ label = "이메일"
134+ placeholder = "이메일을 입력해 주세요"
135+ isOpen = { isModalOpen }
136+ onClose = { handleCancelClick }
137+ title = "초대하기"
138+ inputValue = { emailValue . email }
139+ onInputChange = { ( value ) => setEmailValue ( { email : value } ) }
140+ cancelTitle = "취소"
141+ adaptTitle = "초대"
142+ handleCancelClick = { handleCancelClick }
143+ handleAdaptClick = { submitInvite }
144+ />
145+
146+ { isModalVisible && (
147+ < AuthModal
148+ message = { responseMessage }
118149 handleCancelClick = { handleCancelClick }
119- handleAdaptClick = { submitInvite }
120150 />
121- </ div >
151+ ) }
122152 </ section >
123153 ) ;
124154}
0 commit comments