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

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 +0 -2
  3. package/lib/entity/task/taskPayload.d.ts +0 -3
  4. package/lib/entity/task/taskPayload.js +0 -5
  5. package/lib/entity/task/taskState.d.ts +0 -3
  6. package/lib/epic.d.ts +1 -3
  7. package/lib/epic.js +1 -3
  8. package/lib/esm/entity/snackbar/snackbarTypes.js +0 -2
  9. package/lib/esm/entity/task/taskPayload.js +0 -5
  10. package/lib/esm/epic.js +1 -3
  11. package/lib/esm/index.js +4 -4
  12. package/lib/esm/view/companyView/types/cockpitTypes.js +0 -1
  13. package/lib/esm/view/profitAndLossClassesView/profitAndLossClassesByClassHorizontalSelector.js +15 -1
  14. package/lib/esm/view/profitAndLossClassesView/profitAndLossHorizontalEnrichment.js +17 -14
  15. package/lib/esm/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +0 -2
  16. package/lib/esm/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +0 -4
  17. package/lib/esm/view/taskManager/taskDetailView/epics/initializeTaskToLocalStoreEpic.js +0 -1
  18. package/lib/esm/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +0 -1
  19. package/lib/esm/view/taskManager/taskDetailView/taskDetail.js +0 -4
  20. package/lib/esm/view/taskManager/taskDetailView/taskDetailReducer.js +1 -49
  21. package/lib/esm/view/taskManager/taskDetailView/taskDetailSelector.js +0 -3
  22. package/lib/esm/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +0 -6
  23. package/lib/esm/view/taskManager/taskListView/epics/fetchTaskListEpic.js +3 -13
  24. package/lib/esm/view/taskManager/taskListView/taskList.js +0 -8
  25. package/lib/esm/view/taskManager/taskListView/taskListReducer.js +10 -79
  26. package/lib/esm/view/taskManager/taskListView/taskListSelector.js +17 -56
  27. package/lib/index.d.ts +4 -4
  28. package/lib/index.js +4 -8
  29. package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
  30. package/lib/view/companyTaskManagerView/companyTaskManagerViewReducer.d.ts +2 -2
  31. package/lib/view/companyView/types/cockpitTypes.d.ts +1 -1
  32. package/lib/view/companyView/types/cockpitTypes.js +0 -1
  33. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  34. package/lib/view/profitAndLossClassesView/profitAndLossClassesByClassHorizontalSelector.d.ts +2 -0
  35. package/lib/view/profitAndLossClassesView/profitAndLossClassesByClassHorizontalSelector.js +16 -2
  36. package/lib/view/profitAndLossClassesView/profitAndLossHorizontalEnrichment.js +17 -14
  37. package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.d.ts +1 -2
  38. package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +0 -2
  39. package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.d.ts +1 -2
  40. package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +0 -4
  41. package/lib/view/taskManager/taskDetailView/epics/initializeTaskToLocalStoreEpic.js +0 -1
  42. package/lib/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +0 -1
  43. package/lib/view/taskManager/taskDetailView/taskDetail.d.ts +0 -2
  44. package/lib/view/taskManager/taskDetailView/taskDetail.js +0 -4
  45. package/lib/view/taskManager/taskDetailView/taskDetailReducer.d.ts +1 -10
  46. package/lib/view/taskManager/taskDetailView/taskDetailReducer.js +2 -50
  47. package/lib/view/taskManager/taskDetailView/taskDetailSelector.d.ts +0 -2
  48. package/lib/view/taskManager/taskDetailView/taskDetailSelector.js +0 -3
  49. package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.d.ts +0 -6
  50. package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +0 -6
  51. package/lib/view/taskManager/taskListView/epics/fetchTaskListEpic.js +3 -13
  52. package/lib/view/taskManager/taskListView/taskList.d.ts +1 -15
  53. package/lib/view/taskManager/taskListView/taskList.js +1 -10
  54. package/lib/view/taskManager/taskListView/taskListPayload.d.ts +0 -3
  55. package/lib/view/taskManager/taskListView/taskListReducer.d.ts +4 -7
  56. package/lib/view/taskManager/taskListView/taskListReducer.js +11 -80
  57. package/lib/view/taskManager/taskListView/taskListSelector.d.ts +3 -8
  58. package/lib/view/taskManager/taskListView/taskListSelector.js +17 -56
  59. package/package.json +1 -1
  60. package/lib/esm/view/taskManager/taskDetailView/epics/snoozeTaskEpic.js +0 -64
  61. package/lib/esm/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +0 -54
  62. package/lib/view/taskManager/taskDetailView/epics/snoozeTaskEpic.d.ts +0 -9
  63. package/lib/view/taskManager/taskDetailView/epics/snoozeTaskEpic.js +0 -68
  64. package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.d.ts +0 -8
  65. package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +0 -58
