@mx-cartographer/experiences 9.1.1 → 9.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/{AccountDetailsDrawer-C1hhmlmI.mjs → AccountDetailsDrawer-Cq4kiiKD.mjs} +4 -4
  3. package/dist/{AccountDetailsDrawer-C1hhmlmI.mjs.map → AccountDetailsDrawer-Cq4kiiKD.mjs.map} +1 -1
  4. package/dist/{Analytics-WeZYytR0.mjs → Analytics-D-jdcL72.mjs} +3 -3
  5. package/dist/Analytics-D-jdcL72.mjs.map +1 -0
  6. package/dist/{EmbeddedCard-DH8vQ3qN.mjs → EmbeddedCard-DCOQnTz-.mjs} +2 -2
  7. package/dist/{EmbeddedCard-DH8vQ3qN.mjs.map → EmbeddedCard-DCOQnTz-.mjs.map} +1 -1
  8. package/dist/{ExportCsvAction-C9KWH3Az.mjs → ExportCsvAction-C-IisDcv.mjs} +2 -2
  9. package/dist/{ExportCsvAction-C9KWH3Az.mjs.map → ExportCsvAction-C-IisDcv.mjs.map} +1 -1
  10. package/dist/{Help-aERwhajy.mjs → Help-zVZdcmlk.mjs} +2 -2
  11. package/dist/{Help-aERwhajy.mjs.map → Help-zVZdcmlk.mjs.map} +1 -1
  12. package/dist/{ManageIncome-Be9WHv-s.mjs → ManageIncome-B_8i71mE.mjs} +5 -5
  13. package/dist/{ManageIncome-Be9WHv-s.mjs.map → ManageIncome-B_8i71mE.mjs.map} +1 -1
  14. package/dist/{RecurringSettings-kRqAViNn.mjs → RecurringSettings-hs0YUp83.mjs} +3 -3
  15. package/dist/{RecurringSettings-kRqAViNn.mjs.map → RecurringSettings-hs0YUp83.mjs.map} +1 -1
  16. package/dist/{TransactionDetails-roZ5xLq8.mjs → TransactionDetails-DT-MQqOB.mjs} +3 -3
  17. package/dist/{TransactionDetails-roZ5xLq8.mjs.map → TransactionDetails-DT-MQqOB.mjs.map} +1 -1
  18. package/dist/{WidgetContainer-DJnp6t6c.mjs → WidgetContainer-CjdCY4sj.mjs} +21 -21
  19. package/dist/WidgetContainer-CjdCY4sj.mjs.map +1 -0
  20. package/dist/accounts/index.es.js +4 -4
  21. package/dist/budgets/index.es.js +5 -5
  22. package/dist/cashflow/index.es.js +6 -6
  23. package/dist/common/components/daterangeselector/DateRangeSelector.d.ts +5 -0
  24. package/dist/common/index.es.js +2 -2
  25. package/dist/debts/index.es.js +2 -2
  26. package/dist/finstrong/index.es.js +4 -4
  27. package/dist/goals/index.es.js +2 -2
  28. package/dist/help/index.es.js +2 -2
  29. package/dist/insights/index.es.js +2 -2
  30. package/dist/investments/index.es.js +2 -2
  31. package/dist/networth/index.es.js +78 -76
  32. package/dist/networth/index.es.js.map +1 -1
  33. package/dist/recurringtransactions/index.es.js +6 -6
  34. package/dist/settings/index.es.js +2 -2
  35. package/dist/spending/index.es.js +4 -4
  36. package/dist/transactions/index.es.js +7 -7
  37. package/dist/trends/index.es.js +5 -5
  38. package/package.json +1 -1
  39. package/dist/Analytics-WeZYytR0.mjs.map +0 -1
  40. package/dist/WidgetContainer-DJnp6t6c.mjs.map +0 -1
@@ -17,12 +17,12 @@ import { startOfToday as U } from "date-fns/startOfToday";
17
17
  import { endOfMonth as We } from "date-fns/endOfMonth";
18
18
  import fe from "@mui/material/Button";
19
19
  import { CheckCircle as Ke, Cancel as qe, Icon as je, ChevronRight as He, Delete as Qe, Add as $e, ReceiptLong as Xe } from "@mxenabled/mx-icons";
20
- import { T as Ze } from "./TransactionDetails-roZ5xLq8.mjs";
21
- import { a as Je } from "./AccountDetailsDrawer-C1hhmlmI.mjs";
20
+ import { T as Ze } from "./TransactionDetails-DT-MQqOB.mjs";
21
+ import { a as Je } from "./AccountDetailsDrawer-Cq4kiiKD.mjs";
22
22
  import { u as Ve } from "./AccountDetailsHeader-BliEZhz7.mjs";
23
23
  import { C as ee } from "./Category-DEKZGLYe.mjs";
24
24
  import { T as ge } from "./TransactionUtils-BphBJBbU.mjs";
25
- import { u as Ce, T as et, S as tt, a as nt } from "./EmbeddedCard-DH8vQ3qN.mjs";
25
+ import { u as Ce, T as et, S as tt, a as nt } from "./EmbeddedCard-DCOQnTz-.mjs";
26
26
  import { u as x, h as Y, g as re, f as K, a as at, c as ot, C as rt } from "./hooks-97sNJ_lf.mjs";
27
27
  import { S as it } from "./SearchBox-Cpgu_gdO.mjs";
28
28
  import { D as z } from "./Drawer-DsnW2o0v.mjs";
@@ -34,7 +34,7 @@ import { AdapterDateFns as lt } from "@mui/x-date-pickers/AdapterDateFnsV3";
34
34
  import { DatePicker as dt } from "@mui/x-date-pickers";
35
35
  import { LocalizationProvider as ut } from "@mui/x-date-pickers/LocalizationProvider";
36
36
  import { S as q, D as te } from "./Select-CSpkK5cR.mjs";
37
- import { A as D } from "./Analytics-WeZYytR0.mjs";
37
+ import { A as D } from "./Analytics-D-jdcL72.mjs";
38
38
  import { fromUnixTime as be } from "date-fns/fromUnixTime";
39
39
  import { getUnixTime as mt } from "date-fns/getUnixTime";
40
40
  import _t from "@mui/material/IconButton";
@@ -903,4 +903,4 @@ export {
903
903
  Tt as d,
904
904
  Ae as i
905
905
  };
