@mx-cartographer/experiences 9.4.1-alpha.al0 → 9.4.1
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 +2 -3
- package/dist/budgets/components/BudgetDetailsDrawer.es.js +95 -133
- package/dist/budgets/components/BudgetDetailsDrawer.es.js.map +1 -1
- package/dist/budgets/components/budgetdetails/AddSubBudget.es.js +63 -64
- package/dist/budgets/components/budgetdetails/AddSubBudget.es.js.map +1 -1
- package/dist/budgets/components/budgetdetails/SubBudgetList.es.js +41 -42
- package/dist/budgets/components/budgetdetails/SubBudgetList.es.js.map +1 -1
- package/dist/budgets/components/budgetlist/BudgetRow.es.js +26 -15
- package/dist/budgets/components/budgetlist/BudgetRow.es.js.map +1 -1
- package/dist/budgets/components/budgetlist/SubBudgetRow.es.js +55 -12
- package/dist/budgets/components/budgetlist/SubBudgetRow.es.js.map +1 -1
- package/dist/budgets/components/shared/BudgetAmount.es.js +15 -14
- package/dist/budgets/components/shared/BudgetAmount.es.js.map +1 -1
- package/dist/core/stores/BudgetsStore.d.ts +1 -3
- package/dist/core/stores/BudgetsStore.es.js +32 -40
- package/dist/core/stores/BudgetsStore.es.js.map +1 -1
- package/dist/core/types/RepeatingTransaction.d.ts +2 -2
- package/dist/core/types/RepeatingTransaction.es.js.map +1 -1
- package/dist/core/types/localization/BudgetsCopy.d.ts +0 -3
- package/dist/core/utils/BudgetUtil.es.js +50 -56
- package/dist/core/utils/BudgetUtil.es.js.map +1 -1
- package/dist/recurringtransactions/components/RecurrenceRow.es.js +1 -1
- package/dist/recurringtransactions/components/RecurrenceRow.es.js.map +1 -1
- package/dist/recurringtransactions/components/RecurringTransactionDetails.es.js +1 -1
- package/dist/recurringtransactions/components/RecurringTransactionDetails.es.js.map +1 -1
- package/dist/recurringtransactions/components/RecurringTransactionList.es.js +1 -1
- package/dist/recurringtransactions/components/RecurringTransactionList.es.js.map +1 -1
- package/dist/recurringtransactions/components/shared/recurringsettings/RecurringRow.es.js +1 -1
- package/dist/recurringtransactions/components/shared/recurringsettings/RecurringRow.es.js.map +1 -1
- package/dist/recurringtransactions/components/shared/recurringsettings/SelectTransaction.es.js +14 -15
- package/dist/recurringtransactions/components/shared/recurringsettings/SelectTransaction.es.js.map +1 -1
- package/package.json +1 -1
- package/dist/budgets/components/budgetdetails/SubBudgetAmounts.d.ts +0 -10
- package/dist/budgets/components/budgetdetails/SubBudgetAmounts.es.js +0 -58
- package/dist/budgets/components/budgetdetails/SubBudgetAmounts.es.js.map +0 -1
- package/dist/budgets/components/shared/BudgetDonut.d.ts +0 -8
- package/dist/budgets/components/shared/BudgetDonut.es.js +0 -25
- package/dist/budgets/components/shared/BudgetDonut.es.js.map +0 -1
- package/dist/budgets/components/shared/SubBudgetCategory.d.ts +0 -7
- package/dist/budgets/components/shared/SubBudgetCategory.es.js +0 -45
- package/dist/budgets/components/shared/SubBudgetCategory.es.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,144 +1,106 @@
|
|
|
1
|
-
import { buildDynamicCopy as
|
|
2
|
-
import { useBudgetsStore as
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import { BudgetAmount as
|
|
6
|
-
import { BudgetDetails as
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}), p(o), S(!0), T({
|
|
23
|
-
accounts: v,
|
|
24
|
-
dateRange: N,
|
|
25
|
-
custom: (t) => t.category_guid === e.category_guid || t.top_level_category_guid === e.category_guid,
|
|
26
|
-
showSplits: !0
|
|
27
|
-
});
|
|
28
|
-
}
|
|
1
|
+
import { buildDynamicCopy as c } from "../../core/utils/Localization.es.js";
|
|
2
|
+
import { useBudgetsStore as E, useGlobalCopyStore as N, useGlobalUiStore as P, useTransactionStore as G } from "../../common/context/hooks.es.js";
|
|
3
|
+
import _ from "../../common/components/dialog/Dialog.es.js";
|
|
4
|
+
import I from "../../common/components/drawer/Drawer.es.js";
|
|
5
|
+
import { BudgetAmount as $ } from "./shared/BudgetAmount.es.js";
|
|
6
|
+
import { BudgetDetails as j } from "./budgetdetails/BudgetDetails.es.js";
|
|
7
|
+
import r from "react";
|
|
8
|
+
import { observer as F } from "mobx-react-lite";
|
|
9
|
+
import { Text as R } from "@mxenabled/mxui";
|
|
10
|
+
import { jsx as o, jsxs as f } from "react/jsx-runtime";
|
|
11
|
+
import U from "@mui/material/Alert";
|
|
12
|
+
import k from "@mui/material/Snackbar";
|
|
13
|
+
var Z = F(() => {
|
|
14
|
+
const { selectedAccountGuids: b } = P(), { budgets: t, common: n } = N(), { alert: d, dateRange: h, deleteBudget: C, selectedBudget: e, selectedSubBudget: S, setAlert: a, setSelectedBudget: B, updateBudget: A } = E(), { setFilter: D } = G(), [v, u] = r.useState(!1), [x, s] = r.useState(!1), [O, m] = r.useState(!1), [i, l] = r.useState("");
|
|
15
|
+
r.useEffect(() => {
|
|
16
|
+
e && !S && (l(`${e.amount}`), u(!0), D({
|
|
17
|
+
accounts: b,
|
|
18
|
+
dateRange: h,
|
|
19
|
+
custom: (y) => y.category_guid === e.category_guid || y.top_level_category_guid === e.category_guid,
|
|
20
|
+
showSplits: !0
|
|
21
|
+
}));
|
|
29
22
|
}, [e]);
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
...
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
},
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return _({
|
|
42
|
-
...t,
|
|
43
|
-
amount: i,
|
|
44
|
-
percentage: t.category.currentAmount / (i || 1) * 100
|
|
45
|
-
});
|
|
46
|
-
}))).every((t) => t.isSuccess) : o = (await _({
|
|
47
|
-
...e,
|
|
48
|
-
amount: Number(a),
|
|
49
|
-
percentage: e.category.totalAmount / (Number(a) || 1) * 100
|
|
50
|
-
})).isSuccess, o && (g(!1), u(b(r.alert_budget_updated, e.category.name)));
|
|
51
|
-
}
|
|
52
|
-
}, G = async () => {
|
|
53
|
-
e && (await x(e.guid), u(b(r.alert_budget_deleted, e.category.name))), h();
|
|
54
|
-
}, h = () => {
|
|
55
|
-
S(!1), setTimeout(() => {
|
|
56
|
-
O(void 0);
|
|
23
|
+
const T = async () => {
|
|
24
|
+
e && (await A({
|
|
25
|
+
...e,
|
|
26
|
+
amount: Number(i),
|
|
27
|
+
percentage: e.category.totalAmount / Number(i) * 100
|
|
28
|
+
}), s(!1), a(c(t.alert_budget_updated, e.category.name)));
|
|
29
|
+
}, w = async () => {
|
|
30
|
+
e && (await C(e.guid), a(c(t.alert_budget_deleted, e.category.name))), p();
|
|
31
|
+
}, p = () => {
|
|
32
|
+
u(!1), setTimeout(() => {
|
|
33
|
+
B(void 0);
|
|
57
34
|
}, 250);
|
|
58
|
-
},
|
|
59
|
-
|
|
60
|
-
const o = {};
|
|
61
|
-
e?.subBudgets.forEach((t) => {
|
|
62
|
-
o[t.guid] = `${t.amount}`;
|
|
63
|
-
}), p(o);
|
|
35
|
+
}, g = () => {
|
|
36
|
+
s(!1), l(`${e?.amount}`);
|
|
64
37
|
};
|
|
65
|
-
if (
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
38
|
+
if (e)
|
|
39
|
+
return /* @__PURE__ */ f(r.Fragment, { children: [
|
|
40
|
+
/* @__PURE__ */ f(I, {
|
|
41
|
+
ariaLabelClose: n.close_aria,
|
|
42
|
+
isOpen: v,
|
|
43
|
+
onClose: p,
|
|
44
|
+
onPrimaryAction: () => s(!0),
|
|
45
|
+
onSecondaryAction: () => m(!0),
|
|
46
|
+
primaryText: t.details_edit_button,
|
|
47
|
+
secondaryColor: "error",
|
|
48
|
+
secondaryText: t.details_delete_button,
|
|
49
|
+
title: t.details_title,
|
|
50
|
+
children: [/* @__PURE__ */ o(j, { budget: e }), /* @__PURE__ */ o(k, {
|
|
51
|
+
anchorOrigin: {
|
|
52
|
+
vertical: "bottom",
|
|
53
|
+
horizontal: "right"
|
|
54
|
+
},
|
|
55
|
+
autoHideDuration: 3500,
|
|
56
|
+
onClose: () => a(""),
|
|
57
|
+
open: !!d,
|
|
58
|
+
children: /* @__PURE__ */ o(U, {
|
|
59
|
+
closeText: "",
|
|
60
|
+
onClose: () => a(""),
|
|
61
|
+
severity: "success",
|
|
62
|
+
variant: "filled",
|
|
63
|
+
children: d
|
|
64
|
+
})
|
|
65
|
+
})]
|
|
66
|
+
}),
|
|
67
|
+
/* @__PURE__ */ o(_, {
|
|
68
|
+
copy: {
|
|
69
|
+
close_aria: n.close_aria,
|
|
70
|
+
title: t.details_edit_title
|
|
71
|
+
},
|
|
72
|
+
disablePrimaryButton: Number(i) <= 0,
|
|
73
|
+
isOpen: x,
|
|
74
|
+
onClose: g,
|
|
75
|
+
onPrimaryAction: T,
|
|
76
|
+
onSecondaryAction: g,
|
|
77
|
+
primaryText: t.edit_save_button,
|
|
78
|
+
children: /* @__PURE__ */ o($, {
|
|
79
|
+
amount: i,
|
|
80
|
+
categoryName: e.category.name,
|
|
81
|
+
onAmountChanged: l
|
|
82
|
+
})
|
|
83
|
+
}),
|
|
84
|
+
/* @__PURE__ */ o(_, {
|
|
85
|
+
copy: {
|
|
86
|
+
close_aria: n.close_aria,
|
|
87
|
+
title: t.delete_title
|
|
85
88
|
},
|
|
86
|
-
|
|
87
|
-
onClose: () =>
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
variant: "
|
|
94
|
-
children:
|
|
89
|
+
isOpen: O,
|
|
90
|
+
onClose: () => m(!1),
|
|
91
|
+
onPrimaryAction: w,
|
|
92
|
+
primaryColor: "error",
|
|
93
|
+
primaryText: t.details_delete_button,
|
|
94
|
+
secondaryColor: "secondary",
|
|
95
|
+
children: /* @__PURE__ */ o(R, {
|
|
96
|
+
variant: "subtitle1",
|
|
97
|
+
children: c(t.delete_description, e.category.name)
|
|
95
98
|
})
|
|
96
|
-
})]
|
|
97
|
-
}),
|
|
98
|
-
/* @__PURE__ */ y(C, {
|
|
99
|
-
copy: {
|
|
100
|
-
close_aria: m.close_aria,
|
|
101
|
-
title: r.details_edit_title
|
|
102
|
-
},
|
|
103
|
-
disablePrimaryButton: F,
|
|
104
|
-
isOpen: E,
|
|
105
|
-
onClose: A,
|
|
106
|
-
onPrimaryAction: I,
|
|
107
|
-
onSecondaryAction: A,
|
|
108
|
-
primaryText: r.edit_save_button,
|
|
109
|
-
sx: { "& .MuiStack-root:first-child": { pb: 8 } },
|
|
110
|
-
children: [!l && /* @__PURE__ */ n(K, {
|
|
111
|
-
amount: a,
|
|
112
|
-
categoryName: e.category.name,
|
|
113
|
-
onAmountChanged: d
|
|
114
|
-
}), l && /* @__PURE__ */ n(V, {
|
|
115
|
-
amount: a,
|
|
116
|
-
categoryName: e.category.name,
|
|
117
|
-
onSubBudgetAmountChanged: $,
|
|
118
|
-
subBudgetAmounts: c,
|
|
119
|
-
subBudgets: e.subBudgets
|
|
120
|
-
})]
|
|
121
|
-
}),
|
|
122
|
-
/* @__PURE__ */ n(C, {
|
|
123
|
-
copy: {
|
|
124
|
-
close_aria: m.close_aria,
|
|
125
|
-
title: r.delete_title
|
|
126
|
-
},
|
|
127
|
-
isOpen: P,
|
|
128
|
-
onClose: () => B(!1),
|
|
129
|
-
onPrimaryAction: G,
|
|
130
|
-
primaryColor: "error",
|
|
131
|
-
primaryText: r.details_delete_button,
|
|
132
|
-
secondaryColor: "secondary",
|
|
133
|
-
children: /* @__PURE__ */ n(X, {
|
|
134
|
-
variant: "subtitle1",
|
|
135
|
-
children: b(r.delete_description, e.category.name)
|
|
136
99
|
})
|
|
137
|
-
})
|
|
138
|
-
] });
|
|
100
|
+
] });
|
|
139
101
|
});
|
|
140
102
|
export {
|
|
141
|
-
|
|
103
|
+
Z as BudgetDetailsDrawer
|
|
142
104
|
};
|
|
143
105
|
|
|
144
106
|
//# sourceMappingURL=BudgetDetailsDrawer.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BudgetDetailsDrawer.es.js","names":[],"sources":["../../../src/budgets/components/BudgetDetailsDrawer.tsx"],"sourcesContent":["import React from 'react'\n\nimport { observer } from 'mobx-react-lite'\n\nimport Alert from '@mui/material/Alert'\nimport Snackbar from '@mui/material/Snackbar'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport {\n Dialog,\n Drawer,\n useBudgetsStore,\n useGlobalCopyStore,\n useGlobalUiStore,\n useTransactionStore,\n} from '../../common'\nimport { type Budget, type Transaction } from '../../core'\n\nimport { BudgetDetails } from './budgetdetails/BudgetDetails'\nimport { BudgetAmount } from './shared/BudgetAmount'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\nimport { SubBudgetAmounts } from './budgetdetails/SubBudgetAmounts'\n\nexport const BudgetDetailsDrawer = observer(() => {\n const { selectedAccountGuids } = useGlobalUiStore()\n const { budgets: copy, common: commonCopy } = useGlobalCopyStore()\n const {\n alert,\n dateRange,\n deleteBudget,\n selectedBudget,\n selectedSubBudget,\n setAlert,\n setSelectedBudget,\n updateBudget,\n } = useBudgetsStore()\n const { setFilter } = useTransactionStore()\n\n const [isOpen, setIsOpen] = React.useState(false)\n const [isEditOpen, setIsEditOpen] = React.useState(false)\n const [isDeleteOpen, setIsDeleteOpen] = React.useState(false)\n const [amount, setAmount] = React.useState(``)\n const [subBudgetAmounts, setSubBudgetAmounts] = React.useState<Record<string, string>>({})\n\n React.useEffect(() => {\n if (selectedBudget && !selectedSubBudget) {\n setAmount(`${selectedBudget.amount}`)\n const initialSubAmounts: Record<string, string> = {}\n selectedBudget.subBudgets.forEach((sb) => {\n initialSubAmounts[sb.guid] = `${sb.amount}`\n })\n setSubBudgetAmounts(initialSubAmounts)\n setIsOpen(true)\n setFilter({\n accounts: selectedAccountGuids,\n dateRange: dateRange,\n custom: (t: Transaction) =>\n t.category_guid === selectedBudget.category_guid ||\n t.top_level_category_guid === selectedBudget.category_guid,\n showSplits: true,\n })\n }\n }, [selectedBudget])\n\n const handleSubBudgetAmountChanged = (guid: string, newAmount: string) => {\n const updated = { ...subBudgetAmounts, [guid]: newAmount }\n const newTotal = selectedBudget?.subBudgets.reduce(\n (sum, sb) => sum + (Number(updated[sb.guid]) || 0),\n 0,\n )\n setSubBudgetAmounts(updated)\n setAmount(`${newTotal ?? 0}`)\n }\n\n const handleUpdateBudget = async () => {\n if (selectedBudget) {\n let allSucceeded = true\n\n if (selectedBudget.subBudgets.length > 0) {\n const results = await Promise.all(\n selectedBudget.subBudgets.map((subBudget) => {\n const newAmount = Number(subBudgetAmounts[subBudget.guid] ?? subBudget.amount)\n return updateBudget({\n ...subBudget,\n amount: newAmount,\n percentage: (subBudget.category.currentAmount / (newAmount || 1)) * 100,\n } as Budget)\n }),\n )\n allSucceeded = results.every((r) => r.isSuccess)\n } else {\n const result = await updateBudget({\n ...selectedBudget,\n amount: Number(amount),\n percentage: (selectedBudget.category.totalAmount / (Number(amount) || 1)) * 100,\n } as Budget)\n allSucceeded = result.isSuccess\n }\n\n if (allSucceeded) {\n setIsEditOpen(false)\n setAlert(\n buildDynamicCopy(copy.alert_budget_updated, selectedBudget.category.name) as string,\n )\n }\n }\n }\n\n const handleDeleteBudget = async () => {\n if (selectedBudget) {\n await deleteBudget(selectedBudget.guid)\n setAlert(buildDynamicCopy(copy.alert_budget_deleted, selectedBudget.category.name) as string)\n }\n handleClose()\n }\n\n const handleClose = () => {\n setIsOpen(false)\n // Wait for the close animation before set the selected budget\n setTimeout(() => {\n setSelectedBudget(undefined)\n }, 250)\n }\n\n const handleEditClose = () => {\n setIsEditOpen(false)\n setAmount(`${selectedBudget?.amount}`)\n const initialSubAmounts: Record<string, string> = {}\n selectedBudget?.subBudgets.forEach((sb) => {\n initialSubAmounts[sb.guid] = `${sb.amount}`\n })\n setSubBudgetAmounts(initialSubAmounts)\n }\n\n if (!selectedBudget) {\n return undefined\n }\n\n const hasSubBudgets = selectedBudget.subBudgets.length > 0\n const isParentInvalid = amount === '' || Number(amount) < 0 || isNaN(Number(amount))\n const isSubBudgetInvalid =\n hasSubBudgets &&\n selectedBudget.subBudgets.some((sb) => {\n const val = subBudgetAmounts[sb.guid]\n return val === undefined || val === '' || Number(val) < 0 || isNaN(Number(val))\n })\n const disablePrimaryButton = hasSubBudgets ? isSubBudgetInvalid : isParentInvalid\n\n return (\n <React.Fragment>\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={isOpen}\n onClose={handleClose}\n onPrimaryAction={() => setIsEditOpen(true)}\n onSecondaryAction={() => setIsDeleteOpen(true)}\n primaryText={copy.details_edit_button}\n secondaryColor=\"error\"\n secondaryText={copy.details_delete_button}\n title={copy.details_title}\n >\n <BudgetDetails budget={selectedBudget} />\n <Snackbar\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n autoHideDuration={3500}\n onClose={() => setAlert('')}\n open={Boolean(alert)}\n >\n <Alert closeText=\"\" onClose={() => setAlert('')} severity={'success'} variant=\"filled\">\n {alert}\n </Alert>\n </Snackbar>\n </Drawer>\n\n <Dialog\n copy={{ close_aria: commonCopy.close_aria, title: copy.details_edit_title }}\n disablePrimaryButton={disablePrimaryButton}\n isOpen={isEditOpen}\n onClose={handleEditClose}\n onPrimaryAction={handleUpdateBudget}\n onSecondaryAction={handleEditClose}\n primaryText={copy.edit_save_button}\n sx={{\n '& .MuiStack-root:first-child': {\n pb: 8,\n },\n }}\n >\n {!hasSubBudgets && (\n <BudgetAmount\n amount={amount}\n categoryName={selectedBudget.category.name}\n onAmountChanged={setAmount}\n />\n )}\n {hasSubBudgets && (\n <SubBudgetAmounts\n amount={amount}\n categoryName={selectedBudget.category.name}\n onSubBudgetAmountChanged={handleSubBudgetAmountChanged}\n subBudgetAmounts={subBudgetAmounts}\n subBudgets={selectedBudget.subBudgets}\n />\n )}\n </Dialog>\n\n <Dialog\n copy={{ close_aria: commonCopy.close_aria, title: copy.delete_title }}\n isOpen={isDeleteOpen}\n onClose={() => setIsDeleteOpen(false)}\n onPrimaryAction={handleDeleteBudget}\n primaryColor=\"error\"\n primaryText={copy.details_delete_button}\n secondaryColor=\"secondary\"\n >\n <Text variant=\"subtitle1\">\n {buildDynamicCopy(copy.delete_description, selectedBudget.category.name) as string}\n </Text>\n </Dialog>\n </React.Fragment>\n )\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BudgetDetailsDrawer.es.js","names":[],"sources":["../../../src/budgets/components/BudgetDetailsDrawer.tsx"],"sourcesContent":["import React from 'react'\n\nimport { observer } from 'mobx-react-lite'\n\nimport Alert from '@mui/material/Alert'\nimport Snackbar from '@mui/material/Snackbar'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport {\n Dialog,\n Drawer,\n useBudgetsStore,\n useGlobalCopyStore,\n useGlobalUiStore,\n useTransactionStore,\n} from '../../common'\nimport { type Budget, type Transaction } from '../../core'\n\nimport { BudgetDetails } from './budgetdetails/BudgetDetails'\nimport { BudgetAmount } from './shared/BudgetAmount'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\n\nexport const BudgetDetailsDrawer = observer(() => {\n const { selectedAccountGuids } = useGlobalUiStore()\n const { budgets: copy, common: commonCopy } = useGlobalCopyStore()\n const {\n alert,\n dateRange,\n deleteBudget,\n selectedBudget,\n selectedSubBudget,\n setAlert,\n setSelectedBudget,\n updateBudget,\n } = useBudgetsStore()\n const { setFilter } = useTransactionStore()\n\n const [isOpen, setIsOpen] = React.useState(false)\n const [isEditOpen, setIsEditOpen] = React.useState(false)\n const [isDeleteOpen, setIsDeleteOpen] = React.useState(false)\n const [amount, setAmount] = React.useState(``)\n\n React.useEffect(() => {\n if (selectedBudget && !selectedSubBudget) {\n setAmount(`${selectedBudget.amount}`)\n setIsOpen(true)\n setFilter({\n accounts: selectedAccountGuids,\n dateRange: dateRange,\n custom: (t: Transaction) =>\n t.category_guid === selectedBudget.category_guid ||\n t.top_level_category_guid === selectedBudget.category_guid,\n showSplits: true,\n })\n }\n }, [selectedBudget])\n\n const handleUpdateBudget = async () => {\n if (selectedBudget) {\n await updateBudget({\n ...selectedBudget,\n amount: Number(amount),\n percentage: (selectedBudget.category.totalAmount / Number(amount)) * 100,\n } as Budget)\n setIsEditOpen(false)\n setAlert(buildDynamicCopy(copy.alert_budget_updated, selectedBudget.category.name) as string)\n }\n }\n\n const handleDeleteBudget = async () => {\n if (selectedBudget) {\n await deleteBudget(selectedBudget.guid)\n setAlert(buildDynamicCopy(copy.alert_budget_deleted, selectedBudget.category.name) as string)\n }\n handleClose()\n }\n\n const handleClose = () => {\n setIsOpen(false)\n // Wait for the close animation before set the selected budget\n setTimeout(() => {\n setSelectedBudget(undefined)\n }, 250)\n }\n\n const handleEditClose = () => {\n setIsEditOpen(false)\n setAmount(`${selectedBudget?.amount}`)\n }\n\n if (!selectedBudget) {\n return undefined\n }\n\n return (\n <React.Fragment>\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={isOpen}\n onClose={handleClose}\n onPrimaryAction={() => setIsEditOpen(true)}\n onSecondaryAction={() => setIsDeleteOpen(true)}\n primaryText={copy.details_edit_button}\n secondaryColor=\"error\"\n secondaryText={copy.details_delete_button}\n title={copy.details_title}\n >\n <BudgetDetails budget={selectedBudget} />\n <Snackbar\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n autoHideDuration={3500}\n onClose={() => setAlert('')}\n open={Boolean(alert)}\n >\n <Alert closeText=\"\" onClose={() => setAlert('')} severity={'success'} variant=\"filled\">\n {alert}\n </Alert>\n </Snackbar>\n </Drawer>\n\n <Dialog\n copy={{ close_aria: commonCopy.close_aria, title: copy.details_edit_title }}\n disablePrimaryButton={Number(amount) <= 0}\n isOpen={isEditOpen}\n onClose={handleEditClose}\n onPrimaryAction={handleUpdateBudget}\n onSecondaryAction={handleEditClose}\n primaryText={copy.edit_save_button}\n >\n <BudgetAmount\n amount={amount}\n categoryName={selectedBudget.category.name}\n onAmountChanged={setAmount}\n />\n </Dialog>\n\n <Dialog\n copy={{ close_aria: commonCopy.close_aria, title: copy.delete_title }}\n isOpen={isDeleteOpen}\n onClose={() => setIsDeleteOpen(false)}\n onPrimaryAction={handleDeleteBudget}\n primaryColor=\"error\"\n primaryText={copy.details_delete_button}\n secondaryColor=\"secondary\"\n >\n <Text variant=\"subtitle1\">\n {buildDynamicCopy(copy.delete_description, selectedBudget.category.name) as string}\n </Text>\n </Dialog>\n </React.Fragment>\n )\n})\n"],"mappings":"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"}
|
|
@@ -1,99 +1,98 @@
|
|
|
1
|
-
import { useBudgetsStore as
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import
|
|
17
|
-
import
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
t && (f(t), g(`${t.currentAmount === 0 ? "" : t.currentAmount}`), u(!0));
|
|
1
|
+
import { useBudgetsStore as v, useGlobalCopyStore as I } from "../../../common/context/hooks.es.js";
|
|
2
|
+
import O from "../../../common/components/dialog/Dialog.es.js";
|
|
3
|
+
import w from "../../../common/components/drawer/Drawer.es.js";
|
|
4
|
+
import { useCategoryUiStore as L } from "../../../categories/context/hooks.es.js";
|
|
5
|
+
import N from "../../../categories/components/CategoryRow.es.js";
|
|
6
|
+
import { BudgetAmount as j } from "../shared/BudgetAmount.es.js";
|
|
7
|
+
import t from "react";
|
|
8
|
+
import { observer as k } from "mobx-react-lite";
|
|
9
|
+
import p from "@mui/material/Stack";
|
|
10
|
+
import { Icon as f, Text as D } from "@mxenabled/mxui";
|
|
11
|
+
import { jsx as e, jsxs as m } from "react/jsx-runtime";
|
|
12
|
+
import G from "@mui/material/Box";
|
|
13
|
+
import P from "@mui/material/Divider";
|
|
14
|
+
import T from "@mui/material/List";
|
|
15
|
+
import z from "@mui/material/ListItem";
|
|
16
|
+
import E from "@mui/material/ListItemButton";
|
|
17
|
+
import R from "@mui/material/ListItemText";
|
|
18
|
+
var re = k(({ category: o, parentBudget: g }) => {
|
|
19
|
+
const { budgets: r, common: u } = I(), { setExpandedGuid: b, setOnSelect: h } = L(), { addBudget: y } = v(), [C, n] = t.useState(!1), [_, a] = t.useState(!1), [i, l] = t.useState(""), [d, c] = t.useState(void 0);
|
|
20
|
+
t.useEffect(() => {
|
|
21
|
+
h((A) => {
|
|
22
|
+
const s = o.subCategories.find((B) => B.guid === A);
|
|
23
|
+
s && (c(s), l(`${s.currentAmount === 0 ? "" : s.currentAmount}`), a(!0));
|
|
25
24
|
});
|
|
26
|
-
}, [
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
},
|
|
30
|
-
|
|
25
|
+
}, []);
|
|
26
|
+
const x = () => {
|
|
27
|
+
b(o.guid), n(!0);
|
|
28
|
+
}, S = async () => {
|
|
29
|
+
d && Number(i) > 0 && (await y(d, Number(i), g.guid), a(!1), n(!1), c(void 0));
|
|
31
30
|
};
|
|
32
|
-
return /* @__PURE__ */
|
|
33
|
-
/* @__PURE__ */ e(
|
|
31
|
+
return /* @__PURE__ */ m(G, { children: [
|
|
32
|
+
/* @__PURE__ */ e(z, {
|
|
34
33
|
disableGutters: !0,
|
|
35
34
|
disablePadding: !0,
|
|
36
35
|
sx: { bgcolor: "background.paper" },
|
|
37
|
-
children: /* @__PURE__ */ e(
|
|
38
|
-
onClick:
|
|
39
|
-
children: /* @__PURE__ */ e(
|
|
36
|
+
children: /* @__PURE__ */ e(E, {
|
|
37
|
+
onClick: x,
|
|
38
|
+
children: /* @__PURE__ */ e(R, { children: /* @__PURE__ */ m(p, {
|
|
40
39
|
alignItems: "center",
|
|
41
40
|
direction: "row",
|
|
42
41
|
justifyContent: "space-between",
|
|
43
|
-
children: [/* @__PURE__ */
|
|
42
|
+
children: [/* @__PURE__ */ m(p, {
|
|
44
43
|
alignItems: "center",
|
|
45
44
|
direction: "row",
|
|
46
45
|
gap: 8,
|
|
47
|
-
children: [/* @__PURE__ */ e(
|
|
46
|
+
children: [/* @__PURE__ */ e(f, {
|
|
48
47
|
fill: !0,
|
|
49
48
|
name: "add_box",
|
|
50
49
|
size: 24,
|
|
51
|
-
sx: { color: "primary.
|
|
52
|
-
}), /* @__PURE__ */ e(
|
|
50
|
+
sx: { color: "primary.light" }
|
|
51
|
+
}), /* @__PURE__ */ e(D, {
|
|
53
52
|
bold: !0,
|
|
54
|
-
sx: { color: "primary.
|
|
53
|
+
sx: { color: "primary.light" },
|
|
55
54
|
variant: "body1",
|
|
56
|
-
children:
|
|
55
|
+
children: r.add_sub_budget_button
|
|
57
56
|
})]
|
|
58
|
-
}), /* @__PURE__ */ e(
|
|
57
|
+
}), /* @__PURE__ */ e(f, {
|
|
59
58
|
name: "chevron_right",
|
|
60
59
|
size: 24,
|
|
61
|
-
sx: { color: "primary.
|
|
60
|
+
sx: { color: "primary.light" }
|
|
62
61
|
})]
|
|
63
62
|
}) })
|
|
64
63
|
})
|
|
65
64
|
}),
|
|
66
|
-
/* @__PURE__ */ e(
|
|
67
|
-
/* @__PURE__ */ e(
|
|
68
|
-
ariaLabelClose:
|
|
69
|
-
isOpen:
|
|
70
|
-
onClose: () =>
|
|
71
|
-
title:
|
|
72
|
-
children: /* @__PURE__ */ e(
|
|
73
|
-
category:
|
|
74
|
-
subCategories:
|
|
65
|
+
/* @__PURE__ */ e(P, {}),
|
|
66
|
+
/* @__PURE__ */ e(w, {
|
|
67
|
+
ariaLabelClose: u.close_aria,
|
|
68
|
+
isOpen: C,
|
|
69
|
+
onClose: () => n(!1),
|
|
70
|
+
title: r.add_sub_budget_title,
|
|
71
|
+
children: /* @__PURE__ */ e(T, { children: /* @__PURE__ */ e(N, {
|
|
72
|
+
category: o,
|
|
73
|
+
subCategories: o.subCategories
|
|
75
74
|
}) })
|
|
76
75
|
}),
|
|
77
|
-
/* @__PURE__ */ e(
|
|
76
|
+
/* @__PURE__ */ e(O, {
|
|
78
77
|
copy: {
|
|
79
|
-
close_aria:
|
|
80
|
-
title:
|
|
78
|
+
close_aria: u.close_aria,
|
|
79
|
+
title: r.add_title
|
|
81
80
|
},
|
|
82
|
-
disablePrimaryButton: Number(
|
|
83
|
-
isOpen:
|
|
84
|
-
onClose: () =>
|
|
85
|
-
onPrimaryAction:
|
|
86
|
-
primaryText:
|
|
87
|
-
children: /* @__PURE__ */ e(
|
|
88
|
-
amount:
|
|
89
|
-
categoryName:
|
|
90
|
-
onAmountChanged:
|
|
81
|
+
disablePrimaryButton: Number(i) <= 0,
|
|
82
|
+
isOpen: _,
|
|
83
|
+
onClose: () => a(!1),
|
|
84
|
+
onPrimaryAction: S,
|
|
85
|
+
primaryText: r.add_save_button,
|
|
86
|
+
children: /* @__PURE__ */ e(j, {
|
|
87
|
+
amount: i,
|
|
88
|
+
categoryName: d?.name || "",
|
|
89
|
+
onAmountChanged: l
|
|
91
90
|
})
|
|
92
91
|
})
|
|
93
92
|
] });
|
|
94
93
|
});
|
|
95
94
|
export {
|
|
96
|
-
|
|
95
|
+
re as AddSubBudget
|
|
97
96
|
};
|
|
98
97
|
|
|
99
98
|
//# sourceMappingURL=AddSubBudget.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddSubBudget.es.js","names":[],"sources":["../../../../src/budgets/components/budgetdetails/AddSubBudget.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\n\nimport { Icon, Text } from '@mxenabled/mxui'\n\nimport {
|
|
1
|
+
{"version":3,"file":"AddSubBudget.es.js","names":[],"sources":["../../../../src/budgets/components/budgetdetails/AddSubBudget.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport ListItem from '@mui/material/ListItem'\nimport ListItemButton from '@mui/material/ListItemButton'\nimport ListItemText from '@mui/material/ListItemText'\nimport Stack from '@mui/material/Stack'\n\nimport { Icon, Text } from '@mxenabled/mxui'\n\nimport { Dialog, Drawer, useBudgetsStore, useGlobalCopyStore } from '../../../common'\nimport { type DetailedBudget, type DetailedCategory } from '../../../core'\nimport { CategoryRow, useCategoryUiStore } from '../../../categories'\nimport { BudgetAmount } from '../shared/BudgetAmount'\n\ninterface AddSubBudgetProps {\n category: DetailedCategory\n parentBudget: DetailedBudget\n}\n\nexport const AddSubBudget: React.FC<AddSubBudgetProps> = observer(({ category, parentBudget }) => {\n const { budgets: copy, common: commonCopy } = useGlobalCopyStore()\n const { setExpandedGuid, setOnSelect } = useCategoryUiStore()\n const { addBudget } = useBudgetsStore()\n\n const [isOpen, setIsOpen] = React.useState(false)\n const [isAddBudgetOpen, setIsAddBudgetOpen] = React.useState(false)\n const [amount, setAmount] = React.useState('')\n const [subCategory, setSubCategory] = React.useState<DetailedCategory | undefined>(undefined)\n\n React.useEffect(() => {\n setOnSelect((guid: string) => {\n const subCategory = category.subCategories.find((sc) => sc.guid === guid)\n if (subCategory) {\n setSubCategory(subCategory)\n setAmount(`${subCategory.currentAmount === 0 ? '' : subCategory.currentAmount}`)\n setIsAddBudgetOpen(true)\n }\n })\n }, [])\n\n const handleOpen = () => {\n setExpandedGuid(category.guid)\n setIsOpen(true)\n }\n\n const handleAddSubBudget = async () => {\n if (subCategory && Number(amount) > 0) {\n await addBudget(subCategory, Number(amount), parentBudget.guid)\n setIsAddBudgetOpen(false)\n setIsOpen(false)\n setSubCategory(undefined)\n }\n }\n\n return (\n <Box>\n <ListItem disableGutters={true} disablePadding={true} sx={{ bgcolor: 'background.paper' }}>\n <ListItemButton onClick={handleOpen}>\n <ListItemText>\n <Stack alignItems=\"center\" direction=\"row\" justifyContent=\"space-between\">\n <Stack alignItems=\"center\" direction=\"row\" gap={8}>\n <Icon fill={true} name=\"add_box\" size={24} sx={{ color: 'primary.light' }} />\n <Text bold={true} sx={{ color: 'primary.light' }} variant=\"body1\">\n {copy.add_sub_budget_button}\n </Text>\n </Stack>\n <Icon name=\"chevron_right\" size={24} sx={{ color: 'primary.light' }} />\n </Stack>\n </ListItemText>\n </ListItemButton>\n </ListItem>\n <Divider />\n\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={isOpen}\n onClose={() => setIsOpen(false)}\n title={copy.add_sub_budget_title}\n >\n <List>\n <CategoryRow category={category} subCategories={category.subCategories} />\n </List>\n </Drawer>\n\n <Dialog\n copy={{ close_aria: commonCopy.close_aria, title: copy.add_title }}\n disablePrimaryButton={Number(amount) <= 0}\n isOpen={isAddBudgetOpen}\n onClose={() => setIsAddBudgetOpen(false)}\n onPrimaryAction={handleAddSubBudget}\n primaryText={copy.add_save_button}\n >\n <BudgetAmount\n amount={amount}\n categoryName={subCategory?.name || ''}\n onAmountChanged={setAmount}\n />\n </Dialog>\n </Box>\n )\n})\n"],"mappings":"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"}
|
|
@@ -1,86 +1,85 @@
|
|
|
1
1
|
import { buildDynamicCopy as D } from "../../../core/utils/Localization.es.js";
|
|
2
2
|
import { useBudgetsStore as v, useGlobalCopyStore as O, useTransactionStore as T } from "../../../common/context/hooks.es.js";
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import { BudgetAmount as
|
|
7
|
-
import { Header as
|
|
8
|
-
import { SubBudgetZeroState as
|
|
9
|
-
import { SubBudgetRow as
|
|
10
|
-
import { AddSubBudget as
|
|
3
|
+
import f from "../../../common/components/dialog/Dialog.es.js";
|
|
4
|
+
import w from "../../../common/components/drawer/Drawer.es.js";
|
|
5
|
+
import F from "../../../transactions/components/shared/TransactionList.es.js";
|
|
6
|
+
import { BudgetAmount as L } from "../shared/BudgetAmount.es.js";
|
|
7
|
+
import { Header as P } from "./Header.es.js";
|
|
8
|
+
import { SubBudgetZeroState as E } from "../budgetlist/SubBudgetZeroState.es.js";
|
|
9
|
+
import { SubBudgetRow as N } from "../budgetlist/SubBudgetRow.es.js";
|
|
10
|
+
import { AddSubBudget as j } from "./AddSubBudget.es.js";
|
|
11
11
|
import i from "react";
|
|
12
|
-
import { observer as
|
|
12
|
+
import { observer as k } from "mobx-react-lite";
|
|
13
13
|
import I from "@mui/material/Stack";
|
|
14
14
|
import { Text as R } from "@mxenabled/mxui";
|
|
15
|
-
import { jsx as t, jsxs as
|
|
15
|
+
import { jsx as t, jsxs as a } from "react/jsx-runtime";
|
|
16
16
|
import $ from "@mui/material/Divider";
|
|
17
17
|
import G from "@mui/material/List";
|
|
18
|
-
var ie =
|
|
19
|
-
const { category: _, subBudgets:
|
|
18
|
+
var ie = k(({ budget: n }) => {
|
|
19
|
+
const { category: _, subBudgets: m } = n, { budgets: o, common: s } = O(), { deleteBudget: b, selectedSubBudget: e, setSelectedSubBudget: h, updateBudget: S } = v(), { filter: c, setFilter: u } = T(), [B, p] = i.useState(!1), [C, d] = i.useState(!1), [l, g] = i.useState("");
|
|
20
20
|
i.useEffect(() => {
|
|
21
|
-
e && (g(`${e.amount}`),
|
|
22
|
-
...
|
|
21
|
+
e && (g(`${e.amount}`), u({
|
|
22
|
+
...c,
|
|
23
23
|
custom: (r) => r.category_guid === e.category_guid
|
|
24
24
|
}));
|
|
25
25
|
}, [e]);
|
|
26
26
|
const x = async () => {
|
|
27
|
-
e &&
|
|
27
|
+
e && await S({
|
|
28
28
|
...e,
|
|
29
|
-
amount: Number(
|
|
30
|
-
})
|
|
29
|
+
amount: Number(l)
|
|
30
|
+
});
|
|
31
31
|
}, A = async () => {
|
|
32
|
-
e && await b(e.guid),
|
|
33
|
-
},
|
|
34
|
-
|
|
35
|
-
...
|
|
32
|
+
e && await b(e.guid), d(!1), y();
|
|
33
|
+
}, y = () => {
|
|
34
|
+
u({
|
|
35
|
+
...c,
|
|
36
36
|
custom: (r) => r.category_guid === n.category_guid || r.top_level_category_guid === n.category_guid
|
|
37
37
|
}), h(void 0);
|
|
38
38
|
};
|
|
39
|
-
return /* @__PURE__ */
|
|
40
|
-
/* @__PURE__ */
|
|
39
|
+
return /* @__PURE__ */ a(i.Fragment, { children: [
|
|
40
|
+
/* @__PURE__ */ a(G, {
|
|
41
41
|
sx: { bgcolor: "background.paper" },
|
|
42
|
-
children: [
|
|
42
|
+
children: [m.length === 0 ? /* @__PURE__ */ t(E, {}) : m.map((r) => /* @__PURE__ */ a(i.Fragment, { children: [/* @__PURE__ */ t(N, { budget: r }), /* @__PURE__ */ t($, {})] }, r.guid)), /* @__PURE__ */ t(j, {
|
|
43
43
|
category: _,
|
|
44
44
|
parentBudget: n
|
|
45
45
|
})]
|
|
46
46
|
}),
|
|
47
|
-
/* @__PURE__ */ t(
|
|
48
|
-
ariaLabelClose:
|
|
47
|
+
/* @__PURE__ */ t(w, {
|
|
48
|
+
ariaLabelClose: s.close_aria,
|
|
49
49
|
isOpen: !!e,
|
|
50
|
-
onClose:
|
|
51
|
-
onPrimaryAction: () =>
|
|
52
|
-
onSecondaryAction: () =>
|
|
50
|
+
onClose: y,
|
|
51
|
+
onPrimaryAction: () => p(!0),
|
|
52
|
+
onSecondaryAction: () => d(!0),
|
|
53
53
|
primaryText: o.details_edit_button,
|
|
54
54
|
secondaryText: o.details_delete_button,
|
|
55
55
|
title: o.details_title,
|
|
56
|
-
children: e && /* @__PURE__ */
|
|
56
|
+
children: e && /* @__PURE__ */ a(I, {
|
|
57
57
|
gap: 24,
|
|
58
|
-
children: [/* @__PURE__ */ t(
|
|
58
|
+
children: [/* @__PURE__ */ t(P, { budget: e }), /* @__PURE__ */ t(F, { height: "100%" })]
|
|
59
59
|
})
|
|
60
60
|
}),
|
|
61
|
-
e && /* @__PURE__ */
|
|
61
|
+
e && /* @__PURE__ */ a(i.Fragment, { children: [/* @__PURE__ */ t(f, {
|
|
62
62
|
copy: {
|
|
63
|
-
close_aria:
|
|
64
|
-
title: o.
|
|
63
|
+
close_aria: s.close_aria,
|
|
64
|
+
title: o.details_edit_title
|
|
65
65
|
},
|
|
66
|
-
disablePrimaryButton:
|
|
66
|
+
disablePrimaryButton: Number(l) <= 0,
|
|
67
67
|
isOpen: B,
|
|
68
|
-
onClose: () =>
|
|
68
|
+
onClose: () => p(!1),
|
|
69
69
|
onPrimaryAction: x,
|
|
70
70
|
primaryText: o.edit_save_button,
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
amount: a,
|
|
71
|
+
children: /* @__PURE__ */ t(L, {
|
|
72
|
+
amount: l,
|
|
74
73
|
categoryName: e.category.name,
|
|
75
74
|
onAmountChanged: g
|
|
76
75
|
})
|
|
77
|
-
}), /* @__PURE__ */ t(
|
|
76
|
+
}), /* @__PURE__ */ t(f, {
|
|
78
77
|
copy: {
|
|
79
|
-
close_aria:
|
|
78
|
+
close_aria: s.close_aria,
|
|
80
79
|
title: o.delete_title
|
|
81
80
|
},
|
|
82
81
|
isOpen: C,
|
|
83
|
-
onClose: () =>
|
|
82
|
+
onClose: () => d(!1),
|
|
84
83
|
onPrimaryAction: A,
|
|
85
84
|
primaryColor: "error",
|
|
86
85
|
primaryText: "Delete",
|