@mx-cartographer/experiences 9.3.0-alpha.bb2 → 9.3.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.
- package/CHANGELOG.md +42 -0
- package/dist/accounts/AccountsMiniWidget.es.js.map +1 -1
- package/dist/accounts/AccountsWidget.es.js.map +1 -1
- package/dist/accounts/ConnectMiniWidget.es.js.map +1 -1
- package/dist/accounts/components/AccountListItem.es.js.map +1 -1
- package/dist/accounts/components/AccountsList.es.js.map +1 -1
- package/dist/accounts/components/AccountsListCompact.es.js.map +1 -1
- package/dist/accounts/components/ConnectImage.es.js.map +1 -1
- package/dist/accounts/components/ConnectMiniWidgetCard.es.js.map +1 -1
- package/dist/accounts/components/ConnectionStatusIcons.es.js.map +1 -1
- package/dist/accounts/components/ConnectionsDrawer.es.js.map +1 -1
- package/dist/accounts/components/detailsdrawer/Accounts/AccountActions.es.js +40 -37
- package/dist/accounts/components/detailsdrawer/Accounts/AccountActions.es.js.map +1 -1
- package/dist/accounts/components/detailsdrawer/Accounts/AccountActionsRow.es.js.map +1 -1
- package/dist/accounts/components/detailsdrawer/Accounts/AccountConnection.es.js.map +1 -1
- package/dist/accounts/components/detailsdrawer/Accounts/AccountDetailEdit.es.js.map +1 -1
- package/dist/accounts/components/detailsdrawer/Accounts/AccountDetails.es.js.map +1 -1
- package/dist/accounts/components/detailsdrawer/Accounts/AccountDetailsChart.es.js.map +1 -1
- package/dist/accounts/components/detailsdrawer/Accounts/AccountDetailsContent.es.js.map +1 -1
- package/dist/accounts/components/detailsdrawer/Accounts/AccountDetailsDrawer.es.js.map +1 -1
- package/dist/accounts/components/detailsdrawer/Accounts/AccountDetailsHeader.es.js.map +1 -1
- package/dist/accounts/components/detailsdrawer/Accounts/ConnectionErrorMessage.es.js.map +1 -1
- package/dist/accounts/components/detailsdrawer/Transactions/TransactionsTab.es.js.map +1 -1
- package/dist/accounts/utils/AccountFields.es.js +4 -1
- package/dist/accounts/utils/AccountFields.es.js.map +1 -1
- package/dist/analytics/SurveyMiniWidget.es.js.map +1 -1
- package/dist/analytics/components/RatingScale.es.js.map +1 -1
- package/dist/budgets/BubbleBudgetsMiniWidget.es.js +46 -44
- package/dist/budgets/BubbleBudgetsMiniWidget.es.js.map +1 -1
- package/dist/budgets/BubbleBudgetsWidget.es.js.map +1 -1
- package/dist/budgets/components/AddBudgets.es.js.map +1 -1
- package/dist/budgets/components/BubbleBudgets.es.js.map +1 -1
- package/dist/budgets/components/BubbleChart.es.js +12 -12
- package/dist/budgets/components/BubbleChart.es.js.map +1 -1
- package/dist/budgets/components/BudgetDetailsDrawer.es.js.map +1 -1
- package/dist/budgets/components/BudgetDetailsDrawerV2.es.js.map +1 -1
- package/dist/budgets/components/BudgetList.es.js.map +1 -1
- package/dist/budgets/components/MerchantBudgetDetailsDrawer.es.js.map +1 -1
- package/dist/budgets/components/Overview.es.js.map +1 -1
- package/dist/budgets/components/addbudget/Header.es.js.map +1 -1
- package/dist/budgets/components/addbudget/RecalculateBudgets.es.js.map +1 -1
- package/dist/budgets/components/addbudget/UnbudgetedRow.es.js.map +1 -1
- package/dist/budgets/components/bubblechart/Bubble.es.js.map +1 -1
- package/dist/budgets/components/bubblechart/Mercury.es.js +13 -11
- package/dist/budgets/components/bubblechart/Mercury.es.js.map +1 -1
- package/dist/budgets/components/budgetdetails/AddSubBudget.es.js.map +1 -1
- package/dist/budgets/components/budgetdetails/BudgetDetails.es.js.map +1 -1
- package/dist/budgets/components/budgetdetails/Header.es.js.map +1 -1
- package/dist/budgets/components/budgetdetails/SubBudgetList.es.js.map +1 -1
- package/dist/budgets/components/budgetlist/BudgetRow.es.js.map +1 -1
- package/dist/budgets/components/budgetlist/SubBudgetRow.es.js.map +1 -1
- package/dist/budgets/components/budgetlist/SubBudgetZeroState.es.js.map +1 -1
- package/dist/budgets/components/shared/BudgetAmount.es.js.map +1 -1
- package/dist/budgets/components/shared/BudgetDetailsTopSection.es.js.map +1 -1
- package/dist/budgets/utils/BubblesSVG.es.js +10 -10
- package/dist/budgets/utils/BubblesSVG.es.js.map +1 -1
- package/dist/cashflow/CashflowMiniWidget.es.js.map +1 -1
- package/dist/cashflow/CashflowOnboarding.es.js.map +1 -1
- package/dist/cashflow/CashflowWidget.es.js.map +1 -1
- package/dist/cashflow/components/CashflowAmountHeading.es.js.map +1 -1
- package/dist/cashflow/components/CashflowContent.es.js.map +1 -1
- package/dist/cashflow/components/CashflowHeading.es.js.map +1 -1
- package/dist/cashflow/components/CashflowWidgetContent.es.js.map +1 -1
- package/dist/cashflow/components/DetailsExpenseHeader.es.js.map +1 -1
- package/dist/cashflow/components/DetailsExpenseRow.es.js.map +1 -1
- package/dist/cashflow/components/DetailsFooter.es.js.map +1 -1
- package/dist/cashflow/components/DetailsTab.es.js.map +1 -1
- package/dist/cashflow/components/RemainingCash.es.js.map +1 -1
- package/dist/cashflow/components/SummaryTab.es.js.map +1 -1
- package/dist/cashflow/components/onboarding/StepOne.es.js.map +1 -1
- package/dist/cashflow/components/onboarding/StepTwo.es.js.map +1 -1
- package/dist/categories/components/CategoryList.es.js +24 -24
- package/dist/categories/components/CategoryList.es.js.map +1 -1
- package/dist/categories/components/CategoryRow.es.js +6 -6
- package/dist/categories/components/CategoryRow.es.js.map +1 -1
- package/dist/categories/components/CategorySelector.es.js +36 -32
- package/dist/categories/components/CategorySelector.es.js.map +1 -1
- package/dist/categories/components/CategorySelectorDrawer.es.js.map +1 -1
- package/dist/categories/components/CustomCategories/AddSubcategory.es.js.map +1 -1
- package/dist/categories/components/CustomCategories/CustomCategoryModal.es.js +0 -1
- package/dist/categories/components/CustomCategories/CustomCategoryModal.es.js.map +1 -1
- package/dist/categories/components/SubcategoryList.es.js.map +1 -1
- package/dist/categories/components/SubcategoryRow.es.js.map +1 -1
- package/dist/common/components/Banner.es.js.map +1 -1
- package/dist/common/components/ConnectCard.es.js.map +1 -1
- package/dist/common/components/ConnectDrawer.es.js.map +1 -1
- package/dist/common/components/ConnectStatus.es.js.map +1 -1
- package/dist/common/components/CurrencyDialog.es.js.map +1 -1
- package/dist/common/components/CurrencyInput.es.js +11 -11
- package/dist/common/components/CurrencyText.es.js.map +1 -1
- package/dist/common/components/DataRow.es.js +7 -7
- package/dist/common/components/DataRow.es.js.map +1 -1
- package/dist/common/components/EmptyState.es.js.map +1 -1
- package/dist/common/components/Error.es.js.map +1 -1
- package/dist/common/components/ErrorBoundary.es.js.map +1 -1
- package/dist/common/components/GlobalAccountFilter.es.js.map +1 -1
- package/dist/common/components/IconBacking.es.js.map +1 -1
- package/dist/common/components/InformationTooltip.es.js.map +1 -1
- package/dist/common/components/ListItemAction.es.js.map +1 -1
- package/dist/common/components/ListItemRow.es.js +1 -1
- package/dist/common/components/ListItemRow.es.js.map +1 -1
- package/dist/common/components/ListItemWrapper.es.js.map +1 -1
- package/dist/common/components/Loader.es.js.map +1 -1
- package/dist/common/components/MicroWidgetContainer.es.js.map +1 -1
- package/dist/common/components/MiniWidgetContainer.es.js.map +1 -1
- package/dist/common/components/ResponsiveButton.es.js.map +1 -1
- package/dist/common/components/SearchBox.es.js.map +1 -1
- package/dist/common/components/Select.es.js.map +1 -1
- package/dist/common/components/SelectionBox.es.js.map +1 -1
- package/dist/common/components/SkeletonLoader.es.js.map +1 -1
- package/dist/common/components/SubheaderRow.es.js.map +1 -1
- package/dist/common/components/TabContentContainer.es.js.map +1 -1
- package/dist/common/components/TinyBarChart.es.js.map +1 -1
- package/dist/common/components/WidgetContainer.es.js.map +1 -1
- package/dist/common/components/WidgetDateRangeSelector.es.js +28 -28
- package/dist/common/components/WidgetDateRangeSelector.es.js.map +1 -1
- package/dist/common/components/addaccounts/AddAccounts.es.js +13 -13
- package/dist/common/components/addaccounts/AddAccounts.es.js.map +1 -1
- package/dist/common/components/calendar/Calendar.es.js.map +1 -1
- package/dist/common/components/calendar/Day.es.js.map +1 -1
- package/dist/common/components/calendar/Header.es.js +26 -23
- package/dist/common/components/calendar/Header.es.js.map +1 -1
- package/dist/common/components/charts/Donut.es.js.map +1 -1
- package/dist/common/components/charts/LineChart.es.js.map +1 -1
- package/dist/common/components/charts/StackedLineChart.es.js.map +1 -1
- package/dist/common/components/charts/StatusBar.es.js.map +1 -1
- package/dist/common/components/charts/linechart/CustomLegend.es.js.map +1 -1
- package/dist/common/components/charts/linechart/CustomLine.es.js.map +1 -1
- package/dist/common/components/charts/linechart/CustomMark.es.js.map +1 -1
- package/dist/common/components/charts/linechart/CustomTooltip.es.js.map +1 -1
- package/dist/common/components/charts/stackedlinechart/CategoryIconLabel.es.js.map +1 -1
- package/dist/common/components/charts/stackedlinechart/CustomAreaTooltip.es.js.map +1 -1
- package/dist/common/components/charts/stackedlinechart/CustomLegend.es.js.map +1 -1
- package/dist/common/components/charts/stackedlinechart/CustomPointTooltip.es.js.map +1 -1
- package/dist/common/components/daterangeselector/DateRangeSelector.d.ts +14 -0
- package/dist/common/components/daterangeselector/DateRangeSelector.es.js +113 -101
- package/dist/common/components/daterangeselector/DateRangeSelector.es.js.map +1 -1
- package/dist/common/components/dialog/Dialog.es.js.map +1 -1
- package/dist/common/components/donuts/MultiSegmentDonut.es.js.map +1 -1
- package/dist/common/components/donuts/SingleSegmentDonut.es.js.map +1 -1
- package/dist/common/components/drawer/Drawer.es.js.map +1 -1
- package/dist/common/components/drawer/Footer.es.js.map +1 -1
- package/dist/common/components/drawer/Header.es.js.map +1 -1
- package/dist/common/components/globalaccountfilter/GlobalAccountFilterList.es.js +71 -87
- package/dist/common/components/globalaccountfilter/GlobalAccountFilterList.es.js.map +1 -1
- package/dist/common/components/listitems/CollapseExpandListItem.es.js +4 -4
- package/dist/common/components/listitems/CollapseExpandListItem.es.js.map +1 -1
- package/dist/common/components/listitems/ToggleButtonListItem.es.js +6 -6
- package/dist/common/components/listitems/ToggleButtonListItem.es.js.map +1 -1
- package/dist/common/components/listitems/ToggleListItem.es.js.map +1 -1
- package/dist/common/hooks/useAriaLive.es.js.map +1 -1
- package/dist/common/utils/AccountFilter.es.js.map +1 -1
- package/dist/core/constants/Category.es.js.map +1 -1
- package/dist/core/stores/CategoryStore.d.ts +2 -0
- package/dist/core/stores/CategoryStore.es.js +55 -47
- package/dist/core/stores/CategoryStore.es.js.map +1 -1
- package/dist/core/stores/DebtsStore.es.js +10 -10
- package/dist/core/stores/DebtsStore.es.js.map +1 -1
- package/dist/core/stores/FinstrongStore.es.js +4 -4
- package/dist/core/stores/FinstrongStore.es.js.map +1 -1
- package/dist/core/stores/TrendsStore.es.js +6 -6
- package/dist/core/types/Account.es.js.map +1 -1
- package/dist/core/utils/DateUtil.es.js +24 -23
- package/dist/core/utils/DateUtil.es.js.map +1 -1
- package/dist/core/utils/DebtUtils.es.js +28 -28
- package/dist/core/utils/DebtUtils.es.js.map +1 -1
- package/dist/core/utils/GoalsUtil.es.js +11 -8
- package/dist/core/utils/GoalsUtil.es.js.map +1 -1
- package/dist/core/utils/InvestmentUtil.es.js +26 -23
- package/dist/core/utils/InvestmentUtil.es.js.map +1 -1
- package/dist/core/utils/NotificationUtils.es.js +11 -8
- package/dist/core/utils/NotificationUtils.es.js.map +1 -1
- package/dist/core/utils/RecurringTransactionsUtil.es.js +5 -8
- package/dist/core/utils/RecurringTransactionsUtil.es.js.map +1 -1
- package/dist/core/utils/SettingsUtil.es.js.map +1 -1
- package/dist/core/utils/TransactionUtils.es.js.map +1 -1
- package/dist/dashboard/Dashboard.es.js.map +1 -1
- package/dist/dashboard/Greeting.es.js.map +1 -1
- package/dist/debts/DebtsWidget.es.js.map +1 -1
- package/dist/debts/components/DebtDrawer.es.js.map +1 -1
- package/dist/debts/components/DebtsChart.es.js +36 -36
- package/dist/debts/components/DebtsChart.es.js.map +1 -1
- package/dist/debts/components/DebtsTable.es.js +13 -13
- package/dist/debts/components/DebtsTable.es.js.map +1 -1
- package/dist/debts/components/PaydownDrawer.es.js.map +1 -1
- package/dist/debts/components/SnowballCard.es.js.map +1 -1
- package/dist/debts/components/SnowballDrawer.es.js.map +1 -1
- package/dist/debts/components/actions/DebtsPriorityAction.es.js +23 -23
- package/dist/debts/components/actions/DebtsPriorityAction.es.js.map +1 -1
- package/dist/debts/components/actions/ExtraPaymentAction.es.js.map +1 -1
- package/dist/debts/components/actions/InterestRateAction.es.js.map +1 -1
- package/dist/debts/components/actions/MonthlyPaymentAction.es.js.map +1 -1
- package/dist/debts/components/actions/OriginalBalanceAction.es.js.map +1 -1
- package/dist/debts/components/debtsdrawer/DebtDetailsChart.es.js.map +1 -1
- package/dist/debts/components/debtsdrawer/DebtDetailsContent.es.js.map +1 -1
- package/dist/debts/components/debtsdrawer/DebtDetailsTab.es.js.map +1 -1
- package/dist/debts/components/debtsdrawer/DebtScheduleTab.es.js.map +1 -1
- package/dist/debts/components/debtsdrawer/DebtStatusCard.es.js.map +1 -1
- package/dist/debts/components/debtspaydown/PaydownButton.es.js.map +1 -1
- package/dist/debts/components/debtspaydown/PaydownContent.es.js.map +1 -1
- package/dist/debts/components/debtspriority/DebtsPriorityButton.es.js.map +1 -1
- package/dist/debts/components/debtspriority/DebtsPrioriyPopover.es.js.map +1 -1
- package/dist/debts/components/debtstable/AccountCell.es.js.map +1 -1
- package/dist/debts/components/debtstable/PriorityCell.es.js.map +1 -1
- package/dist/finstrong/FinancialStrengthCard.es.js.map +1 -1
- package/dist/finstrong/FinstrongWidget.es.js.map +1 -1
- package/dist/finstrong/components/ConnectMoreAccountsCard.es.js.map +1 -1
- package/dist/finstrong/components/CreditScore/CreditScoreContent.es.js.map +1 -1
- package/dist/finstrong/components/CreditScore/CreditScoreHeader.es.js.map +1 -1
- package/dist/finstrong/components/HaveManageableDebt/DebtPaymentTabContent.es.js.map +1 -1
- package/dist/finstrong/components/HaveManageableDebt/HaveManageableDebtComponent.es.js.map +1 -1
- package/dist/finstrong/components/HaveManageableDebt/HaveManageableDebtProgressBar.es.js.map +1 -1
- package/dist/finstrong/components/HaveManageableDebt/IncomeTabContent.es.js.map +1 -1
- package/dist/finstrong/components/HealthChart.es.js.map +1 -1
- package/dist/finstrong/components/KeyIndicatorsBorrowTab.es.js.map +1 -1
- package/dist/finstrong/components/KeyIndicatorsDrawer.es.js.map +1 -1
- package/dist/finstrong/components/KeyIndicatorsSaveTab.es.js.map +1 -1
- package/dist/finstrong/components/KeyIndicatorsSpendTab.es.js.map +1 -1
- package/dist/finstrong/components/KeyIndicatorsTabItem.es.js.map +1 -1
- package/dist/finstrong/components/KeyIndicatorsTabItemDrawer.es.js.map +1 -1
- package/dist/finstrong/components/KeyIndicatorsTabsWidget.es.js.map +1 -1
- package/dist/finstrong/components/MaintainingEmergencySavings/EstimatedContributionCalculator.es.js.map +1 -1
- package/dist/finstrong/components/MaintainingEmergencySavings/MaintainingEmergencySavingsContent.es.js.map +1 -1
- package/dist/finstrong/components/MaintainingEmergencySavings/MaintainingEmergencySavingsSticky.es.js.map +1 -1
- package/dist/finstrong/components/ManageCreditScore.es.js.map +1 -1
- package/dist/finstrong/components/ManageDOB.es.js.map +1 -1
- package/dist/finstrong/components/MissingData.es.js.map +1 -1
- package/dist/finstrong/components/ProfileDrawer.es.js.map +1 -1
- package/dist/finstrong/components/ProfileList.es.js.map +1 -1
- package/dist/finstrong/components/ProfileProgressBar.es.js.map +1 -1
- package/dist/finstrong/components/ProgressBar.es.js.map +1 -1
- package/dist/finstrong/components/SaveEnoughToLiveOn/AvailableTabContent.es.js.map +1 -1
- package/dist/finstrong/components/SaveEnoughToLiveOn/SaveEnoughToLiveOnDrawerContent.es.js.map +1 -1
- package/dist/finstrong/components/SaveEnoughToLiveOn/SaveEnoughToLiveOnProgressBar.es.js.map +1 -1
- package/dist/finstrong/components/SaveEnoughToLiveOn/SpendingTabContent.es.js.map +1 -1
- package/dist/finstrong/components/ScoreHistoryDrawer.es.js.map +1 -1
- package/dist/finstrong/components/ScoreRubricDrawer.es.js.map +1 -1
- package/dist/finstrong/components/SpendLessThanYouMake/SpendLessThanYouMakeComponent.es.js.map +1 -1
- package/dist/finstrong/components/SpendLessThanYouMake/SpendLessThanYouMakeProgressBar.es.js.map +1 -1
- package/dist/finstrong/components/StatusChip.es.js.map +1 -1
- package/dist/finstrong/components/onboarding/Onboarding.es.js.map +1 -1
- package/dist/finstrong/components/onboarding/OnboardingAddMonthlyIncome.es.js.map +1 -1
- package/dist/finstrong/components/onboarding/OnboardingBirthday.es.js.map +1 -1
- package/dist/finstrong/components/onboarding/OnboardingCreditScore.es.js.map +1 -1
- package/dist/finstrong/components/onboarding/OnboardingStepsDrawer.es.js +15 -18
- package/dist/finstrong/components/onboarding/OnboardingStepsDrawer.es.js.map +1 -1
- package/dist/finstrong/components/onboarding/OnboardingStepsHeader.es.js.map +1 -1
- package/dist/finstrong/components/paybillsontime/PayBillsOnTimeDrawerComponent.es.js.map +1 -1
- package/dist/finstrong/components/paybillsontime/PayBillsOnTimeStickyComponent.es.js.map +1 -1
- package/dist/finstrong/components/shared/Accounts.es.js.map +1 -1
- package/dist/finstrong/components/shared/CustomDoubleBarPlot.es.js.map +1 -1
- package/dist/finstrong/components/shared/CustomPieArc.es.js.map +1 -1
- package/dist/finstrong/components/shared/DialScoreCard.es.js +27 -27
- package/dist/finstrong/components/shared/DialScoreCard.es.js.map +1 -1
- package/dist/finstrong/components/shared/DoubleBarChart.es.js.map +1 -1
- package/dist/finstrong/components/shared/LineGraph.es.js +20 -19
- package/dist/finstrong/components/shared/LineGraph.es.js.map +1 -1
- package/dist/finstrong/components/shared/ScoreHistoryTimeline.es.js +28 -28
- package/dist/finstrong/components/shared/ScoreHistoryTimeline.es.js.map +1 -1
- package/dist/finstrong/components/shared/ScoreHistoryTimelineItem.es.js.map +1 -1
- package/dist/finstrong/components/shared/TotalCard.es.js.map +1 -1
- package/dist/finstrong/components/shared/Transactions.es.js.map +1 -1
- package/dist/finstrong/util/finstrongUtils.es.js +4 -1
- package/dist/finstrong/util/finstrongUtils.es.js.map +1 -1
- package/dist/goals/GoalsMicroWidget.es.js.map +1 -1
- package/dist/goals/GoalsWidget.es.js.map +1 -1
- package/dist/goals/components/AccountSelectionDrawer.es.js.map +1 -1
- package/dist/goals/components/AddGoal.es.js.map +1 -1
- package/dist/goals/components/GoalDetails.es.js.map +1 -1
- package/dist/goals/components/GoalDetailsDrawer.es.js.map +1 -1
- package/dist/goals/components/GoalList.es.js.map +1 -1
- package/dist/goals/components/GoalStatusCard.es.js.map +1 -1
- package/dist/goals/components/ManageGoals.es.js.map +1 -1
- package/dist/goals/components/TabTitle.es.js.map +1 -1
- package/dist/goals/components/actions/AccountAction.es.js.map +1 -1
- package/dist/goals/components/actions/AddRetirementAccountAction.es.js.map +1 -1
- package/dist/goals/components/actions/AmountToSaveAction.es.js.map +1 -1
- package/dist/goals/components/actions/BirthdayAction.es.js.map +1 -1
- package/dist/goals/components/actions/ChangeAccountAction.es.js.map +1 -1
- package/dist/goals/components/actions/ContributionAction.es.js.map +1 -1
- package/dist/goals/components/actions/GoalNameAction.es.js.map +1 -1
- package/dist/goals/components/actions/InterestRateAction.es.js.map +1 -1
- package/dist/goals/components/actions/MonthlyPaymentAction.es.js.map +1 -1
- package/dist/goals/components/actions/OriginalBalanceAction.es.js.map +1 -1
- package/dist/goals/components/actions/RetirementAgeAction.es.js.map +1 -1
- package/dist/goals/components/addgoal/AddGoalListItem.es.js +5 -5
- package/dist/goals/components/addgoal/AddGoalListItem.es.js.map +1 -1
- package/dist/goals/components/managegoals/CompleteListItem.es.js.map +1 -1
- package/dist/goals/components/managegoals/OngoingListItem.es.js.map +1 -1
- package/dist/goals/components/micro/GoalMicroStatusCard.es.js.map +1 -1
- package/dist/goals/components/micro/GoalsMicroEmptyState.es.js.map +1 -1
- package/dist/help/HelpWidget.es.js.map +1 -1
- package/dist/help/components/Help.es.js.map +1 -1
- package/dist/help/components/HelpList.es.js +32 -32
- package/dist/help/components/HelpList.es.js.map +1 -1
- package/dist/help/components/content/BottomImageContent.es.js.map +1 -1
- package/dist/help/components/content/ContentItem.es.js.map +1 -1
- package/dist/help/components/content/Header.es.js.map +1 -1
- package/dist/help/components/content/LeftImageContent.es.js.map +1 -1
- package/dist/help/components/content/NoImageContent.es.js.map +1 -1
- package/dist/help/components/content/RightImageContent.es.js.map +1 -1
- package/dist/help/components/content/TopImageContent.es.js.map +1 -1
- package/dist/help/components/requestsupport/ContactSupport.es.js.map +1 -1
- package/dist/help/components/requestsupport/HelpByCategoryList.es.js.map +1 -1
- package/dist/help/components/requestsupport/MissingInstitution.es.js.map +1 -1
- package/dist/help/components/requestsupport/PopularTopicsDrawer.es.js.map +1 -1
- package/dist/help/components/requestsupport/PopularTopicsList.es.js.map +1 -1
- package/dist/help/components/requestsupport/PopularTopicsRow.es.js +6 -6
- package/dist/help/components/requestsupport/PopularTopicsRow.es.js.map +1 -1
- package/dist/help/components/requestsupport/RequestSupport.es.js.map +1 -1
- package/dist/help/components/requestsupport/RequestSupportFooter.es.js.map +1 -1
- package/dist/help/components/requestsupport/RequestSupportHeader.es.js.map +1 -1
- package/dist/help/components/requestsupport/RequestSupportInstitution.es.js.map +1 -1
- package/dist/help/components/requestsupport/SupportSuccessMessage.es.js.map +1 -1
- package/dist/insights/components/feed/Header.es.js.map +1 -1
- package/dist/insights/components/insights/AmericanUpcomingTaxDeadlineAlert/AmericanUpcomingTaxDeadlineAlert.es.js.map +1 -1
- package/dist/insights/components/insights/BillAmountNotStandard/BillAmountNotStandard.es.js.map +1 -1
- package/dist/insights/components/insights/BillAmountNotStandard/BillAmountNotStandardMUI.es.js.map +1 -1
- package/dist/insights/components/insights/CashBack/CashBack.es.js.map +1 -1
- package/dist/insights/components/insights/CategoryBudget/CategoryBudget.es.js +17 -17
- package/dist/insights/components/insights/CategoryBudget/CategoryBudget.es.js.map +1 -1
- package/dist/insights/components/insights/CategorySpendingV2/CategorySpendingV2.es.js.map +1 -1
- package/dist/insights/components/insights/CategorySpendingV2/CategorySpendingV2MUI.es.js.map +1 -1
- package/dist/insights/components/insights/CelebrateCreditCardPayoff/CelebrateCreditCardPayoff.es.js.map +1 -1
- package/dist/insights/components/insights/CustomTransaction/CustomTransaction.es.js.map +1 -1
- package/dist/insights/components/insights/DiscoveredAccounts/DiscoveredAccountsBody.es.js.map +1 -1
- package/dist/insights/components/insights/DiscoveredAccounts/DiscoveredAccountsLearnMoreDrawerContent.es.js +6 -6
- package/dist/insights/components/insights/DiscoveredAccounts/DiscoveredAccountsLearnMoreDrawerContent.es.js.map +1 -1
- package/dist/insights/components/insights/DiscoveredAccounts/DiscoveredAccountsMiniInsight.es.js.map +1 -1
- package/dist/insights/components/insights/FederalBankHoliday/FederalBankHoliday.es.js.map +1 -1
- package/dist/insights/components/insights/FederalBankHoliday/FederalBankHolidayMUI.es.js.map +1 -1
- package/dist/insights/components/insights/MarketingHub/Offer.es.js.map +1 -1
- package/dist/insights/components/insights/MonthlyDebtToIncomeComparisonV2/MonthlyDebtToIncomeComparisonV2.es.js.map +1 -1
- package/dist/insights/components/insights/MonthlyEmergencyFundReview/LastMonthsContributionSection.es.js.map +1 -1
- package/dist/insights/components/insights/MonthlyEmergencyFundReview/MonthlyEmergencyFundReviewBody.es.js +38 -35
- package/dist/insights/components/insights/MonthlyEmergencyFundReview/MonthlyEmergencyFundReviewBody.es.js.map +1 -1
- package/dist/insights/components/insights/MonthlyEmergencyFundReview/ProjectedCompletionSection.es.js.map +1 -1
- package/dist/insights/components/insights/MonthlyEmergencyFundReview/TotalSection.es.js.map +1 -1
- package/dist/insights/components/insights/MonthlySavingsToIncomeComparison/MonthlySavingsToIncomeComparison.es.js.map +1 -1
- package/dist/insights/components/insights/MonthlySpendToIncomeComparisonV2/MonthlySpendToIncomeComparisonV2.es.js.map +1 -1
- package/dist/insights/components/insights/MonthlySpendingComparisonV2/MonthlySpendingComparisonV2.es.js.map +1 -1
- package/dist/insights/components/insights/P2pCategorization/P2pCategorization.es.js.map +1 -1
- package/dist/insights/components/insights/P2pCategorization/shared/P2pCategorizationMultipleTransactions.es.js.map +1 -1
- package/dist/insights/components/insights/P2pCategorization/shared/P2pCategorizationSingleTransaction.es.js.map +1 -1
- package/dist/insights/components/insights/SavingsAccountBalancesSummary/SavingsAccountBalancesSummary.es.js.map +1 -1
- package/dist/insights/components/insights/SharedDeposit/SharedDeposit.es.js.map +1 -1
- package/dist/insights/components/insights/SwitchDirectDeposit/AccountBox.es.js.map +1 -1
- package/dist/insights/components/insights/SwitchDirectDeposit/SwitchDirectDepositMainContainer.es.js.map +1 -1
- package/dist/insights/components/insights/UnifiedDeposit/UnifiedDeposit.es.js.map +1 -1
- package/dist/insights/components/insights/UnifiedDeposit/UnifiedDepositBody.es.js.map +1 -1
- package/dist/insights/components/insights/UserFeedback/UserFeedback.es.js.map +1 -1
- package/dist/insights/components/insights/WeeklyNoSpendDays/BubbleWeek.es.js.map +1 -1
- package/dist/insights/components/insights/WeeklyNoSpendDays/WeeklyNoSpendDays.es.js.map +1 -1
- package/dist/insights/components/shared/ChartDrawerTemplate/ChartDrawerTemplate.es.js +22 -22
- package/dist/insights/components/shared/ChartDrawerTemplate/ChartDrawerTemplate.es.js.map +1 -1
- package/dist/insights/components/shared/ChartDrawerTemplate/TipSection.es.js.map +1 -1
- package/dist/insights/components/shared/ChartTransactionWithDrillDown.es.js.map +1 -1
- package/dist/insights/components/shared/Charts/BarChart/BarChart.es.js.map +1 -1
- package/dist/insights/components/shared/Charts/BarChart/BarChartV2.es.js.map +1 -1
- package/dist/insights/components/shared/Charts/BarChart/ChartLegend.es.js.map +1 -1
- package/dist/insights/components/shared/Charts/BarChart/ChartLegendV2.es.js.map +1 -1
- package/dist/insights/components/shared/Charts/BarChart/CustomBarPlot.es.js.map +1 -1
- package/dist/insights/components/shared/Charts/BarChart/CustomBarPlotV2.es.js.map +1 -1
- package/dist/insights/components/shared/Charts/BarChart/CustomDoubleBarPlot.es.js.map +1 -1
- package/dist/insights/components/shared/Charts/BarChart/CustomDoubleBarPlotMXUI.es.js.map +1 -1
- package/dist/insights/components/shared/Charts/BarChart/DoubleBarChart.es.js.map +1 -1
- package/dist/insights/components/shared/Charts/BarChart/DoubleBarChartLegend.es.js.map +1 -1
- package/dist/insights/components/shared/Charts/BarChart/DoubleBarChartLegendMXUI.es.js.map +1 -1
- package/dist/insights/components/shared/Charts/BarChart/DoubleBarChartMXUI.es.js.map +1 -1
- package/dist/insights/components/shared/ConnectionCard.es.js.map +1 -1
- package/dist/insights/components/shared/Coupon.es.js.map +1 -1
- package/dist/insights/components/shared/DeepLinks/DeepLinkDialog.es.js.map +1 -1
- package/dist/insights/components/shared/DeepLinks/DirectDeposit/DirectDepositDeepLink.es.js.map +1 -1
- package/dist/insights/components/shared/DeepLinks/DirectDeposit/Dot.es.js.map +1 -1
- package/dist/insights/components/shared/DirectDeposit/DirectDeposit.es.js.map +1 -1
- package/dist/insights/components/shared/DirectDeposit/DirectDepositSubHeader.es.js.map +1 -1
- package/dist/insights/components/shared/DirectDeposit/FullFeedBodyHeader.es.js.map +1 -1
- package/dist/insights/components/shared/DirectDeposit/LeftBox.es.js.map +1 -1
- package/dist/insights/components/shared/DirectDeposit/MiniBodyHeader.es.js.map +1 -1
- package/dist/insights/components/shared/DirectDeposit/RightBox.es.js.map +1 -1
- package/dist/insights/components/shared/DiscoveredAccountsConnect.es.js.map +1 -1
- package/dist/insights/components/shared/DrillDownCalculation/BalanceStepper.es.js.map +1 -1
- package/dist/insights/components/shared/DrillDownCalculation/DrillDownCalculation.es.js.map +1 -1
- package/dist/insights/components/shared/ErrorCard/ErrorCard.es.js.map +1 -1
- package/dist/insights/components/shared/GenericFeedback/FeedbackButtons.es.js.map +1 -1
- package/dist/insights/components/shared/GenericFeedback/FeedbackDescription.es.js.map +1 -1
- package/dist/insights/components/shared/GenericFeedback/FeedbackHeader.es.js.map +1 -1
- package/dist/insights/components/shared/GenericFeedback/FeedbackOptions.es.js.map +1 -1
- package/dist/insights/components/shared/GenericFeedback/FeedbackText.es.js.map +1 -1
- package/dist/insights/components/shared/GoalProgress.es.js.map +1 -1
- package/dist/insights/components/shared/GradientBox.es.js.map +1 -1
- package/dist/insights/components/shared/InsightsCard/BeatCard.es.js.map +1 -1
- package/dist/insights/components/shared/InsightsCard/BeatCardMUI.es.js.map +1 -1
- package/dist/insights/components/shared/InsightsCard/CardButtonSection.es.js.map +1 -1
- package/dist/insights/components/shared/InsightsCard/CardError.es.js.map +1 -1
- package/dist/insights/components/shared/InsightsCard/CardFooter.es.js.map +1 -1
- package/dist/insights/components/shared/InsightsCard/CardLoading.es.js.map +1 -1
- package/dist/insights/components/shared/InsightsCard/ClientConfigurableCta.es.js.map +1 -1
- package/dist/insights/components/shared/InsightsCard/ContentAndDescription.es.js.map +1 -1
- package/dist/insights/components/shared/InsightsCard/ContentAndDescriptionMUI.es.js.map +1 -1
- package/dist/insights/components/shared/InsightsCard/Description.es.js.map +1 -1
- package/dist/insights/components/shared/InsightsCard/DescriptionMUI.es.js.map +1 -1
- package/dist/insights/components/shared/InsightsCard/EmbeddedCard.es.js.map +1 -1
- package/dist/insights/components/shared/InsightsCard/FeedbackCard.es.js +4 -4
- package/dist/insights/components/shared/InsightsCard/FeedbackCard.es.js.map +1 -1
- package/dist/insights/components/shared/InsightsCard/InsightButton.es.js.map +1 -1
- package/dist/insights/components/shared/MenuAction.es.js +4 -4
- package/dist/insights/components/shared/MenuAction.es.js.map +1 -1
- package/dist/insights/components/shared/MiniInsightCard.es.js.map +1 -1
- package/dist/insights/components/shared/P2P/P2PMultipleCategorization.es.js +23 -23
- package/dist/insights/components/shared/P2P/P2PMultipleCategorization.es.js.map +1 -1
- package/dist/insights/components/shared/P2PCategorizationSingleAccount/P2PCategorizationSingleAccount.es.js +24 -24
- package/dist/insights/components/shared/P2PCategorizationSingleAccount/P2PCategorizationSingleAccount.es.js.map +1 -1
- package/dist/insights/components/shared/ProgressBar.es.js.map +1 -1
- package/dist/insights/components/shared/SaveAnExtra100/SaveAnExtra100.es.js.map +1 -1
- package/dist/insights/components/shared/SaveEnoughToLiveOnBottomSection.es.js.map +1 -1
- package/dist/insights/components/shared/StatusIndicator.es.js.map +1 -1
- package/dist/insights/components/shared/ThemedSVGImage.es.js.map +1 -1
- package/dist/insights/components/shared/TransactionCard.es.js.map +1 -1
- package/dist/insights/components/shared/ZeroState/LinedCardZeroState.es.js.map +1 -1
- package/dist/investments/InvestmentsWidget.es.js.map +1 -1
- package/dist/investments/components/Allocation.es.js.map +1 -1
- package/dist/investments/components/Analysis.es.js.map +1 -1
- package/dist/investments/components/AnalysisDetails.es.js.map +1 -1
- package/dist/investments/components/EmptyStateFooterComponent.es.js.map +1 -1
- package/dist/investments/components/HeaderCell.es.js.map +1 -1
- package/dist/investments/components/HoldingDrawer.es.js.map +1 -1
- package/dist/investments/components/HoldingTable.es.js +167 -164
- package/dist/investments/components/HoldingTable.es.js.map +1 -1
- package/dist/investments/components/InfoToolTip.es.js.map +1 -1
- package/dist/investments/components/Overview.es.js.map +1 -1
- package/dist/investments/components/TabTitle.es.js.map +1 -1
- package/dist/investments/components/allocation/InvestementAllocationList.es.js.map +1 -1
- package/dist/investments/components/allocation/InvestmentsAllocationChart.es.js.map +1 -1
- package/dist/merchants/components/MerchantLookup.es.js.map +1 -1
- package/dist/microinsights/InsightsMicroWidget.es.js.map +1 -1
- package/dist/microinsights/MicroCardTemplate.es.js.map +1 -1
- package/dist/microinsights/Spinner.es.js.map +1 -1
- package/dist/microinsights/beaticons/BeatCategoryIcon.es.js +8 -8
- package/dist/microinsights/beaticons/BeatCategoryIcon.es.js.map +1 -1
- package/dist/microinsights/beaticons/BeatMaterialIcon.es.js.map +1 -1
- package/dist/microinsights/beaticons/ChartFilledIcon.es.js.map +1 -1
- package/dist/microinsights/beaticons/ZeroStateIcon.es.js.map +1 -1
- package/dist/microinsights/cards/ViewMoreMicroCard.d.ts +1 -0
- package/dist/microinsights/cards/ViewMoreMicroCard.es.js.map +1 -1
- package/dist/microinsights/carousel/BeatList.es.js +17 -17
- package/dist/microinsights/carousel/BeatList.es.js.map +1 -1
- package/dist/microinsights/carousel/CarouselControls.es.js.map +1 -1
- package/dist/microinsights/carousel/CarouselHeader.es.js.map +1 -1
- package/dist/microinsights/carousel/MicroBeatCarousel.es.js.map +1 -1
- package/dist/microinsights/constants/Analytics.es.js.map +1 -1
- package/dist/networth/NetWorthMicroWidget.es.js.map +1 -1
- package/dist/networth/NetWorthWidget.es.js.map +1 -1
- package/dist/networth/components/AssetsLiabilitiesDetail.es.js +1 -1
- package/dist/networth/components/AssetsLiabilitiesDetail.es.js.map +1 -1
- package/dist/networth/components/GainsLossesDetail.es.js.map +1 -1
- package/dist/networth/components/NetWorthChange.es.js.map +1 -1
- package/dist/networth/components/NetWorthChart.es.js.map +1 -1
- package/dist/networth/components/NetWorthList.es.js.map +1 -1
- package/dist/networth/components/NetWorthListItem.es.js.map +1 -1
- package/dist/networth/components/NetWorthSummary.es.js.map +1 -1
- package/dist/networth/components/micro/NetworthData.es.js.map +1 -1
- package/dist/networth/components/micro/ZeroState.es.js.map +1 -1
- package/dist/notifications/components/DateRow.es.js.map +1 -1
- package/dist/notifications/components/NotificationBadge.es.js.map +1 -1
- package/dist/notifications/components/NotificationCard.es.js.map +1 -1
- package/dist/notifications/components/NotificationDrawer.es.js.map +1 -1
- package/dist/notifications/components/NotificationList.es.js +33 -30
- package/dist/notifications/components/NotificationList.es.js.map +1 -1
- package/dist/notifications/components/NotificationsEmptyState.es.js.map +1 -1
- package/dist/recurringtransactions/RecurringTransactionsMicroWidget.es.js.map +1 -1
- package/dist/recurringtransactions/RecurringTransactionsMiniWidget.es.js.map +1 -1
- package/dist/recurringtransactions/RecurringTransactionsWidget.es.js.map +1 -1
- package/dist/recurringtransactions/ZeroStateMicroWidget.es.js.map +1 -1
- package/dist/recurringtransactions/components/MicroWidgetContent.es.js.map +1 -1
- package/dist/recurringtransactions/components/MiniWidgetContent.es.js.map +1 -1
- package/dist/recurringtransactions/components/PaymentSchedule.es.js.map +1 -1
- package/dist/recurringtransactions/components/RecurrenceBadges.es.js.map +1 -1
- package/dist/recurringtransactions/components/RecurrenceList.es.js.map +1 -1
- package/dist/recurringtransactions/components/RecurrenceRow.es.js.map +1 -1
- package/dist/recurringtransactions/components/RecurringSettingsDrawer.es.js.map +1 -1
- package/dist/recurringtransactions/components/RecurringStatus.es.js.map +1 -1
- package/dist/recurringtransactions/components/RecurringTransactionDetails.es.js.map +1 -1
- package/dist/recurringtransactions/components/RecurringTransactionDetailsDrawer.es.js.map +1 -1
- package/dist/recurringtransactions/components/RecurringTransactionList.es.js.map +1 -1
- package/dist/recurringtransactions/components/RecurringTransactions.es.js.map +1 -1
- package/dist/recurringtransactions/components/UpcomingRecurrenceCard.es.js.map +1 -1
- package/dist/recurringtransactions/components/actions/LinkTransactionDrawer.es.js.map +1 -1
- package/dist/recurringtransactions/components/actions/MarkAsPaidDialog.es.js.map +1 -1
- package/dist/recurringtransactions/components/actions/MarkAsUnpaidDialog.es.js.map +1 -1
- package/dist/recurringtransactions/components/actions/PaymentScheduleAction.es.js.map +1 -1
- package/dist/recurringtransactions/components/micro/MerchantLogosRow.es.js.map +1 -1
- package/dist/recurringtransactions/components/micro/OverlappingMerchantLogos.es.js.map +1 -1
- package/dist/recurringtransactions/components/micro/RecurrenceLegend.es.js.map +1 -1
- package/dist/recurringtransactions/components/recurrencecalendar/Legend.es.js.map +1 -1
- package/dist/recurringtransactions/components/recurrencecalendar/RecurrenceCalendar.es.js.map +1 -1
- package/dist/recurringtransactions/components/recurrencecalendar/RecurrenceDay.es.js.map +1 -1
- package/dist/recurringtransactions/components/shared/RecurringSettings.es.js.map +1 -1
- package/dist/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.es.js.map +1 -1
- package/dist/recurringtransactions/components/shared/recurringsettings/AddRecurringTransactionDetails.es.js.map +1 -1
- package/dist/recurringtransactions/components/shared/recurringsettings/ManageExpenses.es.js.map +1 -1
- package/dist/recurringtransactions/components/shared/recurringsettings/ManageIncome.es.js.map +1 -1
- package/dist/recurringtransactions/components/shared/recurringsettings/RecurringRow.es.js.map +1 -1
- package/dist/recurringtransactions/components/shared/recurringsettings/RecurringSettingsZeroState.es.js.map +1 -1
- package/dist/recurringtransactions/components/shared/recurringsettings/SelectTransaction.es.js.map +1 -1
- package/dist/settings/NotificationSettingsWidget.es.js.map +1 -1
- package/dist/settings/SettingsWidget.es.js.map +1 -1
- package/dist/settings/TransactionRulesWidget.es.js.map +1 -1
- package/dist/settings/components/SettingsWidgetContents.es.js.map +1 -1
- package/dist/settings/components/devices/DeviceDialog.es.js.map +1 -1
- package/dist/settings/components/devices/DeviceList.es.js.map +1 -1
- package/dist/settings/components/devices/DeviceTab.es.js.map +1 -1
- package/dist/settings/components/devices/DeviceTable.es.js +82 -82
- package/dist/settings/components/devices/DeviceTable.es.js.map +1 -1
- package/dist/settings/components/notifications/AccountNotificationProfile.es.js.map +1 -1
- package/dist/settings/components/notifications/AccountNotificationProfiles.es.js.map +1 -1
- package/dist/settings/components/notifications/AccountProfileListItem.es.js.map +1 -1
- package/dist/settings/components/notifications/DeliveryMethods.es.js.map +1 -1
- package/dist/settings/components/notifications/NotificationProfile.es.js.map +1 -1
- package/dist/settings/components/notifications/NotificationSettings.es.js.map +1 -1
- package/dist/settings/components/notifications/PersonalDetails.es.js.map +1 -1
- package/dist/settings/components/profile/ProfileTab.es.js.map +1 -1
- package/dist/settings/components/profile/actions/VerifyEmailAction.es.js.map +1 -1
- package/dist/settings/components/profile/actions/VerifyPhoneAction.es.js.map +1 -1
- package/dist/settings/components/profile/actions/VerifyTokenAction.es.js.map +1 -1
- package/dist/settings/components/transactionrules/TransactionRulesTab.es.js.map +1 -1
- package/dist/settings/components/transactionrules/actions/DeleteRuleAction.es.js.map +1 -1
- package/dist/settings/components/transactionrules/actions/EditPayeeAction.es.js.map +1 -1
- package/dist/settings/components/transactionrules/components/EditRuleDetails.es.js.map +1 -1
- package/dist/settings/components/transactionrules/components/RuleListItem.es.js +24 -21
- package/dist/settings/components/transactionrules/components/RuleListItem.es.js.map +1 -1
- package/dist/spending/SpendingMiniWidget.es.js.map +1 -1
- package/dist/spending/SpendingWidget.es.js +48 -39
- package/dist/spending/SpendingWidget.es.js.map +1 -1
- package/dist/spending/components/MiniSpendingChart.es.js.map +1 -1
- package/dist/spending/components/Spending.es.js.map +1 -1
- package/dist/spending/components/SpendingChart.es.js.map +1 -1
- package/dist/spending/components/SpendingDonut.es.js.map +1 -1
- package/dist/spending/components/SpendingLegend.es.js.map +1 -1
- package/dist/spending/components/SpendingList.es.js.map +1 -1
- package/dist/spending/components/SpendingTabLabel.es.js.map +1 -1
- package/dist/transactions/TransactionWidget.es.js.map +1 -1
- package/dist/transactions/components/shared/TransactionDetails.es.js.map +1 -1
- package/dist/transactions/components/shared/TransactionList.es.js.map +1 -1
- package/dist/transactions/components/shared/TransactionTable.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiondetails/Description.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiondetails/FlagTransaction.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiondetails/ManualTransactionDetails.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiondetails/TransactionAmountHeader.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiondetails/TransactionDetailsView.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiondetails/actions/AddMerchantBudgetAction.es.js +7 -7
- package/dist/transactions/components/shared/transactiondetails/actions/AddMerchantBudgetAction.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiondetails/actions/CategoryAction.es.js +29 -29
- package/dist/transactions/components/shared/transactiondetails/actions/CategoryAction.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiondetails/actions/DateAction.es.js +36 -36
- package/dist/transactions/components/shared/transactiondetails/actions/DateAction.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiondetails/actions/DeleteAction.es.js +7 -7
- package/dist/transactions/components/shared/transactiondetails/actions/DeleteAction.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiondetails/actions/DeleteLogoAction.es.js +7 -7
- package/dist/transactions/components/shared/transactiondetails/actions/DeleteLogoAction.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiondetails/actions/ExcludeAction.es.js +7 -7
- package/dist/transactions/components/shared/transactiondetails/actions/ExcludeAction.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiondetails/actions/MemoAction.es.js +24 -24
- package/dist/transactions/components/shared/transactiondetails/actions/MemoAction.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiondetails/actions/SplitAction.es.js +40 -40
- package/dist/transactions/components/shared/transactiondetails/actions/SplitAction.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiondetails/actions/TagsAction.es.js +34 -34
- package/dist/transactions/components/shared/transactiondetails/actions/TagsAction.es.js.map +1 -1
- package/dist/transactions/components/shared/transactionlist/TransactionRow.es.js.map +1 -1
- package/dist/transactions/components/shared/transactionlist/ZeroState.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiontable/cells/AccountCell.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiontable/cells/AmountCell.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiontable/cells/CategoryCell.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiontable/cells/DateCell.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiontable/cells/FlagCell.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiontable/cells/HeaderCell.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiontable/cells/PayeeCell.es.js.map +1 -1
- package/dist/transactions/components/splitmanager/SplitManager.es.js.map +1 -1
- package/dist/transactions/components/splitmanager/SplitRow.es.js.map +1 -1
- package/dist/transactions/components/tagmanager/Header.es.js.map +1 -1
- package/dist/transactions/components/tagmanager/SearchBox.es.js.map +1 -1
- package/dist/transactions/components/tagmanager/TagManager.es.js.map +1 -1
- package/dist/transactions/components/tagmanager/TagRow.es.js +4 -4
- package/dist/transactions/components/tagmanager/TagRow.es.js.map +1 -1
- package/dist/transactions/components/transactionwidget/AddAccountModal.es.js.map +1 -1
- package/dist/transactions/components/transactionwidget/actions/EditCategoryAction.es.js.map +1 -1
- package/dist/transactions/components/transactionwidget/actions/ExportCsvAction.es.js.map +1 -1
- package/dist/transactions/utils/Transactions.es.js +20 -12
- package/dist/transactions/utils/Transactions.es.js.map +1 -1
- package/dist/trends/TrendsFullWidget.es.js +47 -47
- package/dist/trends/TrendsFullWidget.es.js.map +1 -1
- package/dist/trends/TrendsMicroWidget.es.js.map +1 -1
- package/dist/trends/TrendsMiniWidget.es.js.map +1 -1
- package/dist/trends/TrendsWidget.es.js +88 -89
- package/dist/trends/TrendsWidget.es.js.map +1 -1
- package/dist/trends/ZeroStateMicroWidget.es.js.map +1 -1
- package/dist/trends/components/CategoriesList.es.js.map +1 -1
- package/dist/trends/components/CategoryDetailChart.es.js.map +1 -1
- package/dist/trends/components/CategoryDetails.es.js.map +1 -1
- package/dist/trends/components/DateRangeText.es.js.map +1 -1
- package/dist/trends/components/TrendsChart.es.js.map +1 -1
- package/dist/trends/components/TrendsDrawer.es.js.map +1 -1
- package/dist/trends/components/TrendsInsights.es.js +21 -21
- package/dist/trends/components/TrendsInsights.es.js.map +1 -1
- package/dist/trends/components/TrendsMicroSpendingIncomeBox.es.js.map +1 -1
- package/dist/trends/components/TrendsTableContainer.es.js.map +1 -1
- package/dist/trends/components/TrendsViewToggle.es.js.map +1 -1
- package/dist/trends/components/trendstable/AccessibleSortIcon.es.js.map +1 -1
- package/dist/trends/components/trendstable/AmountCell.es.js.map +1 -1
- package/dist/trends/components/trendstable/CategoryCell.es.js.map +1 -1
- package/dist/trends/components/trendstable/HeaderCell.es.js.map +1 -1
- package/package.json +36 -35
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finstrongUtils.es.js","names":[],"sources":["../../../src/finstrong/util/finstrongUtils.tsx"],"sourcesContent":["import { addDays } from 'date-fns/addDays'\nimport { addMonths } from 'date-fns/addMonths'\nimport { addYears } from 'date-fns/addYears'\nimport { differenceInDays } from 'date-fns/differenceInDays'\nimport { differenceInMonths } from 'date-fns/differenceInMonths'\nimport { differenceInWeeks } from 'date-fns/differenceInWeeks'\nimport { format } from 'date-fns/format'\nimport { startOfToday } from 'date-fns/startOfToday'\n\nimport type { PieValueType } from '@mui/x-charts'\n\nimport { Check } from '@mxenabled/mx-icons'\n\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { type MonthlySummaries } from '../../core'\nimport type {\n CreditScoreStatusCopy,\n FinstrongCopy,\n KeyIndicatorSpend,\n} from '../../core/types/localization/FinstrongCopy'\nimport { CardStatus, FinstrongThresholds } from '../../common/constants/FinStrong'\n\nimport { Action } from '../components/ProfileList'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\n\nexport const radiansToDegrees = (radians: number): number => {\n return radians * (180 / Math.PI)\n}\n\nexport const calculateFinstrongScoreStatus = (healthScore: number, copy: FinstrongCopy) => {\n const scoreRanges = [\n {\n description: copy.vulnerable_description,\n max: 25,\n scoreContent: copy.accordion_details_text.vulnerable,\n status: copy.vulnerable,\n },\n {\n description: copy.building_description,\n max: 50,\n scoreContent: copy.accordion_details_text.building,\n status: copy.building,\n },\n {\n description: copy.stable_description,\n max: 75,\n scoreContent: copy.accordion_details_text.stable,\n status: copy.stable,\n },\n {\n description: copy.strong_description,\n max: 100,\n scoreContent: copy.accordion_details_text.strong,\n status: copy.strong,\n },\n ]\n\n const foundRange = scoreRanges.find((range) => healthScore > 0 && healthScore <= range.max)\n\n return foundRange || { status: copy.insufficient_data, description: '', scoreContent: '' }\n}\n\nexport const CreditScoreLightColors = {\n POOR: '#8C0E0E',\n FAIR: '#E32727',\n GOOD: '#FFB70D',\n VERY_GOOD: '#0EA26C',\n EXCEPTIONAL: '#005C3D',\n}\n\nexport const CreditScoreDarkColors = {\n POOR: '#B21C1C',\n FAIR: '#FF3232',\n GOOD: '#FFC02C',\n VERY_GOOD: '#29C76B',\n EXCEPTIONAL: '#008A5A',\n}\n\nexport const getCreditScoreDetails = (\n healthScore: number,\n isDarkMode: boolean,\n copy: CreditScoreStatusCopy,\n) => {\n if (healthScore >= 300 && healthScore < 580) {\n return {\n status: copy.poor,\n color: isDarkMode ? CreditScoreDarkColors.POOR : CreditScoreLightColors.POOR,\n }\n } else if (healthScore >= 580 && healthScore < 670) {\n return {\n status: copy.fair,\n color: isDarkMode ? CreditScoreDarkColors.FAIR : CreditScoreLightColors.FAIR,\n }\n } else if (healthScore >= 670 && healthScore < 740) {\n return {\n status: copy.good,\n color: isDarkMode ? CreditScoreDarkColors.GOOD : CreditScoreLightColors.GOOD,\n }\n } else if (healthScore >= 740 && healthScore < 800) {\n return {\n status: copy.very_good,\n color: isDarkMode ? CreditScoreDarkColors.VERY_GOOD : CreditScoreLightColors.VERY_GOOD,\n }\n } else if (healthScore >= 800 && healthScore <= 850) {\n return {\n status: copy.exceptional,\n color: isDarkMode ? CreditScoreDarkColors.EXCEPTIONAL : CreditScoreLightColors.EXCEPTIONAL,\n }\n }\n return { status: copy.missing_data }\n}\n\nexport const getOutterArcStartEndAngle = (\n healthScoreData: PieValueType[],\n totalAngularSpan: number,\n arcStartAngle: number,\n dataIndex: number,\n) => {\n const total = healthScoreData.reduce((sum, item) => sum + item.value, 0)\n\n let cumulativeAngle = 0\n\n const arcs = healthScoreData.map((item) => {\n const anglePortion = (item.value / total) * totalAngularSpan\n\n const sliceStart = arcStartAngle + cumulativeAngle\n const sliceEnd = sliceStart + anglePortion\n\n cumulativeAngle += anglePortion\n\n return {\n ...item,\n startAngle: sliceStart,\n endAngle: sliceEnd,\n }\n })\n return [arcs[dataIndex].startAngle, arcs[dataIndex].endAngle]\n}\n\nexport const getFilledArcStartEndAngle = (\n outterArcStartAngle: number,\n outterArcEndAngle: number,\n dataIndex: number,\n unitsPerSegment: number,\n progressEndAngle: number,\n) => {\n let filledArcStartAngle = 0\n let filledArcEndAngle = 0\n const wholeSegments = Math.floor(unitsPerSegment)\n const partialSegment = unitsPerSegment - wholeSegments\n if (wholeSegments > dataIndex) {\n filledArcStartAngle = outterArcStartAngle\n filledArcEndAngle = outterArcEndAngle\n } else if (wholeSegments === dataIndex && partialSegment > 0) {\n filledArcStartAngle = outterArcStartAngle\n filledArcEndAngle = progressEndAngle\n }\n return [filledArcStartAngle, filledArcEndAngle]\n}\n\nexport const getMarkerXYCoordinates = (\n markerRadius: number,\n progressEndAngle: number,\n angleOffset: number = 0,\n) => {\n const markerX = markerRadius * Math.sin(progressEndAngle - angleOffset)\n const markerY = -markerRadius * Math.cos(progressEndAngle - angleOffset)\n return [markerX, markerY]\n}\n\nexport const buildProfileItem = ({\n dynamicCopy,\n fallbackLabel,\n icon,\n key,\n label,\n value,\n}: {\n dynamicCopy?: string\n fallbackLabel: string\n icon: React.JSX.Element\n key: Action\n label: string\n value: string | number | undefined | null\n}) => {\n const isComplete = Boolean(value)\n\n const secondaryText = isComplete\n ? getFormattedValue(key, value!)\n : (dynamicCopy && (buildDynamicCopy(dynamicCopy, fallbackLabel) as string)) || fallbackLabel\n\n return {\n icon: isComplete ? <Check /> : icon,\n isComplete,\n key,\n primaryText: label,\n secondaryText,\n }\n}\n\nconst getFormattedValue = (key: Action, value: string | number) => {\n const formatters: Partial<Record<Action, (value: string | number) => string>> = {\n [Action.DateOfBirth]: (v) => format(new Date(Number(v) * 1000), 'MMM d, yyyy'),\n [Action.MonthlyIncome]: (v) => formatCurrency(Number(v), '0.00'),\n }\n\n return formatters[key]?.(value) ?? String(value)\n}\n\nexport const getPercentFromRatio = (ratio: number | null) => {\n return ratio !== null ? Math.round(ratio * 100) : null\n}\n\nexport const getMonthName = (month: number): string => {\n const date = new Date(new Date().getFullYear(), month - 1, 1)\n return formatDate(date, DATE_FORMATS_INTL.MONTH_SHORT)\n}\n\nexport const getDaysOfCashOnHandState = (days: number | null): keyof typeof CardStatus => {\n const { good, poor } = FinstrongThresholds.daysOfCashOnHand\n\n if (days === null) return 'MISSING'\n if (days >= good) return 'GOOD'\n if (days >= poor) return 'FAIR'\n\n return 'OFF_TRACK'\n}\n\nexport const getEmergencySavingsState = (dollars: number | null): keyof typeof CardStatus => {\n const { good, poor } = FinstrongThresholds.emergencySavings\n\n if (dollars === null) return 'MISSING'\n if (dollars >= good) return 'GOOD'\n if (dollars >= poor) return 'FAIR'\n return 'OFF_TRACK'\n}\n\nexport const getSpendToIncomeRatioState = (ratio: number | null): keyof typeof CardStatus => {\n const { good, poor } = FinstrongThresholds.spendToIncomeRatio\n\n if (ratio === null) return 'MISSING'\n if (ratio < good) return 'GOOD'\n if (ratio < poor) return 'FAIR'\n return 'OFF_TRACK'\n}\n\nexport const getManageDebtRatioState = (ratio: number | null): keyof typeof CardStatus => {\n const { good, poor } = FinstrongThresholds.debtToIncomeRatio\n\n if (ratio === null) return 'MISSING'\n if (ratio <= good) return 'GOOD'\n if (ratio <= poor) return 'FAIR'\n return 'OFF_TRACK'\n}\n\nexport const getCreditScoreState = (score: number | null): keyof typeof CardStatus => {\n const { good, poor } = FinstrongThresholds.creditScore\n\n if (score === null) return 'MISSING'\n if (score >= good) return 'GOOD'\n if (score >= poor) return 'FAIR'\n return 'OFF_TRACK'\n}\n\nexport const getSpendingFeeCountState = (count: number | null) => {\n if (count === null) return 'MISSING'\n if (count === 0) return 'GOOD'\n return 'OFF_TRACK'\n}\n\nexport const getSpendingFeeCountStatus = (\n count: number | null,\n spendCopy: KeyIndicatorSpend,\n): {\n cardState: keyof typeof CardStatus\n description: string\n title: string\n} => {\n const state = getSpendingFeeCountState(count)\n\n const cardStatusMapping = {\n GOOD: spendCopy.count_good_description,\n OFF_TRACK: spendCopy.count_off_track_description,\n MISSING: spendCopy.count_missing_description,\n }\n\n return {\n cardState: state,\n description: cardStatusMapping[state],\n title: spendCopy.count_card_title,\n }\n}\n\nexport const getCardStateStyles = (cardState: string) => {\n return {\n [CardStatus.GOOD]: { backgroundColor: 'success.lighter', color: 'success.dark' },\n [CardStatus.FAIR]: { backgroundColor: 'warning.lighter', color: 'warning.dark' },\n [CardStatus.OFF_TRACK]: { backgroundColor: 'error.lighter', color: 'error.dark' },\n [CardStatus.MISSING]: { backgroundColor: 'divider', color: 'text.secondary' },\n }[cardState]\n}\n\nconst DEFAULT_CONTRIBUTION_PERIOD_INDEX = 1\nconst DEFAULT_TARGET_AMOUNT = 1\n\nconst getFutureDate = {\n 1: addMonths,\n 2: addYears,\n 3: addDays,\n} as const\n\nconst getNumberOfPayments = {\n 1: differenceInMonths,\n 2: (end: Date, start: Date) => differenceInWeeks(end, start) / 2,\n 3: differenceInWeeks,\n 4: differenceInDays,\n} as const\n\nconst SAVINGS_BUCKETS = [\n { contributionPeriodIndex: 3, targetAmount: 6, upperLimit: 500 },\n { contributionPeriodIndex: 3, targetAmount: 3, upperLimit: 900 },\n { contributionPeriodIndex: 2, targetAmount: 1, upperLimit: 1000 },\n]\n\ninterface CalculateContributionParams {\n contribution: keyof typeof getNumberOfPayments\n goalAmount: number\n goalPeriod: number\n targetPeriod: keyof typeof getFutureDate\n totalSaved: number\n}\n\nexport const calculateContribution = ({\n contribution,\n goalAmount,\n goalPeriod,\n targetPeriod,\n totalSaved,\n}: CalculateContributionParams) => {\n const amountRemaining = goalAmount - totalSaved\n\n if (amountRemaining <= 0) return 0\n\n const today = startOfToday()\n const futureDateFn = getFutureDate[targetPeriod]\n const paymentFn = getNumberOfPayments[contribution]\n\n if (!futureDateFn || !paymentFn) return amountRemaining\n\n const futureDate = futureDateFn(today, goalPeriod)\n const payments = paymentFn(futureDate, today)\n\n return Math.max(amountRemaining / (payments || 1), 1)\n}\n\nexport const calculatePercentage = (amount: number | null): string => {\n if (!amount || amount <= 0) return '0%'\n if (amount >= 1000) return '100%'\n\n return `${Math.round(amount / 10)}%`\n}\n\nexport const getInitialTargetPeriodAmount = (totalSaved: number) => {\n const bucket = SAVINGS_BUCKETS.find((bucket) => totalSaved < bucket.upperLimit)\n\n return bucket?.targetAmount ?? DEFAULT_TARGET_AMOUNT\n}\n\nexport const getInitialContributionPeriod = (totalSaved: number) => {\n const bucket = SAVINGS_BUCKETS.find((bucket) => totalSaved < bucket.upperLimit)\n const periodIndex = bucket?.contributionPeriodIndex ?? DEFAULT_CONTRIBUTION_PERIOD_INDEX\n\n return periodIndex\n}\n\nexport const getSeriesGraphData = (\n monthlySummaries: MonthlySummaries[],\n valueKey: keyof Pick<MonthlySummaries, 'available_cash' | 'debt_balance' | 'credit_score'>,\n) => {\n const dataSet = [...monthlySummaries]\n .sort((a, b) => {\n return a.year === b.year ? a.month - b.month : a.year - b.year\n })\n .map((summary) => ({\n x: formatDate(new Date(0, summary.month - 1, 1), DATE_FORMATS_INTL.MONTH_SHORT),\n y: summary[valueKey],\n }))\n\n return dataSet\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"finstrongUtils.es.js","names":[],"sources":["../../../src/finstrong/util/finstrongUtils.tsx"],"sourcesContent":["import { addDays } from 'date-fns/addDays'\nimport { addMonths } from 'date-fns/addMonths'\nimport { addYears } from 'date-fns/addYears'\nimport { differenceInDays } from 'date-fns/differenceInDays'\nimport { differenceInMonths } from 'date-fns/differenceInMonths'\nimport { differenceInWeeks } from 'date-fns/differenceInWeeks'\nimport { format } from 'date-fns/format'\nimport { startOfToday } from 'date-fns/startOfToday'\n\nimport type { PieValueType } from '@mui/x-charts'\n\nimport { Check } from '@mxenabled/mx-icons'\n\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { type MonthlySummaries } from '../../core'\nimport type {\n CreditScoreStatusCopy,\n FinstrongCopy,\n KeyIndicatorSpend,\n} from '../../core/types/localization/FinstrongCopy'\nimport { CardStatus, FinstrongThresholds } from '../../common/constants/FinStrong'\n\nimport { Action } from '../components/ProfileList'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\n\nexport const radiansToDegrees = (radians: number): number => {\n return radians * (180 / Math.PI)\n}\n\nexport const calculateFinstrongScoreStatus = (healthScore: number, copy: FinstrongCopy) => {\n const scoreRanges = [\n {\n description: copy.vulnerable_description,\n max: 25,\n scoreContent: copy.accordion_details_text.vulnerable,\n status: copy.vulnerable,\n },\n {\n description: copy.building_description,\n max: 50,\n scoreContent: copy.accordion_details_text.building,\n status: copy.building,\n },\n {\n description: copy.stable_description,\n max: 75,\n scoreContent: copy.accordion_details_text.stable,\n status: copy.stable,\n },\n {\n description: copy.strong_description,\n max: 100,\n scoreContent: copy.accordion_details_text.strong,\n status: copy.strong,\n },\n ]\n\n const foundRange = scoreRanges.find((range) => healthScore > 0 && healthScore <= range.max)\n\n return foundRange || { status: copy.insufficient_data, description: '', scoreContent: '' }\n}\n\nexport const CreditScoreLightColors = {\n POOR: '#8C0E0E',\n FAIR: '#E32727',\n GOOD: '#FFB70D',\n VERY_GOOD: '#0EA26C',\n EXCEPTIONAL: '#005C3D',\n}\n\nexport const CreditScoreDarkColors = {\n POOR: '#B21C1C',\n FAIR: '#FF3232',\n GOOD: '#FFC02C',\n VERY_GOOD: '#29C76B',\n EXCEPTIONAL: '#008A5A',\n}\n\nexport const getCreditScoreDetails = (\n healthScore: number,\n isDarkMode: boolean,\n copy: CreditScoreStatusCopy,\n) => {\n if (healthScore >= 300 && healthScore < 580) {\n return {\n status: copy.poor,\n color: isDarkMode ? CreditScoreDarkColors.POOR : CreditScoreLightColors.POOR,\n }\n } else if (healthScore >= 580 && healthScore < 670) {\n return {\n status: copy.fair,\n color: isDarkMode ? CreditScoreDarkColors.FAIR : CreditScoreLightColors.FAIR,\n }\n } else if (healthScore >= 670 && healthScore < 740) {\n return {\n status: copy.good,\n color: isDarkMode ? CreditScoreDarkColors.GOOD : CreditScoreLightColors.GOOD,\n }\n } else if (healthScore >= 740 && healthScore < 800) {\n return {\n status: copy.very_good,\n color: isDarkMode ? CreditScoreDarkColors.VERY_GOOD : CreditScoreLightColors.VERY_GOOD,\n }\n } else if (healthScore >= 800 && healthScore <= 850) {\n return {\n status: copy.exceptional,\n color: isDarkMode ? CreditScoreDarkColors.EXCEPTIONAL : CreditScoreLightColors.EXCEPTIONAL,\n }\n }\n return { status: copy.missing_data }\n}\n\nexport const getOutterArcStartEndAngle = (\n healthScoreData: PieValueType[],\n totalAngularSpan: number,\n arcStartAngle: number,\n dataIndex: number,\n) => {\n const total = healthScoreData.reduce((sum, item) => sum + item.value, 0)\n\n let cumulativeAngle = 0\n\n const arcs = healthScoreData.map((item) => {\n const anglePortion = (item.value / total) * totalAngularSpan\n\n const sliceStart = arcStartAngle + cumulativeAngle\n const sliceEnd = sliceStart + anglePortion\n\n cumulativeAngle += anglePortion\n\n return {\n ...item,\n startAngle: sliceStart,\n endAngle: sliceEnd,\n }\n })\n return [arcs[dataIndex].startAngle, arcs[dataIndex].endAngle]\n}\n\nexport const getFilledArcStartEndAngle = (\n outterArcStartAngle: number,\n outterArcEndAngle: number,\n dataIndex: number,\n unitsPerSegment: number,\n progressEndAngle: number,\n) => {\n let filledArcStartAngle = 0\n let filledArcEndAngle = 0\n const wholeSegments = Math.floor(unitsPerSegment)\n const partialSegment = unitsPerSegment - wholeSegments\n if (wholeSegments > dataIndex) {\n filledArcStartAngle = outterArcStartAngle\n filledArcEndAngle = outterArcEndAngle\n } else if (wholeSegments === dataIndex && partialSegment > 0) {\n filledArcStartAngle = outterArcStartAngle\n filledArcEndAngle = progressEndAngle\n }\n return [filledArcStartAngle, filledArcEndAngle]\n}\n\nexport const getMarkerXYCoordinates = (\n markerRadius: number,\n progressEndAngle: number,\n angleOffset: number = 0,\n) => {\n const markerX = markerRadius * Math.sin(progressEndAngle - angleOffset)\n const markerY = -markerRadius * Math.cos(progressEndAngle - angleOffset)\n return [markerX, markerY]\n}\n\nexport const buildProfileItem = ({\n dynamicCopy,\n fallbackLabel,\n icon,\n key,\n label,\n value,\n}: {\n dynamicCopy?: string\n fallbackLabel: string\n icon: React.JSX.Element\n key: Action\n label: string\n value: string | number | undefined | null\n}) => {\n const isComplete = Boolean(value)\n\n const secondaryText = isComplete\n ? getFormattedValue(key, value!)\n : (dynamicCopy && (buildDynamicCopy(dynamicCopy, fallbackLabel) as string)) || fallbackLabel\n\n return {\n icon: isComplete ? <Check /> : icon,\n isComplete,\n key,\n primaryText: label,\n secondaryText,\n }\n}\n\nconst getFormattedValue = (key: Action, value: string | number) => {\n const formatters: Partial<Record<Action, (value: string | number) => string>> = {\n [Action.DateOfBirth]: (v) => format(new Date(Number(v) * 1000), 'MMM d, yyyy'),\n [Action.MonthlyIncome]: (v) => formatCurrency(Number(v), '0.00'),\n }\n\n return formatters[key]?.(value) ?? String(value)\n}\n\nexport const getPercentFromRatio = (ratio: number | null) => {\n return ratio !== null ? Math.round(ratio * 100) : null\n}\n\nexport const getMonthName = (month: number): string => {\n const date = new Date(new Date().getFullYear(), month - 1, 1)\n return formatDate(date, DATE_FORMATS_INTL.MONTH_SHORT)\n}\n\nexport const getDaysOfCashOnHandState = (days: number | null): keyof typeof CardStatus => {\n const { good, poor } = FinstrongThresholds.daysOfCashOnHand\n\n if (days === null) return 'MISSING'\n if (days >= good) return 'GOOD'\n if (days >= poor) return 'FAIR'\n\n return 'OFF_TRACK'\n}\n\nexport const getEmergencySavingsState = (dollars: number | null): keyof typeof CardStatus => {\n const { good, poor } = FinstrongThresholds.emergencySavings\n\n if (dollars === null) return 'MISSING'\n if (dollars >= good) return 'GOOD'\n if (dollars >= poor) return 'FAIR'\n return 'OFF_TRACK'\n}\n\nexport const getSpendToIncomeRatioState = (ratio: number | null): keyof typeof CardStatus => {\n const { good, poor } = FinstrongThresholds.spendToIncomeRatio\n\n if (ratio === null) return 'MISSING'\n if (ratio < good) return 'GOOD'\n if (ratio < poor) return 'FAIR'\n return 'OFF_TRACK'\n}\n\nexport const getManageDebtRatioState = (ratio: number | null): keyof typeof CardStatus => {\n const { good, poor } = FinstrongThresholds.debtToIncomeRatio\n\n if (ratio === null) return 'MISSING'\n if (ratio <= good) return 'GOOD'\n if (ratio <= poor) return 'FAIR'\n return 'OFF_TRACK'\n}\n\nexport const getCreditScoreState = (score: number | null): keyof typeof CardStatus => {\n const { good, poor } = FinstrongThresholds.creditScore\n\n if (score === null) return 'MISSING'\n if (score >= good) return 'GOOD'\n if (score >= poor) return 'FAIR'\n return 'OFF_TRACK'\n}\n\nexport const getSpendingFeeCountState = (count: number | null) => {\n if (count === null) return 'MISSING'\n if (count === 0) return 'GOOD'\n return 'OFF_TRACK'\n}\n\nexport const getSpendingFeeCountStatus = (\n count: number | null,\n spendCopy: KeyIndicatorSpend,\n): {\n cardState: keyof typeof CardStatus\n description: string\n title: string\n} => {\n const state = getSpendingFeeCountState(count)\n\n const cardStatusMapping = {\n GOOD: spendCopy.count_good_description,\n OFF_TRACK: spendCopy.count_off_track_description,\n MISSING: spendCopy.count_missing_description,\n }\n\n return {\n cardState: state,\n description: cardStatusMapping[state],\n title: spendCopy.count_card_title,\n }\n}\n\nexport const getCardStateStyles = (cardState: string) => {\n return {\n [CardStatus.GOOD]: { backgroundColor: 'success.lighter', color: 'success.dark' },\n [CardStatus.FAIR]: { backgroundColor: 'warning.lighter', color: 'warning.dark' },\n [CardStatus.OFF_TRACK]: { backgroundColor: 'error.lighter', color: 'error.dark' },\n [CardStatus.MISSING]: { backgroundColor: 'divider', color: 'text.secondary' },\n }[cardState]\n}\n\nconst DEFAULT_CONTRIBUTION_PERIOD_INDEX = 1\nconst DEFAULT_TARGET_AMOUNT = 1\n\nconst getFutureDate = {\n 1: addMonths,\n 2: addYears,\n 3: addDays,\n} as const\n\nconst getNumberOfPayments = {\n 1: differenceInMonths,\n 2: (end: Date, start: Date) => differenceInWeeks(end, start) / 2,\n 3: differenceInWeeks,\n 4: differenceInDays,\n} as const\n\nconst SAVINGS_BUCKETS = [\n { contributionPeriodIndex: 3, targetAmount: 6, upperLimit: 500 },\n { contributionPeriodIndex: 3, targetAmount: 3, upperLimit: 900 },\n { contributionPeriodIndex: 2, targetAmount: 1, upperLimit: 1000 },\n]\n\ninterface CalculateContributionParams {\n contribution: keyof typeof getNumberOfPayments\n goalAmount: number\n goalPeriod: number\n targetPeriod: keyof typeof getFutureDate\n totalSaved: number\n}\n\nexport const calculateContribution = ({\n contribution,\n goalAmount,\n goalPeriod,\n targetPeriod,\n totalSaved,\n}: CalculateContributionParams) => {\n const amountRemaining = goalAmount - totalSaved\n\n if (amountRemaining <= 0) return 0\n\n const today = startOfToday()\n const futureDateFn = getFutureDate[targetPeriod]\n const paymentFn = getNumberOfPayments[contribution]\n\n if (!futureDateFn || !paymentFn) return amountRemaining\n\n const futureDate = futureDateFn(today, goalPeriod)\n const payments = paymentFn(futureDate, today)\n\n return Math.max(amountRemaining / (payments || 1), 1)\n}\n\nexport const calculatePercentage = (amount: number | null): string => {\n if (!amount || amount <= 0) return '0%'\n if (amount >= 1000) return '100%'\n\n return `${Math.round(amount / 10)}%`\n}\n\nexport const getInitialTargetPeriodAmount = (totalSaved: number) => {\n const bucket = SAVINGS_BUCKETS.find((bucket) => totalSaved < bucket.upperLimit)\n\n return bucket?.targetAmount ?? DEFAULT_TARGET_AMOUNT\n}\n\nexport const getInitialContributionPeriod = (totalSaved: number) => {\n const bucket = SAVINGS_BUCKETS.find((bucket) => totalSaved < bucket.upperLimit)\n const periodIndex = bucket?.contributionPeriodIndex ?? DEFAULT_CONTRIBUTION_PERIOD_INDEX\n\n return periodIndex\n}\n\nexport const getSeriesGraphData = (\n monthlySummaries: MonthlySummaries[],\n valueKey: keyof Pick<MonthlySummaries, 'available_cash' | 'debt_balance' | 'credit_score'>,\n) => {\n const dataSet = [...monthlySummaries]\n .sort((a, b) => {\n return a.year === b.year ? a.month - b.month : a.year - b.year\n })\n .map((summary) => ({\n x: formatDate(new Date(0, summary.month - 1, 1), DATE_FORMATS_INTL.MONTH_SHORT),\n y: summary[valueKey],\n }))\n\n return dataSet\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GoalsMicroWidget.es.js","names":[],"sources":["../../src/goals/GoalsMicroWidget.tsx"],"sourcesContent":["import React from 'react'\n\nimport { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\nimport Divider from '@mui/material/Divider'\n\nimport {\n ANALYTICS_EVENTS,\n Loader,\n MicroWidgetContainer,\n useAccountStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useGoalStore,\n useWidgetLoadTimer,\n} from '../common'\n\nimport { GoalMicroStatusCard } from './components/micro/GoalMicroStatusCard'\nimport { GoalsMicroEmptyState } from './components/micro/GoalsMicroEmptyState'\n\ninterface GoalsMicroWidgetProps {\n onCTAClick: () => void\n}\n\nexport const GoalsMicroWidget = observer(({ onCTAClick }: GoalsMicroWidgetProps) => {\n const { isAccountDataLoaded, loadAccountData, visibleAccounts: accounts } = useAccountStore()\n const { onEvent } = useEvent()\n const { goals: copy } = useGlobalCopyStore()\n const { isInitialized } = useGlobalUiStore()\n const { ongoingGoalsForMicroWidget: goals, isAllGoalDataLoaded, loadGoalData } = useGoalStore()\n\n useWidgetLoadTimer({\n widgetName: 'GoalsMicroWidget',\n isLoaded: isAllGoalDataLoaded,\n })\n\n React.useEffect(() => {\n if (!isAccountDataLoaded) {\n loadAccountData().finally()\n }\n }, [])\n\n React.useEffect(() => {\n if (isInitialized) {\n loadGoalData().finally()\n onEvent(ANALYTICS_EVENTS.GOALS_LOAD_WIDGET, {\n state: !accounts?.length ? 'zeroState' : 'default',\n })\n }\n }, [isInitialized])\n\n const isEmptyGoalsState = React.useMemo(\n () => isAllGoalDataLoaded && goals.length === 0,\n [goals, isAllGoalDataLoaded],\n )\n\n const handleCTAClick = () => {\n onEvent(\n isEmptyGoalsState\n ? ANALYTICS_EVENTS.GOALS_CLICK_GET_STARTED\n : ANALYTICS_EVENTS.GOALS_CLICK_VIEW_DETAILS,\n )\n onCTAClick()\n }\n\n if (!isInitialized || !isAllGoalDataLoaded) {\n return <Loader />\n }\n\n return (\n <MicroWidgetContainer\n className=\"mx-goals-microwidget\"\n ctaLabel={!isEmptyGoalsState ? copy.view_details : copy.get_started}\n onCTAClick={handleCTAClick}\n title={copy.title}\n >\n {!isEmptyGoalsState ? (\n <Stack sx={{ justifyContent: 'space-between' }}>\n {goals.map((goal, index) => (\n <React.Fragment key={goal.guid}>\n <GoalMicroStatusCard goal={goal} />\n {index !== goals.length - 1 && <Divider />}\n </React.Fragment>\n ))}\n </Stack>\n ) : (\n <GoalsMicroEmptyState\n header={copy.create_goals_header}\n subText={copy.micro_zero_state_description}\n />\n )}\n </MicroWidgetContainer>\n )\n})\n"],"mappings":";;;;;;;;;;;;AA0BA,IAAa,IAAmB,EAAA,CAAU,EAAE,YAAA,EAAA,MAAwC;AAClF,QAAM,EAAE,qBAAA,GAAqB,iBAAA,GAAiB,iBAAiB,EAAA,IAAa,EAAgB,GACtF,EAAE,SAAA,EAAA,IAAY,EAAS,GACvB,EAAE,OAAO,EAAA,IAAS,EAAmB,GACrC,EAAE,eAAA,EAAA,IAAkB,EAAiB,GACrC,EAAE,4BAA4B,GAAO,qBAAA,GAAqB,cAAA,EAAA,IAAiB,EAAa;AAE9F,EAAA,EAAmB;AAAA,IACjB,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ,CAAC,GAED,EAAM,UAAA,MAAgB;AACpB,IAAK,KACH,EAAgB,EAAE,QAAQ;AAAA,EAE9B,GAAG,CAAC,CAAC,GAEL,EAAM,UAAA,MAAgB;AACpB,IAAI,MACF,EAAa,EAAE,QAAQ,GACvB,EAAQ,EAAiB,mBAAmB,EAC1C,OAAQ,GAAU,SAAuB,YAAd,YAC7B,CAAC;AAAA,EAEL,GAAG,CAAC,CAAa,CAAC;AAElB,QAAM,IAAoB,EAAM,QAAA,MACxB,KAAuB,EAAM,WAAW,GAC9C,CAAC,GAAO,CAAmB,CAC7B,GAEM,IAAA,MAAuB;AAC3B,IAAA,EACE,IACI,EAAiB,0BACjB,EAAiB,wBACvB,GACA,EAAW;AAAA,EACb;AAEA,SAAI,CAAC,KAAiB,CAAC,IACd,gBAAA,EAAC,GAAD,CAAS,CAAA,IAIhB,gBAAA,EAAC,GAAD;AAAA,IACE,WAAU;AAAA,IACV,UAAW,IAAwC,EAAK,cAAzB,EAAK;AAAA,IACpC,YAAY;AAAA,IACZ,OAAO,EAAK;AAAA,
|
|
1
|
+
{"version":3,"file":"GoalsMicroWidget.es.js","names":[],"sources":["../../src/goals/GoalsMicroWidget.tsx"],"sourcesContent":["import React from 'react'\n\nimport { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\nimport Divider from '@mui/material/Divider'\n\nimport {\n ANALYTICS_EVENTS,\n Loader,\n MicroWidgetContainer,\n useAccountStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useGoalStore,\n useWidgetLoadTimer,\n} from '../common'\n\nimport { GoalMicroStatusCard } from './components/micro/GoalMicroStatusCard'\nimport { GoalsMicroEmptyState } from './components/micro/GoalsMicroEmptyState'\n\ninterface GoalsMicroWidgetProps {\n onCTAClick: () => void\n}\n\nexport const GoalsMicroWidget = observer(({ onCTAClick }: GoalsMicroWidgetProps) => {\n const { isAccountDataLoaded, loadAccountData, visibleAccounts: accounts } = useAccountStore()\n const { onEvent } = useEvent()\n const { goals: copy } = useGlobalCopyStore()\n const { isInitialized } = useGlobalUiStore()\n const { ongoingGoalsForMicroWidget: goals, isAllGoalDataLoaded, loadGoalData } = useGoalStore()\n\n useWidgetLoadTimer({\n widgetName: 'GoalsMicroWidget',\n isLoaded: isAllGoalDataLoaded,\n })\n\n React.useEffect(() => {\n if (!isAccountDataLoaded) {\n loadAccountData().finally()\n }\n }, [])\n\n React.useEffect(() => {\n if (isInitialized) {\n loadGoalData().finally()\n onEvent(ANALYTICS_EVENTS.GOALS_LOAD_WIDGET, {\n state: !accounts?.length ? 'zeroState' : 'default',\n })\n }\n }, [isInitialized])\n\n const isEmptyGoalsState = React.useMemo(\n () => isAllGoalDataLoaded && goals.length === 0,\n [goals, isAllGoalDataLoaded],\n )\n\n const handleCTAClick = () => {\n onEvent(\n isEmptyGoalsState\n ? ANALYTICS_EVENTS.GOALS_CLICK_GET_STARTED\n : ANALYTICS_EVENTS.GOALS_CLICK_VIEW_DETAILS,\n )\n onCTAClick()\n }\n\n if (!isInitialized || !isAllGoalDataLoaded) {\n return <Loader />\n }\n\n return (\n <MicroWidgetContainer\n className=\"mx-goals-microwidget\"\n ctaLabel={!isEmptyGoalsState ? copy.view_details : copy.get_started}\n onCTAClick={handleCTAClick}\n title={copy.title}\n >\n {!isEmptyGoalsState ? (\n <Stack sx={{ justifyContent: 'space-between' }}>\n {goals.map((goal, index) => (\n <React.Fragment key={goal.guid}>\n <GoalMicroStatusCard goal={goal} />\n {index !== goals.length - 1 && <Divider />}\n </React.Fragment>\n ))}\n </Stack>\n ) : (\n <GoalsMicroEmptyState\n header={copy.create_goals_header}\n subText={copy.micro_zero_state_description}\n />\n )}\n </MicroWidgetContainer>\n )\n})\n"],"mappings":";;;;;;;;;;;;AA0BA,IAAa,IAAmB,EAAA,CAAU,EAAE,YAAA,EAAA,MAAwC;AAClF,QAAM,EAAE,qBAAA,GAAqB,iBAAA,GAAiB,iBAAiB,EAAA,IAAa,EAAgB,GACtF,EAAE,SAAA,EAAA,IAAY,EAAS,GACvB,EAAE,OAAO,EAAA,IAAS,EAAmB,GACrC,EAAE,eAAA,EAAA,IAAkB,EAAiB,GACrC,EAAE,4BAA4B,GAAO,qBAAA,GAAqB,cAAA,EAAA,IAAiB,EAAa;AAE9F,EAAA,EAAmB;AAAA,IACjB,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ,CAAC,GAED,EAAM,UAAA,MAAgB;AACpB,IAAK,KACH,EAAgB,EAAE,QAAQ;AAAA,EAE9B,GAAG,CAAC,CAAC,GAEL,EAAM,UAAA,MAAgB;AACpB,IAAI,MACF,EAAa,EAAE,QAAQ,GACvB,EAAQ,EAAiB,mBAAmB,EAC1C,OAAQ,GAAU,SAAuB,YAAd,YAC7B,CAAC;AAAA,EAEL,GAAG,CAAC,CAAa,CAAC;AAElB,QAAM,IAAoB,EAAM,QAAA,MACxB,KAAuB,EAAM,WAAW,GAC9C,CAAC,GAAO,CAAmB,CAC7B,GAEM,IAAA,MAAuB;AAC3B,IAAA,EACE,IACI,EAAiB,0BACjB,EAAiB,wBACvB,GACA,EAAW;AAAA,EACb;AAEA,SAAI,CAAC,KAAiB,CAAC,IACd,gBAAA,EAAC,GAAD,CAAS,CAAA,IAIhB,gBAAA,EAAC,GAAD;AAAA,IACE,WAAU;AAAA,IACV,UAAW,IAAwC,EAAK,cAAzB,EAAK;AAAA,IACpC,YAAY;AAAA,IACZ,OAAO,EAAK;AAAA,IAEX,UAAC,IAUA,gBAAA,EAAC,GAAD;AAAA,MACE,QAAQ,EAAK;AAAA,MACb,SAAS,EAAK;AAAA,IACf,CAAA,IAZD,gBAAA,EAAC,GAAD;AAAA,MAAO,IAAI,EAAE,gBAAgB,gBAAgB;AAAA,MAC1C,UAAA,EAAM,IAAA,CAAK,GAAM,MAChB,gBAAA,EAAC,EAAM,UAAP,EAAA,UAAA,CACE,gBAAA,EAAC,GAAD,EAA2B,MAAA,EAAO,CAAA,GACjC,MAAU,EAAM,SAAS,KAAK,gBAAA,EAAC,GAAD,CAAU,CAAA,CAC3B,EAAA,GAHK,EAAK,IAGV,CACjB;AAAA,IACI,CAAA;AAAA,EAOW,CAAA;AAE1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GoalsWidget.es.js","names":[],"sources":["../../src/goals/GoalsWidget.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Alert from '@mui/material/Alert'\nimport Snackbar from '@mui/material/Snackbar'\nimport Stack from '@mui/material/Stack'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\n\nimport {\n ANALYTICS_EVENTS,\n Drawer,\n EmptyState,\n Loader,\n useAccountStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useGoalStore,\n useScreenSize,\n useWidgetLoadTimer,\n WidgetContainer,\n} from '../common'\nimport { TrackType, WidgetProps } from '../core'\n\nimport { TabTitle } from './components/TabTitle'\nimport { GoalList } from './components/GoalList'\n\nimport { AddGoal } from './components/AddGoal'\nimport { GoalDetailsDrawer } from './components/GoalDetailsDrawer'\nimport { formatCurrency } from '../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../core/utils/Localization'\n\nexport const GoalsWidget = observer(({ onBackClick, onMenuClick, sx }: WidgetProps) => {\n const { onEvent } = useEvent()\n const { isMobile } = useScreenSize()\n const { isAccountDataLoaded, loadAccountData } = useAccountStore()\n const { isInitialized } = useGlobalUiStore()\n const { goals: copy, common: commonCopy } = useGlobalCopyStore()\n const {\n alert,\n allGoals,\n goals,\n isAllGoalDataLoaded,\n loadGoalData,\n monthlyCashFlowProfile,\n setAlert,\n retirmentGoals,\n } = useGoalStore()\n\n const [selectedTab, setSelectedTab] = React.useState(0)\n const [isAddOpen, setIsAddOpen] = React.useState(false)\n\n const savingTotal = monthlyCashFlowProfile?.amount_allocated_for_savings_goals || 0\n const debtTotal = monthlyCashFlowProfile?.amount_allocated_for_debt_goals || 0\n const retirementTotal = monthlyCashFlowProfile?.amount_allocated_for_retirement_goals || 0\n\n useWidgetLoadTimer({\n widgetName: 'GoalsWidget',\n isLoaded: isAllGoalDataLoaded,\n })\n\n React.useEffect(() => {\n if (!isAccountDataLoaded) {\n loadAccountData().finally()\n }\n onEvent(ANALYTICS_EVENTS.GOALS_VIEW)\n }, [])\n\n React.useEffect(() => {\n if (isInitialized) {\n loadGoalData().finally()\n }\n }, [isInitialized])\n\n const handleAccountFilterClick = () => {\n onEvent(ANALYTICS_EVENTS.GOALS_CLICK_FILTER)\n }\n\n const handleAddClick = () => {\n setIsAddOpen(true)\n onEvent(ANALYTICS_EVENTS.GOALS_CLICK_ADD)\n }\n\n const handleDetailsClose = (trackType: TrackType) => {\n setIsAddOpen(false)\n if (trackType === TrackType.SAVINGS_TRACK) {\n setSelectedTab(0)\n } else if (trackType === TrackType.DEBT_TRACK) {\n setSelectedTab(1)\n } else if (trackType === TrackType.RETIREMENT_TRACK) {\n setSelectedTab(2)\n }\n }\n\n const isEmptyGoalsState = React.useMemo(\n () => isAllGoalDataLoaded && allGoals.length === 0,\n [goals, isAllGoalDataLoaded, retirmentGoals],\n )\n\n if (!isInitialized || !isAllGoalDataLoaded) {\n return <Loader />\n }\n\n const savingsTabSubtitle = buildDynamicCopy(\n isMobile ? copy.tab_subtitle_mobile : copy.tab_subtitle,\n formatCurrency(savingTotal, '0,0'),\n ) as string\n\n const debtTabSubtitle = buildDynamicCopy(\n isMobile ? copy.tab_subtitle_mobile : copy.tab_subtitle,\n formatCurrency(debtTotal, '0,0'),\n ) as string\n\n const retireTabSubtitle = buildDynamicCopy(\n isMobile ? copy.tab_subtitle_mobile : copy.tab_subtitle,\n formatCurrency(retirementTotal, '0,0'),\n ) as string\n\n return (\n <WidgetContainer\n actions={[\n {\n iconName: 'add',\n label: copy.add_title,\n onClick: handleAddClick,\n },\n ]}\n onAccountsFilterClick={handleAccountFilterClick}\n onBackClick={onBackClick}\n onMenuClick={onMenuClick}\n sx={sx}\n title={copy.title}\n >\n <Stack mx={isMobile ? 0 : 48} my={24}>\n <Tabs\n onChange={(_, newValue) => setSelectedTab(newValue)}\n sx={{ bgcolor: 'background.paper' }}\n textColor=\"primary\"\n value={!isEmptyGoalsState ? selectedTab : false}\n variant=\"fullWidth\"\n >\n <Tab\n disabled={isEmptyGoalsState}\n label={<TabTitle subtitle={savingsTabSubtitle} title={copy.tab_saving_title} />}\n />\n <Tab\n disabled={isEmptyGoalsState}\n label={<TabTitle subtitle={debtTabSubtitle} title={copy.tab_debt_title} />}\n />\n <Tab\n disabled={isEmptyGoalsState}\n label={<TabTitle subtitle={retireTabSubtitle} title={copy.tab_retirement_title} />}\n />\n </Tabs>\n {isEmptyGoalsState ? (\n <EmptyState\n header={copy.create_goals_header}\n icon=\"trophy\"\n onClick={handleAddClick}\n primaryButton={copy.add_goals_button}\n subText={copy.empty_state_subheader}\n sx={{\n width: { sm: 432 },\n '.buttons-footer': {\n width: 139,\n },\n }}\n />\n ) : (\n <>\n {selectedTab === 0 && (\n <GoalList onAddGoals={handleAddClick} trackType={TrackType.SAVINGS_TRACK} />\n )}\n {selectedTab === 1 && (\n <GoalList onAddGoals={handleAddClick} trackType={TrackType.DEBT_TRACK} />\n )}\n {selectedTab === 2 && (\n <GoalList onAddGoals={handleAddClick} trackType={TrackType.RETIREMENT_TRACK} />\n )}\n </>\n )}\n </Stack>\n\n <GoalDetailsDrawer onClose={handleDetailsClose} />\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={isAddOpen}\n onClose={() => setIsAddOpen(false)}\n title={copy.add_goal_title}\n >\n <AddGoal onClose={handleDetailsClose} />\n </Drawer>\n\n <Snackbar onClose={() => setAlert('')} open={Boolean(alert)}>\n <Alert onClose={() => setAlert('')} severity=\"success\" variant=\"filled\">\n {alert}\n </Alert>\n </Snackbar>\n </WidgetContainer>\n )\n})\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAiCA,IAAa,KAAc,GAAA,CAAU,EAAE,aAAA,GAAa,aAAA,GAAa,IAAA,EAAA,MAAsB;AACrF,QAAM,EAAE,SAAA,EAAA,IAAY,EAAS,GACvB,EAAE,UAAA,EAAA,IAAa,EAAc,GAC7B,EAAE,qBAAA,GAAqB,iBAAA,EAAA,IAAoB,EAAgB,GAC3D,EAAE,eAAA,EAAA,IAAkB,EAAiB,GACrC,EAAE,OAAO,GAAM,QAAQ,EAAA,IAAe,EAAmB,GACzD,EACJ,OAAA,GACA,UAAA,GACA,OAAA,GACA,qBAAA,GACA,cAAA,GACA,wBAAA,GACA,UAAA,GACA,gBAAA,EAAA,IACE,EAAa,GAEX,CAAC,GAAa,CAAA,IAAkB,EAAM,SAAS,CAAC,GAChD,CAAC,GAAW,CAAA,IAAgB,EAAM,SAAS,EAAK,GAEhD,IAAc,GAAwB,sCAAsC,GAC5E,IAAY,GAAwB,mCAAmC,GACvE,IAAkB,GAAwB,yCAAyC;AAEzF,EAAA,EAAmB;AAAA,IACjB,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ,CAAC,GAED,EAAM,UAAA,MAAgB;AACpB,IAAK,KACH,EAAgB,EAAE,QAAQ,GAE5B,EAAQ,EAAiB,UAAU;AAAA,EACrC,GAAG,CAAC,CAAC,GAEL,EAAM,UAAA,MAAgB;AACpB,IAAI,KACF,EAAa,EAAE,QAAQ;AAAA,EAE3B,GAAG,CAAC,CAAa,CAAC;AAElB,QAAM,IAAA,MAAiC;AACrC,IAAA,EAAQ,EAAiB,kBAAkB;AAAA,EAC7C,GAEM,IAAA,MAAuB;AAC3B,IAAA,EAAa,EAAI,GACjB,EAAQ,EAAiB,eAAe;AAAA,EAC1C,GAEM,IAAA,CAAsB,MAAyB;AACnD,IAAA,EAAa,EAAK,GACd,MAAc,EAAU,gBAC1B,EAAe,CAAC,IACP,MAAc,EAAU,aACjC,EAAe,CAAC,IACP,MAAc,EAAU,oBACjC,EAAe,CAAC;AAAA,EAEpB,GAEM,IAAoB,EAAM,QAAA,MACxB,KAAuB,EAAS,WAAW,GACjD;AAAA,IAAC;AAAA,IAAO;AAAA,IAAqB;AAAA,EAAc,CAC7C;AAEA,MAAI,CAAC,KAAiB,CAAC,EACrB,QAAO,gBAAA,EAAC,GAAD,CAAS,CAAA;AAGlB,QAAM,IAAqB,EACzB,IAAW,EAAK,sBAAsB,EAAK,cAC3C,EAAe,GAAa,KAAK,CACnC,GAEM,IAAkB,EACtB,IAAW,EAAK,sBAAsB,EAAK,cAC3C,EAAe,GAAW,KAAK,CACjC,GAEM,IAAoB,EACxB,IAAW,EAAK,sBAAsB,EAAK,cAC3C,EAAe,GAAiB,KAAK,CACvC;AAEA,SACE,gBAAA,EAAC,GAAD;AAAA,IACE,SAAS,CACP;AAAA,MACE,UAAU;AAAA,MACV,OAAO,EAAK;AAAA,MACZ,SAAS;AAAA,IACX,CACF;AAAA,IACA,uBAAuB;AAAA,IACV,aAAA;AAAA,IACA,aAAA;AAAA,IACT,IAAA;AAAA,IACJ,OAAO,EAAK;AAAA,
|
|
1
|
+
{"version":3,"file":"GoalsWidget.es.js","names":[],"sources":["../../src/goals/GoalsWidget.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Alert from '@mui/material/Alert'\nimport Snackbar from '@mui/material/Snackbar'\nimport Stack from '@mui/material/Stack'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\n\nimport {\n ANALYTICS_EVENTS,\n Drawer,\n EmptyState,\n Loader,\n useAccountStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useGoalStore,\n useScreenSize,\n useWidgetLoadTimer,\n WidgetContainer,\n} from '../common'\nimport { TrackType, WidgetProps } from '../core'\n\nimport { TabTitle } from './components/TabTitle'\nimport { GoalList } from './components/GoalList'\n\nimport { AddGoal } from './components/AddGoal'\nimport { GoalDetailsDrawer } from './components/GoalDetailsDrawer'\nimport { formatCurrency } from '../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../core/utils/Localization'\n\nexport const GoalsWidget = observer(({ onBackClick, onMenuClick, sx }: WidgetProps) => {\n const { onEvent } = useEvent()\n const { isMobile } = useScreenSize()\n const { isAccountDataLoaded, loadAccountData } = useAccountStore()\n const { isInitialized } = useGlobalUiStore()\n const { goals: copy, common: commonCopy } = useGlobalCopyStore()\n const {\n alert,\n allGoals,\n goals,\n isAllGoalDataLoaded,\n loadGoalData,\n monthlyCashFlowProfile,\n setAlert,\n retirmentGoals,\n } = useGoalStore()\n\n const [selectedTab, setSelectedTab] = React.useState(0)\n const [isAddOpen, setIsAddOpen] = React.useState(false)\n\n const savingTotal = monthlyCashFlowProfile?.amount_allocated_for_savings_goals || 0\n const debtTotal = monthlyCashFlowProfile?.amount_allocated_for_debt_goals || 0\n const retirementTotal = monthlyCashFlowProfile?.amount_allocated_for_retirement_goals || 0\n\n useWidgetLoadTimer({\n widgetName: 'GoalsWidget',\n isLoaded: isAllGoalDataLoaded,\n })\n\n React.useEffect(() => {\n if (!isAccountDataLoaded) {\n loadAccountData().finally()\n }\n onEvent(ANALYTICS_EVENTS.GOALS_VIEW)\n }, [])\n\n React.useEffect(() => {\n if (isInitialized) {\n loadGoalData().finally()\n }\n }, [isInitialized])\n\n const handleAccountFilterClick = () => {\n onEvent(ANALYTICS_EVENTS.GOALS_CLICK_FILTER)\n }\n\n const handleAddClick = () => {\n setIsAddOpen(true)\n onEvent(ANALYTICS_EVENTS.GOALS_CLICK_ADD)\n }\n\n const handleDetailsClose = (trackType: TrackType) => {\n setIsAddOpen(false)\n if (trackType === TrackType.SAVINGS_TRACK) {\n setSelectedTab(0)\n } else if (trackType === TrackType.DEBT_TRACK) {\n setSelectedTab(1)\n } else if (trackType === TrackType.RETIREMENT_TRACK) {\n setSelectedTab(2)\n }\n }\n\n const isEmptyGoalsState = React.useMemo(\n () => isAllGoalDataLoaded && allGoals.length === 0,\n [goals, isAllGoalDataLoaded, retirmentGoals],\n )\n\n if (!isInitialized || !isAllGoalDataLoaded) {\n return <Loader />\n }\n\n const savingsTabSubtitle = buildDynamicCopy(\n isMobile ? copy.tab_subtitle_mobile : copy.tab_subtitle,\n formatCurrency(savingTotal, '0,0'),\n ) as string\n\n const debtTabSubtitle = buildDynamicCopy(\n isMobile ? copy.tab_subtitle_mobile : copy.tab_subtitle,\n formatCurrency(debtTotal, '0,0'),\n ) as string\n\n const retireTabSubtitle = buildDynamicCopy(\n isMobile ? copy.tab_subtitle_mobile : copy.tab_subtitle,\n formatCurrency(retirementTotal, '0,0'),\n ) as string\n\n return (\n <WidgetContainer\n actions={[\n {\n iconName: 'add',\n label: copy.add_title,\n onClick: handleAddClick,\n },\n ]}\n onAccountsFilterClick={handleAccountFilterClick}\n onBackClick={onBackClick}\n onMenuClick={onMenuClick}\n sx={sx}\n title={copy.title}\n >\n <Stack mx={isMobile ? 0 : 48} my={24}>\n <Tabs\n onChange={(_, newValue) => setSelectedTab(newValue)}\n sx={{ bgcolor: 'background.paper' }}\n textColor=\"primary\"\n value={!isEmptyGoalsState ? selectedTab : false}\n variant=\"fullWidth\"\n >\n <Tab\n disabled={isEmptyGoalsState}\n label={<TabTitle subtitle={savingsTabSubtitle} title={copy.tab_saving_title} />}\n />\n <Tab\n disabled={isEmptyGoalsState}\n label={<TabTitle subtitle={debtTabSubtitle} title={copy.tab_debt_title} />}\n />\n <Tab\n disabled={isEmptyGoalsState}\n label={<TabTitle subtitle={retireTabSubtitle} title={copy.tab_retirement_title} />}\n />\n </Tabs>\n {isEmptyGoalsState ? (\n <EmptyState\n header={copy.create_goals_header}\n icon=\"trophy\"\n onClick={handleAddClick}\n primaryButton={copy.add_goals_button}\n subText={copy.empty_state_subheader}\n sx={{\n width: { sm: 432 },\n '.buttons-footer': {\n width: 139,\n },\n }}\n />\n ) : (\n <>\n {selectedTab === 0 && (\n <GoalList onAddGoals={handleAddClick} trackType={TrackType.SAVINGS_TRACK} />\n )}\n {selectedTab === 1 && (\n <GoalList onAddGoals={handleAddClick} trackType={TrackType.DEBT_TRACK} />\n )}\n {selectedTab === 2 && (\n <GoalList onAddGoals={handleAddClick} trackType={TrackType.RETIREMENT_TRACK} />\n )}\n </>\n )}\n </Stack>\n\n <GoalDetailsDrawer onClose={handleDetailsClose} />\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={isAddOpen}\n onClose={() => setIsAddOpen(false)}\n title={copy.add_goal_title}\n >\n <AddGoal onClose={handleDetailsClose} />\n </Drawer>\n\n <Snackbar onClose={() => setAlert('')} open={Boolean(alert)}>\n <Alert onClose={() => setAlert('')} severity=\"success\" variant=\"filled\">\n {alert}\n </Alert>\n </Snackbar>\n </WidgetContainer>\n )\n})\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountSelectionDrawer.es.js","names":[],"sources":["../../../src/goals/components/AccountSelectionDrawer.tsx"],"sourcesContent":["import React from 'react'\n\nimport Checkbox from '@mui/material/Checkbox'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { InstitutionLogo } from '@mxenabled/mxui'\n\nimport { ConnectCard, Drawer, useGlobalCopyStore, useAppConfig } from '../../common'\nimport { Account } from '../../core'\nimport getAccountDisplayName from '../../common/utils/AccountDisplayName'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface AccountSelectionDrawerProps {\n accounts: Account[]\n isOpen: boolean\n onClose: () => void\n onSave: (accounts: Account[]) => void\n title: string\n}\n\nexport const AccountSelectionDrawer = ({\n accounts,\n isOpen,\n onClose,\n onSave,\n title,\n}: AccountSelectionDrawerProps) => {\n const { goals: copy, common: commonCopy } = useGlobalCopyStore()\n const { config } = useAppConfig()\n\n const [selectedAccounts, setSelectedAccounts] = React.useState<Account[]>([])\n\n const handleClick = (account: Account) => {\n const index = selectedAccounts.findIndex((a) => a.guid === account.guid)\n const updatedSelected = [...selectedAccounts]\n if (index >= 0) {\n updatedSelected.splice(index, 1)\n } else {\n updatedSelected.push(account)\n }\n setSelectedAccounts(updatedSelected)\n }\n\n return (\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={isOpen}\n onClose={onClose}\n onPrimaryAction={() => onSave(selectedAccounts)}\n title={title}\n >\n <List sx={{ bgcolor: 'background.white' }}>\n <Divider variant=\"fullWidth\" />\n {accounts.map((account, index) => (\n <React.Fragment key={account.guid}>\n <ListItem>\n <ListItemButton onClick={() => handleClick(account)}>\n <ListItemAvatar>\n <InstitutionLogo\n alt={account?.name || ''}\n institutionGuid={account?.institution_guid || ''}\n />\n </ListItemAvatar>\n <ListItemText\n primary={getAccountDisplayName(account, {\n allowNickname: config?.show_account_nicknames_in_master,\n })}\n secondary={formatCurrency(account.balance || 0, '0,0.00')}\n />\n <Checkbox checked={selectedAccounts.some((a) => a.guid === account.guid)} />\n </ListItemButton>\n </ListItem>\n <Divider variant={index < accounts.length - 1 ? 'inset' : 'fullWidth'} />\n </React.Fragment>\n ))}\n </List>\n\n {config.show_connections_widget_in_master && (\n <ConnectCard\n description={copy.connect_description}\n label={copy.connect_button}\n title={copy.connect_title}\n />\n )}\n </Drawer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;AAyBA,IAAa,IAAA,CAA0B,EACrC,UAAA,GACA,QAAA,GACA,SAAA,GACA,QAAA,GACA,OAAA,EAAA,MACiC;AACjC,QAAM,EAAE,OAAO,GAAM,QAAQ,EAAA,IAAe,EAAmB,GACzD,EAAE,QAAA,EAAA,IAAW,EAAa,GAE1B,CAAC,GAAkB,CAAA,IAAuB,EAAM,SAAoB,CAAC,CAAC,GAEtE,IAAA,CAAe,MAAqB;AACxC,UAAM,IAAQ,EAAiB,UAAA,CAAW,MAAM,EAAE,SAAS,EAAQ,IAAI,GACjE,IAAkB,CAAC,GAAG,CAAgB;AAC5C,IAAI,KAAS,IACX,EAAgB,OAAO,GAAO,CAAC,IAE/B,EAAgB,KAAK,CAAO,GAE9B,EAAoB,CAAe;AAAA,EACrC;AAEA,SACE,gBAAA,EAAC,GAAD;AAAA,IACE,gBAAgB,EAAW;AAAA,IACnB,QAAA;AAAA,IACC,SAAA;AAAA,IACT,iBAAA,MAAuB,EAAO,CAAgB;AAAA,IACvC,OAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"AccountSelectionDrawer.es.js","names":[],"sources":["../../../src/goals/components/AccountSelectionDrawer.tsx"],"sourcesContent":["import React from 'react'\n\nimport Checkbox from '@mui/material/Checkbox'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { InstitutionLogo } from '@mxenabled/mxui'\n\nimport { ConnectCard, Drawer, useGlobalCopyStore, useAppConfig } from '../../common'\nimport { Account } from '../../core'\nimport getAccountDisplayName from '../../common/utils/AccountDisplayName'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface AccountSelectionDrawerProps {\n accounts: Account[]\n isOpen: boolean\n onClose: () => void\n onSave: (accounts: Account[]) => void\n title: string\n}\n\nexport const AccountSelectionDrawer = ({\n accounts,\n isOpen,\n onClose,\n onSave,\n title,\n}: AccountSelectionDrawerProps) => {\n const { goals: copy, common: commonCopy } = useGlobalCopyStore()\n const { config } = useAppConfig()\n\n const [selectedAccounts, setSelectedAccounts] = React.useState<Account[]>([])\n\n const handleClick = (account: Account) => {\n const index = selectedAccounts.findIndex((a) => a.guid === account.guid)\n const updatedSelected = [...selectedAccounts]\n if (index >= 0) {\n updatedSelected.splice(index, 1)\n } else {\n updatedSelected.push(account)\n }\n setSelectedAccounts(updatedSelected)\n }\n\n return (\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={isOpen}\n onClose={onClose}\n onPrimaryAction={() => onSave(selectedAccounts)}\n title={title}\n >\n <List sx={{ bgcolor: 'background.white' }}>\n <Divider variant=\"fullWidth\" />\n {accounts.map((account, index) => (\n <React.Fragment key={account.guid}>\n <ListItem>\n <ListItemButton onClick={() => handleClick(account)}>\n <ListItemAvatar>\n <InstitutionLogo\n alt={account?.name || ''}\n institutionGuid={account?.institution_guid || ''}\n />\n </ListItemAvatar>\n <ListItemText\n primary={getAccountDisplayName(account, {\n allowNickname: config?.show_account_nicknames_in_master,\n })}\n secondary={formatCurrency(account.balance || 0, '0,0.00')}\n />\n <Checkbox checked={selectedAccounts.some((a) => a.guid === account.guid)} />\n </ListItemButton>\n </ListItem>\n <Divider variant={index < accounts.length - 1 ? 'inset' : 'fullWidth'} />\n </React.Fragment>\n ))}\n </List>\n\n {config.show_connections_widget_in_master && (\n <ConnectCard\n description={copy.connect_description}\n label={copy.connect_button}\n title={copy.connect_title}\n />\n )}\n </Drawer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;AAyBA,IAAa,IAAA,CAA0B,EACrC,UAAA,GACA,QAAA,GACA,SAAA,GACA,QAAA,GACA,OAAA,EAAA,MACiC;AACjC,QAAM,EAAE,OAAO,GAAM,QAAQ,EAAA,IAAe,EAAmB,GACzD,EAAE,QAAA,EAAA,IAAW,EAAa,GAE1B,CAAC,GAAkB,CAAA,IAAuB,EAAM,SAAoB,CAAC,CAAC,GAEtE,IAAA,CAAe,MAAqB;AACxC,UAAM,IAAQ,EAAiB,UAAA,CAAW,MAAM,EAAE,SAAS,EAAQ,IAAI,GACjE,IAAkB,CAAC,GAAG,CAAgB;AAC5C,IAAI,KAAS,IACX,EAAgB,OAAO,GAAO,CAAC,IAE/B,EAAgB,KAAK,CAAO,GAE9B,EAAoB,CAAe;AAAA,EACrC;AAEA,SACE,gBAAA,EAAC,GAAD;AAAA,IACE,gBAAgB,EAAW;AAAA,IACnB,QAAA;AAAA,IACC,SAAA;AAAA,IACT,iBAAA,MAAuB,EAAO,CAAgB;AAAA,IACvC,OAAA;AAAA,IALT,UAAA,CAOE,gBAAA,EAAC,GAAD;AAAA,MAAM,IAAI,EAAE,SAAS,mBAAmB;AAAA,MAAxC,UAAA,CACE,gBAAA,EAAC,GAAD,EAAS,SAAQ,YAAa,CAAA,GAC7B,EAAS,IAAA,CAAK,GAAS,MACtB,gBAAA,EAAC,EAAM,UAAP,EAAA,UAAA,CACE,gBAAA,EAAC,GAAD,EAAA,UACE,gBAAA,EAAC,GAAD;AAAA,QAAgB,SAAA,MAAe,EAAY,CAAO;AAAA,QAAlD,UAAA;AAAA,UACE,gBAAA,EAAC,GAAD,EAAA,UACE,gBAAA,EAAC,GAAD;AAAA,YACE,KAAK,GAAS,QAAQ;AAAA,YACtB,iBAAiB,GAAS,oBAAoB;AAAA,UAC/C,CAAA,EACa,CAAA;AAAA,UAChB,gBAAA,EAAC,GAAD;AAAA,YACE,SAAS,EAAsB,GAAS,EACtC,eAAe,GAAQ,iCACzB,CAAC;AAAA,YACD,WAAW,EAAe,EAAQ,WAAW,GAAG,QAAQ;AAAA,UACzD,CAAA;AAAA,UACD,gBAAA,EAAC,GAAD,EAAU,SAAS,EAAiB,KAAA,CAAM,MAAM,EAAE,SAAS,EAAQ,IAAI,EAAI,CAAA;AAAA,QAC7D;AAAA,MACR,CAAA,EAAA,CAAA,GACV,gBAAA,EAAC,GAAD,EAAS,SAAS,IAAQ,EAAS,SAAS,IAAI,UAAU,YAAc,CAAA,CAC1D,EAAA,GAnBK,EAAQ,IAmBb,CACjB,CACG;AAAA,IAEL,CAAA,GAAA,EAAO,qCACN,gBAAA,EAAC,GAAD;AAAA,MACE,aAAa,EAAK;AAAA,MAClB,OAAO,EAAK;AAAA,MACZ,OAAO,EAAK;AAAA,IACb,CAAA,CAEG;AAAA;AAEZ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddGoal.es.js","names":[],"sources":["../../../src/goals/components/AddGoal.tsx"],"sourcesContent":["import React from 'react'\n\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\n\nimport { useAccountStore, useGlobalCopyStore, useGoalStore, useAppConfig } from '../../common'\nimport { type Account, type Goal, AccountType, GoalType, MetaType, TrackType } from '../../core'\nimport getAccountDisplayName from '../../common/utils/AccountDisplayName'\n\nimport { getGoalTypes } from '../../core/utils/GoalsUtil'\nimport { AddGoalListItem } from './addgoal/AddGoalListItem'\nimport { AccountSelectionDrawer } from './AccountSelectionDrawer'\n\ninterface AddGoalProps {\n onClose?: (trackType: TrackType) => void\n}\n\nexport const AddGoal = ({ onClose }: AddGoalProps) => {\n const { goals: copy } = useGlobalCopyStore()\n const { addGoal, debtGoals, setAlert, setSelectedGoal } = useGoalStore()\n const { config } = useAppConfig()\n const { visibleDebtAccounts: debtAccounts } = useAccountStore()\n\n const [isAccountsOpen, setIsAccountsOpen] = React.useState(false)\n\n const goalTypes = getGoalTypes(copy)\n\n const handleClick = (name: string, metaType: MetaType, type: TrackType) => {\n if (type === TrackType.DEBT_TRACK) {\n setIsAccountsOpen(true)\n } else {\n setSelectedGoal({\n amount: 0,\n current_amount: 0,\n goal_type: GoalType.SAVE_AMOUNT,\n initial_amount: 0,\n meta_type: metaType,\n name: name,\n track_type: type,\n } as Goal)\n }\n }\n\n const handleSaveDebtAccounts = async (accounts: Account[]) => {\n for (const account of accounts) {\n let metaType = MetaType.CREDIT_CARD\n if (account.account_type === AccountType.LOAN) {\n metaType = MetaType.LOANS\n } else if (account.account_type === AccountType.LINE_OF_CREDIT) {\n metaType = MetaType.LINE_OF_CREDIT\n }\n\n await addGoal({\n account_guid: account.guid,\n amount: 0,\n current_amount: 0,\n goal_type: GoalType.KEEP_BALANCE_BELOW,\n initial_amount: account.balance || 0,\n interest_rate: account.interest_rate || 0,\n meta_type: metaType,\n monthly_payment: account.minimum_payment || 0,\n name: getAccountDisplayName(account, {\n allowNickname: config?.show_account_nicknames_in_master,\n }),\n track_type: TrackType.DEBT_TRACK,\n } as Goal)\n setAlert(copy.alert_goal_added)\n }\n setIsAccountsOpen(false)\n onClose?.(TrackType.DEBT_TRACK)\n }\n\n return (\n <Stack>\n <List sx={{ bgcolor: 'background.paper' }}>\n {goalTypes.map((goalType, index) => (\n <AddGoalListItem goalType={goalType} key={index} onClick={handleClick} />\n ))}\n </List>\n\n <AccountSelectionDrawer\n accounts={debtAccounts.filter((a) => !debtGoals.find((g) => g.account_guid === a.guid))}\n isOpen={isAccountsOpen}\n onClose={() => setIsAccountsOpen(false)}\n onSave={handleSaveDebtAccounts}\n title={copy.select_debt_accounts_title}\n />\n </Stack>\n )\n}\n"],"mappings":";;;;;;;;;;;AAiBA,IAAa,IAAA,CAAW,EAAE,SAAA,EAAA,MAA4B;AACpD,QAAM,EAAE,OAAO,EAAA,IAAS,EAAmB,GACrC,EAAE,SAAA,GAAS,WAAA,GAAW,UAAA,GAAU,iBAAA,EAAA,IAAoB,EAAa,GACjE,EAAE,QAAA,EAAA,IAAW,EAAa,GAC1B,EAAE,qBAAqB,EAAA,IAAiB,EAAgB,GAExD,CAAC,GAAgB,CAAA,IAAqB,EAAM,SAAS,EAAK,GAE1D,IAAY,EAAa,CAAI,GAE7B,IAAA,CAAe,GAAc,GAAoB,MAAoB;AACzE,IAAI,MAAS,EAAU,aACrB,EAAkB,EAAI,IAEtB,EAAgB;AAAA,MACd,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,WAAW,EAAS;AAAA,MACpB,gBAAgB;AAAA,MAChB,WAAW;AAAA,MACL,MAAA;AAAA,MACN,YAAY;AAAA,IACd,CAAS;AAAA,EAEb,GAEM,IAAyB,OAAO,MAAwB;AAC5D,eAAW,KAAW,GAAU;AAC9B,UAAI,IAAW,EAAS;AACxB,MAAI,EAAQ,iBAAiB,EAAY,OACvC,IAAW,EAAS,QACX,EAAQ,iBAAiB,EAAY,mBAC9C,IAAW,EAAS,iBAGtB,MAAM,EAAQ;AAAA,QACZ,cAAc,EAAQ;AAAA,QACtB,QAAQ;AAAA,QACR,gBAAgB;AAAA,QAChB,WAAW,EAAS;AAAA,QACpB,gBAAgB,EAAQ,WAAW;AAAA,QACnC,eAAe,EAAQ,iBAAiB;AAAA,QACxC,WAAW;AAAA,QACX,iBAAiB,EAAQ,mBAAmB;AAAA,QAC5C,MAAM,EAAsB,GAAS,EACnC,eAAe,GAAQ,iCACzB,CAAC;AAAA,QACD,YAAY,EAAU;AAAA,MACxB,CAAS,GACT,EAAS,EAAK,gBAAgB;AAAA,IAChC;AACA,IAAA,EAAkB,EAAK,GACvB,IAAU,EAAU,UAAU;AAAA,EAChC;AAEA,SACE,gBAAA,EAAC,GAAD,EAAA,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,IAAM,IAAI,EAAE,SAAS,mBAAmB;AAAA,
|
|
1
|
+
{"version":3,"file":"AddGoal.es.js","names":[],"sources":["../../../src/goals/components/AddGoal.tsx"],"sourcesContent":["import React from 'react'\n\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\n\nimport { useAccountStore, useGlobalCopyStore, useGoalStore, useAppConfig } from '../../common'\nimport { type Account, type Goal, AccountType, GoalType, MetaType, TrackType } from '../../core'\nimport getAccountDisplayName from '../../common/utils/AccountDisplayName'\n\nimport { getGoalTypes } from '../../core/utils/GoalsUtil'\nimport { AddGoalListItem } from './addgoal/AddGoalListItem'\nimport { AccountSelectionDrawer } from './AccountSelectionDrawer'\n\ninterface AddGoalProps {\n onClose?: (trackType: TrackType) => void\n}\n\nexport const AddGoal = ({ onClose }: AddGoalProps) => {\n const { goals: copy } = useGlobalCopyStore()\n const { addGoal, debtGoals, setAlert, setSelectedGoal } = useGoalStore()\n const { config } = useAppConfig()\n const { visibleDebtAccounts: debtAccounts } = useAccountStore()\n\n const [isAccountsOpen, setIsAccountsOpen] = React.useState(false)\n\n const goalTypes = getGoalTypes(copy)\n\n const handleClick = (name: string, metaType: MetaType, type: TrackType) => {\n if (type === TrackType.DEBT_TRACK) {\n setIsAccountsOpen(true)\n } else {\n setSelectedGoal({\n amount: 0,\n current_amount: 0,\n goal_type: GoalType.SAVE_AMOUNT,\n initial_amount: 0,\n meta_type: metaType,\n name: name,\n track_type: type,\n } as Goal)\n }\n }\n\n const handleSaveDebtAccounts = async (accounts: Account[]) => {\n for (const account of accounts) {\n let metaType = MetaType.CREDIT_CARD\n if (account.account_type === AccountType.LOAN) {\n metaType = MetaType.LOANS\n } else if (account.account_type === AccountType.LINE_OF_CREDIT) {\n metaType = MetaType.LINE_OF_CREDIT\n }\n\n await addGoal({\n account_guid: account.guid,\n amount: 0,\n current_amount: 0,\n goal_type: GoalType.KEEP_BALANCE_BELOW,\n initial_amount: account.balance || 0,\n interest_rate: account.interest_rate || 0,\n meta_type: metaType,\n monthly_payment: account.minimum_payment || 0,\n name: getAccountDisplayName(account, {\n allowNickname: config?.show_account_nicknames_in_master,\n }),\n track_type: TrackType.DEBT_TRACK,\n } as Goal)\n setAlert(copy.alert_goal_added)\n }\n setIsAccountsOpen(false)\n onClose?.(TrackType.DEBT_TRACK)\n }\n\n return (\n <Stack>\n <List sx={{ bgcolor: 'background.paper' }}>\n {goalTypes.map((goalType, index) => (\n <AddGoalListItem goalType={goalType} key={index} onClick={handleClick} />\n ))}\n </List>\n\n <AccountSelectionDrawer\n accounts={debtAccounts.filter((a) => !debtGoals.find((g) => g.account_guid === a.guid))}\n isOpen={isAccountsOpen}\n onClose={() => setIsAccountsOpen(false)}\n onSave={handleSaveDebtAccounts}\n title={copy.select_debt_accounts_title}\n />\n </Stack>\n )\n}\n"],"mappings":";;;;;;;;;;;AAiBA,IAAa,IAAA,CAAW,EAAE,SAAA,EAAA,MAA4B;AACpD,QAAM,EAAE,OAAO,EAAA,IAAS,EAAmB,GACrC,EAAE,SAAA,GAAS,WAAA,GAAW,UAAA,GAAU,iBAAA,EAAA,IAAoB,EAAa,GACjE,EAAE,QAAA,EAAA,IAAW,EAAa,GAC1B,EAAE,qBAAqB,EAAA,IAAiB,EAAgB,GAExD,CAAC,GAAgB,CAAA,IAAqB,EAAM,SAAS,EAAK,GAE1D,IAAY,EAAa,CAAI,GAE7B,IAAA,CAAe,GAAc,GAAoB,MAAoB;AACzE,IAAI,MAAS,EAAU,aACrB,EAAkB,EAAI,IAEtB,EAAgB;AAAA,MACd,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,WAAW,EAAS;AAAA,MACpB,gBAAgB;AAAA,MAChB,WAAW;AAAA,MACL,MAAA;AAAA,MACN,YAAY;AAAA,IACd,CAAS;AAAA,EAEb,GAEM,IAAyB,OAAO,MAAwB;AAC5D,eAAW,KAAW,GAAU;AAC9B,UAAI,IAAW,EAAS;AACxB,MAAI,EAAQ,iBAAiB,EAAY,OACvC,IAAW,EAAS,QACX,EAAQ,iBAAiB,EAAY,mBAC9C,IAAW,EAAS,iBAGtB,MAAM,EAAQ;AAAA,QACZ,cAAc,EAAQ;AAAA,QACtB,QAAQ;AAAA,QACR,gBAAgB;AAAA,QAChB,WAAW,EAAS;AAAA,QACpB,gBAAgB,EAAQ,WAAW;AAAA,QACnC,eAAe,EAAQ,iBAAiB;AAAA,QACxC,WAAW;AAAA,QACX,iBAAiB,EAAQ,mBAAmB;AAAA,QAC5C,MAAM,EAAsB,GAAS,EACnC,eAAe,GAAQ,iCACzB,CAAC;AAAA,QACD,YAAY,EAAU;AAAA,MACxB,CAAS,GACT,EAAS,EAAK,gBAAgB;AAAA,IAChC;AACA,IAAA,EAAkB,EAAK,GACvB,IAAU,EAAU,UAAU;AAAA,EAChC;AAEA,SACE,gBAAA,EAAC,GAAD,EAAA,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,IAAM,IAAI,EAAE,SAAS,mBAAmB;AAAA,IACrC,UAAA,EAAU,IAAA,CAAK,GAAU,MACxB,gBAAA,EAAC,GAAD;AAAA,MAA2B,UAAA;AAAA,MAAsB,SAAS;AAAA,IAAc,GAA9B,CAA8B,CACzE;AAAA,EACG,CAAA,GAEN,gBAAA,EAAC,GAAD;AAAA,IACE,UAAU,EAAa,OAAA,CAAQ,MAAM,CAAC,EAAU,KAAA,CAAM,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC;AAAA,IACtF,QAAQ;AAAA,IACR,SAAA,MAAe,EAAkB,EAAK;AAAA,IACtC,QAAQ;AAAA,IACR,OAAO,EAAK;AAAA,EACb,CAAA,CACI,EAAA,CAAA;AAEX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GoalDetails.es.js","names":[],"sources":["../../../src/goals/components/GoalDetails.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { useAccountStore, useGlobalCopyStore } from '../../common'\nimport { Goal, TrackType } from '../../core'\n\nimport { AccountAction } from './actions/AccountAction'\nimport { AmountToSaveAction } from './actions/AmountToSaveAction'\nimport { ChangeAccountAction } from './actions/ChangeAccountAction'\nimport { GoalNameAction } from './actions/GoalNameAction'\nimport { GoalStatusCard } from './GoalStatusCard'\nimport { MonthlyPaymentAction } from './actions/MonthlyPaymentAction'\nimport { OriginalBalanceAction } from './actions/OriginalBalanceAction'\nimport { InterestRateAction } from './actions/InterestRateAction'\nimport { RetirementAgeAction } from './actions/RetirementAgeAction'\nimport { BirthdayAction } from './actions/BirthdayAction'\nimport { AddRetirementAccountAction } from './actions/AddRetirementAccountAction'\n\ninterface GoalDetailsProps {\n goal: Goal\n}\n\nexport const GoalDetails = observer(({ goal }: GoalDetailsProps) => {\n const { goals: copy } = useGlobalCopyStore()\n const { visibleAccounts: accounts } = useAccountStore()\n\n const account = React.useMemo(\n () => accounts.find((a) => a.guid === goal.account_guid),\n [accounts, goal],\n )\n\n const goalType = goal.track_type\n\n let goalTitle = copy.details_save_title\n if (goal.track_type === TrackType.DEBT_TRACK) {\n goalTitle = copy.details_debt_title\n } else if (goal.track_type === TrackType.RETIREMENT_TRACK) {\n goalTitle = copy.details_retirement_title\n }\n\n return (\n <Stack>\n <Stack mx={24}>\n <Text color=\"text.secondary\" sx={{ mb: 4, mt: 24 }} variant=\"caption\">\n {goalTitle}\n </Text>\n <GoalStatusCard goal={goal} isInDrawer={true} />\n\n <Text color=\"text.secondary\" sx={{ mb: 4, mt: 24 }} variant=\"caption\">\n {copy.details_title}\n </Text>\n </Stack>\n\n <List sx={{ bgcolor: 'background.paper' }}>\n {goalType !== TrackType.RETIREMENT_TRACK ? (\n <GoalNameAction goal={goal} />\n ) : (\n <ListItem sx={{ px: 24 }}>\n <ListItemText\n primary={\n <Stack alignItems=\"center\" direction=\"row\" justifyContent=\"space-between\">\n <Text variant=\"body1\">{copy.details_goal_name}</Text>\n <Text bold={true} color={'text.primary'} sx={{ mr: 4 }} variant=\"body1\">\n {copy.retirement}\n </Text>\n </Stack>\n }\n slotProps={{ primary: { variant: 'body1' } }}\n />\n </ListItem>\n )}\n\n <Divider sx={{ ml: 24 }} />\n\n {(goalType === TrackType.SAVINGS_TRACK || goalType === TrackType.RETIREMENT_TRACK) && (\n <>\n <AmountToSaveAction goal={goal} />\n <Divider sx={{ ml: goalType === TrackType.RETIREMENT_TRACK ? 24 : 0 }} />\n </>\n )}\n\n {goal.track_type === TrackType.DEBT_TRACK && (\n <>\n <MonthlyPaymentAction goal={goal} />\n <Divider sx={{ ml: 24 }} />\n\n <InterestRateAction goal={goal} />\n <Divider sx={{ ml: 24 }} />\n\n <OriginalBalanceAction goal={goal} />\n <Divider variant=\"fullWidth\" />\n </>\n )}\n\n {goal.track_type === TrackType.RETIREMENT_TRACK && (\n <>\n <RetirementAgeAction goal={goal} />\n <Divider sx={{ ml: 24 }} />\n\n <BirthdayAction goal={goal} />\n <Divider variant=\"fullWidth\" />\n </>\n )}\n </List>\n\n <Text color=\"text.secondary\" sx={{ mb: 4, ml: 24, mt: 12 }} variant=\"caption\">\n {goal.track_type === TrackType.RETIREMENT_TRACK\n ? copy.details_accounts\n : copy.details_account}\n </Text>\n\n {goal.track_type !== TrackType.RETIREMENT_TRACK && account && (\n <>\n <AccountAction account={account} />\n <Divider />\n </>\n )}\n\n {goal.track_type === TrackType.RETIREMENT_TRACK && (\n <>\n <AddRetirementAccountAction goal={goal} />\n <Divider />\n </>\n )}\n\n {goal.track_type === TrackType.SAVINGS_TRACK && !goal.is_complete && (\n <ChangeAccountAction goal={goal} />\n )}\n </Stack>\n )\n})\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA+BA,IAAa,KAAc,EAAA,CAAU,EAAE,MAAA,EAAA,MAA6B;AAClE,QAAM,EAAE,OAAO,EAAA,IAAS,EAAmB,GACrC,EAAE,iBAAiB,EAAA,IAAa,EAAgB,GAEhD,IAAU,EAAM,QAAA,MACd,EAAS,KAAA,CAAM,MAAM,EAAE,SAAS,EAAK,YAAY,GACvD,CAAC,GAAU,CAAI,CACjB,GAEM,IAAW,EAAK;AAEtB,MAAI,IAAY,EAAK;AACrB,SAAI,EAAK,eAAe,EAAU,aAChC,IAAY,EAAK,qBACR,EAAK,eAAe,EAAU,qBACvC,IAAY,EAAK,2BAIjB,gBAAA,EAAC,GAAD,EAAA,UAAA;AAAA,IACE,gBAAA,EAAC,GAAD;AAAA,MAAO,IAAI;AAAA,
|
|
1
|
+
{"version":3,"file":"GoalDetails.es.js","names":[],"sources":["../../../src/goals/components/GoalDetails.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { useAccountStore, useGlobalCopyStore } from '../../common'\nimport { Goal, TrackType } from '../../core'\n\nimport { AccountAction } from './actions/AccountAction'\nimport { AmountToSaveAction } from './actions/AmountToSaveAction'\nimport { ChangeAccountAction } from './actions/ChangeAccountAction'\nimport { GoalNameAction } from './actions/GoalNameAction'\nimport { GoalStatusCard } from './GoalStatusCard'\nimport { MonthlyPaymentAction } from './actions/MonthlyPaymentAction'\nimport { OriginalBalanceAction } from './actions/OriginalBalanceAction'\nimport { InterestRateAction } from './actions/InterestRateAction'\nimport { RetirementAgeAction } from './actions/RetirementAgeAction'\nimport { BirthdayAction } from './actions/BirthdayAction'\nimport { AddRetirementAccountAction } from './actions/AddRetirementAccountAction'\n\ninterface GoalDetailsProps {\n goal: Goal\n}\n\nexport const GoalDetails = observer(({ goal }: GoalDetailsProps) => {\n const { goals: copy } = useGlobalCopyStore()\n const { visibleAccounts: accounts } = useAccountStore()\n\n const account = React.useMemo(\n () => accounts.find((a) => a.guid === goal.account_guid),\n [accounts, goal],\n )\n\n const goalType = goal.track_type\n\n let goalTitle = copy.details_save_title\n if (goal.track_type === TrackType.DEBT_TRACK) {\n goalTitle = copy.details_debt_title\n } else if (goal.track_type === TrackType.RETIREMENT_TRACK) {\n goalTitle = copy.details_retirement_title\n }\n\n return (\n <Stack>\n <Stack mx={24}>\n <Text color=\"text.secondary\" sx={{ mb: 4, mt: 24 }} variant=\"caption\">\n {goalTitle}\n </Text>\n <GoalStatusCard goal={goal} isInDrawer={true} />\n\n <Text color=\"text.secondary\" sx={{ mb: 4, mt: 24 }} variant=\"caption\">\n {copy.details_title}\n </Text>\n </Stack>\n\n <List sx={{ bgcolor: 'background.paper' }}>\n {goalType !== TrackType.RETIREMENT_TRACK ? (\n <GoalNameAction goal={goal} />\n ) : (\n <ListItem sx={{ px: 24 }}>\n <ListItemText\n primary={\n <Stack alignItems=\"center\" direction=\"row\" justifyContent=\"space-between\">\n <Text variant=\"body1\">{copy.details_goal_name}</Text>\n <Text bold={true} color={'text.primary'} sx={{ mr: 4 }} variant=\"body1\">\n {copy.retirement}\n </Text>\n </Stack>\n }\n slotProps={{ primary: { variant: 'body1' } }}\n />\n </ListItem>\n )}\n\n <Divider sx={{ ml: 24 }} />\n\n {(goalType === TrackType.SAVINGS_TRACK || goalType === TrackType.RETIREMENT_TRACK) && (\n <>\n <AmountToSaveAction goal={goal} />\n <Divider sx={{ ml: goalType === TrackType.RETIREMENT_TRACK ? 24 : 0 }} />\n </>\n )}\n\n {goal.track_type === TrackType.DEBT_TRACK && (\n <>\n <MonthlyPaymentAction goal={goal} />\n <Divider sx={{ ml: 24 }} />\n\n <InterestRateAction goal={goal} />\n <Divider sx={{ ml: 24 }} />\n\n <OriginalBalanceAction goal={goal} />\n <Divider variant=\"fullWidth\" />\n </>\n )}\n\n {goal.track_type === TrackType.RETIREMENT_TRACK && (\n <>\n <RetirementAgeAction goal={goal} />\n <Divider sx={{ ml: 24 }} />\n\n <BirthdayAction goal={goal} />\n <Divider variant=\"fullWidth\" />\n </>\n )}\n </List>\n\n <Text color=\"text.secondary\" sx={{ mb: 4, ml: 24, mt: 12 }} variant=\"caption\">\n {goal.track_type === TrackType.RETIREMENT_TRACK\n ? copy.details_accounts\n : copy.details_account}\n </Text>\n\n {goal.track_type !== TrackType.RETIREMENT_TRACK && account && (\n <>\n <AccountAction account={account} />\n <Divider />\n </>\n )}\n\n {goal.track_type === TrackType.RETIREMENT_TRACK && (\n <>\n <AddRetirementAccountAction goal={goal} />\n <Divider />\n </>\n )}\n\n {goal.track_type === TrackType.SAVINGS_TRACK && !goal.is_complete && (\n <ChangeAccountAction goal={goal} />\n )}\n </Stack>\n )\n})\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GoalDetailsDrawer.es.js","names":[],"sources":["../../../src/goals/components/GoalDetailsDrawer.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport {\n Dialog,\n Drawer,\n useAccountStore,\n useGlobalCopyStore,\n useGoalStore,\n useUserStore,\n} from '../../common'\nimport { type Goal, TrackType } from '../../core'\n\nimport { GoalDetails } from './GoalDetails'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\n\ninterface GoalDetailsDrawerProps {\n onClose?: (trackType: TrackType) => void\n}\n\nexport const GoalDetailsDrawer = observer(({ onClose }: GoalDetailsDrawerProps) => {\n const { visibleRetirementAccounts: retirementAccounts } = useAccountStore()\n const { goals: copy, common: commonCopy } = useGlobalCopyStore()\n const {\n addGoal,\n addRetirementGoal,\n deleteGoal,\n deleteRetirementGoal,\n newRetirementGoalAccounts,\n retirementGoalAccounts,\n selectedGoal,\n setAlert,\n setSelectedGoal,\n updateGoal,\n } = useGoalStore()\n const { user } = useUserStore()\n\n const [isDeleteOpen, setIsDeleteOpen] = React.useState(false)\n\n const isNew = !selectedGoal?.guid\n const isComplete =\n selectedGoal?.track_type === TrackType.SAVINGS_TRACK &&\n selectedGoal.is_complete &&\n !selectedGoal.has_been_spent\n\n const accounts = React.useMemo(() => {\n const goalAccounts = isNew ? newRetirementGoalAccounts : retirementGoalAccounts\n return retirementAccounts.filter((a) => goalAccounts.some((rga) => rga.account_guid === a.guid))\n }, [isNew, retirementAccounts, newRetirementGoalAccounts, retirementGoalAccounts])\n\n const isValidGoal = React.useMemo(() => {\n if (!selectedGoal) return false\n\n // Allow deletion of existing goals even if the accounts are not associated with the goals,\n // as long as the goal is not new and not already complete.\n if (!isNew && !isComplete) return true\n\n const { account_guid, track_type, name, amount, retirement_age } = selectedGoal\n\n if (track_type === TrackType.SAVINGS_TRACK) {\n if (!account_guid) return false\n return Boolean(name) && Boolean(amount)\n }\n\n if (track_type === TrackType.RETIREMENT_TRACK) {\n if (!accounts.length) return false\n return Boolean(name) && Boolean(amount) && Boolean(retirement_age) && Boolean(user.birthday)\n }\n\n return true\n }, [selectedGoal, accounts, user.birthday])\n\n let primaryText = commonCopy.delete_button\n let primaryAction = () => setIsDeleteOpen(true)\n if (isNew) {\n primaryAction = () => handleSave()\n primaryText = commonCopy.save_button\n } else if (isComplete) {\n primaryAction = () => handleComplete()\n primaryText = copy.mark_as_complete_button\n }\n\n const handleSave = async () => {\n if (selectedGoal) {\n const trackType = selectedGoal.track_type\n if (trackType !== TrackType.RETIREMENT_TRACK) {\n await addGoal(selectedGoal)\n } else if (trackType === TrackType.RETIREMENT_TRACK) {\n await addRetirementGoal({ ...selectedGoal, target_amount: selectedGoal.amount })\n }\n setAlert(copy.alert_goal_added)\n setSelectedGoal(undefined)\n if (trackType) {\n onClose?.(trackType)\n }\n }\n }\n\n const handleDelete = async () => {\n if (!selectedGoal) return\n\n if (selectedGoal.track_type !== TrackType.RETIREMENT_TRACK) {\n await deleteGoal(selectedGoal.guid)\n } else if (selectedGoal.track_type === TrackType.RETIREMENT_TRACK) {\n await deleteRetirementGoal(selectedGoal)\n }\n setAlert(copy.alert_goal_deleted)\n setSelectedGoal(undefined)\n }\n\n const handleComplete = async () => {\n const updatedGoal = {\n ...selectedGoal,\n has_been_spent: true,\n } as Goal\n await updateGoal(updatedGoal)\n setAlert(copy.alert_goal_completed)\n setSelectedGoal(undefined)\n }\n\n return (\n <Stack>\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n hasSecondaryAction={isNew}\n isOpen={Boolean(selectedGoal)}\n isPrimaryDisabled={!isValidGoal}\n onClose={() => setSelectedGoal(undefined)}\n onPrimaryAction={primaryAction}\n primaryColor={isNew || isComplete ? 'primary' : 'error'}\n primaryText={primaryText}\n secondaryColor=\"primary\"\n title={copy.goal_details}\n >\n {selectedGoal && <GoalDetails goal={selectedGoal} />}\n </Drawer>\n <Dialog\n copy={{ close_aria: commonCopy.close_aria, title: copy.delete_goal }}\n isOpen={isDeleteOpen}\n maxWidth=\"xs\"\n onClose={() => setIsDeleteOpen(false)}\n onPrimaryAction={handleDelete}\n primaryColor=\"error\"\n primaryText={commonCopy.delete_button}\n >\n <Text variant=\"subtitle1\">\n {buildDynamicCopy(copy.delete_description, selectedGoal?.name || '') as string}\n </Text>\n </Dialog>\n </Stack>\n )\n})\n"],"mappings":";;;;;;;;;;;AAwBA,IAAa,KAAoB,EAAA,CAAU,EAAE,SAAA,EAAA,MAAsC;AACjF,QAAM,EAAE,2BAA2B,EAAA,IAAuB,EAAgB,GACpE,EAAE,OAAO,GAAM,QAAQ,EAAA,IAAe,EAAmB,GACzD,EACJ,SAAA,GACA,mBAAA,GACA,YAAA,GACA,sBAAA,GACA,2BAAA,GACA,wBAAA,GACA,cAAA,GACA,UAAA,GACA,iBAAA,GACA,YAAA,EAAA,IACE,EAAa,GACX,EAAE,MAAA,EAAA,IAAS,EAAa,GAExB,CAAC,GAAc,CAAA,IAAmB,EAAM,SAAS,EAAK,GAEtD,IAAQ,CAAC,GAAc,MACvB,IACJ,GAAc,eAAe,EAAU,iBACvC,EAAa,eACb,CAAC,EAAa,gBAEV,IAAW,EAAM,QAAA,MAAc;AACnC,UAAM,IAAe,IAAQ,IAA4B;AACzD,WAAO,EAAmB,OAAA,CAAQ,MAAM,EAAa,KAAA,CAAM,MAAQ,EAAI,iBAAiB,EAAE,IAAI,CAAC;AAAA,EACjG,GAAG;AAAA,IAAC;AAAA,IAAO;AAAA,IAAoB;AAAA,IAA2B;AAAA,EAAsB,CAAC,GAE3E,IAAc,EAAM,QAAA,MAAc;AACtC,QAAI,CAAC,EAAc,QAAO;AAI1B,QAAI,CAAC,KAAS,CAAC,EAAY,QAAO;AAElC,UAAM,EAAE,cAAA,GAAc,YAAA,GAAY,MAAA,GAAM,QAAA,GAAQ,gBAAA,EAAA,IAAmB;AAEnE,WAAI,MAAe,EAAU,gBACtB,IACE,EAAQ,KAAS,EAAQ,IADN,KAIxB,MAAe,EAAU,mBACtB,EAAS,SACP,EAAQ,KAAS,EAAQ,KAAW,EAAQ,KAAmB,EAAQ,EAAK,WADtD,KAIxB;AAAA,EACT,GAAG;AAAA,IAAC;AAAA,IAAc;AAAA,IAAU,EAAK;AAAA,EAAQ,CAAC;AAE1C,MAAI,IAAc,EAAW,eACzB,IAAA,MAAsB,EAAgB,EAAI;AAC9C,EAAI,KACF,IAAA,MAAsB,EAAW,GACjC,IAAc,EAAW,eAChB,MACT,IAAA,MAAsB,EAAe,GACrC,IAAc,EAAK;AAGrB,QAAM,IAAa,YAAY;AAC7B,QAAI,GAAc;AAChB,YAAM,IAAY,EAAa;AAC/B,MAAI,MAAc,EAAU,mBAC1B,MAAM,EAAQ,CAAY,IACjB,MAAc,EAAU,oBACjC,MAAM,EAAkB;AAAA,QAAE,GAAG;AAAA,QAAc,eAAe,EAAa;AAAA,MAAO,CAAC,GAEjF,EAAS,EAAK,gBAAgB,GAC9B,EAAgB,MAAS,GACrB,KACF,IAAU,CAAS;AAAA,IAEvB;AAAA,EACF,GAEM,IAAe,YAAY;AAC/B,IAAK,MAED,EAAa,eAAe,EAAU,mBACxC,MAAM,EAAW,EAAa,IAAI,IACzB,EAAa,eAAe,EAAU,oBAC/C,MAAM,EAAqB,CAAY,GAEzC,EAAS,EAAK,kBAAkB,GAChC,EAAgB,MAAS;AAAA,EAC3B,GAEM,IAAiB,YAAY;AACjC,UAAM,IAAc;AAAA,MAClB,GAAG;AAAA,MACH,gBAAgB;AAAA,IAClB;AACA,UAAM,EAAW,CAAW,GAC5B,EAAS,EAAK,oBAAoB,GAClC,EAAgB,MAAS;AAAA,EAC3B;AAEA,SACE,gBAAA,EAAC,GAAD,EAAA,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,IACE,gBAAgB,EAAW;AAAA,IAC3B,oBAAoB;AAAA,IACpB,QAAQ,EAAQ;AAAA,IAChB,mBAAmB,CAAC;AAAA,IACpB,SAAA,MAAe,EAAgB,MAAS;AAAA,IACxC,iBAAiB;AAAA,IACjB,cAAc,KAAS,IAAa,YAAY;AAAA,IACnC,aAAA;AAAA,IACb,gBAAe;AAAA,IACf,OAAO,EAAK;AAAA,
|
|
1
|
+
{"version":3,"file":"GoalDetailsDrawer.es.js","names":[],"sources":["../../../src/goals/components/GoalDetailsDrawer.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport {\n Dialog,\n Drawer,\n useAccountStore,\n useGlobalCopyStore,\n useGoalStore,\n useUserStore,\n} from '../../common'\nimport { type Goal, TrackType } from '../../core'\n\nimport { GoalDetails } from './GoalDetails'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\n\ninterface GoalDetailsDrawerProps {\n onClose?: (trackType: TrackType) => void\n}\n\nexport const GoalDetailsDrawer = observer(({ onClose }: GoalDetailsDrawerProps) => {\n const { visibleRetirementAccounts: retirementAccounts } = useAccountStore()\n const { goals: copy, common: commonCopy } = useGlobalCopyStore()\n const {\n addGoal,\n addRetirementGoal,\n deleteGoal,\n deleteRetirementGoal,\n newRetirementGoalAccounts,\n retirementGoalAccounts,\n selectedGoal,\n setAlert,\n setSelectedGoal,\n updateGoal,\n } = useGoalStore()\n const { user } = useUserStore()\n\n const [isDeleteOpen, setIsDeleteOpen] = React.useState(false)\n\n const isNew = !selectedGoal?.guid\n const isComplete =\n selectedGoal?.track_type === TrackType.SAVINGS_TRACK &&\n selectedGoal.is_complete &&\n !selectedGoal.has_been_spent\n\n const accounts = React.useMemo(() => {\n const goalAccounts = isNew ? newRetirementGoalAccounts : retirementGoalAccounts\n return retirementAccounts.filter((a) => goalAccounts.some((rga) => rga.account_guid === a.guid))\n }, [isNew, retirementAccounts, newRetirementGoalAccounts, retirementGoalAccounts])\n\n const isValidGoal = React.useMemo(() => {\n if (!selectedGoal) return false\n\n // Allow deletion of existing goals even if the accounts are not associated with the goals,\n // as long as the goal is not new and not already complete.\n if (!isNew && !isComplete) return true\n\n const { account_guid, track_type, name, amount, retirement_age } = selectedGoal\n\n if (track_type === TrackType.SAVINGS_TRACK) {\n if (!account_guid) return false\n return Boolean(name) && Boolean(amount)\n }\n\n if (track_type === TrackType.RETIREMENT_TRACK) {\n if (!accounts.length) return false\n return Boolean(name) && Boolean(amount) && Boolean(retirement_age) && Boolean(user.birthday)\n }\n\n return true\n }, [selectedGoal, accounts, user.birthday])\n\n let primaryText = commonCopy.delete_button\n let primaryAction = () => setIsDeleteOpen(true)\n if (isNew) {\n primaryAction = () => handleSave()\n primaryText = commonCopy.save_button\n } else if (isComplete) {\n primaryAction = () => handleComplete()\n primaryText = copy.mark_as_complete_button\n }\n\n const handleSave = async () => {\n if (selectedGoal) {\n const trackType = selectedGoal.track_type\n if (trackType !== TrackType.RETIREMENT_TRACK) {\n await addGoal(selectedGoal)\n } else if (trackType === TrackType.RETIREMENT_TRACK) {\n await addRetirementGoal({ ...selectedGoal, target_amount: selectedGoal.amount })\n }\n setAlert(copy.alert_goal_added)\n setSelectedGoal(undefined)\n if (trackType) {\n onClose?.(trackType)\n }\n }\n }\n\n const handleDelete = async () => {\n if (!selectedGoal) return\n\n if (selectedGoal.track_type !== TrackType.RETIREMENT_TRACK) {\n await deleteGoal(selectedGoal.guid)\n } else if (selectedGoal.track_type === TrackType.RETIREMENT_TRACK) {\n await deleteRetirementGoal(selectedGoal)\n }\n setAlert(copy.alert_goal_deleted)\n setSelectedGoal(undefined)\n }\n\n const handleComplete = async () => {\n const updatedGoal = {\n ...selectedGoal,\n has_been_spent: true,\n } as Goal\n await updateGoal(updatedGoal)\n setAlert(copy.alert_goal_completed)\n setSelectedGoal(undefined)\n }\n\n return (\n <Stack>\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n hasSecondaryAction={isNew}\n isOpen={Boolean(selectedGoal)}\n isPrimaryDisabled={!isValidGoal}\n onClose={() => setSelectedGoal(undefined)}\n onPrimaryAction={primaryAction}\n primaryColor={isNew || isComplete ? 'primary' : 'error'}\n primaryText={primaryText}\n secondaryColor=\"primary\"\n title={copy.goal_details}\n >\n {selectedGoal && <GoalDetails goal={selectedGoal} />}\n </Drawer>\n <Dialog\n copy={{ close_aria: commonCopy.close_aria, title: copy.delete_goal }}\n isOpen={isDeleteOpen}\n maxWidth=\"xs\"\n onClose={() => setIsDeleteOpen(false)}\n onPrimaryAction={handleDelete}\n primaryColor=\"error\"\n primaryText={commonCopy.delete_button}\n >\n <Text variant=\"subtitle1\">\n {buildDynamicCopy(copy.delete_description, selectedGoal?.name || '') as string}\n </Text>\n </Dialog>\n </Stack>\n )\n})\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GoalList.es.js","names":[],"sources":["../../../src/goals/components/GoalList.tsx"],"sourcesContent":["import { observer } from 'mobx-react-lite'\n\nimport Button from '@mui/material/Button'\nimport Card from '@mui/material/Card'\nimport CardActionArea from '@mui/material/CardActionArea'\nimport CardContent from '@mui/material/CardContent'\nimport Grid from '@mui/material/Grid'\nimport Stack from '@mui/material/Stack'\nimport type { Theme } from '@mui/system'\n\nimport { H3, Icon, P, Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore, useGlobalUiStore, useGoalStore, useScreenSize } from '../../common'\nimport { TrackType } from '../../core'\n\nimport { GoalStatusCard } from './GoalStatusCard'\nimport { ManageGoals } from './ManageGoals'\nimport { getZeroStateOngoing } from '../../core/utils/GoalsUtil'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface GoalListProps {\n trackType: TrackType\n onAddGoals: () => void\n}\n\nexport const GoalList = observer(({ trackType, onAddGoals }: GoalListProps) => {\n const { isMobile } = useScreenSize()\n const { goals: copy } = useGlobalCopyStore()\n const { selectedAccountGuids } = useGlobalUiStore()\n const { orderedGoals: allGoals, setSelectedGoal } = useGoalStore()\n\n const goals = allGoals.filter(\n (goal) =>\n goal.track_type === trackType &&\n ((goal.track_type !== TrackType.RETIREMENT_TRACK &&\n selectedAccountGuids.includes(goal.account_guid)) ||\n goal.track_type === TrackType.RETIREMENT_TRACK),\n )\n\n const ongoing = goals.filter(\n (goal) =>\n (goal.track_type === TrackType.SAVINGS_TRACK && !goal.has_been_spent) ||\n (goal.track_type !== TrackType.SAVINGS_TRACK && !goal.is_complete),\n )\n\n const complete = goals.filter(\n (goal) =>\n (goal.track_type === TrackType.SAVINGS_TRACK && goal.has_been_spent) ||\n (goal.track_type !== TrackType.SAVINGS_TRACK && goal.is_complete),\n )\n\n const zeroStateComplete =\n trackType === TrackType.DEBT_TRACK\n ? copy.zero_state_complete_debt\n : copy.zero_state_complete_savings\n\n return (\n <Stack mt={16} mx={isMobile ? 24 : 0}>\n <Stack alignItems=\"center\" direction=\"row\" justifyContent=\"space-between\" mb={8}>\n <H3 color=\"text.secondary\" variant=\"body2\">\n {copy.ongoing_title}\n </H3>\n <ManageGoals trackType={trackType} />\n </Stack>\n {ongoing.length > 0 ? (\n <Grid container={true} spacing={24}>\n {ongoing.map((goal, index, goals) => (\n // Goal should be full width in mobile or if it's the first goal (unless there are 2)\n <Grid key={index} size={isMobile || (index === 0 && goals.length !== 2) ? 12 : 6}>\n <GoalStatusCard goal={goal} key={goal.guid} onClick={() => setSelectedGoal(goal)} />\n </Grid>\n ))}\n </Grid>\n ) : (\n <Stack\n alignItems=\"center\"\n bgcolor=\"background.default\"\n borderRadius={2}\n height={166}\n justifyContent=\"center\"\n py={18}\n >\n <P\n sx={(theme) => ({\n color: 'text.secondary',\n [(theme as Theme).breakpoints.down('sm')]: {\n px: 10,\n },\n width: { sm: 381 },\n })}\n variant=\"body2\"\n >\n {getZeroStateOngoing(trackType, copy)}\n </P>\n <Button onClick={onAddGoals} sx={{ mt: 16, width: { sm: 224 } }} variant=\"contained\">\n {copy.add_goals_button}\n </Button>\n </Stack>\n )}\n {trackType !== TrackType.RETIREMENT_TRACK && (\n <Stack gap={16} mt={48}>\n <H3 color=\"text.secondary\" variant=\"body2\">\n {copy.complete_title}\n </H3>\n {complete.length === 0 && (\n <Stack alignItems=\"center\" bgcolor=\"background.default\" borderRadius={2} py={18}>\n <P\n sx={(theme) => ({\n color: 'text.secondary',\n width: { sm: 393 },\n [(theme as Theme).breakpoints.down('sm')]: {\n px: 10,\n },\n })}\n variant=\"body2\"\n >\n {zeroStateComplete}\n </P>\n </Stack>\n )}\n {complete.map((goal) => (\n <Card elevation={2} key={goal.guid}>\n <CardActionArea onClick={() => setSelectedGoal(goal)}>\n <CardContent sx={{ ':last-child': { pb: 16 } }}>\n <Stack alignItems=\"center\" direction=\"row\" justifyContent=\"space-between\">\n <Stack alignItems=\"center\" direction=\"row\" gap={6}>\n <Icon color=\"success\" fill={true} name=\"check_circle\" size={20} />\n <Text color=\"text.secondary\" variant=\"body1\">\n {goal.name}\n </Text>\n </Stack>\n <Text bold={true} variant=\"body1\">\n {formatCurrency(goal.amount, '0,0.00')}\n </Text>\n </Stack>\n </CardContent>\n </CardActionArea>\n </Card>\n ))}\n </Stack>\n )}\n </Stack>\n )\n})\n"],"mappings":";;;;;;;;;;;;;;;;AAyBA,IAAa,IAAW,EAAA,CAAU,EAAE,WAAA,GAAW,YAAA,EAAA,MAAgC;AAC7E,QAAM,EAAE,UAAA,EAAA,IAAa,EAAc,GAC7B,EAAE,OAAO,EAAA,IAAS,EAAmB,GACrC,EAAE,sBAAA,EAAA,IAAyB,EAAiB,GAC5C,EAAE,cAAc,GAAU,iBAAA,EAAA,IAAoB,EAAa,GAE3D,IAAQ,EAAS,OAAA,CACpB,MACC,EAAK,eAAe,MAClB,EAAK,eAAe,EAAU,oBAC9B,EAAqB,SAAS,EAAK,YAAY,KAC/C,EAAK,eAAe,EAAU,iBACpC,GAEM,IAAU,EAAM,OAAA,CACnB,MACE,EAAK,eAAe,EAAU,iBAAiB,CAAC,EAAK,kBACrD,EAAK,eAAe,EAAU,iBAAiB,CAAC,EAAK,WAC1D,GAEM,IAAW,EAAM,OAAA,CACpB,MACE,EAAK,eAAe,EAAU,iBAAiB,EAAK,kBACpD,EAAK,eAAe,EAAU,iBAAiB,EAAK,WACzD,GAEM,IACJ,MAAc,EAAU,aACpB,EAAK,2BACL,EAAK;AAEX,SACE,gBAAA,EAAC,GAAD;AAAA,IAAO,IAAI;AAAA,IAAI,IAAI,IAAW,KAAK;AAAA,
|
|
1
|
+
{"version":3,"file":"GoalList.es.js","names":[],"sources":["../../../src/goals/components/GoalList.tsx"],"sourcesContent":["import { observer } from 'mobx-react-lite'\n\nimport Button from '@mui/material/Button'\nimport Card from '@mui/material/Card'\nimport CardActionArea from '@mui/material/CardActionArea'\nimport CardContent from '@mui/material/CardContent'\nimport Grid from '@mui/material/Grid'\nimport Stack from '@mui/material/Stack'\nimport type { Theme } from '@mui/system'\n\nimport { H3, Icon, P, Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore, useGlobalUiStore, useGoalStore, useScreenSize } from '../../common'\nimport { TrackType } from '../../core'\n\nimport { GoalStatusCard } from './GoalStatusCard'\nimport { ManageGoals } from './ManageGoals'\nimport { getZeroStateOngoing } from '../../core/utils/GoalsUtil'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface GoalListProps {\n trackType: TrackType\n onAddGoals: () => void\n}\n\nexport const GoalList = observer(({ trackType, onAddGoals }: GoalListProps) => {\n const { isMobile } = useScreenSize()\n const { goals: copy } = useGlobalCopyStore()\n const { selectedAccountGuids } = useGlobalUiStore()\n const { orderedGoals: allGoals, setSelectedGoal } = useGoalStore()\n\n const goals = allGoals.filter(\n (goal) =>\n goal.track_type === trackType &&\n ((goal.track_type !== TrackType.RETIREMENT_TRACK &&\n selectedAccountGuids.includes(goal.account_guid)) ||\n goal.track_type === TrackType.RETIREMENT_TRACK),\n )\n\n const ongoing = goals.filter(\n (goal) =>\n (goal.track_type === TrackType.SAVINGS_TRACK && !goal.has_been_spent) ||\n (goal.track_type !== TrackType.SAVINGS_TRACK && !goal.is_complete),\n )\n\n const complete = goals.filter(\n (goal) =>\n (goal.track_type === TrackType.SAVINGS_TRACK && goal.has_been_spent) ||\n (goal.track_type !== TrackType.SAVINGS_TRACK && goal.is_complete),\n )\n\n const zeroStateComplete =\n trackType === TrackType.DEBT_TRACK\n ? copy.zero_state_complete_debt\n : copy.zero_state_complete_savings\n\n return (\n <Stack mt={16} mx={isMobile ? 24 : 0}>\n <Stack alignItems=\"center\" direction=\"row\" justifyContent=\"space-between\" mb={8}>\n <H3 color=\"text.secondary\" variant=\"body2\">\n {copy.ongoing_title}\n </H3>\n <ManageGoals trackType={trackType} />\n </Stack>\n {ongoing.length > 0 ? (\n <Grid container={true} spacing={24}>\n {ongoing.map((goal, index, goals) => (\n // Goal should be full width in mobile or if it's the first goal (unless there are 2)\n <Grid key={index} size={isMobile || (index === 0 && goals.length !== 2) ? 12 : 6}>\n <GoalStatusCard goal={goal} key={goal.guid} onClick={() => setSelectedGoal(goal)} />\n </Grid>\n ))}\n </Grid>\n ) : (\n <Stack\n alignItems=\"center\"\n bgcolor=\"background.default\"\n borderRadius={2}\n height={166}\n justifyContent=\"center\"\n py={18}\n >\n <P\n sx={(theme) => ({\n color: 'text.secondary',\n [(theme as Theme).breakpoints.down('sm')]: {\n px: 10,\n },\n width: { sm: 381 },\n })}\n variant=\"body2\"\n >\n {getZeroStateOngoing(trackType, copy)}\n </P>\n <Button onClick={onAddGoals} sx={{ mt: 16, width: { sm: 224 } }} variant=\"contained\">\n {copy.add_goals_button}\n </Button>\n </Stack>\n )}\n {trackType !== TrackType.RETIREMENT_TRACK && (\n <Stack gap={16} mt={48}>\n <H3 color=\"text.secondary\" variant=\"body2\">\n {copy.complete_title}\n </H3>\n {complete.length === 0 && (\n <Stack alignItems=\"center\" bgcolor=\"background.default\" borderRadius={2} py={18}>\n <P\n sx={(theme) => ({\n color: 'text.secondary',\n width: { sm: 393 },\n [(theme as Theme).breakpoints.down('sm')]: {\n px: 10,\n },\n })}\n variant=\"body2\"\n >\n {zeroStateComplete}\n </P>\n </Stack>\n )}\n {complete.map((goal) => (\n <Card elevation={2} key={goal.guid}>\n <CardActionArea onClick={() => setSelectedGoal(goal)}>\n <CardContent sx={{ ':last-child': { pb: 16 } }}>\n <Stack alignItems=\"center\" direction=\"row\" justifyContent=\"space-between\">\n <Stack alignItems=\"center\" direction=\"row\" gap={6}>\n <Icon color=\"success\" fill={true} name=\"check_circle\" size={20} />\n <Text color=\"text.secondary\" variant=\"body1\">\n {goal.name}\n </Text>\n </Stack>\n <Text bold={true} variant=\"body1\">\n {formatCurrency(goal.amount, '0,0.00')}\n </Text>\n </Stack>\n </CardContent>\n </CardActionArea>\n </Card>\n ))}\n </Stack>\n )}\n </Stack>\n )\n})\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GoalStatusCard.es.js","names":[],"sources":["../../../src/goals/components/GoalStatusCard.tsx"],"sourcesContent":["import { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport Card from '@mui/material/Card'\nimport CardActionArea from '@mui/material/CardActionArea'\nimport CardContent from '@mui/material/CardContent'\nimport CardHeader from '@mui/material/CardHeader'\nimport Stack from '@mui/material/Stack'\n\nimport { NoteStack, Payments, Person } from '@mxenabled/mx-icons'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { StatusBar, StatusBarData, useGlobalCopyStore, useScreenSize } from '../../common'\nimport { type Goal, TrackType } from '../../core'\n\nimport { getGoalStatusData } from '../../core/utils/GoalsUtil'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface GoalStatusCardProps {\n goal: Goal\n isInDrawer?: boolean\n onClick?: () => void\n}\n\nconst formatCurrencyForDeviceType = (amount: number, isMobileOrTablet: boolean) => {\n if (!isMobileOrTablet) return formatCurrency(amount, '0,0.00')\n return formatCurrency(amount, amount < 1000 ? '0' : '0.00a').replace(\n /(\\d+)(?:\\.0+|(\\.\\d*?[1-9])0*)([a-zA-Z]* ?\\$?)/g,\n '$1$2$3',\n )\n}\n\nexport const GoalStatusCard = observer(\n ({ goal, isInDrawer = false, onClick }: GoalStatusCardProps) => {\n const { goals: copy } = useGlobalCopyStore()\n const { isMobile, isTablet } = useScreenSize()\n\n const isMobileOrTablet = isMobile || isTablet\n\n const {\n backgroundColor: bgcolor,\n color,\n percentage,\n percentageText,\n projectedText,\n } = getGoalStatusData(copy, goal)\n\n const amount = goal.track_type === TrackType.DEBT_TRACK ? goal.initial_amount : goal.amount\n const data = [\n {\n color: bgcolor,\n percentage: `${percentage}`,\n },\n ] as StatusBarData[]\n\n let avatarIcon = <Payments />\n if (goal.track_type === TrackType.DEBT_TRACK) {\n avatarIcon = <NoteStack />\n } else if (goal.track_type === TrackType.RETIREMENT_TRACK) {\n avatarIcon = <Person />\n }\n\n return (\n <Card\n elevation={2}\n sx={{\n '&:focus-within': {\n outline: '2px solid',\n outlineColor: 'primary.main',\n },\n }}\n >\n <CardActionArea disabled={!onClick} onClick={onClick}>\n <CardHeader\n avatar={\n <Avatar sx={{ bgcolor, color, height: 48, width: 48 }} variant=\"rounded\">\n {avatarIcon}\n </Avatar>\n }\n subheader={\n <Text\n sx={{\n fontWeight: 700,\n fontSize: isInDrawer || isMobileOrTablet ? '18px' : '23px',\n lineHeight: isInDrawer || isMobileOrTablet ? '24px' : '32px',\n }}\n >\n {`${formatCurrency(goal.current_amount, isMobileOrTablet ? '0,0' : '0,0.00')} / ${formatCurrencyForDeviceType(\n amount,\n isMobileOrTablet,\n )}`}\n </Text>\n }\n sx={{ alignItems: 'flex-start', '& .MuiCardHeader-content': { minWidth: 0 } }}\n title={\n <Text\n color=\"text.secondary\"\n fontWeight={400}\n sx={{\n fontSize: '15px',\n lineHeight: '20px',\n }}\n variant=\"h4\"\n >\n {goal.name}\n </Text>\n }\n />\n <CardContent sx={{ pt: 0 }}>\n <Stack gap={6}>\n <StatusBar data={data} height={24} />\n <Stack alignItems=\"center\" direction=\"row\" justifyContent=\"space-between\">\n <Text color=\"text.secondary\" variant=\"caption\">\n {percentageText}\n </Text>\n {goal.projected_to_complete_at && (\n <Text color=\"text.secondary\" variant=\"caption\">\n {projectedText}\n </Text>\n )}\n </Stack>\n </Stack>\n </CardContent>\n </CardActionArea>\n </Card>\n )\n },\n)\n"],"mappings":";;;;;;;;;;;;;;;;AAyBA,IAAM,IAAA,CAA+B,GAAgB,MAC9C,IACE,EAAe,GAAQ,IAAS,MAAO,MAAM,OAAO,EAAE,QAC3D,kDACA,QACF,IAJ8B,EAAe,GAAQ,QAAQ,GAOlD,IAAiB,EAAA,CAC3B,EAAE,MAAA,GAAM,YAAA,IAAa,IAAO,SAAA,EAAA,MAAmC;AAC9D,QAAM,EAAE,OAAO,EAAA,IAAS,EAAmB,GACrC,EAAE,UAAA,GAAU,UAAA,EAAA,IAAa,EAAc,GAEvC,IAAmB,KAAY,GAE/B,EACJ,iBAAiB,GACjB,OAAA,GACA,YAAA,GACA,gBAAA,GACA,eAAA,EAAA,IACE,EAAkB,GAAM,CAAI,GAE1B,IAAS,EAAK,eAAe,EAAU,aAAa,EAAK,iBAAiB,EAAK,QAC/E,IAAO,CACX;AAAA,IACE,OAAO;AAAA,IACP,YAAY,GAAG,CAAA;AAAA,EACjB,CACF;AAEA,MAAI,IAAa,gBAAA,EAAC,GAAD,CAAW,CAAA;AAC5B,SAAI,EAAK,eAAe,EAAU,aAChC,IAAa,gBAAA,EAAC,GAAD,CAAY,CAAA,IAChB,EAAK,eAAe,EAAU,qBACvC,IAAa,gBAAA,EAAC,GAAD,CAAS,CAAA,IAItB,gBAAA,EAAC,GAAD;AAAA,IACE,WAAW;AAAA,IACX,IAAI,EACF,kBAAkB;AAAA,MAChB,SAAS;AAAA,MACT,cAAc;AAAA,IAChB,EACF;AAAA,
|
|
1
|
+
{"version":3,"file":"GoalStatusCard.es.js","names":[],"sources":["../../../src/goals/components/GoalStatusCard.tsx"],"sourcesContent":["import { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport Card from '@mui/material/Card'\nimport CardActionArea from '@mui/material/CardActionArea'\nimport CardContent from '@mui/material/CardContent'\nimport CardHeader from '@mui/material/CardHeader'\nimport Stack from '@mui/material/Stack'\n\nimport { NoteStack, Payments, Person } from '@mxenabled/mx-icons'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { StatusBar, StatusBarData, useGlobalCopyStore, useScreenSize } from '../../common'\nimport { type Goal, TrackType } from '../../core'\n\nimport { getGoalStatusData } from '../../core/utils/GoalsUtil'\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\n\ninterface GoalStatusCardProps {\n goal: Goal\n isInDrawer?: boolean\n onClick?: () => void\n}\n\nconst formatCurrencyForDeviceType = (amount: number, isMobileOrTablet: boolean) => {\n if (!isMobileOrTablet) return formatCurrency(amount, '0,0.00')\n return formatCurrency(amount, amount < 1000 ? '0' : '0.00a').replace(\n /(\\d+)(?:\\.0+|(\\.\\d*?[1-9])0*)([a-zA-Z]* ?\\$?)/g,\n '$1$2$3',\n )\n}\n\nexport const GoalStatusCard = observer(\n ({ goal, isInDrawer = false, onClick }: GoalStatusCardProps) => {\n const { goals: copy } = useGlobalCopyStore()\n const { isMobile, isTablet } = useScreenSize()\n\n const isMobileOrTablet = isMobile || isTablet\n\n const {\n backgroundColor: bgcolor,\n color,\n percentage,\n percentageText,\n projectedText,\n } = getGoalStatusData(copy, goal)\n\n const amount = goal.track_type === TrackType.DEBT_TRACK ? goal.initial_amount : goal.amount\n const data = [\n {\n color: bgcolor,\n percentage: `${percentage}`,\n },\n ] as StatusBarData[]\n\n let avatarIcon = <Payments />\n if (goal.track_type === TrackType.DEBT_TRACK) {\n avatarIcon = <NoteStack />\n } else if (goal.track_type === TrackType.RETIREMENT_TRACK) {\n avatarIcon = <Person />\n }\n\n return (\n <Card\n elevation={2}\n sx={{\n '&:focus-within': {\n outline: '2px solid',\n outlineColor: 'primary.main',\n },\n }}\n >\n <CardActionArea disabled={!onClick} onClick={onClick}>\n <CardHeader\n avatar={\n <Avatar sx={{ bgcolor, color, height: 48, width: 48 }} variant=\"rounded\">\n {avatarIcon}\n </Avatar>\n }\n subheader={\n <Text\n sx={{\n fontWeight: 700,\n fontSize: isInDrawer || isMobileOrTablet ? '18px' : '23px',\n lineHeight: isInDrawer || isMobileOrTablet ? '24px' : '32px',\n }}\n >\n {`${formatCurrency(goal.current_amount, isMobileOrTablet ? '0,0' : '0,0.00')} / ${formatCurrencyForDeviceType(\n amount,\n isMobileOrTablet,\n )}`}\n </Text>\n }\n sx={{ alignItems: 'flex-start', '& .MuiCardHeader-content': { minWidth: 0 } }}\n title={\n <Text\n color=\"text.secondary\"\n fontWeight={400}\n sx={{\n fontSize: '15px',\n lineHeight: '20px',\n }}\n variant=\"h4\"\n >\n {goal.name}\n </Text>\n }\n />\n <CardContent sx={{ pt: 0 }}>\n <Stack gap={6}>\n <StatusBar data={data} height={24} />\n <Stack alignItems=\"center\" direction=\"row\" justifyContent=\"space-between\">\n <Text color=\"text.secondary\" variant=\"caption\">\n {percentageText}\n </Text>\n {goal.projected_to_complete_at && (\n <Text color=\"text.secondary\" variant=\"caption\">\n {projectedText}\n </Text>\n )}\n </Stack>\n </Stack>\n </CardContent>\n </CardActionArea>\n </Card>\n )\n },\n)\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ManageGoals.es.js","names":[],"sources":["../../../src/goals/components/ManageGoals.tsx"],"sourcesContent":["import React from 'react'\n\nimport Button from '@mui/material/Button'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\n\nimport { ChevronRight } from '@mxenabled/mx-icons'\n\nimport { H3, P, Text } from '@mxenabled/mxui'\n\nimport { Drawer, useGlobalCopyStore, useGoalStore } from '../../common'\nimport { Goal, TrackType } from '../../core'\n\nimport { ContributionAction } from './actions/ContributionAction'\nimport { OngoingListItem } from './managegoals/OngoingListItem'\nimport { CompleteListItem } from './managegoals/CompleteListItem'\n\ninterface ManageGoalProps {\n trackType: TrackType\n}\n\nexport const ManageGoals = ({ trackType }: ManageGoalProps) => {\n const { goals: copy, common: commonCopy } = useGlobalCopyStore()\n const { loadGoals, orderedGoals: allGoals, reorderGoals } = useGoalStore()\n\n const goals = allGoals.filter((goal) => goal.track_type === trackType)\n const ongoing = goals.filter(\n (goal) =>\n (goal.track_type === TrackType.SAVINGS_TRACK && !goal.has_been_spent) ||\n (goal.track_type !== TrackType.SAVINGS_TRACK && !goal.is_complete),\n )\n const complete = goals.filter(\n (goal) =>\n (goal.track_type === TrackType.SAVINGS_TRACK && goal.has_been_spent) ||\n (goal.track_type !== TrackType.SAVINGS_TRACK && goal.is_complete),\n )\n\n const [isOpen, setIsOpen] = React.useState(false)\n\n let manageButtonLabel = copy.manage_saving_goals\n let drawerTitle = copy.manage_saving_drawer_title\n let manageTitle = copy.manage_saving_title\n let manageDescription = copy.manage_saving_description\n\n if (trackType === TrackType.DEBT_TRACK) {\n manageButtonLabel = copy.manage_debt_goals\n drawerTitle = copy.manage_debt_drawer_title\n manageTitle = copy.manage_debt_title\n manageDescription = copy.manage_debt_description\n } else if (trackType === TrackType.RETIREMENT_TRACK) {\n manageButtonLabel = copy.manage_retirement_goals\n drawerTitle = copy.manage_retirement_drawer_title\n manageTitle = copy.manage_retirement_title\n manageDescription = copy.manage_retirement_description\n }\n\n const handleMoveGoalUp = async (goal: Goal) => {\n const reordered = [...ongoing]\n const index = reordered.findIndex((g) => g.guid === goal.guid)\n\n let newIndex = index - 1\n if (newIndex < 0) {\n newIndex = reordered.length - 1\n }\n\n reordered.splice(newIndex, 0, reordered.splice(index, 1)[0])\n\n for (let i = 0; i < reordered.length; i++) {\n reordered[i].position = i + 1\n }\n\n await reorderGoals(reordered)\n await loadGoals()\n }\n\n return (\n <Stack>\n <Button endIcon={<ChevronRight />} onClick={() => setIsOpen(true)}>\n {manageButtonLabel}\n </Button>\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n title={drawerTitle}\n >\n <Stack>\n <Stack m={24}>\n <H3>{manageTitle}</H3>\n <P color=\"text.secondary\" variant=\"subtitle2\">\n {manageDescription}\n </P>\n </Stack>\n\n <ContributionAction trackType={trackType} />\n\n <Text bold={true} sx={{ mb: 4, mx: 24, mt: 12 }} variant=\"caption\">\n {copy.goal_priority}\n </Text>\n\n <List sx={{ bgcolor: 'background.paper' }}>\n {ongoing.map((goal, index) => {\n const isLast = index >= ongoing.length - 1\n return (\n <Stack key={`ongoing-${goal.guid}`}>\n <OngoingListItem goal={goal} index={index} onUpClick={handleMoveGoalUp} />\n <Divider variant={isLast ? 'fullWidth' : 'inset'} />\n </Stack>\n )\n })}\n </List>\n\n {trackType !== TrackType.RETIREMENT_TRACK && complete.length > 0 && (\n <Stack>\n <Text bold={true} sx={{ mb: 4, mx: 24, mt: 12 }} variant=\"caption\">\n {copy.complete_title}\n </Text>\n\n <List sx={{ bgcolor: 'background.paper' }}>\n {complete.map((goal, index) => {\n const isLast = index > ongoing.length - 1\n return (\n <Stack key={`complete-${goal.guid}`}>\n <CompleteListItem goal={goal} />\n <Divider variant={isLast ? 'fullWidth' : 'inset'} />\n </Stack>\n )\n })}\n </List>\n </Stack>\n )}\n </Stack>\n </Drawer>\n </Stack>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AAsBA,IAAa,IAAA,CAAe,EAAE,WAAA,EAAA,MAAiC;AAC7D,QAAM,EAAE,OAAO,GAAM,QAAQ,EAAA,IAAe,EAAmB,GACzD,EAAE,WAAA,GAAW,cAAc,GAAU,cAAA,EAAA,IAAiB,EAAa,GAEnE,IAAQ,EAAS,OAAA,CAAQ,MAAS,EAAK,eAAe,CAAS,GAC/D,IAAU,EAAM,OAAA,CACnB,MACE,EAAK,eAAe,EAAU,iBAAiB,CAAC,EAAK,kBACrD,EAAK,eAAe,EAAU,iBAAiB,CAAC,EAAK,WAC1D,GACM,IAAW,EAAM,OAAA,CACpB,MACE,EAAK,eAAe,EAAU,iBAAiB,EAAK,kBACpD,EAAK,eAAe,EAAU,iBAAiB,EAAK,WACzD,GAEM,CAAC,GAAQ,CAAA,IAAa,EAAM,SAAS,EAAK;AAEhD,MAAI,IAAoB,EAAK,qBACzB,IAAc,EAAK,4BACnB,IAAc,EAAK,qBACnB,IAAoB,EAAK;AAE7B,EAAI,MAAc,EAAU,cAC1B,IAAoB,EAAK,mBACzB,IAAc,EAAK,0BACnB,IAAc,EAAK,mBACnB,IAAoB,EAAK,2BAChB,MAAc,EAAU,qBACjC,IAAoB,EAAK,yBACzB,IAAc,EAAK,gCACnB,IAAc,EAAK,yBACnB,IAAoB,EAAK;AAG3B,QAAM,IAAmB,OAAO,MAAe;AAC7C,UAAM,IAAY,CAAC,GAAG,CAAO,GACvB,IAAQ,EAAU,UAAA,CAAW,MAAM,EAAE,SAAS,EAAK,IAAI;AAE7D,QAAI,IAAW,IAAQ;AACvB,IAAI,IAAW,MACb,IAAW,EAAU,SAAS,IAGhC,EAAU,OAAO,GAAU,GAAG,EAAU,OAAO,GAAO,CAAC,EAAE,CAAA,CAAE;AAE3D,aAAS,IAAI,GAAG,IAAI,EAAU,QAAQ,IACpC,CAAA,EAAU,CAAA,EAAG,WAAW,IAAI;AAG9B,UAAM,EAAa,CAAS,GAC5B,MAAM,EAAU;AAAA,EAClB;AAEA,SACE,gBAAA,EAAC,GAAD,EAAA,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,IAAQ,SAAS,gBAAA,EAAC,GAAD,CAAe,CAAA;AAAA,IAAG,SAAA,MAAe,EAAU,EAAI;AAAA,
|
|
1
|
+
{"version":3,"file":"ManageGoals.es.js","names":[],"sources":["../../../src/goals/components/ManageGoals.tsx"],"sourcesContent":["import React from 'react'\n\nimport Button from '@mui/material/Button'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\n\nimport { ChevronRight } from '@mxenabled/mx-icons'\n\nimport { H3, P, Text } from '@mxenabled/mxui'\n\nimport { Drawer, useGlobalCopyStore, useGoalStore } from '../../common'\nimport { Goal, TrackType } from '../../core'\n\nimport { ContributionAction } from './actions/ContributionAction'\nimport { OngoingListItem } from './managegoals/OngoingListItem'\nimport { CompleteListItem } from './managegoals/CompleteListItem'\n\ninterface ManageGoalProps {\n trackType: TrackType\n}\n\nexport const ManageGoals = ({ trackType }: ManageGoalProps) => {\n const { goals: copy, common: commonCopy } = useGlobalCopyStore()\n const { loadGoals, orderedGoals: allGoals, reorderGoals } = useGoalStore()\n\n const goals = allGoals.filter((goal) => goal.track_type === trackType)\n const ongoing = goals.filter(\n (goal) =>\n (goal.track_type === TrackType.SAVINGS_TRACK && !goal.has_been_spent) ||\n (goal.track_type !== TrackType.SAVINGS_TRACK && !goal.is_complete),\n )\n const complete = goals.filter(\n (goal) =>\n (goal.track_type === TrackType.SAVINGS_TRACK && goal.has_been_spent) ||\n (goal.track_type !== TrackType.SAVINGS_TRACK && goal.is_complete),\n )\n\n const [isOpen, setIsOpen] = React.useState(false)\n\n let manageButtonLabel = copy.manage_saving_goals\n let drawerTitle = copy.manage_saving_drawer_title\n let manageTitle = copy.manage_saving_title\n let manageDescription = copy.manage_saving_description\n\n if (trackType === TrackType.DEBT_TRACK) {\n manageButtonLabel = copy.manage_debt_goals\n drawerTitle = copy.manage_debt_drawer_title\n manageTitle = copy.manage_debt_title\n manageDescription = copy.manage_debt_description\n } else if (trackType === TrackType.RETIREMENT_TRACK) {\n manageButtonLabel = copy.manage_retirement_goals\n drawerTitle = copy.manage_retirement_drawer_title\n manageTitle = copy.manage_retirement_title\n manageDescription = copy.manage_retirement_description\n }\n\n const handleMoveGoalUp = async (goal: Goal) => {\n const reordered = [...ongoing]\n const index = reordered.findIndex((g) => g.guid === goal.guid)\n\n let newIndex = index - 1\n if (newIndex < 0) {\n newIndex = reordered.length - 1\n }\n\n reordered.splice(newIndex, 0, reordered.splice(index, 1)[0])\n\n for (let i = 0; i < reordered.length; i++) {\n reordered[i].position = i + 1\n }\n\n await reorderGoals(reordered)\n await loadGoals()\n }\n\n return (\n <Stack>\n <Button endIcon={<ChevronRight />} onClick={() => setIsOpen(true)}>\n {manageButtonLabel}\n </Button>\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n title={drawerTitle}\n >\n <Stack>\n <Stack m={24}>\n <H3>{manageTitle}</H3>\n <P color=\"text.secondary\" variant=\"subtitle2\">\n {manageDescription}\n </P>\n </Stack>\n\n <ContributionAction trackType={trackType} />\n\n <Text bold={true} sx={{ mb: 4, mx: 24, mt: 12 }} variant=\"caption\">\n {copy.goal_priority}\n </Text>\n\n <List sx={{ bgcolor: 'background.paper' }}>\n {ongoing.map((goal, index) => {\n const isLast = index >= ongoing.length - 1\n return (\n <Stack key={`ongoing-${goal.guid}`}>\n <OngoingListItem goal={goal} index={index} onUpClick={handleMoveGoalUp} />\n <Divider variant={isLast ? 'fullWidth' : 'inset'} />\n </Stack>\n )\n })}\n </List>\n\n {trackType !== TrackType.RETIREMENT_TRACK && complete.length > 0 && (\n <Stack>\n <Text bold={true} sx={{ mb: 4, mx: 24, mt: 12 }} variant=\"caption\">\n {copy.complete_title}\n </Text>\n\n <List sx={{ bgcolor: 'background.paper' }}>\n {complete.map((goal, index) => {\n const isLast = index > ongoing.length - 1\n return (\n <Stack key={`complete-${goal.guid}`}>\n <CompleteListItem goal={goal} />\n <Divider variant={isLast ? 'fullWidth' : 'inset'} />\n </Stack>\n )\n })}\n </List>\n </Stack>\n )}\n </Stack>\n </Drawer>\n </Stack>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabTitle.es.js","names":[],"sources":["../../../src/goals/components/TabTitle.tsx"],"sourcesContent":["import Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\ninterface TabTitleProps {\n title: string\n subtitle: string\n}\n\nexport function TabTitle({ title, subtitle }: TabTitleProps) {\n return (\n <Stack>\n <Text bold={true} variant=\"body1\">\n {title}\n </Text>\n <Text sx={{ fontWeight: 400 }} variant=\"body1\">\n {subtitle}\n </Text>\n </Stack>\n )\n}\n"],"mappings":";;;AASA,SAAgB,EAAS,EAAE,OAAA,GAAO,UAAA,EAAA,GAA2B;AAC3D,SACE,gBAAA,EAAC,GAAD,EAAA,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,IAAM,MAAM;AAAA,IAAM,SAAQ;AAAA,
|
|
1
|
+
{"version":3,"file":"TabTitle.es.js","names":[],"sources":["../../../src/goals/components/TabTitle.tsx"],"sourcesContent":["import Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\ninterface TabTitleProps {\n title: string\n subtitle: string\n}\n\nexport function TabTitle({ title, subtitle }: TabTitleProps) {\n return (\n <Stack>\n <Text bold={true} variant=\"body1\">\n {title}\n </Text>\n <Text sx={{ fontWeight: 400 }} variant=\"body1\">\n {subtitle}\n </Text>\n </Stack>\n )\n}\n"],"mappings":";;;AASA,SAAgB,EAAS,EAAE,OAAA,GAAO,UAAA,EAAA,GAA2B;AAC3D,SACE,gBAAA,EAAC,GAAD,EAAA,UAAA,CACE,gBAAA,EAAC,GAAD;AAAA,IAAM,MAAM;AAAA,IAAM,SAAQ;AAAA,IACvB,UAAA;AAAA,EACG,CAAA,GACN,gBAAA,EAAC,GAAD;AAAA,IAAM,IAAI,EAAE,YAAY,IAAI;AAAA,IAAG,SAAQ;AAAA,IACpC,UAAA;AAAA,EACG,CAAA,CACD,EAAA,CAAA;AAEX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountAction.es.js","names":[],"sources":["../../../../src/goals/components/actions/AccountAction.tsx"],"sourcesContent":["import ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { InstitutionLogo } from '@mxenabled/mxui'\n\nimport { useAccountDisplayName } from '../../../common'\nimport { Account } from '../../../core'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\n\ninterface AccountActionProps {\n account: Account\n}\n\nexport const AccountAction = ({ account }: AccountActionProps) => {\n const displayName = useAccountDisplayName(account)\n\n return (\n <ListItem sx={{ bgcolor: 'background.paper', p: 24 }}>\n <ListItemAvatar>\n <InstitutionLogo\n alt={account.name || ''}\n institutionGuid={account.institution_guid || ''}\n />\n </ListItemAvatar>\n <ListItemText\n primary={displayName}\n secondary={formatCurrency(account.balance || 0, '0,0.00')}\n />\n </ListItem>\n )\n}\n"],"mappings":";;;;;;;AAcA,IAAa,IAAA,CAAiB,EAAE,SAAA,EAAA,MAAkC;AAChE,QAAM,IAAc,EAAsB,CAAO;AAEjD,SACE,gBAAA,EAAC,GAAD;AAAA,IAAU,IAAI;AAAA,MAAE,SAAS;AAAA,MAAoB,GAAG;AAAA,IAAG;AAAA,
|
|
1
|
+
{"version":3,"file":"AccountAction.es.js","names":[],"sources":["../../../../src/goals/components/actions/AccountAction.tsx"],"sourcesContent":["import ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemText from '@mui/material/ListItemText'\n\nimport { InstitutionLogo } from '@mxenabled/mxui'\n\nimport { useAccountDisplayName } from '../../../common'\nimport { Account } from '../../../core'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\n\ninterface AccountActionProps {\n account: Account\n}\n\nexport const AccountAction = ({ account }: AccountActionProps) => {\n const displayName = useAccountDisplayName(account)\n\n return (\n <ListItem sx={{ bgcolor: 'background.paper', p: 24 }}>\n <ListItemAvatar>\n <InstitutionLogo\n alt={account.name || ''}\n institutionGuid={account.institution_guid || ''}\n />\n </ListItemAvatar>\n <ListItemText\n primary={displayName}\n secondary={formatCurrency(account.balance || 0, '0,0.00')}\n />\n </ListItem>\n )\n}\n"],"mappings":";;;;;;;AAcA,IAAa,IAAA,CAAiB,EAAE,SAAA,EAAA,MAAkC;AAChE,QAAM,IAAc,EAAsB,CAAO;AAEjD,SACE,gBAAA,EAAC,GAAD;AAAA,IAAU,IAAI;AAAA,MAAE,SAAS;AAAA,MAAoB,GAAG;AAAA,IAAG;AAAA,IAAnD,UAAA,CACE,gBAAA,EAAC,GAAD,EAAA,UACE,gBAAA,EAAC,GAAD;AAAA,MACE,KAAK,EAAQ,QAAQ;AAAA,MACrB,iBAAiB,EAAQ,oBAAoB;AAAA,IAC9C,CAAA,EACa,CAAA,GAChB,gBAAA,EAAC,GAAD;AAAA,MACE,SAAS;AAAA,MACT,WAAW,EAAe,EAAQ,WAAW,GAAG,QAAQ;AAAA,IACzD,CAAA,CACO;AAAA;AAEd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddRetirementAccountAction.es.js","names":[],"sources":["../../../../src/goals/components/actions/AddRetirementAccountAction.tsx"],"sourcesContent":["import React from 'react'\n\nimport Divider from '@mui/material/Divider'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\n\nimport { AddBox, ChevronRight } from '@mxenabled/mx-icons'\n\nimport { useAccountStore, useGlobalCopyStore, useGoalStore } from '../../../common'\nimport { Account, Goal, RetirementGoalAccount } from '../../../core'\n\nimport { AccountSelectionDrawer } from '../AccountSelectionDrawer'\nimport { AccountAction } from './AccountAction'\n\ninterface AddRetirementAccountActionProps {\n goal: Goal\n}\n\nexport const AddRetirementAccountAction = ({ goal }: AddRetirementAccountActionProps) => {\n const { goals: copy } = useGlobalCopyStore()\n const { visibleRetirementAccounts: retirementAccounts } = useAccountStore()\n const {\n addRetirementGoalAccount,\n newRetirementGoalAccounts,\n retirementGoalAccounts,\n selectedGoal,\n setAlert,\n setNewRetirementGoalAccounts,\n setSelectedGoal,\n } = useGoalStore()\n\n const [isOpen, setIsOpen] = React.useState(false)\n\n const isNew = !goal.guid\n const accounts = retirementAccounts.filter((a) =>\n isNew\n ? newRetirementGoalAccounts.find((rga) => rga.account_guid === a.guid)\n : retirementGoalAccounts.find((rga) => rga.account_guid === a.guid),\n )\n\n const availableAccounts = retirementAccounts.filter(\n (a) => !retirementGoalAccounts.find((rga) => rga.account_guid === a.guid),\n )\n\n const handleSave = async (accounts: Account[]) => {\n const retirementAccounts = accounts.map((account) => ({\n account_guid: account.guid,\n retirement_goal_guid: goal.guid,\n })) as RetirementGoalAccount[]\n\n if (isNew) {\n setNewRetirementGoalAccounts(retirementAccounts)\n } else {\n for (const account of retirementAccounts) {\n await addRetirementGoalAccount(account)\n setAlert(copy.alert_account_added)\n }\n }\n setSelectedGoal({\n ...selectedGoal!,\n current_amount: accounts.reduce((sum, account) => sum + (account.balance || 0), 0),\n })\n setIsOpen(false)\n }\n\n return (\n <Stack>\n {accounts.map((account) => (\n <Stack key={account.guid}>\n <AccountAction account={account} />\n <Divider />\n </Stack>\n ))}\n <ListItem disableGutters={true} disablePadding={true} sx={{ bgcolor: 'background.paper' }}>\n <ListItemButton onClick={() => setIsOpen(true)}>\n <ListItemText>\n <Stack alignItems=\"center\" color=\"primary.main\" direction=\"row\" gap={8}>\n <AddBox filled={true} />\n {copy.details_add_account}\n </Stack>\n </ListItemText>\n <ChevronRight color=\"primary\" />\n </ListItemButton>\n </ListItem>\n\n <AccountSelectionDrawer\n accounts={availableAccounts}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n onSave={handleSave}\n title={copy.add_select_accounts}\n />\n </Stack>\n )\n}\n"],"mappings":";;;;;;;;;;;AAoBA,IAAa,IAAA,CAA8B,EAAE,MAAA,EAAA,MAA4C;AACvF,QAAM,EAAE,OAAO,EAAA,IAAS,EAAmB,GACrC,EAAE,2BAA2B,EAAA,IAAuB,EAAgB,GACpE,EACJ,0BAAA,GACA,2BAAA,GACA,wBAAA,GACA,cAAA,GACA,UAAA,GACA,8BAAA,GACA,iBAAA,EAAA,IACE,EAAa,GAEX,CAAC,GAAQ,CAAA,IAAa,EAAM,SAAS,EAAK,GAE1C,IAAQ,CAAC,EAAK,MACd,IAAW,EAAmB,OAAA,CAAQ,MAC1C,IACI,EAA0B,KAAA,CAAM,MAAQ,EAAI,iBAAiB,EAAE,IAAI,IACnE,EAAuB,KAAA,CAAM,MAAQ,EAAI,iBAAiB,EAAE,IAAI,CACtE,GAEM,IAAoB,EAAmB,OAAA,CAC1C,MAAM,CAAC,EAAuB,KAAA,CAAM,MAAQ,EAAI,iBAAiB,EAAE,IAAI,CAC1E,GAEM,IAAa,OAAO,MAAwB;AAChD,UAAM,IAAqB,EAAS,IAAA,CAAK,OAAa;AAAA,MACpD,cAAc,EAAQ;AAAA,MACtB,sBAAsB,EAAK;AAAA,IAC7B,EAAE;AAEF,QAAI,EACF,CAAA,EAA6B,CAAkB;AAAA,QAE/C,YAAW,KAAW;AACpB,YAAM,EAAyB,CAAO,GACtC,EAAS,EAAK,mBAAmB;AAGrC,IAAA,EAAgB;AAAA,MACd,GAAG;AAAA,MACH,gBAAgB,EAAS,OAAA,CAAQ,GAAK,MAAY,KAAO,EAAQ,WAAW,IAAI,CAAC;AAAA,IACnF,CAAC,GACD,EAAU,EAAK;AAAA,EACjB;AAEA,SACE,gBAAA,EAAC,GAAD,EAAA,UAAA;AAAA,IACG,EAAS,IAAA,CAAK,MACb,gBAAA,EAAC,GAAD,EAAA,UAAA,CACE,gBAAA,EAAC,GAAD,EAAwB,SAAA,EAAU,CAAA,GAClC,gBAAA,EAAC,GAAD,CAAU,CAAA,CACL,EAAA,GAHK,EAAQ,IAGb,CACR;AAAA,IACD,gBAAA,EAAC,GAAD;AAAA,MAAU,gBAAgB;AAAA,MAAM,gBAAgB;AAAA,MAAM,IAAI,EAAE,SAAS,mBAAmB;AAAA,
|
|
1
|
+
{"version":3,"file":"AddRetirementAccountAction.es.js","names":[],"sources":["../../../../src/goals/components/actions/AddRetirementAccountAction.tsx"],"sourcesContent":["import React from 'react'\n\nimport Divider from '@mui/material/Divider'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\n\nimport { AddBox, ChevronRight } from '@mxenabled/mx-icons'\n\nimport { useAccountStore, useGlobalCopyStore, useGoalStore } from '../../../common'\nimport { Account, Goal, RetirementGoalAccount } from '../../../core'\n\nimport { AccountSelectionDrawer } from '../AccountSelectionDrawer'\nimport { AccountAction } from './AccountAction'\n\ninterface AddRetirementAccountActionProps {\n goal: Goal\n}\n\nexport const AddRetirementAccountAction = ({ goal }: AddRetirementAccountActionProps) => {\n const { goals: copy } = useGlobalCopyStore()\n const { visibleRetirementAccounts: retirementAccounts } = useAccountStore()\n const {\n addRetirementGoalAccount,\n newRetirementGoalAccounts,\n retirementGoalAccounts,\n selectedGoal,\n setAlert,\n setNewRetirementGoalAccounts,\n setSelectedGoal,\n } = useGoalStore()\n\n const [isOpen, setIsOpen] = React.useState(false)\n\n const isNew = !goal.guid\n const accounts = retirementAccounts.filter((a) =>\n isNew\n ? newRetirementGoalAccounts.find((rga) => rga.account_guid === a.guid)\n : retirementGoalAccounts.find((rga) => rga.account_guid === a.guid),\n )\n\n const availableAccounts = retirementAccounts.filter(\n (a) => !retirementGoalAccounts.find((rga) => rga.account_guid === a.guid),\n )\n\n const handleSave = async (accounts: Account[]) => {\n const retirementAccounts = accounts.map((account) => ({\n account_guid: account.guid,\n retirement_goal_guid: goal.guid,\n })) as RetirementGoalAccount[]\n\n if (isNew) {\n setNewRetirementGoalAccounts(retirementAccounts)\n } else {\n for (const account of retirementAccounts) {\n await addRetirementGoalAccount(account)\n setAlert(copy.alert_account_added)\n }\n }\n setSelectedGoal({\n ...selectedGoal!,\n current_amount: accounts.reduce((sum, account) => sum + (account.balance || 0), 0),\n })\n setIsOpen(false)\n }\n\n return (\n <Stack>\n {accounts.map((account) => (\n <Stack key={account.guid}>\n <AccountAction account={account} />\n <Divider />\n </Stack>\n ))}\n <ListItem disableGutters={true} disablePadding={true} sx={{ bgcolor: 'background.paper' }}>\n <ListItemButton onClick={() => setIsOpen(true)}>\n <ListItemText>\n <Stack alignItems=\"center\" color=\"primary.main\" direction=\"row\" gap={8}>\n <AddBox filled={true} />\n {copy.details_add_account}\n </Stack>\n </ListItemText>\n <ChevronRight color=\"primary\" />\n </ListItemButton>\n </ListItem>\n\n <AccountSelectionDrawer\n accounts={availableAccounts}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n onSave={handleSave}\n title={copy.add_select_accounts}\n />\n </Stack>\n )\n}\n"],"mappings":";;;;;;;;;;;AAoBA,IAAa,IAAA,CAA8B,EAAE,MAAA,EAAA,MAA4C;AACvF,QAAM,EAAE,OAAO,EAAA,IAAS,EAAmB,GACrC,EAAE,2BAA2B,EAAA,IAAuB,EAAgB,GACpE,EACJ,0BAAA,GACA,2BAAA,GACA,wBAAA,GACA,cAAA,GACA,UAAA,GACA,8BAAA,GACA,iBAAA,EAAA,IACE,EAAa,GAEX,CAAC,GAAQ,CAAA,IAAa,EAAM,SAAS,EAAK,GAE1C,IAAQ,CAAC,EAAK,MACd,IAAW,EAAmB,OAAA,CAAQ,MAC1C,IACI,EAA0B,KAAA,CAAM,MAAQ,EAAI,iBAAiB,EAAE,IAAI,IACnE,EAAuB,KAAA,CAAM,MAAQ,EAAI,iBAAiB,EAAE,IAAI,CACtE,GAEM,IAAoB,EAAmB,OAAA,CAC1C,MAAM,CAAC,EAAuB,KAAA,CAAM,MAAQ,EAAI,iBAAiB,EAAE,IAAI,CAC1E,GAEM,IAAa,OAAO,MAAwB;AAChD,UAAM,IAAqB,EAAS,IAAA,CAAK,OAAa;AAAA,MACpD,cAAc,EAAQ;AAAA,MACtB,sBAAsB,EAAK;AAAA,IAC7B,EAAE;AAEF,QAAI,EACF,CAAA,EAA6B,CAAkB;AAAA,QAE/C,YAAW,KAAW;AACpB,YAAM,EAAyB,CAAO,GACtC,EAAS,EAAK,mBAAmB;AAGrC,IAAA,EAAgB;AAAA,MACd,GAAG;AAAA,MACH,gBAAgB,EAAS,OAAA,CAAQ,GAAK,MAAY,KAAO,EAAQ,WAAW,IAAI,CAAC;AAAA,IACnF,CAAC,GACD,EAAU,EAAK;AAAA,EACjB;AAEA,SACE,gBAAA,EAAC,GAAD,EAAA,UAAA;AAAA,IACG,EAAS,IAAA,CAAK,MACb,gBAAA,EAAC,GAAD,EAAA,UAAA,CACE,gBAAA,EAAC,GAAD,EAAwB,SAAA,EAAU,CAAA,GAClC,gBAAA,EAAC,GAAD,CAAU,CAAA,CACL,EAAA,GAHK,EAAQ,IAGb,CACR;AAAA,IACD,gBAAA,EAAC,GAAD;AAAA,MAAU,gBAAgB;AAAA,MAAM,gBAAgB;AAAA,MAAM,IAAI,EAAE,SAAS,mBAAmB;AAAA,MACtF,UAAA,gBAAA,EAAC,GAAD;AAAA,QAAgB,SAAA,MAAe,EAAU,EAAI;AAAA,QAA7C,UAAA,CACE,gBAAA,EAAC,GAAD,EAAA,UACE,gBAAA,EAAC,GAAD;AAAA,UAAO,YAAW;AAAA,UAAS,OAAM;AAAA,UAAe,WAAU;AAAA,UAAM,KAAK;AAAA,UAArE,UAAA,CACE,gBAAA,EAAC,GAAD,EAAQ,QAAQ,GAAO,CAAA,GACtB,EAAK,mBACD;AAAA,QACK,CAAA,EAAA,CAAA,GACd,gBAAA,EAAC,GAAD,EAAc,OAAM,UAAW,CAAA,CACjB;AAAA;IACR,CAAA;AAAA,IAEV,gBAAA,EAAC,GAAD;AAAA,MACE,UAAU;AAAA,MACF,QAAA;AAAA,MACR,SAAA,MAAe,EAAU,EAAK;AAAA,MAC9B,QAAQ;AAAA,MACR,OAAO,EAAK;AAAA,IACb,CAAA;AAAA,EACI,EAAA,CAAA;AAEX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AmountToSaveAction.es.js","names":[],"sources":["../../../../src/goals/components/actions/AmountToSaveAction.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { CurrencyInput, ListItemAction, useGlobalCopyStore, useGoalStore } from '../../../common'\nimport { Goal, TrackType } from '../../../core'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\n\ninterface AmountToSaveActionProps {\n goal: Goal\n}\n\nexport const AmountToSaveAction = observer(({ goal }: AmountToSaveActionProps) => {\n const { goals: copy } = useGlobalCopyStore()\n const { setAlert, setSelectedGoal, updateGoal, updateRetirementGoal } = useGoalStore()\n\n const [amount, setAmount] = React.useState<number>(goal.amount)\n\n const isNew = !goal.guid\n const isInvalid = amount < 0 || amount > 99999999.99\n const isDisabled =\n (goal.track_type === TrackType.SAVINGS_TRACK && goal.has_been_spent) ||\n (goal.track_type !== TrackType.SAVINGS_TRACK && goal.is_complete)\n\n const handleSave = async () => {\n const updatedGoal = { ...goal, amount }\n goal.amount = amount\n if (isNew) {\n setSelectedGoal(updatedGoal)\n } else {\n if (goal.track_type !== TrackType.RETIREMENT_TRACK) {\n await updateGoal(updatedGoal)\n } else {\n await updateRetirementGoal(updatedGoal)\n }\n\n setAlert(copy.alert_goal_updated_amount)\n }\n }\n\n const handleCancel = () => {\n setTimeout(() => {\n setAmount(goal.amount)\n }, 250)\n }\n\n return (\n <ListItemAction\n isDisabled={isDisabled}\n isSaveDisabled={isInvalid}\n label={copy.details_amount_to_save}\n onCancel={handleCancel}\n onSave={handleSave}\n primaryText={copy.details_amount_to_save}\n secondaryText={formatCurrency(goal.amount, '0,0')}\n zeroStateText={isNew && goal.amount === 0 ? copy.add_amount : undefined}\n >\n <CurrencyInput\n amount={amount}\n autoFocus={true}\n error={isInvalid}\n fullWidth={true}\n minAmount={0}\n setAmount={(v) => setAmount(!isNaN(Number(v)) ? Number(v) : amount)}\n sx={{ '.MuiTypography-body1': { p: 0 } }}\n />\n </ListItemAction>\n )\n})\n"],"mappings":";;;;;;;;AAWA,IAAa,IAAqB,EAAA,CAAU,EAAE,MAAA,EAAA,MAAoC;AAChF,QAAM,EAAE,OAAO,EAAA,IAAS,EAAmB,GACrC,EAAE,UAAA,GAAU,iBAAA,GAAiB,YAAA,GAAY,sBAAA,EAAA,IAAyB,EAAa,GAE/E,CAAC,GAAQ,CAAA,IAAa,EAAM,SAAiB,EAAK,MAAM,GAExD,IAAQ,CAAC,EAAK,MACd,IAAY,IAAS,KAAK,IAAS,eACnC,IACH,EAAK,eAAe,EAAU,iBAAiB,EAAK,kBACpD,EAAK,eAAe,EAAU,iBAAiB,EAAK,aAEjD,IAAa,YAAY;AAC7B,UAAM,IAAc;AAAA,MAAE,GAAG;AAAA,MAAM,QAAA;AAAA,IAAO;AACtC,IAAA,EAAK,SAAS,GACV,IACF,EAAgB,CAAW,KAEvB,EAAK,eAAe,EAAU,mBAChC,MAAM,EAAW,CAAW,IAE5B,MAAM,EAAqB,CAAW,GAGxC,EAAS,EAAK,yBAAyB;AAAA,EAE3C,GAEM,IAAA,MAAqB;AACzB,eAAA,MAAiB;AACf,MAAA,EAAU,EAAK,MAAM;AAAA,IACvB,GAAG,GAAG;AAAA,EACR;AAEA,SACE,gBAAA,EAAC,GAAD;AAAA,IACc,YAAA;AAAA,IACZ,gBAAgB;AAAA,IAChB,OAAO,EAAK;AAAA,IACZ,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,aAAa,EAAK;AAAA,IAClB,eAAe,EAAe,EAAK,QAAQ,KAAK;AAAA,IAChD,eAAe,KAAS,EAAK,WAAW,IAAI,EAAK,aAAa;AAAA,
|
|
1
|
+
{"version":3,"file":"AmountToSaveAction.es.js","names":[],"sources":["../../../../src/goals/components/actions/AmountToSaveAction.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { CurrencyInput, ListItemAction, useGlobalCopyStore, useGoalStore } from '../../../common'\nimport { Goal, TrackType } from '../../../core'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\n\ninterface AmountToSaveActionProps {\n goal: Goal\n}\n\nexport const AmountToSaveAction = observer(({ goal }: AmountToSaveActionProps) => {\n const { goals: copy } = useGlobalCopyStore()\n const { setAlert, setSelectedGoal, updateGoal, updateRetirementGoal } = useGoalStore()\n\n const [amount, setAmount] = React.useState<number>(goal.amount)\n\n const isNew = !goal.guid\n const isInvalid = amount < 0 || amount > 99999999.99\n const isDisabled =\n (goal.track_type === TrackType.SAVINGS_TRACK && goal.has_been_spent) ||\n (goal.track_type !== TrackType.SAVINGS_TRACK && goal.is_complete)\n\n const handleSave = async () => {\n const updatedGoal = { ...goal, amount }\n goal.amount = amount\n if (isNew) {\n setSelectedGoal(updatedGoal)\n } else {\n if (goal.track_type !== TrackType.RETIREMENT_TRACK) {\n await updateGoal(updatedGoal)\n } else {\n await updateRetirementGoal(updatedGoal)\n }\n\n setAlert(copy.alert_goal_updated_amount)\n }\n }\n\n const handleCancel = () => {\n setTimeout(() => {\n setAmount(goal.amount)\n }, 250)\n }\n\n return (\n <ListItemAction\n isDisabled={isDisabled}\n isSaveDisabled={isInvalid}\n label={copy.details_amount_to_save}\n onCancel={handleCancel}\n onSave={handleSave}\n primaryText={copy.details_amount_to_save}\n secondaryText={formatCurrency(goal.amount, '0,0')}\n zeroStateText={isNew && goal.amount === 0 ? copy.add_amount : undefined}\n >\n <CurrencyInput\n amount={amount}\n autoFocus={true}\n error={isInvalid}\n fullWidth={true}\n minAmount={0}\n setAmount={(v) => setAmount(!isNaN(Number(v)) ? Number(v) : amount)}\n sx={{ '.MuiTypography-body1': { p: 0 } }}\n />\n </ListItemAction>\n )\n})\n"],"mappings":";;;;;;;;AAWA,IAAa,IAAqB,EAAA,CAAU,EAAE,MAAA,EAAA,MAAoC;AAChF,QAAM,EAAE,OAAO,EAAA,IAAS,EAAmB,GACrC,EAAE,UAAA,GAAU,iBAAA,GAAiB,YAAA,GAAY,sBAAA,EAAA,IAAyB,EAAa,GAE/E,CAAC,GAAQ,CAAA,IAAa,EAAM,SAAiB,EAAK,MAAM,GAExD,IAAQ,CAAC,EAAK,MACd,IAAY,IAAS,KAAK,IAAS,eACnC,IACH,EAAK,eAAe,EAAU,iBAAiB,EAAK,kBACpD,EAAK,eAAe,EAAU,iBAAiB,EAAK,aAEjD,IAAa,YAAY;AAC7B,UAAM,IAAc;AAAA,MAAE,GAAG;AAAA,MAAM,QAAA;AAAA,IAAO;AACtC,IAAA,EAAK,SAAS,GACV,IACF,EAAgB,CAAW,KAEvB,EAAK,eAAe,EAAU,mBAChC,MAAM,EAAW,CAAW,IAE5B,MAAM,EAAqB,CAAW,GAGxC,EAAS,EAAK,yBAAyB;AAAA,EAE3C,GAEM,IAAA,MAAqB;AACzB,eAAA,MAAiB;AACf,MAAA,EAAU,EAAK,MAAM;AAAA,IACvB,GAAG,GAAG;AAAA,EACR;AAEA,SACE,gBAAA,EAAC,GAAD;AAAA,IACc,YAAA;AAAA,IACZ,gBAAgB;AAAA,IAChB,OAAO,EAAK;AAAA,IACZ,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,aAAa,EAAK;AAAA,IAClB,eAAe,EAAe,EAAK,QAAQ,KAAK;AAAA,IAChD,eAAe,KAAS,EAAK,WAAW,IAAI,EAAK,aAAa;AAAA,IAE9D,UAAA,gBAAA,EAAC,GAAD;AAAA,MACU,QAAA;AAAA,MACR,WAAW;AAAA,MACX,OAAO;AAAA,MACP,WAAW;AAAA,MACX,WAAW;AAAA,MACX,WAAA,CAAY,MAAM,EAAW,MAAM,OAAO,CAAC,CAAC,IAAgB,IAAZ,OAAO,CAAC,CAAU;AAAA,MAClE,IAAI,EAAE,wBAAwB,EAAE,GAAG,EAAE,EAAE;AAAA,IACxC,CAAA;AAAA,EACa,CAAA;AAEpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BirthdayAction.es.js","names":[],"sources":["../../../../src/goals/components/actions/BirthdayAction.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { getUnixTime } from 'date-fns/getUnixTime'\nimport { isValid } from 'date-fns/isValid'\n\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3'\nimport { DatePicker, DateValidationError } from '@mui/x-date-pickers'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\n\nimport { ListItemAction, useGlobalCopyStore, useGoalStore, useUserStore } from '../../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../../core/constants'\nimport { Goal } from '../../../core'\n\ninterface BirthdayActionProps {\n goal: Goal\n}\n\nexport const BirthdayAction = observer(({ goal }: BirthdayActionProps) => {\n const { goals: copy } = useGlobalCopyStore()\n const { user, updateUser } = useUserStore()\n const { setAlert } = useGoalStore()\n\n const [birthday, setBirthday] = React.useState<Date | null>(fromUnixTime(user.birthday ?? 0))\n const [error, setError] = React.useState<DateValidationError>(null)\n\n const isDisabled = goal.is_complete\n\n const handleSave = async () => {\n if (birthday && isValid(birthday)) {\n await updateUser({ ...user, birthday: getUnixTime(birthday) })\n setAlert(copy.alert_goal_updated_birthday)\n }\n }\n\n return (\n <ListItemAction\n isDisabled={isDisabled}\n isSaveDisabled={Boolean(error)}\n label={copy.details_birthday}\n onSave={handleSave}\n primaryText={copy.details_birthday}\n secondaryText={`${formatDate(fromUnixTime(user.birthday ?? 0), DATE_FORMATS_INTL.MONTH_DAY_YEAR)}`}\n zeroStateText={!goal.guid && !user.birthday ? copy.add_birthday : undefined}\n >\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <DatePicker\n label={copy.details_birthday}\n onChange={setBirthday}\n onError={(error) => setError(error)}\n sx={{ width: '100%' }}\n value={birthday}\n />\n </LocalizationProvider>\n </ListItemAction>\n )\n})\n"],"mappings":";;;;;;;;;;;;AAkBA,IAAa,IAAiB,EAAA,CAAU,EAAE,MAAA,EAAA,MAAgC;AACxE,QAAM,EAAE,OAAO,EAAA,IAAS,EAAmB,GACrC,EAAE,MAAA,GAAM,YAAA,EAAA,IAAe,EAAa,GACpC,EAAE,UAAA,EAAA,IAAa,EAAa,GAE5B,CAAC,GAAU,CAAA,IAAe,EAAM,SAAsB,EAAa,EAAK,YAAY,CAAC,CAAC,GACtF,CAAC,GAAO,CAAA,IAAY,EAAM,SAA8B,IAAI,GAE5D,IAAa,EAAK,aAElB,IAAa,YAAY;AAC7B,IAAI,KAAY,EAAQ,CAAQ,MAC9B,MAAM,EAAW;AAAA,MAAE,GAAG;AAAA,MAAM,UAAU,EAAY,CAAQ;AAAA,IAAE,CAAC,GAC7D,EAAS,EAAK,2BAA2B;AAAA,EAE7C;AAEA,SACE,gBAAA,EAAC,GAAD;AAAA,IACc,YAAA;AAAA,IACZ,gBAAgB,EAAQ;AAAA,IACxB,OAAO,EAAK;AAAA,IACZ,QAAQ;AAAA,IACR,aAAa,EAAK;AAAA,IAClB,eAAe,GAAG,EAAW,EAAa,EAAK,YAAY,CAAC,GAAG,EAAkB,cAAc,CAAA;AAAA,IAC/F,eAAe,CAAC,EAAK,QAAQ,CAAC,EAAK,WAAW,EAAK,eAAe;AAAA,
|
|
1
|
+
{"version":3,"file":"BirthdayAction.es.js","names":[],"sources":["../../../../src/goals/components/actions/BirthdayAction.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { getUnixTime } from 'date-fns/getUnixTime'\nimport { isValid } from 'date-fns/isValid'\n\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3'\nimport { DatePicker, DateValidationError } from '@mui/x-date-pickers'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\n\nimport { ListItemAction, useGlobalCopyStore, useGoalStore, useUserStore } from '../../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../../core/constants'\nimport { Goal } from '../../../core'\n\ninterface BirthdayActionProps {\n goal: Goal\n}\n\nexport const BirthdayAction = observer(({ goal }: BirthdayActionProps) => {\n const { goals: copy } = useGlobalCopyStore()\n const { user, updateUser } = useUserStore()\n const { setAlert } = useGoalStore()\n\n const [birthday, setBirthday] = React.useState<Date | null>(fromUnixTime(user.birthday ?? 0))\n const [error, setError] = React.useState<DateValidationError>(null)\n\n const isDisabled = goal.is_complete\n\n const handleSave = async () => {\n if (birthday && isValid(birthday)) {\n await updateUser({ ...user, birthday: getUnixTime(birthday) })\n setAlert(copy.alert_goal_updated_birthday)\n }\n }\n\n return (\n <ListItemAction\n isDisabled={isDisabled}\n isSaveDisabled={Boolean(error)}\n label={copy.details_birthday}\n onSave={handleSave}\n primaryText={copy.details_birthday}\n secondaryText={`${formatDate(fromUnixTime(user.birthday ?? 0), DATE_FORMATS_INTL.MONTH_DAY_YEAR)}`}\n zeroStateText={!goal.guid && !user.birthday ? copy.add_birthday : undefined}\n >\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <DatePicker\n label={copy.details_birthday}\n onChange={setBirthday}\n onError={(error) => setError(error)}\n sx={{ width: '100%' }}\n value={birthday}\n />\n </LocalizationProvider>\n </ListItemAction>\n )\n})\n"],"mappings":";;;;;;;;;;;;AAkBA,IAAa,IAAiB,EAAA,CAAU,EAAE,MAAA,EAAA,MAAgC;AACxE,QAAM,EAAE,OAAO,EAAA,IAAS,EAAmB,GACrC,EAAE,MAAA,GAAM,YAAA,EAAA,IAAe,EAAa,GACpC,EAAE,UAAA,EAAA,IAAa,EAAa,GAE5B,CAAC,GAAU,CAAA,IAAe,EAAM,SAAsB,EAAa,EAAK,YAAY,CAAC,CAAC,GACtF,CAAC,GAAO,CAAA,IAAY,EAAM,SAA8B,IAAI,GAE5D,IAAa,EAAK,aAElB,IAAa,YAAY;AAC7B,IAAI,KAAY,EAAQ,CAAQ,MAC9B,MAAM,EAAW;AAAA,MAAE,GAAG;AAAA,MAAM,UAAU,EAAY,CAAQ;AAAA,IAAE,CAAC,GAC7D,EAAS,EAAK,2BAA2B;AAAA,EAE7C;AAEA,SACE,gBAAA,EAAC,GAAD;AAAA,IACc,YAAA;AAAA,IACZ,gBAAgB,EAAQ;AAAA,IACxB,OAAO,EAAK;AAAA,IACZ,QAAQ;AAAA,IACR,aAAa,EAAK;AAAA,IAClB,eAAe,GAAG,EAAW,EAAa,EAAK,YAAY,CAAC,GAAG,EAAkB,cAAc,CAAA;AAAA,IAC/F,eAAe,CAAC,EAAK,QAAQ,CAAC,EAAK,WAAW,EAAK,eAAe;AAAA,IAElE,UAAA,gBAAA,EAAC,GAAD;AAAA,MAAsB,aAAa;AAAA,MACjC,UAAA,gBAAA,EAAC,GAAD;AAAA,QACE,OAAO,EAAK;AAAA,QACZ,UAAU;AAAA,QACV,SAAA,CAAU,MAAU,EAAS,CAAK;AAAA,QAClC,IAAI,EAAE,OAAO,OAAO;AAAA,QACpB,OAAO;AAAA,MACR,CAAA;AAAA,IACmB,CAAA;AAAA,EACR,CAAA;AAEpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangeAccountAction.es.js","names":[],"sources":["../../../../src/goals/components/actions/ChangeAccountAction.tsx"],"sourcesContent":["import React from 'react'\n\nimport Button from '@mui/material/Button'\nimport List from '@mui/material/List'\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 Stack from '@mui/material/Stack'\n\nimport { AddBox, ChevronRight } from '@mxenabled/mx-icons'\n\nimport { InstitutionLogo, Text } from '@mxenabled/mxui'\n\nimport {\n ConnectCard,\n Drawer,\n useAccountStore,\n useAppConfig,\n useGlobalCopyStore,\n useGoalStore,\n} from '../../../common'\nimport { type Account, Goal } from '../../../core'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../../core/utils/Localization'\n\ninterface ChangeAccountProps {\n goal: Goal\n}\n\nexport const ChangeAccountAction = ({ goal }: ChangeAccountProps) => {\n const { visibleCheckingAccounts: checkingAccounts, visibleSavingsAccounts: savingsAccounts } =\n useAccountStore()\n const { accounts: accountsCopy, goals: copy } = useGlobalCopyStore()\n const { config } = useAppConfig()\n const { setAlert, setSelectedGoal, updateGoal } = useGoalStore()\n\n const isNew = !goal.guid\n\n const [isOpen, setIsOpen] = React.useState(false)\n\n const updateAccount = async ({ balance, guid }: Account) => {\n const updatedGoal = { ...goal, account_guid: guid, current_amount: balance || 0 }\n if (isNew) {\n setSelectedGoal(updatedGoal)\n } else {\n await updateGoal(updatedGoal)\n setAlert(copy.alert_account_changed)\n }\n setIsOpen(false)\n }\n\n return (\n <Stack>\n {isNew && !goal.account_guid ? (\n <ListItem disableGutters={true} disablePadding={true} sx={{ bgcolor: 'background.paper' }}>\n <ListItemButton onClick={() => setIsOpen(true)}>\n <ListItemText>\n <Stack alignItems=\"center\" color=\"primary.main\" direction=\"row\" gap={8}>\n <AddBox filled={true} />\n {copy.details_add_account}\n </Stack>\n </ListItemText>\n <ChevronRight color=\"primary\" />\n </ListItemButton>\n </ListItem>\n ) : (\n <Stack sx={{ gap: 8, my: 24, mx: 24 }}>\n <Button onClick={() => setIsOpen(true)} variant=\"text\">\n {copy.details_change_account}\n </Button>\n <Text color=\"text.secondary\" sx={{ textAlign: 'center' }} variant=\"subtitle1\">\n {buildDynamicCopy(copy.details_change_account_description, goal.name) as string}\n </Text>\n </Stack>\n )}\n <Drawer isOpen={isOpen} onClose={() => setIsOpen(false)} title={copy.details_change_account}>\n <Stack>\n {checkingAccounts.length > 0 && (\n <Text bold={true} sx={{ mb: 4, ml: 24, mt: 12 }} variant=\"caption\">\n {accountsCopy.account_types['1']}\n </Text>\n )}\n <List sx={{ bgcolor: 'background.paper' }}>\n {checkingAccounts.map((account) => (\n <ListItem key={account.guid}>\n <ListItemButton onClick={() => updateAccount(account)}>\n <ListItemAvatar>\n <InstitutionLogo\n alt={account?.name || ''}\n institutionGuid={account?.institution_guid || ''}\n />\n </ListItemAvatar>\n <ListItemText\n primary={account?.name || account?.feed_name}\n secondary={formatCurrency(account?.balance || 0, '0,0.00')}\n />\n <ChevronRight />\n </ListItemButton>\n </ListItem>\n ))}\n </List>\n {savingsAccounts.length > 0 && (\n <Text bold={true} sx={{ mb: 4, ml: 24, mt: 12 }} variant=\"caption\">\n {accountsCopy.account_types['2']}\n </Text>\n )}\n <List sx={{ bgcolor: 'background.paper' }}>\n {savingsAccounts.map((account) => (\n <ListItem key={account.guid}>\n <ListItemButton onClick={() => updateAccount(account)}>\n <ListItemAvatar>\n <InstitutionLogo\n alt={account?.name || ''}\n institutionGuid={account?.institution_guid || ''}\n />\n </ListItemAvatar>\n <ListItemText\n primary={account?.name || account?.feed_name}\n secondary={formatCurrency(account?.balance || 0, '0,0.00')}\n />\n <ChevronRight />\n </ListItemButton>\n </ListItem>\n ))}\n </List>\n\n {config.show_connections_widget_in_master && (\n <ConnectCard\n description={copy.connect_description}\n label={copy.connect_button}\n title={copy.connect_title}\n />\n )}\n </Stack>\n </Drawer>\n </Stack>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA8BA,IAAa,KAAA,CAAuB,EAAE,MAAA,EAAA,MAA+B;AACnE,QAAM,EAAE,yBAAyB,GAAkB,wBAAwB,EAAA,IACzE,EAAgB,GACZ,EAAE,UAAU,GAAc,OAAO,EAAA,IAAS,EAAmB,GAC7D,EAAE,QAAA,EAAA,IAAW,EAAa,GAC1B,EAAE,UAAA,GAAU,iBAAA,GAAiB,YAAA,EAAA,IAAe,EAAa,GAEzD,IAAQ,CAAC,EAAK,MAEd,CAAC,GAAQ,CAAA,IAAa,EAAM,SAAS,EAAK,GAE1C,IAAgB,OAAO,EAAE,SAAA,GAAS,MAAA,EAAA,MAAoB;AAC1D,UAAM,IAAc;AAAA,MAAE,GAAG;AAAA,MAAM,cAAc;AAAA,MAAM,gBAAgB,KAAW;AAAA,IAAE;AAChF,IAAI,IACF,EAAgB,CAAW,KAE3B,MAAM,EAAW,CAAW,GAC5B,EAAS,EAAK,qBAAqB,IAErC,EAAU,EAAK;AAAA,EACjB;AAEA,SACE,gBAAA,EAAC,GAAD,EAAA,UAAA,CACG,KAAS,CAAC,EAAK,eACd,gBAAA,EAAC,GAAD;AAAA,IAAU,gBAAgB;AAAA,IAAM,gBAAgB;AAAA,IAAM,IAAI,EAAE,SAAS,mBAAmB;AAAA,
|
|
1
|
+
{"version":3,"file":"ChangeAccountAction.es.js","names":[],"sources":["../../../../src/goals/components/actions/ChangeAccountAction.tsx"],"sourcesContent":["import React from 'react'\n\nimport Button from '@mui/material/Button'\nimport List from '@mui/material/List'\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 Stack from '@mui/material/Stack'\n\nimport { AddBox, ChevronRight } from '@mxenabled/mx-icons'\n\nimport { InstitutionLogo, Text } from '@mxenabled/mxui'\n\nimport {\n ConnectCard,\n Drawer,\n useAccountStore,\n useAppConfig,\n useGlobalCopyStore,\n useGoalStore,\n} from '../../../common'\nimport { type Account, Goal } from '../../../core'\nimport { formatCurrency } from '../../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../../core/utils/Localization'\n\ninterface ChangeAccountProps {\n goal: Goal\n}\n\nexport const ChangeAccountAction = ({ goal }: ChangeAccountProps) => {\n const { visibleCheckingAccounts: checkingAccounts, visibleSavingsAccounts: savingsAccounts } =\n useAccountStore()\n const { accounts: accountsCopy, goals: copy } = useGlobalCopyStore()\n const { config } = useAppConfig()\n const { setAlert, setSelectedGoal, updateGoal } = useGoalStore()\n\n const isNew = !goal.guid\n\n const [isOpen, setIsOpen] = React.useState(false)\n\n const updateAccount = async ({ balance, guid }: Account) => {\n const updatedGoal = { ...goal, account_guid: guid, current_amount: balance || 0 }\n if (isNew) {\n setSelectedGoal(updatedGoal)\n } else {\n await updateGoal(updatedGoal)\n setAlert(copy.alert_account_changed)\n }\n setIsOpen(false)\n }\n\n return (\n <Stack>\n {isNew && !goal.account_guid ? (\n <ListItem disableGutters={true} disablePadding={true} sx={{ bgcolor: 'background.paper' }}>\n <ListItemButton onClick={() => setIsOpen(true)}>\n <ListItemText>\n <Stack alignItems=\"center\" color=\"primary.main\" direction=\"row\" gap={8}>\n <AddBox filled={true} />\n {copy.details_add_account}\n </Stack>\n </ListItemText>\n <ChevronRight color=\"primary\" />\n </ListItemButton>\n </ListItem>\n ) : (\n <Stack sx={{ gap: 8, my: 24, mx: 24 }}>\n <Button onClick={() => setIsOpen(true)} variant=\"text\">\n {copy.details_change_account}\n </Button>\n <Text color=\"text.secondary\" sx={{ textAlign: 'center' }} variant=\"subtitle1\">\n {buildDynamicCopy(copy.details_change_account_description, goal.name) as string}\n </Text>\n </Stack>\n )}\n <Drawer isOpen={isOpen} onClose={() => setIsOpen(false)} title={copy.details_change_account}>\n <Stack>\n {checkingAccounts.length > 0 && (\n <Text bold={true} sx={{ mb: 4, ml: 24, mt: 12 }} variant=\"caption\">\n {accountsCopy.account_types['1']}\n </Text>\n )}\n <List sx={{ bgcolor: 'background.paper' }}>\n {checkingAccounts.map((account) => (\n <ListItem key={account.guid}>\n <ListItemButton onClick={() => updateAccount(account)}>\n <ListItemAvatar>\n <InstitutionLogo\n alt={account?.name || ''}\n institutionGuid={account?.institution_guid || ''}\n />\n </ListItemAvatar>\n <ListItemText\n primary={account?.name || account?.feed_name}\n secondary={formatCurrency(account?.balance || 0, '0,0.00')}\n />\n <ChevronRight />\n </ListItemButton>\n </ListItem>\n ))}\n </List>\n {savingsAccounts.length > 0 && (\n <Text bold={true} sx={{ mb: 4, ml: 24, mt: 12 }} variant=\"caption\">\n {accountsCopy.account_types['2']}\n </Text>\n )}\n <List sx={{ bgcolor: 'background.paper' }}>\n {savingsAccounts.map((account) => (\n <ListItem key={account.guid}>\n <ListItemButton onClick={() => updateAccount(account)}>\n <ListItemAvatar>\n <InstitutionLogo\n alt={account?.name || ''}\n institutionGuid={account?.institution_guid || ''}\n />\n </ListItemAvatar>\n <ListItemText\n primary={account?.name || account?.feed_name}\n secondary={formatCurrency(account?.balance || 0, '0,0.00')}\n />\n <ChevronRight />\n </ListItemButton>\n </ListItem>\n ))}\n </List>\n\n {config.show_connections_widget_in_master && (\n <ConnectCard\n description={copy.connect_description}\n label={copy.connect_button}\n title={copy.connect_title}\n />\n )}\n </Stack>\n </Drawer>\n </Stack>\n )\n}\n"],"mappings":"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"}
|