@zeniai/client-epic-state 5.0.21-betaRR4 → 5.0.21-betaVR1

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 (105) hide show
  1. package/lib/commonStateTypes/fiscalYearHelpers/formatZeniDateFY.d.ts +0 -1
  2. package/lib/commonStateTypes/fiscalYearHelpers/formatZeniDateFY.js +1 -2
  3. package/lib/entity/file/fileState.d.ts +4 -4
  4. package/lib/entity/file/fileState.js +0 -4
  5. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  6. package/lib/entity/snackbar/snackbarTypes.js +0 -2
  7. package/lib/entity/task/taskPayload.d.ts +0 -3
  8. package/lib/entity/task/taskPayload.js +0 -5
  9. package/lib/entity/task/taskState.d.ts +0 -3
  10. package/lib/entity/tenant/clearAllEpic.d.ts +1 -2
  11. package/lib/entity/tenant/clearAllEpic.js +0 -2
  12. package/lib/entity/transaction/stateTypes/attachment.d.ts +2 -2
  13. package/lib/epic.d.ts +1 -6
  14. package/lib/epic.js +1 -6
  15. package/lib/esm/commonStateTypes/fiscalYearHelpers/formatZeniDateFY.js +0 -1
  16. package/lib/esm/entity/file/fileState.js +0 -4
  17. package/lib/esm/entity/snackbar/snackbarTypes.js +0 -2
  18. package/lib/esm/entity/task/taskPayload.js +0 -5
  19. package/lib/esm/entity/tenant/clearAllEpic.js +0 -2
  20. package/lib/esm/epic.js +1 -6
  21. package/lib/esm/index.js +4 -5
  22. package/lib/esm/reducer.js +0 -3
  23. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.js +6 -2
  24. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +7 -2
  25. package/lib/esm/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +5 -5
  26. package/lib/esm/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +7 -3
  27. package/lib/esm/view/expenseAutomationView/selectors/missingReceiptsSelector.js +2 -0
  28. package/lib/esm/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +0 -3
  29. package/lib/esm/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +0 -5
  30. package/lib/esm/view/taskManager/taskDetailView/epics/initializeTaskToLocalStoreEpic.js +0 -1
  31. package/lib/esm/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +0 -1
  32. package/lib/esm/view/taskManager/taskDetailView/taskDetail.js +0 -4
  33. package/lib/esm/view/taskManager/taskDetailView/taskDetailReducer.js +7 -60
  34. package/lib/esm/view/taskManager/taskDetailView/taskDetailSelector.js +0 -12
  35. package/lib/esm/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +21 -56
  36. package/lib/esm/view/taskManager/taskListView/epics/dragNDropTasksEpic.js +0 -1
  37. package/lib/esm/view/taskManager/taskListView/epics/fetchTaskListEpic.js +4 -13
  38. package/lib/esm/view/taskManager/taskListView/epics/updateTaskFromListViewEpic.js +2 -3
  39. package/lib/esm/view/taskManager/taskListView/taskList.js +0 -7
  40. package/lib/esm/view/taskManager/taskListView/taskListReducer.js +12 -105
  41. package/lib/esm/view/taskManager/taskListView/taskListSelector.js +39 -48
  42. package/lib/index.d.ts +4 -6
  43. package/lib/index.js +5 -14
  44. package/lib/reducer.d.ts +0 -3
  45. package/lib/reducer.js +0 -3
  46. package/lib/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.js +6 -2
  47. package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +7 -2
  48. package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.d.ts +6 -4
  49. package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +4 -4
  50. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  51. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.d.ts +7 -7
  52. package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +7 -3
  53. package/lib/view/expenseAutomationView/selectorTypes/missingReceiptsSelectorTypes.d.ts +4 -2
  54. package/lib/view/expenseAutomationView/selectors/missingReceiptsSelector.js +2 -0
  55. package/lib/view/expenseAutomationView/types/missingReceiptsViewState.d.ts +2 -2
  56. package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.d.ts +1 -2
  57. package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +0 -3
  58. package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.d.ts +1 -2
  59. package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +0 -5
  60. package/lib/view/taskManager/taskDetailView/epics/initializeTaskToLocalStoreEpic.js +0 -1
  61. package/lib/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +0 -1
  62. package/lib/view/taskManager/taskDetailView/taskDetail.d.ts +0 -2
  63. package/lib/view/taskManager/taskDetailView/taskDetail.js +0 -4
  64. package/lib/view/taskManager/taskDetailView/taskDetailReducer.d.ts +1 -10
  65. package/lib/view/taskManager/taskDetailView/taskDetailReducer.js +8 -61
  66. package/lib/view/taskManager/taskDetailView/taskDetailSelector.d.ts +0 -5
  67. package/lib/view/taskManager/taskDetailView/taskDetailSelector.js +0 -12
  68. package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.d.ts +7 -6
  69. package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +22 -56
  70. package/lib/view/taskManager/taskListView/epics/dragNDropTasksEpic.js +0 -1
  71. package/lib/view/taskManager/taskListView/epics/fetchTaskListEpic.js +4 -13
  72. package/lib/view/taskManager/taskListView/epics/updateTaskFromListViewEpic.js +2 -3
  73. package/lib/view/taskManager/taskListView/taskList.d.ts +1 -14
  74. package/lib/view/taskManager/taskListView/taskList.js +1 -8
  75. package/lib/view/taskManager/taskListView/taskListPayload.d.ts +0 -3
  76. package/lib/view/taskManager/taskListView/taskListReducer.d.ts +4 -7
  77. package/lib/view/taskManager/taskListView/taskListReducer.js +13 -106
  78. package/lib/view/taskManager/taskListView/taskListSelector.d.ts +3 -9
  79. package/lib/view/taskManager/taskListView/taskListSelector.js +39 -48
  80. package/package.json +2 -2
  81. package/lib/esm/view/taskManager/cannedResponsesView/cannedResponses.js +0 -1
  82. package/lib/esm/view/taskManager/cannedResponsesView/cannedResponsesPayload.js +0 -1
  83. package/lib/esm/view/taskManager/cannedResponsesView/cannedResponsesReducer.js +0 -64
  84. package/lib/esm/view/taskManager/cannedResponsesView/epics/deleteCannedResponseEpic.js +0 -17
  85. package/lib/esm/view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic.js +0 -20
  86. package/lib/esm/view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic.js +0 -29
  87. package/lib/esm/view/taskManager/taskDetailView/epics/snoozeTaskEpic.js +0 -66
  88. package/lib/esm/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +0 -57
  89. package/lib/tsconfig.typecheck.tsbuildinfo +0 -1
  90. package/lib/view/taskManager/cannedResponsesView/cannedResponses.d.ts +0 -18
  91. package/lib/view/taskManager/cannedResponsesView/cannedResponses.js +0 -2
  92. package/lib/view/taskManager/cannedResponsesView/cannedResponsesPayload.d.ts +0 -11
  93. package/lib/view/taskManager/cannedResponsesView/cannedResponsesPayload.js +0 -2
  94. package/lib/view/taskManager/cannedResponsesView/cannedResponsesReducer.d.ts +0 -30
  95. package/lib/view/taskManager/cannedResponsesView/cannedResponsesReducer.js +0 -68
  96. package/lib/view/taskManager/cannedResponsesView/epics/deleteCannedResponseEpic.d.ts +0 -7
  97. package/lib/view/taskManager/cannedResponsesView/epics/deleteCannedResponseEpic.js +0 -21
  98. package/lib/view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic.d.ts +0 -7
  99. package/lib/view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic.js +0 -24
  100. package/lib/view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic.d.ts +0 -7
  101. package/lib/view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic.js +0 -33
  102. package/lib/view/taskManager/taskDetailView/epics/snoozeTaskEpic.d.ts +0 -9
  103. package/lib/view/taskManager/taskDetailView/epics/snoozeTaskEpic.js +0 -70
  104. package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.d.ts +0 -9
  105. package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +0 -61
