akfatimeline 1.0.6 → 1.2.0

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 (128) hide show
  1. package/CHANGELOG.md +98 -35
  2. package/dist/Timeline.js +4309 -1677
  3. package/dist/components/Timeline/AutocompleteSelect.js +150 -0
  4. package/dist/components/Timeline/ContextMenu.js +149 -0
  5. package/dist/components/Timeline/DailyView.js +255 -0
  6. package/dist/components/Timeline/DatePickerComponent.js +13 -0
  7. package/{public/dist/dist → dist}/components/Timeline/DragAndDropHandler.js +34 -34
  8. package/dist/components/Timeline/EventBadge.js +26 -0
  9. package/dist/components/Timeline/EventDetailModal.js +138 -0
  10. package/dist/components/Timeline/EventIcon.js +47 -0
  11. package/dist/{dist/components → components}/Timeline/EventTooltip.js +206 -206
  12. package/dist/components/Timeline/FilterPanel.js +179 -0
  13. package/dist/{dist/components → components}/Timeline/Indicator.js +26 -26
  14. package/dist/components/Timeline/LoadingSpinner.js +48 -0
  15. package/dist/{dist/components → components}/Timeline/MasterHeader.js +104 -68
  16. package/{public/dist/dist → dist}/components/Timeline/Resources.js +53 -53
  17. package/dist/{dist/components → components}/Timeline/ResourcesHeader.js +14 -14
  18. package/dist/components/Timeline/Timeline.css +2491 -0
  19. package/dist/components/Timeline/Timeline.js +607 -0
  20. package/dist/{dist/components → components}/Timeline/TimelineCell.js +8 -8
  21. package/dist/components/Timeline/TimelineContent.js +838 -0
  22. package/{public/dist/dist → dist}/components/Timeline/TimelineEvents.js +114 -114
  23. package/dist/components/Timeline/TimelineHeader.js +54 -0
  24. package/{public/dist/dist → dist}/components/Timeline/TimelineMonthContainer.js +29 -29
  25. package/{public/dist/dist → dist}/components/Timeline/TimelineResources.js +16 -16
  26. package/{public/dist/dist → dist}/hooks/useDragAndDrop.js +80 -80
  27. package/dist/{dist/hooks → hooks}/useEventDragDrop.js +126 -126
  28. package/dist/hooks/useEventManagement.js +173 -0
  29. package/dist/hooks/useEventSelection.js +82 -0
  30. package/{public/dist/dist → dist}/hooks/useExtendEvent.js +28 -28
  31. package/dist/hooks/useKeyboardShortcuts.js +158 -0
  32. package/dist/hooks/useTouchGestures.js +90 -0
  33. package/dist/utils/conflictUtils.js +105 -0
  34. package/dist/{dist/utils → utils}/dateUtils.js +36 -36
  35. package/dist/{dist/utils → utils}/filterTimelineData.js +20 -20
  36. package/dist/utils/filterUtils.js +106 -0
  37. package/dist/utils/timeUtils.js +179 -0
  38. package/dist/{dist/utils → utils}/timelineUtils.js +39 -39
  39. package/dist/utils/viewModeUtils.js +54 -0
  40. package/package.json +89 -19
  41. package/src/App.js +300 -19
  42. package/src/components/Timeline/AutocompleteSelect.js +150 -0
  43. package/src/components/Timeline/ContextMenu.js +149 -0
  44. package/src/components/Timeline/DailyView.js +255 -0
  45. package/src/components/Timeline/DatePickerComponent.js +13 -17
  46. package/src/components/Timeline/DragAndDropHandler.js +34 -34
  47. package/src/components/Timeline/EventBadge.js +26 -0
  48. package/src/components/Timeline/EventDetailModal.js +138 -0
  49. package/src/components/Timeline/EventIcon.js +47 -0
  50. package/src/components/Timeline/EventTooltip.js +206 -206
  51. package/src/components/Timeline/FilterPanel.js +179 -0
  52. package/src/components/Timeline/Indicator.js +26 -26
  53. package/src/components/Timeline/LoadingSpinner.js +48 -0
  54. package/src/components/Timeline/MasterHeader.js +104 -68
  55. package/src/components/Timeline/Resources.js +53 -53
  56. package/src/components/Timeline/ResourcesHeader.js +14 -14
  57. package/src/components/Timeline/Timeline.css +2491 -616
  58. package/src/components/Timeline/Timeline.js +607 -309
  59. package/src/components/Timeline/TimelineCell.js +8 -8
  60. package/src/components/Timeline/TimelineContent.js +838 -446
  61. package/src/components/Timeline/TimelineEvents.js +114 -114
  62. package/src/components/Timeline/TimelineHeader.js +54 -43
  63. package/src/components/Timeline/TimelineMonthContainer.js +29 -29
  64. package/src/components/Timeline/TimelineResources.js +16 -16
  65. package/src/demo.css +4 -0
  66. package/src/hooks/useDragAndDrop.js +80 -80
  67. package/src/hooks/useEventDragDrop.js +126 -126
  68. package/src/hooks/useEventManagement.js +173 -0
  69. package/src/hooks/useEventSelection.js +82 -0
  70. package/src/hooks/useExtendEvent.js +28 -28
  71. package/src/hooks/useKeyboardShortcuts.js +158 -0
  72. package/src/hooks/useTouchGestures.js +90 -0
  73. package/src/index.js +1 -7
  74. package/src/library.js +26 -0
  75. package/src/utils/conflictUtils.js +105 -0
  76. package/src/utils/dateUtils.js +36 -36
  77. package/src/utils/filterTimelineData.js +20 -20
  78. package/src/utils/filterUtils.js +106 -0
  79. package/src/utils/timeUtils.js +179 -0
  80. package/src/utils/timelineUtils.js +39 -39
  81. package/src/utils/viewModeUtils.js +54 -0
  82. package/.babelrc +0 -6
  83. package/babel.config.json +0 -4
  84. package/dist/dist/components/Timeline/DatePickerComponent.js +0 -17
  85. package/dist/dist/components/Timeline/DragAndDropHandler.js +0 -35
  86. package/dist/dist/components/Timeline/Resources.js +0 -53
  87. package/dist/dist/components/Timeline/Timeline.css +0 -616
  88. package/dist/dist/components/Timeline/Timeline.js +0 -309
  89. package/dist/dist/components/Timeline/TimelineContent.js +0 -446
  90. package/dist/dist/components/Timeline/TimelineEvents.js +0 -114
  91. package/dist/dist/components/Timeline/TimelineHeader.js +0 -43
  92. package/dist/dist/components/Timeline/TimelineMonthContainer.js +0 -29
  93. package/dist/dist/components/Timeline/TimelineResources.js +0 -16
  94. package/dist/dist/hooks/useDragAndDrop.js +0 -80
  95. package/dist/dist/hooks/useExtendEvent.js +0 -28
  96. package/public/dist/Timeline.js +0 -3277
  97. package/public/dist/dist/components/Timeline/DatePickerComponent.js +0 -17
  98. package/public/dist/dist/components/Timeline/EventTooltip.js +0 -206
  99. package/public/dist/dist/components/Timeline/Indicator.js +0 -29
  100. package/public/dist/dist/components/Timeline/MasterHeader.js +0 -68
  101. package/public/dist/dist/components/Timeline/ResourcesHeader.js +0 -14
  102. package/public/dist/dist/components/Timeline/Timeline.css +0 -616
  103. package/public/dist/dist/components/Timeline/Timeline.js +0 -304
  104. package/public/dist/dist/components/Timeline/TimelineCell.js +0 -8
  105. package/public/dist/dist/components/Timeline/TimelineContent.js +0 -447
  106. package/public/dist/dist/components/Timeline/TimelineHeader.js +0 -43
  107. package/public/dist/dist/hooks/useEventDragDrop.js +0 -126
  108. package/public/dist/dist/utils/HorizontalVirtualScroll.js +0 -0
  109. package/public/dist/dist/utils/dateUtils.js +0 -36
  110. package/public/dist/dist/utils/filterTimelineData.js +0 -21
  111. package/public/dist/dist/utils/timelineUtils.js +0 -40
  112. package/public/favicon.ico +0 -0
  113. package/public/index kutuphane /304/261c/304/261n.html" +0 -43
  114. package/public/index tasarim icin.html +0 -20
  115. package/public/index.html +0 -43
  116. package/public/logo192.png +0 -0
  117. package/public/logo512.png +0 -0
  118. package/public/manifest.json +0 -25
  119. package/public/robots.txt +0 -3
  120. package/src/App.css +0 -38
  121. package/src/App.test.js +0 -8
  122. package/src/dist/Timeline.js +0 -277
  123. package/src/index.css +0 -13
  124. package/src/logo.svg +0 -1
  125. package/src/reportWebVitals.js +0 -13
  126. package/src/setupTests.js +0 -5
  127. package/webpack.config.js +0 -49
  128. /package/dist/{dist/utils → utils}/HorizontalVirtualScroll.js +0 -0
