@mx-cartographer/experiences 4.0.14-alpha.JB0 → 4.0.14-alpha.JB2

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 (75) hide show
  1. package/dist/AccountStore-B23-oV1B.mjs +244 -0
  2. package/dist/AccountStore-B23-oV1B.mjs.map +1 -0
  3. package/dist/BeatApi-BxXgbSJY.mjs +99 -0
  4. package/dist/BeatApi-BxXgbSJY.mjs.map +1 -0
  5. package/dist/BudgetUtil-BSn9Zr71.mjs +208 -0
  6. package/dist/BudgetUtil-BSn9Zr71.mjs.map +1 -0
  7. package/dist/CashflowApi-zcebgnO1.mjs +103 -0
  8. package/dist/CashflowApi-zcebgnO1.mjs.map +1 -0
  9. package/dist/CashflowStore-gPEEBiXo.mjs +53 -0
  10. package/dist/CashflowStore-gPEEBiXo.mjs.map +1 -0
  11. package/dist/Categories-XVFviD23.mjs +117 -0
  12. package/dist/Categories-XVFviD23.mjs.map +1 -0
  13. package/dist/CategoryStore-CSNSMNA6.mjs +298 -0
  14. package/dist/CategoryStore-CSNSMNA6.mjs.map +1 -0
  15. package/dist/ConnectMiniWidget-Ep65CtHH.mjs +10854 -0
  16. package/dist/ConnectMiniWidget-Ep65CtHH.mjs.map +1 -0
  17. package/dist/DebtsStore-Duf3n1vZ.mjs +127 -0
  18. package/dist/DebtsStore-Duf3n1vZ.mjs.map +1 -0
  19. package/dist/Donut-DgMeKScZ.mjs +53 -0
  20. package/dist/Donut-DgMeKScZ.mjs.map +1 -0
  21. package/dist/Fetch-DpUi1_Dx.mjs +99 -0
  22. package/dist/Fetch-DpUi1_Dx.mjs.map +1 -0
  23. package/dist/GoalStore-BYoRLx99.mjs +128 -0
  24. package/dist/GoalStore-BYoRLx99.mjs.map +1 -0
  25. package/dist/MerchantStore-RhLvDvX-.mjs +118 -0
  26. package/dist/MerchantStore-RhLvDvX-.mjs.map +1 -0
  27. package/dist/NetWorthStore-syD1VnxE.mjs +66 -0
  28. package/dist/NetWorthStore-syD1VnxE.mjs.map +1 -0
  29. package/dist/NotificationStore-CqTYHfJC.mjs +141 -0
  30. package/dist/NotificationStore-CqTYHfJC.mjs.map +1 -0
  31. package/dist/RecurringActivityStore-B_COvGWG.mjs +304 -0
  32. package/dist/RecurringActivityStore-B_COvGWG.mjs.map +1 -0
  33. package/dist/StackedLineChart-CCqGRwvs.mjs +342 -0
  34. package/dist/StackedLineChart-CCqGRwvs.mjs.map +1 -0
  35. package/dist/TransactionStore-BUrjBWkk.mjs +478 -0
  36. package/dist/TransactionStore-BUrjBWkk.mjs.map +1 -0
  37. package/dist/index.es.js +12 -17869
  38. package/dist/index.es.js.map +1 -1
  39. package/dist/index.es10.js +107 -0
  40. package/dist/index.es10.js.map +1 -0
  41. package/dist/index.es11.js +159 -0
  42. package/dist/index.es11.js.map +1 -0
  43. package/dist/index.es12.js +483 -0
  44. package/dist/index.es12.js.map +1 -0
  45. package/dist/index.es13.js +620 -0
  46. package/dist/index.es13.js.map +1 -0
  47. package/dist/index.es14.js +788 -0
  48. package/dist/index.es14.js.map +1 -0
  49. package/dist/index.es15.js +891 -0
  50. package/dist/index.es15.js.map +1 -0
  51. package/dist/index.es16.js +962 -0
  52. package/dist/index.es16.js.map +1 -0
  53. package/dist/index.es17.js +1904 -0
  54. package/dist/index.es17.js.map +1 -0
  55. package/dist/index.es2.js +11 -0
  56. package/dist/index.es2.js.map +1 -0
  57. package/dist/index.es3.js +10 -0
  58. package/dist/index.es3.js.map +1 -0
  59. package/dist/index.es4.js +9 -0
  60. package/dist/index.es4.js.map +1 -0
  61. package/dist/index.es5.js +7 -0
  62. package/dist/index.es5.js.map +1 -0
  63. package/dist/index.es6.js +7 -0
  64. package/dist/index.es6.js.map +1 -0
  65. package/dist/index.es7.js +10 -0
  66. package/dist/index.es7.js.map +1 -0
  67. package/dist/index.es8.js +10 -0
  68. package/dist/index.es8.js.map +1 -0
  69. package/dist/index.es9.js +18 -0
  70. package/dist/index.es9.js.map +1 -0
  71. package/dist/useCombineEvents-CZUDHE96.mjs +170 -0
  72. package/dist/useCombineEvents-CZUDHE96.mjs.map +1 -0
  73. package/dist/usePrevious-BLb3umpI.mjs +11 -0
  74. package/dist/usePrevious-BLb3umpI.mjs.map +1 -0
  75. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetWorthStore-syD1VnxE.mjs","sources":["../src/networth/stores/NetWorthStore.ts"],"sourcesContent":["import { makeAutoObservable, runInAction } from 'mobx'\n\nimport type { Account, GlobalStore } from '../../common'\n\nimport { AssetsLiabilities, GainsLosses, NetWorth, NetWorthData } from '../types/NetWorth'\nimport {\n filterAccounts,\n flattenBalances,\n buildAssetsLiabilities,\n buildChartData,\n buildGainsLosses,\n getLatestNetWorthData,\n sortByYearMonthAscending,\n} from '../utils/NetWorthUtils'\n\nexport class NetWorthStore {\n globalStore: GlobalStore\n\n netWorthData: NetWorthData = { accounts: [], monthlyAccountBalances: [] }\n netWorthChartData: NetWorth[] = []\n hoveredData?: NetWorth\n selectedData?: NetWorth\n\n constructor(globalStore: GlobalStore) {\n this.globalStore = globalStore\n makeAutoObservable(this)\n }\n\n loadNetWorthData = async (accounts: Account[]) => {\n try {\n const members = this.globalStore.accountStore.members\n\n const netWorthAccounts = filterAccounts(accounts, members)\n\n const accountBalances = await Promise.all(\n netWorthAccounts.map((account: Account) => {\n return this.globalStore.accountStore.api.getMonthlyAccountBalances(account.guid)\n }),\n )\n\n const monthlyAccountBalances = await accountBalances\n .reduce(flattenBalances, [])\n .sort(sortByYearMonthAscending)\n\n runInAction(() => {\n this.netWorthData = {\n accounts: netWorthAccounts,\n monthlyAccountBalances,\n }\n })\n } catch (error) {\n console.error(`Error occured while loading net worth data: ${error}`)\n }\n }\n\n loadChartData = async (numberOfMonths: number) => {\n try {\n const { accounts, monthlyAccountBalances } = this.netWorthData\n const chartData = await buildChartData(accounts, monthlyAccountBalances, numberOfMonths)\n const selectedData = getLatestNetWorthData(chartData)\n\n runInAction(() => {\n this.netWorthChartData = chartData\n this.selectedData = selectedData\n })\n } catch (error) {\n console.error(`Error occured while loading chart data: ${error}`)\n }\n }\n\n get gainsLosses(): GainsLosses {\n return buildGainsLosses(this.selectedData)\n }\n\n get assetsLiabilities(): AssetsLiabilities {\n const { assets, liabilities, totalAssets, totalLiabilities } = buildAssetsLiabilities(\n this.netWorthData.accounts,\n )\n return {\n netWorth: getLatestNetWorthData(this.netWorthChartData),\n assets,\n liabilities,\n totalAssets,\n totalLiabilities,\n }\n }\n\n setSelectedData = (dataIndex: number) => {\n runInAction(() => {\n this.selectedData = this.netWorthChartData[dataIndex]\n })\n }\n\n setHoveredData = (dataIndex: number | null) => {\n runInAction(() => {\n this.hoveredData = dataIndex !== null ? this.netWorthChartData[dataIndex] : undefined\n })\n }\n}\n"],"names":["NetWorthStore","globalStore","makeAutoObservable","accounts","members","netWorthAccounts","filterAccounts","monthlyAccountBalances","account","flattenBalances","sortByYearMonthAscending","runInAction","error","numberOfMonths","chartData","buildChartData","selectedData","getLatestNetWorthData","buildGainsLosses","assets","liabilities","totalAssets","totalLiabilities","buildAssetsLiabilities","dataIndex"],"mappings":";;AAeO,MAAMA,EAAc;AAAA,EACzB;AAAA,EAEA,eAA6B,EAAE,UAAU,CAAI,GAAA,wBAAwB,CAAG,EAAA;AAAA,EACxE,oBAAgC,CAAA;AAAA,EAChC;AAAA,EACA;AAAA,EAEA,YAAYC,GAA0B;AACpC,SAAK,cAAcA,GACnBC,EAAmB,IAAI;AAAA,EACzB;AAAA,EAEA,mBAAmB,OAAOC,MAAwB;AAC5C,QAAA;AACI,YAAAC,IAAU,KAAK,YAAY,aAAa,SAExCC,IAAmBC,EAAeH,GAAUC,CAAO,GAQnDG,IAAyB,OANP,MAAM,QAAQ;AAAA,QACpCF,EAAiB,IAAI,CAACG,MACb,KAAK,YAAY,aAAa,IAAI,0BAA0BA,EAAQ,IAAI,CAChF;AAAA,MAAA,GAIA,OAAOC,GAAiB,EAAE,EAC1B,KAAKC,CAAwB;AAEhC,MAAAC,EAAY,MAAM;AAChB,aAAK,eAAe;AAAA,UAClB,UAAUN;AAAA,UACV,wBAAAE;AAAA,QAAA;AAAA,MACF,CACD;AAAA,aACMK,GAAO;AACN,cAAA,MAAM,+CAA+CA,CAAK,EAAE;AAAA,IACtE;AAAA,EAAA;AAAA,EAGF,gBAAgB,OAAOC,MAA2B;AAC5C,QAAA;AACF,YAAM,EAAE,UAAAV,GAAU,wBAAAI,MAA2B,KAAK,cAC5CO,IAAY,MAAMC,EAAeZ,GAAUI,GAAwBM,CAAc,GACjFG,IAAeC,EAAsBH,CAAS;AAEpD,MAAAH,EAAY,MAAM;AAChB,aAAK,oBAAoBG,GACzB,KAAK,eAAeE;AAAA,MAAA,CACrB;AAAA,aACMJ,GAAO;AACN,cAAA,MAAM,2CAA2CA,CAAK,EAAE;AAAA,IAClE;AAAA,EAAA;AAAA,EAGF,IAAI,cAA2B;AACtB,WAAAM,EAAiB,KAAK,YAAY;AAAA,EAC3C;AAAA,EAEA,IAAI,oBAAuC;AACzC,UAAM,EAAE,QAAAC,GAAQ,aAAAC,GAAa,aAAAC,GAAa,kBAAAC,EAAqB,IAAAC;AAAA,MAC7D,KAAK,aAAa;AAAA,IAAA;AAEb,WAAA;AAAA,MACL,UAAUN,EAAsB,KAAK,iBAAiB;AAAA,MACtD,QAAAE;AAAA,MACA,aAAAC;AAAA,MACA,aAAAC;AAAA,MACA,kBAAAC;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,kBAAkB,CAACE,MAAsB;AACvC,IAAAb,EAAY,MAAM;AACX,WAAA,eAAe,KAAK,kBAAkBa,CAAS;AAAA,IAAA,CACrD;AAAA,EAAA;AAAA,EAGH,iBAAiB,CAACA,MAA6B;AAC7C,IAAAb,EAAY,MAAM;AAChB,WAAK,cAAca,MAAc,OAAO,KAAK,kBAAkBA,CAAS,IAAI;AAAA,IAAA,CAC7E;AAAA,EAAA;AAEL;"}
