@zeniai/client-epic-state 5.0.2-betaRR01 → 5.0.2-betaRR02

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 (54) hide show
  1. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  2. package/lib/entity/snackbar/snackbarTypes.js +2 -0
  3. package/lib/entity/task/taskPayload.d.ts +3 -0
  4. package/lib/entity/task/taskPayload.js +5 -0
  5. package/lib/entity/task/taskState.d.ts +3 -0
  6. package/lib/epic.d.ts +3 -1
  7. package/lib/epic.js +3 -1
  8. package/lib/esm/entity/snackbar/snackbarTypes.js +2 -0
  9. package/lib/esm/entity/task/taskPayload.js +5 -0
  10. package/lib/esm/epic.js +3 -1
  11. package/lib/esm/index.js +4 -4
  12. package/lib/esm/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +3 -0
  13. package/lib/esm/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +5 -0
  14. package/lib/esm/view/taskManager/taskDetailView/epics/snoozeTaskEpic.js +65 -0
  15. package/lib/esm/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +56 -0
  16. package/lib/esm/view/taskManager/taskDetailView/taskDetail.js +4 -0
  17. package/lib/esm/view/taskManager/taskDetailView/taskDetailReducer.js +49 -1
  18. package/lib/esm/view/taskManager/taskDetailView/taskDetailSelector.js +9 -0
  19. package/lib/esm/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +56 -21
  20. package/lib/esm/view/taskManager/taskListView/epics/dragNDropTasksEpic.js +1 -0
  21. package/lib/esm/view/taskManager/taskListView/epics/fetchTaskListEpic.js +13 -3
  22. package/lib/esm/view/taskManager/taskListView/taskList.js +7 -0
  23. package/lib/esm/view/taskManager/taskListView/taskListReducer.js +91 -12
  24. package/lib/esm/view/taskManager/taskListView/taskListSelector.js +22 -6
  25. package/lib/index.d.ts +4 -4
  26. package/lib/index.js +9 -4
  27. package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
  28. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  29. package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.d.ts +2 -1
  30. package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +3 -0
  31. package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.d.ts +2 -1
  32. package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +5 -0
  33. package/lib/view/taskManager/taskDetailView/epics/snoozeTaskEpic.d.ts +9 -0
  34. package/lib/view/taskManager/taskDetailView/epics/snoozeTaskEpic.js +69 -0
  35. package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.d.ts +9 -0
  36. package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +60 -0
  37. package/lib/view/taskManager/taskDetailView/taskDetail.d.ts +1 -0
  38. package/lib/view/taskManager/taskDetailView/taskDetail.js +4 -0
  39. package/lib/view/taskManager/taskDetailView/taskDetailReducer.d.ts +10 -1
  40. package/lib/view/taskManager/taskDetailView/taskDetailReducer.js +50 -2
  41. package/lib/view/taskManager/taskDetailView/taskDetailSelector.d.ts +4 -0
  42. package/lib/view/taskManager/taskDetailView/taskDetailSelector.js +9 -0
  43. package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.d.ts +6 -7
  44. package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +56 -22
  45. package/lib/view/taskManager/taskListView/epics/dragNDropTasksEpic.js +1 -0
  46. package/lib/view/taskManager/taskListView/epics/fetchTaskListEpic.js +13 -3
  47. package/lib/view/taskManager/taskListView/taskList.d.ts +14 -1
  48. package/lib/view/taskManager/taskListView/taskList.js +8 -1
  49. package/lib/view/taskManager/taskListView/taskListPayload.d.ts +3 -0
  50. package/lib/view/taskManager/taskListView/taskListReducer.d.ts +6 -2
  51. package/lib/view/taskManager/taskListView/taskListReducer.js +92 -13
  52. package/lib/view/taskManager/taskListView/taskListSelector.d.ts +3 -1
  53. package/lib/view/taskManager/taskListView/taskListSelector.js +22 -6
  54. package/package.json +1 -1
@@ -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 = {};
@@ -10,7 +10,7 @@ import { RootState } from '../../../reducer';
10
10
  import { UserAndRole } from '../../companyView/types/userAndRole';
11
11
  import { UserGroupListSelectorView } from '../../userGroupListView/userGroupListViewSelector';
12
12
  import { UserListSelectorView } from '../../userListView/userListViewSelector';
13
- import { TaskListFilters, TaskListLocalData, TaskListState, TaskListUIState } from './taskList';
13
+ import { TaskListFilters, TaskListLocalData, TaskListState, TaskListTab, TaskListUIState } from './taskList';
14
14
  export interface TaskWithUserDetails extends Task {
15
15
  assigneeUsers: UserAndRole[];
16
16
  }
@@ -21,8 +21,10 @@ export interface TaskGroupWithTasksList {
21
21
  tasks: TaskWithUserDetails[];
22
22
  }
