@aneuhold/core-ts-db-lib 1.0.120 → 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 (130) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +48 -5
  3. package/lib/documents/BaseDocument.d.ts +1 -1
  4. package/lib/documents/BaseDocument.d.ts.map +1 -1
  5. package/lib/documents/BaseDocument.js +4 -6
  6. package/lib/documents/BaseDocument.js.map +1 -0
  7. package/lib/documents/BaseDocument.ts +9 -0
  8. package/lib/documents/BaseDocumentWithType.d.ts +1 -1
  9. package/lib/documents/BaseDocumentWithType.d.ts.map +1 -1
  10. package/lib/documents/BaseDocumentWithType.js +3 -8
  11. package/lib/documents/BaseDocumentWithType.js.map +1 -0
  12. package/lib/documents/BaseDocumentWithType.ts +5 -0
  13. package/lib/documents/common/ApiKey.d.ts +5 -4
  14. package/lib/documents/common/ApiKey.d.ts.map +1 -1
  15. package/lib/documents/common/ApiKey.js +10 -17
  16. package/lib/documents/common/ApiKey.js.map +1 -0
  17. package/lib/documents/common/ApiKey.ts +40 -0
  18. package/lib/documents/common/User.d.ts +2 -2
  19. package/lib/documents/common/User.d.ts.map +1 -1
  20. package/lib/documents/common/User.js +8 -15
  21. package/lib/documents/common/User.js.map +1 -0
  22. package/lib/documents/common/User.ts +63 -0
  23. package/lib/documents/dashboard/NonogramKatanaItem.d.ts +4 -4
  24. package/lib/documents/dashboard/NonogramKatanaItem.d.ts.map +1 -1
  25. package/lib/documents/dashboard/NonogramKatanaItem.js +4 -11
  26. package/lib/documents/dashboard/NonogramKatanaItem.js.map +1 -0
  27. package/lib/documents/dashboard/NonogramKatanaItem.ts +53 -0
  28. package/lib/documents/dashboard/NonogramKatanaUpgrade.d.ts +5 -5
  29. package/lib/documents/dashboard/NonogramKatanaUpgrade.d.ts.map +1 -1
  30. package/lib/documents/dashboard/NonogramKatanaUpgrade.js +4 -11
  31. package/lib/documents/dashboard/NonogramKatanaUpgrade.js.map +1 -0
  32. package/lib/documents/dashboard/NonogramKatanaUpgrade.ts +50 -0
  33. package/lib/documents/dashboard/Task.d.ts +7 -7
  34. package/lib/documents/dashboard/Task.d.ts.map +1 -1
  35. package/lib/documents/dashboard/Task.js +10 -17
  36. package/lib/documents/dashboard/Task.js.map +1 -0
  37. package/lib/documents/dashboard/Task.ts +173 -0
  38. package/lib/documents/dashboard/UserConfig.d.ts +6 -6
  39. package/lib/documents/dashboard/UserConfig.d.ts.map +1 -1
  40. package/lib/documents/dashboard/UserConfig.js +12 -19
  41. package/lib/documents/dashboard/UserConfig.js.map +1 -0
  42. package/lib/documents/dashboard/UserConfig.ts +110 -0
  43. package/lib/embedded-types/dashboard/nonogramKatanaItem/ItemName.d.ts.map +1 -1
  44. package/lib/embedded-types/dashboard/nonogramKatanaItem/ItemName.js +2 -3
  45. package/lib/embedded-types/dashboard/nonogramKatanaItem/ItemName.js.map +1 -0
  46. package/lib/embedded-types/dashboard/nonogramKatanaItem/ItemName.ts +97 -0
  47. package/lib/embedded-types/dashboard/nonogramKatanaUpgrade/UpgradeName.d.ts.map +1 -1
  48. package/lib/embedded-types/dashboard/nonogramKatanaUpgrade/UpgradeName.js +2 -3
  49. package/lib/embedded-types/dashboard/nonogramKatanaUpgrade/UpgradeName.js.map +1 -0
  50. package/lib/embedded-types/dashboard/nonogramKatanaUpgrade/UpgradeName.ts +263 -0
  51. package/lib/embedded-types/dashboard/task/FilterSettings.d.ts +2 -2
  52. package/lib/embedded-types/dashboard/task/FilterSettings.d.ts.map +1 -1
  53. package/lib/embedded-types/dashboard/task/FilterSettings.js +3 -6
  54. package/lib/embedded-types/dashboard/task/FilterSettings.js.map +1 -0
  55. package/lib/embedded-types/dashboard/task/FilterSettings.ts +100 -0
  56. package/lib/embedded-types/dashboard/task/RecurrenceInfo.d.ts +1 -1
  57. package/lib/embedded-types/dashboard/task/RecurrenceInfo.d.ts.map +1 -1
  58. package/lib/embedded-types/dashboard/task/RecurrenceInfo.js +8 -11
  59. package/lib/embedded-types/dashboard/task/RecurrenceInfo.js.map +1 -0
  60. package/lib/embedded-types/dashboard/task/RecurrenceInfo.ts +100 -0
  61. package/lib/embedded-types/dashboard/task/SortSettings.d.ts +2 -2
  62. package/lib/embedded-types/dashboard/task/SortSettings.d.ts.map +1 -1
  63. package/lib/embedded-types/dashboard/task/SortSettings.js +7 -11
  64. package/lib/embedded-types/dashboard/task/SortSettings.js.map +1 -0
  65. package/lib/embedded-types/dashboard/task/SortSettings.ts +89 -0
  66. package/lib/embedded-types/dashboard/userConfig/Tags.d.ts.map +1 -1
  67. package/lib/embedded-types/dashboard/userConfig/Tags.js +2 -2
  68. package/lib/embedded-types/dashboard/userConfig/Tags.js.map +1 -0
  69. package/lib/embedded-types/dashboard/userConfig/Tags.ts +9 -0
  70. package/lib/index.d.ts +20 -20
  71. package/lib/index.d.ts.map +1 -1
  72. package/lib/index.js +19 -71
  73. package/lib/index.js.map +1 -0
  74. package/lib/index.ts +103 -0
  75. package/lib/schemas/required-refs/RequiredUserId.d.ts +1 -1
  76. package/lib/schemas/required-refs/RequiredUserId.d.ts.map +1 -1
  77. package/lib/schemas/required-refs/RequiredUserId.js +3 -8
  78. package/lib/schemas/required-refs/RequiredUserId.js.map +1 -0
  79. package/lib/schemas/required-refs/RequiredUserId.ts +9 -0
  80. package/lib/schemas/type-guards/commonTypeGuards.d.ts.map +1 -1
  81. package/lib/schemas/type-guards/commonTypeGuards.js +6 -12
  82. package/lib/schemas/type-guards/commonTypeGuards.js.map +1 -0
  83. package/lib/schemas/type-guards/commonTypeGuards.ts +29 -0
  84. package/lib/schemas/validators/DocumentValidator.d.ts +1 -1
  85. package/lib/schemas/validators/DocumentValidator.d.ts.map +1 -1
  86. package/lib/schemas/validators/DocumentValidator.js +2 -2
  87. package/lib/schemas/validators/DocumentValidator.js.map +1 -0
  88. package/lib/schemas/validators/DocumentValidator.ts +5 -0
  89. package/lib/schemas/validators/ValidateUtil.d.ts.map +1 -1
  90. package/lib/schemas/validators/ValidateUtil.js +8 -10
  91. package/lib/schemas/validators/ValidateUtil.js.map +1 -0
  92. package/lib/schemas/validators/ValidateUtil.spec.ts +75 -0
  93. package/lib/schemas/validators/ValidateUtil.ts +193 -0
  94. package/lib/services/DocumentService.d.ts +1 -1
  95. package/lib/services/DocumentService.d.ts.map +1 -1
  96. package/lib/services/DocumentService.js +4 -6
  97. package/lib/services/DocumentService.js.map +1 -0
  98. package/lib/services/DocumentService.spec.ts +28 -0
  99. package/lib/services/DocumentService.ts +18 -0
  100. package/lib/services/dashboard/Task/TaskFilterService.d.ts +2 -2
  101. package/lib/services/dashboard/Task/TaskFilterService.d.ts.map +1 -1
  102. package/lib/services/dashboard/Task/TaskFilterService.js +2 -4
  103. package/lib/services/dashboard/Task/TaskFilterService.js.map +1 -0
  104. package/lib/services/dashboard/Task/TaskFilterService.ts +105 -0
  105. package/lib/services/dashboard/Task/TaskRecurrenceService.d.ts +2 -2
  106. package/lib/services/dashboard/Task/TaskRecurrenceService.d.ts.map +1 -1
  107. package/lib/services/dashboard/Task/TaskRecurrenceService.js +21 -23
  108. package/lib/services/dashboard/Task/TaskRecurrenceService.js.map +1 -0
  109. package/lib/services/dashboard/Task/TaskRecurrenceService.ts +172 -0
  110. package/lib/services/dashboard/Task/TaskService.d.ts +5 -5
  111. package/lib/services/dashboard/Task/TaskService.d.ts.map +1 -1
  112. package/lib/services/dashboard/Task/TaskService.js +13 -18
  113. package/lib/services/dashboard/Task/TaskService.js.map +1 -0
  114. package/lib/services/dashboard/Task/TaskService.spec.ts +653 -0
  115. package/lib/services/dashboard/Task/TaskService.ts +189 -0
  116. package/lib/services/dashboard/Task/TaskSortService.d.ts +3 -3
  117. package/lib/services/dashboard/Task/TaskSortService.d.ts.map +1 -1
  118. package/lib/services/dashboard/Task/TaskSortService.js +6 -8
  119. package/lib/services/dashboard/Task/TaskSortService.js.map +1 -0
  120. package/lib/services/dashboard/Task/TaskSortService.ts +229 -0
  121. package/package.json +36 -29
  122. package/lib/schemas/validators/ValidateUtil.spec.d.ts +0 -2
  123. package/lib/schemas/validators/ValidateUtil.spec.d.ts.map +0 -1
  124. package/lib/schemas/validators/ValidateUtil.spec.js +0 -64
  125. package/lib/services/DocumentService.spec.d.ts +0 -2
  126. package/lib/services/DocumentService.spec.d.ts.map +0 -1
  127. package/lib/services/DocumentService.spec.js +0 -30
  128. package/lib/services/dashboard/Task/TaskService.spec.d.ts +0 -2
  129. package/lib/services/dashboard/Task/TaskService.spec.d.ts.map +0 -1
  130. package/lib/services/dashboard/Task/TaskService.spec.js +0 -508
