@zeniai/client-epic-state 5.2.90 → 5.2.92

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 (58) hide show
  1. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  2. package/lib/entity/snackbar/snackbarTypes.js +1 -0
  3. package/lib/entity/transaction/stateTypes/paymentType.d.ts +2 -2
  4. package/lib/entity/transaction/stateTypes/paymentType.js +9 -1
  5. package/lib/entity/transaction/stateTypes/printStatus.d.ts +4 -0
  6. package/lib/entity/transaction/stateTypes/printStatus.js +11 -0
  7. package/lib/epic.d.ts +5 -1
  8. package/lib/epic.js +8 -0
  9. package/lib/esm/entity/snackbar/snackbarTypes.js +1 -0
  10. package/lib/esm/entity/transaction/stateTypes/paymentType.js +9 -1
  11. package/lib/esm/entity/transaction/stateTypes/printStatus.js +7 -0
  12. package/lib/esm/epic.js +8 -0
  13. package/lib/esm/index.js +4 -2
  14. package/lib/esm/view/{reportUIOptions → financeStatement}/financeStatementCompareBalances.js +7 -0
  15. package/lib/esm/view/financeStatement/financeStatementSelector.js +23 -12
  16. package/lib/esm/view/invoicing/invoicingOverview/invoicingOverviewPayload.js +1 -0
  17. package/lib/esm/view/reportUIOptions/updateReportUIOptionCompareModeEpic.js +1 -1
  18. package/lib/esm/view/reportUIOptions/updateReportUIOptionIsCompareModeOnEpic.js +1 -1
  19. package/lib/esm/view/transactionDetail/createTransaction/createTransactionLocalDataHelper.js +157 -0
  20. package/lib/esm/view/transactionDetail/createTransaction/createTransactionPayload.js +164 -0
  21. package/lib/esm/view/transactionDetail/createTransaction/createTransactionSelector.js +47 -0
  22. package/lib/esm/view/transactionDetail/createTransaction/createTransactionState.js +11 -0
  23. package/lib/esm/view/transactionDetail/createTransaction/epics/createTransactionAttachmentUploadFailureEpic.js +19 -0
  24. package/lib/esm/view/transactionDetail/createTransaction/epics/createTransactionEpic.js +81 -0
  25. package/lib/esm/view/transactionDetail/createTransaction/epics/fetchVendorRecommendationsForCreateTransactionEpic.js +53 -0
  26. package/lib/esm/view/transactionDetail/createTransaction/epics/initializeCreateTransactionLocalDataEpic.js +10 -0
  27. package/lib/esm/view/transactionDetail/transactionDetailReducer.js +196 -1
  28. package/lib/index.d.ts +6 -2
  29. package/lib/index.js +56 -37
  30. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  31. package/lib/view/{reportUIOptions → financeStatement}/financeStatementCompareBalances.d.ts +1 -0
  32. package/lib/view/{reportUIOptions → financeStatement}/financeStatementCompareBalances.js +8 -0
  33. package/lib/view/financeStatement/financeStatementSelector.js +22 -11
  34. package/lib/view/invoicing/invoicingOverview/invoicingOverviewPayload.d.ts +5 -0
  35. package/lib/view/invoicing/invoicingOverview/invoicingOverviewPayload.js +1 -0
  36. package/lib/view/invoicing/invoicingOverview/invoicingOverviewState.d.ts +2 -0
  37. package/lib/view/reportUIOptions/updateReportUIOptionCompareModeEpic.js +1 -1
  38. package/lib/view/reportUIOptions/updateReportUIOptionIsCompareModeOnEpic.js +1 -1
  39. package/lib/view/transactionDetail/createTransaction/createTransactionLocalDataHelper.d.ts +56 -0
  40. package/lib/view/transactionDetail/createTransaction/createTransactionLocalDataHelper.js +172 -0
  41. package/lib/view/transactionDetail/createTransaction/createTransactionPayload.d.ts +95 -0
  42. package/lib/view/transactionDetail/createTransaction/createTransactionPayload.js +169 -0
  43. package/lib/view/transactionDetail/createTransaction/createTransactionSelector.d.ts +44 -0
  44. package/lib/view/transactionDetail/createTransaction/createTransactionSelector.js +53 -0
  45. package/lib/view/transactionDetail/createTransaction/createTransactionState.d.ts +82 -0
  46. package/lib/view/transactionDetail/createTransaction/createTransactionState.js +14 -0
  47. package/lib/view/transactionDetail/createTransaction/epics/createTransactionAttachmentUploadFailureEpic.d.ts +10 -0
  48. package/lib/view/transactionDetail/createTransaction/epics/createTransactionAttachmentUploadFailureEpic.js +23 -0
  49. package/lib/view/transactionDetail/createTransaction/epics/createTransactionEpic.d.ts +9 -0
  50. package/lib/view/transactionDetail/createTransaction/epics/createTransactionEpic.js +85 -0
  51. package/lib/view/transactionDetail/createTransaction/epics/fetchVendorRecommendationsForCreateTransactionEpic.d.ts +20 -0
  52. package/lib/view/transactionDetail/createTransaction/epics/fetchVendorRecommendationsForCreateTransactionEpic.js +57 -0
  53. package/lib/view/transactionDetail/createTransaction/epics/initializeCreateTransactionLocalDataEpic.d.ts +12 -0
  54. package/lib/view/transactionDetail/createTransaction/epics/initializeCreateTransactionLocalDataEpic.js +14 -0
  55. package/lib/view/transactionDetail/transactionDetailReducer.d.ts +39 -1
  56. package/lib/view/transactionDetail/transactionDetailReducer.js +198 -2
  57. package/lib/view/transactionDetail/transactionDetailState.d.ts +12 -0
  58. package/package.json +1 -1
