@mx-cartographer/experiences 9.1.4-alpha.mm0 → 9.1.5

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.
@@ -1,4 +1,4 @@
1
- import { l as Y } from "../UserStore-DSnLgiGh.mjs";
1
+ import { l as Y } from "../UserStore-DApsX4aO.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";
@@ -1,4 +1,4 @@
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-DSnLgiGh.mjs";
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-DApsX4aO.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";
@@ -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, b] = c.useState(0), u = c.useMemo(
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 = (_, D) => {
56
- b(D), r("");
57
- }, f = (_) => {
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: f,
117
+ onSelected: _,
118
118
  selectedId: e,
119
119
  totalLabel: o.total_spending
120
120
  }
121
121
  ),
122
- /* @__PURE__ */ t(q, { data: u, onSelected: f, selectedId: e })
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: f,
139
+ onSelected: _,
140
140
  selectedId: e,
141
141
  totalLabel: o.total_income
142
142
  }
143
143
  ),
144
- /* @__PURE__ */ t(q, { data: h, onSelected: f, selectedId: e })
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: b, selectedAccounts: u } = P();
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]), b ? /* @__PURE__ */ t(
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
- ) : /* @__PURE__ */ t(pt, {});
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: b } = P(), {
325
+ } = A(), { displayedDateRange: s, selectedAccountGuids: f } = P(), {
326
326
  setFilter: u,
327
327
  sortedTransactions: h,
328
328
  sortedTransactionsWithSplits: M,
329
- tags: f
330
- } = dt(), _ = 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(
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: _ || b,
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: _ || b,
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, f);
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: b, loadTransactionData: u } = dt(), { spending: h } = A(), { displayedDateRange: M, isInitialized: f, setDisplayedDate: _, selectedAccounts: D } = P(), { onEvent: x } = yt(), { clientConfig: N } = H();
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
- _(W, O), a || i().finally(), g || r().finally(), b || u().finally(), f && s(D, W, O).finally(), x(nt.SPENDING_VIEW);
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
- f && s(
467
+ _ && a && s(
468
468
  D,
469
469
  M.start,
470
470
  M.end
471
471
  ).finally();
472
- }, [M, f, D]);
472
+ }, [M, _, a, D]);
473
473
  const v = (C) => {
474
- _(C[0], C[1]);
474
+ b(C[0], C[1]);
475
475
  };
476
- return f ? /* @__PURE__ */ t(
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
- ) : /* @__PURE__ */ t(pt, {});
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mx-cartographer/experiences",
3
- "version": "9.1.4-alpha.mm0",
3
+ "version": "9.1.5",
4
4
  "description": "Library containing experience widgets",
5
5
  "author": "MX",
6
6
  "license": "MIT",