akfatimeline 1.1.1 → 2.0.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 (36) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/Timeline.js +16 -48
  3. package/{src/components/Timeline/DailyView.js → dist/components/Timeline/DailyView.jsx} +1 -0
  4. package/{src/components/Timeline/EventTooltip.js → dist/components/Timeline/EventTooltip.jsx} +207 -206
  5. package/{src/components/Timeline/Indicator.js → dist/components/Timeline/Indicator.jsx} +27 -26
  6. package/{src/components/Timeline/MasterHeader.js → dist/components/Timeline/MasterHeader.jsx} +105 -104
  7. package/{src/components/Timeline/Resources.js → dist/components/Timeline/Resources.jsx} +54 -53
  8. package/{src/components/Timeline/ResourcesHeader.js → dist/components/Timeline/ResourcesHeader.jsx} +15 -14
  9. package/{src/components/Timeline/Timeline.js → dist/components/Timeline/Timeline.jsx} +572 -607
  10. package/{src/components/Timeline/TimelineContent.js → dist/components/Timeline/TimelineContent.jsx} +837 -838
  11. package/{src/components/Timeline/TimelineHeader.js → dist/components/Timeline/TimelineHeader.jsx} +55 -54
  12. package/dist/components/Timeline/TimelineMonthContainer.js +2 -2
  13. package/package.json +55 -4
  14. package/src/components/Timeline/AutocompleteSelect.jsx +150 -0
  15. package/src/components/Timeline/ContextMenu.jsx +149 -0
  16. package/src/components/Timeline/DailyView.jsx +256 -0
  17. package/src/components/Timeline/EventBadge.jsx +26 -0
  18. package/src/components/Timeline/EventDetailModal.jsx +138 -0
  19. package/src/components/Timeline/EventIcon.jsx +47 -0
  20. package/src/components/Timeline/EventTooltip.jsx +207 -0
  21. package/src/components/Timeline/Indicator.jsx +27 -0
  22. package/src/components/Timeline/LoadingSpinner.jsx +48 -0
  23. package/src/components/Timeline/MasterHeader.jsx +105 -0
  24. package/src/components/Timeline/Resources.jsx +54 -0
  25. package/src/components/Timeline/ResourcesHeader.jsx +15 -0
  26. package/src/components/Timeline/Timeline.jsx +572 -0
  27. package/src/components/Timeline/TimelineContent.jsx +837 -0
  28. package/src/components/Timeline/TimelineHeader.jsx +55 -0
  29. package/src/components/Timeline/TimelineMonthContainer.js +2 -2
  30. package/src/library.js +8 -8
  31. /package/{src/components/Timeline/AutocompleteSelect.js → dist/components/Timeline/AutocompleteSelect.jsx} +0 -0
  32. /package/{src/components/Timeline/ContextMenu.js → dist/components/Timeline/ContextMenu.jsx} +0 -0
  33. /package/{src/components/Timeline/EventBadge.js → dist/components/Timeline/EventBadge.jsx} +0 -0
  34. /package/{src/components/Timeline/EventDetailModal.js → dist/components/Timeline/EventDetailModal.jsx} +0 -0
  35. /package/{src/components/Timeline/EventIcon.js → dist/components/Timeline/EventIcon.jsx} +0 -0
  36. /package/{src/components/Timeline/LoadingSpinner.js → dist/components/Timeline/LoadingSpinner.jsx} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,6 +1,38 @@
1
1
  # Changelog
2
2
  Tüm önemli değişiklikler bu dosyada belgelenir.
3
3
 
