@zeniai/client-epic-state 5.0.37 → 5.0.38
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 +5 -2
- package/lib/entity/tenant/clearAllEpic.js +6 -0
- package/lib/entity/tenant/epic/deleteConnectionEpic.d.ts +19 -0
- package/lib/entity/tenant/epic/deleteConnectionEpic.js +29 -0
- package/lib/entity/tenant/epic/saveAPIKeyConnectionEpic.d.ts +19 -0
- package/lib/entity/tenant/epic/saveAPIKeyConnectionEpic.js +31 -0
- package/lib/entity/tenant/epic/saveOAuthConnectionEpic.d.ts +19 -0
- package/lib/entity/tenant/epic/saveOAuthConnectionEpic.js +33 -0
- package/lib/entity/tenant/tenantPayload.d.ts +1 -0
- package/lib/entity/tenant/tenantReducer.d.ts +59 -1
- package/lib/entity/tenant/tenantReducer.js +139 -4
- package/lib/entity/tenant/tenantState.d.ts +7 -0
- package/lib/entity/transaction/stateTypes/attachment.d.ts +2 -2
- package/lib/epic.d.ts +9 -1
- package/lib/epic.js +12 -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 +6 -0
- package/lib/esm/entity/tenant/epic/deleteConnectionEpic.js +25 -0
- package/lib/esm/entity/tenant/epic/saveAPIKeyConnectionEpic.js +27 -0
- package/lib/esm/entity/tenant/epic/saveOAuthConnectionEpic.js +29 -0
- package/lib/esm/entity/tenant/tenantReducer.js +135 -2
- package/lib/esm/epic.js +12 -1
- package/lib/esm/index.js +15 -6
- package/lib/esm/init.js +71 -16
- package/lib/esm/reducer.js +9 -0
- package/lib/esm/view/featureNotificationView/epics/fetchRegisteredInterestsEpic.js +23 -0
- package/lib/esm/view/featureNotificationView/epics/notifyMeForFeatureEpic.js +25 -0
- package/lib/esm/view/featureNotificationView/featureNotificationViewPayload.js +11 -0
- package/lib/esm/view/featureNotificationView/featureNotificationViewReducer.js +106 -0
- package/lib/esm/view/featureNotificationView/featureNotificationViewSelector.js +4 -0
- package/lib/esm/view/featureNotificationView/featureNotificationViewState.js +1 -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 +65 -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 +18 -6
- package/lib/index.js +67 -30
- package/lib/init.d.ts +5 -3
- package/lib/init.js +71 -16
- package/lib/reducer.d.ts +9 -0
- package/lib/reducer.js +9 -0
- package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
- package/lib/view/featureNotificationView/epics/fetchRegisteredInterestsEpic.d.ts +16 -0
- package/lib/view/featureNotificationView/epics/fetchRegisteredInterestsEpic.js +27 -0
- package/lib/view/featureNotificationView/epics/notifyMeForFeatureEpic.d.ts +14 -0
- package/lib/view/featureNotificationView/epics/notifyMeForFeatureEpic.js +29 -0
- package/lib/view/featureNotificationView/featureNotificationViewPayload.d.ts +23 -0
- package/lib/view/featureNotificationView/featureNotificationViewPayload.js +15 -0
- package/lib/view/featureNotificationView/featureNotificationViewReducer.d.ts +19 -0
- package/lib/view/featureNotificationView/featureNotificationViewReducer.js +110 -0
- package/lib/view/featureNotificationView/featureNotificationViewSelector.d.ts +6 -0
- package/lib/view/featureNotificationView/featureNotificationViewSelector.js +11 -0
- package/lib/view/featureNotificationView/featureNotificationViewState.d.ts +26 -0
- package/lib/view/featureNotificationView/featureNotificationViewState.js +2 -0
- 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 +69 -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,5 +1,4 @@
|
|
|
1
1
|
import { createSelector } from '@reduxjs/toolkit';
|
|
2
|
-
import isEqual from 'lodash/isEqual';
|
|
3
2
|
import orderBy from 'lodash/orderBy';
|
|
4
3
|
import { getSortOrder, } from '../../../commonPayloadTypes/sortOrderPayload';
|
|
5
4
|
import { reduceAnyFetchState } from '../../../commonStateTypes/reduceFetchState';
|
|
@@ -15,11 +14,6 @@ import { getUserGroupList } from '../../userGroupListView/userGroupListViewSelec
|
|
|
15
14
|
import { getUserList, } from '../../userListView/userListViewSelector';
|
|
16
15
|
import { allTaskPriority, allTaskStatus, } from '../taskDetailView/taskDetailSelector';
|
|
17
16
|
import { DUE_DATE_GROUP_KEYS, } from './taskList';
|
|
18
|
-
import { initialState } from './taskListReducer';
|
|
19
|
-
const isDefaultFilters = (taskListState) => {
|
|
20
|
-
return (isEqual(taskListState.filters, initialState.filters) &&
|
|
21
|
-
initialState.uiState.searchText === taskListState.uiState.searchText);
|
|
22
|
-
};
|
|
23
17
|
const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
|
|
24
18
|
const tasksInOrder = orderBy(tasksList, (task) => {
|
|
25
19
|
const tagsByIds = getTagsByIds(tagState, task.tagIds);
|
|
@@ -34,8 +28,12 @@ const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
|
|
|
34
28
|
return task.status.name;
|
|
35
29
|
case 'priority':
|
|
36
30
|
return ALL_PRIORITY_CODE.indexOf(task.priority.code);
|
|
31
|
+
case 'assignee':
|
|
32
|
+
return task.firstAssigneeSortName;
|
|
37
33
|
case 'timeSpent':
|
|
38
34
|
return task.timeSpent;
|
|
35
|
+
case 'visibility':
|
|
36
|
+
return task.isPrivate === true ? 1 : 0;
|
|
39
37
|
case 'name':
|
|
40
38
|
default:
|
|
41
39
|
return task.name.toLowerCase();
|
|
@@ -43,7 +41,7 @@ const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
|
|
|
43
41
|
}, sortOrder);
|
|
44
42
|
return tasksInOrder;
|
|
45
43
|
};
|
|
46
|
-
const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRoleState, addressState, taskIds, tagState, }) => {
|
|
44
|
+
const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRoleState, addressState, taskIds, tagState, userGroupsState, }) => {
|
|
47
45
|
const { sortKey, searchText } = taskListState.uiState;
|
|
48
46
|
const sortOrder = getSortOrder(taskListState.uiState.sortOrder);
|
|
49
47
|
const tasks = taskIds
|
|
@@ -53,7 +51,15 @@ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRole
|
|
|
53
51
|
const assigneeUsers = task.assignees
|
|
54
52
|
.map((userId) => getUserAndUserRole(userState, userRoleState, addressState, userId))
|
|
55
53
|
.filter((value) => value != null);
|
|
56
|
-
|
|
54
|
+
const firstUser = assigneeUsers[0]?.user;
|
|
55
|
+
const firstUserName = (firstUser != null ? getUserName(firstUser) : '') ||
|
|
56
|
+
firstUser?.email ||
|
|
57
|
+
'';
|
|
58
|
+
const firstGroupName = task.groupAssignees
|
|
59
|
+
.map((gId) => userGroupsState.userGroupByUserGroupId[gId]?.name)
|
|
60
|
+
.find((name) => name != null && name !== '');
|
|
61
|
+
const firstAssigneeSortName = (firstUserName !== '' ? firstUserName : (firstGroupName ?? '')).toLowerCase();
|
|
62
|
+
return { ...task, assigneeUsers, firstAssigneeSortName };
|
|
57
63
|
}
|
|
58
64
|
return undefined;
|
|
59
65
|
})
|
|
@@ -62,7 +68,7 @@ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRole
|
|
|
62
68
|
const sortedTaskList = sortTasksList(tagState, filteredTaskList, sortKey, sortOrder);
|
|
63
69
|
return sortedTaskList;
|
|
64
70
|
};
|
|
65
|
-
const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupState, taskGroupViewState, userState, userRoleState, addressState, tagState, }) => {
|
|
71
|
+
const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupState, taskGroupViewState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
66
72
|
const { taskGroupsIds } = taskGroupViewState;
|
|
67
73
|
const taskGroupsWithTasksList = taskGroupsIds
|
|
68
74
|
.map((taskGroupId) => {
|
|
@@ -76,6 +82,7 @@ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupStat
|
|
|
76
82
|
addressState,
|
|
77
83
|
taskIds,
|
|
78
84
|
tagState,
|
|
85
|
+
userGroupsState,
|
|
79
86
|
});
|
|
80
87
|
if (taskGroup != null) {
|
|
81
88
|
return {
|
|
@@ -104,12 +111,9 @@ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupStat
|
|
|
104
111
|
if (defaultTaskGroup != null) {
|
|
105
112
|
sortedTaskGroupsWithTasksList.push(defaultTaskGroup);
|
|
106
113
|
}
|
|
107
|
-
|
|
108
|
-
return sortedTaskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
109
|
-
}
|
|
110
|
-
return sortedTaskGroupsWithTasksList;
|
|
114
|
+
return sortedTaskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
111
115
|
};
|
|
112
|
-
export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
116
|
+
export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
113
117
|
const assigneeGroups = Object.keys(taskListState.taskIdsByAssignees);
|
|
114
118
|
const taskGroupsWithTasksList = assigneeGroups.map((groupKey) => {
|
|
115
119
|
const taskIds = taskListState.taskIdsByAssignees[groupKey];
|
|
@@ -121,6 +125,7 @@ export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userSt
|
|
|
121
125
|
addressState,
|
|
122
126
|
taskIds,
|
|
123
127
|
tagState,
|
|
128
|
+
userGroupsState,
|
|
124
129
|
});
|
|
125
130
|
const assigneeIds = groupKey.split(',');
|
|
126
131
|
const groupName = getUsersByUserIds(userState, assigneeIds)
|
|
@@ -136,12 +141,9 @@ export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userSt
|
|
|
136
141
|
tasks: tasksWithUserDetails,
|
|
137
142
|
};
|
|
138
143
|
});
|
|
139
|
-
|
|
140
|
-
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
141
|
-
}
|
|
142
|
-
return taskGroupsWithTasksList;
|
|
144
|
+
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
143
145
|
};
|
|
144
|
-
export const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
146
|
+
export const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
145
147
|
const taskGroupsWithTasksList = ALL_PRIORITY_CODE.map((groupKey) => {
|
|
146
148
|
const taskIds = taskListState.taskIdsByPriority[groupKey] ?? [];
|
|
147
149
|
const tasksWithUserDetails = getTasksWithUserDetails({
|
|
@@ -152,6 +154,7 @@ export const getTaskListGroupedByPriority = ({ taskListState, taskState, userSta
|
|
|
152
154
|
addressState,
|
|
153
155
|
taskIds,
|
|
154
156
|
tagState,
|
|
157
|
+
userGroupsState,
|
|
155
158
|
});
|
|
156
159
|
return {
|
|
157
160
|
groupName: allTaskPriority.find((priority) => priority.code === groupKey)?.name ??
|
|
@@ -161,12 +164,9 @@ export const getTaskListGroupedByPriority = ({ taskListState, taskState, userSta
|
|
|
161
164
|
tasks: tasksWithUserDetails,
|
|
162
165
|
};
|
|
163
166
|
});
|
|
164
|
-
|
|
165
|
-
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
166
|
-
}
|
|
167
|
-
return taskGroupsWithTasksList;
|
|
167
|
+
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
168
168
|
};
|
|
169
|
-
const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
169
|
+
const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
170
170
|
const taskGroupsWithTasksList = ALL_TASK_STATUS_CODE.map((groupKey) => {
|
|
171
171
|
const taskIds = taskListState.taskIdsByStatus[groupKey] ?? [];
|
|
172
172
|
const tasksWithUserDetails = getTasksWithUserDetails({
|
|
@@ -177,6 +177,7 @@ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userR
|
|
|
177
177
|
addressState,
|
|
178
178
|
taskIds,
|
|
179
179
|
tagState,
|
|
180
|
+
userGroupsState,
|
|
180
181
|
});
|
|
181
182
|
return {
|
|
182
183
|
groupName: allTaskStatus.find((taskStatus) => taskStatus.code === groupKey)
|
|
@@ -186,12 +187,9 @@ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userR
|
|
|
186
187
|
tasks: tasksWithUserDetails,
|
|
187
188
|
};
|
|
188
189
|
});
|
|
189
|
-
|
|
190
|
-
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
191
|
-
}
|
|
192
|
-
return taskGroupsWithTasksList;
|
|
190
|
+
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
193
191
|
};
|
|
194
|
-
const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
192
|
+
const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
195
193
|
const tagGroups = Object.keys(taskListState.taskIdsByTags);
|
|
196
194
|
const taskGroupsWithTasksList = tagGroups.map((groupKey) => {
|
|
197
195
|
const taskIds = taskListState.taskIdsByTags[groupKey];
|
|
@@ -203,6 +201,7 @@ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRol
|
|
|
203
201
|
addressState,
|
|
204
202
|
taskIds,
|
|
205
203
|
tagState,
|
|
204
|
+
userGroupsState,
|
|
206
205
|
});
|
|
207
206
|
const tagIds = groupKey.split(',');
|
|
208
207
|
const groupName = getTagsByIds(tagState, tagIds)
|
|
@@ -217,12 +216,9 @@ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRol
|
|
|
217
216
|
tasks: tasksWithUserDetails,
|
|
218
217
|
};
|
|
219
218
|
});
|
|
220
|
-
|
|
221
|
-
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
222
|
-
}
|
|
223
|
-
return taskGroupsWithTasksList;
|
|
219
|
+
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
224
220
|
};
|
|
225
|
-
const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
221
|
+
const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
226
222
|
const taskGroupsWithTasksList = DUE_DATE_GROUP_KEYS.map((groupKey) => {
|
|
227
223
|
const taskIds = taskListState.taskIdsByDueDate[groupKey];
|
|
228
224
|
const tasksWithUserDetails = getTasksWithUserDetails({
|
|
@@ -233,6 +229,7 @@ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, user
|
|
|
233
229
|
addressState,
|
|
234
230
|
taskIds,
|
|
235
231
|
tagState,
|
|
232
|
+
userGroupsState,
|
|
236
233
|
});
|
|
237
234
|
return {
|
|
238
235
|
groupName: groupKey,
|
|
@@ -241,12 +238,9 @@ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, user
|
|
|
241
238
|
tasks: tasksWithUserDetails,
|
|
242
239
|
};
|
|
243
240
|
});
|
|
244
|
-
|
|
245
|
-
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
246
|
-
}
|
|
247
|
-
return taskGroupsWithTasksList;
|
|
241
|
+
return taskGroupsWithTasksList.filter((group) => group.tasks.length > 0);
|
|
248
242
|
};
|
|
249
|
-
const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRoleState, addressState, taskGroupState, taskGroupViewState, tagState, }) => {
|
|
243
|
+
const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRoleState, addressState, taskGroupState, taskGroupViewState, tagState, userGroupsState, }) => {
|
|
250
244
|
const { groupByKey } = taskListState.uiState;
|
|
251
245
|
if (groupByKey === 'groupName') {
|
|
252
246
|
return getTaskListGroupedByGroupName({
|
|
@@ -258,6 +252,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
258
252
|
taskGroupState,
|
|
259
253
|
taskGroupViewState,
|
|
260
254
|
tagState,
|
|
255
|
+
userGroupsState,
|
|
261
256
|
});
|
|
262
257
|
}
|
|
263
258
|
if (groupByKey === 'assignee') {
|
|
@@ -268,6 +263,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
268
263
|
userRoleState,
|
|
269
264
|
addressState,
|
|
270
265
|
tagState,
|
|
266
|
+
userGroupsState,
|
|
271
267
|
});
|
|
272
268
|
}
|
|
273
269
|
if (groupByKey === 'priority') {
|
|
@@ -278,6 +274,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
278
274
|
userRoleState,
|
|
279
275
|
addressState,
|
|
280
276
|
tagState,
|
|
277
|
+
userGroupsState,
|
|
281
278
|
});
|
|
282
279
|
}
|
|
283
280
|
if (groupByKey === 'status') {
|
|
@@ -288,6 +285,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
288
285
|
userRoleState,
|
|
289
286
|
addressState,
|
|
290
287
|
tagState,
|
|
288
|
+
userGroupsState,
|
|
291
289
|
});
|
|
292
290
|
}
|
|
293
291
|
if (groupByKey === 'tag') {
|
|
@@ -298,6 +296,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
298
296
|
userRoleState,
|
|
299
297
|
addressState,
|
|
300
298
|
tagState,
|
|
299
|
+
userGroupsState,
|
|
301
300
|
});
|
|
302
301
|
}
|
|
303
302
|
return getTaskListGroupedByDueDate({
|
|
@@ -307,6 +306,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
307
306
|
userRoleState,
|
|
308
307
|
addressState,
|
|
309
308
|
tagState,
|
|
309
|
+
userGroupsState,
|
|
310
310
|
});
|
|
311
311
|
};
|
|
312
312
|
export const getAllTasks = createSelector((state) => state.taskListState, (state) => state.taskState, (state) => state.userState, (state) => state.userRoleState, (state) => state.userListViewState, (state) => state.addressState, (state) => state.taskGroupState, (state) => state.taskGroupViewState, (state) => state.tagViewState, (state) => state.tagState, (state) => state.taskGroupTemplateState, (state) => state.taskGroupTemplateViewState, (state) => state.userGroupsState, (state) => state.userGroupListViewState, (_state, isTaskTemplatesEnabled) => isTaskTemplatesEnabled, (taskListState, taskState, userState, userRoleState, userListViewState, addressState, taskGroupState, taskGroupViewState, tagViewState, tagState, taskGroupTemplateState, taskGroupTemplateViewState, userGroupsState, userGroupListViewState, isTaskTemplatesEnabled) => {
|
|
@@ -320,6 +320,7 @@ export const getAllTasks = createSelector((state) => state.taskListState, (state
|
|
|
320
320
|
taskGroupState,
|
|
321
321
|
taskGroupViewState,
|
|
322
322
|
tagState,
|
|
323
|
+
userGroupsState,
|
|
323
324
|
});
|
|
324
325
|
const fetchStateVariables = [
|
|
325
326
|
taskListState,
|
|
@@ -331,7 +332,15 @@ export const getAllTasks = createSelector((state) => state.taskListState, (state
|
|
|
331
332
|
}
|
|
332
333
|
const { fetchState, error } = reduceAnyFetchState(fetchStateVariables);
|
|
333
334
|
const taskGroupTemplates = getTaskGroupTemplateByIds(taskGroupTemplateState, taskGroupTemplateViewState.taskGroupTemplateIds);
|
|
335
|
+
const tabCounts = {
|
|
336
|
+
live: taskListState.byTab.live.taskIds.length,
|
|
337
|
+
archived: taskListState.byTab.archived.taskIds.length,
|
|
338
|
+
deleted: taskListState.byTab.deleted.taskIds.length,
|
|
339
|
+
snoozed: taskListState.byTab.snoozed.taskIds.length,
|
|
340
|
+
};
|
|
334
341
|
return {
|
|
342
|
+
currentTab: taskListState.currentTab,
|
|
343
|
+
tabCounts,
|
|
335
344
|
uiState: taskListState.uiState,
|
|
336
345
|
filters: taskListState.filters,
|
|
337
346
|
taskGroupTemplates,
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { from, of } from 'rxjs';
|
|
2
|
+
import { catchError, concatMap, exhaustMap, filter, mergeMap, } from 'rxjs/operators';
|
|
3
|
+
import { openSnackbar } from '../../../entity/snackbar/snackbarReducer';
|
|
4
|
+
import { createZeniAPIStatus } from '../../../responsePayload';
|
|
5
|
+
import { approveOAuthConsent, approveOAuthConsentFailure, approveOAuthConsentSuccess, } from '../zeniOAuthReducer';
|
|
6
|
+
const failureSnackbar = (reason) => openSnackbar({
|
|
7
|
+
messageSection: 'oauth_consent_approve',
|
|
8
|
+
messageText: 'failed',
|
|
9
|
+
type: 'error',
|
|
10
|
+
variables: [{ variableName: '__reason__', variableValue: reason }],
|
|
11
|
+
});
|
|
12
|
+
export const approveOAuthConsentEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(approveOAuthConsent.match),
|
|
13
|
+
// `approveOAuthConsent` reducer sets fetchState to In-Progress before epics
|
|
14
|
+
// run, so a guard on In-Progress would block every legitimate request.
|
|
15
|
+
// exhaustMap drops duplicate approve clicks while the HTTP call is in flight.
|
|
16
|
+
exhaustMap((action) => {
|
|
17
|
+
const { userId, zeniSessionId, tenantId, clientId, redirectUri, codeChallenge, codeChallengeMethod, state, responseType, } = action.payload;
|
|
18
|
+
const authHeaders = {
|
|
19
|
+
'zeni-user-id': userId,
|
|
20
|
+
'zeni-tenant-id': tenantId,
|
|
21
|
+
};
|
|
22
|
+
if (zeniSessionId != null) {
|
|
23
|
+
authHeaders['zeni-session-id'] = zeniSessionId;
|
|
24
|
+
}
|
|
25
|
+
return zeniAPI
|
|
26
|
+
.postJSON(`${zeniAPI.apiEndPoints.authMicroServiceBaseUrl}/oauth/authorize/approve`, {
|
|
27
|
+
client_id: clientId,
|
|
28
|
+
redirect_uri: redirectUri,
|
|
29
|
+
code_challenge: codeChallenge,
|
|
30
|
+
code_challenge_method: codeChallengeMethod,
|
|
31
|
+
state,
|
|
32
|
+
response_type: responseType,
|
|
33
|
+
tenant_id: tenantId,
|
|
34
|
+
}, authHeaders)
|
|
35
|
+
.pipe(concatMap((response) => from(response.json()).pipe(mergeMap((responseJson) => {
|
|
36
|
+
if (!response.ok) {
|
|
37
|
+
const errBody = responseJson;
|
|
38
|
+
const errorMessage = errBody?.error ??
|
|
39
|
+
errBody?.message ??
|
|
40
|
+
errBody?.status?.message ??
|
|
41
|
+
`Authorization failed (${response.status})`;
|
|
42
|
+
return from([
|
|
43
|
+
approveOAuthConsentFailure(createZeniAPIStatus(errorMessage)),
|
|
44
|
+
failureSnackbar(errorMessage),
|
|
45
|
+
]);
|
|
46
|
+
}
|
|
47
|
+
const body = responseJson;
|
|
48
|
+
const redirectUrl = body?.redirect_url ?? body?.data?.redirect_url;
|
|
49
|
+
if (redirectUrl == null || redirectUrl === '') {
|
|
50
|
+
const noRedirectMessage = 'No redirect URL returned from authorization server';
|
|
51
|
+
return from([
|
|
52
|
+
approveOAuthConsentFailure(createZeniAPIStatus(noRedirectMessage)),
|
|
53
|
+
failureSnackbar(noRedirectMessage),
|
|
54
|
+
]);
|
|
55
|
+
}
|
|
56
|
+
return of(approveOAuthConsentSuccess({ redirectUrl }));
|
|
57
|
+
}))), catchError((error) => {
|
|
58
|
+
const errorDetail = error instanceof Error ? error.message : JSON.stringify(error);
|
|
59
|
+
const networkErrorMessage = 'OAuth approve request failed: ' + errorDetail;
|
|
60
|
+
return from([
|
|
61
|
+
approveOAuthConsentFailure(createZeniAPIStatus(networkErrorMessage)),
|
|
62
|
+
failureSnackbar(networkErrorMessage),
|
|
63
|
+
]);
|
|
64
|
+
}));
|
|
65
|
+
}));
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export function parseOAuthParams(search) {
|
|
2
|
+
const searchParams = new URLSearchParams(search);
|
|
3
|
+
const clientId = searchParams.get('client_id');
|
|
4
|
+
const redirectUri = searchParams.get('redirect_uri');
|
|
5
|
+
const codeChallenge = searchParams.get('code_challenge');
|
|
6
|
+
const codeChallengeMethod = searchParams.get('code_challenge_method') ?? 'S256';
|
|
7
|
+
const state = searchParams.get('state');
|
|
8
|
+
const responseType = searchParams.get('response_type') ?? 'code';
|
|
9
|
+
if (clientId == null || clientId === '') {
|
|
10
|
+
return { params: null, error: 'Missing client_id parameter' };
|
|
11
|
+
}
|
|
12
|
+
if (redirectUri == null || redirectUri === '') {
|
|
13
|
+
return { params: null, error: 'Missing redirect_uri parameter' };
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
void new URL(redirectUri);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return { params: null, error: 'Invalid redirect_uri parameter' };
|
|
20
|
+
}
|
|
21
|
+
if (codeChallenge == null || codeChallenge === '') {
|
|
22
|
+
return {
|
|
23
|
+
params: null,
|
|
24
|
+
error: 'Missing code_challenge parameter (PKCE required)',
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (state == null || state === '') {
|
|
28
|
+
return { params: null, error: 'Missing state parameter' };
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
params: {
|
|
32
|
+
clientId,
|
|
33
|
+
redirectUri,
|
|
34
|
+
codeChallenge,
|
|
35
|
+
codeChallengeMethod,
|
|
36
|
+
state,
|
|
37
|
+
responseType,
|
|
38
|
+
},
|
|
39
|
+
error: null,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { createSlice } from '@reduxjs/toolkit';
|
|
2
|
+
export const initialState = {
|
|
3
|
+
fetchState: 'Not-Started',
|
|
4
|
+
error: undefined,
|
|
5
|
+
approveRedirectUrl: undefined,
|
|
6
|
+
};
|
|
7
|
+
const zeniOAuthView = createSlice({
|
|
8
|
+
name: 'zeniOAuthView',
|
|
9
|
+
initialState,
|
|
10
|
+
reducers: {
|
|
11
|
+
approveOAuthConsent: {
|
|
12
|
+
prepare(userId, zeniSessionId, tenantId, clientId, redirectUri, codeChallenge, codeChallengeMethod, state, responseType) {
|
|
13
|
+
return {
|
|
14
|
+
payload: {
|
|
15
|
+
userId,
|
|
16
|
+
zeniSessionId,
|
|
17
|
+
tenantId,
|
|
18
|
+
clientId,
|
|
19
|
+
redirectUri,
|
|
20
|
+
codeChallenge,
|
|
21
|
+
codeChallengeMethod,
|
|
22
|
+
state,
|
|
23
|
+
responseType,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
},
|
|
27
|
+
reducer(draft) {
|
|
28
|
+
draft.fetchState = 'In-Progress';
|
|
29
|
+
draft.error = undefined;
|
|
30
|
+
draft.approveRedirectUrl = undefined;
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
approveOAuthConsentSuccess(draft, action) {
|
|
34
|
+
draft.fetchState = 'Completed';
|
|
35
|
+
draft.error = undefined;
|
|
36
|
+
draft.approveRedirectUrl = action.payload.redirectUrl;
|
|
37
|
+
},
|
|
38
|
+
approveOAuthConsentFailure(draft, action) {
|
|
39
|
+
draft.fetchState = 'Error';
|
|
40
|
+
draft.error = action.payload;
|
|
41
|
+
draft.approveRedirectUrl = undefined;
|
|
42
|
+
},
|
|
43
|
+
clearZeniOAuthView() {
|
|
44
|
+
return initialState;
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
export const { approveOAuthConsent, approveOAuthConsentSuccess, approveOAuthConsentFailure, clearZeniOAuthView, } = zeniOAuthView.actions;
|
|
49
|
+
export default zeniOAuthView.reducer;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export const getZeniOAuthApproveFetchState = (state) => state.zeniOAuthViewState.fetchState;
|
|
2
|
+
export const getZeniOAuthApproveRedirectUrl = (state) => state.zeniOAuthViewState.approveRedirectUrl;
|
|
3
|
+
export const getZeniOAuthApproveError = (state) => state.zeniOAuthViewState.error?.message ?? null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/lib/index.d.ts
CHANGED
|
@@ -123,7 +123,7 @@ import { PriorityCodeType, Task, TaskCodeType, TaskPriority, TaskStatus, TaskSta
|
|
|
123
123
|
import { getTaskGroupById } from './entity/taskGroup/taskGroupSelector';
|
|
124
124
|
import { TaskGroupState } from './entity/taskGroup/taskGroupState';
|
|
125
125
|
import { TaskGroupTemplate } from './entity/taskGroupTemplate/taskGroupTemplateState';
|
|
126
|
-
import { DoSignInPayload, clearAll, doMagicLinkSignIn, doSignIn, doSignOut, sendSessionHeartbeat, fetchActiveTenant, fetchAllTenants, fetchExcludedResources as fetchExcludedResourcesForTenant, fetchExternalConnections as fetchExternalConnectionsForTenant, fetchSubscriptionSummaryForTenant, resendVerifyDeviceOTP, resetSignInState, saveExternalConnection as saveExternalConnectionForTenant, sendEmailMagicLinkToUser, updateCurrentTenant, updateSignInState, verifyDeviceWithTwoFA } from './entity/tenant/tenantReducer';
|
|
126
|
+
import { DoSignInPayload, clearAll, doMagicLinkSignIn, doSignIn, doSignOut, sendSessionHeartbeat, fetchActiveTenant, fetchAllTenants, fetchExcludedResources as fetchExcludedResourcesForTenant, fetchExternalConnections as fetchExternalConnectionsForTenant, fetchSubscriptionSummaryForTenant, resendVerifyDeviceOTP, resetSignInState, deleteConnection, saveAPIKeyConnection, saveExternalConnection as saveExternalConnectionForTenant, saveOAuthConnection, sendEmailMagicLinkToUser, toExternalIntegrationType, toExternalSupportedTool, updateCurrentTenant, updateSignInState, verifyDeviceWithTwoFA } from './entity/tenant/tenantReducer';
|
|
127
127
|
import { CurrentTenant, TenantBaseView, TenantCoreDetailsView, TenantView, TenantsBaseOrdered, TenantsOrdered, getCurrentTenant, getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled, getTenantBaseById, getTenantBaseViewForTenantId, getTenantBaseViewForTenantView, getTenantsBaseByCheckInDateSelector, getTenantsByCheckInDateSelector, getTenantsCoreDetailsByCheckInDateSelector, isOtherProductsEnabledForTenant, isTenantBankingOnly, isTenantBookkeepingEnabled, isTenantCardsOnly, isTenantUsingZeniCOA, isZeniDomainTenant, toTenantCoreDetailsView } from './entity/tenant/tenantSelector';
|
|
128
128
|
import { Connection, LoggedInUser, RoleResource, Tenant, TenantProductSettings } from './entity/tenant/tenantState';
|
|
129
129
|
import { ToastNotificationPayload } from './entity/toastNotification/toastNotificationPayload';
|
|
@@ -322,6 +322,9 @@ import { AverageMonthsCount, NetBurnOrIncomeRunway, NetBurnOrIncomeStoryCardStat
|
|
|
322
322
|
import { fetchNotificationUnreadCount, fetchNotificationUnreadCountSuccess, fetchNotificationView, updateNotificationViewAllNotificationsStatus, updateNotificationViewCurrentTabAndSubTab, updateNotificationViewNotificationStatus, updateNotificationViewSubTab, updateNotificationViewTabState, updateNotificationViewUIState } from './view/notificationView/notificationViewReducer';
|
|
323
323
|
import { NotificationView, getExternalNotificationsForSelectedSubTab, getNotificationView, getNotificationsForSelectedSubTab } from './view/notificationView/notificationViewSelector';
|
|
324
324
|
import { NotificationSubTabType, NotificationTabState, NotificationTabType, NotificationViewUIState, toNotificationSubTabTypeStrict, toNotificationTabTypeStrict } from './view/notificationView/notificationViewState';
|
|
325
|
+
import { clearFeatureNotificationView, fetchRegisteredInterests, notifyMeForFeature } from './view/featureNotificationView/featureNotificationViewReducer';
|
|
326
|
+
import { getFeatureNotificationView, getRegisteredInterests, getRegisteredInterestsByFeature, isFeatureInterestRegistered } from './view/featureNotificationView/featureNotificationViewSelector';
|
|
327
|
+
import { FeatureInterest, FeatureNotificationViewState } from './view/featureNotificationView/featureNotificationViewState';
|
|
325
328
|
import { clearOnboardingCustomerViewUpdateData, fetchCompanyOnboardingView, fetchOnboardingCompletedCompanies, fetchQBOConnectionPool, getOnboardingEmailGroup, initializeOnboardingCustomerViewUpdateData, resetNewOnboardedCustomerId, retryBankAccountConnectionForOnboarding, saveOnboardingCustomerCompletedStatus, saveOnboardingCustomerDataInLocalStore, saveOnboardingCustomerNotes, saveOnboardingCustomerViewUpdateData, saveOnboardingCustomerViewUpdates, sendOnboardingCustomerViewInvite, updateCustomerCreationStatus, updateOnboardingCustomerDataInLocalStore, updateOnboardingCustomerListUIState, updateQBOConnectionPoolExternalConnection, updateStatusAfterOnboardingCompleted } from './view/onboardingView/cockpitView/onboardingCockpitViewReducer';
|
|
326
329
|
import { NewOnboardingCustomerLocalData, NewOnboardingCustomerView, OnboardingCockpitView, ProductInfo, getNewOnboardingCustomerView, getOnboardingCockpitView } from './view/onboardingView/cockpitView/onboardingCockpitViewSelector';
|
|
327
330
|
import { OnboardingCustomerListUIState, QBOConnectionPool } from './view/onboardingView/cockpitView/onboardingCockpitViewState';
|
|
@@ -537,12 +540,15 @@ import { createTag, deleteTag, fetchTagList } from './view/tagView/tagViewReduce
|
|
|
537
540
|
import { TagViewSelectorView, getAllTags } from './view/tagView/tagViewSelector';
|
|
538
541
|
import { TagViewState } from './view/tagView/tagViewState';
|
|
539
542
|
import { EditTaskLocalData, initialTaskDetail, initialTaskDetailLocalData } from './view/taskManager/taskDetailView/taskDetail';
|
|
540
|
-
import { archiveTask, deleteTask, discardTaskUpdatesInLocalStore, fetchTaskDetailPage, saveTaskDetail, saveTaskUpdatesToLocalStore } from './view/taskManager/taskDetailView/taskDetailReducer';
|
|
543
|
+
import { archiveTask, deleteTask, discardTaskUpdatesInLocalStore, fetchTaskDetailPage, saveTaskDetail, saveTaskUpdatesToLocalStore, snoozeTask, unsnoozeTask } from './view/taskManager/taskDetailView/taskDetailReducer';
|
|
544
|
+
import { CannedResponse, CannedResponsesViewState } from './view/taskManager/cannedResponsesView/cannedResponses';
|
|
545
|
+
import { deleteCannedResponse, fetchCannedResponses, saveCannedResponse } from './view/taskManager/cannedResponsesView/cannedResponsesReducer';
|
|
546
|
+
import { getCannedResponsesView } from './view/taskManager/cannedResponsesView/cannedResponsesSelector';
|
|
541
547
|
import { TaskDetailSelectorView, allTaskPriority, allTaskStatus, getTaskDetail } from './view/taskManager/taskDetailView/taskDetailSelector';
|
|
542
548
|
import { createTaskFromTaskGroupTemplate } from './view/taskManager/taskGroupTemplateView/taskGroupTemplateViewReducer';
|
|
543
549
|
import { createNewTaskGroup, deleteTaskGroup, fetchAllTaskGroups, updateTaskGroupName } from './view/taskManager/taskGroupView/taskGroupViewReducer';
|
|
544
|
-
import { DueDateGroupKey, TASK_LIST_FILTER_CATEGORIES, TASK_LIST_GROUP_BY_CATEGORIES, TaskFilterCategory, TaskGroupKey, TaskListFilterCategoryField, TaskListFilters, TaskListLocalData, TaskListUIState, TaskListViewSortKey, toDueDateGroupKeyType, toTaskListGroupByKeyType, toTaskListGroupByKeyTypeStrict } from './view/taskManager/taskListView/taskList';
|
|
545
|
-
import { bulkUpdateTaskList, dragNDropTasks, fetchTaskListPage, initiateTaskListLocalData, updateTaskFilters, updateTaskFromListView, updateTaskListLocalData, updateTaskListSearchText, updateTaskListUIState } from './view/taskManager/taskListView/taskListReducer';
|
|
550
|
+
import { DueDateGroupKey, TASK_LIST_FILTER_CATEGORIES, TASK_LIST_GROUP_BY_CATEGORIES, TaskFilterCategory, TaskGroupKey, TaskListFilterCategoryField, TaskListFilters, TaskListLocalData, TaskListUIState, TaskListViewSortKey, toDueDateGroupKeyType, toTaskListGroupByKeyType, toTaskListGroupByKeyTypeStrict, ALL_TASK_LIST_TABS, TaskListTab } from './view/taskManager/taskListView/taskList';
|
|
551
|
+
import { bulkUpdateTaskList, dragNDropTasks, fetchTaskListPage, initiateTaskListLocalData, removeTaskFromList, updateTaskFilters, updateTaskFromListView, updateTaskListLocalData, updateTaskListSearchText, updateTaskListTab, updateTaskListUIState } from './view/taskManager/taskListView/taskListReducer';
|
|
546
552
|
import { TaskGroupWithTasksList, TaskListSelectorView, TaskWithUserDetails, getAllTasks } from './view/taskManager/taskListView/taskListSelector';
|
|
547
553
|
import { getDueDateValueFromDueDateGroupId, getTaskUpdates } from './view/taskManager/taskListView/taskListViewHelpers';
|
|
548
554
|
import { fetchTasksCard } from './view/tasksCard/tasksCardReducer';
|
|
@@ -608,6 +614,10 @@ import { ZeniAccStatementsSelectorView, getZeniAccStatements } from './view/zeni
|
|
|
608
614
|
import { fetchZeniAccountsPromoCard } from './view/zeniAccountsPromoCard/zeniAccountsPromoCardReducer';
|
|
609
615
|
import { ZeniAccountsPromoCardReport, getZeniAccountsPromoCard } from './view/zeniAccountsPromoCard/zeniAccountsPromoCardSelector';
|
|
610
616
|
import { ZeniAccountsPromoCardState } from './view/zeniAccountsPromoCard/zeniAccountsPromoCardState';
|
|
617
|
+
import { ApproveOAuthConsentPayload, approveOAuthConsent, approveOAuthConsentFailure, approveOAuthConsentSuccess, clearZeniOAuthView } from './view/zeniOAuthView/zeniOAuthReducer';
|
|
618
|
+
import { OAuthParams, ParseOAuthParamsResult, parseOAuthParams } from './view/zeniOAuthView/zeniOAuthParamsParser';
|
|
619
|
+
import { getZeniOAuthApproveError, getZeniOAuthApproveFetchState, getZeniOAuthApproveRedirectUrl } from './view/zeniOAuthView/zeniOAuthSelector';
|
|
620
|
+
import { ZeniOAuthViewState } from './view/zeniOAuthView/zeniOAuthState';
|
|
611
621
|
import { RESTAPIEndpoints } from './zeniAPI';
|
|
612
622
|
import { Dayjs, ZeniDate, date, dateFromYearMonthDate, dateInLocal, dateLocal, dateNow, getBusinessDayOfDate, getLocalTimezone, getMinDate, getMonthIndex, setLocalTimezone, updateZeniDateLocaleID } from './zeniDayJS';
|
|
613
623
|
import { ZeniUrl, toZeniUrl, toZeniUrlWithoutBaseURL } from './zeniUrl';
|
|
@@ -643,7 +653,7 @@ export { TimeframeTick, TimeframeTickWithMetaData, toTimeframeTick, mapTimePerio
|
|
|
643
653
|
export { VendorSpendTrendFilterTabType, toVendorSpendTrendFilterTabsTypeStrict, } from './entity/vendorExpense/vendorExpenseSelector';
|
|
644
654
|
export { getNumberOfPeriods };
|
|
645
655
|
export { SCHEDULE_DAYS_OF_MONTH, ScheduleDaysOfMonth, toScheduleDaysOfMonth, Day, Month, toMonth, toMonthStrict, Quarter, toQuarter, toQuarterStrict, AbsoluteDay, TimePeriod, };
|
|
646
|
-
export { Tenant, TenantView, LoggedInUser, TenantBaseView, CurrentTenant, TenantProductSettings, getTenantBaseById, getCurrentTenant, getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled, getTenantsByCheckInDateSelector, getTenantsBaseByCheckInDateSelector, getTenantsCoreDetailsByCheckInDateSelector, toTenantCoreDetailsView, getTenantBaseViewForTenantView, getTenantBaseViewForTenantId, isZeniDomainTenant, isTenantUsingZeniCOA, TenantsBaseOrdered, TenantsOrdered, TenantCoreDetailsView, fetchActiveTenant, fetchAllTenants, updateCurrentTenant, clearAll, doMagicLinkSignIn, verifyDeviceWithTwoFA, resendVerifyDeviceOTP, sendEmailMagicLinkToUser, doSignIn, updateSignInState, DoSignInPayload, doSignOut, sendSessionHeartbeat, resetSignInState, RoleResource, Connection, fetchExcludedResourcesForTenant, fetchExternalConnectionsForTenant, saveExternalConnectionForTenant, fetchSubscriptionSummaryForTenant, isTenantBankingOnly, isTenantCardsOnly, isTenantBookkeepingEnabled, isOtherProductsEnabledForTenant, };
|
|
656
|
+
export { Tenant, TenantView, LoggedInUser, TenantBaseView, CurrentTenant, TenantProductSettings, getTenantBaseById, getCurrentTenant, getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled, getTenantsByCheckInDateSelector, getTenantsBaseByCheckInDateSelector, getTenantsCoreDetailsByCheckInDateSelector, toTenantCoreDetailsView, getTenantBaseViewForTenantView, getTenantBaseViewForTenantId, isZeniDomainTenant, isTenantUsingZeniCOA, TenantsBaseOrdered, TenantsOrdered, TenantCoreDetailsView, fetchActiveTenant, fetchAllTenants, updateCurrentTenant, clearAll, doMagicLinkSignIn, verifyDeviceWithTwoFA, resendVerifyDeviceOTP, sendEmailMagicLinkToUser, doSignIn, updateSignInState, DoSignInPayload, doSignOut, sendSessionHeartbeat, resetSignInState, RoleResource, Connection, fetchExcludedResourcesForTenant, fetchExternalConnectionsForTenant, saveExternalConnectionForTenant, deleteConnection, saveAPIKeyConnection, saveOAuthConnection, toExternalIntegrationType, toExternalSupportedTool, fetchSubscriptionSummaryForTenant, isTenantBankingOnly, isTenantCardsOnly, isTenantBookkeepingEnabled, isOtherProductsEnabledForTenant, };
|
|
647
657
|
export { Account, AccountType, AccountBase, StatementCloseDay, toAccountType, AccountReport, NestedAccountReport, AccountWithBalanceReport, AccountGroup, AccountGroupReportV2, AccountGroupType, toAccountGroupType, AccountGroupReport, getAccountGroupKey, AccountGroupKey, RecommendedAccountBase, };
|
|
648
658
|
export { Class, ClassBase, RecommendedClassBase, } from './entity/class/classState';
|
|
649
659
|
export { getClassById } from './entity/class/classSelector';
|
|
@@ -847,14 +857,16 @@ export { fetchGlobalMerchantRecommendation, createGlobalMerchant, updateCreateGl
|
|
|
847
857
|
export { approveVendorGlobalReview, rejectVendorGlobalReview, fetchVendorGlobalReviewView, updateSelectedGlobalMerchant, updateVendorGlobalReviewViewUIState, getVendorGlobalReviewView, getTenantMerchantByMerchantId, toVendorGlobalReviewColumnSortKeyType, VendorGlobalReview, VendorGlobalReviewViewUIState, VendorGlobalReviewViewColumnSortKey, VendorGlobalReviewViewSelectorView, VendorGlobalReviewViewState, VendorGlobalReviewViewLocalData, updateVendorGlobalReviewViewLocalData, GlobalReviewPageCurrentSelectionByColumn, GlobalRecommendationFetchSource, };
|
|
848
858
|
export { fetchArAging, updateArAgingUIState, fetchArAgingDetail, updateArAgingDetailUIState, ArAgingReport, ArAgingDetail, NestedAgingBalancesByCustomer, getArAgingReport, getArAgingDetailForCustomer, updateArAgingNodeCollapseState, };
|
|
849
859
|
export { toRecurringBillFrequency, toRecurringBillFrequencyStrict, RecurringBillFrequency, RecurringBillDetail, RecurringBillConfig, RecurringBillStatus, RecurringBillPaymentStatus, };
|
|
850
|
-
export { Task, TaskListSelectorView, TaskWithUserDetails, TaskListViewSortKey, TaskListUIState, TaskDetailSelectorView, EditTaskLocalData, TaskStatusCodeType, PriorityCodeType, getTaskGroupById, TaskStatus, TaskPriority, TaskCodeType, getAllTasks, fetchTaskListPage, getTaskDetail, fetchTaskDetailPage, saveTaskUpdatesToLocalStore, saveTaskDetail, archiveTask, updateTaskListSearchText, updateTaskListUIState, allTaskStatus, allTaskPriority, TaskListFilters, updateTaskFilters, TASK_LIST_FILTER_CATEGORIES, TASK_LIST_GROUP_BY_CATEGORIES, TaskListFilterCategoryField, deleteTask, discardTaskUpdatesInLocalStore, TaskFilterCategory, TaskType, TaskGroupWithTasksList, TaskListLocalData, bulkUpdateTaskList, createNewTaskGroup, initiateTaskListLocalData, deleteTaskGroup, updateTaskListLocalData, dragNDropTasks, updateTaskGroupName, TaskGroupState, TaskGroupKey, toTaskListGroupByKeyType, toTaskListGroupByKeyTypeStrict, getTaskUpdates, fetchAllTaskGroups, initialTaskDetail, getDueDateValueFromDueDateGroupId, toPriorityCodeType, toTaskStatusCodeType, DueDateGroupKey, toDueDateGroupKeyType, updateTaskFromListView, convertHHMMStrToMinutes, initialTaskDetailLocalData, };
|
|
860
|
+
export { Task, TaskListSelectorView, TaskWithUserDetails, TaskListViewSortKey, TaskListUIState, TaskDetailSelectorView, EditTaskLocalData, TaskStatusCodeType, PriorityCodeType, getTaskGroupById, TaskStatus, TaskPriority, TaskCodeType, getAllTasks, fetchTaskListPage, getTaskDetail, fetchTaskDetailPage, saveTaskUpdatesToLocalStore, saveTaskDetail, archiveTask, CannedResponse, CannedResponsesViewState, fetchCannedResponses, saveCannedResponse, deleteCannedResponse, getCannedResponsesView, updateTaskListSearchText, updateTaskListUIState, allTaskStatus, allTaskPriority, TaskListFilters, updateTaskFilters, TASK_LIST_FILTER_CATEGORIES, TASK_LIST_GROUP_BY_CATEGORIES, TaskListFilterCategoryField, deleteTask, discardTaskUpdatesInLocalStore, TaskFilterCategory, TaskType, TaskGroupWithTasksList, TaskListLocalData, bulkUpdateTaskList, createNewTaskGroup, initiateTaskListLocalData, deleteTaskGroup, updateTaskListLocalData, dragNDropTasks, updateTaskGroupName, TaskGroupState, TaskGroupKey, toTaskListGroupByKeyType, toTaskListGroupByKeyTypeStrict, getTaskUpdates, fetchAllTaskGroups, initialTaskDetail, getDueDateValueFromDueDateGroupId, toPriorityCodeType, toTaskStatusCodeType, DueDateGroupKey, toDueDateGroupKeyType, updateTaskFromListView, updateTaskListTab, removeTaskFromList, snoozeTask, unsnoozeTask, convertHHMMStrToMinutes, initialTaskDetailLocalData, TaskListTab, ALL_TASK_LIST_TABS, };
|
|
851
861
|
export { Tag, TagState, TagViewState, getAllTags, TagViewSelectorView, fetchTagList, createTag, deleteTag, };
|
|
852
862
|
export { CardPayment, CardPaymentViewState, SetupIntentData, CardPaymentSelectorView, getAllCardsAndBankPaymentMethods, createCardSetupIntent, confirmCardSetupIntent, addCardPaymentSource, fetchPaymentSources, resetCardPaymentErrorStatuses, clearCardPaymentView, AddCardPaymentSourceType, };
|
|
853
863
|
export { getAuditReportGroupViewSelectorView, getAuditRuleGroupViewSelectorView, getUserFromAllUsers, AuditReportGroupSelectorView, AuditReportGroupViewSelectorView, AuditRuleGroupViewSelectorView, fetchAuditRuleGroupView, fetchAuditReportGroupView, saveReasonForAuditRule, AuditRuleGroup, AuditRuleGroupReport, AuditReportRule, AuditRuleEntityType, AuditRuleEntityIdType, AuditRuleBypassReason, clearAuditReportGroupViewByCompanyId, };
|
|
854
864
|
export { AuthenticationFeatureType, AuthenticationDetails, AuthenticationViewState, fetchCollaborationAuthToken, getAuthenticationView, };
|
|
855
865
|
export { ZeniAccountsPromoCardState, getZeniAccountsPromoCard, ZeniAccountsPromoCardReport, fetchZeniAccountsPromoCard, };
|
|
866
|
+
export { ApproveOAuthConsentPayload, OAuthParams, ParseOAuthParamsResult, ZeniOAuthViewState, approveOAuthConsent, approveOAuthConsentFailure, approveOAuthConsentSuccess, clearZeniOAuthView, getZeniOAuthApproveError, getZeniOAuthApproveFetchState, getZeniOAuthApproveRedirectUrl, parseOAuthParams, };
|
|
856
867
|
export { ExternalNotificationData, NotificationGroup, NotificationActivityType, NotificationIdentifierType, NotificationUpdateValue, NotificationMode, NotificationStatus, Notification, NotificationWithAuthors, NotificationMetaData, NotificationEventData, NotificationActivity, NotificationUpdates, NotificationValueFormat, toNotificationModeStrict, updateCommentsNotifications, updateCommentsNotificationsStatuses, };
|
|
857
868
|
export { NotificationView, NotificationViewUIState, NotificationTabState, NotificationTabType, NotificationSubTabType, toNotificationSubTabTypeStrict, toNotificationTabTypeStrict, fetchNotificationView, fetchNotificationUnreadCount, fetchNotificationUnreadCountSuccess, updateNotificationViewAllNotificationsStatus, updateNotificationViewNotificationStatus, updateNotificationViewTabState, updateNotificationViewCurrentTabAndSubTab, updateNotificationViewSubTab, updateNotificationViewUIState, getNotificationView, getExternalNotificationsForSelectedSubTab, getNotificationsForSelectedSubTab, };
|
|
869
|
+
export { clearFeatureNotificationView, fetchRegisteredInterests, notifyMeForFeature, getFeatureNotificationView, getRegisteredInterests, getRegisteredInterestsByFeature, isFeatureInterestRegistered, FeatureInterest, FeatureNotificationViewState, };
|
|
858
870
|
export { pushToastNotification, ToastNotification, ToastNotificationPayload, getLastNotificationTime, getNotifications, };
|
|
859
871
|
export { getReferralListView, getInviteFormView, ReferralListSelectorView, ReferralViewState, InviteCompanyLocalData, ReferralInvitation, ReferralListViewSortKey, ReferralViewUIState, toReferralListViewSortKeyType, ReferralStatus, ReferralAmountStatus, StatusTypes, AmountStatusTypes, fetchReferrals, sendReferralInvite, clearReferrals, saveReferralFormDataInLocalStore, updateReferralListSortUiState, resendReferralInvite, fetchRewardsPlan, RewardsPlanCardReport, getRewardsPlanCard, updateReferViewed, RewardsPlanData, };
|
|
860
872
|
export { RecurringFrequencyType, getRecurringEndDateFromCount, toRecurringFrequency, getMinAllowedEndDate, RecurringDatePickerOptions, };
|