23
23
  export interface TaskListSelectorView extends SelectorView {
24
+ currentTab: TaskListTab;
24
25
  filters: TaskListFilters;
25
26
  localData: TaskListLocalData;
27
+ tabCounts: Record<TaskListTab, number>;
26
28
  taskCreationFromTemplateStatus: FetchStateAndError;
27
29
  taskGroupCreationStatus: FetchStateAndError;
28
30
  taskGroupDeleteStatus: FetchStateAndError;
@@ -42,6 +42,8 @@ const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
42
42
  return taskState_1.ALL_PRIORITY_CODE.indexOf(task.priority.code);
43
43
  case 'timeSpent':
44
44
  return task.timeSpent;
45
+ case 'visibility':
46
+ return task.isPrivate ? 1 : 0;
45
47
  case 'name':
46
48
  default:
47
49
  return task.name.toLowerCase();
@@ -110,7 +112,8 @@ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupStat
110
112
  if (defaultTaskGroup != null) {
111
113
  sortedTaskGroupsWithTasksList.push(defaultTaskGroup);
112
114
  }
113
- if (isDefaultFilters(taskListState) === false) {
115
+ if (taskListState.currentTab !== 'live' ||
116
+ isDefaultFilters(taskListState) === false) {
114
117
  return sortedTaskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
115
118
  }
116
119
  return sortedTaskGroupsWithTasksList;
@@ -142,7 +145,8 @@ const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, us
142
145
  tasks: tasksWithUserDetails,
143
146
  };
144
147
  });
145
- if (isDefaultFilters(taskListState) === false) {
148
+ if (taskListState.currentTab !== 'live' ||
149
+ isDefaultFilters(taskListState) === false) {
146
150
  return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
147
151
  }
148
152
  return taskGroupsWithTasksList;
@@ -168,7 +172,8 @@ const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, use
168
172
  tasks: tasksWithUserDetails,
169
173
  };
170
174
  });
171
- if (isDefaultFilters(taskListState) === false) {
175
+ if (taskListState.currentTab !== 'live' ||
176
+ isDefaultFilters(taskListState) === false) {
172
177
  return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
173
178
  }
174
179
  return taskGroupsWithTasksList;
@@ -194,7 +199,8 @@ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userR
194
199
  tasks: tasksWithUserDetails,
195
200
  };
196
201
  });
197
- if (isDefaultFilters(taskListState) === false) {
202
+ if (taskListState.currentTab !== 'live' ||
203
+ isDefaultFilters(taskListState) === false) {
198
204
  return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
199
205
  }
200
206
  return taskGroupsWithTasksList;
@@ -225,7 +231,8 @@ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRol
225
231
  tasks: tasksWithUserDetails,
226
232
  };
227
233
  });
228
- if (isDefaultFilters(taskListState) === false) {
234
+ if (taskListState.currentTab !== 'live' ||
235
+ isDefaultFilters(taskListState) === false) {
229
236
  return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
230
237
  }
231
238
  return taskGroupsWithTasksList;
@@ -249,7 +256,8 @@ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, user
249
256
  tasks: tasksWithUserDetails,
250
257
  };
251
258
  });
252
- if (isDefaultFilters(taskListState) === false) {
259
+ if (taskListState.currentTab !== 'live' ||
260
+ isDefaultFilters(taskListState) === false) {
253
261
  return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
254
262
  }
255
263
  return taskGroupsWithTasksList;
@@ -339,7 +347,15 @@ exports.getAllTasks = (0, toolkit_1.createSelector)((state) => state.taskListSta
339
347
  }
340
348
  const { fetchState, error } = (0, reduceFetchState_1.reduceAnyFetchState)(fetchStateVariables);
341
349
  const taskGroupTemplates = (0, taskGroupTemplateSelector_1.getTaskGroupTemplateByIds)(taskGroupTemplateState, taskGroupTemplateViewState.taskGroupTemplateIds);
350
+ const tabCounts = {
351
+ live: taskListState.byTab.live.taskIds.length,
352
+ archived: taskListState.byTab.archived.taskIds.length,
353
+ deleted: taskListState.byTab.deleted.taskIds.length,
354
+ snoozed: taskListState.byTab.snoozed.taskIds.length,
355
+ };
342
356
  return {
357
+ currentTab: taskListState.currentTab,
358
+ tabCounts,
343
359
  uiState: taskListState.uiState,
344
360
  filters: taskListState.filters,
345
361
  taskGroupTemplates,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeniai/client-epic-state",
3
- "version": "5.0.2-betaRR01",
3
+ "version": "5.0.2-betaRR02",
4
4
  "description": "Shared module between Web & Mobile containing required abstractions for state management, async network communication. ",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib/esm/index.js",