@mx-cartographer/experiences 9.5.0 → 9.5.1

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 (93) hide show
  1. package/CHANGELOG.md +4 -1
  2. package/dist/accounts/components/AccountListItem.es.js +1 -1
  3. package/dist/accounts/components/AccountsList.es.js +1 -1
  4. package/dist/accounts/components/detailsdrawer/Accounts/AccountConnection.es.js +3 -3
  5. package/dist/accounts/components/detailsdrawer/Accounts/ConnectionErrorMessage.es.js +3 -3
  6. package/dist/accounts/utils/AccountFields.es.js +11 -11
  7. package/dist/budgets/BubbleBudgetsMiniWidget.es.js +1 -1
  8. package/dist/budgets/components/Overview.es.js +1 -1
  9. package/dist/budgets/components/addbudget/UnbudgetedRow.es.js +4 -4
  10. package/dist/budgets/components/shared/BudgetDetailsTopSection.es.js +1 -1
  11. package/dist/cashflow/CashflowOnboarding.es.js +57 -55
  12. package/dist/cashflow/CashflowOnboarding.es.js.map +1 -1
  13. package/dist/cashflow/CashflowWidget.es.js +1 -1
  14. package/dist/cashflow/components/SummaryTab.es.js +1 -1
  15. package/dist/common/hooks/index.d.ts +1 -0
  16. package/dist/common/hooks/useRepeatingTransactionEligibility.d.ts +6 -0
  17. package/dist/common/hooks/useRepeatingTransactionEligibility.es.js +12 -0
  18. package/dist/common/hooks/useRepeatingTransactionEligibility.es.js.map +1 -0
  19. package/dist/common/index.es.js +114 -112
  20. package/dist/core/constants/repeatingTransactions.d.ts +5 -2
  21. package/dist/core/constants/repeatingTransactions.es.js +24 -9
  22. package/dist/core/constants/repeatingTransactions.es.js.map +1 -1
  23. package/dist/core/index.es.js +79 -79
  24. package/dist/core/stores/AccountStore.es.js +1 -1
  25. package/dist/core/stores/CashflowStore.es.js +1 -1
  26. package/dist/core/stores/CategoryStore.es.js +1 -1
  27. package/dist/core/stores/FinstrongStore.es.js +4 -4
  28. package/dist/core/stores/GoalStore.es.js +1 -1
  29. package/dist/core/stores/RecurringTransactionsStore.es.js +9 -9
  30. package/dist/core/stores/SettingsStore.es.js +7 -7
  31. package/dist/core/stores/TransactionStore.es.js +13 -13
  32. package/dist/core/utils/BudgetUtil.es.js +1 -1
  33. package/dist/core/utils/DateUtil.es.js +5 -5
  34. package/dist/core/utils/DebtUtils.es.js +6 -6
  35. package/dist/core/utils/RecurringTransactionsUtil.d.ts +13 -1
  36. package/dist/core/utils/RecurringTransactionsUtil.es.js +111 -106
  37. package/dist/core/utils/RecurringTransactionsUtil.es.js.map +1 -1
  38. package/dist/core/utils/TransactionUtils.es.js +6 -6
  39. package/dist/debts/DebtsWidget.es.js +1 -1
  40. package/dist/debts/components/DebtsChart.es.js +4 -4
  41. package/dist/debts/components/DebtsTable.es.js +6 -6
  42. package/dist/debts/components/actions/ExtraPaymentAction.es.js +4 -4
  43. package/dist/debts/components/actions/InterestRateAction.es.js +4 -4
  44. package/dist/debts/components/actions/MonthlyPaymentAction.es.js +4 -4
  45. package/dist/debts/components/actions/OriginalBalanceAction.es.js +4 -4
  46. package/dist/debts/components/debtsdrawer/DebtScheduleTab.es.js +1 -1
  47. package/dist/finstrong/components/MaintainingEmergencySavings/MaintainingEmergencySavingsContent.es.js +4 -4
  48. package/dist/finstrong/components/ProfileDrawer.es.js +1 -1
  49. package/dist/finstrong/components/SaveEnoughToLiveOn/AvailableTabContent.es.js +1 -1
  50. package/dist/finstrong/components/onboarding/OnboardingStepsDrawer.es.js +106 -104
  51. package/dist/finstrong/components/onboarding/OnboardingStepsDrawer.es.js.map +1 -1
  52. package/dist/finstrong/components/shared/Accounts.es.js +4 -4
  53. package/dist/finstrong/components/shared/Transactions.es.js +4 -4
  54. package/dist/goals/GoalsWidget.es.js +7 -7
  55. package/dist/goals/components/AccountSelectionDrawer.es.js +4 -4
  56. package/dist/goals/components/AddGoal.es.js +1 -1
  57. package/dist/goals/components/GoalDetailsDrawer.es.js +1 -1
  58. package/dist/goals/components/ManageGoals.es.js +1 -1
  59. package/dist/goals/components/actions/ChangeAccountAction.es.js +1 -1
  60. package/dist/goals/components/managegoals/OngoingListItem.es.js +4 -4
  61. package/dist/insights/components/shared/DrillDownCalculation/DrillDownCalculation.es.js +1 -1
  62. package/dist/insights-v2/actionBlocks/TransactionHistoryBlock/TransactionHistoryBlock.es.js +4 -4
  63. package/dist/insights-v2/blocks/ChartBlocks/BarchartBlock/utils.es.js +1 -1
  64. package/dist/insights-v2/blocks/ComponentBlocks/BudgetBlock/BudgetBlock.es.js +1 -1
  65. package/dist/investments/InvestmentsWidget.es.js +7 -7
  66. package/dist/recurringtransactions/components/RecurringTransactionDetails.es.js +10 -10
  67. package/dist/recurringtransactions/components/RecurringTransactionDetailsDrawer.es.js +4 -4
  68. package/dist/recurringtransactions/components/RecurringTransactionList.es.js +10 -10
  69. package/dist/recurringtransactions/components/actions/LinkTransactionDrawer.es.js +4 -4
  70. package/dist/recurringtransactions/components/actions/PaymentScheduleAction.es.js +6 -6
  71. package/dist/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.es.js +45 -43
  72. package/dist/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.es.js.map +1 -1
  73. package/dist/recurringtransactions/components/shared/recurringsettings/ManageExpenses.es.js +1 -1
  74. package/dist/recurringtransactions/components/shared/recurringsettings/ManageIncome.es.js +1 -1
  75. package/dist/recurringtransactions/components/shared/recurringsettings/RecurringRow.es.js +6 -6
  76. package/dist/recurringtransactions/components/shared/recurringsettings/SelectTransaction.d.ts +7 -1
  77. package/dist/recurringtransactions/components/shared/recurringsettings/SelectTransaction.es.js +15 -16
  78. package/dist/recurringtransactions/components/shared/recurringsettings/SelectTransaction.es.js.map +1 -1
  79. package/dist/settings/components/devices/DeviceList.es.js +1 -1
  80. package/dist/settings/components/devices/DeviceTable.es.js +1 -1
  81. package/dist/settings/components/notifications/AccountProfileListItem.es.js +5 -5
  82. package/dist/settings/components/notifications/NotificationSettings.es.js +1 -1
  83. package/dist/spending/components/SpendingDonut.es.js +1 -1
  84. package/dist/transactions/components/shared/TransactionDetails.es.js +8 -8
  85. package/dist/transactions/components/shared/TransactionList.es.js +4 -4
  86. package/dist/transactions/components/shared/transactiondetails/actions/AddMerchantBudgetAction.es.js +1 -1
  87. package/dist/transactions/components/shared/transactiondetails/actions/DateAction.es.js +6 -6
  88. package/dist/transactions/components/splitmanager/SplitManager.es.js +4 -4
  89. package/dist/transactions/utils/Transactions.es.js +1 -1
  90. package/dist/trends/components/CategoriesListItem.es.js +4 -4
  91. package/dist/trends/components/CategoryDetails.es.js +6 -6
  92. package/dist/trends/components/TrendsChart.es.js +1 -1
  93. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## [9.5.1] - 10-09-2026
2
+
3
+ - **CHANGED** - Repeating-transaction eligibility now mirrors Sherlock (account-type gate plus merchant, or leaf bill/utility category with description, or payroll with description) and is an input to `SelectTransaction`; the eligibility filter is removed from Mark as Paid (MEW-4168)
4
+
1
5
  ## [9.5.0] - 10-09-2026
2
6
 
3
7
  - **CHANGED** - Date pickers and data grids now use MUI X v8, the same version as mxui, which fixes the empty From and To fields in the small-screen date range picker MEW-4216
@@ -27,7 +31,6 @@
27
31
 
28
32
  - **ADDED** - `transaction_list_block` (Transaction List) action block: opens a date-grouped drawer of the transactions a beat points at, with a nested Transaction Details drawer stacked on row click. Resolves rows via `instance_slot_data.transaction_guids` (id-list path), guarded by `Array.isArray` at the untrusted-payload boundary. `usePrepare` shares `useTransactionDetailsPrepare` so `detailedTransactions` is loaded on open — the drawer never opens on a permanent spinner. The registry entry titles the drawer from `insights_payload.title` (matching the WEC-1804 move off `beat.html_title`, which carries HTML entities); when the resolver returns an empty string, `ActionBlockLayer` falls back to the CTA label. Nested close clears the shared `transaction_guid` from action context, matching the sibling `TransactionHistoryBlock` convention. Only the `Standard` variant ships in this MR; the other three variants (`w/Summary`, `w/Status`, `w/Help`) are deferred to a follow-up MR after Figma review surfaced structural mismatches. Unblocks WEC-1461 and WEC-1462. (WEC-1425)
