@zeniai/client-epic-state 5.0.32 → 5.0.33
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/commonStateTypes/fiscalYearHelpers/formatZeniDateFY.d.ts +1 -0
- package/lib/commonStateTypes/fiscalYearHelpers/formatZeniDateFY.js +2 -1
- 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 +4 -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/tenant/clearAllEpic.d.ts +4 -2
- package/lib/entity/tenant/clearAllEpic.js +4 -0
- package/lib/entity/transaction/stateTypes/attachment.d.ts +2 -2
- package/lib/epic.d.ts +7 -1
- package/lib/epic.js +7 -1
- package/lib/esm/commonStateTypes/fiscalYearHelpers/formatZeniDateFY.js +1 -0
- package/lib/esm/entity/file/fileState.js +4 -0
- package/lib/esm/entity/snackbar/snackbarTypes.js +4 -0
- package/lib/esm/entity/task/taskPayload.js +5 -0
- package/lib/esm/entity/tenant/clearAllEpic.js +4 -0
- package/lib/esm/epic.js +7 -1
- package/lib/esm/index.js +10 -4
- package/lib/esm/init.js +21 -3
- package/lib/esm/reducer.js +6 -0
- package/lib/esm/view/taskManager/cannedResponsesView/cannedResponses.js +1 -0
- package/lib/esm/view/taskManager/cannedResponsesView/cannedResponsesPayload.js +12 -0
- package/lib/esm/view/taskManager/cannedResponsesView/cannedResponsesReducer.js +64 -0
- package/lib/esm/view/taskManager/cannedResponsesView/cannedResponsesSelector.js +3 -0
- package/lib/esm/view/taskManager/cannedResponsesView/epics/deleteCannedResponseEpic.js +17 -0
- package/lib/esm/view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic.js +21 -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 +66 -0
- package/lib/esm/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +57 -0
- package/lib/esm/view/taskManager/taskDetailView/taskDetail.js +4 -0
- package/lib/esm/view/taskManager/taskDetailView/taskDetailReducer.js +60 -7
- package/lib/esm/view/taskManager/taskDetailView/taskDetailSelector.js +12 -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 -4
- 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 +106 -12
- package/lib/esm/view/taskManager/taskListView/taskListSelector.js +48 -39
- package/lib/esm/view/zeniOAuthView/epics/approveOAuthConsentEpic.js +64 -0
- package/lib/esm/view/zeniOAuthView/zeniOAuthParamsParser.js +41 -0
- package/lib/esm/view/zeniOAuthView/zeniOAuthReducer.js +49 -0
- package/lib/esm/view/zeniOAuthView/zeniOAuthSelector.js +3 -0
- package/lib/esm/view/zeniOAuthView/zeniOAuthState.js +1 -0
- package/lib/index.d.ts +12 -4
- package/lib/index.js +28 -5
- package/lib/init.d.ts +4 -2
- package/lib/init.js +21 -3
- package/lib/reducer.d.ts +6 -0
- package/lib/reducer.js +6 -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 +19 -0
- package/lib/view/taskManager/cannedResponsesView/cannedResponses.js +2 -0
- package/lib/view/taskManager/cannedResponsesView/cannedResponsesPayload.d.ts +21 -0
- package/lib/view/taskManager/cannedResponsesView/cannedResponsesPayload.js +15 -0
- package/lib/view/taskManager/cannedResponsesView/cannedResponsesReducer.d.ts +30 -0
- package/lib/view/taskManager/cannedResponsesView/cannedResponsesReducer.js +68 -0
- package/lib/view/taskManager/cannedResponsesView/cannedResponsesSelector.d.ts +3 -0
- package/lib/view/taskManager/cannedResponsesView/cannedResponsesSelector.js +6 -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 +25 -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 +70 -0
- package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.d.ts +9 -0
- package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +61 -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 +61 -8
- package/lib/view/taskManager/taskDetailView/taskDetailSelector.d.ts +5 -0
- package/lib/view/taskManager/taskDetailView/taskDetailSelector.js +12 -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 -4
- 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 +9 -6
- package/lib/view/taskManager/taskListView/taskListReducer.js +107 -13
- package/lib/view/taskManager/taskListView/taskListSelector.d.ts +9 -3
- package/lib/view/taskManager/taskListView/taskListSelector.js +48 -39
- package/lib/view/zeniOAuthView/epics/approveOAuthConsentEpic.d.ts +27 -0
- package/lib/view/zeniOAuthView/epics/approveOAuthConsentEpic.js +68 -0
- package/lib/view/zeniOAuthView/zeniOAuthParamsParser.d.ts +16 -0
- package/lib/view/zeniOAuthView/zeniOAuthParamsParser.js +44 -0
- package/lib/view/zeniOAuthView/zeniOAuthReducer.d.ts +29 -0
- package/lib/view/zeniOAuthView/zeniOAuthReducer.js +53 -0
- package/lib/view/zeniOAuthView/zeniOAuthSelector.d.ts +5 -0
- package/lib/view/zeniOAuthView/zeniOAuthSelector.js +9 -0
- package/lib/view/zeniOAuthView/zeniOAuthState.d.ts +4 -0
- package/lib/view/zeniOAuthView/zeniOAuthState.js +2 -0
- package/package.json +1 -1
|
@@ -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) => {
|
|
@@ -283,6 +315,7 @@ const taskList = (0, toolkit_1.createSlice)({
|
|
|
283
315
|
newTaskGroupName: '',
|
|
284
316
|
selectedTaskIds: [],
|
|
285
317
|
};
|
|
318
|
+
syncTopLevelToActiveTab(draft);
|
|
286
319
|
},
|
|
287
320
|
updateTasksListOnBulkUpdateTasksFailure(draft, action) {
|
|
288
321
|
draft.updateTasksFetchState.fetchState = 'Error';
|
|
@@ -302,6 +335,7 @@ const taskList = (0, toolkit_1.createSlice)({
|
|
|
302
335
|
}
|
|
303
336
|
delete draft.taskIdsByGroupsIds[taskGroupId];
|
|
304
337
|
delete draft.localData.existingTaskGroupNamesByGroupId[taskGroupId];
|
|
338
|
+
syncTopLevelToActiveTab(draft);
|
|
305
339
|
},
|
|
306
340
|
updateTaskListOnNewTaskCreationSuccess(draft, action) {
|
|
307
341
|
const { task, taskGroupId, currentTaskState } = action.payload;
|
|
@@ -336,6 +370,7 @@ const taskList = (0, toolkit_1.createSlice)({
|
|
|
336
370
|
doUpdateTaskList(draft, task, taskGroupId);
|
|
337
371
|
}
|
|
338
372
|
});
|
|
373
|
+
syncTopLevelToActiveTab(draft);
|
|
339
374
|
},
|
|
340
375
|
updateTaskListOnTaskGroupNameUpdate(draft, action) {
|
|
341
376
|
const { taskGroupName, taskGroupId } = action.payload;
|
|
@@ -399,6 +434,7 @@ const taskList = (0, toolkit_1.createSlice)({
|
|
|
399
434
|
};
|
|
400
435
|
}
|
|
401
436
|
}
|
|
437
|
+
syncTopLevelToActiveTab(draft);
|
|
402
438
|
},
|
|
403
439
|
updateTasksListOnUpdateTaskSuccess(draft) {
|
|
404
440
|
draft.updateTasksFetchState.fetchState = 'Completed';
|
|
@@ -408,12 +444,15 @@ const taskList = (0, toolkit_1.createSlice)({
|
|
|
408
444
|
draft.updateTasksFetchState.fetchState = 'Error';
|
|
409
445
|
draft.updateTasksFetchState.error = action.payload.error;
|
|
410
446
|
},
|
|
447
|
+
removeTaskFromList(draft, action) {
|
|
448
|
+
removeTaskIds(draft, [action.payload]);
|
|
449
|
+
},
|
|
411
450
|
clearTaskList(draft) {
|
|
412
451
|
Object.assign(draft, exports.initialState);
|
|
413
452
|
},
|
|
414
453
|
},
|
|
415
454
|
});
|
|
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;
|
|
455
|
+
_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
456
|
exports.default = taskList.reducer;
|
|
418
457
|
/**
|
|
419
458
|
* helpers
|
|
@@ -492,6 +531,61 @@ const getTagsGroupKey = (tags) => {
|
|
|
492
531
|
tagIds.sort();
|
|
493
532
|
return tagIds.join(',');
|
|
494
533
|
};
|
|
534
|
+
const toTabData = (grouped) => ({
|
|
535
|
+
taskIds: grouped.taskIds,
|
|
536
|
+
taskIdsByAssignees: grouped.taskIdsByAssignees,
|
|
537
|
+
taskIdsByDueDate: grouped.taskIdsByDueDate,
|
|
538
|
+
taskIdsByGroupsIds: grouped.taskIdsByGroupIds,
|
|
539
|
+
taskIdsByPriority: grouped.taskIdsGroupedByPriority,
|
|
540
|
+
taskIdsByStatus: grouped.taskIdsGroupedByStatus,
|
|
541
|
+
taskIdsByTags: grouped.taskIdsByTags,
|
|
542
|
+
});
|
|
543
|
+
const syncTopLevelToActiveTab = (draft) => {
|
|
544
|
+
const tabData = draft.byTab[draft.currentTab];
|
|
545
|
+
tabData.taskIds = draft.taskIds;
|
|
546
|
+
tabData.taskIdsByGroupsIds = draft.taskIdsByGroupsIds;
|
|
547
|
+
tabData.taskIdsByPriority = draft.taskIdsByPriority;
|
|
548
|
+
tabData.taskIdsByStatus = draft.taskIdsByStatus;
|
|
549
|
+
tabData.taskIdsByAssignees = draft.taskIdsByAssignees;
|
|
550
|
+
tabData.taskIdsByDueDate = draft.taskIdsByDueDate;
|
|
551
|
+
tabData.taskIdsByTags = draft.taskIdsByTags;
|
|
552
|
+
};
|
|
553
|
+
const copyTabDataToTopLevel = (draft, tabData) => {
|
|
554
|
+
draft.taskIds = tabData.taskIds;
|
|
555
|
+
draft.taskIdsByGroupsIds = tabData.taskIdsByGroupsIds;
|
|
556
|
+
draft.taskIdsByPriority = tabData.taskIdsByPriority;
|
|
557
|
+
draft.taskIdsByStatus = tabData.taskIdsByStatus;
|
|
558
|
+
draft.taskIdsByAssignees = tabData.taskIdsByAssignees;
|
|
559
|
+
draft.taskIdsByDueDate = tabData.taskIdsByDueDate;
|
|
560
|
+
draft.taskIdsByTags = tabData.taskIdsByTags;
|
|
561
|
+
};
|
|
562
|
+
const removeIdsFromTabData = (tabData, taskIds) => {
|
|
563
|
+
const removedSet = new Set(taskIds);
|
|
564
|
+
const isRemoved = (id) => removedSet.has(id);
|
|
565
|
+
tabData.taskIds = tabData.taskIds.filter((id) => !isRemoved(id));
|
|
566
|
+
Object.keys(tabData.taskIdsByGroupsIds).forEach((gId) => {
|
|
567
|
+
tabData.taskIdsByGroupsIds[gId] = tabData.taskIdsByGroupsIds[gId].filter((id) => !isRemoved(id));
|
|
568
|
+
});
|
|
569
|
+
Object.keys(tabData.taskIdsByPriority).forEach((key) => {
|
|
570
|
+
tabData.taskIdsByPriority[key] = tabData.taskIdsByPriority[key].filter((id) => !isRemoved(id));
|
|
571
|
+
});
|
|
572
|
+
Object.keys(tabData.taskIdsByStatus).forEach((key) => {
|
|
573
|
+
tabData.taskIdsByStatus[key] = tabData.taskIdsByStatus[key].filter((id) => !isRemoved(id));
|
|
574
|
+
});
|
|
575
|
+
Object.keys(tabData.taskIdsByDueDate).forEach((key) => {
|
|
576
|
+
tabData.taskIdsByDueDate[key] = tabData.taskIdsByDueDate[key].filter((id) => !isRemoved(id));
|
|
577
|
+
});
|
|
578
|
+
Object.keys(tabData.taskIdsByAssignees).forEach((key) => {
|
|
579
|
+
tabData.taskIdsByAssignees[key] = tabData.taskIdsByAssignees[key].filter((id) => !isRemoved(id));
|
|
580
|
+
});
|
|
581
|
+
Object.keys(tabData.taskIdsByTags).forEach((key) => {
|
|
582
|
+
tabData.taskIdsByTags[key] = tabData.taskIdsByTags[key].filter((id) => !isRemoved(id));
|
|
583
|
+
});
|
|
584
|
+
};
|
|
585
|
+
const removeTaskIds = (draft, taskIds) => {
|
|
586
|
+
removeIdsFromTabData(draft, taskIds);
|
|
587
|
+
removeIdsFromTabData(draft.byTab[draft.currentTab], taskIds);
|
|
588
|
+
};
|
|
495
589
|
const getGroupedTaskIds = (tasks) => {
|
|
496
590
|
const taskIds = [];
|
|
497
591
|
const taskIdsByGroupIds = {};
|
|
@@ -5,14 +5,16 @@ import { TagState } from '../../../entity/tag/tagState';
|
|
|
5
5
|
import { Task, TaskState } from '../../../entity/task/taskState';
|
|
6
6
|
import { TaskGroupTemplate } from '../../../entity/taskGroupTemplate/taskGroupTemplateState';
|
|
7
7
|
import { UserState } from '../../../entity/user/userState';
|
|
8
|
+
import { UserGroupsState } from '../../../entity/userGroups/userGroupsState';
|
|
8
9
|
import { UserRoleState } from '../../../entity/userRole/userRoleState';
|
|
9
10
|
import { RootState } from '../../../reducer';
|
|
10
11
|
import { UserAndRole } from '../../companyView/types/userAndRole';
|
|
11
12
|
import { UserGroupListSelectorView } from '../../userGroupListView/userGroupListViewSelector';
|
|
12
13
|
import { UserListSelectorView } from '../../userListView/userListViewSelector';
|
|
13
|
-
import { TaskListFilters, TaskListLocalData, TaskListState, TaskListUIState } from './taskList';
|
|
14
|
+
import { TaskListFilters, TaskListLocalData, TaskListState, TaskListTab, TaskListUIState } from './taskList';
|
|
14
15
|
export interface TaskWithUserDetails extends Task {
|
|
15
16
|
assigneeUsers: UserAndRole[];
|
|
17
|
+
firstAssigneeSortName: string;
|
|
16
18
|
}
|
|
17
19
|
export interface TaskGroupWithTasksList {
|
|
18
20
|
groupName: string;
|
|
@@ -21,8 +23,10 @@ export interface TaskGroupWithTasksList {
|
|
|
21
23
|
tasks: TaskWithUserDetails[];
|
|
22
24
|
}
|
|
23
25
|
export interface TaskListSelectorView extends SelectorView {
|
|
26
|
+
currentTab: TaskListTab;
|
|
24
27
|
filters: TaskListFilters;
|
|
25
28
|
localData: TaskListLocalData;
|
|
29
|
+
tabCounts: Record<TaskListTab, number>;
|
|
26
30
|
taskCreationFromTemplateStatus: FetchStateAndError;
|
|
27
31
|
taskGroupCreationStatus: FetchStateAndError;
|
|
28
32
|
taskGroupDeleteStatus: FetchStateAndError;
|
|
@@ -34,11 +38,12 @@ export interface TaskListSelectorView extends SelectorView {
|
|
|
34
38
|
userGroupList: UserGroupListSelectorView;
|
|
35
39
|
userList: UserListSelectorView;
|
|
36
40
|
}
|
|
37
|
-
export declare const getTaskListGroupedByAssignees: ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }: {
|
|
41
|
+
export declare const getTaskListGroupedByAssignees: ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }: {
|
|
38
42
|
addressState: AddressState;
|
|
39
43
|
tagState: TagState;
|
|
40
44
|
taskListState: TaskListState;
|
|
41
45
|
taskState: TaskState;
|
|
46
|
+
userGroupsState: UserGroupsState;
|
|
42
47
|
userRoleState: UserRoleState;
|
|
43
48
|
userState: UserState;
|
|
44
49
|
}) => {
|
|
@@ -47,11 +52,12 @@ export declare const getTaskListGroupedByAssignees: ({ taskListState, taskState,
|
|
|
47
52
|
isDefault: boolean;
|
|
48
53
|
tasks: TaskWithUserDetails[];
|
|
49
54
|
}[];
|
|
50
|
-
export declare const getTaskListGroupedByPriority: ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }: {
|
|
55
|
+
export declare const getTaskListGroupedByPriority: ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }: {
|
|
51
56
|
addressState: AddressState;
|
|
52
57
|
tagState: TagState;
|
|
53
58
|
taskListState: TaskListState;
|
|
54
59
|
taskState: TaskState;
|
|
60
|
+
userGroupsState: UserGroupsState;
|
|
55
61
|
userRoleState: UserRoleState;
|
|
56
62
|
userState: UserState;
|
|
57
63
|
}) => {
|
|
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.getAllTasks = exports.getTaskListGroupedByPriority = exports.getTaskListGroupedByAssignees = void 0;
|
|
7
7
|
const toolkit_1 = require("@reduxjs/toolkit");
|
|
8
|
-
const isEqual_1 = __importDefault(require("lodash/isEqual"));
|
|
9
8
|
const orderBy_1 = __importDefault(require("lodash/orderBy"));
|
|
10
9
|
const sortOrderPayload_1 = require("../../../commonPayloadTypes/sortOrderPayload");
|
|
11
10
|
const reduceFetchState_1 = require("../../../commonStateTypes/reduceFetchState");
|
|
@@ -21,11 +20,6 @@ const userGroupListViewSelector_1 = require("../../userGroupListView/userGroupLi
|
|
|
21
20
|
const userListViewSelector_1 = require("../../userListView/userListViewSelector");
|
|
22
21
|
const taskDetailSelector_1 = require("../taskDetailView/taskDetailSelector");
|
|
23
22
|
const taskList_1 = require("./taskList");
|
|
24
|
-
const taskListReducer_1 = require("./taskListReducer");
|
|
25
|
-
const isDefaultFilters = (taskListState) => {
|
|
26
|
-
return ((0, isEqual_1.default)(taskListState.filters, taskListReducer_1.initialState.filters) &&
|
|
27
|
-
taskListReducer_1.initialState.uiState.searchText === taskListState.uiState.searchText);
|
|
28
|
-
};
|
|
29
23
|
const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
|
|
30
24
|
const tasksInOrder = (0, orderBy_1.default)(tasksList, (task) => {
|
|
31
25
|
const tagsByIds = (0, tagSelector_1.getTagsByIds)(tagState, task.tagIds);
|
|
@@ -40,8 +34,12 @@ const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
|
|
|
40
34
|
return task.status.name;
|
|
41
35
|
case 'priority':
|
|
42
36
|
return taskState_1.ALL_PRIORITY_CODE.indexOf(task.priority.code);
|
|
37
|
+
case 'assignee':
|
|
38
|
+
return task.firstAssigneeSortName;
|
|
43
39
|
case 'timeSpent':
|
|
44
40
|
return task.timeSpent;
|
|
41
|
+
case 'visibility':
|
|
42
|
+
return task.isPrivate === true ? 1 : 0;
|
|
45
43
|
case 'name':
|
|
46
44
|
default:
|
|
47
45
|
return task.name.toLowerCase();
|
|
@@ -49,7 +47,7 @@ const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
|
|
|
49
47
|
}, sortOrder);
|
|
50
48
|
return tasksInOrder;
|
|
51
49
|
};
|
|
52
|
-
const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRoleState, addressState, taskIds, tagState, }) => {
|
|
50
|
+
const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRoleState, addressState, taskIds, tagState, userGroupsState, }) => {
|
|
53
51
|
const { sortKey, searchText } = taskListState.uiState;
|
|
54
52
|
const sortOrder = (0, sortOrderPayload_1.getSortOrder)(taskListState.uiState.sortOrder);
|
|
55
53
|
const tasks = taskIds
|
|
@@ -59,7 +57,15 @@ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRole
|
|
|
59
57
|
const assigneeUsers = task.assignees
|
|
60
58
|
.map((userId) => (0, userAndRole_1.getUserAndUserRole)(userState, userRoleState, addressState, userId))
|
|
61
59
|
.filter((value) => value != null);
|
|
62
|
-
|
|
60
|
+
const firstUser = assigneeUsers[0]?.user;
|
|
61
|
+
const firstUserName = (firstUser != null ? (0, userSelector_1.getUserName)(firstUser) : '') ||
|
|
62
|
+
firstUser?.email ||
|
|
63
|
+
'';
|
|
64
|
+
const firstGroupName = task.groupAssignees
|
|
65
|
+
.map((gId) => userGroupsState.userGroupByUserGroupId[gId]?.name)
|
|
66
|
+
.find((name) => name != null && name !== '');
|
|
67
|
+
const firstAssigneeSortName = (firstUserName !== '' ? firstUserName : (firstGroupName ?? '')).toLowerCase();
|
|
68
|
+
return { ...task, assigneeUsers, firstAssigneeSortName };
|
|
63
69
|
}
|
|
64
70
|
return undefined;
|
|
65
71
|
})
|
|
@@ -68,7 +74,7 @@ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRole
|
|
|
68
74
|
const sortedTaskList = sortTasksList(tagState, filteredTaskList, sortKey, sortOrder);
|
|
69
75
|
return sortedTaskList;
|
|
70
76
|
};
|
|
71
|
-
const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupState, taskGroupViewState, userState, userRoleState, addressState, tagState, }) => {
|
|
77
|
+
const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupState, taskGroupViewState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
72
78
|
const { taskGroupsIds } = taskGroupViewState;
|
|
73
79
|
const taskGroupsWithTasksList = taskGroupsIds
|
|
74
80
|
.map((taskGroupId) => {
|
|
@@ -82,6 +88,7 @@ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupStat
|
|
|
82
88
|
addressState,
|
|
83
89
|
taskIds,
|
|
84
90
|
tagState,
|
|
91
|
+
userGroupsState,
|
|
85
92
|
});
|
|
86
93
|
if (taskGroup != null) {
|
|
87
94
|
return {
|
|
@@ -110,12 +117,9 @@ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupStat
|
|
|
110
117
|
if (defaultTaskGroup != null) {
|
|
111
118
|
sortedTaskGroupsWithTasksList.push(defaultTaskGroup);
|
|
112
119
|
}
|
|
113
|
-
|
|
114
|
-
return sortedTaskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
115
|
-
}
|
|
116
|
-
return sortedTaskGroupsWithTasksList;
|
|
120
|
+
return sortedTaskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
117
121
|
};
|
|
118
|
-
const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
122
|
+
const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
119
123
|
const assigneeGroups = Object.keys(taskListState.taskIdsByAssignees);
|
|
120
124
|
const taskGroupsWithTasksList = assigneeGroups.map((groupKey) => {
|
|
121
125
|
const taskIds = taskListState.taskIdsByAssignees[groupKey];
|
|
@@ -127,6 +131,7 @@ const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, us
|
|
|
127
131
|
addressState,
|
|
128
132
|
taskIds,
|
|
129
133
|
tagState,
|
|
134
|
+
userGroupsState,
|
|
130
135
|
});
|
|
131
136
|
const assigneeIds = groupKey.split(',');
|
|
132
137
|
const groupName = (0, userSelector_1.getUsersByUserIds)(userState, assigneeIds)
|
|
@@ -142,13 +147,10 @@ const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, us
|
|
|
142
147
|
tasks: tasksWithUserDetails,
|
|
143
148
|
};
|
|
144
149
|
});
|
|
145
|
-
|
|
146
|
-
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
147
|
-
}
|
|
148
|
-
return taskGroupsWithTasksList;
|
|
150
|
+
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
149
151
|
};
|
|
150
152
|
exports.getTaskListGroupedByAssignees = getTaskListGroupedByAssignees;
|
|
151
|
-
const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
153
|
+
const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
152
154
|
const taskGroupsWithTasksList = taskState_1.ALL_PRIORITY_CODE.map((groupKey) => {
|
|
153
155
|
const taskIds = taskListState.taskIdsByPriority[groupKey] ?? [];
|
|
154
156
|
const tasksWithUserDetails = getTasksWithUserDetails({
|
|
@@ -159,6 +161,7 @@ const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, use
|
|
|
159
161
|
addressState,
|
|
160
162
|
taskIds,
|
|
161
163
|
tagState,
|
|
164
|
+
userGroupsState,
|
|
162
165
|
});
|
|
163
166
|
return {
|
|
164
167
|
groupName: taskDetailSelector_1.allTaskPriority.find((priority) => priority.code === groupKey)?.name ??
|
|
@@ -168,13 +171,10 @@ const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, use
|
|
|
168
171
|
tasks: tasksWithUserDetails,
|
|
169
172
|
};
|
|
170
173
|
});
|
|
171
|
-
|
|
172
|
-
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
173
|
-
}
|
|
174
|
-
return taskGroupsWithTasksList;
|
|
174
|
+
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
175
175
|
};
|
|
176
176
|
exports.getTaskListGroupedByPriority = getTaskListGroupedByPriority;
|
|
177
|
-
const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
177
|
+
const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
178
178
|
const taskGroupsWithTasksList = taskState_1.ALL_TASK_STATUS_CODE.map((groupKey) => {
|
|
179
179
|
const taskIds = taskListState.taskIdsByStatus[groupKey] ?? [];
|
|
180
180
|
const tasksWithUserDetails = getTasksWithUserDetails({
|
|
@@ -185,6 +185,7 @@ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userR
|
|
|
185
185
|
addressState,
|
|
186
186
|
taskIds,
|
|
187
187
|
tagState,
|
|
188
|
+
userGroupsState,
|
|
188
189
|
});
|
|
189
190
|
return {
|
|
190
191
|
groupName: taskDetailSelector_1.allTaskStatus.find((taskStatus) => taskStatus.code === groupKey)
|
|
@@ -194,12 +195,9 @@ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userR
|
|
|
194
195
|
tasks: tasksWithUserDetails,
|
|
195
196
|
};
|
|
196
197
|
});
|
|
197
|
-
|
|
198
|
-
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
199
|
-
}
|
|
200
|
-
return taskGroupsWithTasksList;
|
|
198
|
+
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
201
199
|
};
|
|
202
|
-
const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
200
|
+
const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
203
201
|
const tagGroups = Object.keys(taskListState.taskIdsByTags);
|
|
204
202
|
const taskGroupsWithTasksList = tagGroups.map((groupKey) => {
|
|
205
203
|
const taskIds = taskListState.taskIdsByTags[groupKey];
|
|
@@ -211,6 +209,7 @@ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRol
|
|
|
211
209
|
addressState,
|
|
212
210
|
taskIds,
|
|
213
211
|
tagState,
|
|
212
|
+
userGroupsState,
|
|
214
213
|
});
|
|
215
214
|
const tagIds = groupKey.split(',');
|
|
216
215
|
const groupName = (0, tagSelector_1.getTagsByIds)(tagState, tagIds)
|
|
@@ -225,12 +224,9 @@ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRol
|
|
|
225
224
|
tasks: tasksWithUserDetails,
|
|
226
225
|
};
|
|
227
226
|
});
|
|
228
|
-
|
|
229
|
-
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
230
|
-
}
|
|
231
|
-
return taskGroupsWithTasksList;
|
|
227
|
+
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
232
228
|
};
|
|
233
|
-
const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
229
|
+
const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
234
230
|
const taskGroupsWithTasksList = taskList_1.DUE_DATE_GROUP_KEYS.map((groupKey) => {
|
|
235
231
|
const taskIds = taskListState.taskIdsByDueDate[groupKey];
|
|
236
232
|
const tasksWithUserDetails = getTasksWithUserDetails({
|
|
@@ -241,6 +237,7 @@ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, user
|
|
|
241
237
|
addressState,
|
|
242
238
|
taskIds,
|
|
243
239
|
tagState,
|
|
240
|
+
userGroupsState,
|
|
244
241
|
});
|
|
245
242
|
return {
|
|
246
243
|
groupName: groupKey,
|
|
@@ -249,12 +246,9 @@ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, user
|
|
|
249
246
|
tasks: tasksWithUserDetails,
|
|
250
247
|
};
|
|
251
248
|
});
|
|
252
|
-
|
|
253
|
-
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
254
|
-
}
|
|
255
|
-
return taskGroupsWithTasksList;
|
|
249
|
+
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
256
250
|
};
|
|
257
|
-
const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRoleState, addressState, taskGroupState, taskGroupViewState, tagState, }) => {
|
|
251
|
+
const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRoleState, addressState, taskGroupState, taskGroupViewState, tagState, userGroupsState, }) => {
|
|
258
252
|
const { groupByKey } = taskListState.uiState;
|
|
259
253
|
if (groupByKey === 'groupName') {
|
|
260
254
|
return getTaskListGroupedByGroupName({
|
|
@@ -266,6 +260,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
266
260
|
taskGroupState,
|
|
267
261
|
taskGroupViewState,
|
|
268
262
|
tagState,
|
|
263
|
+
userGroupsState,
|
|
269
264
|
});
|
|
270
265
|
}
|
|
271
266
|
if (groupByKey === 'assignee') {
|
|
@@ -276,6 +271,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
276
271
|
userRoleState,
|
|
277
272
|
addressState,
|
|
278
273
|
tagState,
|
|
274
|
+
userGroupsState,
|
|
279
275
|
});
|
|
280
276
|
}
|
|
281
277
|
if (groupByKey === 'priority') {
|
|
@@ -286,6 +282,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
286
282
|
userRoleState,
|
|
287
283
|
addressState,
|
|
288
284
|
tagState,
|
|
285
|
+
userGroupsState,
|
|
289
286
|
});
|
|
290
287
|
}
|
|
291
288
|
if (groupByKey === 'status') {
|
|
@@ -296,6 +293,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
296
293
|
userRoleState,
|
|
297
294
|
addressState,
|
|
298
295
|
tagState,
|
|
296
|
+
userGroupsState,
|
|
299
297
|
});
|
|
300
298
|
}
|
|
301
299
|
if (groupByKey === 'tag') {
|
|
@@ -306,6 +304,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
306
304
|
userRoleState,
|
|
307
305
|
addressState,
|
|
308
306
|
tagState,
|
|
307
|
+
userGroupsState,
|
|
309
308
|
});
|
|
310
309
|
}
|
|
311
310
|
return getTaskListGroupedByDueDate({
|
|
@@ -315,6 +314,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
315
314
|
userRoleState,
|
|
316
315
|
addressState,
|
|
317
316
|
tagState,
|
|
317
|
+
userGroupsState,
|
|
318
318
|
});
|
|
319
319
|
};
|
|
320
320
|
exports.getAllTasks = (0, toolkit_1.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) => {
|
|
@@ -328,6 +328,7 @@ exports.getAllTasks = (0, toolkit_1.createSelector)((state) => state.taskListSta
|
|
|
328
328
|
taskGroupState,
|
|
329
329
|
taskGroupViewState,
|
|
330
330
|
tagState,
|
|
331
|
+
userGroupsState,
|
|
331
332
|
});
|
|
332
333
|
const fetchStateVariables = [
|
|
333
334
|
taskListState,
|
|
@@ -339,7 +340,15 @@ exports.getAllTasks = (0, toolkit_1.createSelector)((state) => state.taskListSta
|
|
|
339
340
|
}
|
|
340
341
|
const { fetchState, error } = (0, reduceFetchState_1.reduceAnyFetchState)(fetchStateVariables);
|
|
341
342
|
const taskGroupTemplates = (0, taskGroupTemplateSelector_1.getTaskGroupTemplateByIds)(taskGroupTemplateState, taskGroupTemplateViewState.taskGroupTemplateIds);
|
|
343
|
+
const tabCounts = {
|
|
344
|
+
live: taskListState.byTab.live.taskIds.length,
|
|
345
|
+
archived: taskListState.byTab.archived.taskIds.length,
|
|
346
|
+
deleted: taskListState.byTab.deleted.taskIds.length,
|
|
347
|
+
snoozed: taskListState.byTab.snoozed.taskIds.length,
|
|
348
|
+
};
|
|
342
349
|
return {
|
|
350
|
+
currentTab: taskListState.currentTab,
|
|
351
|
+
tabCounts,
|
|
343
352
|
uiState: taskListState.uiState,
|
|
344
353
|
filters: taskListState.filters,
|
|
345
354
|
taskGroupTemplates,
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ActionsObservable, StateObservable } from 'redux-observable';
|
|
2
|
+
import { openSnackbar } from '../../../entity/snackbar/snackbarReducer';
|
|
3
|
+
import { RootState } from '../../../reducer';
|
|
4
|
+
import { ZeniAPI } from '../../../zeniAPI';
|
|
5
|
+
import { approveOAuthConsent, approveOAuthConsentFailure, approveOAuthConsentSuccess } from '../zeniOAuthReducer';
|
|
6
|
+
export type ActionType = ReturnType<typeof approveOAuthConsent> | ReturnType<typeof approveOAuthConsentSuccess> | ReturnType<typeof approveOAuthConsentFailure> | ReturnType<typeof openSnackbar>;
|
|
7
|
+
export declare const approveOAuthConsentEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => import("rxjs").Observable<{
|
|
8
|
+
payload: {
|
|
9
|
+
messageSection: import("../../..").SnackbarMessageSections;
|
|
10
|
+
messageText: import("../../..").SnackbarMessageSectionTexts;
|
|
11
|
+
type: import("../../..").SnackbarMessageType;
|
|
12
|
+
showStatusIcon?: boolean;
|
|
13
|
+
variables?: {
|
|
14
|
+
variableName: string;
|
|
15
|
+
variableValue: string;
|
|
16
|
+
}[];
|
|
17
|
+
};
|
|
18
|
+
type: "snackbar/openSnackbar";
|
|
19
|
+
} | {
|
|
20
|
+
payload: {
|
|
21
|
+
redirectUrl: string;
|
|
22
|
+
};
|
|
23
|
+
type: "zeniOAuthView/approveOAuthConsentSuccess";
|
|
24
|
+
} | {
|
|
25
|
+
payload: import("../../../responsePayload").ZeniAPIStatus<Record<string, unknown>>;
|
|
26
|
+
type: "zeniOAuthView/approveOAuthConsentFailure";
|
|
27
|
+
}>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.approveOAuthConsentEpic = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const operators_1 = require("rxjs/operators");
|
|
6
|
+
const snackbarReducer_1 = require("../../../entity/snackbar/snackbarReducer");
|
|
7
|
+
const responsePayload_1 = require("../../../responsePayload");
|
|
8
|
+
const zeniOAuthReducer_1 = require("../zeniOAuthReducer");
|
|
9
|
+
const failureSnackbar = (reason) => (0, snackbarReducer_1.openSnackbar)({
|
|
10
|
+
messageSection: 'oauth_consent_approve',
|
|
11
|
+
messageText: 'failed',
|
|
12
|
+
type: 'error',
|
|
13
|
+
variables: [{ variableName: '__reason__', variableValue: reason }],
|
|
14
|
+
});
|
|
15
|
+
const approveOAuthConsentEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(zeniOAuthReducer_1.approveOAuthConsent.match), (0, operators_1.switchMap)((action) => {
|
|
16
|
+
if (state$.value.zeniOAuthViewState.fetchState === 'In-Progress') {
|
|
17
|
+
return (0, rxjs_1.from)([]);
|
|
18
|
+
}
|
|
19
|
+
const { userId, zeniSessionId, tenantId, clientId, redirectUri, codeChallenge, codeChallengeMethod, state, responseType, } = action.payload;
|
|
20
|
+
const authHeaders = {
|
|
21
|
+
'zeni-user-id': userId,
|
|
22
|
+
'zeni-tenant-id': tenantId,
|
|
23
|
+
};
|
|
24
|
+
if (zeniSessionId != null) {
|
|
25
|
+
authHeaders['zeni-session-id'] = zeniSessionId;
|
|
26
|
+
}
|
|
27
|
+
return zeniAPI
|
|
28
|
+
.postJSON(`${zeniAPI.apiEndPoints.authMicroServiceBaseUrl}/oauth/authorize/approve`, {
|
|
29
|
+
client_id: clientId,
|
|
30
|
+
redirect_uri: redirectUri,
|
|
31
|
+
code_challenge: codeChallenge,
|
|
32
|
+
code_challenge_method: codeChallengeMethod,
|
|
33
|
+
state,
|
|
34
|
+
response_type: responseType,
|
|
35
|
+
tenant_id: tenantId,
|
|
36
|
+
}, authHeaders)
|
|
37
|
+
.pipe((0, operators_1.concatMap)((response) => (0, rxjs_1.from)(response.json()).pipe((0, operators_1.mergeMap)((responseJson) => {
|
|
38
|
+
if (!response.ok) {
|
|
39
|
+
const errBody = responseJson;
|
|
40
|
+
const errorMessage = errBody?.error ??
|
|
41
|
+
errBody?.message ??
|
|
42
|
+
errBody?.status?.message ??
|
|
43
|
+
`Authorization failed (${response.status})`;
|
|
44
|
+
return (0, rxjs_1.from)([
|
|
45
|
+
(0, zeniOAuthReducer_1.approveOAuthConsentFailure)((0, responsePayload_1.createZeniAPIStatus)(errorMessage)),
|
|
46
|
+
failureSnackbar(errorMessage),
|
|
47
|
+
]);
|
|
48
|
+
}
|
|
49
|
+
const body = responseJson;
|
|
50
|
+
const redirectUrl = body?.redirect_url ?? body?.data?.redirect_url;
|
|
51
|
+
if (redirectUrl == null || redirectUrl === '') {
|
|
52
|
+
const noRedirectMessage = 'No redirect URL returned from authorization server';
|
|
53
|
+
return (0, rxjs_1.from)([
|
|
54
|
+
(0, zeniOAuthReducer_1.approveOAuthConsentFailure)((0, responsePayload_1.createZeniAPIStatus)(noRedirectMessage)),
|
|
55
|
+
failureSnackbar(noRedirectMessage),
|
|
56
|
+
]);
|
|
57
|
+
}
|
|
58
|
+
return (0, rxjs_1.of)((0, zeniOAuthReducer_1.approveOAuthConsentSuccess)({ redirectUrl }));
|
|
59
|
+
}))), (0, operators_1.catchError)((error) => {
|
|
60
|
+
const errorDetail = error instanceof Error ? error.message : JSON.stringify(error);
|
|
61
|
+
const networkErrorMessage = 'OAuth approve request failed: ' + errorDetail;
|
|
62
|
+
return (0, rxjs_1.from)([
|
|
63
|
+
(0, zeniOAuthReducer_1.approveOAuthConsentFailure)((0, responsePayload_1.createZeniAPIStatus)(networkErrorMessage)),
|
|
64
|
+
failureSnackbar(networkErrorMessage),
|
|
65
|
+
]);
|
|
66
|
+
}));
|
|
67
|
+
}));
|
|
68
|
+
exports.approveOAuthConsentEpic = approveOAuthConsentEpic;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface OAuthParams {
|
|
2
|
+
clientId: string;
|
|
3
|
+
codeChallenge: string;
|
|
4
|
+
codeChallengeMethod: string;
|
|
5
|
+
redirectUri: string;
|
|
6
|
+
responseType: string;
|
|
7
|
+
state: string;
|
|
8
|
+
}
|
|
9
|
+
export type ParseOAuthParamsResult = {
|
|
10
|
+
error: null;
|
|
11
|
+
params: OAuthParams;
|
|
12
|
+
} | {
|
|
13
|
+
error: string;
|
|
14
|
+
params: null;
|
|
15
|
+
};
|
|
16
|
+
export declare function parseOAuthParams(search: string): ParseOAuthParamsResult;
|