@@ -8,14 +8,17 @@ import 'react-datepicker/dist/react-datepicker.css';
88import { api } from '../../api/api' ;
99import { useDispatch } from 'react-redux' ;
1010import { setPageTitle } from '../../store/slices/headerSlice' ;
11+ import { finishLoading , startLoading } from '../../store/slices/loadingSlice' ;
12+ import Alert from '../../components/Alert/Alert' ;
1113
1214export default function TimePaperSetLock ( ) {
1315 const [ email , setEmail ] = useState ( '' ) ;
14- const [ loading , setLoading ] = useState ( false ) ;
1516 const [ error , setError ] = useState ( false ) ;
1617 const [ errorMessage , setErrorMessage ] = useState ( '제목을 입력해주세요.' ) ;
1718 const [ releaseDate , setReleaseDate ] = useState ( null ) ;
18- const [ isLoginButtonEnable , setIsLoginButtonEnable ] = useState ( false ) ;
19+ const [ isCapsuleButtonEnable , setIsCapsuleButtonEnable ] = useState ( false ) ;
20+ const [ isShowAlert , setIsShowAlert ] = useState ( false ) ;
21+ const [ alertMessage , setAlertMessage ] = useState ( '' ) ;
1922 const { timepaperId } = useParams ( ) ;
2023 const navigate = useNavigate ( ) ;
2124 const location = useLocation ( ) ;
@@ -37,41 +40,46 @@ export default function TimePaperSetLock() {
3740
3841 const handleSubmit = async ( e ) => {
3942 e . preventDefault ( ) ;
40- setIsLoginButtonEnable ( false ) ;
43+ setIsCapsuleButtonEnable ( false ) ;
4144
42- setLoading ( true ) ;
45+ dispatch ( startLoading ( ) ) ;
4346
4447 try {
4548 const response = await api . lockTimepaper ( timepaperId , email , releaseDate ) ;
4649 navigate ( `/timepaper/${ response . id } /lock` , { replace : true } ) ;
4750 } catch ( err ) {
4851 console . error ( err ) ;
49- setError ( true ) ;
50- setErrorMessage ( '타임페이퍼 캡슐화 중 오류가 발생했습니다.' ) ;
52+ setIsShowAlert ( true )
53+ setAlertMessage ( '타임페이퍼 캡슐화 중 오류가 발생했습니다.' ) ;
5154 } finally {
52- setLoading ( false ) ;
53- setIsLoginButtonEnable ( true ) ;
55+ dispatch ( finishLoading ( ) ) ;
56+ setIsCapsuleButtonEnable ( true ) ;
5457 }
5558 } ;
5659
5760 useEffect ( ( ) => {
5861 if ( ! error && email . trim ( ) . length !== 0 && releaseDate !== null ) {
59- setIsLoginButtonEnable ( true ) ;
62+ setIsCapsuleButtonEnable ( true ) ;
6063 } else {
61- setIsLoginButtonEnable ( false ) ;
64+ setIsCapsuleButtonEnable ( false ) ;
6265 }
6366 } , [ email , releaseDate ] ) ;
6467
6568 useEffect ( ( ) => {
6669 dispatch ( setPageTitle ( '타임캡슐 생성' ) ) ;
6770 } , [ ] ) ;
6871
72+ const handleAlertButtonClick = ( ) => {
73+ setIsShowAlert ( false ) ;
74+ } ;
75+
6976 if ( ! location . state ?. authorEmail ) {
7077 return < Navigate to = "/404" replace /> ;
7178 }
7279
7380 return (
7481 < >
82+ { isShowAlert && < Alert message = { alertMessage } buttonTitle = { "확인" } onClick = { handleAlertButtonClick } > </ Alert > }
7583 < form >
7684 < div className = { styles . container } >
7785 < div className = { styles . inputContainer } >
@@ -101,9 +109,9 @@ export default function TimePaperSetLock() {
101109 </ div >
102110 </ div >
103111 < BottomButton
104- title = { loading ? '시간 자물쇠 거는 중...' : '타임페이퍼 캡슐화' }
112+ title = { '타임페이퍼 캡슐화' }
105113 onClick = { handleSubmit }
106- isEnable = { isLoginButtonEnable }
114+ isEnable = { isCapsuleButtonEnable }
107115 />
108116 </ div >
109117 </ form >
0 commit comments