@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
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  var _a;
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.updateDeletedTagToLocalStore = exports.updateCreatedTagToLocalStore = exports.clearTaskDetail = exports.updateTaskHistoryFetchStatus = exports.updateTaskHistory = exports.fetchTaskHistory = exports.deleteTaskSuccessOrFailure = exports.removeTaskDetail = exports.deleteTask = exports.saveTaskSuccessOrFailure = exports.archiveTaskSuccessOrFailure = exports.archiveTask = exports.saveTaskDetail = exports.discardTaskUpdatesInLocalStore = exports.saveTaskUpdatesToLocalStore = exports.updateEditTaskFetchStatus = exports.initializeTaskToLocalStore = exports.fetchTaskDetail = exports.fetchTaskDetailPage = exports.initialState = void 0;
7
+ exports.updateDeletedTagToLocalStore = exports.updateCreatedTagToLocalStore = exports.clearTaskDetail = exports.updateTaskHistoryFetchStatus = exports.updateTaskHistory = exports.fetchTaskHistory = exports.unsnoozeTask = exports.snoozeTaskSuccessOrFailure = exports.snoozeTask = exports.deleteTaskSuccessOrFailure = exports.removeTaskDetail = exports.deleteTask = exports.saveTaskSuccessOrFailure = exports.archiveTaskSuccessOrFailure = exports.archiveTask = exports.saveTaskDetail = exports.discardTaskUpdatesInLocalStore = exports.saveTaskUpdatesToLocalStore = exports.updateEditTaskFetchStatus = exports.initializeTaskToLocalStore = exports.fetchTaskDetail = exports.fetchTaskDetailPage = exports.initialState = void 0;
8
8
  const toolkit_1 = require("@reduxjs/toolkit");
9
9
  const get_1 = __importDefault(require("lodash/get"));
10
10
  const commonHistory_1 = require("../../spendManagement/commonHistoryView/commonHistory");
@@ -236,6 +236,56 @@ const taskDetailView = (0, toolkit_1.createSlice)({
236
236
  draft.newTaskState.deleteTaskStatus.error = action.payload.error;
237
237
  }
238
238
  },
239
+ snoozeTask: {
240
+ reducer(draft, action) {
241
+ const { taskId } = action.payload;
242
+ draft.editTaskStateById[taskId] = {
243
+ ...(draft.editTaskStateById[taskId] != null
244
+ ? draft.editTaskStateById[taskId]
245
+ : taskDetail_1.initialTaskDetail),
246
+ snoozeStatus: {
247
+ fetchState: 'In-Progress',
248
+ error: undefined,
249
+ },
250
+ };
251
+ },
252
+ prepare(taskId, snoozedUntil) {
253
+ return {
254
+ payload: {
255
+ taskId,
256
+ snoozedUntil,
257
+ },
258
+ };
259
+ },
260
+ },
261
+ snoozeTaskSuccessOrFailure(draft, action) {
262
+ const { taskId, fetchState, error } = action.payload;
263
+ if (draft.editTaskStateById[taskId] != null) {
264
+ draft.editTaskStateById[taskId].snoozeStatus.fetchState = fetchState;
265
+ draft.editTaskStateById[taskId].snoozeStatus.error = error;
266
+ }
267
+ },
268
+ unsnoozeTask: {
269
+ reducer(draft, action) {
270
+ const { taskId } = action.payload;
271
+ draft.editTaskStateById[taskId] = {
272
+ ...(draft.editTaskStateById[taskId] != null
273
+ ? draft.editTaskStateById[taskId]
274
+ : taskDetail_1.initialTaskDetail),
275
+ snoozeStatus: {
276
+ fetchState: 'In-Progress',
277
+ error: undefined,
278
+ },
279
+ };
280
+ },
281
+ prepare(taskId) {
282
+ return {
283
+ payload: {
284
+ taskId,
285
+ },
286
+ };
287
+ },
288
+ },
239
289
  fetchTaskHistory: {
240
290
  reducer(draft, action) {
241
291
  const { taskId, cacheOverride } = action.payload;
@@ -277,5 +327,5 @@ const taskDetailView = (0, toolkit_1.createSlice)({
277
327
  },
278
328
  },
279
329
  });
