@@ -21,12 +21,6 @@ const TicketCreatePage = () => {
2121 startTime : '' ,
2222 endTime : '' ,
2323 } ) ;
24- const [ eventState , setEventState ] = useState ( {
25- startDate : '' ,
26- endDate : '' ,
27- startTime : '' ,
28- endTime : '' ,
29- } ) ;
3024
3125 const handleTicketTypeChange = ( type : string ) => {
3226 let mappedType : string ;
@@ -44,6 +38,9 @@ const TicketCreatePage = () => {
4438 // 필드값 업데이트
4539 const handleInputChange = ( field : keyof CreateTicketRequest ) => ( e : React . ChangeEvent < HTMLInputElement > ) => {
4640 const value = e . target . value ;
41+ if ( ( field === 'ticketPrice' || field === 'availableQuantity' ) && Number ( value ) < 0 ) {
42+ return ;
43+ }
4744 setTicketData ( ( prev ) => ( {
4845 ...prev ,
4946 [ field ] : field === 'ticketPrice' || field === 'availableQuantity' ? Number ( value ) : value ,
@@ -52,7 +49,6 @@ const TicketCreatePage = () => {
5249
5350 // 시간 업데이트
5451 const handleDateChange = ( dates : { startDate : string ; endDate : string ; startTime : string ; endTime : string } ) => {
55- setEventState ( dates ) ;
5652 setTicketData ( ( prevState ) => ( {
5753 ...prevState ,
5854 startDate : dates . startDate ,
@@ -76,11 +72,17 @@ const TicketCreatePage = () => {
7672
7773 // API 호출
7874 const handleSaveClick = async ( ) => {
75+ if ( ! ticketData . ticketName || ! ticketData . ticketDescription || ticketData . ticketPrice < 0 || ! ticketData . availableQuantity ) {
76+ alert ( '모든 필수 입력 항목을 작성해주세요.' ) ;
77+ return ;
78+ }
7979 try {
8080 const response = await createTicket ( ticketData ) ;
8181 console . log ( '티켓 저장 성공:' , response ) ;
82+ alert ( '티켓이 성공적으로 저장되었습니다.' ) ;
8283 } catch ( err ) {
8384 console . error ( '티켓 저장에 실패했습니다.' , err ) ;
85+ alert ( '티켓 저장에 실패했습니다. 다시 시도해주세요.' ) ;
8486 }
8587 } ;
8688
@@ -97,7 +99,7 @@ const TicketCreatePage = () => {
9799 < div >
98100 < div className = "w-32 md:w-40 my-1" >
99101 < p className = "font-semibold px-1 mb-1 text-gray-700" > 티켓 종류</ p >
100- < ChoiceChip { ...TwoOptions . args } onSelect = { handleTicketTypeChange } />
102+ < ChoiceChip { ...TwoOptions . args } onSelect = { handleTicketTypeChange } />
101103 </ div >
102104 < p className = "block px-1 mb-1 text-placeholderText text-11 md:text-13" >
103105 참가자가 선착순으로 발행된 티켓을 구매합니다.
@@ -139,13 +141,11 @@ const TicketCreatePage = () => {
139141 { /*캘린더가 들어갈 자리*/ }
140142 < div className = "flex flex-col gap-2" >
141143 < p className = "px-1 text-gray-700 font-semibold" > 판매 기간</ p >
142- < TicketDatePicker isLabel = { true } ticketState = { eventState }
143- setTicketState = { setEventState } onDateChange = { handleDateChange } />
144+ < TicketDatePicker isLabel = { true } ticketState = { ticketData }
145+ setTicketState = { setTicketData } onDateChange = { handleDateChange } />
144146 </ div >
147+
145148 < div className = "flex-grow" > </ div >
146- < div className = "ticket-data-output" >
147- < pre > { JSON . stringify ( ticketData , null , 2 ) } </ pre >
148- </ div >
149149
150150 < div className = "w-full " >
151151 < Button label = "저장하기" onClick = { handleSaveClick } className = "w-full h-12 rounded-full" />
@@ -155,5 +155,4 @@ const TicketCreatePage = () => {
155155 ) ;
156156} ;
157157
158- export default TicketCreatePage ;
159-
158+ export default TicketCreatePage ;
0 commit comments