react-weekly-planning 1.0.28 → 1.0.30

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 (55) hide show
  1. package/README.md +3 -1
  2. package/__tests__/page.test.js +106 -46
  3. package/__tests__/page.test.tsx +117 -45
  4. package/babel.config.js +1 -0
  5. package/components/AddTask/index.js +17 -0
  6. package/components/AddTask/index.tsx +43 -0
  7. package/components/CalendarForWeek.js +50 -0
  8. package/components/CalendarForWeek.tsx +229 -0
  9. package/components/CalendarForday.js +34 -0
  10. package/components/CalendarForday.tsx +130 -0
  11. package/components/DayContainer/index.js +15 -0
  12. package/components/DayContainer/index.tsx +36 -0
  13. package/components/GroupContainer/index.js +15 -0
  14. package/components/GroupContainer/index.tsx +42 -0
  15. package/components/GroupsHeadContainer/index.js +9 -0
  16. package/components/GroupsHeadContainer/index.tsx +19 -0
  17. package/components/SumHoursContainer/index.js +15 -0
  18. package/components/SumHoursContainer/index.tsx +38 -0
  19. package/components/SumHoursHead/index.js +9 -0
  20. package/components/SumHoursHead/index.tsx +22 -0
  21. package/components/TaskContainer/index.js +35 -0
  22. package/components/TaskContainer/index.tsx +86 -0
  23. package/components/TaskList/index.js +5 -0
  24. package/components/TaskList/index.tsx +20 -0
  25. package/contexts/CalendarContext.js +12 -12
  26. package/contexts/CalendarContext.tsx +4 -0
  27. package/definitions/index.js +1 -1
  28. package/definitions/index.ts +668 -7
  29. package/docs/global.html +4982 -4982
  30. package/docs/index.html +474 -474
  31. package/docs/index.ts.html +121 -121
  32. package/docs/scripts/linenumber.js +26 -26
  33. package/docs/scripts/search.js +38 -38
  34. package/docs/styles/iframe.css +12 -12
  35. package/docs/styles/prettify-jsdoc.css +111 -111
  36. package/docs/styles/prettify-tomorrow.css +132 -132
  37. package/docs/styles/reset.css +44 -44
  38. package/hooks/useCalendarDateState.js +19 -0
  39. package/hooks/useCalendarDateState.ts +44 -0
  40. package/index.js +70 -248
  41. package/index.tsx +59 -605
  42. package/jest.config.js +9 -9
  43. package/lib/slyles.js +21 -0
  44. package/lib/slyles.ts +25 -0
  45. package/lib/utils.js +619 -490
  46. package/lib/utils.ts +687 -383
  47. package/out/index.html +128 -128
  48. package/out/scripts/linenumber.js +26 -26
  49. package/out/scripts/search.js +38 -38
  50. package/out/styles/iframe.css +12 -12
  51. package/out/styles/prettify-jsdoc.css +111 -111
  52. package/out/styles/prettify-tomorrow.css +132 -132
  53. package/out/styles/reset.css +44 -44
  54. package/package.json +81 -71
  55. package/style.css +26 -4
