11import TicketHostLayout from '../../../shared/ui/backgrounds/TicketHostLayout' ;
22import TicketLogo from '../../../../public/assets/menu/TicketLogo.svg' ;
3- import { useState } from 'react' ;
3+ import { useEffect , useState } from 'react' ;
44import QrModal from '../../../../design-system/ui/modals/QrModal' ;
55import QRbackground from '../../../../design-system/icons/QRbackground.svg' ;
66import EventCard from '../../../shared/ui/EventCard' ;
77import completedImg from '../../../../public/assets/menu/Completed.svg' ;
88import pendingImg from '../../../../public/assets/menu/Pending.svg' ;
99import ticketImg from '../../../../public/assets/menu/Ticket.svg' ;
10- import { useTicketOrders } from '../../../features/ticket/hooks/useOrderHook' ;
10+ import { useCancelTicket , useTicketOrders } from '../../../features/ticket/hooks/useOrderHook' ;
1111import { OrderTicketResponse } from '../../../features/ticket/model/Order' ;
1212import EmailDeleteModal from '../../../widgets/dashboard/ui/email/EmailDeleteModal' ;
1313import TertiaryButton from '../../../../design-system/ui/buttons/TertiaryButton' ;
@@ -18,9 +18,16 @@ const MyTicketPage = () => {
1818 const [ isCancelMode , setIsCancelMode ] = useState ( false ) ;
1919 const [ selectedIds , setSelectedIds ] = useState < number [ ] > ( [ ] ) ;
2020 const [ isDeleteModalOpen , setIsDeleteModalOpen ] = useState ( false ) ;
21+ const [ tickets , setTickets ] = useState < OrderTicketResponse [ ] > ( [ ] ) ;
2122
2223 const { data, isLoading, isError } = useTicketOrders ( 0 , 10 ) ;
23- const myTickets : OrderTicketResponse [ ] = data ?. result || [ ] ;
24+ const { mutate : cancelTicket } = useCancelTicket ( ) ;
25+
26+ useEffect ( ( ) => {
27+ if ( data ?. result ) {
28+ setTickets ( data . result ) ;
29+ }
30+ } , [ data ] ) ;
2431
2532 return (
2633 < TicketHostLayout image = { TicketLogo } centerContent = "내 티켓" ticketPage = { true } isCancelMode = { isCancelMode } >
@@ -31,7 +38,17 @@ const MyTicketPage = () => {
3138 type = "button"
3239 color = "pink"
3340 size = "small"
34- onClick = { ( ) => setIsCancelMode ( prev => ! prev ) }
41+ onClick = { ( ) => {
42+ if ( isCancelMode ) {
43+ if ( selectedIds . length > 0 ) {
44+ setIsDeleteModalOpen ( true ) ;
45+ } else {
46+ alert ( '취소할 티켓을 선택해주세요.' ) ;
47+ }
48+ } else {
49+ setIsCancelMode ( true ) ;
50+ }
51+ } }
3552 />
3653 </ div >
3754 ) }
@@ -42,8 +59,8 @@ const MyTicketPage = () => {
4259 < p className = "col-span-2 text-center text-sm md:text-base" > 티켓을 불러오는 중입니다...</ p >
4360 ) : isError ? (
4461 < p className = "col-span-2 text-center text-sm md:text-base text-red-500" > 티켓을 불러오는데 실패했습니다.</ p >
45- ) : myTickets . length > 0 ? (
46- myTickets . map ( ticket => (
62+ ) : tickets . length > 0 ? (
63+ tickets . map ( ticket => (
4764 < EventCard
4865 key = { ticket . id }
4966 id = { ticket . id }
@@ -117,11 +134,12 @@ const MyTicketPage = () => {
117134 rejectButtonText = "뒤로가기"
118135 onClose = { ( ) => setIsDeleteModalOpen ( false ) }
119136 onClick = { ( ) => {
120- /* cancelOrderTicket(selectedIds).then(() => {
137+ Promise . all ( selectedIds . map ( id => cancelTicket ( id ) ) ) . then ( ( ) => {
138+ setTickets ( prev => prev . filter ( ticket => ! selectedIds . includes ( ticket . id ) ) ) ;
121139 setIsDeleteModalOpen ( false ) ;
122140 setIsCancelMode ( false ) ;
123141 setSelectedIds ( [ ] ) ;
124- }); */
142+ } ) ;
125143 } }
126144 />
127145 ) }
0 commit comments