@zeniai/client-epic-state 5.0.30 → 5.0.31-beta0ND

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 (100) hide show
  1. package/lib/commonStateTypes/fiscalYearHelpers/formatZeniDateFY.d.ts +1 -0
  2. package/lib/commonStateTypes/fiscalYearHelpers/formatZeniDateFY.js +2 -1
  3. package/lib/entity/file/fileState.d.ts +4 -4
  4. package/lib/entity/file/fileState.js +4 -0
  5. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  6. package/lib/entity/snackbar/snackbarTypes.js +2 -0
  7. package/lib/entity/task/taskPayload.d.ts +3 -0
  8. package/lib/entity/task/taskPayload.js +5 -0
  9. package/lib/entity/task/taskState.d.ts +3 -0
  10. package/lib/entity/tenant/clearAllEpic.d.ts +2 -1
  11. package/lib/entity/tenant/clearAllEpic.js +2 -0
  12. package/lib/entity/transaction/stateTypes/attachment.d.ts +2 -2
  13. package/lib/epic.d.ts +6 -1
  14. package/lib/epic.js +6 -1
  15. package/lib/esm/commonStateTypes/fiscalYearHelpers/formatZeniDateFY.js +1 -0
  16. package/lib/esm/entity/file/fileState.js +4 -0
  17. package/lib/esm/entity/snackbar/snackbarTypes.js +2 -0
  18. package/lib/esm/entity/task/taskPayload.js +5 -0
  19. package/lib/esm/entity/tenant/clearAllEpic.js +2 -0
  20. package/lib/esm/epic.js +6 -1
  21. package/lib/esm/index.js +8 -5
  22. package/lib/esm/init.js +5 -2
  23. package/lib/esm/reducer.js +3 -0
  24. package/lib/esm/view/profitAndLossClassesView/profitAndLossHorizontalEnrichment.js +42 -0
  25. package/lib/esm/view/taskManager/cannedResponsesView/cannedResponses.js +1 -0
  26. package/lib/esm/view/taskManager/cannedResponsesView/cannedResponsesPayload.js +12 -0
  27. package/lib/esm/view/taskManager/cannedResponsesView/cannedResponsesReducer.js +64 -0
  28. package/lib/esm/view/taskManager/cannedResponsesView/cannedResponsesSelector.js +3 -0
  29. package/lib/esm/view/taskManager/cannedResponsesView/epics/deleteCannedResponseEpic.js +17 -0
  30. package/lib/esm/view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic.js +21 -0
  31. package/lib/esm/view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic.js +29 -0
  32. package/lib/esm/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +3 -0
  33. package/lib/esm/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +5 -0
  34. package/lib/esm/view/taskManager/taskDetailView/epics/initializeTaskToLocalStoreEpic.js +1 -0
  35. package/lib/esm/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +1 -0
  36. package/lib/esm/view/taskManager/taskDetailView/epics/snoozeTaskEpic.js +66 -0
  37. package/lib/esm/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +57 -0
  38. package/lib/esm/view/taskManager/taskDetailView/taskDetail.js +4 -0
  39. package/lib/esm/view/taskManager/taskDetailView/taskDetailReducer.js +60 -7
  40. package/lib/esm/view/taskManager/taskDetailView/taskDetailSelector.js +12 -0
  41. package/lib/esm/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +56 -21
  42. package/lib/esm/view/taskManager/taskListView/epics/dragNDropTasksEpic.js +1 -0
  43. package/lib/esm/view/taskManager/taskListView/epics/fetchTaskListEpic.js +13 -4
  44. package/lib/esm/view/taskManager/taskListView/epics/updateTaskFromListViewEpic.js +3 -2
  45. package/lib/esm/view/taskManager/taskListView/taskList.js +7 -0
  46. package/lib/esm/view/taskManager/taskListView/taskListReducer.js +106 -12
  47. package/lib/esm/view/taskManager/taskListView/taskListSelector.js +48 -39
  48. package/lib/index.d.ts +9 -5
  49. package/lib/index.js +39 -26
  50. package/lib/init.d.ts +2 -1
  51. package/lib/init.js +6 -3
  52. package/lib/reducer.d.ts +3 -0
  53. package/lib/reducer.js +3 -0
  54. package/lib/tsconfig.typecheck.tsbuildinfo +1 -0
  55. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  56. package/lib/view/profitAndLossClassesView/profitAndLossHorizontalEnrichment.d.ts +15 -1
  57. package/lib/view/profitAndLossClassesView/profitAndLossHorizontalEnrichment.js +43 -0
  58. package/lib/view/taskManager/cannedResponsesView/cannedResponses.d.ts +19 -0
  59. package/lib/view/taskManager/cannedResponsesView/cannedResponses.js +2 -0
  60. package/lib/view/taskManager/cannedResponsesView/cannedResponsesPayload.d.ts +21 -0
  61. package/lib/view/taskManager/cannedResponsesView/cannedResponsesPayload.js +15 -0
  62. package/lib/view/taskManager/cannedResponsesView/cannedResponsesReducer.d.ts +30 -0
  63. package/lib/view/taskManager/cannedResponsesView/cannedResponsesReducer.js +68 -0
  64. package/lib/view/taskManager/cannedResponsesView/cannedResponsesSelector.d.ts +3 -0
  65. package/lib/view/taskManager/cannedResponsesView/cannedResponsesSelector.js +6 -0
  66. package/lib/view/taskManager/cannedResponsesView/epics/deleteCannedResponseEpic.d.ts +7 -0
  67. package/lib/view/taskManager/cannedResponsesView/epics/deleteCannedResponseEpic.js +21 -0
  68. package/lib/view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic.d.ts +7 -0
  69. package/lib/view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic.js +25 -0
  70. package/lib/view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic.d.ts +7 -0
  71. package/lib/view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic.js +33 -0
  72. package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.d.ts +2 -1
  73. package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +3 -0
  74. package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.d.ts +2 -1
  75. package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +5 -0
  76. package/lib/view/taskManager/taskDetailView/epics/initializeTaskToLocalStoreEpic.js +1 -0
  77. package/lib/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +1 -0
  78. package/lib/view/taskManager/taskDetailView/epics/snoozeTaskEpic.d.ts +9 -0
  79. package/lib/view/taskManager/taskDetailView/epics/snoozeTaskEpic.js +70 -0
  80. package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.d.ts +9 -0
  81. package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +61 -0
  82. package/lib/view/taskManager/taskDetailView/taskDetail.d.ts +2 -0
  83. package/lib/view/taskManager/taskDetailView/taskDetail.js +4 -0
  84. package/lib/view/taskManager/taskDetailView/taskDetailReducer.d.ts +10 -1
  85. package/lib/view/taskManager/taskDetailView/taskDetailReducer.js +61 -8
  86. package/lib/view/taskManager/taskDetailView/taskDetailSelector.d.ts +5 -0
  87. package/lib/view/taskManager/taskDetailView/taskDetailSelector.js +12 -0
  88. package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.d.ts +6 -7
  89. package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +56 -22
  90. package/lib/view/taskManager/taskListView/epics/dragNDropTasksEpic.js +1 -0
  91. package/lib/view/taskManager/taskListView/epics/fetchTaskListEpic.js +13 -4
  92. package/lib/view/taskManager/taskListView/epics/updateTaskFromListViewEpic.js +3 -2
  93. package/lib/view/taskManager/taskListView/taskList.d.ts +14 -1
  94. package/lib/view/taskManager/taskListView/taskList.js +8 -1
  95. package/lib/view/taskManager/taskListView/taskListPayload.d.ts +3 -0
  96. package/lib/view/taskManager/taskListView/taskListReducer.d.ts +9 -6
  97. package/lib/view/taskManager/taskListView/taskListReducer.js +107 -13
  98. package/lib/view/taskManager/taskListView/taskListSelector.d.ts +9 -3
  99. package/lib/view/taskManager/taskListView/taskListSelector.js +48 -39
  100. package/package.json +1 -1
