@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.
Files changed (112) hide show
  1. package/lib/commonStateTypes/fiscalYearHelpers/formatZeniDateFY.d.ts +1 -0
  2. package/lib/commonStateTypes/fiscalYearHelpers/formatZeniDateFY.js +2 -1
  3. package/lib/entity/file/fileState.d.ts +4 -4
  4. package/lib/entity/file/fileState.js +4 -0
  5. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  6. package/lib/entity/snackbar/snackbarTypes.js +4 -0
  7. package/lib/entity/task/taskPayload.d.ts +3 -0
  8. package/lib/entity/task/taskPayload.js +5 -0
  9. package/lib/entity/task/taskState.d.ts +3 -0
  10. package/lib/entity/tenant/clearAllEpic.d.ts +4 -2
  11. package/lib/entity/tenant/clearAllEpic.js +4 -0
  12. package/lib/entity/transaction/stateTypes/attachment.d.ts +2 -2
  13. package/lib/epic.d.ts +7 -1
  14. package/lib/epic.js +7 -1
  15. package/lib/esm/commonStateTypes/fiscalYearHelpers/formatZeniDateFY.js +1 -0
  16. package/lib/esm/entity/file/fileState.js +4 -0
  17. package/lib/esm/entity/snackbar/snackbarTypes.js +4 -0
  18. package/lib/esm/entity/task/taskPayload.js +5 -0
  19. package/lib/esm/entity/tenant/clearAllEpic.js +4 -0
  20. package/lib/esm/epic.js +7 -1
  21. package/lib/esm/index.js +10 -4
  22. package/lib/esm/init.js +21 -3
  23. package/lib/esm/reducer.js +6 -0
  24. package/lib/esm/view/taskManager/cannedResponsesView/cannedResponses.js +1 -0
  25. package/lib/esm/view/taskManager/cannedResponsesView/cannedResponsesPayload.js +12 -0
  26. package/lib/esm/view/taskManager/cannedResponsesView/cannedResponsesReducer.js +64 -0
  27. package/lib/esm/view/taskManager/cannedResponsesView/cannedResponsesSelector.js +3 -0
  28. package/lib/esm/view/taskManager/cannedResponsesView/epics/deleteCannedResponseEpic.js +17 -0
  29. package/lib/esm/view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic.js +21 -0
  30. package/lib/esm/view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic.js +29 -0
  31. package/lib/esm/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +3 -0
  32. package/lib/esm/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +5 -0
  33. package/lib/esm/view/taskManager/taskDetailView/epics/initializeTaskToLocalStoreEpic.js +1 -0
  34. package/lib/esm/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +1 -0
  35. package/lib/esm/view/taskManager/taskDetailView/epics/snoozeTaskEpic.js +66 -0
  36. package/lib/esm/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +57 -0
  37. package/lib/esm/view/taskManager/taskDetailView/taskDetail.js +4 -0
  38. package/lib/esm/view/taskManager/taskDetailView/taskDetailReducer.js +60 -7
  39. package/lib/esm/view/taskManager/taskDetailView/taskDetailSelector.js +12 -0
  40. package/lib/esm/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +56 -21
  41. package/lib/esm/view/taskManager/taskListView/epics/dragNDropTasksEpic.js +1 -0
  42. package/lib/esm/view/taskManager/taskListView/epics/fetchTaskListEpic.js +13 -4
  43. package/lib/esm/view/taskManager/taskListView/epics/updateTaskFromListViewEpic.js +3 -2
  44. package/lib/esm/view/taskManager/taskListView/taskList.js +7 -0
  45. package/lib/esm/view/taskManager/taskListView/taskListReducer.js +106 -12
  46. package/lib/esm/view/taskManager/taskListView/taskListSelector.js +48 -39
  47. package/lib/esm/view/zeniOAuthView/epics/approveOAuthConsentEpic.js +64 -0
  48. package/lib/esm/view/zeniOAuthView/zeniOAuthParamsParser.js +41 -0
  49. package/lib/esm/view/zeniOAuthView/zeniOAuthReducer.js +49 -0
  50. package/lib/esm/view/zeniOAuthView/zeniOAuthSelector.js +3 -0
  51. package/lib/esm/view/zeniOAuthView/zeniOAuthState.js +1 -0
  52. package/lib/index.d.ts +12 -4
  53. package/lib/index.js +28 -5
  54. package/lib/init.d.ts +4 -2
  55. package/lib/init.js +21 -3
  56. package/lib/reducer.d.ts +6 -0
  57. package/lib/reducer.js +6 -0
  58. package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
  59. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  60. package/lib/view/taskManager/cannedResponsesView/cannedResponses.d.ts +19 -0
  61. package/lib/view/taskManager/cannedResponsesView/cannedResponses.js +2 -0
  62. package/lib/view/taskManager/cannedResponsesView/cannedResponsesPayload.d.ts +21 -0
  63. package/lib/view/taskManager/cannedResponsesView/cannedResponsesPayload.js +15 -0
  64. package/lib/view/taskManager/cannedResponsesView/cannedResponsesReducer.d.ts +30 -0
  65. package/lib/view/taskManager/cannedResponsesView/cannedResponsesReducer.js +68 -0
  66. package/lib/view/taskManager/cannedResponsesView/cannedResponsesSelector.d.ts +3 -0
  67. package/lib/view/taskManager/cannedResponsesView/cannedResponsesSelector.js +6 -0
  68. package/lib/view/taskManager/cannedResponsesView/epics/deleteCannedResponseEpic.d.ts +7 -0
  69. package/lib/view/taskManager/cannedResponsesView/epics/deleteCannedResponseEpic.js +21 -0
  70. package/lib/view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic.d.ts +7 -0
  71. package/lib/view/taskManager/cannedResponsesView/epics/fetchCannedResponsesEpic.js +25 -0
  72. package/lib/view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic.d.ts +7 -0
  73. package/lib/view/taskManager/cannedResponsesView/epics/saveCannedResponseEpic.js +33 -0
  74. package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.d.ts +2 -1
  75. package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +3 -0
  76. package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.d.ts +2 -1
  77. package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +5 -0
  78. package/lib/view/taskManager/taskDetailView/epics/initializeTaskToLocalStoreEpic.js +1 -0
  79. package/lib/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +1 -0
  80. package/lib/view/taskManager/taskDetailView/epics/snoozeTaskEpic.d.ts +9 -0
  81. package/lib/view/taskManager/taskDetailView/epics/snoozeTaskEpic.js +70 -0
  82. package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.d.ts +9 -0
  83. package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +61 -0
  84. package/lib/view/taskManager/taskDetailView/taskDetail.d.ts +2 -0
  85. package/lib/view/taskManager/taskDetailView/taskDetail.js +4 -0
  86. package/lib/view/taskManager/taskDetailView/taskDetailReducer.d.ts +10 -1
  87. package/lib/view/taskManager/taskDetailView/taskDetailReducer.js +61 -8
  88. package/lib/view/taskManager/taskDetailView/taskDetailSelector.d.ts +5 -0
  89. package/lib/view/taskManager/taskDetailView/taskDetailSelector.js +12 -0
  90. package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.d.ts +6 -7
  91. package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +56 -22
  92. package/lib/view/taskManager/taskListView/epics/dragNDropTasksEpic.js +1 -0
  93. package/lib/view/taskManager/taskListView/epics/fetchTaskListEpic.js +13 -4
  94. package/lib/view/taskManager/taskListView/epics/updateTaskFromListViewEpic.js +3 -2
  95. package/lib/view/taskManager/taskListView/taskList.d.ts +14 -1
  96. package/lib/view/taskManager/taskListView/taskList.js +8 -1
  97. package/lib/view/taskManager/taskListView/taskListPayload.d.ts +3 -0
  98. package/lib/view/taskManager/taskListView/taskListReducer.d.ts +9 -6
  99. package/lib/view/taskManager/taskListView/taskListReducer.js +107 -13
  100. package/lib/view/taskManager/taskListView/taskListSelector.d.ts +9 -3
  101. package/lib/view/taskManager/taskListView/taskListSelector.js +48 -39
  102. package/lib/view/zeniOAuthView/epics/approveOAuthConsentEpic.d.ts +27 -0
  103. package/lib/view/zeniOAuthView/epics/approveOAuthConsentEpic.js +68 -0
  104. package/lib/view/zeniOAuthView/zeniOAuthParamsParser.d.ts +16 -0
  105. package/lib/view/zeniOAuthView/zeniOAuthParamsParser.js +44 -0
  106. package/lib/view/zeniOAuthView/zeniOAuthReducer.d.ts +29 -0
  107. package/lib/view/zeniOAuthView/zeniOAuthReducer.js +53 -0
  108. package/lib/view/zeniOAuthView/zeniOAuthSelector.d.ts +5 -0
  109. package/lib/view/zeniOAuthView/zeniOAuthSelector.js +9 -0
  110. package/lib/view/zeniOAuthView/zeniOAuthState.d.ts +4 -0
  111. package/lib/view/zeniOAuthView/zeniOAuthState.js +2 -0
  112. 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
