@zeniai/client-epic-state 5.0.21 → 5.0.22-betaJK1

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 (85) hide show
  1. package/lib/entity/file/fileState.d.ts +4 -4
  2. package/lib/entity/file/fileState.js +4 -0
  3. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  4. package/lib/entity/snackbar/snackbarTypes.js +2 -0
  5. package/lib/entity/task/taskPayload.d.ts +3 -0
  6. package/lib/entity/task/taskPayload.js +5 -0
  7. package/lib/entity/task/taskState.d.ts +3 -0
  8. package/lib/entity/transaction/stateTypes/attachment.d.ts +2 -2
  9. package/lib/epic.d.ts +6 -1
  10. package/lib/epic.js +6 -1
  11. package/lib/esm/entity/file/fileState.js +4 -0
  12. package/lib/esm/entity/snackbar/snackbarTypes.js +2 -0
  13. package/lib/esm/entity/task/taskPayload.js +5 -0
  14. package/lib/esm/epic.js +6 -1
  15. package/lib/esm/index.js +5 -4
  16. package/lib/esm/reducer.js +3 -0
  17. package/lib/esm/view/taskManager/cannedResponsesView/cannedResponses.js +1 -0
  18. package/lib/esm/view/taskManager/cannedResponsesView/cannedResponsesPayload.js +1 -0
  19. package/lib/esm/view/taskManager/cannedResponsesView/cannedResponsesReducer.js +61 -0
  20. package/lib/esm/view/taskManager/cannedResponsesView/epics/deleteCannedResponseEpic.js +17 -0
  21. package/lib/esm/view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic.js +20 -0
  22. package/lib/esm/view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic.js +29 -0
  23. package/lib/esm/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +3 -0
  24. package/lib/esm/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +5 -0
  25. package/lib/esm/view/taskManager/taskDetailView/epics/initializeTaskToLocalStoreEpic.js +1 -0
  26. package/lib/esm/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +1 -0
  27. package/lib/esm/view/taskManager/taskDetailView/epics/snoozeTaskEpic.js +65 -0
  28. package/lib/esm/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +56 -0
  29. package/lib/esm/view/taskManager/taskDetailView/taskDetail.js +4 -0
  30. package/lib/esm/view/taskManager/taskDetailView/taskDetailReducer.js +51 -1
  31. package/lib/esm/view/taskManager/taskDetailView/taskDetailSelector.js +15 -2
  32. package/lib/esm/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +56 -21
  33. package/lib/esm/view/taskManager/taskListView/epics/dragNDropTasksEpic.js +1 -0
  34. package/lib/esm/view/taskManager/taskListView/epics/fetchTaskListEpic.js +13 -3
  35. package/lib/esm/view/taskManager/taskListView/epics/updateTaskFromListViewEpic.js +3 -2
  36. package/lib/esm/view/taskManager/taskListView/taskList.js +7 -0
  37. package/lib/esm/view/taskManager/taskListView/taskListReducer.js +91 -12
  38. package/lib/esm/view/taskManager/taskListView/taskListSelector.js +48 -39
  39. package/lib/index.d.ts +6 -4
  40. package/lib/index.js +14 -5
  41. package/lib/reducer.d.ts +3 -0
  42. package/lib/reducer.js +3 -0
  43. package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
  44. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  45. package/lib/view/taskManager/cannedResponsesView/cannedResponses.d.ts +18 -0
  46. package/lib/view/taskManager/cannedResponsesView/cannedResponses.js +2 -0
  47. package/lib/view/taskManager/cannedResponsesView/cannedResponsesPayload.d.ts +11 -0
  48. package/lib/view/taskManager/cannedResponsesView/cannedResponsesPayload.js +2 -0
  49. package/lib/view/taskManager/cannedResponsesView/cannedResponsesReducer.d.ts +30 -0
  50. package/lib/view/taskManager/cannedResponsesView/cannedResponsesReducer.js +65 -0
  51. package/lib/view/taskManager/cannedResponsesView/epics/deleteCannedResponseEpic.d.ts +7 -0
  52. package/lib/view/taskManager/cannedResponsesView/epics/deleteCannedResponseEpic.js +21 -0
  53. package/lib/view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic.d.ts +7 -0
  54. package/lib/view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic.js +24 -0
  55. package/lib/view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic.d.ts +7 -0
  56. package/lib/view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic.js +33 -0
  57. package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.d.ts +2 -1
  58. package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +3 -0
  59. package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.d.ts +2 -1
  60. package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +5 -0
  61. package/lib/view/taskManager/taskDetailView/epics/initializeTaskToLocalStoreEpic.js +1 -0
  62. package/lib/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +1 -0
  63. package/lib/view/taskManager/taskDetailView/epics/snoozeTaskEpic.d.ts +9 -0
  64. package/lib/view/taskManager/taskDetailView/epics/snoozeTaskEpic.js +69 -0
  65. package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.d.ts +9 -0
  66. package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +60 -0
  67. package/lib/view/taskManager/taskDetailView/taskDetail.d.ts +2 -0
  68. package/lib/view/taskManager/taskDetailView/taskDetail.js +4 -0
  69. package/lib/view/taskManager/taskDetailView/taskDetailReducer.d.ts +10 -1
  70. package/lib/view/taskManager/taskDetailView/taskDetailReducer.js +52 -2
  71. package/lib/view/taskManager/taskDetailView/taskDetailSelector.d.ts +5 -0
  72. package/lib/view/taskManager/taskDetailView/taskDetailSelector.js +15 -2
  73. package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.d.ts +6 -7
  74. package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +56 -22
  75. package/lib/view/taskManager/taskListView/epics/dragNDropTasksEpic.js +1 -0
  76. package/lib/view/taskManager/taskListView/epics/fetchTaskListEpic.js +13 -3
  77. package/lib/view/taskManager/taskListView/epics/updateTaskFromListViewEpic.js +3 -2
  78. package/lib/view/taskManager/taskListView/taskList.d.ts +14 -1
  79. package/lib/view/taskManager/taskListView/taskList.js +8 -1
  80. package/lib/view/taskManager/taskListView/taskListPayload.d.ts +3 -0
  81. package/lib/view/taskManager/taskListView/taskListReducer.d.ts +6 -2
  82. package/lib/view/taskManager/taskListView/taskListReducer.js +92 -13
  83. package/lib/view/taskManager/taskListView/taskListSelector.d.ts +9 -3
  84. package/lib/view/taskManager/taskListView/taskListSelector.js +48 -39
  85. package/package.json +1 -1
