@mx-cartographer/experiences 9.4.1 → 9.4.3

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 (59) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/budgets/BubbleBudgetsWidget.es.js +29 -29
  3. package/dist/budgets/BubbleBudgetsWidget.es.js.map +1 -1
  4. package/dist/budgets/components/AddBudgets.es.js +16 -13
  5. package/dist/budgets/components/AddBudgets.es.js.map +1 -1
  6. package/dist/budgets/components/BudgetDetailsDrawer.es.js +129 -91
  7. package/dist/budgets/components/BudgetDetailsDrawer.es.js.map +1 -1
  8. package/dist/budgets/components/BudgetDetailsDrawerV2.es.js +16 -13
  9. package/dist/budgets/components/BudgetDetailsDrawerV2.es.js.map +1 -1
  10. package/dist/budgets/components/addbudget/RecalculateBudgets.es.js +14 -11
  11. package/dist/budgets/components/addbudget/RecalculateBudgets.es.js.map +1 -1
  12. package/dist/budgets/components/budgetdetails/AddSubBudget.es.js +58 -55
  13. package/dist/budgets/components/budgetdetails/AddSubBudget.es.js.map +1 -1
  14. package/dist/budgets/components/budgetdetails/BudgetDetails.es.js +8 -5
  15. package/dist/budgets/components/budgetdetails/BudgetDetails.es.js.map +1 -1
  16. package/dist/budgets/components/budgetdetails/SubBudgetAmounts.d.ts +9 -0
  17. package/dist/budgets/components/budgetdetails/SubBudgetAmounts.es.js +69 -0
  18. package/dist/budgets/components/budgetdetails/SubBudgetAmounts.es.js.map +1 -0
  19. package/dist/budgets/components/budgetdetails/SubBudgetList.es.js +68 -55
  20. package/dist/budgets/components/budgetdetails/SubBudgetList.es.js.map +1 -1
  21. package/dist/budgets/components/budgetlist/BudgetRow.es.js +15 -26
  22. package/dist/budgets/components/budgetlist/BudgetRow.es.js.map +1 -1
  23. package/dist/budgets/components/budgetlist/SubBudgetRow.es.js +12 -55
  24. package/dist/budgets/components/budgetlist/SubBudgetRow.es.js.map +1 -1
  25. package/dist/budgets/components/shared/BudgetAmount.es.js +14 -15
  26. package/dist/budgets/components/shared/BudgetAmount.es.js.map +1 -1
  27. package/dist/budgets/components/shared/BudgetDonut.d.ts +8 -0
  28. package/dist/budgets/components/shared/BudgetDonut.es.js +25 -0
  29. package/dist/budgets/components/shared/BudgetDonut.es.js.map +1 -0
  30. package/dist/budgets/components/shared/SubBudgetCategory.d.ts +7 -0
  31. package/dist/budgets/components/shared/SubBudgetCategory.es.js +45 -0
  32. package/dist/budgets/components/shared/SubBudgetCategory.es.js.map +1 -0
  33. package/dist/core/constants/repeatingTransactions.d.ts +6 -0
  34. package/dist/core/constants/repeatingTransactions.es.js +18 -3
  35. package/dist/core/constants/repeatingTransactions.es.js.map +1 -1
  36. package/dist/core/stores/BudgetsStore.d.ts +13 -4
  37. package/dist/core/stores/BudgetsStore.es.js +40 -38
  38. package/dist/core/stores/BudgetsStore.es.js.map +1 -1
  39. package/dist/core/types/RepeatingTransaction.d.ts +2 -0
  40. package/dist/core/types/RepeatingTransaction.es.js.map +1 -1
  41. package/dist/core/types/Transaction.d.ts +1 -0
  42. package/dist/core/types/Transaction.es.js.map +1 -1
  43. package/dist/core/types/localization/BudgetsCopy.d.ts +3 -0
  44. package/dist/core/utils/BudgetUtil.d.ts +1 -0
  45. package/dist/core/utils/BudgetUtil.es.js +55 -51
  46. package/dist/core/utils/BudgetUtil.es.js.map +1 -1
  47. package/dist/core/utils/RecurringTransactionsUtil.d.ts +1 -0
  48. package/dist/core/utils/RecurringTransactionsUtil.es.js +145 -143
  49. package/dist/core/utils/RecurringTransactionsUtil.es.js.map +1 -1
  50. package/dist/core/utils/TransactionUtils.d.ts +1 -0
  51. package/dist/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.es.js +16 -14
  52. package/dist/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.es.js.map +1 -1
  53. package/dist/recurringtransactions/components/shared/recurringsettings/SelectTransaction.es.js +19 -17
  54. package/dist/recurringtransactions/components/shared/recurringsettings/SelectTransaction.es.js.map +1 -1
  55. package/dist/transactions/components/shared/TransactionList.es.js +16 -12
  56. package/dist/transactions/components/shared/TransactionList.es.js.map +1 -1
  57. package/dist/transactions/components/shared/transactiondetails/actions/AddMerchantBudgetAction.es.js +85 -82
  58. package/dist/transactions/components/shared/transactiondetails/actions/AddMerchantBudgetAction.es.js.map +1 -1
  59. package/package.json +1 -1
@@ -12,8 +12,8 @@ import { Add as $ } from "@mxenabled/mx-icons";
12
12
  import { Fragment as H, jsx as a, jsxs as I } from "react/jsx-runtime";
13
13
  import { fromUnixTime as J } from "date-fns/fromUnixTime";
14
14
  import { formatISO as K } from "date-fns/formatISO";