4
+ ## [1.2.0] - 2025-01-XX
5
+
6
+ ### Changed
7
+ - **Package.json Export Yapısı İyileştirildi:**
8
+ - `main` ve `module` field'ları `src/library.js` olarak güncellendi
9
+ - Daha detaylı `exports` field'ı eklendi
10
+ - Her component için ayrı export path'leri eklendi:
11
+ - `akfatimeline/Timeline` - Ana Timeline component
12
+ - `akfatimeline/DailyView` - Daily View component
13
+ - `akfatimeline/ContextMenu` - Context Menu component
14
+ - `akfatimeline/EventDetailModal` - Event Detail Modal component
15
+ - `akfatimeline/EventIcon` - Event Icon component
16
+ - `akfatimeline/EventBadge` - Event Badge component
17
+ - `akfatimeline/LoadingSpinner` - Loading Spinner component
18
+ - `akfatimeline/AutocompleteSelect` - Autocomplete Select component
19
+ - CSS import için kısayol: `akfatimeline/css`
20
+ - **Import Kolaylığı:**
21
+ - Artık sadece `import Timeline from 'akfatimeline'` yeterli
22
+ - CSS için: `import 'akfatimeline/css'` veya `import 'akfatimeline/components/Timeline/Timeline.css'`
23
+ - Named exports: `import { DailyView, ContextMenu } from 'akfatimeline'`
24
+
25
+ ### Fixed
26
+ - Vite ve diğer modern bundler'larla uyumluluk sorunları düzeltildi
27
+ - ES module import sorunları çözüldü
28
+ - Default export sorunları giderildi
29
+
30
+ ## [1.1.1] - 2024-12-XX
31
+
32
+ ### Fixed
33
+ - Build sırasındaki orphan modules uyarıları giderildi
34
+ - Webpack config optimizasyonları
35
+
4
36
  ## [1.1.0] - 2024-12-XX
5
37
 
6
38
  ### Added
package/dist/Timeline.js CHANGED
@@ -3015,7 +3015,7 @@ var update = injectStylesIntoStyleTag_default()(Timeline/* default */.A, options
3015
3015
 
3016
3016
  /* harmony default export */ const Timeline_Timeline = (Timeline/* default */.A && Timeline/* default */.A.locals ? Timeline/* default */.A.locals : undefined);
3017
3017
 
3018
- ;// ./src/components/Timeline/MasterHeader.js
3018
+ ;// ./src/components/Timeline/MasterHeader.jsx
3019
3019
 
3020
3020
 
3021
3021
  const MasterHeader = _ref => {
@@ -3098,8 +3098,8 @@ const MasterHeader = _ref => {
3098
3098
  }, "+")));
3099
3099
  };
3100
3100
  /* harmony default export */ const Timeline_MasterHeader = (MasterHeader);
3101
- ;// ./src/components/Timeline/ResourcesHeader.js
3102
- // ResourcesHeader.js
3101
+ ;// ./src/components/Timeline/ResourcesHeader.jsx
3102
+ // ResourcesHeader.jsx
3103
3103
 
3104
3104
 
3105
3105
  const ResourcesHeader = _ref => {
@@ -3111,7 +3111,7 @@ const ResourcesHeader = _ref => {
3111
3111
  }, content);
3112
3112
  };
3113
3113
  /* harmony default export */ const Timeline_ResourcesHeader = (ResourcesHeader);
3114
- ;// ./src/components/Timeline/Resources.js
3114
+ ;// ./src/components/Timeline/Resources.jsx
3115
3115
 
3116
3116
  const Resources = _ref => {
3117
3117
  let {
@@ -3192,7 +3192,7 @@ const isDateInRange = (date, startDate, endDate) => {
3192
3192
  const end = parseDate(endDate);
3193
3193
  return d >= start && d <= end;
3194
3194
  };
3195
- ;// ./src/components/Timeline/TimelineHeader.js
3195
+ ;// ./src/components/Timeline/TimelineHeader.jsx
3196
3196
 
3197
3197
  // CSS dosyasını import etmeyi unutma
3198
3198
 
@@ -3413,7 +3413,7 @@ const useEventDragDrop = (events, setEvents, setDropInfo) => {
3413
3413
  };
3414
3414
  };
3415
3415
  /* harmony default export */ const hooks_useEventDragDrop = (useEventDragDrop);
3416
- ;// ./src/components/Timeline/Indicator.js
3416
+ ;// ./src/components/Timeline/Indicator.jsx
3417
3417
 
3418
3418
  const Indicator = _ref => {
3419
3419
  let {
@@ -3442,7 +3442,7 @@ const Indicator = _ref => {
3442
3442
  });
3443
3443
  };
3444
3444
  /* harmony default export */ const Timeline_Indicator = (Indicator);
3445
- ;// ./src/components/Timeline/EventIcon.js
3445
+ ;// ./src/components/Timeline/EventIcon.jsx
3446
3446
 
3447
3447
 
3448
3448
 
@@ -3498,7 +3498,7 @@ const EventIcon = _ref => {
3498
3498
  }, iconContent);
