@mx-cartographer/experiences 9.4.2 → 9.4.4

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 (32) hide show
  1. package/CHANGELOG.md +10 -1
  2. package/dist/core/constants/Investments.d.ts +3 -0
  3. package/dist/core/constants/Investments.es.js +34 -11
  4. package/dist/core/constants/Investments.es.js.map +1 -1
  5. package/dist/core/constants/repeatingTransactions.d.ts +6 -0
  6. package/dist/core/constants/repeatingTransactions.es.js +18 -3
  7. package/dist/core/constants/repeatingTransactions.es.js.map +1 -1
  8. package/dist/core/stores/HoldingStore.d.ts +3 -0
  9. package/dist/core/stores/HoldingStore.es.js +39 -29
  10. package/dist/core/stores/HoldingStore.es.js.map +1 -1
  11. package/dist/core/types/RepeatingTransaction.d.ts +2 -0
  12. package/dist/core/types/RepeatingTransaction.es.js.map +1 -1
  13. package/dist/core/types/Transaction.d.ts +1 -0
  14. package/dist/core/types/Transaction.es.js.map +1 -1
  15. package/dist/core/utils/InvestmentUtil.d.ts +4 -0
  16. package/dist/core/utils/InvestmentUtil.es.js +71 -58
  17. package/dist/core/utils/InvestmentUtil.es.js.map +1 -1
  18. package/dist/core/utils/RecurringTransactionsUtil.d.ts +1 -0
  19. package/dist/core/utils/RecurringTransactionsUtil.es.js +145 -143
  20. package/dist/core/utils/RecurringTransactionsUtil.es.js.map +1 -1
  21. package/dist/core/utils/TransactionUtils.d.ts +1 -0
  22. package/dist/investments/InvestmentsWidget.es.js +100 -66
  23. package/dist/investments/InvestmentsWidget.es.js.map +1 -1
  24. package/dist/investments/components/allocation/util/createInvestementsAllocationData.es.js +50 -59
  25. package/dist/investments/components/allocation/util/createInvestementsAllocationData.es.js.map +1 -1
  26. package/dist/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.es.js +16 -14
  27. package/dist/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.es.js.map +1 -1
  28. package/dist/recurringtransactions/components/shared/recurringsettings/SelectTransaction.es.js +19 -17
  29. package/dist/recurringtransactions/components/shared/recurringsettings/SelectTransaction.es.js.map +1 -1
  30. package/dist/transactions/components/shared/TransactionList.es.js +16 -12
  31. package/dist/transactions/components/shared/TransactionList.es.js.map +1 -1
  32. package/package.json +1 -1
