@mx-cartographer/experiences 9.1.4-alpha.mm0 → 9.1.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.
- package/CHANGELOG.md +3 -2
- package/dist/{AccountDetailsDrawer-utXjRHSW.mjs → AccountDetailsDrawer-Cq4kiiKD.mjs} +4 -4
- package/dist/{AccountDetailsDrawer-utXjRHSW.mjs.map → AccountDetailsDrawer-Cq4kiiKD.mjs.map} +1 -1
- package/dist/{AccountDetailsHeader-C84CSN2K.mjs → AccountDetailsHeader-BliEZhz7.mjs} +2 -2
- package/dist/{AccountDetailsHeader-C84CSN2K.mjs.map → AccountDetailsHeader-BliEZhz7.mjs.map} +1 -1
- package/dist/DateUtil-CzBmbjmA.mjs +75 -0
- package/dist/{DateUtil-Bl7d7C1W.mjs.map → DateUtil-CzBmbjmA.mjs.map} +1 -1
- package/dist/{EmbeddedCard-CQEnrozC.mjs → EmbeddedCard-DCOQnTz-.mjs} +37 -38
- package/dist/EmbeddedCard-DCOQnTz-.mjs.map +1 -0
- package/dist/{ExportCsvAction-B_8I-Le6.mjs → ExportCsvAction-C-IisDcv.mjs} +2 -2
- package/dist/{ExportCsvAction-B_8I-Le6.mjs.map → ExportCsvAction-C-IisDcv.mjs.map} +1 -1
- package/dist/{ManageIncome-Czs7daKV.mjs → ManageIncome-B_8i71mE.mjs} +7 -7
- package/dist/{ManageIncome-Czs7daKV.mjs.map → ManageIncome-B_8i71mE.mjs.map} +1 -1
- package/dist/{RecurringSettings-CcS5b1xA.mjs → RecurringSettings-hs0YUp83.mjs} +3 -3
- package/dist/{RecurringSettings-CcS5b1xA.mjs.map → RecurringSettings-hs0YUp83.mjs.map} +1 -1
- package/dist/{RecurringTransactionsUtil-CfWviBh1.mjs → RecurringTransactionsUtil-CHWmqvW5.mjs} +2 -2
- package/dist/{RecurringTransactionsUtil-CfWviBh1.mjs.map → RecurringTransactionsUtil-CHWmqvW5.mjs.map} +1 -1
- package/dist/{TransactionDetails-Kmj8GUlD.mjs → TransactionDetails-DT-MQqOB.mjs} +133 -135
- package/dist/TransactionDetails-DT-MQqOB.mjs.map +1 -0
- package/dist/{UserStore-DSnLgiGh.mjs → UserStore-_QQpkbw9.mjs} +7 -5
- package/dist/UserStore-_QQpkbw9.mjs.map +1 -0
- package/dist/accounts/index.es.js +4 -4
- package/dist/budgets/index.es.js +3 -3
- package/dist/cashflow/index.es.js +6 -6
- package/dist/common/index.es.js +1 -1
- package/dist/core/index.es.js +2 -2
- package/dist/core/utils/DateUtil.d.ts +0 -1
- package/dist/debts/index.es.js +1 -1
- package/dist/finstrong/index.es.js +6 -6
- package/dist/insights/index.es.js +2 -2
- package/dist/networth/index.es.js +1 -1
- package/dist/notifications/index.es.js +1 -1
- package/dist/recurringtransactions/index.es.js +5 -5
- package/dist/spending/index.es.js +28 -28
- package/dist/spending/index.es.js.map +1 -1
- package/dist/transactions/index.es.js +25 -25
- package/dist/transactions/index.es.js.map +1 -1
- package/dist/trends/index.es.js +3 -3
- package/package.json +1 -1
- package/dist/DateUtil-Bl7d7C1W.mjs +0 -76
- package/dist/EmbeddedCard-CQEnrozC.mjs.map +0 -1
- package/dist/TransactionDetails-Kmj8GUlD.mjs.map +0 -1
- package/dist/UserStore-DSnLgiGh.mjs.map +0 -1
|
@@ -10,10 +10,10 @@ import D from "@mui/material/List";
|
|
|
10
10
|
import O from "@mui/material/ListSubheader";
|
|
11
11
|
import Z from "@mui/system/Stack";
|
|
12
12
|
import { f as U } from "../NumberFormatting--XMeeBfr.mjs";
|
|
13
|
-
import { u as X, g as e1 } from "../AccountDetailsHeader-
|
|
14
|
-
import { A as K1, a as z1, b as $1 } from "../AccountDetailsHeader-
|
|
15
|
-
import { A as E, a as t1 } from "../AccountDetailsDrawer-
|
|
16
|
-
import { b as q1, u as J1 } from "../AccountDetailsDrawer-
|
|
13
|
+
import { u as X, g as e1 } from "../AccountDetailsHeader-BliEZhz7.mjs";
|
|
14
|
+
import { A as K1, a as z1, b as $1 } from "../AccountDetailsHeader-BliEZhz7.mjs";
|
|
15
|
+
import { A as E, a as t1 } from "../AccountDetailsDrawer-Cq4kiiKD.mjs";
|
|
16
|
+
import { b as q1, u as J1 } from "../AccountDetailsDrawer-Cq4kiiKD.mjs";
|
|
17
17
|
import { i as z, u as R, a as x, c as N, f as $ } from "../hooks-97sNJ_lf.mjs";
|
|
18
18
|
import { A } from "../Analytics-D-jdcL72.mjs";
|
|
19
19
|
import { C as l1 } from "../ConnectionsDrawer-CZU9ku-k.mjs";
|
package/dist/budgets/index.es.js
CHANGED
|
@@ -35,8 +35,8 @@ import { A as P } from "../Analytics-D-jdcL72.mjs";
|
|
|
35
35
|
import Ee from "@mui/material/Tab";
|
|
36
36
|
import Qe from "@mui/material/Tabs";
|
|
37
37
|
import { e as et, g as we } from "../TransactionUtils-BphBJBbU.mjs";
|
|
38
|
-
import { T as ve } from "../EmbeddedCard-
|
|
39
|
-
import { T as tt, c as ot } from "../TransactionDetails-
|
|
38
|
+
import { T as ve } from "../EmbeddedCard-DCOQnTz-.mjs";
|
|
39
|
+
import { T as tt, c as ot } from "../TransactionDetails-DT-MQqOB.mjs";
|
|
40
40
|
import Te from "@mui/material/Card";
|
|
41
41
|
import De from "@mui/material/CardContent";
|
|
42
42
|
import { S as Se } from "../StatusBar-CPfSXe80.mjs";
|
|
@@ -45,7 +45,7 @@ import { u as nt, C as at } from "../CategorySelectorDrawer-NJsFsKP1.mjs";
|
|
|
45
45
|
import Pe from "@mui/material/CardHeader";
|
|
46
46
|
import { subDays as rt } from "date-fns/subDays";
|
|
47
47
|
import st from "@mui/material/IconButton";
|
|
48
|
-
import { M as it } from "../ManageIncome-
|
|
48
|
+
import { M as it } from "../ManageIncome-B_8i71mE.mjs";
|
|
49
49
|
import { u as je } from "../useWidgetLoadTimer-B0tB-yzL.mjs";
|
|
50
50
|
import { W as ct } from "../WidgetContainer-CjdCY4sj.mjs";
|
|
51
51
|
import { g as lt, a as dt } from "../BudgetUtil-Bg2AQJpQ.mjs";
|
|
@@ -15,13 +15,13 @@ import { I as ue } from "../InformationTooltip-4su8bn1e.mjs";
|
|
|
15
15
|
import { u as Ne } from "../useWidgetLoadTimer-B0tB-yzL.mjs";
|
|
16
16
|
import { M as Qe } from "../MiniWidgetContainer-Bmv_WeUd.mjs";
|
|
17
17
|
import { E as Ze } from "../EmptyState-CJUDc3kD.mjs";
|
|
18
|
-
import { R as et } from "../RecurringSettings-
|
|
18
|
+
import { R as et } from "../RecurringSettings-hs0YUp83.mjs";
|
|
19
19
|
import tt from "@mui/material/Tabs";
|
|
20
20
|
import _e from "@mui/material/Tab";
|
|
21
21
|
import { getUnixTime as ce } from "date-fns/getUnixTime";
|
|
22
22
|
import K from "@mui/material/List";
|
|
23
23
|
import X from "@mui/material/ListItem";
|
|
24
|
-
import { A as nt } from "../AccountDetailsDrawer-
|
|
24
|
+
import { A as nt } from "../AccountDetailsDrawer-Cq4kiiKD.mjs";
|
|
25
25
|
import { f as $, D as P } from "../DateFormats-HudZ3Bjs.mjs";
|
|
26
26
|
import ot from "@mui/material/ListSubheader";
|
|
27
27
|
import { f as q } from "../NumberFormatting--XMeeBfr.mjs";
|
|
@@ -32,7 +32,7 @@ import { g as He } from "../AccountUtils-Cbh8r9cP.mjs";
|
|
|
32
32
|
import { DataGridPro as it } from "@mui/x-data-grid-pro";
|
|
33
33
|
import { T as Ce } from "../TabContentContainer-B0eYJP5p.mjs";
|
|
34
34
|
import F from "@mui/material/Button";
|
|
35
|
-
import { M as at, S as rt, i as ct, b as we, c as st } from "../ManageIncome-
|
|
35
|
+
import { M as at, S as rt, i as ct, b as we, c as st } from "../ManageIncome-B_8i71mE.mjs";
|
|
36
36
|
import { D as We } from "../Drawer-DsnW2o0v.mjs";
|
|
37
37
|
import { subDays as Me } from "date-fns/subDays";
|
|
38
38
|
import { startOfToday as se } from "date-fns/startOfToday";
|
|
@@ -43,9 +43,9 @@ import { A as Se } from "../Analytics-D-jdcL72.mjs";
|
|
|
43
43
|
import { formatISO as mt } from "date-fns/formatISO";
|
|
44
44
|
import { fromUnixTime as De } from "date-fns/fromUnixTime";
|
|
45
45
|
import { startOfMonth as pt } from "date-fns/startOfMonth";
|
|
46
|
-
import { S as ut, a as ht } from "../EmbeddedCard-
|
|
47
|
-
import { F as ft, R as Ie, d as ve } from "../RecurringTransactionsUtil-
|
|
48
|
-
import { k as gt } from "../DateUtil-
|
|
46
|
+
import { S as ut, a as ht } from "../EmbeddedCard-DCOQnTz-.mjs";
|
|
47
|
+
import { F as ft, R as Ie, d as ve } from "../RecurringTransactionsUtil-CHWmqvW5.mjs";
|
|
48
|
+
import { k as gt } from "../DateUtil-CzBmbjmA.mjs";
|
|
49
49
|
const z = () => {
|
|
50
50
|
if (!w.useContext(Ve))
|
|
51
51
|
throw new Error("useCashflowUiStore() must be used within the GlobalDataContext");
|
package/dist/common/index.es.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { l as Y } from "../UserStore-
|
|
1
|
+
import { l as Y } from "../UserStore-_QQpkbw9.mjs";
|
|
2
2
|
import { b as $, a as H } from "../Localization-DnoVyBNK.mjs";
|
|
3
3
|
import { f as j, b as V, a as K, c as Z, g as J, d as X } from "../NumberFormatting--XMeeBfr.mjs";
|
|
4
4
|
import { C as rr, a as er, b as or } from "../CurrencyDialog-DumQCTPO.mjs";
|
package/dist/core/index.es.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { A as g, a as m, b as C, c as N, d as h, B as f, e as E, f as D, g as b, C as I, h as M, i as R, j as B, D as L, F as G, k as _, G as H, l as P, m as U, n as x, o as O, H as F, p as k, q as v, r as w, M as W, s as Y, N as $, t as q, u as K, R as j, v as z, S as J, w as Q, T as X, x as Z, y as V, U as tt, z as at, W as st } from "../UserStore-
|
|
1
|
+
import { A as g, a as m, b as C, c as N, d as h, B as f, e as E, f as D, g as b, C as I, h as M, i as R, j as B, D as L, F as G, k as _, G as H, l as P, m as U, n as x, o as O, H as F, p as k, q as v, r as w, M as W, s as Y, N as $, t as q, u as K, R as j, v as z, S as J, w as Q, T as X, x as Z, y as V, U as tt, z as at, W as st } from "../UserStore-_QQpkbw9.mjs";
|
|
2
2
|
import { b as ot, a as nt, d as rt, c as it, A as ct, C as pt, e as At, E as St, M as ut, N as lt, P as Tt, f as yt, g as dt, S as gt } from "../Account-DR7Plrqy.mjs";
|
|
3
3
|
import { A as Ct, B as Nt, I as ht, N as ft } from "../Notification-DTNYSd8P.mjs";
|
|
4
4
|
import { F as n } from "../GlobalCopyApi-wcnDUzMV.mjs";
|
|
5
5
|
import { A as Dt, B as bt, G as It } from "../GlobalCopyApi-wcnDUzMV.mjs";
|
|
6
|
-
import { F as Rt, a as Bt, b as Lt, R as Gt } from "../RecurringTransactionsUtil-
|
|
6
|
+
import { F as Rt, a as Bt, b as Lt, R as Gt } from "../RecurringTransactionsUtil-CHWmqvW5.mjs";
|
|
7
7
|
import { G as Ht, M as Pt, T as Ut } from "../GoalsUtil-C9EnLWvC.mjs";
|
|
8
8
|
import { L as Ot, V as Ft, b as kt, g as vt } from "../Localization-DnoVyBNK.mjs";
|
|
9
9
|
import { A as e } from "../ApiEndpoints-DXwIYNUV.mjs";
|
|
@@ -9,5 +9,4 @@ export declare const getNextBiQuarterlyDate: (date: Date) => Date;
|
|
|
9
9
|
export declare const getNextYearlyDate: (date: Date) => Date;
|
|
10
10
|
export declare const fromUnixUTC: (utcTime: number) => Date;
|
|
11
11
|
export declare const fromUnixToDayOfWeekAndDate: (date: number) => string;
|
|
12
|
-
export declare const fromUnixUTCToDayOfWeekAndDate: (date: number) => string;
|
|
13
12
|
export declare const fromTimestampToMonthYear: (timestamp?: number) => string;
|
package/dist/debts/index.es.js
CHANGED
|
@@ -12,7 +12,7 @@ import { G as Ge, q as ee, u as w, k as V, f as k, c as te, i as He, a as ze } f
|
|
|
12
12
|
import { u as ae } from "../useScreenSize-mWpmnh5w.mjs";
|
|
13
13
|
import { b as T } from "../Localization-DnoVyBNK.mjs";
|
|
14
14
|
import { D as ie } from "../Drawer-DsnW2o0v.mjs";
|
|
15
|
-
import { A as je, u as Ve } from "../AccountDetailsHeader-
|
|
15
|
+
import { A as je, u as Ve } from "../AccountDetailsHeader-BliEZhz7.mjs";
|
|
16
16
|
import Ye from "@mui/material/Card";
|
|
17
17
|
import Ke from "@mui/material/CardContent";
|
|
18
18
|
import Ue from "@mui/material/CardHeader";
|
|
@@ -43,13 +43,13 @@ import { E as Be } from "../EmptyState-CJUDc3kD.mjs";
|
|
|
43
43
|
import $n from "@mui/material/Chip";
|
|
44
44
|
import { D as ie } from "../Drawer-DsnW2o0v.mjs";
|
|
45
45
|
import { g as kt } from "../useAccountDisplayName-BsiXA0qf.mjs";
|
|
46
|
-
import { a as Mt } from "../AccountDetailsHeader-
|
|
46
|
+
import { a as Mt } from "../AccountDetailsHeader-BliEZhz7.mjs";
|
|
47
47
|
import Nn from "@mui/material/ListSubheader";
|
|
48
48
|
import { S as dt } from "../Select-CSpkK5cR.mjs";
|
|
49
49
|
import { c as je } from "../Account-DR7Plrqy.mjs";
|
|
50
50
|
import { S as zn } from "../StatusBar-CPfSXe80.mjs";
|
|
51
|
-
import { k as Dt } from "../DateUtil-
|
|
52
|
-
import { T as Hn, s as Kn, h as Vn, S as jn, a as Yn } from "../EmbeddedCard-
|
|
51
|
+
import { k as Dt } from "../DateUtil-CzBmbjmA.mjs";
|
|
52
|
+
import { T as Hn, s as Kn, h as Vn, S as jn, a as Yn } from "../EmbeddedCard-DCOQnTz-.mjs";
|
|
53
53
|
import { T as ge } from "../TabContentContainer-B0eYJP5p.mjs";
|
|
54
54
|
import Xn from "@mui/material/useMediaQuery";
|
|
55
55
|
import { BarPlot as Un } from "@mui/x-charts/BarChart";
|
|
@@ -62,11 +62,11 @@ import { g as Jn, S as eo, b as to } from "../SpendingLegend-CxvNOg3c.mjs";
|
|
|
62
62
|
import { formatISO as no } from "date-fns/formatISO";
|
|
63
63
|
import { fromUnixTime as oo } from "date-fns/fromUnixTime";
|
|
64
64
|
import { subDays as ro } from "date-fns/subDays";
|
|
65
|
-
import { c as ao, b as pt, S as io, i as so } from "../ManageIncome-
|
|
66
|
-
import { F as Tt, d as co, R as Ot } from "../RecurringTransactionsUtil-
|
|
65
|
+
import { c as ao, b as pt, S as io, i as so } from "../ManageIncome-B_8i71mE.mjs";
|
|
66
|
+
import { F as Tt, d as co, R as Ot } from "../RecurringTransactionsUtil-CHWmqvW5.mjs";
|
|
67
67
|
import { LocalizationProvider as lo, DatePicker as po, StaticDatePicker as uo } from "@mui/x-date-pickers";
|
|
68
68
|
import { AdapterDateFns as Rt } from "@mui/x-date-pickers/AdapterDateFnsV3";
|
|
69
|
-
import { R as _o } from "../RecurringSettings-
|
|
69
|
+
import { R as _o } from "../RecurringSettings-hs0YUp83.mjs";
|
|
70
70
|
import { LocalizationProvider as mo } from "@mui/x-date-pickers/LocalizationProvider";
|
|
71
71
|
import ho from "@mui/lab/Timeline";
|
|
72
72
|
import go, { timelineItemClasses as yo } from "@mui/lab/TimelineItem";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as t, jsxs as c, Fragment as N } from "react/jsx-runtime";
|
|
2
2
|
import { BottomSheetTransition as r2, Text as E, MerchantLogo as Q, InstitutionLogo as F, P as J, H3 as h1, H2 as c1, Icon as k1, CategoryIcon as g1, createMXTheme as i2 } from "@mxenabled/mxui";
|
|
3
3
|
import C from "@mui/material/Stack";
|
|
4
|
-
import { e as K, p as n2, B as z1, b as l2 } from "../EmbeddedCard-
|
|
5
|
-
import { f as d5, C as C5, E as m5 } from "../EmbeddedCard-
|
|
4
|
+
import { e as K, p as n2, B as z1, b as l2 } from "../EmbeddedCard-DCOQnTz-.mjs";
|
|
5
|
+
import { f as d5, C as C5, E as m5 } from "../EmbeddedCard-DCOQnTz-.mjs";
|
|
6
6
|
import { CardHeader as a2, Stack as v, Button as A1, Card as j1, Box as L1, ToggleButtonGroup as o2, TextField as s2, Grow as c2, Alert as h2, useTheme as d2, useMediaQuery as H1, AppBar as C2, Toolbar as m2, IconButton as u1, List as p2, ListItem as E2, Divider as u2 } from "@mui/material";
|
|
7
7
|
import { useTheme as f2, styled as x2, Stack as f1 } from "@mui/system";
|
|
8
8
|
import { Link as y2, Icon as S, CheckCircle as W1, ChevronRight as M2 } from "@mxenabled/mx-icons";
|
|
@@ -25,7 +25,7 @@ import A from "@mui/material/ListSubheader";
|
|
|
25
25
|
import O from "@mui/material/ListItem";
|
|
26
26
|
import te from "@mui/material/ListItemButton";
|
|
27
27
|
import b from "@mui/material/ListItemText";
|
|
28
|
-
import { l as ne } from "../DateUtil-
|
|
28
|
+
import { l as ne } from "../DateUtil-CzBmbjmA.mjs";
|
|
29
29
|
import { C as f } from "../CurrencyText-CCbE6MmF.mjs";
|
|
30
30
|
import { Stack as fe } from "@mui/material";
|
|
31
31
|
import xe from "@mui/material/Collapse";
|
|
@@ -8,7 +8,7 @@ import B from "@mui/material/Divider";
|
|
|
8
8
|
import I from "@mui/material/List";
|
|
9
9
|
import { g as R, s as O } from "../NotificationUtils-BRGFTePr.mjs";
|
|
10
10
|
import { Text as m, InstitutionLogo as G, CategoryIcon as E } from "@mxenabled/mxui";
|
|
11
|
-
import { k as j } from "../DateUtil-
|
|
11
|
+
import { k as j } from "../DateUtil-CzBmbjmA.mjs";
|
|
12
12
|
import { useTheme as z, Card as U } from "@mui/material";
|
|
13
13
|
import { c as F, o as P, u as C, y as k, a as v, i as V } from "../hooks-97sNJ_lf.mjs";
|
|
14
14
|
import { Icon as W, Settings as $ } from "@mxenabled/mx-icons";
|
|
@@ -8,8 +8,8 @@ import { startOfToday as Q } from "date-fns/startOfToday";
|
|
|
8
8
|
import { subDays as ee } from "date-fns/subDays";
|
|
9
9
|
import Be from "@mui/material/Alert";
|
|
10
10
|
import Fe from "@mui/material/Snackbar";
|
|
11
|
-
import { R as _e } from "../RecurringSettings-
|
|
12
|
-
import { M as Jn } from "../RecurringSettings-
|
|
11
|
+
import { R as _e } from "../RecurringSettings-hs0YUp83.mjs";
|
|
12
|
+
import { M as Jn } from "../RecurringSettings-hs0YUp83.mjs";
|
|
13
13
|
import { addMonths as Ue } from "date-fns/addMonths";
|
|
14
14
|
import { subMonths as Ye } from "date-fns/subMonths";
|
|
15
15
|
import { isBefore as je } from "date-fns/isBefore";
|
|
@@ -36,7 +36,7 @@ import ut from "@mui/material/Badge";
|
|
|
36
36
|
import { PickersDay as mt } from "@mui/x-date-pickers/PickersDay";
|
|
37
37
|
import { I as F } from "../IconBacking-DgT8DCeh.mjs";
|
|
38
38
|
import { u as b, a as U, h as _, f as Y, D as Ie, g as re } from "../hooks-97sNJ_lf.mjs";
|
|
39
|
-
import { b as E, a as D, g as ye, e as pt, R as gt } from "../RecurringTransactionsUtil-
|
|
39
|
+
import { b as E, a as D, g as ye, e as pt, R as gt } from "../RecurringTransactionsUtil-CHWmqvW5.mjs";
|
|
40
40
|
import { f as I, D as M } from "../DateFormats-HudZ3Bjs.mjs";
|
|
41
41
|
import { T as W } from "../Sizes-DISGrlUg.mjs";
|
|
42
42
|
import { A as v } from "../Analytics-D-jdcL72.mjs";
|
|
@@ -52,8 +52,8 @@ import { f as L } from "../NumberFormatting--XMeeBfr.mjs";
|
|
|
52
52
|
import N from "@mui/material/Box";
|
|
53
53
|
import { u as ve } from "../useScreenSize-mWpmnh5w.mjs";
|
|
54
54
|
import { S as Le } from "../StatusBar-CPfSXe80.mjs";
|
|
55
|
-
import { d as Ct } from "../ManageIncome-
|
|
56
|
-
import { c as er, M as tr, S as nr } from "../ManageIncome-
|
|
55
|
+
import { d as Ct } from "../ManageIncome-B_8i71mE.mjs";
|
|
56
|
+
import { c as er, M as tr, S as nr } from "../ManageIncome-B_8i71mE.mjs";
|
|
57
57
|
import { D as ie } from "../Drawer-DsnW2o0v.mjs";
|
|
58
58
|
import { S as Ae } from "../SkeletonLoader-BaNboJjD.mjs";
|
|
59
59
|
import { u as oe } from "../useWidgetLoadTimer-B0tB-yzL.mjs";
|
|
@@ -19,8 +19,8 @@ import { startOfToday as J } from "date-fns/startOfToday";
|
|
|
19
19
|
import St from "@mui/material/Button";
|
|
20
20
|
import { useTheme as Tt } from "@mui/material";
|
|
21
21
|
import { e as Mt } from "../TransactionUtils-BphBJBbU.mjs";
|
|
22
|
-
import { T as Dt } from "../EmbeddedCard-
|
|
23
|
-
import { T as xt } from "../TransactionDetails-
|
|
22
|
+
import { T as Dt } from "../EmbeddedCard-DCOQnTz-.mjs";
|
|
23
|
+
import { T as xt } from "../TransactionDetails-DT-MQqOB.mjs";
|
|
24
24
|
import vt from "@mui/material/Collapse";
|
|
25
25
|
import wt from "@mui/material/Divider";
|
|
26
26
|
import Q from "@mui/material/List";
|
|
@@ -46,16 +46,16 @@ const G = ({ amount: n, label: d, variant: o = "full" }) => /* @__PURE__ */ p(y,
|
|
|
46
46
|
n.palette.chartMono.chartMono6
|
|
47
47
|
],
|
|
48
48
|
[n]
|
|
49
|
-
), [e, r] = c.useState(""), [s,
|
|
49
|
+
), [e, r] = c.useState(""), [s, f] = c.useState(0), u = c.useMemo(
|
|
50
50
|
() => st(a, d, n, i),
|
|
51
51
|
[a, i]
|
|
52
52
|
), h = c.useMemo(
|
|
53
53
|
() => lt(a, i, g),
|
|
54
54
|
[a, i, g]
|
|
55
|
-
), M = (
|
|
56
|
-
|
|
57
|
-
},
|
|
58
|
-
r(e ===
|
|
55
|
+
), M = (b, D) => {
|
|
56
|
+
f(D), r("");
|
|
57
|
+
}, _ = (b) => {
|
|
58
|
+
r(e === b ? "" : b);
|
|
59
59
|
};
|
|
60
60
|
return /* @__PURE__ */ p(L, { width: "100%", children: [
|
|
61
61
|
/* @__PURE__ */ p(
|
|
@@ -114,12 +114,12 @@ const G = ({ amount: n, label: d, variant: o = "full" }) => /* @__PURE__ */ p(y,
|
|
|
114
114
|
B,
|
|
115
115
|
{
|
|
116
116
|
data: u,
|
|
117
|
-
onSelected:
|
|
117
|
+
onSelected: _,
|
|
118
118
|
selectedId: e,
|
|
119
119
|
totalLabel: o.total_spending
|
|
120
120
|
}
|
|
121
121
|
),
|
|
122
|
-
/* @__PURE__ */ t(q, { data: u, onSelected:
|
|
122
|
+
/* @__PURE__ */ t(q, { data: u, onSelected: _, selectedId: e })
|
|
123
123
|
] })
|
|
124
124
|
}
|
|
125
125
|
),
|
|
@@ -136,30 +136,30 @@ const G = ({ amount: n, label: d, variant: o = "full" }) => /* @__PURE__ */ p(y,
|
|
|
136
136
|
{
|
|
137
137
|
data: h,
|
|
138
138
|
isIncome: !0,
|
|
139
|
-
onSelected:
|
|
139
|
+
onSelected: _,
|
|
140
140
|
selectedId: e,
|
|
141
141
|
totalLabel: o.total_income
|
|
142
142
|
}
|
|
143
143
|
),
|
|
144
|
-
/* @__PURE__ */ t(q, { data: h, onSelected:
|
|
144
|
+
/* @__PURE__ */ t(q, { data: h, onSelected: _, selectedId: e })
|
|
145
145
|
] })
|
|
146
146
|
}
|
|
147
147
|
)
|
|
148
148
|
] });
|
|
149
149
|
}, Et = I(At), Wt = ({ onPrimaryCtaClick: n, sx: d = {} }) => {
|
|
150
|
-
const { isAccountDataLoaded: o, loadAccountData: a } = ct(), { dateRangeTotalsLoaded: i, categoriesLoaded: g, loadCategories: e, loadDateRangeCategoryTotals: r } = R(), { spending: s } = A(), { isInitialized:
|
|
150
|
+
const { isAccountDataLoaded: o, loadAccountData: a } = ct(), { dateRangeTotalsLoaded: i, categoriesLoaded: g, loadCategories: e, loadDateRangeCategoryTotals: r } = R(), { spending: s } = A(), { isInitialized: f, selectedAccounts: u } = P();
|
|
151
151
|
return gt({
|
|
152
152
|
widgetName: "SpendingMiniWidget",
|
|
153
153
|
isLoaded: i
|
|
154
154
|
}), c.useEffect(() => {
|
|
155
155
|
o || a().finally(), g || e().finally();
|
|
156
156
|
}, []), c.useEffect(() => {
|
|
157
|
-
r(
|
|
157
|
+
!f || !o || r(
|
|
158
158
|
u,
|
|
159
159
|
at(/* @__PURE__ */ new Date()),
|
|
160
160
|
it(/* @__PURE__ */ new Date())
|
|
161
161
|
).finally();
|
|
162
|
-
}, [u]),
|
|
162
|
+
}, [f, o, u]), !f || !o || !i ? /* @__PURE__ */ t(pt, {}) : /* @__PURE__ */ t(
|
|
163
163
|
Ct,
|
|
164
164
|
{
|
|
165
165
|
className: "mx-exp-spending-miniwidget",
|
|
@@ -170,7 +170,7 @@ const G = ({ amount: n, label: d, variant: o = "full" }) => /* @__PURE__ */ p(y,
|
|
|
170
170
|
title: s.mini_title,
|
|
171
171
|
children: /* @__PURE__ */ t(Et, {})
|
|
172
172
|
}
|
|
173
|
-
)
|
|
173
|
+
);
|
|
174
174
|
}, Ce = I(Wt), Rt = ({
|
|
175
175
|
data: n,
|
|
176
176
|
onSelected: d,
|
|
@@ -322,12 +322,12 @@ const G = ({ amount: n, label: d, variant: o = "full" }) => /* @__PURE__ */ p(y,
|
|
|
322
322
|
goals: g,
|
|
323
323
|
spending: e,
|
|
324
324
|
transactions: r
|
|
325
|
-
} = A(), { displayedDateRange: s, selectedAccountGuids:
|
|
325
|
+
} = A(), { displayedDateRange: s, selectedAccountGuids: f } = P(), {
|
|
326
326
|
setFilter: u,
|
|
327
327
|
sortedTransactions: h,
|
|
328
328
|
sortedTransactionsWithSplits: M,
|
|
329
|
-
tags:
|
|
330
|
-
} = dt(),
|
|
329
|
+
tags: _
|
|
330
|
+
} = dt(), b = o?.master?.deep_link_params?.account_guids, D = o?.master?.deep_link_params?.view, [x, N] = c.useState(""), [v, C] = c.useState(D === "income" ? 1 : 0), [E, W] = c.useState(""), [O, j] = c.useState(!1), F = c.useMemo(
|
|
331
331
|
() => st(a, g, n, i),
|
|
332
332
|
[a, i]
|
|
333
333
|
), K = c.useMemo(
|
|
@@ -343,7 +343,7 @@ const G = ({ amount: n, label: d, variant: o = "full" }) => /* @__PURE__ */ p(y,
|
|
|
343
343
|
}, mt = (l) => {
|
|
344
344
|
u({
|
|
345
345
|
...{
|
|
346
|
-
accounts:
|
|
346
|
+
accounts: b || f,
|
|
347
347
|
dateRange: s
|
|
348
348
|
},
|
|
349
349
|
custom: (m) => x === "other" ? m.top_level_category_guid === l : m.category_guid === l,
|
|
@@ -351,7 +351,7 @@ const G = ({ amount: n, label: d, variant: o = "full" }) => /* @__PURE__ */ p(y,
|
|
|
351
351
|
}), j(!0);
|
|
352
352
|
}, Y = (l) => {
|
|
353
353
|
const S = {
|
|
354
|
-
accounts:
|
|
354
|
+
accounts: b || f,
|
|
355
355
|
dateRange: s
|
|
356
356
|
};
|
|
357
357
|
if (v === 0)
|
|
@@ -374,7 +374,7 @@ const G = ({ amount: n, label: d, variant: o = "full" }) => /* @__PURE__ */ p(y,
|
|
|
374
374
|
});
|
|
375
375
|
j(!0);
|
|
376
376
|
}, ht = () => {
|
|
377
|
-
Mt(M,
|
|
377
|
+
Mt(M, _);
|
|
378
378
|
};
|
|
379
379
|
return /* @__PURE__ */ p(L, { children: [
|
|
380
380
|
/* @__PURE__ */ p(rt, { onChange: ut, value: v, variant: "fullWidth", children: [
|
|
@@ -456,24 +456,24 @@ const G = ({ amount: n, label: d, variant: o = "full" }) => /* @__PURE__ */ p(y,
|
|
|
456
456
|
)
|
|
457
457
|
] });
|
|
458
458
|
}, Bt = I($t), Gt = ({ onBackClick: n, onMenuClick: d, sx: o = {} }) => {
|
|
459
|
-
const { isAccountDataLoaded: a, loadAccountData: i } = ct(), { categoriesLoaded: g, dateRangeTotalsLoaded: e, loadCategories: r, loadDateRangeCategoryTotals: s } = R(), { isTransactionDataLoaded:
|
|
459
|
+
const { isAccountDataLoaded: a, loadAccountData: i } = ct(), { categoriesLoaded: g, dateRangeTotalsLoaded: e, loadCategories: r, loadDateRangeCategoryTotals: s } = R(), { isTransactionDataLoaded: f, loadTransactionData: u } = dt(), { spending: h } = A(), { displayedDateRange: M, isInitialized: _, setDisplayedDate: b, selectedAccounts: D } = P(), { onEvent: x } = yt(), { clientConfig: N } = H();
|
|
460
460
|
gt({
|
|
461
461
|
widgetName: "SpendingWidget",
|
|
462
462
|
isLoaded: e
|
|
463
463
|
}), c.useEffect(() => {
|
|
464
464
|
const C = N?.master?.deep_link_params, E = C?.date_range ? [et(C.date_range.from), et(C.date_range.to)] : [at(J()), it(J())], W = E[0], O = E[1];
|
|
465
|
-
|
|
465
|
+
b(W, O), a || i().finally(), g || r().finally(), f || u().finally(), _ && a && s(D, W, O).finally(), x(nt.SPENDING_VIEW);
|
|
466
466
|
}, []), c.useEffect(() => {
|
|
467
|
-
|
|
467
|
+
_ && a && s(
|
|
468
468
|
D,
|
|
469
469
|
M.start,
|
|
470
470
|
M.end
|
|
471
471
|
).finally();
|
|
472
|
-
}, [M,
|
|
472
|
+
}, [M, _, a, D]);
|
|
473
473
|
const v = (C) => {
|
|
474
|
-
|
|
474
|
+
b(C[0], C[1]);
|
|
475
475
|
};
|
|
476
|
-
return
|
|
476
|
+
return !_ || !a || !e ? /* @__PURE__ */ t(pt, {}) : /* @__PURE__ */ t(
|
|
477
477
|
It,
|
|
478
478
|
{
|
|
479
479
|
calendarActions: { onRangeChanged: v },
|
|
@@ -484,7 +484,7 @@ const G = ({ amount: n, label: d, variant: o = "full" }) => /* @__PURE__ */ p(y,
|
|
|
484
484
|
title: h.title,
|
|
485
485
|
children: /* @__PURE__ */ t(L, { width: "100%", children: /* @__PURE__ */ t(Bt, {}) })
|
|
486
486
|
}
|
|
487
|
-
)
|
|
487
|
+
);
|
|
488
488
|
}, Se = I(Gt);
|
|
489
489
|
export {
|
|
490
490
|
Ce as SpendingMiniWidget,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../../src/spending/components/SpendingTabLabel.tsx","../../src/spending/components/MiniSpendingChart.tsx","../../src/spending/SpendingMiniWidget.tsx","../../src/spending/components/SpendingList.tsx","../../src/spending/components/SpendingChart.tsx","../../src/spending/components/Spending.tsx","../../src/spending/SpendingWidget.tsx"],"sourcesContent":["import React from 'react'\n\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface SpendingTabLabelProps {\n amount: number\n label: string\n variant?: 'mini' | 'full'\n}\n\nconst SpendingTabLabel: React.FC<SpendingTabLabelProps> = ({ amount, label, variant = 'full' }) => {\n return (\n <Stack direction=\"column\">\n <Text bold={true} sx={{ textTransform: 'none' }} variant=\"body1\">\n {label}\n </Text>\n <Text variant=\"caption\">{formatCurrency(amount, variant === 'mini' ? '0,0' : '0,0.00')}</Text>\n </Stack>\n )\n}\n\nexport default SpendingTabLabel\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\nimport { useTheme } from '@mui/material/styles'\n\nimport { useCategoryStore, useGlobalCopyStore } from '../../common'\nimport { getIncomeData, getSpendingData } from '../utils/SpendingData'\n\nimport SpendingTabLabel from './SpendingTabLabel'\nimport SpendingDonut from './SpendingDonut'\nimport SpendingLegend from './SpendingLegend'\n\nconst MiniSpendingChart = () => {\n const theme = useTheme()\n const { goals: goalsCopy, spending: spendingCopy } = useGlobalCopyStore()\n const { categories, dateRangeCategoryTotals } = useCategoryStore()\n\n const incomeColors = React.useMemo(\n () => [\n theme.palette.chartMono.chartMono5,\n theme.palette.chartMono.chartMono4,\n theme.palette.chartMono.chartMono3,\n theme.palette.chartMono.chartMono2,\n theme.palette.chartMono.chartMono1,\n theme.palette.chartMono.chartMono6,\n ],\n [theme],\n ) as string[]\n\n const [selectedId, setSelectedId] = React.useState('')\n const [selectedTab, setSelectedTab] = React.useState(0)\n\n const spendingData = React.useMemo(\n () => getSpendingData(categories, goalsCopy, theme, dateRangeCategoryTotals),\n [categories, dateRangeCategoryTotals],\n )\n\n const incomeData = React.useMemo(\n () => getIncomeData(categories, dateRangeCategoryTotals, incomeColors),\n [categories, dateRangeCategoryTotals, incomeColors],\n )\n\n const handleTabChange = (_event: React.SyntheticEvent, newValue: number) => {\n setSelectedTab(newValue)\n setSelectedId('')\n }\n\n const handleSelected = (id: string) => {\n setSelectedId(selectedId === id ? '' : id)\n }\n\n return (\n <Box width=\"100%\">\n <Tabs\n aria-label={spendingCopy.mini_title}\n onChange={handleTabChange}\n sx={{ touchAction: 'manipulation' }}\n value={selectedTab}\n variant=\"fullWidth\"\n >\n <Tab\n aria-controls=\"spending-tabpanel\"\n id=\"spending-tab\"\n label={\n <SpendingTabLabel\n amount={spendingData.totalAmount}\n label={spendingCopy.spend_tab_title}\n variant=\"mini\"\n />\n }\n tabIndex={selectedTab === 0 ? 0 : -1}\n />\n <Tab\n aria-controls=\"income-tabpanel\"\n id=\"income-tab\"\n label={\n <SpendingTabLabel\n amount={incomeData.totalAmount}\n label={spendingCopy.income_tab_title}\n variant=\"mini\"\n />\n }\n tabIndex={selectedTab === 1 ? 0 : -1}\n />\n </Tabs>\n <Box\n aria-labelledby=\"spending-tab\"\n hidden={selectedTab !== 0}\n id=\"spending-tabpanel\"\n role=\"tabpanel\"\n >\n <Stack direction=\"row\" gap={16} justifyContent={'center'} p={24}>\n <SpendingDonut\n data={spendingData}\n onSelected={handleSelected}\n selectedId={selectedId}\n totalLabel={spendingCopy.total_spending}\n />\n\n <SpendingLegend data={spendingData} onSelected={handleSelected} selectedId={selectedId} />\n </Stack>\n </Box>\n <Box\n aria-labelledby=\"income-tab\"\n hidden={selectedTab !== 1}\n id=\"income-tabpanel\"\n role=\"tabpanel\"\n >\n <Stack direction=\"row\" gap={16} justifyContent={'center'} p={24}>\n <SpendingDonut\n data={incomeData}\n isIncome={true}\n onSelected={handleSelected}\n selectedId={selectedId}\n totalLabel={spendingCopy.total_income}\n />\n\n <SpendingLegend data={incomeData} onSelected={handleSelected} selectedId={selectedId} />\n </Stack>\n </Box>\n </Box>\n )\n}\n\nexport default observer(MiniSpendingChart)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { endOfMonth } from 'date-fns/endOfMonth'\n\nimport {\n Loader,\n MiniWidgetContainer,\n useAccountStore,\n useCategoryStore,\n useGlobalCopyStore,\n useGlobalUiStore,\n useWidgetLoadTimer,\n} from '../common'\nimport { MiniWidgetProps } from '../core'\n\nimport MiniSpendingChart from './components/MiniSpendingChart'\n\nconst SpendingMiniWidget: React.FC<MiniWidgetProps> = ({ onPrimaryCtaClick, sx = {} }) => {\n const { isAccountDataLoaded, loadAccountData } = useAccountStore()\n const { dateRangeTotalsLoaded, categoriesLoaded, loadCategories, loadDateRangeCategoryTotals } =\n useCategoryStore()\n const { spending: spendingCopy } = useGlobalCopyStore()\n const { isInitialized, selectedAccounts } = useGlobalUiStore()\n\n useWidgetLoadTimer({\n widgetName: 'SpendingMiniWidget',\n isLoaded: dateRangeTotalsLoaded,\n })\n\n React.useEffect(() => {\n if (!isAccountDataLoaded) {\n loadAccountData().finally()\n }\n if (!categoriesLoaded) {\n loadCategories().finally()\n }\n }, [])\n\n React.useEffect(() => {\n loadDateRangeCategoryTotals(\n selectedAccounts,\n startOfMonth(new Date()),\n endOfMonth(new Date()),\n ).finally()\n }, [selectedAccounts])\n\n if (!isInitialized) {\n return <Loader />\n }\n\n return (\n <MiniWidgetContainer\n className=\"mx-exp-spending-miniwidget\"\n onPrimaryCtaClick={onPrimaryCtaClick}\n primaryCtaLabel={spendingCopy.primary_cta}\n primaryCtaLabelAria={spendingCopy.primary_cta_aria}\n sx={{ height: '100%', ...sx }}\n title={spendingCopy.mini_title}\n >\n <MiniSpendingChart />\n </MiniWidgetContainer>\n )\n}\n\nexport default observer(SpendingMiniWidget)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Collapse from '@mui/material/Collapse'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../common'\nimport { SpendingData } from '../utils/SpendingData'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface SpendingListProps {\n data: SpendingData\n onSelected: (id: string, isSubcategory?: boolean) => void\n selectedId?: string\n title: string\n}\n\nconst SpendingList: React.FC<SpendingListProps> = ({\n data,\n onSelected,\n selectedId = '',\n title,\n}) => {\n const { spending: spendingCopy } = useGlobalCopyStore()\n const selectedCategory = data.categoryData.find((parent) => parent.guid === selectedId)\n\n return (\n <Stack direction=\"column\" justifyContent=\"center\" maxWidth={400} minWidth={275} width=\"100%\">\n <Text bold={true} id=\"spending-list-title\" sx={{ py: 12 }} variant=\"h3\">\n {`${title} ${spendingCopy.by_category}`}\n </Text>\n\n <Divider aria-hidden=\"true\" />\n\n <List aria-labelledby=\"spending-list-title\">\n {data.categoryData.map((item) => (\n <React.Fragment key={item.guid}>\n <ListItem\n disableGutters={true}\n disablePadding={true}\n sx={{\n borderBottom: 1,\n borderColor: 'divider',\n minHeight: 44,\n }}\n >\n <ListItemButton\n aria-expanded={Boolean(selectedCategory?.guid === item.guid)}\n id={`spending-list-category-${item.guid}`}\n onClick={() => onSelected(item.guid)}\n sx={{ minHeight: 44, px: 8, py: 0 }}\n >\n <Box\n aria-hidden=\"true\"\n borderRadius={4}\n flexShrink={0}\n height={8}\n role=\"presentation\"\n sx={{ backgroundColor: item.color, mr: 8 }}\n width={8}\n />\n <Stack\n alignItems=\"center\"\n direction=\"row\"\n justifyContent=\"space-between\"\n width=\"100%\"\n >\n <Text bold={selectedId === item.guid}>{item.name}</Text>\n <Text bold={selectedId === item.guid} variant=\"body1\">\n {formatCurrency(item.amount, '0,0.00')}\n </Text>\n </Stack>\n </ListItemButton>\n </ListItem>\n\n {item.categoryTotals && item.categoryTotals.length > 0 && (\n <Collapse in={Boolean(selectedCategory?.guid === item.guid)} unmountOnExit={true}>\n <List sx={{ borderBottom: 1, borderColor: 'divider' }}>\n {selectedCategory?.categoryTotals?.map((subItem) => (\n <ListItem\n key={subItem.guid}\n sx={{\n pl: 12,\n py: 0,\n }}\n >\n <ListItemButton\n id={`spending-list-subcategory-${subItem.guid}`}\n onClick={() => onSelected(subItem.guid, true)}\n sx={{ minHeight: 44, px: 8, py: 0 }}\n >\n <Stack direction=\"row\" justifyContent=\"space-between\" width=\"100%\">\n <Text>{subItem.name} </Text>\n <Text>{formatCurrency(subItem.amount, '0,0.00')}</Text>\n </Stack>\n </ListItemButton>\n </ListItem>\n ))}\n </List>\n </Collapse>\n )}\n </React.Fragment>\n ))}\n </List>\n\n <Text bold={true} sx={{ mt: 12, pr: 8, textAlign: 'right' }}>\n {`${spendingCopy.total}: ${formatCurrency(data.totalAmount, '0,0.00')}`}\n </Text>\n </Stack>\n )\n}\n\nexport default observer(SpendingList)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\n\nimport { useCategoryStore, useGlobalCopyStore, useScreenSize } from '../../common'\n\nimport { SpendingData } from '../utils/SpendingData'\nimport SpendingDonut from './SpendingDonut'\nimport SpendingList from './SpendingList'\n\ninterface SpendingChartProps {\n data: SpendingData\n title: string\n onSelected: (id: string, isSubcategory?: boolean) => void\n onViewTransactions: (id: string) => void\n selectedId: string\n}\n\nconst SpendingChart: React.FC<SpendingChartProps> = ({\n data,\n onSelected,\n onViewTransactions,\n selectedId,\n title,\n}) => {\n const { isDesktop, isMobile } = useScreenSize()\n const { dateRangeTotalsLoading } = useCategoryStore()\n const { spending: spendingCopy } = useGlobalCopyStore()\n\n const handleDonutSelected = (id: string) => {\n onSelected(id)\n setTimeout(() => document.getElementById(`spending-list-category-${id}`)?.focus(), 0)\n }\n\n const loadingDonut = (\n <SpendingDonut\n data={{\n categoryData: [],\n donutData: [],\n totalAmount: 0,\n }}\n onSelected={() => {}}\n selectedId={''}\n size={isDesktop ? 400 : 300}\n totalLabel={'Loading ...'}\n variant=\"full\"\n />\n )\n\n return (\n <Stack\n alignItems={isMobile ? 'center' : 'flex-start'}\n direction={isMobile ? 'column' : 'row'}\n gap={{ xs: 16, md: 64, xl: 100 }}\n justifyContent=\"center\"\n pt={50}\n px={8}\n >\n {dateRangeTotalsLoading && loadingDonut}\n {/* Not using a ternary here because it doesn't show the animation */}\n {!dateRangeTotalsLoading && (\n <SpendingDonut\n data={data}\n onSelected={handleDonutSelected}\n onViewTransactions={onViewTransactions}\n selectedId={selectedId}\n size={isDesktop ? 400 : 300}\n totalLabel={spendingCopy.total_amount}\n variant=\"full\"\n />\n )}\n\n <SpendingList data={data} onSelected={onSelected} selectedId={selectedId} title={title} />\n </Stack>\n )\n}\n\nexport default observer(SpendingChart)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\nimport { useTheme } from '@mui/material'\nimport type { Theme } from '@mui/system'\n\nimport { Icon } from '@mxenabled/mxui'\n\nimport {\n Drawer,\n useAppConfig,\n useCategoryStore,\n useGlobalCopyStore,\n useGlobalUiStore,\n useTransactionStore,\n} from '../../common'\nimport { CategoryGuids } from '../../core/constants'\nimport { Transaction } from '../../core'\nimport { exportTransactionsToCSV } from '../../core/utils/TransactionUtils'\n\nimport { TransactionDetails, TransactionList } from '../../transactions'\nimport { getIncomeData, getSpendingData } from '../utils/SpendingData'\nimport SpendingChart from './SpendingChart'\nimport SpendingTabLabel from './SpendingTabLabel'\n\nconst getIncomeColors = (theme: Theme) => {\n return [\n theme.palette.chartMono.chartMono5,\n theme.palette.chartMono.chartMono4,\n theme.palette.chartMono.chartMono3,\n theme.palette.chartMono.chartMono2,\n theme.palette.chartMono.chartMono1,\n theme.palette.chartMono.chartMono6,\n ]\n}\n\nconst Spending = () => {\n const theme = useTheme()\n const { is_mobile_webview } = useAppConfig()\n\n const { clientConfig } = useAppConfig()\n const { categories, dateRangeCategoryTotals } = useCategoryStore()\n\n const {\n goals: goalsCopy,\n spending: spendingCopy,\n transactions: transactionCopy,\n } = useGlobalCopyStore()\n const { displayedDateRange, selectedAccountGuids } = useGlobalUiStore()\n const {\n setFilter,\n sortedTransactions: transactions,\n sortedTransactionsWithSplits,\n tags,\n } = useTransactionStore()\n\n const accountGuids = clientConfig?.master?.deep_link_params?.account_guids\n const view = clientConfig?.master?.deep_link_params?.view\n\n const [selectedId, setSelectedId] = React.useState('')\n const [selectedTab, setSelectedTab] = React.useState(view === 'income' ? 1 : 0)\n const [transactionGuid, setTransactionGuid] = React.useState('')\n const [transactionsOpen, setTransactionsOpen] = React.useState(false)\n\n const spendingData = React.useMemo(\n () => getSpendingData(categories, goalsCopy, theme, dateRangeCategoryTotals),\n [categories, dateRangeCategoryTotals],\n )\n\n const incomeData = React.useMemo(\n () => getIncomeData(categories, dateRangeCategoryTotals, getIncomeColors(theme)),\n [categories, dateRangeCategoryTotals],\n )\n\n const transaction = React.useMemo(\n () => transactions.find((t) => t.guid === transactionGuid),\n [transactionGuid, transactions],\n )\n\n const handleTabChange = (_event: React.SyntheticEvent, newValue: number) => {\n setSelectedTab(newValue)\n setSelectedId('')\n }\n\n const handleSelected = (id: string, isSubcategory: boolean = false) => {\n if (isSubcategory) {\n handleSelectedSubcategory(id)\n } else {\n setSelectedId(selectedId === id || id === '0' ? '' : id)\n }\n }\n\n const handleSelectedSubcategory = (id: string) => {\n const transactionFilter = {\n accounts: accountGuids ? accountGuids : selectedAccountGuids,\n dateRange: displayedDateRange,\n }\n\n setFilter({\n ...transactionFilter,\n custom: (t: Transaction) =>\n selectedId === 'other' ? t.top_level_category_guid === id : t.category_guid === id,\n showSplits: true,\n })\n\n setTransactionsOpen(true)\n }\n\n const handleViewTransactions = (id: string) => {\n const transactionFilter = {\n accounts: accountGuids ? accountGuids : selectedAccountGuids,\n dateRange: displayedDateRange,\n }\n\n if (selectedTab === 0) {\n // Spending\n if (id === 'other') {\n const other = spendingData.categoryData.find((c) => c.guid === 'other')\n setFilter({\n ...transactionFilter,\n custom: (t: Transaction) =>\n Boolean(other?.categoryTotals?.find((ct) => ct.guid === t.top_level_category_guid)),\n })\n } else {\n setFilter({\n ...transactionFilter,\n custom: (t: Transaction) =>\n id\n ? t.top_level_category_guid === id\n : t.top_level_category_guid !== CategoryGuids.INCOME &&\n t.category_guid !== CategoryGuids.INCOME &&\n t.top_level_category_guid !== CategoryGuids.INVESTMENTS &&\n t.top_level_category_guid !== CategoryGuids.TRANSFER,\n showSplits: Boolean(id),\n })\n }\n } else {\n // Income\n setFilter({\n ...transactionFilter,\n custom: (t: Transaction) =>\n id\n ? t.category_guid === id\n : t.category_guid === CategoryGuids.INCOME ||\n t.top_level_category_guid === CategoryGuids.INCOME,\n })\n }\n\n setTransactionsOpen(true)\n }\n\n const handleExportToCsv = () => {\n exportTransactionsToCSV(sortedTransactionsWithSplits, tags)\n }\n\n return (\n <Box>\n <Tabs onChange={handleTabChange} value={selectedTab} variant=\"fullWidth\">\n <Tab\n label={\n <SpendingTabLabel\n amount={spendingData.totalAmount}\n label={spendingCopy.spend_tab_title}\n />\n }\n />\n <Tab\n label={\n <SpendingTabLabel\n amount={incomeData.totalAmount}\n label={spendingCopy.income_tab_title}\n />\n }\n />\n </Tabs>\n {selectedTab === 0 && (\n <SpendingChart\n data={spendingData}\n onSelected={handleSelected}\n onViewTransactions={handleViewTransactions}\n selectedId={selectedId}\n title={spendingCopy.spend_tab_title}\n />\n )}\n {selectedTab === 1 && (\n <SpendingChart\n data={incomeData}\n onSelected={handleSelected}\n onViewTransactions={handleViewTransactions}\n selectedId={selectedId}\n title={spendingCopy.income_tab_title}\n />\n )}\n <Drawer\n ariaLabelClose={spendingCopy.close_drawer_aria}\n isOpen={transactionsOpen}\n onClose={() => setTransactionsOpen(false)}\n title={spendingCopy.transactions_drawer_title}\n >\n <Stack>\n {!is_mobile_webview && transactions.length > 0 && (\n <Stack direction=\"row\" justifyContent=\"right\" mb={-24} mr={8} mt={8} zIndex={1}>\n <Button\n onClick={handleExportToCsv}\n startIcon={<Icon name=\"ios_share\" />}\n variant=\"text\"\n >\n {transactionCopy.export_csv_btn}\n </Button>\n </Stack>\n )}\n <TransactionList onClick={setTransactionGuid} />\n </Stack>\n </Drawer>\n <Drawer\n ariaLabelClose={spendingCopy.close_drawer_aria}\n isOpen={Boolean(transaction)}\n onClose={() => setTransactionGuid('')}\n title={spendingCopy.transaction_details_drawer_title}\n >\n {transaction && <TransactionDetails transaction={transaction} />}\n </Drawer>\n </Box>\n )\n}\n\nexport default observer(Spending)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { endOfMonth } from 'date-fns/endOfMonth'\n\nimport Box from '@mui/material/Box'\n\nimport type { DateRange } from '@mui/x-date-pickers-pro'\n\nimport {\n Loader,\n useAccountStore,\n useGlobalUiStore,\n WidgetContainer,\n useEvent,\n ANALYTICS_EVENTS,\n useGlobalCopyStore,\n useAppConfig,\n useCategoryStore,\n useTransactionStore,\n useWidgetLoadTimer,\n} from '../common'\n\nimport type { WidgetProps } from '../core'\n\nimport Spending from './components/Spending'\nimport { parseISO } from 'date-fns/parseISO'\n\ninterface RSpendingWidgetProps extends WidgetProps {\n onBackClick?: () => void\n}\n\nconst SpendingWidget: React.FC<RSpendingWidgetProps> = ({ onBackClick, onMenuClick, sx = {} }) => {\n const { isAccountDataLoaded, loadAccountData } = useAccountStore()\n const { categoriesLoaded, dateRangeTotalsLoaded, loadCategories, loadDateRangeCategoryTotals } =\n useCategoryStore()\n const { isTransactionDataLoaded, loadTransactionData } = useTransactionStore()\n const { spending: spendingCopy } = useGlobalCopyStore()\n const { displayedDateRange, isInitialized, setDisplayedDate, selectedAccounts } =\n useGlobalUiStore()\n const { onEvent } = useEvent()\n\n const { clientConfig } = useAppConfig()\n\n useWidgetLoadTimer({\n widgetName: 'SpendingWidget',\n isLoaded: dateRangeTotalsLoaded,\n })\n\n React.useEffect(() => {\n const dlp = clientConfig?.master?.deep_link_params\n\n const date_range = dlp?.date_range\n ? ([parseISO(dlp.date_range.from), parseISO(dlp.date_range.to)] as DateRange<Date>)\n : ([startOfMonth(startOfToday()), endOfMonth(startOfToday())] as DateRange<Date>)\n\n const startDate = date_range[0] as Date\n const endDate = date_range[1] as Date\n\n setDisplayedDate(startDate, endDate)\n\n if (!isAccountDataLoaded) {\n loadAccountData().finally()\n }\n if (!categoriesLoaded) {\n loadCategories().finally()\n }\n if (!isTransactionDataLoaded) {\n loadTransactionData().finally()\n }\n\n // Load with the dates we just computed rather than reading from the store,\n // which may still hold a stale range set by a previously visited widget.\n if (isInitialized) {\n loadDateRangeCategoryTotals(selectedAccounts, startDate, endDate).finally()\n }\n\n onEvent(ANALYTICS_EVENTS.SPENDING_VIEW)\n }, [])\n\n React.useEffect(() => {\n if (isInitialized) {\n loadDateRangeCategoryTotals(\n selectedAccounts,\n displayedDateRange.start,\n displayedDateRange.end,\n ).finally()\n }\n }, [displayedDateRange, isInitialized, selectedAccounts])\n\n const handleDateChanged = (range: DateRange<Date>) => {\n setDisplayedDate(range[0] as Date, range[1] as Date)\n }\n\n if (!isInitialized) {\n return <Loader />\n }\n\n return (\n <WidgetContainer\n calendarActions={{ onRangeChanged: handleDateChanged }}\n onAccountsFilterClick={() => onEvent(ANALYTICS_EVENTS.SPENDING_CLICK_FILTER)}\n onBackClick={onBackClick}\n onMenuClick={onMenuClick}\n sx={sx}\n title={spendingCopy.title}\n >\n <Box width=\"100%\">\n <Spending />\n </Box>\n </WidgetContainer>\n )\n}\n\nexport default observer(SpendingWidget)\n"],"names":["SpendingTabLabel","amount","label","variant","jsxs","Stack","jsx","Text","formatCurrency","MiniSpendingChart","theme","useTheme","goalsCopy","spendingCopy","useGlobalCopyStore","categories","dateRangeCategoryTotals","useCategoryStore","incomeColors","React","selectedId","setSelectedId","selectedTab","setSelectedTab","spendingData","getSpendingData","incomeData","getIncomeData","handleTabChange","_event","newValue","handleSelected","id","Box","Tabs","Tab","SpendingDonut","SpendingLegend","MiniSpendingChart$1","observer","SpendingMiniWidget","onPrimaryCtaClick","sx","isAccountDataLoaded","loadAccountData","useAccountStore","dateRangeTotalsLoaded","categoriesLoaded","loadCategories","loadDateRangeCategoryTotals","isInitialized","selectedAccounts","useGlobalUiStore","useWidgetLoadTimer","startOfMonth","endOfMonth","MiniWidgetContainer","Loader","SpendingMiniWidget_default","SpendingList","data","onSelected","title","selectedCategory","parent","Divider","List","item","ListItem","ListItemButton","Collapse","subItem","SpendingList$1","SpendingChart","onViewTransactions","isDesktop","isMobile","useScreenSize","dateRangeTotalsLoading","SpendingChart$1","getIncomeColors","Spending","is_mobile_webview","useAppConfig","clientConfig","transactionCopy","displayedDateRange","selectedAccountGuids","setFilter","transactions","sortedTransactionsWithSplits","tags","useTransactionStore","accountGuids","view","transactionGuid","setTransactionGuid","transactionsOpen","setTransactionsOpen","transaction","t","isSubcategory","handleSelectedSubcategory","handleViewTransactions","transactionFilter","other","c","ct","CategoryGuids","handleExportToCsv","exportTransactionsToCSV","Drawer","Button","Icon","TransactionList","TransactionDetails","Spending$1","SpendingWidget","onBackClick","onMenuClick","isTransactionDataLoaded","loadTransactionData","setDisplayedDate","onEvent","useEvent","dlp","date_range","parseISO","startOfToday","startDate","endDate","ANALYTICS_EVENTS","handleDateChanged","range","WidgetContainer","SpendingWidget_default"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../src/spending/components/SpendingTabLabel.tsx","../../src/spending/components/MiniSpendingChart.tsx","../../src/spending/SpendingMiniWidget.tsx","../../src/spending/components/SpendingList.tsx","../../src/spending/components/SpendingChart.tsx","../../src/spending/components/Spending.tsx","../../src/spending/SpendingWidget.tsx"],"sourcesContent":["import React from 'react'\n\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface SpendingTabLabelProps {\n amount: number\n label: string\n variant?: 'mini' | 'full'\n}\n\nconst SpendingTabLabel: React.FC<SpendingTabLabelProps> = ({ amount, label, variant = 'full' }) => {\n return (\n <Stack direction=\"column\">\n <Text bold={true} sx={{ textTransform: 'none' }} variant=\"body1\">\n {label}\n </Text>\n <Text variant=\"caption\">{formatCurrency(amount, variant === 'mini' ? '0,0' : '0,0.00')}</Text>\n </Stack>\n )\n}\n\nexport default SpendingTabLabel\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\nimport { useTheme } from '@mui/material/styles'\n\nimport { useCategoryStore, useGlobalCopyStore } from '../../common'\nimport { getIncomeData, getSpendingData } from '../utils/SpendingData'\n\nimport SpendingTabLabel from './SpendingTabLabel'\nimport SpendingDonut from './SpendingDonut'\nimport SpendingLegend from './SpendingLegend'\n\nconst MiniSpendingChart = () => {\n const theme = useTheme()\n const { goals: goalsCopy, spending: spendingCopy } = useGlobalCopyStore()\n const { categories, dateRangeCategoryTotals } = useCategoryStore()\n\n const incomeColors = React.useMemo(\n () => [\n theme.palette.chartMono.chartMono5,\n theme.palette.chartMono.chartMono4,\n theme.palette.chartMono.chartMono3,\n theme.palette.chartMono.chartMono2,\n theme.palette.chartMono.chartMono1,\n theme.palette.chartMono.chartMono6,\n ],\n [theme],\n ) as string[]\n\n const [selectedId, setSelectedId] = React.useState('')\n const [selectedTab, setSelectedTab] = React.useState(0)\n\n const spendingData = React.useMemo(\n () => getSpendingData(categories, goalsCopy, theme, dateRangeCategoryTotals),\n [categories, dateRangeCategoryTotals],\n )\n\n const incomeData = React.useMemo(\n () => getIncomeData(categories, dateRangeCategoryTotals, incomeColors),\n [categories, dateRangeCategoryTotals, incomeColors],\n )\n\n const handleTabChange = (_event: React.SyntheticEvent, newValue: number) => {\n setSelectedTab(newValue)\n setSelectedId('')\n }\n\n const handleSelected = (id: string) => {\n setSelectedId(selectedId === id ? '' : id)\n }\n\n return (\n <Box width=\"100%\">\n <Tabs\n aria-label={spendingCopy.mini_title}\n onChange={handleTabChange}\n sx={{ touchAction: 'manipulation' }}\n value={selectedTab}\n variant=\"fullWidth\"\n >\n <Tab\n aria-controls=\"spending-tabpanel\"\n id=\"spending-tab\"\n label={\n <SpendingTabLabel\n amount={spendingData.totalAmount}\n label={spendingCopy.spend_tab_title}\n variant=\"mini\"\n />\n }\n tabIndex={selectedTab === 0 ? 0 : -1}\n />\n <Tab\n aria-controls=\"income-tabpanel\"\n id=\"income-tab\"\n label={\n <SpendingTabLabel\n amount={incomeData.totalAmount}\n label={spendingCopy.income_tab_title}\n variant=\"mini\"\n />\n }\n tabIndex={selectedTab === 1 ? 0 : -1}\n />\n </Tabs>\n <Box\n aria-labelledby=\"spending-tab\"\n hidden={selectedTab !== 0}\n id=\"spending-tabpanel\"\n role=\"tabpanel\"\n >\n <Stack direction=\"row\" gap={16} justifyContent={'center'} p={24}>\n <SpendingDonut\n data={spendingData}\n onSelected={handleSelected}\n selectedId={selectedId}\n totalLabel={spendingCopy.total_spending}\n />\n\n <SpendingLegend data={spendingData} onSelected={handleSelected} selectedId={selectedId} />\n </Stack>\n </Box>\n <Box\n aria-labelledby=\"income-tab\"\n hidden={selectedTab !== 1}\n id=\"income-tabpanel\"\n role=\"tabpanel\"\n >\n <Stack direction=\"row\" gap={16} justifyContent={'center'} p={24}>\n <SpendingDonut\n data={incomeData}\n isIncome={true}\n onSelected={handleSelected}\n selectedId={selectedId}\n totalLabel={spendingCopy.total_income}\n />\n\n <SpendingLegend data={incomeData} onSelected={handleSelected} selectedId={selectedId} />\n </Stack>\n </Box>\n </Box>\n )\n}\n\nexport default observer(MiniSpendingChart)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { endOfMonth } from 'date-fns/endOfMonth'\n\nimport {\n Loader,\n MiniWidgetContainer,\n useAccountStore,\n useCategoryStore,\n useGlobalCopyStore,\n useGlobalUiStore,\n useWidgetLoadTimer,\n} from '../common'\nimport { MiniWidgetProps } from '../core'\n\nimport MiniSpendingChart from './components/MiniSpendingChart'\n\nconst SpendingMiniWidget: React.FC<MiniWidgetProps> = ({ onPrimaryCtaClick, sx = {} }) => {\n const { isAccountDataLoaded, loadAccountData } = useAccountStore()\n const { dateRangeTotalsLoaded, categoriesLoaded, loadCategories, loadDateRangeCategoryTotals } =\n useCategoryStore()\n const { spending: spendingCopy } = useGlobalCopyStore()\n const { isInitialized, selectedAccounts } = useGlobalUiStore()\n\n useWidgetLoadTimer({\n widgetName: 'SpendingMiniWidget',\n isLoaded: dateRangeTotalsLoaded,\n })\n\n React.useEffect(() => {\n if (!isAccountDataLoaded) {\n loadAccountData().finally()\n }\n if (!categoriesLoaded) {\n loadCategories().finally()\n }\n }, [])\n\n React.useEffect(() => {\n if (!isInitialized || !isAccountDataLoaded) return\n\n loadDateRangeCategoryTotals(\n selectedAccounts,\n startOfMonth(new Date()),\n endOfMonth(new Date()),\n ).finally()\n }, [isInitialized, isAccountDataLoaded, selectedAccounts])\n\n // Keep spinning until account data and the date-range totals have loaded.\n // Rendering before then would show a misleading $0 while accounts/totals are\n // still in flight. (MEW-3538)\n if (!isInitialized || !isAccountDataLoaded || !dateRangeTotalsLoaded) {\n return <Loader />\n }\n\n return (\n <MiniWidgetContainer\n className=\"mx-exp-spending-miniwidget\"\n onPrimaryCtaClick={onPrimaryCtaClick}\n primaryCtaLabel={spendingCopy.primary_cta}\n primaryCtaLabelAria={spendingCopy.primary_cta_aria}\n sx={{ height: '100%', ...sx }}\n title={spendingCopy.mini_title}\n >\n <MiniSpendingChart />\n </MiniWidgetContainer>\n )\n}\n\nexport default observer(SpendingMiniWidget)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Collapse from '@mui/material/Collapse'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../common'\nimport { SpendingData } from '../utils/SpendingData'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface SpendingListProps {\n data: SpendingData\n onSelected: (id: string, isSubcategory?: boolean) => void\n selectedId?: string\n title: string\n}\n\nconst SpendingList: React.FC<SpendingListProps> = ({\n data,\n onSelected,\n selectedId = '',\n title,\n}) => {\n const { spending: spendingCopy } = useGlobalCopyStore()\n const selectedCategory = data.categoryData.find((parent) => parent.guid === selectedId)\n\n return (\n <Stack direction=\"column\" justifyContent=\"center\" maxWidth={400} minWidth={275} width=\"100%\">\n <Text bold={true} id=\"spending-list-title\" sx={{ py: 12 }} variant=\"h3\">\n {`${title} ${spendingCopy.by_category}`}\n </Text>\n\n <Divider aria-hidden=\"true\" />\n\n <List aria-labelledby=\"spending-list-title\">\n {data.categoryData.map((item) => (\n <React.Fragment key={item.guid}>\n <ListItem\n disableGutters={true}\n disablePadding={true}\n sx={{\n borderBottom: 1,\n borderColor: 'divider',\n minHeight: 44,\n }}\n >\n <ListItemButton\n aria-expanded={Boolean(selectedCategory?.guid === item.guid)}\n id={`spending-list-category-${item.guid}`}\n onClick={() => onSelected(item.guid)}\n sx={{ minHeight: 44, px: 8, py: 0 }}\n >\n <Box\n aria-hidden=\"true\"\n borderRadius={4}\n flexShrink={0}\n height={8}\n role=\"presentation\"\n sx={{ backgroundColor: item.color, mr: 8 }}\n width={8}\n />\n <Stack\n alignItems=\"center\"\n direction=\"row\"\n justifyContent=\"space-between\"\n width=\"100%\"\n >\n <Text bold={selectedId === item.guid}>{item.name}</Text>\n <Text bold={selectedId === item.guid} variant=\"body1\">\n {formatCurrency(item.amount, '0,0.00')}\n </Text>\n </Stack>\n </ListItemButton>\n </ListItem>\n\n {item.categoryTotals && item.categoryTotals.length > 0 && (\n <Collapse in={Boolean(selectedCategory?.guid === item.guid)} unmountOnExit={true}>\n <List sx={{ borderBottom: 1, borderColor: 'divider' }}>\n {selectedCategory?.categoryTotals?.map((subItem) => (\n <ListItem\n key={subItem.guid}\n sx={{\n pl: 12,\n py: 0,\n }}\n >\n <ListItemButton\n id={`spending-list-subcategory-${subItem.guid}`}\n onClick={() => onSelected(subItem.guid, true)}\n sx={{ minHeight: 44, px: 8, py: 0 }}\n >\n <Stack direction=\"row\" justifyContent=\"space-between\" width=\"100%\">\n <Text>{subItem.name} </Text>\n <Text>{formatCurrency(subItem.amount, '0,0.00')}</Text>\n </Stack>\n </ListItemButton>\n </ListItem>\n ))}\n </List>\n </Collapse>\n )}\n </React.Fragment>\n ))}\n </List>\n\n <Text bold={true} sx={{ mt: 12, pr: 8, textAlign: 'right' }}>\n {`${spendingCopy.total}: ${formatCurrency(data.totalAmount, '0,0.00')}`}\n </Text>\n </Stack>\n )\n}\n\nexport default observer(SpendingList)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\n\nimport { useCategoryStore, useGlobalCopyStore, useScreenSize } from '../../common'\n\nimport { SpendingData } from '../utils/SpendingData'\nimport SpendingDonut from './SpendingDonut'\nimport SpendingList from './SpendingList'\n\ninterface SpendingChartProps {\n data: SpendingData\n title: string\n onSelected: (id: string, isSubcategory?: boolean) => void\n onViewTransactions: (id: string) => void\n selectedId: string\n}\n\nconst SpendingChart: React.FC<SpendingChartProps> = ({\n data,\n onSelected,\n onViewTransactions,\n selectedId,\n title,\n}) => {\n const { isDesktop, isMobile } = useScreenSize()\n const { dateRangeTotalsLoading } = useCategoryStore()\n const { spending: spendingCopy } = useGlobalCopyStore()\n\n const handleDonutSelected = (id: string) => {\n onSelected(id)\n setTimeout(() => document.getElementById(`spending-list-category-${id}`)?.focus(), 0)\n }\n\n const loadingDonut = (\n <SpendingDonut\n data={{\n categoryData: [],\n donutData: [],\n totalAmount: 0,\n }}\n onSelected={() => {}}\n selectedId={''}\n size={isDesktop ? 400 : 300}\n totalLabel={'Loading ...'}\n variant=\"full\"\n />\n )\n\n return (\n <Stack\n alignItems={isMobile ? 'center' : 'flex-start'}\n direction={isMobile ? 'column' : 'row'}\n gap={{ xs: 16, md: 64, xl: 100 }}\n justifyContent=\"center\"\n pt={50}\n px={8}\n >\n {dateRangeTotalsLoading && loadingDonut}\n {/* Not using a ternary here because it doesn't show the animation */}\n {!dateRangeTotalsLoading && (\n <SpendingDonut\n data={data}\n onSelected={handleDonutSelected}\n onViewTransactions={onViewTransactions}\n selectedId={selectedId}\n size={isDesktop ? 400 : 300}\n totalLabel={spendingCopy.total_amount}\n variant=\"full\"\n />\n )}\n\n <SpendingList data={data} onSelected={onSelected} selectedId={selectedId} title={title} />\n </Stack>\n )\n}\n\nexport default observer(SpendingChart)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\nimport { useTheme } from '@mui/material'\nimport type { Theme } from '@mui/system'\n\nimport { Icon } from '@mxenabled/mxui'\n\nimport {\n Drawer,\n useAppConfig,\n useCategoryStore,\n useGlobalCopyStore,\n useGlobalUiStore,\n useTransactionStore,\n} from '../../common'\nimport { CategoryGuids } from '../../core/constants'\nimport { Transaction } from '../../core'\nimport { exportTransactionsToCSV } from '../../core/utils/TransactionUtils'\n\nimport { TransactionDetails, TransactionList } from '../../transactions'\nimport { getIncomeData, getSpendingData } from '../utils/SpendingData'\nimport SpendingChart from './SpendingChart'\nimport SpendingTabLabel from './SpendingTabLabel'\n\nconst getIncomeColors = (theme: Theme) => {\n return [\n theme.palette.chartMono.chartMono5,\n theme.palette.chartMono.chartMono4,\n theme.palette.chartMono.chartMono3,\n theme.palette.chartMono.chartMono2,\n theme.palette.chartMono.chartMono1,\n theme.palette.chartMono.chartMono6,\n ]\n}\n\nconst Spending = () => {\n const theme = useTheme()\n const { is_mobile_webview } = useAppConfig()\n\n const { clientConfig } = useAppConfig()\n const { categories, dateRangeCategoryTotals } = useCategoryStore()\n\n const {\n goals: goalsCopy,\n spending: spendingCopy,\n transactions: transactionCopy,\n } = useGlobalCopyStore()\n const { displayedDateRange, selectedAccountGuids } = useGlobalUiStore()\n const {\n setFilter,\n sortedTransactions: transactions,\n sortedTransactionsWithSplits,\n tags,\n } = useTransactionStore()\n\n const accountGuids = clientConfig?.master?.deep_link_params?.account_guids\n const view = clientConfig?.master?.deep_link_params?.view\n\n const [selectedId, setSelectedId] = React.useState('')\n const [selectedTab, setSelectedTab] = React.useState(view === 'income' ? 1 : 0)\n const [transactionGuid, setTransactionGuid] = React.useState('')\n const [transactionsOpen, setTransactionsOpen] = React.useState(false)\n\n const spendingData = React.useMemo(\n () => getSpendingData(categories, goalsCopy, theme, dateRangeCategoryTotals),\n [categories, dateRangeCategoryTotals],\n )\n\n const incomeData = React.useMemo(\n () => getIncomeData(categories, dateRangeCategoryTotals, getIncomeColors(theme)),\n [categories, dateRangeCategoryTotals],\n )\n\n const transaction = React.useMemo(\n () => transactions.find((t) => t.guid === transactionGuid),\n [transactionGuid, transactions],\n )\n\n const handleTabChange = (_event: React.SyntheticEvent, newValue: number) => {\n setSelectedTab(newValue)\n setSelectedId('')\n }\n\n const handleSelected = (id: string, isSubcategory: boolean = false) => {\n if (isSubcategory) {\n handleSelectedSubcategory(id)\n } else {\n setSelectedId(selectedId === id || id === '0' ? '' : id)\n }\n }\n\n const handleSelectedSubcategory = (id: string) => {\n const transactionFilter = {\n accounts: accountGuids ? accountGuids : selectedAccountGuids,\n dateRange: displayedDateRange,\n }\n\n setFilter({\n ...transactionFilter,\n custom: (t: Transaction) =>\n selectedId === 'other' ? t.top_level_category_guid === id : t.category_guid === id,\n showSplits: true,\n })\n\n setTransactionsOpen(true)\n }\n\n const handleViewTransactions = (id: string) => {\n const transactionFilter = {\n accounts: accountGuids ? accountGuids : selectedAccountGuids,\n dateRange: displayedDateRange,\n }\n\n if (selectedTab === 0) {\n // Spending\n if (id === 'other') {\n const other = spendingData.categoryData.find((c) => c.guid === 'other')\n setFilter({\n ...transactionFilter,\n custom: (t: Transaction) =>\n Boolean(other?.categoryTotals?.find((ct) => ct.guid === t.top_level_category_guid)),\n })\n } else {\n setFilter({\n ...transactionFilter,\n custom: (t: Transaction) =>\n id\n ? t.top_level_category_guid === id\n : t.top_level_category_guid !== CategoryGuids.INCOME &&\n t.category_guid !== CategoryGuids.INCOME &&\n t.top_level_category_guid !== CategoryGuids.INVESTMENTS &&\n t.top_level_category_guid !== CategoryGuids.TRANSFER,\n showSplits: Boolean(id),\n })\n }\n } else {\n // Income\n setFilter({\n ...transactionFilter,\n custom: (t: Transaction) =>\n id\n ? t.category_guid === id\n : t.category_guid === CategoryGuids.INCOME ||\n t.top_level_category_guid === CategoryGuids.INCOME,\n })\n }\n\n setTransactionsOpen(true)\n }\n\n const handleExportToCsv = () => {\n exportTransactionsToCSV(sortedTransactionsWithSplits, tags)\n }\n\n return (\n <Box>\n <Tabs onChange={handleTabChange} value={selectedTab} variant=\"fullWidth\">\n <Tab\n label={\n <SpendingTabLabel\n amount={spendingData.totalAmount}\n label={spendingCopy.spend_tab_title}\n />\n }\n />\n <Tab\n label={\n <SpendingTabLabel\n amount={incomeData.totalAmount}\n label={spendingCopy.income_tab_title}\n />\n }\n />\n </Tabs>\n {selectedTab === 0 && (\n <SpendingChart\n data={spendingData}\n onSelected={handleSelected}\n onViewTransactions={handleViewTransactions}\n selectedId={selectedId}\n title={spendingCopy.spend_tab_title}\n />\n )}\n {selectedTab === 1 && (\n <SpendingChart\n data={incomeData}\n onSelected={handleSelected}\n onViewTransactions={handleViewTransactions}\n selectedId={selectedId}\n title={spendingCopy.income_tab_title}\n />\n )}\n <Drawer\n ariaLabelClose={spendingCopy.close_drawer_aria}\n isOpen={transactionsOpen}\n onClose={() => setTransactionsOpen(false)}\n title={spendingCopy.transactions_drawer_title}\n >\n <Stack>\n {!is_mobile_webview && transactions.length > 0 && (\n <Stack direction=\"row\" justifyContent=\"right\" mb={-24} mr={8} mt={8} zIndex={1}>\n <Button\n onClick={handleExportToCsv}\n startIcon={<Icon name=\"ios_share\" />}\n variant=\"text\"\n >\n {transactionCopy.export_csv_btn}\n </Button>\n </Stack>\n )}\n <TransactionList onClick={setTransactionGuid} />\n </Stack>\n </Drawer>\n <Drawer\n ariaLabelClose={spendingCopy.close_drawer_aria}\n isOpen={Boolean(transaction)}\n onClose={() => setTransactionGuid('')}\n title={spendingCopy.transaction_details_drawer_title}\n >\n {transaction && <TransactionDetails transaction={transaction} />}\n </Drawer>\n </Box>\n )\n}\n\nexport default observer(Spending)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { endOfMonth } from 'date-fns/endOfMonth'\n\nimport Box from '@mui/material/Box'\n\nimport type { DateRange } from '@mui/x-date-pickers-pro'\n\nimport {\n Loader,\n useAccountStore,\n useGlobalUiStore,\n WidgetContainer,\n useEvent,\n ANALYTICS_EVENTS,\n useGlobalCopyStore,\n useAppConfig,\n useCategoryStore,\n useTransactionStore,\n useWidgetLoadTimer,\n} from '../common'\n\nimport type { WidgetProps } from '../core'\n\nimport Spending from './components/Spending'\nimport { parseISO } from 'date-fns/parseISO'\n\ninterface RSpendingWidgetProps extends WidgetProps {\n onBackClick?: () => void\n}\n\nconst SpendingWidget: React.FC<RSpendingWidgetProps> = ({ onBackClick, onMenuClick, sx = {} }) => {\n const { isAccountDataLoaded, loadAccountData } = useAccountStore()\n const { categoriesLoaded, dateRangeTotalsLoaded, loadCategories, loadDateRangeCategoryTotals } =\n useCategoryStore()\n const { isTransactionDataLoaded, loadTransactionData } = useTransactionStore()\n const { spending: spendingCopy } = useGlobalCopyStore()\n const { displayedDateRange, isInitialized, setDisplayedDate, selectedAccounts } =\n useGlobalUiStore()\n const { onEvent } = useEvent()\n\n const { clientConfig } = useAppConfig()\n\n useWidgetLoadTimer({\n widgetName: 'SpendingWidget',\n isLoaded: dateRangeTotalsLoaded,\n })\n\n React.useEffect(() => {\n const dlp = clientConfig?.master?.deep_link_params\n\n const date_range = dlp?.date_range\n ? ([parseISO(dlp.date_range.from), parseISO(dlp.date_range.to)] as DateRange<Date>)\n : ([startOfMonth(startOfToday()), endOfMonth(startOfToday())] as DateRange<Date>)\n\n const startDate = date_range[0] as Date\n const endDate = date_range[1] as Date\n\n setDisplayedDate(startDate, endDate)\n\n if (!isAccountDataLoaded) {\n loadAccountData().finally()\n }\n if (!categoriesLoaded) {\n loadCategories().finally()\n }\n if (!isTransactionDataLoaded) {\n loadTransactionData().finally()\n }\n\n // Load with the dates we just computed rather than reading from the store,\n // which may still hold a stale range set by a previously visited widget.\n if (isInitialized && isAccountDataLoaded) {\n loadDateRangeCategoryTotals(selectedAccounts, startDate, endDate).finally()\n }\n\n onEvent(ANALYTICS_EVENTS.SPENDING_VIEW)\n }, [])\n\n React.useEffect(() => {\n if (isInitialized && isAccountDataLoaded) {\n loadDateRangeCategoryTotals(\n selectedAccounts,\n displayedDateRange.start,\n displayedDateRange.end,\n ).finally()\n }\n }, [displayedDateRange, isInitialized, isAccountDataLoaded, selectedAccounts])\n\n const handleDateChanged = (range: DateRange<Date>) => {\n setDisplayedDate(range[0] as Date, range[1] as Date)\n }\n\n if (!isInitialized || !isAccountDataLoaded || !dateRangeTotalsLoaded) {\n return <Loader />\n }\n\n return (\n <WidgetContainer\n calendarActions={{ onRangeChanged: handleDateChanged }}\n onAccountsFilterClick={() => onEvent(ANALYTICS_EVENTS.SPENDING_CLICK_FILTER)}\n onBackClick={onBackClick}\n onMenuClick={onMenuClick}\n sx={sx}\n title={spendingCopy.title}\n >\n <Box width=\"100%\">\n <Spending />\n </Box>\n </WidgetContainer>\n )\n}\n\nexport default observer(SpendingWidget)\n"],"names":["SpendingTabLabel","amount","label","variant","jsxs","Stack","jsx","Text","formatCurrency","MiniSpendingChart","theme","useTheme","goalsCopy","spendingCopy","useGlobalCopyStore","categories","dateRangeCategoryTotals","useCategoryStore","incomeColors","React","selectedId","setSelectedId","selectedTab","setSelectedTab","spendingData","getSpendingData","incomeData","getIncomeData","handleTabChange","_event","newValue","handleSelected","id","Box","Tabs","Tab","SpendingDonut","SpendingLegend","MiniSpendingChart$1","observer","SpendingMiniWidget","onPrimaryCtaClick","sx","isAccountDataLoaded","loadAccountData","useAccountStore","dateRangeTotalsLoaded","categoriesLoaded","loadCategories","loadDateRangeCategoryTotals","isInitialized","selectedAccounts","useGlobalUiStore","useWidgetLoadTimer","startOfMonth","endOfMonth","Loader","MiniWidgetContainer","SpendingMiniWidget_default","SpendingList","data","onSelected","title","selectedCategory","parent","Divider","List","item","ListItem","ListItemButton","Collapse","subItem","SpendingList$1","SpendingChart","onViewTransactions","isDesktop","isMobile","useScreenSize","dateRangeTotalsLoading","SpendingChart$1","getIncomeColors","Spending","is_mobile_webview","useAppConfig","clientConfig","transactionCopy","displayedDateRange","selectedAccountGuids","setFilter","transactions","sortedTransactionsWithSplits","tags","useTransactionStore","accountGuids","view","transactionGuid","setTransactionGuid","transactionsOpen","setTransactionsOpen","transaction","t","isSubcategory","handleSelectedSubcategory","handleViewTransactions","transactionFilter","other","c","ct","CategoryGuids","handleExportToCsv","exportTransactionsToCSV","Drawer","Button","Icon","TransactionList","TransactionDetails","Spending$1","SpendingWidget","onBackClick","onMenuClick","isTransactionDataLoaded","loadTransactionData","setDisplayedDate","onEvent","useEvent","dlp","date_range","parseISO","startOfToday","startDate","endDate","ANALYTICS_EVENTS","handleDateChanged","range","WidgetContainer","SpendingWidget_default"],"mappings":"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"}
|