@@ -327,10 +327,8 @@ export const useCalendar = (options: UseCalendarOptions = {}): UseCalendarReturn
327327 // 특정 날짜의 이벤트 필터링
328328 const getEventsForDate = useCallback ( ( date : Date ) : Event [ ] => {
329329 const targetDate = new Date ( date . getFullYear ( ) , date . getMonth ( ) , date . getDate ( ) ) ;
330- const targetDateString = targetDate . toISOString ( ) . split ( 'T' ) [ 0 ] ; // YYYY-MM-DD 형식
331330
332331 const filteredEvents = events . filter ( event => {
333-
334332 const eventStartDate = event . date instanceof Date ? new Date ( event . date ) : new Date ( event . date ) ;
335333 const eventStart = new Date ( eventStartDate . getFullYear ( ) , eventStartDate . getMonth ( ) , eventStartDate . getDate ( ) ) ;
336334
@@ -339,90 +337,20 @@ export const useCalendar = (options: UseCalendarOptions = {}): UseCalendarReturn
339337 eventStartDate ;
340338 const eventEnd = new Date ( eventEndDate . getFullYear ( ) , eventEndDate . getMonth ( ) , eventEndDate . getDate ( ) ) ;
341339
342- // 반복 설정이 없는 경우
343- if ( ! event . repeat || event . repeat === 'none' ) {
344- return targetDate >= eventStart && targetDate <= eventEnd ;
345- }
346-
347- // 반복 일정 처리
348- if ( targetDate < eventStart ) {
349- return false ;
350- }
351-
352- // 반복 종료일 확인
353- if ( event . repeatEndDate ) {
354- const repeatEndDate = event . repeatEndDate instanceof Date ?
355- new Date ( event . repeatEndDate ) :
356- new Date ( event . repeatEndDate ) ;
357- const repeatEnd = new Date ( repeatEndDate . getFullYear ( ) , repeatEndDate . getMonth ( ) , repeatEndDate . getDate ( ) ) ;
358-
359- if ( targetDate > repeatEnd ) {
360- return false ;
361- }
362- }
363-
364- // 예외 날짜(exceptionDates) 확인 - 이 날짜들은 제외
365- if ( event . exceptionDates && Array . isArray ( event . exceptionDates ) && event . exceptionDates . length > 0 ) {
366-
367- // 예외 날짜 배열에서 해당 날짜가 있는지 확인
368- const isExceptionDate = event . exceptionDates . some ( exceptionDate => {
369- // exceptionDate가 "2025-06-24T09:00:00" 형식인 경우 날짜 부분만 추출
370- let exceptionDateString ;
371- if ( typeof exceptionDate === 'string' ) {
372- exceptionDateString = exceptionDate . split ( 'T' ) [ 0 ] ;
373- } else {
374- exceptionDateString = new Date ( exceptionDate ) . toISOString ( ) . split ( 'T' ) [ 0 ] ;
375- }
376-
377- return exceptionDateString === targetDateString ;
378- } ) ;
379-
380- if ( isExceptionDate ) {
381- return false ; // 예외 날짜이므로 해당 날짜에는 표시하지 않음
382- }
383- }
384-
385- // 반복 패턴 확인
386- let patternMatch = false ;
387- switch ( event . repeat ) {
388- case 'daily' :
389- patternMatch = true ;
390- break ;
391- case 'weekly' :
392- patternMatch = eventStart . getDay ( ) === targetDate . getDay ( ) ;
393- break ;
394- case 'monthly' :
395- const startDay = eventStart . getDate ( ) ;
396- const targetDay = targetDate . getDate ( ) ;
397- const lastDayOfTargetMonth = new Date ( targetDate . getFullYear ( ) , targetDate . getMonth ( ) + 1 , 0 ) . getDate ( ) ;
398- const adjustedStartDay = startDay > lastDayOfTargetMonth ? lastDayOfTargetMonth : startDay ;
399- patternMatch = targetDay === adjustedStartDay ;
400- break ;
401- case 'yearly' :
402- patternMatch = eventStart . getMonth ( ) === targetDate . getMonth ( ) &&
403- eventStart . getDate ( ) === targetDate . getDate ( ) ;
404- break ;
405- default :
406- patternMatch = false ;
407- }
408-
409- return patternMatch ;
340+ // 백엔드가 이미 반복 일정을 확장해서 인스턴스로 보내주므로
341+ // 프론트에서는 단순히 날짜 범위만 체크
342+ return targetDate >= eventStart && targetDate <= eventEnd ;
410343 } ) ;
411344
412- // 중복 제거: 같은 제목, 시간, 카테고리를 가진 이벤트들을 하나로 합치기
345+ // 중복 제거
413346 const uniqueEvents = filteredEvents . reduce ( ( acc : Event [ ] , current : Event ) => {
414- const duplicate = acc . find ( event =>
415- event . title === current . title &&
416- event . startTime === current . startTime &&
417- event . endTime === current . endTime &&
418- event . category === current . category &&
419- event . isAllDay === current . isAllDay
347+ const duplicate = acc . find ( event =>
348+ event . id === current . id &&
349+ event . startTime === current . startTime
420350 ) ;
421-
422351 if ( ! duplicate ) {
423352 acc . push ( current ) ;
424353 }
425-
426354 return acc ;
427355 } , [ ] ) ;
428356
0 commit comments