@@ -5,26 +5,21 @@ import { convertHHMMStrToMinutes } from '../../../../commonStateTypes/fiscalYear
5
5
  import { DEFAULT_DATE_FORMAT } from '../../../../commonStateTypes/fiscalYearHelpers/formatZeniDateFY';
6
6
  import { updateTasks } from '../../../../entity/task/taskReducer';
7
7
  import { createZeniAPIStatus, isSuccessResponse, } from '../../../../responsePayload';
8
- import { bulkUpdateTaskList, fetchTaskList, updateTasksListOnBulkUpdateTasksFailure, updateTasksListOnBulkUpdateTasksSuccess, } from '../taskListReducer';
9
- export const bulkUpdateTaskListEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(bulkUpdateTaskList.match), switchMap((action) => {
8
+ import { bulkUpdateTaskList, updateTasksListOnBulkUpdateTasksFailure, updateTasksListOnBulkUpdateTasksSuccess, } from '../taskListReducer';
9
+ export const bulkUpdateTaskListEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(bulkUpdateTaskList.match), switchMap((action) => {
10
+ const state = state$.value;
10
11
  const { taskIds, updates, groupId } = action.payload;
11
- const bulkUpdates = toBulkUpdatesPayload(updates);
12
- if (groupId != null) {
13
- bulkUpdates.task_group_ids = [groupId];
14
- }
15
- const payload = { task_ids: taskIds, updates: bulkUpdates };
12
+ const payload = {
13
+ tasks: getTasksListPayload(state, taskIds, updates),
14
+ };
16
15
  return zeniAPI
17
- .putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks/bulk-update`, payload)
16
+ .putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks`, payload)
18
17
  .pipe(mergeMap((response) => {
19
18
  if (isSuccessResponse(response) && response.data != null) {
20
- const removeFromList = updates.isArchived === true ||
21
- updates.isDeleted === true ||
22
- ('snoozedUntil' in updates && updates.snoozedUntil != null);
23
19
  return of(updateTasks(response.data.tasks), updateTasksListOnBulkUpdateTasksSuccess({
24
20
  taskIds,
25
21
  groupId,
26
- removeFromList,
27
- }), fetchTaskList());
22
+ }));
28
23
  }
29
24
  else {
30
25
  return of(updateTasksListOnBulkUpdateTasksFailure({
@@ -38,46 +33,19 @@ export const bulkUpdateTaskListEpic = (actions$, _state$, zeniAPI) => actions$.p
38
33
  }));
39
34
  }));
40
35
  }));
