Skip to content

Commit facb8ec

Browse files
committed
feat: 중복체크,일정등록시 같은 배열이 있는경우에만 새로운 일정추가
1 parent 1cf09dd commit facb8ec

File tree

3 files changed

+21
-22
lines changed

3 files changed

+21
-22
lines changed

src/components/common/Calendar.tsx

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,11 @@
1-
/* eslint-disable react-hooks/exhaustive-deps */
21
import FullCalendar from '@fullcalendar/react';
3-
// import { EventClickArg } from '@fullcalendar/core';
42
import dayGridPlugin from '@fullcalendar/daygrid';
53
import interactionPlugin from '@fullcalendar/interaction';
64
import { useRef, useState, useEffect, useCallback } from 'react';
75
import { useEventState } from '@/stores/myEventsStore';
86
import { getPersonalSchedule } from '@/apis/personalScheduleApi';
97
import { Events } from '../../utils/index.ts';
108
import { formatDateRange, formatTime } from '../../utils/dateUtils';
11-
/*
12-
type Event = {
13-
title: string;
14-
start: string;
15-
end: string;
16-
backgroundColor?: string;
17-
borderColor?: string;
18-
textColor?: string;
19-
};
20-
*/
219

2210
interface EventInfo {
2311
timeText: string;
@@ -154,24 +142,23 @@ export default function Calendar() {
154142
}, [updateSize]);
155143

156144
const [isLoaded, setIsLoaded] = useState(false); // 데이터 로딩 상태
157-
158145
useEffect(() => {
159146
if (!isLoaded) {
160147
getPersonalSchedule().then((schedule) => {
161-
const uniqueEvents = schedule.filter(
162-
(newEvent) =>
163-
!events.some(
164-
(existingEvent) => existingEvent.start === newEvent.start_date && existingEvent.title === newEvent.title,
165-
),
148+
const uniqueEvents = schedule.filter(newEvent =>
149+
!events.some(existingEvent =>
150+
existingEvent.start === newEvent.start_date && existingEvent.title === newEvent.title
151+
)
166152
);
167153
if (uniqueEvents.length > 0) {
168154
const eventsToAdd = convertEvents(uniqueEvents);
169-
eventsToAdd.forEach((eventToAdd) => addEvents(eventToAdd));
155+
eventsToAdd.forEach(eventToAdd => addEvents(eventToAdd));
170156
setIsLoaded(true);
171157
}
172158
});
173159
}
174-
}, [events, addEvents]);
160+
}, [events, addEvents, isLoaded]);
161+
175162

176163
return (
177164
<div>
@@ -214,6 +201,7 @@ export default function Calendar() {
214201
<div className="mt-10">{selectedDate && <EventCards events={selectedEvents} date={selectedDate} />}</div>
215202
</div>
216203
);
204+
217205
}
218206

219207
function renderEventContent(eventInfo: EventInfo) {

src/pages/MyCalendarPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ const MyCalendarPage: React.FC = () => {
4848
</header>
4949
<main className="z-1 relative flex-grow">
5050
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
51-
<div className="rounded bg-white p-6 px-4 sm:px-0">
51+
<div className="rounded p-6 px-4 sm:px-0">
5252
<Calendar />
5353
</div>
5454
</div>

src/stores/myEventsStore.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,17 @@ interface EventsState {
1010
export const useEventState = create<EventsState>()((set) => ({
1111
events: [],
1212

13-
addEvents: (newEvent: Events) => set((state) => ({ events: [...state.events, newEvent] })),
13+
addEvents: (newEvent: Events) => set((state) => {
14+
// 중복 검사 로직 추가
15+
const isDuplicate = state.events.some(event =>
16+
event.start === newEvent.start && event.title === newEvent.title
17+
);
18+
19+
if (!isDuplicate) {
20+
return { events: [...state.events, newEvent] };
21+
} else {
22+
return { events: [...state.events] }; // 중복된 경우 상태 변경 없음
23+
}
24+
}),
1425
initEvents: () => set(() => ({ events: [] })),
1526
}));

0 commit comments

Comments
 (0)