906
- //# sourceMappingURL=ManageIncome-Be9WHv-s.mjs.map
906
+ //# sourceMappingURL=ManageIncome-B_8i71mE.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ManageIncome-Be9WHv-s.mjs","sources":["../src/transactions/utils/Filters.ts","../src/recurringtransactions/components/shared/recurringsettings/SelectTransaction.tsx","../src/recurringtransactions/components/actions/LinkTransactionDrawer.tsx","../src/recurringtransactions/components/actions/MarkAsPaidDialog.tsx","../src/recurringtransactions/components/actions/MarkAsUnpaidDialog.tsx","../src/recurringtransactions/components/PaymentSchedule.tsx","../src/recurringtransactions/components/actions/PaymentScheduleAction.tsx","../src/recurringtransactions/components/RecurringTransactionList.tsx","../src/recurringtransactions/components/UpcomingRecurrenceCard.tsx","../src/recurringtransactions/components/RecurringTransactionDetails.tsx","../src/recurringtransactions/components/shared/recurringsettings/RecurringRow.tsx","../src/recurringtransactions/components/shared/recurringsettings/AddRecurringTransactionDetails.tsx","../src/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.tsx","../src/recurringtransactions/components/shared/recurringsettings/RecurringSettingsZeroState.tsx","../src/recurringtransactions/components/shared/recurringsettings/ManageIncome.tsx"],"sourcesContent":["import { CategoryGuids } from '../../core/constants'\nimport { type Transaction, TransactionType } from '../../core'\n\n// Returns true if the transaction is not income\nexport const expenseFilter = (t: Transaction) =>\n t.top_level_category_guid !== CategoryGuids.INCOME && t.transaction_type === TransactionType.DEBIT\n\n// Returns true if the transaction is an expense and it matches the search string\nexport const expenseFilterSearch = (t: Transaction, searchValue: string) => {\n if (expenseFilter(t)) {\n return (\n t.payee?.toLowerCase().includes(searchValue.toLowerCase()) ||\n t.description.toLowerCase().includes(searchValue.toLowerCase()) ||\n t.feed_description.toLowerCase().includes(searchValue.toLowerCase())\n )\n }\n return false\n}\n\n// Returns true if the transaction is income\nexport const incomeFilter = (t: Transaction) =>\n t.top_level_category_guid === CategoryGuids.INCOME ||\n (t.top_level_category_guid === CategoryGuids.TRANSFER &&\n t.transaction_type === TransactionType.CREDIT)\n\n// Returns true if the transaction is income and it matches the search string\nexport const incomeFilterSearch = (t: Transaction, searchValue: string) => {\n if (incomeFilter(t)) {\n return (\n t.payee?.toLowerCase().includes(searchValue.toLowerCase()) ||\n t.description?.toLowerCase().includes(searchValue.toLowerCase()) ||\n t.feed_description?.toLowerCase().includes(searchValue.toLowerCase())\n )\n }\n return false\n}\n","import { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\n\nimport { P } from '@mxenabled/mxui'\n\nimport { SearchBox, useGlobalCopyStore } from '../../../../common'\nimport { TransactionList, useTransactionsUiStore } from '../../../../transactions'\n\ninterface SelectTransactionProps {\n bgcolor?: string\n description?: string\n onSearch: (value: string) => void\n onSelected: (guid: string) => void\n}\n\nexport const SelectTransaction = observer(\n ({\n bgcolor = 'background.default',\n description,\n onSearch,\n onSelected,\n }: SelectTransactionProps) => {\n const { recurring: recurringCopy } = useGlobalCopyStore()\n const { searchValue, setSearchValue } = useTransactionsUiStore()\n\n return (\n <Stack sx={{ bgcolor, gap: 16, pt: 8 }}>\n {description && <P sx={{ mx: 24 }}>{description}</P>}\n <SearchBox\n ariaLabel={recurringCopy.select_transaction_search_aria}\n cancelAriaLabel={recurringCopy.select_transaction_search_cancel_aria}\n onChange={(value) => {\n setSearchValue(value)\n onSearch(value)\n }}\n placeholder={recurringCopy.select_transaction_search_placeholder}\n searchValue={searchValue}\n />\n <TransactionList\n bgcolor={bgcolor}\n filter={(t) => !!t.merchant_guid}\n height=\"auto\"\n onClick={onSelected}\n showLoader={false}\n />\n </Stack>\n )\n },\n)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport {\n Drawer,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n useTransactionStore,\n} from '../../../common'\nimport { type RepeatingTransaction, type Transaction, RepeatingType } from '../../../core'\n\nimport {\n expenseFilter,\n expenseFilterSearch,\n incomeFilter,\n incomeFilterSearch,\n} from '../../../transactions/utils/Filters'\n\nimport { SelectTransaction } from '../shared/recurringsettings/SelectTransaction'\nimport { useTransactionsUiStore } from '../../../transactions'\n\ninterface LinkTransactionDrawerProps {\n isOpen: boolean\n onClose: () => void\n recurringTransaction: RepeatingTransaction\n}\n\nconst buildFilter =\n (recurringTransaction: RepeatingTransaction, searchValue?: string) => (t: Transaction) => {\n if (t.repeating_transaction_guid) return false\n\n const isIncome = recurringTransaction.repeating_transaction_type === RepeatingType.Income\n\n if (searchValue) {\n return isIncome ? incomeFilterSearch(t, searchValue) : expenseFilterSearch(t, searchValue)\n }\n\n return isIncome ? incomeFilter(t) : expenseFilter(t)\n }\n\nexport const LinkTransactionDrawer = observer(\n ({ isOpen, onClose, recurringTransaction }: LinkTransactionDrawerProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { markRecurrenceAsPaid } = useRecurringTransactionsStore()\n const { filter, setFilter, transactions } = useTransactionStore()\n\n const { setSearchValue } = useTransactionsUiStore()\n\n React.useEffect(() => {\n if (isOpen) {\n setFilter({ ...filter, custom: buildFilter(recurringTransaction) })\n } else {\n setSearchValue('')\n }\n }, [isOpen, recurringTransaction])\n\n const handleSearch = (searchValue: string) => {\n setFilter({ ...filter, custom: buildFilter(recurringTransaction, searchValue) })\n }\n\n const handleSelected = async (guid: string) => {\n const transaction = transactions.find((t) => t.guid === guid)\n if (transaction) {\n await markRecurrenceAsPaid(recurringTransaction.guid, transaction)\n onClose()\n }\n }\n\n return (\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={isOpen}\n onClose={onClose}\n title={copy.link_transaction_button}\n >\n <SelectTransaction onSearch={handleSearch} onSelected={handleSelected} />\n </Drawer>\n )\n },\n)\n","import { Text } from '@mxenabled/mxui'\n\nimport { Dialog, useGlobalCopyStore } from '../../../common'\n\ninterface MarkAsPaidDialogProps {\n isOpen: boolean\n onClose: () => void\n onLinkTransaction: () => void\n}\n\nexport const MarkAsPaidDialog = ({ isOpen, onClose, onLinkTransaction }: MarkAsPaidDialogProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n\n return (\n <Dialog\n copy={{\n title: copy.mark_as_paid_dialog_title,\n close_aria: copy.close_drawer_aria,\n }}\n isOpen={isOpen}\n maxWidth=\"xs\"\n onClose={onClose}\n onPrimaryAction={onLinkTransaction}\n primaryText={copy.link_transaction_button}\n sx={{\n '& .MuiStack-root, & .MuiDialogContent-root': {\n backgroundColor: 'background.paper',\n },\n }}\n >\n <Text truncate={false}>{copy.link_transaction_description}</Text>\n </Dialog>\n )\n}\n","import { Text } from '@mxenabled/mxui'\n\nimport { Dialog, useGlobalCopyStore } from '../../../common'\n\ninterface MarkAsUnpaidDialogProps {\n isOpen: boolean\n onClose: () => void\n onUnlinkTransaction: () => void\n}\n\nexport const MarkAsUnpaidDialog = ({\n isOpen,\n onClose,\n onUnlinkTransaction,\n}: MarkAsUnpaidDialogProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n\n return (\n <Dialog\n copy={{\n title: copy.mark_as_unpaid_dialog_title,\n close_aria: copy.close_drawer_aria,\n }}\n isOpen={isOpen}\n maxWidth=\"xs\"\n onClose={onClose}\n onPrimaryAction={onUnlinkTransaction}\n primaryText={copy.unlink_transaction_button}\n sx={{\n '& .MuiStack-root, & .MuiDialogContent-root': {\n backgroundColor: 'background.paper',\n },\n }}\n >\n <Text truncate={false}>{copy.unlink_transaction_description}</Text>\n </Dialog>\n )\n}\n","import React from 'react'\nimport { addYears } from 'date-fns/addYears'\nimport { getDayOfYear } from 'date-fns/getDayOfYear'\nimport { setDayOfYear } from 'date-fns/setDayOfYear'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\n\nimport Stack from '@mui/material/Stack'\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3'\nimport { DatePicker } from '@mui/x-date-pickers'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\n\nimport { Select, useGlobalCopyStore } from '../../common'\nimport { Frequency } from '../../core'\nimport { formatOrdinal } from '../../core/utils/NumberFormatting'\n\ninterface PaymentScheduleProps {\n frequency: Frequency\n firstDay: number\n secondDay?: number\n onFrequencyChange: (frequency: Frequency) => void\n onFirstDayChange: (day: number) => void\n onSecondDayChange: (day: number) => void\n}\n\nexport const PaymentSchedule = ({\n frequency,\n firstDay,\n secondDay,\n onFrequencyChange,\n onFirstDayChange,\n onSecondDayChange,\n}: PaymentScheduleProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n\n const frequencies = React.useMemo(\n () => [\n { id: Frequency.EveryWeek, label: copy.frequency_every_week },\n { id: Frequency.EveryOtherWeek, label: copy.frequency_every_other_week },\n { id: Frequency.TwiceAMonth, label: copy.frequency_twice_a_month },\n { id: Frequency.EveryMonth, label: copy.frequency_every_month },\n { id: Frequency.EveryOtherMonth, label: copy.frequency_every_other_month },\n { id: Frequency.EveryQuarter, label: copy.frequency_every_quarter },\n { id: Frequency.EveryOtherQuarter, label: copy.frequency_every_other_quarter },\n { id: Frequency.EveryYear, label: copy.frequency_every_year },\n ],\n [copy],\n )\n\n const daysOfWeek = [\n { id: 0, label: copy.weekday_sunday },\n { id: 1, label: copy.weekday_monday },\n { id: 2, label: copy.weekday_tuesday },\n { id: 3, label: copy.weekday_wednesday },\n { id: 4, label: copy.weekday_thursday },\n { id: 5, label: copy.weekday_friday },\n { id: 6, label: copy.weekday_saturday },\n ]\n\n const daysOfMonth = [...Array(31).keys()].map((day) => ({\n id: day + 1,\n label: formatOrdinal(day + 1),\n }))\n daysOfMonth[30].label += ` (${copy.last_day_of_month})`\n\n const beginDaysOfMonth = daysOfMonth.slice(0, 15)\n const endDaysOfMonth = daysOfMonth.slice(14)\n\n const weeklyType = frequency === Frequency.EveryWeek || frequency === Frequency.EveryOtherWeek\n const monthlyType =\n frequency === Frequency.TwiceAMonth ||\n frequency === Frequency.EveryMonth ||\n frequency === Frequency.EveryOtherMonth ||\n frequency === Frequency.EveryQuarter ||\n frequency === Frequency.EveryOtherQuarter\n\n const tempDayOfYear = setDayOfYear(startOfToday(), firstDay)\n const dayOfYear = tempDayOfYear < startOfToday() ? addYears(tempDayOfYear, 1) : tempDayOfYear\n\n const handleYearlyChange = (date: Date | null) => {\n if (date) {\n onFirstDayChange(getDayOfYear(date))\n }\n }\n\n return (\n <Stack gap={24} sx={{ m: 24 }}>\n <Select\n label={copy.frequency}\n onChange={onFrequencyChange}\n options={frequencies}\n value={frequency}\n />\n {weeklyType && (\n <Select\n label={copy.day_of_the_week}\n onChange={onFirstDayChange}\n options={daysOfWeek}\n value={firstDay}\n />\n )}\n {monthlyType && (\n <Select\n label={\n frequency === Frequency.TwiceAMonth\n ? copy.first_day_of_the_month\n : copy.day_of_the_month\n }\n onChange={onFirstDayChange}\n options={frequency === Frequency.TwiceAMonth ? beginDaysOfMonth : daysOfMonth}\n value={firstDay}\n />\n )}\n {frequency === Frequency.TwiceAMonth && (\n <Select\n label={copy.second_day_of_the_month}\n onChange={onSecondDayChange}\n options={endDaysOfMonth}\n value={secondDay || 0}\n />\n )}\n {frequency === Frequency.EveryYear && (\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <DatePicker\n disablePast={true}\n label={copy.next_payment_date}\n maxDate={subDays(addYears(startOfToday(), 1), 1)}\n minDate={startOfToday()}\n onChange={handleYearlyChange}\n value={dayOfYear}\n />\n </LocalizationProvider>\n )}\n </Stack>\n )\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport {\n ANALYTICS_EVENTS,\n DataRow,\n Drawer,\n useEvent,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n} from '../../../common'\nimport { type RepeatingTransaction, Frequency } from '../../../core'\n\nimport { getFrequencyLabel } from '../../../core/utils/RecurringTransactionsUtil'\n\nimport { PaymentSchedule } from '../PaymentSchedule'\n\ninterface FrequencyActionProps {\n repeatingTransaction: RepeatingTransaction\n}\n\nexport const PaymentScheduleAction = observer(({ repeatingTransaction }: FrequencyActionProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { updateRepeatingTransaction } = useRecurringTransactionsStore()\n\n const { onEvent } = useEvent()\n const [isOpen, setIsOpen] = React.useState(false)\n const [frequency, setFrequency] = React.useState<Frequency>(repeatingTransaction.recurrence_type)\n const [firstDay, setFirstDay] = React.useState(repeatingTransaction.recurrence_day)\n const [secondDay, setSecondDay] = React.useState(repeatingTransaction.second_recurrence_day)\n\n const handleSave = async () => {\n await updateRepeatingTransaction({\n ...repeatingTransaction,\n recurrence_type: frequency,\n recurrence_day: firstDay,\n second_recurrence_day: secondDay,\n })\n\n setIsOpen(false)\n }\n\n const handleOpen = () => {\n setIsOpen(true)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_DETAILS_CLICK_PAYMENT_SCHEDULE)\n }\n\n return (\n <>\n <DataRow\n iconName=\"sync\"\n label={copy.activity_schedule}\n onClick={handleOpen}\n showChevron={false}\n value={`${getFrequencyLabel(copy, repeatingTransaction, true)}`}\n />\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n onPrimaryAction={handleSave}\n title={copy.payment_schedule}\n >\n <PaymentSchedule\n firstDay={firstDay}\n frequency={frequency}\n onFirstDayChange={setFirstDay}\n onFrequencyChange={setFrequency}\n onSecondDayChange={setSecondDay}\n secondDay={secondDay}\n />\n </Drawer>\n </>\n )\n})\n","import React from 'react'\n\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { getUnixTime } from 'date-fns/getUnixTime'\n\nimport Divider from '@mui/material/Divider'\nimport IconButton from '@mui/material/IconButton'\nimport List from '@mui/material/List'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemText from '@mui/material/ListItemText'\nimport Menu from '@mui/material/Menu'\nimport MenuItem from '@mui/material/MenuItem'\nimport Stack from '@mui/material/Stack'\n\nimport { Cancel, CheckCircle, Icon } from '@mxenabled/mx-icons'\nimport { MerchantLogo, Text } from '@mxenabled/mxui'\n\nimport {\n ANALYTICS_EVENTS,\n formatCurrency,\n ListItemWrapper,\n useEvent,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n} from '../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\n\nimport {\n type Recurrence,\n type Transaction,\n RecurrenceStatus,\n RepeatingTransaction,\n} from '../../core'\n\ntype RecurringTransactionRow = {\n key: string\n name: string\n amount: number\n date: number\n merchantGuid: string\n categoryGuid: string\n category: string\n status: RecurrenceStatus.Paid | RecurrenceStatus.Missed\n transactionGuid?: string\n}\n\nconst buildRows = (\n transactions: Transaction[],\n missedRecurrences: Recurrence[],\n): RecurringTransactionRow[] => {\n const paidRows: RecurringTransactionRow[] = transactions.map((t) => ({\n key: t.guid,\n name: t.payee || t.description || t.feed_description,\n amount: t.amount,\n date: t.date,\n merchantGuid: t.merchant_guid || '',\n categoryGuid: t.top_level_category_guid || '',\n category: t.category || '',\n status: RecurrenceStatus.Paid,\n transactionGuid: t.guid,\n }))\n\n const missedRows: RecurringTransactionRow[] = missedRecurrences.map((r) => ({\n key: `missed-${r.expectedDate.getTime()}`,\n name: r.name,\n amount: r.amount,\n date: getUnixTime(r.expectedDate),\n merchantGuid: r.merchantGuid,\n categoryGuid: r.categoryGuid,\n category: '',\n status: RecurrenceStatus.Missed,\n }))\n\n return [...paidRows, ...missedRows].sort((a, b) => b.date - a.date)\n}\n\ninterface RecurringTransactionListProps {\n isIncome?: boolean\n onMarkAsPaidClick: () => void\n onMarkAsUnpaidClick: (transactionGuid: string) => void\n onTransactionClick: (guid: string) => void\n recurringTransaction: RepeatingTransaction\n transactions: Transaction[]\n}\n\nexport const RecurringTransactionList = ({\n isIncome = false,\n onMarkAsUnpaidClick,\n onMarkAsPaidClick,\n onTransactionClick,\n recurringTransaction,\n transactions,\n}: RecurringTransactionListProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n const { recurrences } = useRecurringTransactionsStore()\n\n const [menuAnchorEl, setMenuAnchorEl] = React.useState<HTMLElement | null>(null)\n const [menuRow, setMenuRow] = React.useState<RecurringTransactionRow | null>(null)\n\n const missedRecurrences = React.useMemo(\n () =>\n recurrences.filter(\n (r) =>\n r.repeatingTransactionGuid === recurringTransaction.guid &&\n r.status === RecurrenceStatus.Missed,\n ),\n [recurrences, recurringTransaction.guid],\n )\n\n const rows = React.useMemo(\n () => buildRows(transactions, missedRecurrences),\n [transactions, missedRecurrences],\n )\n\n const handleClick = (row: RecurringTransactionRow) => {\n if (row.transactionGuid) {\n onTransactionClick(row.transactionGuid)\n }\n }\n\n const handleMenuOpen = (e: React.MouseEvent<HTMLElement>, row: RecurringTransactionRow) => {\n e.stopPropagation()\n setMenuAnchorEl(e.currentTarget)\n setMenuRow(row)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_LIST_CLICK_MORE_MENU)\n }\n\n const handleMenuClose = () => {\n setMenuAnchorEl(null)\n setMenuRow(null)\n }\n\n const handleMenuAction = () => {\n if (!menuRow) return\n\n if (menuRow.status === RecurrenceStatus.Missed) {\n onMarkAsPaidClick()\n } else if (menuRow.transactionGuid) {\n onMarkAsUnpaidClick(menuRow.transactionGuid)\n }\n handleMenuClose()\n }\n\n return (\n <Stack direction=\"column\" sx={{ minHeight: '30dvh' }}>\n <Text bold={true} id=\"past-activity\" sx={{ ml: 24, mt: 16, mb: 8 }} variant=\"body1\">\n {copy.past_activity}\n </Text>\n <List aria-labelledby=\"past-activity\" sx={{ flex: 1, overflow: 'auto' }}>\n {rows.map((row, index) => {\n const isPaid = row.status === RecurrenceStatus.Paid\n const isMissed = row.status === RecurrenceStatus.Missed\n const isLast = index === rows.length - 1\n\n return (\n <React.Fragment key={row.key}>\n <ListItemWrapper\n onClick={isPaid ? () => handleClick(row) : undefined}\n sx={{ '& .MuiListItemButton-root': { pr: 10 } }}\n >\n <ListItemAvatar>\n <MerchantLogo categoryGuid={row.categoryGuid} merchantGuid={row.merchantGuid} />\n </ListItemAvatar>\n <ListItemText\n disableTypography={true}\n secondary={\n <Stack direction=\"row\" justifyContent=\"space-between\">\n <Text variant=\"caption\">\n {formatDate(fromUnixTime(row.date), DATE_FORMATS_INTL.MONTH_DAY_YEAR)}\n </Text>\n <Stack\n alignItems=\"center\"\n direction=\"row\"\n gap={6}\n sx={{ textTransform: 'uppercase' }}\n >\n {isPaid && <CheckCircle color=\"success\" filled={true} size={12} />}\n {isMissed && <Cancel color=\"error\" filled={true} size={12} />}\n <Text bold={true} color=\"text.secondary\" variant=\"caption\">\n {isPaid ? copy.paid?.toLowerCase() : copy.missed?.toLowerCase()}\n </Text>\n </Stack>\n </Stack>\n }\n >\n <Stack direction=\"row\" justifyContent=\"space-between\" sx={{ gap: 8 }}>\n <Text bold={true} variant=\"body1\">\n {row.name}\n </Text>\n <Text\n bold={true}\n color={isIncome ? 'success.main' : 'text.primary'}\n sx={{ flexShrink: 0 }}\n variant=\"body1\"\n >\n {isIncome ? '+' : ''}\n {formatCurrency(row.amount, '0,0.00')}\n </Text>\n </Stack>\n </ListItemText>\n <IconButton\n aria-label={copy.more_menu_aria}\n onClick={(e) => handleMenuOpen(e, row)}\n size=\"small\"\n sx={{ alignSelf: 'center', ml: 4 }}\n >\n <Icon name=\"more_vert\" size={20} sx={{ color: 'text.secondary' }} />\n </IconButton>\n </ListItemWrapper>\n <Divider variant={isLast ? 'fullWidth' : 'inset'} />\n </React.Fragment>\n )\n })}\n </List>\n\n <Menu\n anchorEl={menuAnchorEl}\n anchorOrigin={{ horizontal: 'right', vertical: 'bottom' }}\n disableScrollLock={true}\n onClose={handleMenuClose}\n open={Boolean(menuAnchorEl)}\n transformOrigin={{ horizontal: 'right', vertical: 'top' }}\n >\n <MenuItem onClick={handleMenuAction} sx={{ p: 12 }}>\n <Text variant=\"body1\">\n {menuRow?.status === RecurrenceStatus.Missed\n ? copy.mark_as_paid_cta\n : copy.mark_as_unpaid_cta}\n </Text>\n </MenuItem>\n </Menu>\n </Stack>\n )\n}\n","import Card from '@mui/material/Card'\nimport CardActionArea from '@mui/material/CardActionArea'\nimport Stack from '@mui/material/Stack'\nimport { alpha, useTheme } from '@mui/material'\n\nimport { ChevronRight } from '@mxenabled/mx-icons'\nimport { Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { RecurrenceStatus } from '../../core'\nimport { BeatMaterialIcon } from '../../microinsights'\n\ninterface UpcomingRecurrenceCardProps {\n expectedDate: Date\n onMarkAsPaidClick: () => void\n status?: RecurrenceStatus\n}\n\nexport const UpcomingRecurrenceCard = ({\n expectedDate,\n onMarkAsPaidClick,\n status,\n}: UpcomingRecurrenceCardProps) => {\n const theme = useTheme()\n const { recurring: copy } = useGlobalCopyStore()\n\n const isPaid = status === RecurrenceStatus.Paid\n\n return (\n <Card variant=\"elevation\">\n <CardActionArea onClick={onMarkAsPaidClick}>\n <Stack\n alignItems=\"center\"\n direction=\"row\"\n justifyContent=\"space-between\"\n sx={{ px: 16, py: 14 }}\n >\n <Stack alignItems=\"center\" direction=\"row\" gap={12}>\n <BeatMaterialIcon\n bgColor={alpha(theme.palette.primary.main, 0.15)}\n name={isPaid ? 'check_circle' : 'calendar_clock'}\n />\n <Stack direction=\"column\">\n <Text fontSize={11} variant=\"body1\">\n {isPaid ? copy.paid : copy.upcoming}\n </Text>\n <Text bold={true} variant=\"body1\">\n {formatDate(expectedDate, DATE_FORMATS_INTL.MONTH_DAY_YEAR)}\n </Text>\n </Stack>\n </Stack>\n\n <Stack alignItems=\"center\" direction=\"row\" gap={4}>\n <Text bold={true} variant=\"body1\">\n {isPaid ? copy.mark_as_unpaid_cta : copy.mark_as_paid_cta}\n </Text>\n <ChevronRight size={20} />\n </Stack>\n </Stack>\n </CardActionArea>\n </Card>\n )\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { subDays } from 'date-fns/subDays'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { endOfMonth } from 'date-fns/endOfMonth'\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 { Delete } from '@mxenabled/mx-icons'\n\nimport { MerchantLogo, P, Text } from '@mxenabled/mxui'\n\nimport {\n ANALYTICS_EVENTS,\n DataRow,\n Dialog,\n Drawer,\n useAccountStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useTransactionStore,\n} from '../../common'\nimport {\n type Member,\n type Recurrence,\n type RepeatingTransaction,\n type Transaction,\n RecurrenceStatus,\n RepeatingType,\n} from '../../core'\n\nimport { TransactionDetails } from '../../transactions'\nimport { AccountDetailsDrawer, useAccountUiStore } from '../../accounts'\n\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\nimport { getNextUpcomingDate } from '../../core/utils/RecurringTransactionsUtil'\nimport { LinkTransactionDrawer } from './actions/LinkTransactionDrawer'\nimport { MarkAsPaidDialog } from './actions/MarkAsPaidDialog'\nimport { MarkAsUnpaidDialog } from './actions/MarkAsUnpaidDialog'\nimport { PaymentScheduleAction } from './actions/PaymentScheduleAction'\nimport { RecurringTransactionList } from './RecurringTransactionList'\nimport { UpcomingRecurrenceCard } from './UpcomingRecurrenceCard'\n\ninterface RecurringTransactionDetailsProps {\n onDeleted: () => void\n recurringTransaction: RepeatingTransaction\n selectedRecurrence: Recurrence | null\n}\n\nexport const RecurringTransactionDetails = observer(\n ({ onDeleted, recurringTransaction, selectedRecurrence }: RecurringTransactionDetailsProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { selectedAccountGuids } = useGlobalUiStore()\n const { onEvent } = useEvent()\n const { deleteRepeatingTransaction, markRecurrenceAsUnpaid, recurrences } =\n useRecurringTransactionsStore()\n const { detailedTransactions, setFilter, transactions } = useTransactionStore()\n const { setSelectedAccount, setSelectedMember } = useAccountUiStore()\n const { members } = useAccountStore()\n const { amount, description, merchant_guid } = recurringTransaction\n\n const [showAccountDetails, setShowAccountDetails] = React.useState(false)\n const [showDeleteConfirm, setShowDeleteConfirm] = React.useState(false)\n const [showMarkAsPaid, setShowMarkAsPaid] = React.useState(false)\n const [showMarkAsUnpaid, setShowMarkAsUnpaid] = React.useState(false)\n const [unlinkTransactionGuid, setUnlinkTransactionGuid] = React.useState('')\n const [showLinkTransaction, setShowLinkTransaction] = React.useState(false)\n const [transactionGuid, setTransactionGuid] = React.useState('')\n\n React.useEffect(() => {\n setFilter({\n accounts: selectedAccountGuids,\n dateRange: { start: subDays(startOfToday(), 90), end: endOfMonth(startOfToday()) },\n custom: (t: Transaction) => t.repeating_transaction_guid === recurringTransaction.guid,\n })\n }, [recurringTransaction.guid])\n\n const transaction = React.useMemo(\n () => detailedTransactions.find((t) => t.guid === transactionGuid),\n [transactionGuid, detailedTransactions],\n )\n\n const isIncome = recurringTransaction.repeating_transaction_type === RepeatingType.Income\n\n const filteredTransactions = React.useMemo(\n () => transactions.filter((t) => t.repeating_transaction_guid === recurringTransaction.guid),\n [transactions, recurringTransaction.guid],\n )\n\n const nextUpcomingDate = getNextUpcomingDate(recurringTransaction, recurrences)\n\n const handleAccountClick = () => {\n if (recurringTransaction.account) {\n setSelectedAccount(recurringTransaction.account)\n const member =\n members.find((m: Member) => m.guid === recurringTransaction.account?.member_guid) ||\n ({} as Member)\n if (member) {\n setSelectedMember(member)\n }\n setShowAccountDetails(true)\n }\n }\n\n const handleDeleteRecurringTransaction = async () => {\n await deleteRepeatingTransaction(recurringTransaction.guid)\n onDeleted()\n }\n\n const handleDeleteButtonClick = () => {\n setShowDeleteConfirm(true)\n\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_DETAILS_CLICK_DELETE)\n }\n\n const handleMarkAsPaidClick = () => {\n setShowMarkAsPaid(true)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_LIST_CLICK_MARK_AS_PAID)\n }\n\n const handleLinkTransaction = () => {\n setShowMarkAsPaid(false)\n setShowLinkTransaction(true)\n }\n\n const handleMarkAsUnpaidClick = (transactionGuid: string) => {\n setUnlinkTransactionGuid(transactionGuid)\n setShowMarkAsUnpaid(true)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_LIST_CLICK_MARK_AS_UNPAID)\n }\n\n const handleUnlinkTransaction = async () => {\n const txn = transactions.find((t) => t.guid === unlinkTransactionGuid)\n if (txn) await markRecurrenceAsUnpaid(txn)\n\n setShowMarkAsUnpaid(false)\n setUnlinkTransactionGuid('')\n }\n\n return (\n <Stack bgcolor=\"background.default\" direction=\"column\" height=\"100%\">\n <Stack direction=\"column\" m={24}>\n <MerchantLogo\n categoryGuid={transaction?.category_guid || ''}\n merchantGuid={merchant_guid}\n size={64}\n sx={{ mb: 12 }}\n />\n <Text bold={true} variant=\"body1\">\n {description}\n </Text>\n <P color={isIncome ? 'success.main' : 'text.primary'} sx={{ mt: 4, mb: 16 }} variant=\"h1\">\n {isIncome ? '+' : ''}\n {formatCurrency(amount, '0,0.00')}\n </P>\n <UpcomingRecurrenceCard\n expectedDate={\n selectedRecurrence?.occurredOnDate ||\n selectedRecurrence?.expectedDate ||\n nextUpcomingDate\n }\n onMarkAsPaidClick={\n selectedRecurrence?.status === RecurrenceStatus.Paid &&\n selectedRecurrence.transaction?.guid\n ? () => handleMarkAsUnpaidClick(selectedRecurrence.transaction!.guid)\n : handleMarkAsPaidClick\n }\n status={selectedRecurrence?.status}\n />\n </Stack>\n <List sx={{ bgcolor: 'background.paper' }}>\n {recurringTransaction.account && (\n <>\n <DataRow\n iconName=\"checkbook\"\n label={copy.account}\n onClick={handleAccountClick}\n showChevron={false}\n value={recurringTransaction.account.displayName || ''}\n />\n <Divider variant=\"inset\" />\n </>\n )}\n\n {transaction?.category && (\n <>\n <DataRow\n iconName=\"monetization_on\"\n label={copy.category}\n value={transaction.category}\n />\n <Divider variant=\"inset\" />\n </>\n )}\n\n <PaymentScheduleAction repeatingTransaction={recurringTransaction} />\n <Divider />\n </List>\n\n <Button\n color=\"error\"\n onClick={handleDeleteButtonClick}\n startIcon={<Delete />}\n sx={{ mx: 24, my: 16 }}\n variant=\"text\"\n >\n {isIncome ? copy.delete_income_title : copy.delete_expense_title}\n </Button>\n\n <RecurringTransactionList\n isIncome={isIncome}\n onMarkAsPaidClick={handleMarkAsPaidClick}\n onMarkAsUnpaidClick={handleMarkAsUnpaidClick}\n onTransactionClick={setTransactionGuid}\n recurringTransaction={recurringTransaction}\n transactions={filteredTransactions}\n />\n\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={!!transactionGuid && Boolean(transaction)}\n onClose={() => setTransactionGuid('')}\n title={copy.transaction_details_drawer_title}\n >\n {transaction && <TransactionDetails transaction={transaction} />}\n </Drawer>\n\n <Dialog\n copy={{\n title: isIncome ? copy.delete_income_title : copy.delete_expense_title,\n close_aria: copy.close_drawer_aria,\n }}\n isOpen={showDeleteConfirm}\n onClose={() => setShowDeleteConfirm(false)}\n onPrimaryAction={handleDeleteRecurringTransaction}\n >\n <Text>{isIncome ? copy.delete_income_description : copy.delete_expense_description}</Text>\n </Dialog>\n\n <MarkAsPaidDialog\n isOpen={showMarkAsPaid}\n onClose={() => setShowMarkAsPaid(false)}\n onLinkTransaction={handleLinkTransaction}\n />\n\n <MarkAsUnpaidDialog\n isOpen={showMarkAsUnpaid}\n onClose={() => {\n setShowMarkAsUnpaid(false)\n setUnlinkTransactionGuid('')\n }}\n onUnlinkTransaction={handleUnlinkTransaction}\n />\n\n <LinkTransactionDrawer\n isOpen={showLinkTransaction}\n onClose={() => setShowLinkTransaction(false)}\n recurringTransaction={recurringTransaction}\n />\n\n <AccountDetailsDrawer\n isOpen={showAccountDetails}\n onClose={() => setShowAccountDetails(false)}\n />\n </Stack>\n )\n },\n)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\n\nimport { InstitutionLogo, MerchantLogo, Text } from '@mxenabled/mxui'\n\nimport { Drawer, useGlobalCopyStore } from '../../../../common'\nimport { type RepeatingTransaction, RepeatingType } from '../../../../core'\n\nimport { getFrequencyLabel } from '../../../../core/utils/RecurringTransactionsUtil'\nimport { RecurringTransactionDetails } from '../../RecurringTransactionDetails'\nimport { formatCurrency } from '../../../../core/utils/NumberFormatting'\n\ninterface RecurringRowProps {\n onClick?: (repeatingTransaction: RepeatingTransaction) => void\n repeatingTransaction: RepeatingTransaction\n}\n\nexport const RecurringRow = observer(\n ({ onClick = () => {}, repeatingTransaction }: RecurringRowProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n\n const [isDetialsOpen, setIsDetailsOpen] = React.useState(false)\n\n const categoryGuid = React.useMemo(\n () =>\n repeatingTransaction.transactions.length === 0\n ? ''\n : repeatingTransaction.transactions[0].category_guid || '',\n [repeatingTransaction],\n )\n\n const institutionName = repeatingTransaction.account?.displayName || ''\n\n const isCredit = repeatingTransaction.repeating_transaction_type === RepeatingType.Income\n const statusLabel = getFrequencyLabel(copy, repeatingTransaction, true)\n\n const onItemClick = () => {\n onClick(repeatingTransaction)\n setIsDetailsOpen(true)\n }\n\n return (\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton onClick={onItemClick}>\n <ListItemAvatar>\n <MerchantLogo\n categoryGuid={categoryGuid}\n merchantGuid={repeatingTransaction.merchant_guid}\n />\n </ListItemAvatar>\n <ListItemText>\n <Stack direction=\"row\" gap={4} sx={{ justifyContent: 'space-between' }}>\n <Stack direction=\"column\" sx={{ width: '50%' }}>\n <Text bold={true} variant=\"body1\">\n {repeatingTransaction.description}\n </Text>\n <Stack alignItems=\"center\" direction=\"row\" gap={6}>\n {repeatingTransaction.account?.institution_guid && (\n <InstitutionLogo\n alt={institutionName}\n institutionGuid={repeatingTransaction.account?.institution_guid}\n size={12}\n />\n )}\n <Text variant=\"caption\">{institutionName}</Text>\n </Stack>\n </Stack>\n\n <Stack alignItems=\"flex-end\" sx={{ width: '50%' }}>\n <Text\n bold={true}\n color={isCredit ? 'success.main' : 'text.primary'}\n variant=\"body1\"\n >\n {isCredit ? '+' : ''}\n {formatCurrency(repeatingTransaction.amount, '0,0.00')}\n </Text>\n <Stack\n direction=\"row\"\n sx={{\n alignItems: 'center',\n gap: 6,\n justifyContent: 'flex-end',\n textTransform: 'uppercase',\n width: '100%',\n }}\n >\n <Text bold={true} color=\"text.secondary\" variant=\"caption\">\n {statusLabel}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n </ListItemText>\n </ListItemButton>\n\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={isDetialsOpen}\n onClose={() => setIsDetailsOpen(false)}\n title={\n repeatingTransaction.repeating_transaction_type === RepeatingType.Income\n ? copy.income_details\n : copy.expense_details\n }\n >\n <RecurringTransactionDetails\n onDeleted={() => setIsDetailsOpen(false)}\n recurringTransaction={repeatingTransaction}\n selectedRecurrence={null}\n />\n </Drawer>\n </ListItem>\n )\n },\n)\n","import { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../../../common'\nimport { type Transaction, Frequency } from '../../../../core'\nimport SubheaderRow from '../../../../common/components/SubheaderRow'\n\nimport { TransactionRow } from '../../../../transactions'\n\nimport { fromUnixToDayOfWeekAndDate } from '../../../../core/utils/DateUtil'\nimport { PaymentSchedule } from '../../PaymentSchedule'\n\ninterface AddRecurringTransactionDetailsProps {\n bgcolor?: string\n firstDay: number\n secondDay?: number\n frequency: Frequency\n onFrequencyChange: (frequency: Frequency) => void\n onFirstDayChange: (day: number) => void\n onSecondDayChange: (day: number) => void\n transaction: Transaction\n}\n\nexport const AddRecurringTransactionDetails = observer(\n ({\n bgcolor = 'background.default',\n firstDay,\n secondDay,\n frequency,\n onFrequencyChange,\n onFirstDayChange,\n onSecondDayChange,\n transaction,\n }: AddRecurringTransactionDetailsProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n\n return (\n <Stack bgcolor={bgcolor} gap={24} height=\"100%\">\n <Stack>\n <SubheaderRow bgcolor={bgcolor}>\n {fromUnixToDayOfWeekAndDate(transaction.date)}\n </SubheaderRow>\n <TransactionRow component=\"div\" transaction={transaction} />\n </Stack>\n\n <Box>\n <Text bold={true} sx={{ mx: 24 }} variant=\"body1\">\n {copy.payment_schedule}\n </Text>\n\n <PaymentSchedule\n firstDay={firstDay}\n frequency={frequency}\n onFirstDayChange={onFirstDayChange}\n onFrequencyChange={onFrequencyChange}\n onSecondDayChange={onSecondDayChange}\n secondDay={secondDay}\n />\n </Box>\n </Stack>\n )\n },\n)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { formatISO } from 'date-fns/formatISO'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\n\nimport Button from '@mui/material/Button'\n\nimport { Add } from '@mxenabled/mx-icons'\n\nimport {\n Drawer,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n useTransactionStore,\n useUserStore,\n} from '../../../../common'\nimport {\n type RepeatingTransaction,\n type Transaction,\n Frequency,\n RepeatingType,\n} from '../../../../core'\n\nimport { SelectTransaction } from './SelectTransaction'\nimport { AddRecurringTransactionDetails } from './AddRecurringTransactionDetails'\n\nimport {\n expenseFilter,\n expenseFilterSearch,\n incomeFilter,\n incomeFilterSearch,\n} from '../../../../transactions/utils/Filters'\n\nimport { getNextPaymentDate } from '../../../../core/utils/RecurringTransactionsUtil'\n\ninterface AddRecurringTransactionProps {\n isIncome?: boolean\n label: string\n onAddRecurringTransaction?: () => void\n}\n\nexport const AddRecurringTransaction = observer(\n ({\n isIncome = false,\n label,\n onAddRecurringTransaction = () => null,\n }: AddRecurringTransactionProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { filter, setFilter, transactions } = useTransactionStore()\n const { addRepeatingTransaction } = useRecurringTransactionsStore()\n const { user } = useUserStore()\n\n const [isSelectTransactionOpen, setIsSelectTransactionOpen] = React.useState(false)\n const [transactionGuid, setTransactionGuid] = React.useState('')\n const [frequency, setFrequency] = React.useState(Frequency.EveryMonth)\n const [firstDay, setFirstDay] = React.useState(1)\n const [secondDay, setSecondDay] = React.useState(15)\n\n const transaction = React.useMemo(\n () => transactions.find((t) => t.guid === transactionGuid),\n [transactionGuid, transactions],\n )\n\n const handleOpen = () => {\n setIsSelectTransactionOpen(true)\n\n if (isIncome) {\n setFilter({ ...filter, custom: incomeFilter })\n } else {\n setFilter({ ...filter, custom: expenseFilter })\n }\n }\n\n const handleAddRecurringTransaction = async () => {\n if (!transaction) {\n closeOnAdd()\n return\n }\n onAddRecurringTransaction()\n\n const nextDate = getNextPaymentDate(frequency, fromUnixTime(transaction.date), firstDay)\n\n const repeatingTransaction = {\n account_guid: transaction.account_guid,\n amount: transaction.amount,\n created_by: 0, // User\n merchant_guid: transaction.merchant_guid,\n description: transaction.payee || transaction.description || transaction.feed_description,\n predicted_occurs_on: formatISO(nextDate, { representation: 'date' }),\n recurrence_day: firstDay,\n recurrence_type: frequency,\n repeating_transaction_type: isIncome ? RepeatingType.Income : RepeatingType.Bill,\n second_recurrence_day: secondDay,\n transaction_type: transaction.transaction_type,\n user_guid: user.guid,\n } as RepeatingTransaction\n\n await addRepeatingTransaction(repeatingTransaction, transaction)\n\n closeOnAdd()\n }\n\n const closeOnAdd = () => {\n setTransactionGuid('')\n setIsSelectTransactionOpen(false)\n }\n\n return (\n <>\n <Button onClick={handleOpen} startIcon={<Add size={24} />} variant=\"contained\">\n {label}\n </Button>\n\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={isSelectTransactionOpen}\n onClose={() => setIsSelectTransactionOpen(false)}\n title={label}\n >\n <SelectTransaction\n description={isIncome ? copy.add_income_description : copy.add_expense_description}\n onSearch={(searchValue) => {\n setFilter({\n ...filter,\n custom: (transaction: Transaction) => {\n if (isIncome) {\n return searchValue\n ? incomeFilterSearch(transaction, searchValue)\n : incomeFilter(transaction)\n } else {\n return searchValue\n ? expenseFilterSearch(transaction, searchValue)\n : expenseFilter(transaction)\n }\n },\n })\n }}\n onSelected={(guid) => setTransactionGuid(guid)}\n />\n </Drawer>\n\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={Boolean(transactionGuid)}\n onClose={() => setTransactionGuid('')}\n onPrimaryAction={handleAddRecurringTransaction}\n title={isIncome ? copy.income_details : copy.expense_details}\n >\n {transaction && (\n <AddRecurringTransactionDetails\n firstDay={firstDay}\n frequency={frequency}\n onFirstDayChange={setFirstDay}\n onFrequencyChange={setFrequency}\n onSecondDayChange={setSecondDay}\n secondDay={secondDay}\n transaction={transaction}\n />\n )}\n </Drawer>\n </>\n )\n },\n)\n","import { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\n\nimport { ReceiptLong } from '@mxenabled/mx-icons'\n\nimport { P } from '@mxenabled/mxui'\n\nimport { ANALYTICS_EVENTS, useEvent, useGlobalCopyStore } from '../../../../common'\n\nimport { AddRecurringTransaction } from './AddRecurringTransaction'\n\ninterface RecurringSettingsZeroStateProps {\n zeroStateFor: 'expenses' | 'income'\n}\n\nexport const RecurringSettingsZeroState = observer(\n ({ zeroStateFor }: RecurringSettingsZeroStateProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n\n const isIncome = zeroStateFor === 'income'\n const title = isIncome\n ? copy.recurring_setting_zero_state_income_title\n : copy.recurring_setting_zero_state_expenses_title\n const description = isIncome\n ? copy.recurring_setting_zero_state_income_description\n : copy.recurring_setting_zero_state_expenses_description\n const label = isIncome ? copy.add_income : copy.add_expense\n\n const onAdd = () => {\n onEvent(\n isIncome\n ? ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_ADD_INCOME\n : ANALYTICS_EVENTS.RECURRING_ACTIVITY_CLICK_ADD_EXPENSE,\n )\n }\n\n return (\n <Stack sx={{ alignItems: 'center', p: 24, pt: 48 }}>\n <ReceiptLong size={48} />\n <P sx={{ my: 8, fontWeight: 600 }} variant=\"body1\">\n {title}\n </P>\n <P color=\"text.secondary\" sx={{ mb: 32 }} variant=\"subtitle2\">\n {description}\n </P>\n <AddRecurringTransaction\n isIncome={isIncome}\n label={label}\n onAddRecurringTransaction={onAdd}\n />\n </Stack>\n )\n },\n)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport {\n ANALYTICS_EVENTS,\n useEvent,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n} from '../../../../common'\nimport { type RepeatingTransaction, Frequency, RepeatingType } from '../../../../core'\n\nimport { RecurringRow } from './RecurringRow'\nimport { AddRecurringTransaction } from './AddRecurringTransaction'\nimport { RecurringSettingsZeroState } from './RecurringSettingsZeroState'\n\ninterface ManageIncomeProps {\n forOverview?: boolean\n}\n\nexport const ManageIncome = observer(({ forOverview = false }: ManageIncomeProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { detailedRepeatingTransactions } = useRecurringTransactionsStore()\n const { onEvent } = useEvent()\n\n const onClick = (repeatingTransaction: RepeatingTransaction) => {\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_INCOME, {\n repeating_transaction_guid: repeatingTransaction.guid,\n })\n }\n\n const onAdd = () => {\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_ADD_INCOME)\n }\n\n const filteredTransactions = detailedRepeatingTransactions.filter(\n (rt) =>\n rt.repeating_transaction_type === RepeatingType.Income &&\n (rt.transactions.length > 0 || rt.recurrence_type === Frequency.EveryYear),\n )\n\n return (\n <>\n {filteredTransactions.length !== 0 ? (\n <Stack\n sx={{\n height: forOverview ? 'calc(100vh - 62px)' : 'calc(100vh - 109px)',\n maxHeight: forOverview ? 'calc(100vh - 62px)' : 'calc(100vh - 109px)',\n }}\n >\n {forOverview && (\n <Text bold={true} sx={{ mb: 4, mt: 12, mx: 24 }} variant=\"body2\">\n {copy.income}\n </Text>\n )}\n <Box sx={{ flex: 1, overflow: 'auto' }}>\n <List sx={{ bgcolor: 'background.paper' }}>\n {filteredTransactions.map((rt, index) => (\n <React.Fragment key={rt.guid}>\n <RecurringRow onClick={onClick} repeatingTransaction={rt} />\n <Divider\n variant={index < filteredTransactions.length - 1 ? 'inset' : 'fullWidth'}\n />\n </React.Fragment>\n ))}\n </List>\n </Box>\n <Box>\n <Divider />\n <Box\n sx={{\n alignContent: 'center',\n bgcolor: 'background.paper',\n justifyContent: 'flex-end',\n px: 24,\n py: 12,\n textAlign: 'right',\n }}\n >\n <AddRecurringTransaction\n isIncome={true}\n label={copy.add_income}\n onAddRecurringTransaction={onAdd}\n />\n </Box>\n </Box>\n </Stack>\n ) : (\n <RecurringSettingsZeroState zeroStateFor=\"income\" />\n )}\n </>\n )\n})\n"],"names":["expenseFilter","t","CategoryGuids","TransactionType","expenseFilterSearch","searchValue","incomeFilter","incomeFilterSearch","SelectTransaction","observer","bgcolor","description","onSearch","onSelected","recurringCopy","useGlobalCopyStore","setSearchValue","useTransactionsUiStore","jsxs","Stack","P","jsx","SearchBox","value","TransactionList","buildFilter","recurringTransaction","isIncome","RepeatingType","LinkTransactionDrawer","isOpen","onClose","copy","markRecurrenceAsPaid","useRecurringTransactionsStore","filter","setFilter","transactions","useTransactionStore","React","handleSearch","handleSelected","guid","transaction","Drawer","MarkAsPaidDialog","onLinkTransaction","Dialog","Text","MarkAsUnpaidDialog","onUnlinkTransaction","PaymentSchedule","frequency","firstDay","secondDay","onFrequencyChange","onFirstDayChange","onSecondDayChange","frequencies","Frequency","daysOfWeek","daysOfMonth","day","formatOrdinal","beginDaysOfMonth","endDaysOfMonth","weeklyType","monthlyType","tempDayOfYear","setDayOfYear","startOfToday","dayOfYear","addYears","handleYearlyChange","date","getDayOfYear","Select","LocalizationProvider","AdapterDateFns","DatePicker","subDays","PaymentScheduleAction","repeatingTransaction","updateRepeatingTransaction","onEvent","useEvent","setIsOpen","setFrequency","setFirstDay","setSecondDay","handleSave","handleOpen","ANALYTICS_EVENTS","Fragment","DataRow","getFrequencyLabel","buildRows","missedRecurrences","paidRows","RecurrenceStatus","missedRows","r","getUnixTime","a","b","RecurringTransactionList","onMarkAsUnpaidClick","onMarkAsPaidClick","onTransactionClick","recurrences","menuAnchorEl","setMenuAnchorEl","menuRow","setMenuRow","rows","handleClick","row","handleMenuOpen","e","handleMenuClose","handleMenuAction","List","index","isPaid","isMissed","isLast","ListItemWrapper","ListItemAvatar","MerchantLogo","ListItemText","formatDate","fromUnixTime","DATE_FORMATS_INTL","CheckCircle","Cancel","formatCurrency","IconButton","Icon","Divider","Menu","MenuItem","UpcomingRecurrenceCard","expectedDate","status","theme","useTheme","Card","CardActionArea","BeatMaterialIcon","alpha","ChevronRight","RecurringTransactionDetails","onDeleted","selectedRecurrence","selectedAccountGuids","useGlobalUiStore","deleteRepeatingTransaction","markRecurrenceAsUnpaid","detailedTransactions","setSelectedAccount","setSelectedMember","useAccountUiStore","members","useAccountStore","amount","merchant_guid","showAccountDetails","setShowAccountDetails","showDeleteConfirm","setShowDeleteConfirm","showMarkAsPaid","setShowMarkAsPaid","showMarkAsUnpaid","setShowMarkAsUnpaid","unlinkTransactionGuid","setUnlinkTransactionGuid","showLinkTransaction","setShowLinkTransaction","transactionGuid","setTransactionGuid","endOfMonth","filteredTransactions","nextUpcomingDate","getNextUpcomingDate","handleAccountClick","member","m","handleDeleteRecurringTransaction","handleDeleteButtonClick","handleMarkAsPaidClick","handleLinkTransaction","handleMarkAsUnpaidClick","handleUnlinkTransaction","txn","Button","Delete","TransactionDetails","AccountDetailsDrawer","RecurringRow","onClick","isDetialsOpen","setIsDetailsOpen","categoryGuid","institutionName","isCredit","statusLabel","ListItem","ListItemButton","InstitutionLogo","AddRecurringTransactionDetails","SubheaderRow","fromUnixToDayOfWeekAndDate","TransactionRow","Box","AddRecurringTransaction","label","onAddRecurringTransaction","addRepeatingTransaction","user","useUserStore","isSelectTransactionOpen","setIsSelectTransactionOpen","handleAddRecurringTransaction","closeOnAdd","nextDate","getNextPaymentDate","formatISO","Add","RecurringSettingsZeroState","zeroStateFor","title","ReceiptLong","ManageIncome","forOverview","detailedRepeatingTransactions","onAdd","rt"],"mappings":"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"}
1
+ {"version":3,"file":"ManageIncome-B_8i71mE.mjs","sources":["../src/transactions/utils/Filters.ts","../src/recurringtransactions/components/shared/recurringsettings/SelectTransaction.tsx","../src/recurringtransactions/components/actions/LinkTransactionDrawer.tsx","../src/recurringtransactions/components/actions/MarkAsPaidDialog.tsx","../src/recurringtransactions/components/actions/MarkAsUnpaidDialog.tsx","../src/recurringtransactions/components/PaymentSchedule.tsx","../src/recurringtransactions/components/actions/PaymentScheduleAction.tsx","../src/recurringtransactions/components/RecurringTransactionList.tsx","../src/recurringtransactions/components/UpcomingRecurrenceCard.tsx","../src/recurringtransactions/components/RecurringTransactionDetails.tsx","../src/recurringtransactions/components/shared/recurringsettings/RecurringRow.tsx","../src/recurringtransactions/components/shared/recurringsettings/AddRecurringTransactionDetails.tsx","../src/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.tsx","../src/recurringtransactions/components/shared/recurringsettings/RecurringSettingsZeroState.tsx","../src/recurringtransactions/components/shared/recurringsettings/ManageIncome.tsx"],"sourcesContent":["import { CategoryGuids } from '../../core/constants'\nimport { type Transaction, TransactionType } from '../../core'\n\n// Returns true if the transaction is not income\nexport const expenseFilter = (t: Transaction) =>\n t.top_level_category_guid !== CategoryGuids.INCOME && t.transaction_type === TransactionType.DEBIT\n\n// Returns true if the transaction is an expense and it matches the search string\nexport const expenseFilterSearch = (t: Transaction, searchValue: string) => {\n if (expenseFilter(t)) {\n return (\n t.payee?.toLowerCase().includes(searchValue.toLowerCase()) ||\n t.description.toLowerCase().includes(searchValue.toLowerCase()) ||\n t.feed_description.toLowerCase().includes(searchValue.toLowerCase())\n )\n }\n return false\n}\n\n// Returns true if the transaction is income\nexport const incomeFilter = (t: Transaction) =>\n t.top_level_category_guid === CategoryGuids.INCOME ||\n (t.top_level_category_guid === CategoryGuids.TRANSFER &&\n t.transaction_type === TransactionType.CREDIT)\n\n// Returns true if the transaction is income and it matches the search string\nexport const incomeFilterSearch = (t: Transaction, searchValue: string) => {\n if (incomeFilter(t)) {\n return (\n t.payee?.toLowerCase().includes(searchValue.toLowerCase()) ||\n t.description?.toLowerCase().includes(searchValue.toLowerCase()) ||\n t.feed_description?.toLowerCase().includes(searchValue.toLowerCase())\n )\n }\n return false\n}\n","import { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\n\nimport { P } from '@mxenabled/mxui'\n\nimport { SearchBox, useGlobalCopyStore } from '../../../../common'\nimport { TransactionList, useTransactionsUiStore } from '../../../../transactions'\n\ninterface SelectTransactionProps {\n bgcolor?: string\n description?: string\n onSearch: (value: string) => void\n onSelected: (guid: string) => void\n}\n\nexport const SelectTransaction = observer(\n ({\n bgcolor = 'background.default',\n description,\n onSearch,\n onSelected,\n }: SelectTransactionProps) => {\n const { recurring: recurringCopy } = useGlobalCopyStore()\n const { searchValue, setSearchValue } = useTransactionsUiStore()\n\n return (\n <Stack sx={{ bgcolor, gap: 16, pt: 8 }}>\n {description && <P sx={{ mx: 24 }}>{description}</P>}\n <SearchBox\n ariaLabel={recurringCopy.select_transaction_search_aria}\n cancelAriaLabel={recurringCopy.select_transaction_search_cancel_aria}\n onChange={(value) => {\n setSearchValue(value)\n onSearch(value)\n }}\n placeholder={recurringCopy.select_transaction_search_placeholder}\n searchValue={searchValue}\n />\n <TransactionList\n bgcolor={bgcolor}\n filter={(t) => !!t.merchant_guid}\n height=\"auto\"\n onClick={onSelected}\n showLoader={false}\n />\n </Stack>\n )\n },\n)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport {\n Drawer,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n useTransactionStore,\n} from '../../../common'\nimport { type RepeatingTransaction, type Transaction, RepeatingType } from '../../../core'\n\nimport {\n expenseFilter,\n expenseFilterSearch,\n incomeFilter,\n incomeFilterSearch,\n} from '../../../transactions/utils/Filters'\n\nimport { SelectTransaction } from '../shared/recurringsettings/SelectTransaction'\nimport { useTransactionsUiStore } from '../../../transactions'\n\ninterface LinkTransactionDrawerProps {\n isOpen: boolean\n onClose: () => void\n recurringTransaction: RepeatingTransaction\n}\n\nconst buildFilter =\n (recurringTransaction: RepeatingTransaction, searchValue?: string) => (t: Transaction) => {\n if (t.repeating_transaction_guid) return false\n\n const isIncome = recurringTransaction.repeating_transaction_type === RepeatingType.Income\n\n if (searchValue) {\n return isIncome ? incomeFilterSearch(t, searchValue) : expenseFilterSearch(t, searchValue)\n }\n\n return isIncome ? incomeFilter(t) : expenseFilter(t)\n }\n\nexport const LinkTransactionDrawer = observer(\n ({ isOpen, onClose, recurringTransaction }: LinkTransactionDrawerProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { markRecurrenceAsPaid } = useRecurringTransactionsStore()\n const { filter, setFilter, transactions } = useTransactionStore()\n\n const { setSearchValue } = useTransactionsUiStore()\n\n React.useEffect(() => {\n if (isOpen) {\n setFilter({ ...filter, custom: buildFilter(recurringTransaction) })\n } else {\n setSearchValue('')\n }\n }, [isOpen, recurringTransaction])\n\n const handleSearch = (searchValue: string) => {\n setFilter({ ...filter, custom: buildFilter(recurringTransaction, searchValue) })\n }\n\n const handleSelected = async (guid: string) => {\n const transaction = transactions.find((t) => t.guid === guid)\n if (transaction) {\n await markRecurrenceAsPaid(recurringTransaction.guid, transaction)\n onClose()\n }\n }\n\n return (\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={isOpen}\n onClose={onClose}\n title={copy.link_transaction_button}\n >\n <SelectTransaction onSearch={handleSearch} onSelected={handleSelected} />\n </Drawer>\n )\n },\n)\n","import { Text } from '@mxenabled/mxui'\n\nimport { Dialog, useGlobalCopyStore } from '../../../common'\n\ninterface MarkAsPaidDialogProps {\n isOpen: boolean\n onClose: () => void\n onLinkTransaction: () => void\n}\n\nexport const MarkAsPaidDialog = ({ isOpen, onClose, onLinkTransaction }: MarkAsPaidDialogProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n\n return (\n <Dialog\n copy={{\n title: copy.mark_as_paid_dialog_title,\n close_aria: copy.close_drawer_aria,\n }}\n isOpen={isOpen}\n maxWidth=\"xs\"\n onClose={onClose}\n onPrimaryAction={onLinkTransaction}\n primaryText={copy.link_transaction_button}\n sx={{\n '& .MuiStack-root, & .MuiDialogContent-root': {\n backgroundColor: 'background.paper',\n },\n }}\n >\n <Text truncate={false}>{copy.link_transaction_description}</Text>\n </Dialog>\n )\n}\n","import { Text } from '@mxenabled/mxui'\n\nimport { Dialog, useGlobalCopyStore } from '../../../common'\n\ninterface MarkAsUnpaidDialogProps {\n isOpen: boolean\n onClose: () => void\n onUnlinkTransaction: () => void\n}\n\nexport const MarkAsUnpaidDialog = ({\n isOpen,\n onClose,\n onUnlinkTransaction,\n}: MarkAsUnpaidDialogProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n\n return (\n <Dialog\n copy={{\n title: copy.mark_as_unpaid_dialog_title,\n close_aria: copy.close_drawer_aria,\n }}\n isOpen={isOpen}\n maxWidth=\"xs\"\n onClose={onClose}\n onPrimaryAction={onUnlinkTransaction}\n primaryText={copy.unlink_transaction_button}\n sx={{\n '& .MuiStack-root, & .MuiDialogContent-root': {\n backgroundColor: 'background.paper',\n },\n }}\n >\n <Text truncate={false}>{copy.unlink_transaction_description}</Text>\n </Dialog>\n )\n}\n","import React from 'react'\nimport { addYears } from 'date-fns/addYears'\nimport { getDayOfYear } from 'date-fns/getDayOfYear'\nimport { setDayOfYear } from 'date-fns/setDayOfYear'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\n\nimport Stack from '@mui/material/Stack'\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3'\nimport { DatePicker } from '@mui/x-date-pickers'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\n\nimport { Select, useGlobalCopyStore } from '../../common'\nimport { Frequency } from '../../core'\nimport { formatOrdinal } from '../../core/utils/NumberFormatting'\n\ninterface PaymentScheduleProps {\n frequency: Frequency\n firstDay: number\n secondDay?: number\n onFrequencyChange: (frequency: Frequency) => void\n onFirstDayChange: (day: number) => void\n onSecondDayChange: (day: number) => void\n}\n\nexport const PaymentSchedule = ({\n frequency,\n firstDay,\n secondDay,\n onFrequencyChange,\n onFirstDayChange,\n onSecondDayChange,\n}: PaymentScheduleProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n\n const frequencies = React.useMemo(\n () => [\n { id: Frequency.EveryWeek, label: copy.frequency_every_week },\n { id: Frequency.EveryOtherWeek, label: copy.frequency_every_other_week },\n { id: Frequency.TwiceAMonth, label: copy.frequency_twice_a_month },\n { id: Frequency.EveryMonth, label: copy.frequency_every_month },\n { id: Frequency.EveryOtherMonth, label: copy.frequency_every_other_month },\n { id: Frequency.EveryQuarter, label: copy.frequency_every_quarter },\n { id: Frequency.EveryOtherQuarter, label: copy.frequency_every_other_quarter },\n { id: Frequency.EveryYear, label: copy.frequency_every_year },\n ],\n [copy],\n )\n\n const daysOfWeek = [\n { id: 0, label: copy.weekday_sunday },\n { id: 1, label: copy.weekday_monday },\n { id: 2, label: copy.weekday_tuesday },\n { id: 3, label: copy.weekday_wednesday },\n { id: 4, label: copy.weekday_thursday },\n { id: 5, label: copy.weekday_friday },\n { id: 6, label: copy.weekday_saturday },\n ]\n\n const daysOfMonth = [...Array(31).keys()].map((day) => ({\n id: day + 1,\n label: formatOrdinal(day + 1),\n }))\n daysOfMonth[30].label += ` (${copy.last_day_of_month})`\n\n const beginDaysOfMonth = daysOfMonth.slice(0, 15)\n const endDaysOfMonth = daysOfMonth.slice(14)\n\n const weeklyType = frequency === Frequency.EveryWeek || frequency === Frequency.EveryOtherWeek\n const monthlyType =\n frequency === Frequency.TwiceAMonth ||\n frequency === Frequency.EveryMonth ||\n frequency === Frequency.EveryOtherMonth ||\n frequency === Frequency.EveryQuarter ||\n frequency === Frequency.EveryOtherQuarter\n\n const tempDayOfYear = setDayOfYear(startOfToday(), firstDay)\n const dayOfYear = tempDayOfYear < startOfToday() ? addYears(tempDayOfYear, 1) : tempDayOfYear\n\n const handleYearlyChange = (date: Date | null) => {\n if (date) {\n onFirstDayChange(getDayOfYear(date))\n }\n }\n\n return (\n <Stack gap={24} sx={{ m: 24 }}>\n <Select\n label={copy.frequency}\n onChange={onFrequencyChange}\n options={frequencies}\n value={frequency}\n />\n {weeklyType && (\n <Select\n label={copy.day_of_the_week}\n onChange={onFirstDayChange}\n options={daysOfWeek}\n value={firstDay}\n />\n )}\n {monthlyType && (\n <Select\n label={\n frequency === Frequency.TwiceAMonth\n ? copy.first_day_of_the_month\n : copy.day_of_the_month\n }\n onChange={onFirstDayChange}\n options={frequency === Frequency.TwiceAMonth ? beginDaysOfMonth : daysOfMonth}\n value={firstDay}\n />\n )}\n {frequency === Frequency.TwiceAMonth && (\n <Select\n label={copy.second_day_of_the_month}\n onChange={onSecondDayChange}\n options={endDaysOfMonth}\n value={secondDay || 0}\n />\n )}\n {frequency === Frequency.EveryYear && (\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <DatePicker\n disablePast={true}\n label={copy.next_payment_date}\n maxDate={subDays(addYears(startOfToday(), 1), 1)}\n minDate={startOfToday()}\n onChange={handleYearlyChange}\n value={dayOfYear}\n />\n </LocalizationProvider>\n )}\n </Stack>\n )\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport {\n ANALYTICS_EVENTS,\n DataRow,\n Drawer,\n useEvent,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n} from '../../../common'\nimport { type RepeatingTransaction, Frequency } from '../../../core'\n\nimport { getFrequencyLabel } from '../../../core/utils/RecurringTransactionsUtil'\n\nimport { PaymentSchedule } from '../PaymentSchedule'\n\ninterface FrequencyActionProps {\n repeatingTransaction: RepeatingTransaction\n}\n\nexport const PaymentScheduleAction = observer(({ repeatingTransaction }: FrequencyActionProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { updateRepeatingTransaction } = useRecurringTransactionsStore()\n\n const { onEvent } = useEvent()\n const [isOpen, setIsOpen] = React.useState(false)\n const [frequency, setFrequency] = React.useState<Frequency>(repeatingTransaction.recurrence_type)\n const [firstDay, setFirstDay] = React.useState(repeatingTransaction.recurrence_day)\n const [secondDay, setSecondDay] = React.useState(repeatingTransaction.second_recurrence_day)\n\n const handleSave = async () => {\n await updateRepeatingTransaction({\n ...repeatingTransaction,\n recurrence_type: frequency,\n recurrence_day: firstDay,\n second_recurrence_day: secondDay,\n })\n\n setIsOpen(false)\n }\n\n const handleOpen = () => {\n setIsOpen(true)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_DETAILS_CLICK_PAYMENT_SCHEDULE)\n }\n\n return (\n <>\n <DataRow\n iconName=\"sync\"\n label={copy.activity_schedule}\n onClick={handleOpen}\n showChevron={false}\n value={`${getFrequencyLabel(copy, repeatingTransaction, true)}`}\n />\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n onPrimaryAction={handleSave}\n title={copy.payment_schedule}\n >\n <PaymentSchedule\n firstDay={firstDay}\n frequency={frequency}\n onFirstDayChange={setFirstDay}\n onFrequencyChange={setFrequency}\n onSecondDayChange={setSecondDay}\n secondDay={secondDay}\n />\n </Drawer>\n </>\n )\n})\n","import React from 'react'\n\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { getUnixTime } from 'date-fns/getUnixTime'\n\nimport Divider from '@mui/material/Divider'\nimport IconButton from '@mui/material/IconButton'\nimport List from '@mui/material/List'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemText from '@mui/material/ListItemText'\nimport Menu from '@mui/material/Menu'\nimport MenuItem from '@mui/material/MenuItem'\nimport Stack from '@mui/material/Stack'\n\nimport { Cancel, CheckCircle, Icon } from '@mxenabled/mx-icons'\nimport { MerchantLogo, Text } from '@mxenabled/mxui'\n\nimport {\n ANALYTICS_EVENTS,\n formatCurrency,\n ListItemWrapper,\n useEvent,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n} from '../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\n\nimport {\n type Recurrence,\n type Transaction,\n RecurrenceStatus,\n RepeatingTransaction,\n} from '../../core'\n\ntype RecurringTransactionRow = {\n key: string\n name: string\n amount: number\n date: number\n merchantGuid: string\n categoryGuid: string\n category: string\n status: RecurrenceStatus.Paid | RecurrenceStatus.Missed\n transactionGuid?: string\n}\n\nconst buildRows = (\n transactions: Transaction[],\n missedRecurrences: Recurrence[],\n): RecurringTransactionRow[] => {\n const paidRows: RecurringTransactionRow[] = transactions.map((t) => ({\n key: t.guid,\n name: t.payee || t.description || t.feed_description,\n amount: t.amount,\n date: t.date,\n merchantGuid: t.merchant_guid || '',\n categoryGuid: t.top_level_category_guid || '',\n category: t.category || '',\n status: RecurrenceStatus.Paid,\n transactionGuid: t.guid,\n }))\n\n const missedRows: RecurringTransactionRow[] = missedRecurrences.map((r) => ({\n key: `missed-${r.expectedDate.getTime()}`,\n name: r.name,\n amount: r.amount,\n date: getUnixTime(r.expectedDate),\n merchantGuid: r.merchantGuid,\n categoryGuid: r.categoryGuid,\n category: '',\n status: RecurrenceStatus.Missed,\n }))\n\n return [...paidRows, ...missedRows].sort((a, b) => b.date - a.date)\n}\n\ninterface RecurringTransactionListProps {\n isIncome?: boolean\n onMarkAsPaidClick: () => void\n onMarkAsUnpaidClick: (transactionGuid: string) => void\n onTransactionClick: (guid: string) => void\n recurringTransaction: RepeatingTransaction\n transactions: Transaction[]\n}\n\nexport const RecurringTransactionList = ({\n isIncome = false,\n onMarkAsUnpaidClick,\n onMarkAsPaidClick,\n onTransactionClick,\n recurringTransaction,\n transactions,\n}: RecurringTransactionListProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n const { recurrences } = useRecurringTransactionsStore()\n\n const [menuAnchorEl, setMenuAnchorEl] = React.useState<HTMLElement | null>(null)\n const [menuRow, setMenuRow] = React.useState<RecurringTransactionRow | null>(null)\n\n const missedRecurrences = React.useMemo(\n () =>\n recurrences.filter(\n (r) =>\n r.repeatingTransactionGuid === recurringTransaction.guid &&\n r.status === RecurrenceStatus.Missed,\n ),\n [recurrences, recurringTransaction.guid],\n )\n\n const rows = React.useMemo(\n () => buildRows(transactions, missedRecurrences),\n [transactions, missedRecurrences],\n )\n\n const handleClick = (row: RecurringTransactionRow) => {\n if (row.transactionGuid) {\n onTransactionClick(row.transactionGuid)\n }\n }\n\n const handleMenuOpen = (e: React.MouseEvent<HTMLElement>, row: RecurringTransactionRow) => {\n e.stopPropagation()\n setMenuAnchorEl(e.currentTarget)\n setMenuRow(row)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_LIST_CLICK_MORE_MENU)\n }\n\n const handleMenuClose = () => {\n setMenuAnchorEl(null)\n setMenuRow(null)\n }\n\n const handleMenuAction = () => {\n if (!menuRow) return\n\n if (menuRow.status === RecurrenceStatus.Missed) {\n onMarkAsPaidClick()\n } else if (menuRow.transactionGuid) {\n onMarkAsUnpaidClick(menuRow.transactionGuid)\n }\n handleMenuClose()\n }\n\n return (\n <Stack direction=\"column\" sx={{ minHeight: '30dvh' }}>\n <Text bold={true} id=\"past-activity\" sx={{ ml: 24, mt: 16, mb: 8 }} variant=\"body1\">\n {copy.past_activity}\n </Text>\n <List aria-labelledby=\"past-activity\" sx={{ flex: 1, overflow: 'auto' }}>\n {rows.map((row, index) => {\n const isPaid = row.status === RecurrenceStatus.Paid\n const isMissed = row.status === RecurrenceStatus.Missed\n const isLast = index === rows.length - 1\n\n return (\n <React.Fragment key={row.key}>\n <ListItemWrapper\n onClick={isPaid ? () => handleClick(row) : undefined}\n sx={{ '& .MuiListItemButton-root': { pr: 10 } }}\n >\n <ListItemAvatar>\n <MerchantLogo categoryGuid={row.categoryGuid} merchantGuid={row.merchantGuid} />\n </ListItemAvatar>\n <ListItemText\n disableTypography={true}\n secondary={\n <Stack direction=\"row\" justifyContent=\"space-between\">\n <Text variant=\"caption\">\n {formatDate(fromUnixTime(row.date), DATE_FORMATS_INTL.MONTH_DAY_YEAR)}\n </Text>\n <Stack\n alignItems=\"center\"\n direction=\"row\"\n gap={6}\n sx={{ textTransform: 'uppercase' }}\n >\n {isPaid && <CheckCircle color=\"success\" filled={true} size={12} />}\n {isMissed && <Cancel color=\"error\" filled={true} size={12} />}\n <Text bold={true} color=\"text.secondary\" variant=\"caption\">\n {isPaid ? copy.paid?.toLowerCase() : copy.missed?.toLowerCase()}\n </Text>\n </Stack>\n </Stack>\n }\n >\n <Stack direction=\"row\" justifyContent=\"space-between\" sx={{ gap: 8 }}>\n <Text bold={true} variant=\"body1\">\n {row.name}\n </Text>\n <Text\n bold={true}\n color={isIncome ? 'success.main' : 'text.primary'}\n sx={{ flexShrink: 0 }}\n variant=\"body1\"\n >\n {isIncome ? '+' : ''}\n {formatCurrency(row.amount, '0,0.00')}\n </Text>\n </Stack>\n </ListItemText>\n <IconButton\n aria-label={copy.more_menu_aria}\n onClick={(e) => handleMenuOpen(e, row)}\n size=\"small\"\n sx={{ alignSelf: 'center', ml: 4 }}\n >\n <Icon name=\"more_vert\" size={20} sx={{ color: 'text.secondary' }} />\n </IconButton>\n </ListItemWrapper>\n <Divider variant={isLast ? 'fullWidth' : 'inset'} />\n </React.Fragment>\n )\n })}\n </List>\n\n <Menu\n anchorEl={menuAnchorEl}\n anchorOrigin={{ horizontal: 'right', vertical: 'bottom' }}\n disableScrollLock={true}\n onClose={handleMenuClose}\n open={Boolean(menuAnchorEl)}\n transformOrigin={{ horizontal: 'right', vertical: 'top' }}\n >\n <MenuItem onClick={handleMenuAction} sx={{ p: 12 }}>\n <Text variant=\"body1\">\n {menuRow?.status === RecurrenceStatus.Missed\n ? copy.mark_as_paid_cta\n : copy.mark_as_unpaid_cta}\n </Text>\n </MenuItem>\n </Menu>\n </Stack>\n )\n}\n","import Card from '@mui/material/Card'\nimport CardActionArea from '@mui/material/CardActionArea'\nimport Stack from '@mui/material/Stack'\nimport { alpha, useTheme } from '@mui/material'\n\nimport { ChevronRight } from '@mxenabled/mx-icons'\nimport { Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../common'\nimport { DATE_FORMATS_INTL, formatDate } from '../../core/constants'\nimport { RecurrenceStatus } from '../../core'\nimport { BeatMaterialIcon } from '../../microinsights'\n\ninterface UpcomingRecurrenceCardProps {\n expectedDate: Date\n onMarkAsPaidClick: () => void\n status?: RecurrenceStatus\n}\n\nexport const UpcomingRecurrenceCard = ({\n expectedDate,\n onMarkAsPaidClick,\n status,\n}: UpcomingRecurrenceCardProps) => {\n const theme = useTheme()\n const { recurring: copy } = useGlobalCopyStore()\n\n const isPaid = status === RecurrenceStatus.Paid\n\n return (\n <Card variant=\"elevation\">\n <CardActionArea onClick={onMarkAsPaidClick}>\n <Stack\n alignItems=\"center\"\n direction=\"row\"\n justifyContent=\"space-between\"\n sx={{ px: 16, py: 14 }}\n >\n <Stack alignItems=\"center\" direction=\"row\" gap={12}>\n <BeatMaterialIcon\n bgColor={alpha(theme.palette.primary.main, 0.15)}\n name={isPaid ? 'check_circle' : 'calendar_clock'}\n />\n <Stack direction=\"column\">\n <Text fontSize={11} variant=\"body1\">\n {isPaid ? copy.paid : copy.upcoming}\n </Text>\n <Text bold={true} variant=\"body1\">\n {formatDate(expectedDate, DATE_FORMATS_INTL.MONTH_DAY_YEAR)}\n </Text>\n </Stack>\n </Stack>\n\n <Stack alignItems=\"center\" direction=\"row\" gap={4}>\n <Text bold={true} variant=\"body1\">\n {isPaid ? copy.mark_as_unpaid_cta : copy.mark_as_paid_cta}\n </Text>\n <ChevronRight size={20} />\n </Stack>\n </Stack>\n </CardActionArea>\n </Card>\n )\n}\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { subDays } from 'date-fns/subDays'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { endOfMonth } from 'date-fns/endOfMonth'\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 { Delete } from '@mxenabled/mx-icons'\n\nimport { MerchantLogo, P, Text } from '@mxenabled/mxui'\n\nimport {\n ANALYTICS_EVENTS,\n DataRow,\n Dialog,\n Drawer,\n useAccountStore,\n useEvent,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useTransactionStore,\n} from '../../common'\nimport {\n type Member,\n type Recurrence,\n type RepeatingTransaction,\n type Transaction,\n RecurrenceStatus,\n RepeatingType,\n} from '../../core'\n\nimport { TransactionDetails } from '../../transactions'\nimport { AccountDetailsDrawer, useAccountUiStore } from '../../accounts'\n\nimport { formatCurrency } from '../../core/utils/NumberFormatting'\nimport { getNextUpcomingDate } from '../../core/utils/RecurringTransactionsUtil'\nimport { LinkTransactionDrawer } from './actions/LinkTransactionDrawer'\nimport { MarkAsPaidDialog } from './actions/MarkAsPaidDialog'\nimport { MarkAsUnpaidDialog } from './actions/MarkAsUnpaidDialog'\nimport { PaymentScheduleAction } from './actions/PaymentScheduleAction'\nimport { RecurringTransactionList } from './RecurringTransactionList'\nimport { UpcomingRecurrenceCard } from './UpcomingRecurrenceCard'\n\ninterface RecurringTransactionDetailsProps {\n onDeleted: () => void\n recurringTransaction: RepeatingTransaction\n selectedRecurrence: Recurrence | null\n}\n\nexport const RecurringTransactionDetails = observer(\n ({ onDeleted, recurringTransaction, selectedRecurrence }: RecurringTransactionDetailsProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { selectedAccountGuids } = useGlobalUiStore()\n const { onEvent } = useEvent()\n const { deleteRepeatingTransaction, markRecurrenceAsUnpaid, recurrences } =\n useRecurringTransactionsStore()\n const { detailedTransactions, setFilter, transactions } = useTransactionStore()\n const { setSelectedAccount, setSelectedMember } = useAccountUiStore()\n const { members } = useAccountStore()\n const { amount, description, merchant_guid } = recurringTransaction\n\n const [showAccountDetails, setShowAccountDetails] = React.useState(false)\n const [showDeleteConfirm, setShowDeleteConfirm] = React.useState(false)\n const [showMarkAsPaid, setShowMarkAsPaid] = React.useState(false)\n const [showMarkAsUnpaid, setShowMarkAsUnpaid] = React.useState(false)\n const [unlinkTransactionGuid, setUnlinkTransactionGuid] = React.useState('')\n const [showLinkTransaction, setShowLinkTransaction] = React.useState(false)\n const [transactionGuid, setTransactionGuid] = React.useState('')\n\n React.useEffect(() => {\n setFilter({\n accounts: selectedAccountGuids,\n dateRange: { start: subDays(startOfToday(), 90), end: endOfMonth(startOfToday()) },\n custom: (t: Transaction) => t.repeating_transaction_guid === recurringTransaction.guid,\n })\n }, [recurringTransaction.guid])\n\n const transaction = React.useMemo(\n () => detailedTransactions.find((t) => t.guid === transactionGuid),\n [transactionGuid, detailedTransactions],\n )\n\n const isIncome = recurringTransaction.repeating_transaction_type === RepeatingType.Income\n\n const filteredTransactions = React.useMemo(\n () => transactions.filter((t) => t.repeating_transaction_guid === recurringTransaction.guid),\n [transactions, recurringTransaction.guid],\n )\n\n const nextUpcomingDate = getNextUpcomingDate(recurringTransaction, recurrences)\n\n const handleAccountClick = () => {\n if (recurringTransaction.account) {\n setSelectedAccount(recurringTransaction.account)\n const member =\n members.find((m: Member) => m.guid === recurringTransaction.account?.member_guid) ||\n ({} as Member)\n if (member) {\n setSelectedMember(member)\n }\n setShowAccountDetails(true)\n }\n }\n\n const handleDeleteRecurringTransaction = async () => {\n await deleteRepeatingTransaction(recurringTransaction.guid)\n onDeleted()\n }\n\n const handleDeleteButtonClick = () => {\n setShowDeleteConfirm(true)\n\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_DETAILS_CLICK_DELETE)\n }\n\n const handleMarkAsPaidClick = () => {\n setShowMarkAsPaid(true)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_LIST_CLICK_MARK_AS_PAID)\n }\n\n const handleLinkTransaction = () => {\n setShowMarkAsPaid(false)\n setShowLinkTransaction(true)\n }\n\n const handleMarkAsUnpaidClick = (transactionGuid: string) => {\n setUnlinkTransactionGuid(transactionGuid)\n setShowMarkAsUnpaid(true)\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_LIST_CLICK_MARK_AS_UNPAID)\n }\n\n const handleUnlinkTransaction = async () => {\n const txn = transactions.find((t) => t.guid === unlinkTransactionGuid)\n if (txn) await markRecurrenceAsUnpaid(txn)\n\n setShowMarkAsUnpaid(false)\n setUnlinkTransactionGuid('')\n }\n\n return (\n <Stack bgcolor=\"background.default\" direction=\"column\" height=\"100%\">\n <Stack direction=\"column\" m={24}>\n <MerchantLogo\n categoryGuid={transaction?.category_guid || ''}\n merchantGuid={merchant_guid}\n size={64}\n sx={{ mb: 12 }}\n />\n <Text bold={true} variant=\"body1\">\n {description}\n </Text>\n <P color={isIncome ? 'success.main' : 'text.primary'} sx={{ mt: 4, mb: 16 }} variant=\"h1\">\n {isIncome ? '+' : ''}\n {formatCurrency(amount, '0,0.00')}\n </P>\n <UpcomingRecurrenceCard\n expectedDate={\n selectedRecurrence?.occurredOnDate ||\n selectedRecurrence?.expectedDate ||\n nextUpcomingDate\n }\n onMarkAsPaidClick={\n selectedRecurrence?.status === RecurrenceStatus.Paid &&\n selectedRecurrence.transaction?.guid\n ? () => handleMarkAsUnpaidClick(selectedRecurrence.transaction!.guid)\n : handleMarkAsPaidClick\n }\n status={selectedRecurrence?.status}\n />\n </Stack>\n <List sx={{ bgcolor: 'background.paper' }}>\n {recurringTransaction.account && (\n <>\n <DataRow\n iconName=\"checkbook\"\n label={copy.account}\n onClick={handleAccountClick}\n showChevron={false}\n value={recurringTransaction.account.displayName || ''}\n />\n <Divider variant=\"inset\" />\n </>\n )}\n\n {transaction?.category && (\n <>\n <DataRow\n iconName=\"monetization_on\"\n label={copy.category}\n value={transaction.category}\n />\n <Divider variant=\"inset\" />\n </>\n )}\n\n <PaymentScheduleAction repeatingTransaction={recurringTransaction} />\n <Divider />\n </List>\n\n <Button\n color=\"error\"\n onClick={handleDeleteButtonClick}\n startIcon={<Delete />}\n sx={{ mx: 24, my: 16 }}\n variant=\"text\"\n >\n {isIncome ? copy.delete_income_title : copy.delete_expense_title}\n </Button>\n\n <RecurringTransactionList\n isIncome={isIncome}\n onMarkAsPaidClick={handleMarkAsPaidClick}\n onMarkAsUnpaidClick={handleMarkAsUnpaidClick}\n onTransactionClick={setTransactionGuid}\n recurringTransaction={recurringTransaction}\n transactions={filteredTransactions}\n />\n\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={!!transactionGuid && Boolean(transaction)}\n onClose={() => setTransactionGuid('')}\n title={copy.transaction_details_drawer_title}\n >\n {transaction && <TransactionDetails transaction={transaction} />}\n </Drawer>\n\n <Dialog\n copy={{\n title: isIncome ? copy.delete_income_title : copy.delete_expense_title,\n close_aria: copy.close_drawer_aria,\n }}\n isOpen={showDeleteConfirm}\n onClose={() => setShowDeleteConfirm(false)}\n onPrimaryAction={handleDeleteRecurringTransaction}\n >\n <Text>{isIncome ? copy.delete_income_description : copy.delete_expense_description}</Text>\n </Dialog>\n\n <MarkAsPaidDialog\n isOpen={showMarkAsPaid}\n onClose={() => setShowMarkAsPaid(false)}\n onLinkTransaction={handleLinkTransaction}\n />\n\n <MarkAsUnpaidDialog\n isOpen={showMarkAsUnpaid}\n onClose={() => {\n setShowMarkAsUnpaid(false)\n setUnlinkTransactionGuid('')\n }}\n onUnlinkTransaction={handleUnlinkTransaction}\n />\n\n <LinkTransactionDrawer\n isOpen={showLinkTransaction}\n onClose={() => setShowLinkTransaction(false)}\n recurringTransaction={recurringTransaction}\n />\n\n <AccountDetailsDrawer\n isOpen={showAccountDetails}\n onClose={() => setShowAccountDetails(false)}\n />\n </Stack>\n )\n },\n)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\n\nimport { InstitutionLogo, MerchantLogo, Text } from '@mxenabled/mxui'\n\nimport { Drawer, useGlobalCopyStore } from '../../../../common'\nimport { type RepeatingTransaction, RepeatingType } from '../../../../core'\n\nimport { getFrequencyLabel } from '../../../../core/utils/RecurringTransactionsUtil'\nimport { RecurringTransactionDetails } from '../../RecurringTransactionDetails'\nimport { formatCurrency } from '../../../../core/utils/NumberFormatting'\n\ninterface RecurringRowProps {\n onClick?: (repeatingTransaction: RepeatingTransaction) => void\n repeatingTransaction: RepeatingTransaction\n}\n\nexport const RecurringRow = observer(\n ({ onClick = () => {}, repeatingTransaction }: RecurringRowProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n\n const [isDetialsOpen, setIsDetailsOpen] = React.useState(false)\n\n const categoryGuid = React.useMemo(\n () =>\n repeatingTransaction.transactions.length === 0\n ? ''\n : repeatingTransaction.transactions[0].category_guid || '',\n [repeatingTransaction],\n )\n\n const institutionName = repeatingTransaction.account?.displayName || ''\n\n const isCredit = repeatingTransaction.repeating_transaction_type === RepeatingType.Income\n const statusLabel = getFrequencyLabel(copy, repeatingTransaction, true)\n\n const onItemClick = () => {\n onClick(repeatingTransaction)\n setIsDetailsOpen(true)\n }\n\n return (\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton onClick={onItemClick}>\n <ListItemAvatar>\n <MerchantLogo\n categoryGuid={categoryGuid}\n merchantGuid={repeatingTransaction.merchant_guid}\n />\n </ListItemAvatar>\n <ListItemText>\n <Stack direction=\"row\" gap={4} sx={{ justifyContent: 'space-between' }}>\n <Stack direction=\"column\" sx={{ width: '50%' }}>\n <Text bold={true} variant=\"body1\">\n {repeatingTransaction.description}\n </Text>\n <Stack alignItems=\"center\" direction=\"row\" gap={6}>\n {repeatingTransaction.account?.institution_guid && (\n <InstitutionLogo\n alt={institutionName}\n institutionGuid={repeatingTransaction.account?.institution_guid}\n size={12}\n />\n )}\n <Text variant=\"caption\">{institutionName}</Text>\n </Stack>\n </Stack>\n\n <Stack alignItems=\"flex-end\" sx={{ width: '50%' }}>\n <Text\n bold={true}\n color={isCredit ? 'success.main' : 'text.primary'}\n variant=\"body1\"\n >\n {isCredit ? '+' : ''}\n {formatCurrency(repeatingTransaction.amount, '0,0.00')}\n </Text>\n <Stack\n direction=\"row\"\n sx={{\n alignItems: 'center',\n gap: 6,\n justifyContent: 'flex-end',\n textTransform: 'uppercase',\n width: '100%',\n }}\n >\n <Text bold={true} color=\"text.secondary\" variant=\"caption\">\n {statusLabel}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n </ListItemText>\n </ListItemButton>\n\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={isDetialsOpen}\n onClose={() => setIsDetailsOpen(false)}\n title={\n repeatingTransaction.repeating_transaction_type === RepeatingType.Income\n ? copy.income_details\n : copy.expense_details\n }\n >\n <RecurringTransactionDetails\n onDeleted={() => setIsDetailsOpen(false)}\n recurringTransaction={repeatingTransaction}\n selectedRecurrence={null}\n />\n </Drawer>\n </ListItem>\n )\n },\n)\n","import { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport { useGlobalCopyStore } from '../../../../common'\nimport { type Transaction, Frequency } from '../../../../core'\nimport SubheaderRow from '../../../../common/components/SubheaderRow'\n\nimport { TransactionRow } from '../../../../transactions'\n\nimport { fromUnixToDayOfWeekAndDate } from '../../../../core/utils/DateUtil'\nimport { PaymentSchedule } from '../../PaymentSchedule'\n\ninterface AddRecurringTransactionDetailsProps {\n bgcolor?: string\n firstDay: number\n secondDay?: number\n frequency: Frequency\n onFrequencyChange: (frequency: Frequency) => void\n onFirstDayChange: (day: number) => void\n onSecondDayChange: (day: number) => void\n transaction: Transaction\n}\n\nexport const AddRecurringTransactionDetails = observer(\n ({\n bgcolor = 'background.default',\n firstDay,\n secondDay,\n frequency,\n onFrequencyChange,\n onFirstDayChange,\n onSecondDayChange,\n transaction,\n }: AddRecurringTransactionDetailsProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n\n return (\n <Stack bgcolor={bgcolor} gap={24} height=\"100%\">\n <Stack>\n <SubheaderRow bgcolor={bgcolor}>\n {fromUnixToDayOfWeekAndDate(transaction.date)}\n </SubheaderRow>\n <TransactionRow component=\"div\" transaction={transaction} />\n </Stack>\n\n <Box>\n <Text bold={true} sx={{ mx: 24 }} variant=\"body1\">\n {copy.payment_schedule}\n </Text>\n\n <PaymentSchedule\n firstDay={firstDay}\n frequency={frequency}\n onFirstDayChange={onFirstDayChange}\n onFrequencyChange={onFrequencyChange}\n onSecondDayChange={onSecondDayChange}\n secondDay={secondDay}\n />\n </Box>\n </Stack>\n )\n },\n)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { formatISO } from 'date-fns/formatISO'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\n\nimport Button from '@mui/material/Button'\n\nimport { Add } from '@mxenabled/mx-icons'\n\nimport {\n Drawer,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n useTransactionStore,\n useUserStore,\n} from '../../../../common'\nimport {\n type RepeatingTransaction,\n type Transaction,\n Frequency,\n RepeatingType,\n} from '../../../../core'\n\nimport { SelectTransaction } from './SelectTransaction'\nimport { AddRecurringTransactionDetails } from './AddRecurringTransactionDetails'\n\nimport {\n expenseFilter,\n expenseFilterSearch,\n incomeFilter,\n incomeFilterSearch,\n} from '../../../../transactions/utils/Filters'\n\nimport { getNextPaymentDate } from '../../../../core/utils/RecurringTransactionsUtil'\n\ninterface AddRecurringTransactionProps {\n isIncome?: boolean\n label: string\n onAddRecurringTransaction?: () => void\n}\n\nexport const AddRecurringTransaction = observer(\n ({\n isIncome = false,\n label,\n onAddRecurringTransaction = () => null,\n }: AddRecurringTransactionProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { filter, setFilter, transactions } = useTransactionStore()\n const { addRepeatingTransaction } = useRecurringTransactionsStore()\n const { user } = useUserStore()\n\n const [isSelectTransactionOpen, setIsSelectTransactionOpen] = React.useState(false)\n const [transactionGuid, setTransactionGuid] = React.useState('')\n const [frequency, setFrequency] = React.useState(Frequency.EveryMonth)\n const [firstDay, setFirstDay] = React.useState(1)\n const [secondDay, setSecondDay] = React.useState(15)\n\n const transaction = React.useMemo(\n () => transactions.find((t) => t.guid === transactionGuid),\n [transactionGuid, transactions],\n )\n\n const handleOpen = () => {\n setIsSelectTransactionOpen(true)\n\n if (isIncome) {\n setFilter({ ...filter, custom: incomeFilter })\n } else {\n setFilter({ ...filter, custom: expenseFilter })\n }\n }\n\n const handleAddRecurringTransaction = async () => {\n if (!transaction) {\n closeOnAdd()\n return\n }\n onAddRecurringTransaction()\n\n const nextDate = getNextPaymentDate(frequency, fromUnixTime(transaction.date), firstDay)\n\n const repeatingTransaction = {\n account_guid: transaction.account_guid,\n amount: transaction.amount,\n created_by: 0, // User\n merchant_guid: transaction.merchant_guid,\n description: transaction.payee || transaction.description || transaction.feed_description,\n predicted_occurs_on: formatISO(nextDate, { representation: 'date' }),\n recurrence_day: firstDay,\n recurrence_type: frequency,\n repeating_transaction_type: isIncome ? RepeatingType.Income : RepeatingType.Bill,\n second_recurrence_day: secondDay,\n transaction_type: transaction.transaction_type,\n user_guid: user.guid,\n } as RepeatingTransaction\n\n await addRepeatingTransaction(repeatingTransaction, transaction)\n\n closeOnAdd()\n }\n\n const closeOnAdd = () => {\n setTransactionGuid('')\n setIsSelectTransactionOpen(false)\n }\n\n return (\n <>\n <Button onClick={handleOpen} startIcon={<Add size={24} />} variant=\"contained\">\n {label}\n </Button>\n\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={isSelectTransactionOpen}\n onClose={() => setIsSelectTransactionOpen(false)}\n title={label}\n >\n <SelectTransaction\n description={isIncome ? copy.add_income_description : copy.add_expense_description}\n onSearch={(searchValue) => {\n setFilter({\n ...filter,\n custom: (transaction: Transaction) => {\n if (isIncome) {\n return searchValue\n ? incomeFilterSearch(transaction, searchValue)\n : incomeFilter(transaction)\n } else {\n return searchValue\n ? expenseFilterSearch(transaction, searchValue)\n : expenseFilter(transaction)\n }\n },\n })\n }}\n onSelected={(guid) => setTransactionGuid(guid)}\n />\n </Drawer>\n\n <Drawer\n ariaLabelClose={copy.close_drawer_aria}\n isOpen={Boolean(transactionGuid)}\n onClose={() => setTransactionGuid('')}\n onPrimaryAction={handleAddRecurringTransaction}\n title={isIncome ? copy.income_details : copy.expense_details}\n >\n {transaction && (\n <AddRecurringTransactionDetails\n firstDay={firstDay}\n frequency={frequency}\n onFirstDayChange={setFirstDay}\n onFrequencyChange={setFrequency}\n onSecondDayChange={setSecondDay}\n secondDay={secondDay}\n transaction={transaction}\n />\n )}\n </Drawer>\n </>\n )\n },\n)\n","import { observer } from 'mobx-react-lite'\n\nimport Stack from '@mui/material/Stack'\n\nimport { ReceiptLong } from '@mxenabled/mx-icons'\n\nimport { P } from '@mxenabled/mxui'\n\nimport { ANALYTICS_EVENTS, useEvent, useGlobalCopyStore } from '../../../../common'\n\nimport { AddRecurringTransaction } from './AddRecurringTransaction'\n\ninterface RecurringSettingsZeroStateProps {\n zeroStateFor: 'expenses' | 'income'\n}\n\nexport const RecurringSettingsZeroState = observer(\n ({ zeroStateFor }: RecurringSettingsZeroStateProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { onEvent } = useEvent()\n\n const isIncome = zeroStateFor === 'income'\n const title = isIncome\n ? copy.recurring_setting_zero_state_income_title\n : copy.recurring_setting_zero_state_expenses_title\n const description = isIncome\n ? copy.recurring_setting_zero_state_income_description\n : copy.recurring_setting_zero_state_expenses_description\n const label = isIncome ? copy.add_income : copy.add_expense\n\n const onAdd = () => {\n onEvent(\n isIncome\n ? ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_ADD_INCOME\n : ANALYTICS_EVENTS.RECURRING_ACTIVITY_CLICK_ADD_EXPENSE,\n )\n }\n\n return (\n <Stack sx={{ alignItems: 'center', p: 24, pt: 48 }}>\n <ReceiptLong size={48} />\n <P sx={{ my: 8, fontWeight: 600 }} variant=\"body1\">\n {title}\n </P>\n <P color=\"text.secondary\" sx={{ mb: 32 }} variant=\"subtitle2\">\n {description}\n </P>\n <AddRecurringTransaction\n isIncome={isIncome}\n label={label}\n onAddRecurringTransaction={onAdd}\n />\n </Stack>\n )\n },\n)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport {\n ANALYTICS_EVENTS,\n useEvent,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n} from '../../../../common'\nimport { type RepeatingTransaction, Frequency, RepeatingType } from '../../../../core'\n\nimport { RecurringRow } from './RecurringRow'\nimport { AddRecurringTransaction } from './AddRecurringTransaction'\nimport { RecurringSettingsZeroState } from './RecurringSettingsZeroState'\n\ninterface ManageIncomeProps {\n forOverview?: boolean\n}\n\nexport const ManageIncome = observer(({ forOverview = false }: ManageIncomeProps) => {\n const { recurring: copy } = useGlobalCopyStore()\n const { detailedRepeatingTransactions } = useRecurringTransactionsStore()\n const { onEvent } = useEvent()\n\n const onClick = (repeatingTransaction: RepeatingTransaction) => {\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_INCOME, {\n repeating_transaction_guid: repeatingTransaction.guid,\n })\n }\n\n const onAdd = () => {\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_ADD_INCOME)\n }\n\n const filteredTransactions = detailedRepeatingTransactions.filter(\n (rt) =>\n rt.repeating_transaction_type === RepeatingType.Income &&\n (rt.transactions.length > 0 || rt.recurrence_type === Frequency.EveryYear),\n )\n\n return (\n <>\n {filteredTransactions.length !== 0 ? (\n <Stack\n sx={{\n height: forOverview ? 'calc(100vh - 62px)' : 'calc(100vh - 109px)',\n maxHeight: forOverview ? 'calc(100vh - 62px)' : 'calc(100vh - 109px)',\n }}\n >\n {forOverview && (\n <Text bold={true} sx={{ mb: 4, mt: 12, mx: 24 }} variant=\"body2\">\n {copy.income}\n </Text>\n )}\n <Box sx={{ flex: 1, overflow: 'auto' }}>\n <List sx={{ bgcolor: 'background.paper' }}>\n {filteredTransactions.map((rt, index) => (\n <React.Fragment key={rt.guid}>\n <RecurringRow onClick={onClick} repeatingTransaction={rt} />\n <Divider\n variant={index < filteredTransactions.length - 1 ? 'inset' : 'fullWidth'}\n />\n </React.Fragment>\n ))}\n </List>\n </Box>\n <Box>\n <Divider />\n <Box\n sx={{\n alignContent: 'center',\n bgcolor: 'background.paper',\n justifyContent: 'flex-end',\n px: 24,\n py: 12,\n textAlign: 'right',\n }}\n >\n <AddRecurringTransaction\n isIncome={true}\n label={copy.add_income}\n onAddRecurringTransaction={onAdd}\n />\n </Box>\n </Box>\n </Stack>\n ) : (\n <RecurringSettingsZeroState zeroStateFor=\"income\" />\n )}\n </>\n )\n})\n"],"names":["expenseFilter","t","CategoryGuids","TransactionType","expenseFilterSearch","searchValue","incomeFilter","incomeFilterSearch","SelectTransaction","observer","bgcolor","description","onSearch","onSelected","recurringCopy","useGlobalCopyStore","setSearchValue","useTransactionsUiStore","jsxs","Stack","P","jsx","SearchBox","value","TransactionList","buildFilter","recurringTransaction","isIncome","RepeatingType","LinkTransactionDrawer","isOpen","onClose","copy","markRecurrenceAsPaid","useRecurringTransactionsStore","filter","setFilter","transactions","useTransactionStore","React","handleSearch","handleSelected","guid","transaction","Drawer","MarkAsPaidDialog","onLinkTransaction","Dialog","Text","MarkAsUnpaidDialog","onUnlinkTransaction","PaymentSchedule","frequency","firstDay","secondDay","onFrequencyChange","onFirstDayChange","onSecondDayChange","frequencies","Frequency","daysOfWeek","daysOfMonth","day","formatOrdinal","beginDaysOfMonth","endDaysOfMonth","weeklyType","monthlyType","tempDayOfYear","setDayOfYear","startOfToday","dayOfYear","addYears","handleYearlyChange","date","getDayOfYear","Select","LocalizationProvider","AdapterDateFns","DatePicker","subDays","PaymentScheduleAction","repeatingTransaction","updateRepeatingTransaction","onEvent","useEvent","setIsOpen","setFrequency","setFirstDay","setSecondDay","handleSave","handleOpen","ANALYTICS_EVENTS","Fragment","DataRow","getFrequencyLabel","buildRows","missedRecurrences","paidRows","RecurrenceStatus","missedRows","r","getUnixTime","a","b","RecurringTransactionList","onMarkAsUnpaidClick","onMarkAsPaidClick","onTransactionClick","recurrences","menuAnchorEl","setMenuAnchorEl","menuRow","setMenuRow","rows","handleClick","row","handleMenuOpen","e","handleMenuClose","handleMenuAction","List","index","isPaid","isMissed","isLast","ListItemWrapper","ListItemAvatar","MerchantLogo","ListItemText","formatDate","fromUnixTime","DATE_FORMATS_INTL","CheckCircle","Cancel","formatCurrency","IconButton","Icon","Divider","Menu","MenuItem","UpcomingRecurrenceCard","expectedDate","status","theme","useTheme","Card","CardActionArea","BeatMaterialIcon","alpha","ChevronRight","RecurringTransactionDetails","onDeleted","selectedRecurrence","selectedAccountGuids","useGlobalUiStore","deleteRepeatingTransaction","markRecurrenceAsUnpaid","detailedTransactions","setSelectedAccount","setSelectedMember","useAccountUiStore","members","useAccountStore","amount","merchant_guid","showAccountDetails","setShowAccountDetails","showDeleteConfirm","setShowDeleteConfirm","showMarkAsPaid","setShowMarkAsPaid","showMarkAsUnpaid","setShowMarkAsUnpaid","unlinkTransactionGuid","setUnlinkTransactionGuid","showLinkTransaction","setShowLinkTransaction","transactionGuid","setTransactionGuid","endOfMonth","filteredTransactions","nextUpcomingDate","getNextUpcomingDate","handleAccountClick","member","m","handleDeleteRecurringTransaction","handleDeleteButtonClick","handleMarkAsPaidClick","handleLinkTransaction","handleMarkAsUnpaidClick","handleUnlinkTransaction","txn","Button","Delete","TransactionDetails","AccountDetailsDrawer","RecurringRow","onClick","isDetialsOpen","setIsDetailsOpen","categoryGuid","institutionName","isCredit","statusLabel","ListItem","ListItemButton","InstitutionLogo","AddRecurringTransactionDetails","SubheaderRow","fromUnixToDayOfWeekAndDate","TransactionRow","Box","AddRecurringTransaction","label","onAddRecurringTransaction","addRepeatingTransaction","user","useUserStore","isSelectTransactionOpen","setIsSelectTransactionOpen","handleAddRecurringTransaction","closeOnAdd","nextDate","getNextPaymentDate","formatISO","Add","RecurringSettingsZeroState","zeroStateFor","title","ReceiptLong","ManageIncome","forOverview","detailedRepeatingTransactions","onAdd","rt"],"mappings":"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"}
@@ -7,10 +7,10 @@ import R from "@mui/material/Tabs";
7
7
  import d from "@mui/material/Divider";
