@aneuhold/core-ts-db-lib 1.0.121 → 2.0.1
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/LICENSE +21 -0
- package/README.md +48 -5
- package/lib/documents/BaseDocument.d.ts +1 -1
- package/lib/documents/BaseDocument.d.ts.map +1 -1
- package/lib/documents/BaseDocument.js +4 -6
- package/lib/documents/BaseDocument.js.map +1 -0
- package/lib/documents/BaseDocument.ts +9 -0
- package/lib/documents/BaseDocumentWithType.d.ts +1 -1
- package/lib/documents/BaseDocumentWithType.d.ts.map +1 -1
- package/lib/documents/BaseDocumentWithType.js +3 -8
- package/lib/documents/BaseDocumentWithType.js.map +1 -0
- package/lib/documents/BaseDocumentWithType.ts +5 -0
- package/lib/documents/common/ApiKey.d.ts +5 -4
- package/lib/documents/common/ApiKey.d.ts.map +1 -1
- package/lib/documents/common/ApiKey.js +10 -17
- package/lib/documents/common/ApiKey.js.map +1 -0
- package/lib/documents/common/ApiKey.ts +40 -0
- package/lib/documents/common/User.d.ts +2 -2
- package/lib/documents/common/User.d.ts.map +1 -1
- package/lib/documents/common/User.js +8 -15
- package/lib/documents/common/User.js.map +1 -0
- package/lib/documents/common/User.ts +63 -0
- package/lib/documents/dashboard/NonogramKatanaItem.d.ts +4 -4
- package/lib/documents/dashboard/NonogramKatanaItem.d.ts.map +1 -1
- package/lib/documents/dashboard/NonogramKatanaItem.js +4 -11
- package/lib/documents/dashboard/NonogramKatanaItem.js.map +1 -0
- package/lib/documents/dashboard/NonogramKatanaItem.ts +53 -0
- package/lib/documents/dashboard/NonogramKatanaUpgrade.d.ts +5 -5
- package/lib/documents/dashboard/NonogramKatanaUpgrade.d.ts.map +1 -1
- package/lib/documents/dashboard/NonogramKatanaUpgrade.js +4 -11
- package/lib/documents/dashboard/NonogramKatanaUpgrade.js.map +1 -0
- package/lib/documents/dashboard/NonogramKatanaUpgrade.ts +50 -0
- package/lib/documents/dashboard/Task.d.ts +7 -7
- package/lib/documents/dashboard/Task.d.ts.map +1 -1
- package/lib/documents/dashboard/Task.js +10 -17
- package/lib/documents/dashboard/Task.js.map +1 -0
- package/lib/documents/dashboard/Task.ts +173 -0
- package/lib/documents/dashboard/UserConfig.d.ts +6 -6
- package/lib/documents/dashboard/UserConfig.d.ts.map +1 -1
- package/lib/documents/dashboard/UserConfig.js +12 -19
- package/lib/documents/dashboard/UserConfig.js.map +1 -0
- package/lib/documents/dashboard/UserConfig.ts +110 -0
- package/lib/embedded-types/dashboard/nonogramKatanaItem/ItemName.d.ts.map +1 -1
- package/lib/embedded-types/dashboard/nonogramKatanaItem/ItemName.js +2 -3
- package/lib/embedded-types/dashboard/nonogramKatanaItem/ItemName.js.map +1 -0
- package/lib/embedded-types/dashboard/nonogramKatanaItem/ItemName.ts +97 -0
- package/lib/embedded-types/dashboard/nonogramKatanaUpgrade/UpgradeName.d.ts.map +1 -1
- package/lib/embedded-types/dashboard/nonogramKatanaUpgrade/UpgradeName.js +2 -3
- package/lib/embedded-types/dashboard/nonogramKatanaUpgrade/UpgradeName.js.map +1 -0
- package/lib/embedded-types/dashboard/nonogramKatanaUpgrade/UpgradeName.ts +263 -0
- package/lib/embedded-types/dashboard/task/FilterSettings.d.ts +2 -2
- package/lib/embedded-types/dashboard/task/FilterSettings.d.ts.map +1 -1
- package/lib/embedded-types/dashboard/task/FilterSettings.js +3 -6
- package/lib/embedded-types/dashboard/task/FilterSettings.js.map +1 -0
- package/lib/embedded-types/dashboard/task/FilterSettings.ts +100 -0
- package/lib/embedded-types/dashboard/task/RecurrenceInfo.d.ts +1 -1
- package/lib/embedded-types/dashboard/task/RecurrenceInfo.d.ts.map +1 -1
- package/lib/embedded-types/dashboard/task/RecurrenceInfo.js +8 -11
- package/lib/embedded-types/dashboard/task/RecurrenceInfo.js.map +1 -0
- package/lib/embedded-types/dashboard/task/RecurrenceInfo.ts +100 -0
- package/lib/embedded-types/dashboard/task/SortSettings.d.ts +2 -2
- package/lib/embedded-types/dashboard/task/SortSettings.d.ts.map +1 -1
- package/lib/embedded-types/dashboard/task/SortSettings.js +7 -11
- package/lib/embedded-types/dashboard/task/SortSettings.js.map +1 -0
- package/lib/embedded-types/dashboard/task/SortSettings.ts +89 -0
- package/lib/embedded-types/dashboard/userConfig/Tags.d.ts.map +1 -1
- package/lib/embedded-types/dashboard/userConfig/Tags.js +2 -2
- package/lib/embedded-types/dashboard/userConfig/Tags.js.map +1 -0
- package/lib/embedded-types/dashboard/userConfig/Tags.ts +9 -0
- package/lib/index.d.ts +20 -20
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +19 -71
- package/lib/index.js.map +1 -0
- package/lib/index.ts +103 -0
- package/lib/schemas/required-refs/RequiredUserId.d.ts +1 -1
- package/lib/schemas/required-refs/RequiredUserId.d.ts.map +1 -1
- package/lib/schemas/required-refs/RequiredUserId.js +3 -8
- package/lib/schemas/required-refs/RequiredUserId.js.map +1 -0
- package/lib/schemas/required-refs/RequiredUserId.ts +9 -0
- package/lib/schemas/type-guards/commonTypeGuards.d.ts.map +1 -1
- package/lib/schemas/type-guards/commonTypeGuards.js +6 -12
- package/lib/schemas/type-guards/commonTypeGuards.js.map +1 -0
- package/lib/schemas/type-guards/commonTypeGuards.ts +29 -0
- package/lib/schemas/validators/DocumentValidator.d.ts +1 -1
- package/lib/schemas/validators/DocumentValidator.d.ts.map +1 -1
- package/lib/schemas/validators/DocumentValidator.js +2 -2
- package/lib/schemas/validators/DocumentValidator.js.map +1 -0
- package/lib/schemas/validators/DocumentValidator.ts +5 -0
- package/lib/schemas/validators/ValidateUtil.d.ts.map +1 -1
- package/lib/schemas/validators/ValidateUtil.js +8 -10
- package/lib/schemas/validators/ValidateUtil.js.map +1 -0
- package/lib/schemas/validators/ValidateUtil.spec.ts +75 -0
- package/lib/schemas/validators/ValidateUtil.ts +193 -0
- package/lib/services/DocumentService.d.ts +1 -1
- package/lib/services/DocumentService.d.ts.map +1 -1
- package/lib/services/DocumentService.js +4 -6
- package/lib/services/DocumentService.js.map +1 -0
- package/lib/services/DocumentService.spec.ts +28 -0
- package/lib/services/DocumentService.ts +18 -0
- package/lib/services/dashboard/Task/TaskFilterService.d.ts +2 -2
- package/lib/services/dashboard/Task/TaskFilterService.d.ts.map +1 -1
- package/lib/services/dashboard/Task/TaskFilterService.js +2 -4
- package/lib/services/dashboard/Task/TaskFilterService.js.map +1 -0
- package/lib/services/dashboard/Task/TaskFilterService.ts +105 -0
- package/lib/services/dashboard/Task/TaskRecurrenceService.d.ts +2 -2
- package/lib/services/dashboard/Task/TaskRecurrenceService.d.ts.map +1 -1
- package/lib/services/dashboard/Task/TaskRecurrenceService.js +21 -23
- package/lib/services/dashboard/Task/TaskRecurrenceService.js.map +1 -0
- package/lib/services/dashboard/Task/TaskRecurrenceService.ts +172 -0
- package/lib/services/dashboard/Task/TaskService.d.ts +5 -5
- package/lib/services/dashboard/Task/TaskService.d.ts.map +1 -1
- package/lib/services/dashboard/Task/TaskService.js +13 -18
- package/lib/services/dashboard/Task/TaskService.js.map +1 -0
- package/lib/services/dashboard/Task/TaskService.spec.ts +653 -0
- package/lib/services/dashboard/Task/TaskService.ts +189 -0
- package/lib/services/dashboard/Task/TaskSortService.d.ts +3 -3
- package/lib/services/dashboard/Task/TaskSortService.d.ts.map +1 -1
- package/lib/services/dashboard/Task/TaskSortService.js +6 -8
- package/lib/services/dashboard/Task/TaskSortService.js.map +1 -0
- package/lib/services/dashboard/Task/TaskSortService.ts +229 -0
- package/package.json +35 -28
- package/lib/schemas/validators/ValidateUtil.spec.d.ts +0 -2
- package/lib/schemas/validators/ValidateUtil.spec.d.ts.map +0 -1
- package/lib/schemas/validators/ValidateUtil.spec.js +0 -64
- package/lib/services/DocumentService.spec.d.ts +0 -2
- package/lib/services/DocumentService.spec.d.ts.map +0 -1
- package/lib/services/DocumentService.spec.js +0 -30
- package/lib/services/dashboard/Task/TaskService.spec.d.ts +0 -2
- package/lib/services/dashboard/Task/TaskService.spec.d.ts.map +0 -1
- package/lib/services/dashboard/Task/TaskService.spec.js +0 -508
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { ObjectId } from 'bson';
|
|
2
|
+
import DashboardTask, {
|
|
3
|
+
DashboardTaskMap
|
|
4
|
+
} from '../../../documents/dashboard/Task.js';
|
|
5
|
+
import { DashboardTaskListFilterSettings } from '../../../embedded-types/dashboard/task/FilterSettings.js';
|
|
6
|
+
import { RecurrenceFrequency } from '../../../embedded-types/dashboard/task/RecurrenceInfo.js';
|
|
7
|
+
import {
|
|
8
|
+
DashboardTaskListSortSettings,
|
|
9
|
+
DashboardTaskSortDirection
|
|
10
|
+
} from '../../../embedded-types/dashboard/task/SortSettings.js';
|
|
11
|
+
import { DashboardTagSettings } from '../../../embedded-types/dashboard/userConfig/Tags.js';
|
|
12
|
+
import DashboardTaskFilterService, {
|
|
13
|
+
DashboardTaskFilterResult
|
|
14
|
+
} from './TaskFilterService.js';
|
|
15
|
+
import DashboardTaskRecurrenceService from './TaskRecurrenceService.js';
|
|
16
|
+
import DashboardTaskSortService from './TaskSortService.js';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* A type for the task filter settings for a particular task.
|
|
20
|
+
*/
|
|
21
|
+
export type DashboardTaskFilterTaskInfo = {
|
|
22
|
+
taskId: string;
|
|
23
|
+
allChildrenIds: string[];
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export type DashboardTaskFilterAndSortResult = {
|
|
27
|
+
filteredAndSortedIds: string[];
|
|
28
|
+
/**
|
|
29
|
+
* The IDs of the tasks that were filtered, but still apply to the same
|
|
30
|
+
* category. Does not include tasks that were filtered because of grand
|
|
31
|
+
* children tasks.
|
|
32
|
+
*/
|
|
33
|
+
removedIds: string[];
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export default class DashboardTaskService {
|
|
37
|
+
/**
|
|
38
|
+
* Gets all the children task IDs for the given parent task IDs.
|
|
39
|
+
*/
|
|
40
|
+
static getChildrenIds = (
|
|
41
|
+
allUserTasks: DashboardTask[],
|
|
42
|
+
parentTaskIds: ObjectId[]
|
|
43
|
+
): ObjectId[] => {
|
|
44
|
+
const parentToTaskIdsDict: Record<string, string[]> = {};
|
|
45
|
+
const taskIdToTaskDict: Record<string, DashboardTask> = {};
|
|
46
|
+
allUserTasks.forEach((task) => {
|
|
47
|
+
taskIdToTaskDict[task._id.toString()] = task;
|
|
48
|
+
if (task.parentTaskId) {
|
|
49
|
+
if (!parentToTaskIdsDict[task.parentTaskId.toString()]) {
|
|
50
|
+
parentToTaskIdsDict[task.parentTaskId.toString()] = [];
|
|
51
|
+
}
|
|
52
|
+
parentToTaskIdsDict[task.parentTaskId.toString()].push(
|
|
53
|
+
task._id.toString()
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
const childrenIds: ObjectId[] = [];
|
|
58
|
+
parentTaskIds.forEach((taskId) => {
|
|
59
|
+
const task = taskIdToTaskDict[taskId.toString()];
|
|
60
|
+
if (task) {
|
|
61
|
+
const childrenTaskIds = this.getChildrenTaskIds(
|
|
62
|
+
taskIdToTaskDict,
|
|
63
|
+
parentToTaskIdsDict,
|
|
64
|
+
taskId.toString()
|
|
65
|
+
);
|
|
66
|
+
childrenIds.push(...childrenTaskIds.map((id) => new ObjectId(id)));
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
return childrenIds;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Gets the next frequency date from the provided basis date. Returns null
|
|
74
|
+
* if the provided frequency is in an invalid state.
|
|
75
|
+
*/
|
|
76
|
+
static getNextFrequencyDate(
|
|
77
|
+
basisDate: Date,
|
|
78
|
+
frequency: RecurrenceFrequency
|
|
79
|
+
): Date | null {
|
|
80
|
+
return DashboardTaskRecurrenceService.getNextFrequencyDate(
|
|
81
|
+
basisDate,
|
|
82
|
+
frequency
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Moves the start and due date forward by one frequency.
|
|
88
|
+
*
|
|
89
|
+
* This does not take into account the recurrence effect. That should be
|
|
90
|
+
* handled on the frontend.
|
|
91
|
+
*
|
|
92
|
+
* Makes no changes if the state of the task is invalid for recurrence or
|
|
93
|
+
* there isn't recurrence info.
|
|
94
|
+
*/
|
|
95
|
+
static updateDatesForRecurrence(task: DashboardTask): void {
|
|
96
|
+
DashboardTaskRecurrenceService.updateDatesForRecurrence(task);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Gets the filtered and sorted set of task ids for a particular category.
|
|
101
|
+
*
|
|
102
|
+
* @param category the category of the tasks to filter
|
|
103
|
+
* @param filterSettings the filter settings for a task if there are any.
|
|
104
|
+
* Otherwise, this will use the default filter settings for the user. If
|
|
105
|
+
* the user does not have filter settings, then it will use the default.
|
|
106
|
+
*/
|
|
107
|
+
static getFilteredAndSortedTaskIds(
|
|
108
|
+
taskMap: DashboardTaskMap,
|
|
109
|
+
category: string,
|
|
110
|
+
filterSettings: DashboardTaskListFilterSettings,
|
|
111
|
+
sortSettings: DashboardTaskListSortSettings,
|
|
112
|
+
tagSettings: DashboardTagSettings,
|
|
113
|
+
taskInfo?: DashboardTaskFilterTaskInfo
|
|
114
|
+
): DashboardTaskFilterAndSortResult {
|
|
115
|
+
let filterResult: DashboardTaskFilterResult;
|
|
116
|
+
|
|
117
|
+
if (!taskInfo) {
|
|
118
|
+
filterResult = DashboardTaskFilterService.filter(
|
|
119
|
+
taskMap,
|
|
120
|
+
Object.keys(taskMap),
|
|
121
|
+
filterSettings,
|
|
122
|
+
category
|
|
123
|
+
);
|
|
124
|
+
} else {
|
|
125
|
+
filterResult = DashboardTaskFilterService.filter(
|
|
126
|
+
taskMap,
|
|
127
|
+
taskInfo.allChildrenIds,
|
|
128
|
+
filterSettings,
|
|
129
|
+
category,
|
|
130
|
+
taskInfo.taskId
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
filteredAndSortedIds: DashboardTaskSortService.sort(
|
|
135
|
+
taskMap,
|
|
136
|
+
filterResult.resultIds,
|
|
137
|
+
sortSettings,
|
|
138
|
+
tagSettings
|
|
139
|
+
),
|
|
140
|
+
removedIds: filterResult.removedIds
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Gets a map of task IDs to tag header names. Used only for when sorting by
|
|
146
|
+
* tags. If the first task in the list has no high-priority tags, then
|
|
147
|
+
* noPriorityTagsIndicator will be used as the header name.
|
|
148
|
+
*/
|
|
149
|
+
static getTagHeaderMap(
|
|
150
|
+
taskMap: DashboardTaskMap,
|
|
151
|
+
taskIds: string[],
|
|
152
|
+
userId: string,
|
|
153
|
+
tagSettings: DashboardTagSettings,
|
|
154
|
+
noPriorityTagsIndicator: string,
|
|
155
|
+
sortDirection: DashboardTaskSortDirection
|
|
156
|
+
): Record<string, string> {
|
|
157
|
+
return DashboardTaskSortService.getTagHeaderMap(
|
|
158
|
+
taskMap,
|
|
159
|
+
taskIds,
|
|
160
|
+
userId,
|
|
161
|
+
tagSettings,
|
|
162
|
+
noPriorityTagsIndicator,
|
|
163
|
+
sortDirection
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
private static getChildrenTaskIds(
|
|
168
|
+
taskIdToTaskDict: Record<string, DashboardTask>,
|
|
169
|
+
parentToTaskIdsDict: Record<string, string[]>,
|
|
170
|
+
taskId: string
|
|
171
|
+
): string[] {
|
|
172
|
+
const childrenIds = parentToTaskIdsDict[taskId];
|
|
173
|
+
if (!childrenIds) {
|
|
174
|
+
return [];
|
|
175
|
+
}
|
|
176
|
+
childrenIds.forEach((childId) => {
|
|
177
|
+
const childTask = taskIdToTaskDict[childId];
|
|
178
|
+
if (childTask) {
|
|
179
|
+
const grandchildrenIds = this.getChildrenTaskIds(
|
|
180
|
+
taskIdToTaskDict,
|
|
181
|
+
parentToTaskIdsDict,
|
|
182
|
+
childId
|
|
183
|
+
);
|
|
184
|
+
childrenIds.push(...grandchildrenIds);
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
return childrenIds;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { DashboardTaskMap } from '../../../documents/dashboard/Task';
|
|
2
|
-
import { DashboardTaskListSortSettings, DashboardTaskSortDirection } from '../../../embedded-types/dashboard/task/SortSettings';
|
|
3
|
-
import { DashboardTagSettings } from '../../../embedded-types/dashboard/userConfig/Tags';
|
|
1
|
+
import { DashboardTaskMap } from '../../../documents/dashboard/Task.js';
|
|
2
|
+
import { DashboardTaskListSortSettings, DashboardTaskSortDirection } from '../../../embedded-types/dashboard/task/SortSettings.js';
|
|
3
|
+
import { DashboardTagSettings } from '../../../embedded-types/dashboard/userConfig/Tags.js';
|
|
4
4
|
/**
|
|
5
5
|
* A service for sorting tasks.
|
|
6
6
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskSortService.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"TaskSortService.d.ts","sourceRoot":"./src/","sources":["services/dashboard/Task/TaskSortService.ts"],"names":[],"mappings":"AAAA,OAAsB,EACpB,gBAAgB,EACjB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,6BAA6B,EAE7B,0BAA0B,EAC3B,MAAM,wDAAwD,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sDAAsD,CAAC;AAE5F;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,wBAAwB;IAC3C;;OAEG;IACH,MAAM,CAAC,IAAI,CACT,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,MAAM,EAAE,EACjB,YAAY,EAAE,6BAA6B,EAC3C,WAAW,EAAE,oBAAoB;IA0BnC;;;;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;IAkCzB,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAkElC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAepC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAezC,OAAO,CAAC,MAAM,CAAC,qBAAqB;CAgCrC"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const SortSettings_1 = require("../../../embedded-types/dashboard/task/SortSettings");
|
|
1
|
+
import { DashboardTaskSortBy, DashboardTaskSortDirection } from '../../../embedded-types/dashboard/task/SortSettings.js';
|
|
4
2
|
/**
|
|
5
3
|
* A service for sorting tasks.
|
|
6
4
|
*/
|
|
7
|
-
class DashboardTaskSortService {
|
|
5
|
+
export default class DashboardTaskSortService {
|
|
8
6
|
/**
|
|
9
7
|
* Sorts the provided task IDs based on the provided sort settings.
|
|
10
8
|
*/
|
|
@@ -58,7 +56,7 @@ class DashboardTaskSortService {
|
|
|
58
56
|
}
|
|
59
57
|
static getTaskSortFunction(sortBy, sortDirection, tagSettings, userId) {
|
|
60
58
|
switch (sortBy) {
|
|
61
|
-
case
|
|
59
|
+
case DashboardTaskSortBy.tags:
|
|
62
60
|
return (taskA, taskB) => {
|
|
63
61
|
const highestPriorityTagA = this.getHighestPriorityTagValue(taskA, userId, tagSettings, sortDirection);
|
|
64
62
|
const highestPriorityTagB = this.getHighestPriorityTagValue(taskB, userId, tagSettings, sortDirection);
|
|
@@ -70,7 +68,7 @@ class DashboardTaskSortService {
|
|
|
70
68
|
}
|
|
71
69
|
return -1 * sortDirection;
|
|
72
70
|
};
|
|
73
|
-
case
|
|
71
|
+
case DashboardTaskSortBy.title:
|
|
74
72
|
return (taskA, taskB) => {
|
|
75
73
|
const titleA = taskA.title;
|
|
76
74
|
const titleB = taskB.title;
|
|
@@ -130,7 +128,7 @@ class DashboardTaskSortService {
|
|
|
130
128
|
if (!tags || tags.length === 0)
|
|
131
129
|
return priorityTag;
|
|
132
130
|
let highestPriority = 0;
|
|
133
|
-
const isAscending = sortDirection ===
|
|
131
|
+
const isAscending = sortDirection === DashboardTaskSortDirection.ascending;
|
|
134
132
|
// If the sort direction is descending, then we want to start with the
|
|
135
133
|
// lowest priority number.
|
|
136
134
|
if (isAscending) {
|
|
@@ -150,4 +148,4 @@ class DashboardTaskSortService {
|
|
|
150
148
|
return priorityTag;
|
|
151
149
|
}
|
|
152
150
|
}
|
|
153
|
-
|
|
151
|
+
//# sourceMappingURL=TaskSortService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskSortService.js","sourceRoot":"./src/","sources":["services/dashboard/Task/TaskSortService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import DashboardTask, {
|
|
2
|
+
DashboardTaskMap
|
|
3
|
+
} from '../../../documents/dashboard/Task.js';
|
|
4
|
+
import {
|
|
5
|
+
DashboardTaskListSortSettings,
|
|
6
|
+
DashboardTaskSortBy,
|
|
7
|
+
DashboardTaskSortDirection
|
|
8
|
+
} from '../../../embedded-types/dashboard/task/SortSettings.js';
|
|
9
|
+
import { DashboardTagSettings } from '../../../embedded-types/dashboard/userConfig/Tags.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* A service for sorting tasks.
|
|
13
|
+
*/
|
|
14
|
+
export default class DashboardTaskSortService {
|
|
15
|
+
/**
|
|
16
|
+
* Sorts the provided task IDs based on the provided sort settings.
|
|
17
|
+
*/
|
|
18
|
+
static sort(
|
|
19
|
+
taskMap: DashboardTaskMap,
|
|
20
|
+
taskIds: string[],
|
|
21
|
+
sortSettings: DashboardTaskListSortSettings,
|
|
22
|
+
tagSettings: DashboardTagSettings
|
|
23
|
+
) {
|
|
24
|
+
return taskIds.sort((idA, idB) => {
|
|
25
|
+
const taskA = taskMap[idA];
|
|
26
|
+
const taskB = taskMap[idB];
|
|
27
|
+
|
|
28
|
+
if (!taskA || !taskB || sortSettings.sortList.length === 0) return 0;
|
|
29
|
+
|
|
30
|
+
for (const sortSetting of sortSettings.sortList) {
|
|
31
|
+
const { sortBy } = sortSetting;
|
|
32
|
+
const { sortDirection } = sortSetting;
|
|
33
|
+
|
|
34
|
+
const result = this.getTaskSortFunction(
|
|
35
|
+
sortBy,
|
|
36
|
+
sortDirection,
|
|
37
|
+
tagSettings,
|
|
38
|
+
sortSettings.userId
|
|
39
|
+
)(taskA, taskB);
|
|
40
|
+
if (result !== 0) {
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return 0;
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Gets a map of task IDs to tag header names. Used only for when sorting by
|
|
50
|
+
* tags. If the first task in the list has no high-priority tags, then
|
|
51
|
+
* noPriorityTagsIndicator will be used as the header name.
|
|
52
|
+
*/
|
|
53
|
+
static getTagHeaderMap(
|
|
54
|
+
taskMap: DashboardTaskMap,
|
|
55
|
+
taskIds: string[],
|
|
56
|
+
userId: string,
|
|
57
|
+
tagSettings: DashboardTagSettings,
|
|
58
|
+
noPriorityTagsIndicator: string,
|
|
59
|
+
sortDirection: DashboardTaskSortDirection
|
|
60
|
+
): Record<string, string> {
|
|
61
|
+
const tagHeaderMap: Record<string, string> = {};
|
|
62
|
+
if (taskIds.length === 0 || taskIds.length === 1) return tagHeaderMap;
|
|
63
|
+
const firstTask = taskMap[taskIds[0]];
|
|
64
|
+
if (!firstTask) return tagHeaderMap;
|
|
65
|
+
let tag = this.getHighestPriorityTag(
|
|
66
|
+
firstTask,
|
|
67
|
+
userId,
|
|
68
|
+
tagSettings,
|
|
69
|
+
sortDirection
|
|
70
|
+
);
|
|
71
|
+
if (!tag) {
|
|
72
|
+
tagHeaderMap[taskIds[0]] = noPriorityTagsIndicator;
|
|
73
|
+
} else {
|
|
74
|
+
tagHeaderMap[taskIds[0]] = tag;
|
|
75
|
+
}
|
|
76
|
+
for (let i = 1; i < taskIds.length; i += 1) {
|
|
77
|
+
const task = taskMap[taskIds[i]];
|
|
78
|
+
if (task) {
|
|
79
|
+
const taskTag = this.getHighestPriorityTag(
|
|
80
|
+
task,
|
|
81
|
+
userId,
|
|
82
|
+
tagSettings,
|
|
83
|
+
sortDirection
|
|
84
|
+
);
|
|
85
|
+
if (taskTag !== tag && tag !== noPriorityTagsIndicator) {
|
|
86
|
+
tag = taskTag || noPriorityTagsIndicator;
|
|
87
|
+
tagHeaderMap[taskIds[i]] = tag;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return tagHeaderMap;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
private static getTaskSortFunction(
|
|
95
|
+
sortBy: DashboardTaskSortBy,
|
|
96
|
+
sortDirection: DashboardTaskSortDirection,
|
|
97
|
+
tagSettings: DashboardTagSettings,
|
|
98
|
+
userId: string
|
|
99
|
+
) {
|
|
100
|
+
switch (sortBy) {
|
|
101
|
+
case DashboardTaskSortBy.tags:
|
|
102
|
+
return (taskA: DashboardTask, taskB: DashboardTask) => {
|
|
103
|
+
const highestPriorityTagA = this.getHighestPriorityTagValue(
|
|
104
|
+
taskA,
|
|
105
|
+
userId,
|
|
106
|
+
tagSettings,
|
|
107
|
+
sortDirection
|
|
108
|
+
);
|
|
109
|
+
const highestPriorityTagB = this.getHighestPriorityTagValue(
|
|
110
|
+
taskB,
|
|
111
|
+
userId,
|
|
112
|
+
tagSettings,
|
|
113
|
+
sortDirection
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
if (highestPriorityTagA === highestPriorityTagB) {
|
|
117
|
+
return 0;
|
|
118
|
+
}
|
|
119
|
+
if (highestPriorityTagA > highestPriorityTagB) {
|
|
120
|
+
return 1 * sortDirection;
|
|
121
|
+
}
|
|
122
|
+
return -1 * sortDirection;
|
|
123
|
+
};
|
|
124
|
+
case DashboardTaskSortBy.title:
|
|
125
|
+
return (taskA: DashboardTask, taskB: DashboardTask) => {
|
|
126
|
+
const titleA = taskA.title;
|
|
127
|
+
const titleB = taskB.title;
|
|
128
|
+
|
|
129
|
+
if (!titleA || !titleB) return 0;
|
|
130
|
+
|
|
131
|
+
return titleA.localeCompare(titleB) * sortDirection;
|
|
132
|
+
};
|
|
133
|
+
default:
|
|
134
|
+
return (taskA: DashboardTask, taskB: DashboardTask) => {
|
|
135
|
+
const valueA = taskA[sortBy];
|
|
136
|
+
const valueB = taskB[sortBy];
|
|
137
|
+
|
|
138
|
+
if (!valueA && !valueB) return 0;
|
|
139
|
+
// One doesn't have a value, it should be sorted to the bottom.
|
|
140
|
+
// Purposefully not using the sortDirection here.
|
|
141
|
+
if (valueA && !valueB) return -1;
|
|
142
|
+
if (!valueA && valueB) return 1;
|
|
143
|
+
|
|
144
|
+
if (!valueA || !valueB) return 0;
|
|
145
|
+
|
|
146
|
+
if (valueA instanceof Date && valueB instanceof Date) {
|
|
147
|
+
if (valueA.getTime() === valueB.getTime()) return 0;
|
|
148
|
+
if (valueA.getTime() > valueB.getTime()) return 1 * sortDirection;
|
|
149
|
+
if (valueA.getTime() < valueB.getTime()) return -1 * sortDirection;
|
|
150
|
+
return 0;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (valueA > valueB) return 1 * sortDirection;
|
|
154
|
+
if (valueA < valueB) return -1 * sortDirection;
|
|
155
|
+
return 0;
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Gets the highest priority tag for the provided task. If there are no tags,
|
|
162
|
+
* or if there are no tags with a priority, then this will return null.
|
|
163
|
+
*/
|
|
164
|
+
private static getHighestPriorityTag(
|
|
165
|
+
task: DashboardTask,
|
|
166
|
+
userId: string,
|
|
167
|
+
tagSettings: DashboardTagSettings,
|
|
168
|
+
sortDirection: DashboardTaskSortDirection
|
|
169
|
+
): string | null {
|
|
170
|
+
const priorityTag = this.getPriorityTagForTask(
|
|
171
|
+
task,
|
|
172
|
+
userId,
|
|
173
|
+
tagSettings,
|
|
174
|
+
sortDirection
|
|
175
|
+
);
|
|
176
|
+
return priorityTag ? priorityTag.tag : null;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Gets the highest priority tag value for the provided task.
|
|
181
|
+
*/
|
|
182
|
+
private static getHighestPriorityTagValue(
|
|
183
|
+
task: DashboardTask,
|
|
184
|
+
userId: string,
|
|
185
|
+
tagSettings: DashboardTagSettings,
|
|
186
|
+
sortDirection: DashboardTaskSortDirection
|
|
187
|
+
) {
|
|
188
|
+
const priorityTag = this.getPriorityTagForTask(
|
|
189
|
+
task,
|
|
190
|
+
userId,
|
|
191
|
+
tagSettings,
|
|
192
|
+
sortDirection
|
|
193
|
+
);
|
|
194
|
+
return priorityTag ? priorityTag.priority : 0;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
private static getPriorityTagForTask(
|
|
198
|
+
task: DashboardTask,
|
|
199
|
+
userId: string,
|
|
200
|
+
tagSettings: DashboardTagSettings,
|
|
201
|
+
sortDirection: DashboardTaskSortDirection
|
|
202
|
+
): { tag: string; priority: number } | null {
|
|
203
|
+
let priorityTag: { tag: string; priority: number } | null = null;
|
|
204
|
+
const tags = task.tags[userId];
|
|
205
|
+
if (!tags || tags.length === 0) return priorityTag;
|
|
206
|
+
|
|
207
|
+
let highestPriority = 0;
|
|
208
|
+
const isAscending = sortDirection === DashboardTaskSortDirection.ascending;
|
|
209
|
+
// If the sort direction is descending, then we want to start with the
|
|
210
|
+
// lowest priority number.
|
|
211
|
+
if (isAscending) {
|
|
212
|
+
highestPriority = Number.MAX_SAFE_INTEGER;
|
|
213
|
+
}
|
|
214
|
+
tags.forEach((tag) => {
|
|
215
|
+
const priority = tagSettings[tag]?.priority ?? 0;
|
|
216
|
+
if (
|
|
217
|
+
(isAscending && priority < highestPriority) ||
|
|
218
|
+
(!isAscending && priority > highestPriority)
|
|
219
|
+
) {
|
|
220
|
+
highestPriority = priority;
|
|
221
|
+
priorityTag = { tag, priority };
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
if (highestPriority === 0) {
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
return priorityTag;
|
|
228
|
+
}
|
|
229
|
+
}
|
package/package.json
CHANGED
|
@@ -1,12 +1,33 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aneuhold/core-ts-db-lib",
|
|
3
|
-
"
|
|
3
|
+
"author": "Anton G. Neuhold Jr.",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"version": "2.0.1",
|
|
4
6
|
"description": "A core database library used for personal projects",
|
|
7
|
+
"packageManager": "yarn@4.5.1",
|
|
8
|
+
"type": "module",
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "rimraf lib && tsc --project tsconfig.build.json && tsx ./scripts/copyTsFiles.ts",
|
|
11
|
+
"lint": "eslint",
|
|
12
|
+
"test": "vitest run",
|
|
13
|
+
"jsr:validate": "tb pkg validateJsr",
|
|
14
|
+
"checkAll": "yarn build && yarn lint && yarn test && yarn jsr:validate",
|
|
15
|
+
"jsr:publish": "tb pkg publishJsr",
|
|
16
|
+
"upgrade:core": "yarn up '@aneuhold/*'",
|
|
17
|
+
"upgrade:all": "yarn up"
|
|
18
|
+
},
|
|
5
19
|
"main": "lib/index.js",
|
|
20
|
+
"module": "lib/index.js",
|
|
6
21
|
"types": "lib/index.d.ts",
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
22
|
+
"files": [
|
|
23
|
+
"lib/**/*"
|
|
24
|
+
],
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"types": "./lib/index.d.ts",
|
|
28
|
+
"import": "./lib/index.js"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
10
31
|
"repository": {
|
|
11
32
|
"type": "git",
|
|
12
33
|
"url": "git+https://github.com/aneuhold/core-ts-db-lib.git"
|
|
@@ -15,40 +36,26 @@
|
|
|
15
36
|
"url": "https://github.com/aneuhold/core-ts-db-lib/issues"
|
|
16
37
|
},
|
|
17
38
|
"homepage": "https://github.com/aneuhold/core-ts-db-lib#readme",
|
|
18
|
-
"files": [
|
|
19
|
-
"lib/**/*"
|
|
20
|
-
],
|
|
21
39
|
"keywords": [
|
|
22
|
-
"
|
|
40
|
+
"Database",
|
|
41
|
+
"MongoDB",
|
|
42
|
+
"TypeScript",
|
|
23
43
|
"Node.js"
|
|
24
44
|
],
|
|
25
|
-
"scripts": {
|
|
26
|
-
"pushpub": "yarn build && npm version patch && git push",
|
|
27
|
-
"build": "tsc",
|
|
28
|
-
"watch": "tsc -w",
|
|
29
|
-
"link:local": "cd lib && yarn link",
|
|
30
|
-
"link:core-ts-lib": "yarn link @aneuhold/core-ts-lib",
|
|
31
|
-
"unlink:local": "cd lib && yarn unlink",
|
|
32
|
-
"unlink:core-ts-lib": "yarn unlink @aneuhold/core-ts-lib && yarn install --force",
|
|
33
|
-
"upgrade:all": "yarn up",
|
|
34
|
-
"upgrade:core": "yarn up '@aneuhold/*'",
|
|
35
|
-
"test": "jest",
|
|
36
|
-
"lint": "eslint"
|
|
37
|
-
},
|
|
38
45
|
"dependencies": {
|
|
39
|
-
"@aneuhold/core-ts-lib": "^
|
|
46
|
+
"@aneuhold/core-ts-lib": "^2.0.6",
|
|
40
47
|
"bson": "^6.2.0"
|
|
41
48
|
},
|
|
42
49
|
"devDependencies": {
|
|
43
50
|
"@aneuhold/eslint-config": "^1.0.37",
|
|
44
|
-
"@
|
|
51
|
+
"@aneuhold/main-scripts": "^2.0.6",
|
|
45
52
|
"@types/node": "^20.16.10",
|
|
46
|
-
"@types/node-fetch": "^2.6.11",
|
|
47
53
|
"eslint": "^9.13.0",
|
|
48
|
-
"
|
|
54
|
+
"jsr": "^0.13.2",
|
|
49
55
|
"prettier": "^3.3.3",
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"typescript": "^5.6.2"
|
|
56
|
+
"rimraf": "^6.0.1",
|
|
57
|
+
"tsx": "^4.19.1",
|
|
58
|
+
"typescript": "^5.6.2",
|
|
59
|
+
"vitest": "^2.1.3"
|
|
53
60
|
}
|
|
54
61
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ValidateUtil.spec.d.ts","sourceRoot":"","sources":["../../../src/schemas/validators/ValidateUtil.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,64 +0,0 @@
|
|
|
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 ValidateUtil_1 = __importDefault(require("./ValidateUtil"));
|
|
7
|
-
describe('Validate', () => {
|
|
8
|
-
let errorsArray;
|
|
9
|
-
let parentObject;
|
|
10
|
-
beforeEach(() => {
|
|
11
|
-
errorsArray = [];
|
|
12
|
-
parentObject = {};
|
|
13
|
-
});
|
|
14
|
-
it('should validate optional string', () => {
|
|
15
|
-
const validate = new ValidateUtil_1.default(parentObject, errorsArray);
|
|
16
|
-
parentObject.testField = 123;
|
|
17
|
-
validate.optionalString('testField');
|
|
18
|
-
expect(errorsArray).toContain('testField must be a string or undefined');
|
|
19
|
-
errorsArray = [];
|
|
20
|
-
parentObject.testField = 'test';
|
|
21
|
-
validate.optionalString('testField');
|
|
22
|
-
expect(errorsArray.length).toBe(0);
|
|
23
|
-
});
|
|
24
|
-
it('should validate optional number', () => {
|
|
25
|
-
const validate = new ValidateUtil_1.default(parentObject, errorsArray);
|
|
26
|
-
parentObject.testField = true;
|
|
27
|
-
validate.optionalNumber('testField');
|
|
28
|
-
expect(errorsArray).toContain('testField must be a number or undefined');
|
|
29
|
-
errorsArray = [];
|
|
30
|
-
parentObject.testField = 123;
|
|
31
|
-
validate.optionalNumber('testField');
|
|
32
|
-
expect(errorsArray.length).toBe(0);
|
|
33
|
-
});
|
|
34
|
-
it('should validate optional boolean', () => {
|
|
35
|
-
const validate = new ValidateUtil_1.default(parentObject, errorsArray);
|
|
36
|
-
parentObject.testField = 123;
|
|
37
|
-
validate.optionalBoolean('testField');
|
|
38
|
-
expect(errorsArray).toContain('testField must be a boolean or undefined');
|
|
39
|
-
errorsArray = [];
|
|
40
|
-
parentObject.testField = true;
|
|
41
|
-
validate.optionalBoolean('testField');
|
|
42
|
-
expect(errorsArray.length).toBe(0);
|
|
43
|
-
});
|
|
44
|
-
it('should validate optional array', () => {
|
|
45
|
-
const validate = new ValidateUtil_1.default(parentObject, errorsArray);
|
|
46
|
-
parentObject.testField = 123;
|
|
47
|
-
validate.optionalArray('testField');
|
|
48
|
-
expect(errorsArray).toContain('testField must be an array or undefined');
|
|
49
|
-
errorsArray = [];
|
|
50
|
-
parentObject.testField = [];
|
|
51
|
-
validate.optionalArray('testField');
|
|
52
|
-
expect(errorsArray.length).toBe(0);
|
|
53
|
-
});
|
|
54
|
-
it('should validate required object', () => {
|
|
55
|
-
const validate = new ValidateUtil_1.default(parentObject, errorsArray);
|
|
56
|
-
parentObject.testField = [];
|
|
57
|
-
validate.object('testField', {});
|
|
58
|
-
expect(errorsArray).toContain('testField must be an object');
|
|
59
|
-
errorsArray = [];
|
|
60
|
-
parentObject.testField = {};
|
|
61
|
-
validate.object('testField', {});
|
|
62
|
-
expect(errorsArray.length).toBe(0);
|
|
63
|
-
});
|
|
64
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentService.spec.d.ts","sourceRoot":"","sources":["../../src/services/DocumentService.spec.ts"],"names":[],"mappings":""}
|