@mx-cartographer/experiences 9.4.53 → 9.4.55
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 +10 -0
- package/dist/budgets/components/BudgetDetailsDrawer.es.js +14 -14
- package/dist/budgets/components/BudgetDetailsDrawer.es.js.map +1 -1
- package/dist/budgets/components/budgetdetails/SubBudgetList.es.js +1 -1
- package/dist/budgets/components/budgetdetails/SubBudgetList.es.js.map +1 -1
- package/dist/cashflow/CashflowOnboarding.es.js +20 -20
- package/dist/cashflow/CashflowOnboarding.es.js.map +1 -1
- package/dist/cashflow/components/onboarding/StepOne.es.js +5 -5
- package/dist/cashflow/components/onboarding/StepOne.es.js.map +1 -1
- package/dist/common/components/calendar/Calendar.d.ts +1 -0
- package/dist/common/components/calendar/Calendar.es.js.map +1 -1
- package/dist/common/components/drawer/Drawer.es.js +9 -9
- package/dist/common/components/drawer/Drawer.es.js.map +1 -1
- package/dist/common/components/drawer/Footer.es.js +6 -6
- package/dist/common/components/drawer/Footer.es.js.map +1 -1
- package/dist/finstrong/components/ManageDOB.es.js +16 -16
- package/dist/goals/components/actions/BirthdayAction.es.js +11 -11
- package/dist/recurringtransactions/components/PaymentSchedule.es.js +11 -11
- package/dist/settings/components/profile/ProfileTab.es.js +28 -28
- package/dist/settings/components/transactionrules/actions/DeleteRuleAction.es.js +7 -7
- package/dist/settings/components/transactionrules/actions/DeleteRuleAction.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiondetails/actions/DateAction.es.js +59 -53
- package/dist/transactions/components/shared/transactiondetails/actions/DateAction.es.js.map +1 -1
- package/dist/transactions/components/shared/transactiondetails/actions/ExcludeAction.es.js +0 -1
- package/dist/transactions/components/shared/transactiondetails/actions/ExcludeAction.es.js.map +1 -1
- package/dist/transactions/utils/Filters.es.js +13 -6
- package/dist/transactions/utils/Filters.es.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
## [9.4.55] - 10-05-2026
|
|
2
|
+
|
|
3
|
+
- **FIXED** - Color contrast in the Transaction Details calendar and Cancel buttons MEW-4123
|
|
4
|
+
- **CHANGED** - Secondary buttons next to a main button use the text style
|
|
5
|
+
- **CHANGED** - Bumped `@mxenabled/mxui` to `^2.11.1`
|
|
6
|
+
|
|
7
|
+
## [9.4.54] - 10-05-2026
|
|
8
|
+
|
|
9
|
+
- **FIXED** - Searching in the Add Expense drawer in Recurring Transactions no longer crashes when an expense has no description MEW-3671
|
|
10
|
+
|
|
1
11
|
## [9.4.53] - 10-02-2026
|
|
2
12
|
|
|
3
13
|
- **FIXED** - Recalculated budget amounts now use the three-month spending average instead of varying by browser history MEW-4013
|
|
@@ -9,13 +9,13 @@ import { SubBudgetAmounts as q } from "./budgetdetails/SubBudgetAmounts.es.js";
|
|
|
9
9
|
import r from "react";
|
|
10
10
|
import { observer as J } from "mobx-react-lite";
|
|
11
11
|
import { Text as K } from "@mxenabled/mxui";
|
|
12
|
-
import { jsx as a, jsxs as
|
|
12
|
+
import { jsx as a, jsxs as h } from "react/jsx-runtime";
|
|
13
13
|
import Q from "@mui/material/Alert";
|
|
14
14
|
import V from "@mui/material/Snackbar";
|
|
15
15
|
var D = (d) => Object.fromEntries((d?.subBudgets ?? []).map((t) => [t.guid, `${t.amount}`])), ce = J(() => {
|
|
16
|
-
const { selectedAccountGuids: d } = U(), { budgets: t, common: m } = R(), { alert: l, dateRange: O, deleteBudget: T, selectedBudget: e, selectedSubBudget: w, setAlert: c, setSelectedBudget: N, updateBudget:
|
|
16
|
+
const { selectedAccountGuids: d } = U(), { budgets: t, common: m } = R(), { alert: l, dateRange: O, deleteBudget: T, selectedBudget: e, selectedSubBudget: w, setAlert: c, setSelectedBudget: N, updateBudget: B } = F(), { setFilter: E } = z(), [P, S] = r.useState(!1), [$, g] = r.useState(!1), [I, p] = r.useState(!1), [n, y] = r.useState(""), [_, b] = r.useState({});
|
|
17
17
|
r.useEffect(() => {
|
|
18
|
-
e && !w && (
|
|
18
|
+
e && !w && (y(`${e.amount}`), b(D(e)), S(!0), E({
|
|
19
19
|
accounts: d,
|
|
20
20
|
dateRange: O,
|
|
21
21
|
custom: (o) => o.category_guid === e.category_guid || o.top_level_category_guid === e.category_guid,
|
|
@@ -27,12 +27,12 @@ var D = (d) => Object.fromEntries((d?.subBudgets ?? []).map((t) => [t.guid, `${t
|
|
|
27
27
|
let o = !0;
|
|
28
28
|
e.subBudgets.length > 0 ? o = (await Promise.all(e.subBudgets.map((s) => {
|
|
29
29
|
const i = Number(_[s.guid] ?? s.amount);
|
|
30
|
-
return
|
|
30
|
+
return B({
|
|
31
31
|
...s,
|
|
32
32
|
amount: i,
|
|
33
33
|
percentage: i ? s.category.currentAmount / i * 100 : 0
|
|
34
34
|
});
|
|
35
|
-
}))).every(Boolean) : o = await
|
|
35
|
+
}))).every(Boolean) : o = await B({
|
|
36
36
|
...e,
|
|
37
37
|
amount: Number(n),
|
|
38
38
|
percentage: Number(n) ? e.category.totalAmount / Number(n) * 100 : 0
|
|
@@ -47,7 +47,7 @@ var D = (d) => Object.fromEntries((d?.subBudgets ?? []).map((t) => [t.guid, `${t
|
|
|
47
47
|
}, G = async () => {
|
|
48
48
|
if (e) {
|
|
49
49
|
const o = await T(e.guid);
|
|
50
|
-
|
|
50
|
+
p(!1), c(o ? {
|
|
51
51
|
msg: u(t.alert_budget_deleted, e.category.name),
|
|
52
52
|
severity: "success"
|
|
53
53
|
} : {
|
|
@@ -60,17 +60,17 @@ var D = (d) => Object.fromEntries((d?.subBudgets ?? []).map((t) => [t.guid, `${t
|
|
|
60
60
|
N(void 0);
|
|
61
61
|
}, 250);
|
|
62
62
|
}, v = () => {
|
|
63
|
-
g(!1),
|
|
63
|
+
g(!1), y(`${e?.amount}`), b(D(e));
|
|
64
64
|
};
|
|
65
65
|
if (!e) return;
|
|
66
66
|
const f = e.subBudgets.length > 0, k = f ? e.subBudgets.some((o) => x(_[o.guid] ?? `${o.amount}`)) : x(n);
|
|
67
|
-
return /* @__PURE__ */
|
|
68
|
-
/* @__PURE__ */
|
|
67
|
+
return /* @__PURE__ */ h(r.Fragment, { children: [
|
|
68
|
+
/* @__PURE__ */ h(H, {
|
|
69
69
|
ariaLabelClose: m.close_aria,
|
|
70
70
|
isOpen: P,
|
|
71
71
|
onClose: A,
|
|
72
72
|
onPrimaryAction: () => g(!0),
|
|
73
|
-
onSecondaryAction: () =>
|
|
73
|
+
onSecondaryAction: () => p(!0),
|
|
74
74
|
primaryText: t.details_edit_button,
|
|
75
75
|
secondaryColor: "error",
|
|
76
76
|
secondaryText: t.details_delete_button,
|
|
@@ -93,7 +93,7 @@ var D = (d) => Object.fromEntries((d?.subBudgets ?? []).map((t) => [t.guid, `${t
|
|
|
93
93
|
})
|
|
94
94
|
})]
|
|
95
95
|
}),
|
|
96
|
-
/* @__PURE__ */
|
|
96
|
+
/* @__PURE__ */ h(C, {
|
|
97
97
|
copy: {
|
|
98
98
|
close_aria: m.close_aria,
|
|
99
99
|
title: t.details_edit_title
|
|
@@ -108,7 +108,7 @@ var D = (d) => Object.fromEntries((d?.subBudgets ?? []).map((t) => [t.guid, `${t
|
|
|
108
108
|
children: [!f && /* @__PURE__ */ a(L, {
|
|
109
109
|
amount: n,
|
|
110
110
|
categoryName: e.category.name,
|
|
111
|
-
onAmountChanged:
|
|
111
|
+
onAmountChanged: y
|
|
112
112
|
}), f && /* @__PURE__ */ a(q, {
|
|
113
113
|
categoryName: e.category.name,
|
|
114
114
|
onSubBudgetAmountChanged: (o, s) => b((i) => ({
|
|
@@ -125,11 +125,11 @@ var D = (d) => Object.fromEntries((d?.subBudgets ?? []).map((t) => [t.guid, `${t
|
|
|
125
125
|
title: t.delete_title
|
|
126
126
|
},
|
|
127
127
|
isOpen: I,
|
|
128
|
-
onClose: () =>
|
|
128
|
+
onClose: () => p(!1),
|
|
129
129
|
onPrimaryAction: G,
|
|
130
130
|
primaryColor: "error",
|
|
131
131
|
primaryText: t.details_delete_button,
|
|
132
|
-
secondaryColor: "
|
|
132
|
+
secondaryColor: "inherit",
|
|
133
133
|
children: /* @__PURE__ */ a(K, {
|
|
134
134
|
variant: "subtitle1",
|
|
135
135
|
children: u(t.delete_description, e.category.name)
|
|
@@ -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 DetailedBudget, type Transaction } from '../../core'\n\nimport { BudgetDetails } from './budgetdetails/BudgetDetails'\nimport { BudgetAmount } from './shared/BudgetAmount'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\nimport { isInvalidAmount } from '../../core/utils/BudgetUtil'\nimport { SubBudgetAmounts } from './budgetdetails/SubBudgetAmounts'\n\nconst seedSubAmounts = (b?: DetailedBudget) =>\n Object.fromEntries((b?.subBudgets ?? []).map((sb) => [sb.guid, `${sb.amount}`]))\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 setSubBudgetAmounts(seedSubAmounts(selectedBudget))\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 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: newAmount ? (subBudget.category.currentAmount / newAmount) * 100 : 0,\n } as Budget)\n }),\n )\n allSucceeded = results.every(Boolean)\n } else {\n const result = await updateBudget({\n ...selectedBudget,\n amount: Number(amount),\n percentage: Number(amount)\n ? (selectedBudget.category.totalAmount / Number(amount)) * 100\n : 0,\n } as Budget)\n allSucceeded = result\n }\n\n setAlert(\n allSucceeded\n ? {\n msg: buildDynamicCopy(\n copy.alert_budget_updated,\n selectedBudget.category.name,\n ) as string,\n severity: 'success',\n }\n : {\n msg: buildDynamicCopy(\n copy.error_alert_edit_merchant_budget,\n selectedBudget.category.name,\n ) as string,\n severity: 'error',\n },\n )\n setIsEditOpen(false)\n }\n }\n\n const handleDeleteBudget = async () => {\n if (selectedBudget) {\n const succeeded = await deleteBudget(selectedBudget.guid)\n setIsDeleteOpen(false)\n setAlert(\n succeeded\n ? {\n msg: buildDynamicCopy(\n copy.alert_budget_deleted,\n selectedBudget.category.name,\n ) as string,\n severity: 'success',\n }\n : {\n msg: buildDynamicCopy(\n copy.error_alert_delete_merchant_budget,\n selectedBudget.category.name,\n ) as string,\n severity: 'error',\n },\n )\n if (succeeded) {\n handleClose()\n }\n }\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 setSubBudgetAmounts(seedSubAmounts(selectedBudget))\n }\n\n if (!selectedBudget) {\n return undefined\n }\n\n const hasSubBudgets = selectedBudget.subBudgets.length > 0\n const disablePrimaryButton = hasSubBudgets\n ? selectedBudget.subBudgets.some((sb) =>\n isInvalidAmount(subBudgetAmounts[sb.guid] ?? `${sb.amount}`),\n )\n : isInvalidAmount(amount)\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(null)}\n open={Boolean(alert)}\n >\n <Alert\n closeText=\"\"\n onClose={() => setAlert(null)}\n role={alert?.severity === 'error' ? 'alert' : undefined}\n severity={alert?.severity ?? 'success'}\n variant=\"filled\"\n >\n {alert?.msg}\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-of-type': {\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 categoryName={selectedBudget.category.name}\n onSubBudgetAmountChanged={(guid, v) =>\n setSubBudgetAmounts((p) => ({ ...p, [guid]: v }))\n }\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 DetailedBudget, type Transaction } from '../../core'\n\nimport { BudgetDetails } from './budgetdetails/BudgetDetails'\nimport { BudgetAmount } from './shared/BudgetAmount'\nimport { buildDynamicCopy } from '../../core/utils/Localization'\nimport { isInvalidAmount } from '../../core/utils/BudgetUtil'\nimport { SubBudgetAmounts } from './budgetdetails/SubBudgetAmounts'\n\nconst seedSubAmounts = (b?: DetailedBudget) =>\n Object.fromEntries((b?.subBudgets ?? []).map((sb) => [sb.guid, `${sb.amount}`]))\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 setSubBudgetAmounts(seedSubAmounts(selectedBudget))\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 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: newAmount ? (subBudget.category.currentAmount / newAmount) * 100 : 0,\n } as Budget)\n }),\n )\n allSucceeded = results.every(Boolean)\n } else {\n const result = await updateBudget({\n ...selectedBudget,\n amount: Number(amount),\n percentage: Number(amount)\n ? (selectedBudget.category.totalAmount / Number(amount)) * 100\n : 0,\n } as Budget)\n allSucceeded = result\n }\n\n setAlert(\n allSucceeded\n ? {\n msg: buildDynamicCopy(\n copy.alert_budget_updated,\n selectedBudget.category.name,\n ) as string,\n severity: 'success',\n }\n : {\n msg: buildDynamicCopy(\n copy.error_alert_edit_merchant_budget,\n selectedBudget.category.name,\n ) as string,\n severity: 'error',\n },\n )\n setIsEditOpen(false)\n }\n }\n\n const handleDeleteBudget = async () => {\n if (selectedBudget) {\n const succeeded = await deleteBudget(selectedBudget.guid)\n setIsDeleteOpen(false)\n setAlert(\n succeeded\n ? {\n msg: buildDynamicCopy(\n copy.alert_budget_deleted,\n selectedBudget.category.name,\n ) as string,\n severity: 'success',\n }\n : {\n msg: buildDynamicCopy(\n copy.error_alert_delete_merchant_budget,\n selectedBudget.category.name,\n ) as string,\n severity: 'error',\n },\n )\n if (succeeded) {\n handleClose()\n }\n }\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 setSubBudgetAmounts(seedSubAmounts(selectedBudget))\n }\n\n if (!selectedBudget) {\n return undefined\n }\n\n const hasSubBudgets = selectedBudget.subBudgets.length > 0\n const disablePrimaryButton = hasSubBudgets\n ? selectedBudget.subBudgets.some((sb) =>\n isInvalidAmount(subBudgetAmounts[sb.guid] ?? `${sb.amount}`),\n )\n : isInvalidAmount(amount)\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(null)}\n open={Boolean(alert)}\n >\n <Alert\n closeText=\"\"\n onClose={() => setAlert(null)}\n role={alert?.severity === 'error' ? 'alert' : undefined}\n severity={alert?.severity ?? 'success'}\n variant=\"filled\"\n >\n {alert?.msg}\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-of-type': {\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 categoryName={selectedBudget.category.name}\n onSubBudgetAmountChanged={(guid, v) =>\n setSubBudgetAmounts((p) => ({ ...p, [guid]: v }))\n }\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=\"inherit\"\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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"}
|
|
@@ -96,7 +96,7 @@ var ae = I(({ budget: n }) => {
|
|
|
96
96
|
onPrimaryAction: D,
|
|
97
97
|
primaryColor: "error",
|
|
98
98
|
primaryText: "Delete",
|
|
99
|
-
secondaryColor: "
|
|
99
|
+
secondaryColor: "inherit",
|
|
100
100
|
children: /* @__PURE__ */ r($, {
|
|
101
101
|
variant: "subtitle1",
|
|
102
102
|
children: c(o.delete_description, e.category.name)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubBudgetList.es.js","names":[],"sources":["../../../../src/budgets/components/budgetdetails/SubBudgetList.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport {\n Dialog,\n Drawer,\n useBudgetsStore,\n useGlobalCopyStore,\n useTransactionStore,\n} from '../../../common'\nimport { type Budget, type DetailedBudget, type Transaction } from '../../../core'\n\nimport { TransactionList } from '../../../transactions'\n\nimport { SubBudgetZeroState } from '../budgetlist/SubBudgetZeroState'\nimport { SubBudgetRow } from '../budgetlist/SubBudgetRow'\nimport { BudgetAmount } from '../shared/BudgetAmount'\nimport { AddSubBudget } from './AddSubBudget'\nimport { Header } from './Header'\nimport { buildDynamicCopy } from '../../../core/utils/Localization'\n\ninterface SubBudgetListProps {\n budget: DetailedBudget\n}\n\nexport const SubBudgetList: React.FC<SubBudgetListProps> = observer(({ budget }) => {\n const { category, subBudgets } = budget\n const { budgets: copy, common: commonCopy } = useGlobalCopyStore()\n const { deleteBudget, selectedSubBudget, setAlert, setSelectedSubBudget, updateBudget } =\n useBudgetsStore()\n const { filter, setFilter } = useTransactionStore()\n\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 (selectedSubBudget) {\n setAmount(`${selectedSubBudget.amount}`)\n setFilter({\n ...filter,\n custom: (t: Transaction) => t.category_guid === selectedSubBudget.category_guid,\n })\n }\n }, [selectedSubBudget])\n\n const handleUpdateBudget = async () => {\n if (selectedSubBudget) {\n const result = await updateBudget({\n ...selectedSubBudget,\n amount: Number(amount),\n } as Budget)\n setIsEditOpen(false)\n if (!result) {\n setAlert({\n msg: buildDynamicCopy(\n copy.error_alert_edit_merchant_budget,\n selectedSubBudget.category.name,\n ) as string,\n severity: 'error',\n })\n }\n }\n }\n\n const handleDeleteBudget = async () => {\n if (selectedSubBudget) {\n const result = await deleteBudget(selectedSubBudget.guid)\n setIsDeleteOpen(false)\n if (result) {\n handleClose()\n } else {\n setAlert({\n msg: buildDynamicCopy(\n copy.error_alert_delete_merchant_budget,\n selectedSubBudget.category.name,\n ) as string,\n severity: 'error',\n })\n }\n }\n }\n\n const handleClose = () => {\n setFilter({\n ...filter,\n custom: (t: Transaction) =>\n t.category_guid === budget.category_guid ||\n t.top_level_category_guid === budget.category_guid,\n })\n setSelectedSubBudget(undefined)\n }\n\n return (\n <React.Fragment>\n <List sx={{ bgcolor: 'background.paper' }}>\n {subBudgets.length === 0 ? (\n <SubBudgetZeroState />\n ) : (\n subBudgets.map((subBudget) => (\n <React.Fragment key={subBudget.guid}>\n <SubBudgetRow budget={subBudget} />\n <Divider />\n </React.Fragment>\n ))\n )}\n <AddSubBudget category={category} parentBudget={budget} />\n </List>\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={Boolean(selectedSubBudget)}\n onClose={handleClose}\n onPrimaryAction={() => setIsEditOpen(true)}\n onSecondaryAction={() => setIsDeleteOpen(true)}\n primaryText={copy.details_edit_button}\n secondaryText={copy.details_delete_button}\n title={copy.details_title}\n >\n {selectedSubBudget && (\n <Stack gap={24}>\n <Header budget={selectedSubBudget} />\n <TransactionList height=\"100%\" />\n </Stack>\n )}\n </Drawer>\n\n {selectedSubBudget && (\n <React.Fragment>\n <Dialog\n copy={{ close_aria: commonCopy.close_aria, title: copy.details_edit_title_subbudget }}\n disablePrimaryButton={amount === '' || Number(amount) < 0 || isNaN(Number(amount))}\n isOpen={isEditOpen}\n onClose={() => setIsEditOpen(false)}\n onPrimaryAction={handleUpdateBudget}\n primaryText={copy.edit_save_button}\n sx={{\n '& .MuiStack-root:first-of-type': {\n pb: 8,\n },\n }}\n >\n <BudgetAmount\n amount={amount}\n categoryName={selectedSubBudget.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=\"Delete\"\n secondaryColor=\"
|
|
1
|
+
{"version":3,"file":"SubBudgetList.es.js","names":[],"sources":["../../../../src/budgets/components/budgetdetails/SubBudgetList.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport {\n Dialog,\n Drawer,\n useBudgetsStore,\n useGlobalCopyStore,\n useTransactionStore,\n} from '../../../common'\nimport { type Budget, type DetailedBudget, type Transaction } from '../../../core'\n\nimport { TransactionList } from '../../../transactions'\n\nimport { SubBudgetZeroState } from '../budgetlist/SubBudgetZeroState'\nimport { SubBudgetRow } from '../budgetlist/SubBudgetRow'\nimport { BudgetAmount } from '../shared/BudgetAmount'\nimport { AddSubBudget } from './AddSubBudget'\nimport { Header } from './Header'\nimport { buildDynamicCopy } from '../../../core/utils/Localization'\n\ninterface SubBudgetListProps {\n budget: DetailedBudget\n}\n\nexport const SubBudgetList: React.FC<SubBudgetListProps> = observer(({ budget }) => {\n const { category, subBudgets } = budget\n const { budgets: copy, common: commonCopy } = useGlobalCopyStore()\n const { deleteBudget, selectedSubBudget, setAlert, setSelectedSubBudget, updateBudget } =\n useBudgetsStore()\n const { filter, setFilter } = useTransactionStore()\n\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 (selectedSubBudget) {\n setAmount(`${selectedSubBudget.amount}`)\n setFilter({\n ...filter,\n custom: (t: Transaction) => t.category_guid === selectedSubBudget.category_guid,\n })\n }\n }, [selectedSubBudget])\n\n const handleUpdateBudget = async () => {\n if (selectedSubBudget) {\n const result = await updateBudget({\n ...selectedSubBudget,\n amount: Number(amount),\n } as Budget)\n setIsEditOpen(false)\n if (!result) {\n setAlert({\n msg: buildDynamicCopy(\n copy.error_alert_edit_merchant_budget,\n selectedSubBudget.category.name,\n ) as string,\n severity: 'error',\n })\n }\n }\n }\n\n const handleDeleteBudget = async () => {\n if (selectedSubBudget) {\n const result = await deleteBudget(selectedSubBudget.guid)\n setIsDeleteOpen(false)\n if (result) {\n handleClose()\n } else {\n setAlert({\n msg: buildDynamicCopy(\n copy.error_alert_delete_merchant_budget,\n selectedSubBudget.category.name,\n ) as string,\n severity: 'error',\n })\n }\n }\n }\n\n const handleClose = () => {\n setFilter({\n ...filter,\n custom: (t: Transaction) =>\n t.category_guid === budget.category_guid ||\n t.top_level_category_guid === budget.category_guid,\n })\n setSelectedSubBudget(undefined)\n }\n\n return (\n <React.Fragment>\n <List sx={{ bgcolor: 'background.paper' }}>\n {subBudgets.length === 0 ? (\n <SubBudgetZeroState />\n ) : (\n subBudgets.map((subBudget) => (\n <React.Fragment key={subBudget.guid}>\n <SubBudgetRow budget={subBudget} />\n <Divider />\n </React.Fragment>\n ))\n )}\n <AddSubBudget category={category} parentBudget={budget} />\n </List>\n <Drawer\n ariaLabelClose={commonCopy.close_aria}\n isOpen={Boolean(selectedSubBudget)}\n onClose={handleClose}\n onPrimaryAction={() => setIsEditOpen(true)}\n onSecondaryAction={() => setIsDeleteOpen(true)}\n primaryText={copy.details_edit_button}\n secondaryText={copy.details_delete_button}\n title={copy.details_title}\n >\n {selectedSubBudget && (\n <Stack gap={24}>\n <Header budget={selectedSubBudget} />\n <TransactionList height=\"100%\" />\n </Stack>\n )}\n </Drawer>\n\n {selectedSubBudget && (\n <React.Fragment>\n <Dialog\n copy={{ close_aria: commonCopy.close_aria, title: copy.details_edit_title_subbudget }}\n disablePrimaryButton={amount === '' || Number(amount) < 0 || isNaN(Number(amount))}\n isOpen={isEditOpen}\n onClose={() => setIsEditOpen(false)}\n onPrimaryAction={handleUpdateBudget}\n primaryText={copy.edit_save_button}\n sx={{\n '& .MuiStack-root:first-of-type': {\n pb: 8,\n },\n }}\n >\n <BudgetAmount\n amount={amount}\n categoryName={selectedSubBudget.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=\"Delete\"\n secondaryColor=\"inherit\"\n >\n <Text variant=\"subtitle1\">\n {buildDynamicCopy(copy.delete_description, selectedSubBudget.category.name) as string}\n </Text>\n </Dialog>\n </React.Fragment>\n )}\n </React.Fragment>\n )\n})\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useCashflowStore as te, useGlobalCopyStore as
|
|
1
|
+
import { useCashflowStore as te, useGlobalCopyStore as re, useGlobalUiStore as oe, useRecurringTransactionsStore as ne, useTransactionStore as ie, useUserStore as ae } from "../common/context/hooks.es.js";
|
|
2
2
|
import { useScreenSize as ce } from "../common/hooks/useScreenSize.es.js";
|
|
3
3
|
import { Frequency as se, RepeatingType as F } from "../core/types/RepeatingTransaction.es.js";
|
|
4
4
|
import { fromUnixToDayOfWeekAndDate as me } from "../core/utils/DateUtil.es.js";
|
|
@@ -37,34 +37,34 @@ var ve = Te`
|
|
|
37
37
|
transform: rotate(360deg);
|
|
38
38
|
}
|
|
39
39
|
`, Oe = () => {
|
|
40
|
-
const { addRepeatingTransaction: M, repeatingTransactions: q } = ne(), { cashflow: a, common: y } =
|
|
40
|
+
const { addRepeatingTransaction: M, repeatingTransactions: q } = ne(), { cashflow: a, common: y } = re(), { user: N } = ae(), { completeOnboarding: x } = te(), { isDirty: z } = he(), { isMobile: c } = ce(), { isCopyLoaded: B, setDisplayedDate: H } = oe(), { filter: _, setFilter: S, transactions: b } = ie(), P = Ce(), [$, u] = d(!0), [s, j] = m.useState(se.EveryMonth), [E, J] = m.useState(1), [D, K] = m.useState(15), [T, Q] = d(!1), [f, C] = d(1), [o, X] = d([]), [k, g] = d(""), n = m.useMemo(() => b.find((t) => t.guid === k), [k, b]), Y = !!q.filter((t) => t.repeating_transaction_type === F.Income).length, I = async () => {
|
|
41
41
|
C(2), H(De(ke(A(), 90)), A()), S({
|
|
42
42
|
..._,
|
|
43
43
|
custom: O
|
|
44
44
|
}), C(3);
|
|
45
45
|
}, Z = async () => {
|
|
46
|
-
if (!(
|
|
46
|
+
if (!(o.length < 1)) {
|
|
47
47
|
Q(!0);
|
|
48
|
-
for (let t = 0; t <
|
|
49
|
-
const
|
|
50
|
-
account_guid:
|
|
51
|
-
amount:
|
|
48
|
+
for (let t = 0; t < o.length; t++) {
|
|
49
|
+
const r = o[t], w = v(s, U(r.date)), ee = {
|
|
50
|
+
account_guid: r.account_guid,
|
|
51
|
+
amount: r.amount,
|
|
52
52
|
created_by: 0,
|
|
53
|
-
merchant_guid:
|
|
54
|
-
description:
|
|
53
|
+
merchant_guid: r.merchant_guid,
|
|
54
|
+
description: r.feed_description || r.description,
|
|
55
55
|
predicted_occurs_on: we(w, { representation: "date" }),
|
|
56
56
|
recurrence_day: w.getDay(),
|
|
57
57
|
recurrence_type: s,
|
|
58
58
|
repeating_transaction_type: F.Income,
|
|
59
59
|
second_recurrence_day: D,
|
|
60
|
-
transaction_type:
|
|
60
|
+
transaction_type: r.transaction_type,
|
|
61
61
|
user_guid: N.guid
|
|
62
62
|
};
|
|
63
|
-
await M(ee,
|
|
63
|
+
await M(ee, r);
|
|
64
64
|
}
|
|
65
65
|
await x();
|
|
66
66
|
}
|
|
67
|
-
}, V = !n && $ || !n &&
|
|
67
|
+
}, V = !n && $ || !n && o.length < 1;
|
|
68
68
|
return B ? /* @__PURE__ */ i(p, {
|
|
69
69
|
sx: {
|
|
70
70
|
display: "flex",
|
|
@@ -124,13 +124,13 @@ var ve = Te`
|
|
|
124
124
|
mb: 24,
|
|
125
125
|
children: a.add_income_description
|
|
126
126
|
}),
|
|
127
|
-
|
|
127
|
+
o.length > 0 && !n && /* @__PURE__ */ i(G, { children: [/* @__PURE__ */ e(Fe, { children: o.map((t, r) => /* @__PURE__ */ i(m.Fragment, { children: [
|
|
128
128
|
/* @__PURE__ */ e(pe, {
|
|
129
129
|
bgcolor: "background.paper",
|
|
130
130
|
children: me(Ie(t.nextDate || t.date))
|
|
131
131
|
}),
|
|
132
132
|
/* @__PURE__ */ e(le, { transaction: t }),
|
|
133
|
-
|
|
133
|
+
r !== o.length - 1 && /* @__PURE__ */ e(L, {})
|
|
134
134
|
] }, t.guid)) }), /* @__PURE__ */ i(h, {
|
|
135
135
|
alignItems: "center",
|
|
136
136
|
direction: "row",
|
|
@@ -147,7 +147,7 @@ var ve = Te`
|
|
|
147
147
|
bgcolor: "background.paper",
|
|
148
148
|
onSearch: (t) => S({
|
|
149
149
|
..._,
|
|
150
|
-
custom: (
|
|
150
|
+
custom: (r) => t ? ue(r, t) : O(r)
|
|
151
151
|
}),
|
|
152
152
|
onSelected: (t) => {
|
|
153
153
|
g(t), u(!1);
|
|
@@ -175,7 +175,7 @@ var ve = Te`
|
|
|
175
175
|
children: [/* @__PURE__ */ e(l, {
|
|
176
176
|
"aria-disabled": !n,
|
|
177
177
|
onClick: () => {
|
|
178
|
-
const t = [...
|
|
178
|
+
const t = [...o];
|
|
179
179
|
t.push({
|
|
180
180
|
...n,
|
|
181
181
|
nextDate: v(s, U(n.date)),
|
|
@@ -188,17 +188,17 @@ var ve = Te`
|
|
|
188
188
|
onClick: () => {
|
|
189
189
|
g(""), u(!0), I().finally();
|
|
190
190
|
},
|
|
191
|
-
variant: "
|
|
191
|
+
variant: "text",
|
|
192
192
|
children: y.cancel_button
|
|
193
193
|
})]
|
|
194
194
|
})] }),
|
|
195
|
-
|
|
195
|
+
o.length > 0 && !n && /* @__PURE__ */ i(h, {
|
|
196
196
|
direction: "row",
|
|
197
197
|
gap: 16,
|
|
198
198
|
ml: 24,
|
|
199
199
|
mt: 32,
|
|
200
200
|
children: [/* @__PURE__ */ e(l, {
|
|
201
|
-
"aria-disabled":
|
|
201
|
+
"aria-disabled": o.length < 1 || T,
|
|
202
202
|
onClick: Z,
|
|
203
203
|
startIcon: T ? /* @__PURE__ */ e(R, {
|
|
204
204
|
name: "progress_activity",
|
|
@@ -208,7 +208,7 @@ var ve = Te`
|
|
|
208
208
|
children: a.confirm_income_button
|
|
209
209
|
}), /* @__PURE__ */ e(l, {
|
|
210
210
|
onClick: x,
|
|
211
|
-
variant: "
|
|
211
|
+
variant: "text",
|
|
212
212
|
children: a.skip_button
|
|
213
213
|
})]
|
|
214
214
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CashflowOnboarding.es.js","names":[],"sources":["../../src/cashflow/CashflowOnboarding.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { formatISO } from 'date-fns/formatISO'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { getUnixTime } from 'date-fns/getUnixTime'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\nimport { keyframes } from '@mui/material/styles'\nimport { useTheme } from '@mui/material/styles'\n\nimport { H2, Icon, P } from '@mxenabled/mxui'\n\nimport StepOne from './components/onboarding/StepOne'\nimport StepTwo from './components/onboarding/StepTwo'\n\nimport {\n Loader,\n useCashflowStore,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useScreenSize,\n useTransactionStore,\n useUserStore,\n} from '../common'\nimport { type RepeatingTransaction, type Transaction, RepeatingType, Frequency } from '../core'\nimport SubheaderRow from '../common/components/SubheaderRow'\n\nimport { useCashflowUiStore } from './context/hooks'\n\nimport { TransactionRow } from '../transactions'\nimport { incomeFilter, incomeFilterSearch } from '../transactions/utils/Filters'\n\nimport { AddRecurringTransactionDetails } from '../recurringtransactions'\nimport { SelectTransaction } from '../recurringtransactions'\nimport { getNextPaymentDate } from '../core/utils/RecurringTransactionsUtil'\n\nimport { fromUnixToDayOfWeekAndDate } from '../core/utils/DateUtil'\nimport { CASHFLOW_IMAGES } from './constants/CashflowImages'\n\ninterface UpcomingTransactions extends Transaction {\n nextDate: Date | null\n frequency: Frequency\n}\n\nconst spin = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`\n\nconst CashflowOnboarding: React.FC = () => {\n const { addRepeatingTransaction, repeatingTransactions } = useRecurringTransactionsStore()\n const { cashflow: customCopy, common: commonCopy } = useGlobalCopyStore()\n const { user } = useUserStore()\n const { completeOnboarding } = useCashflowStore()\n const { isDirty } = useCashflowUiStore()\n const { isMobile } = useScreenSize()\n const { isCopyLoaded, setDisplayedDate } = useGlobalUiStore()\n const { filter, setFilter, transactions } = useTransactionStore()\n const theme = useTheme()\n\n const [addIncome, setAddIncome] = useState(true)\n const [frequency, setFrequency] = React.useState(Frequency.EveryMonth)\n const [firstDay, setFirstDay] = React.useState(1)\n const [secondDay, setSecondDay] = React.useState(15)\n const [isSubmitting, setIsSubmitting] = useState(false)\n // const [nextDate, setNextDate] = React.useState<Date | null>(null)\n const [step, setStep] = useState(1)\n const [selectedTransactions, setSelectedTransactions] = useState<UpcomingTransactions[] | []>([])\n const [transactionGuid, setTransactionGuid] = useState('')\n\n const transaction = React.useMemo(\n () => transactions.find((t) => t.guid === transactionGuid),\n [transactionGuid, transactions],\n )\n\n const canSubmit = !!repeatingTransactions.filter(\n (r) => r.repeating_transaction_type === RepeatingType.Income,\n ).length\n\n const handleGetTransactions = async () => {\n setStep(2)\n // set transaction date range and filter by income\n setDisplayedDate(\n // Beginning of the month, 90 days before today\n startOfMonth(subDays(startOfToday(), 90)),\n startOfToday(),\n )\n\n setFilter({ ...filter, custom: incomeFilter })\n\n setStep(3)\n }\n\n const handleAddIncome = async () => {\n if (selectedTransactions.length < 1) {\n return\n }\n setIsSubmitting(true)\n\n // Create Repeating Transactions\n for (let i = 0; i < selectedTransactions.length; i++) {\n const upcomingTransaction = selectedTransactions[i]\n\n const nextDate = getNextPaymentDate(frequency, fromUnixTime(upcomingTransaction.date))\n\n const repeatingTransaction = {\n account_guid: upcomingTransaction.account_guid,\n amount: upcomingTransaction.amount,\n created_by: 0, //user\n merchant_guid: upcomingTransaction.merchant_guid,\n description: upcomingTransaction.feed_description || upcomingTransaction.description,\n predicted_occurs_on: formatISO(nextDate, { representation: 'date' }),\n recurrence_day: nextDate.getDay(),\n recurrence_type: frequency,\n repeating_transaction_type: RepeatingType.Income,\n second_recurrence_day: secondDay,\n transaction_type: upcomingTransaction.transaction_type,\n user_guid: user.guid,\n } as RepeatingTransaction\n\n await addRepeatingTransaction(repeatingTransaction, upcomingTransaction)\n }\n await completeOnboarding()\n }\n\n const showSelectIncome =\n (!transaction && addIncome) || (!transaction && selectedTransactions.length < 1)\n\n if (!isCopyLoaded) {\n return <Loader />\n }\n\n return (\n <Box\n sx={{\n display: 'flex',\n alignItems: !isMobile ? 'center' : 'flex-start',\n backgroundColor: theme.palette.background.paper,\n backgroundImage: !isMobile ? `url(${CASHFLOW_IMAGES.CASHFLOW_ONBOARDING})` : null,\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'left 100px',\n backgroundSize: '35%',\n py: 24,\n }}\n >\n {step === 1 && (\n <Box\n sx={{\n ...(isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 }),\n }}\n >\n <StepOne handleNextStep={handleGetTransactions} />\n </Box>\n )}\n {step === 2 && (\n <Box\n sx={{\n ...(isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 }),\n }}\n >\n <StepTwo />\n </Box>\n )}\n {step === 3 && (\n <Box\n sx={{\n ...(isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 }),\n }}\n >\n <H2 pb={12} variant=\"h1\">\n {customCopy.add_income_title}\n </H2>\n <P mb={24}>{customCopy.add_income_description}</P>\n\n {selectedTransactions.length > 0 && !transaction && (\n <>\n <List>\n {selectedTransactions.map((transaction, index) => {\n return (\n <React.Fragment key={transaction.guid}>\n <SubheaderRow bgcolor=\"background.paper\">\n {fromUnixToDayOfWeekAndDate(\n getUnixTime(transaction.nextDate || transaction.date),\n )}\n </SubheaderRow>\n <TransactionRow transaction={transaction} />\n {index !== selectedTransactions.length - 1 && <Divider />}\n </React.Fragment>\n )\n })}\n </List>\n <Stack alignItems=\"center\" direction=\"row\">\n <Divider sx={{ flexGrow: 1 }} />\n <Button\n onClick={() => setAddIncome(true)}\n startIcon={<Icon name=\"add\" size={20} />}\n >\n {customCopy.add_income}\n </Button>\n </Stack>\n </>\n )}\n\n {showSelectIncome && (\n <SelectTransaction\n bgcolor=\"background.paper\"\n onSearch={(searchValue) =>\n setFilter({\n ...filter,\n custom: (transaction: Transaction) =>\n searchValue\n ? incomeFilterSearch(transaction, searchValue)\n : incomeFilter(transaction),\n })\n }\n onSelected={(guid) => {\n setTransactionGuid(guid)\n setAddIncome(false)\n }}\n />\n )}\n\n {!canSubmit && isDirty && (\n <P color=\"error\" mt={16}>\n {customCopy.confirm_error}\n </P>\n )}\n\n {transaction && (\n <>\n <AddRecurringTransactionDetails\n bgcolor=\"background.paper\"\n firstDay={firstDay}\n frequency={frequency}\n onFirstDayChange={setFirstDay}\n onFrequencyChange={setFrequency}\n onSecondDayChange={setSecondDay}\n secondDay={secondDay}\n transaction={transaction}\n />\n <Stack direction=\"row\" gap={16} ml={24} mt={32}>\n <Button\n aria-disabled={!transaction}\n onClick={() => {\n const updatedTransactions = [...selectedTransactions]\n updatedTransactions.push({\n ...transaction,\n nextDate: getNextPaymentDate(frequency, fromUnixTime(transaction.date)),\n frequency,\n })\n\n setSelectedTransactions(updatedTransactions)\n setTransactionGuid('')\n }}\n variant=\"contained\"\n >\n {commonCopy.confirm_button}\n </Button>\n <Button\n onClick={() => {\n setTransactionGuid('')\n setAddIncome(true)\n handleGetTransactions().finally()\n }}\n variant=\"outlined\"\n >\n {commonCopy.cancel_button}\n </Button>\n </Stack>\n </>\n )}\n\n {selectedTransactions.length > 0 && !transaction && (\n <Stack direction=\"row\" gap={16} ml={24} mt={32}>\n <Button\n aria-disabled={selectedTransactions.length < 1 || isSubmitting}\n onClick={handleAddIncome}\n startIcon={\n isSubmitting ? (\n <Icon\n name=\"progress_activity\"\n sx={{\n animation: `${spin} 2s linear infinite`,\n }}\n />\n ) : null\n }\n variant=\"contained\"\n >\n {customCopy.confirm_income_button}\n </Button>\n <Button onClick={completeOnboarding} variant=\"outlined\">\n {customCopy.skip_button}\n </Button>\n </Stack>\n )}\n </Box>\n )}\n </Box>\n )\n}\n\nexport default observer(CashflowOnboarding)\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CashflowOnboarding.es.js","names":[],"sources":["../../src/cashflow/CashflowOnboarding.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { formatISO } from 'date-fns/formatISO'\nimport { fromUnixTime } from 'date-fns/fromUnixTime'\nimport { getUnixTime } from 'date-fns/getUnixTime'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subDays } from 'date-fns/subDays'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Divider from '@mui/material/Divider'\nimport List from '@mui/material/List'\nimport Stack from '@mui/material/Stack'\nimport { keyframes } from '@mui/material/styles'\nimport { useTheme } from '@mui/material/styles'\n\nimport { H2, Icon, P } from '@mxenabled/mxui'\n\nimport StepOne from './components/onboarding/StepOne'\nimport StepTwo from './components/onboarding/StepTwo'\n\nimport {\n Loader,\n useCashflowStore,\n useGlobalCopyStore,\n useGlobalUiStore,\n useRecurringTransactionsStore,\n useScreenSize,\n useTransactionStore,\n useUserStore,\n} from '../common'\nimport { type RepeatingTransaction, type Transaction, RepeatingType, Frequency } from '../core'\nimport SubheaderRow from '../common/components/SubheaderRow'\n\nimport { useCashflowUiStore } from './context/hooks'\n\nimport { TransactionRow } from '../transactions'\nimport { incomeFilter, incomeFilterSearch } from '../transactions/utils/Filters'\n\nimport { AddRecurringTransactionDetails } from '../recurringtransactions'\nimport { SelectTransaction } from '../recurringtransactions'\nimport { getNextPaymentDate } from '../core/utils/RecurringTransactionsUtil'\n\nimport { fromUnixToDayOfWeekAndDate } from '../core/utils/DateUtil'\nimport { CASHFLOW_IMAGES } from './constants/CashflowImages'\n\ninterface UpcomingTransactions extends Transaction {\n nextDate: Date | null\n frequency: Frequency\n}\n\nconst spin = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`\n\nconst CashflowOnboarding: React.FC = () => {\n const { addRepeatingTransaction, repeatingTransactions } = useRecurringTransactionsStore()\n const { cashflow: customCopy, common: commonCopy } = useGlobalCopyStore()\n const { user } = useUserStore()\n const { completeOnboarding } = useCashflowStore()\n const { isDirty } = useCashflowUiStore()\n const { isMobile } = useScreenSize()\n const { isCopyLoaded, setDisplayedDate } = useGlobalUiStore()\n const { filter, setFilter, transactions } = useTransactionStore()\n const theme = useTheme()\n\n const [addIncome, setAddIncome] = useState(true)\n const [frequency, setFrequency] = React.useState(Frequency.EveryMonth)\n const [firstDay, setFirstDay] = React.useState(1)\n const [secondDay, setSecondDay] = React.useState(15)\n const [isSubmitting, setIsSubmitting] = useState(false)\n // const [nextDate, setNextDate] = React.useState<Date | null>(null)\n const [step, setStep] = useState(1)\n const [selectedTransactions, setSelectedTransactions] = useState<UpcomingTransactions[] | []>([])\n const [transactionGuid, setTransactionGuid] = useState('')\n\n const transaction = React.useMemo(\n () => transactions.find((t) => t.guid === transactionGuid),\n [transactionGuid, transactions],\n )\n\n const canSubmit = !!repeatingTransactions.filter(\n (r) => r.repeating_transaction_type === RepeatingType.Income,\n ).length\n\n const handleGetTransactions = async () => {\n setStep(2)\n // set transaction date range and filter by income\n setDisplayedDate(\n // Beginning of the month, 90 days before today\n startOfMonth(subDays(startOfToday(), 90)),\n startOfToday(),\n )\n\n setFilter({ ...filter, custom: incomeFilter })\n\n setStep(3)\n }\n\n const handleAddIncome = async () => {\n if (selectedTransactions.length < 1) {\n return\n }\n setIsSubmitting(true)\n\n // Create Repeating Transactions\n for (let i = 0; i < selectedTransactions.length; i++) {\n const upcomingTransaction = selectedTransactions[i]\n\n const nextDate = getNextPaymentDate(frequency, fromUnixTime(upcomingTransaction.date))\n\n const repeatingTransaction = {\n account_guid: upcomingTransaction.account_guid,\n amount: upcomingTransaction.amount,\n created_by: 0, //user\n merchant_guid: upcomingTransaction.merchant_guid,\n description: upcomingTransaction.feed_description || upcomingTransaction.description,\n predicted_occurs_on: formatISO(nextDate, { representation: 'date' }),\n recurrence_day: nextDate.getDay(),\n recurrence_type: frequency,\n repeating_transaction_type: RepeatingType.Income,\n second_recurrence_day: secondDay,\n transaction_type: upcomingTransaction.transaction_type,\n user_guid: user.guid,\n } as RepeatingTransaction\n\n await addRepeatingTransaction(repeatingTransaction, upcomingTransaction)\n }\n await completeOnboarding()\n }\n\n const showSelectIncome =\n (!transaction && addIncome) || (!transaction && selectedTransactions.length < 1)\n\n if (!isCopyLoaded) {\n return <Loader />\n }\n\n return (\n <Box\n sx={{\n display: 'flex',\n alignItems: !isMobile ? 'center' : 'flex-start',\n backgroundColor: theme.palette.background.paper,\n backgroundImage: !isMobile ? `url(${CASHFLOW_IMAGES.CASHFLOW_ONBOARDING})` : null,\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'left 100px',\n backgroundSize: '35%',\n py: 24,\n }}\n >\n {step === 1 && (\n <Box\n sx={{\n ...(isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 }),\n }}\n >\n <StepOne handleNextStep={handleGetTransactions} />\n </Box>\n )}\n {step === 2 && (\n <Box\n sx={{\n ...(isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 }),\n }}\n >\n <StepTwo />\n </Box>\n )}\n {step === 3 && (\n <Box\n sx={{\n ...(isMobile\n ? { display: 'flex', flexDirection: 'column', maxWidth: '100%', padding: '0 16px' }\n : { maxWidth: 590, ml: '40%', mr: 90 }),\n }}\n >\n <H2 pb={12} variant=\"h1\">\n {customCopy.add_income_title}\n </H2>\n <P mb={24}>{customCopy.add_income_description}</P>\n\n {selectedTransactions.length > 0 && !transaction && (\n <>\n <List>\n {selectedTransactions.map((transaction, index) => {\n return (\n <React.Fragment key={transaction.guid}>\n <SubheaderRow bgcolor=\"background.paper\">\n {fromUnixToDayOfWeekAndDate(\n getUnixTime(transaction.nextDate || transaction.date),\n )}\n </SubheaderRow>\n <TransactionRow transaction={transaction} />\n {index !== selectedTransactions.length - 1 && <Divider />}\n </React.Fragment>\n )\n })}\n </List>\n <Stack alignItems=\"center\" direction=\"row\">\n <Divider sx={{ flexGrow: 1 }} />\n <Button\n onClick={() => setAddIncome(true)}\n startIcon={<Icon name=\"add\" size={20} />}\n >\n {customCopy.add_income}\n </Button>\n </Stack>\n </>\n )}\n\n {showSelectIncome && (\n <SelectTransaction\n bgcolor=\"background.paper\"\n onSearch={(searchValue) =>\n setFilter({\n ...filter,\n custom: (transaction: Transaction) =>\n searchValue\n ? incomeFilterSearch(transaction, searchValue)\n : incomeFilter(transaction),\n })\n }\n onSelected={(guid) => {\n setTransactionGuid(guid)\n setAddIncome(false)\n }}\n />\n )}\n\n {!canSubmit && isDirty && (\n <P color=\"error\" mt={16}>\n {customCopy.confirm_error}\n </P>\n )}\n\n {transaction && (\n <>\n <AddRecurringTransactionDetails\n bgcolor=\"background.paper\"\n firstDay={firstDay}\n frequency={frequency}\n onFirstDayChange={setFirstDay}\n onFrequencyChange={setFrequency}\n onSecondDayChange={setSecondDay}\n secondDay={secondDay}\n transaction={transaction}\n />\n <Stack direction=\"row\" gap={16} ml={24} mt={32}>\n <Button\n aria-disabled={!transaction}\n onClick={() => {\n const updatedTransactions = [...selectedTransactions]\n updatedTransactions.push({\n ...transaction,\n nextDate: getNextPaymentDate(frequency, fromUnixTime(transaction.date)),\n frequency,\n })\n\n setSelectedTransactions(updatedTransactions)\n setTransactionGuid('')\n }}\n variant=\"contained\"\n >\n {commonCopy.confirm_button}\n </Button>\n <Button\n onClick={() => {\n setTransactionGuid('')\n setAddIncome(true)\n handleGetTransactions().finally()\n }}\n variant=\"text\"\n >\n {commonCopy.cancel_button}\n </Button>\n </Stack>\n </>\n )}\n\n {selectedTransactions.length > 0 && !transaction && (\n <Stack direction=\"row\" gap={16} ml={24} mt={32}>\n <Button\n aria-disabled={selectedTransactions.length < 1 || isSubmitting}\n onClick={handleAddIncome}\n startIcon={\n isSubmitting ? (\n <Icon\n name=\"progress_activity\"\n sx={{\n animation: `${spin} 2s linear infinite`,\n }}\n />\n ) : null\n }\n variant=\"contained\"\n >\n {customCopy.confirm_income_button}\n </Button>\n <Button onClick={completeOnboarding} variant=\"text\">\n {customCopy.skip_button}\n </Button>\n </Stack>\n )}\n </Box>\n )}\n </Box>\n )\n}\n\nexport default observer(CashflowOnboarding)\n"],"mappings":"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"}
|
|
@@ -2,20 +2,20 @@ import { useCashflowStore as p, useGlobalCopyStore as d } from "../../../common/
|
|
|
2
2
|
import "react";
|
|
3
3
|
import { observer as h } from "mobx-react-lite";
|
|
4
4
|
import n from "@mui/material/Stack";
|
|
5
|
-
import { H2 as f, H3 as
|
|
5
|
+
import { H2 as f, H3 as g, Icon as l, P as o } from "@mxenabled/mxui";
|
|
6
6
|
import a from "@mui/material/Button";
|
|
7
7
|
import { jsx as e, jsxs as t } from "react/jsx-runtime";
|
|
8
|
-
import { useTheme as
|
|
8
|
+
import { useTheme as u } from "@mui/material/styles";
|
|
9
9
|
import c from "@mui/material/Box";
|
|
10
10
|
var x = ({ handleNextStep: m }) => {
|
|
11
|
-
const { completeOnboarding: s } = p(), { cashflow: r } = d(), i =
|
|
11
|
+
const { completeOnboarding: s } = p(), { cashflow: r } = d(), i = u();
|
|
12
12
|
return /* @__PURE__ */ t(n, { children: [
|
|
13
13
|
/* @__PURE__ */ e(f, {
|
|
14
14
|
pb: 12,
|
|
15
15
|
variant: "h1",
|
|
16
16
|
children: r.welcome_title
|
|
17
17
|
}),
|
|
18
|
-
/* @__PURE__ */ e(
|
|
18
|
+
/* @__PURE__ */ e(g, {
|
|
19
19
|
color: i.palette.primary.light,
|
|
20
20
|
pb: 8,
|
|
21
21
|
children: r.welcome_sub_title
|
|
@@ -115,7 +115,7 @@ var x = ({ handleNextStep: m }) => {
|
|
|
115
115
|
children: r.get_started_button
|
|
116
116
|
}), /* @__PURE__ */ e(a, {
|
|
117
117
|
onClick: s,
|
|
118
|
-
variant: "
|
|
118
|
+
variant: "text",
|
|
119
119
|
children: r.skip_button
|
|
120
120
|
})]
|
|
121
121
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepOne.es.js","names":[],"sources":["../../../../src/cashflow/components/onboarding/StepOne.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\n\nimport { H2, H3, Icon, P } from '@mxenabled/mxui'\nimport { useTheme } from '@mui/material/styles'\nimport { useCashflowStore, useGlobalCopyStore } from '../../../common'\n\ninterface StepOneProps {\n handleNextStep: () => void\n}\n\nconst StepOne: React.FC<StepOneProps> = ({ handleNextStep }) => {\n const { completeOnboarding } = useCashflowStore()\n const { cashflow: customCopy } = useGlobalCopyStore()\n\n const theme = useTheme()\n\n return (\n <Stack>\n <H2 pb={12} variant=\"h1\">\n {customCopy.welcome_title}\n </H2>\n <H3 color={theme.palette.primary.light} pb={8}>\n {customCopy.welcome_sub_title}\n </H3>\n <P pb={32}>{customCopy.welcome_description}</P>\n <Stack direction=\"column\" mb={32} spacing={32}>\n <P sx={{ display: 'flex', alignItems: 'center', fontSize: 18 }}>\n <Box\n bgcolor={theme.palette.primary.lighter}\n borderRadius={1}\n component=\"span\"\n height={44}\n mr={24}\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}\n width={44}\n >\n <Icon color=\"primary\" name=\"currency_exchange\" />\n </Box>\n {customCopy.bullet_one}\n </P>\n <P sx={{ display: 'flex', alignItems: 'center', fontSize: 18 }}>\n <Box\n bgcolor={theme.palette.primary.lighter}\n borderRadius={1}\n component=\"span\"\n height={44}\n mr={24}\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}\n width={44}\n >\n <Icon color=\"primary\" name=\"cardiology\" />\n </Box>\n {customCopy.bullet_two}\n </P>\n <P sx={{ display: 'flex', alignItems: 'center', fontSize: 18 }}>\n <Box\n bgcolor={theme.palette.primary.lighter}\n borderRadius={1}\n component=\"span\"\n height={44}\n mr={24}\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}\n width={44}\n >\n <Icon color=\"primary\" name=\"flare\" />\n </Box>\n {customCopy.bullet_three}\n </P>\n </Stack>\n <Stack direction=\"row\" spacing={16}>\n <Button onClick={handleNextStep} variant=\"contained\">\n {customCopy.get_started_button}\n </Button>\n <Button onClick={completeOnboarding} variant=\"
|
|
1
|
+
{"version":3,"file":"StepOne.es.js","names":[],"sources":["../../../../src/cashflow/components/onboarding/StepOne.tsx"],"sourcesContent":["import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Stack from '@mui/material/Stack'\n\nimport { H2, H3, Icon, P } from '@mxenabled/mxui'\nimport { useTheme } from '@mui/material/styles'\nimport { useCashflowStore, useGlobalCopyStore } from '../../../common'\n\ninterface StepOneProps {\n handleNextStep: () => void\n}\n\nconst StepOne: React.FC<StepOneProps> = ({ handleNextStep }) => {\n const { completeOnboarding } = useCashflowStore()\n const { cashflow: customCopy } = useGlobalCopyStore()\n\n const theme = useTheme()\n\n return (\n <Stack>\n <H2 pb={12} variant=\"h1\">\n {customCopy.welcome_title}\n </H2>\n <H3 color={theme.palette.primary.light} pb={8}>\n {customCopy.welcome_sub_title}\n </H3>\n <P pb={32}>{customCopy.welcome_description}</P>\n <Stack direction=\"column\" mb={32} spacing={32}>\n <P sx={{ display: 'flex', alignItems: 'center', fontSize: 18 }}>\n <Box\n bgcolor={theme.palette.primary.lighter}\n borderRadius={1}\n component=\"span\"\n height={44}\n mr={24}\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}\n width={44}\n >\n <Icon color=\"primary\" name=\"currency_exchange\" />\n </Box>\n {customCopy.bullet_one}\n </P>\n <P sx={{ display: 'flex', alignItems: 'center', fontSize: 18 }}>\n <Box\n bgcolor={theme.palette.primary.lighter}\n borderRadius={1}\n component=\"span\"\n height={44}\n mr={24}\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}\n width={44}\n >\n <Icon color=\"primary\" name=\"cardiology\" />\n </Box>\n {customCopy.bullet_two}\n </P>\n <P sx={{ display: 'flex', alignItems: 'center', fontSize: 18 }}>\n <Box\n bgcolor={theme.palette.primary.lighter}\n borderRadius={1}\n component=\"span\"\n height={44}\n mr={24}\n sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}\n width={44}\n >\n <Icon color=\"primary\" name=\"flare\" />\n </Box>\n {customCopy.bullet_three}\n </P>\n </Stack>\n <Stack direction=\"row\" spacing={16}>\n <Button onClick={handleNextStep} variant=\"contained\">\n {customCopy.get_started_button}\n </Button>\n <Button onClick={completeOnboarding} variant=\"text\">\n {customCopy.skip_button}\n </Button>\n </Stack>\n </Stack>\n )\n}\n\nexport default observer(StepOne)\n"],"mappings":"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"}
|
|
@@ -19,5 +19,6 @@ export interface CalendarProps {
|
|
|
19
19
|
onRangeSelected?: (beginDate: Date, endDate: Date) => void;
|
|
20
20
|
selectionType?: CalendarSelectionTypes;
|
|
21
21
|
}
|
|
22
|
+
/** @deprecated Use `DateCalendar` or `StaticDatePicker` from `@mui/x-date-pickers`. */
|
|
22
23
|
declare const Calendar: React.FC<CalendarProps>;
|
|
23
24
|
export default Calendar;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Calendar.es.js","names":[],"sources":["../../../../src/common/components/calendar/Calendar.tsx"],"sourcesContent":["import React from 'react'\nimport { css } from '@mxenabled/cssinjs'\nimport { addDays } from 'date-fns/addDays'\nimport { addMonths } from 'date-fns/addMonths'\nimport { eachDayOfInterval } from 'date-fns/eachDayOfInterval'\nimport { eachWeekOfInterval } from 'date-fns/eachWeekOfInterval'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { format } from 'date-fns/format'\nimport { isBefore } from 'date-fns/isBefore'\nimport { isSameMonth } from 'date-fns/isSameMonth'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subMonths } from 'date-fns/subMonths'\n\nimport Button from '@mui/material/Button'\nimport Paper from '@mui/material/Paper'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport Header from './Header'\nimport Day from './Day'\n\nexport const CALENDAR_WIDTH = 340\nexport const DATE_SIZE = 44\nexport const enum CalendarSelectionTypes {\n None = 'None',\n Single = 'Single',\n Range = 'Range',\n}\n\nexport type CalendarCopy = {\n nextAria: string\n prevAria: string\n today: string\n}\n\nexport interface CalendarProps {\n copy: CalendarCopy\n beginDate?: Date\n endDate?: Date\n onDateSelected?: (date: Date) => void\n onRangeSelected?: (beginDate: Date, endDate: Date) => void\n selectionType?: CalendarSelectionTypes\n}\n\nconst Calendar: React.FC<CalendarProps> = ({\n copy,\n beginDate: beginDateProp = undefined,\n endDate: endDateProp = undefined,\n onDateSelected,\n onRangeSelected,\n selectionType = CalendarSelectionTypes.Single,\n}) => {\n const styles = getStyles()\n\n const [date, setDate] = React.useState(startOfToday)\n\n const [beginDate, setBeginDate] = React.useState<Date | undefined>(beginDateProp)\n const [endDate, setEndDate] = React.useState<Date | undefined>(endDateProp)\n\n React.useEffect(() => {\n setBeginDate(beginDateProp)\n setEndDate(endDateProp)\n if (beginDateProp) {\n setDate(beginDateProp)\n }\n }, [beginDateProp, endDateProp])\n\n const weeks = React.useMemo(() => {\n const weeksInInterval = eachWeekOfInterval({ start: startOfMonth(date), end: endOfMonth(date) })\n\n const weeks = [] as Date[][]\n for (let i = 0; i < weeksInInterval.length; i++) {\n const weekStart = weeksInInterval[i]\n const days = eachDayOfInterval({ start: weekStart, end: addDays(weekStart, 6) })\n\n const week = [] as Date[]\n for (let j = 0; j < days.length; j++) {\n week.push(days[j])\n }\n weeks.push(week)\n }\n\n return weeks\n }, [date])\n\n const handleSelection = (date: Date) => {\n if (selectionType === CalendarSelectionTypes.None) return\n\n if (selectionType === CalendarSelectionTypes.Single) {\n setBeginDate(date)\n onDateSelected?.(date)\n return\n }\n\n if (!beginDate || endDate) {\n setBeginDate(date)\n setEndDate(undefined)\n } else if (isBefore(date, beginDate)) {\n setEndDate(beginDate)\n setBeginDate(date)\n onRangeSelected?.(date, beginDate)\n } else {\n setEndDate(date)\n onRangeSelected?.(beginDate, date)\n }\n }\n\n const handleTodayClick = () => {\n const today = startOfToday()\n setDate(today)\n\n if (selectionType === CalendarSelectionTypes.None) return\n\n setBeginDate(today)\n\n if (selectionType === CalendarSelectionTypes.Single) {\n onDateSelected?.(today)\n } else {\n setEndDate(today)\n onRangeSelected?.(today, today)\n }\n }\n\n const handleNextMonthClick = () => {\n setDate(addMonths(date, 1))\n }\n\n const handlePreviousMonthClick = () => {\n setDate(subMonths(date, 1))\n }\n\n return (\n <div className={`mx-cmn-calendar ${styles}`}>\n <Paper sx={{ boxShadow: 'none' }}>\n <Header\n copy={copy}\n date={date}\n onNextClick={handleNextMonthClick}\n onPreviousClick={handlePreviousMonthClick}\n />\n\n <div className=\"mx-cmn-calendar-header-row\">\n {weeks[0].map((day, index) => (\n <div className=\"mx-cmn-calendar-header-cell\" key={index}>\n <Text bold={true} variant=\"body2\">\n {format(day, 'EEEEE')}\n </Text>\n </div>\n ))}\n </div>\n\n {weeks.map((week, index) => (\n <div className=\"mx-cmn-calendar-week\" key={`w-${index}`}>\n {week.map((day, index) => (\n <Day\n beginDate={beginDate}\n date={day}\n endDate={endDate}\n isInMonth={isSameMonth(day, date)}\n key={index}\n onClick={handleSelection}\n />\n ))}\n </div>\n ))}\n\n <div className=\"mx-cmn-calendar-today-container\">\n <Button onClick={handleTodayClick} size=\"small\" variant=\"text\">\n {copy.today}\n </Button>\n </div>\n </Paper>\n </div>\n )\n}\n\nconst getStyles = () =>\n css({\n width: CALENDAR_WIDTH,\n '& .MuiPaper-root': {\n paddingLeft: 24,\n paddingRight: 24,\n paddingTop: 4,\n paddingBottom: 4,\n },\n '& .mx-cmn-calendar-header-row': {\n display: 'flex',\n justifyContent: 'center',\n textAlign: 'center',\n '& .mx-cmn-calendar-header-cell': {\n height: DATE_SIZE,\n width: DATE_SIZE,\n minWidth: DATE_SIZE,\n '& .kmui-text': {\n alignItems: 'center',\n display: 'flex',\n height: '100%',\n justifyContent: 'center',\n width: '100%',\n },\n },\n },\n '& .mx-cmn-calendar-week': {\n display: 'flex',\n justifyContent: 'center',\n textAlign: 'center',\n },\n '& .mx-cmn-calendar-today-container': {\n display: 'block',\n marginTop: 16,\n textAlign: 'center',\n width: '100%',\n '& > .MuiButton-root': {\n display: 'inline-block',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n },\n })\n\nexport default Calendar\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAwBA,IAAkB,KAAX,0BAAA,GAAA;AACL,SAAA,EAAA,OAAA,QACA,EAAA,SAAA,UACA,EAAA,QAAA;AACF,GAAA,CAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"Calendar.es.js","names":[],"sources":["../../../../src/common/components/calendar/Calendar.tsx"],"sourcesContent":["import React from 'react'\nimport { css } from '@mxenabled/cssinjs'\nimport { addDays } from 'date-fns/addDays'\nimport { addMonths } from 'date-fns/addMonths'\nimport { eachDayOfInterval } from 'date-fns/eachDayOfInterval'\nimport { eachWeekOfInterval } from 'date-fns/eachWeekOfInterval'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { format } from 'date-fns/format'\nimport { isBefore } from 'date-fns/isBefore'\nimport { isSameMonth } from 'date-fns/isSameMonth'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\nimport { subMonths } from 'date-fns/subMonths'\n\nimport Button from '@mui/material/Button'\nimport Paper from '@mui/material/Paper'\n\nimport { Text } from '@mxenabled/mxui'\n\nimport Header from './Header'\nimport Day from './Day'\n\nexport const CALENDAR_WIDTH = 340\nexport const DATE_SIZE = 44\nexport const enum CalendarSelectionTypes {\n None = 'None',\n Single = 'Single',\n Range = 'Range',\n}\n\nexport type CalendarCopy = {\n nextAria: string\n prevAria: string\n today: string\n}\n\nexport interface CalendarProps {\n copy: CalendarCopy\n beginDate?: Date\n endDate?: Date\n onDateSelected?: (date: Date) => void\n onRangeSelected?: (beginDate: Date, endDate: Date) => void\n selectionType?: CalendarSelectionTypes\n}\n\n/** @deprecated Use `DateCalendar` or `StaticDatePicker` from `@mui/x-date-pickers`. */\nconst Calendar: React.FC<CalendarProps> = ({\n copy,\n beginDate: beginDateProp = undefined,\n endDate: endDateProp = undefined,\n onDateSelected,\n onRangeSelected,\n selectionType = CalendarSelectionTypes.Single,\n}) => {\n const styles = getStyles()\n\n const [date, setDate] = React.useState(startOfToday)\n\n const [beginDate, setBeginDate] = React.useState<Date | undefined>(beginDateProp)\n const [endDate, setEndDate] = React.useState<Date | undefined>(endDateProp)\n\n React.useEffect(() => {\n setBeginDate(beginDateProp)\n setEndDate(endDateProp)\n if (beginDateProp) {\n setDate(beginDateProp)\n }\n }, [beginDateProp, endDateProp])\n\n const weeks = React.useMemo(() => {\n const weeksInInterval = eachWeekOfInterval({ start: startOfMonth(date), end: endOfMonth(date) })\n\n const weeks = [] as Date[][]\n for (let i = 0; i < weeksInInterval.length; i++) {\n const weekStart = weeksInInterval[i]\n const days = eachDayOfInterval({ start: weekStart, end: addDays(weekStart, 6) })\n\n const week = [] as Date[]\n for (let j = 0; j < days.length; j++) {\n week.push(days[j])\n }\n weeks.push(week)\n }\n\n return weeks\n }, [date])\n\n const handleSelection = (date: Date) => {\n if (selectionType === CalendarSelectionTypes.None) return\n\n if (selectionType === CalendarSelectionTypes.Single) {\n setBeginDate(date)\n onDateSelected?.(date)\n return\n }\n\n if (!beginDate || endDate) {\n setBeginDate(date)\n setEndDate(undefined)\n } else if (isBefore(date, beginDate)) {\n setEndDate(beginDate)\n setBeginDate(date)\n onRangeSelected?.(date, beginDate)\n } else {\n setEndDate(date)\n onRangeSelected?.(beginDate, date)\n }\n }\n\n const handleTodayClick = () => {\n const today = startOfToday()\n setDate(today)\n\n if (selectionType === CalendarSelectionTypes.None) return\n\n setBeginDate(today)\n\n if (selectionType === CalendarSelectionTypes.Single) {\n onDateSelected?.(today)\n } else {\n setEndDate(today)\n onRangeSelected?.(today, today)\n }\n }\n\n const handleNextMonthClick = () => {\n setDate(addMonths(date, 1))\n }\n\n const handlePreviousMonthClick = () => {\n setDate(subMonths(date, 1))\n }\n\n return (\n <div className={`mx-cmn-calendar ${styles}`}>\n <Paper sx={{ boxShadow: 'none' }}>\n <Header\n copy={copy}\n date={date}\n onNextClick={handleNextMonthClick}\n onPreviousClick={handlePreviousMonthClick}\n />\n\n <div className=\"mx-cmn-calendar-header-row\">\n {weeks[0].map((day, index) => (\n <div className=\"mx-cmn-calendar-header-cell\" key={index}>\n <Text bold={true} variant=\"body2\">\n {format(day, 'EEEEE')}\n </Text>\n </div>\n ))}\n </div>\n\n {weeks.map((week, index) => (\n <div className=\"mx-cmn-calendar-week\" key={`w-${index}`}>\n {week.map((day, index) => (\n <Day\n beginDate={beginDate}\n date={day}\n endDate={endDate}\n isInMonth={isSameMonth(day, date)}\n key={index}\n onClick={handleSelection}\n />\n ))}\n </div>\n ))}\n\n <div className=\"mx-cmn-calendar-today-container\">\n <Button onClick={handleTodayClick} size=\"small\" variant=\"text\">\n {copy.today}\n </Button>\n </div>\n </Paper>\n </div>\n )\n}\n\nconst getStyles = () =>\n css({\n width: CALENDAR_WIDTH,\n '& .MuiPaper-root': {\n paddingLeft: 24,\n paddingRight: 24,\n paddingTop: 4,\n paddingBottom: 4,\n },\n '& .mx-cmn-calendar-header-row': {\n display: 'flex',\n justifyContent: 'center',\n textAlign: 'center',\n '& .mx-cmn-calendar-header-cell': {\n height: DATE_SIZE,\n width: DATE_SIZE,\n minWidth: DATE_SIZE,\n '& .kmui-text': {\n alignItems: 'center',\n display: 'flex',\n height: '100%',\n justifyContent: 'center',\n width: '100%',\n },\n },\n },\n '& .mx-cmn-calendar-week': {\n display: 'flex',\n justifyContent: 'center',\n textAlign: 'center',\n },\n '& .mx-cmn-calendar-today-container': {\n display: 'block',\n marginTop: 16,\n textAlign: 'center',\n width: '100%',\n '& > .MuiButton-root': {\n display: 'inline-block',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n },\n })\n\nexport default Calendar\n"],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import j from "@mui/material/Stack";
|
|
|
6
6
|
import { Drawer as C } from "@mxenabled/mxui";
|
|
7
7
|
import { jsx as r, jsxs as v } from "react/jsx-runtime";
|
|
8
8
|
import B from "@mui/material/Box";
|
|
9
|
-
var G = ({ ariaLabelClose:
|
|
9
|
+
var G = ({ ariaLabelClose: i = "Close", children: s, footerStyles: u = {}, hasSecondaryAction: d = !0, id: p, isOpen: e, isPrimaryDisabled: m, onClose: o, onPrimaryAction: t, onSecondaryAction: l, primaryButtonProps: c, primaryColor: f = "primary", primaryText: h, secondaryColor: n = "primary", secondaryText: b, shouldShowHeaderBorders: w = !0, shouldShowHeaderShadow: g = !1, title: a, ...x }) => {
|
|
10
10
|
const { onExited: k, onFocus: R, rootRef: S } = y(e);
|
|
11
11
|
return /* @__PURE__ */ r(C, {
|
|
12
12
|
id: p,
|
|
@@ -33,7 +33,7 @@ var G = ({ ariaLabelClose: s = "Close", children: u, footerStyles: d = {}, hasSe
|
|
|
33
33
|
justifyContent: "space-between",
|
|
34
34
|
children: [
|
|
35
35
|
/* @__PURE__ */ r(F, {
|
|
36
|
-
ariaLabelClose:
|
|
36
|
+
ariaLabelClose: i,
|
|
37
37
|
onClose: o,
|
|
38
38
|
shouldShowBorders: w,
|
|
39
39
|
shouldShowShadow: g,
|
|
@@ -42,18 +42,18 @@ var G = ({ ariaLabelClose: s = "Close", children: u, footerStyles: d = {}, hasSe
|
|
|
42
42
|
/* @__PURE__ */ r(B, {
|
|
43
43
|
height: "100%",
|
|
44
44
|
overflow: "auto",
|
|
45
|
-
children:
|
|
45
|
+
children: s
|
|
46
46
|
}),
|
|
47
47
|
t && /* @__PURE__ */ r(D, {
|
|
48
|
-
footerStyles:
|
|
49
|
-
hasSecondaryAction:
|
|
50
|
-
isPrimaryDisabled:
|
|
48
|
+
footerStyles: u,
|
|
49
|
+
hasSecondaryAction: d,
|
|
50
|
+
isPrimaryDisabled: m,
|
|
51
51
|
onPrimaryAction: t,
|
|
52
52
|
onSecondaryAction: l ?? o,
|
|
53
|
-
primaryButtonProps:
|
|
53
|
+
primaryButtonProps: c,
|
|
54
54
|
primaryColor: f,
|
|
55
|
-
primaryText:
|
|
56
|
-
secondaryColor:
|
|
55
|
+
primaryText: h,
|
|
56
|
+
secondaryColor: n,
|
|
57
57
|
secondaryText: b
|
|
58
58
|
})
|
|
59
59
|
]
|