@@ -5,21 +5,26 @@ 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, updateTasksListOnBulkUpdateTasksFailure, updateTasksListOnBulkUpdateTasksSuccess, } from '../taskListReducer';
9
- export const bulkUpdateTaskListEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(bulkUpdateTaskList.match), switchMap((action) => {
10
- const state = state$.value;
8
+ import { bulkUpdateTaskList, fetchTaskList, updateTasksListOnBulkUpdateTasksFailure, updateTasksListOnBulkUpdateTasksSuccess, } from '../taskListReducer';
9
+ export const bulkUpdateTaskListEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(bulkUpdateTaskList.match), switchMap((action) => {
11
10
  const { taskIds, updates, groupId } = action.payload;
12
- const payload = {
13
- tasks: getTasksListPayload(state, taskIds, updates),
14
- };
11
+ const bulkUpdates = toBulkUpdatesPayload(updates);
12
+ if (groupId != null) {
13
+ bulkUpdates.task_group_ids = [groupId];
14
+ }
15
+ const payload = { task_ids: taskIds, updates: bulkUpdates };
15
16
  return zeniAPI
16
- .putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks`, payload)
17
+ .putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks/bulk-update`, payload)
17
18
  .pipe(mergeMap((response) => {
18
19
  if (isSuccessResponse(response) && response.data != null) {
20
+ const removeFromList = updates.isArchived === true ||
21
+ updates.isDeleted === true ||
22
+ ('snoozedUntil' in updates && updates.snoozedUntil != null);
19
23
  return of(updateTasks(response.data.tasks), updateTasksListOnBulkUpdateTasksSuccess({
20
24
  taskIds,
21
25
  groupId,
22
- }));
26
+ removeFromList,
27
+ }), fetchTaskList());
23
28
  }
24
29
  else {
25
30
  return of(updateTasksListOnBulkUpdateTasksFailure({
@@ -33,19 +38,46 @@ export const bulkUpdateTaskListEpic = (actions$, state$, zeniAPI) => actions$.pi
33
38
  }));
34
39
  }));
35
40
  }));
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;
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;
49
81
  };