280
- _a = taskDetailView.actions, exports.fetchTaskDetailPage = _a.fetchTaskDetailPage, exports.fetchTaskDetail = _a.fetchTaskDetail, exports.initializeTaskToLocalStore = _a.initializeTaskToLocalStore, exports.updateEditTaskFetchStatus = _a.updateEditTaskFetchStatus, exports.saveTaskUpdatesToLocalStore = _a.saveTaskUpdatesToLocalStore, exports.discardTaskUpdatesInLocalStore = _a.discardTaskUpdatesInLocalStore, exports.saveTaskDetail = _a.saveTaskDetail, exports.archiveTask = _a.archiveTask, exports.archiveTaskSuccessOrFailure = _a.archiveTaskSuccessOrFailure, exports.saveTaskSuccessOrFailure = _a.saveTaskSuccessOrFailure, exports.deleteTask = _a.deleteTask, exports.removeTaskDetail = _a.removeTaskDetail, exports.deleteTaskSuccessOrFailure = _a.deleteTaskSuccessOrFailure, exports.fetchTaskHistory = _a.fetchTaskHistory, exports.updateTaskHistory = _a.updateTaskHistory, exports.updateTaskHistoryFetchStatus = _a.updateTaskHistoryFetchStatus, exports.clearTaskDetail = _a.clearTaskDetail, exports.updateCreatedTagToLocalStore = _a.updateCreatedTagToLocalStore, exports.updateDeletedTagToLocalStore = _a.updateDeletedTagToLocalStore;
330
+ _a = taskDetailView.actions, exports.fetchTaskDetailPage = _a.fetchTaskDetailPage, exports.fetchTaskDetail = _a.fetchTaskDetail, exports.initializeTaskToLocalStore = _a.initializeTaskToLocalStore, exports.updateEditTaskFetchStatus = _a.updateEditTaskFetchStatus, exports.saveTaskUpdatesToLocalStore = _a.saveTaskUpdatesToLocalStore, exports.discardTaskUpdatesInLocalStore = _a.discardTaskUpdatesInLocalStore, exports.saveTaskDetail = _a.saveTaskDetail, exports.archiveTask = _a.archiveTask, exports.archiveTaskSuccessOrFailure = _a.archiveTaskSuccessOrFailure, exports.saveTaskSuccessOrFailure = _a.saveTaskSuccessOrFailure, exports.deleteTask = _a.deleteTask, exports.removeTaskDetail = _a.removeTaskDetail, exports.deleteTaskSuccessOrFailure = _a.deleteTaskSuccessOrFailure, exports.snoozeTask = _a.snoozeTask, exports.snoozeTaskSuccessOrFailure = _a.snoozeTaskSuccessOrFailure, exports.unsnoozeTask = _a.unsnoozeTask, exports.fetchTaskHistory = _a.fetchTaskHistory, exports.updateTaskHistory = _a.updateTaskHistory, exports.updateTaskHistoryFetchStatus = _a.updateTaskHistoryFetchStatus, exports.clearTaskDetail = _a.clearTaskDetail, exports.updateCreatedTagToLocalStore = _a.updateCreatedTagToLocalStore, exports.updateDeletedTagToLocalStore = _a.updateDeletedTagToLocalStore;
281
331
  exports.default = taskDetailView.reducer;
@@ -3,6 +3,7 @@ import { SelectorView } from '../../../commonStateTypes/viewAndReport/viewAndRep
3
3
  import { Class } from '../../../entity/class/classState';
4
4
  import { File } from '../../../entity/file/fileState';
5
5
  import { TaskPriority, TaskStatus } from '../../../entity/task/taskState';
6
+ import { ZeniDate } from '../../../zeniDayJS';
6
7
  import { RootState } from '../../../reducer';
7
8
  import { UserAndRole } from '../../companyView/types/userAndRole';
8
9
  import { HistoricEvent } from '../../spendManagement/commonHistoryView/commonHistory';
@@ -18,6 +19,10 @@ export interface TaskDetailSelectorView extends SelectorView {
18
19
  updateFileStatusById: Record<ID, FetchStateAndError | undefined>;
19
20
  userList: UserListSelectorView;
20
21
  createdByUser?: UserAndRole;
22
+ isArchived?: boolean;
23
+ isDeleted?: boolean;
24
+ recurringSourceTaskId?: ID;
25
+ snoozedUntil?: ZeniDate | null;
21
26
  }
22
27
  export declare const getTaskDetail: (state: RootState, taskId?: ID) => TaskDetailSelectorView;
23
28
  export declare const allTaskStatus: TaskStatus[];
@@ -12,13 +12,14 @@ const taskSelector_1 = require("../../../entity/task/taskSelector");
12
12
  const userAndRole_1 = require("../../companyView/types/userAndRole");
13
13
  const fileViewSelector_1 = require("../../fileView/fileViewSelector");
14
14
  const userListViewSelector_1 = require("../../userListView/userListViewSelector");