@@ -9,6 +9,7 @@ import { TransactionID } from '../../entity/transaction/stateTypes/transactionID
9
9
  import { SupportedTransaction, SupportedTransactionPayload } from '../../entity/transaction/transactionState';
10
10
  import { ZeniAPIStatus } from '../../responsePayload';
11
11
  import { UncategorizedAccounts } from '../accountList/accountListSelector';
12
+ import { CreateTransactionLineLocalData, CreateTransactionLocalData } from './createTransaction/createTransactionState';
12
13
  import { TransactionDetailState, TransactionSaveUpdates } from './transactionDetailState';
13
14
  import { TransactionDetailLineItemData, TransactionDetailLocalData, TransactionVendorUpdates } from './transactionDetailTypes';
14
15
  export declare const initialState: TransactionDetailState;
@@ -176,6 +177,43 @@ export declare const downloadAccountingProviderAttachment: import("@reduxjs/tool
176
177
  }, "transactionDetail/deleteSplitLine", never, never>, toggleSplitEditMode: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionId: TransactionID, editMode: boolean], {
177
178
  transactionId: TransactionID;
178
179
  editMode: boolean;
179
- }, "transactionDetail/toggleSplitEditMode", never, never>;
180
+ }, "transactionDetail/toggleSplitEditMode", never, never>, initializeCreateTransactionLocalData: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionType: "expense" | "check" | "credit_card_credit" | "transfer" | "journal_entry"], {
181
+ transactionType: "expense" | "check" | "credit_card_credit" | "transfer" | "journal_entry";
182
+ }, "transactionDetail/initializeCreateTransactionLocalData", never, never>, updateCreateTransactionLocalData: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionType: "expense" | "check" | "credit_card_credit" | "transfer" | "journal_entry", localData: Partial<CreateTransactionLocalData>], {
183
+ transactionType: "expense" | "check" | "credit_card_credit" | "transfer" | "journal_entry";
184
+ localData: Partial<CreateTransactionLocalData>;
185
+ }, "transactionDetail/updateCreateTransactionLocalData", never, never>, updateCreateTransactionLineLocalData: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionType: "expense" | "check" | "credit_card_credit" | "transfer" | "journal_entry", lineId: string, lineUpdates: Partial<CreateTransactionLineLocalData>], {
186
+ transactionType: "expense" | "check" | "credit_card_credit" | "transfer" | "journal_entry";
187
+ lineId: string;
188
+ lineUpdates: Partial<CreateTransactionLineLocalData>;
189
+ }, "transactionDetail/updateCreateTransactionLineLocalData", never, never>, addCreateTransactionLine: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionType: "expense" | "check" | "credit_card_credit" | "transfer" | "journal_entry", line?: Partial<CreateTransactionLineLocalData> | undefined], {
190
+ transactionType: "expense" | "check" | "credit_card_credit" | "transfer" | "journal_entry";
191
+ line: Partial<CreateTransactionLineLocalData> | undefined;
192
+ }, "transactionDetail/addCreateTransactionLine", never, never>, removeCreateTransactionLine: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionType: "expense" | "check" | "credit_card_credit" | "transfer" | "journal_entry", lineId: string], {
193
+ transactionType: "expense" | "check" | "credit_card_credit" | "transfer" | "journal_entry";
194
+ lineId: string;
195
+ }, "transactionDetail/removeCreateTransactionLine", never, never>, resetCreateTransactionLocalData: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionType: "expense" | "check" | "credit_card_credit" | "transfer" | "journal_entry"], {
196
+ transactionType: "expense" | "check" | "credit_card_credit" | "transfer" | "journal_entry";
197
+ }, "transactionDetail/resetCreateTransactionLocalData", never, never>, createTransaction: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionType: "expense" | "check" | "credit_card_credit" | "transfer" | "journal_entry"], {
198
+ transactionType: "expense" | "check" | "credit_card_credit" | "transfer" | "journal_entry";
199
+ }, "transactionDetail/createTransaction", never, never>, createTransactionSuccessOrFailure: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[fetchState: FetchState, createdTransactionId?: TransactionID | undefined, error?: ZeniAPIStatus<Record<string, unknown>> | undefined], {
200
+ fetchState: FetchState;
201
+ createdTransactionId: TransactionID | undefined;
202
+ error: ZeniAPIStatus<Record<string, unknown>> | undefined;
203
+ }, "transactionDetail/createTransactionSuccessOrFailure", never, never>, setRecommendationsForCreateTransactionLines: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionType: "expense" | "check" | "credit_card_credit" | "transfer" | "journal_entry", lineIds: string[], recommendations: Recommendation[], isAccountingClassesEnabled: boolean], {
204
+ transactionType: "expense" | "check" | "credit_card_credit" | "transfer" | "journal_entry";
205
+ lineIds: string[];
206
+ recommendations: Recommendation[];
207
+ isAccountingClassesEnabled: boolean;
208
+ }, "transactionDetail/setRecommendationsForCreateTransactionLines", never, never>, clearRecommendationsForCreateTransactionLines: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionType: "expense" | "check" | "credit_card_credit" | "transfer" | "journal_entry", lineIds: string[]], {
209
+ transactionType: "expense" | "check" | "credit_card_credit" | "transfer" | "journal_entry";
210
+ lineIds: string[];
211
+ }, "transactionDetail/clearRecommendationsForCreateTransactionLines", never, never>, fetchVendorRecommendationsForCreateTransaction: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionType: "expense" | "check" | "credit_card_credit" | "transfer" | "journal_entry", lineIds: string[], entity?: Entity | undefined], {
212
+ transactionType: "expense" | "check" | "credit_card_credit" | "transfer" | "journal_entry";
213
+ lineIds: string[];
214
+ entity: Entity | undefined;
215
+ }, "transactionDetail/fetchVendorRecommendationsForCreateTransaction", never, never>, createTransactionAttachmentUploadFailure: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[failedAttachmentFileNames: string[]], {
216
+ failedAttachmentFileNames: string[];
217
+ }, "transactionDetail/createTransactionAttachmentUploadFailure", never, never>;
180
218
  declare const _default: import("redux").Reducer<TransactionDetailState>;
