akfatimeline 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/.babelrc +5 -3
  2. package/CHANGELOG.md +35 -0
  3. package/dist/Timeline.js +2292 -1
  4. package/dist/dist/components/Timeline/DragAndDropHandler.js +35 -0
  5. package/dist/dist/components/Timeline/EventTooltip.js +206 -0
  6. package/dist/dist/components/Timeline/Indicator.js +30 -0
  7. package/dist/dist/components/Timeline/MasterHeader.js +55 -0
  8. package/dist/dist/components/Timeline/Resources.js +53 -0
  9. package/dist/dist/components/Timeline/ResourcesHeader.js +14 -0
  10. package/dist/dist/components/Timeline/Timeline.css +534 -0
  11. package/dist/dist/components/Timeline/Timeline.js +277 -0
  12. package/dist/dist/components/Timeline/TimelineCell.js +8 -0
  13. package/dist/dist/components/Timeline/TimelineContent.js +422 -0
  14. package/dist/dist/components/Timeline/TimelineEvents.js +114 -0
  15. package/dist/dist/components/Timeline/TimelineHeader.js +43 -0
  16. package/dist/dist/components/Timeline/TimelineMonthContainer.js +29 -0
  17. package/dist/dist/components/Timeline/TimelineResources.js +16 -0
  18. package/dist/dist/hooks/useDragAndDrop.js +80 -0
  19. package/dist/dist/hooks/useEventDragDrop.js +120 -0
  20. package/dist/dist/hooks/useExtendEvent.js +28 -0
  21. package/dist/dist/utils/HorizontalVirtualScroll.js +0 -0
  22. package/dist/dist/utils/dateUtils.js +36 -0
  23. package/dist/dist/utils/filterTimelineData.js +21 -0
  24. package/dist/dist/utils/timelineUtils.js +40 -0
  25. package/package.json +2 -1
  26. package/public/index kutuphane /304/261c/304/261n.html" +43 -0
  27. package/public/index tasarim icin.html +20 -0
  28. package/src/App.js +161 -154
  29. package/src/components/Timeline/DatePickerComponent.js +17 -0
  30. package/src/components/Timeline/EventTooltip.js +1 -1
  31. package/src/components/Timeline/Indicator.js +1 -2
  32. package/src/components/Timeline/MasterHeader.js +36 -23
  33. package/src/components/Timeline/Timeline.css +90 -8
  34. package/src/components/Timeline/Timeline.js +71 -44
  35. package/src/components/Timeline/TimelineContent.js +154 -129
  36. package/src/hooks/useEventDragDrop.js +22 -16
  37. package/webpack.config.js +25 -7
  38. package/src/App copy.js +0 -185
  39. package/src/components/Timeline/TimelineContent copy.js +0 -421