15
+ const taskDetail_1 = require("./taskDetail");
15
16
  const getTaskDetail = (state, taskId) => {
16
17
  const { taskDetailState, classListState, classState, fileState, fileViewState, userState, userRoleState, userListViewState, addressState, taskState, } = state;
17
18
  const deleteFileStatusById = {};
18
19
  const updateFileStatusById = {};
19
20
  let showTaskDetailFormFooter = false;
20
21
  const sourceTaskDetail = taskId != null
21
- ? taskDetailState.editTaskStateById[taskId]
22
+ ? (taskDetailState.editTaskStateById[taskId] ?? taskDetail_1.initialTaskDetail)
22
23
  : taskDetailState.newTaskState;
23
24
  const userList = (0, userListViewSelector_1.getUserList)(userState, userRoleState, userListViewState, 'taskManagerCandidate');
24
25
  let fetchStatus = {
@@ -27,11 +28,19 @@ const getTaskDetail = (state, taskId) => {
27
28
  };
28
29
  let taskHistory = [];
29
30
  let createdByUser = undefined;
31
+ let isArchived = undefined;
32
+ let isDeleted = undefined;
33
+ let recurringSourceTaskId = undefined;
34
+ let snoozedUntil = undefined;
30
35
  if (taskId != null && sourceTaskDetail != null) {
31
36
  const taskEntity = (0, taskSelector_1.getTaskById)(taskState, taskId);
32
37
  const fileIdsInEntity = taskEntity?.fileIds ?? [];
33
38
  if (taskEntity != null) {
34
39
  createdByUser = (0, userAndRole_1.getUserAndUserRole)(userState, userRoleState, addressState, taskEntity.createdBy);
40
+ isArchived = taskEntity.isArchived;
41
+ isDeleted = taskEntity.isDeleted;
42
+ recurringSourceTaskId = taskEntity.recurringSourceTaskId;
43
+ snoozedUntil = taskEntity.snoozedUntil;
35
44
  }
36
45
  if (fileIdsInEntity.length > 0) {
37
46
  fetchStatus = (0, reduceFetchState_1.reduceFetchState)([
@@ -49,7 +58,7 @@ const getTaskDetail = (state, taskId) => {
49
58
  ]);
50
59
  }
51
60
  showTaskDetailFormFooter = showFormFooter(sourceTaskDetail.taskDetailLocalData, taskEntity);
52
- taskHistory = taskDetailState.taskHistoryById[taskId].historicEvents;
61
+ taskHistory = taskDetailState.taskHistoryById[taskId]?.historicEvents ?? [];
53
62
  }
54
63
  else if (taskId == null) {
55
64
  fetchStatus = (0, reduceFetchState_1.reduceFetchState)([userList, classListState]);
@@ -79,7 +88,11 @@ const getTaskDetail = (state, taskId) => {
79
88
  error: fetchStatus.error,
80
89
  version: 0,
81
90
  createdByUser,
91
+ isArchived,
92
+ isDeleted,
93
+ recurringSourceTaskId,
82
94
  showTaskDetailFormFooter,
95
+ snoozedUntil,
83
96
  };
84
97
  };
85
98
  exports.getTaskDetail = getTaskDetail;
@@ -5,23 +5,23 @@ import { updateTasks } from '../../../../entity/task/taskReducer';
5
5
  import { Task } from '../../../../entity/task/taskState';
6
6
  import { RootState } from '../../../../reducer';
7
7
  import { ZeniAPI } from '../../../../zeniAPI';
8
- import { bulkUpdateTaskList, updateTasksListOnBulkUpdateTasksFailure, updateTasksListOnBulkUpdateTasksSuccess } from '../taskListReducer';
9
- export type ActionType = ReturnType<typeof bulkUpdateTaskList> | ReturnType<typeof updateTasks> | ReturnType<typeof updateTasksListOnBulkUpdateTasksFailure> | ReturnType<typeof updateTasksListOnBulkUpdateTasksSuccess>;
10
- export declare const bulkUpdateTaskListEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
11
- /**
12
- * Helpers
13
- */
8
+ import { bulkUpdateTaskList, fetchTaskList, updateTasksListOnBulkUpdateTasksFailure, updateTasksListOnBulkUpdateTasksSuccess } from '../taskListReducer';
9
+ export type ActionType = ReturnType<typeof bulkUpdateTaskList> | ReturnType<typeof fetchTaskList> | ReturnType<typeof updateTasks> | ReturnType<typeof updateTasksListOnBulkUpdateTasksFailure> | ReturnType<typeof updateTasksListOnBulkUpdateTasksSuccess>;
10
+ export declare const bulkUpdateTaskListEpic: (actions$: ActionsObservable<ActionType>, _state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
14
11
  interface UpdateTaskPayload {
15
12
  assignees: string[];
16
13
  description: string;
17
14
  due_date: string | null;
18
15
  file_ids: ID[];
19
16
  group_assignees: string[];
17
+ is_archived: boolean;
18
+ is_deleted: boolean;
20
19
  name: string;
21
20
  priority: string;
22
21
  recurring_end_date: string | null;
23
22
  recurring_frequency: string | null;
24
23
  recurring_start_date: string | null;
24
+ snoozed_until: string | null;
25
25
  status: string;
26
26
  tags: string[];
27
27
  task_group_ids: string[];
@@ -29,6 +29,5 @@ interface UpdateTaskPayload {
29
29
  time_spent: number;
30
30
  type: string;
31
31
  }
32
- export declare const getTasksListPayload: (state: RootState, taskIds: ID[], updates: Partial<Task>) => UpdateTaskPayload[];
33
32
  export declare const getTaskPayload: (state: RootState, taskId: ID, updates: Partial<Task>) => UpdateTaskPayload;
34
33
  export {};
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getTaskPayload = exports.getTasksListPayload = exports.bulkUpdateTaskListEpic = void 0;
6
+ exports.getTaskPayload = exports.bulkUpdateTaskListEpic = void 0;
7
7
  const get_1 = __importDefault(require("lodash/get"));
8
8
  const rxjs_1 = require("rxjs");
9
9
  const operators_1 = require("rxjs/operators");
@@ -12,20 +12,25 @@ const formatZeniDateFY_1 = require("../../../../commonStateTypes/fiscalYearHelpe
12
12
  const taskReducer_1 = require("../../../../entity/task/taskReducer");
13
13
  const responsePayload_1 = require("../../../../responsePayload");
14
14
  const taskListReducer_1 = require("../taskListReducer");
15
- const bulkUpdateTaskListEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(taskListReducer_1.bulkUpdateTaskList.match), (0, operators_1.switchMap)((action) => {
16
- const state = state$.value;
15
+ const bulkUpdateTaskListEpic = (actions$, _state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(taskListReducer_1.bulkUpdateTaskList.match), (0, operators_1.switchMap)((action) => {
17
16
  const { taskIds, updates, groupId } = action.payload;
18
- const payload = {
19
- tasks: (0, exports.getTasksListPayload)(state, taskIds, updates),
20
- };
17
+ const bulkUpdates = toBulkUpdatesPayload(updates);
18
+ if (groupId != null) {
19
+ bulkUpdates.task_group_ids = [groupId];
20
+ }
21
+ const payload = { task_ids: taskIds, updates: bulkUpdates };
21
22
  return zeniAPI
22
- .putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks`, payload)
23
+ .putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks/bulk-update`, payload)
23
24
  .pipe((0, operators_1.mergeMap)((response) => {
24
25
  if ((0, responsePayload_1.isSuccessResponse)(response) && response.data != null) {
26
+ const removeFromList = updates.isArchived === true ||
27
+ updates.isDeleted === true ||
28
+ ('snoozedUntil' in updates && updates.snoozedUntil != null);
25
29
  return (0, rxjs_1.of)((0, taskReducer_1.updateTasks)(response.data.tasks), (0, taskListReducer_1.updateTasksListOnBulkUpdateTasksSuccess)({
26
30
  taskIds,
27
31
  groupId,
28
- }));
32
+ removeFromList,
33
+ }), (0, taskListReducer_1.fetchTaskList)());
29
34
  }
30
35
  else {
31
36
  return (0, rxjs_1.of)((0, taskListReducer_1.updateTasksListOnBulkUpdateTasksFailure)({
@@ -40,21 +45,47 @@ const bulkUpdateTaskListEpic = (actions$, state$, zeniAPI) => actions$.pipe((0,
40
45
  }));
41
46
  }));
42
47
  exports.bulkUpdateTaskListEpic = bulkUpdateTaskListEpic;
43
- const getTasksListPayload = (state, taskIds, updates) => {
44
- const { taskState } = state;
45
- const tasksList = taskIds
46
- .map((taskId) => {
47
- const task = (0, get_1.default)(taskState.taskByID, taskId);
48
- return {
49
- ...task,
50
- ...updates,
51
- };
52
- })
53
- .filter((task) => task != null);
54
- const tasksPayload = tasksList.map((task) => toTaskPayload(state, task));
55
- return tasksPayload;
48
+ /**
49
+ * Helpers
50
+ */
51
+ const toBulkUpdatesPayload = (updates) => {
52
+ const payload = {};
53
+ if (updates.status != null) {
54
+ payload.status = updates.status.code;
55
+ }
56
+ if (updates.priority != null) {
57
+ payload.priority = updates.priority.code;
58
+ }
59
+ if (updates.assignees != null) {
60
+ payload.assignees = updates.assignees;
61
+ }
62
+ if (updates.groupAssignees != null) {
63
+ payload.group_assignees = updates.groupAssignees;
64
+ }
65
+ if (updates.dueDate != null) {
66
+ payload.due_date = updates.dueDate.format(formatZeniDateFY_1.DEFAULT_DATE_FORMAT);
67
+ }
68
+ if (updates.tagIds != null) {
69
+ payload.tags = updates.tagIds;
70
+ }
71
+ if (updates.timeSpent != null) {
72
+ payload.time_spent = (0, formatMinutesToFromHHMM_1.convertHHMMStrToMinutes)(updates.timeSpent.replace(/\D/g, ''));
73
+ }
74
+ if (updates.isArchived != null) {
75
+ payload.is_archived = updates.isArchived;
76
+ }
77
+ if (updates.isDeleted != null) {
78
+ payload.is_deleted = updates.isDeleted;
79
+ }
80
+ // Bulk snooze is not supported — only bulk unsnooze (clear all snooze fields)
81
+ if ('snoozedUntil' in updates) {
82
+ payload.snoozed_until = null;
83
+ payload.snoozed_by = null;
84
+ payload.snoozed_at = null;
85
+ payload.is_snooze_notification_sent = false;
86
+ }
87
+ return payload;
56
88
  };
57
- exports.getTasksListPayload = getTasksListPayload;
58
89
  const getTaskPayload = (state, taskId, updates) => {
59
90
  const { taskState } = state;
60
91
  const taskData = (0, get_1.default)(taskState.taskByID, taskId);
@@ -80,6 +111,9 @@ const toTaskPayload = (state, task) => {
80
111
  assignees: task.assignees,
81
112
  description: task.description,
82
113
  group_assignees: task.groupAssignees,
114
+ is_archived: task.isArchived,
115
+ is_deleted: task.isDeleted,
116
+ snoozed_until: task.snoozedUntil != null ? task.snoozedUntil.toISOString() : null,
83
117
  due_date: task.dueDate != null ? task.dueDate.format(formatZeniDateFY_1.DEFAULT_DATE_FORMAT) : null,
84
118
  priority: task.priority.code,
85
119
  status: task.status.code,
@@ -14,6 +14,7 @@ const dragNDropTasksEpic = (actions$, state$) => actions$.pipe((0, operators_1.f
14
14
  (0, taskListReducer_1.updateTasksListOnBulkUpdateTasksSuccess)({
15
15
  taskIds,
16
16
  groupId,
17
+ removeFromList: false,
17
18
  }),
18
19
  (0, taskListReducer_1.bulkUpdateTaskList)(taskIds, groupId, updates),
19
20
  ];
@@ -12,10 +12,20 @@ const fetchTaskListEpic = (actions$, _state$, zeniAPI) => actions$.pipe((0, oper
12
12
  .getJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks?query=${encodeURIComponent(`{"task_type": "all"}`)}`)
13
13
  .pipe((0, operators_1.mergeMap)((response) => {
14
14
  if ((0, responsePayload_1.isSuccessResponse)(response) && response.data != null) {
15
- return (0, rxjs_1.of)((0, taskReducer_1.updateTasks)(response.data.tasks), (0, taskListReducer_1.updateTaskList)({
16
- data: response.data.tasks,
15
+ const { tasks, deleted, archived, snoozed } = response.data;
16
+ const allTasks = [
17
+ ...tasks,
18
+ ...(deleted ?? []),
19
+ ...(archived ?? []),
20
+ ...(snoozed ?? []),
21
+ ];
22
+ return (0, rxjs_1.of)((0, taskReducer_1.updateTasks)(allTasks), (0, taskListReducer_1.updateTaskList)({
23
+ data: tasks,
24
+ deleted: deleted ?? [],
25
+ archived: archived ?? [],
26
+ snoozed: snoozed ?? [],
17
27
  updateType: 'replace',
18
- }), (0, tagReducer_1.updateTags)(response.data.tasks.map((task) => task.tags).flat()));
28
+ }), (0, tagReducer_1.updateTags)(allTasks.map((task) => task.tags).flat()));
19
29
  }
20
30
  else {
21
31
  return (0, rxjs_1.of)((0, taskListReducer_1.updateTaskListFetchStatus)({
@@ -11,9 +11,10 @@ const updateTaskFromListViewEpic = (actions$, state$, zeniAPI) => actions$.pipe(
11
11
  const state = state$.value;
12
12
  const { task, updates } = action.payload;
13
13
  const taskId = task.id;
14
- const taskData = (0, bulkUpdateTaskListEpic_1.getTaskPayload)(state, taskId, updates);
14
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
15
+ const { snoozed_until: _snoozedUntil, ...taskData } = (0, bulkUpdateTaskListEpic_1.getTaskPayload)(state, taskId, updates);
15
16
  return zeniAPI
16
- .putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks/${taskId}`, { ...taskData })
17
+ .putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks/${taskId}`, taskData)
17
18
  .pipe((0, operators_1.mergeMap)((response) => {
18
19
  if ((0, responsePayload_1.isSuccessResponse)(response) && response.data != null) {
19
20
  return (0, rxjs_1.from)([
@@ -3,6 +3,17 @@ import { PriorityCodeType, TaskStatusCodeType } from '../../../entity/task/taskS
3
3
  import { ZeniDate } from '../../../zeniDayJS';
4
4
  import { SpendManagementUIState } from '../../spendManagement/billPay/billList/billListState';
5
5
  import { CategoryCombinationOperator, FilterCategoryType } from '../../spendManagement/spendManagementFilterHelpers';
6
+ export declare const ALL_TASK_LIST_TABS: readonly ["live", "archived", "deleted", "snoozed"];
7
+ export type TaskListTab = (typeof ALL_TASK_LIST_TABS)[number];
8
+ export interface TaskListTabData {
9
+ taskIds: ID[];
10
+ taskIdsByAssignees: Record<ID, ID[]>;
11
+ taskIdsByDueDate: Record<DueDateGroupKey, ID[]>;
12
+ taskIdsByGroupsIds: Record<ID, ID[]>;
13
+ taskIdsByPriority: Record<PriorityCodeType, ID[]>;
14
+ taskIdsByStatus: Record<TaskStatusCodeType, ID[]>;
15
+ taskIdsByTags: Record<ID, ID[]>;
16
+ }
6
17
  export interface TaskListLocalData {
7
18
  defaultTaskGroupId: ID | null;
8
19
  existingTaskGroupNamesByGroupId: Record<ID, string>;
@@ -13,6 +24,8 @@ export declare const DUE_DATE_GROUP_KEYS: readonly ["overdue", "today", "this_we
13
24
  export declare const toDueDateGroupKeyType: (v: string) => "overdue" | "today" | "this_week" | "this_month" | "upcoming";
14
25
  export declare type DueDateGroupKey = ReturnType<typeof toDueDateGroupKeyType>;
15
26
  export interface TaskListState extends FetchedState {
27
+ byTab: Record<TaskListTab, TaskListTabData>;
28
+ currentTab: TaskListTab;
16
29
  filters: TaskListFilters;
17
30
  localData: TaskListLocalData;
18
31
  taskIds: ID[];
@@ -45,7 +58,7 @@ export interface TaskListUIState extends SpendManagementUIState {
45
58
  searchText: string;
46
59
  sortKey: TaskListViewSortKey;
47
60
  }
48
- declare const toTaskListSortKeyType: (v: string) => "status" | "name" | "dueDate" | "tag" | "priority" | "timeSpent" | "assignee" | "creationDate";
61
+ declare const toTaskListSortKeyType: (v: string) => "status" | "name" | "dueDate" | "tag" | "priority" | "timeSpent" | "assignee" | "creationDate" | "visibility";
49
62
  export declare type TaskListViewSortKey = ReturnType<typeof toTaskListSortKeyType>;
50
63
  export declare const TASK_LIST_FILTER_CATEGORIES: TaskListFilterCategoryOption[];
51
64
  interface TaskListFilterCategoryOption {
@@ -1,7 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TASK_LIST_GROUP_BY_CATEGORIES = exports.TASK_LIST_FILTER_CATEGORIES = exports.toTaskListGroupByKeyTypeStrict = exports.toTaskListGroupByKeyType = exports.TASK_LIST_GROUP_BY_KEYS = exports.toDueDateGroupKeyType = exports.DUE_DATE_GROUP_KEYS = void 0;
3
+ exports.TASK_LIST_GROUP_BY_CATEGORIES = exports.TASK_LIST_FILTER_CATEGORIES = exports.toTaskListGroupByKeyTypeStrict = exports.toTaskListGroupByKeyType = exports.TASK_LIST_GROUP_BY_KEYS = exports.toDueDateGroupKeyType = exports.DUE_DATE_GROUP_KEYS = exports.ALL_TASK_LIST_TABS = void 0;
4
4
  const stringToUnion_1 = require("../../../commonStateTypes/stringToUnion");
5
+ exports.ALL_TASK_LIST_TABS = [
6
+ 'live',
7
+ 'archived',
8
+ 'deleted',
9
+ 'snoozed',
10
+ ];
5
11
  exports.DUE_DATE_GROUP_KEYS = [
6
12
  'overdue',
7
13
  'today',
@@ -32,6 +38,7 @@ const ALL_TASK_LIST_SORT_KEYS = [
32
38
  'status',
33
39
  'priority',
34
40
  'timeSpent',
41
+ 'visibility',
35
42
  ];
36
43
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
37
44
  const toTaskListSortKeyType = (v) => (0, stringToUnion_1.stringToUnion)(v, ALL_TASK_LIST_SORT_KEYS);
@@ -2,6 +2,9 @@ import { TaskPayload } from '../../../entity/task/taskPayload';
2
2
  import { ZeniAPIResponse } from '../../../responsePayload';
3
3
  interface FetchTaskListPayload {
4
4
  tasks: TaskPayload[];
5
+ archived?: TaskPayload[];
6
+ deleted?: TaskPayload[];
7
+ snoozed?: TaskPayload[];
5
8
  }
6
9
  export type FetchTaskListResponse = ZeniAPIResponse<FetchTaskListPayload>;
7
10
  export {};
@@ -12,7 +12,10 @@ export declare const fetchTaskListPage: import("@reduxjs/toolkit").ActionCreator
12
12
  }, "taskList/fetchTaskListPage", never, never>, fetchTaskList: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"taskList/fetchTaskList">, updateTaskList: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
13
13
  data: TaskPayload[];
14
14
  updateType: UpdateType;
15
- }, "taskList/updateTaskList">, updateTaskListFetchStatus: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
15
+ archived?: TaskPayload[];
16
+ deleted?: TaskPayload[];
17
+ snoozed?: TaskPayload[];
18
+ }, "taskList/updateTaskList">, updateTaskListTab: import("@reduxjs/toolkit").ActionCreatorWithPayload<"deleted" | "live" | "archived" | "snoozed", "taskList/updateTaskListTab">, updateTaskListFetchStatus: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
16
19
  fetchState: FetchState;
17
20
  error?: ZeniAPIStatus;
18
21
  }, "taskList/updateTaskListFetchStatus">, updateTaskListSearchText: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
@@ -29,6 +32,7 @@ export declare const fetchTaskListPage: import("@reduxjs/toolkit").ActionCreator
29
32
  groupId: string;
30
33
  }, "taskList/bulkUpdateTaskList", never, never>, updateTasksListOnBulkUpdateTasksSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
31
34
  groupId: ID | null;
35
+ removeFromList: boolean;
32
36
  taskIds: ID[];
33
37
  }, "taskList/updateTasksListOnBulkUpdateTasksSuccess">, updateTasksListOnBulkUpdateTasksFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
34
38
  error: ZeniAPIStatus;
@@ -55,6 +59,6 @@ export declare const fetchTaskListPage: import("@reduxjs/toolkit").ActionCreator
55
59
  error: ZeniAPIStatus;
56
60
  }, "taskList/updateTasksListOnUpdateTaskFailure">, updateTaskListOnCreateTaskFromTemplateSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
57
61
  tasks: TaskPayload[];
58
- }, "taskList/updateTaskListOnCreateTaskFromTemplateSuccess">, clearTaskList: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"taskList/clearTaskList">;
62
+ }, "taskList/updateTaskListOnCreateTaskFromTemplateSuccess">, removeTaskFromList: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "taskList/removeTaskFromList">, clearTaskList: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"taskList/clearTaskList">;
59
63
  declare const _default: import("redux").Reducer<TaskListState>;
60
64
  export default _default;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.clearTaskList = exports.updateTaskListOnCreateTaskFromTemplateSuccess = exports.updateTasksListOnUpdateTaskFailure = exports.updateTasksListOnUpdateTaskSuccess = exports.updateTaskFromListView = exports.updateTaskListOnTaskGroupNameUpdate = exports.updateTaskListOnNewTaskCreationSuccess = exports.dragNDropTasks = exports.updateTaskListOnTaskGroupDeletion = exports.updateTaskListLocalData = exports.initiateTaskListLocalData = exports.updateTasksListOnBulkUpdateTasksFailure = exports.updateTasksListOnBulkUpdateTasksSuccess = exports.bulkUpdateTaskList = exports.updateTaskListOnNewGroupCreationSuccess = exports.updateTaskFilters = exports.updateTaskListUIState = exports.updateTaskListSearchText = exports.updateTaskListFetchStatus = exports.updateTaskList = exports.fetchTaskList = exports.fetchTaskListPage = exports.initialState = void 0;
4
+ exports.clearTaskList = exports.removeTaskFromList = exports.updateTaskListOnCreateTaskFromTemplateSuccess = exports.updateTasksListOnUpdateTaskFailure = exports.updateTasksListOnUpdateTaskSuccess = exports.updateTaskFromListView = exports.updateTaskListOnTaskGroupNameUpdate = exports.updateTaskListOnNewTaskCreationSuccess = exports.dragNDropTasks = exports.updateTaskListOnTaskGroupDeletion = exports.updateTaskListLocalData = exports.initiateTaskListLocalData = exports.updateTasksListOnBulkUpdateTasksFailure = exports.updateTasksListOnBulkUpdateTasksSuccess = exports.bulkUpdateTaskList = exports.updateTaskListOnNewGroupCreationSuccess = exports.updateTaskFilters = exports.updateTaskListUIState = exports.updateTaskListSearchText = exports.updateTaskListFetchStatus = exports.updateTaskListTab = exports.updateTaskList = exports.fetchTaskList = exports.fetchTaskListPage = exports.initialState = void 0;
5
5
  const toolkit_1 = require("@reduxjs/toolkit");
6
6
  const taskState_1 = require("../../../entity/task/taskState");
7
7
  const zeniDayJS_1 = require("../../../zeniDayJS");
@@ -33,7 +33,23 @@ const initialTaskIdsByDueDate = {
33
33
  today: [],
34
34
  upcoming: [],
35
35
  };
36
+ const initialTabData = {
37
+ taskIds: [],
38
+ taskIdsByAssignees: {},
39
+ taskIdsByDueDate: { ...initialTaskIdsByDueDate },
40
+ taskIdsByGroupsIds: {},
41
+ taskIdsByPriority: { ...initialTaskIdsByPriority },
42
+ taskIdsByStatus: { ...initialTaskIdsByStatus },
43
+ taskIdsByTags: {},
44
+ };
36
45
  exports.initialState = {
46
+ currentTab: 'live',
47
+ byTab: {
48
+ live: { ...initialTabData },
49
+ archived: { ...initialTabData },
50
+ deleted: { ...initialTabData },
51
+ snoozed: { ...initialTabData },
52
+ },
37
53
  taskIds: [],
38
54
  taskIdsByGroupsIds: {},
39
55
  taskIdsByPriority: initialTaskIdsByPriority,
@@ -90,17 +106,30 @@ const taskList = (0, toolkit_1.createSlice)({
90
106
  draft.error = undefined;
91
107
  },
92
108
  updateTaskList(draft, action) {
93
- const { data } = action.payload;
109
+ const { data, archived, deleted, snoozed } = action.payload;
94
110
  draft.fetchState = 'Completed';
95
111
  draft.error = undefined;
96
- const { taskIds, taskIdsGroupedByPriority, taskIdsByGroupIds, taskIdsGroupedByStatus, taskIdsByAssignees, taskIdsByDueDate, taskIdsByTags, } = getGroupedTaskIds(data);
97
- draft.taskIds = taskIds;
98
- draft.taskIdsByGroupsIds = taskIdsByGroupIds;
99
- draft.taskIdsByPriority = taskIdsGroupedByPriority;
100
- draft.taskIdsByStatus = taskIdsGroupedByStatus;
101
- draft.taskIdsByAssignees = taskIdsByAssignees;
102
- draft.taskIdsByDueDate = taskIdsByDueDate;
103
- draft.taskIdsByTags = taskIdsByTags;
112
+ // Group live tasks
113
+ const liveGrouped = getGroupedTaskIds(data);
114
+ draft.byTab.live = toTabData(liveGrouped);
115
+ // Group other tabs if provided
116
+ if (archived != null) {
117
+ draft.byTab.archived = toTabData(getGroupedTaskIds(archived));
118
+ }
119
+ if (deleted != null) {
120
+ draft.byTab.deleted = toTabData(getGroupedTaskIds(deleted));
121
+ }
122
+ if (snoozed != null) {
123
+ draft.byTab.snoozed = toTabData(getGroupedTaskIds(snoozed));
124
+ }
125
+ // Copy active tab data to top-level fields
126
+ const activeTabData = draft.byTab[draft.currentTab];
127
+ copyTabDataToTopLevel(draft, activeTabData);
128
+ },
129
+ updateTaskListTab(draft, action) {
130
+ draft.currentTab = action.payload;
131
+ const activeTabData = draft.byTab[action.payload];
132
+ copyTabDataToTopLevel(draft, activeTabData);
104
133
  },
105
134
  initiateTaskListLocalData(draft, action) {
106
135
  const { taskGroupById } = action.payload;
@@ -188,10 +217,13 @@ const taskList = (0, toolkit_1.createSlice)({
188
217
  },
189
218
  },
190
219
  updateTasksListOnBulkUpdateTasksSuccess(draft, action) {
191
- const { taskIds, groupId } = action.payload;
220
+ const { taskIds, groupId, removeFromList } = action.payload;
192
221
  draft.updateTasksFetchState.fetchState = 'Completed';
193
222
  draft.updateTasksFetchState.error = undefined;
194
- if (groupId != null) {
223
+ if (removeFromList) {
224
+ removeTaskIds(draft, taskIds);
225
+ }
226
+ else if (groupId != null) {
195
227
  const { groupByKey } = draft.uiState;
196
228
  if (groupByKey === 'groupName') {
197
229
  Object.keys(draft.taskIdsByGroupsIds).forEach((gId) => {
@@ -408,12 +440,15 @@ const taskList = (0, toolkit_1.createSlice)({
408
440
  draft.updateTasksFetchState.fetchState = 'Error';
409
441
  draft.updateTasksFetchState.error = action.payload.error;
410
442
  },
443
+ removeTaskFromList(draft, action) {
444
+ removeTaskIds(draft, [action.payload]);
445
+ },
411
446
  clearTaskList(draft) {
412
447
  Object.assign(draft, exports.initialState);
413
448
  },
414
449
  },
415
450
  });
416
- _a = taskList.actions, exports.fetchTaskListPage = _a.fetchTaskListPage, exports.fetchTaskList = _a.fetchTaskList, exports.updateTaskList = _a.updateTaskList, exports.updateTaskListFetchStatus = _a.updateTaskListFetchStatus, exports.updateTaskListSearchText = _a.updateTaskListSearchText, exports.updateTaskListUIState = _a.updateTaskListUIState, exports.updateTaskFilters = _a.updateTaskFilters, exports.updateTaskListOnNewGroupCreationSuccess = _a.updateTaskListOnNewGroupCreationSuccess, exports.bulkUpdateTaskList = _a.bulkUpdateTaskList, exports.updateTasksListOnBulkUpdateTasksSuccess = _a.updateTasksListOnBulkUpdateTasksSuccess, exports.updateTasksListOnBulkUpdateTasksFailure = _a.updateTasksListOnBulkUpdateTasksFailure, exports.initiateTaskListLocalData = _a.initiateTaskListLocalData, exports.updateTaskListLocalData = _a.updateTaskListLocalData, exports.updateTaskListOnTaskGroupDeletion = _a.updateTaskListOnTaskGroupDeletion, exports.dragNDropTasks = _a.dragNDropTasks, exports.updateTaskListOnNewTaskCreationSuccess = _a.updateTaskListOnNewTaskCreationSuccess, exports.updateTaskListOnTaskGroupNameUpdate = _a.updateTaskListOnTaskGroupNameUpdate, exports.updateTaskFromListView = _a.updateTaskFromListView, exports.updateTasksListOnUpdateTaskSuccess = _a.updateTasksListOnUpdateTaskSuccess, exports.updateTasksListOnUpdateTaskFailure = _a.updateTasksListOnUpdateTaskFailure, exports.updateTaskListOnCreateTaskFromTemplateSuccess = _a.updateTaskListOnCreateTaskFromTemplateSuccess, exports.clearTaskList = _a.clearTaskList;
451
+ _a = taskList.actions, exports.fetchTaskListPage = _a.fetchTaskListPage, exports.fetchTaskList = _a.fetchTaskList, exports.updateTaskList = _a.updateTaskList, exports.updateTaskListTab = _a.updateTaskListTab, exports.updateTaskListFetchStatus = _a.updateTaskListFetchStatus, exports.updateTaskListSearchText = _a.updateTaskListSearchText, exports.updateTaskListUIState = _a.updateTaskListUIState, exports.updateTaskFilters = _a.updateTaskFilters, exports.updateTaskListOnNewGroupCreationSuccess = _a.updateTaskListOnNewGroupCreationSuccess, exports.bulkUpdateTaskList = _a.bulkUpdateTaskList, exports.updateTasksListOnBulkUpdateTasksSuccess = _a.updateTasksListOnBulkUpdateTasksSuccess, exports.updateTasksListOnBulkUpdateTasksFailure = _a.updateTasksListOnBulkUpdateTasksFailure, exports.initiateTaskListLocalData = _a.initiateTaskListLocalData, exports.updateTaskListLocalData = _a.updateTaskListLocalData, exports.updateTaskListOnTaskGroupDeletion = _a.updateTaskListOnTaskGroupDeletion, exports.dragNDropTasks = _a.dragNDropTasks, exports.updateTaskListOnNewTaskCreationSuccess = _a.updateTaskListOnNewTaskCreationSuccess, exports.updateTaskListOnTaskGroupNameUpdate = _a.updateTaskListOnTaskGroupNameUpdate, exports.updateTaskFromListView = _a.updateTaskFromListView, exports.updateTasksListOnUpdateTaskSuccess = _a.updateTasksListOnUpdateTaskSuccess, exports.updateTasksListOnUpdateTaskFailure = _a.updateTasksListOnUpdateTaskFailure, exports.updateTaskListOnCreateTaskFromTemplateSuccess = _a.updateTaskListOnCreateTaskFromTemplateSuccess, exports.removeTaskFromList = _a.removeTaskFromList, exports.clearTaskList = _a.clearTaskList;
417
452
  exports.default = taskList.reducer;
418
453
  /**
419
454
  * helpers
@@ -492,6 +527,50 @@ const getTagsGroupKey = (tags) => {
492
527
  tagIds.sort();
493
528
  return tagIds.join(',');
494
529
  };
530
+ const toTabData = (grouped) => ({
531
+ taskIds: grouped.taskIds,
532
+ taskIdsByAssignees: grouped.taskIdsByAssignees,
533
+ taskIdsByDueDate: grouped.taskIdsByDueDate,
534
+ taskIdsByGroupsIds: grouped.taskIdsByGroupIds,
535
+ taskIdsByPriority: grouped.taskIdsGroupedByPriority,
536
+ taskIdsByStatus: grouped.taskIdsGroupedByStatus,
537
+ taskIdsByTags: grouped.taskIdsByTags,
538
+ });
539
+ const copyTabDataToTopLevel = (draft, tabData) => {
540
+ draft.taskIds = tabData.taskIds;
541
+ draft.taskIdsByGroupsIds = tabData.taskIdsByGroupsIds;
542
+ draft.taskIdsByPriority = tabData.taskIdsByPriority;
543
+ draft.taskIdsByStatus = tabData.taskIdsByStatus;
544
+ draft.taskIdsByAssignees = tabData.taskIdsByAssignees;
545
+ draft.taskIdsByDueDate = tabData.taskIdsByDueDate;
546
+ draft.taskIdsByTags = tabData.taskIdsByTags;
547
+ };
548
+ const removeIdsFromTabData = (tabData, taskIds) => {
549
+ const isRemoved = (id) => taskIds.includes(id);
550
+ tabData.taskIds = tabData.taskIds.filter((id) => !isRemoved(id));
551
+ Object.keys(tabData.taskIdsByGroupsIds).forEach((gId) => {
552
+ tabData.taskIdsByGroupsIds[gId] = tabData.taskIdsByGroupsIds[gId].filter((id) => !isRemoved(id));
553
+ });
554
+ Object.keys(tabData.taskIdsByPriority).forEach((key) => {
555
+ tabData.taskIdsByPriority[key] = tabData.taskIdsByPriority[key].filter((id) => !isRemoved(id));
556
+ });
557
+ Object.keys(tabData.taskIdsByStatus).forEach((key) => {
558
+ tabData.taskIdsByStatus[key] = tabData.taskIdsByStatus[key].filter((id) => !isRemoved(id));
559
+ });
560
+ Object.keys(tabData.taskIdsByDueDate).forEach((key) => {
561
+ tabData.taskIdsByDueDate[key] = tabData.taskIdsByDueDate[key].filter((id) => !isRemoved(id));
562
+ });
563
+ Object.keys(tabData.taskIdsByAssignees).forEach((key) => {
564
+ tabData.taskIdsByAssignees[key] = tabData.taskIdsByAssignees[key].filter((id) => !isRemoved(id));
565
+ });
566
+ Object.keys(tabData.taskIdsByTags).forEach((key) => {
567
+ tabData.taskIdsByTags[key] = tabData.taskIdsByTags[key].filter((id) => !isRemoved(id));
568
+ });
569
+ };
570
+ const removeTaskIds = (draft, taskIds) => {
571
+ removeIdsFromTabData(draft, taskIds);
572
+ removeIdsFromTabData(draft.byTab[draft.currentTab], taskIds);
573
+ };
495
574
  const getGroupedTaskIds = (tasks) => {
496
575
  const taskIds = [];
497
576
  const taskIdsByGroupIds = {};