@zeniai/client-epic-state 4.20.2-beta0ND → 4.20.2-beta25RR
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/animations.d.ts +1 -1
- package/lib/entity/aiCfo/aiCfoSelector.d.ts +2 -1
- package/lib/entity/billPay/billTransaction/billTransactionState.d.ts +2 -2
- package/lib/entity/jeSchedules/jeSchedulesPayload.d.ts +0 -38
- package/lib/entity/jeSchedules/jeSchedulesPayload.js +0 -78
- package/lib/entity/jeSchedules/jeSchedulesSelector.d.ts +1 -4
- package/lib/entity/jeSchedules/jeSchedulesSelector.js +1 -5
- package/lib/entity/jeSchedules/jeSchedulesState.d.ts +0 -37
- package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
- package/lib/entity/snackbar/snackbarTypes.js +2 -0
- package/lib/entity/task/taskPayload.d.ts +3 -0
- package/lib/entity/task/taskPayload.js +5 -0
- package/lib/entity/task/taskState.d.ts +3 -0
- package/lib/entity/tenant/tenantPayload.d.ts +0 -1
- package/lib/entity/tenant/tenantReducer.js +0 -1
- package/lib/entity/tenant/tenantSelector.d.ts +0 -1
- package/lib/entity/tenant/tenantSelector.js +1 -9
- package/lib/entity/tenant/tenantState.d.ts +0 -1
- package/lib/entity/transaction/payloadTypes/scheduleTransactionPayload.d.ts +1 -4
- package/lib/entity/transaction/payloadTypes/scheduleTransactionPayload.js +0 -1
- package/lib/entity/transaction/payloadTypes/transactionPayload.d.ts +0 -3
- package/lib/entity/transaction/payloadTypes/transactionPayload.js +1 -17
- package/lib/entity/transaction/stateTypes/scheduleTransaction.d.ts +0 -1
- package/lib/entity/transaction/stateTypes/transaction.d.ts +0 -5
- package/lib/entity/transaction/stateTypes/transactionLine.d.ts +1 -1
- package/lib/epic.d.ts +3 -2
- package/lib/epic.js +3 -2
- package/lib/esm/entity/jeSchedules/jeSchedulesPayload.js +0 -78
- package/lib/esm/entity/jeSchedules/jeSchedulesSelector.js +1 -5
- package/lib/esm/entity/snackbar/snackbarTypes.js +2 -0
- package/lib/esm/entity/task/taskPayload.js +5 -0
- package/lib/esm/entity/tenant/tenantReducer.js +0 -1
- package/lib/esm/entity/tenant/tenantSelector.js +0 -7
- package/lib/esm/entity/transaction/payloadTypes/scheduleTransactionPayload.js +0 -1
- package/lib/esm/entity/transaction/payloadTypes/transactionPayload.js +1 -17
- package/lib/esm/epic.js +3 -2
- package/lib/esm/index.js +9 -10
- package/lib/esm/view/aiCfoView/aiCfoViewReducer.js +1 -82
- package/lib/esm/view/aiCfoView/aiCfoViewSelector.js +2 -8
- package/lib/esm/view/classList/fetchClassListEpic.js +2 -9
- package/lib/esm/view/commonVendorView/vendorView/vendorViewSelector.js +5 -18
- package/lib/esm/view/commonVendorView/vendorsTabVendorView/vendorsTabVendorViewSelector.js +2 -6
- package/lib/esm/view/companyView/types/cockpitTypes.js +1 -0
- package/lib/esm/view/expenseAutomationView/epics/jeSchedule/fetchJeSchedulesEpic.js +2 -2
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.js +2 -2
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +3 -4
- package/lib/esm/view/expenseAutomationView/expenseAutomationViewSelector.js +1 -0
- package/lib/esm/view/expenseAutomationView/helpers/saveTransactionHelper.js +2 -2
- package/lib/esm/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +2 -2
- package/lib/esm/view/expenseAutomationView/reducers/jeSchedulesViewReducer.js +1 -17
- package/lib/esm/view/expenseAutomationView/selectors/fluxAnalysisViewSelector.js +2 -10
- package/lib/esm/view/expenseAutomationView/selectors/jeSchedulesViewSelector.js +6 -63
- package/lib/esm/view/expenseAutomationView/selectors/missingReceiptsSelector.js +4 -12
- package/lib/esm/view/expenseAutomationView/selectors/reconciliationViewSelector.js +9 -22
- package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +6 -12
- package/lib/esm/view/expenseAutomationView/types/jeSchedulesViewState.js +1 -18
- package/lib/esm/view/profitAndLossClassesView/profitAndLossClassesByClassHorizontalSelector.js +0 -3
- package/lib/esm/view/spendManagement/billPay/billList/billListSelector.js +0 -10
- package/lib/esm/view/spendManagement/billPay/billList/billListState.js +0 -1
- package/lib/esm/view/spendManagement/billPay/billPayReview/billPayReviewSelector.js +3 -7
- package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewSelector.js +5 -5
- package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/fetchBillPayApproversDetailsEpic.js +2 -7
- package/lib/esm/view/spendManagement/billPay/editBillView/editBillViewSelector.js +6 -13
- package/lib/esm/view/spendManagement/chargeCards/chargeCardList/chargeCardList.js +0 -1
- package/lib/esm/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.js +0 -2
- package/lib/esm/view/spendManagement/reimbursement/editRemiView/editRemiViewSelector.js +4 -7
- package/lib/esm/view/spendManagement/reimbursement/remiListView/remiListSelector.js +0 -12
- package/lib/esm/view/spendManagement/reimbursement/remiListView/remiListState.js +0 -1
- package/lib/esm/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +2 -0
- package/lib/esm/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +4 -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 +64 -0
- package/lib/esm/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +54 -0
- package/lib/esm/view/taskManager/taskDetailView/taskDetail.js +4 -0
- package/lib/esm/view/taskManager/taskDetailView/taskDetailReducer.js +49 -1
- package/lib/esm/view/taskManager/taskDetailView/taskDetailSelector.js +5 -2
- package/lib/esm/view/taskManager/taskListView/taskList.js +1 -0
- package/lib/esm/view/taskManager/taskListView/taskListReducer.js +23 -1
- package/lib/esm/view/taskManager/taskListView/taskListSelector.js +43 -11
- package/lib/esm/view/transactionDetail/epics/saveTransactionHelper.js +2 -2
- package/lib/esm/view/transactionDetail/transactionDetailLocalDataHelper.js +14 -16
- package/lib/index.d.ts +12 -15
- package/lib/index.js +34 -42
- package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
- package/lib/view/aiCfoView/aiCfoViewPayload.d.ts +0 -7
- package/lib/view/aiCfoView/aiCfoViewReducer.d.ts +1 -15
- package/lib/view/aiCfoView/aiCfoViewReducer.js +2 -83
- package/lib/view/aiCfoView/aiCfoViewSelector.d.ts +1 -4
- package/lib/view/aiCfoView/aiCfoViewSelector.js +2 -9
- package/lib/view/aiCfoView/aiCfoViewState.d.ts +1 -15
- package/lib/view/auditReportView/auditReportViewState.d.ts +1 -1
- package/lib/view/classList/fetchClassListEpic.d.ts +1 -1
- package/lib/view/classList/fetchClassListEpic.js +1 -8
- package/lib/view/commonVendorView/vendorView/vendorViewSelector.d.ts +0 -1
- package/lib/view/commonVendorView/vendorView/vendorViewSelector.js +5 -18
- package/lib/view/commonVendorView/vendorsTabVendorView/vendorsTabVendorViewSelector.d.ts +0 -1
- package/lib/view/commonVendorView/vendorsTabVendorView/vendorsTabVendorViewSelector.js +2 -6
- package/lib/view/companyTaskManagerView/companyTaskManagerViewReducer.d.ts +2 -2
- package/lib/view/companyView/types/cockpitTypes.d.ts +1 -1
- package/lib/view/companyView/types/cockpitTypes.js +1 -0
- package/lib/view/expenseAutomationView/epics/jeSchedule/fetchJeSchedulesEpic.js +2 -2
- package/lib/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.js +1 -1
- package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +3 -4
- package/lib/view/expenseAutomationView/expenseAutomationViewSelector.js +1 -0
- package/lib/view/expenseAutomationView/helpers/saveTransactionHelper.js +2 -2
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +2 -2
- package/lib/view/expenseAutomationView/payload/jeSchedulesPayload.d.ts +1 -1
- package/lib/view/expenseAutomationView/reducers/jeSchedulesViewReducer.d.ts +2 -2
- package/lib/view/expenseAutomationView/reducers/jeSchedulesViewReducer.js +2 -18
- package/lib/view/expenseAutomationView/selectorTypes/jeSchedulesSelectorTypes.d.ts +0 -2
- package/lib/view/expenseAutomationView/selectors/fluxAnalysisViewSelector.js +2 -10
- package/lib/view/expenseAutomationView/selectors/jeSchedulesViewSelector.js +6 -63
- package/lib/view/expenseAutomationView/selectors/missingReceiptsSelector.js +4 -12
- package/lib/view/expenseAutomationView/selectors/reconciliationViewSelector.js +9 -22
- package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +5 -11
- package/lib/view/expenseAutomationView/types/jeSchedulesViewState.d.ts +0 -5
- package/lib/view/expenseAutomationView/types/jeSchedulesViewState.js +0 -20
- package/lib/view/profitAndLossClassesView/profitAndLossClassesByClassHorizontalSelector.js +0 -3
- package/lib/view/scheduleView/scheduleListView/scheduleListTypes.d.ts +1 -1
- package/lib/view/spendManagement/billPay/billList/billListSelector.js +0 -10
- package/lib/view/spendManagement/billPay/billList/billListState.d.ts +1 -1
- package/lib/view/spendManagement/billPay/billList/billListState.js +0 -1
- package/lib/view/spendManagement/billPay/billPayReview/billPayReviewSelector.js +3 -7
- package/lib/view/spendManagement/billPay/billPaySetupApproverView/billPaySetupApproverViewSelector.js +5 -5
- package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/fetchBillPayApproversDetailsEpic.js +2 -7
- package/lib/view/spendManagement/billPay/editBillView/editBillViewSelector.js +6 -13
- package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardList.d.ts +1 -1
- package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardList.js +0 -1
- package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardListSelector.js +0 -2
- package/lib/view/spendManagement/reimbursement/editRemiView/editRemiViewSelector.js +3 -6
- package/lib/view/spendManagement/reimbursement/remiListView/remiListSelector.d.ts +0 -1
- package/lib/view/spendManagement/reimbursement/remiListView/remiListSelector.js +0 -12
- package/lib/view/spendManagement/reimbursement/remiListView/remiListState.d.ts +1 -1
- package/lib/view/spendManagement/reimbursement/remiListView/remiListState.js +0 -1
- package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.d.ts +2 -1
- package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +2 -0
- package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.d.ts +2 -1
- package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +4 -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 +68 -0
- package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.d.ts +8 -0
- package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +58 -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 +50 -2
- package/lib/view/taskManager/taskDetailView/taskDetailSelector.d.ts +2 -0
- package/lib/view/taskManager/taskDetailView/taskDetailSelector.js +5 -2
- package/lib/view/taskManager/taskListView/taskList.d.ts +1 -1
- package/lib/view/taskManager/taskListView/taskList.js +1 -0
- package/lib/view/taskManager/taskListView/taskListReducer.d.ts +3 -3
- package/lib/view/taskManager/taskListView/taskListReducer.js +24 -2
- package/lib/view/taskManager/taskListView/taskListSelector.d.ts +6 -2
- package/lib/view/taskManager/taskListView/taskListSelector.js +43 -11
- package/lib/view/transactionDetail/epics/saveTransactionHelper.js +2 -2
- package/lib/view/transactionDetail/transactionDetailLocalDataHelper.js +14 -16
- package/package.json +1 -1
- package/lib/common/aiCfo/aiCfoSuggestedQuestionsPageContext.d.ts +0 -19
- package/lib/common/aiCfo/aiCfoSuggestedQuestionsPageContext.js +0 -2
- package/lib/esm/common/aiCfo/aiCfoSuggestedQuestionsPageContext.js +0 -1
- package/lib/esm/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.js +0 -29
- package/lib/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.d.ts +0 -8
- package/lib/view/aiCfoView/epics/fetchSuggestedQuestionsEpic.js +0 -33
|
@@ -45,7 +45,6 @@ export const getRemiList = (state, currentTimePeriod, isBulkActionFeatureEnabled
|
|
|
45
45
|
return {
|
|
46
46
|
...reimbursement,
|
|
47
47
|
submittedBy: getUserByUserId(userState, reimbursement.reimburseeUserId),
|
|
48
|
-
createdByUser: getUserByUserId(userState, reimbursement.createdBy),
|
|
49
48
|
approvers: approvers,
|
|
50
49
|
};
|
|
51
50
|
});
|
|
@@ -416,14 +415,6 @@ export const getRemiListOnSort = (sortKey, sortOrder, currentTab, reimbursements
|
|
|
416
415
|
reimbursementsWithNoSortKeyValue.push(reimbursement);
|
|
417
416
|
}
|
|
418
417
|
break;
|
|
419
|
-
case 'createdBy':
|
|
420
|
-
if (reimbursement.createdByUser != null) {
|
|
421
|
-
reimbursementsWithSortKeyValue.push(reimbursement);
|
|
422
|
-
}
|
|
423
|
-
else {
|
|
424
|
-
reimbursementsWithNoSortKeyValue.push(reimbursement);
|
|
425
|
-
}
|
|
426
|
-
break;
|
|
427
418
|
}
|
|
428
419
|
});
|
|
429
420
|
const getColumnWiseSortOrder = (sortOrder) => {
|
|
@@ -431,7 +422,6 @@ export const getRemiListOnSort = (sortKey, sortOrder, currentTab, reimbursements
|
|
|
431
422
|
case 'reportName':
|
|
432
423
|
case 'type':
|
|
433
424
|
case 'status':
|
|
434
|
-
case 'createdBy':
|
|
435
425
|
return sortOrder === 'ascending' ? 'asc' : 'desc';
|
|
436
426
|
default:
|
|
437
427
|
return sortOrder === 'ascending' ? 'desc' : 'asc';
|
|
@@ -451,8 +441,6 @@ export const getRemiListOnSort = (sortKey, sortOrder, currentTab, reimbursements
|
|
|
451
441
|
return getStatusPerTab(reimbursement);
|
|
452
442
|
case 'amount':
|
|
453
443
|
return reimbursement.amount.amount ?? 0;
|
|
454
|
-
case 'createdBy':
|
|
455
|
-
return `${reimbursement.createdByUser?.firstName ?? ''} ${reimbursement.createdByUser?.lastName ?? ''}`.toLowerCase();
|
|
456
444
|
}
|
|
457
445
|
}, getColumnWiseSortOrder(sortOrder));
|
|
458
446
|
return [
|
|
@@ -4,6 +4,7 @@ import { openSnackbar } from '../../../../entity/snackbar/snackbarReducer';
|
|
|
4
4
|
import { updateTasks } from '../../../../entity/task/taskReducer';
|
|
5
5
|
import { getTaskById } from '../../../../entity/task/taskSelector';
|
|
6
6
|
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../responsePayload';
|
|
7
|
+
import { removeTaskFromList } from '../../taskListView/taskListReducer';
|
|
7
8
|
import { archiveTask, archiveTaskSuccessOrFailure } from '../taskDetailReducer';
|
|
8
9
|
// Epic function to handle archiving of tasks
|
|
9
10
|
export const archiveTaskEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(archiveTask.match), mergeMap((action) => handleArchiveTask(action.payload.taskId, state$, zeniAPI)));
|
|
@@ -25,6 +26,7 @@ const handleApiResponse = (response, taskId) => {
|
|
|
25
26
|
response.data.tasks.length > 0) {
|
|
26
27
|
const fetchActions = [
|
|
27
28
|
updateTasks(response.data.tasks),
|
|
29
|
+
removeTaskFromList(taskId),
|
|
28
30
|
archiveTaskSuccessOrFailure({
|
|
29
31
|
fetchState: 'Completed',
|
|
30
32
|
taskId,
|
|
@@ -2,6 +2,7 @@ import { from, of } from 'rxjs';
|
|
|
2
2
|
import { catchError, filter, mergeMap } from 'rxjs/operators';
|
|
3
3
|
import { openSnackbar } from '../../../../entity/snackbar/snackbarReducer';
|
|
4
4
|
import { createZeniAPIStatus, isSuccessStatus, } from '../../../../responsePayload';
|
|
5
|
+
import { removeTaskFromList } from '../../taskListView/taskListReducer';
|
|
5
6
|
import { deleteTask, deleteTaskSuccessOrFailure } from '../taskDetailReducer';
|
|
6
7
|
export const deleteTaskEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(deleteTask.match), mergeMap((action) => {
|
|
7
8
|
const { taskId } = action.payload;
|
|
@@ -10,6 +11,9 @@ export const deleteTaskEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filt
|
|
|
10
11
|
.pipe(mergeMap((response) => {
|
|
11
12
|
if (isSuccessStatus(response)) {
|
|
12
13
|
const actions = [];
|
|
14
|
+
if (taskId != null) {
|
|
15
|
+
actions.push(removeTaskFromList(taskId));
|
|
16
|
+
}
|
|
13
17
|
actions.push(deleteTaskSuccessOrFailure({ fetchState: 'Completed', taskId }));
|
|
14
18
|
return from(actions);
|
|
15
19
|
}
|
|
@@ -25,6 +25,7 @@ export const initializeTaskToLocalStoreEpic = (actions$, state$) => actions$.pip
|
|
|
25
25
|
savedRecurringEndDate: task.recurringEndDate,
|
|
26
26
|
recurringStartDate: task.recurringStartDate,
|
|
27
27
|
timeSpent: task.timeSpent,
|
|
28
|
+
isPrivate: task.isPrivate,
|
|
28
29
|
};
|
|
29
30
|
const actions = [
|
|
30
31
|
saveTaskUpdatesToLocalStore({ taskDetailLocalData, taskId }),
|
|
@@ -94,5 +94,6 @@ const prepareTaskPayload = (state, taskId, taskGroupId) => {
|
|
|
94
94
|
sync_token: syncToken,
|
|
95
95
|
task_group_ids: taskGroupId != null ? [taskGroupId] : [],
|
|
96
96
|
time_spent: convertHHMMStrToMinutes(localData.timeSpent),
|
|
97
|
+
...(taskId == null ? { is_private: localData.isPrivate ?? false } : {}),
|
|
97
98
|
};
|
|
98
99
|
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { from, of } from 'rxjs';
|
|
2
|
+
import { catchError, filter, mergeMap } from 'rxjs/operators';
|
|
3
|
+
import { openSnackbar } from '../../../../entity/snackbar/snackbarReducer';
|
|
4
|
+
import { updateTasks } from '../../../../entity/task/taskReducer';
|
|
5
|
+
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../responsePayload';
|
|
6
|
+
import { date } from '../../../../zeniDayJS';
|
|
7
|
+
import { removeTaskFromList } from '../../taskListView/taskListReducer';
|
|
8
|
+
import { snoozeTask, snoozeTaskSuccessOrFailure } from '../taskDetailReducer';
|
|
9
|
+
export const snoozeTaskEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(snoozeTask.match), mergeMap((action) => handleSnoozeTask(action.payload.taskId, action.payload.snoozedUntil, zeniAPI)));
|
|
10
|
+
const formatSnoozedUntilForDisplay = (snoozedUntil) => date(snoozedUntil).format('MMM D, h:mm A');
|
|
11
|
+
const handleSnoozeTask = (taskId, snoozedUntil, zeniAPI) => {
|
|
12
|
+
const snoozeTaskApi$ = zeniAPI.postAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks/${taskId}/snooze`, { snoozed_until: snoozedUntil });
|
|
13
|
+
return snoozeTaskApi$.pipe(mergeMap((response) => handleApiResponse(response, taskId, snoozedUntil)), catchError((error) => of(snoozeTaskSuccessOrFailure({
|
|
14
|
+
fetchState: 'Error',
|
|
15
|
+
taskId,
|
|
16
|
+
error: createZeniAPIStatus('Unexpected Error', 'Snooze Task REST API call errored out: ' + JSON.stringify(error)),
|
|
17
|
+
}))));
|
|
18
|
+
};
|
|
19
|
+
const handleApiResponse = (response, taskId, snoozedUntil) => {
|
|
20
|
+
if (isSuccessResponse(response) &&
|
|
21
|
+
response.data != null &&
|
|
22
|
+
response.data.tasks.length > 0) {
|
|
23
|
+
const fetchActions = [
|
|
24
|
+
updateTasks(response.data.tasks),
|
|
25
|
+
removeTaskFromList(taskId),
|
|
26
|
+
snoozeTaskSuccessOrFailure({
|
|
27
|
+
fetchState: 'Completed',
|
|
28
|
+
taskId,
|
|
29
|
+
}),
|
|
30
|
+
openSnackbar({
|
|
31
|
+
messageSection: 'snooze_task',
|
|
32
|
+
messageText: 'success',
|
|
33
|
+
type: 'success',
|
|
34
|
+
variables: [
|
|
35
|
+
{
|
|
36
|
+
variableName: '_snoozed_until_',
|
|
37
|
+
variableValue: formatSnoozedUntilForDisplay(snoozedUntil),
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
}),
|
|
41
|
+
];
|
|
42
|
+
return from(fetchActions);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
return from([
|
|
46
|
+
snoozeTaskSuccessOrFailure({
|
|
47
|
+
fetchState: 'Error',
|
|
48
|
+
taskId,
|
|
49
|
+
error: response.status,
|
|
50
|
+
}),
|
|
51
|
+
openSnackbar({
|
|
52
|
+
messageSection: 'snooze_task',
|
|
53
|
+
messageText: 'failed',
|
|
54
|
+
type: 'error',
|
|
55
|
+
variables: [
|
|
56
|
+
{
|
|
57
|
+
variableName: '_api-error_',
|
|
58
|
+
variableValue: response.status.message,
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
}),
|
|
62
|
+
]);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { from, of } from 'rxjs';
|
|
2
|
+
import { catchError, filter, mergeMap } from 'rxjs/operators';
|
|
3
|
+
import { openSnackbar } from '../../../../entity/snackbar/snackbarReducer';
|
|
4
|
+
import { updateTasks } from '../../../../entity/task/taskReducer';
|
|
5
|
+
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../responsePayload';
|
|
6
|
+
import { snoozeTaskSuccessOrFailure, unsnoozeTask, } from '../taskDetailReducer';
|
|
7
|
+
export const unsnoozeTaskEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(unsnoozeTask.match), mergeMap((action) => handleUnsnoozeTask(action.payload.taskId, zeniAPI)));
|
|
8
|
+
const handleUnsnoozeTask = (taskId, zeniAPI) => {
|
|
9
|
+
const unsnoozeTaskApi$ = zeniAPI.deleteAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks/${taskId}/snooze`);
|
|
10
|
+
return unsnoozeTaskApi$.pipe(mergeMap((response) => handleApiResponse(response, taskId)), catchError((error) => of(snoozeTaskSuccessOrFailure({
|
|
11
|
+
fetchState: 'Error',
|
|
12
|
+
taskId,
|
|
13
|
+
error: createZeniAPIStatus('Unexpected Error', 'Unsnooze Task REST API call errored out: ' + JSON.stringify(error)),
|
|
14
|
+
}))));
|
|
15
|
+
};
|
|
16
|
+
const handleApiResponse = (response, taskId) => {
|
|
17
|
+
if (isSuccessResponse(response) &&
|
|
18
|
+
response.data != null &&
|
|
19
|
+
response.data.tasks.length > 0) {
|
|
20
|
+
const fetchActions = [
|
|
21
|
+
updateTasks(response.data.tasks),
|
|
22
|
+
snoozeTaskSuccessOrFailure({
|
|
23
|
+
fetchState: 'Completed',
|
|
24
|
+
taskId,
|
|
25
|
+
}),
|
|
26
|
+
openSnackbar({
|
|
27
|
+
messageSection: 'unsnooze_task',
|
|
28
|
+
messageText: 'success',
|
|
29
|
+
type: 'success',
|
|
30
|
+
}),
|
|
31
|
+
];
|
|
32
|
+
return from(fetchActions);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
return from([
|
|
36
|
+
snoozeTaskSuccessOrFailure({
|
|
37
|
+
fetchState: 'Error',
|
|
38
|
+
taskId,
|
|
39
|
+
error: response.status,
|
|
40
|
+
}),
|
|
41
|
+
openSnackbar({
|
|
42
|
+
messageSection: 'unsnooze_task',
|
|
43
|
+
messageText: 'failed',
|
|
44
|
+
type: 'error',
|
|
45
|
+
variables: [
|
|
46
|
+
{
|
|
47
|
+
variableName: '_api-error_',
|
|
48
|
+
variableValue: response.status.message,
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
}),
|
|
52
|
+
]);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
@@ -185,6 +185,54 @@ const taskDetailView = createSlice({
|
|
|
185
185
|
draft.editTaskStateById[taskId].archiveStatus.fetchState = fetchState;
|
|
186
186
|
draft.editTaskStateById[taskId].archiveStatus.error = error;
|
|
187
187
|
},
|
|
188
|
+
snoozeTask: {
|
|
189
|
+
reducer(draft, action) {
|
|
190
|
+
const { taskId } = action.payload;
|
|
191
|
+
draft.editTaskStateById[taskId] = {
|
|
192
|
+
...(draft.editTaskStateById[taskId] != null
|
|
193
|
+
? draft.editTaskStateById[taskId]
|
|
194
|
+
: initialTaskDetail),
|
|
195
|
+
snoozeStatus: {
|
|
196
|
+
fetchState: 'In-Progress',
|
|
197
|
+
error: undefined,
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
},
|
|
201
|
+
prepare(taskId, snoozedUntil) {
|
|
202
|
+
return {
|
|
203
|
+
payload: {
|
|
204
|
+
taskId,
|
|
205
|
+
snoozedUntil,
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
snoozeTaskSuccessOrFailure(draft, action) {
|
|
211
|
+
const { taskId, fetchState, error } = action.payload;
|
|
212
|
+
draft.editTaskStateById[taskId].snoozeStatus.fetchState = fetchState;
|
|
213
|
+
draft.editTaskStateById[taskId].snoozeStatus.error = error;
|
|
214
|
+
},
|
|
215
|
+
unsnoozeTask: {
|
|
216
|
+
reducer(draft, action) {
|
|
217
|
+
const { taskId } = action.payload;
|
|
218
|
+
draft.editTaskStateById[taskId] = {
|
|
219
|
+
...(draft.editTaskStateById[taskId] != null
|
|
220
|
+
? draft.editTaskStateById[taskId]
|
|
221
|
+
: initialTaskDetail),
|
|
222
|
+
snoozeStatus: {
|
|
223
|
+
fetchState: 'In-Progress',
|
|
224
|
+
error: undefined,
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
},
|
|
228
|
+
prepare(taskId) {
|
|
229
|
+
return {
|
|
230
|
+
payload: {
|
|
231
|
+
taskId,
|
|
232
|
+
},
|
|
233
|
+
};
|
|
234
|
+
},
|
|
235
|
+
},
|
|
188
236
|
deleteTask: {
|
|
189
237
|
reducer(draft, action) {
|
|
190
238
|
const { taskId } = action.payload;
|
|
@@ -270,5 +318,5 @@ const taskDetailView = createSlice({
|
|
|
270
318
|
},
|
|
271
319
|
},
|
|
272
320
|
});
|
|
273
|
-
export const { fetchTaskDetailPage, fetchTaskDetail, initializeTaskToLocalStore, updateEditTaskFetchStatus, saveTaskUpdatesToLocalStore, discardTaskUpdatesInLocalStore, saveTaskDetail, archiveTask, archiveTaskSuccessOrFailure, saveTaskSuccessOrFailure, deleteTask, removeTaskDetail, deleteTaskSuccessOrFailure, fetchTaskHistory, updateTaskHistory, updateTaskHistoryFetchStatus, clearTaskDetail, updateCreatedTagToLocalStore, updateDeletedTagToLocalStore, } = taskDetailView.actions;
|
|
321
|
+
export const { fetchTaskDetailPage, fetchTaskDetail, initializeTaskToLocalStore, updateEditTaskFetchStatus, saveTaskUpdatesToLocalStore, discardTaskUpdatesInLocalStore, saveTaskDetail, archiveTask, archiveTaskSuccessOrFailure, snoozeTask, snoozeTaskSuccessOrFailure, unsnoozeTask, saveTaskSuccessOrFailure, deleteTask, removeTaskDetail, deleteTaskSuccessOrFailure, fetchTaskHistory, updateTaskHistory, updateTaskHistoryFetchStatus, clearTaskDetail, updateCreatedTagToLocalStore, updateDeletedTagToLocalStore, } = taskDetailView.actions;
|
|
274
322
|
export default taskDetailView.reducer;
|
|
@@ -21,11 +21,13 @@ export const getTaskDetail = (state, taskId) => {
|
|
|
21
21
|
};
|
|
22
22
|
let taskHistory = [];
|
|
23
23
|
let createdByUser = undefined;
|
|
24
|
+
let snoozedUntil = undefined;
|
|
24
25
|
if (taskId != null && sourceTaskDetail != null) {
|
|
25
26
|
const taskEntity = getTaskById(taskState, taskId);
|
|
26
27
|
const fileIdsInEntity = taskEntity?.fileIds ?? [];
|
|
27
28
|
if (taskEntity != null) {
|
|
28
29
|
createdByUser = getUserAndUserRole(userState, userRoleState, addressState, taskEntity.createdBy);
|
|
30
|
+
snoozedUntil = taskEntity.snoozedUntil;
|
|
29
31
|
}
|
|
30
32
|
if (fileIdsInEntity.length > 0) {
|
|
31
33
|
fetchStatus = reduceFetchState([
|
|
@@ -74,6 +76,7 @@ export const getTaskDetail = (state, taskId) => {
|
|
|
74
76
|
version: 0,
|
|
75
77
|
createdByUser,
|
|
76
78
|
showTaskDetailFormFooter,
|
|
79
|
+
snoozedUntil,
|
|
77
80
|
};
|
|
78
81
|
};
|
|
79
82
|
export const allTaskStatus = [
|
|
@@ -91,11 +94,11 @@ export const allTaskStatus = [
|
|
|
91
94
|
},
|
|
92
95
|
{
|
|
93
96
|
code: 'done',
|
|
94
|
-
name: '
|
|
97
|
+
name: 'Done',
|
|
95
98
|
},
|
|
96
99
|
{
|
|
97
100
|
code: 'resolved',
|
|
98
|
-
name: '
|
|
101
|
+
name: 'Resolved',
|
|
99
102
|
},
|
|
100
103
|
];
|
|
101
104
|
export const allTaskPriority = [
|
|
@@ -404,12 +404,34 @@ const taskList = createSlice({
|
|
|
404
404
|
draft.updateTasksFetchState.fetchState = 'Error';
|
|
405
405
|
draft.updateTasksFetchState.error = action.payload.error;
|
|
406
406
|
},
|
|
407
|
+
removeTaskFromList(draft, action) {
|
|
408
|
+
const taskIdToRemove = action.payload;
|
|
409
|
+
draft.taskIds = draft.taskIds.filter((id) => id !== taskIdToRemove);
|
|
410
|
+
Object.keys(draft.taskIdsByGroupsIds).forEach((groupId) => {
|
|
411
|
+
draft.taskIdsByGroupsIds[groupId] = draft.taskIdsByGroupsIds[groupId].filter((id) => id !== taskIdToRemove);
|
|
412
|
+
});
|
|
413
|
+
Object.keys(draft.taskIdsByPriority).forEach((key) => {
|
|
414
|
+
draft.taskIdsByPriority[key] = draft.taskIdsByPriority[key].filter((id) => id !== taskIdToRemove);
|
|
415
|
+
});
|
|
416
|
+
Object.keys(draft.taskIdsByStatus).forEach((key) => {
|
|
417
|
+
draft.taskIdsByStatus[key] = draft.taskIdsByStatus[key].filter((id) => id !== taskIdToRemove);
|
|
418
|
+
});
|
|
419
|
+
Object.keys(draft.taskIdsByDueDate).forEach((key) => {
|
|
420
|
+
draft.taskIdsByDueDate[key] = draft.taskIdsByDueDate[key].filter((id) => id !== taskIdToRemove);
|
|
421
|
+
});
|
|
422
|
+
Object.keys(draft.taskIdsByAssignees).forEach((key) => {
|
|
423
|
+
draft.taskIdsByAssignees[key] = draft.taskIdsByAssignees[key].filter((id) => id !== taskIdToRemove);
|
|
424
|
+
});
|
|
425
|
+
Object.keys(draft.taskIdsByTags).forEach((key) => {
|
|
426
|
+
draft.taskIdsByTags[key] = draft.taskIdsByTags[key].filter((id) => id !== taskIdToRemove);
|
|
427
|
+
});
|
|
428
|
+
},
|
|
407
429
|
clearTaskList(draft) {
|
|
408
430
|
Object.assign(draft, initialState);
|
|
409
431
|
},
|
|
410
432
|
},
|
|
411
433
|
});
|
|
412
|
-
export const { fetchTaskListPage, fetchTaskList, updateTaskList, updateTaskListFetchStatus, updateTaskListSearchText, updateTaskListUIState, updateTaskFilters, updateTaskListOnNewGroupCreationSuccess, bulkUpdateTaskList, updateTasksListOnBulkUpdateTasksSuccess, updateTasksListOnBulkUpdateTasksFailure, initiateTaskListLocalData, updateTaskListLocalData, updateTaskListOnTaskGroupDeletion, dragNDropTasks, updateTaskListOnNewTaskCreationSuccess, updateTaskListOnTaskGroupNameUpdate, updateTaskFromListView, updateTasksListOnUpdateTaskSuccess, updateTasksListOnUpdateTaskFailure, updateTaskListOnCreateTaskFromTemplateSuccess, clearTaskList, } = taskList.actions;
|
|
434
|
+
export const { fetchTaskListPage, fetchTaskList, updateTaskList, updateTaskListFetchStatus, updateTaskListSearchText, updateTaskListUIState, updateTaskFilters, updateTaskListOnNewGroupCreationSuccess, bulkUpdateTaskList, updateTasksListOnBulkUpdateTasksSuccess, updateTasksListOnBulkUpdateTasksFailure, initiateTaskListLocalData, updateTaskListLocalData, updateTaskListOnTaskGroupDeletion, dragNDropTasks, updateTaskListOnNewTaskCreationSuccess, updateTaskListOnTaskGroupNameUpdate, updateTaskFromListView, updateTasksListOnUpdateTaskSuccess, updateTasksListOnUpdateTaskFailure, updateTaskListOnCreateTaskFromTemplateSuccess, removeTaskFromList, clearTaskList, } = taskList.actions;
|
|
413
435
|
export default taskList.reducer;
|
|
414
436
|
/**
|
|
415
437
|
* helpers
|
|
@@ -17,8 +17,12 @@ import { allTaskPriority, allTaskStatus, } from '../taskDetailView/taskDetailSel
|
|
|
17
17
|
import { DUE_DATE_GROUP_KEYS, } from './taskList';
|
|
18
18
|
import { initialState } from './taskListReducer';
|
|
19
19
|
const isDefaultFilters = (taskListState) => {
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
if (taskListState.uiState.searchText !== initialState.uiState.searchText) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
const hasNoActiveFilters = taskListState.filters.categories == null ||
|
|
24
|
+
taskListState.filters.categories.length === 0;
|
|
25
|
+
return (hasNoActiveFilters || isEqual(taskListState.filters, initialState.filters));
|
|
22
26
|
};
|
|
23
27
|
const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
|
|
24
28
|
const tasksInOrder = orderBy(tasksList, (task) => {
|
|
@@ -34,8 +38,12 @@ const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
|
|
|
34
38
|
return task.status.name;
|
|
35
39
|
case 'priority':
|
|
36
40
|
return ALL_PRIORITY_CODE.indexOf(task.priority.code);
|
|
41
|
+
case 'assignee':
|
|
42
|
+
return task.firstAssigneeSortName;
|
|
37
43
|
case 'timeSpent':
|
|
38
44
|
return task.timeSpent;
|
|
45
|
+
case 'visibility':
|
|
46
|
+
return task.isPrivate ? 1 : 0;
|
|
39
47
|
case 'name':
|
|
40
48
|
default:
|
|
41
49
|
return task.name.toLowerCase();
|
|
@@ -43,7 +51,7 @@ const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
|
|
|
43
51
|
}, sortOrder);
|
|
44
52
|
return tasksInOrder;
|
|
45
53
|
};
|
|
46
|
-
const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRoleState, addressState, taskIds, tagState, }) => {
|
|
54
|
+
const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRoleState, addressState, taskIds, tagState, userGroupsState, }) => {
|
|
47
55
|
const { sortKey, searchText } = taskListState.uiState;
|
|
48
56
|
const sortOrder = getSortOrder(taskListState.uiState.sortOrder);
|
|
49
57
|
const tasks = taskIds
|
|
@@ -53,7 +61,18 @@ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRole
|
|
|
53
61
|
const assigneeUsers = task.assignees
|
|
54
62
|
.map((userId) => getUserAndUserRole(userState, userRoleState, addressState, userId))
|
|
55
63
|
.filter((value) => value != null);
|
|
56
|
-
|
|
64
|
+
// Compute sort name matching display order: users first, then groups
|
|
65
|
+
const firstUser = assigneeUsers[0]?.user;
|
|
66
|
+
const firstUserName = (firstUser != null ? getUserName(firstUser) : '') ||
|
|
67
|
+
firstUser?.email ||
|
|
68
|
+
'';
|
|
69
|
+
const firstGroupName = task.groupAssignees
|
|
70
|
+
.map((gId) => userGroupsState.userGroupByUserGroupId[gId]?.name)
|
|
71
|
+
.find((name) => name != null && name !== '');
|
|
72
|
+
const firstAssigneeSortName = (firstUserName ||
|
|
73
|
+
firstGroupName ||
|
|
74
|
+
'').toLowerCase();
|
|
75
|
+
return { ...task, assigneeUsers, firstAssigneeSortName };
|
|
57
76
|
}
|
|
58
77
|
return undefined;
|
|
59
78
|
})
|
|
@@ -62,7 +81,7 @@ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRole
|
|
|
62
81
|
const sortedTaskList = sortTasksList(tagState, filteredTaskList, sortKey, sortOrder);
|
|
63
82
|
return sortedTaskList;
|
|
64
83
|
};
|
|
65
|
-
const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupState, taskGroupViewState, userState, userRoleState, addressState, tagState, }) => {
|
|
84
|
+
const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupState, taskGroupViewState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
66
85
|
const { taskGroupsIds } = taskGroupViewState;
|
|
67
86
|
const taskGroupsWithTasksList = taskGroupsIds
|
|
68
87
|
.map((taskGroupId) => {
|
|
@@ -76,6 +95,7 @@ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupStat
|
|
|
76
95
|
addressState,
|
|
77
96
|
taskIds,
|
|
78
97
|
tagState,
|
|
98
|
+
userGroupsState,
|
|
79
99
|
});
|
|
80
100
|
if (taskGroup != null) {
|
|
81
101
|
return {
|
|
@@ -109,7 +129,7 @@ const getTaskListGroupedByGroupName = ({ taskListState, taskState, taskGroupStat
|
|
|
109
129
|
}
|
|
110
130
|
return sortedTaskGroupsWithTasksList;
|
|
111
131
|
};
|
|
112
|
-
export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
132
|
+
export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
113
133
|
const assigneeGroups = Object.keys(taskListState.taskIdsByAssignees);
|
|
114
134
|
const taskGroupsWithTasksList = assigneeGroups.map((groupKey) => {
|
|
115
135
|
const taskIds = taskListState.taskIdsByAssignees[groupKey];
|
|
@@ -121,6 +141,7 @@ export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userSt
|
|
|
121
141
|
addressState,
|
|
122
142
|
taskIds,
|
|
123
143
|
tagState,
|
|
144
|
+
userGroupsState,
|
|
124
145
|
});
|
|
125
146
|
const assigneeIds = groupKey.split(',');
|
|
126
147
|
const groupName = getUsersByUserIds(userState, assigneeIds)
|
|
@@ -141,7 +162,7 @@ export const getTaskListGroupedByAssignees = ({ taskListState, taskState, userSt
|
|
|
141
162
|
}
|
|
142
163
|
return taskGroupsWithTasksList;
|
|
143
164
|
};
|
|
144
|
-
export const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
165
|
+
export const getTaskListGroupedByPriority = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
145
166
|
const taskGroupsWithTasksList = ALL_PRIORITY_CODE.map((groupKey) => {
|
|
146
167
|
const taskIds = taskListState.taskIdsByPriority[groupKey] ?? [];
|
|
147
168
|
const tasksWithUserDetails = getTasksWithUserDetails({
|
|
@@ -152,6 +173,7 @@ export const getTaskListGroupedByPriority = ({ taskListState, taskState, userSta
|
|
|
152
173
|
addressState,
|
|
153
174
|
taskIds,
|
|
154
175
|
tagState,
|
|
176
|
+
userGroupsState,
|
|
155
177
|
});
|
|
156
178
|
return {
|
|
157
179
|
groupName: allTaskPriority.find((priority) => priority.code === groupKey)?.name ??
|
|
@@ -166,7 +188,7 @@ export const getTaskListGroupedByPriority = ({ taskListState, taskState, userSta
|
|
|
166
188
|
}
|
|
167
189
|
return taskGroupsWithTasksList;
|
|
168
190
|
};
|
|
169
|
-
const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
191
|
+
const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
170
192
|
const taskGroupsWithTasksList = ALL_TASK_STATUS_CODE.map((groupKey) => {
|
|
171
193
|
const taskIds = taskListState.taskIdsByStatus[groupKey] ?? [];
|
|
172
194
|
const tasksWithUserDetails = getTasksWithUserDetails({
|
|
@@ -177,6 +199,7 @@ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userR
|
|
|
177
199
|
addressState,
|
|
178
200
|
taskIds,
|
|
179
201
|
tagState,
|
|
202
|
+
userGroupsState,
|
|
180
203
|
});
|
|
181
204
|
return {
|
|
182
205
|
groupName: allTaskStatus.find((taskStatus) => taskStatus.code === groupKey)
|
|
@@ -191,7 +214,7 @@ const getTaskListGroupedByStatus = ({ taskListState, taskState, userState, userR
|
|
|
191
214
|
}
|
|
192
215
|
return taskGroupsWithTasksList;
|
|
193
216
|
};
|
|
194
|
-
const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
217
|
+
const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
195
218
|
const tagGroups = Object.keys(taskListState.taskIdsByTags);
|
|
196
219
|
const taskGroupsWithTasksList = tagGroups.map((groupKey) => {
|
|
197
220
|
const taskIds = taskListState.taskIdsByTags[groupKey];
|
|
@@ -203,6 +226,7 @@ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRol
|
|
|
203
226
|
addressState,
|
|
204
227
|
taskIds,
|
|
205
228
|
tagState,
|
|
229
|
+
userGroupsState,
|
|
206
230
|
});
|
|
207
231
|
const tagIds = groupKey.split(',');
|
|
208
232
|
const groupName = getTagsByIds(tagState, tagIds)
|
|
@@ -222,7 +246,7 @@ const getTaskListGroupedByTags = ({ taskListState, taskState, userState, userRol
|
|
|
222
246
|
}
|
|
223
247
|
return taskGroupsWithTasksList;
|
|
224
248
|
};
|
|
225
|
-
const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }) => {
|
|
249
|
+
const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }) => {
|
|
226
250
|
const taskGroupsWithTasksList = DUE_DATE_GROUP_KEYS.map((groupKey) => {
|
|
227
251
|
const taskIds = taskListState.taskIdsByDueDate[groupKey];
|
|
228
252
|
const tasksWithUserDetails = getTasksWithUserDetails({
|
|
@@ -233,6 +257,7 @@ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, user
|
|
|
233
257
|
addressState,
|
|
234
258
|
taskIds,
|
|
235
259
|
tagState,
|
|
260
|
+
userGroupsState,
|
|
236
261
|
});
|
|
237
262
|
return {
|
|
238
263
|
groupName: groupKey,
|
|
@@ -246,7 +271,7 @@ const getTaskListGroupedByDueDate = ({ taskListState, taskState, userState, user
|
|
|
246
271
|
}
|
|
247
272
|
return taskGroupsWithTasksList;
|
|
248
273
|
};
|
|
249
|
-
const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRoleState, addressState, taskGroupState, taskGroupViewState, tagState, }) => {
|
|
274
|
+
const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRoleState, addressState, taskGroupState, taskGroupViewState, tagState, userGroupsState, }) => {
|
|
250
275
|
const { groupByKey } = taskListState.uiState;
|
|
251
276
|
if (groupByKey === 'groupName') {
|
|
252
277
|
return getTaskListGroupedByGroupName({
|
|
@@ -258,6 +283,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
258
283
|
taskGroupState,
|
|
259
284
|
taskGroupViewState,
|
|
260
285
|
tagState,
|
|
286
|
+
userGroupsState,
|
|
261
287
|
});
|
|
262
288
|
}
|
|
263
289
|
if (groupByKey === 'assignee') {
|
|
@@ -268,6 +294,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
268
294
|
userRoleState,
|
|
269
295
|
addressState,
|
|
270
296
|
tagState,
|
|
297
|
+
userGroupsState,
|
|
271
298
|
});
|
|
272
299
|
}
|
|
273
300
|
if (groupByKey === 'priority') {
|
|
@@ -278,6 +305,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
278
305
|
userRoleState,
|
|
279
306
|
addressState,
|
|
280
307
|
tagState,
|
|
308
|
+
userGroupsState,
|
|
281
309
|
});
|
|
282
310
|
}
|
|
283
311
|
if (groupByKey === 'status') {
|
|
@@ -288,6 +316,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
288
316
|
userRoleState,
|
|
289
317
|
addressState,
|
|
290
318
|
tagState,
|
|
319
|
+
userGroupsState,
|
|
291
320
|
});
|
|
292
321
|
}
|
|
293
322
|
if (groupByKey === 'tag') {
|
|
@@ -298,6 +327,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
298
327
|
userRoleState,
|
|
299
328
|
addressState,
|
|
300
329
|
tagState,
|
|
330
|
+
userGroupsState,
|
|
301
331
|
});
|
|
302
332
|
}
|
|
303
333
|
return getTaskListGroupedByDueDate({
|
|
@@ -307,6 +337,7 @@ const getTaskGroupsWithTaskList = ({ taskListState, taskState, userState, userRo
|
|
|
307
337
|
userRoleState,
|
|
308
338
|
addressState,
|
|
309
339
|
tagState,
|
|
340
|
+
userGroupsState,
|
|
310
341
|
});
|
|
311
342
|
};
|
|
312
343
|
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 +351,7 @@ export const getAllTasks = createSelector((state) => state.taskListState, (state
|
|
|
320
351
|
taskGroupState,
|
|
321
352
|
taskGroupViewState,
|
|
322
353
|
tagState,
|
|
354
|
+
userGroupsState,
|
|
323
355
|
});
|
|
324
356
|
const fetchStateVariables = [
|
|
325
357
|
taskListState,
|
|
@@ -75,8 +75,8 @@ export const toTransactionUpdatesFromTransactionDetailLocalData = (transactionDe
|
|
|
75
75
|
lineItem.account?.qboId !== accountLine.account.qboId &&
|
|
76
76
|
Boolean(lineItem.account?.qboId);
|
|
77
77
|
hasClassChanged =
|
|
78
|
-
(lineItem.class?.qboId
|
|
79
|
-
lineItem.class?.qboId !== accountLine.class
|
|
78
|
+
Boolean(lineItem.class?.qboId) &&
|
|
79
|
+
lineItem.class?.qboId !== accountLine.class.qboId;
|
|
80
80
|
const recommendedAccountBase = toRecommendedAccountBase(lineItem.amount.amount, lineItem.account);
|
|
81
81
|
const recommendedClassBase = toRecommendedClassBase(lineItem.amount.amount, lineItem.class);
|
|
82
82
|
const latestRecommendedCategory = lineItem.recommendedAccount;
|