@zeniai/client-epic-state 4.20.2-beta30ND → 4.20.2-beta31RR

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 (65) hide show
  1. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  2. package/lib/entity/snackbar/snackbarTypes.js +2 -0
  3. package/lib/entity/task/taskPayload.d.ts +3 -0
  4. package/lib/entity/task/taskPayload.js +5 -0
  5. package/lib/entity/task/taskState.d.ts +3 -0
  6. package/lib/epic.d.ts +3 -1
  7. package/lib/epic.js +3 -1
  8. package/lib/esm/entity/snackbar/snackbarTypes.js +2 -0
  9. package/lib/esm/entity/task/taskPayload.js +5 -0
  10. package/lib/esm/epic.js +3 -1
  11. package/lib/esm/index.js +4 -4
  12. package/lib/esm/view/companyView/types/cockpitTypes.js +1 -0
  13. package/lib/esm/view/profitAndLossClassesView/profitAndLossClassesByClassHorizontalSelector.js +1 -15
  14. package/lib/esm/view/profitAndLossClassesView/profitAndLossHorizontalEnrichment.js +14 -17
  15. package/lib/esm/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +2 -0
  16. package/lib/esm/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +4 -0
  17. package/lib/esm/view/taskManager/taskDetailView/epics/initializeTaskToLocalStoreEpic.js +1 -0
  18. package/lib/esm/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +1 -0
  19. package/lib/esm/view/taskManager/taskDetailView/epics/snoozeTaskEpic.js +64 -0
  20. package/lib/esm/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +54 -0
  21. package/lib/esm/view/taskManager/taskDetailView/taskDetail.js +4 -0
  22. package/lib/esm/view/taskManager/taskDetailView/taskDetailReducer.js +49 -1
  23. package/lib/esm/view/taskManager/taskDetailView/taskDetailSelector.js +3 -0
  24. package/lib/esm/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +49 -2
  25. package/lib/esm/view/taskManager/taskListView/epics/fetchTaskListEpic.js +13 -3
  26. package/lib/esm/view/taskManager/taskListView/taskList.js +8 -0
  27. package/lib/esm/view/taskManager/taskListView/taskListReducer.js +107 -11
  28. package/lib/esm/view/taskManager/taskListView/taskListSelector.js +56 -17
  29. package/lib/index.d.ts +4 -4
  30. package/lib/index.js +8 -4
  31. package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
  32. package/lib/view/companyTaskManagerView/companyTaskManagerViewReducer.d.ts +2 -2
  33. package/lib/view/companyView/types/cockpitTypes.d.ts +1 -1
  34. package/lib/view/companyView/types/cockpitTypes.js +1 -0
  35. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  36. package/lib/view/profitAndLossClassesView/profitAndLossClassesByClassHorizontalSelector.d.ts +0 -2
  37. package/lib/view/profitAndLossClassesView/profitAndLossClassesByClassHorizontalSelector.js +2 -16
  38. package/lib/view/profitAndLossClassesView/profitAndLossHorizontalEnrichment.js +14 -17
  39. package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.d.ts +2 -1
  40. package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +2 -0
  41. package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.d.ts +2 -1
  42. package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +4 -0
  43. package/lib/view/taskManager/taskDetailView/epics/initializeTaskToLocalStoreEpic.js +1 -0
  44. package/lib/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +1 -0
  45. package/lib/view/taskManager/taskDetailView/epics/snoozeTaskEpic.d.ts +9 -0
  46. package/lib/view/taskManager/taskDetailView/epics/snoozeTaskEpic.js +68 -0
  47. package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.d.ts +8 -0
  48. package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +58 -0
  49. package/lib/view/taskManager/taskDetailView/taskDetail.d.ts +2 -0
  50. package/lib/view/taskManager/taskDetailView/taskDetail.js +4 -0
  51. package/lib/view/taskManager/taskDetailView/taskDetailReducer.d.ts +10 -1
  52. package/lib/view/taskManager/taskDetailView/taskDetailReducer.js +50 -2
  53. package/lib/view/taskManager/taskDetailView/taskDetailSelector.d.ts +2 -0
  54. package/lib/view/taskManager/taskDetailView/taskDetailSelector.js +3 -0
  55. package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.d.ts +6 -0
  56. package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +49 -2
  57. package/lib/view/taskManager/taskListView/epics/fetchTaskListEpic.js +13 -3
  58. package/lib/view/taskManager/taskListView/taskList.d.ts +15 -1
  59. package/lib/view/taskManager/taskListView/taskList.js +10 -1
  60. package/lib/view/taskManager/taskListView/taskListPayload.d.ts +3 -0
  61. package/lib/view/taskManager/taskListView/taskListReducer.d.ts +7 -4
  62. package/lib/view/taskManager/taskListView/taskListReducer.js +108 -12
  63. package/lib/view/taskManager/taskListView/taskListSelector.d.ts +8 -3
  64. package/lib/view/taskManager/taskListView/taskListSelector.js +56 -17
  65. package/package.json +1 -1