50
82
  export const getTaskPayload = (state, taskId, updates) => {
51
83
  const { taskState } = state;
@@ -71,6 +103,9 @@ const toTaskPayload = (state, task) => {
71
103
  assignees: task.assignees,
72
104
  description: task.description,
73
105
  group_assignees: task.groupAssignees,
106
+ is_archived: task.isArchived,
107
+ is_deleted: task.isDeleted,
108
+ snoozed_until: task.snoozedUntil != null ? task.snoozedUntil.toISOString() : null,
74
109
  due_date: task.dueDate != null ? task.dueDate.format(DEFAULT_DATE_FORMAT) : null,
75
110
  priority: task.priority.code,
76
111
  status: task.status.code,
@@ -11,6 +11,7 @@ export const dragNDropTasksEpic = (actions$, state$) => actions$.pipe(filter(dra
11
11
  updateTasksListOnBulkUpdateTasksSuccess({
12
12
  taskIds,
13
13
  groupId,
14
+ removeFromList: false,
14
15
  }),
15
16
  bulkUpdateTaskList(taskIds, groupId, updates),
16
17
  ];
@@ -9,10 +9,20 @@ 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
- return of(updateTasks(response.data.tasks), updateTaskList({
13
- data: response.data.tasks,
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 ?? [],
14
24
  updateType: 'replace',
15
- }), updateTags(response.data.tasks.map((task) => task.tags).flat()));
25
+ }), updateTags(allTasks.map((task) => task.tags).flat()));
16
26
  }