@@ -0,0 +1,141 @@
1
+ import { makeAutoObservable as a, observable as n, runInAction as s } from "mobx";
2
+ import "bowser";
3
+ import "date-fns/getUnixTime";
4
+ import "date-fns/intlFormat";
5
+ import "./ConnectMiniWidget-Ep65CtHH.mjs";
6
+ import "react";
7
+ import "@honeybadger-io/react";
8
+ import "numeral";
9
+ import "date-fns/addMonths";
10
+ import "date-fns/addQuarters";
11
+ import "date-fns/addWeeks";
12
+ import "date-fns/addYears";
13
+ import "date-fns/getDay";
14
+ import "date-fns/isBefore";
15
+ import "date-fns/nextDay";
16
+ import "date-fns/setDate";
17
+ import "date-fns/startOfToday";
18
+ import "date-fns/fromUnixTime";
19
+ import { F as c, A as r } from "./Fetch-DpUi1_Dx.mjs";
20
+ import "react/jsx-runtime";
21
+ import "@mui/material/Button";
22
+ import "@kyper/mui";
23
+ import "@mui/material/Tooltip";
24
+ import "@mui/material/Box";
25
+ import "@mui/material/IconButton";
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 "@mui/icons-material/KeyboardArrowLeftRounded";
39
+ import "@mui/icons-material/KeyboardArrowRightRounded";
40
+ import "date-fns/isSameDay";
41
+ import "date-fns/isWithinInterval";
42
+ import "d3";
43
+ import "@mui/material/styles";
44
+ import "@mui/x-charts";
45
+ import "@mui/material/Stack";
46
+ import "@mui/material";
47
+ import "date-fns/differenceInCalendarDays";
48
+ import "date-fns/endOfToday";
49
+ import "date-fns/endOfYear";
50
+ import "date-fns/startOfYear";
51
+ import "date-fns/subDays";
52
+ import "date-fns/subYears";
53
+ import "@mui/material/ButtonGroup";
54
+ import "@mui/material/Tab";
55
+ import "@mui/material/Tabs";
56
+ import "@mui/material/ToggleButton";
57
+ import "@mui/material/ToggleButtonGroup";
58
+ import "@mui/material/Dialog";
59
+ import "@mui/material/DialogContent";
60
+ import "@mui/icons-material/ArrowBackOutlined";
61
+ import "@mui/material/Card";
62
+ import "@mui/material/CardHeader";
63
+ import "@mui/material/CardContent";
64
+ import "uuid";
65
+ import "@mui/material/CircularProgress";
66
+ import "@mui/material/FormControlLabel";
67
+ import "@mui/material/Radio";
68
+ import "@mui/material/Avatar";
69
+ import "@mui/material/ListItem";
70
+ import "@mui/material/ListItemAvatar";
71
+ import "@mui/material/ListItemButton";
72
+ import "@mui/material/ListItemText";
73
+ import "@mui/material/ListItemIcon";
74
+ import "date-fns/differenceInDays";
75
+ import "@mui/x-data-grid-pro";
76
+ import "date-fns";
77
+ import "date-fns/getMonth";
78
+ import "date-fns/isAfter";
79
+ import "date-fns/parseISO";
80
+ import "date-fns/subWeeks";
81
+ import "date-fns/formatISO";
82
+ class e {
83
+ fetchInstance;
84
+ constructor(i, t) {
85
+ this.fetchInstance = new c(i, t);
86
+ }
87
+ getNotifications = () => this.fetchInstance.get(r.NOTIFICATIONS).then(
88
+ (i) => i.notifications.map((t) => t.notification)
89
+ ).finally();
90
+ updateNotification = (i) => this.fetchInstance.put(`${r.NOTIFICATIONS}/${i.guid}`, {
91
+ guid: i.guid,
92
+ has_been_viewed: i.has_been_viewed
93
+ }).then((t) => t.notification).finally();
94
+ // Note: The notifications/mark_all_as_viewed endpoint is broken, but still returns 202.
95
+ // A bug ticket has been filed to fix it, but should not require any changes here.
96
+ markAllAsViewed = (i) => this.fetchInstance.put(`${r.NOTIFICATIONS}/mark_all_as_viewed`, { channel: i }).finally();
97
+ }
98
+ function f(o) {
99
+ const t = Math.floor(Date.now() / 1e3);
100
+ return o.filter((p) => {
101
+ const m = p.delivered_at;
102
+ return t - m <= 604800;
103
+ });
104
+ }
105
+ class Mi {
106
+ api = new e("/", "");
107
+ isLoading = !0;
108
+ notifications = [];
109
+ recentNotifications = [];
110
+ constructor() {
111
+ a(this, { notifications: n });
112
+ }
113
+ initialize = async (i, t) => {
114
+ this.api = new e(i, t), await this.loadNotifications();
115
+ };
116
+ get newNotifications() {
117
+ return this.recentNotifications.filter((i) => !i.has_been_viewed);
118
+ }
119
+ loadNotifications = async () => {
120
+ try {
121
+ this.isLoading = !0;
122
+ const i = await this.api.getNotifications();
123
+ s(() => {
124
+ this.notifications = i, this.recentNotifications = f(i), this.isLoading = !1;
125
+ });
126
+ } catch (i) {
127
+ console.error(`Error occurred while loading notifications: ${i}`);
128
+ }
129
+ };
130
+ markAllAsViewed = async () => {
131
+ this.notifications.forEach((i) => i.has_been_viewed = !0), await this.api.markAllAsViewed(), await this.loadNotifications();
132
+ };
133
+ updateNotification = async (i) => {
134
+ i.has_been_viewed = !0, await this.api.updateNotification(i);
135
+ };
136
+ }
137
+ export {
138
+ Mi as N,
139
+ e as a
140
+ };
141
+ //# sourceMappingURL=NotificationStore-CqTYHfJC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationStore-CqTYHfJC.mjs","sources":["../src/common/api/NotificationApi.ts","../src/notifications/stores/NotificationStore.ts"],"sourcesContent":["import Fetch from '../utils/Fetch'\n\nimport { ApiEndpoints } from '../constants'\n\nimport type { Notification } from '../types'\n\nexport class NotificationApi {\n fetchInstance: Fetch\n\n constructor(endpoint: string, token: string) {\n this.fetchInstance = new Fetch(endpoint, token)\n }\n\n getNotifications = () => {\n return this.fetchInstance\n .get(ApiEndpoints.NOTIFICATIONS)\n .then((data) =>\n data.notifications.map((obj: { notification: Notification }) => obj.notification),\n )\n .finally()\n }\n\n updateNotification = (notification: Notification) => {\n return this.fetchInstance\n .put(`${ApiEndpoints.NOTIFICATIONS}/${notification.guid}`, {\n guid: notification.guid,\n has_been_viewed: notification.has_been_viewed,\n })\n .then((data) => data.notification)\n .finally()\n }\n\n // Note: The notifications/mark_all_as_viewed endpoint is broken, but still returns 202.\n // A bug ticket has been filed to fix it, but should not require any changes here.\n markAllAsViewed = (channel?: number) => {\n return this.fetchInstance\n .put(`${ApiEndpoints.NOTIFICATIONS}/mark_all_as_viewed`, { channel })\n .finally()\n }\n}\n","import { makeAutoObservable, observable, runInAction } from 'mobx'\n\nimport { NotificationApi, type Notification } from '../../common'\n\nfunction filterRecentNotifications(notifications: Notification[]): Notification[] {\n const SEVEN_DAYS_IN_SECONDS = 7 * 24 * 60 * 60\n const currentTime = Math.floor(Date.now() / 1000)\n\n return notifications.filter((notification: Notification) => {\n const deliveredAt = notification.delivered_at\n return currentTime - deliveredAt <= SEVEN_DAYS_IN_SECONDS\n })\n}\n\nexport class NotificationStore {\n api = new NotificationApi('/', '')\n isLoading: boolean = true\n notifications: Notification[] = []\n recentNotifications: Notification[] = []\n\n constructor() {\n makeAutoObservable(this, { notifications: observable })\n }\n\n initialize = async (endpoint: string, token: string) => {\n this.api = new NotificationApi(endpoint, token)\n await this.loadNotifications()\n }\n\n get newNotifications(): Notification[] {\n return this.recentNotifications.filter((n) => !n.has_been_viewed)\n }\n\n loadNotifications = async () => {\n try {\n this.isLoading = true\n const data = await this.api.getNotifications()\n\n runInAction(() => {\n this.notifications = data\n this.recentNotifications = filterRecentNotifications(data)\n this.isLoading = false\n })\n } catch (error) {\n console.error(`Error occurred while loading notifications: ${error}`)\n }\n }\n\n markAllAsViewed = async () => {\n // Optimistically update the UI\n this.notifications.forEach((n) => (n.has_been_viewed = true))\n // Update on the server\n // (NOTE: The notifications/mark_all_as_viewed endpoint is broken, but still returns 202)\n await this.api.markAllAsViewed()\n await this.loadNotifications()\n }\n\n updateNotification = async (notification: Notification) => {\n notification.has_been_viewed = true\n await this.api.updateNotification(notification)\n }\n}\n"],"names":["NotificationApi","endpoint","token","Fetch","ApiEndpoints","data","obj","notification","channel","filterRecentNotifications","notifications","currentTime","deliveredAt","NotificationStore","makeAutoObservable","observable","n","runInAction","error"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMO,MAAMA,EAAgB;AAAA,EAC3B;AAAA,EAEA,YAAYC,GAAkBC,GAAe;AAC3C,SAAK,gBAAgB,IAAIC,EAAMF,GAAUC,CAAK;AAAA,EAChD;AAAA,EAEA,mBAAmB,MACV,KAAK,cACT,IAAIE,EAAa,aAAa,EAC9B;AAAA,IAAK,CAACC,MACLA,EAAK,cAAc,IAAI,CAACC,MAAwCA,EAAI,YAAY;AAAA,IAEjF,QAAQ;AAAA,EAGb,qBAAqB,CAACC,MACb,KAAK,cACT,IAAI,GAAGH,EAAa,aAAa,IAAIG,EAAa,IAAI,IAAI;AAAA,IACzD,MAAMA,EAAa;AAAA,IACnB,iBAAiBA,EAAa;AAAA,EAAA,CAC/B,EACA,KAAK,CAACF,MAASA,EAAK,YAAY,EAChC;;;EAKL,kBAAkB,CAACG,MACV,KAAK,cACT,IAAI,GAAGJ,EAAa,aAAa,uBAAuB,EAAE,SAAAI,GAAS,EACnE,QAAQ;AAEf;ACnCA,SAASC,EAA0BC,GAA+C;AAEhF,QAAMC,IAAc,KAAK,MAAM,KAAK,IAAA,IAAQ,GAAI;AAEzC,SAAAD,EAAc,OAAO,CAACH,MAA+B;AAC1D,UAAMK,IAAcL,EAAa;AACjC,WAAOI,IAAcC,KAAe;AAAA,EAAA,CACrC;AACH;AAEO,MAAMC,GAAkB;AAAA,EAC7B,MAAM,IAAIb,EAAgB,KAAK,EAAE;AAAA,EACjC,YAAqB;AAAA,EACrB,gBAAgC,CAAA;AAAA,EAChC,sBAAsC,CAAA;AAAA,EAEtC,cAAc;AACZ,IAAAc,EAAmB,MAAM,EAAE,eAAeC,EAAY,CAAA;AAAA,EACxD;AAAA,EAEA,aAAa,OAAOd,GAAkBC,MAAkB;AACtD,SAAK,MAAM,IAAIF,EAAgBC,GAAUC,CAAK,GAC9C,MAAM,KAAK;EAAkB;AAAA,EAG/B,IAAI,mBAAmC;AACrC,WAAO,KAAK,oBAAoB,OAAO,CAACc,MAAM,CAACA,EAAE,eAAe;AAAA,EAClE;AAAA,EAEA,oBAAoB,YAAY;AAC1B,QAAA;AACF,WAAK,YAAY;AACjB,YAAMX,IAAO,MAAM,KAAK,IAAI,iBAAiB;AAE7C,MAAAY,EAAY,MAAM;AAChB,aAAK,gBAAgBZ,GAChB,KAAA,sBAAsBI,EAA0BJ,CAAI,GACzD,KAAK,YAAY;AAAA,MAAA,CAClB;AAAA,aACMa,GAAO;AACN,cAAA,MAAM,+CAA+CA,CAAK,EAAE;AAAA,IACtE;AAAA,EAAA;AAAA,EAGF,kBAAkB,YAAY;AAE5B,SAAK,cAAc,QAAQ,CAACF,MAAOA,EAAE,kBAAkB,EAAK,GAGtD,MAAA,KAAK,IAAI,mBACf,MAAM,KAAK;EAAkB;AAAA,EAG/B,qBAAqB,OAAOT,MAA+B;AACzD,IAAAA,EAAa,kBAAkB,IACzB,MAAA,KAAK,IAAI,mBAAmBA,CAAY;AAAA,EAAA;AAElD;"}
@@ -0,0 +1,304 @@
1
+ import { makeAutoObservable as y, runInAction as s } from "mobx";
2
+ import { addDays as f } from "date-fns/addDays";
3
+ import { endOfMonth as w } from "date-fns/endOfMonth";
4
+ import { getUnixTime as g } from "date-fns/getUnixTime";
5
+ import { isAfter as v } from "date-fns/isAfter";
6
+ import { isSameDay as h } from "date-fns/isSameDay";
7
+ import { startOfMonth as S } from "date-fns/startOfMonth";
8
+ import { startOfToday as o } from "date-fns/startOfToday";
9
+ import { subDays as E } from "date-fns/subDays";
10
+ import "bowser";
11
+ import { i as A } from "./Categories-XVFviD23.mjs";
12
+ import "react";
13
+ import "@honeybadger-io/react";
14
+ import "numeral";
15
+ import "date-fns/intlFormat";
16
+ import { Y as r, Z as P, _ as d, $ as l } from "./ConnectMiniWidget-Ep65CtHH.mjs";
17
+ import "date-fns/addMonths";
18
+ import "date-fns/addQuarters";
19
+ import "date-fns/addWeeks";
20
+ import "date-fns/addYears";
21
+ import "date-fns/getDay";
22
+ import "date-fns/isBefore";
23
+ import "date-fns/nextDay";
24
+ import "date-fns/setDate";
25
+ import "date-fns/fromUnixTime";
26
+ import { F as D, A as a } from "./Fetch-DpUi1_Dx.mjs";
27
+ import "react/jsx-runtime";
28
+ import "@mui/material/Button";
29
+ import "@kyper/mui";
30
+ import "@mui/material/Tooltip";
31
+ import "@mui/material/Box";
32
+ import "@mui/material/IconButton";
33
+ import "@mui/material/styles/useTheme";
34
+ import "@mui/material/useMediaQuery";
35
+ import "@mxenabled/cssinjs";
36
+ import "date-fns/eachDayOfInterval";
37
+ import "date-fns/eachWeekOfInterval";
38
+ import "date-fns/format";
39
+ import "date-fns/isSameMonth";
40
+ import "date-fns/subMonths";
41
+ import "@mui/material/Paper";
42
+ import "@mui/icons-material/KeyboardArrowLeftRounded";
43
+ import "@mui/icons-material/KeyboardArrowRightRounded";
44
+ import "date-fns/isWithinInterval";
45
+ import "d3";
46
+ import "@mui/material/styles";
47
+ import "@mui/x-charts";
48
+ import "@mui/material/Stack";
49
+ import "@mui/material";
50
+ import "date-fns/differenceInCalendarDays";
51
+ import "date-fns/endOfToday";
52
+ import "date-fns/endOfYear";
53
+ import "date-fns/startOfYear";
54
+ import "date-fns/subYears";
55
+ import "@mui/material/ButtonGroup";
56
+ import "@mui/material/Tab";
57
+ import "@mui/material/Tabs";
58
+ import "@mui/material/ToggleButton";
59
+ import "@mui/material/ToggleButtonGroup";
60
+ import "@mui/material/Dialog";
61
+ import "@mui/material/DialogContent";
62
+ import "@mui/icons-material/ArrowBackOutlined";
63
+ import "@mui/material/Card";
64
+ import "@mui/material/CardHeader";
65
+ import "@mui/material/CardContent";
66
+ import "uuid";
67
+ import "@mui/material/CircularProgress";
68
+ import "@mui/material/FormControlLabel";
69
+ import "@mui/material/Radio";
70
+ import "@mui/material/Avatar";
71
+ import "@mui/material/ListItem";
72
+ import "@mui/material/ListItemAvatar";
73
+ import "@mui/material/ListItemButton";
74
+ import "@mui/material/ListItemText";
75
+ import "@mui/material/ListItemIcon";
76
+ import "date-fns/differenceInDays";
77
+ import "@mui/x-data-grid-pro";
78
+ import "date-fns";
79
+ import "date-fns/getMonth";
80
+ import "date-fns/parseISO";
81
+ import "date-fns/subWeeks";
82
+ import "date-fns/formatISO";
83
+ import { C as p } from "./CashflowApi-zcebgnO1.mjs";
84
+ class m {
85
+ fetchInstance;
86
+ constructor(t, e) {
87
+ this.fetchInstance = new D(t, e);
88
+ }
89
+ addScheduledPayment = async (t) => this.fetchInstance.post(a.SCHEDULED_PAYMENTS, {
90
+ ...t,
91
+ is_recurring: "true",
92
+ transaction_type: r.DEBIT
93
+ }).then((e) => e.scheduled_payment);
94
+ getScheduledPayments = async () => this.fetchInstance.get(a.SCHEDULED_PAYMENTS).then((t) => t.scheduled_payments);
95
+ updateScheduledPayment = async (t) => this.fetchInstance.put(`${a.SCHEDULED_PAYMENTS}/${t.guid}`, t).then((e) => e.scheduled_payment);
96
+ deleteScheduledPayment = async (t) => this.fetchInstance.delete(`${a.SCHEDULED_PAYMENTS}/${t}`).then((e) => e);
97
+ }
98
+ class te {
99
+ globalStore;
100
+ api = new m("/", "");
101
+ cashflowApi = new p("/", "");
102
+ cashflowSequences = [];
103
+ cashflowEvents = [];
104
+ projectedEvents = [];
105
+ transactions = [];
106
+ scheduledPayments = [];
107
+ selectedDay;
108
+ isLoading = !0;
109
+ constructor(t) {
110
+ this.globalStore = t, y(this);
111
+ }
112
+ initialize = async (t, e) => {
113
+ this.api = new m(t, e), this.cashflowApi = new p(t, e), this.loadActivity();
114
+ };
115
+ get activities() {
116
+ return this.isLoading ? [] : P(
117
+ this.globalStore.accountStore.accounts,
118
+ this.cashflowEvents,
119
+ this.scheduledPayments,
120
+ this.projectedEvents,
121
+ this.cashflowSequences,
122
+ this.globalStore.transactionStore.transactions
123
+ );
124
+ }
125
+ get paidActivities() {
126
+ return this.activities.filter((t) => t.activityStatus === d.Paid);
127
+ }
128
+ get upcomingActivities() {
129
+ return this.activities.filter((t) => t.activityStatus === d.Upcoming);
130
+ }
131
+ get missedActivities() {
132
+ return this.activities.filter((t) => t.activityStatus === d.Missed);
133
+ }
134
+ get upcomingExpenses() {
135
+ return this.upcomingActivities.filter((t) => t.activityType === l.Expense);
136
+ }
137
+ get upcomingIncome() {
138
+ return this.upcomingActivities.filter((t) => t.activityType === l.Income);
139
+ }
140
+ get nextIncomeActivity() {
141
+ return this.upcomingIncome.find((t) => v(t.expectedDate, o()));
142
+ }
143
+ get selectedDayActivities() {
144
+ return this.selectedDay && this.activities.filter(
145
+ (t) => this.selectedDay && h(t.occurredOnDate || t.expectedDate, this.selectedDay)
146
+ );
147
+ }
148
+ get projectedIncome() {
149
+ const t = this.globalStore.categoryStore.categories;
150
+ return this.cashflowSequences.filter((e) => e.transaction_type === r.CREDIT).filter((e) => A(t, e.category_guid || "")).reduce((e, i) => e + i.amount, 0);
151
+ }
152
+ addCashflowEvent = async (t) => {
153
+ try {
154
+ const e = await this.cashflowApi.addCashflowEvent(t);
155
+ s(() => {
156
+ this.cashflowEvents = [...this.cashflowEvents, e];
157
+ });
158
+ } catch (e) {
159
+ console.error(`Error adding cashflow event: ${e}`);
160
+ }
161
+ };
162
+ addCashflowSequence = async (t) => {
163
+ try {
164
+ const e = await this.cashflowApi.addCashflowSequence(t);
165
+ return await this.loadIncomeActivity(), e;
166
+ } catch (e) {
167
+ console.error(`Error adding cashflow sequence: ${e}`);
168
+ }
169
+ };
170
+ addScheduledPayment = async (t, e) => {
171
+ try {
172
+ const i = await this.api.addScheduledPayment(t);
173
+ await this.globalStore.transactionStore.updateTransaction({
174
+ ...e,
175
+ scheduled_payment_guid: i.guid
176
+ }), s(() => {
177
+ this.scheduledPayments = [...this.scheduledPayments, i];
178
+ });
179
+ } catch (i) {
180
+ console.error(`Error adding scheduled payment: ${i}`);
181
+ }
182
+ };
183
+ deleteCashflowSequence = async (t) => {
184
+ try {
185
+ await this.cashflowApi.deleteCashflowSequence(t), await this.loadIncomeActivity();
186
+ } catch {
187
+ console.error("Error deleting cashflow sequence");
188
+ }
189
+ };
190
+ deleteScheduledPayment = async (t) => {
191
+ try {
192
+ await this.api.deleteScheduledPayment(t), s(() => {
193
+ const e = this.scheduledPayments.findIndex((i) => i.guid === t);
194
+ e >= 0 && this.scheduledPayments.splice(e, 1);
195
+ });
196
+ } catch (e) {
197
+ console.error(`Error deleting scheduled payent: ${e}`);
198
+ }
199
+ };
200
+ loadActivity = () => {
201
+ this.isLoading = !0, Promise.all([this.loadExpenseActivity(), this.loadIncomeActivity()]).finally(
202
+ () => s(() => {
203
+ this.isLoading = !1;
204
+ })
205
+ );
206
+ };
207
+ loadExpenseActivity = async () => {
208
+ await this.loadScheduledPayments();
209
+ };
210
+ loadIncomeActivity = async () => {
211
+ await this.loadCashflowSequences(), await this.loadExpectedEvents(), await this.loadPaidEvents();
212
+ };
213
+ loadCashflowSequences = async () => {
214
+ const t = await this.cashflowApi.getCashflowSequences();
215
+ s(() => {
216
+ this.cashflowSequences = t.filter(
217
+ (e) => e.transaction_type === r.CREDIT
218
+ );
219
+ });
220
+ };
221
+ loadExpectedEvents = async () => {
222
+ try {
223
+ const t = await this.cashflowApi.getProjectedCashflowEvents(
224
+ S(o()),
225
+ f(o(), 30)
226
+ );
227
+ s(() => {
228
+ this.projectedEvents = t.filter(
229
+ (e) => e.transaction_type === r.CREDIT
230
+ );
231
+ });
232
+ } catch (t) {
233
+ console.error(`Error occurred while getting projected events: ${t}`);
234
+ }
235
+ };
236
+ loadPaidEvents = async () => {
237
+ try {
238
+ const t = await this.cashflowApi.getCashflowEventsByDateRange(
239
+ E(o(), 90),
240
+ w(o())
241
+ );
242
+ s(() => {
243
+ this.cashflowEvents = t.filter(
244
+ (e) => e.transaction_type === r.CREDIT
245
+ );
246
+ });
247
+ } catch (t) {
248
+ console.error(`Error occurred while getting cashflow events: ${t}`);
249
+ }
250
+ };
251
+ loadScheduledPayments = async () => {
252
+ try {
253
+ const t = await this.api.getScheduledPayments();
254
+ s(() => {
255
+ this.scheduledPayments = t;
256
+ });
257
+ } catch (t) {
258
+ console.error(`Error occurred while getting scheduled payments: ${t}`);
259
+ }
260
+ };
261
+ setSelectedDay = (t) => {
262
+ this.selectedDay = this.selectedDay && h(t, this.selectedDay) ? void 0 : t;
263
+ };
264
+ updateCashflowSequence = async (t) => {
265
+ try {
266
+ if (!!this.cashflowEvents.find((i) => i.cashflow_sequence_guid === t.guid)) {
267
+ const i = this.cashflowSequences.find((n) => n.guid === t.guid);
268
+ if (!i) return;
269
+ const c = this.cashflowEvents.findLast((n) => n.guid === t.guid);
270
+ await this.cashflowApi.updateCashflowSequence({
271
+ ...i,
272
+ end_date: c?.occurred_on || g(/* @__PURE__ */ new Date())
273
+ }), await this.addCashflowSequence({
274
+ ...t,
275
+ guid: void 0
276
+ });
277
+ } else
278
+ await this.cashflowApi.updateCashflowSequence(t);
279
+ await this.loadIncomeActivity();
280
+ } catch (e) {
281
+ console.error(`Error updating cashflow sequence: ${e}`);
282
+ }
283
+ };
284
+ updateScheduledPayment = async (t) => {
285
+ try {
286
+ const e = await this.api.updateScheduledPayment(t), i = this.scheduledPayments.findIndex((c) => c.guid === t.guid);
287
+ if (i < 0) return;
288
+ s(() => {
289
+ this.scheduledPayments = [
290
+ ...this.scheduledPayments.slice(0, i),
291
+ e,
292
+ ...this.scheduledPayments.slice(i + 1)
293
+ ];
294
+ });
295
+ } catch {
296
+ console.error("Error occurred while updating schedule payment");
297
+ }
298
+ };
299
+ }
300
+ export {
301
+ te as R,
302
+ m as S
303
+ };
304
+ //# sourceMappingURL=RecurringActivityStore-B_COvGWG.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecurringActivityStore-B_COvGWG.mjs","sources":["../src/common/api/ScheduledPaymentsApi.ts","../src/recurringactivity/stores/RecurringActivityStore.ts"],"sourcesContent":["import { ApiEndpoints, Fetch, type ScheduledPayment, TransactionType } from '../index'\n\nexport class ScheduledPaymentsApi {\n fetchInstance: Fetch\n\n constructor(endpoint: string, token: string) {\n this.fetchInstance = new Fetch(endpoint, token)\n }\n\n addScheduledPayment = async (scheduledPayment: ScheduledPayment) => {\n return this.fetchInstance\n .post(ApiEndpoints.SCHEDULED_PAYMENTS, {\n ...scheduledPayment,\n is_recurring: 'true',\n transaction_type: TransactionType.DEBIT,\n })\n .then((data) => data.scheduled_payment)\n }\n\n getScheduledPayments = async () => {\n return this.fetchInstance\n .get(ApiEndpoints.SCHEDULED_PAYMENTS)\n .then((data) => data.scheduled_payments)\n }\n\n updateScheduledPayment = async (scheduledPayment: ScheduledPayment) => {\n return this.fetchInstance\n .put(`${ApiEndpoints.SCHEDULED_PAYMENTS}/${scheduledPayment.guid}`, scheduledPayment)\n .then((data) => data.scheduled_payment)\n }\n\n deleteScheduledPayment = async (guid: string) => {\n return this.fetchInstance\n .delete(`${ApiEndpoints.SCHEDULED_PAYMENTS}/${guid}`)\n .then((data) => data)\n }\n}\n","import { makeAutoObservable, runInAction } from 'mobx'\nimport { addDays } from 'date-fns/addDays'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { getUnixTime } from 'date-fns/getUnixTime'\nimport { isAfter } from 'date-fns/isAfter'\nimport { isSameDay } from 'date-fns/isSameDay'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\n\nimport {\n type Activity,\n ActivityStatus,\n ActivityType,\n CashflowEvent,\n CashflowSequence,\n GlobalStore,\n isIncome,\n ScheduledPayment,\n ScheduledPaymentsApi,\n Transaction,\n TransactionType,\n} from '../../common'\nimport { CashflowApi } from '../../cashflow'\n\nimport { buildActivities } from '../util/buildActivities'\n\nexport class RecurringActivityStore {\n globalStore: GlobalStore\n api = new ScheduledPaymentsApi('/', '')\n cashflowApi = new CashflowApi('/', '')\n\n cashflowSequences: CashflowSequence[] = []\n cashflowEvents: CashflowEvent[] = []\n projectedEvents: CashflowEvent[] = []\n transactions: Transaction[] = []\n scheduledPayments: ScheduledPayment[] = []\n selectedDay: Date | undefined\n\n isLoading: boolean = true\n\n constructor(globalStore: GlobalStore) {\n this.globalStore = globalStore\n\n makeAutoObservable(this)\n }\n\n initialize = async (endpoint: string, token: string) => {\n this.api = new ScheduledPaymentsApi(endpoint, token)\n this.cashflowApi = new CashflowApi(endpoint, token)\n\n this.loadActivity()\n }\n\n get activities() {\n if (!this.isLoading) {\n return buildActivities(\n this.globalStore.accountStore.accounts,\n this.cashflowEvents,\n this.scheduledPayments,\n this.projectedEvents,\n this.cashflowSequences,\n this.globalStore.transactionStore.transactions,\n )\n }\n return []\n }\n\n get paidActivities(): Activity[] {\n return this.activities.filter((a) => a.activityStatus === ActivityStatus.Paid)\n }\n\n get upcomingActivities(): Activity[] {\n return this.activities.filter((a) => a.activityStatus === ActivityStatus.Upcoming)\n }\n\n get missedActivities(): Activity[] {\n return this.activities.filter((a) => a.activityStatus === ActivityStatus.Missed)\n }\n\n get upcomingExpenses(): Activity[] {\n return this.upcomingActivities.filter((a) => a.activityType === ActivityType.Expense)\n }\n\n get upcomingIncome(): Activity[] {\n return this.upcomingActivities.filter((a) => a.activityType === ActivityType.Income)\n }\n\n get nextIncomeActivity(): Activity | undefined {\n return this.upcomingIncome.find((a) => isAfter(a.expectedDate, startOfToday()))\n }\n\n get selectedDayActivities(): Activity[] | undefined {\n return (\n this.selectedDay &&\n this.activities.filter(\n (a) => this.selectedDay && isSameDay(a.occurredOnDate || a.expectedDate, this.selectedDay),\n )\n )\n }\n\n get projectedIncome(): number {\n const categories = this.globalStore.categoryStore.categories\n return this.cashflowSequences\n .filter((cs) => cs.transaction_type === TransactionType.CREDIT)\n .filter((cs) => isIncome(categories, cs.category_guid || ''))\n .reduce((acc, current) => acc + current.amount, 0)\n }\n\n addCashflowEvent = async (cashflowEvent: CashflowEvent) => {\n try {\n const event = await this.cashflowApi.addCashflowEvent(cashflowEvent)\n\n runInAction(() => {\n this.cashflowEvents = [...this.cashflowEvents, event]\n })\n } catch (error) {\n console.error(`Error adding cashflow event: ${error}`)\n }\n }\n\n addCashflowSequence = async (\n cashflowSequence: CashflowSequence,\n ): Promise<CashflowSequence | undefined> => {\n try {\n const sequence = await this.cashflowApi.addCashflowSequence(cashflowSequence)\n\n // Reload all income activity\n await this.loadIncomeActivity()\n\n return sequence\n } catch (error) {\n console.error(`Error adding cashflow sequence: ${error}`)\n }\n return undefined\n }\n\n addScheduledPayment = async (scheduledPayemnt: ScheduledPayment, transaction: Transaction) => {\n try {\n const payment = await this.api.addScheduledPayment(scheduledPayemnt)\n await this.globalStore.transactionStore.updateTransaction({\n ...transaction,\n scheduled_payment_guid: payment.guid,\n })\n\n runInAction(() => {\n this.scheduledPayments = [...this.scheduledPayments, payment]\n })\n } catch (error) {\n console.error(`Error adding scheduled payment: ${error}`)\n }\n }\n\n deleteCashflowSequence = async (guid: string) => {\n try {\n await this.cashflowApi.deleteCashflowSequence(guid)\n\n // Reload all income activity\n await this.loadIncomeActivity()\n } catch (error) {\n console.error(`Error deleting cashflow sequence`)\n }\n }\n\n deleteScheduledPayment = async (guid: string) => {\n try {\n await this.api.deleteScheduledPayment(guid)\n\n runInAction(() => {\n const index = this.scheduledPayments.findIndex((sp) => sp.guid === guid)\n if (index >= 0) {\n this.scheduledPayments.splice(index, 1)\n }\n })\n } catch (error) {\n console.error(`Error deleting scheduled payent: ${error}`)\n }\n }\n\n loadActivity = () => {\n this.isLoading = true\n\n Promise.all([this.loadExpenseActivity(), this.loadIncomeActivity()]).finally(() =>\n runInAction(() => {\n this.isLoading = false\n }),\n )\n }\n\n loadExpenseActivity = async () => {\n await this.loadScheduledPayments()\n }\n\n loadIncomeActivity = async () => {\n await this.loadCashflowSequences()\n await this.loadExpectedEvents()\n await this.loadPaidEvents()\n }\n\n loadCashflowSequences = async () => {\n const sequences = await this.cashflowApi.getCashflowSequences()\n\n runInAction(() => {\n this.cashflowSequences = sequences.filter(\n (s) => s.transaction_type === TransactionType.CREDIT,\n )\n })\n }\n\n loadExpectedEvents = async () => {\n try {\n const events = await this.cashflowApi.getProjectedCashflowEvents(\n startOfMonth(startOfToday()),\n addDays(startOfToday(), 30),\n )\n\n runInAction(() => {\n this.projectedEvents = events.filter(\n (evt) => evt.transaction_type === TransactionType.CREDIT,\n )\n })\n } catch (error) {\n console.error(`Error occurred while getting projected events: ${error}`)\n }\n }\n\n loadPaidEvents = async () => {\n try {\n const events = await this.cashflowApi.getCashflowEventsByDateRange(\n subDays(startOfToday(), 90),\n endOfMonth(startOfToday()),\n )\n\n runInAction(() => {\n this.cashflowEvents = events.filter(\n (evt) => evt.transaction_type === TransactionType.CREDIT,\n )\n })\n } catch (error) {\n console.error(`Error occurred while getting cashflow events: ${error}`)\n }\n }\n\n loadScheduledPayments = async () => {\n try {\n const scheduledPayments = (await this.api.getScheduledPayments()) as ScheduledPayment[]\n\n runInAction(() => {\n this.scheduledPayments = scheduledPayments\n })\n } catch (error) {\n console.error(`Error occurred while getting scheduled payments: ${error}`)\n }\n }\n\n setSelectedDay = (day: Date) => {\n this.selectedDay = this.selectedDay && isSameDay(day, this.selectedDay) ? undefined : day\n }\n\n updateCashflowSequence = async (sequence: CashflowSequence) => {\n try {\n const hasEvents = Boolean(\n this.cashflowEvents.find((e) => e.cashflow_sequence_guid === sequence.guid),\n )\n\n if (hasEvents) {\n // Update existing sequence with enddate\n const existingSequence = this.cashflowSequences.find((c) => c.guid === sequence.guid)\n if (!existingSequence) return // TODO: Consider throwing an error\n\n const lastEvent = this.cashflowEvents.findLast((c) => c.guid === sequence.guid)\n await this.cashflowApi.updateCashflowSequence({\n ...existingSequence,\n end_date: lastEvent?.occurred_on || getUnixTime(new Date()),\n })\n\n // Create a new sequence\n await this.addCashflowSequence({\n ...sequence,\n guid: undefined,\n })\n } else {\n // Update current sequence\n await this.cashflowApi.updateCashflowSequence(sequence)\n }\n\n // Reload all income activity\n await this.loadIncomeActivity()\n } catch (error) {\n console.error(`Error updating cashflow sequence: ${error}`)\n }\n }\n\n updateScheduledPayment = async (payment: ScheduledPayment) => {\n try {\n const updatedPayment = await this.api.updateScheduledPayment(payment)\n\n const index = this.scheduledPayments.findIndex((sp) => sp.guid === payment.guid)\n if (index < 0) return\n\n runInAction(() => {\n this.scheduledPayments = [\n ...this.scheduledPayments.slice(0, index),\n updatedPayment,\n ...this.scheduledPayments.slice(index + 1),\n ]\n })\n } catch (error) {\n console.error(`Error occurred while updating schedule payment`)\n }\n }\n}\n"],"names":["ScheduledPaymentsApi","endpoint","token","Fetch","scheduledPayment","ApiEndpoints","TransactionType","data","guid","RecurringActivityStore","CashflowApi","globalStore","makeAutoObservable","buildActivities","a","ActivityStatus","ActivityType","isAfter","startOfToday","isSameDay","categories","cs","isIncome","acc","current","cashflowEvent","event","runInAction","error","cashflowSequence","sequence","scheduledPayemnt","transaction","payment","index","sp","sequences","s","events","startOfMonth","addDays","evt","subDays","endOfMonth","scheduledPayments","day","e","existingSequence","c","lastEvent","getUnixTime","updatedPayment"],"mappings":"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"}