@@ -23,8 +23,12 @@ const taskDetailSelector_1 = require("../taskDetailView/taskDetailSelector");
23
23
  const taskList_1 = require("./taskList");
24
24
  const taskListReducer_1 = require("./taskListReducer");
25
25
  const isDefaultFilters = (taskListState) => {
26
- return ((0, isEqual_1.default)(taskListState.filters, taskListReducer_1.initialState.filters) &&
27
- taskListReducer_1.initialState.uiState.searchText === taskListState.uiState.searchText);
26
+ if (taskListState.uiState.searchText !== taskListReducer_1.initialState.uiState.searchText) {
27
+ return false;
28
+ }
29
+ const hasNoActiveFilters = taskListState.filters.categories == null ||
30
+ taskListState.filters.categories.length === 0;
31
+ return (hasNoActiveFilters || (0, isEqual_1.default)(taskListState.filters, taskListReducer_1.initialState.filters));
28
32
  };
29
33
  const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
30
34
  const tasksInOrder = (0, orderBy_1.default)(tasksList, (task) => {
@@ -40,8 +44,12 @@ const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
40
44
  return task.status.name;
41
45
  case 'priority':
42
46
  return taskState_1.ALL_PRIORITY_CODE.indexOf(task.priority.code);
47
+ case 'assignee':
48
+ return task.firstAssigneeSortName;
43
49
  case 'timeSpent':
44
50
  return task.timeSpent;
51
+ case 'visibility':
52
+ return task.isPrivate ? 1 : 0;
45
53
  case 'name':
46
54
  default:
47
55
  return task.name.toLowerCase();
@@ -49,7 +57,7 @@ const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
49
57
  }, sortOrder);
50
58
  return tasksInOrder;
51
59
  };
52
- const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRoleState, addressState, taskIds, tagState, }) => {
60
+ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRoleState, addressState, taskIds, tagState, userGroupsState, }) => {
53
61
  const { sortKey, searchText } = taskListState.uiState;
54
62
  const sortOrder = (0, sortOrderPayload_1.getSortOrder)(taskListState.uiState.sortOrder);
55
63
  const tasks = taskIds
@@ -59,7 +67,18 @@ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRole
59
67
  const assigneeUsers = task.assignees
60
68
  .map((userId) => (0, userAndRole_1.getUserAndUserRole)(userState, userRoleState, addressState, userId))
61
69
  .filter((value) => value != null);
62
- return { ...task, assigneeUsers };
70
+ // Compute sort name matching display order: users first, then groups
71
+ const firstUser = assigneeUsers[0]?.user;
72
+ const firstUserName = (firstUser != null ? (0, userSelector_1.getUserName)(firstUser) : '') ||
73
+ firstUser?.email ||
74
+ '';
75
+ const firstGroupName = task.groupAssignees
76
+ .map((gId) => userGroupsState.userGroupByUserGroupId[gId]?.name)
77
+ .find((name) => name != null && name !== '');
78
+ const firstAssigneeSortName = (firstUserName ||
79
+ firstGroupName ||
80
+ '').toLowerCase();
81
+ return { ...task, assigneeUsers, firstAssigneeSortName };
63
82
  }
64
83
  return undefined;
65
84
  })
@@ -68,7 +87,7 @@ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRole
68
87
  const sortedTaskList = sortTasksList(tagState, filteredTaskList, sortKey, sortOrder);
69
88
  return sortedTaskList;
70
89
  };
71
- const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupState, taskGroupViewState, userState, userRoleState, addressState, tagState, }) => {
90
+ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupState, taskGroupViewState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
72
91
  const { taskGroupsIds } = taskGroupViewState;
73
92
  const taskGroupsWithTasksList = taskGroupsIds
74
93
  .map((taskGroupId) => {
@@ -82,6 +101,7 @@ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupStat
82
101
  addressState,
83
102
  taskIds,
84
103
  tagState,
104
+ userGroupsState,
85
105
  });
86
106
  if (taskGroup != null) {
87
107
  return {
@@ -110,12 +130,13 @@ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupStat
110
130
  if (defaultTaskGroup != null) {
111
131
  sortedTaskGroupsWithTasksList.push(defaultTaskGroup);
112
132
  }
113
- if (isDefaultFilters(taskListState) === false) {
133
+ if (taskListState.currentTab !== 'live' ||
134
+ isDefaultFilters(taskListState) === false) {
114
135
  return sortedTaskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
115
136
  }
116
137
  return sortedTaskGroupsWithTasksList;
117
138
  };
118
- const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
139
+ const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
119
140
  const assigneeGroups = Object.keys(taskListState.taskIdsByAssignees);
120
141
  const taskGroupsWithTasksList = assigneeGroups.map((groupKey) => {
121
142
  const taskIds = taskListState.taskIdsByAssignees[groupKey];
@@ -127,6 +148,7 @@ const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, us
127
148
  addressState,
128
149
  taskIds,
129
150
  tagState,
151
+ userGroupsState,
130
152
  });
131
153
  const assigneeIds = groupKey.split(',');
132
154
  const groupName = (0, userSelector_1.getUsersByUserIds)(userState, assigneeIds)
@@ -142,13 +164,14 @@ const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, us
142
164
  tasks: tasksWithUserDetails,
143
165
  };
144
166
  });
