@mx-cartographer/experiences 9.5.0 → 9.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -1
- package/dist/accounts/components/AccountListItem.es.js +1 -1
- package/dist/accounts/components/AccountsList.es.js +1 -1
- package/dist/accounts/components/detailsdrawer/Accounts/AccountConnection.es.js +3 -3
- package/dist/accounts/components/detailsdrawer/Accounts/ConnectionErrorMessage.es.js +3 -3
- package/dist/accounts/utils/AccountFields.es.js +11 -11
- package/dist/budgets/BubbleBudgetsMiniWidget.es.js +1 -1
- package/dist/budgets/components/Overview.es.js +1 -1
- package/dist/budgets/components/addbudget/UnbudgetedRow.es.js +4 -4
- package/dist/budgets/components/shared/BudgetDetailsTopSection.es.js +1 -1
- package/dist/cashflow/CashflowOnboarding.es.js +57 -55
- package/dist/cashflow/CashflowOnboarding.es.js.map +1 -1
- package/dist/cashflow/CashflowWidget.es.js +1 -1
- package/dist/cashflow/components/SummaryTab.es.js +1 -1
- package/dist/common/hooks/index.d.ts +1 -0
- package/dist/common/hooks/useRepeatingTransactionEligibility.d.ts +6 -0
- package/dist/common/hooks/useRepeatingTransactionEligibility.es.js +12 -0
- package/dist/common/hooks/useRepeatingTransactionEligibility.es.js.map +1 -0
- package/dist/common/index.es.js +114 -112
- package/dist/core/constants/repeatingTransactions.d.ts +5 -2
- package/dist/core/constants/repeatingTransactions.es.js +24 -9
- package/dist/core/constants/repeatingTransactions.es.js.map +1 -1
- package/dist/core/index.es.js +79 -79
- package/dist/core/stores/AccountStore.es.js +1 -1
- package/dist/core/stores/CashflowStore.es.js +1 -1
- package/dist/core/stores/CategoryStore.es.js +1 -1
- package/dist/core/stores/FinstrongStore.es.js +4 -4
- package/dist/core/stores/GoalStore.es.js +1 -1
- package/dist/core/stores/RecurringTransactionsStore.es.js +9 -9
- package/dist/core/stores/SettingsStore.es.js +7 -7
- package/dist/core/stores/TransactionStore.es.js +13 -13
- package/dist/core/utils/BudgetUtil.es.js +1 -1
- package/dist/core/utils/DateUtil.es.js +5 -5
- package/dist/core/utils/DebtUtils.es.js +6 -6
- package/dist/core/utils/RecurringTransactionsUtil.d.ts +13 -1
- package/dist/core/utils/RecurringTransactionsUtil.es.js +111 -106
- package/dist/core/utils/RecurringTransactionsUtil.es.js.map +1 -1
- package/dist/core/utils/TransactionUtils.es.js +6 -6
- package/dist/debts/DebtsWidget.es.js +1 -1
- package/dist/debts/components/DebtsChart.es.js +4 -4
- package/dist/debts/components/DebtsTable.es.js +6 -6
- package/dist/debts/components/actions/ExtraPaymentAction.es.js +4 -4
- package/dist/debts/components/actions/InterestRateAction.es.js +4 -4
- package/dist/debts/components/actions/MonthlyPaymentAction.es.js +4 -4
- package/dist/debts/components/actions/OriginalBalanceAction.es.js +4 -4
- package/dist/debts/components/debtsdrawer/DebtScheduleTab.es.js +1 -1
- package/dist/finstrong/components/MaintainingEmergencySavings/MaintainingEmergencySavingsContent.es.js +4 -4
- package/dist/finstrong/components/ProfileDrawer.es.js +1 -1
- package/dist/finstrong/components/SaveEnoughToLiveOn/AvailableTabContent.es.js +1 -1
- package/dist/finstrong/components/onboarding/OnboardingStepsDrawer.es.js +106 -104
- package/dist/finstrong/components/onboarding/OnboardingStepsDrawer.es.js.map +1 -1
- package/dist/finstrong/components/shared/Accounts.es.js +4 -4
- package/dist/finstrong/components/shared/Transactions.es.js +4 -4
- package/dist/goals/GoalsWidget.es.js +7 -7
- package/dist/goals/components/AccountSelectionDrawer.es.js +4 -4
- package/dist/goals/components/AddGoal.es.js +1 -1
- package/dist/goals/components/GoalDetailsDrawer.es.js +1 -1
- package/dist/goals/components/ManageGoals.es.js +1 -1
- package/dist/goals/components/actions/ChangeAccountAction.es.js +1 -1
- package/dist/goals/components/managegoals/OngoingListItem.es.js +4 -4
- package/dist/insights/components/shared/DrillDownCalculation/DrillDownCalculation.es.js +1 -1
- package/dist/insights-v2/actionBlocks/TransactionHistoryBlock/TransactionHistoryBlock.es.js +4 -4
- package/dist/insights-v2/blocks/ChartBlocks/BarchartBlock/utils.es.js +1 -1
- package/dist/insights-v2/blocks/ComponentBlocks/BudgetBlock/BudgetBlock.es.js +1 -1
- package/dist/investments/InvestmentsWidget.es.js +7 -7
- package/dist/recurringtransactions/components/RecurringTransactionDetails.es.js +10 -10
- package/dist/recurringtransactions/components/RecurringTransactionDetailsDrawer.es.js +4 -4
- package/dist/recurringtransactions/components/RecurringTransactionList.es.js +10 -10
- package/dist/recurringtransactions/components/actions/LinkTransactionDrawer.es.js +4 -4
- package/dist/recurringtransactions/components/actions/PaymentScheduleAction.es.js +6 -6
- package/dist/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.es.js +45 -43
- package/dist/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.es.js.map +1 -1
- package/dist/recurringtransactions/components/shared/recurringsettings/ManageExpenses.es.js +1 -1
- package/dist/recurringtransactions/components/shared/recurringsettings/ManageIncome.es.js +1 -1
- package/dist/recurringtransactions/components/shared/recurringsettings/RecurringRow.es.js +6 -6
- package/dist/recurringtransactions/components/shared/recurringsettings/SelectTransaction.d.ts +7 -1
- package/dist/recurringtransactions/components/shared/recurringsettings/SelectTransaction.es.js +15 -16
- package/dist/recurringtransactions/components/shared/recurringsettings/SelectTransaction.es.js.map +1 -1
- package/dist/settings/components/devices/DeviceList.es.js +1 -1
- package/dist/settings/components/devices/DeviceTable.es.js +1 -1
- package/dist/settings/components/notifications/AccountProfileListItem.es.js +5 -5
- package/dist/settings/components/notifications/NotificationSettings.es.js +1 -1
- package/dist/spending/components/SpendingDonut.es.js +1 -1
- package/dist/transactions/components/shared/TransactionDetails.es.js +8 -8
- package/dist/transactions/components/shared/TransactionList.es.js +4 -4
- package/dist/transactions/components/shared/transactiondetails/actions/AddMerchantBudgetAction.es.js +1 -1
- package/dist/transactions/components/shared/transactiondetails/actions/DateAction.es.js +6 -6
- package/dist/transactions/components/splitmanager/SplitManager.es.js +4 -4
- package/dist/transactions/utils/Transactions.es.js +1 -1
- package/dist/trends/components/CategoriesListItem.es.js +4 -4
- package/dist/trends/components/CategoryDetails.es.js +6 -6
- package/dist/trends/components/TrendsChart.es.js +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
## [9.5.2] - 10-09-2026
|
|
2
|
+
|
|
3
|
+
- **FIXED** - The small-screen Edit date range drawer shows the selected dates as text instead of From and To fields that could not be typed into MEW-4218
|
|
4
|
+
|
|
5
|
+
## [9.5.1] - 10-09-2026
|
|
6
|
+
|
|
7
|
+
- **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)
|
|
8
|
+
|
|
1
9
|
## [9.5.0] - 10-09-2026
|
|
2
10
|
|
|
3
11
|
- **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 +35,6 @@
|
|
|
27
35
|
|
|
28
36
|
- **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
37
|
- **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
38
|
## [9.4.67] - 10-08-2026
|
|
32
39
|
|
|
33
40
|
- **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 {
|
|
2
|
-
import {
|
|
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 } =
|
|
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 {
|
|
2
|
-
import {
|
|
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 } =
|
|
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 (
|
|
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 (
|
|
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) =>
|
|
66
|
-
valueFormatter: (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
|
|
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,
|
|
89
|
-
})),
|
|
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
|
-
}),
|
|
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 =
|
|
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 "../../../
|
|
3
|
-
import
|
|
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 =
|
|
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(
|
|
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
|
|
2
|
-
import { useScreenSize as
|
|
3
|
-
import { Frequency as
|
|
4
|
-
import { fromUnixToDayOfWeekAndDate as
|
|
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
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import
|
|
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
|
|
18
|
+
import { observer as De } from "mobx-react-lite";
|
|
18
19
|
import h from "@mui/material/Stack";
|
|
19
|
-
import { H2 as
|
|
20
|
-
import { startOfMonth as
|
|
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
|
|
25
|
+
import { keyframes as ke, useTheme as Ie } from "@mui/material/styles";
|
|
25
26
|
import p from "@mui/material/Box";
|
|
26
|
-
import { subDays as
|
|
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
|
|
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
|
|
32
|
-
var
|
|
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
|
-
`,
|
|
40
|
-
const { addRepeatingTransaction: M, repeatingTransactions: q } =
|
|
41
|
-
C(2),
|
|
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
|
-
},
|
|
46
|
+
}, V = async () => {
|
|
46
47
|
if (!(o.length < 1)) {
|
|
47
|
-
|
|
48
|
+
X(!0);
|
|
48
49
|
for (let t = 0; t < o.length; t++) {
|
|
49
|
-
const r = o[t], w = v(s, U(r.date)),
|
|
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.
|
|
55
|
-
predicted_occurs_on:
|
|
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(
|
|
64
|
+
await M(te, r);
|
|
64
65
|
}
|
|
65
66
|
await x();
|
|
66
67
|
}
|
|
67
|
-
},
|
|
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(${
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
128
|
-
/* @__PURE__ */ e(
|
|
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:
|
|
131
|
+
children: de(ve(t.nextDate || t.date))
|
|
131
132
|
}),
|
|
132
|
-
/* @__PURE__ */ e(
|
|
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
|
-
|
|
147
|
+
ee && /* @__PURE__ */ e(he, {
|
|
147
148
|
bgcolor: "background.paper",
|
|
148
|
-
|
|
149
|
+
eligibilityFilter: H,
|
|
150
|
+
onSearch: (t) => b({
|
|
149
151
|
..._,
|
|
150
|
-
custom: (r) => t ?
|
|
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
|
-
!
|
|
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(
|
|
163
|
+
n && /* @__PURE__ */ i(G, { children: [/* @__PURE__ */ e(ye, {
|
|
162
164
|
bgcolor: "background.paper",
|
|
163
|
-
firstDay:
|
|
165
|
+
firstDay: J,
|
|
164
166
|
frequency: s,
|
|
165
|
-
onFirstDayChange:
|
|
167
|
+
onFirstDayChange: K,
|
|
166
168
|
onFrequencyChange: j,
|
|
167
|
-
onSecondDayChange:
|
|
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
|
-
}),
|
|
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:
|
|
204
|
+
onClick: V,
|
|
203
205
|
startIcon: T ? /* @__PURE__ */ e(R, {
|
|
204
206
|
name: "progress_activity",
|
|
205
|
-
sx: { animation: `${
|
|
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(
|
|
219
|
-
},
|
|
220
|
+
}) : /* @__PURE__ */ e(pe, {});
|
|
221
|
+
}, lt = De(We);
|
|
220
222
|
export {
|
|
221
|
-
|
|
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":"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"}
|
|
@@ -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"}
|