@zeniai/client-epic-state 5.0.87-betaJK2 → 5.0.87-betaVR1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  2. package/lib/entity/snackbar/snackbarTypes.js +0 -1
  3. package/lib/entity/task/taskPayload.d.ts +0 -1
  4. package/lib/entity/task/taskPayload.js +0 -1
  5. package/lib/entity/task/taskReducer.d.ts +1 -5
  6. package/lib/entity/task/taskReducer.js +2 -8
  7. package/lib/entity/task/taskState.d.ts +0 -1
  8. package/lib/entity/transaction/stateTypes/transactionLine.d.ts +2 -1
  9. package/lib/entity/transaction/stateTypes/transactionLine.js +2 -1
  10. package/lib/epic.d.ts +1 -3
  11. package/lib/epic.js +1 -3
  12. package/lib/esm/entity/snackbar/snackbarTypes.js +0 -1
  13. package/lib/esm/entity/task/taskPayload.js +0 -1
  14. package/lib/esm/entity/task/taskReducer.js +1 -7
  15. package/lib/esm/entity/transaction/stateTypes/transactionLine.js +1 -0
  16. package/lib/esm/epic.js +1 -3
  17. package/lib/esm/index.js +5 -3
  18. package/lib/esm/view/taskManager/taskDetailView/epics/fetchTaskDetailEpic.js +0 -13
  19. package/lib/esm/view/taskManager/taskDetailView/taskDetailReducer.js +2 -51
  20. package/lib/esm/view/taskManager/taskDetailView/taskDetailSelector.js +8 -19
  21. package/lib/esm/view/transactionDetail/journalEntryLinesViewModel.js +149 -0
  22. package/lib/index.d.ts +7 -4
  23. package/lib/index.js +25 -19
  24. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  25. package/lib/view/taskManager/taskDetailView/epics/fetchTaskDetailEpic.d.ts +1 -2
  26. package/lib/view/taskManager/taskDetailView/epics/fetchTaskDetailEpic.js +0 -13
  27. package/lib/view/taskManager/taskDetailView/taskDetail.d.ts +0 -13
  28. package/lib/view/taskManager/taskDetailView/taskDetailReducer.d.ts +2 -14
  29. package/lib/view/taskManager/taskDetailView/taskDetailReducer.js +3 -52
  30. package/lib/view/taskManager/taskDetailView/taskDetailSelector.d.ts +1 -2
  31. package/lib/view/taskManager/taskDetailView/taskDetailSelector.js +6 -17
  32. package/lib/view/transactionDetail/journalEntryLinesViewModel.d.ts +102 -0
  33. package/lib/view/transactionDetail/journalEntryLinesViewModel.js +160 -0
  34. package/package.json +1 -1
  35. package/lib/esm/view/taskManager/taskDetailView/epics/createSubTaskEpic.js +0 -80
  36. package/lib/esm/view/taskManager/taskDetailView/epics/fetchSubTasksEpic.js +0 -36
  37. package/lib/view/taskManager/taskDetailView/epics/createSubTaskEpic.d.ts +0 -9
  38. package/lib/view/taskManager/taskDetailView/epics/createSubTaskEpic.js +0 -84
  39. package/lib/view/taskManager/taskDetailView/epics/fetchSubTasksEpic.d.ts +0 -8
  40. package/lib/view/taskManager/taskDetailView/epics/fetchSubTasksEpic.js +0 -40