15
- var ce = E(({ isIncome: i = !1, label: f, onAddRecurringTransaction: x = () => null }) => {
16
- const { recurring: r } = w(), { filter: s, setFilter: c, transactions: _ } = G(), { addRepeatingTransaction: D } = B(), { user: C } = j(), [O, d] = o.useState(!1), [u, m] = o.useState(""), [p, R] = o.useState(L.EveryMonth), [l, A] = o.useState(1), [y, b] = o.useState(15), e = o.useMemo(() => _.find((t) => t.guid === u), [u, _]), q = () => {
15
+ var ce = E(({ isIncome: i = !1, label: _, onAddRecurringTransaction: x = () => null }) => {
16
+ const { recurring: r } = w(), { filter: s, setFilter: c, transactions: f } = G(), { addRepeatingTransaction: D } = B(), { user: C } = j(), [O, d] = o.useState(!1), [u, m] = o.useState(""), [l, R] = o.useState(L.EveryMonth), [p, A] = o.useState(1), [g, b] = o.useState(15), e = o.useMemo(() => f.find((t) => t.guid === u), [u, f]), q = () => {
17
17
  d(!0), c(i ? {
18
18
  ...s,
19
19
  custom: F
@@ -23,26 +23,28 @@ var ce = E(({ isIncome: i = !1, label: f, onAddRecurringTransaction: x = () => n
23
23
  });
24
24
  }, v = async () => {
25
25
  if (!e) {
26
- g();
26
+ y();
27
27
  return;
28
28
  }
29
29
  x();
30
- const t = M(p, J(e.date), l), n = {
30
+ const t = M(l, J(e.date), p), n = {
31
31
  account_guid: e.account_guid,
32
32
  amount: e.amount,
33
+ category_guid: e.category_guid ?? null,
33
34
  created_by: 0,
35
+ main_class_guid: e.main_class_guid ?? null,
34
36
  merchant_guid: e.merchant_guid,
35
37
  description: e.payee || e.description || e.feed_description,
36
38
  predicted_occurs_on: K(t, { representation: "date" }),
37
- recurrence_day: l,
38
- recurrence_type: p,
39
+ recurrence_day: p,
40
+ recurrence_type: l,
39
41
  repeating_transaction_type: i ? T.Income : T.Bill,
40
- second_recurrence_day: y,
42
+ second_recurrence_day: g,
41
43
  transaction_type: e.transaction_type,
42
44
  user_guid: C.guid
43
45
  };
44
- await D(n, e), g();
45
- }, g = () => {
46
+ await D(n, e), y();
47
+ }, y = () => {
46
48
  m(""), d(!1);
47
49
  };
48
50
  return /* @__PURE__ */ I(H, { children: [
@@ -50,13 +52,13 @@ var ce = E(({ isIncome: i = !1, label: f, onAddRecurringTransaction: x = () => n
50
52
  onClick: q,
51
53
  startIcon: /* @__PURE__ */ a($, { size: 24 }),
52
54
  variant: "contained",
53
- children: f
55
+ children: _
54
56
  }),
55
57
  /* @__PURE__ */ a(S, {
56
58
  ariaLabelClose: r.close_drawer_aria,
57
59
  isOpen: O,
58
60
  onClose: () => d(!1),
59
- title: f,
61
+ title: _,
60
62
  children: /* @__PURE__ */ a(k, {
61
63
  description: i ? r.add_income_description : r.add_expense_description,
62
64
  onSearch: (t) => {
@@ -75,12 +77,12 @@ var ce = E(({ isIncome: i = !1, label: f, onAddRecurringTransaction: x = () => n
75
77
  onPrimaryAction: v,
76
78
  title: i ? r.income_details : r.expense_details,
77
79
  children: e && /* @__PURE__ */ a(z, {
78
- firstDay: l,
79
- frequency: p,
80
+ firstDay: p,
81
+ frequency: l,
80
82
  onFirstDayChange: A,
81
83
  onFrequencyChange: R,
82
84
  onSecondDayChange: b,
83
- secondDay: y,
85
+ secondDay: g,
84
86
  transaction: e
85
87
  })
86
88
  })
@@ -1 +1 @@
1
- {"version":3,"file":"AddRecurringTransaction.es.js","names":[],"sources":["../../../../../src/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.tsx"],"sourcesContent":["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 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"],"mappings":"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"}
1
+ {"version":3,"file":"AddRecurringTransaction.es.js","names":[],"sources":["../../../../../src/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.tsx"],"sourcesContent":["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 category_guid: transaction.category_guid ?? null,\n created_by: 0, // User\n main_class_guid: transaction.main_class_guid ?? null,\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 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"],"mappings":"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"}
@@ -1,44 +1,46 @@
1
1
  import { useGlobalCopyStore as l } from "../../../../common/context/hooks.es.js";
2
- import m from "../../../../common/components/SearchBox.es.js";
3
- import { useTransactionsUiStore as h } from "../../../../transactions/context/hooks.es.js";
4
- import p from "../../../../transactions/components/shared/TransactionList.es.js";
5
- import { observer as f } from "mobx-react-lite";
6
- import _ from "@mui/material/Stack";
7
- import { P as u } from "@mxenabled/mxui";
8
- import { jsx as a, jsxs as d } from "react/jsx-runtime";
9
- var j = f(({ bgcolor: e = "background.default", description: o, onSearch: c, onSelected: s }) => {
10
- const { recurring: r } = l(), { searchValue: i, setSearchValue: n } = h();
11
- return /* @__PURE__ */ d(_, {
2
+ import { isEligibleRepeatingTransaction as m } from "../../../../core/utils/RecurringTransactionsUtil.es.js";
3
+ import p from "../../../../common/components/SearchBox.es.js";
4
+ import { useTransactionsUiStore as f } from "../../../../transactions/context/hooks.es.js";
5
+ import h from "../../../../transactions/components/shared/TransactionList.es.js";
6
+ import { observer as _ } from "mobx-react-lite";
7
+ import u from "@mui/material/Stack";
8
+ import { P as d } from "@mxenabled/mxui";
9
+ import { jsx as a, jsxs as g } from "react/jsx-runtime";
10
+ var V = _(({ bgcolor: e = "background.default", description: o, onSearch: i, onSelected: c }) => {
11
+ const { recurring: r } = l(), { searchValue: s, setSearchValue: n } = f();
12
+ return /* @__PURE__ */ g(u, {
12
13
  sx: {
13
14
  bgcolor: e,
14
15
  gap: 16,
15
16
  pt: 8
16
17
  },
17
18
  children: [
18
- o && /* @__PURE__ */ a(u, {
19
+ o && /* @__PURE__ */ a(d, {
19
20
  sx: { mx: 24 },
20
21
  children: o
21
22
  }),
22
- /* @__PURE__ */ a(m, {
23
+ /* @__PURE__ */ a(p, {
23
24
  ariaLabel: r.select_transaction_search_aria,
24
25
  cancelAriaLabel: r.select_transaction_search_cancel_aria,
25
26
  onChange: (t) => {
26
- n(t), c(t);
27
+ n(t), i(t);
27
28
  },
28
29
  placeholder: r.select_transaction_search_placeholder,
29
- searchValue: i
30
+ searchValue: s
30
31
  }),
31
- /* @__PURE__ */ a(p, {
32
+ /* @__PURE__ */ a(h, {
32
33
  bgcolor: e,
34
+ filter: m,
33
35
  height: "auto",
34
- onClick: s,
36
+ onClick: c,
35
37
  showLoader: !1
36
38
  })
37
39
  ]
38
40
  });
39
41
  });
40
42
  export {
41
- j as SelectTransaction
43
+ V as SelectTransaction
42
44
  };
43
45
 
44
46
  //# sourceMappingURL=SelectTransaction.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectTransaction.es.js","names":[],"sources":["../../../../../src/recurringtransactions/components/shared/recurringsettings/SelectTransaction.tsx"],"sourcesContent":["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 bgcolor={bgcolor} height=\"auto\" onClick={onSelected} showLoader={false} />\n </Stack>\n )\n },\n)\n"],"mappings":";;;;;;;;AAgBA,IAAa,IAAoB,EAAA,CAC9B,EACC,SAAA,IAAU,sBACV,aAAA,GACA,UAAA,GACA,YAAA,EAAA,MAC4B;AAC5B,QAAM,EAAE,WAAW,EAAA,IAAkB,EAAmB,GAClD,EAAE,aAAA,GAAa,gBAAA,EAAA,IAAmB,EAAuB;AAE/D,SACE,gBAAA,EAAC,GAAD;AAAA,IAAO,IAAI;AAAA,MAAE,SAAA;AAAA,MAAS,KAAK;AAAA,MAAI,IAAI;AAAA,IAAE;AAAA,IAArC,UAAA;AAAA,MACG,KAAe,gBAAA,EAAC,GAAD;AAAA,QAAG,IAAI,EAAE,IAAI,GAAG;AAAA,QAAI,UAAA;AAAA,MAAe,CAAA;AAAA,MACnD,gBAAA,EAAC,GAAD;AAAA,QACE,WAAW,EAAc;AAAA,QACzB,iBAAiB,EAAc;AAAA,QAC/B,UAAA,CAAW,MAAU;AACnB,UAAA,EAAe,CAAK,GACpB,EAAS,CAAK;AAAA,QAChB;AAAA,QACA,aAAa,EAAc;AAAA,QACd,aAAA;AAAA,MACd,CAAA;AAAA,MACD,gBAAA,EAAC,GAAD;AAAA,QAA0B,SAAA;AAAA,QAAS,QAAO;AAAA,QAAO,SAAS;AAAA,QAAY,YAAY;AAAA,MAAQ,CAAA;AAAA,IACrF;AAAA;AAEX,CACF"}
1
+ {"version":3,"file":"SelectTransaction.es.js","names":[],"sources":["../../../../../src/recurringtransactions/components/shared/recurringsettings/SelectTransaction.tsx"],"sourcesContent":["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 { isEligibleRepeatingTransaction } from '../../../../core/utils/RecurringTransactionsUtil'\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={isEligibleRepeatingTransaction}\n height=\"auto\"\n onClick={onSelected}\n showLoader={false}\n />\n </Stack>\n )\n },\n)\n"],"mappings":";;;;;;;;;AAiBA,IAAa,IAAoB,EAAA,CAC9B,EACC,SAAA,IAAU,sBACV,aAAA,GACA,UAAA,GACA,YAAA,EAAA,MAC4B;AAC5B,QAAM,EAAE,WAAW,EAAA,IAAkB,EAAmB,GAClD,EAAE,aAAA,GAAa,gBAAA,EAAA,IAAmB,EAAuB;AAE/D,SACE,gBAAA,EAAC,GAAD;AAAA,IAAO,IAAI;AAAA,MAAE,SAAA;AAAA,MAAS,KAAK;AAAA,MAAI,IAAI;AAAA,IAAE;AAAA,IAArC,UAAA;AAAA,MACG,KAAe,gBAAA,EAAC,GAAD;AAAA,QAAG,IAAI,EAAE,IAAI,GAAG;AAAA,QAAI,UAAA;AAAA,MAAe,CAAA;AAAA,MACnD,gBAAA,EAAC,GAAD;AAAA,QACE,WAAW,EAAc;AAAA,QACzB,iBAAiB,EAAc;AAAA,QAC/B,UAAA,CAAW,MAAU;AACnB,UAAA,EAAe,CAAK,GACpB,EAAS,CAAK;AAAA,QAChB;AAAA,QACA,aAAa,EAAc;AAAA,QACd,aAAA;AAAA,MACd,CAAA;AAAA,MACD,gBAAA,EAAC,GAAD;AAAA,QACW,SAAA;AAAA,QACT,QAAQ;AAAA,QACR,QAAO;AAAA,QACP,SAAS;AAAA,QACT,YAAY;AAAA,MACb,CAAA;AAAA,IACI;AAAA;AAEX,CACF"}
@@ -10,18 +10,22 @@ import { hasInsetBorder as B, shouldShowDate as T } from "../../utils/Transactio
10
10
  import i from "react";
11
11
  import { observer as G } from "mobx-react-lite";
12
12
  import { jsx as o, jsxs as S } from "react/jsx-runtime";
13
- import m from "@mui/material/Box";
13
+ import u from "@mui/material/Box";
14
14
  import Y from "@mui/material/Divider";
15
15
  import y from "@mui/material/List";
16
16
  import { useVirtualizer as K } from "@tanstack/react-virtual";
17
- var _ = 65, v = 32, M = ({ bgcolor: x, filter: u, height: E = "calc(100dvh - 36px)", loader: I = /* @__PURE__ */ o(U, {
17
+ var _ = 65, v = 32, M = ({ bgcolor: x, filter: s, height: E = "calc(100dvh - 36px)", loader: I = /* @__PURE__ */ o(U, {
18
18
  label: "Loading",
19
19
  size: 40
20
- }), onClick: f, showInsights: d = !1, showLoader: s = !1, transaction: p, width: g = "100%", zeroState: A = /* @__PURE__ */ o(w, {}) }) => {
21
- const { isLoading: l, sortedTransactions: c } = N(), e = i.useMemo(() => {
22
- const t = u ? c.filter(u) : c;
20
+ }), onClick: f, showInsights: d = !1, showLoader: l = !1, transaction: p, width: g = "100%", zeroState: A = /* @__PURE__ */ o(w, {}) }) => {
21
+ const { isLoading: c, sortedTransactions: m } = N(), e = i.useMemo(() => {
22
+ const t = s ? m.filter(s) : m;
23
23
  return p ?? t;
24
- }, [c, p]), { clearExpandedSplits: C, setShowInsights: R, toggleSplit: b } = k(), { onEvent: D } = z(), L = (t) => {
24
+ }, [
25
+ m,
26
+ s,
27
+ p
28
+ ]), { clearExpandedSplits: C, setShowInsights: R, toggleSplit: b } = k(), { onEvent: D } = z(), L = (t) => {
25
29
  const r = e.find((a) => a.guid === t);
26
30
  if (r?.has_been_split) {
27
31
  b(r.guid);
@@ -41,23 +45,23 @@ var _ = 65, v = 32, M = ({ bgcolor: x, filter: u, height: E = "calc(100dvh - 36p
41
45
  component: "div",
42
46
  role: "list",
43
47
  sx: { width: g },
44
- children: /* @__PURE__ */ o(m, {
48
+ children: /* @__PURE__ */ o(u, {
45
49
  height: E,
46
50
  overflow: "auto",
47
51
  ref: h,
48
52
  role: "presentation",
49
53
  width: g,
50
- children: /* @__PURE__ */ S(m, {
54
+ children: /* @__PURE__ */ S(u, {
51
55
  height: n.getVirtualItems().length === 0 ? "auto" : n.getTotalSize(),
52
56
  position: "relative",
53
57
  role: "presentation",
54
58
  width: "100%",
55
59
  children: [
56
- (l || s) && I,
57
- !l && !s && n.getVirtualItems().length === 0 && A,
58
- !l && !s && n.getVirtualItems().length > 0 && n.getVirtualItems().map((t) => {
60
+ (c || l) && I,
61
+ !c && !l && n.getVirtualItems().length === 0 && A,
62
+ !c && !l && n.getVirtualItems().length > 0 && n.getVirtualItems().map((t) => {
59
63
  const r = e[t.index], a = T(t.index, e), V = B(t.index, e);
60
- return /* @__PURE__ */ S(m, {
64
+ return /* @__PURE__ */ S(u, {
61
65
  role: "listitem",
62
66
  sx: {
63
67
  height: _ + (a ? v : 0),
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionList.es.js","names":[],"sources":["../../../../src/transactions/components/shared/TransactionList.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { useVirtualizer } from '@tanstack/react-virtual'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\n\nimport { ANALYTICS_EVENTS, Loader, useEvent } from '../../../common'\nimport { type Transaction } from '../../../core'\n\nimport { useTransactionsUiStore } from '../../context/hooks'\nimport { useTransactionStore } from '../../../common'\n\nimport SubheaderRow from '../../../common/components/SubheaderRow'\nimport TransactionRow from './transactionlist/TransactionRow'\nimport ZeroState from './transactionlist/ZeroState'\n\nimport { hasInsetBorder, shouldShowDate } from '../../utils/Transactions'\nimport { fromUnixUTCToDayOfWeekAndDate } from '../../../core/utils/DateUtil'\n\nconst ROW_HEIGHT = 65\nconst DATE_ROW_HEIGHT = 32\n\nexport interface TransactionListProps {\n bgcolor?: string\n filter?: (t: Transaction) => boolean\n height?: number | string\n loader?: React.JSX.Element\n onClick?: (guid: string) => void\n showInsights?: boolean\n showLoader?: boolean\n transaction?: Transaction[]\n width?: number | string\n zeroState?: React.JSX.Element\n}\n\nconst TransactionList: React.FC<TransactionListProps> = ({\n bgcolor,\n filter,\n height = 'calc(100dvh - 36px)',\n loader = <Loader label=\"Loading\" size={40} />,\n onClick,\n showInsights = false,\n showLoader = false,\n transaction,\n width = '100%',\n zeroState = <ZeroState />,\n}) => {\n const { isLoading, sortedTransactions: allTransactions } = useTransactionStore()\n const transactions = React.useMemo(() => {\n const updatedTransactions = filter ? allTransactions.filter(filter) : allTransactions\n return transaction ?? updatedTransactions\n }, [allTransactions, transaction])\n\n const { clearExpandedSplits, setShowInsights, toggleSplit } = useTransactionsUiStore()\n const { onEvent } = useEvent()\n\n const handleClick = (guid: string) => {\n const transaction = transactions.find((t) => t.guid === guid)\n\n if (transaction?.has_been_split) {\n toggleSplit(transaction.guid)\n return\n }\n\n onEvent(ANALYTICS_EVENTS.ACCOUNT_DETAILS_CLICK_TRANSACTION, {\n account_guid: transaction?.account_guid,\n transaction_guid: guid,\n })\n onClick?.(guid)\n }\n\n const parentRef = React.useRef<HTMLDivElement>(null)\n const rowVirtualizer = useVirtualizer({\n count: transactions.length,\n getScrollElement: () => parentRef.current,\n estimateSize: (i) => ROW_HEIGHT + (shouldShowDate(i, transactions) ? DATE_ROW_HEIGHT : 0),\n overscan: 5,\n })\n\n React.useEffect(() => rowVirtualizer.measure(), [transactions])\n React.useEffect(() => setShowInsights(showInsights), [showInsights])\n\n React.useEffect(() => {\n return () => clearExpandedSplits()\n }, [])\n\n return (\n <List component=\"div\" role=\"list\" sx={{ width: width }}>\n <Box height={height} overflow=\"auto\" ref={parentRef} role=\"presentation\" width={width}>\n <Box\n height={\n // set the height to auto when there are no transactions so the zero state isn't set to 0\n rowVirtualizer.getVirtualItems().length === 0 ? 'auto' : rowVirtualizer.getTotalSize()\n }\n position=\"relative\"\n role=\"presentation\"\n width=\"100%\"\n >\n {(isLoading || showLoader) && loader}\n {!isLoading && !showLoader && rowVirtualizer.getVirtualItems().length === 0 && zeroState}\n {!isLoading &&\n !showLoader &&\n rowVirtualizer.getVirtualItems().length > 0 &&\n rowVirtualizer.getVirtualItems().map((row) => {\n const transaction = transactions[row.index]\n const showDate = shouldShowDate(row.index, transactions)\n const isInset = hasInsetBorder(row.index, transactions)\n const rowHeight = ROW_HEIGHT + (showDate ? DATE_ROW_HEIGHT : 0)\n\n return (\n <Box\n key={transaction.guid}\n role=\"listitem\"\n sx={{\n height: rowHeight,\n position: 'absolute',\n transform: `translateY(${row.start}px)`,\n width: '100%',\n bgcolor: 'background.paper',\n }}\n >\n {showDate && (\n <SubheaderRow bgcolor={bgcolor}>\n {fromUnixUTCToDayOfWeekAndDate(transaction.date)}\n </SubheaderRow>\n )}\n <TransactionRow\n component=\"div\"\n {...(onClick && { onClick: handleClick })}\n transaction={transaction}\n />\n <Divider sx={{ ml: isInset ? 68 : 0 }} />\n </Box>\n )\n })}\n </Box>\n </Box>\n </List>\n )\n}\n\nexport default observer(TransactionList)\n"],"mappings":"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"}
1
+ {"version":3,"file":"TransactionList.es.js","names":[],"sources":["../../../../src/transactions/components/shared/TransactionList.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { useVirtualizer } from '@tanstack/react-virtual'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\n\nimport { ANALYTICS_EVENTS, Loader, useEvent } from '../../../common'\nimport { type Transaction } from '../../../core'\n\nimport { useTransactionsUiStore } from '../../context/hooks'\nimport { useTransactionStore } from '../../../common'\n\nimport SubheaderRow from '../../../common/components/SubheaderRow'\nimport TransactionRow from './transactionlist/TransactionRow'\nimport ZeroState from './transactionlist/ZeroState'\n\nimport { hasInsetBorder, shouldShowDate } from '../../utils/Transactions'\nimport { fromUnixUTCToDayOfWeekAndDate } from '../../../core/utils/DateUtil'\n\nconst ROW_HEIGHT = 65\nconst DATE_ROW_HEIGHT = 32\n\nexport interface TransactionListProps {\n bgcolor?: string\n filter?: (t: Transaction) => boolean\n height?: number | string\n loader?: React.JSX.Element\n onClick?: (guid: string) => void\n showInsights?: boolean\n showLoader?: boolean\n transaction?: Transaction[]\n width?: number | string\n zeroState?: React.JSX.Element\n}\n\nconst TransactionList: React.FC<TransactionListProps> = ({\n bgcolor,\n filter,\n height = 'calc(100dvh - 36px)',\n loader = <Loader label=\"Loading\" size={40} />,\n onClick,\n showInsights = false,\n showLoader = false,\n transaction,\n width = '100%',\n zeroState = <ZeroState />,\n}) => {\n const { isLoading, sortedTransactions: allTransactions } = useTransactionStore()\n const transactions = React.useMemo(() => {\n const updatedTransactions = filter ? allTransactions.filter(filter) : allTransactions\n return transaction ?? updatedTransactions\n }, [allTransactions, filter, transaction])\n\n const { clearExpandedSplits, setShowInsights, toggleSplit } = useTransactionsUiStore()\n const { onEvent } = useEvent()\n\n const handleClick = (guid: string) => {\n const transaction = transactions.find((t) => t.guid === guid)\n\n if (transaction?.has_been_split) {\n toggleSplit(transaction.guid)\n return\n }\n\n onEvent(ANALYTICS_EVENTS.ACCOUNT_DETAILS_CLICK_TRANSACTION, {\n account_guid: transaction?.account_guid,\n transaction_guid: guid,\n })\n onClick?.(guid)\n }\n\n const parentRef = React.useRef<HTMLDivElement>(null)\n const rowVirtualizer = useVirtualizer({\n count: transactions.length,\n getScrollElement: () => parentRef.current,\n estimateSize: (i) => ROW_HEIGHT + (shouldShowDate(i, transactions) ? DATE_ROW_HEIGHT : 0),\n overscan: 5,\n })\n\n React.useEffect(() => rowVirtualizer.measure(), [transactions])\n React.useEffect(() => setShowInsights(showInsights), [showInsights])\n\n React.useEffect(() => {\n return () => clearExpandedSplits()\n }, [])\n\n return (\n <List component=\"div\" role=\"list\" sx={{ width: width }}>\n <Box height={height} overflow=\"auto\" ref={parentRef} role=\"presentation\" width={width}>\n <Box\n height={\n // set the height to auto when there are no transactions so the zero state isn't set to 0\n rowVirtualizer.getVirtualItems().length === 0 ? 'auto' : rowVirtualizer.getTotalSize()\n }\n position=\"relative\"\n role=\"presentation\"\n width=\"100%\"\n >\n {(isLoading || showLoader) && loader}\n {!isLoading && !showLoader && rowVirtualizer.getVirtualItems().length === 0 && zeroState}\n {!isLoading &&\n !showLoader &&\n rowVirtualizer.getVirtualItems().length > 0 &&\n rowVirtualizer.getVirtualItems().map((row) => {\n const transaction = transactions[row.index]\n const showDate = shouldShowDate(row.index, transactions)\n const isInset = hasInsetBorder(row.index, transactions)\n const rowHeight = ROW_HEIGHT + (showDate ? DATE_ROW_HEIGHT : 0)\n\n return (\n <Box\n key={transaction.guid}\n role=\"listitem\"\n sx={{\n height: rowHeight,\n position: 'absolute',\n transform: `translateY(${row.start}px)`,\n width: '100%',\n bgcolor: 'background.paper',\n }}\n >\n {showDate && (\n <SubheaderRow bgcolor={bgcolor}>\n {fromUnixUTCToDayOfWeekAndDate(transaction.date)}\n </SubheaderRow>\n )}\n <TransactionRow\n component=\"div\"\n {...(onClick && { onClick: handleClick })}\n transaction={transaction}\n />\n <Divider sx={{ ml: isInset ? 68 : 0 }} />\n </Box>\n )\n })}\n </Box>\n </Box>\n </List>\n )\n}\n\nexport default observer(TransactionList)\n"],"mappings":"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"}
@@ -1,39 +1,39 @@
1
1
  import { buildDynamicCopy as n } from "../../../../../core/utils/Localization.es.js";
2
- import { useAccountStore as H, useBudgetsStore as V, useGlobalCopyStore as W, useTransactionStore as q } from "../../../../../common/context/hooks.es.js";
3
- import { useAriaLive as J } from "../../../../../common/hooks/useAriaLive.es.js";
4
- import { formatCurrency as C } from "../../../../../core/utils/NumberFormatting.es.js";
5
- import K from "../../../../../common/components/CurrencyDialog.es.js";
6
- import Q from "../../../../../budgets/components/MerchantBudgetDetailsDrawer.es.js";
7
- import i from "react";
8
- import { observer as U } from "mobx-react-lite";
9
- import { Text as X, Toast as Y } from "@mxenabled/mxui";
10
- import { endOfMonth as Z } from "date-fns/endOfMonth";
11
- import { startOfMonth as ee } from "date-fns/startOfMonth";
12
- import { Icon as D } from "@mxenabled/mx-icons";
13
- import { jsx as r, jsxs as v } from "react/jsx-runtime";
14
- import { useTheme as te } from "@mui/material/styles";
15
- import re from "@mui/material/ListItem";
16
- import oe from "@mui/material/ListItemButton";
17
- import ne from "@mui/material/ListItemText";
18
- import ae from "@mui/material/Avatar";
19
- import ie from "@mui/material/ListItemAvatar";
20
- import se from "@mui/material/ListItemIcon";
21
- var Se = /* @__PURE__ */ (function(e) {
2
+ import { useAccountStore as N, useBudgetsStore as z, useGlobalCopyStore as H, useTransactionStore as V } from "../../../../../common/context/hooks.es.js";
3
+ import { useAriaLive as W } from "../../../../../common/hooks/useAriaLive.es.js";
4
+ import { formatCurrency as B } from "../../../../../core/utils/NumberFormatting.es.js";
5
+ import q from "../../../../../common/components/CurrencyDialog.es.js";
6
+ import J from "../../../../../budgets/components/MerchantBudgetDetailsDrawer.es.js";
7
+ import s from "react";
8
+ import { observer as K } from "mobx-react-lite";
9
+ import { Text as Q, Toast as U } from "@mxenabled/mxui";
10
+ import { endOfMonth as X } from "date-fns/endOfMonth";
11
+ import { startOfMonth as Y } from "date-fns/startOfMonth";
12
+ import { Icon as v } from "@mxenabled/mx-icons";
13
+ import { jsx as r, jsxs as C } from "react/jsx-runtime";
14
+ import { useTheme as Z } from "@mui/material/styles";
15
+ import ee from "@mui/material/ListItem";
16
+ import te from "@mui/material/ListItemButton";
17
+ import re from "@mui/material/ListItemText";
18
+ import oe from "@mui/material/Avatar";
19
+ import ne from "@mui/material/ListItemAvatar";
20
+ import ie from "@mui/material/ListItemIcon";
21
+ var Ce = /* @__PURE__ */ (function(e) {
22
22
  return e.CREATE = "create", e.EDIT = "edit", e.DELETE = "delete", e;
23
- })({}), Le = U(({ transaction: e }) => {
24
- const [o, c] = i.useState(null), [p, _] = i.useState(""), [A, S] = i.useState(!1), h = i.useRef(!1), [L, w] = i.useState(null), I = te(), { addMerchantBudget: E, updateMerchantBudget: R, deleteMerchantBudget: O, getMerchantBudgetByMerchantGuid: k, alert: m, setAlert: x } = V(), { setFilter: P } = q(), { accounts: T } = H(), $ = I.palette.mode === "dark" ? "grey.800" : "grey.100", { budgets: t, common: l } = W(), { announce: G, ariaLive: j } = J(), [g, f] = i.useState(!1), a = e?.merchant_guid ? k(e.merchant_guid) : void 0, y = () => {
25
- w(o), c(null), _("");
26
- }, F = () => {
27
- a ? f(!0) : c("create");
28
- }, u = {
23
+ })({}), De = K(({ transaction: e }) => {
24
+ const [o, c] = s.useState(null), [p, _] = s.useState(""), h = s.useRef(!1), [D, L] = s.useState(null), S = Z(), { addMerchantBudget: w, updateMerchantBudget: I, deleteMerchantBudget: R, getMerchantBudgetByMerchantGuid: E, alert: d, setAlert: A } = z(), { setFilter: O } = V(), { accounts: x } = N(), k = S.palette.mode === "dark" ? "grey.800" : "grey.100", { budgets: t, common: u } = H(), { announce: P, ariaLive: $ } = W(), [g, y] = s.useState(!1), i = e?.merchant_guid ? E(e.merchant_guid) : void 0, f = () => {
25
+ L(o), c(null), _("");
26
+ }, G = () => {
27
+ i ? y(!0) : c("create");
28
+ }, m = {
29
29
  create: {
30
- content: n(t.create_budget_content, /* @__PURE__ */ r("strong", { children: e.description }), `${C(e.amount, "0,0.00")}`),
30
+ content: n(t.create_budget_content, /* @__PURE__ */ r("strong", { children: e.description }), `${B(e.amount, "0,0.00")}`),
31
31
  title: t.dialog_create_budget_title,
32
32
  primaryButtonText: t.dialog_primary_button_text,
33
33
  errorAlertMessage: n(t.alert_merchant_budget_not_created, e.description),
34
34
  errorRetryAction: () => c("create"),
35
35
  successAlertMessage: n(t.alert_budget_created, e.description),
36
- apiTrigger: async () => await E(e.merchant_guid, Number(p))
36
+ apiTrigger: async () => await w(e.merchant_guid, Number(p))
37
37
  },
38
38
  edit: {
39
39
  content: n(t.edit_budget_content, /* @__PURE__ */ r("strong", { children: e.description })),
@@ -42,8 +42,8 @@ var Se = /* @__PURE__ */ (function(e) {
42
42
  errorAlertMessage: n(t.error_alert_edit_merchant_budget, e.description),
43
43
  errorRetryAction: () => c("edit"),
44
44
  successAlertMessage: n(t.success_alert_edit_merchant_budget, e.description),
45
- apiTrigger: async () => await R({
46
- ...a,
45
+ apiTrigger: async () => await I({
46
+ ...i,
47
47
  amount: Number(p)
48
48
  })
49
49
  },
@@ -54,64 +54,67 @@ var Se = /* @__PURE__ */ (function(e) {
54
54
  errorAlertMessage: n(t.error_alert_delete_merchant_budget, e.description),
55
55
  errorRetryAction: () => c("delete"),
56
56
  successAlertMessage: n(t.success_alert_delete_merchant_budget, e.description),
57
- apiTrigger: async () => await O(a.guid)
57
+ apiTrigger: async () => await R(i.guid)
58
58
  }
59
- }, N = async () => {
59
+ }, j = async () => {
60
60
  if (h.current) return;
61
61
  h.current = !0;
62
- const { apiTrigger: d, successAlertMessage: s, errorAlertMessage: z } = u[o], { isSuccess: b } = await d(), B = b ? s : z;
63
- y(), S(!b), x(B), G(B), b && o === "delete" && f(!1), h.current = !1;
62
+ const { apiTrigger: l, successAlertMessage: a, errorAlertMessage: F } = m[o], { isSuccess: b } = await l(), M = b ? a : F;
63
+ f(), A({
64
+ msg: M,
65
+ severity: b ? "success" : "error"
66
+ }), P(M), b && o === "delete" && y(!1), h.current = !1;
64
67
  };
65
- i.useEffect(() => {
66
- const d = {
67
- start: ee(/* @__PURE__ */ new Date(e.date * 1e3)),
68
- end: Z(/* @__PURE__ */ new Date(e.date * 1e3))
68
+ s.useEffect(() => {
69
+ const l = {
70
+ start: Y(/* @__PURE__ */ new Date(e.date * 1e3)),
71
+ end: X(/* @__PURE__ */ new Date(e.date * 1e3))
69
72
  };
70
- g && P({
71
- accounts: T.map((s) => s.guid),
72
- custom: g ? (s) => s.merchant_guid === e.merchant_guid : (s) => s.guid === e.guid,
73
- dateRange: d
73
+ g && O({
74
+ accounts: x.map((a) => a.guid),
75
+ custom: g ? (a) => a.merchant_guid === e.merchant_guid : (a) => a.guid === e.guid,
76
+ dateRange: l
74
77
  });
75
78
  }, [
76
79
  g,
77
80
  e,
78
- T
81
+ x
79
82
  ]);
80
- const M = () => /* @__PURE__ */ r(Y, {
83
+ const T = () => /* @__PURE__ */ r(U, {
81
84
  actionText: t.autogenerate_budgets_error_primary_button,
82
85
  autoHideDuration: 3500,
83
- closeAriaLabel: l.close_aria,
84
- handleClose: () => x(""),
85
- message: m,
86
- onActionClick: u[L]?.errorRetryAction,
87
- open: !!m,
88
- severity: A ? "error" : "success",
89
- showAction: A,
86
+ closeAriaLabel: u.close_aria,
87
+ handleClose: () => A(null),
88
+ message: d?.msg ?? "",
89
+ onActionClick: m[D]?.errorRetryAction,
90
+ open: !!d,
91
+ severity: d?.severity ?? "success",
92
+ showAction: d?.severity === "error",
90
93
  showClose: !0
91
94
  });
92
- return /* @__PURE__ */ v(i.Fragment, { children: [
93
- j,
94
- /* @__PURE__ */ r(re, {
95
+ return /* @__PURE__ */ C(s.Fragment, { children: [
96
+ $,
97
+ /* @__PURE__ */ r(ee, {
95
98
  disableGutters: !0,
96
99
  disablePadding: !0,
97
- children: /* @__PURE__ */ v(oe, {
98
- onClick: F,
100
+ children: /* @__PURE__ */ C(te, {
101
+ onClick: G,
99
102
  children: [
100
- /* @__PURE__ */ r(ie, { children: /* @__PURE__ */ r(ae, {
101
- sx: { bgcolor: $ },
103
+ /* @__PURE__ */ r(ne, { children: /* @__PURE__ */ r(oe, {
104
+ sx: { bgcolor: k },
102
105
  variant: "rounded",
103
- children: /* @__PURE__ */ r(D, {
106
+ children: /* @__PURE__ */ r(v, {
104
107
  name: "bubble_chart",
105
108
  sx: { color: "text.primary" }
106
109
  })
107
110
  }) }),
108
- /* @__PURE__ */ r(ne, {
111
+ /* @__PURE__ */ r(re, {
109
112
  primary: t.add_merchant_budget_primary_text,
110
- secondary: /* @__PURE__ */ r(X, {
113
+ secondary: /* @__PURE__ */ r(Q, {
111
114
  bold: !0,
112
115
  sx: { color: "text.primary" },
113
116
  variant: "body1",
114
- children: a ? `${C(a.amount, "0,0.00")} / ${l.month_text}` : t.add_merchant_budget_secondary_text
117
+ children: i ? `${B(i.amount, "0,0.00")} / ${u.month_text}` : t.add_merchant_budget_secondary_text
115
118
  }),
116
119
  slotProps: { primary: {
117
120
  variant: "caption",
@@ -119,43 +122,43 @@ var Se = /* @__PURE__ */ (function(e) {
119
122
  fontWeight: "normal"
120
123
  } }
121
124
  }),
122
- /* @__PURE__ */ r(se, { children: /* @__PURE__ */ r(D, {
125
+ /* @__PURE__ */ r(ie, { children: /* @__PURE__ */ r(v, {
123
126
  name: "chevron_right",
124
127
  sx: { color: "text.primary" }
125
128
  }) })
126
129
  ]
127
130
  })
128
131
  }),
129
- !!a && /* @__PURE__ */ r(Q, {
132
+ !!i && /* @__PURE__ */ r(J, {
130
133
  isOpen: g,
131
- merchantBudget: a,
132
- onClose: () => f(!1),
133
- renderingToast: () => m && M(),
134
- setCurrencyDialogAction: (d) => {
135
- d === "edit" && _(a?.amount.toString() || ""), c(d);
134
+ merchantBudget: i,
135
+ onClose: () => y(!1),
136
+ renderingToast: () => d && T(),
137
+ setCurrencyDialogAction: (l) => {
138
+ l === "edit" && _(i?.amount.toString() || ""), c(l);
136
139
  },
137
140
  transaction: e
138
141
  }),
139
- o && /* @__PURE__ */ r(K, {
140
- closeAriaLabel: l.close_aria,
141
- content: u[o].content,
142
+ o && /* @__PURE__ */ r(q, {
143
+ closeAriaLabel: u.close_aria,
144
+ content: m[o].content,
142
145
  handleInputChange: _,
143
- handleModalClose: y,
144
- handlePrimaryAction: N,
145
- handleSecondaryAction: y,
146
- inputLabel: o !== "delete" ? l.amount_text : "",
146
+ handleModalClose: f,
147
+ handlePrimaryAction: j,
148
+ handleSecondaryAction: f,
149
+ inputLabel: o !== "delete" ? u.amount_text : "",
147
150
  inputValue: p,
148
151
  isOpen: !!o,
149
- primaryText: u[o].primaryButtonText,
150
- secondaryText: l.cancel_button,
151
- title: u[o].title
152
+ primaryText: m[o].primaryButtonText,
153
+ secondaryText: u.cancel_button,
154
+ title: m[o].title
152
155
  }),
153
- !!m && M()
156
+ !!d && T()
154
157
  ] });
155
158
  });
156
159
  export {
157
- Le as AddMerchantBudgetAction,
158
- Se as CurrencyDialogAction
160
+ De as AddMerchantBudgetAction,
161
+ Ce as CurrencyDialogAction
159
162
  };
160
163
 
161
164
  //# sourceMappingURL=AddMerchantBudgetAction.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AddMerchantBudgetAction.es.js","names":[],"sources":["../../../../../../src/transactions/components/shared/transactiondetails/actions/AddMerchantBudgetAction.tsx"],"sourcesContent":["import React from 'react'\n\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport { useTheme } from '@mui/material/styles'\n\nimport { Text, Toast } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { endOfMonth } from 'date-fns/endOfMonth'\n\nimport {\n CurrencyDialog,\n useAccountStore,\n useBudgetsStore,\n useGlobalCopyStore,\n useTransactionStore,\n} from '../../../../../common'\nimport { type Transaction } from '../../../../../core'\nimport { useAriaLive } from '../../../../../common/hooks/useAriaLive'\nimport MerchantBudgetDetailsDrawer from '../../../../../budgets/components/MerchantBudgetDetailsDrawer'\nimport { formatCurrency } from '../../../../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../../../../core/utils/Localization'\n\ninterface AddMerchantBudgetActionProps {\n transaction: Transaction\n}\n\nexport enum CurrencyDialogAction {\n CREATE = 'create',\n EDIT = 'edit',\n DELETE = 'delete',\n}\n\nexport const AddMerchantBudgetAction = observer(({ transaction }: AddMerchantBudgetActionProps) => {\n const [currencyDialogAction, setCurrencyDialogAction] =\n React.useState<CurrencyDialogAction | null>(null)\n\n const [amount, setAmount] = React.useState('')\n\n const [isError, setIsError] = React.useState(false)\n\n const inProgressRef = React.useRef(false)\n\n const [lastActionType, setLastActionType] = React.useState<CurrencyDialogAction | null>(null)\n\n const theme = useTheme()\n\n const {\n addMerchantBudget,\n updateMerchantBudget,\n deleteMerchantBudget,\n getMerchantBudgetByMerchantGuid,\n alert,\n setAlert,\n } = useBudgetsStore()\n const { setFilter } = useTransactionStore()\n const { accounts } = useAccountStore()\n const bgColor = theme.palette.mode === 'dark' ? 'grey.800' : 'grey.100'\n\n const { budgets: budgetsCopy, common: commonCopy } = useGlobalCopyStore()\n\n const { announce, ariaLive } = useAriaLive()\n\n const [merchantBudgetDetailsDrawerOpen, setMerchantBudgetDetailsDrawerOpen] =\n React.useState(false)\n\n const existingMerchantBudget = transaction?.merchant_guid\n ? getMerchantBudgetByMerchantGuid(transaction.merchant_guid)\n : undefined\n\n const handleModalClose = () => {\n setLastActionType(currencyDialogAction)\n setCurrencyDialogAction(null)\n setAmount('')\n }\n\n const handleClick = () => {\n if (!existingMerchantBudget) {\n setCurrencyDialogAction(CurrencyDialogAction.CREATE)\n } else {\n setMerchantBudgetDetailsDrawerOpen(true)\n }\n }\n\n // details needed for all the three states of the dialog - create, edit, delete\n const actionDetails = {\n [CurrencyDialogAction.CREATE]: {\n content: buildDynamicCopy(\n budgetsCopy.create_budget_content,\n <strong>{transaction.description}</strong>,\n `${formatCurrency(transaction.amount, '0,0.00')}`,\n ) as string,\n title: budgetsCopy.dialog_create_budget_title,\n primaryButtonText: budgetsCopy.dialog_primary_button_text,\n errorAlertMessage: buildDynamicCopy(\n budgetsCopy.alert_merchant_budget_not_created,\n transaction.description,\n ) as string,\n errorRetryAction: () => setCurrencyDialogAction(CurrencyDialogAction.CREATE),\n successAlertMessage: buildDynamicCopy(\n budgetsCopy.alert_budget_created,\n transaction.description,\n ) as string,\n apiTrigger: async () => await addMerchantBudget(transaction.merchant_guid!, Number(amount)),\n },\n\n [CurrencyDialogAction.EDIT]: {\n content: buildDynamicCopy(\n budgetsCopy.edit_budget_content,\n <strong>{transaction.description}</strong>,\n ) as string,\n title: budgetsCopy.details_edit_title,\n primaryButtonText: budgetsCopy.add_save_button,\n errorAlertMessage: buildDynamicCopy(\n budgetsCopy.error_alert_edit_merchant_budget,\n transaction.description,\n ) as string,\n errorRetryAction: () => setCurrencyDialogAction(CurrencyDialogAction.EDIT),\n successAlertMessage: buildDynamicCopy(\n budgetsCopy.success_alert_edit_merchant_budget,\n transaction.description,\n ) as string,\n apiTrigger: async () =>\n await updateMerchantBudget({\n ...existingMerchantBudget!,\n amount: Number(amount),\n }),\n },\n\n [CurrencyDialogAction.DELETE]: {\n content: buildDynamicCopy(\n budgetsCopy.delete_description,\n <strong>{transaction.description}</strong>,\n ) as string,\n title: budgetsCopy.delete_title,\n primaryButtonText: budgetsCopy.details_delete_button,\n errorAlertMessage: buildDynamicCopy(\n budgetsCopy.error_alert_delete_merchant_budget,\n transaction.description,\n ) as string,\n errorRetryAction: () => setCurrencyDialogAction(CurrencyDialogAction.DELETE),\n successAlertMessage: buildDynamicCopy(\n budgetsCopy.success_alert_delete_merchant_budget,\n transaction.description,\n ) as string,\n apiTrigger: async () => await deleteMerchantBudget(existingMerchantBudget!.guid),\n },\n }\n\n const handlePrimaryAction = async () => {\n if (inProgressRef.current) return\n\n inProgressRef.current = true\n\n const { apiTrigger, successAlertMessage, errorAlertMessage } =\n actionDetails[currencyDialogAction as CurrencyDialogAction]\n\n const { isSuccess } = await apiTrigger()\n const alertMessage = isSuccess ? successAlertMessage : errorAlertMessage\n handleModalClose()\n setIsError(!isSuccess)\n setAlert(alertMessage)\n announce(alertMessage)\n\n if (isSuccess && currencyDialogAction === CurrencyDialogAction.DELETE) {\n setMerchantBudgetDetailsDrawerOpen(false)\n }\n inProgressRef.current = false\n }\n\n React.useEffect(() => {\n const dateRange = {\n start: startOfMonth(new Date(transaction.date * 1000)),\n end: endOfMonth(new Date(transaction.date * 1000)),\n }\n\n if (merchantBudgetDetailsDrawerOpen) {\n setFilter({\n accounts: accounts.map((account) => account.guid),\n custom: merchantBudgetDetailsDrawerOpen\n ? (trn) => trn.merchant_guid === transaction.merchant_guid\n : (trn) => trn.guid === transaction.guid,\n dateRange,\n })\n }\n }, [merchantBudgetDetailsDrawerOpen, transaction, accounts])\n\n const snackBar = () => (\n <Toast\n actionText={budgetsCopy.autogenerate_budgets_error_primary_button}\n autoHideDuration={3500}\n closeAriaLabel={commonCopy.close_aria}\n handleClose={() => setAlert('')}\n message={alert}\n onActionClick={actionDetails[lastActionType as CurrencyDialogAction]?.errorRetryAction}\n open={Boolean(alert)}\n severity={isError ? 'error' : 'success'}\n showAction={isError}\n showClose={true}\n />\n )\n return (\n <React.Fragment>\n {ariaLive}\n\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton onClick={handleClick}>\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: bgColor }} variant=\"rounded\">\n <Icon name=\"bubble_chart\" sx={{ color: 'text.primary' }} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={budgetsCopy.add_merchant_budget_primary_text}\n secondary={\n <Text bold={true} sx={{ color: 'text.primary' }} variant=\"body1\">\n {existingMerchantBudget\n ? `${formatCurrency(existingMerchantBudget.amount, '0,0.00')} / ${commonCopy.month_text}`\n : budgetsCopy.add_merchant_budget_secondary_text}\n </Text>\n }\n slotProps={{ primary: { variant: 'caption', fontSize: 11, fontWeight: 'normal' } }}\n />\n <ListItemIcon>\n <Icon name=\"chevron_right\" sx={{ color: 'text.primary' }} />\n </ListItemIcon>\n </ListItemButton>\n </ListItem>\n\n {!!existingMerchantBudget && (\n <MerchantBudgetDetailsDrawer\n isOpen={merchantBudgetDetailsDrawerOpen}\n merchantBudget={existingMerchantBudget}\n onClose={() => setMerchantBudgetDetailsDrawerOpen(false)}\n renderingToast={() => alert && snackBar()}\n setCurrencyDialogAction={(action) => {\n if (action === CurrencyDialogAction.EDIT) {\n setAmount(existingMerchantBudget?.amount.toString() || '')\n }\n setCurrencyDialogAction(action)\n }}\n transaction={transaction}\n />\n )}\n {currencyDialogAction && (\n <CurrencyDialog\n closeAriaLabel={commonCopy.close_aria}\n content={actionDetails[currencyDialogAction].content}\n handleInputChange={setAmount}\n handleModalClose={handleModalClose}\n handlePrimaryAction={handlePrimaryAction}\n handleSecondaryAction={handleModalClose}\n inputLabel={\n currencyDialogAction !== CurrencyDialogAction.DELETE ? commonCopy.amount_text : ''\n }\n inputValue={amount}\n isOpen={Boolean(currencyDialogAction)}\n primaryText={actionDetails[currencyDialogAction].primaryButtonText}\n secondaryText={commonCopy.cancel_button}\n title={actionDetails[currencyDialogAction].title}\n />\n )}\n\n {!!alert && snackBar()}\n </React.Fragment>\n )\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"AddMerchantBudgetAction.es.js","names":[],"sources":["../../../../../../src/transactions/components/shared/transactiondetails/actions/AddMerchantBudgetAction.tsx"],"sourcesContent":["import React from 'react'\n\nimport { observer } from 'mobx-react-lite'\n\nimport Avatar from '@mui/material/Avatar'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemAvatar from '@mui/material/ListItemAvatar'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport ListItemText from '@mui/material/ListItemText'\nimport { useTheme } from '@mui/material/styles'\n\nimport { Text, Toast } from '@mxenabled/mxui'\nimport { Icon } from '@mxenabled/mx-icons'\n\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { endOfMonth } from 'date-fns/endOfMonth'\n\nimport {\n CurrencyDialog,\n useAccountStore,\n useBudgetsStore,\n useGlobalCopyStore,\n useTransactionStore,\n} from '../../../../../common'\nimport { type Transaction } from '../../../../../core'\nimport { useAriaLive } from '../../../../../common/hooks/useAriaLive'\nimport MerchantBudgetDetailsDrawer from '../../../../../budgets/components/MerchantBudgetDetailsDrawer'\nimport { formatCurrency } from '../../../../../core/utils/NumberFormatting'\nimport { buildDynamicCopy } from '../../../../../core/utils/Localization'\n\ninterface AddMerchantBudgetActionProps {\n transaction: Transaction\n}\n\nexport enum CurrencyDialogAction {\n CREATE = 'create',\n EDIT = 'edit',\n DELETE = 'delete',\n}\n\nexport const AddMerchantBudgetAction = observer(({ transaction }: AddMerchantBudgetActionProps) => {\n const [currencyDialogAction, setCurrencyDialogAction] =\n React.useState<CurrencyDialogAction | null>(null)\n\n const [amount, setAmount] = React.useState('')\n\n const inProgressRef = React.useRef(false)\n\n const [lastActionType, setLastActionType] = React.useState<CurrencyDialogAction | null>(null)\n\n const theme = useTheme()\n\n const {\n addMerchantBudget,\n updateMerchantBudget,\n deleteMerchantBudget,\n getMerchantBudgetByMerchantGuid,\n alert,\n setAlert,\n } = useBudgetsStore()\n const { setFilter } = useTransactionStore()\n const { accounts } = useAccountStore()\n const bgColor = theme.palette.mode === 'dark' ? 'grey.800' : 'grey.100'\n\n const { budgets: budgetsCopy, common: commonCopy } = useGlobalCopyStore()\n\n const { announce, ariaLive } = useAriaLive()\n\n const [merchantBudgetDetailsDrawerOpen, setMerchantBudgetDetailsDrawerOpen] =\n React.useState(false)\n\n const existingMerchantBudget = transaction?.merchant_guid\n ? getMerchantBudgetByMerchantGuid(transaction.merchant_guid)\n : undefined\n\n const handleModalClose = () => {\n setLastActionType(currencyDialogAction)\n setCurrencyDialogAction(null)\n setAmount('')\n }\n\n const handleClick = () => {\n if (!existingMerchantBudget) {\n setCurrencyDialogAction(CurrencyDialogAction.CREATE)\n } else {\n setMerchantBudgetDetailsDrawerOpen(true)\n }\n }\n\n // details needed for all the three states of the dialog - create, edit, delete\n const actionDetails = {\n [CurrencyDialogAction.CREATE]: {\n content: buildDynamicCopy(\n budgetsCopy.create_budget_content,\n <strong>{transaction.description}</strong>,\n `${formatCurrency(transaction.amount, '0,0.00')}`,\n ) as string,\n title: budgetsCopy.dialog_create_budget_title,\n primaryButtonText: budgetsCopy.dialog_primary_button_text,\n errorAlertMessage: buildDynamicCopy(\n budgetsCopy.alert_merchant_budget_not_created,\n transaction.description,\n ) as string,\n errorRetryAction: () => setCurrencyDialogAction(CurrencyDialogAction.CREATE),\n successAlertMessage: buildDynamicCopy(\n budgetsCopy.alert_budget_created,\n transaction.description,\n ) as string,\n apiTrigger: async () => await addMerchantBudget(transaction.merchant_guid!, Number(amount)),\n },\n\n [CurrencyDialogAction.EDIT]: {\n content: buildDynamicCopy(\n budgetsCopy.edit_budget_content,\n <strong>{transaction.description}</strong>,\n ) as string,\n title: budgetsCopy.details_edit_title,\n primaryButtonText: budgetsCopy.add_save_button,\n errorAlertMessage: buildDynamicCopy(\n budgetsCopy.error_alert_edit_merchant_budget,\n transaction.description,\n ) as string,\n errorRetryAction: () => setCurrencyDialogAction(CurrencyDialogAction.EDIT),\n successAlertMessage: buildDynamicCopy(\n budgetsCopy.success_alert_edit_merchant_budget,\n transaction.description,\n ) as string,\n apiTrigger: async () =>\n await updateMerchantBudget({\n ...existingMerchantBudget!,\n amount: Number(amount),\n }),\n },\n\n [CurrencyDialogAction.DELETE]: {\n content: buildDynamicCopy(\n budgetsCopy.delete_description,\n <strong>{transaction.description}</strong>,\n ) as string,\n title: budgetsCopy.delete_title,\n primaryButtonText: budgetsCopy.details_delete_button,\n errorAlertMessage: buildDynamicCopy(\n budgetsCopy.error_alert_delete_merchant_budget,\n transaction.description,\n ) as string,\n errorRetryAction: () => setCurrencyDialogAction(CurrencyDialogAction.DELETE),\n successAlertMessage: buildDynamicCopy(\n budgetsCopy.success_alert_delete_merchant_budget,\n transaction.description,\n ) as string,\n apiTrigger: async () => await deleteMerchantBudget(existingMerchantBudget!.guid),\n },\n }\n\n const handlePrimaryAction = async () => {\n if (inProgressRef.current) return\n\n inProgressRef.current = true\n\n const { apiTrigger, successAlertMessage, errorAlertMessage } =\n actionDetails[currencyDialogAction as CurrencyDialogAction]\n\n const { isSuccess } = await apiTrigger()\n const alertMessage = isSuccess ? successAlertMessage : errorAlertMessage\n handleModalClose()\n setAlert({ msg: alertMessage, severity: isSuccess ? 'success' : 'error' })\n announce(alertMessage)\n\n if (isSuccess && currencyDialogAction === CurrencyDialogAction.DELETE) {\n setMerchantBudgetDetailsDrawerOpen(false)\n }\n inProgressRef.current = false\n }\n\n React.useEffect(() => {\n const dateRange = {\n start: startOfMonth(new Date(transaction.date * 1000)),\n end: endOfMonth(new Date(transaction.date * 1000)),\n }\n\n if (merchantBudgetDetailsDrawerOpen) {\n setFilter({\n accounts: accounts.map((account) => account.guid),\n custom: merchantBudgetDetailsDrawerOpen\n ? (trn) => trn.merchant_guid === transaction.merchant_guid\n : (trn) => trn.guid === transaction.guid,\n dateRange,\n })\n }\n }, [merchantBudgetDetailsDrawerOpen, transaction, accounts])\n\n const snackBar = () => (\n <Toast\n actionText={budgetsCopy.autogenerate_budgets_error_primary_button}\n autoHideDuration={3500}\n closeAriaLabel={commonCopy.close_aria}\n handleClose={() => setAlert(null)}\n message={alert?.msg ?? ''}\n onActionClick={actionDetails[lastActionType as CurrencyDialogAction]?.errorRetryAction}\n open={Boolean(alert)}\n severity={alert?.severity ?? 'success'}\n showAction={alert?.severity === 'error'}\n showClose={true}\n />\n )\n return (\n <React.Fragment>\n {ariaLive}\n\n <ListItem disableGutters={true} disablePadding={true}>\n <ListItemButton onClick={handleClick}>\n <ListItemAvatar>\n <Avatar sx={{ bgcolor: bgColor }} variant=\"rounded\">\n <Icon name=\"bubble_chart\" sx={{ color: 'text.primary' }} />\n </Avatar>\n </ListItemAvatar>\n <ListItemText\n primary={budgetsCopy.add_merchant_budget_primary_text}\n secondary={\n <Text bold={true} sx={{ color: 'text.primary' }} variant=\"body1\">\n {existingMerchantBudget\n ? `${formatCurrency(existingMerchantBudget.amount, '0,0.00')} / ${commonCopy.month_text}`\n : budgetsCopy.add_merchant_budget_secondary_text}\n </Text>\n }\n slotProps={{ primary: { variant: 'caption', fontSize: 11, fontWeight: 'normal' } }}\n />\n <ListItemIcon>\n <Icon name=\"chevron_right\" sx={{ color: 'text.primary' }} />\n </ListItemIcon>\n </ListItemButton>\n </ListItem>\n\n {!!existingMerchantBudget && (\n <MerchantBudgetDetailsDrawer\n isOpen={merchantBudgetDetailsDrawerOpen}\n merchantBudget={existingMerchantBudget}\n onClose={() => setMerchantBudgetDetailsDrawerOpen(false)}\n renderingToast={() => alert && snackBar()}\n setCurrencyDialogAction={(action) => {\n if (action === CurrencyDialogAction.EDIT) {\n setAmount(existingMerchantBudget?.amount.toString() || '')\n }\n setCurrencyDialogAction(action)\n }}\n transaction={transaction}\n />\n )}\n {currencyDialogAction && (\n <CurrencyDialog\n closeAriaLabel={commonCopy.close_aria}\n content={actionDetails[currencyDialogAction].content}\n handleInputChange={setAmount}\n handleModalClose={handleModalClose}\n handlePrimaryAction={handlePrimaryAction}\n handleSecondaryAction={handleModalClose}\n inputLabel={\n currencyDialogAction !== CurrencyDialogAction.DELETE ? commonCopy.amount_text : ''\n }\n inputValue={amount}\n isOpen={Boolean(currencyDialogAction)}\n primaryText={actionDetails[currencyDialogAction].primaryButtonText}\n secondaryText={commonCopy.cancel_button}\n title={actionDetails[currencyDialogAction].title}\n />\n )}\n\n {!!alert && snackBar()}\n </React.Fragment>\n )\n})\n"],"mappings":"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"}