17
27
  else {
18
28
  return of(updateTaskListFetchStatus({
@@ -8,9 +8,10 @@ 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
- const taskData = getTaskPayload(state, taskId, updates);
11
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
12
+ const { snoozed_until: _snoozedUntil, ...taskData } = getTaskPayload(state, taskId, updates);
12
13
  return zeniAPI
13
- .putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks/${taskId}`, { ...taskData })
14
+ .putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks/${taskId}`, taskData)
14
15
  .pipe(mergeMap((response) => {
15
16
  if (isSuccessResponse(response) && response.data != null) {
16
17
  return from([
@@ -1,4 +1,10 @@
1
1
  import { stringToUnion, stringToUnionStrict, } from '../../../commonStateTypes/stringToUnion';
2
+ export const ALL_TASK_LIST_TABS = [
3
+ 'live',
4
+ 'archived',
5
+ 'deleted',
6
+ 'snoozed',
7
+ ];
2
8
  export const DUE_DATE_GROUP_KEYS = [
3
9
  'overdue',
4
10
  'today',
@@ -26,6 +32,7 @@ const ALL_TASK_LIST_SORT_KEYS = [
26
32
  'status',
27
33
  'priority',
28
34
  'timeSpent',
35
+ 'visibility',
29
36
  ];
30
37
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
31
38
  const toTaskListSortKeyType = (v) => stringToUnion(v, ALL_TASK_LIST_SORT_KEYS);
@@ -29,7 +29,23 @@ 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
+ };
32
41
  export const initialState = {
42
+ currentTab: 'live',
43
+ byTab: {
44
+ live: { ...initialTabData },
45
+ archived: { ...initialTabData },
46
+ deleted: { ...initialTabData },
47
+ snoozed: { ...initialTabData },
48
+ },
33
49
  taskIds: [],
34
50
  taskIdsByGroupsIds: {},
35
51
  taskIdsByPriority: initialTaskIdsByPriority,
@@ -86,17 +102,30 @@ const taskList = createSlice({
86
102
  draft.error = undefined;
87
103
  },
88
104
  updateTaskList(draft, action) {
89
- const { data } = action.payload;
105
+ const { data, archived, deleted, snoozed } = action.payload;
90
106
  draft.fetchState = 'Completed';
91
107
  draft.error = undefined;
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;
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);
100
129
  },
101
130
  initiateTaskListLocalData(draft, action) {
102
131
  const { taskGroupById } = action.payload;
@@ -184,10 +213,13 @@ const taskList = createSlice({
184
213
  },
185
214
  },
186
215
  updateTasksListOnBulkUpdateTasksSuccess(draft, action) {
187
- const { taskIds, groupId } = action.payload;
216
+ const { taskIds, groupId, removeFromList } = action.payload;
188
217
  draft.updateTasksFetchState.fetchState = 'Completed';
189
218
  draft.updateTasksFetchState.error = undefined;
190
- if (groupId != null) {
219
+ if (removeFromList) {
220
+ removeTaskIds(draft, taskIds);
221
+ }
222
+ else if (groupId != null) {
191
223
  const { groupByKey } = draft.uiState;
192
224
  if (groupByKey === 'groupName') {
193
225
  Object.keys(draft.taskIdsByGroupsIds).forEach((gId) => {
@@ -404,12 +436,15 @@ const taskList = createSlice({
404
436
  draft.updateTasksFetchState.fetchState = 'Error';
405
437
  draft.updateTasksFetchState.error = action.payload.error;
406
438
  },
439
+ removeTaskFromList(draft, action) {
440
+ removeTaskIds(draft, [action.payload]);
441
+ },
407
442
  clearTaskList(draft) {
408
443
  Object.assign(draft, initialState);
409
444
  },
410
445
  },
411
446
  });
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;
447
+ 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;
413
448
  export default taskList.reducer;
414
449
  /**
415
450
  * helpers
@@ -488,6 +523,50 @@ const getTagsGroupKey = (tags) => {
488
523
  tagIds.sort();
489
524
  return tagIds.join(',');
490
525
  };
526
+ const toTabData = (grouped) => ({
527
+ taskIds: grouped.taskIds,
528
+ taskIdsByAssignees: grouped.taskIdsByAssignees,
529
+ taskIdsByDueDate: grouped.taskIdsByDueDate,
530
+ taskIdsByGroupsIds: grouped.taskIdsByGroupIds,
531
+ taskIdsByPriority: grouped.taskIdsGroupedByPriority,
532
+ taskIdsByStatus: grouped.taskIdsGroupedByStatus,
533
+ taskIdsByTags: grouped.taskIdsByTags,
534
+ });
535
+ const copyTabDataToTopLevel = (draft, tabData) => {
536
+ draft.taskIds = tabData.taskIds;
537
+ draft.taskIdsByGroupsIds = tabData.taskIdsByGroupsIds;
538
+ draft.taskIdsByPriority = tabData.taskIdsByPriority;
539
+ draft.taskIdsByStatus = tabData.taskIdsByStatus;
540
+ draft.taskIdsByAssignees = tabData.taskIdsByAssignees;
541
+ draft.taskIdsByDueDate = tabData.taskIdsByDueDate;
542
+ draft.taskIdsByTags = tabData.taskIdsByTags;
543
+ };
544
+ const removeIdsFromTabData = (tabData, taskIds) => {
545
+ const isRemoved = (id) => taskIds.includes(id);
546
+ tabData.taskIds = tabData.taskIds.filter((id) => !isRemoved(id));
547
+ Object.keys(tabData.taskIdsByGroupsIds).forEach((gId) => {
548
+ tabData.taskIdsByGroupsIds[gId] = tabData.taskIdsByGroupsIds[gId].filter((id) => !isRemoved(id));
549
+ });
550
+ Object.keys(tabData.taskIdsByPriority).forEach((key) => {
551
+ tabData.taskIdsByPriority[key] = tabData.taskIdsByPriority[key].filter((id) => !isRemoved(id));
552
+ });
553
+ Object.keys(tabData.taskIdsByStatus).forEach((key) => {
554
+ tabData.taskIdsByStatus[key] = tabData.taskIdsByStatus[key].filter((id) => !isRemoved(id));
555
+ });
556
+ Object.keys(tabData.taskIdsByDueDate).forEach((key) => {
557
+ tabData.taskIdsByDueDate[key] = tabData.taskIdsByDueDate[key].filter((id) => !isRemoved(id));
558
+ });
559
+ Object.keys(tabData.taskIdsByAssignees).forEach((key) => {
560
+ tabData.taskIdsByAssignees[key] = tabData.taskIdsByAssignees[key].filter((id) => !isRemoved(id));
561
+ });
562
+ Object.keys(tabData.taskIdsByTags).forEach((key) => {
563
+ tabData.taskIdsByTags[key] = tabData.taskIdsByTags[key].filter((id) => !isRemoved(id));
564
+ });
565
+ };
566
+ const removeTaskIds = (draft, taskIds) => {
567
+ removeIdsFromTabData(draft, taskIds);
568
+ removeIdsFromTabData(draft.byTab[draft.currentTab], taskIds);
569
+ };
491
570
  const getGroupedTaskIds = (tasks) => {
492
571
  const taskIds = [];
493
572
  const taskIdsByGroupIds = {};
@@ -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
@@ -537,12 +537,14 @@ import { createTag, deleteTag, fetchTagList } from './view/tagView/tagViewReduce
537
537
  import { TagViewSelectorView, getAllTags } from './view/tagView/tagViewSelector';
538
538
  import { TagViewState } from './view/tagView/tagViewState';
539
539
  import { EditTaskLocalData, initialTaskDetail, initialTaskDetailLocalData } from './view/taskManager/taskDetailView/taskDetail';
540
- import { archiveTask, deleteTask, discardTaskUpdatesInLocalStore, fetchTaskDetailPage, saveTaskDetail, saveTaskUpdatesToLocalStore } from './view/taskManager/taskDetailView/taskDetailReducer';
540
+ import { archiveTask, deleteTask, discardTaskUpdatesInLocalStore, fetchTaskDetailPage, saveTaskDetail, saveTaskUpdatesToLocalStore, snoozeTask, unsnoozeTask } from './view/taskManager/taskDetailView/taskDetailReducer';
541
+ import { CannedResponse, CannedResponsesViewState } from './view/taskManager/cannedResponsesView/cannedResponses';
542
+ import { deleteCannedResponse, fetchCannedResponses, saveCannedResponse } from './view/taskManager/cannedResponsesView/cannedResponsesReducer';
541
543
  import { TaskDetailSelectorView, allTaskPriority, allTaskStatus, getTaskDetail } from './view/taskManager/taskDetailView/taskDetailSelector';
542
544
  import { createTaskFromTaskGroupTemplate } from './view/taskManager/taskGroupTemplateView/taskGroupTemplateViewReducer';
543
545
  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';
546
+ 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';
547
+ import { bulkUpdateTaskList, dragNDropTasks, fetchTaskListPage, initiateTaskListLocalData, removeTaskFromList, updateTaskFilters, updateTaskFromListView, updateTaskListLocalData, updateTaskListSearchText, updateTaskListTab, updateTaskListUIState } from './view/taskManager/taskListView/taskListReducer';
546
548
  import { TaskGroupWithTasksList, TaskListSelectorView, TaskWithUserDetails, getAllTasks } from './view/taskManager/taskListView/taskListSelector';
547
549
  import { getDueDateValueFromDueDateGroupId, getTaskUpdates } from './view/taskManager/taskListView/taskListViewHelpers';
548
550
  import { fetchTasksCard } from './view/tasksCard/tasksCardReducer';
@@ -847,7 +849,7 @@ export { fetchGlobalMerchantRecommendation, createGlobalMerchant, updateCreateGl
847
849
  export { approveVendorGlobalReview, rejectVendorGlobalReview, fetchVendorGlobalReviewView, updateSelectedGlobalMerchant, updateVendorGlobalReviewViewUIState, getVendorGlobalReviewView, getTenantMerchantByMerchantId, toVendorGlobalReviewColumnSortKeyType, VendorGlobalReview, VendorGlobalReviewViewUIState, VendorGlobalReviewViewColumnSortKey, VendorGlobalReviewViewSelectorView, VendorGlobalReviewViewState, VendorGlobalReviewViewLocalData, updateVendorGlobalReviewViewLocalData, GlobalReviewPageCurrentSelectionByColumn, GlobalRecommendationFetchSource, };
848
850
  export { fetchArAging, updateArAgingUIState, fetchArAgingDetail, updateArAgingDetailUIState, ArAgingReport, ArAgingDetail, NestedAgingBalancesByCustomer, getArAgingReport, getArAgingDetailForCustomer, updateArAgingNodeCollapseState, };
849
851
  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, };
852
+ 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, 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
853
  export { Tag, TagState, TagViewState, getAllTags, TagViewSelectorView, fetchTagList, createTag, deleteTag, };
852
854
  export { CardPayment, CardPaymentViewState, SetupIntentData, CardPaymentSelectorView, getAllCardsAndBankPaymentMethods, createCardSetupIntent, confirmCardSetupIntent, addCardPaymentSource, fetchPaymentSources, resetCardPaymentErrorStatuses, clearCardPaymentView, AddCardPaymentSourceType, };
853
855
  export { getAuditReportGroupViewSelectorView, getAuditRuleGroupViewSelectorView, getUserFromAllUsers, AuditReportGroupSelectorView, AuditReportGroupViewSelectorView, AuditRuleGroupViewSelectorView, fetchAuditRuleGroupView, fetchAuditReportGroupView, saveReasonForAuditRule, AuditRuleGroup, AuditRuleGroupReport, AuditReportRule, AuditRuleEntityType, AuditRuleEntityIdType, AuditRuleBypassReason, clearAuditReportGroupViewByCompanyId, };