@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.
- package/CHANGELOG.md +11 -0
- package/dist/budgets/BubbleBudgetsWidget.es.js +29 -29
- package/dist/budgets/BubbleBudgetsWidget.es.js.map +1 -1
- package/dist/budgets/components/AddBudgets.es.js +16 -13
- package/dist/budgets/components/AddBudgets.es.js.map +1 -1
- package/dist/budgets/components/BudgetDetailsDrawer.es.js +129 -91
- package/dist/budgets/components/BudgetDetailsDrawer.es.js.map +1 -1
- package/dist/budgets/components/BudgetDetailsDrawerV2.es.js +16 -13
- package/dist/budgets/components/BudgetDetailsDrawerV2.es.js.map +1 -1
- package/dist/budgets/components/addbudget/RecalculateBudgets.es.js +14 -11
- package/dist/budgets/components/addbudget/RecalculateBudgets.es.js.map +1 -1
- package/dist/budgets/components/budgetdetails/AddSubBudget.es.js +58 -55
- package/dist/budgets/components/budgetdetails/AddSubBudget.es.js.map +1 -1
- package/dist/budgets/components/budgetdetails/BudgetDetails.es.js +8 -5
- package/dist/budgets/components/budgetdetails/BudgetDetails.es.js.map +1 -1
- package/dist/budgets/components/budgetdetails/SubBudgetAmounts.d.ts +9 -0
- package/dist/budgets/components/budgetdetails/SubBudgetAmounts.es.js +69 -0
- package/dist/budgets/components/budgetdetails/SubBudgetAmounts.es.js.map +1 -0
- package/dist/budgets/components/budgetdetails/SubBudgetList.es.js +68 -55
- package/dist/budgets/components/budgetdetails/SubBudgetList.es.js.map +1 -1
- package/dist/budgets/components/budgetlist/BudgetRow.es.js +15 -26
- package/dist/budgets/components/budgetlist/BudgetRow.es.js.map +1 -1
- package/dist/budgets/components/budgetlist/SubBudgetRow.es.js +12 -55
- package/dist/budgets/components/budgetlist/SubBudgetRow.es.js.map +1 -1
- package/dist/budgets/components/shared/BudgetAmount.es.js +14 -15
- package/dist/budgets/components/shared/BudgetAmount.es.js.map +1 -1
- package/dist/budgets/components/shared/BudgetDonut.d.ts +8 -0
- package/dist/budgets/components/shared/BudgetDonut.es.js +25 -0
- package/dist/budgets/components/shared/BudgetDonut.es.js.map +1 -0
- package/dist/budgets/components/shared/SubBudgetCategory.d.ts +7 -0
- package/dist/budgets/components/shared/SubBudgetCategory.es.js +45 -0
- package/dist/budgets/components/shared/SubBudgetCategory.es.js.map +1 -0
- package/dist/core/constants/repeatingTransactions.d.ts +6 -0
- package/dist/core/constants/repeatingTransactions.es.js +18 -3
- package/dist/core/constants/repeatingTransactions.es.js.map +1 -1
- package/dist/core/stores/BudgetsStore.d.ts +13 -4
- package/dist/core/stores/BudgetsStore.es.js +40 -38
- package/dist/core/stores/BudgetsStore.es.js.map +1 -1
- package/dist/core/types/RepeatingTransaction.d.ts +2 -0
- package/dist/core/types/RepeatingTransaction.es.js.map +1 -1
- package/dist/core/types/Transaction.d.ts +1 -0
- package/dist/core/types/Transaction.es.js.map +1 -1
- package/dist/core/types/localization/BudgetsCopy.d.ts +3 -0
- package/dist/core/utils/BudgetUtil.d.ts +1 -0
- package/dist/core/utils/BudgetUtil.es.js +55 -51
- package/dist/core/utils/BudgetUtil.es.js.map +1 -1
- package/dist/core/utils/RecurringTransactionsUtil.d.ts +1 -0
- package/dist/core/utils/RecurringTransactionsUtil.es.js +145 -143
- package/dist/core/utils/RecurringTransactionsUtil.es.js.map +1 -1
- package/dist/core/utils/TransactionUtils.d.ts +1 -0
- package/dist/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.es.js +16 -14
- package/dist/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.es.js.map +1 -1
- package/dist/recurringtransactions/components/shared/recurringsettings/SelectTransaction.es.js +19 -17
- package/dist/recurringtransactions/components/shared/recurringsettings/SelectTransaction.es.js.map +1 -1
- package/dist/transactions/components/shared/TransactionList.es.js +16 -12
- package/dist/transactions/components/shared/TransactionList.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiondetails/actions/AddMerchantBudgetAction.es.js +85 -82
- package/dist/transactions/components/shared/transactiondetails/actions/AddMerchantBudgetAction.es.js.map +1 -1
- package/package.json +1 -1
package/dist/recurringtransactions/components/shared/recurringsettings/AddRecurringTransaction.es.js
CHANGED
|
@@ -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:
|
|
16
|
-
const { recurring: r } = w(), { filter: s, setFilter: c, transactions:
|
|
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
|
-
|
|
26
|
+
y();
|
|
27
27
|
return;
|
|
28
28
|
}
|
|
29
29
|
x();
|
|
30
|
-
const t = M(
|
|
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:
|
|
38
|
-
recurrence_type:
|
|
39
|
+
recurrence_day: p,
|
|
40
|
+
recurrence_type: l,
|
|
39
41
|
repeating_transaction_type: i ? T.Income : T.Bill,
|
|
40
|
-
second_recurrence_day:
|
|
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),
|
|
45
|
-
},
|
|
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:
|
|
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:
|
|
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:
|
|
79
|
-
frequency:
|
|
80
|
+
firstDay: p,
|
|
81
|
+
frequency: l,
|
|
80
82
|
onFirstDayChange: A,
|
|
81
83
|
onFrequencyChange: R,
|
|
82
84
|
onSecondDayChange: b,
|
|
83
|
-
secondDay:
|
|
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":";;;;;;;;;;;;;;AAyCA,IAAa,KAA0B,EAAA,CACpC,EACC,UAAA,IAAW,IACX,OAAA,GACA,2BAAA,IAAA,MAAkC,KAAA,MACA;AAClC,QAAM,EAAE,WAAW,EAAA,IAAS,EAAmB,GACzC,EAAE,QAAA,GAAQ,WAAA,GAAW,cAAA,EAAA,IAAiB,EAAoB,GAC1D,EAAE,yBAAA,EAAA,IAA4B,EAA8B,GAC5D,EAAE,MAAA,EAAA,IAAS,EAAa,GAExB,CAAC,GAAyB,CAAA,IAA8B,EAAM,SAAS,EAAK,GAC5E,CAAC,GAAiB,CAAA,IAAsB,EAAM,SAAS,EAAE,GACzD,CAAC,GAAW,CAAA,IAAgB,EAAM,SAAS,EAAU,UAAU,GAC/D,CAAC,GAAU,CAAA,IAAe,EAAM,SAAS,CAAC,GAC1C,CAAC,GAAW,CAAA,IAAgB,EAAM,SAAS,EAAE,GAE7C,IAAc,EAAM,QAAA,MAClB,EAAa,KAAA,CAAM,MAAM,EAAE,SAAS,CAAe,GACzD,CAAC,GAAiB,CAAY,CAChC,GAEM,IAAA,MAAmB;AACvB,IAAA,EAA2B,EAAI,GAG7B,EADE,IACQ;AAAA,MAAE,GAAG;AAAA,MAAQ,QAAQ;AAAA,IAAa,IAElC;AAAA,MAAE,GAAG;AAAA,MAAQ,QAAQ;AAAA,IAAc,CAFA;AAAA,EAIjD,GAEM,IAAgC,YAAY;AAChD,QAAI,CAAC,GAAa;AAChB,MAAA,EAAW;AACX;AAAA,IACF;AACA,IAAA,EAA0B;AAE1B,UAAM,IAAW,EAAmB,GAAW,EAAa,EAAY,IAAI,GAAG,CAAQ,GAEjF,IAAuB;AAAA,MAC3B,cAAc,EAAY;AAAA,MAC1B,QAAQ,EAAY;AAAA,MACpB,YAAY;AAAA,MACZ,eAAe,EAAY;AAAA,MAC3B,aAAa,EAAY,SAAS,EAAY,eAAe,EAAY;AAAA,MACzE,qBAAqB,EAAU,GAAU,EAAE,gBAAgB,OAAO,CAAC;AAAA,MACnE,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,MACjB,4BAA4B,IAAW,EAAc,SAAS,EAAc;AAAA,MAC5E,uBAAuB;AAAA,MACvB,kBAAkB,EAAY;AAAA,MAC9B,WAAW,EAAK;AAAA,IAClB;AAEA,UAAM,EAAwB,GAAsB,CAAW,GAC/D,EAAW;AAAA,EACb,GAEM,IAAA,MAAmB;AACvB,IAAA,EAAmB,EAAE,GACrB,EAA2B,EAAK;AAAA,EAClC;AAEA,SACE,gBAAA,EAAA,GAAA,EAAA,UAAA;AAAA,IACE,gBAAA,EAAC,GAAD;AAAA,MAAQ,SAAS;AAAA,MAAY,WAAW,gBAAA,EAAC,GAAD,EAAK,MAAM,GAAK,CAAA;AAAA,MAAG,SAAQ;AAAA,MAChE,UAAA;AAAA,IACK,CAAA;AAAA,IAER,gBAAA,EAAC,GAAD;AAAA,MACE,gBAAgB,EAAK;AAAA,MACrB,QAAQ;AAAA,MACR,SAAA,MAAe,EAA2B,EAAK;AAAA,MAC/C,OAAO;AAAA,MAEP,UAAA,gBAAA,EAAC,GAAD;AAAA,QACE,aAAa,IAAW,EAAK,yBAAyB,EAAK;AAAA,QAC3D,UAAA,CAAW,MAAgB;AACzB,UAAA,EAAU;AAAA,YACR,GAAG;AAAA,YACH,QAAA,CAAS,MACH,IACK,IACH,EAAmB,GAAa,CAAW,IAC3C,EAAa,CAAW,IAErB,IACH,EAAoB,GAAa,CAAW,IAC5C,EAAc,CAAW;AAAA,UAGnC,CAAC;AAAA,QACH;AAAA,QACA,YAAA,CAAa,MAAS,EAAmB,CAAI;AAAA,MAC9C,CAAA;AAAA,IACK,CAAA;AAAA,IAER,gBAAA,EAAC,GAAD;AAAA,MACE,gBAAgB,EAAK;AAAA,MACrB,QAAQ,EAAQ;AAAA,MAChB,SAAA,MAAe,EAAmB,EAAE;AAAA,MACpC,iBAAiB;AAAA,MACjB,OAAO,IAAW,EAAK,iBAAiB,EAAK;AAAA,MAE5C,UAAA,KACC,gBAAA,EAAC,GAAD;AAAA,QACY,UAAA;AAAA,QACC,WAAA;AAAA,QACX,kBAAkB;AAAA,QAClB,mBAAmB;AAAA,QACnB,mBAAmB;AAAA,QACR,WAAA;AAAA,QACE,aAAA;AAAA,MACd,CAAA;AAAA,IAEG,CAAA;AAAA,EACR,EAAA,CAAA;AAEN,CACF"}
|
|
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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"}
|
package/dist/recurringtransactions/components/shared/recurringsettings/SelectTransaction.es.js
CHANGED
|
@@ -1,44 +1,46 @@
|
|
|
1
1
|
import { useGlobalCopyStore as l } from "../../../../common/context/hooks.es.js";
|
|
2
|
-
import m from "../../../../
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import _ from "
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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(
|
|
19
|
+
o && /* @__PURE__ */ a(d, {
|
|
19
20
|
sx: { mx: 24 },
|
|
20
21
|
children: o
|
|
21
22
|
}),
|
|
22
|
-
/* @__PURE__ */ a(
|
|
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),
|
|
27
|
+
n(t), i(t);
|
|
27
28
|
},
|
|
28
29
|
placeholder: r.select_transaction_search_placeholder,
|
|
29
|
-
searchValue:
|
|
30
|
+
searchValue: s
|
|
30
31
|
}),
|
|
31
|
-
/* @__PURE__ */ a(
|
|
32
|
+
/* @__PURE__ */ a(h, {
|
|
32
33
|
bgcolor: e,
|
|
34
|
+
filter: m,
|
|
33
35
|
height: "auto",
|
|
34
|
-
onClick:
|
|
36
|
+
onClick: c,
|
|
35
37
|
showLoader: !1
|
|
36
38
|
})
|
|
37
39
|
]
|
|
38
40
|
});
|
|
39
41
|
});
|
|
40
42
|
export {
|
|
41
|
-
|
|
43
|
+
V as SelectTransaction
|
|
42
44
|
};
|
|
43
45
|
|
|
44
46
|
//# sourceMappingURL=SelectTransaction.es.js.map
|
package/dist/recurringtransactions/components/shared/recurringsettings/SelectTransaction.es.js.map
CHANGED
|
@@ -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
|
|
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
|
|
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:
|
|
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:
|
|
21
|
-
const { isLoading:
|
|
22
|
-
const t =
|
|
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
|
-
}, [
|
|
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(
|
|
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(
|
|
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
|
-
(
|
|
57
|
-
!
|
|
58
|
-
!
|
|
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(
|
|
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":";;;;;;;;;;;;;;;;AAqBA,IAAM,IAAa,IACb,IAAkB,IAelB,IAAA,CAAmD,EACvD,SAAA,GACA,QAAA,GACA,QAAA,IAAS,uBACT,QAAA,IAAS,gBAAA,EAAC,GAAD;AAAA,EAAQ,OAAM;AAAA,EAAU,MAAM;AAAK,CAAA,GAC5C,SAAA,GACA,cAAA,IAAe,IACf,YAAA,IAAa,IACb,aAAA,GACA,OAAA,IAAQ,QACR,WAAA,IAAY,gBAAA,EAAC,GAAD,CAAY,CAAA,EAAA,MACpB;AACJ,QAAM,EAAE,WAAA,GAAW,oBAAoB,EAAA,IAAoB,EAAoB,GACzE,IAAe,EAAM,QAAA,MAAc;AACvC,UAAM,IAAsB,IAAS,EAAgB,OAAO,CAAM,IAAI;AACtE,WAAO,KAAe;AAAA,EACxB,GAAG,
|
|
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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"}
|
package/dist/transactions/components/shared/transactiondetails/actions/AddMerchantBudgetAction.es.js
CHANGED
|
@@ -1,39 +1,39 @@
|
|
|
1
1
|
import { buildDynamicCopy as n } from "../../../../../core/utils/Localization.es.js";
|
|
2
|
-
import { useAccountStore as
|
|
3
|
-
import { useAriaLive as
|
|
4
|
-
import { formatCurrency as
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import { observer as
|
|
9
|
-
import { Text as
|
|
10
|
-
import { endOfMonth as
|
|
11
|
-
import { startOfMonth as
|
|
12
|
-
import { Icon as
|
|
13
|
-
import { jsx as r, jsxs as
|
|
14
|
-
import { useTheme as
|
|
15
|
-
import
|
|
16
|
-
import
|
|
17
|
-
import
|
|
18
|
-
import
|
|
19
|
-
import
|
|
20
|
-
import
|
|
21
|
-
var
|
|
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
|
-
})({}),
|
|
24
|
-
const [o, c] =
|
|
25
|
-
|
|
26
|
-
},
|
|
27
|
-
|
|
28
|
-
},
|
|
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 }), `${
|
|
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
|
|
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
|
|
46
|
-
...
|
|
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
|
|
57
|
+
apiTrigger: async () => await R(i.guid)
|
|
58
58
|
}
|
|
59
|
-
},
|
|
59
|
+
}, j = async () => {
|
|
60
60
|
if (h.current) return;
|
|
61
61
|
h.current = !0;
|
|
62
|
-
const { apiTrigger:
|
|
63
|
-
|
|
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
|
-
|
|
66
|
-
const
|
|
67
|
-
start:
|
|
68
|
-
end:
|
|
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 &&
|
|
71
|
-
accounts:
|
|
72
|
-
custom: g ? (
|
|
73
|
-
dateRange:
|
|
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
|
-
|
|
81
|
+
x
|
|
79
82
|
]);
|
|
80
|
-
const
|
|
83
|
+
const T = () => /* @__PURE__ */ r(U, {
|
|
81
84
|
actionText: t.autogenerate_budgets_error_primary_button,
|
|
82
85
|
autoHideDuration: 3500,
|
|
83
|
-
closeAriaLabel:
|
|
84
|
-
handleClose: () =>
|
|
85
|
-
message:
|
|
86
|
-
onActionClick:
|
|
87
|
-
open: !!
|
|
88
|
-
severity:
|
|
89
|
-
showAction:
|
|
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__ */
|
|
93
|
-
|
|
94
|
-
/* @__PURE__ */ r(
|
|
95
|
+
return /* @__PURE__ */ C(s.Fragment, { children: [
|
|
96
|
+
$,
|
|
97
|
+
/* @__PURE__ */ r(ee, {
|
|
95
98
|
disableGutters: !0,
|
|
96
99
|
disablePadding: !0,
|
|
97
|
-
children: /* @__PURE__ */
|
|
98
|
-
onClick:
|
|
100
|
+
children: /* @__PURE__ */ C(te, {
|
|
101
|
+
onClick: G,
|
|
99
102
|
children: [
|
|
100
|
-
/* @__PURE__ */ r(
|
|
101
|
-
sx: { bgcolor:
|
|
103
|
+
/* @__PURE__ */ r(ne, { children: /* @__PURE__ */ r(oe, {
|
|
104
|
+
sx: { bgcolor: k },
|
|
102
105
|
variant: "rounded",
|
|
103
|
-
children: /* @__PURE__ */ r(
|
|
106
|
+
children: /* @__PURE__ */ r(v, {
|
|
104
107
|
name: "bubble_chart",
|
|
105
108
|
sx: { color: "text.primary" }
|
|
106
109
|
})
|
|
107
110
|
}) }),
|
|
108
|
-
/* @__PURE__ */ r(
|
|
111
|
+
/* @__PURE__ */ r(re, {
|
|
109
112
|
primary: t.add_merchant_budget_primary_text,
|
|
110
|
-
secondary: /* @__PURE__ */ r(
|
|
113
|
+
secondary: /* @__PURE__ */ r(Q, {
|
|
111
114
|
bold: !0,
|
|
112
115
|
sx: { color: "text.primary" },
|
|
113
116
|
variant: "body1",
|
|
114
|
-
children:
|
|
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(
|
|
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
|
-
!!
|
|
132
|
+
!!i && /* @__PURE__ */ r(J, {
|
|
130
133
|
isOpen: g,
|
|
131
|
-
merchantBudget:
|
|
132
|
-
onClose: () =>
|
|
133
|
-
renderingToast: () =>
|
|
134
|
-
setCurrencyDialogAction: (
|
|
135
|
-
|
|
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(
|
|
140
|
-
closeAriaLabel:
|
|
141
|
-
content:
|
|
142
|
+
o && /* @__PURE__ */ r(q, {
|
|
143
|
+
closeAriaLabel: u.close_aria,
|
|
144
|
+
content: m[o].content,
|
|
142
145
|
handleInputChange: _,
|
|
143
|
-
handleModalClose:
|
|
144
|
-
handlePrimaryAction:
|
|
145
|
-
handleSecondaryAction:
|
|
146
|
-
inputLabel: o !== "delete" ?
|
|
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:
|
|
150
|
-
secondaryText:
|
|
151
|
-
title:
|
|
152
|
+
primaryText: m[o].primaryButtonText,
|
|
153
|
+
secondaryText: u.cancel_button,
|
|
154
|
+
title: m[o].title
|
|
152
155
|
}),
|
|
153
|
-
!!
|
|
156
|
+
!!d && T()
|
|
154
157
|
] });
|
|
155
158
|
});
|
|
156
159
|
export {
|
|
157
|
-
|
|
158
|
-
|
|
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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"}
|