package/lib/utils.js CHANGED
@@ -1,490 +1,619 @@
1
- var __rest = (this && this.__rest) || function (s, e) {
2
- var t = {};
3
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
- t[p] = s[p];
5
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
- t[p[i]] = s[p[i]];
9
- }
10
- return t;
11
- };
12
- import moment from "moment";
13
- // Obtenir la date actuelle
14
- const currentDate = new Date();
15
- // Obtenir le jour de la semaine (dimanche = 0, lundi = 1, ..., samedi = 6)
16
- const currentDayOfWeek = currentDate.getDay();
17
- // Calculer la date de début de la semaine en millisecondes
18
- const startDate = new Date(currentDate);
19
- startDate.setDate(startDate.getDate() - currentDayOfWeek);
20
- startDate.setHours(0, 0, 0, 0);
21
- const startDateMilliseconds = startDate.getTime();
22
- // Calculer la date de fin de la semaine en millisecondes
23
- const endDate = new Date(currentDate);
24
- endDate.setDate(endDate.getDate() + (6 - currentDayOfWeek));
25
- endDate.setHours(23, 59, 59, 999);
26
- const endDateMilliseconds = endDate.getTime();
27
- function getDayHourly(weekOffset) {
28
- const dailyHours = [];
29
- let dayOffset = weekOffset;
30
- if (currentDate.getDay() === 0) {
31
- dayOffset = dayOffset - 7;
32
- }
33
- // Boucle pour calculer les heures de début et de fin de chaque jour de la semaine
34
- for (let i = 0; i < 7; i++) {
35
- const dayDate = new Date(startDate);
36
- dayDate.setDate(startDate.getDate() + i);
37
- const dayStart = new Date(dayDate);
38
- dayStart.setHours(1, 0, 0, 0);
39
- const dayEnd = new Date(dayDate);
40
- dayEnd.setHours(23, 59, 59, 59);
41
- dailyHours.push({
42
- positionDay: i,
43
- day: new Date(dayStart.getTime() + dayOffset * 86400000),
44
- start: dayStart.getTime() + dayOffset * 86400000,
45
- end: dayEnd.getTime() + dayOffset * 86400000,
46
- });
47
- }
48
- return dailyHours;
49
- }
50
- // Tableau pour stocker les heures de début et de fin de chaque jour de la semaine
51
- function millisecondsToDate(milliseconds) {
52
- const date = new Date(milliseconds);
53
- // Récupération du jour de la semaine
54
- const daysOfWeek = ["Mon", "Tues", "Wed", "Thur", "Frid", "Sat", "Sun"];
55
- const dayOfWeek = daysOfWeek[date.getDay()];
56
- // Récupération de l'heure
57
- let hours = date.getHours();
58
- // Conversion de l'heure au format 12 heures
59
- // hours = hours % 12 || 12;
60
- // Récupération des minutes
61
- const minutes = date.getMinutes();
62
- // Construction de la date au format souhaité
63
- const formattedDate = `${hours.toString().padStart(2, "0")}h:${minutes
64
- .toString()
65
- .padStart(2, "0")}`;
66
- return { formattedDate, dayOfWeek };
67
- }
68
- function millisecondsToInt(milliseconds) {
69
- const date = new Date(milliseconds);
70
- // Récupération du jour de la semaine
71
- const daysOfWeek = [
72
- "Dimanche",
73
- "Lundi",
74
- "Mardi",
75
- "Mercredi",
76
- "Jeudi",
77
- "Vendredi",
78
- "Samedi",
79
- ];
80
- const dayOfWeek = daysOfWeek[date.getDay()];
81
- // Récupération du jour du mois
82
- const dayOfMonth = date.getDate();
83
- // Récupération du mois
84
- const months = [
85
- "janvier",
86
- "février",
87
- "mars",
88
- "avril",
89
- "mai",
90
- "juin",
91
- "juillet",
92
- "août",
93
- "septembre",
94
- "octobre",
95
- "novembre",
96
- "décembre",
97
- ];
98
- const month = months[date.getMonth()];
99
- // Récupération de l'heure
100
- let hours = date.getHours();
101
- const amOrPm = hours >= 12 ? " pm" : " am";
102
- // Conversion de l'heure au format 12 heures
103
- // hours = hours % 12 || 12;
104
- // Récupération des minutes
105
- const minutes = date.getMinutes();
106
- // Construction de la date au format souhaité
107
- const formattedDate = hours.toString().padStart(2, "0");
108
- return { formattedDate, dayOfWeek };
109
- }
110
- function getWeekDays(jump) {
111
- const days = ["Sun", "Mon", "Tues", "Wed", "Thur", "Frid", "Sat"];
112
- const month = [
113
- "Jan",
114
- "Fev",
115
- "Mar",
116
- "Avr",
117
- "Mai",
118
- "Jui",
119
- "Juil",
120
- "Aôu",
121
- "Sept",
122
- "Oct",
123
- "Nov",
124
- "Dec",
125
- ];
126
- const currentDate = new Date();
127
- const currentDayOfWeek = currentDate.getDay(); // Récupérer le jour de la semaine (0 pour dimanche, 1 pour lundi, etc.)
128
- let weekDays = [];
129
- for (let i = 0; i < 7; i++) {
130
- const day = new Date();
131
- const diff = i - currentDayOfWeek;
132
- if (currentDayOfWeek === 0) {
133
- day.setDate(currentDate.getDate() + diff + jump - 7);
134
- }
135
- else {
136
- day.setDate(currentDate.getDate() + diff + jump);
137
- }
138
- const formattedDay = `${days[day.getDay()]}. ${day.getDate()}, ${month[day.getMonth()]} ${day.getFullYear()}`;
139
- weekDays.push({
140
- day: days[day.getDay()],
141
- dayMonth: month[day.getMonth()],
142
- dayYear: day.getFullYear(),
143
- dayOfTheMonth: day.getDate(),
144
- });
145
- }
146
- return weekDays;
147
- }
148
- function getCalandarDays(jump) {
149
- const days = ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"];
150
- const month = [
151
- "Jan",
152
- "Fev",
153
- "Mar",
154
- "Avr",
155
- "Mai",
156
- "Jui",
157
- "Juil",
158
- "Aôu",
159
- "Sept",
160
- "Oct",
161
- "Nov",
162
- "Dec",
163
- ];
164
- const currentDate = new Date();
165
- const currentDayOfWeek = currentDate.getDay(); // Récupérer le jour de la semaine (0 pour dimanche, 1 pour lundi, etc.)
166
- let weekDays = [];
167
- for (let i = 0; i < 7; i++) {
168
- const day = new Date();
169
- const diff = i - currentDayOfWeek;
170
- day.setDate(currentDate.getDate() + diff + jump);
171
- const formattedDay = day;
172
- weekDays.push(formattedDay);
173
- }
174
- return weekDays;
175
- }
176
- function getWeekMonthAndYear(jump) {
177
- const days = ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"];
178
- const currentDate = new Date();
179
- const currentDayOfWeek = currentDate.getDay(); // Récupérer le jour de la semaine (0 pour dimanche, 1 pour lundi, etc.)
180
- let weekMonthYear = [];
181
- for (let i = 0; i < 7; i++) {
182
- const day = new Date();
183
- const diff = i - currentDayOfWeek;
184
- day.setDate(currentDate.getDate() + diff + jump);
185
- const formattedDay = `${days[day.getMonth()]} - ${day.getFullYear()}`;
186
- weekMonthYear.push(formattedDay);
187
- }
188
- return weekMonthYear;
189
- }
190
- function displayDayOnModalLeft(jump) {
191
- const currentDate = new Date();
192
- const currentDayOfWeek = currentDate.getDay(); // Récupérer le jour de la semaine (0 pour dimanche, 1 pour lundi, etc.)
193
- let dayModal = [];
194
- for (let i = 0; i < 7; i++) {
195
- const day = new Date();
196
- const diff = i - currentDayOfWeek;
197
- day.setDate(currentDate.getDate() + diff + jump);
198
- dayModal.push(day);
199
- }
200
- return dayModal;
201
- }
202
- function getWeeksListUpdate(annee) {
203
- // Créer un objet Date pour le premier jour de l'année
204
- const premierJour = new Date(annee, 0, 1);
205
- // Créer un tableau vide pour stocker les semaines
206
- const weeksList = [];
207
- // Créer des tableaux pour les jours de la semaine et les mois
208
- const daysOfWeek = ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"];
209
- const months = [
210
- "Jan",
211
- "Fev",
212
- "Mar",
213
- "Avr",
214
- "Mai",
215
- "Jui",
216
- "Juil",
217
- "Aôu",
218
- "Sept",
219
- "Oct",
220
- "Nov",
221
- "Dec",
222
- ];
223
- // Obtenir le nombre de semaines dans l'année
224
- const nombreSemaines = moment().year(annee).weeksInYear();
225
- // Faire une boucle sur les semaines
226
- for (let i = 0; i < nombreSemaines; i++) {
227
- // Calculer le début et la fin de la semaine en ajoutant le nombre de jours correspondant
228
- const weekStart = new Date(annee, 0, 1 + i * 7 - premierJour.getDay());
229
- const weekEnd = new Date(annee, 0, 1 + i * 7 - premierJour.getDay() + 6);
230
- // Formater les dates au format souhaité
231
- const formattedStart = `${daysOfWeek[weekStart.getDay()]}.${weekStart.getDate()} ${months[weekStart.getMonth()]} ${weekStart.getFullYear()}`;
232
- const formattedEnd = `${daysOfWeek[weekEnd.getDay()]}.${weekEnd.getDate()} ${months[weekEnd.getMonth()]} ${weekEnd.getFullYear()}`;
233
- // Ajouter la semaine au tableau
234
- weeksList.push(`${formattedStart} - ${formattedEnd}`);
235
- }
236
- // Retourner le tableau des semaines
237
- return weeksList;
238
- }
239
- function getWeeksList() {
240
- const today = new Date();
241
- const weeksList = [];
242
- const daysOfWeek = ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"];
243
- const months = [
244
- "Jan",
245
- "Fev",
246
- "Mar",
247
- "Avr",
248
- "Mai",
249
- "Jui",
250
- "Juil",
251
- "Aôu",
252
- "Sept",
253
- "Oct",
254
- "Nov",
255
- "Dec",
256
- ];
257
- for (let i = -5; i <= 5; i++) {
258
- const weekStart = new Date(today.getFullYear(), today.getMonth(), today.getDate() + i * 7 - today.getDay());
259
- const weekEnd = new Date(today.getFullYear(), today.getMonth(), today.getDate() + i * 7 - today.getDay() + 6);
260
- const options = {
261
- weekday: "short",
262
- day: "numeric",
263
- month: "short",
264
- year: "numeric",
265
- };
266
- const dayOfWeek = daysOfWeek[weekStart.getDay()];
267
- const formattedStart = `${daysOfWeek[weekStart.getDay()]}.${weekStart.getDate()} ${months[weekStart.getMonth()]} ${weekStart.getFullYear()}`;
268
- // const formattedStart = weekStart.toLocaleDateString('fr-FR', options);
269
- const formattedEnd = `${daysOfWeek[weekEnd.getDay()]}.${weekEnd.getDate()} ${months[weekEnd.getMonth()]} ${weekEnd.getFullYear()}`;
270
- weeksList.push(`${formattedStart} - ${formattedEnd}`);
271
- }
272
- return weeksList;
273
- }
274
- function getDoubleWeeksList() {
275
- const today = new Date();
276
- const weeksList = [];
277
- const daysOfWeek = ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"];
278
- const months = [
279
- "Jan",
280
- "Fev",
281
- "Mar",
282
- "Avr",
283
- "Mai",
284
- "Jui",
285
- "Juil",
286
- "Aôu",
287
- "Sept",
288
- "Oct",
289
- "Nov",
290
- "Dec",
291
- ];
292
- for (let i = -5; i <= 5; i++) {
293
- const weekStart = new Date(today.getFullYear(), today.getMonth(), today.getDate() + i * 7 - today.getDay());
294
- const weekEnd = new Date(today.getFullYear(), today.getMonth(), today.getDate() + i * 7 - today.getDay() + 13);
295
- const options = {
296
- weekday: "short",
297
- day: "numeric",
298
- month: "short",
299
- year: "numeric",
300
- };
301
- const dayOfWeek = daysOfWeek[weekStart.getDay()];
302
- const formattedStart = `${daysOfWeek[weekStart.getDay()]}.${weekStart.getDate()} ${months[weekStart.getMonth()]} ${weekStart.getFullYear()}`;
303
- // const formattedStart = weekStart.toLocaleDateString('fr-FR', options);
304
- const formattedEnd = `${daysOfWeek[weekEnd.getDay()]}.${weekEnd.getDate()} ${months[weekEnd.getMonth()]} ${weekEnd.getFullYear()}`;
305
- weeksList.push(`${formattedStart} - ${formattedEnd}`);
306
- }
307
- return weeksList;
308
- }
309
- function formatDateToCustomFormat(dateString) {
310
- // Tableau contenant les noms des jours de la semaine en français
311
- const daysOfWeek = [
312
- "Dimanche",
313
- "Lundi",
314
- "Mardi",
315
- "Mercredi",
316
- "Jeudi",
317
- "Vendredi",
318
- "Samedi",
319
- ];
320
- // Tableau contenant les noms des mois en français
321
- const months = [
322
- "janvier",
323
- "février",
324
- "mars",
325
- "avril",
326
- "mai",
327
- "juin",
328
- "juillet",
329
- "août",
330
- "septembre",
331
- "octobre",
332
- "novembre",
333
- "décembre",
334
- ];
335
- // Créer un objet Date à partir de la chaîne de caractères
336
- const date = new Date(dateString);
337
- // Récupérer le jour de la semaine, le jour du mois et le mois
338
- const dayOfWeek = daysOfWeek[date.getDay()];
339
- const dayOfMonth = date.getDate();
340
- const month = months[date.getMonth()];
341
- // Formater la date dans le format 'jour_de_la_semaine jour_du_mois mois'
342
- const formattedDate = `${dayOfWeek} ${dayOfMonth} ${month}`;
343
- return formattedDate;
344
- }
345
- function clickedDate(dateString) {
346
- // Créer un objet Date à partir de la chaîne de caractères
347
- const date = new Date(dateString);
348
- return date;
349
- }
350
- const calculateTimeOfDayRange = (start, end) => {
351
- const hourToMillisecond = 3600000;
352
- const range = [];
353
- for (let i = start; i < end; i += hourToMillisecond) {
354
- range.push(i);
355
- }
356
- return range;
357
- };
358
- /**
359
- * Get the ISO week number for a given date.
360
- * @param date - The date to get the week number for.
361
- * @returns The ISO week number.
362
- */
363
- function getWeekNumber(date) {
364
- const tempDate = new Date(date.getTime());
365
- tempDate.setHours(0, 0, 0, 0);
366
- // Thursday in current week decides the year
367
- tempDate.setDate(tempDate.getDate() + 4 - (tempDate.getDay() || 7));
368
- const yearStart = new Date(tempDate.getFullYear(), 0, 1);
369
- const weekNumber = Math.ceil(((tempDate.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);
370
- return weekNumber;
371
- }
372
- /**
373
- * Update the selected date to avoid issues with weeks starting on Sunday.
374
- * @param dateSelectionnee - The selected date.
375
- * @returns The updated date.
376
- */
377
- function updateSelectedDateForEcartSemaine(dateSelectionnee) {
378
- const updatedDate = new Date(dateSelectionnee.getTime());
379
- if (updatedDate.getDay() === 0) {
380
- updatedDate.setDate(updatedDate.getDate() + 1);
381
- }
382
- return updatedDate;
383
- }
384
- /**
385
- * Calculate the week difference between the selected date and the current date.
386
- * @param dateSelectionnee - The selected date.
387
- * @returns The week difference in days.
388
- */
389
- function calculerEcartSemaine(dateSelectionnee) {
390
- if (!dateSelectionnee) {
391
- return 0;
392
- }
393
- const selectedDateUpdated = updateSelectedDateForEcartSemaine(dateSelectionnee);
394
- const dateActuelle = new Date();
395
- const anneeActuelle = dateActuelle.getFullYear();
396
- const numeroSemaineActuelle = getWeekNumber(dateActuelle);
397
- const anneeSelectionnee = selectedDateUpdated.getFullYear();
398
- const numeroSemaineSelectionnee = getWeekNumber(selectedDateUpdated);
399
- const ecartSemaine = semainesDepuisOrigine(anneeSelectionnee, numeroSemaineSelectionnee) -
400
- semainesDepuisOrigine(anneeActuelle, numeroSemaineActuelle);
401
- return ecartSemaine * 7;
402
- }
403
- /**
404
- * Calculate the number of weeks since an arbitrary origin date (January 1, 2022).
405
- * @param annee - The year.
406
- * @param numeroSemaine - The week number.
407
- * @returns The number of weeks since the origin date.
408
- */
409
- function semainesDepuisOrigine(annee, numeroSemaine) {
410
- const dateActuelle = new Date();
411
- const dateOrigine = new Date(dateActuelle.getFullYear() - 2, 0, 1);
412
- const anneeOrigine = dateOrigine.getFullYear();
413
- const numeroSemaineOrigine = getWeekNumber(dateOrigine);
414
- let nombreSemaines = 0;
415
- for (let i = anneeOrigine; i < annee; i++) {
416
- nombreSemaines += moment().year(i).isoWeeksInYear();
417
- }
418
- nombreSemaines += numeroSemaine - numeroSemaineOrigine;
419
- return nombreSemaines;
420
- }
421
- function getSessionStorageRecordForDragAndDrop(tasks, positionDay, dropGroupId) {
422
- const dragtaskId = window.sessionStorage.getItem("calendardragtaskId");
423
- const dragtaskStart = window.sessionStorage.getItem("calendardragtaskStart");
424
- const dragtaskEnd = window.sessionStorage.getItem("calendardragtaskEnd");
425
- const dragdayIndex = window.sessionStorage.getItem("calendardragdayIndex");
426
- let newTask;
427
- let newTasks = [];
428
- window.sessionStorage.clear();
429
- if (!dragdayIndex || !dragtaskStart || !dragtaskEnd || !dragtaskId || !tasks)
430
- return;
431
- const dragTask = tasks.find((task) => task.taskId === dragtaskId);
432
- const dayIndex = parseInt(dragdayIndex);
433
- let ecartDaysIndex = positionDay - dayIndex;
434
- const convertTaskDropStart = new Date(parseInt(dragtaskStart));
435
- convertTaskDropStart.setDate(convertTaskDropStart.getDate() + ecartDaysIndex);
436
- const taskDropStart = convertTaskDropStart.getTime();
437
- let convertTaskDropEnd = new Date(parseInt(dragtaskEnd));
438
- convertTaskDropEnd.setDate(convertTaskDropEnd.getDate() + ecartDaysIndex);
439
- const taskDropEnd = convertTaskDropEnd.getTime();
440
- const taskDropDate = new Date(taskDropStart);
441
- if (dragTask) {
442
- const { taskStart, taskEnd, taskDate, groupId, dayIndex } = dragTask, rest = __rest(dragTask, ["taskStart", "taskEnd", "taskDate", "groupId", "dayIndex"]);
443
- newTask = Object.assign({ taskStart: taskDropStart, taskEnd: taskDropEnd, taskDate: taskDropDate, groupId: dropGroupId, dayIndex: positionDay }, rest);
444
- const dragTaskIndex = tasks.findIndex((task) => task.taskId === dragtaskId);
445
- newTasks = [...tasks];
446
- newTasks.splice(dragTaskIndex, 1, newTask);
447
- }
448
- return { taskDropStart, taskDropEnd, taskDropDate, newTask, newTasks };
449
- }
450
- function compareWeekOffset(calendarDate, weekOffset, taskDate) {
451
- // if (taskDate.getDay() === 0 && calculerEcartSemaine(taskDate) === -7) {
452
- // return true;
453
- // }
454
- if (calendarDate)
455
- return (calculerEcartSemaine(calendarDate) === calculerEcartSemaine(taskDate));
456
- return weekOffset === calculerEcartSemaine(taskDate);
457
- }
458
- const sumHoursByGroups = (groupId, tasks, weekOffset, calendarDate) => {
459
- let sum = 0;
460
- tasks === null || tasks === void 0 ? void 0 : tasks.forEach((task) => {
461
- if (task.groupId === groupId &&
462
- compareWeekOffset(calendarDate, weekOffset, task.taskDate) === true) {
463
- sum += (task.taskEnd - task.taskStart) / 3600000;
464
- }
465
- });
466
- return sum;
467
- };
468
- function saveTasksToLocalStorage(tasks) {
469
- if (typeof window !== "undefined") {
470
- window.localStorage.setItem("Calendar", "je marche");
471
- const tasksSavedString = window.localStorage.getItem("CalendarTaskSaved");
472
- const tasksString = JSON.stringify(tasks);
473
- if (tasksSavedString === tasksString)
474
- return;
475
- if (tasksString === "[]")
476
- return;
477
- const backup = [
478
- ...tasks.filter((task) => {
479
- {
480
- if (task === null || task === void 0 ? void 0 : task.taskExpiryDate) {
481
- const taskDate = new Date(task === null || task === void 0 ? void 0 : task.taskExpiryDate);
482
- return taskDate.getTime() >= Date.now();
483
- }
484
- }
485
- }),
486
- ];
487
- window.localStorage.setItem("CalendarTaskSaved", JSON.stringify(backup));
488
- }
489
- }
490
- export { getWeeksListUpdate, saveTasksToLocalStorage, clickedDate, getCalandarDays, startDateMilliseconds, endDateMilliseconds, getDayHourly, millisecondsToDate, getWeekDays, formatDateToCustomFormat, displayDayOnModalLeft, millisecondsToInt, getWeekMonthAndYear, getWeeksList, getDoubleWeeksList, calculerEcartSemaine, calculateTimeOfDayRange, getSessionStorageRecordForDragAndDrop, compareWeekOffset, sumHoursByGroups, };
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import moment from "moment";
13
+ import dayjs from "dayjs";
14
+ import { v4 as uuidv4 } from "uuid";
15
+ export const DAY_IN_MILLISECONDS = 86400000;
16
+ export const WEEK_IN_MILLISECONDS = DAY_IN_MILLISECONDS * 7;
17
+ // Get the current date
18
+ const currentDate = new Date();
19
+ // Get the day of the week (Sunday = 0, Monday = 1, ..., Saturday = 6)
20
+ const currentDayOfWeek = currentDate.getDay();
21
+ // Calculate the start date of the week in milliseconds
22
+ const startDate = new Date(currentDate);
23
+ startDate.setDate(startDate.getDate() - currentDayOfWeek);
24
+ startDate.setHours(0, 0, 0, 0);
25
+ export const startDateMilliseconds = startDate.getTime();
26
+ // Calculate the end date of the week in milliseconds
27
+ const endDate = new Date(currentDate);
28
+ endDate.setDate(endDate.getDate() + (6 - currentDayOfWeek));
29
+ endDate.setHours(23, 59, 59, 999);
30
+ export const endDateMilliseconds = endDate.getTime();
31
+ export function getDayHourly(weekOffset) {
32
+ const dailyHours = [];
33
+ let dayOffset = weekOffset;
34
+ // Adjust the offset if the current day is Sunday
35
+ if (currentDate.getDay() === 0) {
36
+ dayOffset = dayOffset - 7;
37
+ }
38
+ // Loop to calculate the start and end hours for each day of the week
39
+ for (let i = 0; i < 7; i++) {
40
+ const dayDate = new Date(startDate);
41
+ dayDate.setDate(startDate.getDate() + i);
42
+ const dayStart = new Date(dayDate);
43
+ dayStart.setHours(1, 0, 0, 0);
44
+ const dayEnd = new Date(dayDate);
45
+ dayEnd.setHours(23, 59, 59, 59);
46
+ dailyHours.push({
47
+ positionDay: i,
48
+ day: new Date(dayStart.getTime() + dayOffset * DAY_IN_MILLISECONDS),
49
+ start: dayStart.getTime() + dayOffset * DAY_IN_MILLISECONDS,
50
+ end: dayEnd.getTime() + dayOffset * DAY_IN_MILLISECONDS,
51
+ });
52
+ }
53
+ return dailyHours;
54
+ }
55
+ // Convert milliseconds to a readable date format
56
+ export function millisecondsToDate(milliseconds) {
57
+ const date = new Date(milliseconds);
58
+ const daysOfWeek = ["Mon", "Tues", "Wed", "Thur", "Frid", "Sat", "Sun"];
59
+ const dayOfWeek = daysOfWeek[date.getDay()];
60
+ let hours = date.getHours();
61
+ const minutes = date.getMinutes();
62
+ const formattedDate = `${hours.toString().padStart(2, "0")}h:${minutes
63
+ .toString()
64
+ .padStart(2, "0")}`;
65
+ return { formattedDate, dayOfWeek };
66
+ }
67
+ // Convert milliseconds to integer representation
68
+ export function millisecondsToInt(milliseconds) {
69
+ const date = new Date(milliseconds);
70
+ const daysOfWeek = [
71
+ "Sunday",
72
+ "Monday",
73
+ "Tuesday",
74
+ "Wednesday",
75
+ "Thursday",
76
+ "Friday",
77
+ "Saturday",
78
+ ];
79
+ const months = [
80
+ "January",
81
+ "February",
82
+ "March",
83
+ "April",
84
+ "May",
85
+ "June",
86
+ "July",
87
+ "August",
88
+ "September",
89
+ "October",
90
+ "November",
91
+ "December",
92
+ ];
93
+ const dayOfWeek = daysOfWeek[date.getDay()];
94
+ const dayOfMonth = date.getDate();
95
+ const month = months[date.getMonth()];
96
+ let hours = date.getHours();
97
+ const amOrPm = hours >= 12 ? " pm" : " am";
98
+ const minutes = date.getMinutes();
99
+ const formattedDate = hours.toString().padStart(2, "0");
100
+ return { formattedDate, dayOfWeek };
101
+ }
102
+ // Get days of the week with a jump offset
103
+ export function getWeekDays(jump) {
104
+ const days = ["Sun", "Mon", "Tues", "Wed", "Thur", "Frid", "Sat"];
105
+ const month = [
106
+ "Jan",
107
+ "Feb",
108
+ "Mar",
109
+ "Apr",
110
+ "May",
111
+ "Jun",
112
+ "Jul",
113
+ "Aug",
114
+ "Sept",
115
+ "Oct",
116
+ "Nov",
117
+ "Dec",
118
+ ];
119
+ const currentDate = new Date();
120
+ const currentDayOfWeek = currentDate.getDay();
121
+ let weekDays = [];
122
+ for (let i = 0; i < 7; i++) {
123
+ const day = new Date();
124
+ const diff = i - currentDayOfWeek;
125
+ if (currentDayOfWeek === 0) {
126
+ day.setDate(currentDate.getDate() + diff + jump - 7);
127
+ }
128
+ else {
129
+ day.setDate(currentDate.getDate() + diff + jump);
130
+ }
131
+ const formattedDay = `${days[day.getDay()]}. ${day.getDate()}, ${month[day.getMonth()]} ${day.getFullYear()}`;
132
+ weekDays.push({
133
+ day: days[day.getDay()],
134
+ dayMonth: month[day.getMonth()],
135
+ dayYear: day.getFullYear(),
136
+ dayOfTheMonth: day.getDate(),
137
+ });
138
+ }
139
+ return weekDays;
140
+ }
141
+ // The remaining functions follow the same structure. Ensure all comments are in English and make the functions exportable as required.
142
+ /**
143
+ * Get the ISO week number for a given date.
144
+ * @param date - The date to get the week number for.
145
+ * @returns The ISO week number.
146
+ */
147
+ function getWeekNumber(date) {
148
+ const tempDate = new Date(date.getTime());
149
+ tempDate.setHours(0, 0, 0, 0);
150
+ // Thursday in current week decides the year
151
+ tempDate.setDate(tempDate.getDate() + 4 - (tempDate.getDay() || 7));
152
+ const yearStart = new Date(tempDate.getFullYear(), 0, 1);
153
+ const weekNumber = Math.ceil(((tempDate.getTime() - yearStart.getTime()) / DAY_IN_MILLISECONDS + 1) / 7);
154
+ return weekNumber;
155
+ }
156
+ /**
157
+ * Update the selected date to avoid issues with weeks starting on Sunday.
158
+ * @param dateSelectionnee - The selected date.
159
+ * @returns The updated date.
160
+ */
161
+ function updateSelectedDateForEcartSemaine(dateSelectionnee) {
162
+ const updatedDate = new Date(dateSelectionnee.getTime());
163
+ if (updatedDate.getDay() === 0) {
164
+ updatedDate.setDate(updatedDate.getDate() + 1);
165
+ }
166
+ return updatedDate;
167
+ }
168
+ /**
169
+ * Calculate the week difference between the selected date and the current date.
170
+ * @param dateSelectionnee - The selected date.
171
+ * @returns The week difference in days.
172
+ */
173
+ export function calculerEcartSemaine(dateSelectionnee) {
174
+ if (!dateSelectionnee) {
175
+ return 0;
176
+ }
177
+ const selectedDateUpdated = updateSelectedDateForEcartSemaine(dateSelectionnee);
178
+ const dateActuelle = new Date();
179
+ const anneeActuelle = dateActuelle.getFullYear();
180
+ const numeroSemaineActuelle = getWeekNumber(dateActuelle);
181
+ const anneeSelectionnee = selectedDateUpdated.getFullYear();
182
+ const numeroSemaineSelectionnee = getWeekNumber(selectedDateUpdated);
183
+ const ecartSemaine = semainesDepuisOrigine(anneeSelectionnee, numeroSemaineSelectionnee) -
184
+ semainesDepuisOrigine(anneeActuelle, numeroSemaineActuelle);
185
+ return ecartSemaine * 7;
186
+ }
187
+ /**
188
+ * Calculate the number of weeks since an arbitrary origin date (January 1, 2022).
189
+ * @param annee - The year.
190
+ * @param numeroSemaine - The week number.
191
+ * @returns The number of weeks since the origin date.
192
+ */
193
+ function semainesDepuisOrigine(annee, numeroSemaine) {
194
+ const dateActuelle = new Date();
195
+ const dateOrigine = new Date(dateActuelle.getFullYear() - 2, 0, 1);
196
+ const anneeOrigine = dateOrigine.getFullYear();
197
+ const numeroSemaineOrigine = getWeekNumber(dateOrigine);
198
+ let nombreSemaines = 0;
199
+ for (let i = anneeOrigine; i < annee; i++) {
200
+ nombreSemaines += moment().year(i).isoWeeksInYear();
201
+ }
202
+ nombreSemaines += numeroSemaine - numeroSemaineOrigine;
203
+ return nombreSemaines;
204
+ }
205
+ export function getSessionStorageRecordForDragAndDrop(tasks, positionDay, dropGroupId) {
206
+ const dragtaskId = window.sessionStorage.getItem("calendardragtaskId");
207
+ const dragtaskStart = window.sessionStorage.getItem("calendardragtaskStart");
208
+ const dragtaskEnd = window.sessionStorage.getItem("calendardragtaskEnd");
209
+ const dragdayIndex = window.sessionStorage.getItem("calendardragdayIndex");
210
+ let newTask;
211
+ let newTasks = [];
212
+ window.sessionStorage.clear();
213
+ if (!dragdayIndex || !dragtaskStart || !dragtaskEnd || !dragtaskId || !tasks)
214
+ return;
215
+ const dragTask = tasks.find((task) => task.taskId === dragtaskId);
216
+ const dayIndex = parseInt(dragdayIndex);
217
+ let ecartDaysIndex = positionDay - dayIndex;
218
+ const convertTaskDropStart = new Date(parseInt(dragtaskStart));
219
+ convertTaskDropStart.setDate(convertTaskDropStart.getDate() + ecartDaysIndex);
220
+ const taskDropStart = convertTaskDropStart.getTime();
221
+ let convertTaskDropEnd = new Date(parseInt(dragtaskEnd));
222
+ convertTaskDropEnd.setDate(convertTaskDropEnd.getDate() + ecartDaysIndex);
223
+ const taskDropEnd = convertTaskDropEnd.getTime();
224
+ const taskDropDate = new Date(taskDropStart);
225
+ if (dragTask) {
226
+ const { taskStart, taskEnd, taskDate, groupId, dayIndex } = dragTask, rest = __rest(dragTask, ["taskStart", "taskEnd", "taskDate", "groupId", "dayIndex"]);
227
+ newTask = Object.assign({ taskStart: taskDropStart, taskEnd: taskDropEnd, taskDate: taskDropDate, groupId: dropGroupId, dayIndex: positionDay }, rest);
228
+ const dragTaskIndex = tasks.findIndex((task) => task.taskId === dragtaskId);
229
+ newTasks = [...tasks];
230
+ newTasks.splice(dragTaskIndex, 1, newTask);
231
+ }
232
+ return { taskDropStart, taskDropEnd, taskDropDate, newTask, newTasks };
233
+ }
234
+ export function compareWeekOffset(calendarDate, weekOffset, taskDate) {
235
+ // if (taskDate.getDay() === 0 && calculerEcartSemaine(taskDate) === -7) {
236
+ // return true;
237
+ // }
238
+ if (calendarDate)
239
+ return (calculerEcartSemaine(calendarDate) === calculerEcartSemaine(taskDate));
240
+ return weekOffset === calculerEcartSemaine(taskDate);
241
+ }
242
+ export const sumHoursByGroups = (groupId, tasks, weekOffset, calendarDate) => {
243
+ let sum = 0;
244
+ tasks === null || tasks === void 0 ? void 0 : tasks.forEach((task) => {
245
+ if (task.groupId === groupId &&
246
+ compareWeekOffset(calendarDate, weekOffset, task.taskDate) === true) {
247
+ sum += (task.taskEnd - task.taskStart) / 3600000;
248
+ }
249
+ });
250
+ return sum;
251
+ };
252
+ export function saveTasksToLocalStorage(tasks) {
253
+ if (typeof window !== "undefined") {
254
+ window.localStorage.setItem("Calendar", "je marche");
255
+ const tasksSavedString = window.localStorage.getItem("CalendarTaskSaved");
256
+ const tasksString = JSON.stringify(tasks);
257
+ if (tasksSavedString === tasksString)
258
+ return;
259
+ if (tasksString === "[]")
260
+ return;
261
+ const backup = [
262
+ ...tasks.filter((task) => {
263
+ {
264
+ if (task === null || task === void 0 ? void 0 : task.taskExpiryDate) {
265
+ const taskDate = new Date(task === null || task === void 0 ? void 0 : task.taskExpiryDate);
266
+ return taskDate.getTime() >= Date.now();
267
+ }
268
+ }
269
+ }),
270
+ ];
271
+ window.localStorage.setItem("CalendarTaskSaved", JSON.stringify(backup));
272
+ }
273
+ }
274
+ export const updateCalendarDateWithOffset = (offset, calendarDate) => {
275
+ const newDate = new Date(calendarDate);
276
+ newDate.setDate(newDate.getDate() + offset);
277
+ return newDate;
278
+ };
279
+ export const updateOffsetWithDateCalendar = (calendarDate) => {
280
+ return calculerEcartSemaine(calendarDate);
281
+ };
282
+ export const millisecondsToHours = (milliseconds) => {
283
+ return millisecondsToDate(milliseconds).formattedDate;
284
+ };
285
+ export const checkDuplicates = (tasks, taskStart, taskEnd, groupId) => {
286
+ const findDuplicates = tasks === null || tasks === void 0 ? void 0 : tasks.filter((task) => (taskStart >= task.taskStart && taskStart < task.taskEnd) ||
287
+ (taskEnd > task.taskStart && taskEnd < task.taskEnd) ||
288
+ (taskStart <= task.taskStart &&
289
+ taskEnd > task.taskStart &&
290
+ taskEnd >= task.taskEnd &&
291
+ taskStart <= task.taskEnd)).filter((task) => task.groupId === groupId);
292
+ return findDuplicates.length > 0;
293
+ };
294
+ export const getSavedTasks = () => {
295
+ const taskSavedString = window.localStorage.getItem("CalendarTaskSaved");
296
+ if (!taskSavedString) {
297
+ return [];
298
+ }
299
+ const tasksTable = JSON.parse(taskSavedString);
300
+ const savedTasks = tasksTable.map((task) => {
301
+ const { taskDate, taskExpiryDate } = task, rest = __rest(task, ["taskDate", "taskExpiryDate"]);
302
+ if (taskExpiryDate) {
303
+ return Object.assign({ taskDate: new Date(taskDate), taskExpiryDate: new Date(taskExpiryDate) }, rest);
304
+ }
305
+ });
306
+ return savedTasks;
307
+ };
308
+ export const deleteTaskSaved = (taskId) => {
309
+ const tasksSavedString = window.localStorage.getItem("CalendarTaskSaved");
310
+ if (!tasksSavedString)
311
+ return;
312
+ const tasksSavedTable = JSON.parse(tasksSavedString);
313
+ const taskIndex = tasksSavedTable.findIndex((task) => task.taskId === taskId);
314
+ if (taskIndex) {
315
+ tasksSavedTable.splice(taskIndex, 1);
316
+ window.localStorage.setItem("CalendarTaskSaved", JSON.stringify(tasksSavedTable));
317
+ }
318
+ };
319
+ export const deleteTasksSaved = () => {
320
+ window.localStorage.removeItem("CalendarTaskSaved");
321
+ };
322
+ export function getWeeksInMonth(year, month) {
323
+ // Create a new date object for the first day of the given month
324
+ const firstDay = new Date(year, month, 1);
325
+ // Create a new date object for the last day of the given month
326
+ const lastDay = new Date(year, month + 1, 0);
327
+ // Get the day of the week of the first day of the month
328
+ const startDay = firstDay.getDay();
329
+ // Get the number of days in the month
330
+ const daysInMonth = lastDay.getDate();
331
+ // Calculate the number of weeks
332
+ const weeks = Math.ceil((daysInMonth + startDay) / 7);
333
+ return weeks;
334
+ }
335
+ export function getMonthNumber(monthName) {
336
+ // List of months in order
337
+ const months = [
338
+ "January",
339
+ "February",
340
+ "March",
341
+ "April",
342
+ "May",
343
+ "June",
344
+ "July",
345
+ "August",
346
+ "September",
347
+ "October",
348
+ "November",
349
+ "December",
350
+ ];
351
+ // Convert the month name to the corresponding month index
352
+ const monthIndex = months.indexOf(monthName);
353
+ // If the month name is valid, return its index (0-based)
354
+ if (monthIndex !== -1) {
355
+ return monthIndex;
356
+ }
357
+ else {
358
+ // Return -1 if the month name is invalid
359
+ console.error("Invalid month name");
360
+ return -1;
361
+ }
362
+ }
363
+ export function getDateObjectInTimeZone(timeZone) {
364
+ try {
365
+ let date = new Date(new Date().toLocaleString("en-US", { timeZone: timeZone }));
366
+ return date;
367
+ }
368
+ catch (error) {
369
+ return new Date();
370
+ }
371
+ }
372
+ function recurring(ecartDay, task) {
373
+ const newTask = Object.assign({}, task);
374
+ newTask.taskStart = newTask.taskStart + ecartDay;
375
+ newTask.taskEnd = newTask.taskEnd + ecartDay;
376
+ if (newTask.taskExpiryDate)
377
+ newTask.taskExpiryDate = new Date(newTask.taskExpiryDate.getTime() + ecartDay);
378
+ newTask.taskDate = new Date(newTask.taskStart);
379
+ newTask.dayIndex = newTask.taskDate.getDay();
380
+ newTask.taskId = getUnqueId();
381
+ return newTask;
382
+ }
383
+ export function recurringTasks(allTasks, task, recurrenceType, occurrences) {
384
+ const tasks = [];
385
+ function daily() {
386
+ for (let i = 0; i < occurrences; i++) {
387
+ // Create a copy of the task with updated taskDate for each day
388
+ const newTask = recurring(i * DAY_IN_MILLISECONDS, task);
389
+ if (!checkDuplicates(allTasks, newTask.taskStart, newTask.taskEnd, task.groupId)) {
390
+ tasks.push(newTask);
391
+ }
392
+ }
393
+ }
394
+ function weekly() {
395
+ for (let i = 0; i < occurrences; i++) {
396
+ // Create a copy of the task with updated taskDate for each week
397
+ const newTask = recurring(i * WEEK_IN_MILLISECONDS, task);
398
+ if (!checkDuplicates(allTasks, newTask.taskStart, newTask.taskEnd, task.groupId)) {
399
+ tasks.push(newTask);
400
+ }
401
+ }
402
+ }
403
+ function monthly() {
404
+ for (let i = 0; i < occurrences; i++) {
405
+ // Create a copy of the task with updated taskDate for each week
406
+ const newTask = recurring(dayjs(task.taskDate).daysInMonth() * i * DAY_IN_MILLISECONDS, task);
407
+ if (!checkDuplicates(allTasks, newTask.taskStart, newTask.taskEnd, task.groupId)) {
408
+ tasks.push(newTask);
409
+ }
410
+ }
411
+ }
412
+ // Execute the correct recurrence function based on the type
413
+ if (recurrenceType === "daily") {
414
+ daily();
415
+ }
416
+ else if (recurrenceType === "weekly") {
417
+ weekly();
418
+ }
419
+ else if (recurrenceType === "monthly") {
420
+ monthly();
421
+ }
422
+ console.log(tasks);
423
+ // Return the list of generated tasks
424
+ return tasks;
425
+ }
426
+ export function getHoursByday(tasks, dayIndex, weekOffset) {
427
+ const sum = tasks.reduce((currentSum, task) => {
428
+ if (task.dayIndex === dayIndex &&
429
+ weekOffset === updateOffsetWithDateCalendar(task.taskDate))
430
+ return (currentSum +
431
+ Math.ceil((task.taskEnd - task.taskStart) / DAY_IN_MILLISECONDS));
432
+ return currentSum;
433
+ }, 0);
434
+ return sum;
435
+ }
436
+ export function getHoursByGroup(tasks, groupId, weekOffset) {
437
+ const sum = tasks.reduce((currentSum, task) => {
438
+ if (task.groupId === groupId &&
439
+ weekOffset === updateOffsetWithDateCalendar(task.taskDate))
440
+ return (currentSum +
441
+ Math.ceil((task.taskEnd - task.taskStart) / DAY_IN_MILLISECONDS));
442
+ return currentSum;
443
+ }, 0);
444
+ return sum;
445
+ }
446
+ export function getTaskProgression(task, timeZone) {
447
+ const now = timeZone ? getDateObjectInTimeZone(timeZone) : new Date();
448
+ if (task.taskStart >= now.getTime())
449
+ return 0;
450
+ if (now.getTime() >= task.taskEnd)
451
+ return 100;
452
+ const progression = ((now.getTime() - task.taskStart) / (task.taskEnd - task.taskStart)) * 100;
453
+ return progression.toFixed(0);
454
+ }
455
+ export function convertTasksToIcsFormat(tasks) {
456
+ const ics = tasks.reduce((previousIcs, task) => {
457
+ previousIcs += `
458
+
459
+ BEGIN:VCALENDAR
460
+ VERSION:1.0
461
+ BEGIN:VEVENT
462
+ DTSTART:${task.taskStart}
463
+ DTEND:${task.taskEnd}
464
+ LOCATION:
465
+ DESCRIPTION:Purpose: Provide example of this file type Document file type: ICS Version: 1.0 Created by http://www.online-convert.com More example files: http://www.online-convert.com/file-type License: http://creativecommons.org/licenses Feel free to use & share the file according to the license above.
466
+ SUMMARY:ICS test file
467
+ PRIORITY:3
468
+ END:VEVENT
469
+ END:VCALENDAR
470
+
471
+ `;
472
+ return previousIcs;
473
+ }, "");
474
+ return ics;
475
+ }
476
+ export function addTask(tasks, task) {
477
+ return [...tasks, task];
478
+ }
479
+ export function deleteTask(tasks, taskId) {
480
+ const taskPos = tasks.findIndex((task) => task.taskId === taskId);
481
+ const alltasks = [...tasks];
482
+ alltasks.splice(taskPos, 1);
483
+ return alltasks;
484
+ }
485
+ export function getTaskInfoById(tasks, groups, taskId) {
486
+ const task = tasks.find((task) => task.taskId === taskId);
487
+ if (!task)
488
+ throw new Error("no such to task");
489
+ const group = groups.find((group) => group.id === task.groupId);
490
+ return {
491
+ group,
492
+ task,
493
+ };
494
+ }
495
+ export function selectTask(task) {
496
+ if (typeof window !== "undefined") {
497
+ const copiedTasks = JSON.parse(window.sessionStorage.getItem("copiedTasks") || "[]");
498
+ if (copiedTasks.length > 0) {
499
+ window.sessionStorage.setItem("copiedTasks", JSON.stringify([...copiedTasks, task]));
500
+ }
501
+ else
502
+ window.sessionStorage.setItem("copiedTasks", JSON.stringify([task]));
503
+ }
504
+ }
505
+ export function deSelectTask(task) {
506
+ if (typeof window !== "undefined") {
507
+ const copiedTasks = JSON.parse(window.sessionStorage.getItem("copiedTasks") || "[]");
508
+ if (copiedTasks.length > 0) {
509
+ const newTasks = deleteTask(copiedTasks, task.taskId);
510
+ window.sessionStorage.setItem("copiedTasks", JSON.stringify([...newTasks]));
511
+ }
512
+ else
513
+ throw new Error("Sorry there are no tasks to select");
514
+ }
515
+ }
516
+ export function copyTasks(task) {
517
+ selectTask(task);
518
+ }
519
+ export function cutTasks(task, tasks) {
520
+ copyTasks(task);
521
+ const newTasks = deleteTask(tasks, task.taskId);
522
+ return newTasks;
523
+ }
524
+ function updateTaskStartTimeAnEndTime(start, end, calendarOffset, dayIndex, taskPosition) {
525
+ const diffDay = dayIndex +
526
+ calendarOffset -
527
+ (taskPosition + updateOffsetWithDateCalendar(new Date(start)));
528
+ const startTime = start + diffDay * DAY_IN_MILLISECONDS;
529
+ const endTime = end + diffDay * DAY_IN_MILLISECONDS;
530
+ return { startTime, endTime };
531
+ }
532
+ export function getUnqueId() {
533
+ const uid = uuidv4();
534
+ return uid;
535
+ }
536
+ export function pastTasks(dayInfo, groupId, tasks, taskExpiryDate) {
537
+ if (typeof window !== "undefined") {
538
+ const copiedTasks = JSON.parse(window.sessionStorage.getItem("copiedTasks") || "[]");
539
+ if (copiedTasks.length > 0) {
540
+ const newTasks = copiedTasks.reduce((previousTasks, task) => {
541
+ const { dayIndex: copiedTaskDayIndex, taskStart: copiedTasktaskStart, taskEnd: copiedTasktaskEnd, taskDate: copiedTasktaskDate, groupId: copiedTaskGroupId, taskId: copiedTaskId, taskExpiryDate: copiedTaskExpiryDate } = task, rest = __rest(task, ["dayIndex", "taskStart", "taskEnd", "taskDate", "groupId", "taskId", "taskExpiryDate"]);
542
+ const newTaskStartAndEnd = updateTaskStartTimeAnEndTime(copiedTasktaskStart, copiedTasktaskEnd, updateOffsetWithDateCalendar(dayInfo.day), dayInfo.positionDay, copiedTaskDayIndex);
543
+ if (!checkDuplicates(previousTasks, newTaskStartAndEnd.startTime, newTaskStartAndEnd.endTime, groupId)) {
544
+ const newTaskDate = new Date(newTaskStartAndEnd.startTime);
545
+ const newTaskId = `${getUnqueId()}`;
546
+ const newTask = Object.assign({ taskStart: newTaskStartAndEnd.startTime, taskEnd: newTaskStartAndEnd.endTime, dayIndex: dayInfo.positionDay, taskId: newTaskId, taskDate: newTaskDate, groupId: groupId, taskExpiryDate: taskExpiryDate }, rest);
547
+ return [...previousTasks, newTask];
548
+ }
549
+ else
550
+ return previousTasks;
551
+ }, []);
552
+ window.sessionStorage.removeItem("copiedTasks");
553
+ return [...tasks, ...newTasks];
554
+ }
555
+ else
556
+ throw new Error("Sorry there are no tasks to select");
557
+ }
558
+ }
559
+ export function updateTask(tasks, taskId, newtask) {
560
+ return tasks.map((task) => {
561
+ if (task.taskId === taskId) {
562
+ return newtask;
563
+ }
564
+ return task;
565
+ });
566
+ }
567
+ export function duplicateTasksForPeriod(periodStart, periodEnd, calendarOffset, allTasks) {
568
+ if (periodStart > periodEnd)
569
+ throw new Error("period Start is after period End");
570
+ let tasks = [...allTasks];
571
+ const currentWeekallTasks = allTasks.filter((planning) => planning.offset === calendarOffset);
572
+ for (let dayInMilliseconds = periodStart.getTime(); dayInMilliseconds <= periodEnd.getTime(); dayInMilliseconds += DAY_IN_MILLISECONDS) {
573
+ const dayIndex = new Date(dayInMilliseconds).getDay();
574
+ const findPlanning = currentWeekallTasks.filter((planning) => planning.dayIndex === dayIndex);
575
+ if (findPlanning.length > 0) {
576
+ findPlanning.forEach((plan) => {
577
+ const { taskStart, taskEnd, taskDate, offset, taskId } = plan, rest = __rest(plan, ["taskStart", "taskEnd", "taskDate", "offset", "taskId"]);
578
+ const newOffset = updateOffsetWithDateCalendar(periodEnd);
579
+ const ecartDay = Math.round((periodEnd.getTime() - periodStart.getTime()) / DAY_IN_MILLISECONDS);
580
+ const newTaskStart = taskStart + ecartDay * DAY_IN_MILLISECONDS;
581
+ const newTaskEnd = taskEnd + ecartDay * DAY_IN_MILLISECONDS;
582
+ const newTaskDate = new Date(taskDate.getTime() + ecartDay * DAY_IN_MILLISECONDS);
583
+ if (!checkDuplicates(allTasks, newTaskStart, newTaskEnd, rest.groupId)) {
584
+ const newTask = Object.assign(Object.assign({}, rest), { taskDate: newTaskDate, taskStart: newTaskStart, taskEnd: newTaskEnd, taskId: getUnqueId() });
585
+ tasks.push(Object.assign(Object.assign({}, newTask), { offset: newOffset }));
586
+ }
587
+ });
588
+ }
589
+ }
590
+ return tasks;
591
+ }
592
+ export function duplicateTaskForPeriod(periodStart, periodEnd, task, ecartDay, groupId, taskExpiryDate) {
593
+ if (periodStart >= periodEnd)
594
+ throw new Error("period Start is after period End");
595
+ let allTasks = [];
596
+ for (let dayInMilliseconds = periodStart.getTime(); dayInMilliseconds <= periodEnd.getTime(); dayInMilliseconds += ecartDay
597
+ ? DAY_IN_MILLISECONDS * ecartDay
598
+ : DAY_IN_MILLISECONDS) {
599
+ const { taskStart, taskEnd, taskDate, offset, taskId, groupId: currentTaskGroupId, taskExpiryDate: currentTaskExpiryDate } = task, rest = __rest(task, ["taskStart", "taskEnd", "taskDate", "offset", "taskId", "groupId", "taskExpiryDate"]);
600
+ const newOffset = updateOffsetWithDateCalendar(periodEnd);
601
+ const ecartDay = Math.round((dayInMilliseconds - taskDate.getTime()) / DAY_IN_MILLISECONDS);
602
+ const newTaskStart = taskStart + ecartDay * DAY_IN_MILLISECONDS;
603
+ const newTaskEnd = taskEnd + ecartDay * DAY_IN_MILLISECONDS;
604
+ const newTaskDate = new Date(taskDate.getTime() + ecartDay * DAY_IN_MILLISECONDS);
605
+ if (!checkDuplicates(allTasks, newTaskStart, newTaskEnd, rest.groupId)) {
606
+ const newTask = Object.assign(Object.assign({}, rest), { taskDate: newTaskDate, taskStart: newTaskStart, taskEnd: newTaskEnd, taskId: getUnqueId(), groupId: groupId ? groupId : currentTaskGroupId, taskExpiryDate: taskExpiryDate });
607
+ allTasks.push(Object.assign(Object.assign({}, newTask), { offset: newOffset }));
608
+ }
609
+ }
610
+ return allTasks;
611
+ }
612
+ export const GetTimeRangeByDay = (start, end) => {
613
+ const hourToMillisecond = 3600000;
614
+ const range = [];
615
+ for (let i = start; i < end; i += hourToMillisecond) {
616
+ range.push(i);
617
+ }
618
+ return range;
619
+ };