181
219
  export default _default;
@@ -4,11 +4,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  var _a;
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.toggleSplitEditMode = exports.deleteSplitLine = exports.addSplitLine = exports.setIsVendorUpdateAllChecked = exports.updateVendorBulkRecommendationsFetchStatus = exports.updateLatestSelectedEntity = exports.resetAllLineItemsToVendor = exports.updateVendorToAllLineItems = exports.updateLocalDataWithTransactionsUpdateWithVendorCheckbox = exports.resetSelectedCustomer = exports.resetVendor = exports.updateSelectedCustomer = exports.updateSelectedVendor = exports.removeEntityRecommendationForLineIdForTransactionDetail = exports.markCategoryClassRecommendationsFailureForTransactionDetail = exports.markCategoryClassRecommendationsCompletedForTransactionDetail = exports.markCategoryClassRecommendationsInProgressForTransactionDetail = exports.setEntityRecommendationForLineIdsForTransactionDetail = exports.setAllLineItemsLocalDataIsUpdateAllChecked = exports.setAllLineItemsToCategoryClassInLocalData = exports.resetLineItemsCategoryClassInLocalData = exports.clearTransactionDetailLocalData = exports.saveTransactionDetailLocalData = exports.initializeTransactionDetailLocalData = exports.saveTransactionDetail = exports.updateTransactionStateIfUpdateActionNotAllowed = exports.updateStatusConsolidatedSaveTransactionDetail = exports.updateStatusForTransactionNotMiscategorizedUpdate = exports.deleteTransactionAttachmentSuccess = exports.deleteTransactionAttachmentFailure = exports.deleteTransactionAttachment = exports.markTransactionAsNotMiscategorized = exports.clearTransactionDetailSaveStatus = exports.updateTransactionDetailSaveStatus = exports.updateTransactionDetail = exports.uploadMissingAttachmentSuccess = exports.removeTransactionDetail = exports.updateTransactionDetailFetchState = exports.fetchTransactionDetail = exports.downloadAccountingProviderAttachmentFailure = exports.downloadAccountingProviderAttachmentSuccess = exports.downloadAccountingProviderAttachment = exports.initialState = void 0;
7
+ exports.createTransaction = exports.resetCreateTransactionLocalData = exports.removeCreateTransactionLine = exports.addCreateTransactionLine = exports.updateCreateTransactionLineLocalData = exports.updateCreateTransactionLocalData = exports.initializeCreateTransactionLocalData = exports.toggleSplitEditMode = exports.deleteSplitLine = exports.addSplitLine = exports.setIsVendorUpdateAllChecked = exports.updateVendorBulkRecommendationsFetchStatus = exports.updateLatestSelectedEntity = exports.resetAllLineItemsToVendor = exports.updateVendorToAllLineItems = exports.updateLocalDataWithTransactionsUpdateWithVendorCheckbox = exports.resetSelectedCustomer = exports.resetVendor = exports.updateSelectedCustomer = exports.updateSelectedVendor = exports.removeEntityRecommendationForLineIdForTransactionDetail = exports.markCategoryClassRecommendationsFailureForTransactionDetail = exports.markCategoryClassRecommendationsCompletedForTransactionDetail = exports.markCategoryClassRecommendationsInProgressForTransactionDetail = exports.setEntityRecommendationForLineIdsForTransactionDetail = exports.setAllLineItemsLocalDataIsUpdateAllChecked = exports.setAllLineItemsToCategoryClassInLocalData = exports.resetLineItemsCategoryClassInLocalData = exports.clearTransactionDetailLocalData = exports.saveTransactionDetailLocalData = exports.initializeTransactionDetailLocalData = exports.saveTransactionDetail = exports.updateTransactionStateIfUpdateActionNotAllowed = exports.updateStatusConsolidatedSaveTransactionDetail = exports.updateStatusForTransactionNotMiscategorizedUpdate = exports.deleteTransactionAttachmentSuccess = exports.deleteTransactionAttachmentFailure = exports.deleteTransactionAttachment = exports.markTransactionAsNotMiscategorized = exports.clearTransactionDetailSaveStatus = exports.updateTransactionDetailSaveStatus = exports.updateTransactionDetail = exports.uploadMissingAttachmentSuccess = exports.removeTransactionDetail = exports.updateTransactionDetailFetchState = exports.fetchTransactionDetail = exports.downloadAccountingProviderAttachmentFailure = exports.downloadAccountingProviderAttachmentSuccess = exports.downloadAccountingProviderAttachment = exports.initialState = void 0;
8
+ exports.createTransactionAttachmentUploadFailure = exports.fetchVendorRecommendationsForCreateTransaction = exports.clearRecommendationsForCreateTransactionLines = exports.setRecommendationsForCreateTransactionLines = exports.createTransactionSuccessOrFailure = void 0;
8
9
  const toolkit_1 = require("@reduxjs/toolkit");