8
8
  import b from "@mui/material/List";
9
9
  import T from "@mui/material/Stack";
10
- import { R as C, A as S, a as E, M as v } from "./ManageIncome-Be9WHv-s.mjs";
10
+ import { R as C, A as S, a as E, M as v } from "./ManageIncome-B_8i71mE.mjs";
11
11
  import { u as _, h as A, f } from "./hooks-97sNJ_lf.mjs";
12
12
  import { R as y, F as N } from "./RecurringTransactionsUtil-CHWmqvW5.mjs";
13
- import { A as m } from "./Analytics-WeZYytR0.mjs";
13
+ import { A as m } from "./Analytics-D-jdcL72.mjs";
14
14
  const I = h(() => {
15
15
  const { recurring: g } = _(), { detailedRepeatingTransactions: n } = A(), { onEvent: a } = f(), l = (r) => {
16
16
  a(m.RECURRING_TRANSACTIONS_CLICK_EXPENSE, {
@@ -86,4 +86,4 @@ export {
86
86
  I as M,
87
87
  X as R
88
88
  };
89
- //# sourceMappingURL=RecurringSettings-kRqAViNn.mjs.map
89
+ //# sourceMappingURL=RecurringSettings-hs0YUp83.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"RecurringSettings-kRqAViNn.mjs","sources":["../src/recurringtransactions/components/shared/recurringsettings/ManageExpenses.tsx","../src/recurringtransactions/components/shared/RecurringSettings.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\n\nimport {\n ANALYTICS_EVENTS,\n useEvent,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n} from '../../../../common'\nimport { type RepeatingTransaction, Frequency, RepeatingType } from '../../../../core'\n\nimport { RecurringRow } from './RecurringRow'\nimport { AddRecurringTransaction } from './AddRecurringTransaction'\nimport { RecurringSettingsZeroState } from './RecurringSettingsZeroState'\n\nexport const ManageExpenses = observer(() => {\n const { recurring: copy } = useGlobalCopyStore()\n const { detailedRepeatingTransactions } = useRecurringTransactionsStore()\n const { onEvent } = useEvent()\n\n const onClick = (repeatingTransaction: RepeatingTransaction) => {\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_EXPENSE, {\n repeating_transaction_guid: repeatingTransaction.guid,\n })\n }\n\n const onAdd = () => {\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_ADD_EXPENSE)\n }\n\n const filteredTransactions = detailedRepeatingTransactions.filter(\n (rt) =>\n rt.repeating_transaction_type !== RepeatingType.Income &&\n (rt.transactions.length > 0 || rt.recurrence_type === Frequency.EveryYear),\n )\n\n return (\n <>\n {filteredTransactions.length !== 0 ? (\n <Stack\n sx={{\n height: 'calc(100vh - 109px)',\n maxHeight: 'calc(100vh - 109px)',\n }}\n >\n <Box sx={{ flex: 1, overflow: 'auto' }}>\n <List sx={{ bgcolor: 'background.paper' }}>\n {filteredTransactions.map((rt, index) => (\n <React.Fragment key={rt.guid}>\n <RecurringRow onClick={onClick} repeatingTransaction={rt} />\n <Divider\n variant={index < filteredTransactions.length - 1 ? 'inset' : 'fullWidth'}\n />\n </React.Fragment>\n ))}\n </List>\n </Box>\n <Box>\n <Divider />\n <Box\n sx={{\n alignContent: 'center',\n bgcolor: 'background.paper',\n justifyContent: 'flex-end',\n px: 24,\n py: 12,\n textAlign: 'right',\n }}\n >\n <AddRecurringTransaction label={copy.add_expense} onAddRecurringTransaction={onAdd} />\n </Box>\n </Box>\n </Stack>\n ) : (\n <RecurringSettingsZeroState zeroStateFor=\"expenses\" />\n )}\n </>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\n\nimport { ManageExpenses } from './recurringsettings/ManageExpenses'\nimport { ManageIncome } from './recurringsettings/ManageIncome'\n\nimport { useEvent, useGlobalCopyStore } from '../../../common'\n\ninterface RecurringSettingsProps {\n defaultSelectedTab?: number\n}\n\nexport const RecurringSettings = observer(({ defaultSelectedTab = 0 }: RecurringSettingsProps) => {\n const [selectedTab, setSelectedTab] = React.useState(defaultSelectedTab)\n const { onEvent } = useEvent()\n const { recurring: recurringCopy } = useGlobalCopyStore()\n\n const handleTabChange = (_event: React.SyntheticEvent, newValue: number) => {\n setSelectedTab(newValue)\n onEvent(\n newValue === 0\n ? 'recurring_transactions_widget_manage_expenses'\n : 'recurring_transactions_widget_edit_income',\n )\n }\n\n return (\n <Box bgcolor=\"background.default\" height=\"100%\">\n <Tabs\n onChange={handleTabChange}\n sx={{ bgcolor: 'background.paper', mb: 0 }}\n value={selectedTab}\n variant=\"fullWidth\"\n >\n <Tab label={recurringCopy.expenses} />\n <Tab label={recurringCopy.income} />\n </Tabs>\n {selectedTab === 0 && <ManageExpenses />}\n {selectedTab === 1 && <ManageIncome />}\n </Box>\n )\n})\n"],"names":["ManageExpenses","observer","copy","useGlobalCopyStore","detailedRepeatingTransactions","useRecurringTransactionsStore","onEvent","useEvent","onClick","repeatingTransaction","ANALYTICS_EVENTS","onAdd","filteredTransactions","rt","RepeatingType","Frequency","jsx","Fragment","jsxs","Stack","Box","List","index","React","RecurringRow","Divider","AddRecurringTransaction","RecurringSettingsZeroState","RecurringSettings","defaultSelectedTab","selectedTab","setSelectedTab","recurringCopy","Tabs","_event","newValue","Tab","ManageIncome"],"mappings":"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"}
1
+ {"version":3,"file":"RecurringSettings-hs0YUp83.mjs","sources":["../src/recurringtransactions/components/shared/recurringsettings/ManageExpenses.tsx","../src/recurringtransactions/components/shared/RecurringSettings.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\n\nimport {\n ANALYTICS_EVENTS,\n useEvent,\n useGlobalCopyStore,\n useRecurringTransactionsStore,\n} from '../../../../common'\nimport { type RepeatingTransaction, Frequency, RepeatingType } from '../../../../core'\n\nimport { RecurringRow } from './RecurringRow'\nimport { AddRecurringTransaction } from './AddRecurringTransaction'\nimport { RecurringSettingsZeroState } from './RecurringSettingsZeroState'\n\nexport const ManageExpenses = observer(() => {\n const { recurring: copy } = useGlobalCopyStore()\n const { detailedRepeatingTransactions } = useRecurringTransactionsStore()\n const { onEvent } = useEvent()\n\n const onClick = (repeatingTransaction: RepeatingTransaction) => {\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_EXPENSE, {\n repeating_transaction_guid: repeatingTransaction.guid,\n })\n }\n\n const onAdd = () => {\n onEvent(ANALYTICS_EVENTS.RECURRING_TRANSACTIONS_CLICK_ADD_EXPENSE)\n }\n\n const filteredTransactions = detailedRepeatingTransactions.filter(\n (rt) =>\n rt.repeating_transaction_type !== RepeatingType.Income &&\n (rt.transactions.length > 0 || rt.recurrence_type === Frequency.EveryYear),\n )\n\n return (\n <>\n {filteredTransactions.length !== 0 ? (\n <Stack\n sx={{\n height: 'calc(100vh - 109px)',\n maxHeight: 'calc(100vh - 109px)',\n }}\n >\n <Box sx={{ flex: 1, overflow: 'auto' }}>\n <List sx={{ bgcolor: 'background.paper' }}>\n {filteredTransactions.map((rt, index) => (\n <React.Fragment key={rt.guid}>\n <RecurringRow onClick={onClick} repeatingTransaction={rt} />\n <Divider\n variant={index < filteredTransactions.length - 1 ? 'inset' : 'fullWidth'}\n />\n </React.Fragment>\n ))}\n </List>\n </Box>\n <Box>\n <Divider />\n <Box\n sx={{\n alignContent: 'center',\n bgcolor: 'background.paper',\n justifyContent: 'flex-end',\n px: 24,\n py: 12,\n textAlign: 'right',\n }}\n >\n <AddRecurringTransaction label={copy.add_expense} onAddRecurringTransaction={onAdd} />\n </Box>\n </Box>\n </Stack>\n ) : (\n <RecurringSettingsZeroState zeroStateFor=\"expenses\" />\n )}\n </>\n )\n})\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\n\nimport { ManageExpenses } from './recurringsettings/ManageExpenses'\nimport { ManageIncome } from './recurringsettings/ManageIncome'\n\nimport { useEvent, useGlobalCopyStore } from '../../../common'\n\ninterface RecurringSettingsProps {\n defaultSelectedTab?: number\n}\n\nexport const RecurringSettings = observer(({ defaultSelectedTab = 0 }: RecurringSettingsProps) => {\n const [selectedTab, setSelectedTab] = React.useState(defaultSelectedTab)\n const { onEvent } = useEvent()\n const { recurring: recurringCopy } = useGlobalCopyStore()\n\n const handleTabChange = (_event: React.SyntheticEvent, newValue: number) => {\n setSelectedTab(newValue)\n onEvent(\n newValue === 0\n ? 'recurring_transactions_widget_manage_expenses'\n : 'recurring_transactions_widget_edit_income',\n )\n }\n\n return (\n <Box bgcolor=\"background.default\" height=\"100%\">\n <Tabs\n onChange={handleTabChange}\n sx={{ bgcolor: 'background.paper', mb: 0 }}\n value={selectedTab}\n variant=\"fullWidth\"\n >\n <Tab label={recurringCopy.expenses} />\n <Tab label={recurringCopy.income} />\n </Tabs>\n {selectedTab === 0 && <ManageExpenses />}\n {selectedTab === 1 && <ManageIncome />}\n </Box>\n )\n})\n"],"names":["ManageExpenses","observer","copy","useGlobalCopyStore","detailedRepeatingTransactions","useRecurringTransactionsStore","onEvent","useEvent","onClick","repeatingTransaction","ANALYTICS_EVENTS","onAdd","filteredTransactions","rt","RepeatingType","Frequency","jsx","Fragment","jsxs","Stack","Box","List","index","React","RecurringRow","Divider","AddRecurringTransaction","RecurringSettingsZeroState","RecurringSettings","defaultSelectedTab","selectedTab","setSelectedTab","recurringCopy","Tabs","_event","newValue","Tab","ManageIncome"],"mappings":";;;;;;;;;;;;;AAoBO,MAAMA,IAAiBC,EAAS,MAAM;AAC3C,QAAM,EAAE,WAAWC,EAAA,IAASC,EAAA,GACtB,EAAE,+BAAAC,EAAA,IAAkCC,EAAA,GACpC,EAAE,SAAAC,EAAA,IAAYC,EAAA,GAEdC,IAAU,CAACC,MAA+C;AAC9D,IAAAH,EAAQI,EAAiB,sCAAsC;AAAA,MAC7D,4BAA4BD,EAAqB;AAAA,IAAA,CAClD;AAAA,EACH,GAEME,IAAQ,MAAM;AAClB,IAAAL,EAAQI,EAAiB,wCAAwC;AAAA,EACnE,GAEME,IAAuBR,EAA8B;AAAA,IACzD,CAACS,MACCA,EAAG,+BAA+BC,EAAc,WAC/CD,EAAG,aAAa,SAAS,KAAKA,EAAG,oBAAoBE,EAAU;AAAA,EAAA;AAGpE,SACE,gBAAAC,EAAAC,GAAA,EACG,UAAAL,EAAqB,WAAW,IAC/B,gBAAAM;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,QAAQ;AAAA,QACR,WAAW;AAAA,MAAA;AAAA,MAGb,UAAA;AAAA,QAAA,gBAAAH,EAACI,GAAA,EAAI,IAAI,EAAE,MAAM,GAAG,UAAU,OAAA,GAC5B,UAAA,gBAAAJ,EAACK,GAAA,EAAK,IAAI,EAAE,SAAS,mBAAA,GAClB,UAAAT,EAAqB,IAAI,CAACC,GAAIS,MAC7B,gBAAAJ,EAACK,EAAM,UAAN,EACC,UAAA;AAAA,UAAA,gBAAAP,EAACQ,GAAA,EAAa,SAAAhB,GAAkB,sBAAsBK,EAAA,CAAI;AAAA,UAC1D,gBAAAG;AAAA,YAACS;AAAA,YAAA;AAAA,cACC,SAASH,IAAQV,EAAqB,SAAS,IAAI,UAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QAC/D,EAAA,GAJmBC,EAAG,IAKxB,CACD,EAAA,CACH,EAAA,CACF;AAAA,0BACCO,GAAA,EACC,UAAA;AAAA,UAAA,gBAAAJ,EAACS,GAAA,EAAQ;AAAA,UACT,gBAAAT;AAAA,YAACI;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,gBACF,cAAc;AAAA,gBACd,SAAS;AAAA,gBACT,gBAAgB;AAAA,gBAChB,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,WAAW;AAAA,cAAA;AAAA,cAGb,4BAACM,GAAA,EAAwB,OAAOxB,EAAK,aAAa,2BAA2BS,EAAA,CAAO;AAAA,YAAA;AAAA,UAAA;AAAA,QACtF,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAGF,gBAAAK,EAACW,GAAA,EAA2B,cAAa,YAAW,EAAA,CAExD;AAEJ,CAAC,GCnEYC,IAAoB3B,EAAS,CAAC,EAAE,oBAAA4B,IAAqB,QAAgC;AAChG,QAAM,CAACC,GAAaC,CAAc,IAAIR,EAAM,SAASM,CAAkB,GACjE,EAAE,SAAAvB,EAAA,IAAYC,EAAA,GACd,EAAE,WAAWyB,EAAA,IAAkB7B,EAAA;AAWrC,SACE,gBAAAe,EAACE,GAAA,EAAI,SAAQ,sBAAqB,QAAO,QACvC,UAAA;AAAA,IAAA,gBAAAF;AAAA,MAACe;AAAA,MAAA;AAAA,QACC,UAZkB,CAACC,GAA8BC,MAAqB;AAC1E,UAAAJ,EAAeI,CAAQ,GACvB7B;AAAA,YACE6B,MAAa,IACT,kDACA;AAAA,UAAA;AAAA,QAER;AAAA,QAMM,IAAI,EAAE,SAAS,oBAAoB,IAAI,EAAA;AAAA,QACvC,OAAOL;AAAA,QACP,SAAQ;AAAA,QAER,UAAA;AAAA,UAAA,gBAAAd,EAACoB,GAAA,EAAI,OAAOJ,EAAc,SAAA,CAAU;AAAA,UACpC,gBAAAhB,EAACoB,GAAA,EAAI,OAAOJ,EAAc,OAAA,CAAQ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEnCF,MAAgB,KAAK,gBAAAd,EAAChB,GAAA,CAAA,CAAe;AAAA,IACrC8B,MAAgB,KAAK,gBAAAd,EAACqB,GAAA,CAAA,CAAa;AAAA,EAAA,GACtC;AAEJ,CAAC;"}
@@ -22,9 +22,9 @@ import Xe from "@mui/material/FormGroup";
22
22
  import ue from "@mui/material/IconButton";
23
23
  import $e from "@mui/material/TextField";
24
24
  import { u as Ae } from "./useAriaLive-MkYebyUR.mjs";
25
- import { b as Ze, T as Je, u as ne, O as f, c as et, d as tt, E as at, C as nt } from "./EmbeddedCard-DH8vQ3qN.mjs";
25
+ import { b as Ze, T as Je, u as ne, O as f, c as et, d as tt, E as at, C as nt } from "./EmbeddedCard-DCOQnTz-.mjs";
26
26
  import { u as E, g as M, o as rt, c as ot, l as we, f as G, a as it, C as st } from "./hooks-97sNJ_lf.mjs";
27
- import { A as j } from "./Analytics-WeZYytR0.mjs";
27
+ import { A as j } from "./Analytics-D-jdcL72.mjs";
28
28
  import lt from "@mui/material/ToggleButton";
29
29
  import { ChevronRight as Ke, Icon as k, Delete as fe, Cancel as Se, Search as ct, Edit as dt, Flag as ut } from "@mxenabled/mx-icons";
30
30
  import { fromUnixTime as ve } from "date-fns/fromUnixTime";
@@ -1705,4 +1705,4 @@ export {
1705
1705
  de as b,
1706
1706
  At as c
1707
1707
  };
1708
- //# sourceMappingURL=TransactionDetails-roZ5xLq8.mjs.map
1708
+ //# sourceMappingURL=TransactionDetails-DT-MQqOB.mjs.map