@@ -1,126 +1,126 @@
1
- import { useState } from "react";
2
-
3
- const useEventDragDrop = (events, setEvents, setDropInfo) => {
4
- const [draggingEvent, setDraggingEvent] = useState(null);
5
- const [dragOffset, setDragOffset] = useState(0);
6
- const [mode, setMode] = useState(null); // "drag" veya "extend"
7
-
8
- const handleDragStart = (event, eventId) => {
9
- if (mode === "extend") return; // Uzatma modundaysa taşıma işlemini başlatma
10
-
11
- event.stopPropagation();
12
-
13
- const eventElement = event.target;
14
- const eventRect = eventElement.getBoundingClientRect();
15
- const offset = event.clientX - eventRect.left;
16
-
17
- setDraggingEvent(eventId);
18
- setDragOffset(offset);
19
- setMode("drag"); // Modu taşıma olarak ayarla
20
-
21
- const draggedEvent = events.find((evt) => evt.id === eventId);
22
- if (draggedEvent) {
23
- console.log("Dragging Event Start:", draggedEvent.startDate);
24
- console.log("Dragging Event End:", draggedEvent.endDate);
25
- }
26
- };
27
-
28
- const handleExtendStart = (event, eventId) => {
29
- event.stopPropagation();
30
-
31
- setDraggingEvent(eventId);
32
- setMode("extend"); // Modu uzatma olarak ayarla
33
- };
34
-
35
- const handleDragOver = (event) => {
36
- event.preventDefault();
37
- };
38
-
39
- const handleDrop = (event, resourceId, targetDate) => {
40
- event.preventDefault();
41
-
42
- if (mode === "drag" && draggingEvent) {
43
- const draggedEvent = events.find((evt) => evt.id === draggingEvent);
44
-
45
- if (draggedEvent) {
46
- const duration = draggedEvent.endDate - draggedEvent.startDate;
47
- const cellWidth = event.target.offsetWidth || 30;
48
- const offsetDays = Math.floor(dragOffset / cellWidth);
49
- const newStartDate = new Date(targetDate.getTime() - offsetDays * 24 * 60 * 60 * 1000);
50
- const newEndDate = new Date(newStartDate.getTime() + duration);
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
69
- setEvents((prevEvents) =>
70
- prevEvents.map((evt) =>
71
- evt.id === draggingEvent
72
- ? {
73
- ...evt,
74
- resourceId,
75
- startDate: newStartDate,
76
- endDate: newEndDate,
77
- }
78
- : evt
79
- )
80
- );
81
- }
82
- }
83
-
84
- setDraggingEvent(null);
85
- setDragOffset(0);
86
- setMode(null);
87
- };
88
-
89
-
90
- const handleExtend = (event, eventId, newEndDate) => {
91
- if (mode !== "extend" || draggingEvent !== eventId) return;
92
-
93
- setEvents((prevEvents) =>
94
- prevEvents.map((evt) =>
95
- evt.id === eventId
96
- ? {
97
- ...evt,
98
- endDate: newEndDate,
99
- }
100
- : evt
101
- )
102
- );
103
-
104
- console.log("Extended Event ID:", eventId, "New End Date:", newEndDate);
105
-
106
- setDraggingEvent(null);
107
- setMode(null);
108
- };
109
-
110
- const handleDragEnd = () => {
111
- setDraggingEvent(null);
112
- setDragOffset(0);
113
- setMode(null);
114
- };
115
-
116
- return {
117
- handleDragStart,
118
- handleExtendStart,
119
- handleDragOver,
120
- handleDrop,
121
- handleExtend,
122
- handleDragEnd,
123
- };
124
- };
125
-
126
- export default useEventDragDrop;
1
+ import { useState } from "react";
2
+
3
+ const useEventDragDrop = (events, setEvents, setDropInfo) => {
4
+ const [draggingEvent, setDraggingEvent] = useState(null);
5
+ const [dragOffset, setDragOffset] = useState(0);
6
+ const [mode, setMode] = useState(null); // "drag" veya "extend"
7
+
8
+ const handleDragStart = (event, eventId) => {
9
+ if (mode === "extend") return; // Uzatma modundaysa taşıma işlemini başlatma
10
+
11
+ event.stopPropagation();
12
+
13
+ const eventElement = event.target;
14
+ const eventRect = eventElement.getBoundingClientRect();
15
+ const offset = event.clientX - eventRect.left;
16
+
17
+ setDraggingEvent(eventId);
18
+ setDragOffset(offset);
19
+ setMode("drag"); // Modu taşıma olarak ayarla
20
+
21
+ const draggedEvent = events.find((evt) => evt.id === eventId);
22
+ if (draggedEvent) {
23
+ console.log("Dragging Event Start:", draggedEvent.startDate);
24
+ console.log("Dragging Event End:", draggedEvent.endDate);
25
+ }
26
+ };
27
+
28
+ const handleExtendStart = (event, eventId) => {
29
+ event.stopPropagation();
30
+
31
+ setDraggingEvent(eventId);
32
+ setMode("extend"); // Modu uzatma olarak ayarla
33
+ };
34
+
35
+ const handleDragOver = (event) => {
36
+ event.preventDefault();
37
+ };
38
+
39
+ const handleDrop = (event, resourceId, targetDate) => {
40
+ event.preventDefault();
41
+
42
+ if (mode === "drag" && draggingEvent) {
43
+ const draggedEvent = events.find((evt) => evt.id === draggingEvent);
44
+
45
+ if (draggedEvent) {
46
+ const duration = draggedEvent.endDate - draggedEvent.startDate;
47
+ const cellWidth = event.target.offsetWidth || 30;
48
+ const offsetDays = Math.floor(dragOffset / cellWidth);
49
+ const newStartDate = new Date(targetDate.getTime() - offsetDays * 24 * 60 * 60 * 1000);
50
+ const newEndDate = new Date(newStartDate.getTime() + duration);
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
69
+ setEvents((prevEvents) =>
70
+ prevEvents.map((evt) =>
71
+ evt.id === draggingEvent
72
+ ? {
73
+ ...evt,
74
+ resourceId,
75
+ startDate: newStartDate,
76
+ endDate: newEndDate,
77
+ }
78
+ : evt
79
+ )
80
+ );
81
+ }
82
+ }
83
+
84
+ setDraggingEvent(null);
85
+ setDragOffset(0);
86
+ setMode(null);
87
+ };
88
+
89
+
90
+ const handleExtend = (event, eventId, newEndDate) => {
91
+ if (mode !== "extend" || draggingEvent !== eventId) return;
92
+
93
+ setEvents((prevEvents) =>
94
+ prevEvents.map((evt) =>
95
+ evt.id === eventId
96
+ ? {
97
+ ...evt,
98
+ endDate: newEndDate,
99
+ }
100
+ : evt
101
+ )
102
+ );
103
+
104
+ console.log("Extended Event ID:", eventId, "New End Date:", newEndDate);
105
+
106
+ setDraggingEvent(null);
107
+ setMode(null);
108
+ };
109
+
110
+ const handleDragEnd = () => {
111
+ setDraggingEvent(null);
112
+ setDragOffset(0);
113
+ setMode(null);
114
+ };
115
+
116
+ return {
117
+ handleDragStart,
118
+ handleExtendStart,
119
+ handleDragOver,
120
+ handleDrop,
121
+ handleExtend,
122
+ handleDragEnd,
123
+ };
124
+ };
125
+
126
+ export default useEventDragDrop;
@@ -0,0 +1,173 @@
1
+ import { useState, useCallback, useRef } from 'react';
2
+
3
+ /**
4
+ * Event management hook - handles selection, undo/redo, copy/paste
5
+ * @param {Array} initialEvents - Initial events array
6
+ * @param {Function} onEventsChange - Callback when events change
7
+ * @param {number} maxHistorySize - Maximum undo/redo history size
8
+ */
9
+ const useEventManagement = (initialEvents = [], onEventsChange = null, maxHistorySize = 50) => {
10
+ const [events, setEvents] = useState(initialEvents);
11
+ const [selectedEvents, setSelectedEvents] = useState([]);
12
+ const [copiedEvents, setCopiedEvents] = useState([]);
13
+
14
+ // Undo/Redo history
15
+ const historyRef = useRef([]);
16
+ const historyIndexRef = useRef(-1);
17
+ const isUndoRedoRef = useRef(false);
18
+
19
+ // Update events and add to history
20
+ const updateEvents = useCallback((newEvents, addToHistory = true) => {
21
+ setEvents(newEvents);
22
+
23
+ if (onEventsChange) {
24
+ onEventsChange(newEvents);
25
+ }
26
+
27
+ // Add to history (if not undo/redo operation)
28
+ if (addToHistory && !isUndoRedoRef.current) {
29
+ const history = historyRef.current;
30
+ const historyIndex = historyIndexRef.current;
31
+
32
+ // Remove any history after current index (if we're not at the end)
33
+ const newHistory = history.slice(0, historyIndex + 1);
34
+
35
+ // Add new state
36
+ newHistory.push([...newEvents]);
37
+
38
+ // Limit history size
39
+ if (newHistory.length > maxHistorySize) {
40
+ newHistory.shift();
41
+ } else {
42
+ historyIndexRef.current = newHistory.length - 1;
43
+ }
44
+
45
+ historyRef.current = newHistory;
46
+ }
47
+
48
+ isUndoRedoRef.current = false;
49
+ }, [onEventsChange, maxHistorySize]);
50
+
51
+ // Select event
52
+ const selectEvent = useCallback((eventId, multiSelect = false) => {
53
+ setSelectedEvents((prev) => {
54
+ if (multiSelect) {
55
+ // Toggle selection
56
+ if (prev.includes(eventId)) {
57
+ return prev.filter((id) => id !== eventId);
58
+ } else {
59
+ return [...prev, eventId];
60
+ }
61
+ } else {
62
+ // Single selection
63
+ return [eventId];
64
+ }
65
+ });
66
+ }, []);
67
+
68
+ // Clear selection
69
+ const clearSelection = useCallback(() => {
70
+ setSelectedEvents([]);
71
+ }, []);
72
+
73
+ // Delete selected events
74
+ const deleteSelectedEvents = useCallback(() => {
75
+ if (selectedEvents.length === 0) return;
76
+
77
+ const newEvents = events.filter((event) => !selectedEvents.includes(event.id));
78
+ updateEvents(newEvents);
79
+ setSelectedEvents([]);
80
+ }, [events, selectedEvents, updateEvents]);
81
+
82
+ // Copy selected events
83
+ const copySelectedEvents = useCallback(() => {
84
+ if (selectedEvents.length === 0) return;
85
+
86
+ const eventsToCopy = events.filter((event) => selectedEvents.includes(event.id));
87
+ setCopiedEvents(eventsToCopy);
88
+ }, [events, selectedEvents]);
89
+
90
+ // Paste copied events
91
+ const pasteEvents = useCallback((targetDate = null, targetResourceId = null) => {
92
+ if (copiedEvents.length === 0) return;
93
+
94
+ const newEvents = [...events];
95
+ const baseDate = targetDate || new Date();
96
+
97
+ copiedEvents.forEach((event) => {
98
+ const newEvent = {
99
+ ...event,
100
+ id: `${event.id}-copy-${Date.now()}-${Math.random()}`,
101
+ startDate: targetDate
102
+ ? new Date(targetDate)
103
+ : new Date(event.startDate),
104
+ endDate: targetDate
105
+ ? new Date(targetDate.getTime() + (new Date(event.endDate).getTime() - new Date(event.startDate).getTime()))
106
+ : new Date(event.endDate),
107
+ resourceId: targetResourceId || event.resourceId,
108
+ };
109
+ newEvents.push(newEvent);
110
+ });
111
+
112
+ updateEvents(newEvents);
113
+ }, [events, copiedEvents, updateEvents]);
114
+
115
+ // Undo
116
+ const undo = useCallback(() => {
117
+ const history = historyRef.current;
118
+ const currentIndex = historyIndexRef.current;
119
+
120
+ if (currentIndex > 0) {
121
+ isUndoRedoRef.current = true;
122
+ historyIndexRef.current = currentIndex - 1;
123
+ const previousState = history[currentIndex - 1];
124
+ setEvents([...previousState]);
125
+
126
+ if (onEventsChange) {
127
+ onEventsChange([...previousState]);
128
+ }
129
+ }
130
+ }, [onEventsChange]);
131
+
132
+ // Redo
133
+ const redo = useCallback(() => {
134
+ const history = historyRef.current;
135
+ const currentIndex = historyIndexRef.current;
136
+
137
+ if (currentIndex < history.length - 1) {
138
+ isUndoRedoRef.current = true;
139
+ historyIndexRef.current = currentIndex + 1;
140
+ const nextState = history[currentIndex + 1];
141
+ setEvents([...nextState]);
142
+
143
+ if (onEventsChange) {
144
+ onEventsChange([...nextState]);
145
+ }
146
+ }
147
+ }, [onEventsChange]);
148
+
149
+ // Initialize history
150
+ if (historyRef.current.length === 0) {
151
+ historyRef.current = [[...events]];
152
+ historyIndexRef.current = 0;
153
+ }
154
+
155
+ return {
156
+ events,
157
+ setEvents: updateEvents,
158
+ selectedEvents,
159
+ selectEvent,
160
+ clearSelection,
161
+ deleteSelectedEvents,
162
+ copySelectedEvents,
163
+ pasteEvents,
164
+ copiedEvents,
165
+ undo,
166
+ redo,
167
+ canUndo: historyIndexRef.current > 0,
168
+ canRedo: historyIndexRef.current < historyRef.current.length - 1,
169
+ };
170
+ };
171
+
172
+ export default useEventManagement;
173
+
@@ -0,0 +1,82 @@
1
+ // src/hooks/useEventSelection.js
2
+
3
+ import { useState, useCallback } from 'react';
4
+
5
+ /**
6
+ * Event seçimi için hook
7
+ * @param {Array} events - Event listesi
8
+ * @returns {Object} - {selectedEvents, selectEvent, deselectEvent, toggleSelection, clearSelection, isSelected}
9
+ */
10
+ export const useEventSelection = (events = []) => {
11
+ const [selectedEvents, setSelectedEvents] = useState([]);
12
+
13
+ const selectEvent = useCallback((eventId) => {
14
+ setSelectedEvents(prev => {
15
+ if (prev.includes(eventId)) {
16
+ return prev;
17
+ }
18
+ return [...prev, eventId];
19
+ });
20
+ }, []);
21
+
22
+ const deselectEvent = useCallback((eventId) => {
23
+ setSelectedEvents(prev => prev.filter(id => id !== eventId));
24
+ }, []);
25
+
26
+ const toggleSelection = useCallback((eventId) => {
27
+ setSelectedEvents(prev => {
28
+ if (prev.includes(eventId)) {
29
+ return prev.filter(id => id !== eventId);
30
+ }
31
+ return [...prev, eventId];
32
+ });
33
+ }, []);
34
+
35
+ const clearSelection = useCallback(() => {
36
+ setSelectedEvents([]);
37
+ }, []);
38
+
39
+ const selectRange = useCallback((startEventId, endEventId) => {
40
+ const startIndex = events.findIndex(e => e.id === startEventId);
41
+ const endIndex = events.findIndex(e => e.id === endEventId);
42
+
43
+ if (startIndex === -1 || endIndex === -1) {
44
+ return;
45
+ }
46
+
47
+ const minIndex = Math.min(startIndex, endIndex);
48
+ const maxIndex = Math.max(startIndex, endIndex);
49
+ const rangeEvents = events.slice(minIndex, maxIndex + 1).map(e => e.id);
50
+
51
+ setSelectedEvents(prev => {
52
+ const newSelection = [...prev];
53
+ rangeEvents.forEach(id => {
54
+ if (!newSelection.includes(id)) {
55
+ newSelection.push(id);
56
+ }
57
+ });
58
+ return newSelection;
59
+ });
60
+ }, [events]);
61
+
62
+ const isSelected = useCallback((eventId) => {
63
+ return selectedEvents.includes(eventId);
64
+ }, [selectedEvents]);
65
+
66
+ const selectAll = useCallback(() => {
67
+ setSelectedEvents(events.map(e => e.id));
68
+ }, [events]);
69
+
70
+ return {
71
+ selectedEvents,
72
+ selectEvent,
73
+ deselectEvent,
74
+ toggleSelection,
75
+ clearSelection,
76
+ selectRange,
77
+ isSelected,
78
+ selectAll,
79
+ selectedCount: selectedEvents.length,
80
+ };
81
+ };
82
+
@@ -1,28 +1,28 @@
1
- import { useCallback } from "react";
2
-
3
- const useExtendEvent = (events, setEvents) => {
4
- /**
5
- * Etkinliği uzatmak veya kısaltmak için kullanılan işlev.
6
- * @param {number} eventId - Güncellenmesi gereken etkinliğin ID'si.
7
- * @param {Date} newEndDate - Etkinliğin yeni bitiş tarihi.
8
- */
9
- const extendEvent = useCallback(
10
- (eventId, newEndDate) => {
11
- setEvents((prevEvents) =>
12
- prevEvents.map((event) =>
13
- event.id === eventId
14
- ? {
15
- ...event,
16
- endDate: newEndDate, // Yeni bitiş tarihini günceller
17
- }
18
- : event // Diğer etkinlikler aynı kalır
19
- )
20
- );
21
- },
22
- [setEvents]
23
- );
24
-
25
- return { extendEvent };
26
- };
27
-
28
- export default useExtendEvent;
1
+ import { useCallback } from "react";
2
+
3
+ const useExtendEvent = (events, setEvents) => {
4
+ /**
5
+ * Etkinliği uzatmak veya kısaltmak için kullanılan işlev.
6
+ * @param {number} eventId - Güncellenmesi gereken etkinliğin ID'si.
7
+ * @param {Date} newEndDate - Etkinliğin yeni bitiş tarihi.
8
+ */
9
+ const extendEvent = useCallback(
10
+ (eventId, newEndDate) => {
11
+ setEvents((prevEvents) =>
12
+ prevEvents.map((event) =>
13
+ event.id === eventId
14
+ ? {
15
+ ...event,
16
+ endDate: newEndDate, // Yeni bitiş tarihini günceller
17
+ }
18
+ : event // Diğer etkinlikler aynı kalır
19
+ )
20
+ );
21
+ },
22
+ [setEvents]
23
+ );
24
+
25
+ return { extendEvent };
26
+ };
27
+
28
+ export default useExtendEvent;