@@ -5,19 +5,10 @@ import dayGridPlugin from '@fullcalendar/daygrid';
5
5
import interactionPlugin from '@fullcalendar/interaction' ;
6
6
import { useRef , useState , useEffect , useCallback } from 'react' ;
7
7
import { useEventState } from '@/stores/myEventsStore' ;
8
- import { getPersonalSchedule } from '@/apis/personalScheduleApi' ;
9
- import { Events } from '../../utils/index.ts' ;
8
+ import { getPersonalSchedule , deletePersonalSchedule } from '@/apis/personalScheduleApi' ;
9
+ import { DB_Events } from '../../utils/index.ts' ;
10
10
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
- */
11
+ import CreateEventButton from '@/components/MyCalendar/CreateEventButton.tsx' ;
21
12
22
13
interface EventInfo {
23
14
timeText : string ;
@@ -27,15 +18,16 @@ interface EventInfo {
27
18
}
28
19
29
20
interface EventCardsProps {
30
- events : Events [ ] ;
21
+ events : DB_Events [ ] ;
31
22
date : string | null ;
32
23
}
33
24
34
25
export default function Calendar ( ) {
35
26
const [ calendarHeight , setCalendarHeight ] = useState < string | number > ( 'auto' ) ;
36
27
const calendarRef = useRef < FullCalendar | null > ( null ) ;
37
- const [ selectedEvents , setSelectedEvents ] = useState < Events [ ] > ( [ ] ) ;
28
+ const [ selectedEvents , setSelectedEvents ] = useState < DB_Events [ ] > ( [ ] ) ;
38
29
const [ selectedDate , setSelectedDate ] = useState < string | null > ( null ) ;
30
+ const { events, addEvents, db_events, addDBEvents } = useEventState ( ) ;
39
31
// ! : ์ธ๋ถ์์ ์ด๋ฒคํธ ๋ฆฌ์คํธ๋ฅผ ๋ฐ์์ค๊ฒ ๋๋ค๋ฉด zustand ์คํ ์ด๋ ํ์ ์์๊ฑฐ ๊ฐ์ต๋๋ค!
40
32
const { events, addEvents } = useEventState ( ) ;
41
33
@@ -58,10 +50,10 @@ export default function Calendar() {
58
50
const clickedDateStr = dateClickInfo . dateStr ;
59
51
setSelectedDate ( clickedDateStr ) ;
60
52
setSelectedEvents (
61
- events . filter (
53
+ db_events . filter (
62
54
( event ) =>
63
- clickedDateStr >= event . start . split ( 'T' ) [ 0 ] &&
64
- clickedDateStr <= ( event . end ? event . end . split ( 'T' ) [ 0 ] : event . start . split ( 'T' ) [ 0 ] ) ,
55
+ clickedDateStr >= event . start_date . split ( 'T' ) [ 0 ] &&
56
+ clickedDateStr <= ( event . end_date ? event . end_date . split ( 'T' ) [ 0 ] : event . start_date . split ( 'T' ) [ 0 ] ) ,
65
57
) ,
66
58
) ;
67
59
} ;
@@ -90,26 +82,6 @@ export default function Calendar() {
90
82
setCalendarHeight ( window . innerWidth < 768 ? 500 : 'auto' ) ;
91
83
} , [ ] ) ;
92
84
93
- function convertEvents (
94
- events : {
95
- title : string ;
96
- start_date : string ;
97
- end_date : string ;
98
- backgroundColor ?: string ;
99
- borderColor ?: string ;
100
- textColor ?: string ;
101
- } [ ] ,
102
- ) : Events [ ] {
103
- return events . map ( ( event ) => ( {
104
- title : event . title ,
105
- start : event . start_date ,
106
- end : event . end_date ,
107
- backgroundColor : event . backgroundColor || '#3788d8' ,
108
- borderColor : event . borderColor || '#296c98' ,
109
- textColor : event . textColor || '#ffffff' ,
110
- } ) ) ;
111
- }
112
-
113
85
/*
114
86
const updateTitle = () => {
115
87
const calendarApi = calendarRef?.current?.getApi();
@@ -158,22 +130,13 @@ export default function Calendar() {
158
130
159
131
// !: ์ด๋ฒ ํธ๋ฅผ ๋ฐ์์จ๋ค๋ฉด ํ์์๋ ์ฝ๋๊ฐ ๋ ์ ์์๊ฑฐ ๊ฐ์์.
160
132
useEffect ( ( ) => {
161
- if ( ! isLoaded ) {
162
- getPersonalSchedule ( ) . then ( ( schedule ) => {
163
- const uniqueEvents = schedule . filter (
164
- ( newEvent ) =>
165
- ! events . some (
166
- ( existingEvent ) => existingEvent . start === newEvent . start_date && existingEvent . title === newEvent . title ,
167
- ) ,
168
- ) ;
169
- if ( uniqueEvents . length > 0 ) {
170
- const eventsToAdd = convertEvents ( uniqueEvents ) ;
171
- eventsToAdd . forEach ( ( eventToAdd ) => addEvents ( eventToAdd ) ) ;
172
- setIsLoaded ( true ) ;
173
- }
133
+ getPersonalSchedule ( ) . then ( ( schedule ) => {
134
+ schedule . map ( ( x ) => {
135
+ addDBEvents ( { ...x } ) ;
136
+ addEvents ( { ...x , start : x . start_date , end : x . end_date } ) ;
174
137
} ) ;
175
- }
176
- } , [ events , addEvents ] ) ;
138
+ } ) ;
139
+ } , [ ] ) ;
177
140
178
141
return (
179
142
< div >
@@ -242,13 +205,24 @@ function EventCards({ events, date }: EventCardsProps) {
242
205
) ;
243
206
}
244
207
208
+ const onDeleteClicked = ( id : number ) => {
209
+ console . log ( 'delete : ' , id ) ;
210
+ deletePersonalSchedule ( id )
211
+ . then ( ( val ) => {
212
+ console . log ( 'delete done!' , val ) ;
213
+ } )
214
+ . catch ( ( err ) => {
215
+ console . log ( err ) ;
216
+ } ) ;
217
+ } ;
218
+
245
219
return (
246
220
< div >
247
221
< h2 className = "ml-2" > { date } </ h2 >
248
222
< div className = "flex gap-5 overflow-x-auto" >
249
223
{ events . map ( ( event , index ) => {
250
- const eventDateRange = formatDateRange ( event . start , event . end ) ;
251
- const eventTime = formatTime ( event . start ) ;
224
+ const eventDateRange = formatDateRange ( event . start_date , event . end_date ) ;
225
+ const eventTime = formatTime ( event . start_date ) ;
252
226
return (
253
227
< div key = { index } className = "relative min-h-[150px] min-w-[240px] bg-white p-4 text-black" >
254
228
< h3 > { event . title } </ h3 >
@@ -267,8 +241,17 @@ function EventCards({ events, date }: EventCardsProps) {
267
241
{ menuOpen === index && (
268
242
< div className = "absolute right-0 top-10 z-10 rounded-lg bg-white shadow-md" >
269
243
< ul >
270
- < li className = "cursor-pointer p-2 hover:bg-gray-100" > ํธ์ง</ li >
271
- < li className = "cursor-pointer p-2 hover:bg-gray-100" > ์ญ์ </ li >
244
+ < li className = "cursor-pointer p-2 hover:bg-gray-100" >
245
+ < CreateEventButton
246
+ id = { event . id }
247
+ title = { event . title }
248
+ start_date = { event . start_date }
249
+ end_date = { event . end_date }
250
+ />
251
+ </ li >
252
+ < li className = "cursor-pointer p-2 hover:bg-gray-100" onClick = { ( ) => onDeleteClicked ( event . id ) } >
253
+ ์ญ์
254
+ </ li >
272
255
</ ul >
273
256
</ div >
274
257
) }
0 commit comments