29
33
  - **CHANGED** - `ActionBlockEntry.title` resolver signature widened to `(variant, copy, beat?)` so blocks can title from beat fields. `ActionBlockLayer` passes `beat` through and falls back to the CTA label when the resolver returns an empty string (`||`), not only when it returns `undefined` (`??`). Existing resolvers accept the extra parameter without change. (WEC-1425)
30
-
31
34
  ## [9.4.67] - 10-08-2026
32
35
 
33
36
  - **FIXED** - Trends tabular view shows the shared zero-state message instead of the grid's default "No rows" when a table is empty MEW-4097
@@ -1,6 +1,6 @@
1
+ import { ConnectionStatus as l } from "../../core/types/Account.es.js";
1
2
  import _ from "../../common/hooks/useAccountDisplayName.es.js";
2
3
  import { useAppConfig as v, useGlobalCopyStore as I } from "../../common/context/hooks.es.js";
3
- import { ConnectionStatus as l } from "../../core/types/Account.es.js";
4
4
  import { formatCurrency as C } from "../../core/utils/NumberFormatting.es.js";
5
5
  import { getAccountBalanceDetails as L } from "../utils/AccountFields.es.js";
6
6
  import { ErrorStatus as S } from "./ConnectionStatusIcons.es.js";
@@ -1,6 +1,6 @@
1
1
  import { useAccountStore as R, useAppConfig as U, useEvent as D, useGlobalCopyStore as M, useGlobalUiStore as F } from "../../common/context/hooks.es.js";
2
- import { ANALYTICS_EVENTS as V } from "../../common/constants/Analytics.es.js";
3
2
  import { formatCurrency as y } from "../../core/utils/NumberFormatting.es.js";
3
+ import { ANALYTICS_EVENTS as V } from "../../common/constants/Analytics.es.js";
4
4
  import { useAccountUiStore as H } from "../hooks/useUiStore.es.js";
5
5
  import { getClosedAccountBalanceTotal as K } from "../utils/AccountFields.es.js";
6
6
  import x from "./AccountListItem.es.js";
@@ -1,5 +1,5 @@
1
- import { useGlobalCopyStore as y } from "../../../../common/context/hooks.es.js";
2
- import { NonConnectedStatuses as x } from "../../../../core/types/Account.es.js";
1
+ import { NonConnectedStatuses as y } from "../../../../core/types/Account.es.js";
2
+ import { useGlobalCopyStore as x } from "../../../../common/context/hooks.es.js";
3
3
  import k from "../../../../common/components/ConnectDrawer.es.js";
4
4
  import i from "../../../../common/components/IconBacking.es.js";
5
5
  import { useAccountUiStore as _ } from "../../../hooks/useUiStore.es.js";
