@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.
- package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
- package/lib/entity/snackbar/snackbarTypes.js +2 -0
- package/lib/entity/task/taskPayload.d.ts +3 -0
- package/lib/entity/task/taskPayload.js +5 -0
- package/lib/entity/task/taskState.d.ts +3 -0
- package/lib/epic.d.ts +3 -1
- package/lib/epic.js +3 -1
- package/lib/esm/entity/snackbar/snackbarTypes.js +2 -0
- package/lib/esm/entity/task/taskPayload.js +5 -0
- package/lib/esm/epic.js +3 -1
- package/lib/esm/index.js +4 -4
- package/lib/esm/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +3 -0
- package/lib/esm/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +5 -0
- package/lib/esm/view/taskManager/taskDetailView/epics/snoozeTaskEpic.js +65 -0
- package/lib/esm/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +56 -0
- package/lib/esm/view/taskManager/taskDetailView/taskDetail.js +4 -0
- package/lib/esm/view/taskManager/taskDetailView/taskDetailReducer.js +49 -1
- package/lib/esm/view/taskManager/taskDetailView/taskDetailSelector.js +9 -0
- package/lib/esm/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +56 -21
- package/lib/esm/view/taskManager/taskListView/epics/dragNDropTasksEpic.js +1 -0
- package/lib/esm/view/taskManager/taskListView/epics/fetchTaskListEpic.js +13 -3
- package/lib/esm/view/taskManager/taskListView/taskList.js +7 -0
- package/lib/esm/view/taskManager/taskListView/taskListReducer.js +91 -12
- package/lib/esm/view/taskManager/taskListView/taskListSelector.js +22 -6
- package/lib/index.d.ts +4 -4
- package/lib/index.js +9 -4
- package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
- package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.d.ts +2 -1
- package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +3 -0
- package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.d.ts +2 -1
- package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +5 -0
- package/lib/view/taskManager/taskDetailView/epics/snoozeTaskEpic.d.ts +9 -0
- package/lib/view/taskManager/taskDetailView/epics/snoozeTaskEpic.js +69 -0
- package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.d.ts +9 -0
- package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +60 -0
- package/lib/view/taskManager/taskDetailView/taskDetail.d.ts +1 -0
- package/lib/view/taskManager/taskDetailView/taskDetail.js +4 -0
- package/lib/view/taskManager/taskDetailView/taskDetailReducer.d.ts +10 -1
- package/lib/view/taskManager/taskDetailView/taskDetailReducer.js +50 -2
- package/lib/view/taskManager/taskDetailView/taskDetailSelector.d.ts +4 -0
- package/lib/view/taskManager/taskDetailView/taskDetailSelector.js +9 -0
- package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.d.ts +6 -7
- package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +56 -22
- package/lib/view/taskManager/taskListView/epics/dragNDropTasksEpic.js +1 -0
- package/lib/view/taskManager/taskListView/epics/fetchTaskListEpic.js +13 -3
- package/lib/view/taskManager/taskListView/taskList.d.ts +14 -1
- package/lib/view/taskManager/taskListView/taskList.js +8 -1
- package/lib/view/taskManager/taskListView/taskListPayload.d.ts +3 -0
- package/lib/view/taskManager/taskListView/taskListReducer.d.ts +6 -2
- package/lib/view/taskManager/taskListView/taskListReducer.js +92 -13
- package/lib/view/taskManager/taskListView/taskListSelector.d.ts +3 -1
- package/lib/view/taskManager/taskListView/taskListSelector.js +22 -6
- 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
|
-
|
|
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
|
-
|
|
97
|
-
|
|
98
|
-
draft.
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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-
|
|
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",
|