9
10
  const get_1 = __importDefault(require("lodash/get"));
10
11
  const entity_1 = require("../../entity/genericEntity/entity");
11
12
  const rootActions_1 = require("../../rootActions");
13
+ const createTransactionLocalDataHelper_1 = require("./createTransaction/createTransactionLocalDataHelper");
12
14
  const transactionDetailLocalDataHelper_1 = require("./transactionDetailLocalDataHelper");
13
15
  const transactionDetailState_1 = require("./transactionDetailState");
14
16
  exports.initialState = {
@@ -17,6 +19,10 @@ exports.initialState = {
17
19
  fetchState: 'Not-Started',
18
20
  attachmentDataByID: {},
19
21
  },
22
+ createTransactionsState: {
23
+ createStatus: { fetchState: 'Not-Started' },
24
+ newTransactionState: (0, createTransactionLocalDataHelper_1.getInitialCreateTransactionLocalDataByType)(),
25
+ },
20
26
  };
21
27
  const transactionDetail = (0, toolkit_1.createSlice)({
22
28
  name: 'transactionDetail',
@@ -836,6 +842,196 @@ const transactionDetail = (0, toolkit_1.createSlice)({
836
842
  };
837
843
  },
838
844
  },
845
+ // ---------------------------------------------------------------------------------
846
+ // Create Transaction
847
+ //
848
+ // These live on the transactionDetail slice rather than in createTransaction/ because a
849
+ // createSlice owns exactly one state object, and createTransactionsState is nested inside
850
+ // TransactionDetailState. The derivation itself stays in the folder -- each body below
851
+ // delegates to createTransactionLocalDataHelper.ts.
852
+ //
853
+ // They need no clearAll case of their own: the slice already resets to initialState on
854
+ // tenant switch, and createTransactionsState is part of it.
855
+ // ---------------------------------------------------------------------------------
856
+ /** Trigger only -- initializeCreateTransactionLocalDataEpic does the seeding. */
857
+ initializeCreateTransactionLocalData: {
858
+ reducer(
859
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
860
+ _draft,
861
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
862
+ _action) {
863
+ // no-op
864
+ },
865
+ prepare(transactionType) {
866
+ return { payload: { transactionType } };
867
+ },
868
+ },
869
+ updateCreateTransactionLocalData: {
870
+ reducer(draft, action) {
871
+ const { transactionType, localData } = action.payload;
872
+ const current = draft.createTransactionsState.newTransactionState[transactionType];
873
+ draft.createTransactionsState.newTransactionState[transactionType] =
874
+ (0, createTransactionLocalDataHelper_1.mergeCreateTransactionLocalData)(current, localData);
875
+ },
876
+ prepare(transactionType, localData) {
877
+ return { payload: { transactionType, localData } };
878
+ },
879
+ },
880
+ updateCreateTransactionLineLocalData: {
881
+ reducer(draft, action) {
882
+ const { transactionType, lineId, lineUpdates } = action.payload;
883
+ const current = draft.createTransactionsState.newTransactionState[transactionType];
884
+ current.lines = (0, createTransactionLocalDataHelper_1.updateCreateTransactionLine)(current.lines, lineId, lineUpdates);
885
+ },
886
+ prepare(transactionType, lineId, lineUpdates) {
887
+ return { payload: { transactionType, lineId, lineUpdates } };
888
+ },
889
+ },
890
+ /**
891
+ * `line` is supplied by the caller rather than built here, so a row added after a vendor is
892
+ * already chosen can arrive pre-populated from the cached recommendations instead of blank.
893
+ */
894
+ addCreateTransactionLine: {
895
+ reducer(draft, action) {
896
+ const { transactionType, line } = action.payload;
897
+ draft.createTransactionsState.newTransactionState[transactionType].lines.push({
898
+ ...line,
899
+ id: (0, createTransactionLocalDataHelper_1.nextCreateTransactionLineId)(),
900
+ });
901
+ },
902
+ prepare(transactionType, line) {
903
+ return { payload: { transactionType, line } };
904
+ },
905
+ },
906
+ removeCreateTransactionLine: {
907
+ reducer(draft, action) {
908
+ const { transactionType, lineId } = action.payload;
909
+ const current = draft.createTransactionsState.newTransactionState[transactionType];
910
+ current.lines = current.lines.filter((line) => line.id !== lineId);
911
+ },
912
+ prepare(transactionType, lineId) {
913
+ return { payload: { transactionType, lineId } };
914
+ },
915
+ },
916
+ /**
917
+ * Restores the blank working copy AND re-seeds it, so reopening Create starts from a fresh
918
+ * form rather than the previous transaction's values.
919
+ */
920
+ resetCreateTransactionLocalData: {
921
+ reducer(draft, action) {
922
+ const { transactionType } = action.payload;
923
+ draft.createTransactionsState.newTransactionState[transactionType] =
924
+ (0, createTransactionLocalDataHelper_1.getSeededCreateTransactionLocalData)(transactionType);
925
+ draft.createTransactionsState.createStatus = {
926
+ fetchState: 'Not-Started',
927
+ };
928
+ draft.createTransactionsState.createdTransactionId = undefined;
929
+ },
930
+ prepare(transactionType) {
931
+ return { payload: { transactionType } };
932
+ },
933
+ },
934
+ /** Submit trigger -- createTransactionEpic builds the payload from localData. */
935
+ createTransaction: {
936
+ reducer(draft,
937
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
938
+ _action) {
939
+ draft.createTransactionsState.createStatus = {
940
+ fetchState: 'In-Progress',
941
+ };
942
+ draft.createTransactionsState.createdTransactionId = undefined;
943
+ },
944
+ prepare(transactionType) {
945
+ return { payload: { transactionType } };
946
+ },
947
+ },
948
+ /**
949
+ * Trigger only -- fetchVendorRecommendationsForCreateTransactionEpic does the work.
950
+ * A null entity means the vendor was cleared.
951
+ */
952
+ fetchVendorRecommendationsForCreateTransaction: {
953
+ reducer(
954
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
955
+ _draft,
956
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
957
+ _action) {
958
+ // no-op
959
+ },
960
+ prepare(transactionType, lineIds, entity) {
961
+ return { payload: { transactionType, lineIds, entity } };
962
+ },
963
+ },
964
+ /** Trigger only -- createTransactionAttachmentUploadFailureEpic raises the snackbar. */
965
+ createTransactionAttachmentUploadFailure: {
966
+ reducer(
967
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
968
+ _draft,
969
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
970
+ _action) {
971
+ // no-op
972
+ },
973
+ prepare(failedAttachmentFileNames) {
974
+ return { payload: { failedAttachmentFileNames } };
975
+ },
976
+ },
977
+ /**
978
+ * Writes a vendor's recommendations into the named lines. `lineIds` is explicit rather than
979
+ * "all lines" because a journal entry recommends per line, from that line's own entity.
980
+ */
981
+ setRecommendationsForCreateTransactionLines: {
982
+ reducer(draft, action) {
983
+ const { transactionType, lineIds, recommendations, isAccountingClassesEnabled, } = action.payload;
984
+ const current = draft.createTransactionsState.newTransactionState[transactionType];
985
+ // Clear first: on vendor A -> B, A's prefill is no longer empty, so B's would never
986
+ // replace it. Fields the user picked carry no prefill flag and survive the clear.
987
+ current.lines = current.lines.map((line) => lineIds.includes(line.id)
988
+ ? (0, createTransactionLocalDataHelper_1.applyRecommendationsToCreateTransactionLine)((0, createTransactionLocalDataHelper_1.clearRecommendationsFromCreateTransactionLine)(line), recommendations, isAccountingClassesEnabled)
989
+ : line);
990
+ },
991
+ prepare(transactionType, lineIds, recommendations, isAccountingClassesEnabled) {
992
+ return {
993
+ payload: {
994
+ transactionType,
995
+ lineIds,
996
+ recommendations,
997
+ isAccountingClassesEnabled,
998
+ },
999
+ };
1000
+ },
1001
+ },
1002
+ /** Vendor cleared: drop the dropdown group and undo only what the prefill wrote. */
1003
+ clearRecommendationsForCreateTransactionLines: {
1004
+ reducer(draft, action) {
1005
+ const { transactionType, lineIds } = action.payload;
1006
+ const current = draft.createTransactionsState.newTransactionState[transactionType];
1007
+ current.lines = current.lines.map((line) => lineIds.includes(line.id)
1008
+ ? (0, createTransactionLocalDataHelper_1.clearRecommendationsFromCreateTransactionLine)(line)
1009
+ : line);
1010
+ },
1011
+ prepare(transactionType, lineIds) {
1012
+ return { payload: { transactionType, lineIds } };
1013
+ },
1014
+ },
1015
+ createTransactionSuccessOrFailure: {
1016
+ reducer(draft, action) {
1017
+ const { fetchState, error, createdTransactionId } = action.payload;
1018
+ draft.createTransactionsState.createStatus = { fetchState, error };
1019
+ if (createdTransactionId != null) {
1020
+ draft.createTransactionsState.createdTransactionId =
1021
+ createdTransactionId;
1022
+ // The API will not return a QBO-only row until delta sync, so the optimistic insert
1023
+ // is marked fetched: detail local data can be saved and a fetch is a cache hit.
1024
+ draft.transactionDetailById[(0, transactionDetailState_1.getTransactionDetailKey)(createdTransactionId)] = {
1025
+ ...transactionDetailState_1.initialSupportedTransactionDetail,
1026
+ fetchState: 'Completed',
1027
+ transactionId: createdTransactionId,
1028
+ };
1029
+ }
1030
+ },
1031
+ prepare(fetchState, createdTransactionId, error) {
1032
+ return { payload: { fetchState, createdTransactionId, error } };
1033
+ },
1034
+ },
839
1035
  },