3499
3499
  };
3500
3500
  /* harmony default export */ const Timeline_EventIcon = (EventIcon);
3501
- ;// ./src/components/Timeline/EventBadge.js
3501
+ ;// ./src/components/Timeline/EventBadge.jsx
3502
3502
 
3503
3503
 
3504
3504
 
@@ -3522,7 +3522,7 @@ const EventBadge = _ref => {
3522
3522
  }, text);
3523
3523
  };
3524
3524
  /* harmony default export */ const Timeline_EventBadge = (EventBadge);
3525
- ;// ./src/components/Timeline/ContextMenu.js
3525
+ ;// ./src/components/Timeline/ContextMenu.jsx
3526
3526
 
3527
3527
 
3528
3528
 
@@ -3658,7 +3658,7 @@ const ContextMenu = _ref => {
3658
3658
  })));
3659
3659
  };
3660
3660
  /* harmony default export */ const Timeline_ContextMenu = (ContextMenu);
3661
- ;// ./src/components/Timeline/TimelineContent.js
3661
+ ;// ./src/components/Timeline/TimelineContent.jsx
3662
3662
  function TimelineContent_ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3663
3663
  function TimelineContent_objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? TimelineContent_ownKeys(Object(t), !0).forEach(function (r) { TimelineContent_defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : TimelineContent_ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3664
3664
  function TimelineContent_defineProperty(e, r, t) { return (r = TimelineContent_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
@@ -3973,7 +3973,7 @@ const TimelineContent = _ref => {
3973
3973
  window.removeEventListener("mousemove", handleMouseMove);
3974
3974
  window.removeEventListener("mouseup", handleMouseUp);
3975
3975
  };
3976
- }, [createNewEventOn, isCreating, mode, tempEvent, events, onCreateEventInfo, setEvents]);
3976
+ }, [createNewEventOn, isCreating, mode, tempEvent, events, onCreateEventInfo, setEvents, totalDays, dates, preventPastEvents, minDate]);
3977
3977
 
3978
3978
  // ------------------- Drag Logic -------------------
3979
3979
  const handleDragStartSafe = (e, eventId) => {
@@ -4402,8 +4402,8 @@ const TimelineContent = _ref => {
4402
4402
  })));
4403
4403
  };
4404
4404
  /* harmony default export */ const Timeline_TimelineContent = (TimelineContent);
4405
- ;// ./src/components/Timeline/EventTooltip.js
4406
- // src/components/Timeline/EventTooltip.js
4405
+ ;// ./src/components/Timeline/EventTooltip.jsx
4406
+ // src/components/Timeline/EventTooltip.jsx
4407
4407
 
4408
4408
  const EventTooltip = _ref => {
4409
4409
  let {
@@ -4571,7 +4571,7 @@ const EventTooltip = _ref => {
4571
4571
  }, "\uD83D\uDDD1\uFE0F"), "Sil")));
4572
4572
  };
4573
4573
  /* harmony default export */ const Timeline_EventTooltip = (EventTooltip);
4574
- ;// ./src/components/Timeline/EventDetailModal.js
4574
+ ;// ./src/components/Timeline/EventDetailModal.jsx
4575
4575
  function EventDetailModal_ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4576
4576
  function EventDetailModal_objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? EventDetailModal_ownKeys(Object(t), !0).forEach(function (r) { EventDetailModal_defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : EventDetailModal_ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4577
4577
  function EventDetailModal_defineProperty(e, r, t) { return (r = EventDetailModal_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
@@ -4694,7 +4694,7 @@ const EventDetailModal = _ref => {
4694
4694
  }, "Kaydet"))))));
4695
4695
  };
4696
4696
  /* harmony default export */ const Timeline_EventDetailModal = (EventDetailModal);
4697
- ;// ./src/components/Timeline/DailyView.js
4697
+ ;// ./src/components/Timeline/DailyView.jsx
4698
4698
  function DailyView_ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4699
