Skip to content

Commit 190d8e3

Browse files
authored
Merge pull request #206 from prgrms-aibe-devcourse/refector/calendar
remove: 반복일정 중복 체크 제거
2 parents e8f8689 + 6561a8a commit 190d8e3

1 file changed

Lines changed: 7 additions & 79 deletions

File tree

src/hooks/useCalendar.ts

Lines changed: 7 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)