840
1036
  extraReducers: (builder) => {
841
1037
  builder.addCase(rootActions_1.clearAll, (draft) => {
@@ -843,7 +1039,7 @@ const transactionDetail = (0, toolkit_1.createSlice)({
843
1039
  });
844
1040
  },
845
1041
  });
846
- _a = transactionDetail.actions, exports.downloadAccountingProviderAttachment = _a.downloadAccountingProviderAttachment, exports.downloadAccountingProviderAttachmentSuccess = _a.downloadAccountingProviderAttachmentSuccess, exports.downloadAccountingProviderAttachmentFailure = _a.downloadAccountingProviderAttachmentFailure, exports.fetchTransactionDetail = _a.fetchTransactionDetail, exports.updateTransactionDetailFetchState = _a.updateTransactionDetailFetchState, exports.removeTransactionDetail = _a.removeTransactionDetail, exports.uploadMissingAttachmentSuccess = _a.uploadMissingAttachmentSuccess, exports.updateTransactionDetail = _a.updateTransactionDetail, exports.updateTransactionDetailSaveStatus = _a.updateTransactionDetailSaveStatus, exports.clearTransactionDetailSaveStatus = _a.clearTransactionDetailSaveStatus, exports.markTransactionAsNotMiscategorized = _a.markTransactionAsNotMiscategorized, exports.deleteTransactionAttachment = _a.deleteTransactionAttachment, exports.deleteTransactionAttachmentFailure = _a.deleteTransactionAttachmentFailure, exports.deleteTransactionAttachmentSuccess = _a.deleteTransactionAttachmentSuccess, exports.updateStatusForTransactionNotMiscategorizedUpdate = _a.updateStatusForTransactionNotMiscategorizedUpdate, exports.updateStatusConsolidatedSaveTransactionDetail = _a.updateStatusConsolidatedSaveTransactionDetail, exports.updateTransactionStateIfUpdateActionNotAllowed = _a.updateTransactionStateIfUpdateActionNotAllowed, exports.saveTransactionDetail = _a.saveTransactionDetail, exports.initializeTransactionDetailLocalData = _a.initializeTransactionDetailLocalData, exports.saveTransactionDetailLocalData = _a.saveTransactionDetailLocalData, exports.clearTransactionDetailLocalData = _a.clearTransactionDetailLocalData, exports.resetLineItemsCategoryClassInLocalData = _a.resetLineItemsCategoryClassInLocalData, exports.setAllLineItemsToCategoryClassInLocalData = _a.setAllLineItemsToCategoryClassInLocalData, exports.setAllLineItemsLocalDataIsUpdateAllChecked = _a.setAllLineItemsLocalDataIsUpdateAllChecked, exports.setEntityRecommendationForLineIdsForTransactionDetail = _a.setEntityRecommendationForLineIdsForTransactionDetail, exports.markCategoryClassRecommendationsInProgressForTransactionDetail = _a.markCategoryClassRecommendationsInProgressForTransactionDetail, exports.markCategoryClassRecommendationsCompletedForTransactionDetail = _a.markCategoryClassRecommendationsCompletedForTransactionDetail, exports.markCategoryClassRecommendationsFailureForTransactionDetail = _a.markCategoryClassRecommendationsFailureForTransactionDetail, exports.removeEntityRecommendationForLineIdForTransactionDetail = _a.removeEntityRecommendationForLineIdForTransactionDetail, exports.updateSelectedVendor = _a.updateSelectedVendor, exports.updateSelectedCustomer = _a.updateSelectedCustomer, exports.resetVendor = _a.resetVendor, exports.resetSelectedCustomer = _a.resetSelectedCustomer, exports.updateLocalDataWithTransactionsUpdateWithVendorCheckbox = _a.updateLocalDataWithTransactionsUpdateWithVendorCheckbox, exports.updateVendorToAllLineItems = _a.updateVendorToAllLineItems, exports.resetAllLineItemsToVendor = _a.resetAllLineItemsToVendor, exports.updateLatestSelectedEntity = _a.updateLatestSelectedEntity, exports.updateVendorBulkRecommendationsFetchStatus = _a.updateVendorBulkRecommendationsFetchStatus, exports.setIsVendorUpdateAllChecked = _a.setIsVendorUpdateAllChecked, exports.addSplitLine = _a.addSplitLine, exports.deleteSplitLine = _a.deleteSplitLine, exports.toggleSplitEditMode = _a.toggleSplitEditMode;
1042
+ _a = transactionDetail.actions, exports.downloadAccountingProviderAttachment = _a.downloadAccountingProviderAttachment, exports.downloadAccountingProviderAttachmentSuccess = _a.downloadAccountingProviderAttachmentSuccess, exports.downloadAccountingProviderAttachmentFailure = _a.downloadAccountingProviderAttachmentFailure, exports.fetchTransactionDetail = _a.fetchTransactionDetail, exports.updateTransactionDetailFetchState = _a.updateTransactionDetailFetchState, exports.removeTransactionDetail = _a.removeTransactionDetail, exports.uploadMissingAttachmentSuccess = _a.uploadMissingAttachmentSuccess, exports.updateTransactionDetail = _a.updateTransactionDetail, exports.updateTransactionDetailSaveStatus = _a.updateTransactionDetailSaveStatus, exports.clearTransactionDetailSaveStatus = _a.clearTransactionDetailSaveStatus, exports.markTransactionAsNotMiscategorized = _a.markTransactionAsNotMiscategorized, exports.deleteTransactionAttachment = _a.deleteTransactionAttachment, exports.deleteTransactionAttachmentFailure = _a.deleteTransactionAttachmentFailure, exports.deleteTransactionAttachmentSuccess = _a.deleteTransactionAttachmentSuccess, exports.updateStatusForTransactionNotMiscategorizedUpdate = _a.updateStatusForTransactionNotMiscategorizedUpdate, exports.updateStatusConsolidatedSaveTransactionDetail = _a.updateStatusConsolidatedSaveTransactionDetail, exports.updateTransactionStateIfUpdateActionNotAllowed = _a.updateTransactionStateIfUpdateActionNotAllowed, exports.saveTransactionDetail = _a.saveTransactionDetail, exports.initializeTransactionDetailLocalData = _a.initializeTransactionDetailLocalData, exports.saveTransactionDetailLocalData = _a.saveTransactionDetailLocalData, exports.clearTransactionDetailLocalData = _a.clearTransactionDetailLocalData, exports.resetLineItemsCategoryClassInLocalData = _a.resetLineItemsCategoryClassInLocalData, exports.setAllLineItemsToCategoryClassInLocalData = _a.setAllLineItemsToCategoryClassInLocalData, exports.setAllLineItemsLocalDataIsUpdateAllChecked = _a.setAllLineItemsLocalDataIsUpdateAllChecked, exports.setEntityRecommendationForLineIdsForTransactionDetail = _a.setEntityRecommendationForLineIdsForTransactionDetail, exports.markCategoryClassRecommendationsInProgressForTransactionDetail = _a.markCategoryClassRecommendationsInProgressForTransactionDetail, exports.markCategoryClassRecommendationsCompletedForTransactionDetail = _a.markCategoryClassRecommendationsCompletedForTransactionDetail, exports.markCategoryClassRecommendationsFailureForTransactionDetail = _a.markCategoryClassRecommendationsFailureForTransactionDetail, exports.removeEntityRecommendationForLineIdForTransactionDetail = _a.removeEntityRecommendationForLineIdForTransactionDetail, exports.updateSelectedVendor = _a.updateSelectedVendor, exports.updateSelectedCustomer = _a.updateSelectedCustomer, exports.resetVendor = _a.resetVendor, exports.resetSelectedCustomer = _a.resetSelectedCustomer, exports.updateLocalDataWithTransactionsUpdateWithVendorCheckbox = _a.updateLocalDataWithTransactionsUpdateWithVendorCheckbox, exports.updateVendorToAllLineItems = _a.updateVendorToAllLineItems, exports.resetAllLineItemsToVendor = _a.resetAllLineItemsToVendor, exports.updateLatestSelectedEntity = _a.updateLatestSelectedEntity, exports.updateVendorBulkRecommendationsFetchStatus = _a.updateVendorBulkRecommendationsFetchStatus, exports.setIsVendorUpdateAllChecked = _a.setIsVendorUpdateAllChecked, exports.addSplitLine = _a.addSplitLine, exports.deleteSplitLine = _a.deleteSplitLine, exports.toggleSplitEditMode = _a.toggleSplitEditMode, exports.initializeCreateTransactionLocalData = _a.initializeCreateTransactionLocalData, exports.updateCreateTransactionLocalData = _a.updateCreateTransactionLocalData, exports.updateCreateTransactionLineLocalData = _a.updateCreateTransactionLineLocalData, exports.addCreateTransactionLine = _a.addCreateTransactionLine, exports.removeCreateTransactionLine = _a.removeCreateTransactionLine, exports.resetCreateTransactionLocalData = _a.resetCreateTransactionLocalData, exports.createTransaction = _a.createTransaction, exports.createTransactionSuccessOrFailure = _a.createTransactionSuccessOrFailure, exports.setRecommendationsForCreateTransactionLines = _a.setRecommendationsForCreateTransactionLines, exports.clearRecommendationsForCreateTransactionLines = _a.clearRecommendationsForCreateTransactionLines, exports.fetchVendorRecommendationsForCreateTransaction = _a.fetchVendorRecommendationsForCreateTransaction, exports.createTransactionAttachmentUploadFailure = _a.createTransactionAttachmentUploadFailure;
847
1043
  exports.default = transactionDetail.reducer;