@@ -1,72 +1,106 @@
1
- import { useAccountStore as W, useEvent as w, useGlobalCopyStore as x, useGlobalUiStore as D, useHoldingStore as f } from "../common/context/hooks.es.js";
2
- import { useScreenSize as M } from "../common/hooks/useScreenSize.es.js";
3
- import { useWidgetLoadTimer as G } from "../common/hooks/useWidgetLoadTimer.es.js";
4
- import { ANALYTICS_EVENTS as o } from "../common/constants/Analytics.es.js";
5
- import { AccountType as O } from "../core/types/Account.es.js";
6
- import k from "../common/components/Loader.es.js";
7
- import { WidgetContainer as F } from "../common/components/WidgetContainer.es.js";
8
- import { EmptyState as K } from "../common/components/EmptyState.es.js";
9
- import V from "../accounts/components/ConnectionsDrawer.es.js";
10
- import H from "./components/Allocation.es.js";
11
- import U from "./components/Analysis.es.js";
12
- import j from "./components/Overview.es.js";
13
- import { TabTitle as z } from "./components/TabTitle.es.js";
14
- import c from "react";
15
- import { observer as R } from "mobx-react-lite";
16
- import Y from "@mui/material/Stack";
17
- import { Fragment as B, jsx as t, jsxs as l } from "react/jsx-runtime";
18
- import $ from "@mui/material/Tab";
19
- import q from "@mui/material/Tabs";
20
- var ut = R(({ onBackClick: u, onMenuClick: T, sx: _ }) => {
21
- const { onEvent: n } = w(), { isMobile: C } = M(), { isAccountDataLoaded: E, loadAccountData: b, visibleInvestmentAccounts: I } = W(), { visibleHoldings: S, setShowConnectionsWidget: m, showConnectionsWidget: g } = f(), { investments: e, accounts: v } = x(), { isInitialized: r } = D(), [i, h] = c.useState(0), { loadHoldings: A, holdingsLoaded: d } = f();
22
- G({
1
+ import { useAccountStore as O, useEvent as k, useGlobalCopyStore as F, useGlobalUiStore as K, useHoldingStore as y } from "../common/context/hooks.es.js";
2
+ import { useScreenSize as V } from "../common/hooks/useScreenSize.es.js";
3
+ import { useWidgetLoadTimer as H } from "../common/hooks/useWidgetLoadTimer.es.js";
4
+ import { ANALYTICS_EVENTS as s } from "../common/constants/Analytics.es.js";
5
+ import { AccountType as U } from "../core/types/Account.es.js";
6
+ import j from "../common/components/Loader.es.js";
7
+ import { WidgetContainer as z } from "../common/components/WidgetContainer.es.js";
8
+ import { EmptyState as B } from "../common/components/EmptyState.es.js";
9
+ import R from "../accounts/components/ConnectionsDrawer.es.js";
10
+ import Y from "./components/Allocation.es.js";
11
+ import $ from "./components/Analysis.es.js";
12
+ import q from "./components/Overview.es.js";
13
+ import { TabTitle as J } from "./components/TabTitle.es.js";
14
+ import l from "react";
15
+ import { observer as P } from "mobx-react-lite";
16
+ import Q from "@mui/material/Stack";
17
+ import { Fragment as X, jsx as t, jsxs as T } from "react/jsx-runtime";
18
+ import Z from "@mui/material/Tab";
19
+ import tt from "@mui/material/Tabs";
20
+ import et from "@mui/material/Tooltip";
21
+ var It = P(({ onBackClick: I, onMenuClick: S, sx: g }) => {
22
+ const { onEvent: c } = k(), { isMobile: v } = V(), { isAccountDataLoaded: A, loadAccountData: N, visibleInvestmentAccounts: L } = O(), { visibleHoldings: x, hasAllocationData: m, hasAnalysisData: d, setShowConnectionsWidget: _, showConnectionsWidget: D } = y(), { investments: e, accounts: W } = F(), { isInitialized: p } = K(), [o, f] = l.useState(0), { loadHoldings: w, holdingsLoaded: n } = y();
23
+ H({
23
24
  widgetName: "InvestmentsWidget",
24
- isLoaded: d
25
- }), c.useEffect(() => {
26
- E || b().finally();
27
- }, []), c.useEffect(() => {
28
- r && A().finally();
29
- }, [r]);
30
- const N = () => {
31
- n(o.INVESTMENT_WIDGET_ACCOUNT_FILTER_CLICK);
25
+ isLoaded: n
26
+ }), l.useEffect(() => {
27
+ A || N().finally();
28
+ }, []), l.useEffect(() => {
29
+ p && w().finally();
30
+ }, [p]), l.useEffect(() => {
31
+ n && (o === 1 && !m && f(0), o === 2 && !d && f(0));
32
+ }, [
33
+ o,
34
+ m,
35
+ d,
36
+ n
37
+ ]);
38
+ const M = () => {
39
+ c(s.INVESTMENT_WIDGET_ACCOUNT_FILTER_CLICK);
32
40
  };
33
- if (!r || !d) return /* @__PURE__ */ t(k, {});
34
- const y = [
35
- o.INVESTMENT_WIDGET_DETAILS_CLICK,
36
- o.INVESTMENT_WIDGET_ALLOCATION_CLICK,
37
- o.INVESTMENT_WIDGET_ANALYSIS_CLICK
38
- ], s = I.length === 0 && S.length === 0, L = [
39
- e.tab_overview_title,
40
- e.tab_allocation_title,
41
- e.tab_analysis_title
41
+ if (!p || !n) return /* @__PURE__ */ t(j, {});
42
+ const G = [
43
+ s.INVESTMENT_WIDGET_DETAILS_CLICK,
44
+ s.INVESTMENT_WIDGET_ALLOCATION_CLICK,
45
+ s.INVESTMENT_WIDGET_ANALYSIS_CLICK
46
+ ], i = L.length === 0 && x.length === 0, b = [
47
+ {
48
+ title: e.tab_overview_title,
49
+ disabled: !1,
50
+ tooltip: ""
51
+ },
52
+ {
53
+ title: e.tab_allocation_title,
54
+ disabled: !m,
55
+ tooltip: e.allocation.empty_data
56
+ },
57
+ {
58
+ title: e.tab_analysis_title,
59
+ disabled: !d,
60
+ tooltip: e.analysis.empty_data
61
+ }
42
62
  ];
43
- return /* @__PURE__ */ l(F, {
44
- allowedAccountTypes: [O.INVESTMENT],
45
- onAccountsFilterClick: N,
46
- onBackClick: u,
47
- onMenuClick: T,
48
- sx: _,
63
+ return /* @__PURE__ */ T(z, {
64
+ allowedAccountTypes: [U.INVESTMENT],
65
+ onAccountsFilterClick: M,
66
+ onBackClick: I,
67
+ onMenuClick: S,
68
+ sx: g,
49
69
  title: e.title,
50
- children: [/* @__PURE__ */ l(Y, {
51
- mx: C ? 0 : 48,
70
+ children: [/* @__PURE__ */ T(Q, {
71
+ mx: v ? 0 : 48,
52
72
  my: 24,
53
- children: [/* @__PURE__ */ t(q, {
54
- onChange: (a, p) => {
55
- h(p), n(y[p]);
73
+ children: [/* @__PURE__ */ t(tt, {
74
+ onChange: (r, a) => {
75
+ i || b[a]?.disabled || (f(a), c(G[a]));
56
76
  },
57
77
  sx: { bgcolor: "background.paper" },
58
78
  textColor: "primary",
59
- value: s ? !1 : i,
79
+ value: i ? !1 : o,
60
80
  variant: "fullWidth",
61
- children: L.map((a) => /* @__PURE__ */ t($, {
62
- disabled: s,
63
- label: /* @__PURE__ */ t(z, { title: a })
64
- }, a))
65
- }), s ? /* @__PURE__ */ t(K, {
81
+ children: b.map(({ title: r, disabled: a, tooltip: C }) => {
82
+ const u = i || a, E = u && !i && !!C, h = /* @__PURE__ */ t(Z, {
83
+ "aria-disabled": u || void 0,
84
+ label: /* @__PURE__ */ t(J, { title: r }),
85
+ sx: {
86
+ ...E && { flex: 1 },
87
+ ...u && {
88
+ opacity: 0.38,
89
+ cursor: "default"
90
+ }
91
+ }
92
+ }, r);
93
+ return E ? /* @__PURE__ */ t(et, {
94
+ describeChild: !0,
95
+ title: C,
96
+ children: h
97
+ }, r) : h;
98
+ })
99
+ }), i ? /* @__PURE__ */ t(B, {
66
100
  header: e.empty_state_header,
67
101
  icon: "bid_landscape",
68
102
  onClick: () => {
69
- m(!0), n(o.ACCOUNTS_CLICK_CONNECT);
103
+ _(!0), c(s.ACCOUNTS_CLICK_CONNECT);
70
104
  },
71
105
  primaryButton: e.overview.connect_accounts,
72
106
  subText: e.empty_state_description,
@@ -79,20 +113,20 @@ var ut = R(({ onBackClick: u, onMenuClick: T, sx: _ }) => {
79
113
  },
80
114
  px: 16
81
115
  }
82
- }) : /* @__PURE__ */ l(B, { children: [
83
- i === 0 && /* @__PURE__ */ t(j, {}),
84
- i === 1 && /* @__PURE__ */ t(H, {}),
85
- i === 2 && /* @__PURE__ */ t(U, {})
116
+ }) : /* @__PURE__ */ T(X, { children: [
117
+ o === 0 && /* @__PURE__ */ t(q, {}),
118
+ o === 1 && /* @__PURE__ */ t(Y, {}),
119
+ o === 2 && /* @__PURE__ */ t($, {})
86
120
  ] })]
87
- }), /* @__PURE__ */ t(V, {
88
- onClose: () => m(!1),
89
- showConnectionsWidget: g,
90
- title: v.manage_connections
121
+ }), /* @__PURE__ */ t(R, {
122
+ onClose: () => _(!1),
123
+ showConnectionsWidget: D,
124
+ title: W.manage_connections
91
125
  })]
92
126
  });
93
127
  });
94
128
  export {
95
- ut as InvestmentsWidget
129
+ It as InvestmentsWidget
96
130
  };
97
131
 
98
132
  //# sourceMappingURL=InvestmentsWidget.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InvestmentsWidget.es.js","names":[],"sources":["../../src/investments/InvestmentsWidget.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\n\nimport {\n ANALYTICS_EVENTS,\n EmptyState,\n Loader,\n useAccountStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useHoldingStore,\n useScreenSize,\n useWidgetLoadTimer,\n WidgetContainer,\n} from '../common'\nimport { AccountType, WidgetProps } from '../core'\n\nimport ConnectionsDrawer from '../accounts/components/ConnectionsDrawer'\nimport Allocation from './components/Allocation'\nimport Analysis from './components/Analysis'\nimport Overview from './components/Overview'\nimport { TabTitle } from './components/TabTitle'\n\nexport const InvestmentsWidget = observer(({ onBackClick, onMenuClick, sx }: WidgetProps) => {\n const { onEvent } = useEvent()\n const { isMobile } = useScreenSize()\n const {\n isAccountDataLoaded,\n loadAccountData,\n visibleInvestmentAccounts: accounts,\n } = useAccountStore()\n const {\n visibleHoldings: holdings,\n setShowConnectionsWidget,\n showConnectionsWidget,\n } = useHoldingStore()\n const { investments: copy, accounts: accountsCopy } = useGlobalCopyStore()\n\n const { isInitialized } = useGlobalUiStore()\n\n const [selectedTab, setSelectedTab] = React.useState(0)\n\n const { loadHoldings, holdingsLoaded } = useHoldingStore()\n\n useWidgetLoadTimer({\n widgetName: 'InvestmentsWidget',\n isLoaded: holdingsLoaded,\n })\n\n React.useEffect(() => {\n if (!isAccountDataLoaded) {\n loadAccountData().finally()\n }\n }, [])\n\n React.useEffect(() => {\n if (isInitialized) {\n loadHoldings().finally()\n }\n }, [isInitialized])\n\n const handleAccountFilterClick = () => {\n onEvent(ANALYTICS_EVENTS.INVESTMENT_WIDGET_ACCOUNT_FILTER_CLICK)\n }\n\n if (!isInitialized || !holdingsLoaded) return <Loader />\n\n const events = [\n ANALYTICS_EVENTS.INVESTMENT_WIDGET_DETAILS_CLICK,\n ANALYTICS_EVENTS.INVESTMENT_WIDGET_ALLOCATION_CLICK,\n ANALYTICS_EVENTS.INVESTMENT_WIDGET_ANALYSIS_CLICK,\n ]\n const isEmptyState = accounts.length === 0 && holdings.length === 0\n const investmentTabs = [\n copy.tab_overview_title,\n copy.tab_allocation_title,\n copy.tab_analysis_title,\n ]\n return (\n <WidgetContainer\n allowedAccountTypes={[AccountType.INVESTMENT]}\n onAccountsFilterClick={handleAccountFilterClick}\n onBackClick={onBackClick}\n onMenuClick={onMenuClick}\n sx={sx}\n title={copy.title}\n >\n <Stack mx={isMobile ? 0 : 48} my={24}>\n <Tabs\n onChange={(_, newValue) => {\n setSelectedTab(newValue)\n onEvent(events[newValue])\n }}\n sx={{ bgcolor: 'background.paper' }}\n textColor=\"primary\"\n value={!isEmptyState ? selectedTab : false}\n variant=\"fullWidth\"\n >\n {investmentTabs.map((title) => (\n <Tab disabled={isEmptyState} key={title} label={<TabTitle title={title} />} />\n ))}\n </Tabs>\n {isEmptyState ? (\n <EmptyState\n header={copy.empty_state_header}\n icon=\"bid_landscape\"\n onClick={() => {\n setShowConnectionsWidget(true)\n onEvent(ANALYTICS_EVENTS.ACCOUNTS_CLICK_CONNECT)\n }}\n primaryButton={copy.overview.connect_accounts}\n subText={copy.empty_state_description}\n sx={{\n width: { sm: 432 },\n '.buttons-footer': {\n width: 167,\n },\n '.MuiTypography-h2': {\n mt: 20,\n mb: 4,\n },\n px: 16,\n }}\n />\n ) : (\n <>\n {selectedTab === 0 && <Overview />}\n {selectedTab === 1 && <Allocation />}\n {selectedTab === 2 && <Analysis />}\n </>\n )}\n </Stack>\n <ConnectionsDrawer\n onClose={() => setShowConnectionsWidget(false)}\n showConnectionsWidget={showConnectionsWidget}\n title={accountsCopy.manage_connections}\n />\n </WidgetContainer>\n )\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"InvestmentsWidget.es.js","names":[],"sources":["../../src/investments/InvestmentsWidget.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\nimport Tooltip from '@mui/material/Tooltip'\n\nimport {\n ANALYTICS_EVENTS,\n EmptyState,\n Loader,\n useAccountStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useHoldingStore,\n useScreenSize,\n useWidgetLoadTimer,\n WidgetContainer,\n} from '../common'\nimport { AccountType, WidgetProps } from '../core'\n\nimport ConnectionsDrawer from '../accounts/components/ConnectionsDrawer'\nimport Allocation from './components/Allocation'\nimport Analysis from './components/Analysis'\nimport Overview from './components/Overview'\nimport { TabTitle } from './components/TabTitle'\n\nexport const InvestmentsWidget = observer(({ onBackClick, onMenuClick, sx }: WidgetProps) => {\n const { onEvent } = useEvent()\n const { isMobile } = useScreenSize()\n const {\n isAccountDataLoaded,\n loadAccountData,\n visibleInvestmentAccounts: accounts,\n } = useAccountStore()\n const {\n visibleHoldings: holdings,\n hasAllocationData,\n hasAnalysisData,\n setShowConnectionsWidget,\n showConnectionsWidget,\n } = useHoldingStore()\n const { investments: copy, accounts: accountsCopy } = useGlobalCopyStore()\n\n const { isInitialized } = useGlobalUiStore()\n\n const [selectedTab, setSelectedTab] = React.useState(0)\n\n const { loadHoldings, holdingsLoaded } = useHoldingStore()\n\n useWidgetLoadTimer({\n widgetName: 'InvestmentsWidget',\n isLoaded: holdingsLoaded,\n })\n\n React.useEffect(() => {\n if (!isAccountDataLoaded) {\n loadAccountData().finally()\n }\n }, [])\n\n React.useEffect(() => {\n if (isInitialized) {\n loadHoldings().finally()\n }\n }, [isInitialized])\n\n // Reset to Overview if the active tab becomes disabled. Only act once holdings\n // are loaded so a mid-refetch (getters briefly false) doesn't eject the user.\n // Depend only on the boolean getters, never `visibleHoldings` (new array each\n // access → render loop).\n React.useEffect(() => {\n if (!holdingsLoaded) return\n if (selectedTab === 1 && !hasAllocationData) setSelectedTab(0)\n if (selectedTab === 2 && !hasAnalysisData) setSelectedTab(0)\n }, [selectedTab, hasAllocationData, hasAnalysisData, holdingsLoaded])\n\n const handleAccountFilterClick = () => {\n onEvent(ANALYTICS_EVENTS.INVESTMENT_WIDGET_ACCOUNT_FILTER_CLICK)\n }\n\n if (!isInitialized || !holdingsLoaded) return <Loader />\n\n const events = [\n ANALYTICS_EVENTS.INVESTMENT_WIDGET_DETAILS_CLICK,\n ANALYTICS_EVENTS.INVESTMENT_WIDGET_ALLOCATION_CLICK,\n ANALYTICS_EVENTS.INVESTMENT_WIDGET_ANALYSIS_CLICK,\n ]\n const isEmptyState = accounts.length === 0 && holdings.length === 0\n const investmentTabs = [\n { title: copy.tab_overview_title, disabled: false, tooltip: '' },\n {\n title: copy.tab_allocation_title,\n disabled: !hasAllocationData,\n tooltip: copy.allocation.empty_data,\n },\n {\n title: copy.tab_analysis_title,\n disabled: !hasAnalysisData,\n tooltip: copy.analysis.empty_data,\n },\n ]\n return (\n <WidgetContainer\n allowedAccountTypes={[AccountType.INVESTMENT]}\n onAccountsFilterClick={handleAccountFilterClick}\n onBackClick={onBackClick}\n onMenuClick={onMenuClick}\n sx={sx}\n title={copy.title}\n >\n <Stack mx={isMobile ? 0 : 48} my={24}>\n <Tabs\n onChange={(_, newValue) => {\n // aria-disabled tabs stay clickable; block their selection here.\n if (isEmptyState || investmentTabs[newValue]?.disabled) return\n setSelectedTab(newValue)\n onEvent(events[newValue])\n }}\n sx={{ bgcolor: 'background.paper' }}\n textColor=\"primary\"\n value={!isEmptyState ? selectedTab : false}\n variant=\"fullWidth\"\n >\n {investmentTabs.map(({ title, disabled, tooltip }) => {\n const isDisabled = isEmptyState || disabled\n const isTooltipTab = isDisabled && !isEmptyState && Boolean(tooltip)\n // aria-disabled (not native disabled) keeps the Tab focusable and in\n // the a11y tree; describeChild adds the reason without stealing the name.\n const tab = (\n <Tab\n aria-disabled={isDisabled || undefined}\n key={title}\n label={<TabTitle title={title} />}\n sx={{\n ...(isTooltipTab && { flex: 1 }),\n ...(isDisabled && {\n opacity: 0.38,\n cursor: 'default',\n }),\n }}\n />\n )\n\n return isTooltipTab ? (\n <Tooltip describeChild key={title} title={tooltip}>\n {tab}\n </Tooltip>\n ) : (\n tab\n )\n })}\n </Tabs>\n {isEmptyState ? (\n <EmptyState\n header={copy.empty_state_header}\n icon=\"bid_landscape\"\n onClick={() => {\n setShowConnectionsWidget(true)\n onEvent(ANALYTICS_EVENTS.ACCOUNTS_CLICK_CONNECT)\n }}\n primaryButton={copy.overview.connect_accounts}\n subText={copy.empty_state_description}\n sx={{\n width: { sm: 432 },\n '.buttons-footer': {\n width: 167,\n },\n '.MuiTypography-h2': {\n mt: 20,\n mb: 4,\n },\n px: 16,\n }}\n />\n ) : (\n <>\n {selectedTab === 0 && <Overview />}\n {selectedTab === 1 && <Allocation />}\n {selectedTab === 2 && <Analysis />}\n </>\n )}\n </Stack>\n <ConnectionsDrawer\n onClose={() => setShowConnectionsWidget(false)}\n showConnectionsWidget={showConnectionsWidget}\n title={accountsCopy.manage_connections}\n />\n </WidgetContainer>\n )\n})\n"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- import { formatCurrency as k, formatPercentage as B } from "../../../../core/utils/NumberFormatting.es.js";
2
- var L = {
1
+ import { formatCurrency as L, formatPercentage as k } from "../../../../core/utils/NumberFormatting.es.js";
2
+ import { ALLOCATION_KEYS as B } from "../../../../core/constants/Investments.es.js";
3
+ var C = {
3
4
  allocations_cash: "#AEDCCC",
4
5
  allocations_convertible: "#80CAD0",
5
6
  allocations_foreign_bond: "#51B9D4",
@@ -9,95 +10,85 @@ var L = {
9
10
  allocations_unknown: "#161D6A",
10
11
  allocations_us_bond: "#254995",
11
12
  allocations_us_stock: "#1E2D84"
12
- }, y = [
13
- { name: "allocations_cash" },
14
- { name: "allocations_convertible" },
15
- { name: "allocations_foreign_bond" },
16
- { name: "allocations_foreign_stock" },
17
- { name: "allocations_other" },
18
- { name: "allocations_preferred" },
19
- { name: "allocations_us_bond" },
20
- { name: "allocations_us_stock" },
21
- { name: "allocations_unknown" }
22
- ], C = (e, l, c) => {
23
- const i = c === void 0 ? 0 : l, t = c === void 0 ? l : c;
24
- return e >= Math.min(i, t) && e < Math.max(i, t);
25
- }, h = (e, l, c) => {
26
- const i = [...new Set(e.map((r) => r.name.toLowerCase()))];
27
- let t;
28
- return i.map((r) => {
29
- const _ = e.reduce((m, o) => {
30
- const p = o.name;
31
- return p.toLowerCase() === r ? (t = p, v(o) * o[l] / 100 + m) : m;
13
+ }, y = B.map((t) => ({ name: t })), V = (t, l, r) => {
14
+ const i = r === void 0 ? 0 : l, e = r === void 0 ? l : r;
15
+ return t >= Math.min(i, e) && t < Math.max(i, e);
16
+ }, h = (t, l, r) => {
17
+ const i = [...new Set(t.map((c) => c.name.toLowerCase()))];
18
+ let e;
19
+ return i.map((c) => {
20
+ const _ = t.reduce((m, s) => {
21
+ const p = s.name;
22
+ return p.toLowerCase() === c ? (e = p, d(s) * s[l] / 100 + m) : m;
32
23
  }, 0);
33
24
  return {
34
- displayName: t,
35
- name: t,
25
+ displayName: e,
26
+ name: e,
36
27
  value: _,
37
- percentage: _ / c
28
+ percentage: _ / r
38
29
  };
39
30
  });
40
- }, v = (e) => e.calculated_market_value ? e.calculated_market_value : e.market_value, G = (e, l, c) => {
41
- const i = Object.values(l.allocations_list), t = [];
42
- let r = 0;
43
- const _ = e.map(({ guid: a }) => a), m = c.filter(({ account_guid: a }) => _.includes(a)).map((a) => ({
31
+ }, d = (t) => t.calculated_market_value ? t.calculated_market_value : t.market_value, E = (t, l, r) => {
32
+ const i = Object.values(l.allocations_list), e = [];
33
+ let c = 0;
34
+ const _ = new Set(t.map(({ guid: a }) => a)), m = r.filter(({ account_guid: a }) => _.has(a)).map((a) => ({
44
35
  ...a,
45
36
  name: a.symbol || a.description,
46
- gainLoss: a.cost_basis || a.cost_basis === 0 ? v(a) - a.cost_basis : 0
47
- })), { cashBalance: o, totalAccountBalance: p } = e.reduce((a, n) => ({
37
+ gainLoss: a.cost_basis || a.cost_basis === 0 ? d(a) - a.cost_basis : 0
38
+ })), { cashBalance: s, totalAccountBalance: p } = t.reduce((a, n) => ({
48
39
  cashBalance: a.cashBalance + (n.cash_balance || 0),
49
40
  totalAccountBalance: a.totalAccountBalance + (n.balance || 0)
50
41
  }), {
51
42
  cashBalance: 0,
52
43
  totalAccountBalance: 0
53
- }), { marketValue: A, totalGainLoss: b } = m.reduce((a, n) => ({
54
- marketValue: a.marketValue + v(n),
44
+ }), { marketValue: b, totalGainLoss: A } = m.reduce((a, n) => ({
45
+ marketValue: a.marketValue + d(n),
55
46
  totalGainLoss: a.totalGainLoss + n.gainLoss
56
47
  }), {
57
48
  marketValue: 0,
58
49
  totalGainLoss: 0
59
- }), f = A + o;
50
+ }), f = b + s;
60
51
  return y.forEach((a, n) => {
61
- const d = m.filter((u) => !!u[a.name]);
62
- let s = d.reduce((u, D) => u + v(D) * D[a.name] / 100, 0);
63
- const g = h(d, a.name, s);
64
- if (a.name === "allocations_cash" && o > 0) {
65
- s += o;
52
+ const v = m.filter((u) => !!u[a.name]);
53
+ let o = v.reduce((u, g) => u + d(g) * g[a.name] / 100, 0);
54
+ const D = h(v, a.name, o);
55
+ if (a.name === "allocations_cash" && s > 0) {
56
+ o += s;
66
57
  const u = {
67
58
  displayName: l.cash_balance_display_name,
68
59
  name: "allocations_name",
69
- value: o,
70
- percentage: o / f
60
+ value: s,
61
+ percentage: s / f
71
62
  };
72
- g.push(u);
63
+ D.push(u);
73
64
  }
74
- s > 0 && (t.push({
65
+ o > 0 && (e.push({
75
66
  name: a.name,
76
67
  displayName: i[n],
77
68
  guid: `${a.name}-${n}`,
78
- holdings: g,
79
- percentage: s / f,
80
- value: s,
81
- color: L[a.name]
82
- }), r += s);
69
+ holdings: D,
70
+ percentage: o / f,
71
+ value: o,
72
+ color: C[a.name]
73
+ }), c += o);
83
74
  }), {
84
- investmentsData: t,
85
- donutData: t.map(({ displayName: a, guid: n, color: d, value: s }) => ({
75
+ investmentsData: e,
76
+ donutData: e.map(({ displayName: a, guid: n, color: v, value: o }) => ({
86
77
  id: n,
87
- color: d,
78
+ color: v,
88
79
  label: a,
89
- value: s / r * 100
80
+ value: o / c * 100
90
81
  })),
91
- totalAmount: r,
92
- totalGainLoss: b,
82
+ totalAmount: c,
83
+ totalGainLoss: A,
93
84
  totalMarketValue: f,
94
- totalGainLossPercentage: b / p
85
+ totalGainLossPercentage: A / p
95
86
  };
96
- }, w = (e) => e < 1e-3 ? "< 0.1%" : B(e), E = (e) => e === 0 ? k(e, "0,0.00") : C(e, -0.01, 0.01) ? "< $0.01" : k(e, "0,0.00");
87
+ }, N = (t) => t < 1e-3 ? "< 0.1%" : k(t), S = (t) => t === 0 ? L(t, "0,0.00") : V(t, -0.01, 0.01) ? "< $0.01" : L(t, "0,0.00");
97
88
  export {
98
- G as createInvestmentsAllocationData,
99
- E as currencyDisplay,
100
- w as percentageDisplay
89
+ E as createInvestmentsAllocationData,
90
+ S as currencyDisplay,
91
+ N as percentageDisplay
101
92
  };
102
93
 
103
94
  //# sourceMappingURL=createInvestementsAllocationData.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createInvestementsAllocationData.es.js","names":[],"sources":["../../../../../src/investments/components/allocation/util/createInvestementsAllocationData.tsx"],"sourcesContent":["import { Account, Holding } from '../../../../core'\nimport { InvestmentAllocationCopy } from '../../../../core/types/localization/InvestmentsCopy'\nimport type { DonutData } from '../InvestmentsAllocationChart'\nimport { formatCurrency, formatPercentage } from '../../../../core/utils/NumberFormatting'\n\nexport interface InvestmentsAllocationData {\n name: string\n displayName: string\n guid: string\n holdings: InvestmentAllocationTotals[]\n percentage: number\n value: number\n color: string\n}\nexport interface InvestmentAllocationTotals {\n displayName: string\n name: string\n value: number\n percentage: number\n}\n\nconst allocationColors = {\n allocations_cash: '#AEDCCC',\n allocations_convertible: '#80CAD0',\n allocations_foreign_bond: '#51B9D4',\n allocations_foreign_stock: '#3DA0C9',\n allocations_other: '#3583B8',\n allocations_preferred: '#2D66A7',\n allocations_unknown: '#161D6A',\n allocations_us_bond: '#254995',\n allocations_us_stock: '#1E2D84',\n}\nconst allocationsList = [\n {\n name: 'allocations_cash',\n },\n {\n name: 'allocations_convertible',\n },\n {\n name: 'allocations_foreign_bond',\n },\n {\n name: 'allocations_foreign_stock',\n },\n {\n name: 'allocations_other',\n },\n {\n name: 'allocations_preferred',\n },\n {\n name: 'allocations_us_bond',\n },\n {\n name: 'allocations_us_stock',\n },\n {\n name: 'allocations_unknown',\n },\n]\n\nconst inRange = (n: number, start: number, end?: number) => {\n const rangeStart = end === undefined ? 0 : start\n const rangeEnd = end === undefined ? start : end\n return n >= Math.min(rangeStart, rangeEnd) && n < Math.max(rangeStart, rangeEnd)\n}\n\nconst createHoldingsData = (\n holdings: Holding[],\n allocationName: string,\n allocationValue: number,\n) => {\n const uniqueHoldings = [\n ...new Set(holdings.map((holding: Holding) => holding.name.toLowerCase())),\n ]\n let displayName: string\n const investmentAllocationTotals = uniqueHoldings.map((holdingName) => {\n // sum all the holdings with the same \"name\"\n const holdingsTotalValue = holdings.reduce((acc, hold: Holding) => {\n const name = hold.name\n\n if (name.toLowerCase() === holdingName) {\n // Since we lose the capitalization with the unique names, we take it from the last match.\n displayName = name\n return (\n (getHoldingValue(hold) * hold[allocationName as keyof typeof allocationColors]) / 100 +\n acc\n )\n }\n\n return acc\n }, 0)\n\n return {\n displayName,\n name: displayName,\n value: holdingsTotalValue,\n percentage: holdingsTotalValue / allocationValue,\n }\n })\n return investmentAllocationTotals\n}\n\nconst getHoldingValue = (holding: Holding) =>\n holding.calculated_market_value ? holding.calculated_market_value : holding.market_value\n\nexport const createInvestmentsAllocationData = (\n accounts: Account[],\n copy: InvestmentAllocationCopy,\n holdings: Holding[],\n) => {\n const allocationListDisplayNames = Object.values(copy.allocations_list)\n const investementAllocationData: InvestmentsAllocationData[] = []\n\n let totalAmount = 0\n\n const accountGuids = accounts.map(({ guid }) => guid)\n const updatedHoldings: Holding[] = holdings\n .filter(({ account_guid }) => accountGuids.includes(account_guid))\n .map((eachHolding) => {\n return {\n ...eachHolding,\n name: eachHolding.symbol || eachHolding.description,\n gainLoss:\n eachHolding.cost_basis || eachHolding.cost_basis === 0\n ? getHoldingValue(eachHolding) - eachHolding.cost_basis\n : 0,\n }\n })\n\n const { cashBalance, totalAccountBalance } = accounts.reduce(\n (sum, account) => {\n return {\n cashBalance: sum.cashBalance + (account.cash_balance || 0),\n totalAccountBalance: sum.totalAccountBalance + (account.balance || 0),\n }\n },\n { cashBalance: 0, totalAccountBalance: 0 },\n )\n const { marketValue, totalGainLoss } = updatedHoldings.reduce(\n (acc, holding) => {\n return {\n marketValue: acc.marketValue + getHoldingValue(holding),\n totalGainLoss: acc.totalGainLoss + holding.gainLoss,\n }\n },\n { marketValue: 0, totalGainLoss: 0 },\n )\n const totalMarketValue = marketValue + cashBalance\n\n allocationsList.forEach((allocation, index) => {\n const filteredHoldings = updatedHoldings.filter(\n (eachHolding) => !!eachHolding[allocation.name as keyof typeof allocationColors],\n )\n let holdingsTotal = filteredHoldings.reduce(\n (sum, holding) =>\n sum +\n (getHoldingValue(holding) * holding[allocation.name as keyof typeof allocationColors]) /\n 100,\n 0,\n )\n const investmentAllocationTotals = createHoldingsData(\n filteredHoldings,\n allocation.name,\n holdingsTotal,\n )\n if (allocation.name === 'allocations_cash' && cashBalance > 0) {\n // Updating holdingsTotal to include cash balance\n // This affects the holdingsTotal and percentage for this allocation\n holdingsTotal += cashBalance\n\n // Creating a holding item for cash balance\n const cashBalanceHolding = {\n displayName: copy.cash_balance_display_name,\n name: 'allocations_name',\n value: cashBalance,\n percentage: cashBalance / totalMarketValue,\n }\n\n investmentAllocationTotals.push(cashBalanceHolding)\n }\n\n // Shows allocation if holdingsTotal is greater than zero\n if (holdingsTotal > 0) {\n investementAllocationData.push({\n name: allocation.name,\n displayName: allocationListDisplayNames[index],\n guid: `${allocation.name}-${index}`,\n holdings: investmentAllocationTotals,\n percentage: holdingsTotal / totalMarketValue,\n value: holdingsTotal,\n color: allocationColors[allocation.name as keyof typeof allocationColors],\n })\n totalAmount += holdingsTotal\n }\n })\n const donutData: DonutData[] = investementAllocationData.map(\n ({ displayName, guid, color, value }) => ({\n id: guid,\n color: color,\n label: displayName,\n value: (value / totalAmount) * 100,\n }),\n )\n\n return {\n investmentsData: investementAllocationData,\n donutData,\n totalAmount,\n totalGainLoss,\n totalMarketValue,\n totalGainLossPercentage: totalGainLoss / totalAccountBalance,\n }\n}\n\nexport const percentageDisplay = (value: number) =>\n value < 0.001 ? '< 0.1%' : formatPercentage(value)\n\nexport const currencyDisplay = (value: number) => {\n if (value === 0) return formatCurrency(value, '0,0.00')\n return inRange(value, -0.01, 0.01) ? '< $0.01' : formatCurrency(value, '0,0.00')\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"createInvestementsAllocationData.es.js","names":[],"sources":["../../../../../src/investments/components/allocation/util/createInvestementsAllocationData.tsx"],"sourcesContent":["import { Account, Holding } from '../../../../core'\nimport { ALLOCATION_KEYS, type AllocationKey } from '../../../../core/constants/Investments'\nimport { InvestmentAllocationCopy } from '../../../../core/types/localization/InvestmentsCopy'\nimport type { DonutData } from '../InvestmentsAllocationChart'\nimport { formatCurrency, formatPercentage } from '../../../../core/utils/NumberFormatting'\n\nexport interface InvestmentsAllocationData {\n name: string\n displayName: string\n guid: string\n holdings: InvestmentAllocationTotals[]\n percentage: number\n value: number\n color: string\n}\nexport interface InvestmentAllocationTotals {\n displayName: string\n name: string\n value: number\n percentage: number\n}\n\nconst allocationColors: Record<AllocationKey, string> = {\n allocations_cash: '#AEDCCC',\n allocations_convertible: '#80CAD0',\n allocations_foreign_bond: '#51B9D4',\n allocations_foreign_stock: '#3DA0C9',\n allocations_other: '#3583B8',\n allocations_preferred: '#2D66A7',\n allocations_unknown: '#161D6A',\n allocations_us_bond: '#254995',\n allocations_us_stock: '#1E2D84',\n}\nconst allocationsList = ALLOCATION_KEYS.map((name) => ({ name }))\n\nconst inRange = (n: number, start: number, end?: number) => {\n const rangeStart = end === undefined ? 0 : start\n const rangeEnd = end === undefined ? start : end\n return n >= Math.min(rangeStart, rangeEnd) && n < Math.max(rangeStart, rangeEnd)\n}\n\nconst createHoldingsData = (\n holdings: Holding[],\n allocationName: string,\n allocationValue: number,\n) => {\n const uniqueHoldings = [\n ...new Set(holdings.map((holding: Holding) => holding.name.toLowerCase())),\n ]\n let displayName: string\n const investmentAllocationTotals = uniqueHoldings.map((holdingName) => {\n // sum all the holdings with the same \"name\"\n const holdingsTotalValue = holdings.reduce((acc, hold: Holding) => {\n const name = hold.name\n\n if (name.toLowerCase() === holdingName) {\n // Since we lose the capitalization with the unique names, we take it from the last match.\n displayName = name\n return (\n (getHoldingValue(hold) * hold[allocationName as keyof typeof allocationColors]) / 100 +\n acc\n )\n }\n\n return acc\n }, 0)\n\n return {\n displayName,\n name: displayName,\n value: holdingsTotalValue,\n percentage: holdingsTotalValue / allocationValue,\n }\n })\n return investmentAllocationTotals\n}\n\nconst getHoldingValue = (holding: Holding) =>\n holding.calculated_market_value ? holding.calculated_market_value : holding.market_value\n\nexport const createInvestmentsAllocationData = (\n accounts: Account[],\n copy: InvestmentAllocationCopy,\n holdings: Holding[],\n) => {\n const allocationListDisplayNames = Object.values(copy.allocations_list)\n const investementAllocationData: InvestmentsAllocationData[] = []\n\n let totalAmount = 0\n\n const accountGuids = new Set(accounts.map(({ guid }) => guid))\n const updatedHoldings: Holding[] = holdings\n .filter(({ account_guid }) => accountGuids.has(account_guid))\n .map((eachHolding) => {\n return {\n ...eachHolding,\n name: eachHolding.symbol || eachHolding.description,\n gainLoss:\n eachHolding.cost_basis || eachHolding.cost_basis === 0\n ? getHoldingValue(eachHolding) - eachHolding.cost_basis\n : 0,\n }\n })\n\n const { cashBalance, totalAccountBalance } = accounts.reduce(\n (sum, account) => {\n return {\n cashBalance: sum.cashBalance + (account.cash_balance || 0),\n totalAccountBalance: sum.totalAccountBalance + (account.balance || 0),\n }\n },\n { cashBalance: 0, totalAccountBalance: 0 },\n )\n const { marketValue, totalGainLoss } = updatedHoldings.reduce(\n (acc, holding) => {\n return {\n marketValue: acc.marketValue + getHoldingValue(holding),\n totalGainLoss: acc.totalGainLoss + holding.gainLoss,\n }\n },\n { marketValue: 0, totalGainLoss: 0 },\n )\n const totalMarketValue = marketValue + cashBalance\n\n allocationsList.forEach((allocation, index) => {\n const filteredHoldings = updatedHoldings.filter(\n (eachHolding) => !!eachHolding[allocation.name as keyof typeof allocationColors],\n )\n let holdingsTotal = filteredHoldings.reduce(\n (sum, holding) =>\n sum +\n (getHoldingValue(holding) * holding[allocation.name as keyof typeof allocationColors]) /\n 100,\n 0,\n )\n const investmentAllocationTotals = createHoldingsData(\n filteredHoldings,\n allocation.name,\n holdingsTotal,\n )\n if (allocation.name === 'allocations_cash' && cashBalance > 0) {\n // Updating holdingsTotal to include cash balance\n // This affects the holdingsTotal and percentage for this allocation\n holdingsTotal += cashBalance\n\n // Creating a holding item for cash balance\n const cashBalanceHolding = {\n displayName: copy.cash_balance_display_name,\n name: 'allocations_name',\n value: cashBalance,\n percentage: cashBalance / totalMarketValue,\n }\n\n investmentAllocationTotals.push(cashBalanceHolding)\n }\n\n // Shows allocation if holdingsTotal is greater than zero\n if (holdingsTotal > 0) {\n investementAllocationData.push({\n name: allocation.name,\n displayName: allocationListDisplayNames[index],\n guid: `${allocation.name}-${index}`,\n holdings: investmentAllocationTotals,\n percentage: holdingsTotal / totalMarketValue,\n value: holdingsTotal,\n color: allocationColors[allocation.name as keyof typeof allocationColors],\n })\n totalAmount += holdingsTotal\n }\n })\n const donutData: DonutData[] = investementAllocationData.map(\n ({ displayName, guid, color, value }) => ({\n id: guid,\n color: color,\n label: displayName,\n value: (value / totalAmount) * 100,\n }),\n )\n\n return {\n investmentsData: investementAllocationData,\n donutData,\n totalAmount,\n totalGainLoss,\n totalMarketValue,\n totalGainLossPercentage: totalGainLoss / totalAccountBalance,\n }\n}\n\nexport const percentageDisplay = (value: number) =>\n value < 0.001 ? '< 0.1%' : formatPercentage(value)\n\nexport const currencyDisplay = (value: number) => {\n if (value === 0) return formatCurrency(value, '0,0.00')\n return inRange(value, -0.01, 0.01) ? '< $0.01' : formatCurrency(value, '0,0.00')\n}\n"],"mappings":"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"}
@@ -12,8 +12,8 @@ import { Add as $ } from "@mxenabled/mx-icons";
12
12
  import { Fragment as H, jsx as a, jsxs as I } from "react/jsx-runtime";
13
13
  import { fromUnixTime as J } from "date-fns/fromUnixTime";
14
14
  import { formatISO as K } from "date-fns/formatISO";
15
- var ce = E(({ isIncome: i = !1, label: f, onAddRecurringTransaction: x = () => null }) => {
16
- const { recurring: r } = w(), { filter: s, setFilter: c, transactions: _ } = G(), { addRepeatingTransaction: D } = B(), { user: C } = j(), [O, d] = o.useState(!1), [u, m] = o.useState(""), [p, R] = o.useState(L.EveryMonth), [l, A] = o.useState(1), [y, b] = o.useState(15), e = o.useMemo(() => _.find((t) => t.guid === u), [u, _]), q = () => {
15
+ var ce = E(({ isIncome: i = !1, label: _, onAddRecurringTransaction: x = () => null }) => {
16
+ const { recurring: r } = w(), { filter: s, setFilter: c, transactions: f } = G(), { addRepeatingTransaction: D } = B(), { user: C } = j(), [O, d] = o.useState(!1), [u, m] = o.useState(""), [l, R] = o.useState(L.EveryMonth), [p, A] = o.useState(1), [g, b] = o.useState(15), e = o.useMemo(() => f.find((t) => t.guid === u), [u, f]), q = () => {
17
17
  d(!0), c(i ? {
18
18
  ...s,
19
19
  custom: F
@@ -23,26 +23,28 @@ var ce = E(({ isIncome: i = !1, label: f, onAddRecurringTransaction: x = () => n
23
23
  });
24
24
  }, v = async () => {
25
25
  if (!e) {
26
- g();
26
+ y();
27
27
  return;
28
28
  }
29
29
  x();
30
- const t = M(p, J(e.date), l), n = {
30
+ const t = M(l, J(e.date), p), n = {
31
31
  account_guid: e.account_guid,
32
32
  amount: e.amount,
33
+ category_guid: e.category_guid ?? null,
33
34
  created_by: 0,
35
+ main_class_guid: e.main_class_guid ?? null,
34
36
  merchant_guid: e.merchant_guid,
35
37
  description: e.payee || e.description || e.feed_description,
36
38
  predicted_occurs_on: K(t, { representation: "date" }),
37
- recurrence_day: l,
38
- recurrence_type: p,
39
+ recurrence_day: p,
40
+ recurrence_type: l,
39
41
  repeating_transaction_type: i ? T.Income : T.Bill,
40
- second_recurrence_day: y,
42
+ second_recurrence_day: g,
41
43
  transaction_type: e.transaction_type,
42
44
  user_guid: C.guid
43
45
  };
44
- await D(n, e), g();
45
- }, g = () => {
46
+ await D(n, e), y();
47
+ }, y = () => {
46
48
  m(""), d(!1);
47
49
  };
48
50
  return /* @__PURE__ */ I(H, { children: [
@@ -50,13 +52,13 @@ var ce = E(({ isIncome: i = !1, label: f, onAddRecurringTransaction: x = () => n
50
52
  onClick: q,
51
53
  startIcon: /* @__PURE__ */ a($, { size: 24 }),
52
54
  variant: "contained",
53
- children: f
55
+ children: _
54
56
  }),
55
57
  /* @__PURE__ */ a(S, {
56
58
  ariaLabelClose: r.close_drawer_aria,
57
59
  isOpen: O,
58
60
  onClose: () => d(!1),
59
- title: f,
61
+ title: _,
60
62
  children: /* @__PURE__ */ a(k, {
61
63
  description: i ? r.add_income_description : r.add_expense_description,
62
64
  onSearch: (t) => {
@@ -75,12 +77,12 @@ var ce = E(({ isIncome: i = !1, label: f, onAddRecurringTransaction: x = () => n
75
77
  onPrimaryAction: v,
76
78
  title: i ? r.income_details : r.expense_details,
77
79
  children: e && /* @__PURE__ */ a(z, {
78
- firstDay: l,
79
- frequency: p,
80
+ firstDay: p,
81
+ frequency: l,
80
82
  onFirstDayChange: A,
81
83
  onFrequencyChange: R,
82
84
  onSecondDayChange: b,
83
- secondDay: y,
85
+ secondDay: g,
84
86
  transaction: e
85
87
  })
86
88
  })
@@ -1 +1 @@
1
- {"version":3,"file":"AddRecurringTransaction.es.js","names":[],"sources":["../../../../../src/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { formatISO } from 'date-fns/formatISO'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\n\nimport Button from '@mui/material/Button'\n\nimport { Add } from '@mxenabled/mx-icons'\n\nimport {\n Drawer,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n useTransactionStore,\n useUserStore,\n} from '../../../../common'\nimport {\n type RepeatingTransaction,\n type Transaction,\n Frequency,\n RepeatingType,\n} from '../../../../core'\n\nimport { SelectTransaction } from './SelectTransaction'\nimport { AddRecurringTransactionDetails } from './AddRecurringTransactionDetails'\n\nimport {\n expenseFilter,\n expenseFilterSearch,\n incomeFilter,\n incomeFilterSearch,\n} from '../../../../transactions/utils/Filters'\n\nimport { getNextPaymentDate } from '../../../../core/utils/RecurringTransactionsUtil'\n\ninterface AddRecurringTransactionProps {\n isIncome?: boolean\n label: string\n onAddRecurringTransaction?: () => void\n}\n\nexport const AddRecurringTransaction = observer(\n ({\n isIncome = false,\n label,\n onAddRecurringTransaction = () => null,\n }: AddRecurringTransactionProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { filter, setFilter, transactions } = useTransactionStore()\n const { addRepeatingTransaction } = useRecurringTransactionsStore()\n const { user } = useUserStore()\n\n const [isSelectTransactionOpen, setIsSelectTransactionOpen] = React.useState(false)\n const [transactionGuid, setTransactionGuid] = React.useState('')\n const [frequency, setFrequency] = React.useState(Frequency.EveryMonth)\n const [firstDay, setFirstDay] = React.useState(1)\n const [secondDay, setSecondDay] = React.useState(15)\n\n const transaction = React.useMemo(\n () => transactions.find((t) => t.guid === transactionGuid),\n [transactionGuid, transactions],\n )\n\n const handleOpen = () => {\n setIsSelectTransactionOpen(true)\n\n if (isIncome) {\n setFilter({ ...filter, custom: incomeFilter })\n } else {\n setFilter({ ...filter, custom: expenseFilter })\n }\n }\n\n const handleAddRecurringTransaction = async () => {\n if (!transaction) {\n closeOnAdd()\n return\n }\n onAddRecurringTransaction()\n\n const nextDate = getNextPaymentDate(frequency, fromUnixTime(transaction.date), firstDay)\n\n const repeatingTransaction = {\n account_guid: transaction.account_guid,\n amount: transaction.amount,\n created_by: 0, // User\n merchant_guid: transaction.merchant_guid,\n description: transaction.payee || transaction.description || transaction.feed_description,\n predicted_occurs_on: formatISO(nextDate, { representation: 'date' }),\n recurrence_day: firstDay,\n recurrence_type: frequency,\n repeating_transaction_type: isIncome ? RepeatingType.Income : RepeatingType.Bill,\n second_recurrence_day: secondDay,\n transaction_type: transaction.transaction_type,\n user_guid: user.guid,\n } as RepeatingTransaction\n\n await addRepeatingTransaction(repeatingTransaction, transaction)\n closeOnAdd()\n }\n\n const closeOnAdd = () => {\n setTransactionGuid('')\n setIsSelectTransactionOpen(false)\n }\n\n return (\n <>\n <Button onClick={handleOpen} startIcon={<Add size={24} />} variant=\"contained\">\n {label}\n </Button>\n\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={isSelectTransactionOpen}\n onClose={() => setIsSelectTransactionOpen(false)}\n title={label}\n >\n <SelectTransaction\n description={isIncome ? copy.add_income_description : copy.add_expense_description}\n onSearch={(searchValue) => {\n setFilter({\n ...filter,\n custom: (transaction: Transaction) => {\n if (isIncome) {\n return searchValue\n ? incomeFilterSearch(transaction, searchValue)\n : incomeFilter(transaction)\n } else {\n return searchValue\n ? expenseFilterSearch(transaction, searchValue)\n : expenseFilter(transaction)\n }\n },\n })\n }}\n onSelected={(guid) => setTransactionGuid(guid)}\n />\n </Drawer>\n\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={Boolean(transactionGuid)}\n onClose={() => setTransactionGuid('')}\n onPrimaryAction={handleAddRecurringTransaction}\n title={isIncome ? copy.income_details : copy.expense_details}\n >\n {transaction && (\n <AddRecurringTransactionDetails\n firstDay={firstDay}\n frequency={frequency}\n onFirstDayChange={setFirstDay}\n onFrequencyChange={setFrequency}\n onSecondDayChange={setSecondDay}\n secondDay={secondDay}\n transaction={transaction}\n />\n )}\n </Drawer>\n </>\n )\n },\n)\n"],"mappings":";;;;;;;;;;;;;;AAyCA,IAAa,KAA0B,EAAA,CACpC,EACC,UAAA,IAAW,IACX,OAAA,GACA,2BAAA,IAAA,MAAkC,KAAA,MACA;AAClC,QAAM,EAAE,WAAW,EAAA,IAAS,EAAmB,GACzC,EAAE,QAAA,GAAQ,WAAA,GAAW,cAAA,EAAA,IAAiB,EAAoB,GAC1D,EAAE,yBAAA,EAAA,IAA4B,EAA8B,GAC5D,EAAE,MAAA,EAAA,IAAS,EAAa,GAExB,CAAC,GAAyB,CAAA,IAA8B,EAAM,SAAS,EAAK,GAC5E,CAAC,GAAiB,CAAA,IAAsB,EAAM,SAAS,EAAE,GACzD,CAAC,GAAW,CAAA,IAAgB,EAAM,SAAS,EAAU,UAAU,GAC/D,CAAC,GAAU,CAAA,IAAe,EAAM,SAAS,CAAC,GAC1C,CAAC,GAAW,CAAA,IAAgB,EAAM,SAAS,EAAE,GAE7C,IAAc,EAAM,QAAA,MAClB,EAAa,KAAA,CAAM,MAAM,EAAE,SAAS,CAAe,GACzD,CAAC,GAAiB,CAAY,CAChC,GAEM,IAAA,MAAmB;AACvB,IAAA,EAA2B,EAAI,GAG7B,EADE,IACQ;AAAA,MAAE,GAAG;AAAA,MAAQ,QAAQ;AAAA,IAAa,IAElC;AAAA,MAAE,GAAG;AAAA,MAAQ,QAAQ;AAAA,IAAc,CAFA;AAAA,EAIjD,GAEM,IAAgC,YAAY;AAChD,QAAI,CAAC,GAAa;AAChB,MAAA,EAAW;AACX;AAAA,IACF;AACA,IAAA,EAA0B;AAE1B,UAAM,IAAW,EAAmB,GAAW,EAAa,EAAY,IAAI,GAAG,CAAQ,GAEjF,IAAuB;AAAA,MAC3B,cAAc,EAAY;AAAA,MAC1B,QAAQ,EAAY;AAAA,MACpB,YAAY;AAAA,MACZ,eAAe,EAAY;AAAA,MAC3B,aAAa,EAAY,SAAS,EAAY,eAAe,EAAY;AAAA,MACzE,qBAAqB,EAAU,GAAU,EAAE,gBAAgB,OAAO,CAAC;AAAA,MACnE,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,MACjB,4BAA4B,IAAW,EAAc,SAAS,EAAc;AAAA,MAC5E,uBAAuB;AAAA,MACvB,kBAAkB,EAAY;AAAA,MAC9B,WAAW,EAAK;AAAA,IAClB;AAEA,UAAM,EAAwB,GAAsB,CAAW,GAC/D,EAAW;AAAA,EACb,GAEM,IAAA,MAAmB;AACvB,IAAA,EAAmB,EAAE,GACrB,EAA2B,EAAK;AAAA,EAClC;AAEA,SACE,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,IACE,gBAAA,EAAC,GAAD;AAAA,MAAQ,SAAS;AAAA,MAAY,WAAW,gBAAA,EAAC,GAAD,EAAK,MAAM,GAAK,CAAA;AAAA,MAAG,SAAQ;AAAA,MAChE,UAAA;AAAA,IACK,CAAA;AAAA,IAER,gBAAA,EAAC,GAAD;AAAA,MACE,gBAAgB,EAAK;AAAA,MACrB,QAAQ;AAAA,MACR,SAAA,MAAe,EAA2B,EAAK;AAAA,MAC/C,OAAO;AAAA,MAEP,UAAA,gBAAA,EAAC,GAAD;AAAA,QACE,aAAa,IAAW,EAAK,yBAAyB,EAAK;AAAA,QAC3D,UAAA,CAAW,MAAgB;AACzB,UAAA,EAAU;AAAA,YACR,GAAG;AAAA,YACH,QAAA,CAAS,MACH,IACK,IACH,EAAmB,GAAa,CAAW,IAC3C,EAAa,CAAW,IAErB,IACH,EAAoB,GAAa,CAAW,IAC5C,EAAc,CAAW;AAAA,UAGnC,CAAC;AAAA,QACH;AAAA,QACA,YAAA,CAAa,MAAS,EAAmB,CAAI;AAAA,MAC9C,CAAA;AAAA,IACK,CAAA;AAAA,IAER,gBAAA,EAAC,GAAD;AAAA,MACE,gBAAgB,EAAK;AAAA,MACrB,QAAQ,EAAQ;AAAA,MAChB,SAAA,MAAe,EAAmB,EAAE;AAAA,MACpC,iBAAiB;AAAA,MACjB,OAAO,IAAW,EAAK,iBAAiB,EAAK;AAAA,MAE5C,UAAA,KACC,gBAAA,EAAC,GAAD;AAAA,QACY,UAAA;AAAA,QACC,WAAA;AAAA,QACX,kBAAkB;AAAA,QAClB,mBAAmB;AAAA,QACnB,mBAAmB;AAAA,QACR,WAAA;AAAA,QACE,aAAA;AAAA,MACd,CAAA;AAAA,IAEG,CAAA;AAAA,EACR,EAAA,CAAA;AAEN,CACF"}
1
+ {"version":3,"file":"AddRecurringTransaction.es.js","names":[],"sources":["../../../../../src/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { formatISO } from 'date-fns/formatISO'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\n\nimport Button from '@mui/material/Button'\n\nimport { Add } from '@mxenabled/mx-icons'\n\nimport {\n Drawer,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n useTransactionStore,\n useUserStore,\n} from '../../../../common'\nimport {\n type RepeatingTransaction,\n type Transaction,\n Frequency,\n RepeatingType,\n} from '../../../../core'\n\nimport { SelectTransaction } from './SelectTransaction'\nimport { AddRecurringTransactionDetails } from './AddRecurringTransactionDetails'\n\nimport {\n expenseFilter,\n expenseFilterSearch,\n incomeFilter,\n incomeFilterSearch,\n} from '../../../../transactions/utils/Filters'\n\nimport { getNextPaymentDate } from '../../../../core/utils/RecurringTransactionsUtil'\n\ninterface AddRecurringTransactionProps {\n isIncome?: boolean\n label: string\n onAddRecurringTransaction?: () => void\n}\n\nexport const AddRecurringTransaction = observer(\n ({\n isIncome = false,\n label,\n onAddRecurringTransaction = () => null,\n }: AddRecurringTransactionProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { filter, setFilter, transactions } = useTransactionStore()\n const { addRepeatingTransaction } = useRecurringTransactionsStore()\n const { user } = useUserStore()\n\n const [isSelectTransactionOpen, setIsSelectTransactionOpen] = React.useState(false)\n const [transactionGuid, setTransactionGuid] = React.useState('')\n const [frequency, setFrequency] = React.useState(Frequency.EveryMonth)\n const [firstDay, setFirstDay] = React.useState(1)\n const [secondDay, setSecondDay] = React.useState(15)\n\n const transaction = React.useMemo(\n () => transactions.find((t) => t.guid === transactionGuid),\n [transactionGuid, transactions],\n )\n\n const handleOpen = () => {\n setIsSelectTransactionOpen(true)\n\n if (isIncome) {\n setFilter({ ...filter, custom: incomeFilter })\n } else {\n setFilter({ ...filter, custom: expenseFilter })\n }\n }\n\n const handleAddRecurringTransaction = async () => {\n if (!transaction) {\n closeOnAdd()\n return\n }\n onAddRecurringTransaction()\n\n const nextDate = getNextPaymentDate(frequency, fromUnixTime(transaction.date), firstDay)\n\n const repeatingTransaction = {\n account_guid: transaction.account_guid,\n amount: transaction.amount,\n category_guid: transaction.category_guid ?? null,\n created_by: 0, // User\n main_class_guid: transaction.main_class_guid ?? null,\n merchant_guid: transaction.merchant_guid,\n description: transaction.payee || transaction.description || transaction.feed_description,\n predicted_occurs_on: formatISO(nextDate, { representation: 'date' }),\n recurrence_day: firstDay,\n recurrence_type: frequency,\n repeating_transaction_type: isIncome ? RepeatingType.Income : RepeatingType.Bill,\n second_recurrence_day: secondDay,\n transaction_type: transaction.transaction_type,\n user_guid: user.guid,\n } as RepeatingTransaction\n\n await addRepeatingTransaction(repeatingTransaction, transaction)\n closeOnAdd()\n }\n\n const closeOnAdd = () => {\n setTransactionGuid('')\n setIsSelectTransactionOpen(false)\n }\n\n return (\n <>\n <Button onClick={handleOpen} startIcon={<Add size={24} />} variant=\"contained\">\n {label}\n </Button>\n\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={isSelectTransactionOpen}\n onClose={() => setIsSelectTransactionOpen(false)}\n title={label}\n >\n <SelectTransaction\n description={isIncome ? copy.add_income_description : copy.add_expense_description}\n onSearch={(searchValue) => {\n setFilter({\n ...filter,\n custom: (transaction: Transaction) => {\n if (isIncome) {\n return searchValue\n ? incomeFilterSearch(transaction, searchValue)\n : incomeFilter(transaction)\n } else {\n return searchValue\n ? expenseFilterSearch(transaction, searchValue)\n : expenseFilter(transaction)\n }\n },\n })\n }}\n onSelected={(guid) => setTransactionGuid(guid)}\n />\n </Drawer>\n\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={Boolean(transactionGuid)}\n onClose={() => setTransactionGuid('')}\n onPrimaryAction={handleAddRecurringTransaction}\n title={isIncome ? copy.income_details : copy.expense_details}\n >\n {transaction && (\n <AddRecurringTransactionDetails\n firstDay={firstDay}\n frequency={frequency}\n onFirstDayChange={setFirstDay}\n onFrequencyChange={setFrequency}\n onSecondDayChange={setSecondDay}\n secondDay={secondDay}\n transaction={transaction}\n />\n )}\n </Drawer>\n </>\n )\n },\n)\n"],"mappings":"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"}
@@ -1,44 +1,46 @@
1
1
  import { useGlobalCopyStore as l } from "../../../../common/context/hooks.es.js";
2
- import m from "../../../../common/components/SearchBox.es.js";
3
- import { useTransactionsUiStore as h } from "../../../../transactions/context/hooks.es.js";
4
- import p from "../../../../transactions/components/shared/TransactionList.es.js";
5
- import { observer as f } from "mobx-react-lite";
6
- import _ from "@mui/material/Stack";
7
- import { P as u } from "@mxenabled/mxui";
8
- import { jsx as a, jsxs as d } from "react/jsx-runtime";
9
- var j = f(({ bgcolor: e = "background.default", description: o, onSearch: c, onSelected: s }) => {
10
- const { recurring: r } = l(), { searchValue: i, setSearchValue: n } = h();
11
- return /* @__PURE__ */ d(_, {
2
+ import { isEligibleRepeatingTransaction as m } from "../../../../core/utils/RecurringTransactionsUtil.es.js";
3
+ import p from "../../../../common/components/SearchBox.es.js";
4
+ import { useTransactionsUiStore as f } from "../../../../transactions/context/hooks.es.js";
5
+ import h from "../../../../transactions/components/shared/TransactionList.es.js";
6
+ import { observer as _ } from "mobx-react-lite";
7
+ import u from "@mui/material/Stack";
8
+ import { P as d } from "@mxenabled/mxui";
9
+ import { jsx as a, jsxs as g } from "react/jsx-runtime";
10
+ var V = _(({ bgcolor: e = "background.default", description: o, onSearch: i, onSelected: c }) => {
11
+ const { recurring: r } = l(), { searchValue: s, setSearchValue: n } = f();
12
+ return /* @__PURE__ */ g(u, {
12
13
  sx: {
13
14
  bgcolor: e,
14
15
  gap: 16,
15
16
  pt: 8
16
17
  },
17
18
  children: [
18
- o && /* @__PURE__ */ a(u, {
19
+ o && /* @__PURE__ */ a(d, {
19
20
  sx: { mx: 24 },
20
21
  children: o
21
22
  }),
22
- /* @__PURE__ */ a(m, {
23
+ /* @__PURE__ */ a(p, {
23
24
  ariaLabel: r.select_transaction_search_aria,
24
25
  cancelAriaLabel: r.select_transaction_search_cancel_aria,
25
26
  onChange: (t) => {
26
- n(t), c(t);
27
+ n(t), i(t);
27
28
  },
28
29
  placeholder: r.select_transaction_search_placeholder,
29
- searchValue: i
30
+ searchValue: s
30
31
  }),
31
- /* @__PURE__ */ a(p, {
32
+ /* @__PURE__ */ a(h, {
32
33
  bgcolor: e,
34
+ filter: m,
33
35
  height: "auto",
34
- onClick: s,
36
+ onClick: c,
35
37
  showLoader: !1
36
38
  })
37
39
  ]
38
40
  });
39
41
  });
40
42
  export {
41
- j as SelectTransaction
43
+ V as SelectTransaction
42
44
  };
43
45
 
44
46
  //# sourceMappingURL=SelectTransaction.es.js.map