@@ -72,19 +72,22 @@ function buildHorizontalClassColumnBalancesSlice(report, classAmounts, totalAmou
72
72
  return getEmptyHorizontalSectionBalancesSlice(report.firstMonthOfFY, timeframe);
73
73
  }
74
74
  const { startDate, endDate } = report.selectedPeriod;
75
- const balances = report.classColumns.map((col, columnIndex) => ({
76
- balance: {
77
- amount: classAmounts[columnIndex] ?? 0,
78
- currencyCode,
79
- currencySymbol,
80
- },
81
- balanceTimeFrame: timeframe,
82
- startDate,
83
- endDate,
84
- type: 'default',
85
- id: col.classId,
86
- label: col.className,
87
- }));
75
+ const balances = report.classColumns.map((col, columnIndex) => {
76
+ const amount = classAmounts[columnIndex] ?? 0;
77
+ return {
78
+ balance: {
79
+ amount,
80
+ currencyCode,
81
+ currencySymbol,
82
+ },
83
+ balanceTimeFrame: timeframe,
84
+ startDate,
85
+ endDate,
86
+ type: amount === 0 ? 'default_with_null_balance' : 'default',
87
+ id: col.classId,
88
+ label: col.className,
89
+ };
90
+ });
88
91
  balances.push({
89
92
  balance: {
90
93
  amount: totalAmount,
@@ -94,7 +97,7 @@ function buildHorizontalClassColumnBalancesSlice(report, classAmounts, totalAmou
94
97
  balanceTimeFrame: timeframe,
95
98
  startDate,
96
99
  endDate,
97
- type: 'default',
100
+ type: totalAmount === 0 ? 'default_with_null_balance' : 'default',
98
101
  id: HORIZONTAL_CLASS_TOTAL_BALANCE_ID,
99
102
  label: 'Total',
100
103
  });
@@ -4,7 +4,6 @@ import { openSnackbar } from '../../../../entity/snackbar/snackbarReducer';
4
4
  import { updateTasks } from '../../../../entity/task/taskReducer';
5
5
  import { getTaskById } from '../../../../entity/task/taskSelector';
6
6
  import { createZeniAPIStatus, isSuccessResponse, } from '../../../../responsePayload';
7
- import { removeTaskFromList } from '../../taskListView/taskListReducer';
8
7
  import { archiveTask, archiveTaskSuccessOrFailure } from '../taskDetailReducer';
9
8
  // Epic function to handle archiving of tasks
10
9
  export const archiveTaskEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(archiveTask.match), mergeMap((action) => handleArchiveTask(action.payload.taskId, state$, zeniAPI)));
@@ -26,7 +25,6 @@ const handleApiResponse = (response, taskId) => {
26
25
  response.data.tasks.length > 0) {
27
26
  const fetchActions = [
28
27
  updateTasks(response.data.tasks),
29
- removeTaskFromList(taskId),
30
28
  archiveTaskSuccessOrFailure({
31
29
  fetchState: 'Completed',
32
30
  taskId,
@@ -2,7 +2,6 @@ import { from, of } from 'rxjs';
2
2
  import { catchError, filter, mergeMap } from 'rxjs/operators';
3
3
  import { openSnackbar } from '../../../../entity/snackbar/snackbarReducer';
4
4
  import { createZeniAPIStatus, isSuccessStatus, } from '../../../../responsePayload';
5
- import { removeTaskFromList } from '../../taskListView/taskListReducer';
6
5
  import { deleteTask, deleteTaskSuccessOrFailure } from '../taskDetailReducer';
7
6
  export const deleteTaskEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(deleteTask.match), mergeMap((action) => {
8
7
  const { taskId } = action.payload;
@@ -11,9 +10,6 @@ export const deleteTaskEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filt
11
10
  .pipe(mergeMap((response) => {
12
11
  if (isSuccessStatus(response)) {
13
12
  const actions = [];
14
- if (taskId != null) {
15
- actions.push(removeTaskFromList(taskId));
16
- }
17
13
  actions.push(deleteTaskSuccessOrFailure({ fetchState: 'Completed', taskId }));
18
14
  return from(actions);
19
15
  }
@@ -25,7 +25,6 @@ export const initializeTaskToLocalStoreEpic = (actions$, state$) => actions$.pip
25
25
  savedRecurringEndDate: task.recurringEndDate,
26
26
  recurringStartDate: task.recurringStartDate,
27
27
  timeSpent: task.timeSpent,
28
- isPrivate: task.isPrivate,
29
28
  };
30
29
  const actions = [
31
30
  saveTaskUpdatesToLocalStore({ taskDetailLocalData, taskId }),
@@ -94,6 +94,5 @@ const prepareTaskPayload = (state, taskId, taskGroupId) => {
94
94
  sync_token: syncToken,
95
95
  task_group_ids: taskGroupId != null ? [taskGroupId] : [],
96
96
  time_spent: convertHHMMStrToMinutes(localData.timeSpent),
97
- ...(taskId == null ? { is_private: localData.isPrivate ?? false } : {}),
98
97
  };
99
98
  };
@@ -31,9 +31,5 @@ export const initialTaskDetail = {
31
31
  fetchState: 'Not-Started',
32
32
  error: undefined,
33
33
  },
34
- snoozeStatus: {
35
- fetchState: 'Not-Started',
36
- error: undefined,
37
- },
38
34
  taskDetailLocalData: initialTaskDetailLocalData,
39
35
  };
@@ -185,54 +185,6 @@ const taskDetailView = createSlice({
185
185
  draft.editTaskStateById[taskId].archiveStatus.fetchState = fetchState;
186
186
  draft.editTaskStateById[taskId].archiveStatus.error = error;
187
187
  },
188
- snoozeTask: {
189
- reducer(draft, action) {
190
- const { taskId } = action.payload;
191
- draft.editTaskStateById[taskId] = {
192
- ...(draft.editTaskStateById[taskId] != null
193
- ? draft.editTaskStateById[taskId]
194
- : initialTaskDetail),
195
- snoozeStatus: {
196
- fetchState: 'In-Progress',
197
- error: undefined,
198
- },
199
- };
200
- },
201
- prepare(taskId, snoozedUntil) {
202
- return {
203
- payload: {
204
- taskId,
205
- snoozedUntil,
206
- },
207
- };
208
- },
209
- },
210
- snoozeTaskSuccessOrFailure(draft, action) {
211
- const { taskId, fetchState, error } = action.payload;
212
- draft.editTaskStateById[taskId].snoozeStatus.fetchState = fetchState;
213
- draft.editTaskStateById[taskId].snoozeStatus.error = error;
214
- },
215
- unsnoozeTask: {
216
- reducer(draft, action) {
217
- const { taskId } = action.payload;
218
- draft.editTaskStateById[taskId] = {
219
- ...(draft.editTaskStateById[taskId] != null
220
- ? draft.editTaskStateById[taskId]
221
- : initialTaskDetail),
222
- snoozeStatus: {
223
- fetchState: 'In-Progress',
224
- error: undefined,
225
- },
226
- };
227
- },
228
- prepare(taskId) {
229
- return {
230
- payload: {
231
- taskId,
232
- },
233
- };
234
- },
235
- },
236
188
  deleteTask: {
237
189
  reducer(draft, action) {
238
190
  const { taskId } = action.payload;
@@ -318,5 +270,5 @@ const taskDetailView = createSlice({
318
270
  },
319
271
  },
320
272
  });
321
- export const { fetchTaskDetailPage, fetchTaskDetail, initializeTaskToLocalStore, updateEditTaskFetchStatus, saveTaskUpdatesToLocalStore, discardTaskUpdatesInLocalStore, saveTaskDetail, archiveTask, archiveTaskSuccessOrFailure, snoozeTask, snoozeTaskSuccessOrFailure, unsnoozeTask, saveTaskSuccessOrFailure, deleteTask, removeTaskDetail, deleteTaskSuccessOrFailure, fetchTaskHistory, updateTaskHistory, updateTaskHistoryFetchStatus, clearTaskDetail, updateCreatedTagToLocalStore, updateDeletedTagToLocalStore, } = taskDetailView.actions;
273
+ export const { fetchTaskDetailPage, fetchTaskDetail, initializeTaskToLocalStore, updateEditTaskFetchStatus, saveTaskUpdatesToLocalStore, discardTaskUpdatesInLocalStore, saveTaskDetail, archiveTask, archiveTaskSuccessOrFailure, saveTaskSuccessOrFailure, deleteTask, removeTaskDetail, deleteTaskSuccessOrFailure, fetchTaskHistory, updateTaskHistory, updateTaskHistoryFetchStatus, clearTaskDetail, updateCreatedTagToLocalStore, updateDeletedTagToLocalStore, } = taskDetailView.actions;
322
274
  export default taskDetailView.reducer;
@@ -21,13 +21,11 @@ export const getTaskDetail = (state, taskId) => {
21
21
  };
22
22
  let taskHistory = [];
23
23
  let createdByUser = undefined;
24
- let snoozedUntil = undefined;
25
24
  if (taskId != null && sourceTaskDetail != null) {
26
25
  const taskEntity = getTaskById(taskState, taskId);
27
26
  const fileIdsInEntity = taskEntity?.fileIds ?? [];
28
27
  if (taskEntity != null) {
29
28
  createdByUser = getUserAndUserRole(userState, userRoleState, addressState, taskEntity.createdBy);
30
- snoozedUntil = taskEntity.snoozedUntil;
31
29
  }
32
30
  if (fileIdsInEntity.length > 0) {
33
31
  fetchStatus = reduceFetchState([
@@ -76,7 +74,6 @@ export const getTaskDetail = (state, taskId) => {
76
74
  version: 0,
77
75
  createdByUser,
78
76
  showTaskDetailFormFooter,
79
- snoozedUntil,
80
77
  };
81
78
  };
82
79
  export const allTaskStatus = [
@@ -71,12 +71,6 @@ const toTaskPayload = (state, task) => {
71
71
  assignees: task.assignees,
72
72
  description: task.description,
73
73
  group_assignees: task.groupAssignees,
74
- is_archived: task.isArchived,
75
- is_deleted: task.isDeleted,
76
- is_snooze_notification_sent: false,
77
- snoozed_at: null,
78
- snoozed_by: null,
79
- snoozed_until: task.snoozedUntil != null ? task.snoozedUntil.toISOString() : null,
80
74
  due_date: task.dueDate != null ? task.dueDate.format(DEFAULT_DATE_FORMAT) : null,
81
75
  priority: task.priority.code,
82
76
  status: task.status.code,
@@ -9,20 +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 ?? [],
12
+ return of(updateTasks(response.data.tasks), updateTaskList({
13
+ data: response.data.tasks,
24
14
  updateType: 'replace',
25
- }), updateTags(allTasks.map((task) => task.tags).flat()));
15
+ }), updateTags(response.data.tasks.map((task) => task.tags).flat()));
26
16
  }
27
17
  else {
28
18
  return of(updateTaskListFetchStatus({
@@ -1,11 +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
- export const toTaskListTabType = (v) => stringToUnion(v, ALL_TASK_LIST_TABS);
9
2
  export const DUE_DATE_GROUP_KEYS = [
10
3
  'overdue',
11
4
  'today',
@@ -33,7 +26,6 @@ const ALL_TASK_LIST_SORT_KEYS = [
33
26
  'status',
34
27
  'priority',
35
28
  'timeSpent',
36
- 'visibility',
37
29
  ];
38
30
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
39
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;
@@ -433,34 +404,12 @@ const taskList = createSlice({
433
404
  draft.updateTasksFetchState.fetchState = 'Error';
434
405
  draft.updateTasksFetchState.error = action.payload.error;
435
406
  },
436
- removeTaskFromList(draft, action) {
437
- const taskIdToRemove = action.payload;
438
- draft.taskIds = draft.taskIds.filter((id) => id !== taskIdToRemove);
439
- Object.keys(draft.taskIdsByGroupsIds).forEach((groupId) => {
440
- draft.taskIdsByGroupsIds[groupId] = draft.taskIdsByGroupsIds[groupId].filter((id) => id !== taskIdToRemove);
441
- });
442
- Object.keys(draft.taskIdsByPriority).forEach((key) => {
443
- draft.taskIdsByPriority[key] = draft.taskIdsByPriority[key].filter((id) => id !== taskIdToRemove);
444
- });
445
- Object.keys(draft.taskIdsByStatus).forEach((key) => {
446
- draft.taskIdsByStatus[key] = draft.taskIdsByStatus[key].filter((id) => id !== taskIdToRemove);
447
- });
448
- Object.keys(draft.taskIdsByDueDate).forEach((key) => {
449
- draft.taskIdsByDueDate[key] = draft.taskIdsByDueDate[key].filter((id) => id !== taskIdToRemove);
450
- });
451
- Object.keys(draft.taskIdsByAssignees).forEach((key) => {
452
- draft.taskIdsByAssignees[key] = draft.taskIdsByAssignees[key].filter((id) => id !== taskIdToRemove);
453
- });
454
- Object.keys(draft.taskIdsByTags).forEach((key) => {
455
- draft.taskIdsByTags[key] = draft.taskIdsByTags[key].filter((id) => id !== taskIdToRemove);
456
- });
457
- },
458
407
  clearTaskList(draft) {
459
408
  Object.assign(draft, initialState);
460
409
  },
461
410
  },
462
411
  });
463
- 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;
464
413
  export default taskList.reducer;
465
414
  /**
466
415
  * helpers
@@ -539,24 +488,6 @@ const getTagsGroupKey = (tags) => {
539
488
  tagIds.sort();
540
489
  return tagIds.join(',');
541
490
  };
542
- const toTabData = (grouped) => ({
543
- taskIds: grouped.taskIds,
544
- taskIdsByAssignees: grouped.taskIdsByAssignees,
545
- taskIdsByDueDate: grouped.taskIdsByDueDate,
546
- taskIdsByGroupsIds: grouped.taskIdsByGroupIds,
547
- taskIdsByPriority: grouped.taskIdsGroupedByPriority,
548
- taskIdsByStatus: grouped.taskIdsGroupedByStatus,
549
- taskIdsByTags: grouped.taskIdsByTags,
550
- });
551
- const copyTabDataToTopLevel = (draft, tabData) => {
552
- draft.taskIds = tabData.taskIds;
553
- draft.taskIdsByGroupsIds = tabData.taskIdsByGroupsIds;
554
- draft.taskIdsByPriority = tabData.taskIdsByPriority;
555
- draft.taskIdsByStatus = tabData.taskIdsByStatus;
556
- draft.taskIdsByAssignees = tabData.taskIdsByAssignees;
557
- draft.taskIdsByDueDate = tabData.taskIdsByDueDate;
558
- draft.taskIdsByTags = tabData.taskIdsByTags;
559
- };
560
491
  const getGroupedTaskIds = (tasks) => {
561
492
  const taskIds = [];
562
493
  const taskIdsByGroupIds = {};
@@ -17,12 +17,8 @@ import { allTaskPriority, allTaskStatus, } from '../taskDetailView/taskDetailSel
17
17
  import { DUE_DATE_GROUP_KEYS, } from './taskList';
18
18
  import { initialState } from './taskListReducer';
19
19
  const isDefaultFilters = (taskListState) => {
20
- if (taskListState.uiState.searchText !== initialState.uiState.searchText) {
21
- return false;
22
- }
23
- const hasNoActiveFilters = taskListState.filters.categories == null ||
24
- taskListState.filters.categories.length === 0;
25
- return (hasNoActiveFilters || isEqual(taskListState.filters, initialState.filters));
20
+ return (isEqual(taskListState.filters, initialState.filters) &&
21
+ initialState.uiState.searchText === taskListState.uiState.searchText);
26
22
  };
27
23
  const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
28
24
  const tasksInOrder = orderBy(tasksList, (task) => {
@@ -38,12 +34,8 @@ const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
38
34
  return task.status.name;
39
35
  case 'priority':
40
36
  return ALL_PRIORITY_CODE.indexOf(task.priority.code);
41
- case 'assignee':
42
- return task.firstAssigneeSortName;
43
37
  case 'timeSpent':
44
38
  return task.timeSpent;
45
- case 'visibility':
46
- return task.isPrivate ? 1 : 0;
47
39
  case 'name':
48
40
  default:
49
41
  return task.name.toLowerCase();
@@ -51,7 +43,7 @@ const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
51
43
  }, sortOrder);
52
44
  return tasksInOrder;
53
45
  };
54
- const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRoleState, addressState, taskIds, tagState, userGroupsState, }) => {
46
+ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRoleState, addressState, taskIds, tagState, }) => {
55
47
  const { sortKey, searchText } = taskListState.uiState;
56
48
  const sortOrder = getSortOrder(taskListState.uiState.sortOrder);
57
49
  const tasks = taskIds
@@ -61,18 +53,7 @@ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRole
61
53
  const assigneeUsers = task.assignees
62
54
  .map((userId) => getUserAndUserRole(userState, userRoleState, addressState, userId))
63
55
  .filter((value) => value != null);
64
- // Compute sort name matching display order: users first, then groups
65
- const firstUser = assigneeUsers[0]?.user;
66
- const firstUserName = (firstUser != null ? getUserName(firstUser) : '') ||
67
- firstUser?.email ||
68
- '';
69
- const firstGroupName = task.groupAssignees
70
- .map((gId) => userGroupsState.userGroupByUserGroupId[gId]?.name)
71
- .find((name) => name != null && name !== '');
72
- const firstAssigneeSortName = (firstUserName ||
73
- firstGroupName ||
74
- '').toLowerCase();
75
- return { ...task, assigneeUsers, firstAssigneeSortName };
56
+ return { ...task, assigneeUsers };
76
57
  }
77
58
  return undefined;
78
59
  })
@@ -81,7 +62,7 @@ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRole
81
62
  const sortedTaskList = sortTasksList(tagState, filteredTaskList, sortKey, sortOrder);
82
63
  return sortedTaskList;
83
64
  };
84
- const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupState, taskGroupViewState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
65
+ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupState, taskGroupViewState, userState, userRoleState, addressState, tagState, }) => {
85
66
  const { taskGroupsIds } = taskGroupViewState;
86
67
  const taskGroupsWithTasksList = taskGroupsIds
87
68
  .map((taskGroupId) => {
@@ -95,7 +76,6 @@ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupStat
95
76
  addressState,
96
77
  taskIds,
97
78
  tagState,
98
- userGroupsState,
99
79
  });
100
80
  if (taskGroup != null) {
101
81
  return {
@@ -124,13 +104,12 @@ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupStat
124
104
  if (defaultTaskGroup != null) {
125
105
  sortedTaskGroupsWithTasksList.push(defaultTaskGroup);
126
106
  }
127
- if (taskListState.currentTab !== 'live' ||
128
- isDefaultFilters(taskListState) === false) {
107
+ if (isDefaultFilters(taskListState) === false) {
129
108
  return sortedTaskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
130
109
  }
131
110
  return sortedTaskGroupsWithTasksList;
132
111
  };
133
- export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
112
+ export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
134
113
  const assigneeGroups = Object.keys(taskListState.taskIdsByAssignees);
135
114
  const taskGroupsWithTasksList = assigneeGroups.map((groupKey) => {
136
115
  const taskIds = taskListState.taskIdsByAssignees[groupKey];
@@ -142,7 +121,6 @@ export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userSt
142
121
  addressState,
143
122
  taskIds,
144
123
  tagState,
145
- userGroupsState,
146
124
  });
147
125
  const assigneeIds = groupKey.split(',');
148
126
  const groupName = getUsersByUserIds(userState, assigneeIds)
@@ -158,13 +136,12 @@ export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userSt
158
136
  tasks: tasksWithUserDetails,
159
137
  };
160
138
  });
161
- if (taskListState.currentTab !== 'live' ||
162
- isDefaultFilters(taskListState) === false) {
139
+ if (isDefaultFilters(taskListState) === false) {
163
140
  return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
164
141
  }
165
142
  return taskGroupsWithTasksList;
166
143
  };
167
- export const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
144
+ export const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
168
145
  const taskGroupsWithTasksList = ALL_PRIORITY_CODE.map((groupKey) => {
169
146
  const taskIds = taskListState.taskIdsByPriority[groupKey] ?? [];
170
147
  const tasksWithUserDetails = getTasksWithUserDetails({
@@ -175,7 +152,6 @@ export const getTaskListGroupedByPriority = ({ taskListState, taskState, userSta
175
152
  addressState,
176
153
  taskIds,
177
154
  tagState,
178
- userGroupsState,
179
155
  });
180
156
  return {
181
157
  groupName: allTaskPriority.find((priority) => priority.code === groupKey)?.name ??
@@ -185,13 +161,12 @@ export const getTaskListGroupedByPriority = ({ taskListState, taskState, userSta
185
161
  tasks: tasksWithUserDetails,
186
162
  };
187
163
  });
188
- if (taskListState.currentTab !== 'live' ||
189
- isDefaultFilters(taskListState) === false) {
164
+ if (isDefaultFilters(taskListState) === false) {
190
165
  return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
191
166
  }
192
167
  return taskGroupsWithTasksList;
193
168
  };
194
- const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
169
+ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
195
170
  const taskGroupsWithTasksList = ALL_TASK_STATUS_CODE.map((groupKey) => {
196
171
  const taskIds = taskListState.taskIdsByStatus[groupKey] ?? [];
197
172
  const tasksWithUserDetails = getTasksWithUserDetails({
@@ -202,7 +177,6 @@ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userR
202
177
  addressState,
203
178
  taskIds,
204
179
  tagState,
205
- userGroupsState,
206
180
  });
207
181
  return {
208
182
  groupName: allTaskStatus.find((taskStatus) => taskStatus.code === groupKey)
@@ -212,13 +186,12 @@ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userR
212
186
  tasks: tasksWithUserDetails,
213
187
  };
214
188
  });
215
- if (taskListState.currentTab !== 'live' ||
216
- isDefaultFilters(taskListState) === false) {
189
+ if (isDefaultFilters(taskListState) === false) {
217
190
  return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
218
191
  }
219
192
  return taskGroupsWithTasksList;
220
193
  };
221
- const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
194
+ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
222
195
  const tagGroups = Object.keys(taskListState.taskIdsByTags);
223
196
  const taskGroupsWithTasksList = tagGroups.map((groupKey) => {
224
197
  const taskIds = taskListState.taskIdsByTags[groupKey];
@@ -230,7 +203,6 @@ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRol
230
203
  addressState,
231
204
  taskIds,
232
205
  tagState,
233
- userGroupsState,
234
206
  });
235
207
  const tagIds = groupKey.split(',');
236
208
  const groupName = getTagsByIds(tagState, tagIds)
@@ -245,13 +217,12 @@ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRol
245
217
  tasks: tasksWithUserDetails,
246
218
  };
247
219
  });
248
- if (taskListState.currentTab !== 'live' ||
249
- isDefaultFilters(taskListState) === false) {
220
+ if (isDefaultFilters(taskListState) === false) {
250
221
  return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
251
222
  }
252
223
  return taskGroupsWithTasksList;
253
224
  };
254
- const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
225
+ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
255
226
  const taskGroupsWithTasksList = DUE_DATE_GROUP_KEYS.map((groupKey) => {
256
227
  const taskIds = taskListState.taskIdsByDueDate[groupKey];
257
228
  const tasksWithUserDetails = getTasksWithUserDetails({
@@ -262,7 +233,6 @@ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, user
262
233
  addressState,
263
234
  taskIds,
264
235
  tagState,
265
- userGroupsState,
266
236
  });
267
237
  return {
268
238
  groupName: groupKey,
@@ -271,13 +241,12 @@ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, user
271
241
  tasks: tasksWithUserDetails,
272
242
  };
273
243
  });
274
- if (taskListState.currentTab !== 'live' ||
275
- isDefaultFilters(taskListState) === false) {
244
+ if (isDefaultFilters(taskListState) === false) {
276
245
  return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
277
246
  }
278
247
  return taskGroupsWithTasksList;
279
248
  };
280
- const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRoleState, addressState, taskGroupState, taskGroupViewState, tagState, userGroupsState, }) => {
249
+ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRoleState, addressState, taskGroupState, taskGroupViewState, tagState, }) => {
281
250
  const { groupByKey } = taskListState.uiState;
282
251
  if (groupByKey === 'groupName') {
283
252
  return getTaskListGroupedByGroupName({
@@ -289,7 +258,6 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
289
258
  taskGroupState,
290
259
  taskGroupViewState,
291
260
  tagState,
292
- userGroupsState,
293
261
  });
294
262
  }
295
263
  if (groupByKey === 'assignee') {
@@ -300,7 +268,6 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
300
268
  userRoleState,
301
269
  addressState,
302
270
  tagState,
303
- userGroupsState,
304
271
  });
305
272
  }
306
273
  if (groupByKey === 'priority') {
@@ -311,7 +278,6 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
311
278
  userRoleState,
312
279
  addressState,
313
280
  tagState,
314
- userGroupsState,
315
281
  });
316
282
  }
317
283
  if (groupByKey === 'status') {
@@ -322,7 +288,6 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
322
288
  userRoleState,
323
289
  addressState,
324
290
  tagState,
325
- userGroupsState,
326
291
  });
327
292
  }
328
293
  if (groupByKey === 'tag') {
@@ -333,7 +298,6 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
333
298
  userRoleState,
334
299
  addressState,
335
300
  tagState,
336
- userGroupsState,
337
301
  });
338
302
  }
339
303
  return getTaskListGroupedByDueDate({
@@ -343,7 +307,6 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
343
307
  userRoleState,
344
308
  addressState,
345
309
  tagState,
346
- userGroupsState,
347
310
  });
348
311
  };
349
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) => {
@@ -357,7 +320,6 @@ export const getAllTasks = createSelector((state) => state.taskListState, (state
357
320
  taskGroupState,
358
321
  taskGroupViewState,
359
322
  tagState,
360
- userGroupsState,
361
323
  });
362
324
  const fetchStateVariables = [
363
325
  taskListState,
@@ -370,7 +332,6 @@ export const getAllTasks = createSelector((state) => state.taskListState, (state
370
332
  const { fetchState, error } = reduceAnyFetchState(fetchStateVariables);
371
333
  const taskGroupTemplates = getTaskGroupTemplateByIds(taskGroupTemplateState, taskGroupTemplateViewState.taskGroupTemplateIds);
372
334
  return {
373
- currentTab: taskListState.currentTab,
374
335
  uiState: taskListState.uiState,
375
336
  filters: taskListState.filters,
376
337
  taskGroupTemplates,