@@ -35,32 +35,56 @@ const Timeline = ({
35
35
 
36
36
  // Yatay scroll özelliği aç/kapa
37
37
  horizontalScrollOn = false, // Varsayılan false
38
+
39
+ dayRange = 30,
40
+ setDayRange,
41
+ themeType = "light", // Tema bilgisi varsayılan olarak light
42
+
43
+ eventTooltipOn = true,
44
+ tooltipComponent: TooltipComponent, // Özelleştirilebilir Tooltip bileşeni
45
+ tempEventStyle = {},
46
+ eventStyleResolver = () => ({}),
47
+
48
+ onToday,
49
+ onAdvance,
50
+ onRetreat,
51
+ onMonthAdvance,
52
+ onMonthRetreat,
38
53
  }) => {
39
54
  // ---------------------------------------------------------
40
55
  // 1) timelineData oluştur (dates, monthHeaders vs.)
41
56
  // ---------------------------------------------------------
42
57
  const timelineData = generateTimelineData(2020, 2030); // 10 yıllık veri
43
58
  const { dates, monthHeaders } = timelineData;
44
-
45
- // ---------------------------------------------------------
46
- // 2) local state
47
- // ---------------------------------------------------------
48
- const [collapsedGroups, setCollapsedGroups] = useState({});
49
59
  const [selectedDate, setSelectedDate] = useState(() => {
50
60
  const date = programDate ? new Date(programDate) : new Date();
51
- date.setDate(date.getDate() - 3);
61
+ date.setDate(date.getDate() - 3); // Program tarihinden 3 gün öncesini al
52
62
  return date;
53
63
  });
64
+
65
+ // ---------------------------------------------------------
66
+ // 2) local state
67
+ // ---------------------------------------------------------
68
+ const [collapsedGroups, setCollapsedGroups] = useState({});
69
+
54
70
  const [localEvents, setLocalEvents] = useState(events);
55
71
 
56
72
  const [selectedEvent, setSelectedEvent] = useState(null);
57
73
  const [tooltipPosition, setTooltipPosition] = useState({ top: 0, left: 0 });
58
74
 
59
75
  // dayRange = ekranda göstermeyi istediğimiz gün/hücre sayısı (ör. 30 gün)
60
- const [dayRange, setDayRange] = useState(30);
61
76
 
62
- const [isDarkMode, setIsDarkMode] = useState(false);
77
+ const [isDarkMode, setIsDarkMode] = useState(themeType === "dark");
78
+
79
+ useEffect(() => {
80
+ if (themeType !== undefined) {
81
+ setIsDarkMode(themeType === "dark");
82
+ }
83
+ }, [themeType]);
63
84
 
85
+ const toggleDarkMode = () => {
86
+ setIsDarkMode((prev) => !prev);
87
+ };
64
88
  // ---------------------------------------------------------
65
89
  // 3) Sabit hücre genişliği (örneğin 56.95 px)
66
90
  // Container genişliği = dayRange * cellWidth
@@ -119,43 +143,49 @@ const Timeline = ({
119
143
 
120
144
  // ---------------------------------------------------------
121
145
  // 7) Navigation fonksiyonları
122
- // ---------------------------------------------------------
146
+ // --------------------------------------------------------- const { dates, monthHeaders } = timelineData;
147
+
148
+
149
+
150
+ const handleDateChange = (newDate) => {
151
+ setSelectedDate(new Date(newDate));
152
+ };
153
+
123
154
  const handleToday = () => {
124
- const date = programDate ? new Date(programDate) : new Date();
125
- date.setDate(date.getDate() - 3);
126
- setSelectedDate(date);
155
+ const today = new Date();
156
+ today.setDate(today.getDate() - 3); // Bugünden 3 gün öncesini ayarla
157
+ setSelectedDate(today);
127
158
  };
159
+
128
160
 
129
- const handleAdvance = () =>
161
+ const handleAdvance = () => {
130
162
  setSelectedDate((prev) => new Date(prev.getTime() + 5 * 24 * 60 * 60 * 1000));
163
+ };
131
164
 
132
- const handleRetreat = () =>
165
+ const handleRetreat = () => {
133
166
  setSelectedDate((prev) => new Date(prev.getTime() - 5 * 24 * 60 * 60 * 1000));
167
+ };
134
168
 
135
- const handleMonthRetreat = () =>
169
+ const handleMonthAdvance = () => {
136
170
  setSelectedDate((prev) => {
137
171
  const newDate = new Date(prev);
138
- newDate.setMonth(newDate.getMonth() - 1);
172
+ newDate.setMonth(newDate.getMonth() + 1);
139
173
  return newDate;
140
174
  });
175
+ };
141
176
 
142
- const handleMonthAdvance = () =>
177
+ const handleMonthRetreat = () => {
143
178
  setSelectedDate((prev) => {
144
179
  const newDate = new Date(prev);
145
- newDate.setMonth(newDate.getMonth() + 1);
180
+ newDate.setMonth(newDate.getMonth() - 1);
146
181
  return newDate;
147
182
  });
183
+ };
148
184
 
149
185
  // ---------------------------------------------------------
150
186
  // 8) Dark Mode
151
187
  // ---------------------------------------------------------
152
- const toggleDarkMode = () => {
153
- setIsDarkMode((prevMode) => !prevMode);
154
- };
155
188
 
156
- useEffect(() => {
157
- document.body.classList.toggle("dark-mode", isDarkMode);
158
- }, [isDarkMode]);
159
189
 
160
190
  // ---------------------------------------------------------
161
191
  // 9) Ay başlıklarını filtrele
@@ -181,21 +211,22 @@ const Timeline = ({
181
211
  {masterHeaderView && (
182
212
  <div className="timeline-master-header">
183
213
  <MasterHeader
214
+ selectedDate={selectedDate} // Seçili tarihi gönder
215
+ onDateSelect={handleDateChange}
184
216
  onToday={handleToday}
185
217
  onAdvance={handleAdvance}
186
218
  onRetreat={handleRetreat}
187
219
  onMonthAdvance={handleMonthAdvance}
188
220
  onMonthRetreat={handleMonthRetreat}
189
221
  dayRange={dayRange}
190
- setDayRange={setDayRange} // dayRange'ı burada user değiştirebilir
191
- isDarkMode={isDarkMode}
192
- toggleDarkMode={toggleDarkMode}
222
+ setDayRange={setDayRange}
193
223
  />
194
224
  </div>
195
225
  )}
196
226
  {/* Body: Sol kısım => Resources, Sağ kısım => timeline */}
197
227
  <div className="timeline-body">
198
- <div className="timeline-resources-container">
228
+ <div className="timeline-resources-container"
229
+ style={{ overflow: "hidden"}}>
199
230
  <ResourcesHeader content={resourceHeaderContent} />
200
231
  <Resources
201
232
  groupedResources={resources}
@@ -205,21 +236,14 @@ const Timeline = ({
205
236
  />
206
237
  </div>
207
238
 
208
- {/*
209
- Dış kap => .timeline-scrollable-container
210
- horizontalScrollOn => overflow-x auto/hidden
211
- */}
239
+
212
240
  <div
213
241
  className="timeline-scrollable-container"
214
242
  style={{
215
243
  overflowX: horizontalScrollOn ? "auto" : "hidden",
216
244
  }}
217
245
  >
218
- {/*
219
- İç kap => .timeline-header-content-wrapper
220
- Genişlik => dayRange * cellWidth px (eğer horizontalScrollOn=true)
221
- Yoksa 100% (scroll devre dışı)
222
- */}
246
+
223
247
  <div
224
248
  className="timeline-header-content-wrapper"
225
249
  style={{
@@ -231,22 +255,20 @@ const Timeline = ({
231
255
  monthHeaders={filteredMonthHeaders}
232
256
  />
233
257
 
234
- <TimelineContent
235
- // Props
258
+ <TimelineContent
236
259
  groupedResources={resources}
237
260
  dates={filteredDates}
238
261
  collapsedGroups={collapsedGroups}
239
262
  events={localEvents}
240
263
  setEvents={setLocalEvents}
241
- onEventClick={handleEventClick}
242
- todayIndex={todayIndex}
243
- totalDays={totalDays}
264
+ onEventClick={onEventClick}
265
+ todayIndex={filteredDates.findIndex(
266
+ (d) => new Date(d.fullDate).toDateString() === new Date().toDateString()
267
+ )}
244
268
  indicatorOn={indicatorOn}
245
269
  resourceSettings={resourceSettings}
246
270
  toggleGroupCollapse={toggleGroupCollapse}
247
271
  setDropInfo={setDropInfo}
248
-
249
- // Yeni prop'lar
250
272
  eventsDragOn={eventsDragOn}
251
273
  eventsExtendOn={eventsExtendOn}
252
274
  createNewEventOn={createNewEventOn}
@@ -254,6 +276,11 @@ const Timeline = ({
254
276
  onExtendInfo={onExtendInfo}
255
277
  onCreateEventInfo={onCreateEventInfo}
256
278
  onEventRightClick={onEventRightClick}
279
+ eventTooltipOn={eventTooltipOn} // Tooltip kontrolü
280
+ tooltipComponent={TooltipComponent} // Özelleştirilebilir Tooltip bileşeni
281
+ tempEventStyle = {tempEventStyle}
282
+ eventStyleResolver={eventStyleResolver}
283
+
257
284
  />
258
285
 
259
286
  {/* Tooltip */}
@@ -18,22 +18,35 @@ const TimelineContent = ({
18
18
  resourceSettings,
19
19
  setDropInfo,
20
20
 
21
- // Yeni prop'lar
21
+
22
22
  eventsDragOn = true,
23
23
  eventsExtendOn = true,
24
24
  createNewEventOn = true,
25
- onDragInfo,
25
+
26
26
  onExtendInfo,
27
27
  onCreateEventInfo,
28
28
  onEventRightClick,
29
+
30
+ eventTooltipOn = true,
31
+ tooltipComponent: TooltipComponent,
32
+ tempEventStyle = {},
33
+
34
+ eventStyleResolver = () => ({}),
29
35
  }) => {
30
36
  // ------------------- HOOKS & STATE -------------------
31
37
  const containerRef = useRef(null);
32
38
 
33
39
  // Drag
34
40
  const { isDragging, dragStart, dragEnd } = useDragAndDrop(events, setEvents);
35
- const { handleDragStart, handleDragOver, handleDrop, handleDragEnd } =
36
- useEventDragDrop(events, setEvents, setDropInfo);
41
+ const { handleDragStart, handleDragOver, handleDrop, handleDragEnd } = useEventDragDrop(
42
+ events,
43
+ setEvents,
44
+ setDropInfo // Doğrudan setDropInfo'yu geçiriyoruz
45
+ );
46
+
47
+
48
+
49
+
37
50
 
38
51
  // Extend
39
52
  const { extendEvent } = useExtendEvent(events, setEvents);
@@ -55,9 +68,14 @@ const TimelineContent = ({
55
68
  // ------------------- Tooltip Logic -------------------
56
69
  const handleEventClickInternal = (event, e) => {
57
70
  e.stopPropagation();
71
+ // Eğer mod "extend" ise tooltip'i açma
72
+ if (mode === "extend") {
73
+ return;
74
+ }
75
+
58
76
  // Harici callback
59
77
  if (onEventClick) onEventClick(event, e);
60
-
78
+
61
79
  // Tooltip göstermek
62
80
  const eventElement = e.currentTarget;
63
81
  if (eventElement) {
@@ -69,6 +87,7 @@ const TimelineContent = ({
69
87
  setSelectedEvent(event);
70
88
  }
71
89
  };
90
+
72
91
 
73
92
  const handleCloseTooltip = () => {
74
93
  setSelectedEvent(null);
@@ -154,8 +173,11 @@ const TimelineContent = ({
154
173
  return;
155
174
  }
156
175
  handleDragEnd();
157
- // onDragInfo(...) => if needed
176
+
177
+
158
178
  };
179
+
180
+
159
181
 
160
182
  // ------------------- Extend Logic -------------------
161
183
  const handleMouseDownExtend = (mouseEvent, event) => {
@@ -199,11 +221,16 @@ const TimelineContent = ({
199
221
  });
200
222
  }
201
223
  }
202
- setMode(null);
224
+
225
+ // Tooltip açılmasını engellemek için modun null olmasını geciktiriyoruz
226
+ setTimeout(() => {
227
+ setMode(null);
228
+ }, 100); // 100ms gecikme
203
229
  setExtendingEvent(null);
204
230
  setOriginalEndDate(null);
205
231
  setStartMouseX(null);
206
232
  };
233
+
207
234
 
208
235
  useEffect(() => {
209
236
  if (mode === "extend") {
@@ -273,6 +300,11 @@ const TimelineContent = ({
273
300
  };
274
301
  };
275
302
 
303
+
304
+
305
+
306
+
307
+
276
308
  // ------------------- RENDER -------------------
277
309
  return (
278
310
  <div
@@ -283,138 +315,131 @@ const TimelineContent = ({
283
315
  <Indicator todayIndex={todayIndex} totalDays={totalDays} />
284
316
  )}
285
317
 
286
- {groupedResources.map((group, groupIndex) => (
287
- <div key={groupIndex} className="timeline-group-container">
288
- {/* Grup Başlığı */}
289
- {resourceSettings.isGrouped && (
290
- <div className="timeline-group-header-row">
291
- {dates.map((dateObj, colIndex) => (
292
- <div
293
- key={`group-header-${groupIndex}-${colIndex}`}
294
- className="timeline-group-header-cell"
295
- ></div>
296
- ))}
297
- </div>
298
- )}
299
-
300
- {/* Kaynaklar */}
301
- {!collapsedGroups[group.groupName] &&
302
- group.resources.map((resource, rowIndex) => {
303
- const resourceEvents = events.filter((ev) => ev.resourceId === resource.id);
318
+ {groupedResources.map((group, groupIndex) => (
319
+ <div key={groupIndex} className="timeline-group-container">
320
+ {/* Grup Başlığı */}
321
+ {resourceSettings.isGrouped && (
322
+ <div className="timeline-group-header-row">
323
+ {dates.map((dateObj, colIndex) => (
324
+ <div
325
+ key={`group-header-${groupIndex}-${colIndex}`}
326
+ className="timeline-group-header-cell"
327
+ ></div>
328
+ ))}
329
+ </div>
330
+ )}
331
+
332
+ {/* Kaynaklar */}
333
+ {!collapsedGroups[group.groupName] &&
334
+ group.resources.map((resource, rowIndex) => {
335
+ const resourceEvents = events.filter((ev) => ev.resourceId === resource.id);
336
+
337
+ return (
338
+ <div key={resource.id} className="timeline-resource-row">
339
+ {/* Her resource row'u */}
340
+ {resourceEvents.map((event) => {
341
+ const { isVisible, left, width, isPartialStart, isPartialEnd } =
342
+ calculatePosition(event, dates);
343
+ if (!isVisible) return null;
344
+
345
+ // Kullanıcıdan gelen stil
346
+ const eventStyle = eventStyleResolver ? eventStyleResolver(event) : {};
304
347
 
305
348
  return (
306
- <div key={resource.id} className="timeline-resource-row">
307
- {/* Her resource row'u */}
308
- {resourceEvents.map((event) => {
309
- const { isVisible, left, width, isPartialStart, isPartialEnd } =
310
- calculatePosition(event, dates);
311
- if (!isVisible) return null;
312
-
313
- return (
314
- <div
315
- key={event.id}
316
- className="timeline-event"
317
- draggable={mode !== "extend" && eventsDragOn}
318
- onDragStart={(e) => {
319
- if (mode === "extend") {
320
- e.preventDefault();
321
- return;
322
- }
323
- handleDragStartSafe(e, event.id);
324
- }}
325
- onDragEnd={(e) => {
326
- if (mode === "extend") {
327
- e.preventDefault();
328
- return;
329
- }
330
- handleDragEndSafe(e);
331
- }}
332
- onContextMenu={(reactEvent) => handleRightClickEvent(event, reactEvent)}
333
- onClick={(ev) => handleEventClickInternal(event, ev)}
334
- style={{
335
- left,
336
- width,
337
- top: "5px",
338
- // color from var(--timeline-event-text-color)
339
- // background from event.color or var(...) => if event.color empty, fallback in CSS
340
- borderTopLeftRadius: isPartialStart ? "0px" : "20px",
341
- borderBottomLeftRadius: isPartialStart ? "0px" : "20px",
342
- borderTopRightRadius: isPartialEnd ? "0px" : "20px",
343
- borderBottomRightRadius: isPartialEnd ? "0px" : "20px",
344
- cursor: mode === "extend" ? "col-resize" : "grab",
345
- }}
346
- >
347
- {event.title}
348
- {eventsExtendOn && (
349
- <div
350
- className="timeline-event-extend-handle"
351
- onMouseDown={(mouseEvent) => {
352
- mouseEvent.stopPropagation();
353
- handleMouseDownExtend(mouseEvent, event);
354
- }}
355
- ></div>
356
- )}
357
- </div>
358
- );
359
- })}
360
-
361
- {/* Geçici (yeni) event */}
362
- {tempEvent && tempEvent.resourceId === resource.id && (
349
+ <div
350
+ key={event.id}
351
+ className="timeline-event"
352
+ draggable={mode !== "extend" && eventsDragOn}
353
+ onDragStart={(e) => {
354
+ if (mode === "extend") {
355
+ e.preventDefault();
356
+ return;
357
+ }
358
+ handleDragStartSafe(e, event.id);
359
+ }}
360
+ onDragEnd={(e) => {
361
+ if (mode === "extend") {
362
+ e.preventDefault();
363
+ return;
364
+ }
365
+ handleDragEndSafe(e);
366
+ }}
367
+ onContextMenu={(reactEvent) => handleRightClickEvent(event, reactEvent)}
368
+ onClick={(ev) => handleEventClickInternal(event, ev)}
369
+ style={{
370
+ left,
371
+ width,
372
+ top: "5px",
373
+ borderTopLeftRadius: isPartialStart ? "0px" : "20px",
374
+ borderBottomLeftRadius: isPartialStart ? "0px" : "20px",
375
+ borderTopRightRadius: isPartialEnd ? "0px" : "20px",
376
+ borderBottomRightRadius: isPartialEnd ? "0px" : "20px",
377
+ cursor: mode === "extend" ? "col-resize" : "grab",
378
+ ...eventStyle, // Kullanıcı tarafından tanımlanan stiller
379
+ }}
380
+ >
381
+ {event.title}
382
+ {eventsExtendOn && (
363
383
  <div
364
- className="timeline-temp-event"
365
- style={{
366
- ...calculatePosition(tempEvent, dates),
367
- top: "5px",
384
+ className="timeline-event-extend-handle"
385
+ onMouseDown={(mouseEvent) => {
386
+ mouseEvent.stopPropagation();
387
+ handleMouseDownExtend(mouseEvent, event);
368
388
  }}
369
- >
370
- {tempEvent.title}
371
- </div>
372
- )}
373
-
374
- {/* Tarih Hücreleri */}
375
- {dates.map((dateObj, colIndex) => (
376
- <div
377
- key={`cell-${groupIndex}-${rowIndex}-${colIndex}`}
378
- className={`timeline-cell ${
379
- isCellSelected(resource.id, dateObj) ? "selected" : ""
380
- }`}
381
- data-date={JSON.stringify(dateObj)}
382
- data-resource-id={resource.id}
383
- onMouseDown={() => handleCellClick(resource.id, dateObj)}
384
- onDragOver={(e) => handleDragOver(e)}
385
- onDrop={(e) =>
386
- handleDrop(e, resource.id, parseDate(dateObj.fullDate))
387
- }
388
389
  ></div>
389
- ))}
390
+ )}
390
391
  </div>
391
392
  );
392
393
  })}
393
- </div>
394
- ))}
394
+
395
+ {/* Geçici (yeni) event */}
396
+ {tempEvent && tempEvent.resourceId === resource.id && (
397
+ <div
398
+ className="timeline-temp-event"
399
+ style={{
400
+ ...calculatePosition(tempEvent, dates),
401
+ ...tempEventStyle, // Kullanıcının geçtiği stiller
402
+ }}
403
+ >
404
+ {tempEvent.title}
405
+ </div>
406
+ )}
407
+
408
+ {/* Tarih Hücreleri */}
409
+ {dates.map((dateObj, colIndex) => (
410
+ <div
411
+ key={`cell-${groupIndex}-${rowIndex}-${colIndex}`}
412
+ className={`timeline-cell ${
413
+ isCellSelected(resource.id, dateObj) ? "selected" : ""
414
+ }`}
415
+ data-date={JSON.stringify(dateObj)}
416
+ data-resource-id={resource.id}
417
+ onMouseDown={() => handleCellClick(resource.id, dateObj)}
418
+ onDragOver={(e) => handleDragOver(e)}
419
+ onDrop={(e) =>
420
+ handleDrop(e, resource.id, parseDate(dateObj.fullDate))
421
+ }
422
+ ></div>
423
+ ))}
424
+ </div>
425
+ );
426
+ })}
427
+ </div>
428
+ ))}
429
+
395
430
 
396
431
  {/* Tooltip vb. */}
397
- {selectedEvent && (
398
- // "timeline-event-tooltip" gibi className tanımlanabilir
399
- // eğer custom css istenirse
400
- <div
401
- style={{
402
- position: "absolute",
403
- top: tooltipPosition.top,
404
- left: tooltipPosition.left,
405
- // ...
406
- backgroundColor: "#333",
407
- color: "#fff",
408
- padding: "5px",
409
- borderRadius: "4px",
410
- zIndex: 999,
411
- }}
412
- >
413
- <button onClick={() => handleCloseTooltip()}>X</button>
414
- {/* Content */}
415
- {selectedEvent.title}
416
- </div>
417
- )}
432
+ {eventTooltipOn && selectedEvent && TooltipComponent && mode !== "extend" && (
433
+ <TooltipComponent
434
+ event={selectedEvent}
435
+ position={tooltipPosition}
436
+ onClose={handleCloseTooltip}
437
+ />
438
+ )}
439
+
440
+
441
+
442
+
418
443
  </div>
419
444
  );
420
445
  };
@@ -38,20 +38,34 @@ const useEventDragDrop = (events, setEvents, setDropInfo) => {
38
38
 
39
39
  const handleDrop = (event, resourceId, targetDate) => {
40
40
  event.preventDefault();
41
-
41
+
42
42
  if (mode === "drag" && draggingEvent) {
43
43
  const draggedEvent = events.find((evt) => evt.id === draggingEvent);
44
-
44
+
45
45
  if (draggedEvent) {
46
46
  const duration = draggedEvent.endDate - draggedEvent.startDate;
47
47
  const cellWidth = event.target.offsetWidth || 30;
48
48
  const offsetDays = Math.floor(dragOffset / cellWidth);
49
49
  const newStartDate = new Date(targetDate.getTime() - offsetDays * 24 * 60 * 60 * 1000);
50
50
  const newEndDate = new Date(newStartDate.getTime() + duration);
51
-
52
- console.log("New Start Date:", newStartDate);
53
- console.log("New End Date:", newEndDate);
54
-
51
+
52
+ // Callback kontrolü ve loglama
53
+ if (setDropInfo) {
54
+ console.log("setDropInfo is being called with:", {
55
+ id: draggingEvent,
56
+ newResourceId: resourceId,
57
+ newStartDate,
58
+ newEndDate,
59
+ });
60
+ setDropInfo({
61
+ id: draggingEvent,
62
+ newResourceId: resourceId,
63
+ newStartDate,
64
+ newEndDate,
65
+ });
66
+ }
67
+
68
+ // Event güncellemesi
55
69
  setEvents((prevEvents) =>
56
70
  prevEvents.map((evt) =>
57
71
  evt.id === draggingEvent
@@ -64,22 +78,14 @@ const useEventDragDrop = (events, setEvents, setDropInfo) => {
64
78
  : evt
65
79
  )
66
80
  );
67
-
68
- if (setDropInfo) {
69
- setDropInfo({
70
- id: draggingEvent,
71
- newResourceId: resourceId,
72
- newStartDate,
73
- newEndDate,
74
- });
75
- }
76
81
  }
77
82
  }
78
-
83
+
79
84
  setDraggingEvent(null);
80
85
  setDragOffset(0);
81
86
  setMode(null);
82
87
  };
88
+
83
89
 
84
90
  const handleExtend = (event, eventId, newEndDate) => {
85
91
  if (mode !== "extend" || draggingEvent !== eventId) return;