akfatimeline 2.2.4 → 2.2.6

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.
package/dist/Timeline.js CHANGED
@@ -4002,7 +4002,13 @@ const TimelineContent = _ref => {
4002
4002
  // Context menu açıldığında çağrılacak callback
4003
4003
 
4004
4004
  // Disable Dates
4005
- disableDates = null // { mode: 'exclude' | 'include', dates: [], ranges: [] }
4005
+ disableDates = null,
4006
+ // { mode: 'exclude' | 'include', dates: [], ranges: [] }
4007
+
4008
+ // Auto Select Enabled Range
4009
+ autoSelectEnabledRange = false,
4010
+ // true = belirtilen range'lere tıklandığında otomatik olarak tüm range'i seç
4011
+ autoSelectRanges = null // [{ start: '2025-12-31', end: '2026-01-05' }, ...] - Auto-select için range'ler (disableDates'ten bağımsız)
4006
4012
  } = _ref;
4007
4013
  // ------------------- HOOKS & STATE -------------------
4008
4014
  const containerRef = (0,external_react_.useRef)(null);
@@ -4235,7 +4241,6 @@ const TimelineContent = _ref => {
4235
4241
  if (!createNewEventOn) return;
4236
4242
  if (!isCreating) return;
4237
4243
  if (mode === "extend") {
4238
- console.log(">>> 'extend' mode, skip new event creation");
4239
4244
  return;
4240
4245
  }
4241
4246
  const handleMouseMove = e => {
@@ -4393,16 +4398,10 @@ const TimelineContent = _ref => {
4393
4398
 
4394
4399
  // ------------------- Drag Logic -------------------
4395
4400
  const handleDragStartSafe = (e, eventId) => {
4396
- console.log("[TimelineContent] handleDragStartSafe called:", {
4397
- eventId,
4398
- eventsDragOn
4399
- });
4400
4401
  if (!eventsDragOn) {
4401
- console.log("[TimelineContent] Events drag is disabled, preventing drag start");
4402
4402
  e.preventDefault();
4403
4403
  return;
4404
4404
  }
4405
- console.log("[TimelineContent] Calling handleDragStart...");
4406
4405
  handleDragStart(e, eventId);
4407
4406
  };
4408
4407
  const handleDragEndSafe = e => {
@@ -4417,7 +4416,6 @@ const TimelineContent = _ref => {
4417
4416
  const handleMouseDownExtend = (mouseEvent, event) => {
4418
4417
  if (!eventsExtendOn) return;
4419
4418
  mouseEvent.stopPropagation();
4420
- console.log(">>> Extend start ID:", event.id);
4421
4419
  setMode("extend");
4422
4420
  setExtendingEvent(event);
4423
4421
  setOriginalEndDate(event.endDate);
@@ -4437,7 +4435,6 @@ const TimelineContent = _ref => {
4437
4435
  }) : evt));
4438
4436
  }, [mode, extendingEvent, eventsExtendOn, originalEndDate, startMouseX, setEvents]);
4439
4437
  const handleMouseUpExtend = (0,external_react_.useCallback)(() => {
4440
- console.log(">>> Extend finished ID:", extendingEvent === null || extendingEvent === void 0 ? void 0 : extendingEvent.id);
4441
4438
  if (onExtendInfo && extendingEvent) {
4442
4439
  // callback
4443
4440
  const updatedEvent = events.find(ev => ev.id === extendingEvent.id);
@@ -4584,15 +4581,6 @@ const TimelineContent = _ref => {
4584
4581
  const cellDateOnly = new Date(cellDate.getFullYear(), cellDate.getMonth(), cellDate.getDate());
4585
4582
  const preventPastEventsDateOnly = new Date(preventPastEventsDateObj.getFullYear(), preventPastEventsDateObj.getMonth(), preventPastEventsDateObj.getDate());
4586
4583
  isPastDate = cellDateOnly < preventPastEventsDateOnly;
4587
- // Debug: İlk birkaç hücre için log
4588
- if (colIndex < 3 && groupIndex === 0) {
4589
- console.log('[TimelineContent] Past date check:', {
4590
- cellDate: cellDateOnly.toISOString().split('T')[0],
4591
- preventPastEventsDateValue: preventPastEventsDateOnly.toISOString().split('T')[0],
4592
- isPastDate,
4593
- preventPastEvents
4594
- });
4595
- }
4596
4584
  }
4597
4585
 
4598
4586
  // Disabled tarih kontrolü
@@ -4706,7 +4694,6 @@ const TimelineContent = _ref => {
4706
4694
  e.preventDefault();
4707
4695
  return;
4708
4696
  }
4709
- console.log("[TimelineContent] Event drag start:", event.id);
4710
4697
  handleDragStart(e, event.id);
4711
4698
  e.stopPropagation();
4712
4699
 
@@ -4775,15 +4762,6 @@ const TimelineContent = _ref => {
4775
4762
  const cellDateOnly = new Date(cellDate.getFullYear(), cellDate.getMonth(), cellDate.getDate());
4776
4763
  const preventPastEventsDateOnly = new Date(preventPastEventsDateObj.getFullYear(), preventPastEventsDateObj.getMonth(), preventPastEventsDateObj.getDate());
4777
4764
  isPastDate = cellDateOnly < preventPastEventsDateOnly;
4778
- // Debug: İlk birkaç hücre için log
4779
- if (colIndex < 3 && rowIndex === 0 && groupIndex === 0) {
4780
- console.log('[TimelineContent] Cell past date check:', {
4781
- cellDate: cellDateOnly.toISOString().split('T')[0],
4782
- preventPastEventsDateValue: preventPastEventsDateOnly.toISOString().split('T')[0],
4783
- isPastDate,
4784
- preventPastEvents
4785
- });
4786
- }
4787
4765
  }
4788
4766
 
4789
4767
  // Hafta sonu kontrolü
@@ -4865,7 +4843,6 @@ const TimelineContent = _ref => {
4865
4843
  }
4866
4844
  e.preventDefault();
4867
4845
  e.stopPropagation();
4868
- console.log("[TimelineContent] onDragOver called for resource:", resource.id);
4869
4846
  handleDragOver(e);
4870
4847
  },
4871
4848
  onDrop: e => {
@@ -4878,7 +4855,6 @@ const TimelineContent = _ref => {
4878
4855
  }
4879
4856
  e.preventDefault();
4880
4857
  e.stopPropagation();
4881
- console.log("[TimelineContent] onDrop called for resource:", resource.id, "date:", dateObj.fullDate);
4882
4858
  handleDrop(e, resource.id, parseDate(dateObj.fullDate));
4883
4859
  }
4884
4860
  });
@@ -5980,10 +5956,18 @@ const Timeline_Timeline_Timeline = _ref => {
5980
5956
  // Özelleştirilebilir tuş haritası
5981
5957
 
5982
5958
  // Disable Dates
5983
- disableDates = null // { mode: 'exclude' | 'include', dates: [], ranges: [] }
5959
+ disableDates = null,
5960
+ // { mode: 'exclude' | 'include', dates: [], ranges: [] }
5984
5961
  // mode: 'exclude' = belirtilen tarihler disabled, 'include' = belirtilen tarihler enabled (diğerleri disabled)
5985
5962
  // dates: ['2025-01-15', '2025-01-20', ...] veya [Date, Date, ...] - Tekil tarihler
5986
5963
  // ranges: [{ start: '2025-01-15', end: '2025-01-20' }, ...] veya [{ start: Date, end: Date }, ...] - Tarih aralıkları
5964
+
5965
+ // Auto Select Enabled Range
5966
+ autoSelectEnabledRange = false,
5967
+ // true = belirtilen range'lere tıklandığında otomatik olarak tüm range'i seç
5968
+ autoSelectRanges = null // [{ start: '2025-12-31', end: '2026-01-05' }, ...] - Auto-select için range'ler (disableDates'ten bağımsız)
5969
+ // autoSelectRanges tanımlı olduğunda, tıklanan tarih bu range'lerden birinin içindeyse otomatik olarak tüm range seçilir
5970
+ // autoSelectRanges: null ise ve disableDates mode: 'include' ise, disableDates.ranges kullanılır (geriye dönük uyumluluk)
5987
5971
  } = _ref;
5988
5972
  // ---------------------------------------------------------
5989
5973
  // 1) timelineData oluştur (dates, monthHeaders vs.)
@@ -6013,6 +5997,13 @@ const Timeline_Timeline_Timeline = _ref => {
6013
5997
  // ---------------------------------------------------------
6014
5998
  const [collapsedGroups, setCollapsedGroups] = (0,external_react_.useState)({});
6015
5999
 
6000
+ // Internal zoom state - eğer setZoomLevel prop'u yoksa kullanılır
6001
+ const [internalZoomLevel, setInternalZoomLevel] = (0,external_react_.useState)(zoomLevel);
6002
+
6003
+ // Effective zoom level - prop varsa prop'u kullan, yoksa internal state'i kullan
6004
+ const effectiveZoomLevel = setZoomLevel ? zoomLevel : internalZoomLevel;
6005
+ const effectiveSetZoomLevel = setZoomLevel || setInternalZoomLevel;
6006
+
6016
6007
  // Event Management
6017
6008
  const eventManagement = hooks_useEventManagement(events, newEvents => {
6018
6009
  setLocalEvents(newEvents);
@@ -6063,9 +6054,17 @@ const Timeline_Timeline_Timeline = _ref => {
6063
6054
  // Container genişliği = dayRange * cellWidth
6064
6055
  // ---------------------------------------------------------
6065
6056
  const baseCellWidth = 56.95; // Temel hücre genişliği (zoom = 1.0 için)
6066
- const cellWidth = baseCellWidth * zoomLevel; // Zoom seviyesine göre hücre genişliği
6057
+ const cellWidth = baseCellWidth * effectiveZoomLevel; // Zoom seviyesine göre hücre genişliği
6067
6058
  const containerWidth = dayRange * cellWidth;
6068
6059
 
6060
+ // Internal zoom state'i prop'tan gelen zoomLevel ile senkronize et
6061
+ (0,external_react_.useEffect)(() => {
6062
+ if (setZoomLevel) {
6063
+ // Prop'tan gelen zoomLevel kullanılıyor, internal state'i güncelle
6064
+ setInternalZoomLevel(zoomLevel);
6065
+ }
6066
+ }, [zoomLevel, setZoomLevel]);
6067
+
6069
6068
  // ---------------------------------------------------------
6070
6069
  // 4) Touch Gestures (Mobil desteği)
6071
6070
  // ---------------------------------------------------------
@@ -6162,11 +6161,16 @@ const Timeline_Timeline_Timeline = _ref => {
6162
6161
  setSelectedDate(new Date(newDate));
6163
6162
  };
6164
6163
  const handleToday = () => {
6165
- const today = programDate ? new Date(programDate) : new Date();
6166
- today.setDate(today.getDate() - 3); // Program tarihinden 3 gün öncesini ayarla
6164
+ // Bugünün tarihini al
6165
+ const today = new Date();
6166
+ today.setDate(today.getDate() - 3); // Bugünden 3 gün öncesini ayarla
6167
6167
  setSelectedDate(today);
6168
- // App.js'teki callback'i de çağır
6169
- if (onToday) onToday();
6168
+
6169
+ // onToday callback'i bir fonksiyon ise çağır
6170
+ // Eğer onToday bir string (tarih) ise veya başka bir değer ise, sadece setSelectedDate yeterli
6171
+ if (typeof onToday === 'function') {
6172
+ onToday();
6173
+ }
6170
6174
  };
6171
6175
  const handleAdvance = () => {
6172
6176
  setSelectedDate(prev => new Date(prev.getTime() + 5 * 24 * 60 * 60 * 1000));
@@ -6205,15 +6209,15 @@ const Timeline_Timeline_Timeline = _ref => {
6205
6209
  // 8.5) Zoom handlers
6206
6210
  // ---------------------------------------------------------
6207
6211
  const handleZoomIn = (0,external_react_.useCallback)(() => {
6208
- if (setZoomLevel && zoomOn) {
6209
- setZoomLevel(prev => Math.min(maxZoomLevel, prev + zoomStep));
6212
+ if (zoomOn) {
6213
+ effectiveSetZoomLevel(prev => Math.min(maxZoomLevel, prev + zoomStep));
6210
6214
  }
6211
- }, [setZoomLevel, zoomOn, maxZoomLevel, zoomStep]);
6215
+ }, [zoomOn, maxZoomLevel, zoomStep, effectiveSetZoomLevel]);
6212
6216
  const handleZoomOut = (0,external_react_.useCallback)(() => {
6213
- if (setZoomLevel && zoomOn) {
6214
- setZoomLevel(prev => Math.max(minZoomLevel, prev - zoomStep));
6217
+ if (zoomOn) {
6218
+ effectiveSetZoomLevel(prev => Math.max(minZoomLevel, prev - zoomStep));
6215
6219
  }
6216
- }, [setZoomLevel, zoomOn, minZoomLevel, zoomStep]);
6220
+ }, [zoomOn, minZoomLevel, zoomStep, effectiveSetZoomLevel]);
6217
6221
 
6218
6222
  // ---------------------------------------------------------
6219
6223
  // 8.6) Keyboard Shortcuts
@@ -6265,8 +6269,8 @@ const Timeline_Timeline_Timeline = _ref => {
6265
6269
  onMonthRetreat: handleMonthRetreat,
6266
6270
  dayRange: dayRange,
6267
6271
  setDayRange: setDayRange,
6268
- zoomLevel: zoomLevel,
6269
- setZoomLevel: setZoomLevel,
6272
+ zoomLevel: effectiveZoomLevel,
6273
+ setZoomLevel: effectiveSetZoomLevel,
6270
6274
  zoomOn: zoomOn,
6271
6275
  minZoomLevel: minZoomLevel,
6272
6276
  maxZoomLevel: maxZoomLevel,
@@ -6361,7 +6365,9 @@ const Timeline_Timeline_Timeline = _ref => {
6361
6365
  eventBadgeResolver: eventBadgeResolver,
6362
6366
  isLoading: isLoading,
6363
6367
  loadingType: loadingType,
6364
- disableDates: disableDates
6368
+ disableDates: disableDates,
6369
+ autoSelectEnabledRange: autoSelectEnabledRange,
6370
+ autoSelectRanges: autoSelectRanges
6365
6371
  }), selectedEvent && /*#__PURE__*/external_react_default().createElement(Timeline_EventTooltip, {
6366
6372
  event: selectedEvent,
6367
6373
  position: tooltipPosition,
@@ -127,6 +127,12 @@ const Timeline = ({
127
127
  // mode: 'exclude' = belirtilen tarihler disabled, 'include' = belirtilen tarihler enabled (diğerleri disabled)
128
128
  // dates: ['2025-01-15', '2025-01-20', ...] veya [Date, Date, ...] - Tekil tarihler
129
129
  // ranges: [{ start: '2025-01-15', end: '2025-01-20' }, ...] veya [{ start: Date, end: Date }, ...] - Tarih aralıkları
130
+
131
+ // Auto Select Enabled Range
132
+ autoSelectEnabledRange = false, // true = belirtilen range'lere tıklandığında otomatik olarak tüm range'i seç
133
+ autoSelectRanges = null, // [{ start: '2025-12-31', end: '2026-01-05' }, ...] - Auto-select için range'ler (disableDates'ten bağımsız)
134
+ // autoSelectRanges tanımlı olduğunda, tıklanan tarih bu range'lerden birinin içindeyse otomatik olarak tüm range seçilir
135
+ // autoSelectRanges: null ise ve disableDates mode: 'include' ise, disableDates.ranges kullanılır (geriye dönük uyumluluk)
130
136
  }) => {
131
137
  // ---------------------------------------------------------
132
138
  // 1) timelineData oluştur (dates, monthHeaders vs.)
@@ -152,6 +158,13 @@ const Timeline = ({
152
158
  // 2) local state
153
159
  // ---------------------------------------------------------
154
160
  const [collapsedGroups, setCollapsedGroups] = useState({});
161
+
162
+ // Internal zoom state - eğer setZoomLevel prop'u yoksa kullanılır
163
+ const [internalZoomLevel, setInternalZoomLevel] = useState(zoomLevel);
164
+
165
+ // Effective zoom level - prop varsa prop'u kullan, yoksa internal state'i kullan
166
+ const effectiveZoomLevel = setZoomLevel ? zoomLevel : internalZoomLevel;
167
+ const effectiveSetZoomLevel = setZoomLevel || setInternalZoomLevel;
155
168
 
156
169
  // Event Management
157
170
  const eventManagement = useEventManagement(
@@ -206,9 +219,17 @@ const Timeline = ({
206
219
  // Container genişliği = dayRange * cellWidth
207
220
  // ---------------------------------------------------------
208
221
  const baseCellWidth = 56.95; // Temel hücre genişliği (zoom = 1.0 için)
209
- const cellWidth = baseCellWidth * zoomLevel; // Zoom seviyesine göre hücre genişliği
222
+ const cellWidth = baseCellWidth * effectiveZoomLevel; // Zoom seviyesine göre hücre genişliği
210
223
  const containerWidth = dayRange * cellWidth;
211
224
 
225
+ // Internal zoom state'i prop'tan gelen zoomLevel ile senkronize et
226
+ useEffect(() => {
227
+ if (setZoomLevel) {
228
+ // Prop'tan gelen zoomLevel kullanılıyor, internal state'i güncelle
229
+ setInternalZoomLevel(zoomLevel);
230
+ }
231
+ }, [zoomLevel, setZoomLevel]);
232
+
212
233
  // ---------------------------------------------------------
213
234
  // 4) Touch Gestures (Mobil desteği)
214
235
  // ---------------------------------------------------------
@@ -321,11 +342,16 @@ const Timeline = ({
321
342
  };
322
343
 
323
344
  const handleToday = () => {
324
- const today = programDate ? new Date(programDate) : new Date();
325
- today.setDate(today.getDate() - 3); // Program tarihinden 3 gün öncesini ayarla
345
+ // Bugünün tarihini al
346
+ const today = new Date();
347
+ today.setDate(today.getDate() - 3); // Bugünden 3 gün öncesini ayarla
326
348
  setSelectedDate(today);
327
- // App.js'teki callback'i de çağır
328
- if (onToday) onToday();
349
+
350
+ // onToday callback'i bir fonksiyon ise çağır
351
+ // Eğer onToday bir string (tarih) ise veya başka bir değer ise, sadece setSelectedDate yeterli
352
+ if (typeof onToday === 'function') {
353
+ onToday();
354
+ }
329
355
  };
330
356
 
331
357
 
@@ -370,16 +396,16 @@ const Timeline = ({
370
396
  // 8.5) Zoom handlers
371
397
  // ---------------------------------------------------------
372
398
  const handleZoomIn = useCallback(() => {
373
- if (setZoomLevel && zoomOn) {
374
- setZoomLevel((prev) => Math.min(maxZoomLevel, prev + zoomStep));
399
+ if (zoomOn) {
400
+ effectiveSetZoomLevel((prev) => Math.min(maxZoomLevel, prev + zoomStep));
375
401
  }
376
- }, [setZoomLevel, zoomOn, maxZoomLevel, zoomStep]);
402
+ }, [zoomOn, maxZoomLevel, zoomStep, effectiveSetZoomLevel]);
377
403
 
378
404
  const handleZoomOut = useCallback(() => {
379
- if (setZoomLevel && zoomOn) {
380
- setZoomLevel((prev) => Math.max(minZoomLevel, prev - zoomStep));
405
+ if (zoomOn) {
406
+ effectiveSetZoomLevel((prev) => Math.max(minZoomLevel, prev - zoomStep));
381
407
  }
382
- }, [setZoomLevel, zoomOn, minZoomLevel, zoomStep]);
408
+ }, [zoomOn, minZoomLevel, zoomStep, effectiveSetZoomLevel]);
383
409
 
384
410
  // ---------------------------------------------------------
385
411
  // 8.6) Keyboard Shortcuts
@@ -437,8 +463,8 @@ const Timeline = ({
437
463
  onMonthRetreat={handleMonthRetreat}
438
464
  dayRange={dayRange}
439
465
  setDayRange={setDayRange}
440
- zoomLevel={zoomLevel}
441
- setZoomLevel={setZoomLevel}
466
+ zoomLevel={effectiveZoomLevel}
467
+ setZoomLevel={effectiveSetZoomLevel}
442
468
  zoomOn={zoomOn}
443
469
  minZoomLevel={minZoomLevel}
444
470
  maxZoomLevel={maxZoomLevel}
@@ -541,6 +567,8 @@ const Timeline = ({
541
567
  isLoading={isLoading}
542
568
  loadingType={loadingType}
543
569
  disableDates={disableDates}
570
+ autoSelectEnabledRange={autoSelectEnabledRange}
571
+ autoSelectRanges={autoSelectRanges}
544
572
 
545
573
  />
546
574
 
@@ -70,6 +70,10 @@ const TimelineContent = ({
70
70
 
71
71
  // Disable Dates
72
72
  disableDates = null, // { mode: 'exclude' | 'include', dates: [], ranges: [] }
73
+
74
+ // Auto Select Enabled Range
75
+ autoSelectEnabledRange = false, // true = belirtilen range'lere tıklandığında otomatik olarak tüm range'i seç
76
+ autoSelectRanges = null, // [{ start: '2025-12-31', end: '2026-01-05' }, ...] - Auto-select için range'ler (disableDates'ten bağımsız)
73
77
  }) => {
74
78
  // ------------------- HOOKS & STATE -------------------
75
79
  const containerRef = useRef(null);
@@ -304,7 +308,6 @@ const TimelineContent = ({
304
308
  if (!createNewEventOn) return;
305
309
  if (!isCreating) return;
306
310
  if (mode === "extend") {
307
- console.log(">>> 'extend' mode, skip new event creation");
308
311
  return;
309
312
  }
310
313
 
@@ -470,13 +473,10 @@ const TimelineContent = ({
470
473
 
471
474
  // ------------------- Drag Logic -------------------
472
475
  const handleDragStartSafe = (e, eventId) => {
473
- console.log("[TimelineContent] handleDragStartSafe called:", { eventId, eventsDragOn });
474
476
  if (!eventsDragOn) {
475
- console.log("[TimelineContent] Events drag is disabled, preventing drag start");
476
477
  e.preventDefault();
477
478
  return;
478
479
  }
479
- console.log("[TimelineContent] Calling handleDragStart...");
480
480
  handleDragStart(e, eventId);
481
481
  };
482
482
  const handleDragEndSafe = (e) => {
@@ -495,7 +495,6 @@ const TimelineContent = ({
495
495
  const handleMouseDownExtend = (mouseEvent, event) => {
496
496
  if (!eventsExtendOn) return;
497
497
  mouseEvent.stopPropagation();
498
- console.log(">>> Extend start ID:", event.id);
499
498
  setMode("extend");
500
499
  setExtendingEvent(event);
501
500
  setOriginalEndDate(event.endDate);
@@ -521,7 +520,6 @@ const TimelineContent = ({
521
520
  }, [mode, extendingEvent, eventsExtendOn, originalEndDate, startMouseX, setEvents]);
522
521
 
523
522
  const handleMouseUpExtend = useCallback(() => {
524
- console.log(">>> Extend finished ID:", extendingEvent?.id);
525
523
  if (onExtendInfo && extendingEvent) {
526
524
  // callback
527
525
  const updatedEvent = events.find((ev) => ev.id === extendingEvent.id);
@@ -682,15 +680,6 @@ const TimelineContent = ({
682
680
  const cellDateOnly = new Date(cellDate.getFullYear(), cellDate.getMonth(), cellDate.getDate());
683
681
  const preventPastEventsDateOnly = new Date(preventPastEventsDateObj.getFullYear(), preventPastEventsDateObj.getMonth(), preventPastEventsDateObj.getDate());
684
682
  isPastDate = cellDateOnly < preventPastEventsDateOnly;
685
- // Debug: İlk birkaç hücre için log
686
- if (colIndex < 3 && groupIndex === 0) {
687
- console.log('[TimelineContent] Past date check:', {
688
- cellDate: cellDateOnly.toISOString().split('T')[0],
689
- preventPastEventsDateValue: preventPastEventsDateOnly.toISOString().split('T')[0],
690
- isPastDate,
691
- preventPastEvents
692
- });
693
- }
694
683
  }
695
684
 
696
685
  // Disabled tarih kontrolü
@@ -817,7 +806,6 @@ const TimelineContent = ({
817
806
  e.preventDefault();
818
807
  return;
819
808
  }
820
- console.log("[TimelineContent] Event drag start:", event.id);
821
809
  handleDragStart(e, event.id);
822
810
  e.stopPropagation();
823
811
 
@@ -908,15 +896,6 @@ const TimelineContent = ({
908
896
  const cellDateOnly = new Date(cellDate.getFullYear(), cellDate.getMonth(), cellDate.getDate());
909
897
  const preventPastEventsDateOnly = new Date(preventPastEventsDateObj.getFullYear(), preventPastEventsDateObj.getMonth(), preventPastEventsDateObj.getDate());
910
898
  isPastDate = cellDateOnly < preventPastEventsDateOnly;
911
- // Debug: İlk birkaç hücre için log
912
- if (colIndex < 3 && rowIndex === 0 && groupIndex === 0) {
913
- console.log('[TimelineContent] Cell past date check:', {
914
- cellDate: cellDateOnly.toISOString().split('T')[0],
915
- preventPastEventsDateValue: preventPastEventsDateOnly.toISOString().split('T')[0],
916
- isPastDate,
917
- preventPastEvents
918
- });
919
- }
920
899
  }
921
900
 
922
901
  // Hafta sonu kontrolü
@@ -1004,7 +983,6 @@ const TimelineContent = ({
1004
983
  }
1005
984
  e.preventDefault();
1006
985
  e.stopPropagation();
1007
- console.log("[TimelineContent] onDragOver called for resource:", resource.id);
1008
986
  handleDragOver(e);
1009
987
  }}
1010
988
  onDrop={(e) => {
@@ -1016,8 +994,7 @@ const TimelineContent = ({
1016
994
  return false;
1017
995
  }
1018
996
  e.preventDefault();
1019
- e.stopPropagation();
1020
- console.log("[TimelineContent] onDrop called for resource:", resource.id, "date:", dateObj.fullDate);
997
+ e.stopPropagation();
1021
998
  handleDrop(e, resource.id, parseDate(dateObj.fullDate));
1022
999
  }}
1023
1000
  ></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "akfatimeline",
3
- "version": "2.2.4",
3
+ "version": "2.2.6",
4
4
  "description": "A customizable timeline component for React applications with disableDates, custom header buttons, and past date protection features",
5
5
  "main": "./src/library.js",
6
6
  "module": "./src/library.js",
package/src/App.js CHANGED
@@ -55,6 +55,23 @@ const App = () => {
55
55
  ],
56
56
  };
57
57
 
58
+ // Auto Select Enabled Range - Belirtilen range'lere tıklandığında otomatik olarak tüm range'i seç
59
+ const [autoSelectEnabledRange, setAutoSelectEnabledRange] = useState(true); // true = aktif, false = pasif
60
+
61
+ // Auto Select Ranges - Auto-select için range'ler (disableDates'ten bağımsız)
62
+ // Bu range'lere tıklandığında otomatik olarak tüm range seçilir
63
+ const autoSelectRanges = [
64
+ {
65
+ start: '2025-12-31', // 31 Aralık 2025
66
+ end: '2026-01-05', // 5 Ocak 2026
67
+ },
68
+ // İstediğiniz kadar range ekleyebilirsiniz
69
+ // {
70
+ // start: '2026-02-01',
71
+ // end: '2026-02-10',
72
+ // },
73
+ ];
74
+
58
75
  // Cell Tooltip için örnek fiyat verisi
59
76
  // Her gün için farklı fiyatlar tanımlanabilir
60
77
  const getCellTooltipContent = (resource, dateObj) => {
@@ -450,6 +467,9 @@ const resources = [
450
467
  <button onClick={() => setIsLoading(!isLoading)}>
451
468
  Loading: {isLoading ? "Açık" : "Kapalı"}
452
469
  </button>
470
+ <button onClick={() => setAutoSelectEnabledRange(!autoSelectEnabledRange)}>
471
+ Auto Select Enabled Range: {autoSelectEnabledRange ? "Açık" : "Kapalı"}
472
+ </button>
453
473
  <button onClick={handleToday}>Bugüne Git</button>
454
474
  <button onClick={handleRetreat}>5 Gün Geri</button>
455
475
  <button onClick={handleAdvance}>5 Gün İleri</button>
@@ -561,6 +581,8 @@ const resources = [
561
581
  />
562
582
  }
563
583
  disableDates={disableDates}
584
+ autoSelectEnabledRange={autoSelectEnabledRange}
585
+ autoSelectRanges={autoSelectRanges}
564
586
 
565
587
  />
566
588
  </div>
@@ -127,6 +127,12 @@ const Timeline = ({
127
127
  // mode: 'exclude' = belirtilen tarihler disabled, 'include' = belirtilen tarihler enabled (diğerleri disabled)
128
128
  // dates: ['2025-01-15', '2025-01-20', ...] veya [Date, Date, ...] - Tekil tarihler
129
129
  // ranges: [{ start: '2025-01-15', end: '2025-01-20' }, ...] veya [{ start: Date, end: Date }, ...] - Tarih aralıkları
130
+
131
+ // Auto Select Enabled Range
132
+ autoSelectEnabledRange = false, // true = belirtilen range'lere tıklandığında otomatik olarak tüm range'i seç
133
+ autoSelectRanges = null, // [{ start: '2025-12-31', end: '2026-01-05' }, ...] - Auto-select için range'ler (disableDates'ten bağımsız)
134
+ // autoSelectRanges tanımlı olduğunda, tıklanan tarih bu range'lerden birinin içindeyse otomatik olarak tüm range seçilir
135
+ // autoSelectRanges: null ise ve disableDates mode: 'include' ise, disableDates.ranges kullanılır (geriye dönük uyumluluk)
130
136
  }) => {
131
137
  // ---------------------------------------------------------
132
138
  // 1) timelineData oluştur (dates, monthHeaders vs.)
@@ -152,6 +158,13 @@ const Timeline = ({
152
158
  // 2) local state
153
159
  // ---------------------------------------------------------
154
160
  const [collapsedGroups, setCollapsedGroups] = useState({});
161
+
162
+ // Internal zoom state - eğer setZoomLevel prop'u yoksa kullanılır
163
+ const [internalZoomLevel, setInternalZoomLevel] = useState(zoomLevel);
164
+
165
+ // Effective zoom level - prop varsa prop'u kullan, yoksa internal state'i kullan
166
+ const effectiveZoomLevel = setZoomLevel ? zoomLevel : internalZoomLevel;
167
+ const effectiveSetZoomLevel = setZoomLevel || setInternalZoomLevel;
155
168
 
156
169
  // Event Management
157
170
  const eventManagement = useEventManagement(
@@ -206,9 +219,17 @@ const Timeline = ({
206
219
  // Container genişliği = dayRange * cellWidth
207
220
  // ---------------------------------------------------------
208
221
  const baseCellWidth = 56.95; // Temel hücre genişliği (zoom = 1.0 için)
209
- const cellWidth = baseCellWidth * zoomLevel; // Zoom seviyesine göre hücre genişliği
222
+ const cellWidth = baseCellWidth * effectiveZoomLevel; // Zoom seviyesine göre hücre genişliği
210
223
  const containerWidth = dayRange * cellWidth;
211
224
 
225
+ // Internal zoom state'i prop'tan gelen zoomLevel ile senkronize et
226
+ useEffect(() => {
227
+ if (setZoomLevel) {
228
+ // Prop'tan gelen zoomLevel kullanılıyor, internal state'i güncelle
229
+ setInternalZoomLevel(zoomLevel);
230
+ }
231
+ }, [zoomLevel, setZoomLevel]);
232
+
212
233
  // ---------------------------------------------------------
213
234
  // 4) Touch Gestures (Mobil desteği)
214
235
  // ---------------------------------------------------------
@@ -321,11 +342,16 @@ const Timeline = ({
321
342
  };
322
343
 
323
344
  const handleToday = () => {
324
- const today = programDate ? new Date(programDate) : new Date();
325
- today.setDate(today.getDate() - 3); // Program tarihinden 3 gün öncesini ayarla
345
+ // Bugünün tarihini al
346
+ const today = new Date();
347
+ today.setDate(today.getDate() - 3); // Bugünden 3 gün öncesini ayarla
326
348
  setSelectedDate(today);
327
- // App.js'teki callback'i de çağır
328
- if (onToday) onToday();
349
+
350
+ // onToday callback'i bir fonksiyon ise çağır
351
+ // Eğer onToday bir string (tarih) ise veya başka bir değer ise, sadece setSelectedDate yeterli
352
+ if (typeof onToday === 'function') {
353
+ onToday();
354
+ }
329
355
  };
330
356
 
331
357
 
@@ -370,16 +396,16 @@ const Timeline = ({
370
396
  // 8.5) Zoom handlers
371
397
  // ---------------------------------------------------------
372
398
  const handleZoomIn = useCallback(() => {
373
- if (setZoomLevel && zoomOn) {
374
- setZoomLevel((prev) => Math.min(maxZoomLevel, prev + zoomStep));
399
+ if (zoomOn) {
400
+ effectiveSetZoomLevel((prev) => Math.min(maxZoomLevel, prev + zoomStep));
375
401
  }
376
- }, [setZoomLevel, zoomOn, maxZoomLevel, zoomStep]);
402
+ }, [zoomOn, maxZoomLevel, zoomStep, effectiveSetZoomLevel]);
377
403
 
378
404
  const handleZoomOut = useCallback(() => {
379
- if (setZoomLevel && zoomOn) {
380
- setZoomLevel((prev) => Math.max(minZoomLevel, prev - zoomStep));
405
+ if (zoomOn) {
406
+ effectiveSetZoomLevel((prev) => Math.max(minZoomLevel, prev - zoomStep));
381
407
  }
382
- }, [setZoomLevel, zoomOn, minZoomLevel, zoomStep]);
408
+ }, [zoomOn, minZoomLevel, zoomStep, effectiveSetZoomLevel]);
383
409
 
384
410
  // ---------------------------------------------------------
385
411
  // 8.6) Keyboard Shortcuts
@@ -437,8 +463,8 @@ const Timeline = ({
437
463
  onMonthRetreat={handleMonthRetreat}
438
464
  dayRange={dayRange}
439
465
  setDayRange={setDayRange}
440
- zoomLevel={zoomLevel}
441
- setZoomLevel={setZoomLevel}
466
+ zoomLevel={effectiveZoomLevel}
467
+ setZoomLevel={effectiveSetZoomLevel}
442
468
  zoomOn={zoomOn}
443
469
  minZoomLevel={minZoomLevel}
444
470
  maxZoomLevel={maxZoomLevel}
@@ -541,6 +567,8 @@ const Timeline = ({
541
567
  isLoading={isLoading}
542
568
  loadingType={loadingType}
543
569
  disableDates={disableDates}
570
+ autoSelectEnabledRange={autoSelectEnabledRange}
571
+ autoSelectRanges={autoSelectRanges}
544
572
 
545
573
  />
546
574
 
@@ -70,6 +70,10 @@ const TimelineContent = ({
70
70
 
71
71
  // Disable Dates
72
72
  disableDates = null, // { mode: 'exclude' | 'include', dates: [], ranges: [] }
73
+
74
+ // Auto Select Enabled Range
75
+ autoSelectEnabledRange = false, // true = belirtilen range'lere tıklandığında otomatik olarak tüm range'i seç
76
+ autoSelectRanges = null, // [{ start: '2025-12-31', end: '2026-01-05' }, ...] - Auto-select için range'ler (disableDates'ten bağımsız)
73
77
  }) => {
74
78
  // ------------------- HOOKS & STATE -------------------
75
79
  const containerRef = useRef(null);
@@ -304,7 +308,6 @@ const TimelineContent = ({
304
308
  if (!createNewEventOn) return;
305
309
  if (!isCreating) return;
306
310
  if (mode === "extend") {
307
- console.log(">>> 'extend' mode, skip new event creation");
308
311
  return;
309
312
  }
310
313
 
@@ -470,13 +473,10 @@ const TimelineContent = ({
470
473
 
471
474
  // ------------------- Drag Logic -------------------
472
475
  const handleDragStartSafe = (e, eventId) => {
473
- console.log("[TimelineContent] handleDragStartSafe called:", { eventId, eventsDragOn });
474
476
  if (!eventsDragOn) {
475
- console.log("[TimelineContent] Events drag is disabled, preventing drag start");
476
477
  e.preventDefault();
477
478
  return;
478
479
  }
479
- console.log("[TimelineContent] Calling handleDragStart...");
480
480
  handleDragStart(e, eventId);
481
481
  };
482
482
  const handleDragEndSafe = (e) => {
@@ -495,7 +495,6 @@ const TimelineContent = ({
495
495
  const handleMouseDownExtend = (mouseEvent, event) => {
496
496
  if (!eventsExtendOn) return;
497
497
  mouseEvent.stopPropagation();
498
- console.log(">>> Extend start ID:", event.id);
499
498
  setMode("extend");
500
499
  setExtendingEvent(event);
501
500
  setOriginalEndDate(event.endDate);
@@ -521,7 +520,6 @@ const TimelineContent = ({
521
520
  }, [mode, extendingEvent, eventsExtendOn, originalEndDate, startMouseX, setEvents]);
522
521
 
523
522
  const handleMouseUpExtend = useCallback(() => {
524
- console.log(">>> Extend finished ID:", extendingEvent?.id);
525
523
  if (onExtendInfo && extendingEvent) {
526
524
  // callback
527
525
  const updatedEvent = events.find((ev) => ev.id === extendingEvent.id);
@@ -682,15 +680,6 @@ const TimelineContent = ({
682
680
  const cellDateOnly = new Date(cellDate.getFullYear(), cellDate.getMonth(), cellDate.getDate());
683
681
  const preventPastEventsDateOnly = new Date(preventPastEventsDateObj.getFullYear(), preventPastEventsDateObj.getMonth(), preventPastEventsDateObj.getDate());
684
682
  isPastDate = cellDateOnly < preventPastEventsDateOnly;
685
- // Debug: İlk birkaç hücre için log
686
- if (colIndex < 3 && groupIndex === 0) {
687
- console.log('[TimelineContent] Past date check:', {
688
- cellDate: cellDateOnly.toISOString().split('T')[0],
689
- preventPastEventsDateValue: preventPastEventsDateOnly.toISOString().split('T')[0],
690
- isPastDate,
691
- preventPastEvents
692
- });
693
- }
694
683
  }
695
684
 
696
685
  // Disabled tarih kontrolü
@@ -817,7 +806,6 @@ const TimelineContent = ({
817
806
  e.preventDefault();
818
807
  return;
819
808
  }
820
- console.log("[TimelineContent] Event drag start:", event.id);
821
809
  handleDragStart(e, event.id);
822
810
  e.stopPropagation();
823
811
 
@@ -908,15 +896,6 @@ const TimelineContent = ({
908
896
  const cellDateOnly = new Date(cellDate.getFullYear(), cellDate.getMonth(), cellDate.getDate());
909
897
  const preventPastEventsDateOnly = new Date(preventPastEventsDateObj.getFullYear(), preventPastEventsDateObj.getMonth(), preventPastEventsDateObj.getDate());
910
898
  isPastDate = cellDateOnly < preventPastEventsDateOnly;
911
- // Debug: İlk birkaç hücre için log
912
- if (colIndex < 3 && rowIndex === 0 && groupIndex === 0) {
913
- console.log('[TimelineContent] Cell past date check:', {
914
- cellDate: cellDateOnly.toISOString().split('T')[0],
915
- preventPastEventsDateValue: preventPastEventsDateOnly.toISOString().split('T')[0],
916
- isPastDate,
917
- preventPastEvents
918
- });
919
- }
920
899
  }
921
900
 
922
901
  // Hafta sonu kontrolü
@@ -1004,7 +983,6 @@ const TimelineContent = ({
1004
983
  }
1005
984
  e.preventDefault();
1006
985
  e.stopPropagation();
1007
- console.log("[TimelineContent] onDragOver called for resource:", resource.id);
1008
986
  handleDragOver(e);
1009
987
  }}
1010
988
  onDrop={(e) => {
@@ -1016,8 +994,7 @@ const TimelineContent = ({
1016
994
  return false;
1017
995
  }
1018
996
  e.preventDefault();
1019
- e.stopPropagation();
1020
- console.log("[TimelineContent] onDrop called for resource:", resource.id, "date:", dateObj.fullDate);
997
+ e.stopPropagation();
1021
998
  handleDrop(e, resource.id, parseDate(dateObj.fullDate));
1022
999
  }}
1023
1000
  ></div>