145
- if (isDefaultFilters(taskListState) === false) {
167
+ if (taskListState.currentTab !== 'live' ||
168
+ isDefaultFilters(taskListState) === false) {
146
169
  return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
147
170
  }
148
171
  return taskGroupsWithTasksList;
149
172
  };
150
173
  exports.getTaskListGroupedByAssignees = getTaskListGroupedByAssignees;
151
- const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
174
+ const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
152
175
  const taskGroupsWithTasksList = taskState_1.ALL_PRIORITY_CODE.map((groupKey) => {
153
176
  const taskIds = taskListState.taskIdsByPriority[groupKey] ?? [];
154
177
  const tasksWithUserDetails = getTasksWithUserDetails({
@@ -159,6 +182,7 @@ const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, use
159
182
  addressState,
160
183
  taskIds,
161
184
  tagState,
185
+ userGroupsState,
162
186
  });
163
187
  return {
164
188
  groupName: taskDetailSelector_1.allTaskPriority.find((priority) => priority.code === groupKey)?.name ??
@@ -168,13 +192,14 @@ const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, use
168
192
  tasks: tasksWithUserDetails,
169
193
  };
170
194
  });
171
- if (isDefaultFilters(taskListState) === false) {
195
+ if (taskListState.currentTab !== 'live' ||
196
+ isDefaultFilters(taskListState) === false) {
172
197
  return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
173
198
  }
174
199
  return taskGroupsWithTasksList;
175
200
  };
176
201
  exports.getTaskListGroupedByPriority = getTaskListGroupedByPriority;
177
- const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
202
+ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
178
203
  const taskGroupsWithTasksList = taskState_1.ALL_TASK_STATUS_CODE.map((groupKey) => {
179
204
  const taskIds = taskListState.taskIdsByStatus[groupKey] ?? [];
180
205
  const tasksWithUserDetails = getTasksWithUserDetails({
@@ -185,6 +210,7 @@ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userR
185
210
  addressState,
186
211
  taskIds,
187
212
  tagState,
213
+ userGroupsState,
188
214
  });
189
215
  return {
190
216
  groupName: taskDetailSelector_1.allTaskStatus.find((taskStatus) => taskStatus.code === groupKey)
@@ -194,12 +220,13 @@ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userR
194
220
  tasks: tasksWithUserDetails,
195
221
  };
196
222
  });
197
- if (isDefaultFilters(taskListState) === false) {
223
+ if (taskListState.currentTab !== 'live' ||
224
+ isDefaultFilters(taskListState) === false) {
198
225
  return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
199
226
  }
200
227
  return taskGroupsWithTasksList;
201
228
  };
202
- const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
229
+ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
203
230
  const tagGroups = Object.keys(taskListState.taskIdsByTags);
204
231
  const taskGroupsWithTasksList = tagGroups.map((groupKey) => {
205
232
  const taskIds = taskListState.taskIdsByTags[groupKey];
@@ -211,6 +238,7 @@ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRol
211
238
  addressState,
212
239
  taskIds,
213
240
  tagState,
241
+ userGroupsState,
214
242
  });
215
243
  const tagIds = groupKey.split(',');
216
244
  const groupName = (0, tagSelector_1.getTagsByIds)(tagState, tagIds)
@@ -225,12 +253,13 @@ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRol
225
253
  tasks: tasksWithUserDetails,
226
254
  };
227
255
  });
228
- if (isDefaultFilters(taskListState) === false) {
256
+ if (taskListState.currentTab !== 'live' ||
257
+ isDefaultFilters(taskListState) === false) {
229
258
  return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
230
259
  }
231
260
  return taskGroupsWithTasksList;
232
261
  };