@@ -23,7 +23,7 @@ var m = {
23
23
  gridColumn: 1,
24
24
  zIndex: 2
25
25
  }, B = () => {
26
- const [l, d] = v.useState(!1), { palette: { mode: u } } = R(), { selectedMember: e } = _(), { accounts: g, connect: C } = y(), t = S(e, C), r = x.includes(e.connection_status) ? {
26
+ const [l, d] = v.useState(!1), { palette: { mode: u } } = R(), { selectedMember: e } = _(), { accounts: g, connect: C } = x(), t = S(e, C), r = y.includes(e.connection_status) ? {
27
27
  color: "error.main",
28
28
  ctaCopy: t.cta ?? "",
29
29
  icon: /* @__PURE__ */ o(L, {
@@ -1,5 +1,5 @@
1
- import { useGlobalCopyStore as f } from "../../../../common/context/hooks.es.js";
2
- import { NonConnectedStatuses as u } from "../../../../core/types/Account.es.js";
1
+ import { NonConnectedStatuses as f } from "../../../../core/types/Account.es.js";
2
+ import { useGlobalCopyStore as u } from "../../../../common/context/hooks.es.js";
3
3
  import d from "../../../../common/components/ConnectDrawer.es.js";
4
4
  import { useAccountUiStore as p } from "../../../hooks/useUiStore.es.js";
5
5
  import { getConnectionMessages as g } from "../../../utils/getConnectionMessages.es.js";
@@ -13,7 +13,7 @@ import _ from "@mui/material/Alert";
13
13
  import v from "@mui/material/AlertTitle";
14
14
  import w from "@mui/material/Link";
15
15
  var y = ({ setTabValue: c }) => {
16
- const [n, i] = s.useState(!1), { selectedMember: e } = p(), { accounts: m, connect: l } = f(), t = e.connection_status && u.includes(e.connection_status);
16
+ const [n, i] = s.useState(!1), { selectedMember: e } = p(), { accounts: m, connect: l } = u(), t = e.connection_status && f.includes(e.connection_status);
17
17
  if (s.useEffect(() => {
18
18
  t && c(1);
19
19
  }, [t]), !t) return;
@@ -1,9 +1,9 @@
1
1
  import { buildDynamicCopy as i } from "../../core/utils/Localization.es.js";
2
2
  import { DATE_FORMATS_INTL as c, formatDate as y } from "../../core/constants/DateFormats.es.js";
3
3
  import { AccountIcon as F, AccountType as d, PropertyIcon as T, PropertyType as g } from "../../core/types/Account.es.js";
4
- import { getAccountStartingBalance as o, isAccountLiability as A, isManual as D, usesCreditLimitField as O, usesInterestRateField as C, usesOriginalBalanceField as N } from "../../core/utils/AccountUtils.es.js";
5
- import { formatCurrency as _, formatOrdinal as S, formatPercentage as I, isValidNumber as b } from "../../core/utils/NumberFormatting.es.js";
6
4
  import { fromUnixUTC as v } from "../../core/utils/DateUtil.es.js";
5
+ import { formatCurrency as _, formatOrdinal as A, formatPercentage as D, isValidNumber as o } from "../../core/utils/NumberFormatting.es.js";
6
+ import { getAccountStartingBalance as b, isAccountLiability as O, isManual as C, usesCreditLimitField as N, usesInterestRateField as S, usesOriginalBalanceField as I } from "../../core/utils/AccountUtils.es.js";
7
7
  import { FieldType as m } from "../constants/Accounts.es.js";
8
8
  import { Icon as f, Text as L } from "@mxenabled/mxui";
9
9
  import { jsx as p } from "react/jsx-runtime";
@@ -17,7 +17,7 @@ var B = (r, e) => {
17
17
  validation: (t) => t ? "" : i(e.field_is_required, e.account_name),
18
18
  valueFormatter: (t) => t
19
19
  }];
20
- if (D(r)) {
20
+ if (C(r)) {
21
21
  l.unshift({
22
22
  label: e.account_balance,
23
23
  name: "balance",
@@ -54,7 +54,7 @@ var B = (r, e) => {
54
54
  valueFormatter: (a) => t.find((n) => n.value === a)?.label
55
55
  });
56
56
  }
57
- if (C(r)) {
57
+ if (S(r)) {
58
58
  let t = e.interest_rate, a = "interest_rate";
59
59
  r.is_manual || (typeof r.apr == "number" && (t = e.apr, a = "apr"), typeof r.apy == "number" && (t = e.apy, a = "apy")), l.push({
60
60
  event: "account_details_click_interest_rate",
@@ -62,11 +62,11 @@ var B = (r, e) => {
62
62
  name: a,
63
63
  placeholder: i(e.enter_value, t),
64
64
  type: m.Input,
65
- validation: (n) => b(n) ? "" : e.error_amount_is_invalid,
66
- valueFormatter: (n) => b(n) ? I(n / 100) : n
65
+ validation: (n) => o(n) ? "" : e.error_amount_is_invalid,
66
+ valueFormatter: (n) => o(n) ? D(n / 100) : n
67
67
  });
68
68
  }
69
- return A(r) && (l.push({
69
+ return O(r) && (l.push({
70
70
  label: e.minimum_payment,
71
71
  name: "minimum_payment",
72
72
  placeholder: i(e.enter_value, e.minimum_payment),
@@ -85,14 +85,14 @@ var B = (r, e) => {
85
85
  name: "day_payment_is_due",
86
86
  placeholder: i(e.enter_value, e.day_payment_due),
87
87
  type: m.Date,
88
- valueFormatter: (t) => i(e.day_of_every_month, S(t <= 31 ? t : new Date(t).getDate()))
89
- })), O(r) && l.push({
88
+ valueFormatter: (t) => i(e.day_of_every_month, A(t <= 31 ? t : new Date(t).getDate()))
89
+ })), N(r) && l.push({
90
90
  label: e.credit_limit,
91
91
  name: "credit_limit",
92
92
  placeholder: i(e.enter_value, e.credit_limit),
93
93
  type: m.Currency,
94
94
  valueFormatter: (t) => _(t, "0,0.00")
95
- }), N(r) && l.push({
95
+ }), I(r) && l.push({
96
96
  label: e.original_balance,
97
97
  minAmount: 1,
98
98
  name: "original_balance",
@@ -105,7 +105,7 @@ var B = (r, e) => {
105
105
  switch (r.account_type) {
106
106
  case 1:
107
107
  case 2:
108
- r.available_balance != null && l ? (t = e.available_balance, a = o(r, l), n = e.current_balance, u = _(r.balance, "0,0.00"), s = !0) : (t = e.current_balance, a = o(r, l));
108
+ r.available_balance != null && l ? (t = e.available_balance, a = b(r, l), n = e.current_balance, u = _(r.balance, "0,0.00"), s = !0) : (t = e.current_balance, a = b(r, l));
109
109
  break;
110
110
  default:
111
111
  if (t = e.current_balance, a = r.balance, r.minimum_payment && r.payment_due_at) {
@@ -1,8 +1,8 @@
1
1
  import { useBudgetsStore as S, useCategoryStore as x, useEvent as E, useGlobalCopyStore as L, useGlobalUiStore as T, useWidgetContainerProvider as W } from "../common/context/hooks.es.js";
2
+ import { formatCurrency as p } from "../core/utils/NumberFormatting.es.js";
2
3
  import { useWidgetLoadTimer as w } from "../common/hooks/useWidgetLoadTimer.es.js";
3
4
  import O from "../common/components/drawer/Drawer.es.js";
4
5
  import { ANALYTICS_EVENTS as R } from "../common/constants/Analytics.es.js";
5
- import { formatCurrency as p } from "../core/utils/NumberFormatting.es.js";
6
6
  import { getBudgetDifference as H } from "../core/utils/BudgetUtil.es.js";
7
7
  import I from "../common/components/MiniWidgetContainer.es.js";
8
8
  import j from "../common/components/Loader.es.js";
@@ -1,9 +1,9 @@
1
1
  import { buildDynamicCopy as C } from "../../core/utils/Localization.es.js";
2
2
  import v from "../../common/components/charts/StatusBar.es.js";
3
3
  import { useAccountStore as M, useBudgetsStore as P, useCategoryStore as L, useEvent as N, useGlobalCopyStore as R, useRecurringTransactionsStore as $, useTransactionStore as j } from "../../common/context/hooks.es.js";
4
+ import { formatCurrency as c } from "../../core/utils/NumberFormatting.es.js";
4
5
  import k from "../../common/components/drawer/Drawer.es.js";
5
6
  import { ANALYTICS_EVENTS as G } from "../../common/constants/Analytics.es.js";
6
- import { formatCurrency as c } from "../../core/utils/NumberFormatting.es.js";
7
7
  import { ManageIncome as H } from "../../recurringtransactions/components/shared/recurringsettings/ManageIncome.es.js";
8
8
  import d from "react";
9
9
  import { observer as F } from "mobx-react-lite";
@@ -1,6 +1,6 @@
1
1
  import { useGlobalCopyStore as p } from "../../../common/context/hooks.es.js";
2
- import c from "../../../common/components/dialog/Dialog.es.js";
3
- import { formatCurrency as f } from "../../../core/utils/NumberFormatting.es.js";
2
+ import { formatCurrency as c } from "../../../core/utils/NumberFormatting.es.js";
3
+ import f from "../../../common/components/dialog/Dialog.es.js";
4
4
  import { BudgetAmount as A } from "../shared/BudgetAmount.es.js";
5
5
  import n from "react";
6
6
  import { observer as b } from "mobx-react-lite";
@@ -12,7 +12,7 @@ import _ from "@mui/material/ListItemButton";
12
12
  import x from "@mui/material/ListItemText";
13
13
  import B from "@mui/material/ListItemSecondaryAction";
14
14
  var w = b(({ category: t, onAddBudget: s }) => {
15
- const { budgets: m, common: d } = p(), [u, r] = n.useState(!1), [e, l] = n.useState(`${t.totalAmount === 0 ? "" : t.totalAmount}`), i = f(t.totalAmount, "0,0");
15
+ const { budgets: m, common: d } = p(), [u, r] = n.useState(!1), [e, l] = n.useState(`${t.totalAmount === 0 ? "" : t.totalAmount}`), i = c(t.totalAmount, "0,0");
16
16
  return /* @__PURE__ */ a(C, { children: [/* @__PURE__ */ a(_, {
17
17
  "aria-label": `${m.add_title}: ${t.name}, ${i}`,
18
18
  onClick: () => r(!0),
@@ -27,7 +27,7 @@ var w = b(({ category: t, onAddBudget: s }) => {
27
27
  size: 20
28
28
  }) })
29
29
  ]
30
- }), /* @__PURE__ */ o(c, {
30
+ }), /* @__PURE__ */ o(f, {
31
31
  copy: {
32
32
  close_aria: d.close_aria,
33
33
  title: m.add_title
@@ -1,7 +1,7 @@
1
1
  import { buildDynamicCopy as m } from "../../../core/utils/Localization.es.js";
2
2
  import { useGlobalCopyStore as h } from "../../../common/context/hooks.es.js";
3
- import { formatCurrency as t } from "../../../core/utils/NumberFormatting.es.js";
4
3
  import { fromTimestampToMonthYear as x } from "../../../core/utils/DateUtil.es.js";
4
+ import { formatCurrency as t } from "../../../core/utils/NumberFormatting.es.js";
5
5
  import u from "../../../insights/components/shared/StatusIndicator.es.js";
6
6
  import g from "react";
7
7
  import a from "@mui/material/Stack";
@@ -1,58 +1,59 @@
1
- import { useCashflowStore as te, useGlobalCopyStore as re, useGlobalUiStore as oe, useRecurringTransactionsStore as ne, useTransactionStore as ie, useUserStore as ae } from "../common/context/hooks.es.js";
2
- import { useScreenSize as ce } from "../common/hooks/useScreenSize.es.js";
3
- import { Frequency as se, RepeatingType as F } from "../core/types/RepeatingTransaction.es.js";
4
- import { fromUnixToDayOfWeekAndDate as me } from "../core/utils/DateUtil.es.js";
1
+ import { useCashflowStore as re, useGlobalCopyStore as oe, useGlobalUiStore as ne, useRecurringTransactionsStore as ie, useTransactionStore as ae, useUserStore as ce } from "../common/context/hooks.es.js";
2
+ import { useScreenSize as se } from "../common/hooks/useScreenSize.es.js";
3
+ import { Frequency as me, RepeatingType as F } from "../core/types/RepeatingTransaction.es.js";
4
+ import { fromUnixToDayOfWeekAndDate as de } from "../core/utils/DateUtil.es.js";
5
5
  import { getNextPaymentDate as v } from "../core/utils/RecurringTransactionsUtil.es.js";
6
- import de from "../common/components/Loader.es.js";
7
- import le from "../transactions/components/shared/transactionlist/TransactionRow.es.js";
8
- import pe from "../common/components/SubheaderRow.es.js";
9
- import { incomeFilter as O, incomeFilterSearch as ue } from "../transactions/utils/Filters.es.js";
10
- import { SelectTransaction as fe } from "../recurringtransactions/components/shared/recurringsettings/SelectTransaction.es.js";
11
- import { AddRecurringTransactionDetails as ge } from "../recurringtransactions/components/shared/recurringsettings/AddRecurringTransactionDetails.es.js";
12
- import { useCashflowUiStore as he } from "./context/hooks.es.js";
13
- import ye from "./components/onboarding/StepOne.es.js";
14
- import { CASHFLOW_IMAGES as xe } from "./constants/CashflowImages.es.js";
15
- import _e from "./components/onboarding/StepTwo.es.js";
6
+ import { useRepeatingTransactionEligibility as le } from "../common/hooks/useRepeatingTransactionEligibility.es.js";
7
+ import pe from "../common/components/Loader.es.js";
8
+ import ue from "../transactions/components/shared/transactionlist/TransactionRow.es.js";
9
+ import fe from "../common/components/SubheaderRow.es.js";
10
+ import { incomeFilter as O, incomeFilterSearch as ge } from "../transactions/utils/Filters.es.js";
11
+ import { SelectTransaction as he } from "../recurringtransactions/components/shared/recurringsettings/SelectTransaction.es.js";
12
+ import { AddRecurringTransactionDetails as ye } from "../recurringtransactions/components/shared/recurringsettings/AddRecurringTransactionDetails.es.js";
13
+ import { useCashflowUiStore as xe } from "./context/hooks.es.js";
14
+ import _e from "./components/onboarding/StepOne.es.js";
15
+ import { CASHFLOW_IMAGES as be } from "./constants/CashflowImages.es.js";
16
+ import Se from "./components/onboarding/StepTwo.es.js";
16
17
  import m, { useState as d } from "react";
17
- import { observer as Se } from "mobx-react-lite";
18
+ import { observer as De } from "mobx-react-lite";
18
19
  import h from "@mui/material/Stack";
19
- import { H2 as be, Icon as R, P as W } from "@mxenabled/mxui";
20
- import { startOfMonth as De } from "date-fns/startOfMonth";
20
+ import { H2 as Te, Icon as R, P as W } from "@mxenabled/mxui";
21
+ import { startOfMonth as Ce } from "date-fns/startOfMonth";
21
22
  import { startOfToday as A } from "date-fns/startOfToday";
22
23
  import l from "@mui/material/Button";
23
24
  import { Fragment as G, jsx as e, jsxs as i } from "react/jsx-runtime";
24
- import { keyframes as Te, useTheme as Ce } from "@mui/material/styles";
25
+ import { keyframes as ke, useTheme as Ie } from "@mui/material/styles";
25
26
  import p from "@mui/material/Box";
26
- import { subDays as ke } from "date-fns/subDays";
27
+ import { subDays as we } from "date-fns/subDays";
28
+ import { formatISO as Fe } from "date-fns/formatISO";
27
29
  import { fromUnixTime as U } from "date-fns/fromUnixTime";
28
- import { getUnixTime as Ie } from "date-fns/getUnixTime";
29
- import { formatISO as we } from "date-fns/formatISO";
30
+ import { getUnixTime as ve } from "date-fns/getUnixTime";
30
31
  import L from "@mui/material/Divider";
31
- import Fe from "@mui/material/List";
32
- var ve = Te`
32
+ import Oe from "@mui/material/List";
33
+ var Re = ke`
33
34
  from {
34
35
  transform: rotate(0deg);
35
36
  }
36
37
  to {
37
38
  transform: rotate(360deg);
38
39
  }
39
- `, Oe = () => {
40
- const { addRepeatingTransaction: M, repeatingTransactions: q } = ne(), { cashflow: a, common: y } = re(), { user: N } = ae(), { completeOnboarding: x } = te(), { isDirty: z } = he(), { isMobile: c } = ce(), { isCopyLoaded: B, setDisplayedDate: H } = oe(), { filter: _, setFilter: S, transactions: b } = ie(), P = Ce(), [$, u] = d(!0), [s, j] = m.useState(se.EveryMonth), [E, J] = m.useState(1), [D, K] = m.useState(15), [T, Q] = d(!1), [f, C] = d(1), [o, X] = d([]), [k, g] = d(""), n = m.useMemo(() => b.find((t) => t.guid === k), [k, b]), Y = !!q.filter((t) => t.repeating_transaction_type === F.Income).length, I = async () => {
41
- C(2), H(De(ke(A(), 90)), A()), S({
40
+ `, We = () => {
41
+ const { addRepeatingTransaction: M, repeatingTransactions: q } = ie(), { cashflow: a, common: y } = oe(), { user: N } = ce(), { completeOnboarding: x } = re(), { isDirty: z } = xe(), { isMobile: c } = se(), { isCopyLoaded: B, setDisplayedDate: E } = ne(), { filter: _, setFilter: b, transactions: S } = ae(), H = le(), P = Ie(), [$, u] = d(!0), [s, j] = m.useState(me.EveryMonth), [J, K] = m.useState(1), [D, Q] = m.useState(15), [T, X] = d(!1), [f, C] = d(1), [o, Y] = d([]), [k, g] = d(""), n = m.useMemo(() => S.find((t) => t.guid === k), [k, S]), Z = !!q.filter((t) => t.repeating_transaction_type === F.Income).length, I = async () => {
42
+ C(2), E(Ce(we(A(), 90)), A()), b({
42
43
  ..._,
43
44
  custom: O
44
45
  }), C(3);
45
- }, Z = async () => {
46
+ }, V = async () => {
46
47
  if (!(o.length < 1)) {
47
- Q(!0);
48
+ X(!0);
48
49
  for (let t = 0; t < o.length; t++) {
49
- const r = o[t], w = v(s, U(r.date)), ee = {
50
+ const r = o[t], w = v(s, U(r.date)), te = {
50
51
  account_guid: r.account_guid,
51
52
  amount: r.amount,
52
53
  created_by: 0,
53
54
  merchant_guid: r.merchant_guid,
54
- description: r.feed_description || r.description,
55
- predicted_occurs_on: we(w, { representation: "date" }),
55
+ description: r.payee || r.description || r.feed_description,
56
+ predicted_occurs_on: Fe(w, { representation: "date" }),
56
57
  recurrence_day: w.getDay(),
57
58
  recurrence_type: s,
58
59
  repeating_transaction_type: F.Income,
@@ -60,17 +61,17 @@ var ve = Te`
60
61
  transaction_type: r.transaction_type,
61
62
  user_guid: N.guid
62
63
  };
63
- await M(ee, r);
64
+ await M(te, r);
64
65
  }
65
66
  await x();
66
67
  }
67
- }, V = !n && $ || !n && o.length < 1;
68
+ }, ee = !n && $ || !n && o.length < 1;
68
69
  return B ? /* @__PURE__ */ i(p, {
69
70
  sx: {
70
71
  display: "flex",
71
72
  alignItems: c ? "flex-start" : "center",
72
73
  backgroundColor: P.palette.background.paper,
73
- backgroundImage: c ? null : `url(${xe.CASHFLOW_ONBOARDING})`,
74
+ backgroundImage: c ? null : `url(${be.CASHFLOW_ONBOARDING})`,
74
75
  backgroundRepeat: "no-repeat",
75
76
  backgroundPosition: "left 100px",
76
77
  backgroundSize: "35%",
@@ -88,7 +89,7 @@ var ve = Te`
88
89
  ml: "40%",
89
90
  mr: 90
90
91
  },
91
- children: /* @__PURE__ */ e(ye, { handleNextStep: I })
92
+ children: /* @__PURE__ */ e(_e, { handleNextStep: I })
92
93
  }),
93
94
  f === 2 && /* @__PURE__ */ e(p, {
94
95
  sx: c ? {
@@ -101,7 +102,7 @@ var ve = Te`
101
102
  ml: "40%",
102
103
  mr: 90
103
104
  },
104
- children: /* @__PURE__ */ e(_e, {})
105
+ children: /* @__PURE__ */ e(Se, {})
105
106
  }),
106
107
  f === 3 && /* @__PURE__ */ i(p, {
107
108
  sx: c ? {
@@ -115,7 +116,7 @@ var ve = Te`
115
116
  mr: 90
116
117
  },
117
118
  children: [
118
- /* @__PURE__ */ e(be, {
119
+ /* @__PURE__ */ e(Te, {
119
120
  pb: 12,
120
121
  variant: "h1",
121
122
  children: a.add_income_title
@@ -124,12 +125,12 @@ var ve = Te`
124
125
  mb: 24,
125
126
  children: a.add_income_description
126
127
  }),
127
- o.length > 0 && !n && /* @__PURE__ */ i(G, { children: [/* @__PURE__ */ e(Fe, { children: o.map((t, r) => /* @__PURE__ */ i(m.Fragment, { children: [
128
- /* @__PURE__ */ e(pe, {
128
+ o.length > 0 && !n && /* @__PURE__ */ i(G, { children: [/* @__PURE__ */ e(Oe, { children: o.map((t, r) => /* @__PURE__ */ i(m.Fragment, { children: [
129
+ /* @__PURE__ */ e(fe, {
129
130
  bgcolor: "background.paper",
130
- children: me(Ie(t.nextDate || t.date))
131
+ children: de(ve(t.nextDate || t.date))
131
132
  }),
132
- /* @__PURE__ */ e(le, { transaction: t }),
133
+ /* @__PURE__ */ e(ue, { transaction: t }),
133
134
  r !== o.length - 1 && /* @__PURE__ */ e(L, {})
134
135
  ] }, t.guid)) }), /* @__PURE__ */ i(h, {
135
136
  alignItems: "center",
@@ -143,28 +144,29 @@ var ve = Te`
143
144
  children: a.add_income
144
145
  })]
145
146
  })] }),
146
- V && /* @__PURE__ */ e(fe, {
147
+ ee && /* @__PURE__ */ e(he, {
147
148
  bgcolor: "background.paper",
148
- onSearch: (t) => S({
149
+ eligibilityFilter: H,
150
+ onSearch: (t) => b({
149
151
  ..._,
150
- custom: (r) => t ? ue(r, t) : O(r)
152
+ custom: (r) => t ? ge(r, t) : O(r)
151
153
  }),
152
154
  onSelected: (t) => {
153
155
  g(t), u(!1);
154
156
  }
155
157
  }),
156
- !Y && z && /* @__PURE__ */ e(W, {
158
+ !Z && z && /* @__PURE__ */ e(W, {
157
159
  color: "error",
158
160
  mt: 16,
159
161
  children: a.confirm_error
160
162
  }),
161
- n && /* @__PURE__ */ i(G, { children: [/* @__PURE__ */ e(ge, {
163
+ n && /* @__PURE__ */ i(G, { children: [/* @__PURE__ */ e(ye, {
162
164
  bgcolor: "background.paper",
163
- firstDay: E,
165
+ firstDay: J,
164
166
  frequency: s,
165
- onFirstDayChange: J,
167
+ onFirstDayChange: K,
166
168
  onFrequencyChange: j,
167
- onSecondDayChange: K,
169
+ onSecondDayChange: Q,
168
170
  secondDay: D,
169
171
  transaction: n
170
172
  }), /* @__PURE__ */ i(h, {
@@ -180,7 +182,7 @@ var ve = Te`
180
182
  ...n,
181
183
  nextDate: v(s, U(n.date)),
182
184
  frequency: s
183
- }), X(t), g("");
185
+ }), Y(t), g("");
184
186
  },
185
187
  variant: "contained",
186
188
  children: y.confirm_button
@@ -199,10 +201,10 @@ var ve = Te`
199
201
  mt: 32,
200
202
  children: [/* @__PURE__ */ e(l, {
201
203
  "aria-disabled": o.length < 1 || T,
202
- onClick: Z,
204
+ onClick: V,
203
205
  startIcon: T ? /* @__PURE__ */ e(R, {
204
206
  name: "progress_activity",
205
- sx: { animation: `${ve} 2s linear infinite` }
207
+ sx: { animation: `${Re} 2s linear infinite` }
206
208
  }) : null,
207
209
  variant: "contained",
208
210
  children: a.confirm_income_button
@@ -215,10 +217,10 @@ var ve = Te`
215
217
  ]
216
218
  })
217
219
  ]
218
- }) : /* @__PURE__ */ e(de, {});
219
- }, st = Se(Oe);
220
+ }) : /* @__PURE__ */ e(pe, {});
221
+ }, lt = De(We);
220
222
  export {
221
- st as default
223
+ lt as default
222
224
  };
223
225
 
224
226
  //# sourceMappingURL=CashflowOnboarding.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CashflowOnboarding.es.js","names":[],"sources":["../../src/cashflow/CashflowOnboarding.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { formatISO } from 'date-fns/formatISO'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { getUnixTime } from 'date-fns/getUnixTime'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\nimport { keyframes } from '@mui/material/styles'\nimport { useTheme } from '@mui/material/styles'\n\nimport { H2, Icon, P } from '@mxenabled/mxui'\n\nimport StepOne from './components/onboarding/StepOne'\nimport StepTwo from './components/onboarding/StepTwo'\n\nimport {\n Loader,\n useCashflowStore,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useScreenSize,\n useTransactionStore,\n useUserStore,\n} from '../common'\nimport { type RepeatingTransaction, type Transaction, RepeatingType, Frequency } from '../core'\nimport SubheaderRow from '../common/components/SubheaderRow'\n\nimport { useCashflowUiStore } from './context/hooks'\n\nimport { TransactionRow } from '../transactions'\nimport { incomeFilter, incomeFilterSearch } from '../transactions/utils/Filters'\n\nimport { AddRecurringTransactionDetails } from '../recurringtransactions'\nimport { SelectTransaction } from '../recurringtransactions'\nimport { getNextPaymentDate } from '../core/utils/RecurringTransactionsUtil'\n\nimport { fromUnixToDayOfWeekAndDate } from '../core/utils/DateUtil'\nimport { CASHFLOW_IMAGES } from './constants/CashflowImages'\n\ninterface UpcomingTransactions extends Transaction {\n nextDate: Date | null\n frequency: Frequency\n}\n\nconst spin = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`\n\nconst CashflowOnboarding: React.FC = () => {\n const { addRepeatingTransaction, repeatingTransactions } = useRecurringTransactionsStore()\n const { cashflow: customCopy, common: commonCopy } = useGlobalCopyStore()\n const { user } = useUserStore()\n const { completeOnboarding } = useCashflowStore()\n const { isDirty } = useCashflowUiStore()\n const { isMobile } = useScreenSize()\n const { isCopyLoaded, setDisplayedDate } = useGlobalUiStore()\n const { filter, setFilter, transactions } = useTransactionStore()\n const theme = useTheme()\n\n const [addIncome, setAddIncome] = useState(true)\n const [frequency, setFrequency] = React.useState(Frequency.EveryMonth)\n const [firstDay, setFirstDay] = React.useState(1)\n const [secondDay, setSecondDay] = React.useState(15)\n const [isSubmitting, setIsSubmitting] = useState(false)\n // const [nextDate, setNextDate] = React.useState<Date | null>(null)\n const [step, setStep] = useState(1)\n const [selectedTransactions, setSelectedTransactions] = useState<UpcomingTransactions[] | []>([])\n const [transactionGuid, setTransactionGuid] = useState('')\n\n const transaction = React.useMemo(\n () => transactions.find((t) => t.guid === transactionGuid),\n [transactionGuid, transactions],\n )\n\n const canSubmit = !!repeatingTransactions.filter(\n (r) => r.repeating_transaction_type === RepeatingType.Income,\n ).length\n\n const handleGetTransactions = async () => {\n setStep(2)\n // set transaction date range and filter by income\n setDisplayedDate(\n // Beginning of the month, 90 days before today\n startOfMonth(subDays(startOfToday(), 90)),\n startOfToday(),\n )\n\n setFilter({ ...filter, custom: incomeFilter })\n\n setStep(3)\n }\n\n const handleAddIncome = async () => {\n if (selectedTransactions.length < 1) {\n return\n }\n setIsSubmitting(true)\n\n // Create Repeating Transactions\n for (let i = 0; i < selectedTransactions.length; i++) {\n const upcomingTransaction = selectedTransactions[i]\n\n const nextDate = getNextPaymentDate(frequency, fromUnixTime(upcomingTransaction.date))\n\n const repeatingTransaction = {\n account_guid: upcomingTransaction.account_guid,\n amount: upcomingTransaction.amount,\n created_by: 0, //user\n merchant_guid: upcomingTransaction.merchant_guid,\n description: upcomingTransaction.feed_description || upcomingTransaction.description,\n predicted_occurs_on: formatISO(nextDate, { representation: 'date' }),\n recurrence_day: nextDate.getDay(),\n recurrence_type: frequency,\n repeating_transaction_type: RepeatingType.Income,\n second_recurrence_day: secondDay,\n transaction_type: upcomingTransaction.transaction_type,\n user_guid: user.guid,\n } as RepeatingTransaction\n\n await addRepeatingTransaction(repeatingTransaction, upcomingTransaction)\n }\n await completeOnboarding()\n }\n\n const showSelectIncome =\n (!transaction && addIncome) || (!transaction && selectedTransactions.length < 1)\n\n if (!isCopyLoaded) {\n return <Loader />\n }\n\n return (\n <Box\n sx={{\n display: 'flex',\n alignItems: !isMobile ? 'center' : 'flex-start',\n backgroundColor: theme.palette.background.paper,\n backgroundImage: !isMobile ? `url(${CASHFLOW_IMAGES.CASHFLOW_ONBOARDING})` : null,\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'left 100px',\n backgroundSize: '35%',\n py: 24,\n }}\n >\n {step === 1 && (\n <Box\n sx={(isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 })}\n >\n <StepOne handleNextStep={handleGetTransactions} />\n </Box>\n )}\n {step === 2 && (\n <Box\n sx={(isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 })}\n >\n <StepTwo />\n </Box>\n )}\n {step === 3 && (\n <Box\n sx={(isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 })}\n >\n <H2 pb={12} variant=\"h1\">\n {customCopy.add_income_title}\n </H2>\n <P mb={24}>{customCopy.add_income_description}</P>\n\n {selectedTransactions.length > 0 && !transaction && (\n <>\n <List>\n {selectedTransactions.map((transaction, index) => {\n return (\n <React.Fragment key={transaction.guid}>\n <SubheaderRow bgcolor=\"background.paper\">\n {fromUnixToDayOfWeekAndDate(\n getUnixTime(transaction.nextDate || transaction.date),\n )}\n </SubheaderRow>\n <TransactionRow transaction={transaction} />\n {index !== selectedTransactions.length - 1 && <Divider />}\n </React.Fragment>\n )\n })}\n </List>\n <Stack alignItems=\"center\" direction=\"row\">\n <Divider sx={{ flexGrow: 1 }} />\n <Button\n onClick={() => setAddIncome(true)}\n startIcon={<Icon name=\"add\" size={20} />}\n >\n {customCopy.add_income}\n </Button>\n </Stack>\n </>\n )}\n\n {showSelectIncome && (\n <SelectTransaction\n bgcolor=\"background.paper\"\n onSearch={(searchValue) =>\n setFilter({\n ...filter,\n custom: (transaction: Transaction) =>\n searchValue\n ? incomeFilterSearch(transaction, searchValue)\n : incomeFilter(transaction),\n })\n }\n onSelected={(guid) => {\n setTransactionGuid(guid)\n setAddIncome(false)\n }}\n />\n )}\n\n {!canSubmit && isDirty && (\n <P color=\"error\" mt={16}>\n {customCopy.confirm_error}\n </P>\n )}\n\n {transaction && (\n <>\n <AddRecurringTransactionDetails\n bgcolor=\"background.paper\"\n firstDay={firstDay}\n frequency={frequency}\n onFirstDayChange={setFirstDay}\n onFrequencyChange={setFrequency}\n onSecondDayChange={setSecondDay}\n secondDay={secondDay}\n transaction={transaction}\n />\n <Stack direction=\"row\" gap={16} ml={24} mt={32}>\n <Button\n aria-disabled={!transaction}\n onClick={() => {\n const updatedTransactions = [...selectedTransactions]\n updatedTransactions.push({\n ...transaction,\n nextDate: getNextPaymentDate(frequency, fromUnixTime(transaction.date)),\n frequency,\n })\n\n setSelectedTransactions(updatedTransactions)\n setTransactionGuid('')\n }}\n variant=\"contained\"\n >\n {commonCopy.confirm_button}\n </Button>\n <Button\n onClick={() => {\n setTransactionGuid('')\n setAddIncome(true)\n handleGetTransactions().finally()\n }}\n variant=\"text\"\n >\n {commonCopy.cancel_button}\n </Button>\n </Stack>\n </>\n )}\n\n {selectedTransactions.length > 0 && !transaction && (\n <Stack direction=\"row\" gap={16} ml={24} mt={32}>\n <Button\n aria-disabled={selectedTransactions.length < 1 || isSubmitting}\n onClick={handleAddIncome}\n startIcon={\n isSubmitting ? (\n <Icon\n name=\"progress_activity\"\n sx={{\n animation: `${spin} 2s linear infinite`,\n }}\n />\n ) : null\n }\n variant=\"contained\"\n >\n {customCopy.confirm_income_button}\n </Button>\n <Button onClick={completeOnboarding} variant=\"text\">\n {customCopy.skip_button}\n </Button>\n </Stack>\n )}\n </Box>\n )}\n </Box>\n )\n}\n\nexport default observer(CashflowOnboarding)\n"],"mappings":"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"}
1
+ {"version":3,"file":"CashflowOnboarding.es.js","names":[],"sources":["../../src/cashflow/CashflowOnboarding.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { formatISO } from 'date-fns/formatISO'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { getUnixTime } from 'date-fns/getUnixTime'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\nimport { keyframes } from '@mui/material/styles'\nimport { useTheme } from '@mui/material/styles'\n\nimport { H2, Icon, P } from '@mxenabled/mxui'\n\nimport StepOne from './components/onboarding/StepOne'\nimport StepTwo from './components/onboarding/StepTwo'\n\nimport {\n Loader,\n useCashflowStore,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useRepeatingTransactionEligibility,\n useScreenSize,\n useTransactionStore,\n useUserStore,\n} from '../common'\nimport { type RepeatingTransaction, type Transaction, RepeatingType, Frequency } from '../core'\nimport SubheaderRow from '../common/components/SubheaderRow'\n\nimport { useCashflowUiStore } from './context/hooks'\n\nimport { TransactionRow } from '../transactions'\nimport { incomeFilter, incomeFilterSearch } from '../transactions/utils/Filters'\n\nimport { AddRecurringTransactionDetails } from '../recurringtransactions'\nimport { SelectTransaction } from '../recurringtransactions'\nimport { getNextPaymentDate } from '../core/utils/RecurringTransactionsUtil'\n\nimport { fromUnixToDayOfWeekAndDate } from '../core/utils/DateUtil'\nimport { CASHFLOW_IMAGES } from './constants/CashflowImages'\n\ninterface UpcomingTransactions extends Transaction {\n nextDate: Date | null\n frequency: Frequency\n}\n\nconst spin = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`\n\nconst CashflowOnboarding: React.FC = () => {\n const { addRepeatingTransaction, repeatingTransactions } = useRecurringTransactionsStore()\n const { cashflow: customCopy, common: commonCopy } = useGlobalCopyStore()\n const { user } = useUserStore()\n const { completeOnboarding } = useCashflowStore()\n const { isDirty } = useCashflowUiStore()\n const { isMobile } = useScreenSize()\n const { isCopyLoaded, setDisplayedDate } = useGlobalUiStore()\n const { filter, setFilter, transactions } = useTransactionStore()\n const eligibilityFilter = useRepeatingTransactionEligibility()\n const theme = useTheme()\n\n const [addIncome, setAddIncome] = useState(true)\n const [frequency, setFrequency] = React.useState(Frequency.EveryMonth)\n const [firstDay, setFirstDay] = React.useState(1)\n const [secondDay, setSecondDay] = React.useState(15)\n const [isSubmitting, setIsSubmitting] = useState(false)\n // const [nextDate, setNextDate] = React.useState<Date | null>(null)\n const [step, setStep] = useState(1)\n const [selectedTransactions, setSelectedTransactions] = useState<UpcomingTransactions[] | []>([])\n const [transactionGuid, setTransactionGuid] = useState('')\n\n const transaction = React.useMemo(\n () => transactions.find((t) => t.guid === transactionGuid),\n [transactionGuid, transactions],\n )\n\n const canSubmit = !!repeatingTransactions.filter(\n (r) => r.repeating_transaction_type === RepeatingType.Income,\n ).length\n\n const handleGetTransactions = async () => {\n setStep(2)\n // set transaction date range and filter by income\n setDisplayedDate(\n // Beginning of the month, 90 days before today\n startOfMonth(subDays(startOfToday(), 90)),\n startOfToday(),\n )\n\n setFilter({ ...filter, custom: incomeFilter })\n\n setStep(3)\n }\n\n const handleAddIncome = async () => {\n if (selectedTransactions.length < 1) {\n return\n }\n setIsSubmitting(true)\n\n // Create Repeating Transactions\n for (let i = 0; i < selectedTransactions.length; i++) {\n const upcomingTransaction = selectedTransactions[i]\n\n const nextDate = getNextPaymentDate(frequency, fromUnixTime(upcomingTransaction.date))\n\n const repeatingTransaction = {\n account_guid: upcomingTransaction.account_guid,\n amount: upcomingTransaction.amount,\n created_by: 0, //user\n merchant_guid: upcomingTransaction.merchant_guid,\n description:\n upcomingTransaction.payee ||\n upcomingTransaction.description ||\n upcomingTransaction.feed_description,\n predicted_occurs_on: formatISO(nextDate, { representation: 'date' }),\n recurrence_day: nextDate.getDay(),\n recurrence_type: frequency,\n repeating_transaction_type: RepeatingType.Income,\n second_recurrence_day: secondDay,\n transaction_type: upcomingTransaction.transaction_type,\n user_guid: user.guid,\n } as RepeatingTransaction\n\n await addRepeatingTransaction(repeatingTransaction, upcomingTransaction)\n }\n await completeOnboarding()\n }\n\n const showSelectIncome =\n (!transaction && addIncome) || (!transaction && selectedTransactions.length < 1)\n\n if (!isCopyLoaded) {\n return <Loader />\n }\n\n return (\n <Box\n sx={{\n display: 'flex',\n alignItems: !isMobile ? 'center' : 'flex-start',\n backgroundColor: theme.palette.background.paper,\n backgroundImage: !isMobile ? `url(${CASHFLOW_IMAGES.CASHFLOW_ONBOARDING})` : null,\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'left 100px',\n backgroundSize: '35%',\n py: 24,\n }}\n >\n {step === 1 && (\n <Box\n sx={\n isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 }\n }\n >\n <StepOne handleNextStep={handleGetTransactions} />\n </Box>\n )}\n {step === 2 && (\n <Box\n sx={\n isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 }\n }\n >\n <StepTwo />\n </Box>\n )}\n {step === 3 && (\n <Box\n sx={\n isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 }\n }\n >\n <H2 pb={12} variant=\"h1\">\n {customCopy.add_income_title}\n </H2>\n <P mb={24}>{customCopy.add_income_description}</P>\n\n {selectedTransactions.length > 0 && !transaction && (\n <>\n <List>\n {selectedTransactions.map((transaction, index) => {\n return (\n <React.Fragment key={transaction.guid}>\n <SubheaderRow bgcolor=\"background.paper\">\n {fromUnixToDayOfWeekAndDate(\n getUnixTime(transaction.nextDate || transaction.date),\n )}\n </SubheaderRow>\n <TransactionRow transaction={transaction} />\n {index !== selectedTransactions.length - 1 && <Divider />}\n </React.Fragment>\n )\n })}\n </List>\n <Stack alignItems=\"center\" direction=\"row\">\n <Divider sx={{ flexGrow: 1 }} />\n <Button\n onClick={() => setAddIncome(true)}\n startIcon={<Icon name=\"add\" size={20} />}\n >\n {customCopy.add_income}\n </Button>\n </Stack>\n </>\n )}\n\n {showSelectIncome && (\n <SelectTransaction\n bgcolor=\"background.paper\"\n eligibilityFilter={eligibilityFilter}\n onSearch={(searchValue) =>\n setFilter({\n ...filter,\n custom: (transaction: Transaction) =>\n searchValue\n ? incomeFilterSearch(transaction, searchValue)\n : incomeFilter(transaction),\n })\n }\n onSelected={(guid) => {\n setTransactionGuid(guid)\n setAddIncome(false)\n }}\n />\n )}\n\n {!canSubmit && isDirty && (\n <P color=\"error\" mt={16}>\n {customCopy.confirm_error}\n </P>\n )}\n\n {transaction && (\n <>\n <AddRecurringTransactionDetails\n bgcolor=\"background.paper\"\n firstDay={firstDay}\n frequency={frequency}\n onFirstDayChange={setFirstDay}\n onFrequencyChange={setFrequency}\n onSecondDayChange={setSecondDay}\n secondDay={secondDay}\n transaction={transaction}\n />\n <Stack direction=\"row\" gap={16} ml={24} mt={32}>\n <Button\n aria-disabled={!transaction}\n onClick={() => {\n const updatedTransactions = [...selectedTransactions]\n updatedTransactions.push({\n ...transaction,\n nextDate: getNextPaymentDate(frequency, fromUnixTime(transaction.date)),\n frequency,\n })\n\n setSelectedTransactions(updatedTransactions)\n setTransactionGuid('')\n }}\n variant=\"contained\"\n >\n {commonCopy.confirm_button}\n </Button>\n <Button\n onClick={() => {\n setTransactionGuid('')\n setAddIncome(true)\n handleGetTransactions().finally()\n }}\n variant=\"text\"\n >\n {commonCopy.cancel_button}\n </Button>\n </Stack>\n </>\n )}\n\n {selectedTransactions.length > 0 && !transaction && (\n <Stack direction=\"row\" gap={16} ml={24} mt={32}>\n <Button\n aria-disabled={selectedTransactions.length < 1 || isSubmitting}\n onClick={handleAddIncome}\n startIcon={\n isSubmitting ? (\n <Icon\n name=\"progress_activity\"\n sx={{\n animation: `${spin} 2s linear infinite`,\n }}\n />\n ) : null\n }\n variant=\"contained\"\n >\n {customCopy.confirm_income_button}\n </Button>\n <Button onClick={completeOnboarding} variant=\"text\">\n {customCopy.skip_button}\n </Button>\n </Stack>\n )}\n </Box>\n )}\n </Box>\n )\n}\n\nexport default observer(CashflowOnboarding)\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqDA,IAAM,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASP,KAAA,MAAqC;AACzC,QAAM,EAAE,yBAAA,GAAyB,uBAAA,EAAA,IAA0B,GAA8B,GACnF,EAAE,UAAU,GAAY,QAAQ,EAAA,IAAe,GAAmB,GAClE,EAAE,MAAA,EAAA,IAAS,GAAa,GACxB,EAAE,oBAAA,EAAA,IAAuB,GAAiB,GAC1C,EAAE,SAAA,EAAA,IAAY,GAAmB,GACjC,EAAE,UAAA,EAAA,IAAa,GAAc,GAC7B,EAAE,cAAA,GAAc,kBAAA,EAAA,IAAqB,GAAiB,GACtD,EAAE,QAAA,GAAQ,WAAA,GAAW,cAAA,EAAA,IAAiB,GAAoB,GAC1D,IAAoB,GAAmC,GACvD,IAAQ,GAAS,GAEjB,CAAC,GAAW,CAAA,IAAgB,EAAS,EAAI,GACzC,CAAC,GAAW,CAAA,IAAgB,EAAM,SAAS,GAAU,UAAU,GAC/D,CAAC,GAAU,CAAA,IAAe,EAAM,SAAS,CAAC,GAC1C,CAAC,GAAW,CAAA,IAAgB,EAAM,SAAS,EAAE,GAC7C,CAAC,GAAc,CAAA,IAAmB,EAAS,EAAK,GAEhD,CAAC,GAAM,CAAA,IAAW,EAAS,CAAC,GAC5B,CAAC,GAAsB,CAAA,IAA2B,EAAsC,CAAC,CAAC,GAC1F,CAAC,GAAiB,CAAA,IAAsB,EAAS,EAAE,GAEnD,IAAc,EAAM,QAAA,MAClB,EAAa,KAAA,CAAM,MAAM,EAAE,SAAS,CAAe,GACzD,CAAC,GAAiB,CAAY,CAChC,GAEM,IAAY,CAAC,CAAC,EAAsB,OAAA,CACvC,MAAM,EAAE,+BAA+B,EAAc,MACxD,EAAE,QAEI,IAAwB,YAAY;AACxC,IAAA,EAAQ,CAAC,GAET,EAEE,GAAa,GAAQ,EAAa,GAAG,EAAE,CAAC,GACxC,EAAa,CACf,GAEA,EAAU;AAAA,MAAE,GAAG;AAAA,MAAQ,QAAQ;AAAA,IAAa,CAAC,GAE7C,EAAQ,CAAC;AAAA,EACX,GAEM,IAAkB,YAAY;AAClC,QAAI,EAAA,EAAqB,SAAS,IAGlC;AAAA,MAAA,EAAgB,EAAI;AAGpB,eAAS,IAAI,GAAG,IAAI,EAAqB,QAAQ,KAAK;AACpD,cAAM,IAAsB,EAAqB,CAAA,GAE3C,IAAW,EAAmB,GAAW,EAAa,EAAoB,IAAI,CAAC,GAE/E,KAAuB;AAAA,UAC3B,cAAc,EAAoB;AAAA,UAClC,QAAQ,EAAoB;AAAA,UAC5B,YAAY;AAAA,UACZ,eAAe,EAAoB;AAAA,UACnC,aACE,EAAoB,SACpB,EAAoB,eACpB,EAAoB;AAAA,UACtB,qBAAqB,GAAU,GAAU,EAAE,gBAAgB,OAAO,CAAC;AAAA,UACnE,gBAAgB,EAAS,OAAO;AAAA,UAChC,iBAAiB;AAAA,UACjB,4BAA4B,EAAc;AAAA,UAC1C,uBAAuB;AAAA,UACvB,kBAAkB,EAAoB;AAAA,UACtC,WAAW,EAAK;AAAA,QAClB;AAEA,cAAM,EAAwB,IAAsB,CAAmB;AAAA,MACzE;AACA,YAAM,EAAmB;AAAA;AAAA,EAC3B,GAEM,KACH,CAAC,KAAe,KAAe,CAAC,KAAe,EAAqB,SAAS;AAEhF,SAAK,IAKH,gBAAA,EAAC,GAAD;AAAA,IACE,IAAI;AAAA,MACF,SAAS;AAAA,MACT,YAAa,IAAsB,eAAX;AAAA,MACxB,iBAAiB,EAAM,QAAQ,WAAW;AAAA,MAC1C,iBAAkB,IAA2D,OAAhD,OAAO,GAAgB,mBAAA;AAAA,MACpD,kBAAkB;AAAA,MAClB,oBAAoB;AAAA,MACpB,gBAAgB;AAAA,MAChB,IAAI;AAAA,IACN;AAAA,IAVF,UAAA;AAAA,MAYG,MAAS,KACR,gBAAA,EAAC,GAAD;AAAA,QACE,IACE,IACI;AAAA,UAAE,SAAS;AAAA,UAAQ,eAAe;AAAA,UAAU,UAAU;AAAA,UAAQ,SAAS;AAAA,QAAS,IAChF;AAAA,UAAE,UAAU;AAAA,UAAK,IAAI;AAAA,UAAO,IAAI;AAAA,QAAG;AAAA,QAGzC,UAAA,gBAAA,EAAC,IAAD,EAAS,gBAAgB,EAAwB,CAAA;AAAA,MAC9C,CAAA;AAAA,MAEN,MAAS,KACR,gBAAA,EAAC,GAAD;AAAA,QACE,IACE,IACI;AAAA,UAAE,SAAS;AAAA,UAAQ,eAAe;AAAA,UAAU,UAAU;AAAA,UAAQ,SAAS;AAAA,QAAS,IAChF;AAAA,UAAE,UAAU;AAAA,UAAK,IAAI;AAAA,UAAO,IAAI;AAAA,QAAG;AAAA,QAGzC,UAAA,gBAAA,EAAC,IAAD,CAAU,CAAA;AAAA,MACP,CAAA;AAAA,MAEN,MAAS,KACR,gBAAA,EAAC,GAAD;AAAA,QACE,IACE,IACI;AAAA,UAAE,SAAS;AAAA,UAAQ,eAAe;AAAA,UAAU,UAAU;AAAA,UAAQ,SAAS;AAAA,QAAS,IAChF;AAAA,UAAE,UAAU;AAAA,UAAK,IAAI;AAAA,UAAO,IAAI;AAAA,QAAG;AAAA,QAJ3C,UAAA;AAAA,UAOE,gBAAA,EAAC,IAAD;AAAA,YAAI,IAAI;AAAA,YAAI,SAAQ;AAAA,YACjB,UAAA,EAAW;AAAA,UACV,CAAA;AAAA,UACJ,gBAAA,EAAC,GAAD;AAAA,YAAG,IAAI;AAAA,YAAK,UAAA,EAAW;AAAA,UAA0B,CAAA;AAAA,UAEhD,EAAqB,SAAS,KAAK,CAAC,KACnC,gBAAA,EAAA,GAAA,EAAA,UAAA,CACE,gBAAA,EAAC,IAAD,EAAA,UACG,EAAqB,IAAA,CAAK,GAAa,MAEpC,gBAAA,EAAC,EAAM,UAAP,EAAA,UAAA;AAAA,YACE,gBAAA,EAAC,IAAD;AAAA,cAAc,SAAQ;AAAA,cACnB,UAAA,GACC,GAAY,EAAY,YAAY,EAAY,IAAI,CACtD;AAAA,YACY,CAAA;AAAA,YACd,gBAAA,EAAC,IAAD,EAA6B,aAAA,EAAc,CAAA;AAAA,YAC1C,MAAU,EAAqB,SAAS,KAAK,gBAAA,EAAC,GAAD,CAAU,CAAA;AAAA,UAC1C,EAAA,GARK,EAAY,IAQjB,CAEnB,EACG,CAAA,GACN,gBAAA,EAAC,GAAD;AAAA,YAAO,YAAW;AAAA,YAAS,WAAU;AAAA,YAArC,UAAA,CACE,gBAAA,EAAC,GAAD,EAAS,IAAI,EAAE,UAAU,EAAE,EAAI,CAAA,GAC/B,gBAAA,EAAC,GAAD;AAAA,cACE,SAAA,MAAe,EAAa,EAAI;AAAA,cAChC,WAAW,gBAAA,EAAC,GAAD;AAAA,gBAAM,MAAK;AAAA,gBAAM,MAAM;AAAA,cAAK,CAAA;AAAA,cAEtC,UAAA,EAAW;AAAA,YACN,CAAA,CACH;AAAA,UACP,CAAA,CAAA,EAAA,CAAA;AAAA,UAGH,MACC,gBAAA,EAAC,IAAD;AAAA,YACE,SAAQ;AAAA,YACW,mBAAA;AAAA,YACnB,UAAA,CAAW,MACT,EAAU;AAAA,cACR,GAAG;AAAA,cACH,QAAA,CAAS,MACP,IACI,GAAmB,GAAa,CAAW,IAC3C,EAAa,CAAW;AAAA,YAChC,CAAC;AAAA,YAEH,YAAA,CAAa,MAAS;AACpB,cAAA,EAAmB,CAAI,GACvB,EAAa,EAAK;AAAA,YACpB;AAAA,UACD,CAAA;AAAA,UAGF,CAAC,KAAa,KACb,gBAAA,EAAC,GAAD;AAAA,YAAG,OAAM;AAAA,YAAQ,IAAI;AAAA,YAClB,UAAA,EAAW;AAAA,UACX,CAAA;AAAA,UAGJ,KACC,gBAAA,EAAA,GAAA,EAAA,UAAA,CACE,gBAAA,EAAC,IAAD;AAAA,YACE,SAAQ;AAAA,YACE,UAAA;AAAA,YACC,WAAA;AAAA,YACX,kBAAkB;AAAA,YAClB,mBAAmB;AAAA,YACnB,mBAAmB;AAAA,YACR,WAAA;AAAA,YACE,aAAA;AAAA,UACd,CAAA,GACD,gBAAA,EAAC,GAAD;AAAA,YAAO,WAAU;AAAA,YAAM,KAAK;AAAA,YAAI,IAAI;AAAA,YAAI,IAAI;AAAA,YAA5C,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,cACE,iBAAe,CAAC;AAAA,cAChB,SAAA,MAAe;AACb,sBAAM,IAAsB,CAAC,GAAG,CAAoB;AACpD,gBAAA,EAAoB,KAAK;AAAA,kBACvB,GAAG;AAAA,kBACH,UAAU,EAAmB,GAAW,EAAa,EAAY,IAAI,CAAC;AAAA,kBACtE,WAAA;AAAA,gBACF,CAAC,GAED,EAAwB,CAAmB,GAC3C,EAAmB,EAAE;AAAA,cACvB;AAAA,cACA,SAAQ;AAAA,cAEP,UAAA,EAAW;AAAA,YACN,CAAA,GACR,gBAAA,EAAC,GAAD;AAAA,cACE,SAAA,MAAe;AACb,gBAAA,EAAmB,EAAE,GACrB,EAAa,EAAI,GACjB,EAAsB,EAAE,QAAQ;AAAA,cAClC;AAAA,cACA,SAAQ;AAAA,cAEP,UAAA,EAAW;AAAA,YACN,CAAA,CACH;AAAA,UACP,CAAA,CAAA,EAAA,CAAA;AAAA,UAGH,EAAqB,SAAS,KAAK,CAAC,KACnC,gBAAA,EAAC,GAAD;AAAA,YAAO,WAAU;AAAA,YAAM,KAAK;AAAA,YAAI,IAAI;AAAA,YAAI,IAAI;AAAA,YAA5C,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,cACE,iBAAe,EAAqB,SAAS,KAAK;AAAA,cAClD,SAAS;AAAA,cACT,WACE,IACE,gBAAA,EAAC,GAAD;AAAA,gBACE,MAAK;AAAA,gBACL,IAAI,EACF,WAAW,GAAG,EAAA,sBAChB;AAAA,cACD,CAAA,IACC;AAAA,cAEN,SAAQ;AAAA,cAEP,UAAA,EAAW;AAAA,YACN,CAAA,GACR,gBAAA,EAAC,GAAD;AAAA,cAAQ,SAAS;AAAA,cAAoB,SAAQ;AAAA,cAC1C,UAAA,EAAW;AAAA,YACN,CAAA,CACH;AAAA;QAEN;AAAA;IAEJ;AAAA,OAhLE,gBAAA,EAAC,IAAD,CAAS,CAAA;AAkLpB,GAEA,KAAe,GAAS,EAAkB"}
@@ -1,8 +1,8 @@
1
+ import { AccountType as i } from "../core/types/Account.es.js";
1
2
  import { useAccountStore as N, useAppConfig as R, useEvent as O, useGlobalCopyStore as G, useGlobalUiStore as C, useRecurringTransactionsStore as H, useTransactionStore as W } from "../common/context/hooks.es.js";
2
3
  import { useWidgetLoadTimer as k } from "../common/hooks/useWidgetLoadTimer.es.js";
3
4
  import F from "../common/components/drawer/Drawer.es.js";
4
5
  import { ANALYTICS_EVENTS as h } from "../common/constants/Analytics.es.js";
5
- import { AccountType as i } from "../core/types/Account.es.js";
6
6
  import x from "../common/components/Loader.es.js";
7
7
  import { WidgetContainer as P } from "../common/components/WidgetContainer.es.js";
8
8
  import { RecurringSettings as K } from "../recurringtransactions/components/shared/RecurringSettings.es.js";
@@ -1,7 +1,7 @@
1
1
  import { DATE_FORMATS_INTL as C, formatDate as D } from "../../core/constants/DateFormats.es.js";
2
2
  import { useAppConfig as T, useGlobalCopyStore as M, useWidgetContainerProvider as N } from "../../common/context/hooks.es.js";
3
- import { getAccountStartingBalance as R } from "../../core/utils/AccountUtils.es.js";
4
3
  import { formatCurrency as u } from "../../core/utils/NumberFormatting.es.js";
4
+ import { getAccountStartingBalance as R } from "../../core/utils/AccountUtils.es.js";
5
5
  import L from "../../common/components/InformationTooltip.es.js";
6
6
  import { CurrencyText as b } from "../../common/components/CurrencyText.es.js";
7
7
  import { useCashflowUiStore as A } from "../context/hooks.es.js";
@@ -3,5 +3,6 @@ export { useCombineEvents, useCombinePageviews } from './useCombineEvents';
3
3
  export { useInsightsEnabled } from './useInsightsEnabled';
4
4
  export { useScreenSize } from './useScreenSize';
5
5
  export { usePrevious } from './usePrevious';
6
+ export { useRepeatingTransactionEligibility } from './useRepeatingTransactionEligibility';
6
7
  export { useWidgetHeaderStyles } from './useWidgetHeaderStyles';
7
8
  export { useWidgetLoadTimer } from './useWidgetLoadTimer';
@@ -0,0 +1,6 @@
1
+ import { Transaction } from '../../core';
2
+ /**
3
+ * Eligibility filter for the repeating-transaction create flows: callers pass it to
4
+ * `SelectTransaction` so only transactions Sherlock could turn into a repeating one are offered.
5
+ */
6
+ export declare const useRepeatingTransactionEligibility: () => ((transaction: Transaction) => boolean);
@@ -0,0 +1,12 @@
1
+ import { useAccountStore as e } from "../context/hooks.es.js";
2
+ import { isEligibleRepeatingTransaction as r } from "../../core/utils/RecurringTransactionsUtil.es.js";
3
+ import a from "react";
4
+ var s = () => {
5
+ const { accounts: i } = e();
6
+ return a.useCallback((t) => r(t, i.find((o) => o.guid === t.account_guid)), [i]);
7
+ };
8
+ export {
9
+ s as useRepeatingTransactionEligibility
10
+ };
11
+
12
+ //# sourceMappingURL=useRepeatingTransactionEligibility.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRepeatingTransactionEligibility.es.js","names":[],"sources":["../../../src/common/hooks/useRepeatingTransactionEligibility.ts"],"sourcesContent":["import React from 'react'\n\nimport type { Transaction } from '../../core'\nimport { isEligibleRepeatingTransaction } from '../../core/utils/RecurringTransactionsUtil'\nimport { useAccountStore } from '../context'\n\n/**\n * Eligibility filter for the repeating-transaction create flows: callers pass it to\n * `SelectTransaction` so only transactions Sherlock could turn into a repeating one are offered.\n */\nexport const useRepeatingTransactionEligibility = (): ((transaction: Transaction) => boolean) => {\n const { accounts } = useAccountStore()\n\n return React.useCallback(\n (transaction: Transaction) =>\n isEligibleRepeatingTransaction(\n transaction,\n accounts.find((account) => account.guid === transaction.account_guid),\n ),\n [accounts],\n )\n}\n"],"mappings":";;;AAUA,IAAa,IAAA,MAAoF;AAC/F,QAAM,EAAE,UAAA,EAAA,IAAa,EAAgB;AAErC,SAAO,EAAM,YAAA,CACV,MACC,EACE,GACA,EAAS,KAAA,CAAM,MAAY,EAAQ,SAAS,EAAY,YAAY,CACtE,GACF,CAAC,CAAQ,CACX;AACF"}