@@ -17,6 +17,7 @@ interface CreateEventData {
1717 duration : string
1818 participants : User [ ]
1919 selectedRange : { start : Date ; end : Date } | null
20+ disabled : boolean
2021}
2122
2223export function RescheduleRequests ( ) {
@@ -29,6 +30,7 @@ export function RescheduleRequests() {
2930 duration : '1hr' ,
3031 participants : [ ] ,
3132 selectedRange : null ,
33+ disabled : false ,
3234 } )
3335
3436 const [ fullRequests , setFullRequests ] = useState < {
@@ -120,7 +122,31 @@ export function RescheduleRequests() {
120122 }
121123 }
122124
123- const handleRequestAccept = async ( requestID : number ) => { }
125+ const handleRequestAccept = async ( oldEvent : CalendarEvent ) => {
126+ const start = parseISO ( oldEvent . startTime ! )
127+ const end = parseISO ( oldEvent . endTime ! )
128+ const diffInMinutes = Math . round ( ( end . getTime ( ) - start . getTime ( ) ) / 60000 )
129+ const candidates = [ 30 , 60 , 120 ] ;
130+ const closest = candidates . reduce ( ( prev , curr ) =>
131+ Math . abs ( curr - diffInMinutes ) < Math . abs ( prev - diffInMinutes ) ? curr : prev
132+ ) ;
133+ const durationString =
134+ closest === 30 ? '30 minutes' : closest === 60 ? '1hr' : '2hrs' ;
135+
136+ const newParticipants = await convertAttendeesToUsers ( oldEvent . attendees )
137+
138+ setCreateEventData ( {
139+ title : oldEvent . subject ?? '' ,
140+ duration : durationString ,
141+ participants : newParticipants ,
142+ selectedRange : {
143+ start : new Date ( oldEvent . startTime ! ) ,
144+ end : new Date ( oldEvent . endTime ! ) ,
145+ } ,
146+ disabled : true ,
147+ } )
148+ setCreateEventOpen ( true )
149+ }
124150
125151 // TODO - this can be removed since we are using full requests instead
126152 useEffect ( ( ) => {
@@ -224,48 +250,29 @@ export function RescheduleRequests() {
224250 </ div >
225251
226252 < div className = 'flex items-center gap-2' >
227- { request . status === 'pending' && (
228- < >
229- { request . newMeeting ! . startTime ===
230- '0001-01-01T00:00:00Z' ? (
231- < Button
232- variant = 'outline'
233- size = 'sm'
234- className = 'w-full text-green-500 hover:text-green-600 hover:bg-green-50'
235- // onClick={() =>
236- // handleRequestAccept(request.request_id)
237- // }
238- >
239- < Check className = 'h-4 w-4 mr-1' />
240- Reschedule Now
241- </ Button >
242- ) : (
243- < Button
244- variant = 'outline'
245- size = 'sm'
246- className = 'w-full text-green-500 hover:text-green-600 hover:bg-green-50'
247- // onClick={() => handleAction(request.id, 'accept')}
248- >
249- < Check className = 'h-4 w-4 mr-1' />
250- View Proposal
251- </ Button >
252- ) }
253- </ >
254- ) }
253+ < Button
254+ variant = 'outline'
255+ size = 'sm'
256+ className = 'w-full text-green-500 hover:text-green-600 hover:bg-green-50'
257+ onClick = { ( ) =>
258+ handleRequestAccept ( fullRequests [ request . request_id ] ! . oldEvent )
259+ }
260+ >
261+ < Check className = 'h-4 w-4 mr-1' />
262+ Reschedule Now
263+ </ Button >
255264
256- { request . status === 'pending' && (
257- < Button
258- variant = 'outline'
259- size = 'sm'
260- className = 'w-full text-red-500 hover:text-red-600 hover:bg-red-50'
261- onClick = { ( ) =>
262- handleRequestReject ( request . request_id )
263- }
264- >
265- < X className = 'h-4 w-4 mr-1' />
266- Ignore
267- </ Button >
268- ) }
265+ < Button
266+ variant = 'outline'
267+ size = 'sm'
268+ className = 'w-full text-red-500 hover:text-red-600 hover:bg-red-50'
269+ onClick = { ( ) =>
270+ handleRequestReject ( request . request_id )
271+ }
272+ >
273+ < X className = 'h-4 w-4 mr-1' />
274+ Ignore
275+ </ Button >
269276 </ div >
270277 </ div >
271278 </ div >
@@ -309,6 +316,7 @@ export function RescheduleRequests() {
309316 currentFullRequest . newEvent . endTime ,
310317 ) ,
311318 } ,
319+ disabled : false ,
312320 } )
313321 } else {
314322 const newParticipants = await convertAttendeesToUsers (
@@ -319,6 +327,7 @@ export function RescheduleRequests() {
319327 duration : '1hr' ,
320328 participants : newParticipants ,
321329 selectedRange : null ,
330+ disabled : false ,
322331 } )
323332 }
324333 setCreateEventOpen ( true )
@@ -375,14 +384,7 @@ export function RescheduleRequests() {
375384 : '' }
376385 </ div >
377386 </ div >
378- { /* <div className='flex items-start gap-2'>
379- <div className='w-20 font-medium shrink-0'>
380- Requested:
381- </div>
382- <div className='text-muted-foreground'>
383- {request.requestedDateTime}
384- </div>
385- </div> */ }
387+
386388 < div className = 'flex items-start gap-2' >
387389 < div className = 'w-25 font-medium shrink-0' >
388390 Attendees:
@@ -398,51 +400,6 @@ export function RescheduleRequests() {
398400 </ div >
399401 </ div >
400402 </ div >
401-
402- < div className = 'flex items-center gap-2' >
403- { request . status === 'pending' && (
404- < >
405- { request . newMeeting ! . startTime ===
406- '0001-01-01T00:00:00Z' ? (
407- < Button
408- variant = 'outline'
409- size = 'sm'
410- className = 'w-full text-green-500 hover:text-green-600 hover:bg-green-50'
411- // onClick={() =>
412- // handleRequestAccept(request.request_id)
413- // }
414- >
415- < Check className = 'h-4 w-4 mr-1' />
416- Reschedule Now
417- </ Button >
418- ) : (
419- < Button
420- variant = 'outline'
421- size = 'sm'
422- className = 'w-full text-green-500 hover:text-green-600 hover:bg-green-50'
423- // onClick={() => handleAction(request.id, 'accept')}
424- >
425- < Check className = 'h-4 w-4 mr-1' />
426- View Proposal
427- </ Button >
428- ) }
429- </ >
430- ) }
431-
432- { request . status === 'pending' && (
433- < Button
434- variant = 'outline'
435- size = 'sm'
436- className = 'w-full text-red-500 hover:text-red-600 hover:bg-red-50'
437- onClick = { ( ) =>
438- handleRequestReject ( request . request_id )
439- }
440- >
441- < X className = 'h-4 w-4 mr-1' />
442- Ignore
443- </ Button >
444- ) }
445- </ div >
446403 </ div >
447404 </ div >
448405 ) ) }
@@ -460,6 +417,7 @@ export function RescheduleRequests() {
460417 initialDuration = { createEventData . duration }
461418 initialParticipants = { createEventData . participants }
462419 initialSelectedRange = { createEventData . selectedRange }
420+ inputsDisabled = { createEventData . disabled }
463421 />
464422 </ >
465423 )
0 commit comments