react-weekly-planning 1.0.5 → 1.0.7

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/docs/index.html CHANGED
@@ -330,18 +330,8 @@ taskId, taskStart taskEnd, task, taskDate, groupId, dayIndex
330
330
  </tr>
331
331
  <tr>
332
332
  <td><code>addTaskRender</code></td>
333
- <td>addTaskRender?: ({currentGroup,dayInfo}:{</td>
334
- <td></td>
335
- </tr>
336
- <tr>
337
- <td>currentGroup: GroupFeildsType;dayInfo: dayInfoType;</td>
338
- <td></td>
339
- <td></td>
340
- </tr>
341
- <tr>
342
- <td>}) =&gt; React.ReactNode;</td>
333
+ <td>addTaskRender?: ({currentGroup,dayInfo}:{currentGroup: GroupFeildsType;dayInfo: dayInfoType}) =&gt; React.ReactNode;</td>
343
334
  <td>Custom render function for adding a task.</td>
344
- <td></td>
345
335
  </tr>
346
336
  <tr>
347
337
  <td><code>tasks</code></td>
@@ -124,7 +124,7 @@ type GroupRiquiredFieldsType = {
124
124
  /**
125
125
  * Additional fields for a group.
126
126
  */
127
- type GroupAdditionalFieldsType = Record&lt;any, unknown>;
127
+ type GroupAdditionalFieldsType = Record&lt;any,any>;
128
128
 
129
129
  /**
130
130
  * Fields for a group, including both required and additional fields.
@@ -467,7 +467,7 @@ export type SumHoursHeadContainerPropsType = {
467
467
  /**
468
468
  * Additional fields for a task.
469
469
  */
470
- type TaskAdditionalFieldsType = Record&lt;any, unknown>;
470
+ type TaskAdditionalFieldsType = Record&lt;any, any>;
471
471
 
472
472
  /**
473
473
  * Fields for a task, including both required and additional fields.
package/lib/utils.js CHANGED
@@ -346,46 +346,64 @@ const calculateTimeOfDayRange = (start, end) => {
346
346
  }
347
347
  return range;
348
348
  };
349
+ /**
350
+ * Get the ISO week number for a given date.
351
+ * @param date - The date to get the week number for.
352
+ * @returns The ISO week number.
353
+ */
349
354
  function getWeekNumber(date) {
350
- date.setHours(0, 0, 0, 0);
351
- date.setDate(date.getDate() + 4 - (date.getDay() || 7));
352
- const yearStart = new Date(date.getFullYear(), 0, 1).getTime();
353
- const weekNumber = Math.ceil(((date.getTime() - yearStart) / 86400000 + 1) / 7);
355
+ const tempDate = new Date(date.getTime());
356
+ tempDate.setHours(0, 0, 0, 0);
357
+ // Thursday in current week decides the year
358
+ tempDate.setDate(tempDate.getDate() + 4 - (tempDate.getDay() || 7));
359
+ const yearStart = new Date(tempDate.getFullYear(), 0, 1);
360
+ const weekNumber = Math.ceil((((tempDate.getTime() - yearStart.getTime()) / 86400000) + 1) / 7);
354
361
  return weekNumber;
355
362
  }
363
+ /**
364
+ * Update the selected date to avoid issues with weeks starting on Sunday.
365
+ * @param dateSelectionnee - The selected date.
366
+ * @returns The updated date.
367
+ */
356
368
  function updateSelectedDateForEcartSemaine(dateSelectionnee) {
357
- if (dateSelectionnee.getDay() === 0)
358
- return new Date(dateSelectionnee.getTime() + 86400000);
359
- return dateSelectionnee;
369
+ const updatedDate = new Date(dateSelectionnee.getTime());
370
+ if (updatedDate.getDay() === 0) {
371
+ updatedDate.setDate(updatedDate.getDate() + 1);
372
+ }
373
+ return updatedDate;
360
374
  }
375
+ /**
376
+ * Calculate the week difference between the selected date and the current date.
377
+ * @param dateSelectionnee - The selected date.
378
+ * @returns The week difference in days.
379
+ */
361
380
  function calculerEcartSemaine(dateSelectionnee) {
362
- // Récupérer la date actuelle
363
381
  if (!dateSelectionnee) {
364
- return;
382
+ return 0;
365
383
  }
366
384
  const selectedDateUpdated = updateSelectedDateForEcartSemaine(dateSelectionnee);
367
385
  const dateActuelle = new Date();
368
- // Extraire l'année et le numéro de la semaine de la date actuelle
369
386
  const anneeActuelle = dateActuelle.getFullYear();
370
387
  const numeroSemaineActuelle = getWeekNumber(dateActuelle);
371
- // Extraire l'année et le numéro de la semaine de la date sélectionnée
372
388
  const anneeSelectionnee = selectedDateUpdated.getFullYear();
373
389
  const numeroSemaineSelectionnee = getWeekNumber(selectedDateUpdated);
374
- // Calculer le nombre de semaines depuis une date d'origine arbitraire
375
- // Calculer l'écart entre les semaines en utilisant la formule
376
390
  const ecartSemaine = semainesDepuisOrigine(anneeSelectionnee, numeroSemaineSelectionnee) -
377
391
  semainesDepuisOrigine(anneeActuelle, numeroSemaineActuelle);
378
392
  return ecartSemaine * 7;
379
393
  }
394
+ /**
395
+ * Calculate the number of weeks since an arbitrary origin date (January 1, 2022).
396
+ * @param annee - The year.
397
+ * @param numeroSemaine - The week number.
398
+ * @returns The number of weeks since the origin date.
399
+ */
380
400
  function semainesDepuisOrigine(annee, numeroSemaine) {
381
- // Choisir le 1er janvier 2022 comme date d'origine
382
401
  const dateOrigine = new Date(2022, 0, 1);
383
402
  const anneeOrigine = dateOrigine.getFullYear();
384
403
  const numeroSemaineOrigine = getWeekNumber(dateOrigine);
385
- // Calculer le nombre total de semaines écoulées depuis la date d'origine
386
404
  let nombreSemaines = 0;
387
405
  for (let i = anneeOrigine; i < annee; i++) {
388
- nombreSemaines += moment().year(i).weeksInYear();
406
+ nombreSemaines += moment().year(i).isoWeeksInYear();
389
407
  }
390
408
  nombreSemaines += numeroSemaine - numeroSemaineOrigine;
391
409
  return nombreSemaines;
@@ -397,15 +415,18 @@ function getSessionStorageRecordForDragAndDrop(tasks, positionDay, dropGroupId)
397
415
  const dragdayIndex = window.sessionStorage.getItem("calendardragdayIndex");
398
416
  let newTask;
399
417
  let newTasks = [];
400
- // window.sessionStorage.clear();
418
+ window.sessionStorage.clear();
401
419
  if (!dragdayIndex || !dragtaskStart || !dragtaskEnd || !dragtaskId || !tasks)
402
420
  return;
403
421
  const dragTask = tasks.find((task) => task.taskId === dragtaskId);
404
422
  const dayIndex = parseInt(dragdayIndex);
405
- const ecartDaysIndex = positionDay - dayIndex;
406
- const ecartDays = ecartDaysIndex * 86400000;
407
- const taskDropStart = parseInt(dragtaskStart) + ecartDays;
408
- const taskDropEnd = parseInt(dragtaskEnd) + ecartDays;
423
+ let ecartDaysIndex = positionDay - dayIndex;
424
+ const convertTaskDropStart = new Date(parseInt(dragtaskStart));
425
+ convertTaskDropStart.setDate(convertTaskDropStart.getDate() + ecartDaysIndex);
426
+ const taskDropStart = convertTaskDropStart.getTime();
427
+ let convertTaskDropEnd = new Date(parseInt(dragtaskEnd));
428
+ convertTaskDropEnd.setDate(convertTaskDropEnd.getDate() + ecartDaysIndex);
429
+ const taskDropEnd = convertTaskDropEnd.getTime();
409
430
  const taskDropDate = new Date(taskDropStart);
410
431
  if (dragTask) {
411
432
  const { taskStart, taskEnd, taskDate, groupId, dayIndex } = dragTask, rest = __rest(dragTask, ["taskStart", "taskEnd", "taskDate", "groupId", "dayIndex"]);
package/lib/utils.ts CHANGED
@@ -444,64 +444,82 @@ const calculateTimeOfDayRange = (start: number, end: number) => {
444
444
  return range;
445
445
  };
446
446
 
447
- function getWeekNumber(date: Date) {
448
- date.setHours(0, 0, 0, 0);
449
- date.setDate(date.getDate() + 4 - (date.getDay() || 7));
450
- const yearStart = new Date(date.getFullYear(), 0, 1).getTime();
447
+ /**
448
+ * Get the ISO week number for a given date.
449
+ * @param date - The date to get the week number for.
450
+ * @returns The ISO week number.
451
+ */
452
+ function getWeekNumber(date: Date): number {
453
+ const tempDate = new Date(date.getTime());
454
+ tempDate.setHours(0, 0, 0, 0);
455
+ // Thursday in current week decides the year
456
+ tempDate.setDate(tempDate.getDate() + 4 - (tempDate.getDay() || 7));
457
+ const yearStart = new Date(tempDate.getFullYear(), 0, 1);
451
458
  const weekNumber = Math.ceil(
452
- ((date.getTime() - yearStart) / 86400000 + 1) / 7
459
+ (((tempDate.getTime() - yearStart.getTime()) / 86400000) + 1) / 7
453
460
  );
454
461
  return weekNumber;
455
462
  }
456
- function updateSelectedDateForEcartSemaine(dateSelectionnee: Date) {
457
- if (dateSelectionnee.getDay() === 0)
458
- return new Date(dateSelectionnee.getTime() + 86400000);
459
- return dateSelectionnee;
463
+
464
+ /**
465
+ * Update the selected date to avoid issues with weeks starting on Sunday.
466
+ * @param dateSelectionnee - The selected date.
467
+ * @returns The updated date.
468
+ */
469
+ function updateSelectedDateForEcartSemaine(dateSelectionnee: Date): Date {
470
+ const updatedDate = new Date(dateSelectionnee.getTime());
471
+ if (updatedDate.getDay() === 0) {
472
+ updatedDate.setDate(updatedDate.getDate() + 1);
473
+ }
474
+ return updatedDate;
460
475
  }
461
476
 
462
- function calculerEcartSemaine(dateSelectionnee: Date) {
463
- // Récupérer la date actuelle
477
+ /**
478
+ * Calculate the week difference between the selected date and the current date.
479
+ * @param dateSelectionnee - The selected date.
480
+ * @returns The week difference in days.
481
+ */
482
+ function calculerEcartSemaine(dateSelectionnee: Date): number {
464
483
  if (!dateSelectionnee) {
465
- return;
484
+ return 0;
466
485
  }
467
- const selectedDateUpdated=updateSelectedDateForEcartSemaine(dateSelectionnee)
486
+ const selectedDateUpdated = updateSelectedDateForEcartSemaine(dateSelectionnee);
468
487
 
469
488
  const dateActuelle = new Date();
470
-
471
- // Extraire l'année et le numéro de la semaine de la date actuelle
472
489
  const anneeActuelle = dateActuelle.getFullYear();
473
490
  const numeroSemaineActuelle = getWeekNumber(dateActuelle);
474
491
 
475
- // Extraire l'année et le numéro de la semaine de la date sélectionnée
476
-
477
492
  const anneeSelectionnee = selectedDateUpdated.getFullYear();
478
493
  const numeroSemaineSelectionnee = getWeekNumber(selectedDateUpdated);
479
494
 
480
- // Calculer le nombre de semaines depuis une date d'origine arbitraire
481
-
482
- // Calculer l'écart entre les semaines en utilisant la formule
483
- const ecartSemaine =
495
+ const ecartSemaine =
484
496
  semainesDepuisOrigine(anneeSelectionnee, numeroSemaineSelectionnee) -
485
497
  semainesDepuisOrigine(anneeActuelle, numeroSemaineActuelle);
486
498
 
487
499
  return ecartSemaine * 7;
488
500
  }
489
- function semainesDepuisOrigine(annee: number, numeroSemaine: number) {
490
- // Choisir le 1er janvier 2022 comme date d'origine
501
+
502
+ /**
503
+ * Calculate the number of weeks since an arbitrary origin date (January 1, 2022).
504
+ * @param annee - The year.
505
+ * @param numeroSemaine - The week number.
506
+ * @returns The number of weeks since the origin date.
507
+ */
508
+ function semainesDepuisOrigine(annee: number, numeroSemaine: number): number {
491
509
  const dateOrigine = new Date(2022, 0, 1);
492
510
  const anneeOrigine = dateOrigine.getFullYear();
493
511
  const numeroSemaineOrigine = getWeekNumber(dateOrigine);
494
512
 
495
- // Calculer le nombre total de semaines écoulées depuis la date d'origine
496
513
  let nombreSemaines = 0;
497
514
  for (let i = anneeOrigine; i < annee; i++) {
498
- nombreSemaines += moment().year(i).weeksInYear();
515
+ nombreSemaines += moment().year(i).isoWeeksInYear();
499
516
  }
500
517
  nombreSemaines += numeroSemaine - numeroSemaineOrigine;
501
518
 
502
519
  return nombreSemaines;
503
520
  }
504
521
 
522
+
505
523
  function getSessionStorageRecordForDragAndDrop(
506
524
  tasks: TasksType,
507
525
  positionDay: number,
@@ -513,15 +531,18 @@ function getSessionStorageRecordForDragAndDrop(
513
531
  const dragdayIndex = window.sessionStorage.getItem("calendardragdayIndex");
514
532
  let newTask: TaskFeildsType | any;
515
533
  let newTasks: TasksType = [];
516
- // window.sessionStorage.clear();
534
+ window.sessionStorage.clear();
517
535
  if (!dragdayIndex || !dragtaskStart || !dragtaskEnd || !dragtaskId || !tasks)
518
536
  return;
519
537
  const dragTask = tasks.find((task) => task.taskId === dragtaskId);
520
538
  const dayIndex = parseInt(dragdayIndex);
521
- const ecartDaysIndex = positionDay - dayIndex;
522
- const ecartDays = ecartDaysIndex * 86400000;
523
- const taskDropStart = parseInt(dragtaskStart) + ecartDays;
524
- const taskDropEnd = parseInt(dragtaskEnd) + ecartDays;
539
+ let ecartDaysIndex = positionDay - dayIndex;
540
+ const convertTaskDropStart = new Date(parseInt(dragtaskStart));
541
+ convertTaskDropStart.setDate(convertTaskDropStart.getDate() + ecartDaysIndex);
542
+ const taskDropStart = convertTaskDropStart.getTime();
543
+ let convertTaskDropEnd = new Date(parseInt(dragtaskEnd));
544
+ convertTaskDropEnd.setDate(convertTaskDropEnd.getDate() + ecartDaysIndex);
545
+ const taskDropEnd = convertTaskDropEnd.getTime();
525
546
  const taskDropDate = new Date(taskDropStart);
526
547
  if (dragTask) {
527
548
  const { taskStart, taskEnd, taskDate, groupId, dayIndex, ...rest } =
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-weekly-planning",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "main": "index.js",
5
5
  "scripts": {
6
6
  "test": "jest",