@@ -1,37 +1,35 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const core_ts_lib_1 = require("@aneuhold/core-ts-lib");
4
- const RecurrenceInfo_1 = require("../../../embedded-types/dashboard/task/RecurrenceInfo");
5
- class DashboardTaskRecurrenceService {
1
+ import { DateService } from '@aneuhold/core-ts-lib';
2
+ import { RecurrenceBasis, RecurrenceFrequencyType } from '../../../embedded-types/dashboard/task/RecurrenceInfo.js';
3
+ export default class DashboardTaskRecurrenceService {
6
4
  /**
7
5
  * Gets the next frequency date from the provided basis date. Returns null
8
6
  * if the provided frequency is in an invalid state.
9
7
  */
10
8
  static getNextFrequencyDate(basisDate, frequency) {
11
9
  // Last day of month
12
- if (frequency.type === RecurrenceInfo_1.RecurrenceFrequencyType.lastDayOfMonth) {
13
- return core_ts_lib_1.DateService.getLastDayOfGivenMonth(basisDate);
10
+ if (frequency.type === RecurrenceFrequencyType.lastDayOfMonth) {
11
+ return DateService.getLastDayOfGivenMonth(basisDate);
14
12
  }
15
13
  // Every X Time Unit
16
- if (frequency.type === RecurrenceInfo_1.RecurrenceFrequencyType.everyXTimeUnit) {
14
+ if (frequency.type === RecurrenceFrequencyType.everyXTimeUnit) {
17
15
  if (!frequency.everyXTimeUnit) {
18
16
  return null;
19
17
  }
20
18
  if (frequency.everyXTimeUnit.timeUnit === 'day') {
21
- return core_ts_lib_1.DateService.addDays(basisDate, frequency.everyXTimeUnit.x);
19
+ return DateService.addDays(basisDate, frequency.everyXTimeUnit.x);
22
20
  }
23
21
  if (frequency.everyXTimeUnit.timeUnit === 'week') {
24
- return core_ts_lib_1.DateService.addDays(basisDate, frequency.everyXTimeUnit.x * 7);
22
+ return DateService.addDays(basisDate, frequency.everyXTimeUnit.x * 7);
25
23
  }
26
24
  if (frequency.everyXTimeUnit.timeUnit === 'month') {
27
- return core_ts_lib_1.DateService.addMonths(basisDate, frequency.everyXTimeUnit.x);
25
+ return DateService.addMonths(basisDate, frequency.everyXTimeUnit.x);
28
26
  }
29
27
  if (frequency.everyXTimeUnit.timeUnit === 'year') {
30
- return core_ts_lib_1.DateService.addYears(basisDate, frequency.everyXTimeUnit.x);
28
+ return DateService.addYears(basisDate, frequency.everyXTimeUnit.x);
31
29
  }
32
30
  }
33
31
  // Week Day Set
34
- if (frequency.type === RecurrenceInfo_1.RecurrenceFrequencyType.weekDaySet) {
32
+ if (frequency.type === RecurrenceFrequencyType.weekDaySet) {
35
33
  if (!frequency.weekDaySet) {
36
34
  return null;
37
35
  }
@@ -46,18 +44,18 @@ class DashboardTaskRecurrenceService {
46
44
  }
47
45
  }
48
46
  // Every X Weekday of Month
49
- if (frequency.type === RecurrenceInfo_1.RecurrenceFrequencyType.everyXWeekdayOfMonth) {
47
+ if (frequency.type === RecurrenceFrequencyType.everyXWeekdayOfMonth) {
50
48
  if (!frequency.everyXWeekdayOfMonth) {
51
49
  return null;
52
50
  }
53
51
  // Start by adding one day
54
- let newDate = core_ts_lib_1.DateService.getWeekDayOfXWeekOfMonth(core_ts_lib_1.DateService.addDays(basisDate, 1), frequency.everyXWeekdayOfMonth.weekDay, frequency.everyXWeekdayOfMonth.weekOfMonth);
52
+ let newDate = DateService.getWeekDayOfXWeekOfMonth(DateService.addDays(basisDate, 1), frequency.everyXWeekdayOfMonth.weekDay, frequency.everyXWeekdayOfMonth.weekOfMonth);
55
53
  let monthsPassed = 0;
56
54
  while (!newDate ||
57
55
  newDate < basisDate ||
58
56
  newDate.getTime() === basisDate.getTime()) {
59
57
  monthsPassed += 1;
60
- newDate = core_ts_lib_1.DateService.getWeekDayOfXWeekOfMonth(core_ts_lib_1.DateService.addMonths(basisDate, monthsPassed), frequency.everyXWeekdayOfMonth.weekDay, frequency.everyXWeekdayOfMonth.weekOfMonth);
58
+ newDate = DateService.getWeekDayOfXWeekOfMonth(DateService.addMonths(basisDate, monthsPassed), frequency.everyXWeekdayOfMonth.weekDay, frequency.everyXWeekdayOfMonth.weekOfMonth);
61
59
  if (monthsPassed > 11) {
62
60
  return null;
63
61
  }
@@ -86,32 +84,32 @@ class DashboardTaskRecurrenceService {
86
84
  // No dates to move forward
87
85
  (!task.dueDate && !task.startDate) ||
88
86
  // Invalid start date recurrence basis
89
- (task.recurrenceInfo.recurrenceBasis === RecurrenceInfo_1.RecurrenceBasis.startDate &&
87
+ (task.recurrenceInfo.recurrenceBasis === RecurrenceBasis.startDate &&
90
88
  !task.parentRecurringTaskInfo.startDate) ||
91
89
  // Invalid due date recurrence basis
92
- (task.recurrenceInfo.recurrenceBasis === RecurrenceInfo_1.RecurrenceBasis.dueDate &&
90
+ (task.recurrenceInfo.recurrenceBasis === RecurrenceBasis.dueDate &&
93
91
  !task.parentRecurringTaskInfo.dueDate)) {
94
92
  return;
95
93
  }
96
94
  // Validation for moving dates based on their own recurrence
97
95
  }
98
96
  else if (!task.recurrenceInfo ||
99
- (task.recurrenceInfo.recurrenceBasis === RecurrenceInfo_1.RecurrenceBasis.startDate &&
97
+ (task.recurrenceInfo.recurrenceBasis === RecurrenceBasis.startDate &&
100
98
  !task.startDate) ||
101
- (task.recurrenceInfo.recurrenceBasis === RecurrenceInfo_1.RecurrenceBasis.dueDate &&
99
+ (task.recurrenceInfo.recurrenceBasis === RecurrenceBasis.dueDate &&
102
100
  !task.dueDate)) {
103
101
  return;
104
102
  }
105
103
  let diff = 0;
106
104
  if (task.parentRecurringTaskInfo) {
107
- if (task.recurrenceInfo.recurrenceBasis === RecurrenceInfo_1.RecurrenceBasis.startDate) {
105
+ if (task.recurrenceInfo.recurrenceBasis === RecurrenceBasis.startDate) {
108
106
  diff = this.getDiffForDateUpdate(task.parentRecurringTaskInfo.startDate, task.recurrenceInfo.frequency);
109
107
  }
110
108
  else {
111
109
  diff = this.getDiffForDateUpdate(task.parentRecurringTaskInfo.dueDate, task.recurrenceInfo.frequency);
112
110
  }
113
111
  }
114
- else if (task.recurrenceInfo.recurrenceBasis === RecurrenceInfo_1.RecurrenceBasis.startDate) {
112
+ else if (task.recurrenceInfo.recurrenceBasis === RecurrenceBasis.startDate) {
115
113
  diff = this.getDiffForDateUpdate(task.startDate, task.recurrenceInfo.frequency);
116
114
  }
117
115
  else {
@@ -135,4 +133,4 @@ class DashboardTaskRecurrenceService {
135
133
  return nextFrequencyDate.getTime() - basisDate.getTime();
136
134
  }
137
135
  }
138
- exports.default = DashboardTaskRecurrenceService;
136
+ //# sourceMappingURL=TaskRecurrenceService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskRecurrenceService.js","sourceRoot":"./src/","sources":["services/dashboard/Task/TaskRecurrenceService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EACL,eAAe,EAEf,uBAAuB,EACxB,MAAM,0DAA0D,CAAC;AAElE,MAAM,CAAC,OAAO,OAAO,8BAA8B;IACjD;;;OAGG;IACH,MAAM,CAAC,oBAAoB,CAAC,SAAe,EAAE,SAA8B;QACzE,oBAAoB;QACpB,IAAI,SAAS,CAAC,IAAI,KAAK,uBAAuB,CAAC,cAAc,EAAE,CAAC;YAC9D,OAAO,WAAW,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;QACvD,CAAC;QACD,oBAAoB;QACpB,IAAI,SAAS,CAAC,IAAI,KAAK,uBAAuB,CAAC,cAAc,EAAE,CAAC;YAC9D,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,SAAS,CAAC,cAAc,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;gBAChD,OAAO,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACpE,CAAC;YACD,IAAI,SAAS,CAAC,cAAc,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACjD,OAAO,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxE,CAAC;YACD,IAAI,SAAS,CAAC,cAAc,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAClD,OAAO,WAAW,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACtE,CAAC;YACD,IAAI,SAAS,CAAC,cAAc,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACjD,OAAO,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QACD,eAAe;QACf,IAAI,SAAS,CAAC,IAAI,KAAK,uBAAuB,CAAC,UAAU,EAAE,CAAC;YAC1D,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,OAAO,SAAS,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;gBACvC,IAAI,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;oBACpD,OAAO,OAAO,CAAC;gBACjB,CAAC;gBACD,SAAS,IAAI,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QACD,2BAA2B;QAC3B,IAAI,SAAS,CAAC,IAAI,KAAK,uBAAuB,CAAC,oBAAoB,EAAE,CAAC;YACpE,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,CAAC;gBACpC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,0BAA0B;YAC1B,IAAI,OAAO,GAAG,WAAW,CAAC,wBAAwB,CAChD,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EACjC,SAAS,CAAC,oBAAoB,CAAC,OAAO,EACtC,SAAS,CAAC,oBAAoB,CAAC,WAAW,CAC3C,CAAC;YACF,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,OACE,CAAC,OAAO;gBACR,OAAO,GAAG,SAAS;gBACnB,OAAO,CAAC,OAAO,EAAE,KAAK,SAAS,CAAC,OAAO,EAAE,EACzC,CAAC;gBACD,YAAY,IAAI,CAAC,CAAC;gBAClB,OAAO,GAAG,WAAW,CAAC,wBAAwB,CAC5C,WAAW,CAAC,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC,EAC9C,SAAS,CAAC,oBAAoB,CAAC,OAAO,EACtC,SAAS,CAAC,oBAAoB,CAAC,WAAW,CAC3C,CAAC;gBACF,IAAI,YAAY,GAAG,EAAE,EAAE,CAAC;oBACtB,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,wBAAwB,CAAC,IAAmB;QACjD,2BAA2B;QAC3B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QACD,uCAAuC;QACvC,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACjC;YACE,2BAA2B;YAC3B,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;gBAClC,sCAAsC;gBACtC,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS;oBAChE,CAAC,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC;gBAC1C,oCAAoC;gBACpC,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,KAAK,eAAe,CAAC,OAAO;oBAC9D,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,EACxC,CAAC;gBACD,OAAO;YACT,CAAC;YACD,4DAA4D;QAC9D,CAAC;aAAM,IACL,CAAC,IAAI,CAAC,cAAc;YACpB,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS;gBAChE,CAAC,IAAI,CAAC,SAAS,CAAC;YAClB,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,KAAK,eAAe,CAAC,OAAO;gBAC9D,CAAC,IAAI,CAAC,OAAO,CAAC,EAChB,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,GAAG,CAAC,CAAC;QAEb,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,cAAc,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;gBACtE,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAC9B,IAAI,CAAC,uBAAuB,CAAC,SAAS,EACtC,IAAI,CAAC,cAAc,CAAC,SAAS,CAC9B,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAC9B,IAAI,CAAC,uBAAuB,CAAC,OAAO,EACpC,IAAI,CAAC,cAAc,CAAC,SAAS,CAC9B,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IACL,IAAI,CAAC,cAAc,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,EACjE,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAC9B,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,cAAc,CAAC,SAAS,CAC9B,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAC9B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,cAAc,CAAC,SAAS,CAC9B,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,oBAAoB,CACjC,SAA2B,EAC3B,SAA8B;QAE9B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC1E,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,iBAAiB,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;IAC3D,CAAC;CACF"}
@@ -0,0 +1,172 @@
1
+ import { DateService } from '@aneuhold/core-ts-lib';
2
+ import DashboardTask from '../../../documents/dashboard/Task.js';
3
+ import {
4
+ RecurrenceBasis,
5
+ RecurrenceFrequency,
6
+ RecurrenceFrequencyType
7
+ } from '../../../embedded-types/dashboard/task/RecurrenceInfo.js';
8
+
9
+ export default class DashboardTaskRecurrenceService {
10
+ /**
11
+ * Gets the next frequency date from the provided basis date. Returns null
12
+ * if the provided frequency is in an invalid state.
13
+ */
14
+ static getNextFrequencyDate(basisDate: Date, frequency: RecurrenceFrequency) {
15
+ // Last day of month
16
+ if (frequency.type === RecurrenceFrequencyType.lastDayOfMonth) {
17
+ return DateService.getLastDayOfGivenMonth(basisDate);
18
+ }
19
+ // Every X Time Unit
20
+ if (frequency.type === RecurrenceFrequencyType.everyXTimeUnit) {
21
+ if (!frequency.everyXTimeUnit) {
22
+ return null;
23
+ }
24
+ if (frequency.everyXTimeUnit.timeUnit === 'day') {
25
+ return DateService.addDays(basisDate, frequency.everyXTimeUnit.x);
26
+ }
27
+ if (frequency.everyXTimeUnit.timeUnit === 'week') {
28
+ return DateService.addDays(basisDate, frequency.everyXTimeUnit.x * 7);
29
+ }
30
+ if (frequency.everyXTimeUnit.timeUnit === 'month') {
31
+ return DateService.addMonths(basisDate, frequency.everyXTimeUnit.x);
32
+ }
33
+ if (frequency.everyXTimeUnit.timeUnit === 'year') {
34
+ return DateService.addYears(basisDate, frequency.everyXTimeUnit.x);
35
+ }
36
+ }
37
+ // Week Day Set
38
+ if (frequency.type === RecurrenceFrequencyType.weekDaySet) {
39
+ if (!frequency.weekDaySet) {
40
+ return null;
41
+ }
42
+ const newDate = new Date(basisDate);
43
+ let daysToAdd = 0;
44
+ while (daysToAdd < 7) {
45
+ newDate.setDate(newDate.getDate() + 1);
46
+ if (frequency.weekDaySet.includes(newDate.getDay())) {
47
+ return newDate;
48
+ }
49
+ daysToAdd += 1;
50
+ }
51
+ }
52
+ // Every X Weekday of Month
53
+ if (frequency.type === RecurrenceFrequencyType.everyXWeekdayOfMonth) {
54
+ if (!frequency.everyXWeekdayOfMonth) {
55
+ return null;
56
+ }
57
+ // Start by adding one day
58
+ let newDate = DateService.getWeekDayOfXWeekOfMonth(
59
+ DateService.addDays(basisDate, 1),
60
+ frequency.everyXWeekdayOfMonth.weekDay,
61
+ frequency.everyXWeekdayOfMonth.weekOfMonth
62
+ );
63
+ let monthsPassed = 0;
64
+ while (
65
+ !newDate ||
66
+ newDate < basisDate ||
67
+ newDate.getTime() === basisDate.getTime()
68
+ ) {
69
+ monthsPassed += 1;
70
+ newDate = DateService.getWeekDayOfXWeekOfMonth(
71
+ DateService.addMonths(basisDate, monthsPassed),
72
+ frequency.everyXWeekdayOfMonth.weekDay,
73
+ frequency.everyXWeekdayOfMonth.weekOfMonth
74
+ );
75
+ if (monthsPassed > 11) {
76
+ return null;
77
+ }
78
+ }
79
+ return newDate;
80
+ }
81
+ return null;
82
+ }
83
+
84
+ /**
85
+ * Moves the start and due date forward by one frequency.
86
+ *
87
+ * This does not take into account the recurrence effect. That should be
88
+ * handled on the frontend.
89
+ *
90
+ * Makes no changes if the state of the task is invalid for recurrence or
91
+ * there isn't recurrence info.
92
+ */
93
+ static updateDatesForRecurrence(task: DashboardTask): void {
94
+ // Initial basic validation
95
+ if (!task.recurrenceInfo) {
96
+ return;
97
+ }
98
+ // Validation for dates based on parent
99
+ if (task.parentRecurringTaskInfo) {
100
+ if (
101
+ // No dates to move forward
102
+ (!task.dueDate && !task.startDate) ||
103
+ // Invalid start date recurrence basis
104
+ (task.recurrenceInfo.recurrenceBasis === RecurrenceBasis.startDate &&
105
+ !task.parentRecurringTaskInfo.startDate) ||
106
+ // Invalid due date recurrence basis
107
+ (task.recurrenceInfo.recurrenceBasis === RecurrenceBasis.dueDate &&
108
+ !task.parentRecurringTaskInfo.dueDate)
109
+ ) {
110
+ return;
111
+ }
112
+ // Validation for moving dates based on their own recurrence
113
+ } else if (
114
+ !task.recurrenceInfo ||
115
+ (task.recurrenceInfo.recurrenceBasis === RecurrenceBasis.startDate &&
116
+ !task.startDate) ||
117
+ (task.recurrenceInfo.recurrenceBasis === RecurrenceBasis.dueDate &&
118
+ !task.dueDate)
119
+ ) {
120
+ return;
121
+ }
122
+
123
+ let diff = 0;
124
+
125
+ if (task.parentRecurringTaskInfo) {
126
+ if (task.recurrenceInfo.recurrenceBasis === RecurrenceBasis.startDate) {
127
+ diff = this.getDiffForDateUpdate(
128
+ task.parentRecurringTaskInfo.startDate,
129
+ task.recurrenceInfo.frequency
130
+ );
131
+ } else {
132
+ diff = this.getDiffForDateUpdate(
133
+ task.parentRecurringTaskInfo.dueDate,
134
+ task.recurrenceInfo.frequency
135
+ );
136
+ }
137
+ } else if (
138
+ task.recurrenceInfo.recurrenceBasis === RecurrenceBasis.startDate
139
+ ) {
140
+ diff = this.getDiffForDateUpdate(
141
+ task.startDate,
142
+ task.recurrenceInfo.frequency
143
+ );
144
+ } else {
145
+ diff = this.getDiffForDateUpdate(
146
+ task.dueDate,
147
+ task.recurrenceInfo.frequency
148
+ );
149
+ }
150
+
151
+ if (task.startDate) {
152
+ task.startDate = new Date(task.startDate.getTime() + diff);
153
+ }
154
+ if (task.dueDate) {
155
+ task.dueDate = new Date(task.dueDate.getTime() + diff);
156
+ }
157
+ }
158
+
159
+ private static getDiffForDateUpdate(
160
+ basisDate: Date | undefined,
161
+ frequency: RecurrenceFrequency
162
+ ) {
163
+ if (!basisDate) {
164
+ return 0;
165
+ }
166
+ const nextFrequencyDate = this.getNextFrequencyDate(basisDate, frequency);
167
+ if (!nextFrequencyDate) {
168
+ return 0;
169
+ }
170
+ return nextFrequencyDate.getTime() - basisDate.getTime();
171
+ }
172
+ }
@@ -1,9 +1,9 @@
1
1
  import { ObjectId } from 'bson';
2
- import DashboardTask, { DashboardTaskMap } from '../../../documents/dashboard/Task';
3
- import { DashboardTaskListFilterSettings } from '../../../embedded-types/dashboard/task/FilterSettings';
4
- import { DashboardTaskListSortSettings, DashboardTaskSortDirection } from '../../../embedded-types/dashboard/task/SortSettings';
5
- import { DashboardTagSettings } from '../../../embedded-types/dashboard/userConfig/Tags';
6
- import { RecurrenceFrequency } from '../../../embedded-types/dashboard/task/RecurrenceInfo';
2
+ import DashboardTask, { DashboardTaskMap } from '../../../documents/dashboard/Task.js';
3
+ import { DashboardTaskListFilterSettings } from '../../../embedded-types/dashboard/task/FilterSettings.js';
4
+ import { RecurrenceFrequency } from '../../../embedded-types/dashboard/task/RecurrenceInfo.js';
5
+ import { DashboardTaskListSortSettings, DashboardTaskSortDirection } from '../../../embedded-types/dashboard/task/SortSettings.js';
6
+ import { DashboardTagSettings } from '../../../embedded-types/dashboard/userConfig/Tags.js';
7
7
  /**
8
8
  * A type for the task filter settings for a particular task.
9
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"TaskService.d.ts","sourceRoot":"","sources":["../../../../src/services/dashboard/Task/TaskService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,aAAa,EAAE,EACpB,gBAAgB,EACjB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,+BAA+B,EAAE,MAAM,uDAAuD,CAAC;AACxG,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC3B,MAAM,qDAAqD,CAAC;AAK7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mDAAmD,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uDAAuD,CAAC;AAE5F;;GAEG;AACH,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B;;;;OAIG;IACH,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,oBAAoB;IACvC;;OAEG;IACH,MAAM,CAAC,cAAc,iBACL,aAAa,EAAE,iBACd,QAAQ,EAAE,KACxB,QAAQ,EAAE,CA2BX;IAEF;;;OAGG;IACH,MAAM,CAAC,oBAAoB,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,mBAAmB;IAO3E;;;;;;;;OAQG;IACH,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,aAAa;IAInD;;;;;;;OAOG;IACH,MAAM,CAAC,2BAA2B,CAChC,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,+BAA+B,EAC/C,YAAY,EAAE,6BAA6B,EAC3C,WAAW,EAAE,oBAAoB,EACjC,QAAQ,CAAC,EAAE,2BAA2B,GACrC,gCAAgC;IA8BnC;;;;OAIG;IACH,MAAM,CAAC,eAAe,CACpB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,oBAAoB,EACjC,uBAAuB,EAAE,MAAM,EAC/B,aAAa,EAAE,0BAA0B;IAY3C,OAAO,CAAC,MAAM,CAAC,kBAAkB;CAsBlC"}
1
+ {"version":3,"file":"TaskService.d.ts","sourceRoot":"./src/","sources":["services/dashboard/Task/TaskService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,aAAa,EAAE,EACpB,gBAAgB,EACjB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,+BAA+B,EAAE,MAAM,0DAA0D,CAAC;AAC3G,OAAO,EAAE,mBAAmB,EAAE,MAAM,0DAA0D,CAAC;AAC/F,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC3B,MAAM,wDAAwD,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sDAAsD,CAAC;AAO5F;;GAEG;AACH,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B;;;;OAIG;IACH,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,oBAAoB;IACvC;;OAEG;IACH,MAAM,CAAC,cAAc,iBACL,aAAa,EAAE,iBACd,QAAQ,EAAE,KACxB,QAAQ,EAAE,CA2BX;IAEF;;;OAGG;IACH,MAAM,CAAC,oBAAoB,CACzB,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,mBAAmB,GAC7B,IAAI,GAAG,IAAI;IAOd;;;;;;;;OAQG;IACH,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAI1D;;;;;;;OAOG;IACH,MAAM,CAAC,2BAA2B,CAChC,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,+BAA+B,EAC/C,YAAY,EAAE,6BAA6B,EAC3C,WAAW,EAAE,oBAAoB,EACjC,QAAQ,CAAC,EAAE,2BAA2B,GACrC,gCAAgC;IA8BnC;;;;OAIG;IACH,MAAM,CAAC,eAAe,CACpB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,oBAAoB,EACjC,uBAAuB,EAAE,MAAM,EAC/B,aAAa,EAAE,0BAA0B,GACxC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAWzB,OAAO,CAAC,MAAM,CAAC,kBAAkB;CAsBlC"}
@@ -1,13 +1,8 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const bson_1 = require("bson");
7
- const TaskRecurrenceService_1 = __importDefault(require("./TaskRecurrenceService"));
8
- const TaskFilterService_1 = __importDefault(require("./TaskFilterService"));
9
- const TaskSortService_1 = __importDefault(require("./TaskSortService"));
10
- class DashboardTaskService {
1
+ import { ObjectId } from 'bson';
2
+ import DashboardTaskFilterService from './TaskFilterService.js';
3
+ import DashboardTaskRecurrenceService from './TaskRecurrenceService.js';
4
+ import DashboardTaskSortService from './TaskSortService.js';
5
+ export default class DashboardTaskService {
11
6
  /**
12
7
  * Gets all the children task IDs for the given parent task IDs.
13
8
  */
@@ -28,7 +23,7 @@ class DashboardTaskService {
28
23
  const task = taskIdToTaskDict[taskId.toString()];
29
24
  if (task) {
30
25
  const childrenTaskIds = this.getChildrenTaskIds(taskIdToTaskDict, parentToTaskIdsDict, taskId.toString());
31
- childrenIds.push(...childrenTaskIds.map((id) => new bson_1.ObjectId(id)));
26
+ childrenIds.push(...childrenTaskIds.map((id) => new ObjectId(id)));
32
27
  }
33
28
  });
34
29
  return childrenIds;
@@ -38,7 +33,7 @@ class DashboardTaskService {
38
33
  * if the provided frequency is in an invalid state.
39
34
  */
40
35
  static getNextFrequencyDate(basisDate, frequency) {
41
- return TaskRecurrenceService_1.default.getNextFrequencyDate(basisDate, frequency);
36
+ return DashboardTaskRecurrenceService.getNextFrequencyDate(basisDate, frequency);
42
37
  }
43
38
  /**
44
39
  * Moves the start and due date forward by one frequency.
@@ -50,7 +45,7 @@ class DashboardTaskService {
50
45
  * there isn't recurrence info.
51
46
  */
52
47
  static updateDatesForRecurrence(task) {
53
- TaskRecurrenceService_1.default.updateDatesForRecurrence(task);
48
+ DashboardTaskRecurrenceService.updateDatesForRecurrence(task);
54
49
  }
55
50
  /**
56
51
  * Gets the filtered and sorted set of task ids for a particular category.
@@ -63,13 +58,13 @@ class DashboardTaskService {
63
58
  static getFilteredAndSortedTaskIds(taskMap, category, filterSettings, sortSettings, tagSettings, taskInfo) {
64
59
  let filterResult;
65
60
  if (!taskInfo) {
66
- filterResult = TaskFilterService_1.default.filter(taskMap, Object.keys(taskMap), filterSettings, category);
61
+ filterResult = DashboardTaskFilterService.filter(taskMap, Object.keys(taskMap), filterSettings, category);
67
62
  }
68
63
  else {
69
- filterResult = TaskFilterService_1.default.filter(taskMap, taskInfo.allChildrenIds, filterSettings, category, taskInfo.taskId);
64
+ filterResult = DashboardTaskFilterService.filter(taskMap, taskInfo.allChildrenIds, filterSettings, category, taskInfo.taskId);
70
65
  }
71
66
  return {
72
- filteredAndSortedIds: TaskSortService_1.default.sort(taskMap, filterResult.resultIds, sortSettings, tagSettings),
67
+ filteredAndSortedIds: DashboardTaskSortService.sort(taskMap, filterResult.resultIds, sortSettings, tagSettings),
73
68
  removedIds: filterResult.removedIds
74
69
  };
75
70
  }
@@ -79,7 +74,7 @@ class DashboardTaskService {
79
74
  * noPriorityTagsIndicator will be used as the header name.
80
75
  */
81
76
  static getTagHeaderMap(taskMap, taskIds, userId, tagSettings, noPriorityTagsIndicator, sortDirection) {
82
- return TaskSortService_1.default.getTagHeaderMap(taskMap, taskIds, userId, tagSettings, noPriorityTagsIndicator, sortDirection);
77
+ return DashboardTaskSortService.getTagHeaderMap(taskMap, taskIds, userId, tagSettings, noPriorityTagsIndicator, sortDirection);
83
78
  }
84
79
  static getChildrenTaskIds(taskIdToTaskDict, parentToTaskIdsDict, taskId) {
85
80
  const childrenIds = parentToTaskIdsDict[taskId];
@@ -96,4 +91,4 @@ class DashboardTaskService {
96
91
  return childrenIds;
97
92
  }
98
93
  }
99
- exports.default = DashboardTaskService;
94
+ //# sourceMappingURL=TaskService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskService.js","sourceRoot":"./src/","sources":["services/dashboard/Task/TaskService.ts"],"names":[],"mappings":"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"}