233
- const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
262
+ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
234
263
  const taskGroupsWithTasksList = taskList_1.DUE_DATE_GROUP_KEYS.map((groupKey) => {
235
264
  const taskIds = taskListState.taskIdsByDueDate[groupKey];
236
265
  const tasksWithUserDetails = getTasksWithUserDetails({
@@ -241,6 +270,7 @@ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, user
241
270
  addressState,
242
271
  taskIds,
243
272
  tagState,
273
+ userGroupsState,
244
274
  });
245
275
  return {
246
276
  groupName: groupKey,
@@ -249,12 +279,13 @@ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, user
249
279
  tasks: tasksWithUserDetails,
250
280
  };
251
281
  });
252
- if (isDefaultFilters(taskListState) === false) {
282
+ if (taskListState.currentTab !== 'live' ||
283
+ isDefaultFilters(taskListState) === false) {
253
284
  return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
254
285
  }
255
286
  return taskGroupsWithTasksList;
256
287
  };
257
- const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRoleState, addressState, taskGroupState, taskGroupViewState, tagState, }) => {
288
+ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRoleState, addressState, taskGroupState, taskGroupViewState, tagState, userGroupsState, }) => {
258
289
  const { groupByKey } = taskListState.uiState;
259
290
  if (groupByKey === 'groupName') {
260
291
  return getTaskListGroupedByGroupName({
@@ -266,6 +297,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
266
297
  taskGroupState,
267
298
  taskGroupViewState,
268
299
  tagState,
300
+ userGroupsState,
269
301
  });
270
302
  }
271
303
  if (groupByKey === 'assignee') {
@@ -276,6 +308,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
276
308
  userRoleState,
277
309
  addressState,
278
310
  tagState,
311
+ userGroupsState,
279
312
  });
280
313
  }
281
314
  if (groupByKey === 'priority') {
@@ -286,6 +319,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
286
319
  userRoleState,
287
320
  addressState,
288
321
  tagState,
322
+ userGroupsState,
289
323
  });
290
324
  }
291
325
  if (groupByKey === 'status') {
@@ -296,6 +330,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
296
330
  userRoleState,
297
331
  addressState,
298
332
  tagState,
333
+ userGroupsState,
299
334
  });
300
335
  }
301
336
  if (groupByKey === 'tag') {
@@ -306,6 +341,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
306
341
  userRoleState,
307
342
  addressState,
308
343
  tagState,
344
+ userGroupsState,
309
345
  });
310
346
  }
311
347
  return getTaskListGroupedByDueDate({
@@ -315,6 +351,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
315
351
  userRoleState,
316
352
  addressState,
317
353
  tagState,
354
+ userGroupsState,
318
355
  });
319
356
  };
320
357
  exports.getAllTasks = (0, toolkit_1.createSelector)((state) => state.taskListState, (state) => state.taskState, (state) => state.userState, (state) => state.userRoleState, (state) => state.userListViewState, (state) => state.addressState, (state) => state.taskGroupState, (state) => state.taskGroupViewState, (state) => state.tagViewState, (state) => state.tagState, (state) => state.taskGroupTemplateState, (state) => state.taskGroupTemplateViewState, (state) => state.userGroupsState, (state) => state.userGroupListViewState, (_state, isTaskTemplatesEnabled) => isTaskTemplatesEnabled, (taskListState, taskState, userState, userRoleState, userListViewState, addressState, taskGroupState, taskGroupViewState, tagViewState, tagState, taskGroupTemplateState, taskGroupTemplateViewState, userGroupsState, userGroupListViewState, isTaskTemplatesEnabled) => {
@@ -328,6 +365,7 @@ exports.getAllTasks = (0, toolkit_1.createSelector)((state) => state.taskListSta
328
365
  taskGroupState,
329
366
  taskGroupViewState,
330
367
  tagState,
368
+ userGroupsState,
331
369
  });
332
370
  const fetchStateVariables = [
333
371
  taskListState,
@@ -340,6 +378,7 @@ exports.getAllTasks = (0, toolkit_1.createSelector)((state) => state.taskListSta
340
378
  const { fetchState, error } = (0, reduceFetchState_1.reduceAnyFetchState)(fetchStateVariables);
341
379
  const taskGroupTemplates = (0, taskGroupTemplateSelector_1.getTaskGroupTemplateByIds)(taskGroupTemplateState, taskGroupTemplateViewState.taskGroupTemplateIds);
342
380
  return {
381
+ currentTab: taskListState.currentTab,
343
382
  uiState: taskListState.uiState,
344
383
  filters: taskListState.filters,
345
384
  taskGroupTemplates,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeniai/client-epic-state",
3
- "version": "4.20.2-beta30ND",
3
+ "version": "4.20.2-beta31RR",
4
4
  "description": "Shared module between Web & Mobile containing required abstractions for state management, async network communication. ",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib/esm/index.js",