- const { taskIds, taskIdsGroupedByPriority, taskIdsByGroupIds, taskIdsGroupedByStatus, taskIdsByAssignees, taskIdsByDueDate, taskIdsByTags, } = getGroupedTaskIds(data);
97
- draft.taskIds = taskIds;
98
- draft.taskIdsByGroupsIds = taskIdsByGroupIds;
99
- draft.taskIdsByPriority = taskIdsGroupedByPriority;
100
- draft.taskIdsByStatus = taskIdsGroupedByStatus;
101
- draft.taskIdsByAssignees = taskIdsByAssignees;
102
- draft.taskIdsByDueDate = taskIdsByDueDate;
103
- draft.taskIdsByTags = taskIdsByTags;
112
+ // Group live tasks
113
+ const liveGrouped = getGroupedTaskIds(data);
114
+ draft.byTab.live = toTabData(liveGrouped);
115
+ // Group other tabs if provided
116
+ if (archived != null) {
117
+ draft.byTab.archived = toTabData(getGroupedTaskIds(archived));
118
+ }
119
+ if (deleted != null) {
120
+ draft.byTab.deleted = toTabData(getGroupedTaskIds(deleted));
121
+ }
122
+ if (snoozed != null) {
123
+ draft.byTab.snoozed = toTabData(getGroupedTaskIds(snoozed));
124
+ }
125
+ // Copy active tab data to top-level fields
126
+ const activeTabData = draft.byTab[draft.currentTab];
127
+ copyTabDataToTopLevel(draft, activeTabData);
128
+ },
129
+ updateTaskListTab(draft, action) {
130
+ draft.currentTab = action.payload;
131
+ const activeTabData = draft.byTab[action.payload];
132
+ copyTabDataToTopLevel(draft, activeTabData);
104
133
  },
