@mx-cartographer/experiences 9.1.0-alpha.bb1 → 9.1.0

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 (245) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/README.md +10 -10
  3. package/dist/Account-DR7Plrqy.mjs +119 -0
  4. package/dist/Account-DR7Plrqy.mjs.map +1 -0
  5. package/dist/AccountDetailsDrawer-CZPeLsCq.mjs +922 -0
  6. package/dist/AccountDetailsDrawer-CZPeLsCq.mjs.map +1 -0
  7. package/dist/AccountDetailsHeader-BvbCUQSS.mjs +231 -0
  8. package/dist/AccountDetailsHeader-BvbCUQSS.mjs.map +1 -0
  9. package/dist/AccountUtils-B8ZzWI-d.mjs +28 -0
  10. package/dist/AccountUtils-B8ZzWI-d.mjs.map +1 -0
  11. package/dist/Analytics-CkYXKvco.mjs +54 -0
  12. package/dist/Analytics-CkYXKvco.mjs.map +1 -0
  13. package/dist/Analytics-WeZYytR0.mjs +140 -0
  14. package/dist/Analytics-WeZYytR0.mjs.map +1 -0
  15. package/dist/ApiEndpoints-DXwIYNUV.mjs +50 -0
  16. package/dist/ApiEndpoints-DXwIYNUV.mjs.map +1 -0
  17. package/dist/BeatMaterialIcon-1KOfRZrA.mjs +27 -0
  18. package/dist/BeatMaterialIcon-1KOfRZrA.mjs.map +1 -0
  19. package/dist/BudgetUtil-Bg2AQJpQ.mjs +75 -0
  20. package/dist/BudgetUtil-Bg2AQJpQ.mjs.map +1 -0
  21. package/dist/Category-DEKZGLYe.mjs +302 -0
  22. package/dist/Category-DEKZGLYe.mjs.map +1 -0
  23. package/dist/CategorySelectorDrawer-NJsFsKP1.mjs +431 -0
  24. package/dist/CategorySelectorDrawer-NJsFsKP1.mjs.map +1 -0
  25. package/dist/Connect-BH0Pt6zc.mjs +43 -0
  26. package/dist/Connect-BH0Pt6zc.mjs.map +1 -0
  27. package/dist/ConnectCard-D7uxoH5Y.mjs +55 -0
  28. package/dist/ConnectCard-D7uxoH5Y.mjs.map +1 -0
  29. package/dist/ConnectDrawer-CW4LA3H3.mjs +58 -0
  30. package/dist/ConnectDrawer-CW4LA3H3.mjs.map +1 -0
  31. package/dist/ConnectionsDrawer-CZU9ku-k.mjs +54 -0
  32. package/dist/ConnectionsDrawer-CZU9ku-k.mjs.map +1 -0
  33. package/dist/CurrencyDialog-DumQCTPO.mjs +374 -0
  34. package/dist/CurrencyDialog-DumQCTPO.mjs.map +1 -0
  35. package/dist/CurrencyInput-DaGEQaLW.mjs +88 -0
  36. package/dist/CurrencyInput-DaGEQaLW.mjs.map +1 -0
  37. package/dist/CurrencyText-CCbE6MmF.mjs +21 -0
  38. package/dist/CurrencyText-CCbE6MmF.mjs.map +1 -0
  39. package/dist/DateFormats-HudZ3Bjs.mjs +65 -0
  40. package/dist/DateFormats-HudZ3Bjs.mjs.map +1 -0
  41. package/dist/DateUtil-CzBmbjmA.mjs +75 -0
  42. package/dist/DateUtil-CzBmbjmA.mjs.map +1 -0
  43. package/dist/DebtUtils-i4pI2Uoe.mjs +154 -0
  44. package/dist/DebtUtils-i4pI2Uoe.mjs.map +1 -0
  45. package/dist/Dialog-Bvd2n8hz.mjs +67 -0
  46. package/dist/Dialog-Bvd2n8hz.mjs.map +1 -0
  47. package/dist/Donut-SzzfZDHF.mjs +89 -0
  48. package/dist/Donut-SzzfZDHF.mjs.map +1 -0
  49. package/dist/Drawer-DsnW2o0v.mjs +175 -0
  50. package/dist/Drawer-DsnW2o0v.mjs.map +1 -0
  51. package/dist/EmbeddedCard-DH8vQ3qN.mjs +859 -0
  52. package/dist/EmbeddedCard-DH8vQ3qN.mjs.map +1 -0
  53. package/dist/EmptyState-CJUDc3kD.mjs +85 -0
  54. package/dist/EmptyState-CJUDc3kD.mjs.map +1 -0
  55. package/dist/Error-Dtw6yxkf.mjs +85 -0
  56. package/dist/Error-Dtw6yxkf.mjs.map +1 -0
  57. package/dist/ErrorBoundary-CsdOcnJ9.mjs +24 -0
  58. package/dist/ErrorBoundary-CsdOcnJ9.mjs.map +1 -0
  59. package/dist/ExportCsvAction-C9KWH3Az.mjs +25 -0
  60. package/dist/ExportCsvAction-C9KWH3Az.mjs.map +1 -0
  61. package/dist/GlobalAccountFilter-BhzR5Vb1.mjs +230 -0
  62. package/dist/GlobalAccountFilter-BhzR5Vb1.mjs.map +1 -0
  63. package/dist/GlobalCopyApi-wcnDUzMV.mjs +129 -0
  64. package/dist/GlobalCopyApi-wcnDUzMV.mjs.map +1 -0
  65. package/dist/GoalsUtil-C9EnLWvC.mjs +108 -0
  66. package/dist/GoalsUtil-C9EnLWvC.mjs.map +1 -0
  67. package/dist/HeaderCell-P8w6CmfO.mjs +7 -0
  68. package/dist/HeaderCell-P8w6CmfO.mjs.map +1 -0
  69. package/dist/Help-CkQTjORd.mjs +300 -0
  70. package/dist/Help-CkQTjORd.mjs.map +1 -0
  71. package/dist/Help-aERwhajy.mjs +3210 -0
  72. package/dist/Help-aERwhajy.mjs.map +1 -0
  73. package/dist/IconBacking-DgT8DCeh.mjs +40 -0
  74. package/dist/IconBacking-DgT8DCeh.mjs.map +1 -0
  75. package/dist/InformationTooltip-4su8bn1e.mjs +42 -0
  76. package/dist/InformationTooltip-4su8bn1e.mjs.map +1 -0
  77. package/dist/InvestmentUtil-BItV7uEs.mjs +135 -0
  78. package/dist/InvestmentUtil-BItV7uEs.mjs.map +1 -0
  79. package/dist/LineChart-CUfiH86G.mjs +613 -0
  80. package/dist/LineChart-CUfiH86G.mjs.map +1 -0
  81. package/dist/ListItemAction-BqUCLj_w.mjs +70 -0
  82. package/dist/ListItemAction-BqUCLj_w.mjs.map +1 -0
  83. package/dist/ListItemRow-kH1rn8Xu.mjs +68 -0
  84. package/dist/ListItemRow-kH1rn8Xu.mjs.map +1 -0
  85. package/dist/ListItemWrapper-DRse79Iu.mjs +44 -0
  86. package/dist/ListItemWrapper-DRse79Iu.mjs.map +1 -0
  87. package/dist/Loader-CxeBwuPG.mjs +22 -0
  88. package/dist/Loader-CxeBwuPG.mjs.map +1 -0
  89. package/dist/Localization-DnoVyBNK.mjs +39 -0
  90. package/dist/Localization-DnoVyBNK.mjs.map +1 -0
  91. package/dist/ManageIncome-Dcsnnz86.mjs +906 -0
  92. package/dist/ManageIncome-Dcsnnz86.mjs.map +1 -0
  93. package/dist/MicroWidgetContainer-B2NnKBgW.mjs +46 -0
  94. package/dist/MicroWidgetContainer-B2NnKBgW.mjs.map +1 -0
  95. package/dist/MiniWidgetContainer-Bmv_WeUd.mjs +67 -0
  96. package/dist/MiniWidgetContainer-Bmv_WeUd.mjs.map +1 -0
  97. package/dist/NetWorthUtils-DfSH3z70.mjs +96 -0
  98. package/dist/NetWorthUtils-DfSH3z70.mjs.map +1 -0
  99. package/dist/Notification-DTNYSd8P.mjs +8 -0
  100. package/dist/Notification-DTNYSd8P.mjs.map +1 -0
  101. package/dist/NotificationSettings-CW7okUrk.mjs +678 -0
  102. package/dist/NotificationSettings-CW7okUrk.mjs.map +1 -0
  103. package/dist/NotificationUtils-BRGFTePr.mjs +24 -0
  104. package/dist/NotificationUtils-BRGFTePr.mjs.map +1 -0
  105. package/dist/NumberFormatting--XMeeBfr.mjs +50 -0
  106. package/dist/NumberFormatting--XMeeBfr.mjs.map +1 -0
  107. package/dist/OriginalBalanceAction-YrvxBYAl.mjs +115 -0
  108. package/dist/OriginalBalanceAction-YrvxBYAl.mjs.map +1 -0
  109. package/dist/RecurringSettings-D8hBbXV_.mjs +89 -0
  110. package/dist/RecurringSettings-D8hBbXV_.mjs.map +1 -0
  111. package/dist/RecurringTransactionsUtil-CHWmqvW5.mjs +299 -0
  112. package/dist/RecurringTransactionsUtil-CHWmqvW5.mjs.map +1 -0
  113. package/dist/ResponsiveButton-CC9F_Ezk.mjs +46 -0
  114. package/dist/ResponsiveButton-CC9F_Ezk.mjs.map +1 -0
  115. package/dist/SearchBox-Cpgu_gdO.mjs +51 -0
  116. package/dist/SearchBox-Cpgu_gdO.mjs.map +1 -0
  117. package/dist/Select-CSpkK5cR.mjs +62 -0
  118. package/dist/Select-CSpkK5cR.mjs.map +1 -0
  119. package/dist/SelectionBox-B4xELRgp.mjs +49 -0
  120. package/dist/SelectionBox-B4xELRgp.mjs.map +1 -0
  121. package/dist/SingleSegmentDonut-7Uy6VEld.mjs +70 -0
  122. package/dist/SingleSegmentDonut-7Uy6VEld.mjs.map +1 -0
  123. package/dist/Sizes-DISGrlUg.mjs +7 -0
  124. package/dist/Sizes-DISGrlUg.mjs.map +1 -0
  125. package/dist/SkeletonLoader-BaNboJjD.mjs +39 -0
  126. package/dist/SkeletonLoader-BaNboJjD.mjs.map +1 -0
  127. package/dist/SpendingData-Fii_xATx.mjs +54 -0
  128. package/dist/SpendingData-Fii_xATx.mjs.map +1 -0
  129. package/dist/SpendingLegend-CxvNOg3c.mjs +204 -0
  130. package/dist/SpendingLegend-CxvNOg3c.mjs.map +1 -0
  131. package/dist/StatusBar-CPfSXe80.mjs +31 -0
  132. package/dist/StatusBar-CPfSXe80.mjs.map +1 -0
  133. package/dist/TabContentContainer-B0eYJP5p.mjs +49 -0
  134. package/dist/TabContentContainer-B0eYJP5p.mjs.map +1 -0
  135. package/dist/ToggleListItem-Dl1lXNwj.mjs +92 -0
  136. package/dist/ToggleListItem-Dl1lXNwj.mjs.map +1 -0
  137. package/dist/TransactionDetails-roZ5xLq8.mjs +1708 -0
  138. package/dist/TransactionDetails-roZ5xLq8.mjs.map +1 -0
  139. package/dist/TransactionUtils-BphBJBbU.mjs +235 -0
  140. package/dist/TransactionUtils-BphBJBbU.mjs.map +1 -0
  141. package/dist/TrendsUtil-D9z3kIj_.mjs +70 -0
  142. package/dist/TrendsUtil-D9z3kIj_.mjs.map +1 -0
  143. package/dist/UserStore-C1fdL3Iu.mjs +3054 -0
  144. package/dist/UserStore-C1fdL3Iu.mjs.map +1 -0
  145. package/dist/ViewMoreMicroCard-fnwE0hqd.mjs +1280 -0
  146. package/dist/ViewMoreMicroCard-fnwE0hqd.mjs.map +1 -0
  147. package/dist/WidgetContainer-DJnp6t6c.mjs +483 -0
  148. package/dist/WidgetContainer-DJnp6t6c.mjs.map +1 -0
  149. package/dist/accounts/components/detailsdrawer/Accounts/AccountDetailsDrawer.d.ts +6 -0
  150. package/dist/accounts/index.d.ts +1 -0
  151. package/dist/accounts/index.es.js +784 -12
  152. package/dist/accounts/index.es.js.map +1 -0
  153. package/dist/analytics/index.es.js +140 -155
  154. package/dist/analytics/index.es.js.map +1 -0
  155. package/dist/budgets/index.es.js +1267 -1317
  156. package/dist/budgets/index.es.js.map +1 -0
  157. package/dist/cashflow/index.es.js +943 -1047
  158. package/dist/cashflow/index.es.js.map +1 -0
  159. package/dist/categories/index.es.js +5 -4
  160. package/dist/categories/index.es.js.map +1 -0
  161. package/dist/common/components/DataRow.d.ts +1 -0
  162. package/dist/common/components/ListItemWrapper.d.ts +2 -1
  163. package/dist/common/constants/Analytics.d.ts +3 -0
  164. package/dist/common/index.es.js +310 -101
  165. package/dist/common/index.es.js.map +1 -0
  166. package/dist/core/index.es.js +105 -80
  167. package/dist/core/index.es.js.map +1 -0
  168. package/dist/core/stores/RecurringTransactionsStore.d.ts +29 -1
  169. package/dist/core/stores/TransactionStore.d.ts +1 -0
  170. package/dist/core/types/localization/RecurringCopy.d.ts +14 -1
  171. package/dist/core/types/localization/SpendingCopy.d.ts +1 -0
  172. package/dist/core/utils/DateUtil.d.ts +2 -0
  173. package/dist/core/utils/RecurringTransactionsUtil.d.ts +2 -1
  174. package/dist/dashboard/index.es.js +142 -185
  175. package/dist/dashboard/index.es.js.map +1 -0
  176. package/dist/debts/index.es.js +1273 -1384
  177. package/dist/debts/index.es.js.map +1 -0
  178. package/dist/finstrong/index.es.js +3473 -3367
  179. package/dist/finstrong/index.es.js.map +1 -0
  180. package/dist/goals/index.es.js +984 -1103
  181. package/dist/goals/index.es.js.map +1 -0
  182. package/dist/help/index.es.js +26 -3
  183. package/dist/help/index.es.js.map +1 -0
  184. package/dist/hooks-97sNJ_lf.mjs +78 -0
  185. package/dist/hooks-97sNJ_lf.mjs.map +1 -0
  186. package/dist/insights/components/insights/WeeklyNoSpendDays/BubbleWeek.d.ts +4 -1
  187. package/dist/insights/components/insights/WeeklyNoSpendDays/WeeklyNoSpendDays.d.ts +4 -2
  188. package/dist/insights/index.es.js +4871 -93
  189. package/dist/insights/index.es.js.map +1 -0
  190. package/dist/investments/index.es.js +1523 -1533
  191. package/dist/investments/index.es.js.map +1 -0
  192. package/dist/merchants/index.es.js +65 -75
  193. package/dist/merchants/index.es.js.map +1 -0
  194. package/dist/microinsights/index.es.js +826 -15
  195. package/dist/microinsights/index.es.js.map +1 -0
  196. package/dist/networth/index.es.js +504 -550
  197. package/dist/networth/index.es.js.map +1 -0
  198. package/dist/notifications/index.es.js +162 -169
  199. package/dist/notifications/index.es.js.map +1 -0
  200. package/dist/recurringtransactions/components/RecurringTransactionDetails.d.ts +3 -2
  201. package/dist/recurringtransactions/components/RecurringTransactionDetailsDrawer.d.ts +3 -0
  202. package/dist/recurringtransactions/components/RecurringTransactionList.d.ts +11 -0
  203. package/dist/recurringtransactions/components/UpcomingRecurrenceCard.d.ts +8 -0
  204. package/dist/recurringtransactions/components/actions/LinkTransactionDrawer.d.ts +10 -0
  205. package/dist/recurringtransactions/components/actions/MarkAsPaidDialog.d.ts +7 -0
  206. package/dist/recurringtransactions/components/actions/MarkAsUnpaidDialog.d.ts +7 -0
  207. package/dist/recurringtransactions/index.es.js +1012 -10
  208. package/dist/recurringtransactions/index.es.js.map +1 -0
  209. package/dist/settings/index.es.js +892 -13
  210. package/dist/settings/index.es.js.map +1 -0
  211. package/dist/spending/index.es.js +457 -400
  212. package/dist/spending/index.es.js.map +1 -0
  213. package/dist/transactions/components/shared/transactionlist/TransactionRow.d.ts +1 -0
  214. package/dist/transactions/index.es.js +604 -10
  215. package/dist/transactions/index.es.js.map +1 -0
  216. package/dist/trends/index.es.js +1408 -1268
  217. package/dist/trends/index.es.js.map +1 -0
  218. package/dist/useAccountDisplayName-BsiXA0qf.mjs +24 -0
  219. package/dist/useAccountDisplayName-BsiXA0qf.mjs.map +1 -0
  220. package/dist/useAriaLive-MkYebyUR.mjs +36 -0
  221. package/dist/useAriaLive-MkYebyUR.mjs.map +1 -0
  222. package/dist/useDimensions-CeDR9V8N.mjs +37 -0
  223. package/dist/useDimensions-CeDR9V8N.mjs.map +1 -0
  224. package/dist/useInsightsEnabled-D5Sdm0TJ.mjs +12 -0
  225. package/dist/useInsightsEnabled-D5Sdm0TJ.mjs.map +1 -0
  226. package/dist/useScreenSize-mWpmnh5w.mjs +37 -0
  227. package/dist/useScreenSize-mWpmnh5w.mjs.map +1 -0
  228. package/dist/useWidgetLoadTimer-B0tB-yzL.mjs +20 -0
  229. package/dist/useWidgetLoadTimer-B0tB-yzL.mjs.map +1 -0
  230. package/package.json +30 -30
  231. package/dist/Analytics-BKzTPees.mjs +0 -61
  232. package/dist/GlobalCopyApi-BeXzaDH9.mjs +0 -487
  233. package/dist/HeaderCell-EhCUSjvj.mjs +0 -10
  234. package/dist/Loader-BlVzRtUd.mjs +0 -73
  235. package/dist/MiniWidgetContainer-COwnjfy7.mjs +0 -110
  236. package/dist/OriginalBalanceAction-sbiqaxok.mjs +0 -110
  237. package/dist/SpendingLegend-D15ixlQ1.mjs +0 -222
  238. package/dist/accounts-DkyAiLpg.mjs +0 -15632
  239. package/dist/core-BexP5oiV.mjs +0 -4047
  240. package/dist/help-CctDYrAH.mjs +0 -2308
  241. package/dist/insights/components/insights/P2pCategorization/_tests_/P2pCategorizationMultipleTransaction.test.d.ts +0 -0
  242. package/dist/insights/components/insights/P2pCategorization/_tests_/P2pCategorizationSingleTransaction.test.d.ts +0 -0
  243. package/dist/microinsights-CRf3ChsJ.mjs +0 -1814
  244. package/dist/recurringtransactions-gbJ_NA8u.mjs +0 -1564
  245. package/dist/settings-ZMHe439l.mjs +0 -1526
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccountDetailsDrawer-CZPeLsCq.mjs","sources":["../src/trends/components/TrendsChart.tsx","../src/accounts/components/detailsdrawer/Accounts/AccountActionsRow.tsx","../src/accounts/hooks/useGetMergeableAccounts.tsx","../src/accounts/components/ConnectionStatusIcons.tsx","../src/accounts/components/AccountListItem.tsx","../src/accounts/components/detailsdrawer/Accounts/AccountActions.tsx","../src/accounts/utils/getConnectionMessages.tsx","../src/accounts/components/detailsdrawer/Accounts/AccountConnection.tsx","../src/accounts/components/detailsdrawer/Accounts/AccountDetailEdit.tsx","../src/accounts/components/detailsdrawer/Accounts/AccountDetails.tsx","../src/accounts/components/detailsdrawer/Accounts/AccountDetailsTab.tsx","../src/accounts/components/detailsdrawer/Accounts/ConnectionErrorMessage.tsx","../src/accounts/components/detailsdrawer/Transactions/TransactionsTab.tsx","../src/accounts/components/detailsdrawer/Accounts/AccountDetailsContent.tsx","../src/accounts/components/detailsdrawer/Accounts/AccountDetailsDrawer.tsx"],"sourcesContent":["import { observer } from 'mobx-react-lite'\nimport { useTheme } from '@mui/material/styles'\n\nimport {\n useCategoryStore,\n useGlobalCopyStore,\n INCOME_ACCOUNT_TYPES,\n PAYMENT_ACCOUNT_TYPES,\n SPENDING_ACCOUNT_TYPES,\n} from '../../common'\nimport { AccountType, MonthlyCategoryTotals, TrendsCopy } from '../../core'\n\nimport { useAccountUiStore } from '../../accounts/hooks/useUiStore'\nimport { LineChart } from '../../common/components/charts/LineChart'\nimport type { LineChartDataset, LineChartLabel } from '../../common/components/charts/LineChart'\n\nimport { getIncomeTotals, getPaymentTotals, getSpendingTotals } from '../utils/SpendingData'\n\nconst getDatasets = (\n totals: MonthlyCategoryTotals[],\n accountType: AccountType,\n): LineChartDataset[] => {\n const incomeData = INCOME_ACCOUNT_TYPES.includes(accountType) ? getIncomeTotals(totals) : []\n const paymentData = PAYMENT_ACCOUNT_TYPES.includes(accountType) ? getPaymentTotals(totals) : []\n const spendingData = SPENDING_ACCOUNT_TYPES.includes(accountType) ? getSpendingTotals(totals) : []\n\n // There should always be 1-2 datasets returned. No account type will have all three categories.\n return [incomeData, paymentData, spendingData].filter((data) => data.length > 0)\n}\n\nconst getLabels = (datasets: LineChartDataset[], accountType: AccountType, copy: TrendsCopy) => {\n const [dataA, dataB] = datasets\n const credits = dataA\n const debits = dataB ?? dataA\n const labels: LineChartLabel[] = []\n\n if (credits && debits && INCOME_ACCOUNT_TYPES.includes(accountType)) {\n const lastIncome = credits[credits.length - 1].y\n labels.push({ label: copy.income_label, amount: lastIncome })\n } else if (PAYMENT_ACCOUNT_TYPES.includes(accountType)) {\n const lastPayment = credits[credits.length - 1].y\n labels.push({ label: copy.payments_label, amount: lastPayment })\n }\n\n if (debits && SPENDING_ACCOUNT_TYPES.includes(accountType)) {\n const lastSpending = debits[debits.length - 1].y\n labels.push({ label: copy.spending_label, amount: lastSpending })\n }\n\n return labels\n}\n\nconst TrendsChart = () => {\n const theme = useTheme()\n const { selectedAccount } = useAccountUiStore()\n const { monthlyCategoryTotals } = useCategoryStore()\n const { trends: trendsCopy } = useGlobalCopyStore()\n\n const colors = [theme.palette.chart?.chart1, theme.palette.chart?.chart2]\n const datasets = getDatasets(monthlyCategoryTotals, selectedAccount.account_type)\n const labels = getLabels(datasets, selectedAccount.account_type, trendsCopy)\n const isLoan = [AccountType.LOAN, AccountType.MORTGAGE].includes(selectedAccount.account_type)\n\n return (\n <div data-testid=\"TrendsChart\">\n <LineChart\n colors={colors}\n datasets={datasets}\n height={185}\n labels={labels}\n showAverage={isLoan}\n showAxisHighlight={true}\n showBars={isLoan}\n showLegend={true}\n showTooltip={true}\n showXAxis={true}\n showXAxisTicks={true}\n showYAxis={true}\n showYAxisTicks={true}\n valueFormatterString=\"0,0\"\n />\n </div>\n )\n}\n\nexport default observer(TrendsChart)\n","import ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\n\ninterface AccountActionsRowProps {\n ariaPressed?: boolean\n onClick: () => void\n isLast?: boolean\n primaryText: string\n secondaryText: string\n}\n\nconst AccountActionsRow: React.FC<React.PropsWithChildren<AccountActionsRowProps>> = ({\n ariaPressed,\n children,\n isLast = false,\n onClick,\n primaryText,\n secondaryText,\n}) => {\n return (\n <ListItem\n sx={{\n backgroundColor: 'background.paper',\n position: 'relative',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n bottom: 0,\n right: 0,\n left: isLast ? 0 : 24,\n borderBottom: '1px solid',\n borderColor: 'divider',\n },\n }}\n >\n <ListItemButton aria-pressed={ariaPressed} onClick={onClick}>\n <ListItemText primary={primaryText} secondary={secondaryText} />\n {children}\n </ListItemButton>\n </ListItem>\n )\n}\n\nexport default AccountActionsRow\n","import { useAccountStore } from '../../common'\nimport { useAccountUiStore } from './useUiStore'\n\nexport const useGetMergeableAccounts = () => {\n const { accounts } = useAccountStore()\n const { selectedAccount, selectedMember } = useAccountUiStore()\n return accounts.filter(\n (account) =>\n account.member_guid === selectedMember.guid &&\n selectedMember.successfully_aggregated_at &&\n account.guid !== selectedAccount.guid,\n )\n}\n","import { CheckCircle as CheckCircleIcon, Error as ErrorIcon } from '@mxenabled/mx-icons'\n\nimport { IconBacking } from '../../common'\n\ntype IconProp = {\n size?: number\n}\n\nconst iconStyle = {\n gridRow: 1,\n gridColumn: 1,\n zIndex: 2,\n}\n\nexport const ConnectedStatus = ({ size = 20 }: IconProp) => (\n <IconBacking size={size}>\n <CheckCircleIcon color=\"success\" filled={true} sx={{ fontSize: size, ...iconStyle }} />\n </IconBacking>\n)\n\nexport const ErrorStatus = ({ size = 20 }: IconProp) => (\n <IconBacking size={size}>\n <ErrorIcon color=\"error\" filled={true} sx={{ fontSize: size, ...iconStyle }} />\n </IconBacking>\n)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Badge from '@mui/material/Badge'\nimport Box from '@mui/material/Box'\nimport ListItem, { ListItemOwnProps } from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\nimport { useTheme } from '@mui/material/styles'\n\nimport { InstitutionLogo, Text } from '@mxenabled/mxui'\n\nimport { ErrorStatus } from './ConnectionStatusIcons'\n\nimport { useAccountDisplayName, useAppConfig, useGlobalCopyStore } from '../../common'\nimport { Account, ConnectionStatus } from '../../core'\nimport { getAccountBalanceDetails } from '../utils/AccountFields'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface AccountListItemProps {\n account: Account\n onRowClick?: () => void\n listItemProps?: ListItemOwnProps\n shouldShowConnectionStatus?: boolean\n}\n\nconst AccountListItem: React.FC<AccountListItemProps> = ({\n account,\n onRowClick,\n listItemProps,\n shouldShowConnectionStatus = false,\n}) => {\n const theme = useTheme()\n const displayName = useAccountDisplayName(account)\n const { config } = useAppConfig()\n const { accounts: accountsCopy } = useGlobalCopyStore()\n const { firstSubtitle, firstValue, secondSubtitle, secondValue } = getAccountBalanceDetails(\n account,\n accountsCopy,\n config.display_available_balance_in_accounts,\n )\n\n let statusIcon = undefined\n if (\n account.connectionStatus === ConnectionStatus.Error ||\n account.connectionStatus === ConnectionStatus.RequiresMfa\n ) {\n statusIcon = <ErrorStatus size={16} />\n }\n\n const content = (\n <>\n <ListItemAvatar>\n <Badge\n badgeContent={shouldShowConnectionStatus ? statusIcon : undefined}\n sx={{\n '& .MuiBadge-badge': {\n right: -1,\n },\n }}\n >\n <InstitutionLogo alt=\"MX\" institutionGuid={account.institution_guid || ''} />\n </Badge>\n </ListItemAvatar>\n\n <ListItemText\n disableTypography={true}\n primary={\n <Text\n bold={true}\n color={account.is_hidden ? theme.palette.text.secondary : undefined}\n variant=\"body1\"\n >\n {`${displayName} ${account.account_number ? `*${account.account_number}` : ''}`}{' '}\n {account.is_hidden && !account.is_closed && accountsCopy.is_hidden}\n {account.is_closed && accountsCopy.is_closed}\n </Text>\n }\n secondary={\n <>\n <Box sx={{ alignItems: 'center', display: 'flex', justifyContent: 'space-between' }}>\n <Text variant=\"caption\">{firstSubtitle}</Text>\n <Text bold={true} variant=\"body2\">\n {formatCurrency(firstValue, '0,0.00')}\n </Text>\n </Box>\n <Box sx={{ alignItems: 'center', display: 'flex', justifyContent: 'space-between' }}>\n <Text variant=\"caption\">{secondSubtitle}</Text>\n <Text ml=\"auto\" variant=\"caption\">\n {secondValue}\n </Text>\n </Box>\n </>\n }\n />\n </>\n )\n\n return (\n <ListItem\n {...listItemProps}\n sx={{\n backgroundColor: 'background.paper',\n color: account.is_closed ? 'grey.700' : '',\n ...listItemProps?.sx,\n }}\n >\n {onRowClick ? (\n <ListItemButton alignItems=\"flex-start\" onClick={onRowClick} sx={{ px: 24 }}>\n {content}\n </ListItemButton>\n ) : (\n content\n )}\n </ListItem>\n )\n}\n\nexport default observer(AccountListItem)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport List from '@mui/material/List'\nimport ListSubheader from '@mui/material/ListSubheader'\nimport Switch from '@mui/material/Switch'\n\nimport { Icon, Text } from '@mxenabled/mxui'\n\nimport AccountActionsRow from './AccountActionsRow'\n\nimport {\n ANALYTICS_EVENTS,\n Dialog,\n Drawer,\n useAccountStore,\n useEvent,\n useGlobalCopyStore,\n useTransactionStore,\n} from '../../../../common'\nimport { type Account } from '../../../../core'\nimport { useAccountUiStore } from '../../../hooks/useUiStore'\nimport { useGetMergeableAccounts } from '../../../hooks/useGetMergeableAccounts'\nimport AccountListItem from '../../AccountListItem'\nimport { buildDynamicCopy } from '../../../../core/utils/Localization'\n\ntype UpdatedValue = Pick<Account, 'is_closed'> | Pick<Account, 'is_hidden'>\n\nconst AccountActions = () => {\n const [shouldShowCloseAccountModal, setShouldShowCloseAccountModal] = React.useState(false)\n const [shouldShowAccountMergeDrawer, setShouldShowAccountMergeDrawer] = React.useState(false)\n const [shouldShowMergeConfirmModal, setShouldShowMergeConfirmModal] = React.useState(false)\n const [accountToMerge, setAccountToMerge] = React.useState({} as Account)\n\n const { selectedAccount: account } = useAccountUiStore()\n const { mergeAccounts, updateAccount } = useAccountStore()\n const { accounts: accountsCopy } = useGlobalCopyStore()\n const mergeableAccounts = useGetMergeableAccounts()\n const { onEvent } = useEvent()\n const { modifyTransactionByAccountGuid } = useTransactionStore()\n\n const handleUpdateAccount = async (updatedValue: UpdatedValue) => {\n await updateAccount({\n ...account,\n ...updatedValue,\n })\n if ('is_closed' in updatedValue && updatedValue.is_closed !== account.is_closed)\n modifyTransactionByAccountGuid(account.guid, { accountIsClosed: updatedValue.is_closed })\n }\n\n const handleMergeAccounts = () => {\n mergeAccounts([account.guid, accountToMerge.guid]).finally(() =>\n setShouldShowAccountMergeDrawer(false),\n )\n }\n\n return (\n <>\n <ListSubheader sx={{ backgroundColor: 'transparent', mb: 4, mt: 12, mx: 8 }}>\n <Text bold={true} component=\"h2\" variant=\"caption\">\n {accountsCopy.actions}\n </Text>\n </ListSubheader>\n\n <AccountActionsRow\n ariaPressed={account.is_hidden}\n onClick={() => {\n handleUpdateAccount({ is_hidden: !account.is_hidden })\n onEvent(ANALYTICS_EVENTS.ACCOUNT_DETAILS_CLICK_HIDE, { account_guid: account.guid })\n }}\n primaryText={account.is_hidden ? accountsCopy.unhide_account : accountsCopy.hide_Account}\n secondaryText={\n account.is_hidden ? accountsCopy.include_this_account : accountsCopy.exclude_this_account\n }\n >\n <Switch aria-hidden={true} checked={account.is_hidden} tabIndex={-1} />\n </AccountActionsRow>\n\n <AccountActionsRow\n onClick={() => {\n setShouldShowCloseAccountModal(true)\n onEvent(ANALYTICS_EVENTS.ACCOUNT_DETAILS_CLICK_MARK_CLOSED, {\n account_guid: account.guid,\n })\n }}\n primaryText={account.is_closed ? accountsCopy.mark_as_open : accountsCopy.mark_as_closed}\n secondaryText={\n account.is_closed\n ? accountsCopy.this_will_set_the_closed_account\n : accountsCopy.this_will_set_the_account_balance_to_0\n }\n >\n <Icon name=\"chevron_right\" />\n <div onClick={(e) => e.stopPropagation()}>\n <Dialog\n copy={{\n close_aria: accountsCopy.close_modal,\n title: account.is_closed\n ? accountsCopy.confirm_mark_as_open\n : accountsCopy.confirm_mark_closed,\n }}\n isOpen={shouldShowCloseAccountModal}\n onClose={() => {\n setShouldShowCloseAccountModal(false)\n }}\n onPrimaryAction={() => handleUpdateAccount({ is_closed: !account.is_closed })}\n >\n <Text truncate={false}>\n {\n buildDynamicCopy(\n account.is_closed\n ? accountsCopy.this_will_resume_updating_the_balance\n : accountsCopy.this_will_set_the_balance_of_your_account,\n account.name,\n ) as string\n }\n </Text>\n </Dialog>\n </div>\n </AccountActionsRow>\n\n {mergeableAccounts.length > 0 && (\n <AccountActionsRow\n isLast={true}\n onClick={() => {\n setShouldShowAccountMergeDrawer(true)\n onEvent(ANALYTICS_EVENTS.ACCOUNT_DETAILS_CLICK_MARK_DUPLICATE, {\n account_guid: account.guid,\n })\n }}\n primaryText={accountsCopy.mark_as_duplicate}\n secondaryText={accountsCopy.if_a_connected_account_is_showing_up_twice}\n >\n <Icon name=\"chevron_right\" />\n </AccountActionsRow>\n )}\n\n <Drawer\n ariaLabelClose={accountsCopy.close_drawer}\n isOpen={shouldShowAccountMergeDrawer}\n onClose={() => setShouldShowAccountMergeDrawer(false)}\n title={accountsCopy.mark_as_duplicate}\n >\n <List>\n {mergeableAccounts.map((account: Account) => {\n const isLast = mergeableAccounts.indexOf(account) === mergeableAccounts.length - 1\n return (\n <AccountListItem\n account={account}\n key={account.guid}\n listItemProps={{\n sx: {\n position: 'relative',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n bottom: 0,\n right: 0,\n left: isLast ? 0 : 24,\n borderBottom: '1px solid',\n borderColor: 'divider',\n },\n },\n }}\n onRowClick={() => {\n setShouldShowMergeConfirmModal(true)\n setAccountToMerge(account)\n }}\n />\n )\n })}\n </List>\n {shouldShowMergeConfirmModal && (\n <Dialog\n copy={{\n close_aria: accountsCopy.close_modal,\n title: accountsCopy.confirm_merge,\n }}\n isOpen={shouldShowMergeConfirmModal}\n onClose={() => setShouldShowMergeConfirmModal(false)}\n onPrimaryAction={handleMergeAccounts}\n >\n <Text truncate={false}>\n {\n buildDynamicCopy(\n accountsCopy.this_means_accounts_will_be_merged,\n account.name,\n accountToMerge.name,\n ) as string\n }\n </Text>\n <Text color=\"error\" sx={{ mt: 24 }}>\n {accountsCopy.this_action_cannot_be_undone}\n </Text>\n </Dialog>\n )}\n </Drawer>\n </>\n )\n}\n\nexport default observer(AccountActions)\n","import { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { isToday } from 'date-fns/isToday'\nimport { isYesterday } from 'date-fns/isYesterday'\n\nimport { ConnectCopy, ConnectionStatusEnums, type Member } from '../../core'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\n\nexport interface ConnectionMessageObject {\n cta?: string\n main: string\n statusName: string\n title: string\n}\n\nexport const getConnectionMessages: any = (member: Member, copy: ConnectCopy) => {\n const { connection_messages } = copy\n\n switch (member.connection_status) {\n case ConnectionStatusEnums.CHALLENGED: {\n return {\n cta: connection_messages.challenged_cta,\n main: buildDynamicCopy(\n connection_messages.challenged_connection_description,\n member.name,\n ) as string,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.challenged_connection_title,\n }\n }\n case ConnectionStatusEnums.CLOSED: {\n return {\n main: connection_messages.closed_connection_description,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.closed_connection_title,\n }\n }\n case ConnectionStatusEnums.DEGRADED: {\n return {\n main: connection_messages.degraded_connection_description,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.degraded_connection_title,\n }\n }\n case ConnectionStatusEnums.DELAYED: {\n return {\n main: buildDynamicCopy(\n connection_messages.delayed_connection_description,\n member.name,\n ) as string,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.delayed_connection_title,\n }\n }\n case ConnectionStatusEnums.DENIED: {\n return {\n cta: connection_messages.denied_cta,\n main: buildDynamicCopy(\n connection_messages.denied_connection_description,\n member.name,\n ) as string,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.denied_connection_title,\n }\n }\n case ConnectionStatusEnums.DISABLED: {\n return {\n main: connection_messages.disabled_connection_description,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.disabled_connection_title,\n }\n }\n case ConnectionStatusEnums.DISCONNECTED: {\n return {\n main: buildDynamicCopy(\n connection_messages.disconnected_connection_description,\n member.name,\n ) as string,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.disconnected_connection_title,\n }\n }\n case ConnectionStatusEnums.DISCONTINUED: {\n return {\n main: connection_messages.discontinued_connection_description,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.discontinued_connection_title,\n }\n }\n case ConnectionStatusEnums.EXPIRED: {\n return {\n cta: connection_messages.expired_cta,\n main: connection_messages.expired_connection_description,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.expired_connection_title,\n }\n }\n case ConnectionStatusEnums.FAILED: {\n return {\n main: buildDynamicCopy(\n connection_messages.failed_connection_description,\n member.name,\n ) as string,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.failed_connection_title,\n }\n }\n case ConnectionStatusEnums.IMPAIRED: {\n return {\n cta: connection_messages.impaired_cta,\n main: buildDynamicCopy(\n connection_messages.impaired_connection_description,\n member.name,\n ) as string,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.impaired_connection_title,\n }\n }\n case ConnectionStatusEnums.IMPEDED: {\n return {\n main: buildDynamicCopy(\n connection_messages.impeded_connection_description,\n member.name,\n member.name,\n ) as string,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.impeded_connection_title,\n }\n }\n case ConnectionStatusEnums.IMPORTED: {\n return {\n cta: connection_messages.imported_cta,\n main: buildDynamicCopy(\n connection_messages.imported_connection_description,\n member.name,\n ) as string,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.imported_connection_title,\n }\n }\n case ConnectionStatusEnums.LOCKED: {\n return {\n cta: connection_messages.locked_cta,\n main: buildDynamicCopy(\n connection_messages.locked_connection_description,\n member.name,\n ) as string,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.locked_connection_title,\n }\n }\n case ConnectionStatusEnums.PREVENTED: {\n return {\n cta: connection_messages.prevented_cta,\n main: connection_messages.prevented_connection_description,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.prevented_connection_title,\n }\n }\n case ConnectionStatusEnums.REJECTED: {\n return {\n cta: connection_messages.rejected_cta,\n main: connection_messages.rejected_connection_description,\n statusName: copy.connection_statuses[member.connection_status],\n title: connection_messages.rejected_connection_title,\n }\n }\n default: {\n const lastUpdatedCopy = () => {\n const lastUpdated = member.successfully_aggregated_at\n ? fromUnixTime(member.successfully_aggregated_at)\n : undefined\n const lastUpdatedFormattedTime =\n lastUpdated && formatDate(lastUpdated, DATE_FORMATS_INTL.TIME_STAMP_HOUR_MINUTE)\n\n if (!lastUpdatedFormattedTime) return undefined\n if (isToday(lastUpdated))\n return buildDynamicCopy(copy.last_updated_at, copy.today, lastUpdatedFormattedTime)\n if (isYesterday(lastUpdated))\n return buildDynamicCopy(copy.last_updated_at, copy.yesterday, lastUpdatedFormattedTime)\n return buildDynamicCopy(\n copy.last_updated_at,\n formatDate(lastUpdated, DATE_FORMATS_INTL.MONTH_DAY_YEAR),\n lastUpdatedFormattedTime,\n )\n }\n return {\n statusName: copy.connection_statuses[6], // Connected\n title: lastUpdatedCopy(),\n }\n }\n }\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\nimport ListSubheader from '@mui/material/ListSubheader'\nimport Stack from '@mui/material/Stack'\nimport { useTheme } from '@mui/material/styles'\n\nimport { Icon, Text } from '@mxenabled/mxui'\nimport {\n CheckCircle as CheckCircleRoundedIcon,\n Error as ErrorIcon,\n Language as LanguageRoundedIcon,\n} from '@mxenabled/mx-icons'\n\nimport ConnectDrawer from '../../../../common/components/ConnectDrawer'\nimport { IconBacking, useGlobalCopyStore } from '../../../../common'\nimport { NonConnectedStatuses } from '../../../../core'\nimport { getConnectionMessages } from '../../../utils/getConnectionMessages'\nimport { useAccountUiStore } from '../../../hooks/useUiStore'\n\nconst iconStyle = {\n color: 'background.default',\n fontSize: 20,\n gridRow: 1,\n gridColumn: 1,\n zIndex: 2,\n}\n\nconst AccountConnection = () => {\n const [shouldShowConnectDrawer, setShouldShowConnectDrawer] = React.useState(false)\n const {\n palette: { mode },\n } = useTheme()\n const { selectedMember: member } = useAccountUiStore()\n const { accounts: accountsCopy, connect: connectCopy } = useGlobalCopyStore()\n\n const statusMessages = getConnectionMessages(member, connectCopy)\n\n const status = NonConnectedStatuses.includes(member.connection_status)\n ? {\n color: 'error.main',\n ctaCopy: statusMessages.cta ?? '',\n icon: <ErrorIcon filled={true} sx={{ ...iconStyle }} />,\n mainMessage: statusMessages.statusName,\n secondaryMessage: `${statusMessages.title}.`,\n }\n : {\n color: 'success.main',\n icon: <CheckCircleRoundedIcon filled={true} sx={{ ...iconStyle }} />,\n mainMessage: statusMessages.statusName,\n secondaryMessage: statusMessages.title,\n }\n\n return (\n <>\n <ListSubheader sx={{ mb: 4, mt: 12, mx: 8 }}>\n <Text bold={true} component=\"h2\" variant=\"caption\">\n {accountsCopy.connection_status}\n </Text>\n </ListSubheader>\n <ListItem\n sx={{\n backgroundColor: 'background.paper',\n position: 'relative',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n bottom: 0,\n right: 0,\n left: member.is_manual || !member.institution_url ? 0 : 24,\n borderBottom: '1px solid',\n borderColor: 'divider',\n },\n }}\n >\n {member.is_manual || !status.ctaCopy ? (\n <Stack alignItems=\"center\" direction=\"row\" px={24} py={12}>\n <ListItemAvatar>\n <IconBacking backingSx={{ backgroundColor: status.color, borderRadius: 1 }} size={32}>\n {status.icon}\n </IconBacking>\n </ListItemAvatar>\n <ListItemText primary={status.mainMessage} secondary={status.secondaryMessage} />\n </Stack>\n ) : (\n <ListItemButton onClick={() => setShouldShowConnectDrawer(true)}>\n <ListItemAvatar>\n <IconBacking backingSx={{ backgroundColor: status.color, borderRadius: 1 }} size={32}>\n {status.icon}\n </IconBacking>\n </ListItemAvatar>\n <ListItemText\n primary={status.mainMessage}\n secondary={\n status.secondaryMessage && (\n <>\n {status.secondaryMessage}{' '}\n <Text bold={true} sx={{ color: 'action.active' }} variant=\"caption\">\n {status.ctaCopy}\n </Text>\n </>\n )\n }\n />\n <Icon name=\"chevron_right\" />\n </ListItemButton>\n )}\n </ListItem>\n\n {!member.is_manual && member.institution_url && (\n <>\n <ListItem\n sx={{\n backgroundColor: 'background.paper',\n borderBottom: '1px solid',\n borderColor: 'divider',\n }}\n >\n <ListItemButton component=\"a\" href={member.institution_url} target=\"_blank\">\n <ListItemAvatar>\n <IconBacking\n backingSx={{\n backgroundColor: mode === 'light' ? 'grey.300' : 'grey.700',\n borderRadius: 1,\n }}\n size={32}\n >\n <LanguageRoundedIcon\n sx={{\n ...iconStyle,\n color: mode === 'light' ? 'grey.900' : 'common.white',\n }}\n />\n </IconBacking>\n </ListItemAvatar>\n <ListItemText primary={member.name} secondary={member.institution_url} />\n <Icon name=\"launch\" />\n </ListItemButton>\n </ListItem>\n </>\n )}\n\n {shouldShowConnectDrawer && (\n <ConnectDrawer\n loadWidgetProps={{ current_member_guid: member.guid }}\n onClose={() => setShouldShowConnectDrawer(false)}\n showConnectWidget={shouldShowConnectDrawer}\n title={accountsCopy.manage_connection}\n />\n )}\n </>\n )\n}\n\nexport default observer(AccountConnection)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { addMonths } from 'date-fns/addMonths'\nimport { alpha } from '@mui/material/styles'\n\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3'\nimport { DateCalendar } from '@mui/x-date-pickers/DateCalendar'\nimport FormControl from '@mui/material/FormControl'\nimport InputLabel from '@mui/material/InputLabel'\nimport { LocalizationProvider } from '@mui/x-date-pickers-pro'\nimport MenuItem from '@mui/material/MenuItem'\nimport Select from '@mui/material/Select'\nimport TextField from '@mui/material/TextField'\n\nimport { CurrencyInput, Dialog, useAccountStore, useGlobalCopyStore } from '../../../../common'\nimport { type AccountField } from '../../../utils/AccountFields'\nimport { useAccountUiStore } from '../../../hooks/useUiStore'\nimport { FieldType } from '../../../constants/Accounts'\nimport { buildDynamicCopy } from '../../../../core/utils/Localization'\n\ninterface AccountDetailEditProps {\n field: AccountField\n isOpen: boolean\n onClose: () => void\n}\n\nconst AccountDetailEdit: React.FC<AccountDetailEditProps> = ({ field, isOpen, onClose }) => {\n const { updateAccount } = useAccountStore()\n const { selectedAccount: account } = useAccountUiStore()\n const { accounts: accountsCopy } = useGlobalCopyStore()\n\n const [editedValue, setEditedValue] = React.useState<any>(account[field.name])\n const [errorMessage, setErrorMessage] = React.useState('')\n const [hasValidCurrencyInput, setHasValidCurrencyInput] = React.useState(true)\n\n const handleClose = () => {\n setEditedValue('')\n setErrorMessage('')\n onClose()\n }\n\n const getEditableField = () => {\n switch (field.type) {\n case FieldType.Select: {\n return (\n <FormControl fullWidth={true}>\n <InputLabel id={`${field.label}-select-label`}>{field.label}</InputLabel>\n <Select\n displayEmpty={true}\n id={`${field.label}-select`}\n label={field.label}\n labelId={`${field.label}-select-label`}\n onChange={(e) => setEditedValue(e.target.value)}\n slotProps={{\n input: {\n sx: {\n backgroundColor: 'background.paper',\n },\n },\n }}\n value={editedValue}\n >\n {!editedValue && (\n <MenuItem disabled={true} value=\"\">\n {field.placeholder}\n </MenuItem>\n )}\n {field.options?.map((option) => (\n <MenuItem key={option.value} value={option.value}>\n {option.label}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n )\n }\n\n case FieldType.Currency: {\n return (\n <CurrencyInput\n amount={(editedValue as string | number) || ''}\n ariaLabel={field.placeholder}\n fullWidth={true}\n label={field.label}\n placeholder={field.placeholder}\n setAmount={setEditedValue}\n setHasValidInput={setHasValidCurrencyInput}\n />\n )\n }\n\n case FieldType.Date: {\n return (\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <DateCalendar\n maxDate={addMonths(new Date(), 1)}\n minDate={new Date()}\n onChange={(date: Date) => {\n if (account[field.name] && Number(account[field.name]) <= 31) {\n // gets and sets the day of the month to editedValue\n setEditedValue(date.getDate())\n } else {\n // the day of the month was already passed, so we set it directly to state\n setEditedValue(date)\n }\n }}\n sx={{\n '& .MuiPickersDay-today': {\n color: 'primary.lighter',\n },\n '& .MuiPickersArrowSwitcher-button': {\n color: 'primary.lighter',\n '&:hover': {\n backgroundColor: (theme) => alpha(theme.palette.primary.light, 0.1),\n },\n },\n }}\n views={['day']}\n />\n </LocalizationProvider>\n )\n }\n\n default: {\n return (\n <TextField\n defaultValue={account[field.name]}\n error={!!errorMessage}\n fullWidth={true}\n helperText={errorMessage}\n onChange={updateField}\n placeholder={field.placeholder}\n slotProps={{\n htmlInput: {\n 'aria-label': field.placeholder,\n },\n }}\n />\n )\n }\n }\n }\n\n const saveField = () => {\n // prevents any unnecessary api calls\n if (account[field.name] !== editedValue) {\n updateAccount({\n ...account,\n [field.name]: editedValue,\n })\n }\n handleClose()\n }\n\n const updateField = (e: React.ChangeEvent<HTMLInputElement>) => {\n setEditedValue(e.target.value)\n\n if (field.validation) {\n setErrorMessage(field.validation(e.target.value))\n }\n }\n\n return (\n <Dialog\n copy={{\n close_aria: accountsCopy.close_aria,\n title: buildDynamicCopy(accountsCopy.edit_field, field.label) as string,\n }}\n disablePrimaryButton={!!errorMessage || !hasValidCurrencyInput}\n isOpen={isOpen}\n onClose={handleClose}\n onPrimaryAction={saveField}\n primaryText={accountsCopy.save}\n sx={{\n '& .MuiButton-root:focus-visible, & .MuiButton-root:focus': {\n outline: '2px solid',\n outlineColor: 'primary.main',\n outlineOffset: '2px',\n },\n }}\n >\n {getEditableField()}\n </Dialog>\n )\n}\n\nexport default observer(AccountDetailEdit)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { Icon, Text } from '@mxenabled/mxui'\n\nimport AccountDetailEdit from './AccountDetailEdit'\n\nimport { getAccountDetailFields, type AccountField } from '../../../utils/AccountFields'\nimport { useAccountUiStore } from '../../../hooks/useUiStore'\nimport { useEvent, useGlobalCopyStore } from '../../../../common'\n\nconst AccountDetails = () => {\n const widgetProfile = window.app?.config\n\n const { onEvent } = useEvent()\n const { selectedAccount: account } = useAccountUiStore()\n const { accounts: accountsCopy } = useGlobalCopyStore()\n\n const fields = getAccountDetailFields(account, accountsCopy)\n const canEdit =\n account.member_is_managed_by_user ||\n (!account.member_is_managed_by_user && widgetProfile.enable_renaming_home_accounts)\n\n const [showEditDialog, setShowEditDialog] = React.useState(false)\n const [fieldToEdit, setFieldToEdit] = React.useState<AccountField>(fields[0])\n\n const displayableFields = fields.filter(\n (field) => canEdit || account[field.name] || account[field.name] === 0,\n )\n\n return (\n <>\n {displayableFields.map((field) => {\n const hasValue = account[field.name] || account[field.name] === 0\n const isLast = displayableFields.indexOf(field) === displayableFields.length - 1\n\n const content = (\n <ListItemText\n disableTypography={true}\n primary={<Text sx={{ fontSize: 11 }}>{field.label}</Text>}\n secondary={\n <Text bold={true} sx={{ fontSize: 15 }}>\n {hasValue\n ? (field.valueFormatter(account[field.name]) as string)\n : field.placeholder}\n </Text>\n }\n />\n )\n\n return (\n <React.Fragment key={field.name}>\n {canEdit ? (\n <ListItem\n sx={{\n backgroundColor: 'background.paper',\n px: 0,\n position: 'relative',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n bottom: 0,\n right: 0,\n left: isLast ? 0 : 24,\n borderBottom: '1px solid',\n borderColor: 'divider',\n },\n }}\n >\n <ListItemButton\n onClick={() => {\n setFieldToEdit(field)\n setShowEditDialog(true)\n if (field?.event) onEvent(field.event, { account_guid: account.guid })\n }}\n >\n {content}\n <Icon name=\"chevron_right\" />\n </ListItemButton>\n </ListItem>\n ) : (\n hasValue && (\n <ListItem\n sx={{\n backgroundColor: 'background.paper',\n px: 24,\n position: 'relative',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n bottom: 0,\n right: 0,\n left: isLast ? 0 : 24,\n borderBottom: '1px solid',\n borderColor: 'divider',\n },\n }}\n >\n {content}\n </ListItem>\n )\n )}\n </React.Fragment>\n )\n })}\n {showEditDialog && fieldToEdit && (\n <AccountDetailEdit\n field={fieldToEdit}\n isOpen={showEditDialog}\n onClose={() => setShowEditDialog(false)}\n />\n )}\n </>\n )\n}\n\nexport default observer(AccountDetails)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport List from '@mui/material/List'\n\nimport AccountActions from './AccountActions'\nimport AccountConnection from './AccountConnection'\nimport AccountDetails from './AccountDetails'\n\nimport { ANALYTICS_EVENTS, useEvent } from '../../../../common'\n\nconst AccountDetailsTab = () => {\n const { onEvent } = useEvent()\n React.useEffect(() => onEvent(ANALYTICS_EVENTS.ACCOUNT_DETAILS_VIEW), [])\n\n return (\n <List>\n <AccountDetails />\n <AccountConnection />\n <AccountActions />\n </List>\n )\n}\n\nexport default observer(AccountDetailsTab)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Alert from '@mui/material/Alert'\nimport AlertTitle from '@mui/material/AlertTitle'\nimport Link from '@mui/material/Link'\nimport Paper from '@mui/material/Paper'\n\nimport { Text } from '@mxenabled/mxui'\nimport { Error as ErrorIcon } from '@mxenabled/mx-icons'\n\nimport ConnectDrawer from '../../../../common/components/ConnectDrawer'\n\nimport {\n getConnectionMessages,\n ConnectionMessageObject,\n} from '../../../utils/getConnectionMessages'\nimport { useGlobalCopyStore } from '../../../../common'\nimport { NonConnectedStatuses } from '../../../../core'\nimport { useAccountUiStore } from '../../../hooks/useUiStore'\n\ninterface ConnectionErrorMessageProps {\n setTabValue: (val: number) => void\n}\n\nconst ConnectionErrorMessage: React.FC<ConnectionErrorMessageProps> = ({ setTabValue }) => {\n const [shouldShowConnectDrawer, setShouldShowConnectDrawer] = React.useState(false)\n\n const { selectedMember: member } = useAccountUiStore()\n const { accounts: accountsCopy, connect: connectCopy } = useGlobalCopyStore()\n\n const hasError =\n member.connection_status && NonConnectedStatuses.includes(member.connection_status)\n\n React.useEffect(() => {\n if (hasError) {\n setTabValue(1)\n }\n }, [hasError])\n\n if (!hasError) return\n\n const statusMessages: ConnectionMessageObject = getConnectionMessages(member, connectCopy)\n\n // eslint-disable-next-line consistent-return\n return (\n <>\n <Paper\n sx={{\n mb: 16,\n mt: 24,\n mx: 24,\n }}\n >\n <Alert\n icon={<ErrorIcon filled={true} />}\n role=\"none\"\n severity=\"error\"\n sx={{\n borderLeft: 5,\n borderTopLeftRadius: 6,\n borderBottomLeftRadius: 6,\n borderColor: 'error.main',\n color: 'text.primary',\n '&.MuiPaper-root': {\n backgroundColor: 'background.paper',\n },\n }}\n >\n {statusMessages.title && (\n <AlertTitle sx={{ fontWeight: 600, marginTop: 2 }} variant=\"body1\">\n {statusMessages.title}\n </AlertTitle>\n )}\n <Text component=\"p\" variant=\"subtitle2\">\n {statusMessages.main}\n </Text>\n {statusMessages.cta && (\n <Link\n onClick={() => setShouldShowConnectDrawer(true)}\n sx={{ fontSize: 15, fontWeight: 600, ml: 0 }}\n >\n {statusMessages.cta}\n </Link>\n )}\n </Alert>\n </Paper>\n\n {shouldShowConnectDrawer && (\n <ConnectDrawer\n loadWidgetProps={{ current_member_guid: member.guid }}\n onClose={() => setShouldShowConnectDrawer(false)}\n showConnectWidget={shouldShowConnectDrawer}\n title={accountsCopy.manage_connection}\n />\n )}\n </>\n )\n}\n\nexport default observer(ConnectionErrorMessage)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { subDays, startOfToday, endOfToday } from 'date-fns'\n\nimport {\n ANALYTICS_EVENTS,\n Drawer,\n useEvent,\n useGlobalCopyStore,\n useTransactionStore,\n} from '../../../../common'\nimport { TransactionDetails, TransactionList } from '../../../../transactions'\nimport { useAccountUiStore } from '../../../hooks/useUiStore'\n\nconst TransactionsTab = () => {\n const [guid, setGuid] = React.useState('')\n\n const { onEvent } = useEvent()\n const { selectedAccount } = useAccountUiStore()\n const { accounts: accountsCopy } = useGlobalCopyStore()\n const { isTransactionDataLoaded, loadTransactionData, setFilter, sortedTransactions } =\n useTransactionStore()\n\n React.useEffect(() => {\n if (!isTransactionDataLoaded) {\n loadTransactionData().finally()\n }\n }, [])\n\n const transaction = React.useMemo(\n () => sortedTransactions.find((t) => t.guid === guid),\n [guid, sortedTransactions],\n )\n\n React.useEffect(() => {\n setFilter({\n dateRange: { start: subDays(startOfToday(), 90), end: endOfToday() },\n accounts: [selectedAccount.guid],\n })\n }, [selectedAccount])\n\n React.useEffect(() => onEvent(ANALYTICS_EVENTS.ACCOUNT_DETAILS_VIEW_TRANSACTIONS), [])\n\n return (\n <>\n <TransactionList onClick={setGuid} />\n {transaction && (\n <Drawer\n ariaLabelClose={accountsCopy.close_drawer}\n isOpen={!!guid}\n onClose={() => setGuid('')}\n title={accountsCopy.transaction_drawer_title}\n >\n <TransactionDetails transaction={transaction} />\n </Drawer>\n )}\n </>\n )\n}\n\nexport default observer(TransactionsTab)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\n\nimport { TabContentContainer, useGlobalCopyStore } from '../../../../common'\n\nimport AccountDetailsTab from './AccountDetailsTab'\nimport ConnectionErrorMessage from './ConnectionErrorMessage'\nimport TransactionsTab from '../Transactions/TransactionsTab'\n\nconst AccountDetailsContent = () => {\n const [tabValue, setTabValue] = React.useState(0)\n\n const { accounts: accountsCopy } = useGlobalCopyStore()\n\n return (\n <>\n <ConnectionErrorMessage setTabValue={setTabValue} />\n\n <Tabs\n aria-label={accountsCopy.transactions_and_details_aria}\n centered={true}\n onChange={(_, val) => setTabValue(val)}\n textColor=\"primary\"\n value={tabValue}\n variant=\"fullWidth\"\n >\n <Tab\n aria-controls=\"transaction-details-tabpanel-0\"\n id=\"transaction-details-tab-0\"\n label={accountsCopy.transactions}\n />\n <Tab\n aria-controls=\"account-details-tabpanel-1\"\n id=\"account-details-tab-1\"\n label={accountsCopy.account_details}\n />\n </Tabs>\n\n <TabContentContainer index={0} name=\"transaction-details\" value={tabValue}>\n <TransactionsTab />\n </TabContentContainer>\n\n <TabContentContainer index={1} name=\"account-details\" value={tabValue}>\n <AccountDetailsTab />\n </TabContentContainer>\n </>\n )\n}\n\nexport default observer(AccountDetailsContent)\n","import { Drawer, useGlobalCopyStore } from '../../../../common'\nimport TrendsChart from '../../../../trends/components/TrendsChart'\n\nimport AccountDetailsContent from './AccountDetailsContent'\nimport AccountDetailsHeader from './AccountDetailsHeader'\n\ninterface AccountDetailsDrawerProps {\n isOpen: boolean\n onClose: () => void\n}\n\nconst AccountDetailsDrawer = ({ isOpen, onClose }: AccountDetailsDrawerProps) => {\n const { accounts: accountsCopy } = useGlobalCopyStore()\n\n return (\n <Drawer\n ariaLabelClose={accountsCopy.close_account_details_aria}\n isOpen={isOpen}\n onClose={onClose}\n title={accountsCopy.account_details}\n >\n <AccountDetailsHeader ChartComponent={TrendsChart} />\n\n <AccountDetailsContent />\n </Drawer>\n )\n}\n\nexport default AccountDetailsDrawer\n"],"names":["getDatasets","totals","accountType","incomeData","INCOME_ACCOUNT_TYPES","getIncomeTotals","paymentData","PAYMENT_ACCOUNT_TYPES","getPaymentTotals","spendingData","SPENDING_ACCOUNT_TYPES","getSpendingTotals","data","getLabels","datasets","copy","dataA","dataB","credits","debits","labels","lastIncome","lastPayment","lastSpending","TrendsChart","theme","useTheme","selectedAccount","useAccountUiStore","monthlyCategoryTotals","useCategoryStore","trendsCopy","useGlobalCopyStore","colors","isLoan","AccountType","jsx","LineChart","TrendsChart$1","observer","AccountActionsRow","ariaPressed","children","isLast","onClick","primaryText","secondaryText","ListItem","jsxs","ListItemButton","ListItemText","useGetMergeableAccounts","accounts","useAccountStore","selectedMember","account","iconStyle","ErrorStatus","size","IconBacking","ErrorIcon","AccountListItem","onRowClick","listItemProps","shouldShowConnectionStatus","displayName","useAccountDisplayName","config","useAppConfig","accountsCopy","firstSubtitle","firstValue","secondSubtitle","secondValue","getAccountBalanceDetails","statusIcon","ConnectionStatus","content","Fragment","ListItemAvatar","Badge","InstitutionLogo","Text","Box","formatCurrency","AccountListItem$1","AccountActions","shouldShowCloseAccountModal","setShouldShowCloseAccountModal","React","shouldShowAccountMergeDrawer","setShouldShowAccountMergeDrawer","shouldShowMergeConfirmModal","setShouldShowMergeConfirmModal","accountToMerge","setAccountToMerge","mergeAccounts","updateAccount","mergeableAccounts","onEvent","useEvent","modifyTransactionByAccountGuid","useTransactionStore","handleUpdateAccount","updatedValue","handleMergeAccounts","ListSubheader","ANALYTICS_EVENTS","Switch","Icon","e","Dialog","buildDynamicCopy","Drawer","List","AccountActions$1","getConnectionMessages","member","connection_messages","ConnectionStatusEnums","lastUpdatedCopy","lastUpdated","fromUnixTime","lastUpdatedFormattedTime","formatDate","DATE_FORMATS_INTL","isToday","isYesterday","AccountConnection","shouldShowConnectDrawer","setShouldShowConnectDrawer","mode","connectCopy","statusMessages","status","NonConnectedStatuses","CheckCircleRoundedIcon","Stack","LanguageRoundedIcon","ConnectDrawer","AccountConnection$1","AccountDetailEdit","field","isOpen","onClose","editedValue","setEditedValue","errorMessage","setErrorMessage","hasValidCurrencyInput","setHasValidCurrencyInput","handleClose","getEditableField","FieldType","FormControl","InputLabel","Select","MenuItem","option","CurrencyInput","LocalizationProvider","AdapterDateFns","DateCalendar","addMonths","date","alpha","TextField","updateField","saveField","AccountDetailEdit$1","AccountDetails","widgetProfile","fields","getAccountDetailFields","canEdit","showEditDialog","setShowEditDialog","fieldToEdit","setFieldToEdit","displayableFields","hasValue","AccountDetails$1","AccountDetailsTab","AccountDetailsTab$1","ConnectionErrorMessage","setTabValue","hasError","Paper","Alert","AlertTitle","Link","ConnectionErrorMessage$1","TransactionsTab","guid","setGuid","isTransactionDataLoaded","loadTransactionData","setFilter","sortedTransactions","transaction","t","subDays","startOfToday","endOfToday","TransactionList","TransactionDetails","TransactionsTab$1","AccountDetailsContent","tabValue","Tabs","_","val","Tab","TabContentContainer","AccountDetailsContent$1","AccountDetailsDrawer","AccountDetailsHeader"],"mappings":"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"}
@@ -0,0 +1,231 @@
1
+ import { jsx as l, jsxs as p } from "react/jsx-runtime";
2
+ import { observer as v } from "mobx-react-lite";
3
+ import d from "@mui/material/Stack";
4
+ import { Text as b, Icon as y, H3 as w, InstitutionLogo as G, H2 as M } from "@mxenabled/mxui";
5
+ import { f as _, i as C, a as H, b as U } from "./NumberFormatting--XMeeBfr.mjs";
6
+ import h from "react";
7
+ import { G as Y, c as A, l as j, e as k, i as V, u as B } from "./hooks-97sNJ_lf.mjs";
8
+ import { c as u, b as z, f as W, h as $ } from "./Account-DR7Plrqy.mjs";
9
+ import { a as q, u as K, i as J, b as Q, c as X } from "./AccountUtils-B8ZzWI-d.mjs";
10
+ import { F as o } from "./Connect-BH0Pt6zc.mjs";
11
+ import { j as g } from "./DateUtil-CzBmbjmA.mjs";
12
+ import { b as s } from "./Localization-DnoVyBNK.mjs";
13
+ import { f as T, D } from "./DateFormats-HudZ3Bjs.mjs";
14
+ import Z from "@mui/material/Card";
15
+ import ee from "@mui/material/CardContent";
16
+ import te from "@mui/material/CardHeader";
17
+ import { L as ae } from "./Loader-CxeBwuPG.mjs";
18
+ import { I as ne, P as ie, S as re } from "./TabContentContainer-B0eYJP5p.mjs";
19
+ import { u as le } from "./useAccountDisplayName-BsiXA0qf.mjs";
20
+ const S = () => {
21
+ if (!h.useContext(Y))
22
+ throw new Error("useCategoryUiStore() must be used within the GlobalDataContext");
23
+ return A().uiStore;
24
+ }, Oe = (a, e) => {
25
+ const r = [
26
+ {
27
+ event: "account_details_click_account_name",
28
+ label: e.account_name,
29
+ name: "user_name",
30
+ placeholder: s(e.enter_value, e.account_name),
31
+ type: o.Input,
32
+ validation: (t) => t ? "" : s(e.field_is_required, e.account_name),
33
+ valueFormatter: (t) => t
34
+ }
35
+ ];
36
+ if (q(a)) {
37
+ r.unshift({
38
+ label: e.account_balance,
39
+ name: "balance",
40
+ placeholder: s(e.enter_value, e.account_balance),
41
+ type: o.Currency,
42
+ valueFormatter: (n) => _(n, "0,0.00")
43
+ });
44
+ const t = Object.keys(u).filter((n) => Number(n)).map((n) => ({
45
+ label: e.account_types[n],
46
+ value: Number(n),
47
+ icon: /* @__PURE__ */ l(y, { name: z[n] })
48
+ }));
49
+ r.push({
50
+ label: e.account_type,
51
+ name: "account_type",
52
+ options: t,
53
+ placeholder: s(e.select_value, e.account_type),
54
+ type: o.Select,
55
+ valueFormatter: (n) => t.find((i) => i.value === n)?.label
56
+ });
57
+ }
58
+ if (a.account_type === u.PROPERTY) {
59
+ const t = Object.keys(W).filter((n) => Number(n)).map((n) => ({
60
+ label: e.property_types[n],
61
+ value: Number(n),
62
+ icon: /* @__PURE__ */ l(y, { name: $[n] })
63
+ }));
64
+ r.push({
65
+ label: e.property_type,
66
+ name: "property_type",
67
+ options: t,
68
+ placeholder: s(e.select_value, e.property_type),
69
+ type: o.Select,
70
+ valueFormatter: (n) => t.find((i) => i.value === n)?.label
71
+ });
72
+ }
73
+ if (K(a)) {
74
+ let t = e.interest_rate, n = "interest_rate";
75
+ a.is_manual || (typeof a.apr == "number" && (t = e.apr, n = "apr"), typeof a.apy == "number" && (t = e.apy, n = "apy")), r.push({
76
+ event: "account_details_click_interest_rate",
77
+ label: t,
78
+ name: n,
79
+ placeholder: s(e.enter_value, t),
80
+ type: o.Input,
81
+ validation: (i) => C(i) ? "" : e.error_amount_is_invalid,
82
+ valueFormatter: (i) => C(i) ? H(i / 100) : i
83
+ });
84
+ }
85
+ return J(a) && (r.push({
86
+ label: e.minimum_payment,
87
+ name: "minimum_payment",
88
+ placeholder: s(e.enter_value, e.minimum_payment),
89
+ type: o.Currency,
90
+ valueFormatter: (t) => _(t, "0,0.00")
91
+ }), a.payment_due_at ? r.push({
92
+ label: e.next_payment,
93
+ name: "payment_due_at",
94
+ type: o.Date,
95
+ valueFormatter: (t) => {
96
+ const n = typeof t == "number" ? g(t) : t;
97
+ return T(n, D.MED_MONTH_SHORT_DAY_FULL_YEAR);
98
+ }
99
+ }) : r.push({
100
+ label: e.day_payment_due,
101
+ name: "day_payment_is_due",
102
+ placeholder: s(e.enter_value, e.day_payment_due),
103
+ type: o.Date,
104
+ valueFormatter: (t) => s(
105
+ e.day_of_every_month,
106
+ U(t <= 31 ? t : new Date(t).getDate())
107
+ )
108
+ })), Q(a) && r.push({
109
+ label: e.credit_limit,
110
+ name: "credit_limit",
111
+ placeholder: s(e.enter_value, e.credit_limit),
112
+ type: o.Currency,
113
+ valueFormatter: (t) => _(t, "0,0.00")
114
+ }), X(a) && r.push({
115
+ label: e.original_balance,
116
+ minAmount: 1,
117
+ name: "original_balance",
118
+ placeholder: s(e.enter_value, e.original_balance),
119
+ type: o.Currency,
120
+ valueFormatter: (t) => _(t, "0,0.00")
121
+ }), r;
122
+ }, I = (a, e, r) => {
123
+ let t = "", n = null, i = null, m = null, c = !1;
124
+ switch (a.account_type) {
125
+ // checking or savings
126
+ case 1:
127
+ case 2: {
128
+ a.available_balance && r ? (t = e.available_balance, n = a.available_balance, i = a.available_balance ? e.current_balance : null, m = _(a.balance, "0,0.00"), c = !0) : (t = e.current_balance, n = a.balance);
129
+ break;
130
+ }
131
+ // credit cards, loans, investments, etc
132
+ default:
133
+ if (t = e.current_balance, n = a.balance, a.minimum_payment && a.payment_due_at) {
134
+ const f = g(a.payment_due_at);
135
+ i = /* @__PURE__ */ l(b, { component: "strong", variant: "caption", children: s(
136
+ e.payment_due_on,
137
+ _(a.minimum_payment, "0,0.00"),
138
+ T(f, D.FULL_MONTH_DAY)
139
+ ) });
140
+ } else a.credit_limit && (i = e.available_credit, m = _(a.credit_limit - (a?.balance ?? 0), "0,0.00"));
141
+ }
142
+ return {
143
+ firstSubtitle: t,
144
+ firstValue: n,
145
+ secondSubtitle: i,
146
+ secondValue: m,
147
+ hasAvailableBalance: c
148
+ };
149
+ }, Pe = (a, e, r) => a.reduce((n, i) => {
150
+ const c = I(i, e, r).firstValue || 0;
151
+ return n + c;
152
+ }, 0), se = (a, e) => {
153
+ const r = [u.LOAN, u.MORTGAGE, u.PROPERTY].includes(
154
+ a
155
+ ), t = [
156
+ u.CREDIT_CARD,
157
+ u.LINE_OF_CREDIT,
158
+ u.PREPAID,
159
+ u.CHECKING_LINE_OF_CREDIT
160
+ ].includes(a);
161
+ return r ? { title: e.label_payments, description: e.chart_title_payments } : t ? { title: e.label_payments_spend, description: e.chart_title_payments_spend } : { title: e.label_income_spend, description: e.chart_title_income_spend };
162
+ }, oe = ({
163
+ sx: a,
164
+ ChartComponent: e,
165
+ header: r
166
+ }) => {
167
+ const { loadMonthlyCategoryTotals: t } = j(), { isInitialized: n } = k(), { selectedAccount: i } = S(), [m, c] = h.useState(!1);
168
+ return h.useEffect(() => {
169
+ n && t([i]).finally(() => {
170
+ c(!0);
171
+ });
172
+ }, [n, i]), !n || !m ? /* @__PURE__ */ l(ae, {}) : /* @__PURE__ */ p(
173
+ Z,
174
+ {
175
+ sx: {
176
+ "& .MuiCardContent-root:last-child": {
177
+ pb: 0
178
+ },
179
+ ...a
180
+ },
181
+ children: [
182
+ /* @__PURE__ */ l(te, { sx: { pb: 0 }, title: /* @__PURE__ */ l(w, { sx: { pb: 4 }, children: r }) }),
183
+ /* @__PURE__ */ l(ee, { sx: { p: 0 }, children: e ? /* @__PURE__ */ l(e, {}) : null })
184
+ ]
185
+ }
186
+ );
187
+ }, ue = v(oe), me = ({
188
+ customDetailsChart: a,
189
+ ChartComponent: e
190
+ }) => {
191
+ const { institutions: r } = A(), { selectedAccount: t } = S(), { config: n } = V(), { accounts: i } = B(), { firstSubtitle: m, firstValue: c, hasAvailableBalance: f, secondSubtitle: N, secondValue: E } = I(t, i, n.display_available_balance_in_accounts), F = r.find(
192
+ (L) => L.guid === t?.institution_guid
193
+ ), O = [
194
+ ...ne,
195
+ ...ie,
196
+ ...re
197
+ ].includes(t.account_type), P = le(t), { title: x, description: R } = se(t.account_type, i);
198
+ return /* @__PURE__ */ p(d, { bgcolor: "background.default", p: 24, children: [
199
+ /* @__PURE__ */ p(d, { gap: 12, children: [
200
+ /* @__PURE__ */ l(
201
+ G,
202
+ {
203
+ alt: i.institution_logo_alt,
204
+ institutionGuid: t.institution_guid || "",
205
+ size: 64
206
+ }
207
+ ),
208
+ /* @__PURE__ */ l(b, { variant: "body2", children: F?.name })
209
+ ] }),
210
+ /* @__PURE__ */ p(d, { gap: 8, mb: 24, mt: 4, children: [
211
+ /* @__PURE__ */ l(M, { children: P }),
212
+ /* @__PURE__ */ p(d, { direction: "row", justifyContent: "space-between", children: [
213
+ /* @__PURE__ */ l(b, { bold: f, variant: "body1", children: m }),
214
+ /* @__PURE__ */ l(b, { bold: !0, variant: "body1", children: _(c, "0,0.00") })
215
+ ] }),
216
+ /* @__PURE__ */ p(d, { direction: "row", justifyContent: "space-between", children: [
217
+ /* @__PURE__ */ l(b, { variant: "body2", children: N }),
218
+ /* @__PURE__ */ l(b, { variant: "body2", children: E })
219
+ ] })
220
+ ] }),
221
+ O && /* @__PURE__ */ l(d, { "aria-label": R, role: "img", children: a || /* @__PURE__ */ l(ue, { ChartComponent: e, header: x }) })
222
+ ] });
223
+ }, xe = v(me);
224
+ export {
225
+ xe as A,
226
+ I as a,
227
+ Oe as b,
228
+ Pe as g,
229
+ S as u
230
+ };
231
+ //# sourceMappingURL=AccountDetailsHeader-BvbCUQSS.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccountDetailsHeader-BvbCUQSS.mjs","sources":["../src/accounts/hooks/useUiStore.ts","../src/accounts/utils/AccountFields.tsx","../src/accounts/utils/AccountDetails.ts","../src/accounts/components/detailsdrawer/Accounts/AccountDetailsChart.tsx","../src/accounts/components/detailsdrawer/Accounts/AccountDetailsHeader.tsx"],"sourcesContent":["import React from 'react'\nimport { GlobalDataContext, useAccountStore } from '../../common'\n\nexport const useAccountUiStore = () => {\n const context = React.useContext(GlobalDataContext)\n\n if (!context) {\n throw new Error('useCategoryUiStore() must be used within the GlobalDataContext')\n }\n\n return useAccountStore().uiStore\n}\n","import { Icon, Text } from '@mxenabled/mxui'\n\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { AccountIcon, AccountType, PropertyType } from '../../core'\nimport type { Account, AccountsCopy } from '../../core'\n\nimport { PropertyIcon } from '../../core/types/Account'\nimport {\n isAccountLiability,\n isManual,\n usesCreditLimitField,\n usesInterestRateField,\n usesOriginalBalanceField,\n} from '../../core/utils/AccountUtils'\nimport { FieldType } from '../constants/Accounts'\nimport { fromUnixUTC } from '../../core/utils/DateUtil'\nimport {\n formatCurrency,\n formatOrdinal,\n formatPercentage,\n isValidNumber,\n} from '../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\n\ntype SelectOption = {\n label: string\n value: number\n icon: React.ReactElement\n}\n\nexport type AccountField = {\n event?: string\n label: string\n minAmount?: number\n options?: SelectOption[]\n name: keyof Account\n placeholder?: string\n type?: string\n validation?: (val: any) => string\n valueFormatter: (val: any) => any\n}\n\nexport const getAccountDetailFields = (account: Account, copy: AccountsCopy) => {\n const fields: AccountField[] = [\n {\n event: 'account_details_click_account_name',\n label: copy.account_name,\n name: 'user_name',\n placeholder: buildDynamicCopy(copy.enter_value, copy.account_name) as string,\n type: FieldType.Input,\n validation: (val: string) =>\n val ? '' : (buildDynamicCopy(copy.field_is_required, copy.account_name) as string),\n valueFormatter: (val) => val,\n },\n ]\n\n if (isManual(account)) {\n fields.unshift({\n label: copy.account_balance,\n name: 'balance',\n placeholder: buildDynamicCopy(copy.enter_value, copy.account_balance) as string,\n type: FieldType.Currency,\n valueFormatter: (val) => formatCurrency(val, '0,0.00'),\n })\n\n const accountTypeOptions = Object.keys(AccountType)\n .filter((key) => Number(key))\n .map((value) => ({\n label: copy.account_types[value],\n value: Number(value),\n icon: <Icon name={AccountIcon[value]} />,\n }))\n\n fields.push({\n label: copy.account_type,\n name: 'account_type',\n options: accountTypeOptions,\n placeholder: buildDynamicCopy(copy.select_value, copy.account_type) as string,\n type: FieldType.Select,\n valueFormatter: (val) => accountTypeOptions.find((option) => option.value === val)?.label,\n })\n }\n\n if (account.account_type === AccountType.PROPERTY) {\n const propertyTypeOptions = Object.keys(PropertyType)\n .filter((key) => Number(key))\n .map((value) => ({\n label: copy.property_types[value],\n value: Number(value),\n icon: <Icon name={PropertyIcon[value]} />,\n }))\n\n fields.push({\n label: copy.property_type,\n name: 'property_type',\n options: propertyTypeOptions,\n placeholder: buildDynamicCopy(copy.select_value, copy.property_type) as string,\n type: FieldType.Select,\n valueFormatter: (val) => propertyTypeOptions.find((option) => option.value === val)?.label,\n })\n }\n\n if (usesInterestRateField(account)) {\n let label = copy.interest_rate\n let fieldName = 'interest_rate' as keyof Account\n\n if (!account.is_manual) {\n if (typeof account.apr === 'number') {\n label = copy.apr\n fieldName = 'apr'\n }\n if (typeof account.apy === 'number') {\n label = copy.apy\n fieldName = 'apy'\n }\n }\n\n fields.push({\n event: 'account_details_click_interest_rate',\n label,\n name: fieldName,\n placeholder: buildDynamicCopy(copy.enter_value, label) as string,\n type: FieldType.Input,\n validation: (val) => (!isValidNumber(val) ? copy.error_amount_is_invalid : ''),\n valueFormatter: (val) => (isValidNumber(val) ? formatPercentage(val / 100) : val),\n })\n }\n\n if (isAccountLiability(account)) {\n fields.push({\n label: copy.minimum_payment,\n name: 'minimum_payment',\n placeholder: buildDynamicCopy(copy.enter_value, copy.minimum_payment) as string,\n type: FieldType.Currency,\n valueFormatter: (val) => formatCurrency(val, '0,0.00'),\n })\n\n if (account.payment_due_at) {\n fields.push({\n label: copy.next_payment,\n name: 'payment_due_at',\n type: FieldType.Date,\n valueFormatter: (val) => {\n // accounts for Unix and DateTime values\n const dateTimeStamp = typeof val === 'number' ? fromUnixUTC(val) : val\n return formatDate(dateTimeStamp, DATE_FORMATS_INTL.MED_MONTH_SHORT_DAY_FULL_YEAR)\n },\n })\n } else {\n fields.push({\n label: copy.day_payment_due,\n name: 'day_payment_is_due',\n placeholder: buildDynamicCopy(copy.enter_value, copy.day_payment_due) as string,\n type: FieldType.Date,\n valueFormatter: (val) =>\n buildDynamicCopy(\n copy.day_of_every_month,\n formatOrdinal(val <= 31 ? val : new Date(val).getDate()),\n ) as string,\n })\n }\n }\n\n if (usesCreditLimitField(account)) {\n fields.push({\n label: copy.credit_limit,\n name: 'credit_limit',\n placeholder: buildDynamicCopy(copy.enter_value, copy.credit_limit) as string,\n type: FieldType.Currency,\n valueFormatter: (val) => formatCurrency(val, '0,0.00'),\n })\n }\n\n if (usesOriginalBalanceField(account)) {\n fields.push({\n label: copy.original_balance,\n minAmount: 1,\n name: 'original_balance',\n placeholder: buildDynamicCopy(copy.enter_value, copy.original_balance) as string,\n type: FieldType.Currency,\n valueFormatter: (val) => formatCurrency(val, '0,0.00'),\n })\n }\n\n return fields\n}\n\nexport const getAccountBalanceDetails = (\n account: Account,\n copy: AccountsCopy,\n showAvailableBalance: boolean,\n) => {\n let firstSubtitle = ''\n let firstValue = null\n let secondSubtitle = null\n let secondValue = null\n let hasAvailableBalance = false\n\n switch (account.account_type) {\n // checking or savings\n case 1:\n case 2: {\n // some savings accounts only have balance, and not available_balance\n if (account.available_balance && showAvailableBalance) {\n firstSubtitle = copy.available_balance\n firstValue = account.available_balance\n secondSubtitle = account.available_balance ? copy.current_balance : null\n secondValue = formatCurrency(account.balance, '0,0.00')\n hasAvailableBalance = true\n } else {\n firstSubtitle = copy.current_balance\n firstValue = account.balance\n }\n break\n }\n // credit cards, loans, investments, etc\n default: {\n firstSubtitle = copy.current_balance\n firstValue = account.balance\n if (account.minimum_payment && account.payment_due_at) {\n const dateTimeStamp = fromUnixUTC(account.payment_due_at)\n secondSubtitle = (\n <Text component=\"strong\" variant=\"caption\">\n {\n buildDynamicCopy(\n copy.payment_due_on,\n formatCurrency(account.minimum_payment, '0,0.00'),\n formatDate(dateTimeStamp, DATE_FORMATS_INTL.FULL_MONTH_DAY),\n ) as string\n }\n </Text>\n )\n } else if (account.credit_limit) {\n secondSubtitle = copy.available_credit\n secondValue = formatCurrency(account.credit_limit - (account?.balance ?? 0), '0,0.00')\n }\n }\n }\n\n return {\n firstSubtitle,\n firstValue,\n secondSubtitle,\n secondValue,\n hasAvailableBalance,\n }\n}\n\nexport const getClosedAccountBalanceTotal = (\n accounts: Account[],\n copy: AccountsCopy,\n showAvailableBalance: boolean,\n) => {\n const total = accounts.reduce((sum, account) => {\n const details = getAccountBalanceDetails(account, copy, showAvailableBalance)\n const firstValue = details.firstValue || 0\n return sum + firstValue\n }, 0)\n\n return total\n}\n","import { AccountType, type AccountsCopy } from '../../core'\n\nexport const getChartLabels = (\n accountType: AccountType,\n copy: AccountsCopy,\n): { title: string; description: string } => {\n const hasPayments = [AccountType.LOAN, AccountType.MORTGAGE, AccountType.PROPERTY].includes(\n accountType,\n )\n\n const hasPaymentsAndSpend = [\n AccountType.CREDIT_CARD,\n AccountType.LINE_OF_CREDIT,\n AccountType.PREPAID,\n AccountType.CHECKING_LINE_OF_CREDIT,\n ].includes(accountType)\n\n if (hasPayments) return { title: copy.label_payments, description: copy.chart_title_payments }\n if (hasPaymentsAndSpend)\n return { title: copy.label_payments_spend, description: copy.chart_title_payments_spend }\n return { title: copy.label_income_spend, description: copy.chart_title_income_spend }\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Card from '@mui/material/Card'\nimport CardContent from '@mui/material/CardContent'\nimport CardHeader from '@mui/material/CardHeader'\n\nimport { H3 } from '@mxenabled/mxui'\n\nimport { Loader, useCategoryStore, useGlobalStore } from '../../../../common'\nimport { MiniWidgetProps } from '../../../../core'\n\nimport { useAccountUiStore } from '../../../hooks/useUiStore'\n\ninterface AccountDetailsChartProps extends MiniWidgetProps {\n ChartComponent?: React.ComponentType\n header?: string\n}\n\nconst AccountDetailsChart: React.FC<AccountDetailsChartProps> = ({\n sx,\n ChartComponent,\n header,\n}) => {\n const { loadMonthlyCategoryTotals } = useCategoryStore()\n const { isInitialized } = useGlobalStore()\n const { selectedAccount } = useAccountUiStore()\n\n const [isWidgetInitialized, setIsWidgetInitialized] = React.useState(false)\n\n React.useEffect(() => {\n if (isInitialized) {\n loadMonthlyCategoryTotals([selectedAccount]).finally(() => {\n setIsWidgetInitialized(true)\n })\n }\n }, [isInitialized, selectedAccount])\n\n if (!isInitialized || !isWidgetInitialized) {\n return <Loader />\n }\n\n return (\n <Card\n sx={{\n '& .MuiCardContent-root:last-child': {\n pb: 0,\n },\n ...sx,\n }}\n >\n <CardHeader sx={{ pb: 0 }} title={<H3 sx={{ pb: 4 }}>{header}</H3>} />\n\n <CardContent sx={{ p: 0 }}>{ChartComponent ? <ChartComponent /> : null}</CardContent>\n </Card>\n )\n}\n\nexport default observer(AccountDetailsChart)\n","import { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\n\nimport { H2, InstitutionLogo, Text } from '@mxenabled/mxui'\n\nimport {\n useAccountStore,\n INCOME_ACCOUNT_TYPES,\n PAYMENT_ACCOUNT_TYPES,\n SPENDING_ACCOUNT_TYPES,\n useAccountDisplayName,\n useGlobalCopyStore,\n useAppConfig,\n} from '../../../../common'\nimport { useAccountUiStore } from '../../../hooks/useUiStore'\nimport { getAccountBalanceDetails } from '../../../utils/AccountFields'\nimport { getChartLabels } from '../../../utils/AccountDetails'\n\nimport AccountDetailsChart from './AccountDetailsChart'\nimport { formatCurrency } from '../../../../core/utils/NumberFormatting'\n\ninterface AccountDetailsHeaderProps {\n ChartComponent?: React.ComponentType\n customDetailsChart?: React.ReactElement\n}\n\nconst AccountDetailsHeader = ({\n customDetailsChart,\n ChartComponent,\n}: AccountDetailsHeaderProps) => {\n const { institutions } = useAccountStore()\n const { selectedAccount: account } = useAccountUiStore()\n const { config } = useAppConfig()\n const { accounts: accountsCopy } = useGlobalCopyStore()\n const { firstSubtitle, firstValue, hasAvailableBalance, secondSubtitle, secondValue } =\n getAccountBalanceDetails(account, accountsCopy, config.display_available_balance_in_accounts)\n\n const institution = institutions.find(\n (institution) => institution.guid === account?.institution_guid,\n )\n\n const showChart = [\n ...INCOME_ACCOUNT_TYPES,\n ...PAYMENT_ACCOUNT_TYPES,\n ...SPENDING_ACCOUNT_TYPES,\n ].includes(account.account_type)\n\n const displayName = useAccountDisplayName(account)\n\n const { title, description } = getChartLabels(account.account_type, accountsCopy)\n\n return (\n <Stack bgcolor=\"background.default\" p={24}>\n <Stack gap={12}>\n <InstitutionLogo\n alt={accountsCopy.institution_logo_alt}\n institutionGuid={account.institution_guid || ''}\n size={64}\n />\n <Text variant=\"body2\">{institution?.name}</Text>\n </Stack>\n <Stack gap={8} mb={24} mt={4}>\n <H2>{displayName}</H2>\n <Stack direction=\"row\" justifyContent=\"space-between\">\n <Text bold={hasAvailableBalance} variant=\"body1\">\n {firstSubtitle}\n </Text>\n <Text bold={true} variant=\"body1\">\n {formatCurrency(firstValue, '0,0.00')}\n </Text>\n </Stack>\n <Stack direction=\"row\" justifyContent=\"space-between\">\n <Text variant=\"body2\">{secondSubtitle}</Text>\n <Text variant=\"body2\">{secondValue}</Text>\n </Stack>\n </Stack>\n {showChart && (\n <Stack aria-label={description} role=\"img\">\n {customDetailsChart ? (\n customDetailsChart\n ) : (\n <AccountDetailsChart ChartComponent={ChartComponent} header={title} />\n )}\n </Stack>\n )}\n </Stack>\n )\n}\n\nexport default observer(AccountDetailsHeader)\n"],"names":["useAccountUiStore","React","GlobalDataContext","useAccountStore","getAccountDetailFields","account","copy","fields","buildDynamicCopy","FieldType","val","isManual","formatCurrency","accountTypeOptions","AccountType","key","value","jsx","Icon","AccountIcon","option","propertyTypeOptions","PropertyType","PropertyIcon","usesInterestRateField","label","fieldName","isValidNumber","formatPercentage","isAccountLiability","dateTimeStamp","fromUnixUTC","formatDate","DATE_FORMATS_INTL","formatOrdinal","usesCreditLimitField","usesOriginalBalanceField","getAccountBalanceDetails","showAvailableBalance","firstSubtitle","firstValue","secondSubtitle","secondValue","hasAvailableBalance","Text","getClosedAccountBalanceTotal","accounts","sum","getChartLabels","accountType","hasPayments","hasPaymentsAndSpend","AccountDetailsChart","sx","ChartComponent","header","loadMonthlyCategoryTotals","useCategoryStore","isInitialized","useGlobalStore","selectedAccount","isWidgetInitialized","setIsWidgetInitialized","Loader","jsxs","Card","CardHeader","H3","CardContent","AccountDetailsChart$1","observer","AccountDetailsHeader","customDetailsChart","institutions","config","useAppConfig","accountsCopy","useGlobalCopyStore","institution","showChart","INCOME_ACCOUNT_TYPES","PAYMENT_ACCOUNT_TYPES","SPENDING_ACCOUNT_TYPES","displayName","useAccountDisplayName","title","description","Stack","InstitutionLogo","H2","AccountDetailsHeader$1"],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { c as e, C as u, E as p, P as y, M as d } from "./Account-DR7Plrqy.mjs";
2
+ const m = (t) => t && (t.account_type === e.CREDIT_CARD || t.account_type === e.LOAN || t.account_type === e.MORTGAGE || t.account_type === e.LINE_OF_CREDIT || t.account_type === e.CHECKING_LINE_OF_CREDIT), I = (t) => t.is_manual || !t.guid, f = (t) => t.account_type === e.LINE_OF_CREDIT || t.account_type === e.CREDIT_CARD || t.account_type === e.CHECKING_LINE_OF_CREDIT, R = (t) => t.account_type === e.SAVINGS || t.account_type === e.CHECKING || t.account_type === e.LINE_OF_CREDIT || t.account_type === e.CREDIT_CARD || t.account_type === e.LOAN || t.account_type === e.MORTGAGE, A = (t) => t.account_type === e.LOAN || t.account_type === e.MORTGAGE, N = (t, n, s, _, a) => t.filter((i) => !(i.member_is_managed_by_user && _)).filter((i) => !(!i.member_is_managed_by_user && a)).sort(C).map((i) => {
3
+ const r = n.find((c) => c.guid === i.institution_guid), o = s.find((c) => c.guid === i.member_guid);
4
+ return E(i, r, o);
5
+ }), E = (t, n, s) => {
6
+ let _ = u.Connected;
7
+ s && (p.includes(s.connection_status) ? _ = u.Error : y.includes(s.connection_status) ? _ = u.Processing : d.includes(s.connection_status) && (_ = u.RequiresMfa));
8
+ const a = [
9
+ t.user_name || t.feed_name || "",
10
+ t.account_number ? `*${t.account_number}` : ""
11
+ ].join(" ").trim();
12
+ return {
13
+ ...t,
14
+ connectionStatus: _,
15
+ displayName: a,
16
+ institution: n,
17
+ member: s
18
+ };
19
+ }, C = (t, n) => t.account_type > n.account_type ? 1 : t.account_type < n.account_type ? -1 : (t.name || "") > (n.name || "") ? 1 : (t.name || "") < (n.name || "") ? -1 : 0;
20
+ export {
21
+ I as a,
22
+ f as b,
23
+ A as c,
24
+ N as d,
25
+ m as i,
26
+ R as u
27
+ };
28
+ //# sourceMappingURL=AccountUtils-B8ZzWI-d.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccountUtils-B8ZzWI-d.mjs","sources":["../src/core/utils/AccountUtils.ts"],"sourcesContent":["import {\n type Account,\n type DetailedAccount,\n type Institution,\n type Member,\n AccountType,\n ConnectionStatus,\n ErrorStatuses,\n MfaStatuses,\n ProcessingStatuses,\n} from '../'\n\nexport const isAccountLiability = (account: Account) =>\n 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\nexport const isManual = (account: Account) => account.is_manual || !account.guid\n\nexport const usesCreditLimitField = (account: Account) =>\n account.account_type === AccountType.LINE_OF_CREDIT ||\n account.account_type === AccountType.CREDIT_CARD ||\n account.account_type === AccountType.CHECKING_LINE_OF_CREDIT\n\nexport const usesInterestRateField = (account: Account) =>\n account.account_type === AccountType.SAVINGS ||\n account.account_type === AccountType.CHECKING ||\n account.account_type === AccountType.LINE_OF_CREDIT ||\n account.account_type === AccountType.CREDIT_CARD ||\n account.account_type === AccountType.LOAN ||\n account.account_type === AccountType.MORTGAGE\n\nexport const usesOriginalBalanceField = (account: Account) =>\n account.account_type === AccountType.LOAN || account.account_type === AccountType.MORTGAGE\n\nexport const augmentAccounts = (\n accounts: Account[],\n institutions: Institution[],\n members: Member[],\n shouldExcludeExternalAccounts: boolean,\n shouldExcludeHeldAccounts: boolean,\n): DetailedAccount[] => {\n return accounts\n .filter((account) => !(account.member_is_managed_by_user && shouldExcludeExternalAccounts))\n .filter((account) => !(!account.member_is_managed_by_user && shouldExcludeHeldAccounts))\n .sort(accountSorter)\n .map((account) => {\n const institution = institutions.find((inst) => inst.guid === account.institution_guid)\n const member = members.find((member) => member.guid === account.member_guid)\n\n return buildDetailedAccount(account, institution, member)\n })\n}\n\nconst buildDetailedAccount = (account: Account, institution?: Institution, member?: Member) => {\n // TODO: Needs to be localized here\n let connectionStatus = ConnectionStatus.Connected\n if (member) {\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\n const displayName = [\n account.user_name || account.feed_name || '',\n account.account_number ? `*${account.account_number}` : '',\n ]\n .join(' ')\n .trim()\n\n return {\n ...account,\n connectionStatus,\n displayName,\n institution,\n member,\n }\n}\n\nconst accountSorter = (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"],"names":["isAccountLiability","account","AccountType","isManual","usesCreditLimitField","usesInterestRateField","usesOriginalBalanceField","augmentAccounts","accounts","institutions","members","shouldExcludeExternalAccounts","shouldExcludeHeldAccounts","accountSorter","institution","inst","member","buildDetailedAccount","connectionStatus","ConnectionStatus","ErrorStatuses","ProcessingStatuses","MfaStatuses","displayName","a","b"],"mappings":";AAYO,MAAMA,IAAqB,CAACC,MACjCA,MACCA,EAAQ,iBAAiBC,EAAY,eACpCD,EAAQ,iBAAiBC,EAAY,QACrCD,EAAQ,iBAAiBC,EAAY,YACrCD,EAAQ,iBAAiBC,EAAY,kBACrCD,EAAQ,iBAAiBC,EAAY,0BAE5BC,IAAW,CAACF,MAAqBA,EAAQ,aAAa,CAACA,EAAQ,MAE/DG,IAAuB,CAACH,MACnCA,EAAQ,iBAAiBC,EAAY,kBACrCD,EAAQ,iBAAiBC,EAAY,eACrCD,EAAQ,iBAAiBC,EAAY,yBAE1BG,IAAwB,CAACJ,MACpCA,EAAQ,iBAAiBC,EAAY,WACrCD,EAAQ,iBAAiBC,EAAY,YACrCD,EAAQ,iBAAiBC,EAAY,kBACrCD,EAAQ,iBAAiBC,EAAY,eACrCD,EAAQ,iBAAiBC,EAAY,QACrCD,EAAQ,iBAAiBC,EAAY,UAE1BI,IAA2B,CAACL,MACvCA,EAAQ,iBAAiBC,EAAY,QAAQD,EAAQ,iBAAiBC,EAAY,UAEvEK,IAAkB,CAC7BC,GACAC,GACAC,GACAC,GACAC,MAEOJ,EACJ,OAAO,CAACP,MAAY,EAAEA,EAAQ,6BAA6BU,EAA8B,EACzF,OAAO,CAACV,MAAY,EAAE,CAACA,EAAQ,6BAA6BW,EAA0B,EACtF,KAAKC,CAAa,EAClB,IAAI,CAACZ,MAAY;AAChB,QAAMa,IAAcL,EAAa,KAAK,CAACM,MAASA,EAAK,SAASd,EAAQ,gBAAgB,GAChFe,IAASN,EAAQ,KAAK,CAACM,MAAWA,EAAO,SAASf,EAAQ,WAAW;AAE3E,SAAOgB,EAAqBhB,GAASa,GAAaE,CAAM;AAC1D,CAAC,GAGCC,IAAuB,CAAChB,GAAkBa,GAA2BE,MAAoB;AAE7F,MAAIE,IAAmBC,EAAiB;AACxC,EAAIH,MACEI,EAAc,SAASJ,EAAO,iBAAiB,IACjDE,IAAmBC,EAAiB,QAC3BE,EAAmB,SAASL,EAAO,iBAAiB,IAC7DE,IAAmBC,EAAiB,aAC3BG,EAAY,SAASN,EAAO,iBAAiB,MACtDE,IAAmBC,EAAiB;AAIxC,QAAMI,IAAc;AAAA,IAClBtB,EAAQ,aAAaA,EAAQ,aAAa;AAAA,IAC1CA,EAAQ,iBAAiB,IAAIA,EAAQ,cAAc,KAAK;AAAA,EAAA,EAEvD,KAAK,GAAG,EACR,KAAA;AAEH,SAAO;AAAA,IACL,GAAGA;AAAA,IACH,kBAAAiB;AAAA,IACA,aAAAK;AAAA,IACA,aAAAT;AAAA,IACA,QAAAE;AAAA,EAAA;AAEJ,GAEMH,IAAgB,CAACW,GAAYC,MAE7BD,EAAE,eAAeC,EAAE,eAAqB,IACxCD,EAAE,eAAeC,EAAE,eAAqB,MAEvCD,EAAE,QAAQ,OAAOC,EAAE,QAAQ,MAAY,KACvCD,EAAE,QAAQ,OAAOC,EAAE,QAAQ,MAAY,KACrC;"}
@@ -0,0 +1,54 @@
1
+ import u from "react";
2
+ import { getUnixTime as r } from "date-fns/getUnixTime";
3
+ import { A as l } from "./GlobalCopyApi-wcnDUzMV.mjs";
4
+ const A = (s, i) => {
5
+ const { session: t } = i, o = Object.values(i).reduce((e, n) => t && n?.onAnalyticEvent && typeof n?.onAnalyticEvent == "function" ? [...e, n.onAnalyticEvent] : e, []), a = [...s, ...o];
6
+ return u.useMemo(() => (e) => {
7
+ a.forEach((n) => {
8
+ t ? n(e, t) : n(e);
9
+ });
10
+ }, [s, t]);
11
+ }, d = (s, i) => {
12
+ const { session: t } = i, o = Object.values(i).reduce((e, n) => t && n?.onAnalyticPageView && typeof n?.onAnalyticPageView == "function" ? [...e, n.onAnalyticPageView] : e, []), a = [...s, ...o];
13
+ return u.useMemo(() => (e) => {
14
+ a.forEach((n) => {
15
+ t ? n(e, t) : n(e);
16
+ });
17
+ }, [s, t]);
18
+ }, w = async (s, i, t = "1.0.0", o = "Experiences") => {
19
+ const a = new l(s, i), { analytics_session: e } = await a.initializeAnalyticsSession(
20
+ t,
21
+ o
22
+ ), n = window.location.hostname;
23
+ return {
24
+ sendAnalyticEvent: async (c) => await a.sendAnalyticEvent({
25
+ analytics_event: {
26
+ ...c,
27
+ app_version: "widgets-v2",
28
+ created_at: r(/* @__PURE__ */ new Date()).toString(),
29
+ host: n,
30
+ name: c?.label || "",
31
+ session_id: e.guid,
32
+ user_agent: navigator.userAgent || "",
33
+ version: 2
34
+ }
35
+ }),
36
+ sendAnalyticsPageview: async (c) => await a.sendAnalyticsPageview({
37
+ analytics_pageview: {
38
+ ...c,
39
+ app_version: "widgets-v2",
40
+ created_at: r(/* @__PURE__ */ new Date()).toString(),
41
+ host: n,
42
+ name: c.name,
43
+ session_id: e.guid,
44
+ user_agent: navigator.userAgent || ""
45
+ }
46
+ })
47
+ };
48
+ };
49
+ export {
50
+ w as a,
51
+ d as b,
52
+ A as u
53
+ };
54
+ //# sourceMappingURL=Analytics-CkYXKvco.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Analytics-CkYXKvco.mjs","sources":["../src/common/hooks/useCombineEvents.tsx","../src/common/utils/Analytics.ts"],"sourcesContent":["import React from 'react'\n\nimport { AnalyticEventFunction, AnalyticPageviewFunction } from '../../core'\n\nexport const useCombineEvents = (events: AnalyticEventFunction[], store: any) => {\n const { session } = store\n\n const storeEvents = Object.values(store).reduce((acc: AnalyticEventFunction[], curr: any) => {\n if (session && curr?.onAnalyticEvent && typeof curr?.onAnalyticEvent === 'function') {\n return [...acc, curr.onAnalyticEvent]\n }\n\n return acc\n }, [])\n const eventFunctions = [...events, ...storeEvents]\n\n return React.useMemo(() => {\n return (event: string) => {\n eventFunctions.forEach((e) => {\n if (!session) {\n e(event)\n } else {\n e(event, session)\n }\n })\n }\n }, [events, session])\n}\n\nexport const useCombinePageviews = (pages: AnalyticPageviewFunction[], store: any) => {\n const { session } = store\n\n const storeEvents = Object.values(store).reduce((acc: AnalyticPageviewFunction[], curr: any) => {\n if (session && curr?.onAnalyticPageView && typeof curr?.onAnalyticPageView === 'function') {\n return [...acc, curr.onAnalyticPageView]\n }\n\n return acc\n }, [])\n const eventFunctions = [...pages, ...storeEvents]\n\n return React.useMemo(() => {\n return (event: string) => {\n eventFunctions.forEach((e) => {\n if (!session) {\n e(event)\n } else {\n e(event, session)\n }\n })\n }\n }, [pages, session])\n}\n","import { getUnixTime } from 'date-fns/getUnixTime'\n\nimport { AnalyticsApi } from '../../core/api'\nimport { BasicAnalyticsEvent, AnalyticsSession, BasicAnalyticsPageview } from '../../core'\n\nexport const analyticsSession = async (\n endpoint: string,\n token: string,\n version = '1.0.0',\n featureName = 'Experiences',\n) => {\n const analyticsApi = new AnalyticsApi(endpoint, token)\n const { analytics_session } = (await analyticsApi.initializeAnalyticsSession(\n version,\n featureName,\n )) as {\n analytics_session: AnalyticsSession\n }\n\n const host = window.location.hostname\n\n return {\n sendAnalyticEvent: async (event: BasicAnalyticsEvent) => {\n return await analyticsApi.sendAnalyticEvent({\n analytics_event: {\n ...event,\n app_version: 'widgets-v2',\n created_at: getUnixTime(new Date()).toString(),\n host,\n name: event?.label || '',\n session_id: analytics_session.guid,\n user_agent: navigator.userAgent || '',\n version: 2,\n },\n })\n },\n sendAnalyticsPageview: async (pageview: BasicAnalyticsPageview) => {\n return await analyticsApi.sendAnalyticsPageview({\n analytics_pageview: {\n ...pageview,\n app_version: 'widgets-v2',\n created_at: getUnixTime(new Date()).toString(),\n host,\n name: pageview.name,\n session_id: analytics_session.guid,\n user_agent: navigator.userAgent || '',\n },\n })\n },\n }\n}\n"],"names":["useCombineEvents","events","store","session","storeEvents","acc","curr","eventFunctions","React","event","e","useCombinePageviews","pages","analyticsSession","endpoint","token","version","featureName","analyticsApi","AnalyticsApi","analytics_session","host","getUnixTime","pageview"],"mappings":";;;AAIO,MAAMA,IAAmB,CAACC,GAAiCC,MAAe;AAC/E,QAAM,EAAE,SAAAC,MAAYD,GAEdE,IAAc,OAAO,OAAOF,CAAK,EAAE,OAAO,CAACG,GAA8BC,MACzEH,KAAWG,GAAM,mBAAmB,OAAOA,GAAM,mBAAoB,aAChE,CAAC,GAAGD,GAAKC,EAAK,eAAe,IAG/BD,GACN,CAAA,CAAE,GACCE,IAAiB,CAAC,GAAGN,GAAQ,GAAGG,CAAW;AAEjD,SAAOI,EAAM,QAAQ,MACZ,CAACC,MAAkB;AACxB,IAAAF,EAAe,QAAQ,CAACG,MAAM;AAC5B,MAAKP,IAGHO,EAAED,GAAON,CAAO,IAFhBO,EAAED,CAAK;AAAA,IAIX,CAAC;AAAA,EACH,GACC,CAACR,GAAQE,CAAO,CAAC;AACtB,GAEaQ,IAAsB,CAACC,GAAmCV,MAAe;AACpF,QAAM,EAAE,SAAAC,MAAYD,GAEdE,IAAc,OAAO,OAAOF,CAAK,EAAE,OAAO,CAACG,GAAiCC,MAC5EH,KAAWG,GAAM,sBAAsB,OAAOA,GAAM,sBAAuB,aACtE,CAAC,GAAGD,GAAKC,EAAK,kBAAkB,IAGlCD,GACN,CAAA,CAAE,GACCE,IAAiB,CAAC,GAAGK,GAAO,GAAGR,CAAW;AAEhD,SAAOI,EAAM,QAAQ,MACZ,CAACC,MAAkB;AACxB,IAAAF,EAAe,QAAQ,CAACG,MAAM;AAC5B,MAAKP,IAGHO,EAAED,GAAON,CAAO,IAFhBO,EAAED,CAAK;AAAA,IAIX,CAAC;AAAA,EACH,GACC,CAACG,GAAOT,CAAO,CAAC;AACrB,GC/CaU,IAAmB,OAC9BC,GACAC,GACAC,IAAU,SACVC,IAAc,kBACX;AACH,QAAMC,IAAe,IAAIC,EAAaL,GAAUC,CAAK,GAC/C,EAAE,mBAAAK,EAAA,IAAuB,MAAMF,EAAa;AAAA,IAChDF;AAAA,IACAC;AAAA,EAAA,GAKII,IAAO,OAAO,SAAS;AAE7B,SAAO;AAAA,IACL,mBAAmB,OAAOZ,MACjB,MAAMS,EAAa,kBAAkB;AAAA,MAC1C,iBAAiB;AAAA,QACf,GAAGT;AAAA,QACH,aAAa;AAAA,QACb,YAAYa,EAAY,oBAAI,KAAA,CAAM,EAAE,SAAA;AAAA,QACpC,MAAAD;AAAA,QACA,MAAMZ,GAAO,SAAS;AAAA,QACtB,YAAYW,EAAkB;AAAA,QAC9B,YAAY,UAAU,aAAa;AAAA,QACnC,SAAS;AAAA,MAAA;AAAA,IACX,CACD;AAAA,IAEH,uBAAuB,OAAOG,MACrB,MAAML,EAAa,sBAAsB;AAAA,MAC9C,oBAAoB;AAAA,QAClB,GAAGK;AAAA,QACH,aAAa;AAAA,QACb,YAAYD,EAAY,oBAAI,KAAA,CAAM,EAAE,SAAA;AAAA,QACpC,MAAAD;AAAA,QACA,MAAME,EAAS;AAAA,QACf,YAAYH,EAAkB;AAAA,QAC9B,YAAY,UAAU,aAAa;AAAA,MAAA;AAAA,IACrC,CACD;AAAA,EACH;AAEJ;"}