@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.
- package/lib/entity/file/fileState.d.ts +4 -4
- package/lib/entity/file/fileState.js +4 -0
- 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/entity/transaction/stateTypes/attachment.d.ts +2 -2
- package/lib/epic.d.ts +6 -1
- package/lib/epic.js +6 -1
- package/lib/esm/entity/file/fileState.js +4 -0
- package/lib/esm/entity/snackbar/snackbarTypes.js +2 -0
- package/lib/esm/entity/task/taskPayload.js +5 -0
- package/lib/esm/epic.js +6 -1
- package/lib/esm/index.js +5 -4
- package/lib/esm/reducer.js +3 -0
- package/lib/esm/view/taskManager/cannedResponsesView/cannedResponses.js +1 -0
- package/lib/esm/view/taskManager/cannedResponsesView/cannedResponsesPayload.js +1 -0
- package/lib/esm/view/taskManager/cannedResponsesView/cannedResponsesReducer.js +61 -0
- package/lib/esm/view/taskManager/cannedResponsesView/epics/deleteCannedResponseEpic.js +17 -0
- package/lib/esm/view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic.js +20 -0
- package/lib/esm/view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic.js +29 -0
- 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/initializeTaskToLocalStoreEpic.js +1 -0
- package/lib/esm/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +1 -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 +51 -1
- package/lib/esm/view/taskManager/taskDetailView/taskDetailSelector.js +15 -2
- 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/epics/updateTaskFromListViewEpic.js +3 -2
- 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 +48 -39
- package/lib/index.d.ts +6 -4
- package/lib/index.js +14 -5
- package/lib/reducer.d.ts +3 -0
- package/lib/reducer.js +3 -0
- package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
- package/lib/view/taskManager/cannedResponsesView/cannedResponses.d.ts +18 -0
- package/lib/view/taskManager/cannedResponsesView/cannedResponses.js +2 -0
- package/lib/view/taskManager/cannedResponsesView/cannedResponsesPayload.d.ts +11 -0
- package/lib/view/taskManager/cannedResponsesView/cannedResponsesPayload.js +2 -0
- package/lib/view/taskManager/cannedResponsesView/cannedResponsesReducer.d.ts +30 -0
- package/lib/view/taskManager/cannedResponsesView/cannedResponsesReducer.js +65 -0
- package/lib/view/taskManager/cannedResponsesView/epics/deleteCannedResponseEpic.d.ts +7 -0
- package/lib/view/taskManager/cannedResponsesView/epics/deleteCannedResponseEpic.js +21 -0
- package/lib/view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic.d.ts +7 -0
- package/lib/view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic.js +24 -0
- package/lib/view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic.d.ts +7 -0
- package/lib/view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic.js +33 -0
- 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/initializeTaskToLocalStoreEpic.js +1 -0
- package/lib/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +1 -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 +2 -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 +52 -2
- package/lib/view/taskManager/taskDetailView/taskDetailSelector.d.ts +5 -0
- package/lib/view/taskManager/taskDetailView/taskDetailSelector.js +15 -2
- 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/epics/updateTaskFromListViewEpic.js +3 -2
- 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 +9 -3
- package/lib/view/taskManager/taskListView/taskListSelector.js +48 -39
- package/package.json +1 -1
|
@@ -5,21 +5,26 @@ import { convertHHMMStrToMinutes } from '../../../../commonStateTypes/fiscalYear
|
|
|
5
5
|
import { DEFAULT_DATE_FORMAT } from '../../../../commonStateTypes/fiscalYearHelpers/formatZeniDateFY';
|
|
6
6
|
import { updateTasks } from '../../../../entity/task/taskReducer';
|
|
7
7
|
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../responsePayload';
|
|
8
|
-
import { bulkUpdateTaskList, updateTasksListOnBulkUpdateTasksFailure, updateTasksListOnBulkUpdateTasksSuccess, } from '../taskListReducer';
|
|
9
|
-
export const bulkUpdateTaskListEpic = (actions$,
|
|
10
|
-
const state = state$.value;
|
|
8
|
+
import { bulkUpdateTaskList, fetchTaskList, updateTasksListOnBulkUpdateTasksFailure, updateTasksListOnBulkUpdateTasksSuccess, } from '../taskListReducer';
|
|
9
|
+
export const bulkUpdateTaskListEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(bulkUpdateTaskList.match), switchMap((action) => {
|
|
11
10
|
const { taskIds, updates, groupId } = action.payload;
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
const bulkUpdates = toBulkUpdatesPayload(updates);
|
|
12
|
+
if (groupId != null) {
|
|
13
|
+
bulkUpdates.task_group_ids = [groupId];
|
|
14
|
+
}
|
|
15
|
+
const payload = { task_ids: taskIds, updates: bulkUpdates };
|
|
15
16
|
return zeniAPI
|
|
16
|
-
.putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks`, payload)
|
|
17
|
+
.putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks/bulk-update`, payload)
|
|
17
18
|
.pipe(mergeMap((response) => {
|
|
18
19
|
if (isSuccessResponse(response) && response.data != null) {
|
|
20
|
+
const removeFromList = updates.isArchived === true ||
|
|
21
|
+
updates.isDeleted === true ||
|
|
22
|
+
('snoozedUntil' in updates && updates.snoozedUntil != null);
|
|
19
23
|
return of(updateTasks(response.data.tasks), updateTasksListOnBulkUpdateTasksSuccess({
|
|
20
24
|
taskIds,
|
|
21
25
|
groupId,
|
|
22
|
-
|
|
26
|
+
removeFromList,
|
|
27
|
+
}), fetchTaskList());
|
|
23
28
|
}
|
|
24
29
|
else {
|
|
25
30
|
return of(updateTasksListOnBulkUpdateTasksFailure({
|
|
@@ -33,19 +38,46 @@ export const bulkUpdateTaskListEpic = (actions$, state$, zeniAPI) => actions$.pi
|
|
|
33
38
|
}));
|
|
34
39
|
}));
|
|
35
40
|
}));
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
41
|
+
/**
|
|
42
|
+
* Helpers
|
|
43
|
+
*/
|
|
44
|
+
const toBulkUpdatesPayload = (updates) => {
|
|
45
|
+
const payload = {};
|
|
46
|
+
if (updates.status != null) {
|
|
47
|
+
payload.status = updates.status.code;
|
|
48
|
+
}
|
|
49
|
+
if (updates.priority != null) {
|
|
50
|
+
payload.priority = updates.priority.code;
|
|
51
|
+
}
|
|
52
|
+
if (updates.assignees != null) {
|
|
53
|
+
payload.assignees = updates.assignees;
|
|
54
|
+
}
|
|
55
|
+
if (updates.groupAssignees != null) {
|
|
56
|
+
payload.group_assignees = updates.groupAssignees;
|
|
57
|
+
}
|
|
58
|
+
if (updates.dueDate != null) {
|
|
59
|
+
payload.due_date = updates.dueDate.format(DEFAULT_DATE_FORMAT);
|
|
60
|
+
}
|
|
61
|
+
if (updates.tagIds != null) {
|
|
62
|
+
payload.tags = updates.tagIds;
|
|
63
|
+
}
|
|
64
|
+
if (updates.timeSpent != null) {
|
|
65
|
+
payload.time_spent = convertHHMMStrToMinutes(updates.timeSpent.replace(/\D/g, ''));
|
|
66
|
+
}
|
|
67
|
+
if (updates.isArchived != null) {
|
|
68
|
+
payload.is_archived = updates.isArchived;
|
|
69
|
+
}
|
|
70
|
+
if (updates.isDeleted != null) {
|
|
71
|
+
payload.is_deleted = updates.isDeleted;
|
|
72
|
+
}
|
|
73
|
+
// Bulk snooze is not supported — only bulk unsnooze (clear all snooze fields)
|
|
74
|
+
if ('snoozedUntil' in updates) {
|
|
75
|
+
payload.snoozed_until = null;
|
|
76
|
+
payload.snoozed_by = null;
|
|
77
|
+
payload.snoozed_at = null;
|
|
78
|
+
payload.is_snooze_notification_sent = false;
|
|
79
|
+
}
|
|
80
|
+
return payload;
|
|
49
81
|
};
|
|
50
82
|
export const getTaskPayload = (state, taskId, updates) => {
|
|
51
83
|
const { taskState } = state;
|
|
@@ -71,6 +103,9 @@ const toTaskPayload = (state, task) => {
|
|
|
71
103
|
assignees: task.assignees,
|
|
72
104
|
description: task.description,
|
|
73
105
|
group_assignees: task.groupAssignees,
|
|
106
|
+
is_archived: task.isArchived,
|
|
107
|
+
is_deleted: task.isDeleted,
|
|
108
|
+
snoozed_until: task.snoozedUntil != null ? task.snoozedUntil.toISOString() : null,
|
|
74
109
|
due_date: task.dueDate != null ? task.dueDate.format(DEFAULT_DATE_FORMAT) : null,
|
|
75
110
|
priority: task.priority.code,
|
|
76
111
|
status: task.status.code,
|
|
@@ -9,10 +9,20 @@ export const fetchTaskListEpic = (actions$, _state$, zeniAPI) => actions$.pipe(f
|
|
|
9
9
|
.getJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks?query=${encodeURIComponent(`{"task_type": "all"}`)}`)
|
|
10
10
|
.pipe(mergeMap((response) => {
|
|
11
11
|
if (isSuccessResponse(response) && response.data != null) {
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
const { tasks, deleted, archived, snoozed } = response.data;
|
|
13
|
+
const allTasks = [
|
|
14
|
+
...tasks,
|
|
15
|
+
...(deleted ?? []),
|
|
16
|
+
...(archived ?? []),
|
|
17
|
+
...(snoozed ?? []),
|
|
18
|
+
];
|
|
19
|
+
return of(updateTasks(allTasks), updateTaskList({
|
|
20
|
+
data: tasks,
|
|
21
|
+
deleted: deleted ?? [],
|
|
22
|
+
archived: archived ?? [],
|
|
23
|
+
snoozed: snoozed ?? [],
|
|
14
24
|
updateType: 'replace',
|
|
15
|
-
}), updateTags(
|
|
25
|
+
}), updateTags(allTasks.map((task) => task.tags).flat()));
|
|
16
26
|
}
|
|
17
27
|
else {
|
|
18
28
|
return of(updateTaskListFetchStatus({
|
|
@@ -8,9 +8,10 @@ export const updateTaskFromListViewEpic = (actions$, state$, zeniAPI) => actions
|
|
|
8
8
|
const state = state$.value;
|
|
9
9
|
const { task, updates } = action.payload;
|
|
10
10
|
const taskId = task.id;
|
|
11
|
-
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
12
|
+
const { snoozed_until: _snoozedUntil, ...taskData } = getTaskPayload(state, taskId, updates);
|
|
12
13
|
return zeniAPI
|
|
13
|
-
.putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks/${taskId}`,
|
|
14
|
+
.putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks/${taskId}`, taskData)
|
|
14
15
|
.pipe(mergeMap((response) => {
|
|
15
16
|
if (isSuccessResponse(response) && response.data != null) {
|
|
16
17
|
return from([
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { stringToUnion, stringToUnionStrict, } from '../../../commonStateTypes/stringToUnion';
|
|
2
|
+
export const ALL_TASK_LIST_TABS = [
|
|
3
|
+
'live',
|
|
4
|
+
'archived',
|
|
5
|
+
'deleted',
|
|
6
|
+
'snoozed',
|
|
7
|
+
];
|
|
2
8
|
export const DUE_DATE_GROUP_KEYS = [
|
|
3
9
|
'overdue',
|
|
4
10
|
'today',
|
|
@@ -26,6 +32,7 @@ const ALL_TASK_LIST_SORT_KEYS = [
|
|
|
26
32
|
'status',
|
|
27
33
|
'priority',
|
|
28
34
|
'timeSpent',
|
|
35
|
+
'visibility',
|
|
29
36
|
];
|
|
30
37
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
31
38
|
const toTaskListSortKeyType = (v) => stringToUnion(v, ALL_TASK_LIST_SORT_KEYS);
|
|
@@ -29,7 +29,23 @@ const initialTaskIdsByDueDate = {
|
|
|
29
29
|
today: [],
|
|
30
30
|
upcoming: [],
|
|
31
31
|
};
|
|
32
|
+
const initialTabData = {
|
|
33
|
+
taskIds: [],
|
|
34
|
+
taskIdsByAssignees: {},
|
|
35
|
+
taskIdsByDueDate: { ...initialTaskIdsByDueDate },
|
|
36
|
+
taskIdsByGroupsIds: {},
|
|
37
|
+
taskIdsByPriority: { ...initialTaskIdsByPriority },
|
|
38
|
+
taskIdsByStatus: { ...initialTaskIdsByStatus },
|
|
39
|
+
taskIdsByTags: {},
|
|
40
|
+
};
|
|
32
41
|
export const initialState = {
|
|
42
|
+
currentTab: 'live',
|
|
43
|
+
byTab: {
|
|
44
|
+
live: { ...initialTabData },
|
|
45
|
+
archived: { ...initialTabData },
|
|
46
|
+
deleted: { ...initialTabData },
|
|
47
|
+
snoozed: { ...initialTabData },
|
|
48
|
+
},
|
|
33
49
|
taskIds: [],
|
|
34
50
|
taskIdsByGroupsIds: {},
|
|
35
51
|
taskIdsByPriority: initialTaskIdsByPriority,
|
|
@@ -86,17 +102,30 @@ const taskList = createSlice({
|
|
|
86
102
|
draft.error = undefined;
|
|
87
103
|
},
|
|
88
104
|
updateTaskList(draft, action) {
|
|
89
|
-
const { data } = action.payload;
|
|
105
|
+
const { data, archived, deleted, snoozed } = action.payload;
|
|
90
106
|
draft.fetchState = 'Completed';
|
|
91
107
|
draft.error = undefined;
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
draft.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
108
|
+
// Group live tasks
|
|
109
|
+
const liveGrouped = getGroupedTaskIds(data);
|
|
110
|
+
draft.byTab.live = toTabData(liveGrouped);
|
|
111
|
+
// Group other tabs if provided
|
|
112
|
+
if (archived != null) {
|
|
113
|
+
draft.byTab.archived = toTabData(getGroupedTaskIds(archived));
|
|
114
|
+
}
|
|
115
|
+
if (deleted != null) {
|
|
116
|
+
draft.byTab.deleted = toTabData(getGroupedTaskIds(deleted));
|
|
117
|
+
}
|
|
118
|
+
if (snoozed != null) {
|
|
119
|
+
draft.byTab.snoozed = toTabData(getGroupedTaskIds(snoozed));
|
|
120
|
+
}
|
|
121
|
+
// Copy active tab data to top-level fields
|
|
122
|
+
const activeTabData = draft.byTab[draft.currentTab];
|
|
123
|
+
copyTabDataToTopLevel(draft, activeTabData);
|
|
124
|
+
},
|
|
125
|
+
updateTaskListTab(draft, action) {
|
|
126
|
+
draft.currentTab = action.payload;
|
|
127
|
+
const activeTabData = draft.byTab[action.payload];
|
|
128
|
+
copyTabDataToTopLevel(draft, activeTabData);
|
|
100
129
|
},
|
|
101
130
|
initiateTaskListLocalData(draft, action) {
|
|
102
131
|
const { taskGroupById } = action.payload;
|
|
@@ -184,10 +213,13 @@ const taskList = createSlice({
|
|
|
184
213
|
},
|
|
185
214
|
},
|
|
186
215
|
updateTasksListOnBulkUpdateTasksSuccess(draft, action) {
|
|
187
|
-
const { taskIds, groupId } = action.payload;
|
|
216
|
+
const { taskIds, groupId, removeFromList } = action.payload;
|
|
188
217
|
draft.updateTasksFetchState.fetchState = 'Completed';
|
|
189
218
|
draft.updateTasksFetchState.error = undefined;
|
|
190
|
-
if (
|
|
219
|
+
if (removeFromList) {
|
|
220
|
+
removeTaskIds(draft, taskIds);
|
|
221
|
+
}
|
|
222
|
+
else if (groupId != null) {
|
|
191
223
|
const { groupByKey } = draft.uiState;
|
|
192
224
|
if (groupByKey === 'groupName') {
|
|
193
225
|
Object.keys(draft.taskIdsByGroupsIds).forEach((gId) => {
|
|
@@ -404,12 +436,15 @@ const taskList = createSlice({
|
|
|
404
436
|
draft.updateTasksFetchState.fetchState = 'Error';
|
|
405
437
|
draft.updateTasksFetchState.error = action.payload.error;
|
|
406
438
|
},
|
|
439
|
+
removeTaskFromList(draft, action) {
|
|
440
|
+
removeTaskIds(draft, [action.payload]);
|
|
441
|
+
},
|
|
407
442
|
clearTaskList(draft) {
|
|
408
443
|
Object.assign(draft, initialState);
|
|
409
444
|
},
|
|
410
445
|
},
|
|
411
446
|
});
|
|
412
|
-
export const { fetchTaskListPage, fetchTaskList, updateTaskList, updateTaskListFetchStatus, updateTaskListSearchText, updateTaskListUIState, updateTaskFilters, updateTaskListOnNewGroupCreationSuccess, bulkUpdateTaskList, updateTasksListOnBulkUpdateTasksSuccess, updateTasksListOnBulkUpdateTasksFailure, initiateTaskListLocalData, updateTaskListLocalData, updateTaskListOnTaskGroupDeletion, dragNDropTasks, updateTaskListOnNewTaskCreationSuccess, updateTaskListOnTaskGroupNameUpdate, updateTaskFromListView, updateTasksListOnUpdateTaskSuccess, updateTasksListOnUpdateTaskFailure, updateTaskListOnCreateTaskFromTemplateSuccess, clearTaskList, } = taskList.actions;
|
|
447
|
+
export const { fetchTaskListPage, fetchTaskList, updateTaskList, updateTaskListTab, updateTaskListFetchStatus, updateTaskListSearchText, updateTaskListUIState, updateTaskFilters, updateTaskListOnNewGroupCreationSuccess, bulkUpdateTaskList, updateTasksListOnBulkUpdateTasksSuccess, updateTasksListOnBulkUpdateTasksFailure, initiateTaskListLocalData, updateTaskListLocalData, updateTaskListOnTaskGroupDeletion, dragNDropTasks, updateTaskListOnNewTaskCreationSuccess, updateTaskListOnTaskGroupNameUpdate, updateTaskFromListView, updateTasksListOnUpdateTaskSuccess, updateTasksListOnUpdateTaskFailure, updateTaskListOnCreateTaskFromTemplateSuccess, removeTaskFromList, clearTaskList, } = taskList.actions;
|
|
413
448
|
export default taskList.reducer;
|
|
414
449
|
/**
|
|
415
450
|
* helpers
|
|
@@ -488,6 +523,50 @@ const getTagsGroupKey = (tags) => {
|
|
|
488
523
|
tagIds.sort();
|
|
489
524
|
return tagIds.join(',');
|
|
490
525
|
};
|
|
526
|
+
const toTabData = (grouped) => ({
|
|
527
|
+
taskIds: grouped.taskIds,
|
|
528
|
+
taskIdsByAssignees: grouped.taskIdsByAssignees,
|
|
529
|
+
taskIdsByDueDate: grouped.taskIdsByDueDate,
|
|
530
|
+
taskIdsByGroupsIds: grouped.taskIdsByGroupIds,
|
|
531
|
+
taskIdsByPriority: grouped.taskIdsGroupedByPriority,
|
|
532
|
+
taskIdsByStatus: grouped.taskIdsGroupedByStatus,
|
|
533
|
+
taskIdsByTags: grouped.taskIdsByTags,
|
|
534
|
+
});
|
|
535
|
+
const copyTabDataToTopLevel = (draft, tabData) => {
|
|
536
|
+
draft.taskIds = tabData.taskIds;
|
|
537
|
+
draft.taskIdsByGroupsIds = tabData.taskIdsByGroupsIds;
|
|
538
|
+
draft.taskIdsByPriority = tabData.taskIdsByPriority;
|
|
539
|
+
draft.taskIdsByStatus = tabData.taskIdsByStatus;
|
|
540
|
+
draft.taskIdsByAssignees = tabData.taskIdsByAssignees;
|
|
541
|
+
draft.taskIdsByDueDate = tabData.taskIdsByDueDate;
|
|
542
|
+
draft.taskIdsByTags = tabData.taskIdsByTags;
|
|
543
|
+
};
|
|
544
|
+
const removeIdsFromTabData = (tabData, taskIds) => {
|
|
545
|
+
const isRemoved = (id) => taskIds.includes(id);
|
|
546
|
+
tabData.taskIds = tabData.taskIds.filter((id) => !isRemoved(id));
|
|
547
|
+
Object.keys(tabData.taskIdsByGroupsIds).forEach((gId) => {
|
|
548
|
+
tabData.taskIdsByGroupsIds[gId] = tabData.taskIdsByGroupsIds[gId].filter((id) => !isRemoved(id));
|
|
549
|
+
});
|
|
550
|
+
Object.keys(tabData.taskIdsByPriority).forEach((key) => {
|
|
551
|
+
tabData.taskIdsByPriority[key] = tabData.taskIdsByPriority[key].filter((id) => !isRemoved(id));
|
|
552
|
+
});
|
|
553
|
+
Object.keys(tabData.taskIdsByStatus).forEach((key) => {
|
|
554
|
+
tabData.taskIdsByStatus[key] = tabData.taskIdsByStatus[key].filter((id) => !isRemoved(id));
|
|
555
|
+
});
|
|
556
|
+
Object.keys(tabData.taskIdsByDueDate).forEach((key) => {
|
|
557
|
+
tabData.taskIdsByDueDate[key] = tabData.taskIdsByDueDate[key].filter((id) => !isRemoved(id));
|
|
558
|
+
});
|
|
559
|
+
Object.keys(tabData.taskIdsByAssignees).forEach((key) => {
|
|
560
|
+
tabData.taskIdsByAssignees[key] = tabData.taskIdsByAssignees[key].filter((id) => !isRemoved(id));
|
|
561
|
+
});
|
|
562
|
+
Object.keys(tabData.taskIdsByTags).forEach((key) => {
|
|
563
|
+
tabData.taskIdsByTags[key] = tabData.taskIdsByTags[key].filter((id) => !isRemoved(id));
|
|
564
|
+
});
|
|
565
|
+
};
|
|
566
|
+
const removeTaskIds = (draft, taskIds) => {
|
|
567
|
+
removeIdsFromTabData(draft, taskIds);
|
|
568
|
+
removeIdsFromTabData(draft.byTab[draft.currentTab], taskIds);
|
|
569
|
+
};
|
|
491
570
|
const getGroupedTaskIds = (tasks) => {
|
|
492
571
|
const taskIds = [];
|
|
493
572
|
const taskIdsByGroupIds = {};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { createSelector } from '@reduxjs/toolkit';
|
|
2
|
-
import isEqual from 'lodash/isEqual';
|
|
3
2
|
import orderBy from 'lodash/orderBy';
|
|
4
3
|
import { getSortOrder, } from '../../../commonPayloadTypes/sortOrderPayload';
|
|
5
4
|
import { reduceAnyFetchState } from '../../../commonStateTypes/reduceFetchState';
|
|
@@ -15,11 +14,6 @@ import { getUserGroupList } from '../../userGroupListView/userGroupListViewSelec
|
|
|
15
14
|
import { getUserList, } from '../../userListView/userListViewSelector';
|
|
16
15
|
import { allTaskPriority, allTaskStatus, } from '../taskDetailView/taskDetailSelector';
|
|
17
16
|
import { DUE_DATE_GROUP_KEYS, } from './taskList';
|
|
18
|
-
import { initialState } from './taskListReducer';
|
|
19
|
-
const isDefaultFilters = (taskListState) => {
|
|
20
|
-
return (isEqual(taskListState.filters, initialState.filters) &&
|
|
21
|
-
initialState.uiState.searchText === taskListState.uiState.searchText);
|
|
22
|
-
};
|
|
23
17
|
const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
|
|
24
18
|
const tasksInOrder = orderBy(tasksList, (task) => {
|
|
25
19
|
const tagsByIds = getTagsByIds(tagState, task.tagIds);
|
|
@@ -34,8 +28,12 @@ const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
|
|
|
34
28
|
return task.status.name;
|
|
35
29
|
case 'priority':
|
|
36
30
|
return ALL_PRIORITY_CODE.indexOf(task.priority.code);
|
|
31
|
+
case 'assignee':
|
|
32
|
+
return task.firstAssigneeSortName;
|
|
37
33
|
case 'timeSpent':
|
|
38
34
|
return task.timeSpent;
|
|
35
|
+
case 'visibility':
|
|
36
|
+
return task.isPrivate === true ? 1 : 0;
|
|
39
37
|
case 'name':
|
|
40
38
|
default:
|
|
41
39
|
return task.name.toLowerCase();
|
|
@@ -43,7 +41,7 @@ const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
|
|
|
43
41
|
}, sortOrder);
|
|
44
42
|
return tasksInOrder;
|
|
45
43
|
};
|
|
46
|
-
const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRoleState, addressState, taskIds, tagState, }) => {
|
|
44
|
+
const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRoleState, addressState, taskIds, tagState, userGroupsState, }) => {
|
|
47
45
|
const { sortKey, searchText } = taskListState.uiState;
|
|
48
46
|
const sortOrder = getSortOrder(taskListState.uiState.sortOrder);
|
|
49
47
|
const tasks = taskIds
|
|
@@ -53,7 +51,15 @@ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRole
|
|
|
53
51
|
const assigneeUsers = task.assignees
|
|
54
52
|
.map((userId) => getUserAndUserRole(userState, userRoleState, addressState, userId))
|
|
55
53
|
.filter((value) => value != null);
|
|
56
|
-
|
|
54
|
+
const firstUser = assigneeUsers[0]?.user;
|
|
55
|
+
const firstUserName = (firstUser != null ? getUserName(firstUser) : '') ||
|
|
56
|
+
firstUser?.email ||
|
|
57
|
+
'';
|
|
58
|
+
const firstGroupName = task.groupAssignees
|
|
59
|
+
.map((gId) => userGroupsState.userGroupByUserGroupId[gId]?.name)
|
|
60
|
+
.find((name) => name != null && name !== '');
|
|
61
|
+
const firstAssigneeSortName = (firstUserName !== '' ? firstUserName : (firstGroupName ?? '')).toLowerCase();
|
|
62
|
+
return { ...task, assigneeUsers, firstAssigneeSortName };
|
|
57
63
|
}
|
|
58
64
|
return undefined;
|
|
59
65
|
})
|
|
@@ -62,7 +68,7 @@ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRole
|
|
|
62
68
|
const sortedTaskList = sortTasksList(tagState, filteredTaskList, sortKey, sortOrder);
|
|
63
69
|
return sortedTaskList;
|
|
64
70
|
};
|
|
65
|
-
const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupState, taskGroupViewState, userState, userRoleState, addressState, tagState, }) => {
|
|
71
|
+
const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupState, taskGroupViewState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
66
72
|
const { taskGroupsIds } = taskGroupViewState;
|
|
67
73
|
const taskGroupsWithTasksList = taskGroupsIds
|
|
68
74
|
.map((taskGroupId) => {
|
|
@@ -76,6 +82,7 @@ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupStat
|
|
|
76
82
|
addressState,
|
|
77
83
|
taskIds,
|
|
78
84
|
tagState,
|
|
85
|
+
userGroupsState,
|
|
79
86
|
});
|
|
80
87
|
if (taskGroup != null) {
|
|
81
88
|
return {
|
|
@@ -104,12 +111,9 @@ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupStat
|
|
|
104
111
|
if (defaultTaskGroup != null) {
|
|
105
112
|
sortedTaskGroupsWithTasksList.push(defaultTaskGroup);
|
|
106
113
|
}
|
|
107
|
-
|
|
108
|
-
return sortedTaskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
109
|
-
}
|
|
110
|
-
return sortedTaskGroupsWithTasksList;
|
|
114
|
+
return sortedTaskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
111
115
|
};
|
|
112
|
-
export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
116
|
+
export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
113
117
|
const assigneeGroups = Object.keys(taskListState.taskIdsByAssignees);
|
|
114
118
|
const taskGroupsWithTasksList = assigneeGroups.map((groupKey) => {
|
|
115
119
|
const taskIds = taskListState.taskIdsByAssignees[groupKey];
|
|
@@ -121,6 +125,7 @@ export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userSt
|
|
|
121
125
|
addressState,
|
|
122
126
|
taskIds,
|
|
123
127
|
tagState,
|
|
128
|
+
userGroupsState,
|
|
124
129
|
});
|
|
125
130
|
const assigneeIds = groupKey.split(',');
|
|
126
131
|
const groupName = getUsersByUserIds(userState, assigneeIds)
|
|
@@ -136,12 +141,9 @@ export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userSt
|
|
|
136
141
|
tasks: tasksWithUserDetails,
|
|
137
142
|
};
|
|
138
143
|
});
|
|
139
|
-
|
|
140
|
-
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
141
|
-
}
|
|
142
|
-
return taskGroupsWithTasksList;
|
|
144
|
+
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
143
145
|
};
|
|
144
|
-
export const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
146
|
+
export const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
145
147
|
const taskGroupsWithTasksList = ALL_PRIORITY_CODE.map((groupKey) => {
|
|
146
148
|
const taskIds = taskListState.taskIdsByPriority[groupKey] ?? [];
|
|
147
149
|
const tasksWithUserDetails = getTasksWithUserDetails({
|
|
@@ -152,6 +154,7 @@ export const getTaskListGroupedByPriority = ({ taskListState, taskState, userSta
|
|
|
152
154
|
addressState,
|
|
153
155
|
taskIds,
|
|
154
156
|
tagState,
|
|
157
|
+
userGroupsState,
|
|
155
158
|
});
|
|
156
159
|
return {
|
|
157
160
|
groupName: allTaskPriority.find((priority) => priority.code === groupKey)?.name ??
|
|
@@ -161,12 +164,9 @@ export const getTaskListGroupedByPriority = ({ taskListState, taskState, userSta
|
|
|
161
164
|
tasks: tasksWithUserDetails,
|
|
162
165
|
};
|
|
163
166
|
});
|
|
164
|
-
|
|
165
|
-
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
166
|
-
}
|
|
167
|
-
return taskGroupsWithTasksList;
|
|
167
|
+
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
168
168
|
};
|
|
169
|
-
const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
169
|
+
const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
170
170
|
const taskGroupsWithTasksList = ALL_TASK_STATUS_CODE.map((groupKey) => {
|
|
171
171
|
const taskIds = taskListState.taskIdsByStatus[groupKey] ?? [];
|
|
172
172
|
const tasksWithUserDetails = getTasksWithUserDetails({
|
|
@@ -177,6 +177,7 @@ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userR
|
|
|
177
177
|
addressState,
|
|
178
178
|
taskIds,
|
|
179
179
|
tagState,
|
|
180
|
+
userGroupsState,
|
|
180
181
|
});
|
|
181
182
|
return {
|
|
182
183
|
groupName: allTaskStatus.find((taskStatus) => taskStatus.code === groupKey)
|
|
@@ -186,12 +187,9 @@ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userR
|
|
|
186
187
|
tasks: tasksWithUserDetails,
|
|
187
188
|
};
|
|
188
189
|
});
|
|
189
|
-
|
|
190
|
-
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
191
|
-
}
|
|
192
|
-
return taskGroupsWithTasksList;
|
|
190
|
+
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
193
191
|
};
|
|
194
|
-
const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
192
|
+
const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
195
193
|
const tagGroups = Object.keys(taskListState.taskIdsByTags);
|
|
196
194
|
const taskGroupsWithTasksList = tagGroups.map((groupKey) => {
|
|
197
195
|
const taskIds = taskListState.taskIdsByTags[groupKey];
|
|
@@ -203,6 +201,7 @@ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRol
|
|
|
203
201
|
addressState,
|
|
204
202
|
taskIds,
|
|
205
203
|
tagState,
|
|
204
|
+
userGroupsState,
|
|
206
205
|
});
|
|
207
206
|
const tagIds = groupKey.split(',');
|
|
208
207
|
const groupName = getTagsByIds(tagState, tagIds)
|
|
@@ -217,12 +216,9 @@ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRol
|
|
|
217
216
|
tasks: tasksWithUserDetails,
|
|
218
217
|
};
|
|
219
218
|
});
|
|
220
|
-
|
|
221
|
-
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
222
|
-
}
|
|
223
|
-
return taskGroupsWithTasksList;
|
|
219
|
+
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
224
220
|
};
|
|
225
|
-
const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
221
|
+
const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
226
222
|
const taskGroupsWithTasksList = DUE_DATE_GROUP_KEYS.map((groupKey) => {
|
|
227
223
|
const taskIds = taskListState.taskIdsByDueDate[groupKey];
|
|
228
224
|
const tasksWithUserDetails = getTasksWithUserDetails({
|
|
@@ -233,6 +229,7 @@ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, user
|
|
|
233
229
|
addressState,
|
|
234
230
|
taskIds,
|
|
235
231
|
tagState,
|
|
232
|
+
userGroupsState,
|
|
236
233
|
});
|
|
237
234
|
return {
|
|
238
235
|
groupName: groupKey,
|
|
@@ -241,12 +238,9 @@ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, user
|
|
|
241
238
|
tasks: tasksWithUserDetails,
|
|
242
239
|
};
|
|
243
240
|
});
|
|
244
|
-
|
|
245
|
-
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
246
|
-
}
|
|
247
|
-
return taskGroupsWithTasksList;
|
|
241
|
+
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
248
242
|
};
|
|
249
|
-
const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRoleState, addressState, taskGroupState, taskGroupViewState, tagState, }) => {
|
|
243
|
+
const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRoleState, addressState, taskGroupState, taskGroupViewState, tagState, userGroupsState, }) => {
|
|
250
244
|
const { groupByKey } = taskListState.uiState;
|
|
251
245
|
if (groupByKey === 'groupName') {
|
|
252
246
|
return getTaskListGroupedByGroupName({
|
|
@@ -258,6 +252,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
258
252
|
taskGroupState,
|
|
259
253
|
taskGroupViewState,
|
|
260
254
|
tagState,
|
|
255
|
+
userGroupsState,
|
|
261
256
|
});
|
|
262
257
|
}
|
|
263
258
|
if (groupByKey === 'assignee') {
|
|
@@ -268,6 +263,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
268
263
|
userRoleState,
|
|
269
264
|
addressState,
|
|
270
265
|
tagState,
|
|
266
|
+
userGroupsState,
|
|
271
267
|
});
|
|
272
268
|
}
|
|
273
269
|
if (groupByKey === 'priority') {
|
|
@@ -278,6 +274,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
278
274
|
userRoleState,
|
|
279
275
|
addressState,
|
|
280
276
|
tagState,
|
|
277
|
+
userGroupsState,
|
|
281
278
|
});
|
|
282
279
|
}
|
|
283
280
|
if (groupByKey === 'status') {
|
|
@@ -288,6 +285,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
288
285
|
userRoleState,
|
|
289
286
|
addressState,
|
|
290
287
|
tagState,
|
|
288
|
+
userGroupsState,
|
|
291
289
|
});
|
|
292
290
|
}
|
|
293
291
|
if (groupByKey === 'tag') {
|
|
@@ -298,6 +296,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
298
296
|
userRoleState,
|
|
299
297
|
addressState,
|
|
300
298
|
tagState,
|
|
299
|
+
userGroupsState,
|
|
301
300
|
});
|
|
302
301
|
}
|
|
303
302
|
return getTaskListGroupedByDueDate({
|
|
@@ -307,6 +306,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
307
306
|
userRoleState,
|
|
308
307
|
addressState,
|
|
309
308
|
tagState,
|
|
309
|
+
userGroupsState,
|
|
310
310
|
});
|
|
311
311
|
};
|
|
312
312
|
export const getAllTasks = createSelector((state) => state.taskListState, (state) => state.taskState, (state) => state.userState, (state) => state.userRoleState, (state) => state.userListViewState, (state) => state.addressState, (state) => state.taskGroupState, (state) => state.taskGroupViewState, (state) => state.tagViewState, (state) => state.tagState, (state) => state.taskGroupTemplateState, (state) => state.taskGroupTemplateViewState, (state) => state.userGroupsState, (state) => state.userGroupListViewState, (_state, isTaskTemplatesEnabled) => isTaskTemplatesEnabled, (taskListState, taskState, userState, userRoleState, userListViewState, addressState, taskGroupState, taskGroupViewState, tagViewState, tagState, taskGroupTemplateState, taskGroupTemplateViewState, userGroupsState, userGroupListViewState, isTaskTemplatesEnabled) => {
|
|
@@ -320,6 +320,7 @@ export const getAllTasks = createSelector((state) => state.taskListState, (state
|
|
|
320
320
|
taskGroupState,
|
|
321
321
|
taskGroupViewState,
|
|
322
322
|
tagState,
|
|
323
|
+
userGroupsState,
|
|
323
324
|
});
|
|
324
325
|
const fetchStateVariables = [
|
|
325
326
|
taskListState,
|
|
@@ -331,7 +332,15 @@ export const getAllTasks = createSelector((state) => state.taskListState, (state
|
|
|
331
332
|
}
|
|
332
333
|
const { fetchState, error } = reduceAnyFetchState(fetchStateVariables);
|
|
333
334
|
const taskGroupTemplates = getTaskGroupTemplateByIds(taskGroupTemplateState, taskGroupTemplateViewState.taskGroupTemplateIds);
|
|
335
|
+
const tabCounts = {
|
|
336
|
+
live: taskListState.byTab.live.taskIds.length,
|
|
337
|
+
archived: taskListState.byTab.archived.taskIds.length,
|
|
338
|
+
deleted: taskListState.byTab.deleted.taskIds.length,
|
|
339
|
+
snoozed: taskListState.byTab.snoozed.taskIds.length,
|
|
340
|
+
};
|
|
334
341
|
return {
|
|
342
|
+
currentTab: taskListState.currentTab,
|
|
343
|
+
tabCounts,
|
|
335
344
|
uiState: taskListState.uiState,
|
|
336
345
|
filters: taskListState.filters,
|
|
337
346
|
taskGroupTemplates,
|
package/lib/index.d.ts
CHANGED
|
@@ -537,12 +537,14 @@ import { createTag, deleteTag, fetchTagList } from './view/tagView/tagViewReduce
|
|
|
537
537
|
import { TagViewSelectorView, getAllTags } from './view/tagView/tagViewSelector';
|
|
538
538
|
import { TagViewState } from './view/tagView/tagViewState';
|
|
539
539
|
import { EditTaskLocalData, initialTaskDetail, initialTaskDetailLocalData } from './view/taskManager/taskDetailView/taskDetail';
|
|
540
|
-
import { archiveTask, deleteTask, discardTaskUpdatesInLocalStore, fetchTaskDetailPage, saveTaskDetail, saveTaskUpdatesToLocalStore } from './view/taskManager/taskDetailView/taskDetailReducer';
|
|
540
|
+
import { archiveTask, deleteTask, discardTaskUpdatesInLocalStore, fetchTaskDetailPage, saveTaskDetail, saveTaskUpdatesToLocalStore, snoozeTask, unsnoozeTask } from './view/taskManager/taskDetailView/taskDetailReducer';
|
|
541
|
+
import { CannedResponse, CannedResponsesViewState } from './view/taskManager/cannedResponsesView/cannedResponses';
|
|
542
|
+
import { deleteCannedResponse, fetchCannedResponses, saveCannedResponse } from './view/taskManager/cannedResponsesView/cannedResponsesReducer';
|
|
541
543
|
import { TaskDetailSelectorView, allTaskPriority, allTaskStatus, getTaskDetail } from './view/taskManager/taskDetailView/taskDetailSelector';
|
|
542
544
|
import { createTaskFromTaskGroupTemplate } from './view/taskManager/taskGroupTemplateView/taskGroupTemplateViewReducer';
|
|
543
545
|
import { createNewTaskGroup, deleteTaskGroup, fetchAllTaskGroups, updateTaskGroupName } from './view/taskManager/taskGroupView/taskGroupViewReducer';
|
|
544
|
-
import { DueDateGroupKey, TASK_LIST_FILTER_CATEGORIES, TASK_LIST_GROUP_BY_CATEGORIES, TaskFilterCategory, TaskGroupKey, TaskListFilterCategoryField, TaskListFilters, TaskListLocalData, TaskListUIState, TaskListViewSortKey, toDueDateGroupKeyType, toTaskListGroupByKeyType, toTaskListGroupByKeyTypeStrict } from './view/taskManager/taskListView/taskList';
|
|
545
|
-
import { bulkUpdateTaskList, dragNDropTasks, fetchTaskListPage, initiateTaskListLocalData, updateTaskFilters, updateTaskFromListView, updateTaskListLocalData, updateTaskListSearchText, updateTaskListUIState } from './view/taskManager/taskListView/taskListReducer';
|
|
546
|
+
import { DueDateGroupKey, TASK_LIST_FILTER_CATEGORIES, TASK_LIST_GROUP_BY_CATEGORIES, TaskFilterCategory, TaskGroupKey, TaskListFilterCategoryField, TaskListFilters, TaskListLocalData, TaskListUIState, TaskListViewSortKey, toDueDateGroupKeyType, toTaskListGroupByKeyType, toTaskListGroupByKeyTypeStrict, ALL_TASK_LIST_TABS, TaskListTab } from './view/taskManager/taskListView/taskList';
|
|
547
|
+
import { bulkUpdateTaskList, dragNDropTasks, fetchTaskListPage, initiateTaskListLocalData, removeTaskFromList, updateTaskFilters, updateTaskFromListView, updateTaskListLocalData, updateTaskListSearchText, updateTaskListTab, updateTaskListUIState } from './view/taskManager/taskListView/taskListReducer';
|
|
546
548
|
import { TaskGroupWithTasksList, TaskListSelectorView, TaskWithUserDetails, getAllTasks } from './view/taskManager/taskListView/taskListSelector';
|
|
547
549
|
import { getDueDateValueFromDueDateGroupId, getTaskUpdates } from './view/taskManager/taskListView/taskListViewHelpers';
|
|
548
550
|
import { fetchTasksCard } from './view/tasksCard/tasksCardReducer';
|
|
@@ -847,7 +849,7 @@ export { fetchGlobalMerchantRecommendation, createGlobalMerchant, updateCreateGl
|
|
|
847
849
|
export { approveVendorGlobalReview, rejectVendorGlobalReview, fetchVendorGlobalReviewView, updateSelectedGlobalMerchant, updateVendorGlobalReviewViewUIState, getVendorGlobalReviewView, getTenantMerchantByMerchantId, toVendorGlobalReviewColumnSortKeyType, VendorGlobalReview, VendorGlobalReviewViewUIState, VendorGlobalReviewViewColumnSortKey, VendorGlobalReviewViewSelectorView, VendorGlobalReviewViewState, VendorGlobalReviewViewLocalData, updateVendorGlobalReviewViewLocalData, GlobalReviewPageCurrentSelectionByColumn, GlobalRecommendationFetchSource, };
|
|
848
850
|
export { fetchArAging, updateArAgingUIState, fetchArAgingDetail, updateArAgingDetailUIState, ArAgingReport, ArAgingDetail, NestedAgingBalancesByCustomer, getArAgingReport, getArAgingDetailForCustomer, updateArAgingNodeCollapseState, };
|
|
849
851
|
export { toRecurringBillFrequency, toRecurringBillFrequencyStrict, RecurringBillFrequency, RecurringBillDetail, RecurringBillConfig, RecurringBillStatus, RecurringBillPaymentStatus, };
|
|
850
|
-
export { Task, TaskListSelectorView, TaskWithUserDetails, TaskListViewSortKey, TaskListUIState, TaskDetailSelectorView, EditTaskLocalData, TaskStatusCodeType, PriorityCodeType, getTaskGroupById, TaskStatus, TaskPriority, TaskCodeType, getAllTasks, fetchTaskListPage, getTaskDetail, fetchTaskDetailPage, saveTaskUpdatesToLocalStore, saveTaskDetail, archiveTask, updateTaskListSearchText, updateTaskListUIState, allTaskStatus, allTaskPriority, TaskListFilters, updateTaskFilters, TASK_LIST_FILTER_CATEGORIES, TASK_LIST_GROUP_BY_CATEGORIES, TaskListFilterCategoryField, deleteTask, discardTaskUpdatesInLocalStore, TaskFilterCategory, TaskType, TaskGroupWithTasksList, TaskListLocalData, bulkUpdateTaskList, createNewTaskGroup, initiateTaskListLocalData, deleteTaskGroup, updateTaskListLocalData, dragNDropTasks, updateTaskGroupName, TaskGroupState, TaskGroupKey, toTaskListGroupByKeyType, toTaskListGroupByKeyTypeStrict, getTaskUpdates, fetchAllTaskGroups, initialTaskDetail, getDueDateValueFromDueDateGroupId, toPriorityCodeType, toTaskStatusCodeType, DueDateGroupKey, toDueDateGroupKeyType, updateTaskFromListView, convertHHMMStrToMinutes, initialTaskDetailLocalData, };
|
|
852
|
+
export { Task, TaskListSelectorView, TaskWithUserDetails, TaskListViewSortKey, TaskListUIState, TaskDetailSelectorView, EditTaskLocalData, TaskStatusCodeType, PriorityCodeType, getTaskGroupById, TaskStatus, TaskPriority, TaskCodeType, getAllTasks, fetchTaskListPage, getTaskDetail, fetchTaskDetailPage, saveTaskUpdatesToLocalStore, saveTaskDetail, archiveTask, CannedResponse, CannedResponsesViewState, fetchCannedResponses, saveCannedResponse, deleteCannedResponse, updateTaskListSearchText, updateTaskListUIState, allTaskStatus, allTaskPriority, TaskListFilters, updateTaskFilters, TASK_LIST_FILTER_CATEGORIES, TASK_LIST_GROUP_BY_CATEGORIES, TaskListFilterCategoryField, deleteTask, discardTaskUpdatesInLocalStore, TaskFilterCategory, TaskType, TaskGroupWithTasksList, TaskListLocalData, bulkUpdateTaskList, createNewTaskGroup, initiateTaskListLocalData, deleteTaskGroup, updateTaskListLocalData, dragNDropTasks, updateTaskGroupName, TaskGroupState, TaskGroupKey, toTaskListGroupByKeyType, toTaskListGroupByKeyTypeStrict, getTaskUpdates, fetchAllTaskGroups, initialTaskDetail, getDueDateValueFromDueDateGroupId, toPriorityCodeType, toTaskStatusCodeType, DueDateGroupKey, toDueDateGroupKeyType, updateTaskFromListView, updateTaskListTab, removeTaskFromList, snoozeTask, unsnoozeTask, convertHHMMStrToMinutes, initialTaskDetailLocalData, TaskListTab, ALL_TASK_LIST_TABS, };
|
|
851
853
|
export { Tag, TagState, TagViewState, getAllTags, TagViewSelectorView, fetchTagList, createTag, deleteTag, };
|
|
852
854
|
export { CardPayment, CardPaymentViewState, SetupIntentData, CardPaymentSelectorView, getAllCardsAndBankPaymentMethods, createCardSetupIntent, confirmCardSetupIntent, addCardPaymentSource, fetchPaymentSources, resetCardPaymentErrorStatuses, clearCardPaymentView, AddCardPaymentSourceType, };
|
|
853
855
|
export { getAuditReportGroupViewSelectorView, getAuditRuleGroupViewSelectorView, getUserFromAllUsers, AuditReportGroupSelectorView, AuditReportGroupViewSelectorView, AuditRuleGroupViewSelectorView, fetchAuditRuleGroupView, fetchAuditReportGroupView, saveReasonForAuditRule, AuditRuleGroup, AuditRuleGroupReport, AuditReportRule, AuditRuleEntityType, AuditRuleEntityIdType, AuditRuleBypassReason, clearAuditReportGroupViewByCompanyId, };
|