@mx-cartographer/experiences 6.26.1-alpha.mega1 → 6.26.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/CHANGELOG.md +9 -5
  2. package/dist/categories/util/CategoryUtil.d.ts +2 -3
  3. package/dist/common/context/hooks.d.ts +13 -13
  4. package/dist/common/types/Category.d.ts +8 -2
  5. package/dist/common/types/index.d.ts +1 -1
  6. package/dist/help/components/content/section/index.d.ts +15 -15
  7. package/dist/index.d.ts +22 -0
  8. package/dist/index.es.js +29896 -0
  9. package/dist/index.es.js.map +1 -0
  10. package/dist/trends/components/CategoriesList.d.ts +5 -5
  11. package/dist/trends/components/CategoriesListItem.d.ts +4 -7
  12. package/dist/trends/components/CategoryDetailChart.d.ts +1 -5
  13. package/dist/trends/stores/TrendsStore.d.ts +16 -11
  14. package/package.json +3 -91
  15. package/dist/AccountStore-DkL93tXL.mjs +0 -317
  16. package/dist/AccountStore-DkL93tXL.mjs.map +0 -1
  17. package/dist/BudgetUtil-CVqAdv-j.mjs +0 -187
  18. package/dist/BudgetUtil-CVqAdv-j.mjs.map +0 -1
  19. package/dist/CashflowStore-gPEEBiXo.mjs +0 -53
  20. package/dist/CashflowStore-gPEEBiXo.mjs.map +0 -1
  21. package/dist/CategoryStore-m7oieLzP.mjs +0 -260
  22. package/dist/CategoryStore-m7oieLzP.mjs.map +0 -1
  23. package/dist/ConnectMiniWidget-CQWafYtQ.mjs +0 -22966
  24. package/dist/ConnectMiniWidget-CQWafYtQ.mjs.map +0 -1
  25. package/dist/DebtsStore-cUhIgJx6.mjs +0 -145
  26. package/dist/DebtsStore-cUhIgJx6.mjs.map +0 -1
  27. package/dist/Donut-CGNFni9y.mjs +0 -58
  28. package/dist/Donut-CGNFni9y.mjs.map +0 -1
  29. package/dist/FinstrongStore-BDG7l0nI.mjs +0 -183
  30. package/dist/FinstrongStore-BDG7l0nI.mjs.map +0 -1
  31. package/dist/GoalStore-o2waGeyf.mjs +0 -293
  32. package/dist/GoalStore-o2waGeyf.mjs.map +0 -1
  33. package/dist/Loader-CwdK8lfx.mjs +0 -147
  34. package/dist/Loader-CwdK8lfx.mjs.map +0 -1
  35. package/dist/MerchantStore-Cck9IGIH.mjs +0 -125
  36. package/dist/MerchantStore-Cck9IGIH.mjs.map +0 -1
  37. package/dist/NetWorthStore-D5eUfGQt.mjs +0 -66
  38. package/dist/NetWorthStore-D5eUfGQt.mjs.map +0 -1
  39. package/dist/NotificationStore-DCxw8W7u.mjs +0 -141
  40. package/dist/NotificationStore-DCxw8W7u.mjs.map +0 -1
  41. package/dist/RecurringTransactionsStore-Bijrgllq.mjs +0 -337
  42. package/dist/RecurringTransactionsStore-Bijrgllq.mjs.map +0 -1
  43. package/dist/SettingsStore-BhOYgUOa.mjs +0 -352
  44. package/dist/SettingsStore-BhOYgUOa.mjs.map +0 -1
  45. package/dist/TransactionApi-Dnbyi1JL.mjs +0 -175
  46. package/dist/TransactionApi-Dnbyi1JL.mjs.map +0 -1
  47. package/dist/TransactionStore-CiEtt5XJ.mjs +0 -417
  48. package/dist/TransactionStore-CiEtt5XJ.mjs.map +0 -1
  49. package/dist/TrendsStore-Idq3QfoA.mjs +0 -131
  50. package/dist/TrendsStore-Idq3QfoA.mjs.map +0 -1
  51. package/dist/accounts/index.es.js +0 -18
  52. package/dist/accounts/index.es.js.map +0 -1
  53. package/dist/analytics/index.es.js +0 -170
  54. package/dist/analytics/index.es.js.map +0 -1
  55. package/dist/budgets/index.es.js +0 -1116
  56. package/dist/budgets/index.es.js.map +0 -1
  57. package/dist/cashflow/index.es.js +0 -118
  58. package/dist/cashflow/index.es.js.map +0 -1
  59. package/dist/categories/index.es.js +0 -10
  60. package/dist/categories/index.es.js.map +0 -1
  61. package/dist/common/index.es.js +0 -1549
  62. package/dist/common/index.es.js.map +0 -1
  63. package/dist/dashboard/index.es.js +0 -257
  64. package/dist/dashboard/index.es.js.map +0 -1
  65. package/dist/debts/index.es.js +0 -9
  66. package/dist/debts/index.es.js.map +0 -1
  67. package/dist/finstrong/index.es.js +0 -11
  68. package/dist/finstrong/index.es.js.map +0 -1
  69. package/dist/goals/index.es.js +0 -9
  70. package/dist/goals/index.es.js.map +0 -1
  71. package/dist/help/index.es.js +0 -6
  72. package/dist/help/index.es.js.map +0 -1
  73. package/dist/investments/index.es.js +0 -1694
  74. package/dist/investments/index.es.js.map +0 -1
  75. package/dist/merchants/index.es.js +0 -7
  76. package/dist/merchants/index.es.js.map +0 -1
  77. package/dist/microinsights/index.es.js +0 -21
  78. package/dist/microinsights/index.es.js.map +0 -1
  79. package/dist/networth/index.es.js +0 -11
  80. package/dist/networth/index.es.js.map +0 -1
  81. package/dist/notifications/index.es.js +0 -116
  82. package/dist/notifications/index.es.js.map +0 -1
  83. package/dist/recurringtransactions/index.es.js +0 -14
  84. package/dist/recurringtransactions/index.es.js.map +0 -1
  85. package/dist/settings/index.es.js +0 -112
  86. package/dist/settings/index.es.js.map +0 -1
  87. package/dist/spending/index.es.js +0 -632
  88. package/dist/spending/index.es.js.map +0 -1
  89. package/dist/transactions/index.es.js +0 -19
  90. package/dist/transactions/index.es.js.map +0 -1
  91. package/dist/trends/index.es.js +0 -10
  92. package/dist/trends/index.es.js.map +0 -1