4699
  function DailyView_objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? DailyView_ownKeys(Object(t), !0).forEach(function (r) { DailyView_defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : DailyView_ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4700
4700
  function DailyView_defineProperty(e, r, t) { return (r = DailyView_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
@@ -5322,7 +5322,7 @@ const useEventManagement = function () {
5322
5322
  };
5323
5323
  };
5324
5324
  /* harmony default export */ const hooks_useEventManagement = (useEventManagement);
5325
- ;// ./src/components/Timeline/Timeline.js
5325
+ ;// ./src/components/Timeline/Timeline.jsx
5326
5326
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
5327
5327
  function Timeline_ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5328
5328
  function Timeline_objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? Timeline_ownKeys(Object(t), !0).forEach(function (r) { Timeline_defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : Timeline_ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -5868,38 +5868,6 @@ const Timeline_Timeline_Timeline = _ref => {
5868
5868
  }
5869
5869
  },
5870
5870
  themeType: themeType
5871
- }), dailyViewOn && /*#__PURE__*/external_react_default().createElement(Timeline_DailyView, {
5872
- isOpen: dailyView.isOpen,
5873
- onClose: () => setDailyView({
5874
- isOpen: false,
5875
- resource: null,
5876
- date: null
5877
- }),
5878
- resource: dailyView.resource,
5879
- date: dailyView.date,
5880
- events: localEvents,
5881
- onEventCreate: newEvent => {
5882
- const updatedEvents = [...localEvents, newEvent];
5883
- setLocalEvents(updatedEvents);
5884
- if (onEventUpdate) {
5885
- onEventUpdate(updatedEvents);
5886
- }
5887
- },
5888
- onEventUpdate: updatedEvent => {
5889
- const updatedEvents = localEvents.map(e => e.id === updatedEvent.id ? updatedEvent : e);
5890
- setLocalEvents(updatedEvents);
5891
- if (onEventUpdate) {
5892
- onEventUpdate(updatedEvents);
5893
- }
5894
- },
5895
- onEventDelete: eventId => {
5896
- const updatedEvents = localEvents.filter(e => e.id !== eventId);
5897
- setLocalEvents(updatedEvents);
5898
- if (onEventUpdate) {
5899
- onEventUpdate(updatedEvents);
5900
- }
5901
- },
5902
- themeType: themeType
5903
5871
  }));
5904
5872
  };
5905
5873
  /* harmony default export */ const components_Timeline_Timeline = (Timeline_Timeline_Timeline);