package/lib/esm/index.js CHANGED
@@ -174,7 +174,6 @@ import { backgroundRefetchReviewTab, clearExpenseAutomationTransactionsView, fet
174
174
  import { getExpenseAutomationFluxAnalysisView } from './view/expenseAutomationView/selectors/fluxAnalysisViewSelector';
175
175
  import { getExpenseAutomationReconciliationView, isAccountReconReport, } from './view/expenseAutomationView/selectors/reconciliationViewSelector';
176
176
  import { getExpenseAutomationTransactionView, getLastTransferEntryReplacement, } from './view/expenseAutomationView/selectors/transactionCategorizationSelector';
177
- import { TRANSACTION_FILTER_CATEGORIES, applyTransactionFilters, } from './view/expenseAutomationView/transactionFilterHelpers';
178
177
  import { DEFAULT_COMPLETED_SUB_TAB, toCompletedSubTab, } from './view/expenseAutomationView/types/completedSubTab';
179
178
  import { toJEScheduleMainTab as toExpenseAutomationJEScheduleMainTab, toJEScheduleSortKey as toExpenseAutomationJEScheduleSortKey, } from './view/expenseAutomationView/types/jeSchedulesViewState';
180
179
  import { BATCH_FILE_STATUSES, isUnmatchedTabFileStatus, toBatchFileStatus, toBatchStatusValue, toBulkUploadPhase, toBulkUploadResultsTab, toBulkUploadSortKey, toMatchSource, toMissingReceiptsTab, } from './view/expenseAutomationView/types/missingReceiptsViewState';
@@ -339,6 +338,7 @@ import { getRemiBusinessVerificationDetails, getRemiSetupViewDetails, } from './
339
338
  import { approveOrRejectRemisBulkAction, autoReviewPendingApprovalRemis, cancelOrDeleteRemisBulkAction, clearAllRemisFromBulkActionList, clearRemiBulkActionView, incrementRemiBulkActionProcessedCount, removeRemiFromBulkActionList, reviewDraftRemisBulkAction, submitDraftRemisBulkAction, updateRemisBulkActionList, } from './view/spendManagement/reimbursement/remisBulkActionView/remisBulkActionViewReducer';
340
339
  import { getRemisBulkOperationProgress, getRemisBulkReviewView, } from './view/spendManagement/reimbursement/remisBulkActionView/remisBulkActionViewSelector';
341
340
  import { hideCreatedByFilter, } from './view/spendManagement/spendManagementFilterHelpers';
341
+ import { TRANSACTION_FILTER_CATEGORIES, applyTransactionFilters, } from './view/expenseAutomationView/transactionFilterHelpers';
342
342
  import { acceptTreasuryTerms, clearTreasurySetupView, fetchPortfolioAllocation, fetchTreasuryFunds, fetchTreasurySetupView, updateFundAllocationLocalData, updatePortfolioAllocation, updateTreasuryVideoViewed, } from './view/spendManagement/treasury/treasurySetUp/treasurySetupViewReducer';
343
343
  import { getTreasuryBusinessVerificationDetails, getTreasurySetupViewDetails, } from './view/spendManagement/treasury/treasurySetUp/treasurySetupViewSelector';
344
344
  import { getTreasuryFundsMaximumYield, } from './view/spendManagement/treasury/treasurySetUp/treasurySetupViewState';
@@ -368,7 +368,7 @@ import { getAllTags } from './view/tagView/tagViewSelector';
368
368
  import { deleteCannedResponse, fetchCannedResponses, saveCannedResponse, } from './view/taskManager/cannedResponsesView/cannedResponsesReducer';
369
369
  import { getCannedResponsesView } from './view/taskManager/cannedResponsesView/cannedResponsesSelector';
370
370
  import { initialTaskDetail, initialTaskDetailLocalData, } from './view/taskManager/taskDetailView/taskDetail';
371
- import { archiveTask, createSubTask, deleteTask, discardTaskUpdatesInLocalStore, fetchSubTasks, fetchTaskDetailPage, saveTaskDetail, saveTaskUpdatesToLocalStore, snoozeTask, unsnoozeTask, } from './view/taskManager/taskDetailView/taskDetailReducer';
371
+ import { archiveTask, deleteTask, discardTaskUpdatesInLocalStore, fetchTaskDetailPage, saveTaskDetail, saveTaskUpdatesToLocalStore, snoozeTask, unsnoozeTask, } from './view/taskManager/taskDetailView/taskDetailReducer';
372
372
  import { allTaskPriority, allTaskStatus, getTaskDetail, } from './view/taskManager/taskDetailView/taskDetailSelector';
373
373
  import { createTaskFromTaskGroupTemplate } from './view/taskManager/taskGroupTemplateView/taskGroupTemplateViewReducer';
374
374
  import { createNewTaskGroup, deleteTaskGroup, fetchAllTaskGroups, updateTaskGroupName, } from './view/taskManager/taskGroupView/taskGroupViewReducer';
@@ -385,6 +385,7 @@ import { getAllTopExpenses, getTop6Expenses, getTopExpenses, } from './view/topE
385
385
  import { TOP_EX_TIME_PERIODS, } from './view/topEx/topExState';
386
386
  import { getAccountingProviderAttachment, } from './view/transactionDetail/getAccountingProviderAttachmentSelector';
387
387
  import { getChangedLineItemCountFromLocalData, isAccountUncategorized, } from './view/transactionDetail/transactionDetailLocalDataHelper';
388
+ import { JOURNAL_ENTRY_SORT_KEYS, filterJournalEntryLinesExcludingLinked, journalEntryDefaultSortConfig, journalEntryTotalsByPostingSide, sortJournalEntryLines, sumJournalEntryAmounts, toJournalEntrySortKey, } from './view/transactionDetail/journalEntryLinesViewModel';
388
389
  import { clearTransactionDetailSaveStatus, deleteTransactionAttachment, downloadAccountingProviderAttachment, downloadAccountingProviderAttachmentFailure, downloadAccountingProviderAttachmentSuccess, fetchTransactionDetail, initializeTransactionDetailLocalData, markCategoryClassRecommendationsFailureForTransactionDetail, removeEntityRecommendationForLineIdForTransactionDetail, resetAllLineItemsToVendor, resetLineItemsCategoryClassInLocalData, resetSelectedCustomer, resetVendor, saveTransactionDetail, saveTransactionDetailLocalData, setAllLineItemsLocalDataIsUpdateAllChecked, setAllLineItemsToCategoryClassInLocalData, setIsVendorUpdateAllChecked, updateLatestSelectedEntity, updateLocalDataWithTransactionsUpdateWithVendorCheckbox, updateSelectedCustomer, updateSelectedVendor, updateTransactionDetail, updateVendorBulkRecommendationsFetchStatus, updateVendorToAllLineItems, uploadMissingAttachmentSuccess, } from './view/transactionDetail/transactionDetailReducer';
389
390
  import { getInitialUpdatablePeriodsForTransactionRecommendations, getTransactionDetail, getTransactionDetailForTransaction, } from './view/transactionDetail/transactionDetailSelector';
390
391
  import { getThirdPartyIdFromTransactionId, } from './view/transactionDetail/transactionDetailState';
@@ -583,6 +584,7 @@ export { getNextNthWorkingDay, getPreviousNthWorkingDay, isHolidayToday, filterD
583
584
  export { fetchCompanyOnboardingView, fetchQBOConnectionPool, updateQBOConnectionPoolExternalConnection, fetchOnboardingCompletedCompanies, saveOnboardingCustomerCompletedStatus, toProductType, toProductTypeStrict, getOnboardingCockpitView, getNewOnboardingCustomerView, getOnboardingEmailGroup, initializeOnboardingCustomerViewUpdateData, clearOnboardingCustomerViewUpdateData, saveOnboardingCustomerViewUpdateData, updateOnboardingCustomerListUIState, updateCustomerCreationStatus, updateStatusAfterOnboardingCompleted, saveOnboardingCustomerViewUpdates, saveOnboardingCustomerNotes, saveOnboardingCustomerDataInLocalStore, updateOnboardingCustomerDataInLocalStore, resetNewOnboardedCustomerId, sendOnboardingCustomerViewInvite, retryBankAccountConnectionForOnboarding, };
584
585
  export { getTransactionsListByCategoryType, getTransactionListUIStateByCategoryType, };
585
586
  export { getChangedLineItemCountFromLocalData, isAccountUncategorized };
587
+ export { JOURNAL_ENTRY_SORT_KEYS, filterJournalEntryLinesExcludingLinked, journalEntryDefaultSortConfig, journalEntryTotalsByPostingSide, sortJournalEntryLines, sumJournalEntryAmounts, toJournalEntrySortKey, };
586
588
  export { openSnackbar, closeSnackbar, getSnackbar, };
587
589
  export { getSpendManagementEffectiveListPeriod, getSelectedCompanyOfficer, showBillPayPromoPage, showReimbursementPromoPage, getActualPaymentDate, isVerifiedStatusCode, isVerifiedPaymentAccountProviderStatusCode, isBulkProcessing, getBillListUniqueType, getRemiListUniqueType, getBulkOperationSuffix, toAccountsPromoConfig, toSameDayAchDisablementConfig, isPaymentMethodOutsideZeni, isAwaitingMarkAsPaid, checkIfLowBalance, };
588
590
  export { canSendMonthEndEmailReport, shouldEnableCalendarPickerForLastReportSent, };
@@ -619,7 +621,7 @@ export { fetchGlobalMerchantRecommendation, createGlobalMerchant, updateCreateGl
619
621
  export { approveVendorGlobalReview, rejectVendorGlobalReview, fetchVendorGlobalReviewView, updateSelectedGlobalMerchant, updateVendorGlobalReviewViewUIState, getVendorGlobalReviewView, getTenantMerchantByMerchantId, toVendorGlobalReviewColumnSortKeyType, updateVendorGlobalReviewViewLocalData, };
620
622
  export { fetchArAging, updateArAgingUIState, fetchArAgingDetail, updateArAgingDetailUIState, getArAgingReport, getArAgingDetailForCustomer, updateArAgingNodeCollapseState, };
621
623
  export { toRecurringBillFrequency, toRecurringBillFrequencyStrict, };
622
- export { getTaskGroupById, getAllTasks, fetchTaskListPage, getTaskDetail, fetchTaskDetailPage, saveTaskUpdatesToLocalStore, saveTaskDetail, createSubTask, fetchSubTasks, archiveTask, fetchCannedResponses, saveCannedResponse, deleteCannedResponse, getCannedResponsesView, updateTaskListSearchText, updateTaskListUIState, allTaskStatus, allTaskPriority, updateTaskFilters, TASK_LIST_FILTER_CATEGORIES, TASK_LIST_GROUP_BY_CATEGORIES, deleteTask, discardTaskUpdatesInLocalStore, bulkUpdateTaskList, createNewTaskGroup, initiateTaskListLocalData, deleteTaskGroup, updateTaskListLocalData, dragNDropTasks, updateTaskGroupName, toTaskListGroupByKeyType, toTaskListGroupByKeyTypeStrict, getTaskUpdates, fetchAllTaskGroups, initialTaskDetail, getDueDateValueFromDueDateGroupId, toPriorityCodeType, toTaskStatusCodeType, toDueDateGroupKeyType, updateTaskFromListView, updateTaskListTab, removeTaskFromList, snoozeTask, unsnoozeTask, convertHHMMStrToMinutes, initialTaskDetailLocalData, ALL_TASK_LIST_TABS, };
624
+ export { getTaskGroupById, getAllTasks, fetchTaskListPage, getTaskDetail, fetchTaskDetailPage, saveTaskUpdatesToLocalStore, saveTaskDetail, archiveTask, fetchCannedResponses, saveCannedResponse, deleteCannedResponse, getCannedResponsesView, updateTaskListSearchText, updateTaskListUIState, allTaskStatus, allTaskPriority, updateTaskFilters, TASK_LIST_FILTER_CATEGORIES, TASK_LIST_GROUP_BY_CATEGORIES, deleteTask, discardTaskUpdatesInLocalStore, bulkUpdateTaskList, createNewTaskGroup, initiateTaskListLocalData, deleteTaskGroup, updateTaskListLocalData, dragNDropTasks, updateTaskGroupName, toTaskListGroupByKeyType, toTaskListGroupByKeyTypeStrict, getTaskUpdates, fetchAllTaskGroups, initialTaskDetail, getDueDateValueFromDueDateGroupId, toPriorityCodeType, toTaskStatusCodeType, toDueDateGroupKeyType, updateTaskFromListView, updateTaskListTab, removeTaskFromList, snoozeTask, unsnoozeTask, convertHHMMStrToMinutes, initialTaskDetailLocalData, ALL_TASK_LIST_TABS, };
623
625
  export { getAllTags, fetchTagList, createTag, deleteTag, };
624
626
  export { getAllCardsAndBankPaymentMethods, createCardSetupIntent, confirmCardSetupIntent, addCardPaymentSource, fetchPaymentSources, resetCardPaymentErrorStatuses, clearCardPaymentView, };
625
627
  export { getAuditReportGroupViewSelectorView, getAuditRuleGroupViewSelectorView, getUserFromAllUsers, fetchAuditRuleGroupView, fetchAuditReportGroupView, saveReasonForAuditRule, clearAuditReportGroupViewByCompanyId, };
@@ -4,16 +4,13 @@ import { catchError, filter, mergeMap } from 'rxjs/operators';
4
4
  import { openSnackbar } from '../../../../entity/snackbar/snackbarReducer';
5
5
  import { updateTags } from '../../../../entity/tag/tagReducer';
6
6
  import { updateTasks } from '../../../../entity/task/taskReducer';
7
- import { getTaskById } from '../../../../entity/task/taskSelector';
8
7
  import { createZeniAPIStatus, isSuccessResponse, } from '../../../../responsePayload';
9
8
  import { fetchFileList } from '../../../fileView/fileViewReducer';
10
- import { updateTaskListOnNewTaskCreationSuccess } from '../../taskListView/taskListReducer';
11
9
  import { fetchTaskDetail, initializeTaskToLocalStore, removeTaskDetail, updateEditTaskFetchStatus, } from '../taskDetailReducer';
12
10
  export const fetchTaskDetailEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(fetchTaskDetail.match), mergeMap((action) => {
13
11
  const { taskId, cacheOverride } = action.payload;
14
12
  const taskActions = [];
15
13
  const state = state$.value;
16
- const isTaskListFetched = state.taskListState.fetchState === 'Completed';
17
14
  const taskDetail = recordGet(state.taskDetailState.editTaskStateById, taskId, undefined);
18
15
  if (cacheOverride === true) {
19
16
  taskActions.push(removeTaskDetail(taskId));
@@ -35,16 +32,6 @@ export const fetchTaskDetailEpic = (actions$, state$, zeniAPI) => actions$.pipe(
35
32
  updateTags(response.data.tasks.map((task) => task.tags).flat()),
36
33
  initializeTaskToLocalStore(taskId),
37
34
  ];
38
- if (isTaskListFetched === true) {
39
- const taskGroupId = response.data.tasks[0].task_group_ids?.[0];
40
- if (taskGroupId != null) {
41
- fetchActions.push(updateTaskListOnNewTaskCreationSuccess({
42
- taskGroupId,
43
- task: response.data.tasks[0],
44
- currentTaskState: getTaskById(state.taskState, taskId),
45
- }));
46
- }
47
- }
48
35
  const fileIds = response.data.tasks[0].file_ids;
49
36
  if (fileIds.length > 0) {
50
37
  fetchActions.push(fetchFileList(fileIds));
@@ -6,11 +6,6 @@ import { initialTaskDetail, } from './taskDetail';
6
6
  export const initialState = {
7
7
  newTaskState: initialTaskDetail,
8
8
  editTaskStateById: {},
9
- subTaskCreateStatus: {
10
- fetchState: 'Not-Started',
11
- error: undefined,
12
- },
13
- subTaskListFetchStatusByParentId: {},
14
9
  taskHistoryById: {},
15
10
  };
16
11
  const taskDetailView = createSlice({
@@ -55,7 +50,7 @@ const taskDetailView = createSlice({
55
50
  updateEditTaskFetchStatus(draft, action) {
56
51
  const { taskId, fetchState, error } = action.payload;
57
52
  draft.editTaskStateById[taskId] = {
58
- ...(draft.editTaskStateById[taskId] ?? initialTaskDetail),
53
+ ...draft.editTaskStateById[taskId],
59
54
  fetchTaskStatus: {
60
55
  fetchState,
61
56
  error: fetchState === 'Error' ? error : undefined,
@@ -323,54 +318,10 @@ const taskDetailView = createSlice({
323
318
  error,
324
319
  };
325
320
  },
326
- createSubTask: {
327
- reducer(draft) {
328
- draft.subTaskCreateStatus = {
329
- fetchState: 'In-Progress',
330
- error: undefined,
331
- };
332
- },
333
- prepare(payload) {
334
- return { payload };
335
- },
336
- },
337
- createSubTaskSuccessOrFailure(draft, action) {
338
- const { fetchState, error } = action.payload;
339
- draft.subTaskCreateStatus = {
340
- fetchState,
341
- error,
342
- };
343
- },
344
- fetchSubTasks: {
345
- reducer(draft, action) {
346
- const { parentTaskId } = action.payload;
347
- draft.subTaskListFetchStatusByParentId[parentTaskId] = {
348
- fetchState: 'In-Progress',
349
- error: undefined,
350
- };
351
- },
352
- prepare(parentTaskId) {
353
- return { payload: { parentTaskId } };
354
- },
355
- },
356
- updateSubTasks(draft, action) {
357
- const { parentTaskId } = action.payload;
358
- draft.subTaskListFetchStatusByParentId[parentTaskId] = {
359
- fetchState: 'Completed',
360
- error: undefined,
361
- };
362
- },
363
- updateSubTasksFetchStatus(draft, action) {
364
- const { parentTaskId, fetchState, error } = action.payload;
365
- draft.subTaskListFetchStatusByParentId[parentTaskId] = {
366
- fetchState,
367
- error,
368
- };
369
- },
370
321
  clearTaskDetail(draft) {
371
322
  Object.assign(draft, initialState);
372
323
  },
373
324
  },
374
325
  });
375
- export const { fetchTaskDetailPage, fetchTaskDetail, initializeTaskToLocalStore, updateEditTaskFetchStatus, saveTaskUpdatesToLocalStore, discardTaskUpdatesInLocalStore, saveTaskDetail, archiveTask, archiveTaskSuccessOrFailure, saveTaskSuccessOrFailure, createSubTask, createSubTaskSuccessOrFailure, fetchSubTasks, updateSubTasks, updateSubTasksFetchStatus, deleteTask, removeTaskDetail, deleteTaskSuccessOrFailure, snoozeTask, snoozeTaskSuccessOrFailure, unsnoozeTask, fetchTaskHistory, updateTaskHistory, updateTaskHistoryFetchStatus, clearTaskDetail, updateCreatedTagToLocalStore, updateDeletedTagToLocalStore, } = taskDetailView.actions;
326
+ export const { fetchTaskDetailPage, fetchTaskDetail, initializeTaskToLocalStore, updateEditTaskFetchStatus, saveTaskUpdatesToLocalStore, discardTaskUpdatesInLocalStore, saveTaskDetail, archiveTask, archiveTaskSuccessOrFailure, saveTaskSuccessOrFailure, deleteTask, removeTaskDetail, deleteTaskSuccessOrFailure, snoozeTask, snoozeTaskSuccessOrFailure, unsnoozeTask, fetchTaskHistory, updateTaskHistory, updateTaskHistoryFetchStatus, clearTaskDetail, updateCreatedTagToLocalStore, updateDeletedTagToLocalStore, } = taskDetailView.actions;
376
327
  export default taskDetailView.reducer;
@@ -1,8 +1,8 @@
1
1
  import isEqual from 'lodash/isEqual';
2
- import { reduceAnyFetchState } from '../../../commonStateTypes/reduceFetchState';
2
+ import { reduceFetchState } from '../../../commonStateTypes/reduceFetchState';
3
3
  import { getClassesByIds } from '../../../entity/class/classSelector';
4
4
  import { getFilesByFileIds } from '../../../entity/file/fileSelector';
5
- import { getTaskById, getTasksByIds } from '../../../entity/task/taskSelector';
5
+ import { getTaskById } from '../../../entity/task/taskSelector';
6
6
  import { getUserAndUserRole, } from '../../companyView/types/userAndRole';
7
7
  import { getFileDeleteStatusById, getFileUpdateNameStatusById, } from '../../fileView/fileViewSelector';
8
8
  import { getUserList, } from '../../userListView/userListViewSelector';
@@ -27,13 +27,8 @@ export const getTaskDetail = (state, taskId) => {
27
27
  let recurringSourceTaskId = undefined;
28
28
  let snoozedUntil = undefined;
29
29
  let taskGroupId = undefined;
30
- let subtasks = [];
31
30
  if (taskId != null && sourceTaskDetail != null) {
32
31
  const taskEntity = getTaskById(taskState, taskId);
33
- subtasks =
34
- taskEntity != null
35
- ? getTasksByIds(taskState, taskEntity.subTasksIds)
36
- : [];
37
32
  const fileIdsInEntity = taskEntity?.fileIds ?? [];
38
33
  if (taskEntity != null) {
39
34
  createdByUser = getUserAndUserRole(userState, userRoleState, addressState, taskEntity.createdBy);
@@ -44,27 +39,25 @@ export const getTaskDetail = (state, taskId) => {
44
39
  taskGroupId = taskEntity.taskGroupIds[0];
45
40
  }
46
41
  if (fileIdsInEntity.length > 0) {
47
- fetchStatus = reduceAnyFetchState([
42
+ fetchStatus = reduceFetchState([
48
43
  fileViewState.fetchFilesStatus,
49
44
  sourceTaskDetail.fetchTaskStatus,
50
45
  userList,
51
46
  classListState,
52
- taskDetailState.subTaskListFetchStatusByParentId[taskId],
53
47
  ]);
54
48
  }
55
49
  else {
56
- fetchStatus = reduceAnyFetchState([
50
+ fetchStatus = reduceFetchState([
57
51
  sourceTaskDetail.fetchTaskStatus,
58
52
  userList,
59
53
  classListState,
60
- taskDetailState.subTaskListFetchStatusByParentId[taskId],
61
54
  ]);
62
55
  }
63
56
  showTaskDetailFormFooter = showFormFooter(sourceTaskDetail.taskDetailLocalData, taskEntity);
64
57
  taskHistory = taskDetailState.taskHistoryById[taskId]?.historicEvents ?? [];
65
58
  }
66
59
  else if (taskId == null) {
67
- fetchStatus = reduceAnyFetchState([userList, classListState]);
60
+ fetchStatus = reduceFetchState([userList, classListState]);
68
61
  }
69
62
  const { classIds } = classListState;
70
63
  const allAccountingClasses = getClassesByIds(classState, {
@@ -97,7 +90,6 @@ export const getTaskDetail = (state, taskId) => {
97
90
  showTaskDetailFormFooter,
98
91
  snoozedUntil,
99
92
  taskGroupId,
100
- subtasks,
101
93
  };
102
94
  };
103
95
  export const allTaskStatus = [
@@ -145,16 +137,13 @@ export const allTaskPriority = [
145
137
  },
146
138
  ];
147
139
  const showFormFooter = (taskDetailLocalData, taskDetailInStore) => {
148
- if (taskDetailInStore == null) {
149
- return false;
150
- }
151
- if (taskDetailLocalData.name !== taskDetailInStore.name ||
140
+ if (taskDetailLocalData.name !== taskDetailInStore?.name ||
152
141
  taskDetailLocalData.description !== taskDetailInStore.description ||
153
142
  taskDetailLocalData.priority !== taskDetailInStore.priority.code ||
154
143
  taskDetailLocalData.status !== taskDetailInStore.status.code ||
155
144
  !isEqual(taskDetailInStore.tagIds, taskDetailLocalData.tagIds) ||
156
- !isEqual(taskDetailLocalData.assignee, taskDetailInStore.assignees ?? []) ||
157
- !isEqual(taskDetailLocalData.groupAssignees, taskDetailInStore.groupAssignees ?? []) ||
145
+ !isEqual(taskDetailLocalData.assignee, taskDetailInStore?.assignees ?? []) ||
146
+ !isEqual(taskDetailLocalData.groupAssignees, taskDetailInStore?.groupAssignees ?? []) ||
158
147
  !isEqual(taskDetailLocalData.fileIds, taskDetailInStore.fileIds ?? []) ||
159
148
  !isEqual(taskDetailLocalData.dueDate, taskDetailInStore.dueDate) ||
160
149
  !isEqual(taskDetailLocalData.type, taskDetailInStore.type) ||
@@ -0,0 +1,149 @@
1
+ import orderBy from 'lodash/orderBy';
2
+ import { stringToUnion } from '../../commonStateTypes/stringToUnion';
3
+ import { LINE_TYPE_LINKED, } from '../../entity/transaction/stateTypes/transactionLine';
4
+ /**
5
+ * View-model helpers for the new Journal Entry table view (see
6
+ * web-components `journalEntryTable`). Keeps presentation-agnostic
7
+ * logic — totals, sort, line-filter — colocated in epic-state so it
8
+ * is testable and reusable.
9
+ */
10
+ // ---------------------------------------------------------------------------
11
+ // Sort keys
12
+ // ---------------------------------------------------------------------------
13
+ export const JOURNAL_ENTRY_SORT_KEYS = [
14
+ 'description',
15
+ 'name',
16
+ 'category',
17
+ 'class',
18
+ 'debit',
19
+ 'credit',
20
+ ];
21
+ export const toJournalEntrySortKey = (v) => stringToUnion(v, JOURNAL_ENTRY_SORT_KEYS);
22
+ export const journalEntryDefaultSortConfig = {
23
+ sortKey: 'description',
24
+ sortOrder: 'ascending',
25
+ };
26
+ /**
27
+ * Sums the `amount.amount` field of every line and returns an `Amount`
28
+ * whose currencyCode/currencySymbol are taken from the first line.
29
+ * Returns `undefined` for an empty list, and also when the first line
30
+ * has no currency to carry — a stray bare number with no symbol is
31
+ * worse to render than nothing, so the caller is forced to handle the
32
+ * absence.
33
+ *
34
+ * **Precondition:** all input lines must share a currency. Journal
35
+ * entry lines on the same transaction always do, which is the only
36
+ * caller today. Mixed-currency input is summed numerically (no FX
37
+ * conversion) and tagged with the first line's currency, which will
38
+ * silently produce a wrong total — if this helper is ever reused for
39
+ * a cross-currency aggregate (e.g. a multi-transaction report), the
40
+ * caller must pre-group by currency before calling.
41
+ *
42
+ * Mirrors legacy `calculateTotal` in
43
+ * `web-components/src/components/transactionDetail/items/TransactionLinesJournalEntry.tsx`
44
+ * but without the `Object.assign` ceremony and with stable currency carry-over.
45
+ */
46
+ export const sumJournalEntryAmounts = (lines) => {
47
+ if (lines.length === 0) {
48
+ return undefined;
49
+ }
50
+ const first = lines[0].amount;
51
+ if (first?.currencyCode == null || first?.currencySymbol == null) {
52
+ return undefined;
53
+ }
54
+ let total = 0;
55
+ for (const line of lines) {
56
+ total += line.amount?.amount ?? 0;
57
+ }
58
+ return {
59
+ amount: total,
60
+ currencyCode: first.currencyCode,
61
+ currencySymbol: first.currencySymbol,
62
+ };
63
+ };
64
+ /**
65
+ * Splits `lines` by `postingType` into a single debit total and a
66
+ * single credit total — the shape the new flat-table totals row
67
+ * (`JournalEntryTotalsRow` in `web-components`, Figma frame
68
+ * `5177:12750`) needs.
69
+ *
70
+ * The legacy `TransactionLinesJournalEntry` grouped lines into six
71
+ * `JournalEntryItemType` buckets (`debit` / `uncategorizedDebit` /
72
+ * `miscategorizedDebit` plus the credit triplet) for *visual banner
73
+ * headers* in the line list; its bottom totals row was already two
74
+ * combined numbers. The new flat table folds those banners away by
75
+ * design, so we don't surface a per-status breakdown here. If the
76
+ * design ever asks for sub-totals per status, that's a richer shape
77
+ * (`{debit: {total, uncategorized, miscategorized}, credit: {…}}`)
78
+ * and a follow-up — not a v1 of this helper.
79
+ *
80
+ * As a side effect, the legacy `calculateCombinedTotalAmount`
81
+ * `??`/`+` precedence bug (`totalAmount?.amount ?? 0 + (uncat ?? 0) +
82
+ * (miscat ?? 0)` parses as `totalAmount?.amount ?? (0 + uncat +
83
+ * miscat)`, silently dropping the uncat/miscat pieces whenever
84
+ * `totalAmount` was non-nullish) is gone by construction here: there
85
+ * is no separate combine step, just one pass over the lines.
86
+ */
87
+ export const journalEntryTotalsByPostingSide = (lines) => {
88
+ const debitLines = [];
89
+ const creditLines = [];
90
+ for (const line of lines) {
91
+ if (line.postingType === 'debit') {
92
+ debitLines.push(line);
93
+ }
94
+ else if (line.postingType === 'credit') {
95
+ creditLines.push(line);
96
+ }
97
+ }
98
+ return {
99
+ debitTotal: sumJournalEntryAmounts(debitLines),
100
+ creditTotal: sumJournalEntryAmounts(creditLines),
101
+ };
102
+ };
103
+ // ---------------------------------------------------------------------------
104
+ // Filter
105
+ // ---------------------------------------------------------------------------
106
+ /**
107
+ * Drops `linked_transaction_line` entries — equivalent to legacy
108
+ * `filterOutLinkedTransactionLine` in `transactionDetail.helpers.ts`.
109
+ *
110
+ * The literal lives in `LINE_TYPE_LINKED` next to `LineType` so the
111
+ * filter discriminant stays bound to the union at the type level.
112
+ * Other sites still inlining the literal (see `transactionDetailLocalDataHelper`,
113
+ * `transactionDetailState`, `transactionCategorizationLocalDataHelper`,
114
+ * `transactionLinePayload`, and the mocks) are a known follow-up.
115
+ */
116
+ export const filterJournalEntryLinesExcludingLinked = (lines) => lines?.filter((line) => line.type !== LINE_TYPE_LINKED) ?? [];
117
+ const sortOrderToLodash = (sortOrder) => sortOrder === 'descending' ? 'desc' : 'asc';
118
+ /**
119
+ * Stable, accessor-driven sort over arbitrary line shapes. Lines that
120
+ * resolve to the same key value preserve their original relative order
121
+ * thanks to lodash's stable `orderBy`.
122
+ *
123
+ * Strings are lower-cased before comparison so the order is predictable
124
+ * across mixed-case data. Numbers (debit/credit) compare directly.
125
+ */
126
+ export const sortJournalEntryLines = (lines, config, accessors) => {
127
+ const accessor = (line) => {
128
+ switch (config.sortKey) {
129
+ case 'description':
130
+ return accessors.description(line).toLowerCase();
131
+ case 'name':
132
+ return accessors.name(line).toLowerCase();
133
+ case 'category':
134
+ return accessors.category(line).toLowerCase();
135
+ case 'class':
136
+ return accessors.class(line).toLowerCase();
137
+ case 'debit':
138
+ return accessors.debit(line);
139
+ case 'credit':
140
+ return accessors.credit(line);
141
+ default:
142
+ // stringToUnion narrows permissively (returns `s as StringUnion` for
143
+ // non-member input, see commonStateTypes/stringToUnion.ts), so this
144
+ // branch is reachable at runtime — keep it as a description fallback.
145
+ return accessors.description(line).toLowerCase();
146
+ }
147
+ };
148
+ return orderBy([...lines], [accessor], [sortOrderToLodash(config.sortOrder)]);
149
+ };
package/lib/index.d.ts CHANGED
@@ -288,7 +288,6 @@ import { getExpenseAutomationFluxAnalysisView } from './view/expenseAutomationVi
288
288
  import { JEScheduledTransactionWithFailedEntries } from './view/expenseAutomationView/selectors/jeSchedulesViewSelector';
289
289
  import { getExpenseAutomationReconciliationView, isAccountReconReport } from './view/expenseAutomationView/selectors/reconciliationViewSelector';
290
290
  import { getExpenseAutomationTransactionView, getLastTransferEntryReplacement } from './view/expenseAutomationView/selectors/transactionCategorizationSelector';
291
- import { TRANSACTION_FILTER_CATEGORIES, TransactionFilterAmountMatchingOperator, TransactionFilterCategory, TransactionFilterCategoryDropdownOption, TransactionFilterCategoryField, TransactionFilterEntityType, TransactionFilters, applyTransactionFilters } from './view/expenseAutomationView/transactionFilterHelpers';
292
291
  import { CompletedSubTab, DEFAULT_COMPLETED_SUB_TAB, toCompletedSubTab } from './view/expenseAutomationView/types/completedSubTab';
293
292
  import { FluxAnalysisActionType, FluxAnalysisReviewStatus, FluxAnalysisSortKey, FluxAnalysisViewUIState, FluxBalancesByMonth } from './view/expenseAutomationView/types/fluxAnalysisViewState';
294
293
  import { AccountSettingsLocalData, JEScheduleMainTab as ExpenseAutomationJEScheduleMainTab, JEScheduleSortKey as ExpenseAutomationJEScheduleSortKey, JESchedulesViewUIState as ExpenseAutomationJESchedulesViewUIState, JEScheduleLocalData, toJEScheduleMainTab as toExpenseAutomationJEScheduleMainTab, toJEScheduleSortKey as toExpenseAutomationJEScheduleSortKey } from './view/expenseAutomationView/types/jeSchedulesViewState';
@@ -510,6 +509,7 @@ import { MileageDenomination, MileageDetailsLocalData, RemiSetupViewLocalData, R
510
509
  import { approveOrRejectRemisBulkAction, autoReviewPendingApprovalRemis, cancelOrDeleteRemisBulkAction, clearAllRemisFromBulkActionList, clearRemiBulkActionView, incrementRemiBulkActionProcessedCount, removeRemiFromBulkActionList, reviewDraftRemisBulkAction, submitDraftRemisBulkAction, updateRemisBulkActionList } from './view/spendManagement/reimbursement/remisBulkActionView/remisBulkActionViewReducer';
511
510
  import { RemisBulkReviewView, getRemisBulkOperationProgress, getRemisBulkReviewView } from './view/spendManagement/reimbursement/remisBulkActionView/remisBulkActionViewSelector';
512
511
  import { BillPayFilterCategoryDropdownOption, CategoryCombinationOperator, FilterCategoryType, MatchingOperatorDropdownOption, ReimbursementFilterCategoryDropdownOption, SpendManagementFilterCategoryDropdownOption, SpendManagementFilterEntityType, SpendManagementFiltersType, TaskFilterCategoryDropdownOption, hideCreatedByFilter } from './view/spendManagement/spendManagementFilterHelpers';
512
+ import { TRANSACTION_FILTER_CATEGORIES, TransactionFilterAmountMatchingOperator, TransactionFilterCategory, TransactionFilterCategoryDropdownOption, TransactionFilterCategoryField, TransactionFilterEntityType, TransactionFilters, applyTransactionFilters } from './view/expenseAutomationView/transactionFilterHelpers';
513
513
  import { acceptTreasuryTerms, clearTreasurySetupView, fetchPortfolioAllocation, fetchTreasuryFunds, fetchTreasurySetupView, updateFundAllocationLocalData, updatePortfolioAllocation, updateTreasuryVideoViewed } from './view/spendManagement/treasury/treasurySetUp/treasurySetupViewReducer';
514
514
  import { TreasuryBusinessVerificationDetails, TreasurySetupView, getTreasuryBusinessVerificationDetails, getTreasurySetupViewDetails } from './view/spendManagement/treasury/treasurySetUp/treasurySetupViewSelector';
515
515
  import { FundAllocationOption, FundComposition, FundData, getTreasuryFundsMaximumYield } from './view/spendManagement/treasury/treasurySetUp/treasurySetupViewState';
@@ -551,8 +551,8 @@ import { TagViewState } from './view/tagView/tagViewState';
551
551
  import { CannedResponse, CannedResponsesViewState } from './view/taskManager/cannedResponsesView/cannedResponses';
552
552
  import { deleteCannedResponse, fetchCannedResponses, saveCannedResponse } from './view/taskManager/cannedResponsesView/cannedResponsesReducer';
553
553
  import { getCannedResponsesView } from './view/taskManager/cannedResponsesView/cannedResponsesSelector';
554
- import { CreateSubTaskPayload, EditTaskLocalData, initialTaskDetail, initialTaskDetailLocalData } from './view/taskManager/taskDetailView/taskDetail';
555
- import { archiveTask, createSubTask, deleteTask, discardTaskUpdatesInLocalStore, fetchSubTasks, fetchTaskDetailPage, saveTaskDetail, saveTaskUpdatesToLocalStore, snoozeTask, unsnoozeTask } from './view/taskManager/taskDetailView/taskDetailReducer';
554
+ import { EditTaskLocalData, initialTaskDetail, initialTaskDetailLocalData } from './view/taskManager/taskDetailView/taskDetail';
555
+ import { archiveTask, deleteTask, discardTaskUpdatesInLocalStore, fetchTaskDetailPage, saveTaskDetail, saveTaskUpdatesToLocalStore, snoozeTask, unsnoozeTask } from './view/taskManager/taskDetailView/taskDetailReducer';
556
556
  import { TaskDetailSelectorView, allTaskPriority, allTaskStatus, getTaskDetail } from './view/taskManager/taskDetailView/taskDetailSelector';
557
557
  import { createTaskFromTaskGroupTemplate } from './view/taskManager/taskGroupTemplateView/taskGroupTemplateViewReducer';
558
558
  import { createNewTaskGroup, deleteTaskGroup, fetchAllTaskGroups, updateTaskGroupName } from './view/taskManager/taskGroupView/taskGroupViewReducer';
@@ -571,6 +571,7 @@ import { TopExAccount, TopExReport, TopExTimePeriodWithMetaData, TopExpenses } f
571
571
  import { TOP_EX_TIME_PERIODS, TopExTimePeriod, TopExpense } from './view/topEx/topExState';
572
572
  import { AccountingProviderAttachmentSelector, getAccountingProviderAttachment } from './view/transactionDetail/getAccountingProviderAttachmentSelector';
573
573
  import { getChangedLineItemCountFromLocalData, isAccountUncategorized } from './view/transactionDetail/transactionDetailLocalDataHelper';
574
+ import { JOURNAL_ENTRY_SORT_KEYS, JournalEntryRowSortConfig, JournalEntrySortAccessors, JournalEntrySortKey, filterJournalEntryLinesExcludingLinked, journalEntryDefaultSortConfig, journalEntryTotalsByPostingSide, sortJournalEntryLines, sumJournalEntryAmounts, toJournalEntrySortKey } from './view/transactionDetail/journalEntryLinesViewModel';
574
575
  import { clearTransactionDetailSaveStatus, deleteTransactionAttachment, downloadAccountingProviderAttachment, downloadAccountingProviderAttachmentFailure, downloadAccountingProviderAttachmentSuccess, fetchTransactionDetail, initializeTransactionDetailLocalData, markCategoryClassRecommendationsFailureForTransactionDetail, removeEntityRecommendationForLineIdForTransactionDetail, resetAllLineItemsToVendor, resetLineItemsCategoryClassInLocalData, resetSelectedCustomer, resetVendor, saveTransactionDetail, saveTransactionDetailLocalData, setAllLineItemsLocalDataIsUpdateAllChecked, setAllLineItemsToCategoryClassInLocalData, setIsVendorUpdateAllChecked, updateLatestSelectedEntity, updateLocalDataWithTransactionsUpdateWithVendorCheckbox, updateSelectedCustomer, updateSelectedVendor, updateTransactionDetail, updateVendorBulkRecommendationsFetchStatus, updateVendorToAllLineItems, uploadMissingAttachmentSuccess } from './view/transactionDetail/transactionDetailReducer';
575
576
  import { TransactionDetailReport, VendorDetailsView, getInitialUpdatablePeriodsForTransactionRecommendations, getTransactionDetail, getTransactionDetailForTransaction } from './view/transactionDetail/transactionDetailSelector';
576
577
  import { TransactionUpdates, getThirdPartyIdFromTransactionId } from './view/transactionDetail/transactionDetailState';
@@ -830,6 +831,8 @@ export { fetchCompanyOnboardingView, fetchQBOConnectionPool, updateQBOConnection
830
831
  export { TransactionListByCategoryType, getTransactionsListByCategoryType, getTransactionListUIStateByCategoryType, TransactionCategoryType, };
831
832
  export { TransactionDetailLocalData, TransactionDetailLineItemData, TransactionVendorUpdates, };
832
833
  export { getChangedLineItemCountFromLocalData, isAccountUncategorized };
834
+ export { JOURNAL_ENTRY_SORT_KEYS, filterJournalEntryLinesExcludingLinked, journalEntryDefaultSortConfig, journalEntryTotalsByPostingSide, sortJournalEntryLines, sumJournalEntryAmounts, toJournalEntrySortKey, };
835
+ export type { JournalEntryRowSortConfig, JournalEntrySortAccessors, JournalEntrySortKey, };
833
836
  export { openSnackbar, closeSnackbar, getSnackbar, SnackbarMessageType, SnackbarMessageSections, SnackbarMessageSectionTexts, SnackbarMessageConfig, };
834
837
  export { getSpendManagementEffectiveListPeriod, getSelectedCompanyOfficer, showBillPayPromoPage, showReimbursementPromoPage, getActualPaymentDate, isVerifiedStatusCode, isVerifiedPaymentAccountProviderStatusCode, isBulkProcessing, getBillListUniqueType, getRemiListUniqueType, BulkOperationType, BulkOperationFinishedType, getBulkOperationSuffix, ZeniAccountsPromoConfig, toAccountsPromoConfig, SameDayAchDisablementConfig, toSameDayAchDisablementConfig, isPaymentMethodOutsideZeni, isAwaitingMarkAsPaid, checkIfLowBalance, };
835
838
  export { FilterCategoryValueType, canSendMonthEndEmailReport, shouldEnableCalendarPickerForLastReportSent, };
@@ -878,7 +881,7 @@ export { fetchGlobalMerchantRecommendation, createGlobalMerchant, updateCreateGl
878
881
  export { approveVendorGlobalReview, rejectVendorGlobalReview, fetchVendorGlobalReviewView, updateSelectedGlobalMerchant, updateVendorGlobalReviewViewUIState, getVendorGlobalReviewView, getTenantMerchantByMerchantId, toVendorGlobalReviewColumnSortKeyType, VendorGlobalReview, VendorGlobalReviewViewUIState, VendorGlobalReviewViewColumnSortKey, VendorGlobalReviewViewSelectorView, VendorGlobalReviewViewState, VendorGlobalReviewViewLocalData, updateVendorGlobalReviewViewLocalData, GlobalReviewPageCurrentSelectionByColumn, GlobalRecommendationFetchSource, };
879
882
  export { fetchArAging, updateArAgingUIState, fetchArAgingDetail, updateArAgingDetailUIState, ArAgingReport, ArAgingDetail, NestedAgingBalancesByCustomer, getArAgingReport, getArAgingDetailForCustomer, updateArAgingNodeCollapseState, };
880
883
  export { toRecurringBillFrequency, toRecurringBillFrequencyStrict, RecurringBillFrequency, RecurringBillDetail, RecurringBillConfig, RecurringBillStatus, RecurringBillPaymentStatus, };
881
- export { Task, TaskListSelectorView, TaskWithUserDetails, TaskListViewSortKey, TaskListUIState, TaskDetailSelectorView, EditTaskLocalData, TaskStatusCodeType, PriorityCodeType, getTaskGroupById, TaskStatus, TaskPriority, TaskCodeType, getAllTasks, fetchTaskListPage, getTaskDetail, fetchTaskDetailPage, saveTaskUpdatesToLocalStore, saveTaskDetail, createSubTask, fetchSubTasks, CreateSubTaskPayload, 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, };
884
+ 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, };
882
885
  export { Tag, TagState, TagViewState, getAllTags, TagViewSelectorView, fetchTagList, createTag, deleteTag, };
883
886
  export { CardPayment, CardPaymentViewState, SetupIntentData, CardPaymentSelectorView, getAllCardsAndBankPaymentMethods, createCardSetupIntent, confirmCardSetupIntent, addCardPaymentSource, fetchPaymentSources, resetCardPaymentErrorStatuses, clearCardPaymentView, AddCardPaymentSourceType, };
884
887
  export { getAuditReportGroupViewSelectorView, getAuditRuleGroupViewSelectorView, getUserFromAllUsers, AuditReportGroupSelectorView, AuditReportGroupViewSelectorView, AuditRuleGroupViewSelectorView, fetchAuditRuleGroupView, fetchAuditReportGroupView, saveReasonForAuditRule, AuditRuleGroup, AuditRuleGroupReport, AuditReportRule, AuditRuleEntityType, AuditRuleEntityIdType, AuditRuleBypassReason, clearAuditReportGroupViewByCompanyId, };