@@ -1,5 +1,4 @@
1
1
  import { createSelector } from '@reduxjs/toolkit';
2
- import isEqual from 'lodash/isEqual';
3
2
  import orderBy from 'lodash/orderBy';
4
3
  import { getSortOrder, } from '../../../commonPayloadTypes/sortOrderPayload';
5
4
  import { reduceAnyFetchState } from '../../../commonStateTypes/reduceFetchState';
@@ -15,11 +14,6 @@ import { getUserGroupList } from '../../userGroupListView/userGroupListViewSelec
15
14
  import { getUserList, } from '../../userListView/userListViewSelector';
16
15
  import { allTaskPriority, allTaskStatus, } from '../taskDetailView/taskDetailSelector';
17
16
  import { DUE_DATE_GROUP_KEYS, } from './taskList';
18
- import { initialState } from './taskListReducer';
19
- const isDefaultFilters = (taskListState) => {
20
- return (isEqual(taskListState.filters, initialState.filters) &&
21
- initialState.uiState.searchText === taskListState.uiState.searchText);
22
- };
23
17
  const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
24
18
  const tasksInOrder = orderBy(tasksList, (task) => {
25
19
  const tagsByIds = getTagsByIds(tagState, task.tagIds);
@@ -34,8 +28,12 @@ const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
34
28
  return task.status.name;
35
29
  case 'priority':
36
30
  return ALL_PRIORITY_CODE.indexOf(task.priority.code);
31
+ case 'assignee':
32
+ return task.firstAssigneeSortName;
37
33
  case 'timeSpent':
38
34
  return task.timeSpent;
35
+ case 'visibility':
36
+ return task.isPrivate === true ? 1 : 0;
39
37
  case 'name':
40
38
  default:
41
39
  return task.name.toLowerCase();
@@ -43,7 +41,7 @@ const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
43
41
  }, sortOrder);
