1. 1 : /**
  2. 2 : * @module EventView/Parts/Reccursivity
  3. 3 : *
  4. 4 : */
  5. 5 : import { EventView } from '../event_view.js';
  6. 6 : import { FakePart, Parts } from './parts.js';
  7. 7 :
  8. 8 : /**
  9. 9 : * @class
  10. 10 : * @classdesc Gère la partie récursivité d'un événement.
  11. 11 : * @extends FakePart
  12. 12 : * @frommodule EventView/Parts
  13. 13 : */
  14. 14 : export class RecPart extends FakePart {
  15. 15 : /**
  16. 16 : *
  17. 17 : * @param {external:jQuery} original Champ qui contiendra les données formattés du champs visuel. Sera utiliser pour la sauvegarde des données de l'évènement.
  18. 18 : * @param {external:jQuery} fake Champ qui contiendra les données visuels de la récursivité.
  19. 19 : */
  20. 20 : constructor(original, fake) {
  21. 21 : super(original, fake, Parts.MODE.change);
  22. 22 :
  23. 23 : this._$fakeField.tooltip({
  24. 24 : content: () =>
  25. 25 : this._$fakeField.attr('title') ||
  26. 26 : this._$fakeField.attr('data-original-title'),
  27. 27 : });
  28. 28 :
  29. 29 : this._$fakeField.removeAttr('disabled').removeClass('disabled');
  30. 30 : }
  31. 31 :
  32. 32 : /**
  33. 33 : * Intialise la partie.
  34. 34 : * @override
  35. 35 : * @param {*} event Evènement du plugin `Calendar`
  36. 36 : */
  37. 37 : init(event) {}
  38. 38 :
  39. 39 : /**
  40. 40 : * Met à jours le champ
  41. 41 : * @override
  42. 42 : * @param {string} val Nouvelle valeur du champ
  43. 43 : */
  44. 44 : onUpdate(val) {
  45. 45 : this._$field.val(val).change();
  46. 46 : }
  47. 47 :
  48. 48 : /**
  49. 49 : * Action qui sera appelé lorsque le champ changera de valeur.
  50. 50 : * @override
  51. 51 : * @param {Event} e Données de l'évènement
  52. 52 : */
  53. 53 : onChange(e) {
  54. 54 : this.onUpdate(e.currentTarget.value);
  55. 55 : //récupère la première date
  56. 56 : let firstdate = EventView.INSTANCE.parts.date.date_start;
  57. 57 : //récupère la fréquence dayli, weekly, monthly, yearly
  58. 58 : let freq = e.currentTarget.value;
  59. 59 : let endprop;
  60. 60 : let end = true;
  61. 61 : //calcule
  62. 62 : switch (freq) {
  63. 63 : case RecPart.frequency.daily:
  64. 64 : endprop = firstdate.add(3, 'M');
  65. 65 : //destrucs
  66. 66 : break;
  67. 67 : case RecPart.frequency.weekly:
  68. 68 : //destrucs
  69. 69 : endprop = firstdate.add(6, 'M');
  70. 70 : break;
  71. 71 : case RecPart.frequency.monthly:
  72. 72 : //destrucs
  73. 73 : endprop = firstdate.add(1, 'y');
  74. 74 : break;
  75. 75 : case RecPart.frequency.yearly:
  76. 76 : end = false;
  77. 77 : //destrucs
  78. 78 : break;
  79. 79 : default:
  80. 80 : end = false;
  81. 81 : break;
  82. 82 : }
  83. 83 : if (end) {
  84. 84 : //propose le champ
  85. 85 : $('#edit-recurrence-enddate').val(endprop.format('DD/MM/YYYY'));
  86. 86 : // met date cochée par défault
  87. 87 : $('#edit-recurrence-repeat-until').prop('checked', true);
  88. 88 : } else {
  89. 89 : $('#edit-recurrence-enddate').val(null);
  90. 90 : $('#edit-recurrence-repeat-forever').prop('checked', true);
  91. 91 : }
  92. 92 : }
  93. 93 :
  94. 94 : /**
  95. 95 : * Libère les données qui doivent être libérés.
  96. 96 : */
  97. 97 : destroy() {
  98. 98 : this._$fakeField.tooltip('destroy');
  99. 99 : }
  100. 100 : }
  101. 101 : /**
  102. 102 : * @enum {string}
  103. 103 : */
  104. 104 : RecPart.frequency = {
  105. 105 : daily: 'DAILY',
  106. 106 : weekly: 'WEEKLY',
  107. 107 : monthly: 'MONTHLY',
  108. 108 : yearly: 'YEARLY',
  109. 109 : };