41
- /**
42
- * Helpers
43
- */
44
- const toBulkUpdatesPayload = (updates) => {
45
- const payload = {};
46
- if (updates.status != null) {
47
- payload.status = updates.status.code;
48
- }
49
- if (updates.priority != null) {
50
- payload.priority = updates.priority.code;
51
- }
52
- if (updates.assignees != null) {
53
- payload.assignees = updates.assignees;
54
- }
55
- if (updates.groupAssignees != null) {
56
- payload.group_assignees = updates.groupAssignees;
57
- }
58
- if (updates.dueDate != null) {
59
- payload.due_date = updates.dueDate.format(DEFAULT_DATE_FORMAT);
60
- }
61
- if (updates.tagIds != null) {
62
- payload.tags = updates.tagIds;
63
- }
64
- if (updates.timeSpent != null) {
65
- payload.time_spent = convertHHMMStrToMinutes(updates.timeSpent.replace(/\D/g, ''));
66
- }
67
- if (updates.isArchived != null) {
68
- payload.is_archived = updates.isArchived;
69
- }
70
- if (updates.isDeleted != null) {
71
- payload.is_deleted = updates.isDeleted;
72
- }
73
- // Bulk snooze is not supported — only bulk unsnooze (clear all snooze fields)
74
- if ('snoozedUntil' in updates) {
75
- payload.snoozed_until = null;
76
- payload.snoozed_by = null;
77
- payload.snoozed_at = null;
78
- payload.is_snooze_notification_sent = false;
79
- }
80
- return payload;
36
+ export const getTasksListPayload = (state, taskIds, updates) => {
37
+ const { taskState } = state;
38
+ const tasksList = taskIds
39
+ .map((taskId) => {
40
+ const task = get(taskState.taskByID, taskId);
41
+ return {
42
+ ...task,
43
+ ...updates,
44
+ };
45
+ })
46
+ .filter((task) => task != null);
47
+ const tasksPayload = tasksList.map((task) => toTaskPayload(state, task));
48
+ return tasksPayload;
81
49
  };
82
50
  export const getTaskPayload = (state, taskId, updates) => {
83
51
  const { taskState } = state;
@@ -103,9 +71,6 @@ const toTaskPayload = (state, task) => {
103
71
  assignees: task.assignees,
104
72
  description: task.description,
105
73
  group_assignees: task.groupAssignees,
106
- is_archived: task.isArchived,
107
- is_deleted: task.isDeleted,
108
- snoozed_until: task.snoozedUntil != null ? task.snoozedUntil.toISOString() : null,
109
74
  due_date: task.dueDate != null ? task.dueDate.format(DEFAULT_DATE_FORMAT) : null,
110
75
  priority: task.priority.code,
111
76
  status: task.status.code,
@@ -11,7 +11,6 @@ export const dragNDropTasksEpic = (actions$, state$) => actions$.pipe(filter(dra
11
11
  updateTasksListOnBulkUpdateTasksSuccess({
12
12
  taskIds,
13
13
  groupId,
14
- removeFromList: false,
15
14
  }),
16
15
  bulkUpdateTaskList(taskIds, groupId, updates),
17
16
  ];
@@ -9,19 +9,10 @@ export const fetchTaskListEpic = (actions$, _state$, zeniAPI) => actions$.pipe(f
9
9
  .getJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks?query=${encodeURIComponent(`{"task_type": "all"}`)}`)
10
10
  .pipe(mergeMap((response) => {
11
11
  if (isSuccessResponse(response) && response.data != null) {
12
- const { tasks, deleted, archived, snoozed } = response.data;
13
- const allTasks = [
14
- ...tasks,
15
- ...(deleted ?? []),
16
- ...(archived ?? []),
17
- ...(snoozed ?? []),
18
- ];
19
- return of(updateTasks(allTasks), updateTaskList({
20
- data: tasks,
21
- deleted: deleted ?? [],
22
- archived: archived ?? [],
23
- snoozed: snoozed ?? [],
24
- }), updateTags(allTasks.map((task) => task.tags).flat()));
12
+ return of(updateTasks(response.data.tasks), updateTaskList({
13
+ data: response.data.tasks,
14
+ updateType: 'replace',
15
+ }), updateTags(response.data.tasks.map((task) => task.tags).flat()));
25
16
  }
26
17
  else {
27
18
  return of(updateTaskListFetchStatus({
@@ -8,10 +8,9 @@ export const updateTaskFromListViewEpic = (actions$, state$, zeniAPI) => actions
8
8
  const state = state$.value;
9
9
  const { task, updates } = action.payload;
10
10
  const taskId = task.id;
11
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
12
- const { snoozed_until: _snoozedUntil, ...taskData } = getTaskPayload(state, taskId, updates);
11
+ const taskData = getTaskPayload(state, taskId, updates);
13
12
  return zeniAPI
14
- .putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks/${taskId}`, taskData)
13
+ .putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks/${taskId}`, { ...taskData })
15
14
  .pipe(mergeMap((response) => {
16
15
  if (isSuccessResponse(response) && response.data != null) {
17
16
  return from([
@@ -1,10 +1,4 @@
1
1
  import { stringToUnion, stringToUnionStrict, } from '../../../commonStateTypes/stringToUnion';
2
- export const ALL_TASK_LIST_TABS = [
3
- 'live',
4
- 'archived',
5
- 'deleted',
6
- 'snoozed',
7
- ];
8
2
  export const DUE_DATE_GROUP_KEYS = [
9
3
  'overdue',
10
4
  'today',
@@ -32,7 +26,6 @@ const ALL_TASK_LIST_SORT_KEYS = [
32
26
  'status',
33
27
  'priority',
34
28
  'timeSpent',
35
- 'visibility',
36
29
  ];
37
30
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
38
31
  const toTaskListSortKeyType = (v) => stringToUnion(v, ALL_TASK_LIST_SORT_KEYS);
@@ -29,23 +29,7 @@ const initialTaskIdsByDueDate = {
29
29
  today: [],
30
30
  upcoming: [],
31
31
  };
32
- const initialTabData = {
33
- taskIds: [],
34
- taskIdsByAssignees: {},
35
- taskIdsByDueDate: { ...initialTaskIdsByDueDate },
36
- taskIdsByGroupsIds: {},
37
- taskIdsByPriority: { ...initialTaskIdsByPriority },
38
- taskIdsByStatus: { ...initialTaskIdsByStatus },
39
- taskIdsByTags: {},
40
- };
41
32
  export const initialState = {
42
- currentTab: 'live',
43
- byTab: {
44
- live: { ...initialTabData },
45
- archived: { ...initialTabData },
46
- deleted: { ...initialTabData },
47
- snoozed: { ...initialTabData },
48
- },
49
33
  taskIds: [],
50
34
  taskIdsByGroupsIds: {},
51
35
  taskIdsByPriority: initialTaskIdsByPriority,
@@ -102,30 +86,17 @@ const taskList = createSlice({
102
86
  draft.error = undefined;
103
87
  },
104
88
  updateTaskList(draft, action) {
105
- const { data, archived, deleted, snoozed } = action.payload;
89
+ const { data } = action.payload;
106
90
  draft.fetchState = 'Completed';
107
91
  draft.error = undefined;
108
- // Group live tasks
109
- const liveGrouped = getGroupedTaskIds(data);
110
- draft.byTab.live = toTabData(liveGrouped);
111
- // Group other tabs if provided
112
- if (archived != null) {
113
- draft.byTab.archived = toTabData(getGroupedTaskIds(archived));
114
- }
115
- if (deleted != null) {
116
- draft.byTab.deleted = toTabData(getGroupedTaskIds(deleted));
117
- }
118
- if (snoozed != null) {
119
- draft.byTab.snoozed = toTabData(getGroupedTaskIds(snoozed));
120
- }
121
- // Copy active tab data to top-level fields
122
- const activeTabData = draft.byTab[draft.currentTab];
123
- copyTabDataToTopLevel(draft, activeTabData);
124
- },
125
- updateTaskListTab(draft, action) {
126
- draft.currentTab = action.payload;
127
- const activeTabData = draft.byTab[action.payload];
128
- copyTabDataToTopLevel(draft, activeTabData);
92
+ const { taskIds, taskIdsGroupedByPriority, taskIdsByGroupIds, taskIdsGroupedByStatus, taskIdsByAssignees, taskIdsByDueDate, taskIdsByTags, } = getGroupedTaskIds(data);
93
+ draft.taskIds = taskIds;
94
+ draft.taskIdsByGroupsIds = taskIdsByGroupIds;
95
+ draft.taskIdsByPriority = taskIdsGroupedByPriority;
96
+ draft.taskIdsByStatus = taskIdsGroupedByStatus;
97
+ draft.taskIdsByAssignees = taskIdsByAssignees;
98
+ draft.taskIdsByDueDate = taskIdsByDueDate;
99
+ draft.taskIdsByTags = taskIdsByTags;
129
100
  },
130
101
  initiateTaskListLocalData(draft, action) {
131
102
  const { taskGroupById } = action.payload;
@@ -213,13 +184,10 @@ const taskList = createSlice({
213
184
  },
214
185
  },
215
186
  updateTasksListOnBulkUpdateTasksSuccess(draft, action) {
216
- const { taskIds, groupId, removeFromList } = action.payload;
187
+ const { taskIds, groupId } = action.payload;
217
188
  draft.updateTasksFetchState.fetchState = 'Completed';
218
189
  draft.updateTasksFetchState.error = undefined;
219
- if (removeFromList) {
220
- removeTaskIds(draft, taskIds);
221
- }
222
- else if (groupId != null) {
190
+ if (groupId != null) {
223
191
  const { groupByKey } = draft.uiState;
224
192
  if (groupByKey === 'groupName') {
225
193
  Object.keys(draft.taskIdsByGroupsIds).forEach((gId) => {
@@ -330,7 +298,6 @@ const taskList = createSlice({
330
298
  }
331
299
  delete draft.taskIdsByGroupsIds[taskGroupId];
332
300
  delete draft.localData.existingTaskGroupNamesByGroupId[taskGroupId];
333
- syncTopLevelToActiveTab(draft);
334
301
  },
335
302
  updateTaskListOnNewTaskCreationSuccess(draft, action) {
336
303
  const { task, taskGroupId, currentTaskState } = action.payload;
@@ -365,7 +332,6 @@ const taskList = createSlice({
365
332
  doUpdateTaskList(draft, task, taskGroupId);
366
333
  }
367
334
  });
368
- syncTopLevelToActiveTab(draft);
369
335
  },
370
336
  updateTaskListOnTaskGroupNameUpdate(draft, action) {
371
337
  const { taskGroupName, taskGroupId } = action.payload;
@@ -429,7 +395,6 @@ const taskList = createSlice({
429
395
  };
430
396
  }
431
397
  }
432
- syncTopLevelToActiveTab(draft);
433
398
  },
434
399
  updateTasksListOnUpdateTaskSuccess(draft) {
435
400
  draft.updateTasksFetchState.fetchState = 'Completed';
@@ -439,15 +404,12 @@ const taskList = createSlice({
439
404
  draft.updateTasksFetchState.fetchState = 'Error';
440
405
  draft.updateTasksFetchState.error = action.payload.error;
441
406
  },
442
- removeTaskFromList(draft, action) {
443
- removeTaskIds(draft, [action.payload]);
444
- },
445
407
  clearTaskList(draft) {
446
408
  Object.assign(draft, initialState);
447
409
  },
448
410
  },
449
411
  });
450
- export const { fetchTaskListPage, fetchTaskList, updateTaskList, updateTaskListTab, updateTaskListFetchStatus, updateTaskListSearchText, updateTaskListUIState, updateTaskFilters, updateTaskListOnNewGroupCreationSuccess, bulkUpdateTaskList, updateTasksListOnBulkUpdateTasksSuccess, updateTasksListOnBulkUpdateTasksFailure, initiateTaskListLocalData, updateTaskListLocalData, updateTaskListOnTaskGroupDeletion, dragNDropTasks, updateTaskListOnNewTaskCreationSuccess, updateTaskListOnTaskGroupNameUpdate, updateTaskFromListView, updateTasksListOnUpdateTaskSuccess, updateTasksListOnUpdateTaskFailure, updateTaskListOnCreateTaskFromTemplateSuccess, removeTaskFromList, clearTaskList, } = taskList.actions;
412
+ export const { fetchTaskListPage, fetchTaskList, updateTaskList, updateTaskListFetchStatus, updateTaskListSearchText, updateTaskListUIState, updateTaskFilters, updateTaskListOnNewGroupCreationSuccess, bulkUpdateTaskList, updateTasksListOnBulkUpdateTasksSuccess, updateTasksListOnBulkUpdateTasksFailure, initiateTaskListLocalData, updateTaskListLocalData, updateTaskListOnTaskGroupDeletion, dragNDropTasks, updateTaskListOnNewTaskCreationSuccess, updateTaskListOnTaskGroupNameUpdate, updateTaskFromListView, updateTasksListOnUpdateTaskSuccess, updateTasksListOnUpdateTaskFailure, updateTaskListOnCreateTaskFromTemplateSuccess, clearTaskList, } = taskList.actions;
451
413
  export default taskList.reducer;
452
414
  /**
453
415
  * helpers
@@ -526,61 +488,6 @@ const getTagsGroupKey = (tags) => {
526
488
  tagIds.sort();
527
489
  return tagIds.join(',');
528
490
  };
529
- const toTabData = (grouped) => ({
530
- taskIds: grouped.taskIds,
531
- taskIdsByAssignees: grouped.taskIdsByAssignees,
532
- taskIdsByDueDate: grouped.taskIdsByDueDate,
533
- taskIdsByGroupsIds: grouped.taskIdsByGroupIds,
534
- taskIdsByPriority: grouped.taskIdsGroupedByPriority,
535
- taskIdsByStatus: grouped.taskIdsGroupedByStatus,
536
- taskIdsByTags: grouped.taskIdsByTags,
537
- });
538
- const syncTopLevelToActiveTab = (draft) => {
539
- const tabData = draft.byTab[draft.currentTab];
540
- tabData.taskIds = draft.taskIds;
541
- tabData.taskIdsByGroupsIds = draft.taskIdsByGroupsIds;
542
- tabData.taskIdsByPriority = draft.taskIdsByPriority;
543
- tabData.taskIdsByStatus = draft.taskIdsByStatus;
544
- tabData.taskIdsByAssignees = draft.taskIdsByAssignees;
545
- tabData.taskIdsByDueDate = draft.taskIdsByDueDate;
546
- tabData.taskIdsByTags = draft.taskIdsByTags;
547
- };
548
- const copyTabDataToTopLevel = (draft, tabData) => {
549
- draft.taskIds = tabData.taskIds;
550
- draft.taskIdsByGroupsIds = tabData.taskIdsByGroupsIds;
551
- draft.taskIdsByPriority = tabData.taskIdsByPriority;
552
- draft.taskIdsByStatus = tabData.taskIdsByStatus;
553
- draft.taskIdsByAssignees = tabData.taskIdsByAssignees;
554
- draft.taskIdsByDueDate = tabData.taskIdsByDueDate;
555
- draft.taskIdsByTags = tabData.taskIdsByTags;
556
- };
557
- const removeIdsFromTabData = (tabData, taskIds) => {
558
- const removedSet = new Set(taskIds);
559
- const isRemoved = (id) => removedSet.has(id);
560
- tabData.taskIds = tabData.taskIds.filter((id) => !isRemoved(id));
561
- Object.keys(tabData.taskIdsByGroupsIds).forEach((gId) => {
562
- tabData.taskIdsByGroupsIds[gId] = tabData.taskIdsByGroupsIds[gId].filter((id) => !isRemoved(id));
563
- });
564
- Object.keys(tabData.taskIdsByPriority).forEach((key) => {
565
- tabData.taskIdsByPriority[key] = tabData.taskIdsByPriority[key].filter((id) => !isRemoved(id));
566
- });
567
- Object.keys(tabData.taskIdsByStatus).forEach((key) => {
568
- tabData.taskIdsByStatus[key] = tabData.taskIdsByStatus[key].filter((id) => !isRemoved(id));
569
- });
570
- Object.keys(tabData.taskIdsByDueDate).forEach((key) => {
571
- tabData.taskIdsByDueDate[key] = tabData.taskIdsByDueDate[key].filter((id) => !isRemoved(id));
572
- });
573
- Object.keys(tabData.taskIdsByAssignees).forEach((key) => {
574
- tabData.taskIdsByAssignees[key] = tabData.taskIdsByAssignees[key].filter((id) => !isRemoved(id));
575
- });
576
- Object.keys(tabData.taskIdsByTags).forEach((key) => {
577
- tabData.taskIdsByTags[key] = tabData.taskIdsByTags[key].filter((id) => !isRemoved(id));
578
- });
579
- };
580
- const removeTaskIds = (draft, taskIds) => {
581
- removeIdsFromTabData(draft, taskIds);
582
- removeIdsFromTabData(draft.byTab[draft.currentTab], taskIds);
583
- };
584
491
  const getGroupedTaskIds = (tasks) => {
585
492
  const taskIds = [];
586
493
  const taskIdsByGroupIds = {};
@@ -1,4 +1,5 @@
1
1
  import { createSelector } from '@reduxjs/toolkit';
2
+ import isEqual from 'lodash/isEqual';
2
3
  import orderBy from 'lodash/orderBy';
3
4
  import { getSortOrder, } from '../../../commonPayloadTypes/sortOrderPayload';
4
5
  import { reduceAnyFetchState } from '../../../commonStateTypes/reduceFetchState';
@@ -14,6 +15,11 @@ import { getUserGroupList } from '../../userGroupListView/userGroupListViewSelec
14
15
  import { getUserList, } from '../../userListView/userListViewSelector';
15
16
  import { allTaskPriority, allTaskStatus, } from '../taskDetailView/taskDetailSelector';
16
17
  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
+ };
17
23
  const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
18
24
  const tasksInOrder = orderBy(tasksList, (task) => {
19
25
  const tagsByIds = getTagsByIds(tagState, task.tagIds);
@@ -28,12 +34,8 @@ const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
28
34
  return task.status.name;
29
35
  case 'priority':
30
36
  return ALL_PRIORITY_CODE.indexOf(task.priority.code);
31
- case 'assignee':
32
- return task.firstAssigneeSortName;
33
37
  case 'timeSpent':
34
38
  return task.timeSpent;
35
- case 'visibility':
36
- return task.isPrivate === true ? 1 : 0;
37
39
  case 'name':
38
40
  default:
39
41
  return task.name.toLowerCase();
@@ -41,7 +43,7 @@ const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
41
43
  }, sortOrder);
42
44
  return tasksInOrder;
43
45
  };
44
- const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRoleState, addressState, taskIds, tagState, userGroupsState, }) => {
46
+ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRoleState, addressState, taskIds, tagState, }) => {
45
47
  const { sortKey, searchText } = taskListState.uiState;
46
48
  const sortOrder = getSortOrder(taskListState.uiState.sortOrder);
47
49
  const tasks = taskIds
@@ -51,15 +53,7 @@ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRole
51
53
  const assigneeUsers = task.assignees
52
54
  .map((userId) => getUserAndUserRole(userState, userRoleState, addressState, userId))
53
55
  .filter((value) => value != null);
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 };
56
+ return { ...task, assigneeUsers };
63
57
  }
64
58
  return undefined;
65
59
  })
@@ -68,7 +62,7 @@ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRole
68
62
  const sortedTaskList = sortTasksList(tagState, filteredTaskList, sortKey, sortOrder);
69
63
  return sortedTaskList;
70
64
  };
71
- const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupState, taskGroupViewState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
65
+ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupState, taskGroupViewState, userState, userRoleState, addressState, tagState, }) => {
72
66
  const { taskGroupsIds } = taskGroupViewState;
73
67
  const taskGroupsWithTasksList = taskGroupsIds
74
68
  .map((taskGroupId) => {
@@ -82,7 +76,6 @@ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupStat
82
76
  addressState,
83
77
  taskIds,
84
78
  tagState,
85
- userGroupsState,
86
79
  });
87
80
  if (taskGroup != null) {
88
81
  return {
@@ -111,9 +104,12 @@ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupStat
111
104
  if (defaultTaskGroup != null) {
112
105
  sortedTaskGroupsWithTasksList.push(defaultTaskGroup);
113
106
  }
114
- return sortedTaskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
107
+ if (isDefaultFilters(taskListState) === false) {
108
+ return sortedTaskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
109
+ }
110
+ return sortedTaskGroupsWithTasksList;
115
111
  };
116
- export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
112
+ export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
117
113
  const assigneeGroups = Object.keys(taskListState.taskIdsByAssignees);
118
114
  const taskGroupsWithTasksList = assigneeGroups.map((groupKey) => {
119
115
  const taskIds = taskListState.taskIdsByAssignees[groupKey];
@@ -125,7 +121,6 @@ export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userSt
125
121
  addressState,
126
122
  taskIds,
127
123
  tagState,
128
- userGroupsState,
129
124
  });
130
125
  const assigneeIds = groupKey.split(',');
131
126
  const groupName = getUsersByUserIds(userState, assigneeIds)
@@ -141,9 +136,12 @@ export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userSt
141
136
  tasks: tasksWithUserDetails,
142
137
  };
143
138
  });
144
- return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
139
+ if (isDefaultFilters(taskListState) === false) {
140
+ return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
141
+ }
142
+ return taskGroupsWithTasksList;
145
143
  };
146
- export const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
144
+ export const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
147
145
  const taskGroupsWithTasksList = ALL_PRIORITY_CODE.map((groupKey) => {
148
146
  const taskIds = taskListState.taskIdsByPriority[groupKey] ?? [];
149
147
  const tasksWithUserDetails = getTasksWithUserDetails({
@@ -154,7 +152,6 @@ export const getTaskListGroupedByPriority = ({ taskListState, taskState, userSta
154
152
  addressState,
155
153
  taskIds,
156
154
  tagState,
157
- userGroupsState,
158
155
  });
159
156
  return {
160
157
  groupName: allTaskPriority.find((priority) => priority.code === groupKey)?.name ??
@@ -164,9 +161,12 @@ export const getTaskListGroupedByPriority = ({ taskListState, taskState, userSta
164
161
  tasks: tasksWithUserDetails,
165
162
  };
166
163
  });
167
- return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
164
+ if (isDefaultFilters(taskListState) === false) {
165
+ return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
166
+ }
167
+ return taskGroupsWithTasksList;
168
168
  };
169
- const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
169
+ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
170
170
  const taskGroupsWithTasksList = ALL_TASK_STATUS_CODE.map((groupKey) => {
171
171
  const taskIds = taskListState.taskIdsByStatus[groupKey] ?? [];
172
172
  const tasksWithUserDetails = getTasksWithUserDetails({
@@ -177,7 +177,6 @@ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userR
177
177
  addressState,
178
178
  taskIds,
179
179
  tagState,
180
- userGroupsState,
181
180
  });
182
181
  return {
183
182
  groupName: allTaskStatus.find((taskStatus) => taskStatus.code === groupKey)
@@ -187,9 +186,12 @@ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userR
187
186
  tasks: tasksWithUserDetails,
188
187
  };
189
188
  });
190
- return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
189
+ if (isDefaultFilters(taskListState) === false) {
190
+ return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
191
+ }
192
+ return taskGroupsWithTasksList;
191
193
  };
192
- const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
194
+ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
193
195
  const tagGroups = Object.keys(taskListState.taskIdsByTags);
194
196
  const taskGroupsWithTasksList = tagGroups.map((groupKey) => {
195
197
  const taskIds = taskListState.taskIdsByTags[groupKey];
@@ -201,7 +203,6 @@ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRol
201
203
  addressState,
202
204
  taskIds,
203
205
  tagState,
204
- userGroupsState,
205
206
  });
206
207
  const tagIds = groupKey.split(',');
207
208
  const groupName = getTagsByIds(tagState, tagIds)
@@ -216,9 +217,12 @@ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRol
216
217
  tasks: tasksWithUserDetails,
217
218
  };
218
219
  });
219
- return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
220
+ if (isDefaultFilters(taskListState) === false) {
221
+ return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
222
+ }
223
+ return taskGroupsWithTasksList;
220
224
  };
221
- const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
225
+ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
222
226
  const taskGroupsWithTasksList = DUE_DATE_GROUP_KEYS.map((groupKey) => {
223
227
  const taskIds = taskListState.taskIdsByDueDate[groupKey];
224
228
  const tasksWithUserDetails = getTasksWithUserDetails({
@@ -229,7 +233,6 @@ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, user
229
233
  addressState,
230
234
  taskIds,
231
235
  tagState,
232
- userGroupsState,
233
236
  });
234
237
  return {
235
238
  groupName: groupKey,
@@ -238,9 +241,12 @@ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, user
238
241
  tasks: tasksWithUserDetails,
239
242
  };
240
243
  });
241
- return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
244
+ if (isDefaultFilters(taskListState) === false) {
245
+ return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
246
+ }
247
+ return taskGroupsWithTasksList;
242
248
  };
243
- const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRoleState, addressState, taskGroupState, taskGroupViewState, tagState, userGroupsState, }) => {
249
+ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRoleState, addressState, taskGroupState, taskGroupViewState, tagState, }) => {
244
250
  const { groupByKey } = taskListState.uiState;
245
251
  if (groupByKey === 'groupName') {
246
252
  return getTaskListGroupedByGroupName({
@@ -252,7 +258,6 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
252
258
  taskGroupState,
253
259
  taskGroupViewState,
254
260
  tagState,
255
- userGroupsState,
256
261
  });
257
262
  }
258
263
  if (groupByKey === 'assignee') {
@@ -263,7 +268,6 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
263
268
  userRoleState,
264
269
  addressState,
265
270
  tagState,
266
- userGroupsState,
267
271
  });
268
272
  }
269
273
  if (groupByKey === 'priority') {
@@ -274,7 +278,6 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
274
278
  userRoleState,
275
279
  addressState,
276
280
  tagState,
277
- userGroupsState,
278
281
  });
279
282
  }
280
283
  if (groupByKey === 'status') {
@@ -285,7 +288,6 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
285
288
  userRoleState,
286
289
  addressState,
287
290
  tagState,
288
- userGroupsState,
289
291
  });
290
292
  }
291
293
  if (groupByKey === 'tag') {
@@ -296,7 +298,6 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
296
298
  userRoleState,
297
299
  addressState,
298
300
  tagState,
299
- userGroupsState,
300
301
  });
301
302
  }
302
303
  return getTaskListGroupedByDueDate({
@@ -306,7 +307,6 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
306
307
  userRoleState,
307
308
  addressState,
308
309
  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,7 +320,6 @@ export const getAllTasks = createSelector((state) => state.taskListState, (state
320
320
  taskGroupState,
321
321
  taskGroupViewState,
322
322
  tagState,
323
- userGroupsState,
324
323
  });
325
324
  const fetchStateVariables = [
326
325
  taskListState,
@@ -332,15 +331,7 @@ export const getAllTasks = createSelector((state) => state.taskListState, (state
332
331
  }
333
332
  const { fetchState, error } = reduceAnyFetchState(fetchStateVariables);
334
333
  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
- };
341
334
  return {
342
- currentTab: taskListState.currentTab,
343
- tabCounts,
344
335
  uiState: taskListState.uiState,
345
336
  filters: taskListState.filters,
346
337
  taskGroupTemplates,