44
42
  return tasksInOrder;
45
43
  };
46
- const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRoleState, addressState, taskIds, tagState, }) => {
44
+ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRoleState, addressState, taskIds, tagState, userGroupsState, }) => {
47
45
  const { sortKey, searchText } = taskListState.uiState;
48
46
  const sortOrder = getSortOrder(taskListState.uiState.sortOrder);
49
47
  const tasks = taskIds
@@ -53,7 +51,15 @@ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRole
53
51
  const assigneeUsers = task.assignees
54
52
  .map((userId) => getUserAndUserRole(userState, userRoleState, addressState, userId))
55
53
  .filter((value) => value != null);
56
- return { ...task, assigneeUsers };
54
+ const firstUser = assigneeUsers[0]?.user;
55
+ const firstUserName = (firstUser != null ? getUserName(firstUser) : '') ||
56
+ firstUser?.email ||
57
+ '';
58
+ const firstGroupName = task.groupAssignees
59
+ .map((gId) => userGroupsState.userGroupByUserGroupId[gId]?.name)
60
+ .find((name) => name != null && name !== '');
61
+ const firstAssigneeSortName = (firstUserName !== '' ? firstUserName : (firstGroupName ?? '')).toLowerCase();
62
+ return { ...task, assigneeUsers, firstAssigneeSortName };
57
63
  }
58
64
  return undefined;
59
65
  })
@@ -62,7 +68,7 @@ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRole
62
68
  const sortedTaskList = sortTasksList(tagState, filteredTaskList, sortKey, sortOrder);
63
69
  return sortedTaskList;
64
70
  };
65
- const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupState, taskGroupViewState, userState, userRoleState, addressState, tagState, }) => {
71
+ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupState, taskGroupViewState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
66
72
  const { taskGroupsIds } = taskGroupViewState;
67
73
  const taskGroupsWithTasksList = taskGroupsIds
68
74
  .map((taskGroupId) => {
@@ -76,6 +82,7 @@ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupStat
76
82
  addressState,
77
83
  taskIds,
78
84
  tagState,
85
+ userGroupsState,
79
86
  });
80
87
  if (taskGroup != null) {
81
88
  return {
@@ -104,12 +111,9 @@ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupStat
104
111
  if (defaultTaskGroup != null) {
105
112
  sortedTaskGroupsWithTasksList.push(defaultTaskGroup);
106
113
  }
107
- if (isDefaultFilters(taskListState) === false) {
108
- return sortedTaskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
109
- }
110
- return sortedTaskGroupsWithTasksList;
114
+ return sortedTaskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
111
115
  };
112
- export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
116
+ export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
113
117
  const assigneeGroups = Object.keys(taskListState.taskIdsByAssignees);
114
118
  const taskGroupsWithTasksList = assigneeGroups.map((groupKey) => {
115
119
  const taskIds = taskListState.taskIdsByAssignees[groupKey];
@@ -121,6 +125,7 @@ export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userSt
121
125
  addressState,
122
126
  taskIds,
123
127
  tagState,
128
+ userGroupsState,
124
129
  });
125
130
  const assigneeIds = groupKey.split(',');
126
131
  const groupName = getUsersByUserIds(userState, assigneeIds)
@@ -136,12 +141,9 @@ export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userSt
136
141
  tasks: tasksWithUserDetails,
137
142
  };
138
143
  });
