@zeniai/client-epic-state 4.20.2-beta28RR → 4.20.2-beta30ND
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 +0 -2
- package/lib/entity/task/taskPayload.d.ts +0 -3
- package/lib/entity/task/taskPayload.js +0 -5
- package/lib/entity/task/taskState.d.ts +0 -3
- package/lib/epic.d.ts +1 -3
- package/lib/epic.js +1 -3
- package/lib/esm/entity/snackbar/snackbarTypes.js +0 -2
- package/lib/esm/entity/task/taskPayload.js +0 -5
- package/lib/esm/epic.js +1 -3
- package/lib/esm/index.js +4 -4
- package/lib/esm/view/companyView/types/cockpitTypes.js +0 -1
- package/lib/esm/view/profitAndLossClassesView/profitAndLossClassesByClassHorizontalSelector.js +15 -1
- package/lib/esm/view/profitAndLossClassesView/profitAndLossHorizontalEnrichment.js +17 -14
- package/lib/esm/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +0 -2
- package/lib/esm/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +0 -4
- package/lib/esm/view/taskManager/taskDetailView/epics/initializeTaskToLocalStoreEpic.js +0 -1
- package/lib/esm/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +0 -1
- package/lib/esm/view/taskManager/taskDetailView/taskDetail.js +0 -4
- package/lib/esm/view/taskManager/taskDetailView/taskDetailReducer.js +1 -49
- package/lib/esm/view/taskManager/taskDetailView/taskDetailSelector.js +0 -3
- package/lib/esm/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +0 -6
- package/lib/esm/view/taskManager/taskListView/epics/fetchTaskListEpic.js +3 -13
- package/lib/esm/view/taskManager/taskListView/taskList.js +0 -8
- package/lib/esm/view/taskManager/taskListView/taskListReducer.js +10 -79
- package/lib/esm/view/taskManager/taskListView/taskListSelector.js +17 -56
- package/lib/index.d.ts +4 -4
- package/lib/index.js +4 -8
- package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
- package/lib/view/companyTaskManagerView/companyTaskManagerViewReducer.d.ts +2 -2
- package/lib/view/companyView/types/cockpitTypes.d.ts +1 -1
- package/lib/view/companyView/types/cockpitTypes.js +0 -1
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
- package/lib/view/profitAndLossClassesView/profitAndLossClassesByClassHorizontalSelector.d.ts +2 -0
- package/lib/view/profitAndLossClassesView/profitAndLossClassesByClassHorizontalSelector.js +16 -2
- package/lib/view/profitAndLossClassesView/profitAndLossHorizontalEnrichment.js +17 -14
- package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.d.ts +1 -2
- package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +0 -2
- package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.d.ts +1 -2
- package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +0 -4
- package/lib/view/taskManager/taskDetailView/epics/initializeTaskToLocalStoreEpic.js +0 -1
- package/lib/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +0 -1
- package/lib/view/taskManager/taskDetailView/taskDetail.d.ts +0 -2
- package/lib/view/taskManager/taskDetailView/taskDetail.js +0 -4
- package/lib/view/taskManager/taskDetailView/taskDetailReducer.d.ts +1 -10
- package/lib/view/taskManager/taskDetailView/taskDetailReducer.js +2 -50
- package/lib/view/taskManager/taskDetailView/taskDetailSelector.d.ts +0 -2
- package/lib/view/taskManager/taskDetailView/taskDetailSelector.js +0 -3
- package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.d.ts +0 -6
- package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +0 -6
- package/lib/view/taskManager/taskListView/epics/fetchTaskListEpic.js +3 -13
- package/lib/view/taskManager/taskListView/taskList.d.ts +1 -15
- package/lib/view/taskManager/taskListView/taskList.js +1 -10
- package/lib/view/taskManager/taskListView/taskListPayload.d.ts +0 -3
- package/lib/view/taskManager/taskListView/taskListReducer.d.ts +4 -7
- package/lib/view/taskManager/taskListView/taskListReducer.js +11 -80
- package/lib/view/taskManager/taskListView/taskListSelector.d.ts +3 -8
- package/lib/view/taskManager/taskListView/taskListSelector.js +17 -56
- package/package.json +1 -1
- package/lib/esm/view/taskManager/taskDetailView/epics/snoozeTaskEpic.js +0 -64
- package/lib/esm/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +0 -54
- package/lib/view/taskManager/taskDetailView/epics/snoozeTaskEpic.d.ts +0 -9
- package/lib/view/taskManager/taskDetailView/epics/snoozeTaskEpic.js +0 -68
- package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.d.ts +0 -8
- package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +0 -58
|
@@ -72,19 +72,22 @@ function buildHorizontalClassColumnBalancesSlice(report, classAmounts, totalAmou
|
|
|
72
72
|
return getEmptyHorizontalSectionBalancesSlice(report.firstMonthOfFY, timeframe);
|
|
73
73
|
}
|
|
74
74
|
const { startDate, endDate } = report.selectedPeriod;
|
|
75
|
-
const balances = report.classColumns.map((col, columnIndex) =>
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
75
|
+
const balances = report.classColumns.map((col, columnIndex) => {
|
|
76
|
+
const amount = classAmounts[columnIndex] ?? 0;
|
|
77
|
+
return {
|
|
78
|
+
balance: {
|
|
79
|
+
amount,
|
|
80
|
+
currencyCode,
|
|
81
|
+
currencySymbol,
|
|
82
|
+
},
|
|
83
|
+
balanceTimeFrame: timeframe,
|
|
84
|
+
startDate,
|
|
85
|
+
endDate,
|
|
86
|
+
type: amount === 0 ? 'default_with_null_balance' : 'default',
|
|
87
|
+
id: col.classId,
|
|
88
|
+
label: col.className,
|
|
89
|
+
};
|
|
90
|
+
});
|
|
88
91
|
balances.push({
|
|
89
92
|
balance: {
|
|
90
93
|
amount: totalAmount,
|
|
@@ -94,7 +97,7 @@ function buildHorizontalClassColumnBalancesSlice(report, classAmounts, totalAmou
|
|
|
94
97
|
balanceTimeFrame: timeframe,
|
|
95
98
|
startDate,
|
|
96
99
|
endDate,
|
|
97
|
-
type: 'default',
|
|
100
|
+
type: totalAmount === 0 ? 'default_with_null_balance' : 'default',
|
|
98
101
|
id: HORIZONTAL_CLASS_TOTAL_BALANCE_ID,
|
|
99
102
|
label: 'Total',
|
|
100
103
|
});
|
|
@@ -4,7 +4,6 @@ import { openSnackbar } from '../../../../entity/snackbar/snackbarReducer';
|
|
|
4
4
|
import { updateTasks } from '../../../../entity/task/taskReducer';
|
|
5
5
|
import { getTaskById } from '../../../../entity/task/taskSelector';
|
|
6
6
|
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../responsePayload';
|
|
7
|
-
import { removeTaskFromList } from '../../taskListView/taskListReducer';
|
|
8
7
|
import { archiveTask, archiveTaskSuccessOrFailure } from '../taskDetailReducer';
|
|
9
8
|
// Epic function to handle archiving of tasks
|
|
10
9
|
export const archiveTaskEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(archiveTask.match), mergeMap((action) => handleArchiveTask(action.payload.taskId, state$, zeniAPI)));
|
|
@@ -26,7 +25,6 @@ const handleApiResponse = (response, taskId) => {
|
|
|
26
25
|
response.data.tasks.length > 0) {
|
|
27
26
|
const fetchActions = [
|
|
28
27
|
updateTasks(response.data.tasks),
|
|
29
|
-
removeTaskFromList(taskId),
|
|
30
28
|
archiveTaskSuccessOrFailure({
|
|
31
29
|
fetchState: 'Completed',
|
|
32
30
|
taskId,
|
|
@@ -2,7 +2,6 @@ import { from, of } from 'rxjs';
|
|
|
2
2
|
import { catchError, filter, mergeMap } from 'rxjs/operators';
|
|
3
3
|
import { openSnackbar } from '../../../../entity/snackbar/snackbarReducer';
|
|
4
4
|
import { createZeniAPIStatus, isSuccessStatus, } from '../../../../responsePayload';
|
|
5
|
-
import { removeTaskFromList } from '../../taskListView/taskListReducer';
|
|
6
5
|
import { deleteTask, deleteTaskSuccessOrFailure } from '../taskDetailReducer';
|
|
7
6
|
export const deleteTaskEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(deleteTask.match), mergeMap((action) => {
|
|
8
7
|
const { taskId } = action.payload;
|
|
@@ -11,9 +10,6 @@ export const deleteTaskEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filt
|
|
|
11
10
|
.pipe(mergeMap((response) => {
|
|
12
11
|
if (isSuccessStatus(response)) {
|
|
13
12
|
const actions = [];
|
|
14
|
-
if (taskId != null) {
|
|
15
|
-
actions.push(removeTaskFromList(taskId));
|
|
16
|
-
}
|
|
17
13
|
actions.push(deleteTaskSuccessOrFailure({ fetchState: 'Completed', taskId }));
|
|
18
14
|
return from(actions);
|
|
19
15
|
}
|
|
@@ -25,7 +25,6 @@ export const initializeTaskToLocalStoreEpic = (actions$, state$) => actions$.pip
|
|
|
25
25
|
savedRecurringEndDate: task.recurringEndDate,
|
|
26
26
|
recurringStartDate: task.recurringStartDate,
|
|
27
27
|
timeSpent: task.timeSpent,
|
|
28
|
-
isPrivate: task.isPrivate,
|
|
29
28
|
};
|
|
30
29
|
const actions = [
|
|
31
30
|
saveTaskUpdatesToLocalStore({ taskDetailLocalData, taskId }),
|
|
@@ -94,6 +94,5 @@ const prepareTaskPayload = (state, taskId, taskGroupId) => {
|
|
|
94
94
|
sync_token: syncToken,
|
|
95
95
|
task_group_ids: taskGroupId != null ? [taskGroupId] : [],
|
|
96
96
|
time_spent: convertHHMMStrToMinutes(localData.timeSpent),
|
|
97
|
-
...(taskId == null ? { is_private: localData.isPrivate ?? false } : {}),
|
|
98
97
|
};
|
|
99
98
|
};
|
|
@@ -185,54 +185,6 @@ const taskDetailView = createSlice({
|
|
|
185
185
|
draft.editTaskStateById[taskId].archiveStatus.fetchState = fetchState;
|
|
186
186
|
draft.editTaskStateById[taskId].archiveStatus.error = error;
|
|
187
187
|
},
|
|
188
|
-
snoozeTask: {
|
|
189
|
-
reducer(draft, action) {
|
|
190
|
-
const { taskId } = action.payload;
|
|
191
|
-
draft.editTaskStateById[taskId] = {
|
|
192
|
-
...(draft.editTaskStateById[taskId] != null
|
|
193
|
-
? draft.editTaskStateById[taskId]
|
|
194
|
-
: initialTaskDetail),
|
|
195
|
-
snoozeStatus: {
|
|
196
|
-
fetchState: 'In-Progress',
|
|
197
|
-
error: undefined,
|
|
198
|
-
},
|
|
199
|
-
};
|
|
200
|
-
},
|
|
201
|
-
prepare(taskId, snoozedUntil) {
|
|
202
|
-
return {
|
|
203
|
-
payload: {
|
|
204
|
-
taskId,
|
|
205
|
-
snoozedUntil,
|
|
206
|
-
},
|
|
207
|
-
};
|
|
208
|
-
},
|
|
209
|
-
},
|
|
210
|
-
snoozeTaskSuccessOrFailure(draft, action) {
|
|
211
|
-
const { taskId, fetchState, error } = action.payload;
|
|
212
|
-
draft.editTaskStateById[taskId].snoozeStatus.fetchState = fetchState;
|
|
213
|
-
draft.editTaskStateById[taskId].snoozeStatus.error = error;
|
|
214
|
-
},
|
|
215
|
-
unsnoozeTask: {
|
|
216
|
-
reducer(draft, action) {
|
|
217
|
-
const { taskId } = action.payload;
|
|
218
|
-
draft.editTaskStateById[taskId] = {
|
|
219
|
-
...(draft.editTaskStateById[taskId] != null
|
|
220
|
-
? draft.editTaskStateById[taskId]
|
|
221
|
-
: initialTaskDetail),
|
|
222
|
-
snoozeStatus: {
|
|
223
|
-
fetchState: 'In-Progress',
|
|
224
|
-
error: undefined,
|
|
225
|
-
},
|
|
226
|
-
};
|
|
227
|
-
},
|
|
228
|
-
prepare(taskId) {
|
|
229
|
-
return {
|
|
230
|
-
payload: {
|
|
231
|
-
taskId,
|
|
232
|
-
},
|
|
233
|
-
};
|
|
234
|
-
},
|
|
235
|
-
},
|
|
236
188
|
deleteTask: {
|
|
237
189
|
reducer(draft, action) {
|
|
238
190
|
const { taskId } = action.payload;
|
|
@@ -318,5 +270,5 @@ const taskDetailView = createSlice({
|
|
|
318
270
|
},
|
|
319
271
|
},
|
|
320
272
|
});
|
|
321
|
-
export const { fetchTaskDetailPage, fetchTaskDetail, initializeTaskToLocalStore, updateEditTaskFetchStatus, saveTaskUpdatesToLocalStore, discardTaskUpdatesInLocalStore, saveTaskDetail, archiveTask, archiveTaskSuccessOrFailure,
|
|
273
|
+
export const { fetchTaskDetailPage, fetchTaskDetail, initializeTaskToLocalStore, updateEditTaskFetchStatus, saveTaskUpdatesToLocalStore, discardTaskUpdatesInLocalStore, saveTaskDetail, archiveTask, archiveTaskSuccessOrFailure, saveTaskSuccessOrFailure, deleteTask, removeTaskDetail, deleteTaskSuccessOrFailure, fetchTaskHistory, updateTaskHistory, updateTaskHistoryFetchStatus, clearTaskDetail, updateCreatedTagToLocalStore, updateDeletedTagToLocalStore, } = taskDetailView.actions;
|
|
322
274
|
export default taskDetailView.reducer;
|
|
@@ -21,13 +21,11 @@ export const getTaskDetail = (state, taskId) => {
|
|
|
21
21
|
};
|
|
22
22
|
let taskHistory = [];
|
|
23
23
|
let createdByUser = undefined;
|
|
24
|
-
let snoozedUntil = undefined;
|
|
25
24
|
if (taskId != null && sourceTaskDetail != null) {
|
|
26
25
|
const taskEntity = getTaskById(taskState, taskId);
|
|
27
26
|
const fileIdsInEntity = taskEntity?.fileIds ?? [];
|
|
28
27
|
if (taskEntity != null) {
|
|
29
28
|
createdByUser = getUserAndUserRole(userState, userRoleState, addressState, taskEntity.createdBy);
|
|
30
|
-
snoozedUntil = taskEntity.snoozedUntil;
|
|
31
29
|
}
|
|
32
30
|
if (fileIdsInEntity.length > 0) {
|
|
33
31
|
fetchStatus = reduceFetchState([
|
|
@@ -76,7 +74,6 @@ export const getTaskDetail = (state, taskId) => {
|
|
|
76
74
|
version: 0,
|
|
77
75
|
createdByUser,
|
|
78
76
|
showTaskDetailFormFooter,
|
|
79
|
-
snoozedUntil,
|
|
80
77
|
};
|
|
81
78
|
};
|
|
82
79
|
export const allTaskStatus = [
|
|
@@ -71,12 +71,6 @@ const toTaskPayload = (state, task) => {
|
|
|
71
71
|
assignees: task.assignees,
|
|
72
72
|
description: task.description,
|
|
73
73
|
group_assignees: task.groupAssignees,
|
|
74
|
-
is_archived: task.isArchived,
|
|
75
|
-
is_deleted: task.isDeleted,
|
|
76
|
-
is_snooze_notification_sent: false,
|
|
77
|
-
snoozed_at: null,
|
|
78
|
-
snoozed_by: null,
|
|
79
|
-
snoozed_until: task.snoozedUntil != null ? task.snoozedUntil.toISOString() : null,
|
|
80
74
|
due_date: task.dueDate != null ? task.dueDate.format(DEFAULT_DATE_FORMAT) : null,
|
|
81
75
|
priority: task.priority.code,
|
|
82
76
|
status: task.status.code,
|
|
@@ -9,20 +9,10 @@ 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
|
-
|
|
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 ?? [],
|
|
12
|
+
return of(updateTasks(response.data.tasks), updateTaskList({
|
|
13
|
+
data: response.data.tasks,
|
|
24
14
|
updateType: 'replace',
|
|
25
|
-
}), updateTags(
|
|
15
|
+
}), updateTags(response.data.tasks.map((task) => task.tags).flat()));
|
|
26
16
|
}
|
|
27
17
|
else {
|
|
28
18
|
return of(updateTaskListFetchStatus({
|
|
@@ -1,11 +1,4 @@
|
|
|
1
1
|
import { stringToUnion, stringToUnionStrict, } from '../../../commonStateTypes/stringToUnion';
|
|
2
|
-
export const ALL_TASK_LIST_TABS = [
|
|
3
|
-
'live',
|
|
4
|
-
'archived',
|
|
5
|
-
'deleted',
|
|
6
|
-
'snoozed',
|
|
7
|
-
];
|
|
8
|
-
export const toTaskListTabType = (v) => stringToUnion(v, ALL_TASK_LIST_TABS);
|
|
9
2
|
export const DUE_DATE_GROUP_KEYS = [
|
|
10
3
|
'overdue',
|
|
11
4
|
'today',
|
|
@@ -33,7 +26,6 @@ const ALL_TASK_LIST_SORT_KEYS = [
|
|
|
33
26
|
'status',
|
|
34
27
|
'priority',
|
|
35
28
|
'timeSpent',
|
|
36
|
-
'visibility',
|
|
37
29
|
];
|
|
38
30
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
39
31
|
const toTaskListSortKeyType = (v) => stringToUnion(v, ALL_TASK_LIST_SORT_KEYS);
|
|
@@ -29,23 +29,7 @@ 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
|
-
};
|
|
41
32
|
export const initialState = {
|
|
42
|
-
currentTab: 'live',
|
|
43
|
-
byTab: {
|
|
44
|
-
live: { ...initialTabData },
|
|
45
|
-
archived: { ...initialTabData },
|
|
46
|
-
deleted: { ...initialTabData },
|
|
47
|
-
snoozed: { ...initialTabData },
|
|
48
|
-
},
|
|
49
33
|
taskIds: [],
|
|
50
34
|
taskIdsByGroupsIds: {},
|
|
51
35
|
taskIdsByPriority: initialTaskIdsByPriority,
|
|
@@ -102,30 +86,17 @@ const taskList = createSlice({
|
|
|
102
86
|
draft.error = undefined;
|
|
103
87
|
},
|
|
104
88
|
updateTaskList(draft, action) {
|
|
105
|
-
const { data
|
|
89
|
+
const { data } = action.payload;
|
|
106
90
|
draft.fetchState = 'Completed';
|
|
107
91
|
draft.error = undefined;
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
draft.
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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);
|
|
92
|
+
const { taskIds, taskIdsGroupedByPriority, taskIdsByGroupIds, taskIdsGroupedByStatus, taskIdsByAssignees, taskIdsByDueDate, taskIdsByTags, } = getGroupedTaskIds(data);
|
|
93
|
+
draft.taskIds = taskIds;
|
|
94
|
+
draft.taskIdsByGroupsIds = taskIdsByGroupIds;
|
|
95
|
+
draft.taskIdsByPriority = taskIdsGroupedByPriority;
|
|
96
|
+
draft.taskIdsByStatus = taskIdsGroupedByStatus;
|
|
97
|
+
draft.taskIdsByAssignees = taskIdsByAssignees;
|
|
98
|
+
draft.taskIdsByDueDate = taskIdsByDueDate;
|
|
99
|
+
draft.taskIdsByTags = taskIdsByTags;
|
|
129
100
|
},
|
|
130
101
|
initiateTaskListLocalData(draft, action) {
|
|
131
102
|
const { taskGroupById } = action.payload;
|
|
@@ -433,34 +404,12 @@ const taskList = createSlice({
|
|
|
433
404
|
draft.updateTasksFetchState.fetchState = 'Error';
|
|
434
405
|
draft.updateTasksFetchState.error = action.payload.error;
|
|
435
406
|
},
|
|
436
|
-
removeTaskFromList(draft, action) {
|
|
437
|
-
const taskIdToRemove = action.payload;
|
|
438
|
-
draft.taskIds = draft.taskIds.filter((id) => id !== taskIdToRemove);
|
|
439
|
-
Object.keys(draft.taskIdsByGroupsIds).forEach((groupId) => {
|
|
440
|
-
draft.taskIdsByGroupsIds[groupId] = draft.taskIdsByGroupsIds[groupId].filter((id) => id !== taskIdToRemove);
|
|
441
|
-
});
|
|
442
|
-
Object.keys(draft.taskIdsByPriority).forEach((key) => {
|
|
443
|
-
draft.taskIdsByPriority[key] = draft.taskIdsByPriority[key].filter((id) => id !== taskIdToRemove);
|
|
444
|
-
});
|
|
445
|
-
Object.keys(draft.taskIdsByStatus).forEach((key) => {
|
|
446
|
-
draft.taskIdsByStatus[key] = draft.taskIdsByStatus[key].filter((id) => id !== taskIdToRemove);
|
|
447
|
-
});
|
|
448
|
-
Object.keys(draft.taskIdsByDueDate).forEach((key) => {
|
|
449
|
-
draft.taskIdsByDueDate[key] = draft.taskIdsByDueDate[key].filter((id) => id !== taskIdToRemove);
|
|
450
|
-
});
|
|
451
|
-
Object.keys(draft.taskIdsByAssignees).forEach((key) => {
|
|
452
|
-
draft.taskIdsByAssignees[key] = draft.taskIdsByAssignees[key].filter((id) => id !== taskIdToRemove);
|
|
453
|
-
});
|
|
454
|
-
Object.keys(draft.taskIdsByTags).forEach((key) => {
|
|
455
|
-
draft.taskIdsByTags[key] = draft.taskIdsByTags[key].filter((id) => id !== taskIdToRemove);
|
|
456
|
-
});
|
|
457
|
-
},
|
|
458
407
|
clearTaskList(draft) {
|
|
459
408
|
Object.assign(draft, initialState);
|
|
460
409
|
},
|
|
461
410
|
},
|
|
462
411
|
});
|
|
463
|
-
export const { fetchTaskListPage, fetchTaskList, updateTaskList,
|
|
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;
|
|
464
413
|
export default taskList.reducer;
|
|
465
414
|
/**
|
|
466
415
|
* helpers
|
|
@@ -539,24 +488,6 @@ const getTagsGroupKey = (tags) => {
|
|
|
539
488
|
tagIds.sort();
|
|
540
489
|
return tagIds.join(',');
|
|
541
490
|
};
|
|
542
|
-
const toTabData = (grouped) => ({
|
|
543
|
-
taskIds: grouped.taskIds,
|
|
544
|
-
taskIdsByAssignees: grouped.taskIdsByAssignees,
|
|
545
|
-
taskIdsByDueDate: grouped.taskIdsByDueDate,
|
|
546
|
-
taskIdsByGroupsIds: grouped.taskIdsByGroupIds,
|
|
547
|
-
taskIdsByPriority: grouped.taskIdsGroupedByPriority,
|
|
548
|
-
taskIdsByStatus: grouped.taskIdsGroupedByStatus,
|
|
549
|
-
taskIdsByTags: grouped.taskIdsByTags,
|
|
550
|
-
});
|
|
551
|
-
const copyTabDataToTopLevel = (draft, tabData) => {
|
|
552
|
-
draft.taskIds = tabData.taskIds;
|
|
553
|
-
draft.taskIdsByGroupsIds = tabData.taskIdsByGroupsIds;
|
|
554
|
-
draft.taskIdsByPriority = tabData.taskIdsByPriority;
|
|
555
|
-
draft.taskIdsByStatus = tabData.taskIdsByStatus;
|
|
556
|
-
draft.taskIdsByAssignees = tabData.taskIdsByAssignees;
|
|
557
|
-
draft.taskIdsByDueDate = tabData.taskIdsByDueDate;
|
|
558
|
-
draft.taskIdsByTags = tabData.taskIdsByTags;
|
|
559
|
-
};
|
|
560
491
|
const getGroupedTaskIds = (tasks) => {
|
|
561
492
|
const taskIds = [];
|
|
562
493
|
const taskIdsByGroupIds = {};
|
|
@@ -17,12 +17,8 @@ import { allTaskPriority, allTaskStatus, } from '../taskDetailView/taskDetailSel
|
|
|
17
17
|
import { DUE_DATE_GROUP_KEYS, } from './taskList';
|
|
18
18
|
import { initialState } from './taskListReducer';
|
|
19
19
|
const isDefaultFilters = (taskListState) => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
const hasNoActiveFilters = taskListState.filters.categories == null ||
|
|
24
|
-
taskListState.filters.categories.length === 0;
|
|
25
|
-
return (hasNoActiveFilters || isEqual(taskListState.filters, initialState.filters));
|
|
20
|
+
return (isEqual(taskListState.filters, initialState.filters) &&
|
|
21
|
+
initialState.uiState.searchText === taskListState.uiState.searchText);
|
|
26
22
|
};
|
|
27
23
|
const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
|
|
28
24
|
const tasksInOrder = orderBy(tasksList, (task) => {
|
|
@@ -38,12 +34,8 @@ const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
|
|
|
38
34
|
return task.status.name;
|
|
39
35
|
case 'priority':
|
|
40
36
|
return ALL_PRIORITY_CODE.indexOf(task.priority.code);
|
|
41
|
-
case 'assignee':
|
|
42
|
-
return task.firstAssigneeSortName;
|
|
43
37
|
case 'timeSpent':
|
|
44
38
|
return task.timeSpent;
|
|
45
|
-
case 'visibility':
|
|
46
|
-
return task.isPrivate ? 1 : 0;
|
|
47
39
|
case 'name':
|
|
48
40
|
default:
|
|
49
41
|
return task.name.toLowerCase();
|
|
@@ -51,7 +43,7 @@ const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
|
|
|
51
43
|
}, sortOrder);
|
|
52
44
|
return tasksInOrder;
|
|
53
45
|
};
|
|
54
|
-
const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRoleState, addressState, taskIds, tagState,
|
|
46
|
+
const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRoleState, addressState, taskIds, tagState, }) => {
|
|
55
47
|
const { sortKey, searchText } = taskListState.uiState;
|
|
56
48
|
const sortOrder = getSortOrder(taskListState.uiState.sortOrder);
|
|
57
49
|
const tasks = taskIds
|
|
@@ -61,18 +53,7 @@ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRole
|
|
|
61
53
|
const assigneeUsers = task.assignees
|
|
62
54
|
.map((userId) => getUserAndUserRole(userState, userRoleState, addressState, userId))
|
|
63
55
|
.filter((value) => value != null);
|
|
64
|
-
|
|
65
|
-
const firstUser = assigneeUsers[0]?.user;
|
|
66
|
-
const firstUserName = (firstUser != null ? getUserName(firstUser) : '') ||
|
|
67
|
-
firstUser?.email ||
|
|
68
|
-
'';
|
|
69
|
-
const firstGroupName = task.groupAssignees
|
|
70
|
-
.map((gId) => userGroupsState.userGroupByUserGroupId[gId]?.name)
|
|
71
|
-
.find((name) => name != null && name !== '');
|
|
72
|
-
const firstAssigneeSortName = (firstUserName ||
|
|
73
|
-
firstGroupName ||
|
|
74
|
-
'').toLowerCase();
|
|
75
|
-
return { ...task, assigneeUsers, firstAssigneeSortName };
|
|
56
|
+
return { ...task, assigneeUsers };
|
|
76
57
|
}
|
|
77
58
|
return undefined;
|
|
78
59
|
})
|
|
@@ -81,7 +62,7 @@ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRole
|
|
|
81
62
|
const sortedTaskList = sortTasksList(tagState, filteredTaskList, sortKey, sortOrder);
|
|
82
63
|
return sortedTaskList;
|
|
83
64
|
};
|
|
84
|
-
const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupState, taskGroupViewState, userState, userRoleState, addressState, tagState,
|
|
65
|
+
const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupState, taskGroupViewState, userState, userRoleState, addressState, tagState, }) => {
|
|
85
66
|
const { taskGroupsIds } = taskGroupViewState;
|
|
86
67
|
const taskGroupsWithTasksList = taskGroupsIds
|
|
87
68
|
.map((taskGroupId) => {
|
|
@@ -95,7 +76,6 @@ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupStat
|
|
|
95
76
|
addressState,
|
|
96
77
|
taskIds,
|
|
97
78
|
tagState,
|
|
98
|
-
userGroupsState,
|
|
99
79
|
});
|
|
100
80
|
if (taskGroup != null) {
|
|
101
81
|
return {
|
|
@@ -124,13 +104,12 @@ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupStat
|
|
|
124
104
|
if (defaultTaskGroup != null) {
|
|
125
105
|
sortedTaskGroupsWithTasksList.push(defaultTaskGroup);
|
|
126
106
|
}
|
|
127
|
-
if (taskListState
|
|
128
|
-
isDefaultFilters(taskListState) === false) {
|
|
107
|
+
if (isDefaultFilters(taskListState) === false) {
|
|
129
108
|
return sortedTaskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
130
109
|
}
|
|
131
110
|
return sortedTaskGroupsWithTasksList;
|
|
132
111
|
};
|
|
133
|
-
export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, userRoleState, addressState, tagState,
|
|
112
|
+
export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
134
113
|
const assigneeGroups = Object.keys(taskListState.taskIdsByAssignees);
|
|
135
114
|
const taskGroupsWithTasksList = assigneeGroups.map((groupKey) => {
|
|
136
115
|
const taskIds = taskListState.taskIdsByAssignees[groupKey];
|
|
@@ -142,7 +121,6 @@ export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userSt
|
|
|
142
121
|
addressState,
|
|
143
122
|
taskIds,
|
|
144
123
|
tagState,
|
|
145
|
-
userGroupsState,
|
|
146
124
|
});
|
|
147
125
|
const assigneeIds = groupKey.split(',');
|
|
148
126
|
const groupName = getUsersByUserIds(userState, assigneeIds)
|
|
@@ -158,13 +136,12 @@ export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userSt
|
|
|
158
136
|
tasks: tasksWithUserDetails,
|
|
159
137
|
};
|
|
160
138
|
});
|
|
161
|
-
if (taskListState
|
|
162
|
-
isDefaultFilters(taskListState) === false) {
|
|
139
|
+
if (isDefaultFilters(taskListState) === false) {
|
|
163
140
|
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
164
141
|
}
|
|
165
142
|
return taskGroupsWithTasksList;
|
|
166
143
|
};
|
|
167
|
-
export const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, userRoleState, addressState, tagState,
|
|
144
|
+
export const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
168
145
|
const taskGroupsWithTasksList = ALL_PRIORITY_CODE.map((groupKey) => {
|
|
169
146
|
const taskIds = taskListState.taskIdsByPriority[groupKey] ?? [];
|
|
170
147
|
const tasksWithUserDetails = getTasksWithUserDetails({
|
|
@@ -175,7 +152,6 @@ export const getTaskListGroupedByPriority = ({ taskListState, taskState, userSta
|
|
|
175
152
|
addressState,
|
|
176
153
|
taskIds,
|
|
177
154
|
tagState,
|
|
178
|
-
userGroupsState,
|
|
179
155
|
});
|
|
180
156
|
return {
|
|
181
157
|
groupName: allTaskPriority.find((priority) => priority.code === groupKey)?.name ??
|
|
@@ -185,13 +161,12 @@ export const getTaskListGroupedByPriority = ({ taskListState, taskState, userSta
|
|
|
185
161
|
tasks: tasksWithUserDetails,
|
|
186
162
|
};
|
|
187
163
|
});
|
|
188
|
-
if (taskListState
|
|
189
|
-
isDefaultFilters(taskListState) === false) {
|
|
164
|
+
if (isDefaultFilters(taskListState) === false) {
|
|
190
165
|
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
191
166
|
}
|
|
192
167
|
return taskGroupsWithTasksList;
|
|
193
168
|
};
|
|
194
|
-
const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userRoleState, addressState, tagState,
|
|
169
|
+
const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
195
170
|
const taskGroupsWithTasksList = ALL_TASK_STATUS_CODE.map((groupKey) => {
|
|
196
171
|
const taskIds = taskListState.taskIdsByStatus[groupKey] ?? [];
|
|
197
172
|
const tasksWithUserDetails = getTasksWithUserDetails({
|
|
@@ -202,7 +177,6 @@ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userR
|
|
|
202
177
|
addressState,
|
|
203
178
|
taskIds,
|
|
204
179
|
tagState,
|
|
205
|
-
userGroupsState,
|
|
206
180
|
});
|
|
207
181
|
return {
|
|
208
182
|
groupName: allTaskStatus.find((taskStatus) => taskStatus.code === groupKey)
|
|
@@ -212,13 +186,12 @@ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userR
|
|
|
212
186
|
tasks: tasksWithUserDetails,
|
|
213
187
|
};
|
|
214
188
|
});
|
|
215
|
-
if (taskListState
|
|
216
|
-
isDefaultFilters(taskListState) === false) {
|
|
189
|
+
if (isDefaultFilters(taskListState) === false) {
|
|
217
190
|
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
218
191
|
}
|
|
219
192
|
return taskGroupsWithTasksList;
|
|
220
193
|
};
|
|
221
|
-
const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRoleState, addressState, tagState,
|
|
194
|
+
const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
222
195
|
const tagGroups = Object.keys(taskListState.taskIdsByTags);
|
|
223
196
|
const taskGroupsWithTasksList = tagGroups.map((groupKey) => {
|
|
224
197
|
const taskIds = taskListState.taskIdsByTags[groupKey];
|
|
@@ -230,7 +203,6 @@ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRol
|
|
|
230
203
|
addressState,
|
|
231
204
|
taskIds,
|
|
232
205
|
tagState,
|
|
233
|
-
userGroupsState,
|
|
234
206
|
});
|
|
235
207
|
const tagIds = groupKey.split(',');
|
|
236
208
|
const groupName = getTagsByIds(tagState, tagIds)
|
|
@@ -245,13 +217,12 @@ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRol
|
|
|
245
217
|
tasks: tasksWithUserDetails,
|
|
246
218
|
};
|
|
247
219
|
});
|
|
248
|
-
if (taskListState
|
|
249
|
-
isDefaultFilters(taskListState) === false) {
|
|
220
|
+
if (isDefaultFilters(taskListState) === false) {
|
|
250
221
|
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
251
222
|
}
|
|
252
223
|
return taskGroupsWithTasksList;
|
|
253
224
|
};
|
|
254
|
-
const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, userRoleState, addressState, tagState,
|
|
225
|
+
const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
255
226
|
const taskGroupsWithTasksList = DUE_DATE_GROUP_KEYS.map((groupKey) => {
|
|
256
227
|
const taskIds = taskListState.taskIdsByDueDate[groupKey];
|
|
257
228
|
const tasksWithUserDetails = getTasksWithUserDetails({
|
|
@@ -262,7 +233,6 @@ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, user
|
|
|
262
233
|
addressState,
|
|
263
234
|
taskIds,
|
|
264
235
|
tagState,
|
|
265
|
-
userGroupsState,
|
|
266
236
|
});
|
|
267
237
|
return {
|
|
268
238
|
groupName: groupKey,
|
|
@@ -271,13 +241,12 @@ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, user
|
|
|
271
241
|
tasks: tasksWithUserDetails,
|
|
272
242
|
};
|
|
273
243
|
});
|
|
274
|
-
if (taskListState
|
|
275
|
-
isDefaultFilters(taskListState) === false) {
|
|
244
|
+
if (isDefaultFilters(taskListState) === false) {
|
|
276
245
|
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
277
246
|
}
|
|
278
247
|
return taskGroupsWithTasksList;
|
|
279
248
|
};
|
|
280
|
-
const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRoleState, addressState, taskGroupState, taskGroupViewState, tagState,
|
|
249
|
+
const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRoleState, addressState, taskGroupState, taskGroupViewState, tagState, }) => {
|
|
281
250
|
const { groupByKey } = taskListState.uiState;
|
|
282
251
|
if (groupByKey === 'groupName') {
|
|
283
252
|
return getTaskListGroupedByGroupName({
|
|
@@ -289,7 +258,6 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
289
258
|
taskGroupState,
|
|
290
259
|
taskGroupViewState,
|
|
291
260
|
tagState,
|
|
292
|
-
userGroupsState,
|
|
293
261
|
});
|
|
294
262
|
}
|
|
295
263
|
if (groupByKey === 'assignee') {
|
|
@@ -300,7 +268,6 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
300
268
|
userRoleState,
|
|
301
269
|
addressState,
|
|
302
270
|
tagState,
|
|
303
|
-
userGroupsState,
|
|
304
271
|
});
|
|
305
272
|
}
|
|
306
273
|
if (groupByKey === 'priority') {
|
|
@@ -311,7 +278,6 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
311
278
|
userRoleState,
|
|
312
279
|
addressState,
|
|
313
280
|
tagState,
|
|
314
|
-
userGroupsState,
|
|
315
281
|
});
|
|
316
282
|
}
|
|
317
283
|
if (groupByKey === 'status') {
|
|
@@ -322,7 +288,6 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
322
288
|
userRoleState,
|
|
323
289
|
addressState,
|
|
324
290
|
tagState,
|
|
325
|
-
userGroupsState,
|
|
326
291
|
});
|
|
327
292
|
}
|
|
328
293
|
if (groupByKey === 'tag') {
|
|
@@ -333,7 +298,6 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
333
298
|
userRoleState,
|
|
334
299
|
addressState,
|
|
335
300
|
tagState,
|
|
336
|
-
userGroupsState,
|
|
337
301
|
});
|
|
338
302
|
}
|
|
339
303
|
return getTaskListGroupedByDueDate({
|
|
@@ -343,7 +307,6 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
343
307
|
userRoleState,
|
|
344
308
|
addressState,
|
|
345
309
|
tagState,
|
|
346
|
-
userGroupsState,
|
|
347
310
|
});
|
|
348
311
|
};
|
|
349
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) => {
|
|
@@ -357,7 +320,6 @@ export const getAllTasks = createSelector((state) => state.taskListState, (state
|
|
|
357
320
|
taskGroupState,
|
|
358
321
|
taskGroupViewState,
|
|
359
322
|
tagState,
|
|
360
|
-
userGroupsState,
|
|
361
323
|
});
|
|
362
324
|
const fetchStateVariables = [
|
|
363
325
|
taskListState,
|
|
@@ -370,7 +332,6 @@ export const getAllTasks = createSelector((state) => state.taskListState, (state
|
|
|
370
332
|
const { fetchState, error } = reduceAnyFetchState(fetchStateVariables);
|
|
371
333
|
const taskGroupTemplates = getTaskGroupTemplateByIds(taskGroupTemplateState, taskGroupTemplateViewState.taskGroupTemplateIds);
|
|
372
334
|
return {
|
|
373
|
-
currentTab: taskListState.currentTab,
|
|
374
335
|
uiState: taskListState.uiState,
|
|
375
336
|
filters: taskListState.filters,
|
|
376
337
|
taskGroupTemplates,
|