105
134
  initiateTaskListLocalData(draft, action) {
106
135
  const { taskGroupById } = action.payload;
@@ -188,10 +217,13 @@ const taskList = (0, toolkit_1.createSlice)({
188
217
  },
189
218
  },
190
219
  updateTasksListOnBulkUpdateTasksSuccess(draft, action) {
191
- const { taskIds, groupId } = action.payload;
220
+ const { taskIds, groupId, removeFromList } = action.payload;
192
221
  draft.updateTasksFetchState.fetchState = 'Completed';
193
222
  draft.updateTasksFetchState.error = undefined;
194
- if (groupId != null) {
223
+ if (removeFromList) {
224
+ removeTaskIds(draft, taskIds);
225
+ }
226
+ else if (groupId != null) {
195
227
  const { groupByKey } = draft.uiState;
196
228
  if (groupByKey === 'groupName') {
197
229
  Object.keys(draft.taskIdsByGroupsIds).forEach((gId) => {
@@ -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
- return { ...task, assigneeUsers };
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
- if (isDefaultFilters(taskListState) === false) {
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
- if (isDefaultFilters(taskListState) === false) {
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
- if (isDefaultFilters(taskListState) === false) {
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
- if (isDefaultFilters(taskListState) === false) {
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
- if (isDefaultFilters(taskListState) === false) {
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
- if (isDefaultFilters(taskListState) === false) {
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;