848
1044
  function getUpdatedEntityLocalData(detail, updates, entity, resetRecommendations, type) {
849
1045
  const key = type === 'customer' ? 'customerUpdates' : 'vendorUpdates';
@@ -11,6 +11,7 @@ import { TransactionID } from '../../entity/transaction/stateTypes/transactionID
11
11
  import { TransactionCategory } from '../../entity/transaction/stateTypes/transactionType';
12
12
  import { VendorBase } from '../../entity/vendor/vendorState';
13
13
  import { EntityRecommendationKey } from '../recommendation/recommendationState';
14
+ import { CreateTransactionLocalDataByType } from './createTransaction/createTransactionState';
14
15
  import { TransactionDetailLineItemData, TransactionDetailLocalData } from './transactionDetailTypes';
15
16
  export declare const getTransactionDetailKey: (transactionId: TransactionID) => `${string}_expense` | `${string}_check` | `${string}_invoice` | `${string}_payment` | `${string}_credit_memo` | `${string}_sales_receipt` | `${string}_delayed_credit` | `${string}_delayed_charge` | `${string}_refund` | `${string}_bill` | `${string}_bill_payment` | `${string}_bill_payment_check` | `${string}_bill_payment_credit_card` | `${string}_vendor_credit` | `${string}_credit_card_credit` | `${string}_transfer` | `${string}_credit_card_payment` | `${string}_deposit` | `${string}_journal_entry`;
16
17
  export type TransactionDetailKey = ReturnType<typeof getTransactionDetailKey>;
@@ -44,11 +45,22 @@ interface AccountingProviderAttachment {
44
45
  fetchState: FetchStateAndError;
45
46
  }
46
47
  export declare const initialSupportedTransactionDetail: SupportedTransactionDetail;
48
+ export interface CreateTransactionsState {
49
+ createStatus: FetchStateAndError;
50
+ /**
51
+ * Keyed by type so switching type in the Create dropdown does not clobber a draft the user
52
+ * already started on another type.
53
+ */
54
+ newTransactionState: CreateTransactionLocalDataByType;
55
+ /** Set on a successful create, so the page can navigate to the new transaction. */
56
+ createdTransactionId?: TransactionID;
57
+ }
47
58
  export interface TransactionDetailState {
48
59
  accountingProviderAttachment: {
49
60
  attachmentDataByID: Record<ID, ArrayBuffer>;
50
61
  fetchState: FetchState;
51
62
  };
63
+ createTransactionsState: CreateTransactionsState;
52
64
  transactionDetailById: Record<TransactionDetailKey, SupportedTransactionDetail | undefined>;
53
65
  }
54
66
  export interface TransactionLineUpdates {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeniai/client-epic-state",
3
- "version": "5.2.90",
3
+ "version": "5.2.92",
4
4
  "description": "Shared module between Web & Mobile containing required abstractions for state management, async network communication. ",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib/esm/index.js",