bananas-commerce-admin 0.19.3 → 0.19.4
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/dist/esm/components/Card/CardFieldAddress.js +9 -9
- package/dist/esm/components/Card/CardFieldAddress.js.map +1 -1
- package/dist/esm/components/Card/index.js +11 -3
- package/dist/esm/components/Card/index.js.map +1 -1
- package/dist/esm/extensions/catalog/components/ArticleCard.js +9 -2
- package/dist/esm/extensions/catalog/components/ArticleCard.js.map +1 -1
- package/dist/esm/extensions/catalog/components/ArticleRow.js +4 -1
- package/dist/esm/extensions/catalog/components/ArticleRow.js.map +1 -1
- package/dist/esm/extensions/catalog/pages/article/list.js +2 -1
- package/dist/esm/extensions/catalog/pages/article/list.js.map +1 -1
- package/dist/esm/extensions/member/components/MemberDetailCard.js +35 -8
- package/dist/esm/extensions/member/components/MemberDetailCard.js.map +1 -1
- package/dist/esm/extensions/member/index.js +4 -0
- package/dist/esm/extensions/member/index.js.map +1 -1
- package/dist/esm/extensions/member/pages/member/create.js +250 -0
- package/dist/esm/extensions/member/pages/member/create.js.map +1 -0
- package/dist/esm/extensions/member/pages/member/list.js +28 -21
- package/dist/esm/extensions/member/pages/member/list.js.map +1 -1
- package/dist/esm/util/form_validation.js +65 -0
- package/dist/esm/util/form_validation.js.map +1 -0
- package/dist/types/components/Card/CardFieldAddress.d.ts +2 -0
- package/dist/types/components/Card/CardFieldCheckbox.d.ts +2 -2
- package/dist/types/extensions/catalog/types/article.d.ts +4 -2
- package/dist/types/extensions/member/pages/member/create.d.ts +3 -0
- package/dist/types/extensions/member/types/member.d.ts +1 -0
- package/dist/types/util/form_validation.d.ts +13 -0
- package/package.json +1 -1
- package/src/components/Card/CardFieldAddress.tsx +23 -5
- package/src/components/Card/CardFieldCheckbox.tsx +2 -2
- package/src/components/Card/index.tsx +11 -3
- package/src/extensions/catalog/components/ArticleCard.tsx +19 -1
- package/src/extensions/catalog/components/ArticleRow.tsx +6 -0
- package/src/extensions/catalog/pages/article/list.tsx +1 -0
- package/src/extensions/catalog/types/article.ts +4 -2
- package/src/extensions/member/components/MemberDetailCard.tsx +75 -4
- package/src/extensions/member/index.tsx +4 -0
- package/src/extensions/member/pages/member/create.tsx +547 -0
- package/src/extensions/member/pages/member/list.tsx +54 -36
- package/src/extensions/member/types/member.ts +1 -0
- package/src/util/form_validation.ts +75 -0
|
@@ -8,7 +8,7 @@ import { useCardContext } from "../../contexts/CardContext";
|
|
|
8
8
|
import { useI18n } from "../../contexts/I18nContext";
|
|
9
9
|
import { countryCodeFormatter } from "../../util/country_code_formatter";
|
|
10
10
|
import LabeledValue from "../LabeledValue";
|
|
11
|
-
export const CardFieldAddress = ({ label, value: defaultValue, required = false, isDisabled = false, size = "grow", isReadable = true, isEditable = true, helperText, }) => {
|
|
11
|
+
export const CardFieldAddress = ({ label, value: defaultValue, required = false, isDisabled = false, size = "grow", isReadable = true, isEditable = true, helperText, isCompany = false, fieldErrors = {}, }) => {
|
|
12
12
|
const { isEditing } = useCardContext();
|
|
13
13
|
const { t } = useI18n();
|
|
14
14
|
const addressString = [
|
|
@@ -22,16 +22,16 @@ export const CardFieldAddress = ({ label, value: defaultValue, required = false,
|
|
|
22
22
|
.filter(Boolean)
|
|
23
23
|
.join("\n");
|
|
24
24
|
return (React.createElement(Grid, { size: size }, isEditing && isEditable ? (React.createElement(Stack, { direction: "column", spacing: 2 },
|
|
25
|
-
React.createElement(Typography, { sx: { fontWeight: 700 }, variant: "body1" }, t("Address")),
|
|
26
|
-
React.createElement(TextField, { fullWidth: true, defaultValue: defaultValue?.street_address ?? "", disabled: isDisabled, label: t("Street Address"), name: "street_address", required: required, variant: "outlined" }),
|
|
27
|
-
React.createElement(TextField, { fullWidth: true, defaultValue: defaultValue?.street_address2 ?? "", disabled: isDisabled, label: t("Street Address 2"), name: "street_address2", required: false, variant: "outlined" }),
|
|
28
|
-
React.createElement(TextField, { fullWidth: true, defaultValue: defaultValue?.care_of ?? "", disabled: isDisabled, label: t("C/O"), name: "care_of", required: false, variant: "outlined" }),
|
|
25
|
+
React.createElement(Typography, { sx: { fontWeight: 700 }, variant: "body1" }, label ?? t("Address")),
|
|
26
|
+
React.createElement(TextField, { fullWidth: true, defaultValue: defaultValue?.street_address ?? "", disabled: isDisabled, error: Boolean(fieldErrors.street_address), helperText: fieldErrors.street_address, label: t("Street Address"), name: "street_address", required: required || isCompany, variant: "outlined" }),
|
|
27
|
+
React.createElement(TextField, { fullWidth: true, defaultValue: defaultValue?.street_address2 ?? "", disabled: isDisabled, error: Boolean(fieldErrors.street_address2), helperText: fieldErrors.street_address2, label: t("Street Address 2"), name: "street_address2", required: false, variant: "outlined" }),
|
|
28
|
+
React.createElement(TextField, { fullWidth: true, defaultValue: defaultValue?.care_of ?? "", disabled: isDisabled, error: Boolean(fieldErrors.care_of), helperText: fieldErrors.care_of, label: t("C/O"), name: "care_of", required: false, variant: "outlined" }),
|
|
29
29
|
React.createElement(Stack, { direction: "row", spacing: 2 },
|
|
30
|
-
React.createElement(TextField, { fullWidth: true, defaultValue: defaultValue?.postal_code ?? "", disabled: isDisabled, label: t("Postal Code"), name: "postal_code", required:
|
|
31
|
-
React.createElement(TextField, { fullWidth: true, defaultValue: defaultValue?.city ?? "", disabled: isDisabled, label: t("City"), name: "city", required:
|
|
30
|
+
React.createElement(TextField, { fullWidth: true, defaultValue: defaultValue?.postal_code ?? "", disabled: isDisabled, error: Boolean(fieldErrors.postal_code), helperText: fieldErrors.postal_code, label: t("Postal Code"), name: "postal_code", required: isCompany, variant: "outlined" }),
|
|
31
|
+
React.createElement(TextField, { fullWidth: true, defaultValue: defaultValue?.city ?? "", disabled: isDisabled, error: Boolean(fieldErrors.city), helperText: fieldErrors.city, label: t("City"), name: "city", required: isCompany, variant: "outlined" })),
|
|
32
32
|
React.createElement(Stack, { direction: "row", spacing: 2 },
|
|
33
|
-
React.createElement(TextField, { fullWidth: true, defaultValue: defaultValue?.country_code ?? "", disabled: isDisabled, label: t("Country"), name: "country_code", required:
|
|
34
|
-
React.createElement(TextField, { fullWidth: true, defaultValue: defaultValue?.region ?? "", disabled: isDisabled, label: t("Region"), name: "region", required: false, variant: "outlined" })),
|
|
33
|
+
React.createElement(TextField, { fullWidth: true, defaultValue: defaultValue?.country_code ?? "", disabled: isDisabled, error: Boolean(fieldErrors.country_code), helperText: fieldErrors.country_code, label: t("Country"), name: "country_code", required: isCompany, variant: "outlined" }),
|
|
34
|
+
React.createElement(TextField, { fullWidth: true, defaultValue: defaultValue?.region ?? "", disabled: isDisabled, error: Boolean(fieldErrors.region), helperText: fieldErrors.region, label: t("Region"), name: "region", required: false, variant: "outlined" })),
|
|
35
35
|
helperText != null && React.createElement(FormHelperText, { sx: { mb: 1 } }, helperText))) : (isReadable && React.createElement(LabeledValue, { label: label, value: addressString }))));
|
|
36
36
|
};
|
|
37
37
|
export default CardFieldAddress;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardFieldAddress.js","sourceRoot":"","sources":["../../../../src/components/Card/CardFieldAddress.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,IAAI,MAAM,qBAAqB,CAAC;AACvC,OAAO,KAAK,MAAM,qBAAqB,CAAC;AACxC,OAAO,SAA6B,MAAM,yBAAyB,CAAC;AACpE,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,YAAY,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"CardFieldAddress.js","sourceRoot":"","sources":["../../../../src/components/Card/CardFieldAddress.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { Card as MuiCard, Grid2 as Grid, } from "@mui/material";
|
|
|
3
3
|
import { useSnackbar } from "notistack";
|
|
4
4
|
import { CardContext } from "../../contexts/CardContext";
|
|
5
5
|
import { useI18n } from "../../contexts/I18nContext";
|
|
6
|
+
import { ValidationError } from "../../util/form_validation";
|
|
6
7
|
export * from "./shared";
|
|
7
8
|
/**
|
|
8
9
|
* A card component that wraps a form with `onSubmit` and provides `cardContext`.
|
|
@@ -64,9 +65,16 @@ export function Card({ alwaysEditable = false, children, columns = 1, defaultEdi
|
|
|
64
65
|
catch (error) {
|
|
65
66
|
// TODO Report error to sentry
|
|
66
67
|
console.error("[CARD] Error when submitting data", error);
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
if (error instanceof ValidationError) {
|
|
69
|
+
const message = error.formErrors.at(0) ??
|
|
70
|
+
t("Invalid form input. Please correct the highlighted fields.");
|
|
71
|
+
enqueueSnackbar(message, { variant: "error" });
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
enqueueSnackbar(t("Failed to submit data. Contact support or try again later."), {
|
|
75
|
+
variant: "error",
|
|
76
|
+
});
|
|
77
|
+
}
|
|
70
78
|
// Don't exit edit mode (and clear fields) on error. Give the user the chance to save/fix.
|
|
71
79
|
setIsDisabled(false);
|
|
72
80
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/Card/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE9D,OAAO,EACL,IAAI,IAAI,OAAO,EAEf,KAAK,IAAI,IAAI,GAEd,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/Card/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import React, { useCallback } from "react";
|
|
2
2
|
import { useParams } from "react-router-dom";
|
|
3
|
+
import CancelIcon from "@mui/icons-material/Cancel";
|
|
4
|
+
import CheckCircleIcon from "@mui/icons-material/CheckCircle";
|
|
3
5
|
import Card from "../../../components/Card";
|
|
4
6
|
import CardActions from "../../../components/Card/CardActions";
|
|
5
7
|
import CardCancelButton from "../../../components/Card/CardCancelButton";
|
|
6
8
|
import CardContent from "../../../components/Card/CardContent";
|
|
9
|
+
import CardFieldCheckbox from "../../../components/Card/CardFieldCheckbox";
|
|
7
10
|
import CardFieldText from "../../../components/Card/CardFieldText";
|
|
8
11
|
import CardHeader from "../../../components/Card/CardHeader";
|
|
9
12
|
import CardRow from "../../../components/Card/CardRow";
|
|
@@ -27,6 +30,7 @@ export const ArticleCard = ({ article, create, onCreated, onUpdated, }) => {
|
|
|
27
30
|
product_number: "",
|
|
28
31
|
gtin: "",
|
|
29
32
|
tax_code: "",
|
|
33
|
+
is_active: true,
|
|
30
34
|
};
|
|
31
35
|
const handleSave = useCallback(async (values) => {
|
|
32
36
|
if (create != null) {
|
|
@@ -83,8 +87,11 @@ export const ArticleCard = ({ article, create, onCreated, onUpdated, }) => {
|
|
|
83
87
|
(PHYSICAL_ITEM_TYPES.includes(article.item_type) || create) && (React.createElement(React.Fragment, null,
|
|
84
88
|
React.createElement(CardRow, null,
|
|
85
89
|
React.createElement(CardFieldText, { formName: "gtin", label: "GTIN", required: false, value: article.gtin })),
|
|
86
|
-
React.createElement(CardRow,
|
|
87
|
-
React.createElement(CardFieldText, { formName: "tax_code", label: "Tax code", required: false, value: article.tax_code })
|
|
90
|
+
React.createElement(CardRow, { columns: 3 },
|
|
91
|
+
React.createElement(CardFieldText, { formName: "tax_code", label: "Tax code", required: false, size: 2, value: article.tax_code }),
|
|
92
|
+
!create && (React.createElement(React.Fragment, null,
|
|
93
|
+
React.createElement("input", { name: "is_active", type: "hidden", value: "false" }),
|
|
94
|
+
React.createElement(CardFieldCheckbox, { formName: "is_active", label: t("Active"), noValue: React.createElement(CancelIcon, { color: "error", fontSize: "small" }), value: article.is_active, yesValue: React.createElement(CheckCircleIcon, { color: "success", fontSize: "small" }) }))))))),
|
|
88
95
|
React.createElement(CardActions, null,
|
|
89
96
|
!create && React.createElement(CardCancelButton, null),
|
|
90
97
|
React.createElement(CardSaveButton, { label: create ? "Create" : "Save" }))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArticleCard.js","sourceRoot":"","sources":["../../../../../src/extensions/catalog/components/ArticleCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,IAAI,MAAM,0BAA0B,CAAC;AAC5C,OAAO,WAAW,MAAM,sCAAsC,CAAC;AAC/D,OAAO,gBAAgB,MAAM,2CAA2C,CAAC;AACzE,OAAO,WAAW,MAAM,sCAAsC,CAAC;AAC/D,OAAO,aAAa,MAAM,wCAAwC,CAAC;AACnE,OAAO,UAAU,MAAM,qCAAqC,CAAC;AAC7D,OAAO,OAAO,MAAM,kCAAkC,CAAC;AACvD,OAAO,cAAc,MAAM,yCAAyC,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAgB/C,MAAM,CAAC,MAAM,WAAW,GAA+B,CAAC,EACtD,OAAO,EACP,MAAM,EACN,SAAS,EACT,SAAS,GACV,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IACxB,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;IAE3B,OAAO,KAAK;QACV,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,EAAE;QACb,IAAI,EAAE,EAAE;QACR,YAAY,EAAE,EAAE;QAChB,cAAc,EAAE,EAAE;QAClB,IAAI,EAAE,EAAE;QACR,QAAQ,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"ArticleCard.js","sourceRoot":"","sources":["../../../../../src/extensions/catalog/components/ArticleCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,UAAU,MAAM,4BAA4B,CAAC;AACpD,OAAO,eAAe,MAAM,iCAAiC,CAAC;AAE9D,OAAO,IAAI,MAAM,0BAA0B,CAAC;AAC5C,OAAO,WAAW,MAAM,sCAAsC,CAAC;AAC/D,OAAO,gBAAgB,MAAM,2CAA2C,CAAC;AACzE,OAAO,WAAW,MAAM,sCAAsC,CAAC;AAC/D,OAAO,iBAAiB,MAAM,4CAA4C,CAAC;AAC3E,OAAO,aAAa,MAAM,wCAAwC,CAAC;AACnE,OAAO,UAAU,MAAM,qCAAqC,CAAC;AAC7D,OAAO,OAAO,MAAM,kCAAkC,CAAC;AACvD,OAAO,cAAc,MAAM,yCAAyC,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAgB/C,MAAM,CAAC,MAAM,WAAW,GAA+B,CAAC,EACtD,OAAO,EACP,MAAM,EACN,SAAS,EACT,SAAS,GACV,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IACxB,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;IAE3B,OAAO,KAAK;QACV,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,EAAE;QACb,IAAI,EAAE,EAAE;QACR,YAAY,EAAE,EAAE;QAChB,cAAc,EAAE,EAAE;QAClB,IAAI,EAAE,EAAE;QACR,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,IAAI;KAChB,CAAC;IAEF,MAAM,UAAU,GAAG,WAAW,CAC5B,KAAK,EAAE,MAAe,EAAE,EAAE;QACxB,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;YACxD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;gBACjC,MAAM;gBACN,IAAI,EAAE,MAAM;aACb,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC7C,SAAS,EAAE,CAAC,cAAc,CAAC,CAAC;gBAC5B,OAAO,CAAC,CAAC,+BAA+B,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;YACxD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;gBACjC,MAAM;gBACN,IAAI,EAAE,MAAM;aACb,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC7C,SAAS,EAAE,CAAC,cAAc,CAAC,CAAC;gBAC5B,OAAO,CAAC,CAAC,+BAA+B,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC,EACD,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,CAC/C,CAAC;IAEF,OAAO,CACL,oBAAC,IAAI,IACH,OAAO,EAAE,CAAC,EACV,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,aAAa,CAAC,IAAI,EAAE,wBAAwB,CAAC,EACzD,QAAQ,EAAE,UAAU;QAEpB,oBAAC,UAAU,IAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,GAAI;QAEnC,oBAAC,WAAW;YACV,oBAAC,OAAO;gBACN,oBAAC,aAAa,IACZ,QAAQ,EAAC,WAAW,EACpB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAChB,QAAQ,EAAE,IAAI,EACd,KAAK,EAAE,OAAO,CAAC,SAAS,GACxB,CACM;YAEV,oBAAC,OAAO;gBACN,oBAAC,aAAa,IACZ,QAAQ,EAAC,MAAM,EACf,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAChB,QAAQ,EAAE,IAAI,EACd,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,OAAO,CAAC,IAAI,GACnB;gBACF,oBAAC,aAAa,IAAC,QAAQ,EAAC,SAAS,EAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,GAAI,CAClF;YACV,oBAAC,OAAO;gBACN,oBAAC,aAAa,IACZ,QAAQ,EAAC,MAAM,EACf,KAAK,EAAE,CAAC,CAAC,gBAAgB,CAAC,EAC1B,QAAQ,EAAE,IAAI,EACd,KAAK,EAAE,OAAO,CAAC,IAAI,GACnB;gBACF,oBAAC,aAAa,IACZ,QAAQ,EAAC,gBAAgB,EACzB,KAAK,EAAE,CAAC,CAAC,gBAAgB,CAAC,EAC1B,KAAK,EAAE,OAAO,CAAC,cAAc,GAC7B;gBACF,oBAAC,aAAa,IACZ,QAAQ,EAAC,cAAc,EACvB,KAAK,EAAE,CAAC,CAAC,cAAc,CAAC,EACxB,KAAK,EAAE,OAAO,CAAC,YAAY,GAC3B,CACM;YAET,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,IAAI,CAC9D;gBACE,oBAAC,OAAO;oBACN,oBAAC,aAAa,IAAC,QAAQ,EAAC,MAAM,EAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,GAAI,CAC5E;gBACV,oBAAC,OAAO,IAAC,OAAO,EAAE,CAAC;oBACjB,oBAAC,aAAa,IACZ,QAAQ,EAAC,UAAU,EACnB,KAAK,EAAC,UAAU,EAChB,QAAQ,EAAE,KAAK,EACf,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,OAAO,CAAC,QAAQ,GACvB;oBACD,CAAC,MAAM,IAAI,CACV;wBACE,+BAAO,IAAI,EAAC,WAAW,EAAC,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,OAAO,GAAG;wBACtD,oBAAC,iBAAiB,IAChB,QAAQ,EAAC,WAAW,EACpB,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,EAClB,OAAO,EAAE,oBAAC,UAAU,IAAC,KAAK,EAAC,OAAO,EAAC,QAAQ,EAAC,OAAO,GAAG,EACtD,KAAK,EAAE,OAAO,CAAC,SAAS,EACxB,QAAQ,EAAE,oBAAC,eAAe,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,GAAG,GAC9D,CACD,CACJ,CACO,CACT,CACJ,CACW;QAEd,oBAAC,WAAW;YACT,CAAC,MAAM,IAAI,oBAAC,gBAAgB,OAAG;YAChC,oBAAC,cAAc,IAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAI,CACzC,CACT,CACR,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
import CancelIcon from "@mui/icons-material/Cancel";
|
|
3
|
+
import CheckCircleIcon from "@mui/icons-material/CheckCircle";
|
|
2
4
|
import { TableCell } from "../../../components/Table/TableCell";
|
|
3
5
|
import { NavigatingTableRow } from "../../../components/Table/TableRow";
|
|
4
6
|
export const ArticleRow = ({ article }) => (React.createElement(NavigatingTableRow, { route: "catalog.article:detail", routeParams: { id: article.id } },
|
|
5
7
|
React.createElement(TableCell, null, article.name),
|
|
6
8
|
React.createElement(TableCell, null, article.variant),
|
|
7
9
|
React.createElement(TableCell, null, article.item_type),
|
|
8
|
-
React.createElement(TableCell, null, article.code)
|
|
10
|
+
React.createElement(TableCell, null, article.code),
|
|
11
|
+
React.createElement(TableCell, { align: "right" }, article.is_active ? React.createElement(CheckCircleIcon, { color: "success" }) : React.createElement(CancelIcon, { color: "error" }))));
|
|
9
12
|
//# sourceMappingURL=ArticleRow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArticleRow.js","sourceRoot":"","sources":["../../../../../src/extensions/catalog/components/ArticleRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAOxE,MAAM,CAAC,MAAM,UAAU,GAA8B,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CACpE,oBAAC,kBAAkB,IAAC,KAAK,EAAC,wBAAwB,EAAC,WAAW,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;IAChF,oBAAC,SAAS,QAAE,OAAO,CAAC,IAAI,CAAa;IACrC,oBAAC,SAAS,QAAE,OAAO,CAAC,OAAO,CAAa;IACxC,oBAAC,SAAS,QAAE,OAAO,CAAC,SAAS,CAAa;IAC1C,oBAAC,SAAS,QAAE,OAAO,CAAC,IAAI,CAAa,
|
|
1
|
+
{"version":3,"file":"ArticleRow.js","sourceRoot":"","sources":["../../../../../src/extensions/catalog/components/ArticleRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,UAAU,MAAM,4BAA4B,CAAC;AACpD,OAAO,eAAe,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAOxE,MAAM,CAAC,MAAM,UAAU,GAA8B,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CACpE,oBAAC,kBAAkB,IAAC,KAAK,EAAC,wBAAwB,EAAC,WAAW,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;IAChF,oBAAC,SAAS,QAAE,OAAO,CAAC,IAAI,CAAa;IACrC,oBAAC,SAAS,QAAE,OAAO,CAAC,OAAO,CAAa;IACxC,oBAAC,SAAS,QAAE,OAAO,CAAC,SAAS,CAAa;IAC1C,oBAAC,SAAS,QAAE,OAAO,CAAC,IAAI,CAAa;IACrC,oBAAC,SAAS,IAAC,KAAK,EAAC,OAAO,IACrB,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAC,eAAe,IAAC,KAAK,EAAC,SAAS,GAAG,CAAC,CAAC,CAAC,oBAAC,UAAU,IAAC,KAAK,EAAC,OAAO,GAAG,CAC7E,CACO,CACtB,CAAC"}
|
|
@@ -45,7 +45,8 @@ const ArticleListPage = ({ data }) => {
|
|
|
45
45
|
React.createElement(TableHeading, null, t("Name")),
|
|
46
46
|
React.createElement(TableHeading, null, t("Variant")),
|
|
47
47
|
React.createElement(TableHeading, null, t("Type")),
|
|
48
|
-
React.createElement(TableHeading, null, t("Article Number"))
|
|
48
|
+
React.createElement(TableHeading, null, t("Article Number")),
|
|
49
|
+
React.createElement(TableHeading, { align: "right" }, t("Active"))),
|
|
49
50
|
React.createElement(TableBody, null, data?.results.map((article) => React.createElement(ArticleRow, { key: article.id, article: article })))))),
|
|
50
51
|
hasPermission(user, "catalog.add_article") && (React.createElement(ActionBar, null,
|
|
51
52
|
React.createElement(Button, { color: "primary", variant: "contained", onClick: () => navigate("catalog.article:create") }, t("Create article")))))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../../../src/extensions/catalog/pages/article/list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,SAAS,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACnD,OAAO,SAAS,MAAM,kCAAkC,CAAC;AACzD,OAAO,KAAK,MAAM,8BAA8B,CAAC;AACjD,OAAO,SAAS,MAAM,wCAAwC,CAAC;AAC/D,OAAO,YAAY,MAAM,2CAA2C,CAAC;AACrE,OAAO,SAAS,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,OAAO,EAAE,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAGzD,MAAM,eAAe,GAA4C,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;IAC5E,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,CAAC;IACjC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;IAC3B,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IAExB,OAAO,CACL,oBAAC,IAAI;QACH,oBAAC,MAAM;YACL,oBAAC,QAAQ,IAAC,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC;gBAC5B,oBAAC,SAAS,IACR,YAAY,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAC7E,WAAW,EAAE,CAAC,CAAC,mCAAmC,CAAC,EACnD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;4BACjB,QAAQ,CAAC,sBAAsB,EAAE;gCAC/B,OAAO,EAAE,IAAI;6BACd,CAAC,CAAC;wBACL,CAAC;6BAAM,CAAC;4BACN,QAAQ,CAAC,sBAAsB,EAAE;gCAC/B,KAAK,EAAE;oCACL,MAAM,EAAE,KAAK;iCACd;gCACD,OAAO,EAAE,IAAI;6BACd,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC,GACD,CACO,CACJ;QAET,oBAAC,2BAA2B;YAC1B,oBAAC,OAAO,IAAC,MAAM,EAAC,WAAW;gBACzB,oBAAC,SAAS;oBACR,oBAAC,KAAK,IAAC,UAAU,QAAC,KAAK,EAAE,IAAI,EAAE,KAAK;wBAClC,oBAAC,SAAS;4BACR,oBAAC,YAAY,QAAE,CAAC,CAAC,MAAM,CAAC,CAAgB;4BACxC,oBAAC,YAAY,QAAE,CAAC,CAAC,SAAS,CAAC,CAAgB;4BAC3C,oBAAC,YAAY,QAAE,CAAC,CAAC,MAAM,CAAC,CAAgB;4BACxC,oBAAC,YAAY,QAAE,CAAC,CAAC,gBAAgB,CAAC,CAAgB,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../../../src/extensions/catalog/pages/article/list.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React from "react";
|
|
1
|
+
import React, { useState } from "react";
|
|
2
2
|
import { useParams } from "react-router-dom";
|
|
3
3
|
import Card from "../../../components/Card";
|
|
4
4
|
import CardActions from "../../../components/Card/CardActions";
|
|
@@ -12,6 +12,7 @@ import CardSaveButton from "../../../components/Card/CardSaveButton";
|
|
|
12
12
|
import { useApi } from "../../../contexts/ApiContext";
|
|
13
13
|
import { useI18n } from "../../../contexts/I18nContext";
|
|
14
14
|
import { useUser } from "../../../contexts/UserContext";
|
|
15
|
+
import { getFormErrors, ValidationError } from "../../../util/form_validation";
|
|
15
16
|
import { hasPermission } from "../../../util/has_permission";
|
|
16
17
|
import { CustomerType } from "../types/member";
|
|
17
18
|
export const MemberDetailCard = (props) => {
|
|
@@ -19,7 +20,9 @@ export const MemberDetailCard = (props) => {
|
|
|
19
20
|
const api = useApi();
|
|
20
21
|
const { user } = useUser();
|
|
21
22
|
const { t } = useI18n();
|
|
23
|
+
const [fieldErrors, setFieldErrors] = useState({});
|
|
22
24
|
const handleSave = async (values) => {
|
|
25
|
+
setFieldErrors({});
|
|
23
26
|
const body = { ...values };
|
|
24
27
|
const addressFields = {
|
|
25
28
|
street_address: values.street_address,
|
|
@@ -30,11 +33,18 @@ export const MemberDetailCard = (props) => {
|
|
|
30
33
|
region: values.region,
|
|
31
34
|
care_of: values.care_of,
|
|
32
35
|
};
|
|
36
|
+
// Convert all empty string fields to null
|
|
37
|
+
Object.entries(body).forEach(([key, value]) => {
|
|
38
|
+
if (value === "") {
|
|
39
|
+
// @ts-expect-error - we know that body has these properties
|
|
40
|
+
body[key] = null;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
33
43
|
if (Object.values(addressFields).some((value) => value)) {
|
|
34
44
|
body.billing_address = {};
|
|
35
45
|
Object.entries(addressFields).forEach(([key, value]) => {
|
|
36
46
|
// @ts-expect-error - we know that body has a billing_address property
|
|
37
|
-
if (value != null)
|
|
47
|
+
if (value != null && value !== "")
|
|
38
48
|
body.billing_address[key] = value;
|
|
39
49
|
});
|
|
40
50
|
}
|
|
@@ -53,6 +63,11 @@ export const MemberDetailCard = (props) => {
|
|
|
53
63
|
}
|
|
54
64
|
else {
|
|
55
65
|
console.error("[MEMBERSHIP_DETAIL_CARD]", response);
|
|
66
|
+
const errors = await getFormErrors(response);
|
|
67
|
+
if (errors) {
|
|
68
|
+
setFieldErrors(errors.fieldErrors);
|
|
69
|
+
throw new ValidationError(errors.formErrors[0] ?? t("Invalid form input. Please correct the highlighted fields."), errors);
|
|
70
|
+
}
|
|
56
71
|
throw new Error("updating member fields.");
|
|
57
72
|
}
|
|
58
73
|
};
|
|
@@ -61,6 +76,7 @@ export const MemberDetailCard = (props) => {
|
|
|
61
76
|
number: "",
|
|
62
77
|
customer_type: "",
|
|
63
78
|
company_name: "",
|
|
79
|
+
identification_number: "",
|
|
64
80
|
given_name: "",
|
|
65
81
|
family_name: "",
|
|
66
82
|
email: "",
|
|
@@ -82,15 +98,26 @@ export const MemberDetailCard = (props) => {
|
|
|
82
98
|
React.createElement(CardHeader, { title: t("Contact Details") }),
|
|
83
99
|
React.createElement(CardContent, null,
|
|
84
100
|
isCompany && (React.createElement(CardRow, null,
|
|
85
|
-
React.createElement(CardFieldText, { formName: "company_name", label: t("Company name"), required: isCompany, size:
|
|
101
|
+
React.createElement(CardFieldText, { error: Boolean(fieldErrors.company_name), formName: "company_name", helperText: fieldErrors.company_name, label: t("Company name"), required: isCompany, size: 3, value: member.company_name }),
|
|
102
|
+
React.createElement(CardFieldText, { disabled: !isCompany, error: Boolean(fieldErrors.identification_number), formName: "identification_number", helperText: fieldErrors.identification_number, label: t("Company ID"), required: isCompany, size: 3, value: member.identification_number ?? "" }))),
|
|
86
103
|
React.createElement(CardRow, null,
|
|
87
|
-
React.createElement(CardFieldText, { formName: "given_name", label: t("First Name"), required: !isCompany, size: 3, value: member.given_name }),
|
|
88
|
-
React.createElement(CardFieldText, { formName: "family_name", label: t("Last Name"), required: !isCompany, size: 3, value: member.family_name })),
|
|
104
|
+
React.createElement(CardFieldText, { error: Boolean(fieldErrors.given_name), formName: "given_name", helperText: fieldErrors.given_name, label: t("First Name"), required: !isCompany, size: 3, value: member.given_name }),
|
|
105
|
+
React.createElement(CardFieldText, { error: Boolean(fieldErrors.family_name), formName: "family_name", helperText: fieldErrors.family_name, label: t("Last Name"), required: !isCompany, size: 3, value: member.family_name })),
|
|
89
106
|
React.createElement(CardRow, null,
|
|
90
|
-
React.createElement(CardFieldText, { formName: "phone", label: t("Phone"), required: true, size: 3, value: member.phone }),
|
|
91
|
-
React.createElement(CardFieldText, { formName: "email", label: t("Email"), size: 3, value: member.email })),
|
|
107
|
+
React.createElement(CardFieldText, { error: Boolean(fieldErrors.phone), formName: "phone", helperText: fieldErrors.phone, label: t("Phone"), required: true, size: 3, value: member.phone }),
|
|
108
|
+
React.createElement(CardFieldText, { error: Boolean(fieldErrors.email), formName: "email", helperText: fieldErrors.email, label: t("Email"), size: 3, value: member.email })),
|
|
109
|
+
!isCompany && member.identification_number && (React.createElement(CardRow, null,
|
|
110
|
+
React.createElement(CardFieldText, { disabled: !isCompany, error: Boolean(fieldErrors.identification_number), formName: "identification_number", helperText: fieldErrors.identification_number, label: t("SSN"), size: 6, value: member.identification_number ?? "" }))),
|
|
92
111
|
React.createElement(CardRow, null,
|
|
93
|
-
React.createElement(CardFieldAddress, {
|
|
112
|
+
React.createElement(CardFieldAddress, { fieldErrors: {
|
|
113
|
+
street_address: fieldErrors.street_address,
|
|
114
|
+
street_address2: fieldErrors.street_address2,
|
|
115
|
+
postal_code: fieldErrors.postal_code,
|
|
116
|
+
city: fieldErrors.city,
|
|
117
|
+
country_code: fieldErrors.country_code,
|
|
118
|
+
region: fieldErrors.region,
|
|
119
|
+
care_of: fieldErrors.care_of,
|
|
120
|
+
}, formName: "billing_address", isCompany: isCompany, isEditable: hasPermission(user, "member.change_memberaddress"), label: t("Address"), required: true, value: member.billing_address }))),
|
|
94
121
|
React.createElement(CardActions, null,
|
|
95
122
|
React.createElement(CardCancelButton, null),
|
|
96
123
|
React.createElement(CardSaveButton, null))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemberDetailCard.js","sourceRoot":"","sources":["../../../../../src/extensions/member/components/MemberDetailCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"MemberDetailCard.js","sourceRoot":"","sources":["../../../../../src/extensions/member/components/MemberDetailCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,10 @@ import ReceiptLongOutlinedIcon from "@mui/icons-material/ReceiptLongOutlined";
|
|
|
3
3
|
import SubscriptionsOutlinedIcon from "@mui/icons-material/SubscriptionsOutlined";
|
|
4
4
|
const routes = {
|
|
5
5
|
member: {
|
|
6
|
+
create: {
|
|
7
|
+
page: async () => (await import("./pages/member/create")).default,
|
|
8
|
+
offline: true,
|
|
9
|
+
},
|
|
6
10
|
detail: {
|
|
7
11
|
page: async () => (await import("./pages/member/detail")).default,
|
|
8
12
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/member/index.tsx"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,oCAAoC,CAAC;AACpE,OAAO,uBAAuB,MAAM,yCAAyC,CAAC;AAC9E,OAAO,yBAAyB,MAAM,2CAA2C,CAAC;AAMlF,MAAM,MAAM,GAYR;IACF,MAAM,EAAE;QACN,MAAM,EAAE;YACN,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO;SAClE;QACD,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,EAAE;KAC1E;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAoB;IACrC,GAAG,EAAE,QAAQ;IACb,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAElE,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACjB,OAAO;gBACL,IAAI,EAAE,IAAI,EAAE;gBACZ,GAAG,GAAG;aACP,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAwB;IAC7C,oBAAoB,EAAE;QACpB,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,oBAAoB;KACjC;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,OAAO,GAAwC;IAC1D,gBAAgB,EAAE;QAChB,oCAAoC,EAAE;YACpC,KAAK,EAAE,eAAe;YACtB,IAAI,EAAE,yBAAyB;YAC/B,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,OAAO;YAC5E,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,gCAAgC;SAC7C;KACF;IACD,mBAAmB,EAAE;QACnB,oCAAoC,EAAE;YACpC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,OAAO;YAC5E,OAAO,EAAE,QAAQ;YACjB,UAAU,EAAE,gCAAgC;SAC7C;KACF;IACD,SAAS,EAAE;QACT,gCAAgC,EAAE;YAChC,KAAK,EAAE,WAAW;YAClB,IAAI,EAAE,uBAAuB;YAC7B,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,OAAO;YACxE,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,mBAAmB;SAChC;KACF;IACD,cAAc,EAAE;QACd,oCAAoC,EAAE;YACpC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC,CAAC,OAAO;YAC7E,OAAO,EAAE,QAAQ;YACjB,UAAU,EAAE,uBAAuB;SACpC;KACF;CACO,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/member/index.tsx"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,oCAAoC,CAAC;AACpE,OAAO,uBAAuB,MAAM,yCAAyC,CAAC;AAC9E,OAAO,yBAAyB,MAAM,2CAA2C,CAAC;AAMlF,MAAM,MAAM,GAYR;IACF,MAAM,EAAE;QACN,MAAM,EAAE;YACN,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO;YACjE,OAAO,EAAE,IAAI;SACd;QACD,MAAM,EAAE;YACN,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO;SAClE;QACD,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,EAAE;KAC1E;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAoB;IACrC,GAAG,EAAE,QAAQ;IACb,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAElE,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACjB,OAAO;gBACL,IAAI,EAAE,IAAI,EAAE;gBACZ,GAAG,GAAG;aACP,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAwB;IAC7C,oBAAoB,EAAE;QACpB,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,oBAAoB;KACjC;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,OAAO,GAAwC;IAC1D,gBAAgB,EAAE;QAChB,oCAAoC,EAAE;YACpC,KAAK,EAAE,eAAe;YACtB,IAAI,EAAE,yBAAyB;YAC/B,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,OAAO;YAC5E,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,gCAAgC;SAC7C;KACF;IACD,mBAAmB,EAAE;QACnB,oCAAoC,EAAE;YACpC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,OAAO;YAC5E,OAAO,EAAE,QAAQ;YACjB,UAAU,EAAE,gCAAgC;SAC7C;KACF;IACD,SAAS,EAAE;QACT,gCAAgC,EAAE;YAChC,KAAK,EAAE,WAAW;YAClB,IAAI,EAAE,uBAAuB;YAC7B,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,OAAO;YACxE,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,mBAAmB;SAChC;KACF;IACD,cAAc,EAAE;QACd,oCAAoC,EAAE;YACpC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC,CAAC,OAAO;YAC7E,OAAO,EAAE,QAAQ;YACjB,UAAU,EAAE,uBAAuB;SACpC;KACF;CACO,CAAC"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import React, { useCallback, useEffect, useMemo, useState } from "react";
|
|
2
|
+
import CardMembershipIcon from "@mui/icons-material/CardMembership";
|
|
3
|
+
import FormControl from "@mui/material/FormControl";
|
|
4
|
+
import FormControlLabel from "@mui/material/FormControlLabel";
|
|
5
|
+
import FormLabel from "@mui/material/FormLabel";
|
|
6
|
+
import Grid from "@mui/material/Grid2";
|
|
7
|
+
import MenuItem from "@mui/material/MenuItem";
|
|
8
|
+
import Radio from "@mui/material/Radio";
|
|
9
|
+
import RadioGroup from "@mui/material/RadioGroup";
|
|
10
|
+
import Switch from "@mui/material/Switch";
|
|
11
|
+
import TextField from "@mui/material/TextField";
|
|
12
|
+
import Typography from "@mui/material/Typography";
|
|
13
|
+
import { useSnackbar } from "notistack";
|
|
14
|
+
import Card from "../../../../components/Card";
|
|
15
|
+
import CardActions from "../../../../components/Card/CardActions";
|
|
16
|
+
import CardContent from "../../../../components/Card/CardContent";
|
|
17
|
+
import CardFieldText from "../../../../components/Card/CardFieldText";
|
|
18
|
+
import CardHeader from "../../../../components/Card/CardHeader";
|
|
19
|
+
import CardRow from "../../../../components/Card/CardRow";
|
|
20
|
+
import CardSaveButton from "../../../../components/Card/CardSaveButton";
|
|
21
|
+
import { Header } from "../../../../components/Header";
|
|
22
|
+
import { Page } from "../../../../components/Page";
|
|
23
|
+
import { Tab } from "../../../../components/Tab";
|
|
24
|
+
import { TabPanel } from "../../../../components/TabPanel";
|
|
25
|
+
import { TabPanels } from "../../../../components/TabPanels";
|
|
26
|
+
import { Tabs } from "../../../../components/Tabs";
|
|
27
|
+
import { TitleBar } from "../../../../components/TitleBar";
|
|
28
|
+
import Content, { LeftColumn } from "../../../../containers/Content";
|
|
29
|
+
import { useApi } from "../../../../contexts/ApiContext";
|
|
30
|
+
import { useI18n } from "../../../../contexts/I18nContext";
|
|
31
|
+
import { useRouter } from "../../../../contexts/RouterContext";
|
|
32
|
+
import { useUser } from "../../../../contexts/UserContext";
|
|
33
|
+
import { getFormErrors, ValidationError } from "../../../../util/form_validation";
|
|
34
|
+
import { hasPermission } from "../../../../util/has_permission";
|
|
35
|
+
import { CustomerType } from "../../types/member";
|
|
36
|
+
const MemberCreateCard = ({ onCreated }) => {
|
|
37
|
+
const { enqueueSnackbar } = useSnackbar();
|
|
38
|
+
const api = useApi();
|
|
39
|
+
const { t } = useI18n();
|
|
40
|
+
const { user } = useUser();
|
|
41
|
+
const [customerType, setCustomerType] = useState(CustomerType.PRIVATE);
|
|
42
|
+
const [sites, setSites] = useState([]);
|
|
43
|
+
const [siteCode, setSiteCode] = useState("");
|
|
44
|
+
const [countryOptions, setCountryOptions] = useState([]);
|
|
45
|
+
const [countryCode, setCountryCode] = useState("");
|
|
46
|
+
const [loadingSites, setLoadingSites] = useState(true);
|
|
47
|
+
const [includeBillingAddress, setIncludeBillingAddress] = useState(false);
|
|
48
|
+
const [fieldErrors, setFieldErrors] = useState({});
|
|
49
|
+
const canCreate = useMemo(() => hasPermission(user, "member.add_member"), [user]);
|
|
50
|
+
const regionDisplayNames = useMemo(() => {
|
|
51
|
+
if (typeof Intl === "undefined" || typeof Intl.DisplayNames === "undefined") {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
const locale = typeof navigator === "undefined" || !navigator.language ? "en" : navigator.language;
|
|
56
|
+
return new Intl.DisplayNames([locale], { type: "region" });
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
}, []);
|
|
62
|
+
const formatCountry = useCallback((code) => regionDisplayNames?.of(code) ?? code, [regionDisplayNames]);
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
let isMounted = true;
|
|
65
|
+
const action = api.operations["sites.site:list"];
|
|
66
|
+
if (!action) {
|
|
67
|
+
setLoadingSites(false);
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
(async () => {
|
|
71
|
+
try {
|
|
72
|
+
const response = await action.call();
|
|
73
|
+
if (!response.ok) {
|
|
74
|
+
throw new Error("fetching site options");
|
|
75
|
+
}
|
|
76
|
+
const raw = await response.json();
|
|
77
|
+
const siteList = Array.isArray(raw) ? raw : (raw.__root__ ?? []);
|
|
78
|
+
const normalized = siteList.map((site) => ({
|
|
79
|
+
code: site.CODE,
|
|
80
|
+
countryCodes: site.COUNTRY_CODES ?? [],
|
|
81
|
+
}));
|
|
82
|
+
if (!isMounted) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
setSites(normalized);
|
|
86
|
+
if (normalized.length > 0) {
|
|
87
|
+
const initialSite = normalized[0];
|
|
88
|
+
setSiteCode(initialSite.code);
|
|
89
|
+
setCountryOptions(initialSite.countryCodes);
|
|
90
|
+
setCountryCode(initialSite.countryCodes[0] ?? "");
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.error("[MEMBER_CREATE_CARD_SITES]", error);
|
|
95
|
+
if (isMounted) {
|
|
96
|
+
setSites([]);
|
|
97
|
+
setSiteCode("");
|
|
98
|
+
setCountryOptions([]);
|
|
99
|
+
setCountryCode("");
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
if (isMounted) {
|
|
104
|
+
setLoadingSites(false);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
})();
|
|
108
|
+
return () => {
|
|
109
|
+
isMounted = false;
|
|
110
|
+
};
|
|
111
|
+
}, [api]);
|
|
112
|
+
const handleSiteChange = useCallback((code) => {
|
|
113
|
+
setSiteCode(code);
|
|
114
|
+
const site = sites.find((s) => s.code === code);
|
|
115
|
+
const countries = site?.countryCodes ?? [];
|
|
116
|
+
setCountryOptions(countries);
|
|
117
|
+
setCountryCode(countries[0] ?? "");
|
|
118
|
+
}, [sites]);
|
|
119
|
+
const handleCountryChange = useCallback((code) => {
|
|
120
|
+
setCountryCode(code);
|
|
121
|
+
}, []);
|
|
122
|
+
useEffect(() => {
|
|
123
|
+
if (customerType === CustomerType.COMPANY) {
|
|
124
|
+
setIncludeBillingAddress(true);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
setIncludeBillingAddress(false);
|
|
128
|
+
}
|
|
129
|
+
}, [customerType]);
|
|
130
|
+
const handleSubmit = async (values) => {
|
|
131
|
+
setFieldErrors({});
|
|
132
|
+
const { street_address, street_address2, postal_code, city, country_code, region, care_of, ...rest } = values;
|
|
133
|
+
const isCompany = values.customer_type === CustomerType.COMPANY;
|
|
134
|
+
const includeAddress = isCompany || includeBillingAddress;
|
|
135
|
+
const body = {
|
|
136
|
+
...Object.fromEntries(Object.entries(rest).filter(([, value]) => value != null && value !== "" && value !== undefined)),
|
|
137
|
+
customer_type: values.customer_type ?? CustomerType.PRIVATE,
|
|
138
|
+
};
|
|
139
|
+
const requiredAddressFields = includeAddress
|
|
140
|
+
? {
|
|
141
|
+
street_address,
|
|
142
|
+
postal_code,
|
|
143
|
+
city,
|
|
144
|
+
country_code,
|
|
145
|
+
}
|
|
146
|
+
: {};
|
|
147
|
+
const hasRequiredAddressFields = Object.keys(requiredAddressFields).length === 0 ||
|
|
148
|
+
Object.values(requiredAddressFields).every(Boolean);
|
|
149
|
+
if (!hasRequiredAddressFields) {
|
|
150
|
+
const addressErrors = {};
|
|
151
|
+
for (const [key, value] of Object.entries(requiredAddressFields)) {
|
|
152
|
+
if (!value) {
|
|
153
|
+
addressErrors[key] = t("This field is required.");
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
setFieldErrors((prev) => ({ ...prev, ...addressErrors }));
|
|
157
|
+
enqueueSnackbar(isCompany
|
|
158
|
+
? t("Provide street address, postal code, city and country for company members.")
|
|
159
|
+
: t("Complete address fields or disable billing address."), { variant: "error" });
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
if (includeAddress) {
|
|
163
|
+
body.billing_address = Object.fromEntries(Object.entries({
|
|
164
|
+
street_address,
|
|
165
|
+
street_address2,
|
|
166
|
+
postal_code,
|
|
167
|
+
city,
|
|
168
|
+
country_code,
|
|
169
|
+
region,
|
|
170
|
+
care_of,
|
|
171
|
+
}).filter(([, value]) => value != null && value !== ""));
|
|
172
|
+
}
|
|
173
|
+
const action = api.operations["member.member:create"];
|
|
174
|
+
if (!action) {
|
|
175
|
+
throw new Error('Invalid action "member.member:create".');
|
|
176
|
+
}
|
|
177
|
+
const response = await action.call({ body });
|
|
178
|
+
if (!response.ok) {
|
|
179
|
+
console.error("[MEMBER_CREATE_CARD]", response);
|
|
180
|
+
const errors = await getFormErrors(response);
|
|
181
|
+
if (errors) {
|
|
182
|
+
setFieldErrors(errors.fieldErrors);
|
|
183
|
+
throw new ValidationError(errors.formErrors[0] ?? t("Invalid form input. Please correct the highlighted fields."), errors);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const createdMember = await response.json();
|
|
187
|
+
onCreated(createdMember);
|
|
188
|
+
return t("Member created successfully.");
|
|
189
|
+
};
|
|
190
|
+
const isCompany = customerType === CustomerType.COMPANY;
|
|
191
|
+
return (React.createElement(Card, { columns: 6, defaultEditing: canCreate, isEditable: canCreate, onSubmit: handleSubmit },
|
|
192
|
+
React.createElement(CardHeader, { title: t("Create Member") }),
|
|
193
|
+
React.createElement(CardContent, null,
|
|
194
|
+
React.createElement(CardRow, null,
|
|
195
|
+
React.createElement(Grid, { size: 3 }, sites.length > 0 ? (React.createElement(TextField, { fullWidth: true, required: true, select: true, disabled: loadingSites, helperText: loadingSites ? t("Loading site codes…") : fieldErrors.site_code, label: t("Site code"), name: "site_code", value: siteCode, onChange: (event) => handleSiteChange(event.target.value) }, sites.map((site) => (React.createElement(MenuItem, { key: site.code, value: site.code }, site.code))))) : (React.createElement(TextField, { fullWidth: true, required: true, helperText: loadingSites ? t("Loading site codes…") : t("No sites available"), label: t("Site code"), name: "site_code", value: siteCode, onChange: (event) => setSiteCode(event.target.value) }))),
|
|
196
|
+
React.createElement(Grid, { size: 3 },
|
|
197
|
+
React.createElement(FormControl, { fullWidth: true, component: "fieldset" },
|
|
198
|
+
React.createElement(FormLabel, null, t("Customer type")),
|
|
199
|
+
React.createElement(RadioGroup, { row: true, name: "customer_type", value: customerType, onChange: (event) => setCustomerType(event.target.value) },
|
|
200
|
+
React.createElement(FormControlLabel, { control: React.createElement(Radio, { required: true }), label: t("Private"), value: CustomerType.PRIVATE }),
|
|
201
|
+
React.createElement(FormControlLabel, { control: React.createElement(Radio, null), label: t("Company"), value: CustomerType.COMPANY }))))),
|
|
202
|
+
React.createElement(CardRow, null,
|
|
203
|
+
React.createElement(CardFieldText, { formName: "identification_number", label: t("Identification number"), size: 6, value: "" })),
|
|
204
|
+
customerType === CustomerType.COMPANY && (React.createElement(CardRow, null,
|
|
205
|
+
React.createElement(CardFieldText, { required: true, error: Boolean(fieldErrors.company_name), formName: "company_name", helperText: fieldErrors.company_name, label: t("Company name"), size: 6, value: "" }))),
|
|
206
|
+
React.createElement(CardRow, null,
|
|
207
|
+
React.createElement(CardFieldText, { error: Boolean(fieldErrors.given_name), formName: "given_name", helperText: fieldErrors.given_name, label: t("First name"), required: customerType === CustomerType.PRIVATE, size: 3, value: "" }),
|
|
208
|
+
React.createElement(CardFieldText, { error: Boolean(fieldErrors.family_name), formName: "family_name", helperText: fieldErrors.family_name, label: t("Last name"), required: customerType === CustomerType.PRIVATE, size: 3, value: "" })),
|
|
209
|
+
React.createElement(CardRow, null,
|
|
210
|
+
React.createElement(CardFieldText, { required: true, error: Boolean(fieldErrors.email), formName: "email", helperText: fieldErrors.email, label: t("Email"), size: 3, value: "" }),
|
|
211
|
+
React.createElement(CardFieldText, { error: Boolean(fieldErrors.phone), formName: "phone", helperText: fieldErrors.phone, label: t("Phone"), size: 3, value: "" })),
|
|
212
|
+
React.createElement(CardRow, null,
|
|
213
|
+
React.createElement(Grid, { size: 6 },
|
|
214
|
+
React.createElement(Typography, { sx: { fontWeight: 700 }, variant: "body1" }, t("Billing address")))),
|
|
215
|
+
!isCompany && (React.createElement(CardRow, null,
|
|
216
|
+
React.createElement(FormControlLabel, { control: React.createElement(Switch, { checked: includeBillingAddress, onChange: (_, checked) => setIncludeBillingAddress(checked) }), label: t("Add billing address") }))),
|
|
217
|
+
(isCompany || includeBillingAddress) && (React.createElement(React.Fragment, null,
|
|
218
|
+
React.createElement(CardRow, null,
|
|
219
|
+
React.createElement(CardFieldText, { error: Boolean(fieldErrors.street_address), formName: "street_address", helperText: fieldErrors.street_address, label: t("Street Address"), required: isCompany || includeBillingAddress, size: 3, value: "" }),
|
|
220
|
+
React.createElement(CardFieldText, { formName: "street_address2", label: t("Street Address 2"), size: 3, value: "" })),
|
|
221
|
+
React.createElement(CardRow, null,
|
|
222
|
+
React.createElement(CardFieldText, { formName: "care_of", label: t("C/O"), size: 3, value: "" }),
|
|
223
|
+
React.createElement(CardFieldText, { error: Boolean(fieldErrors.postal_code), formName: "postal_code", helperText: fieldErrors.postal_code, label: t("Postal Code"), required: isCompany || includeBillingAddress, size: 3, value: "" })),
|
|
224
|
+
React.createElement(CardRow, null,
|
|
225
|
+
React.createElement(CardFieldText, { error: Boolean(fieldErrors.city), formName: "city", helperText: fieldErrors.city, label: t("City"), required: isCompany || includeBillingAddress, size: 3, value: "" }),
|
|
226
|
+
React.createElement(CardFieldText, { formName: "region", label: t("Region"), size: 3, value: "" })),
|
|
227
|
+
React.createElement(CardRow, null, countryOptions.length > 0 ? (React.createElement(Grid, { size: 3 },
|
|
228
|
+
React.createElement(TextField, { fullWidth: true, select: true, error: Boolean(fieldErrors.country_code), helperText: fieldErrors.country_code, label: t("Country"), name: "country_code", required: isCompany || includeBillingAddress, value: countryCode, onChange: (event) => handleCountryChange(event.target.value) }, countryOptions.map((code) => (React.createElement(MenuItem, { key: code, value: code }, formatCountry(code))))))) : (React.createElement(Grid, { size: 3 },
|
|
229
|
+
React.createElement(TextField, { fullWidth: true, error: Boolean(fieldErrors.country_code), helperText: loadingSites
|
|
230
|
+
? t("Loading countries…")
|
|
231
|
+
: t("No countries configured for this site"), label: t("Country"), name: "country_code", required: isCompany || includeBillingAddress, value: countryCode, onChange: (event) => handleCountryChange(event.target.value) }))))))),
|
|
232
|
+
React.createElement(CardActions, null,
|
|
233
|
+
React.createElement(CardSaveButton, { label: t("Create") }))));
|
|
234
|
+
};
|
|
235
|
+
const MemberCreatePage = () => {
|
|
236
|
+
const { navigate } = useRouter();
|
|
237
|
+
const { t } = useI18n();
|
|
238
|
+
return (React.createElement(Page, null,
|
|
239
|
+
React.createElement(Header, { variant: "opaque" },
|
|
240
|
+
React.createElement(TitleBar, { title: t("Create Member") }),
|
|
241
|
+
React.createElement(Tabs, null,
|
|
242
|
+
React.createElement(Tab, { key: "default", icon: React.createElement(CardMembershipIcon, null), label: t("Member"), value: "default" }))),
|
|
243
|
+
React.createElement(TabPanels, null,
|
|
244
|
+
React.createElement(TabPanel, { key: "default", value: "default" },
|
|
245
|
+
React.createElement(Content, { layout: "fixedWidth" },
|
|
246
|
+
React.createElement(LeftColumn, null,
|
|
247
|
+
React.createElement(MemberCreateCard, { onCreated: (member) => navigate("member.member:detail", { params: { id: member.id } }) })))))));
|
|
248
|
+
};
|
|
249
|
+
export default MemberCreatePage;
|
|
250
|
+
//# sourceMappingURL=create.js.map
|