@@ -253,3 +253,4 @@ const DailyView = ({
253
253
  };
254
254
 
255
255
  export default DailyView;
256
+
@@ -1,206 +1,207 @@
1
- // src/components/Timeline/EventTooltip.js
2
- import React from "react";
3
-
4
- const EventTooltip = ({ event, position = { top: 0, left: 0 }, onClose, onEdit, onDelete }) => {
5
- if (!event) return null;
6
-
7
- const { top, left } = position;
8
-
9
- // Rezervasyon durumuna göre renk belirleme
10
- const getStatusColor = (status) => {
11
- switch (status) {
12
- case "Confirmed":
13
- return "#4caf50"; // Yeşil
14
- case "Pending":
15
- return "#ff9800"; // Turuncu
16
- case "Cancelled":
17
- return "#f44336"; // Kırmızı
18
- case "Completed":
19
- return "#2196f3"; // Mavi
20
- default:
21
- return "#9e9e9e"; // Gri
22
- }
23
- };
24
-
25
- const statusColor = getStatusColor(event.status);
26
-
27
- return (
28
- <div
29
- style={{
30
- position: "absolute",
31
- top: top - 200, // Tooltip'in biraz yukarıda görünmesi için
32
- left: left + 70,
33
- transform: "translateX(-50%)",
34
- backgroundColor: "#ffffff",
35
- color: "#333333",
36
- borderRadius: "10px",
37
- boxShadow: "0 8px 16px rgba(0, 0, 0, 0.2)",
38
- fontSize: "16px",
39
- zIndex: 1000,
40
- pointerEvents: "auto", // Tooltip'in tıklanabilir olmasını sağlar
41
- whiteSpace: "normal",
42
- maxWidth: "400px",
43
- width: "100%",
44
- transition: "opacity 0.3s ease, transform 0.3s ease",
45
- }}
46
- >
47
- {/* Kapatma Butonu */}
48
- {onClose && (
49
- <button
50
- onClick={onClose}
51
- style={{
52
- position: "absolute",
53
- top: "10px",
54
- right: "15px",
55
- background: "transparent",
56
- border: "none",
57
- color: "#aaa",
58
- fontSize: "24px",
59
- cursor: "pointer",
60
- transition: "color 0.2s",
61
- }}
62
- aria-label="Kapat"
63
- onMouseOver={(e) => (e.target.style.color = "#000")}
64
- onMouseOut={(e) => (e.target.style.color = "#aaa")}
65
- >
66
- &times;
67
- </button>
68
- )}
69
-
70
- {/* Header */}
71
- <div
72
- style={{
73
- backgroundColor: statusColor,
74
- color: "#ffffff",
75
- padding: "15px 20px",
76
- borderTopLeftRadius: "10px",
77
- borderTopRightRadius: "10px",
78
- display: "flex",
79
- flexDirection: "column",
80
- gap: "5px",
81
- }}
82
- >
83
- <div style={{ fontWeight: "bold", fontSize: "18px" }}>{event.title}</div>
84
- <div style={{ fontSize: "14px" }}>Rezervasyon ID: {event.reservationId}</div>
85
- </div>
86
-
87
- {/* İçerik */}
88
- <div style={{ padding: "20px", display: "flex", flexDirection: "column", gap: "15px" }}>
89
- {/* Misafirler */}
90
- {Array.isArray(event.guestNames) && (
91
- <div>
92
- <strong>Misafirler:</strong> {event.guestNames.join(", ")}
93
- </div>
94
- )}
95
-
96
- {/* Giriş ve Çıkış Tarihleri */}
97
- <div style={{ display: "flex", justifyContent: "space-between", marginBottom: "10px" }}>
98
- <div>
99
- <strong>Giriş:</strong> {new Date(event.startDate).toLocaleDateString()}
100
- </div>
101
- <div>
102
- <strong>Çıkış:</strong> {new Date(event.endDate).toLocaleDateString()}
103
- </div>
104
- </div>
105
-
106
- {/* Ödeme Bilgileri */}
107
- {(event.totalAmount !== undefined || event.amountPaid !== undefined) && (
108
- <div style={{ display: "flex", justifyContent: "space-between", marginBottom: "10px" }}>
109
- {event.amountPaid !== undefined && (
110
- <div>
111
- <strong>Ödenen Miktar:</strong> ${event.amountPaid.toFixed(2)}
112
- </div>
113
- )}
114
- {event.totalAmount !== undefined && (
115
- <div>
116
- <strong>Toplam Borç:</strong> ${event.totalAmount.toFixed(2)}
117
- </div>
118
- )}
119
- </div>
120
- )}
121
-
122
- {/* Rezervasyon Durumu */}
123
- {event.status && (
124
- <div>
125
- <strong>Durum:</strong> {event.status}
126
- </div>
127
- )}
128
-
129
- {/* Rezervasyon Notu */}
130
- {event.note && (
131
- <div>
132
- <strong>Not:</strong> {event.note}
133
- </div>
134
- )}
135
- </div>
136
-
137
-
138
- {/* Footer */}
139
- <div
140
- style={{
141
- padding: "15px 20px",
142
- borderTop: "1px solid #ddd",
143
- display: "flex",
144
- justifyContent: "flex-end",
145
- gap: "10px",
146
- borderBottomLeftRadius: "10px",
147
- borderBottomRightRadius: "10px",
148
- }}
149
- >
150
- {/* Düzenle Butonu */}
151
- {onEdit && (
152
- <button
153
- onClick={() => onEdit(event)}
154
- style={{
155
- padding: "8px 16px",
156
- backgroundColor: "#2196f3",
157
- color: "#ffffff",
158
- border: "none",
159
- borderRadius: "4px",
160
- cursor: "pointer",
161
- fontSize: "14px",
162
- display: "flex",
163
- alignItems: "center",
164
- gap: "5px",
165
- transition: "background-color 0.2s",
166
- }}
167
- onMouseOver={(e) => (e.target.style.backgroundColor = "#1976d2")}
168
- onMouseOut={(e) => (e.target.style.backgroundColor = "#2196f3")}
169
- >
170
- {/* Düzenle İkonu */}
171
- <span role="img" aria-label="Düzenle">✏️</span>
172
- Düzenle
173
- </button>
174
- )}
175
-
176
- {/* Sil Butonu */}
177
- {onDelete && (
178
- <button
179
- onClick={() => onDelete(event.id)}
180
- style={{
181
- padding: "8px 16px",
182
- backgroundColor: "#f44336",
183
- color: "#ffffff",
184
- border: "none",
185
- borderRadius: "4px",
186
- cursor: "pointer",
187
- fontSize: "14px",
188
- display: "flex",
189
- alignItems: "center",
190
- gap: "5px",
191
- transition: "background-color 0.2s",
192
- }}
193
- onMouseOver={(e) => (e.target.style.backgroundColor = "#d32f2f")}
194
- onMouseOut={(e) => (e.target.style.backgroundColor = "#f44336")}
195
- >
196
- {/* Sil İkonu */}
197
- <span role="img" aria-label="Sil">🗑️</span>
198
- Sil
199
- </button>
200
- )}
201
- </div>
202
- </div>
203
- );
204
- };
205
-
206
- export default EventTooltip;
1
+ // src/components/Timeline/EventTooltip.jsx
2
+ import React from "react";
3
+
4
+ const EventTooltip = ({ event, position = { top: 0, left: 0 }, onClose, onEdit, onDelete }) => {
5
+ if (!event) return null;
6
+
7
+ const { top, left } = position;
8
+
9
+ // Rezervasyon durumuna göre renk belirleme
10
+ const getStatusColor = (status) => {
11
+ switch (status) {
12
+ case "Confirmed":
13
+ return "#4caf50"; // Yeşil
14
+ case "Pending":
15
+ return "#ff9800"; // Turuncu
16
+ case "Cancelled":
17
+ return "#f44336"; // Kırmızı
18
+ case "Completed":
19
+ return "#2196f3"; // Mavi
20
+ default:
21
+ return "#9e9e9e"; // Gri
22
+ }
23
+ };
24
+
25
+ const statusColor = getStatusColor(event.status);
26
+
27
+ return (
28
+ <div
29
+ style={{
30
+ position: "absolute",
31
+ top: top - 200, // Tooltip'in biraz yukarıda görünmesi için
32
+ left: left + 70,
33
+ transform: "translateX(-50%)",
34
+ backgroundColor: "#ffffff",
35
+ color: "#333333",
36
+ borderRadius: "10px",
37
+ boxShadow: "0 8px 16px rgba(0, 0, 0, 0.2)",
38
+ fontSize: "16px",
39
+ zIndex: 1000,
40
+ pointerEvents: "auto", // Tooltip'in tıklanabilir olmasını sağlar
41
+ whiteSpace: "normal",
42
+ maxWidth: "400px",
43
+ width: "100%",
44
+ transition: "opacity 0.3s ease, transform 0.3s ease",
45
+ }}
46
+ >
47
+ {/* Kapatma Butonu */}
48
+ {onClose && (
49
+ <button
50
+ onClick={onClose}
51
+ style={{
52
+ position: "absolute",
53
+ top: "10px",
54
+ right: "15px",
55
+ background: "transparent",
56
+ border: "none",
57
+ color: "#aaa",
58
+ fontSize: "24px",
59
+ cursor: "pointer",
60
+ transition: "color 0.2s",
61
+ }}
62
+ aria-label="Kapat"
63
+ onMouseOver={(e) => (e.target.style.color = "#000")}
64
+ onMouseOut={(e) => (e.target.style.color = "#aaa")}
65
+ >
66
+ &times;
67
+ </button>
68
+ )}
69
+
70
+ {/* Header */}
71
+ <div
72
+ style={{
73
+ backgroundColor: statusColor,
74
+ color: "#ffffff",
75
+ padding: "15px 20px",
76
+ borderTopLeftRadius: "10px",
77
+ borderTopRightRadius: "10px",
78
+ display: "flex",
79
+ flexDirection: "column",
80
+ gap: "5px",
81
+ }}
82
+ >
83
+ <div style={{ fontWeight: "bold", fontSize: "18px" }}>{event.title}</div>
84
+ <div style={{ fontSize: "14px" }}>Rezervasyon ID: {event.reservationId}</div>
85
+ </div>
86
+
87
+ {/* İçerik */}
88
+ <div style={{ padding: "20px", display: "flex", flexDirection: "column", gap: "15px" }}>
89
+ {/* Misafirler */}
90
+ {Array.isArray(event.guestNames) && (
91
+ <div>
92
+ <strong>Misafirler:</strong> {event.guestNames.join(", ")}
93
+ </div>
94
+ )}
95
+
96
+ {/* Giriş ve Çıkış Tarihleri */}
97
+ <div style={{ display: "flex", justifyContent: "space-between", marginBottom: "10px" }}>
98
+ <div>
99
+ <strong>Giriş:</strong> {new Date(event.startDate).toLocaleDateString()}
100
+ </div>
101
+ <div>
102
+ <strong>Çıkış:</strong> {new Date(event.endDate).toLocaleDateString()}
103
+ </div>
104
+ </div>
105
+
106
+ {/* Ödeme Bilgileri */}
107
+ {(event.totalAmount !== undefined || event.amountPaid !== undefined) && (
108
+ <div style={{ display: "flex", justifyContent: "space-between", marginBottom: "10px" }}>
109
+ {event.amountPaid !== undefined && (
110
+ <div>
111
+ <strong>Ödenen Miktar:</strong> ${event.amountPaid.toFixed(2)}
112
+ </div>
113
+ )}
114
+ {event.totalAmount !== undefined && (
115
+ <div>
116
+ <strong>Toplam Borç:</strong> ${event.totalAmount.toFixed(2)}
117
+ </div>
118
+ )}
119
+ </div>
120
+ )}
121
+
122
+ {/* Rezervasyon Durumu */}
123
+ {event.status && (
124
+ <div>
125
+ <strong>Durum:</strong> {event.status}
126
+ </div>
127
+ )}
128
+
129
+ {/* Rezervasyon Notu */}
130
+ {event.note && (
131
+ <div>
132
+ <strong>Not:</strong> {event.note}
133
+ </div>
134
+ )}
135
+ </div>
136
+
137
+
138
+ {/* Footer */}
139
+ <div
140
+ style={{
141
+ padding: "15px 20px",
142
+ borderTop: "1px solid #ddd",
143
+ display: "flex",
144
+ justifyContent: "flex-end",
145
+ gap: "10px",
146
+ borderBottomLeftRadius: "10px",
147
+ borderBottomRightRadius: "10px",
148
+ }}
149
+ >
150
+ {/* Düzenle Butonu */}
151
+ {onEdit && (
152
+ <button
153
+ onClick={() => onEdit(event)}
154
+ style={{
155
+ padding: "8px 16px",
156
+ backgroundColor: "#2196f3",
157
+ color: "#ffffff",
158
+ border: "none",
159
+ borderRadius: "4px",
160
+ cursor: "pointer",
161
+ fontSize: "14px",
162
+ display: "flex",
163
+ alignItems: "center",
164
+ gap: "5px",
165
+ transition: "background-color 0.2s",
166
+ }}
167
+ onMouseOver={(e) => (e.target.style.backgroundColor = "#1976d2")}
168
+ onMouseOut={(e) => (e.target.style.backgroundColor = "#2196f3")}
169
+ >
170
+ {/* Düzenle İkonu */}
171
+ <span role="img" aria-label="Düzenle">✏️</span>
172
+ Düzenle
173
+ </button>
174
+ )}
175
+
176
+ {/* Sil Butonu */}
177
+ {onDelete && (
178
+ <button
179
+ onClick={() => onDelete(event.id)}
180
+ style={{
181
+ padding: "8px 16px",
182
+ backgroundColor: "#f44336",
183
+ color: "#ffffff",
184
+ border: "none",
185
+ borderRadius: "4px",
186
+ cursor: "pointer",
187
+ fontSize: "14px",
188
+ display: "flex",
189
+ alignItems: "center",
190
+ gap: "5px",
191
+ transition: "background-color 0.2s",
192
+ }}
193
+ onMouseOver={(e) => (e.target.style.backgroundColor = "#d32f2f")}
194
+ onMouseOut={(e) => (e.target.style.backgroundColor = "#f44336")}
195
+ >
196
+ {/* Sil İkonu */}
197
+ <span role="img" aria-label="Sil">🗑️</span>
198
+ Sil
199
+ </button>
200
+ )}
201
+ </div>
202
+ </div>
203
+ );
204
+ };
205
+
206
+ export default EventTooltip;
207
+