139
- if (isDefaultFilters(taskListState) === false) {
140
- return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
141
- }
142
- return taskGroupsWithTasksList;
144
+ return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
143
145
  };
144
- export const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
146
+ export const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
145
147
  const taskGroupsWithTasksList = ALL_PRIORITY_CODE.map((groupKey) => {
146
148
  const taskIds = taskListState.taskIdsByPriority[groupKey] ?? [];
147
149
  const tasksWithUserDetails = getTasksWithUserDetails({
@@ -152,6 +154,7 @@ export const getTaskListGroupedByPriority = ({ taskListState, taskState, userSta
152
154
  addressState,
153
155
  taskIds,
154
156
  tagState,
157
+ userGroupsState,
155
158
  });
156
159
  return {
157
160
  groupName: allTaskPriority.find((priority) => priority.code === groupKey)?.name ??
@@ -161,12 +164,9 @@ export const getTaskListGroupedByPriority = ({ taskListState, taskState, userSta
161
164
  tasks: tasksWithUserDetails,
162
165
  };
163
166
  });
164
- if (isDefaultFilters(taskListState) === false) {
165
- return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
166
- }
167
- return taskGroupsWithTasksList;
167
+ return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
168
168
  };
169
- const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
169
+ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
170
170
  const taskGroupsWithTasksList = ALL_TASK_STATUS_CODE.map((groupKey) => {
171
171
  const taskIds = taskListState.taskIdsByStatus[groupKey] ?? [];
172
172
  const tasksWithUserDetails = getTasksWithUserDetails({
@@ -177,6 +177,7 @@ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userR
177
177
  addressState,
178
178
  taskIds,
179
179
  tagState,
180
+ userGroupsState,
180
181
  });
181
182
  return {
182
183
  groupName: allTaskStatus.find((taskStatus) => taskStatus.code === groupKey)
@@ -186,12 +187,9 @@ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userR
186
187
  tasks: tasksWithUserDetails,
187
188
  };
188
189
  });
189
- if (isDefaultFilters(taskListState) === false) {
190
- return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
191
- }
192
- return taskGroupsWithTasksList;
190
+ return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
193
191
  };
194
- const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
192
+ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
195
193
  const tagGroups = Object.keys(taskListState.taskIdsByTags);
196
194
  const taskGroupsWithTasksList = tagGroups.map((groupKey) => {
197
195
  const taskIds = taskListState.taskIdsByTags[groupKey];
@@ -203,6 +201,7 @@ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRol
203
201
  addressState,
204
202
  taskIds,
205
203
  tagState,
204
+ userGroupsState,
206
205
  });
207
206
  const tagIds = groupKey.split(',');
208
207
  const groupName = getTagsByIds(tagState, tagIds)
@@ -217,12 +216,9 @@ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRol
217
216
  tasks: tasksWithUserDetails,
218
217
  };
219
218
  });
220
- if (isDefaultFilters(taskListState) === false) {
221
- return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
222
- }
223
- return taskGroupsWithTasksList;
219
+ return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
224
220
  };
225
- const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
221
+ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
226
222
  const taskGroupsWithTasksList = DUE_DATE_GROUP_KEYS.map((groupKey) => {
227
223
  const taskIds = taskListState.taskIdsByDueDate[groupKey];
228
224
  const tasksWithUserDetails = getTasksWithUserDetails({
@@ -233,6 +229,7 @@ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, user
233
229
  addressState,
234
230
  taskIds,
235
231
  tagState,
232
+ userGroupsState,
236
233
  });
237
234
  return {
238
235
  groupName: groupKey,
@@ -241,12 +238,9 @@ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, user
241
238
  tasks: tasksWithUserDetails,
242
239
  };
243
240
  });
244
- if (isDefaultFilters(taskListState) === false) {
245
- return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
246
- }
247
- return taskGroupsWithTasksList;
241
+ return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
248
242
  };
249
- const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRoleState, addressState, taskGroupState, taskGroupViewState, tagState, }) => {
243
+ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRoleState, addressState, taskGroupState, taskGroupViewState, tagState, userGroupsState, }) => {
250
244
  const { groupByKey } = taskListState.uiState;
251
245
  if (groupByKey === 'groupName') {
252
246
  return getTaskListGroupedByGroupName({
@@ -258,6 +252,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
258
252
  taskGroupState,
259
253
  taskGroupViewState,
260
254
  tagState,
255
+ userGroupsState,
261
256
  });
262
257
  }
263
258
  if (groupByKey === 'assignee') {
@@ -268,6 +263,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
268
263
  userRoleState,
269
264
  addressState,
270
265
  tagState,
266
+ userGroupsState,
271
267
  });