@@ -1,8 +1,8 @@
1
- import { DetailedCategory } from '../../common';
1
+ import { default as React } from 'react';
2
+ import { CategoryListItem, Transaction } from '../../common';
2
3
  interface CategoriesListProps {
3
- onCategoryClick: (data: DetailedCategory) => void;
4
+ onListItemClick: (data: CategoryListItem) => void;
5
+ transactions: Transaction[];
4
6
  }
5
- declare const CategoriesList: (({ onCategoryClick }: CategoriesListProps) => import("react/jsx-runtime").JSX.Element) & {
6
- displayName: string;
7
- };
7
+ declare const CategoriesList: React.FC<CategoriesListProps>;
8
8
  export default CategoriesList;
@@ -1,10 +1,7 @@
1
- import { DetailedCategory } from '../../common';
2
- interface CategoriesListItemProps extends DetailedCategory {
1
+ import { default as React } from 'react';
2
+ import { CategoryListItem } from '../../common';
3
+ interface CategoriesListItemProps extends CategoryListItem {
3
4
  onClick?: () => void;
4
- isLastItem?: boolean;
5
- showDivider?: boolean;
6
5
  }
7
- declare const CategoriesListItem: (({ totalAmount, guid, name, transactions, onClick, isLastItem, showDivider, }: CategoriesListItemProps) => import("react/jsx-runtime").JSX.Element) & {
8
- displayName: string;
9
- };
6
+ declare const CategoriesListItem: React.FC<CategoriesListItemProps>;
10
7
  export default CategoriesListItem;
@@ -1,8 +1,4 @@
1
- interface CategoryDetailChartProps {
2
- chartColor: string;
3
- chartLabel: string;
4
- }
5
- declare const CategoryDetailChart: (({ chartLabel, chartColor }: CategoryDetailChartProps) => import("react/jsx-runtime").JSX.Element) & {
1
+ declare const CategoryDetailChart: (() => import("react/jsx-runtime").JSX.Element) & {
6
2
  displayName: string;
7
3
  };
8
4
  export default CategoryDetailChart;
@@ -1,18 +1,23 @@
1
- import { DateRange, DetailedCategory, GlobalStore } from '../../common';
2
- import { LineChartDataset } from '../../common/components/charts/LineChart';
1
+ import { CategoryListItem, DateRange, DetailedCategory, GlobalStore } from '../../common';
3
2
  export declare class TrendsStore {
4
3
  globalStore: GlobalStore;
5
- selectedCategoryData: DetailedCategory | null;
4
+ selectedCategoryData: CategoryListItem | null;
6
5
  selectedDateRange: DateRange;
7
6
  constructor(globalStore: GlobalStore);
8
- setSelectedCategoryData: (category: DetailedCategory | null) => void;
7
+ setSelectedCategoryData: (category: CategoryListItem | null) => void;
9
8
  setSelectedDateRange: (dateRange: DateRange) => void;
9
+ sortCategoriesList: () => {
10
+ guid: string;
11
+ name: string;
12
+ amount: number;
13
+ }[];
14
+ get detailedCategories(): DetailedCategory[];
10
15
  get selectedDateRangeMonthRange(): string;
11
- get selectedDateRangeMonthCount(): number;
12
- get sortedDetailedCategories(): DetailedCategory[];
13
- get visibleCategories(): DetailedCategory[];
14
- get collapsedCategories(): DetailedCategory[];
15
- get categoryDetailsChartData(): {
16
- monthlyAmounts: LineChartDataset;
17
- };
16
+ get sortedCategoriesList(): CategoryListItem[];
17
+ get visibleListItems(): CategoryListItem[];
18
+ get collapsedListItems(): CategoryListItem[];
19
+ get categoryDetailsChartData(): Array<Array<{
20
+ x: string;
21
+ y: number;
22
+ }>>;
18
23
  }
package/package.json CHANGED
@@ -1,99 +1,11 @@
1
1
  {
2
2
  "name": "@mx-cartographer/experiences",
3
- "version": "6.26.1-alpha.mega1",
3
+ "version": "6.26.1",
4
4
  "description": "Library containing experience widgets",
5
+ "main": "dist/index.es.js",
6
+ "types": "dist/index.d.ts",
5
7
  "author": "MX",
6
8
  "license": "MIT",
7
- "exports": {
8
- "./accounts": {
9
- "types": "./dist/accounts/index.d.ts",
10
- "import": "./dist/accounts/index.es.js"
11
- },
12
- "./analytics": {
13
- "types": "./dist/analytics/index.d.ts",
14
- "import": "./dist/analytics/index.es.js"
15
- },
16
- "./budgets": {
17
- "types": "./dist/budgets/index.d.ts",
18
- "import": "./dist/budgets/index.es.js"
19
- },
20
- "./cashflow": {
21
- "types": "./dist/cashflow/index.d.ts",
22
- "import": "./dist/cashflow/index.es.js"
23
- },
24
- "./categories": {
25
- "types": "./dist/categories/index.d.ts",
26
- "import": "./dist/categories/index.es.js"
27
- },
28
- "./common": {
29
- "types": "./dist/common/index.d.ts",
30
- "import": "./dist/common/index.es.js"
31
- },
32
- "./dashboard": {
33
- "types": "./dist/dashboard/index.d.ts",
34
- "import": "./dist/dashboard/index.es.js"
35
- },
36
- "./debts": {
37
- "types": "./dist/debts/index.d.ts",
38
- "import": "./dist/debts/index.es.js"
39
- },
40
- "./finstrong": {
41
- "types": "./dist/finstrong/index.d.ts",
42
- "import": "./dist/finstrong/index.es.js"
43
- },
44
- "./goals": {
45
- "types": "./dist/goals/index.d.ts",
46
- "import": "./dist/goals/index.es.js"
47
- },
48
- "./help": {
49
- "types": "./dist/help/index.d.ts",
50
- "import": "./dist/help/index.es.js"
51
- },
52
- "./insights": {
53
- "types": "./dist/insights/index.d.ts",
54
- "import": "./dist/insights/index.es.js"
55
- },
56
- "./investments": {
57
- "types": "./dist/investments/index.d.ts",
58
- "import": "./dist/investments/index.es.js"
59
- },
60
- "./merchants": {
61
- "types": "./dist/merchants/index.d.ts",
62
- "import": "./dist/merchants/index.es.js"
63
- },
64
- "./microinsights": {
65
- "types": "./dist/microinsights/index.d.ts",
66
- "import": "./dist/microinsights/index.es.js"
67
- },
68
- "./networth": {
69
- "types": "./dist/networth/index.d.ts",
70
- "import": "./dist/networth/index.es.js"
71
- },
72
- "./notifications": {
73
- "types": "./dist/notifications/index.d.ts",
74
- "import": "./dist/notifications/index.es.js"
75
- },
76
- "./recurringtransactions": {
77
- "types": "./dist/recurringtransactions/index.d.ts",
78
- "import": "./dist/recurringtransactions/index.es.js"
79
- },
80
- "./settings": {
81
- "types": "./dist/settings/index.d.ts",
82
- "import": "./dist/settings/index.es.js"
83
- },
84
- "./spending": {
85
- "types": "./dist/spending/index.d.ts",
86
- "import": "./dist/spending/index.es.js"
87
- },
88
- "./transactions": {
89
- "types": "./dist/transactions/index.d.ts",
90
- "import": "./dist/transactions/index.es.js"
91
- },
92
- "./trends": {
93
- "types": "./dist/trends/index.d.ts",
94
- "import": "./dist/trends/index.es.js"
95
- }
96
- },
97
9
  "publishConfig": {
98
10
  "access": "public"
99
11
  },
@@ -1,317 +0,0 @@
1
- import { makeAutoObservable as d, runInAction as a } from "mobx";
2
- import "bowser";
3
- import "date-fns/getUnixTime";
4
- import "date-fns/intlFormat";
5
- import { ae as l, af as n, aS as s, aT as u, aU as _, aV as A, aW as g } from "./ConnectMiniWidget-CQWafYtQ.mjs";
6
- import "date-fns/addMonths";
7
- import "date-fns/addQuarters";
8
- import "date-fns/addWeeks";
9
- import "date-fns/addYears";
10
- import "date-fns/getDay";
11
- import "date-fns/isBefore";
12
- import "date-fns/nextDay";
13
- import "date-fns/setDate";
14
- import "date-fns/startOfToday";
15
- import "date-fns/fromUnixTime";
16
- import "react";
17
- import "numeral";
18
- import "@mui/material";
19
- import "react/jsx-runtime";
20
- import "@mui/material/Button";
21
- import "@mxenabled/mxui";
22
- import "@mui/material/Tooltip";
23
- import "@mui/material/Box";
24
- import "@mui/material/IconButton";
25
- import "./Loader-CwdK8lfx.mjs";
26
- import "@mui/material/styles/useTheme";
27
- import "@mui/material/useMediaQuery";
28
- import "@mxenabled/cssinjs";
29
- import "date-fns/addDays";
30
- import "date-fns/eachDayOfInterval";
31
- import "date-fns/eachWeekOfInterval";
32
- import "date-fns/endOfMonth";
33
- import "date-fns/format";
34
- import "date-fns/isSameMonth";
35
- import "date-fns/startOfMonth";
36
- import "date-fns/subMonths";
37
- import "@mui/material/Paper";
38
- import "@mxenabled/mx-icons";
39
- import "date-fns/isSameDay";
40
- import "date-fns/isWithinInterval";
41
- import "d3";
42
- import "@mui/material/styles";
43
- import "@mui/x-charts";
44
- import "@mui/x-charts/ChartsTooltip";
45
- import "@mui/material/Stack";
46
- import "date-fns/differenceInCalendarDays";
47
- import "date-fns/endOfToday";
48
- import "date-fns/endOfYear";
49
- import "date-fns/startOfYear";
50
- import "date-fns/subDays";
51
- import "date-fns/subYears";
52
- import "@mui/material/ButtonGroup";
53
- import "@mui/material/Tab";
54
- import "@mui/material/Tabs";
55
- import "@mui/material/ToggleButton";
56
- import "@mui/material/ToggleButtonGroup";
57
- import "@mui/material/Dialog";
58
- import "@mui/material/DialogContent";
59
- import "@mui/material/Card";
60
- import "@mui/material/CardContent";
61
- import "@mui/material/CardHeader";
62
- import "uuid";
63
- import "@mui/material/CircularProgress";
64
- import "@mui/material/FormControlLabel";
65
- import "@mui/material/Radio";
66
- import "@mui/material/Avatar";
67
- import "@mui/material/ListItem";
68
- import "@mui/material/ListItemAvatar";
69
- import "@mui/material/ListItemButton";
70
- import "@mui/material/ListItemText";
71
- import "@mui/material/ListItemIcon";
72
- import "@mui/material/MenuItem";
73
- import "@mui/material/TextField";
74
- import "@mui/material/Switch";
75
- import "posthog-js";
76
- import "date-fns/differenceInDays";
77
- import "@mui/x-data-grid-pro";
78
- import "date-fns";
79
- import "@mui/material/Divider";
80
- import "@mui/material/List";
81
- import "date-fns/formatISO";
82
- import "date-fns/isAfter";
83
- import "date-fns/parseISO";
84
- import "date-fns/subQuarters";
85
- import "date-fns/lastDayOfMonth";
86
- import "date-fns/setDayOfYear";
87
- import "date-fns/addSeconds";
88
- import "date-fns/differenceInCalendarMonths";
89
- import "date-fns/getMonth";
90
- class p {
91
- fetchInstance;
92
- constructor(t, e) {
93
- this.fetchInstance = new l(t, e);
94
- }
95
- createAccount = async (t) => this.fetchInstance.post(n.ACCOUNTS, t).then((e) => e.account).catch((e) => e);
96
- deleteAccount = async (t) => this.fetchInstance.delete(`${n.ACCOUNTS}/${t}`).catch((e) => e);
97
- getAccounts = async () => this.fetchInstance.get(n.ACCOUNTS).then((t) => t.accounts).catch((t) => t);
98
- getInstitutions = async () => this.fetchInstance.get(n.INSTITUTIONS).then((t) => t).catch((t) => t);
99
- getMembers = async () => this.fetchInstance.get(n.MEMBERS).then((t) => t.members).catch((t) => t);
100
- getMonthlyAccountBalances = async (t) => this.fetchInstance.get(`${n.ACCOUNTS}/${t}/monthly_account_balances`).then((e) => e.monthly_account_balances).catch((e) => e);
101
- mergeAccounts = async (t) => this.fetchInstance.put(`${n.ACCOUNTS}/merge`, { accounts: t }).then((e) => e).catch((e) => e);
102
- refreshAllMembers = async () => this.fetchInstance.get(`${n.MEMBERS}/refresh_all`).then((t) => t).catch((t) => t);
103
- updateAccount = async (t) => this.fetchInstance.put(`${n.ACCOUNTS}/${t.guid}`, t).then((e) => e.account).catch((e) => e);
104
- }
105
- class f {
106
- isLoading = !1;
107
- selectedAccount = {};
108
- selectedMember = {};
109
- constructor() {
110
- d(this);
111
- }
112
- setIsLoading = (t) => this.isLoading = t;
113
- setSelectedAccount = (t) => this.selectedAccount = t;
114
- setSelectedMember = (t) => this.selectedMember = t;
115
- }
116
- class te {
117
- globalStore;
118
- api = new p("/", "");
119
- accounts = [];
120
- institutions = [];
121
- members = [];
122
- uiStore;
123
- constructor(t) {
124
- this.globalStore = t, this.uiStore = new f(), this.api = new p(t.endpoint, t.sessionToken), d(this);
125
- }
126
- loadAccountData = async ({
127
- accounts: t,
128
- institutions: e
129
- } = {}) => {
130
- await Promise.all([this.loadAccounts(t), this.loadInstitutions(e)]);
131
- };
132
- get cashAccounts() {
133
- return this.accounts.filter(
134
- (t) => t.account_type === s.CASH || t.account_type === s.CHECKING || t.account_type === s.PREPAID || t.account_type === s.SAVINGS || t.account_type === s.CHECKING_LINE_OF_CREDIT
135
- );
136
- }
137
- get cashBalance() {
138
- return this.cashAccounts.reduce((t, e) => t + (e?.balance || 0), 0);
139
- }
140
- get checkingAccounts() {
141
- return this.accounts.filter((t) => t.account_type === s.CHECKING);
142
- }
143
- get debtAccounts() {
144
- return this.accounts.filter(
145
- (t) => t.account_type === s.CREDIT_CARD || t.account_type === s.LOAN || t.account_type === s.MORTGAGE || t.account_type === s.LINE_OF_CREDIT || t.account_type === s.CHECKING_LINE_OF_CREDIT
146
- );
147
- }
148
- get finstrongAccounts() {
149
- const t = /* @__PURE__ */ new Set([
150
- s.CHECKING,
151
- s.SAVINGS,
152
- s.CREDIT_CARD,
153
- s.INVESTMENT
154
- ]);
155
- return this.accounts.filter((e) => t.has(e.account_type));
156
- }
157
- get investmentAccounts() {
158
- return this.accounts.filter(
159
- (t) => t.account_type === s.INVESTMENT
160
- );
161
- }
162
- get savingsAccounts() {
163
- return this.accounts.filter((t) => t.account_type === s.SAVINGS);
164
- }
165
- get visibleAccounts() {
166
- return this.accounts.filter((t) => !t.is_hidden);
167
- }
168
- get visibleCashAccounts() {
169
- return this.cashAccounts.filter((t) => !t.is_hidden);
170
- }
171
- get visibleCashBalance() {
172
- return this.visibleCashAccounts.reduce((t, e) => t + (e?.balance || 0), 0);
173
- }
174
- get visibleCheckingAccounts() {
175
- return this.checkingAccounts.filter((t) => !t.is_hidden);
176
- }
177
- get visibleDebtAccounts() {
178
- return this.debtAccounts.filter((t) => !t.is_hidden);
179
- }
180
- get visibleFinstrongAccounts() {
181
- return this.finstrongAccounts.filter(
182
- (t) => !(t.is_closed || t.is_deleted || t.is_hidden)
183
- );
184
- }
185
- get visibleInvestmentAccounts() {
186
- return this.investmentAccounts.filter((t) => !t.is_hidden);
187
- }
188
- get visibleSavingsAccounts() {
189
- return this.savingsAccounts.filter((t) => !t.is_hidden);
190
- }
191
- addAccount = async (t) => {
192
- try {
193
- const e = await this.api.createAccount(t);
194
- a(() => {
195
- this.accounts = [...this.accounts, e];
196
- });
197
- } catch (e) {
198
- console.error(`Error occurred while adding an account: ${e}`);
199
- }
200
- };
201
- augmentAccounts = (t = this.accounts) => {
202
- const e = [];
203
- return t.forEach((c) => {
204
- const r = this.members.findIndex(
205
- (o) => o.guid === c.member_guid
206
- );
207
- if (r > -1) {
208
- let o = u.Connected;
209
- const i = this.members[r];
210
- _.includes(i.connection_status) ? o = u.Error : A.includes(i.connection_status) ? o = u.Processing : g.includes(i.connection_status) && (o = u.RequiresMfa);
211
- let m = c.user_name || c.feed_name || "";
212
- c.account_number && (m = `${m} *${c.account_number}`), e.push({
213
- ...c,
214
- institutionName: m,
215
- memberName: i.name,
216
- connectionStatus: o
217
- }), this.members[r].connectionStatus = o;
218
- }
219
- }), e;
220
- };
221
- loadAccounts = async (t) => {
222
- await this.loadMembers();
223
- try {
224
- const e = t || await this.api.getAccounts();
225
- a(() => {
226
- this.accounts = this.sortAccounts(this.augmentAccounts(e));
227
- });
228
- } catch (e) {
229
- console.error(`Error occurred while loading accounts: ${e}`);
230
- }
231
- };
232
- loadInstitutions = async (t) => {
233
- try {
234
- const e = t || await this.api.getInstitutions();
235
- a(() => {
236
- this.institutions = e;
237
- });
238
- } catch (e) {
239
- console.error(`Error occurred while loading institutions: ${e}`);
240
- }
241
- };
242
- loadMembers = async () => {
243
- try {
244
- const t = await this.api.getMembers();
245
- a(() => {
246
- this.members = t;
247
- });
248
- } catch (t) {
249
- console.error(`Error occurred while loading members: ${t}`);
250
- }
251
- };
252
- mergeAccounts = async (t) => {
253
- try {
254
- const e = await this.api.mergeAccounts(t), c = e[Object.keys(e)[0]];
255
- a(() => {
256
- const r = this.accounts.findIndex((i) => i.guid === t[1]);
257
- this.accounts.splice(r, 1);
258
- const o = this.accounts.findIndex((i) => i.guid === t[0]);
259
- this.accounts.splice(o, 1, c);
260
- });
261
- } catch (e) {
262
- console.error(`Error occurred while merging accounts: ${e}`);
263
- }
264
- };
265
- sortAccounts = (t = this.accounts) => t.sort((e, c) => e.account_type > c.account_type ? 1 : e.account_type < c.account_type ? -1 : (e.name || "") > (c.name || "") ? 1 : (e.name || "") < (c.name || "") ? -1 : 0);
266
- refreshAccounts = async () => {
267
- this.uiStore.setIsLoading(!0), await Promise.all([this.loadAccounts(), this.loadInstitutions()]), this.uiStore.setIsLoading(!1);
268
- };
269
- refreshMembers = async () => {
270
- try {
271
- await this.api.refreshAllMembers(), await this.loadMembers();
272
- } catch (t) {
273
- console.error(`Error occurredwhile refreshing members: ${t}`);
274
- }
275
- };
276
- removeAccount = async (t) => {
277
- try {
278
- await this.api.deleteAccount(t), a(() => {
279
- const e = this.accounts.findIndex((c) => c.guid === t);
280
- this.accounts.splice(e, 1);
281
- });
282
- } catch (e) {
283
- console.error(`Error occurred while removing an account: ${e}`);
284
- }
285
- };
286
- updateAccount = async (t) => {
287
- try {
288
- const e = await this.api.updateAccount(t);
289
- a(() => {
290
- const c = this.accounts.findIndex(
291
- (r) => r.guid === e.guid
292
- );
293
- this.accounts.splice(c, 1, e), this.accounts = this.augmentAccounts(this.accounts);
294
- });
295
- } catch (e) {
296
- console.error(`Error occurred while updating account: ${e}`);
297
- }
298
- };
299
- updateAccountFiltering = async (t, e) => {
300
- for (const c of t) {
301
- const r = this.accounts.find((o) => o.guid === c);
302
- if (r) {
303
- r.is_excluded_from_accounts = e, r.is_excluded_from_budgets = e, r.is_excluded_from_cash_flow = e, r.is_excluded_from_debts = e, r.is_excluded_from_goals = e, r.is_excluded_from_investments = e, r.is_excluded_from_net_worth = e, r.is_excluded_from_spending = e, r.is_excluded_from_transactions = e, r.is_excluded_from_trends = e;
304
- try {
305
- this.updateAccount(r);
306
- } catch (o) {
307
- console.error(`Failed to update account ${c} (added):`, o);
308
- }
309
- }
310
- }
311
- };
312
- }
313
- export {
314
- p as A,
315
- te as a
316
- };
317
- //# sourceMappingURL=AccountStore-DkL93tXL.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AccountStore-DkL93tXL.mjs","sources":["../src/accounts/api/AccountApi.ts","../src/accounts/stores/UiStore.ts","../src/accounts/stores/AccountStore.ts"],"sourcesContent":["import Fetch from '../../common/utils/Fetch'\n\nimport { ApiEndpoints } from '../../common/constants'\nimport type { Account } from '../../common'\n\nexport class AccountApi {\n fetchInstance: Fetch\n\n constructor(endpoint: string, token: string) {\n this.fetchInstance = new Fetch(endpoint, token)\n }\n\n createAccount = async (account: Account) => {\n return this.fetchInstance\n .post(ApiEndpoints.ACCOUNTS, account)\n .then((data) => data.account)\n .catch((error) => error)\n }\n\n deleteAccount = async (accountGuid: string) => {\n return this.fetchInstance\n .delete(`${ApiEndpoints.ACCOUNTS}/${accountGuid}`)\n .catch((error) => error)\n }\n\n getAccounts = async () => {\n return this.fetchInstance\n .get(ApiEndpoints.ACCOUNTS)\n .then((data) => data.accounts)\n .catch((error) => error)\n }\n\n getInstitutions = async () => {\n return this.fetchInstance\n .get(ApiEndpoints.INSTITUTIONS)\n .then((data) => data)\n .catch((error) => error)\n }\n\n getMembers = async () => {\n return this.fetchInstance\n .get(ApiEndpoints.MEMBERS)\n .then((data) => data.members)\n .catch((error) => error)\n }\n\n getMonthlyAccountBalances = async (guid: string) => {\n return this.fetchInstance\n .get(`${ApiEndpoints.ACCOUNTS}/${guid}/monthly_account_balances`)\n .then((data) => data.monthly_account_balances)\n .catch((error) => error)\n }\n\n mergeAccounts = async (accountGuids: string[]) => {\n return this.fetchInstance\n .put(`${ApiEndpoints.ACCOUNTS}/merge`, { accounts: accountGuids })\n .then((data) => data)\n .catch((error) => error)\n }\n\n refreshAllMembers = async () => {\n return this.fetchInstance\n .get(`${ApiEndpoints.MEMBERS}/refresh_all`)\n .then((data) => data)\n .catch((error) => error)\n }\n\n updateAccount = async (account: Account) => {\n return this.fetchInstance\n .put(`${ApiEndpoints.ACCOUNTS}/${account.guid}`, account)\n .then((data) => data.account)\n .catch((error) => error)\n }\n}\n","import { makeAutoObservable } from 'mobx'\nimport { Account, Member } from '../../common'\n\nexport class UiStore {\n isLoading = false\n\n selectedAccount: Account = {} as Account\n selectedMember: Member = {} as Member\n\n constructor() {\n makeAutoObservable(this)\n }\n\n setIsLoading = (isLoading: boolean) => (this.isLoading = isLoading)\n\n setSelectedAccount = (account: Account) => (this.selectedAccount = account)\n setSelectedMember = (member: Member) => (this.selectedMember = member)\n}\n","import { makeAutoObservable, runInAction } from 'mobx'\n\nimport {\n AccountType,\n ErrorStatuses,\n MfaStatuses,\n ConnectionStatus,\n ProcessingStatuses,\n} from '../../common'\n\nimport type { Account, GlobalStore, Institution, Member } from '../../common'\n\nimport { AccountApi } from '../api/AccountApi'\nimport { UiStore } from './UiStore'\n\nexport class AccountStore {\n globalStore: GlobalStore\n api: AccountApi = new AccountApi('/', '')\n\n accounts: Account[] = []\n institutions: Institution[] = []\n members: Member[] = []\n uiStore: UiStore\n\n constructor(globalStore: GlobalStore) {\n this.globalStore = globalStore\n this.uiStore = new UiStore()\n this.api = new AccountApi(globalStore.endpoint, globalStore.sessionToken)\n\n makeAutoObservable(this)\n }\n\n loadAccountData = async ({\n accounts,\n institutions,\n }: {\n accounts?: Account[]\n institutions?: Institution[]\n } = {}) => {\n await Promise.all([this.loadAccounts(accounts), this.loadInstitutions(institutions)])\n }\n\n get cashAccounts(): Account[] {\n return this.accounts.filter(\n (account: Account) =>\n account.account_type === AccountType.CASH ||\n account.account_type === AccountType.CHECKING ||\n account.account_type === AccountType.PREPAID ||\n account.account_type === AccountType.SAVINGS ||\n account.account_type === AccountType.CHECKING_LINE_OF_CREDIT,\n )\n }\n\n get cashBalance(): number {\n return this.cashAccounts.reduce((total, account) => total + (account?.balance || 0), 0)\n }\n\n get checkingAccounts(): Account[] {\n return this.accounts.filter((a: Account) => a.account_type === AccountType.CHECKING)\n }\n\n get debtAccounts(): Account[] {\n return this.accounts.filter(\n (account: Account) =>\n account.account_type === AccountType.CREDIT_CARD ||\n account.account_type === AccountType.LOAN ||\n account.account_type === AccountType.MORTGAGE ||\n account.account_type === AccountType.LINE_OF_CREDIT ||\n account.account_type === AccountType.CHECKING_LINE_OF_CREDIT,\n )\n }\n\n get finstrongAccounts(): Account[] {\n const eligibleTypes = new Set([\n AccountType.CHECKING,\n AccountType.SAVINGS,\n AccountType.CREDIT_CARD,\n AccountType.INVESTMENT,\n ])\n\n return this.accounts.filter((account) => eligibleTypes.has(account.account_type))\n }\n\n get investmentAccounts(): Account[] {\n return this.accounts.filter(\n (account: Account) => account.account_type === AccountType.INVESTMENT,\n )\n }\n\n get savingsAccounts(): Account[] {\n return this.accounts.filter((a: Account) => a.account_type === AccountType.SAVINGS)\n }\n\n get visibleAccounts(): Account[] {\n return this.accounts.filter((a: Account) => !a.is_hidden)\n }\n\n get visibleCashAccounts(): Account[] {\n return this.cashAccounts.filter((account: Account) => !account.is_hidden)\n }\n\n get visibleCashBalance(): number {\n return this.visibleCashAccounts.reduce((total, account) => total + (account?.balance || 0), 0)\n }\n\n get visibleCheckingAccounts(): Account[] {\n return this.checkingAccounts.filter((account: Account) => !account.is_hidden)\n }\n\n get visibleDebtAccounts(): Account[] {\n return this.debtAccounts.filter((account: Account) => !account.is_hidden)\n }\n\n get visibleFinstrongAccounts(): Account[] {\n return this.finstrongAccounts.filter(\n (account: Account) => !(account.is_closed || account.is_deleted || account.is_hidden),\n )\n }\n\n get visibleInvestmentAccounts(): Account[] {\n return this.investmentAccounts.filter((account: Account) => !account.is_hidden)\n }\n\n get visibleSavingsAccounts(): Account[] {\n return this.savingsAccounts.filter((account: Account) => !account.is_hidden)\n }\n\n addAccount = async (account: Account) => {\n try {\n const newAccount = await this.api.createAccount(account)\n\n runInAction(() => {\n this.accounts = [...this.accounts, newAccount]\n })\n } catch (error) {\n console.error(`Error occurred while adding an account: ${error}`)\n }\n }\n\n augmentAccounts = (accounts: Account[] = this.accounts) => {\n const augmentedAccounts: Account[] = []\n\n accounts.forEach((account: Account) => {\n const memberLocation = this.members.findIndex(\n (member: Member) => member.guid === account.member_guid,\n )\n if (memberLocation > -1) {\n let connectionStatus = ConnectionStatus.Connected\n const member = this.members[memberLocation]\n if (ErrorStatuses.includes(member.connection_status)) {\n connectionStatus = ConnectionStatus.Error\n } else if (ProcessingStatuses.includes(member.connection_status)) {\n connectionStatus = ConnectionStatus.Processing\n } else if (MfaStatuses.includes(member.connection_status)) {\n connectionStatus = ConnectionStatus.RequiresMfa\n }\n\n let institutionName = account.user_name || account.feed_name || ''\n if (account.account_number) {\n institutionName = `${institutionName} *${account.account_number}`\n }\n\n augmentedAccounts.push({\n ...account,\n institutionName,\n memberName: member.name,\n connectionStatus,\n })\n\n this.members[memberLocation].connectionStatus = connectionStatus\n }\n })\n\n return augmentedAccounts\n }\n\n loadAccounts = async (accountsOverride?: Account[]) => {\n await this.loadMembers()\n\n try {\n const accounts = accountsOverride || (await this.api.getAccounts())\n\n runInAction(() => {\n this.accounts = this.sortAccounts(this.augmentAccounts(accounts))\n })\n } catch (error) {\n console.error(`Error occurred while loading accounts: ${error}`)\n }\n }\n\n loadInstitutions = async (institutionsOverride?: Institution[]) => {\n try {\n const institutions = institutionsOverride || (await this.api.getInstitutions())\n\n runInAction(() => {\n this.institutions = institutions\n })\n } catch (error) {\n console.error(`Error occurred while loading institutions: ${error}`)\n }\n }\n\n loadMembers = async () => {\n try {\n const members = await this.api.getMembers()\n\n runInAction(() => {\n this.members = members\n })\n } catch (error) {\n console.error(`Error occurred while loading members: ${error}`)\n }\n }\n\n mergeAccounts = async (accountGuids: string[]) => {\n try {\n const response = await this.api.mergeAccounts(accountGuids)\n // the response from the api is a funky database key here, so this is essentially just getting the first item in the returned object\n // to prevent making multiple api calls here\n const mergedAccount = response[Object.keys(response)[0]]\n\n runInAction(() => {\n const account2Index = this.accounts.findIndex((account) => account.guid === accountGuids[1])\n this.accounts.splice(account2Index, 1)\n\n const account1Index = this.accounts.findIndex((account) => account.guid === accountGuids[0])\n this.accounts.splice(account1Index, 1, mergedAccount)\n })\n } catch (error) {\n console.error(`Error occurred while merging accounts: ${error}`)\n }\n }\n\n sortAccounts = (accounts: Account[] = this.accounts) => {\n return accounts.sort((a: Account, b: Account) => {\n // orders by account type descending (Checking -> Savings -> Credit card)\n if (a.account_type > b.account_type) return 1\n if (a.account_type < b.account_type) return -1\n // orders by name (Emergency Savings -> Health Savings -> Rainy Day Savings)\n if ((a.name || '') > (b.name || '')) return 1\n if ((a.name || '') < (b.name || '')) return -1\n return 0\n })\n }\n\n refreshAccounts = async () => {\n this.uiStore.setIsLoading(true)\n await Promise.all([this.loadAccounts(), this.loadInstitutions()])\n this.uiStore.setIsLoading(false)\n }\n\n refreshMembers = async () => {\n try {\n await this.api.refreshAllMembers()\n await this.loadMembers()\n } catch (error) {\n console.error(`Error occurredwhile refreshing members: ${error}`)\n }\n }\n\n removeAccount = async (accountGuid: string) => {\n try {\n await this.api.deleteAccount(accountGuid)\n\n runInAction(() => {\n const deletedIndex = this.accounts.findIndex((account) => account.guid === accountGuid)\n this.accounts.splice(deletedIndex, 1)\n })\n } catch (error) {\n console.error(`Error occurred while removing an account: ${error}`)\n }\n }\n\n updateAccount = async (account: Account) => {\n try {\n const updatedAccount = await this.api.updateAccount(account)\n\n runInAction(() => {\n const updatedAccountIndex = this.accounts.findIndex(\n (account) => account.guid === updatedAccount.guid,\n )\n\n this.accounts.splice(updatedAccountIndex, 1, updatedAccount)\n\n this.accounts = this.augmentAccounts(this.accounts)\n })\n } catch (error) {\n console.error(`Error occurred while updating account: ${error}`)\n }\n }\n\n updateAccountFiltering = async (guids: string[], isExcluded: boolean) => {\n for (const guid of guids) {\n const account = this.accounts.find((acc) => acc.guid === guid)\n\n if (account) {\n account.is_excluded_from_accounts = isExcluded\n account.is_excluded_from_budgets = isExcluded\n account.is_excluded_from_cash_flow = isExcluded\n account.is_excluded_from_debts = isExcluded\n account.is_excluded_from_goals = isExcluded\n account.is_excluded_from_investments = isExcluded\n account.is_excluded_from_net_worth = isExcluded\n account.is_excluded_from_spending = isExcluded\n account.is_excluded_from_transactions = isExcluded\n account.is_excluded_from_trends = isExcluded\n\n try {\n this.updateAccount(account)\n } catch (error) {\n console.error(`Failed to update account ${guid} (added):`, error)\n }\n }\n }\n }\n}\n"],"names":["AccountApi","endpoint","token","Fetch","account","ApiEndpoints","data","error","accountGuid","guid","accountGuids","UiStore","makeAutoObservable","isLoading","member","AccountStore","globalStore","accounts","institutions","AccountType","total","a","eligibleTypes","newAccount","runInAction","augmentedAccounts","memberLocation","connectionStatus","ConnectionStatus","ErrorStatuses","ProcessingStatuses","MfaStatuses","institutionName","accountsOverride","institutionsOverride","members","response","mergedAccount","account2Index","account1Index","b","deletedIndex","updatedAccount","updatedAccountIndex","guids","isExcluded","acc"],"mappings":"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"}