272
268
  }
273
269
  if (groupByKey === 'priority') {
@@ -278,6 +274,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
278
274
  userRoleState,
279
275
  addressState,
280
276
  tagState,
277
+ userGroupsState,
281
278
  });
282
279
  }
283
280
  if (groupByKey === 'status') {
@@ -288,6 +285,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
288
285
  userRoleState,
289
286
  addressState,
290
287
  tagState,
288
+ userGroupsState,
291
289
  });
292
290
  }
293
291
  if (groupByKey === 'tag') {
@@ -298,6 +296,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
298
296
  userRoleState,
299
297
  addressState,
300
298
  tagState,
299
+ userGroupsState,
301
300
  });
302
301
  }
303
302
  return getTaskListGroupedByDueDate({
@@ -307,6 +306,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
307
306
  userRoleState,
308
307
  addressState,
309
308
  tagState,
309
+ userGroupsState,
310
310
  });
311
311
  };
312
312
  export const getAllTasks = 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) => {
@@ -320,6 +320,7 @@ export const getAllTasks = createSelector((state) => state.taskListState, (state
320
320
  taskGroupState,
321
321
  taskGroupViewState,
322
322
  tagState,
323
+ userGroupsState,
323
324
  });
324
325
  const fetchStateVariables = [
325
326
  taskListState,
@@ -331,7 +332,15 @@ export const getAllTasks = createSelector((state) => state.taskListState, (state
331
332
  }
332
333
  const { fetchState, error } = reduceAnyFetchState(fetchStateVariables);
333
334
  const taskGroupTemplates = getTaskGroupTemplateByIds(taskGroupTemplateState, taskGroupTemplateViewState.taskGroupTemplateIds);
335
+ const tabCounts = {
336
+ live: taskListState.byTab.live.taskIds.length,
337
+ archived: taskListState.byTab.archived.taskIds.length,
338
+ deleted: taskListState.byTab.deleted.taskIds.length,
339
+ snoozed: taskListState.byTab.snoozed.taskIds.length,
340
+ };
334
341
  return {
342
+ currentTab: taskListState.currentTab,
343
+ tabCounts,
335
344
  uiState: taskListState.uiState,
336
345
  filters: taskListState.filters,
337
346
  taskGroupTemplates,
package/lib/index.d.ts CHANGED
@@ -350,6 +350,7 @@ import { ProfitAndLossReport, getPandLReportFetchState, getProfitAndLossReport }
350
350
  import { ProfitAndLossState, ProfitAndLossUIState } from './view/profitAndLoss/profitAndLossState';
351
351
  import { getEmptyHorizontalSectionBalancesSlice } from './view/profitAndLossClassesView/horizontalSectionEmptyBalancesSlice';
352
352
  import { getProfitAndLossClassesHorizontalView } from './view/profitAndLossClassesView/profitAndLossClassesByClassHorizontalSelector';
353
+ import { aggregateHorizontalDescendantBalances } from './view/profitAndLossClassesView/profitAndLossHorizontalEnrichment';
353
354
  import { ClassColumnDefinition, HORIZONTAL_CLASS_TOTAL_BALANCE_ID, HorizontalAccountReportData, HorizontalAccountRow, HorizontalCalculatedSection, HorizontalClassBalance, HorizontalSectionReport, HorizontalSectionTreeLayout, ProfitAndLossByClassHorizontalReport, isHorizontalAccountReportData } from './view/profitAndLossClassesView/profitAndLossClassesByClassHorizontalSelectorTypes';
354
355
  import { fetchProfitAndLossClassesView, resetProfitAndLossClassesNodeCollapseState, updateClassViewLayout, updateAccountViewMode as updateProfitAndLossAccountViewMode, updateClassesToFilterOut as updateProfitAndLossClassesToFilterOut, updateProfitAndLossClassesViewUIState } from './view/profitAndLossClassesView/profitAndLossClassesViewReducer';
355
356
  import { getProfitAndLossClassesView } from './view/profitAndLossClassesView/profitAndLossClassesViewSelector';
@@ -537,12 +538,15 @@ import { createTag, deleteTag, fetchTagList } from './view/tagView/tagViewReduce
537
538
  import { TagViewSelectorView, getAllTags } from './view/tagView/tagViewSelector';
538
539
  import { TagViewState } from './view/tagView/tagViewState';
539
540
  import { EditTaskLocalData, initialTaskDetail, initialTaskDetailLocalData } from './view/taskManager/taskDetailView/taskDetail';
540
- import { archiveTask, deleteTask, discardTaskUpdatesInLocalStore, fetchTaskDetailPage, saveTaskDetail, saveTaskUpdatesToLocalStore } from './view/taskManager/taskDetailView/taskDetailReducer';
541
+ import { archiveTask, deleteTask, discardTaskUpdatesInLocalStore, fetchTaskDetailPage, saveTaskDetail, saveTaskUpdatesToLocalStore, snoozeTask, unsnoozeTask } from './view/taskManager/taskDetailView/taskDetailReducer';
542
+ import { CannedResponse, CannedResponsesViewState } from './view/taskManager/cannedResponsesView/cannedResponses';
543
+ import { deleteCannedResponse, fetchCannedResponses, saveCannedResponse } from './view/taskManager/cannedResponsesView/cannedResponsesReducer';
544
+ import { getCannedResponsesView } from './view/taskManager/cannedResponsesView/cannedResponsesSelector';
541
545
  import { TaskDetailSelectorView, allTaskPriority, allTaskStatus, getTaskDetail } from './view/taskManager/taskDetailView/taskDetailSelector';
542
546
  import { createTaskFromTaskGroupTemplate } from './view/taskManager/taskGroupTemplateView/taskGroupTemplateViewReducer';
543
547
  import { createNewTaskGroup, deleteTaskGroup, fetchAllTaskGroups, updateTaskGroupName } from './view/taskManager/taskGroupView/taskGroupViewReducer';
544
- import { DueDateGroupKey, TASK_LIST_FILTER_CATEGORIES, TASK_LIST_GROUP_BY_CATEGORIES, TaskFilterCategory, TaskGroupKey, TaskListFilterCategoryField, TaskListFilters, TaskListLocalData, TaskListUIState, TaskListViewSortKey, toDueDateGroupKeyType, toTaskListGroupByKeyType, toTaskListGroupByKeyTypeStrict } from './view/taskManager/taskListView/taskList';
545
- import { bulkUpdateTaskList, dragNDropTasks, fetchTaskListPage, initiateTaskListLocalData, updateTaskFilters, updateTaskFromListView, updateTaskListLocalData, updateTaskListSearchText, updateTaskListUIState } from './view/taskManager/taskListView/taskListReducer';
548
+ import { DueDateGroupKey, TASK_LIST_FILTER_CATEGORIES, TASK_LIST_GROUP_BY_CATEGORIES, TaskFilterCategory, TaskGroupKey, TaskListFilterCategoryField, TaskListFilters, TaskListLocalData, TaskListUIState, TaskListViewSortKey, toDueDateGroupKeyType, toTaskListGroupByKeyType, toTaskListGroupByKeyTypeStrict, ALL_TASK_LIST_TABS, TaskListTab } from './view/taskManager/taskListView/taskList';
549
+ import { bulkUpdateTaskList, dragNDropTasks, fetchTaskListPage, initiateTaskListLocalData, removeTaskFromList, updateTaskFilters, updateTaskFromListView, updateTaskListLocalData, updateTaskListSearchText, updateTaskListTab, updateTaskListUIState } from './view/taskManager/taskListView/taskListReducer';
546
550
  import { TaskGroupWithTasksList, TaskListSelectorView, TaskWithUserDetails, getAllTasks } from './view/taskManager/taskListView/taskListSelector';
547
551
  import { getDueDateValueFromDueDateGroupId, getTaskUpdates } from './view/taskManager/taskListView/taskListViewHelpers';
548
552
  import { fetchTasksCard } from './view/tasksCard/tasksCardReducer';
@@ -675,7 +679,7 @@ export { fetchDashboard, getDashboard, DashboardReport, updateTreasuryVideoClose
675
679
  export { updateDashboardLayout };
676
680
  export { PandLWithForecastView, getPandLWithForecast, } from './view/profitAndLoss/pAndLWithForecast/pAndLWithForecastSelector';
677
681
  export { fetchProfitAndLoss, resetProfitAndLossNodeCollapseState, updateProfitAndLossUIState, ProfitAndLossState, ProfitAndLossUIState, getProfitAndLossReport, ProfitAndLossReport, getPandLReportFetchState, fetchProfitAndLossForTimeframe, };
678
- export { fetchProfitAndLossClassesView, updateProfitAndLossClassesToFilterOut, resetProfitAndLossClassesNodeCollapseState, updateProfitAndLossClassesViewUIState, updateProfitAndLossAccountViewMode, updateClassViewLayout, ProfitAndLossClassesViewUIState, ProfitAndLossClassesViewReport, getProfitAndLossClassesView, getEmptyHorizontalSectionBalancesSlice, getProfitAndLossClassesHorizontalView, PandLReportViewSectionID, PandLReportViewCalculatedSectionID, isPandLReportViewCalculatedSectionID, isPandLReportViewSectionID, ClassViewLayout, ProfitAndLossByClassHorizontalReport, ClassColumnDefinition, HORIZONTAL_CLASS_TOTAL_BALANCE_ID, HorizontalAccountReportData, HorizontalAccountRow, HorizontalClassBalance, HorizontalSectionReport, HorizontalSectionTreeLayout, HorizontalCalculatedSection, isHorizontalAccountReportData, };
682
+ export { fetchProfitAndLossClassesView, updateProfitAndLossClassesToFilterOut, resetProfitAndLossClassesNodeCollapseState, updateProfitAndLossClassesViewUIState, updateProfitAndLossAccountViewMode, updateClassViewLayout, ProfitAndLossClassesViewUIState, ProfitAndLossClassesViewReport, getProfitAndLossClassesView, aggregateHorizontalDescendantBalances, getEmptyHorizontalSectionBalancesSlice, getProfitAndLossClassesHorizontalView, PandLReportViewSectionID, PandLReportViewCalculatedSectionID, isPandLReportViewCalculatedSectionID, isPandLReportViewSectionID, ClassViewLayout, ProfitAndLossByClassHorizontalReport, ClassColumnDefinition, HORIZONTAL_CLASS_TOTAL_BALANCE_ID, HorizontalAccountReportData, HorizontalAccountRow, HorizontalClassBalance, HorizontalSectionReport, HorizontalSectionTreeLayout, HorizontalCalculatedSection, isHorizontalAccountReportData, };
679
683
  export { clearProfitAndLossProjectView, fetchProfitAndLossForTimeframeProjectView, fetchProfitAndLossProjectView, resetProfitAndLossProjectNodeCollapseState, updateProjectViewAccountViewMode, updateProjectsToFilterOut, updateProfitAndLossProjectViewUIState, ProfitAndLossProjectViewUIState, getProfitAndLossProjectView, ProfitAndLossProjectViewReport, Project, ProjectReportWithBalances, SectionProjectViewReport, };
680
684
  export { AccountingProviderAttachmentSelector, getAccountingProviderAttachment };
681
685
  export { fetchUserListByType, getUserList, UserListSelectorView };
@@ -847,7 +851,7 @@ export { fetchGlobalMerchantRecommendation, createGlobalMerchant, updateCreateGl
847
851
  export { approveVendorGlobalReview, rejectVendorGlobalReview, fetchVendorGlobalReviewView, updateSelectedGlobalMerchant, updateVendorGlobalReviewViewUIState, getVendorGlobalReviewView, getTenantMerchantByMerchantId, toVendorGlobalReviewColumnSortKeyType, VendorGlobalReview, VendorGlobalReviewViewUIState, VendorGlobalReviewViewColumnSortKey, VendorGlobalReviewViewSelectorView, VendorGlobalReviewViewState, VendorGlobalReviewViewLocalData, updateVendorGlobalReviewViewLocalData, GlobalReviewPageCurrentSelectionByColumn, GlobalRecommendationFetchSource, };
848
852
  export { fetchArAging, updateArAgingUIState, fetchArAgingDetail, updateArAgingDetailUIState, ArAgingReport, ArAgingDetail, NestedAgingBalancesByCustomer, getArAgingReport, getArAgingDetailForCustomer, updateArAgingNodeCollapseState, };
849
853
  export { toRecurringBillFrequency, toRecurringBillFrequencyStrict, RecurringBillFrequency, RecurringBillDetail, RecurringBillConfig, RecurringBillStatus, RecurringBillPaymentStatus, };
850
- export { Task, TaskListSelectorView, TaskWithUserDetails, TaskListViewSortKey, TaskListUIState, TaskDetailSelectorView, EditTaskLocalData, TaskStatusCodeType, PriorityCodeType, getTaskGroupById, TaskStatus, TaskPriority, TaskCodeType, getAllTasks, fetchTaskListPage, getTaskDetail, fetchTaskDetailPage, saveTaskUpdatesToLocalStore, saveTaskDetail, archiveTask, updateTaskListSearchText, updateTaskListUIState, allTaskStatus, allTaskPriority, TaskListFilters, updateTaskFilters, TASK_LIST_FILTER_CATEGORIES, TASK_LIST_GROUP_BY_CATEGORIES, TaskListFilterCategoryField, deleteTask, discardTaskUpdatesInLocalStore, TaskFilterCategory, TaskType, TaskGroupWithTasksList, TaskListLocalData, bulkUpdateTaskList, createNewTaskGroup, initiateTaskListLocalData, deleteTaskGroup, updateTaskListLocalData, dragNDropTasks, updateTaskGroupName, TaskGroupState, TaskGroupKey, toTaskListGroupByKeyType, toTaskListGroupByKeyTypeStrict, getTaskUpdates, fetchAllTaskGroups, initialTaskDetail, getDueDateValueFromDueDateGroupId, toPriorityCodeType, toTaskStatusCodeType, DueDateGroupKey, toDueDateGroupKeyType, updateTaskFromListView, convertHHMMStrToMinutes, initialTaskDetailLocalData, };
854
+ export { Task, TaskListSelectorView, TaskWithUserDetails, TaskListViewSortKey, TaskListUIState, TaskDetailSelectorView, EditTaskLocalData, TaskStatusCodeType, PriorityCodeType, getTaskGroupById, TaskStatus, TaskPriority, TaskCodeType, getAllTasks, fetchTaskListPage, getTaskDetail, fetchTaskDetailPage, saveTaskUpdatesToLocalStore, saveTaskDetail, archiveTask, CannedResponse, CannedResponsesViewState, fetchCannedResponses, saveCannedResponse, deleteCannedResponse, getCannedResponsesView, updateTaskListSearchText, updateTaskListUIState, allTaskStatus, allTaskPriority, TaskListFilters, updateTaskFilters, TASK_LIST_FILTER_CATEGORIES, TASK_LIST_GROUP_BY_CATEGORIES, TaskListFilterCategoryField, deleteTask, discardTaskUpdatesInLocalStore, TaskFilterCategory, TaskType, TaskGroupWithTasksList, TaskListLocalData, bulkUpdateTaskList, createNewTaskGroup, initiateTaskListLocalData, deleteTaskGroup, updateTaskListLocalData, dragNDropTasks, updateTaskGroupName, TaskGroupState, TaskGroupKey, toTaskListGroupByKeyType, toTaskListGroupByKeyTypeStrict, getTaskUpdates, fetchAllTaskGroups, initialTaskDetail, getDueDateValueFromDueDateGroupId, toPriorityCodeType, toTaskStatusCodeType, DueDateGroupKey, toDueDateGroupKeyType, updateTaskFromListView, updateTaskListTab, removeTaskFromList, snoozeTask, unsnoozeTask, convertHHMMStrToMinutes, initialTaskDetailLocalData, TaskListTab, ALL_TASK_LIST_TABS, };
851
855
  export { Tag, TagState, TagViewState, getAllTags, TagViewSelectorView, fetchTagList, createTag, deleteTag, };
852
856
  export { CardPayment, CardPaymentViewState, SetupIntentData, CardPaymentSelectorView, getAllCardsAndBankPaymentMethods, createCardSetupIntent, confirmCardSetupIntent, addCardPaymentSource, fetchPaymentSources, resetCardPaymentErrorStatuses, clearCardPaymentView, AddCardPaymentSourceType, };
853
857
  export { getAuditReportGroupViewSelectorView, getAuditRuleGroupViewSelectorView, getUserFromAllUsers, AuditReportGroupSelectorView, AuditReportGroupViewSelectorView, AuditRuleGroupViewSelectorView, fetchAuditRuleGroupView, fetchAuditReportGroupView, saveReasonForAuditRule, AuditRuleGroup, AuditRuleGroupReport, AuditReportRule, AuditRuleEntityType, AuditRuleEntityIdType, AuditRuleBypassReason, clearAuditReportGroupViewByCompanyId, };