@churchapps/apphelper 0.2.34 → 0.2.35

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.
@@ -1,9 +1,17 @@
1
1
  import React from "react";
2
2
  import { PersonInterface } from "@churchapps/helpers";
3
- interface Props {
3
+ interface CommonProps {
4
4
  navigateOnCreate?: boolean;
5
5
  onCreate?: (person: PersonInterface) => void;
6
6
  }
7
- export declare function CreatePerson({ navigateOnCreate, onCreate }: Props): React.JSX.Element;
7
+ type ConditionalProps = {
8
+ showInModal: true;
9
+ onClose: () => void;
10
+ } | {
11
+ showInModal?: false;
12
+ onClose?: never;
13
+ };
14
+ type Props = CommonProps & ConditionalProps;
15
+ export declare function CreatePerson({ navigateOnCreate, onCreate, showInModal, ...props }: Props): React.JSX.Element;
8
16
  export {};
9
17
  //# sourceMappingURL=CreatePerson.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreatePerson.d.ts","sourceRoot":"","sources":["../../src/components/CreatePerson.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAe,eAAe,EAAsB,MAAM,qBAAqB,CAAC;AAKvF,UAAU,KAAK;IACb,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;CAC9C;AAED,wBAAgB,YAAY,CAAC,EAAE,gBAAuB,EAAE,QAAmB,EAAE,EAAE,KAAK,qBAkEnF"}
1
+ {"version":3,"file":"CreatePerson.d.ts","sourceRoot":"","sources":["../../src/components/CreatePerson.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAe,eAAe,EAAsB,MAAM,qBAAqB,CAAC;AAKvF,UAAU,WAAW;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;CAC9C;AAED,KAAK,gBAAgB,GACjB;IAAE,WAAW,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAAE,GAC3C;IAAE,WAAW,CAAC,EAAE,KAAK,CAAC;IAAC,OAAO,CAAC,EAAE,KAAK,CAAC;CAAE,CAAA;AAE7C,KAAK,KAAK,GAAG,WAAW,GAAG,gBAAgB,CAAA;AAE3C,wBAAgB,YAAY,CAAC,EAAE,gBAAuB,EAAE,QAAmB,EAAE,WAAmB,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,qBAqHlH"}
@@ -1,4 +1,24 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __rest = (this && this.__rest) || function (s, e) {
12
+ var t = {};
13
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
14
+ t[p] = s[p];
15
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
16
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
17
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
18
+ t[p[i]] = s[p[i]];
19
+ }
20
+ return t;
21
+ };
2
22
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
23
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
24
  };
@@ -11,7 +31,8 @@ const helpers_2 = require("@churchapps/helpers");
11
31
  const material_1 = require("@mui/material");
12
32
  const ErrorMessages_1 = require("./ErrorMessages");
13
33
  const useMountedState_1 = require("../hooks/useMountedState");
14
- function CreatePerson({ navigateOnCreate = true, onCreate = () => { } }) {
34
+ function CreatePerson(_a) {
35
+ var { navigateOnCreate = true, onCreate = () => { }, showInModal = false } = _a, props = __rest(_a, ["navigateOnCreate", "onCreate", "showInModal"]);
15
36
  const navigate = (0, react_router_dom_1.useNavigate)();
16
37
  const [person, setPerson] = react_1.default.useState({ name: { first: "", last: "" }, contactInfo: {} });
17
38
  const [errors, setErrors] = react_1.default.useState([]);
@@ -38,42 +59,90 @@ function CreatePerson({ navigateOnCreate = true, onCreate = () => { } }) {
38
59
  case "last":
39
60
  p.name.last = value;
40
61
  break;
62
+ case "email":
63
+ p.contactInfo.email = value;
64
+ break;
41
65
  }
42
66
  setPerson(p);
43
67
  };
44
- function handleSubmit() {
68
+ const validateEmail = (email) => (/^\w+([.-]?\w+)*@\w+([.-]?\w+)*(.\w{2,3})+$/.test(email));
69
+ const checkExistingEmail = () => __awaiter(this, void 0, void 0, function* () {
70
+ const result = yield helpers_1.ApiHelper.get("/people/search?email=" + person.contactInfo.email, "MembershipApi");
71
+ return result[0];
72
+ });
73
+ const handleSave = () => {
45
74
  let household = { name: person.name.last };
46
- if (validate()) {
47
- setIsSubmitting(true);
48
- helpers_1.ApiHelper.post("/households", [household], "MembershipApi").then(data => {
49
- household.id = data[0].id;
50
- person.householdId = household.id;
51
- person.name.display = [person.name.first, person.name.last].join(" ");
52
- helpers_1.ApiHelper.post("/people", [person], "MembershipApi").then(data => {
53
- person.id = data[0].id;
54
- onCreate(person);
55
- setPerson(Object.assign(Object.assign({}, person), { name: { first: "", last: "" } }));
56
- navigateOnCreate && navigate("/people/" + person.id);
57
- }).finally(() => {
58
- if (isMounted()) {
59
- setIsSubmitting(false);
60
- }
61
- });
75
+ setIsSubmitting(true);
76
+ helpers_1.ApiHelper.post("/households", [household], "MembershipApi").then(data => {
77
+ household.id = data[0].id;
78
+ person.householdId = household.id;
79
+ person.name.display = [person.name.first, person.name.last].join(" ");
80
+ helpers_1.ApiHelper.post("/people", [person], "MembershipApi").then(data => {
81
+ person.id = data[0].id;
82
+ onCreate(person);
83
+ setPerson(Object.assign(Object.assign({}, person), { name: { first: "", last: "" }, contactInfo: { email: "" } }));
84
+ navigateOnCreate && navigate("/people/" + person.id);
85
+ }).finally(() => {
86
+ if (isMounted()) {
87
+ setIsSubmitting(false);
88
+ showInModal && props.onClose();
89
+ }
62
90
  });
63
- }
91
+ });
92
+ };
93
+ function handleSubmit() {
94
+ var _a, _b;
95
+ return __awaiter(this, void 0, void 0, function* () {
96
+ if (validate()) {
97
+ if (person.contactInfo.email && (((_a = person.contactInfo.email) === null || _a === void 0 ? void 0 : _a.trim()) !== undefined || ((_b = person.contactInfo.email) === null || _b === void 0 ? void 0 : _b.trim()) !== "")) {
98
+ if (!validateEmail(person.contactInfo.email)) {
99
+ setErrors(["Please enter a valid email address."]);
100
+ }
101
+ else {
102
+ const existingPerson = yield checkExistingEmail();
103
+ if (existingPerson) {
104
+ if (window.confirm(`${existingPerson.name.display} already exists with an email of ${existingPerson.contactInfo.email}. Are you sure you wish to add ${person.name.first} ${person.name.last}?`)) {
105
+ handleSave();
106
+ }
107
+ }
108
+ else {
109
+ handleSave();
110
+ }
111
+ }
112
+ }
113
+ else {
114
+ handleSave();
115
+ }
116
+ }
117
+ });
64
118
  }
65
119
  if (!helpers_1.UserHelper.checkAccess(helpers_2.Permissions.membershipApi.people.edit))
66
120
  return null;
121
+ if (showInModal) {
122
+ return (react_1.default.createElement(react_1.default.Fragment, null,
123
+ react_1.default.createElement(ErrorMessages_1.ErrorMessages, { errors: errors }),
124
+ react_1.default.createElement(material_1.Dialog, { open: true, onClose: props.onClose, fullWidth: true },
125
+ react_1.default.createElement(material_1.DialogTitle, null, helpers_1.Locale.label("createPerson.addNewPerson")),
126
+ react_1.default.createElement(material_1.DialogContent, null,
127
+ react_1.default.createElement(material_1.TextField, { margin: "dense", required: true, fullWidth: true, type: "text", "aria-label": "firstName", label: helpers_1.Locale.label("createPerson.firstName"), name: "first", value: person.name.first || "", onChange: handleChange, onKeyDown: (e) => e.key === "Enter" && handleSubmit }),
128
+ react_1.default.createElement(material_1.TextField, { margin: "dense", required: true, fullWidth: true, type: "text", "aria-label": "lastName", label: helpers_1.Locale.label("createPerson.lastName"), name: "last", value: person.name.last || "", onChange: handleChange, onKeyDown: (e) => e.key === "Enter" && handleSubmit }),
129
+ react_1.default.createElement(material_1.TextField, { margin: "dense", fullWidth: true, type: "text", "aria-label": "email", label: helpers_1.Locale.label("createPerson.email"), name: "email", value: person.contactInfo.email || "", onChange: handleChange, onKeyDown: (e) => e.key === "Enter" && handleSubmit })),
130
+ react_1.default.createElement(material_1.DialogActions, null,
131
+ react_1.default.createElement(material_1.Button, { onClick: () => { props.onClose(); } }, helpers_1.Locale.label("common.cancel")),
132
+ react_1.default.createElement(material_1.Button, { type: "submit", variant: "contained", disabled: isSubmitting, onClick: handleSubmit }, helpers_1.Locale.label("common.add"))))));
133
+ }
67
134
  return (react_1.default.createElement("div", null,
68
135
  react_1.default.createElement("p", { className: "pl-1 mb-3 text-dark" },
69
136
  react_1.default.createElement("b", null, helpers_1.Locale.label("createPerson.addNewPerson"))),
70
137
  react_1.default.createElement(ErrorMessages_1.ErrorMessages, { errors: errors }),
71
138
  react_1.default.createElement(material_1.Grid, { container: true, spacing: 3, alignItems: "center" },
72
- react_1.default.createElement(material_1.Grid, { item: true, md: 4, xs: 12 },
73
- react_1.default.createElement(material_1.TextField, { size: "small", margin: "none", fullWidth: true, type: "text", "aria-label": "firstName", label: helpers_1.Locale.label("createPerson.firstName"), name: "first", value: person.name.first || "", onChange: handleChange, onKeyDown: (e) => e.key === "Enter" && handleSubmit })),
74
- react_1.default.createElement(material_1.Grid, { item: true, md: 4, xs: 12 },
75
- react_1.default.createElement(material_1.TextField, { size: "small", margin: "none", fullWidth: true, type: "text", "aria-label": "lastName", label: helpers_1.Locale.label("createPerson.lastName"), name: "last", value: person.name.last || "", onChange: handleChange, onKeyDown: (e) => e.key === "Enter" && handleSubmit })),
76
- react_1.default.createElement(material_1.Grid, { item: true, md: 4, xs: 12 },
139
+ react_1.default.createElement(material_1.Grid, { item: true, md: 6, xs: 12 },
140
+ react_1.default.createElement(material_1.TextField, { size: "small", margin: "none", required: true, fullWidth: true, type: "text", "aria-label": "firstName", label: helpers_1.Locale.label("createPerson.firstName"), name: "first", value: person.name.first || "", onChange: handleChange, onKeyDown: (e) => e.key === "Enter" && handleSubmit })),
141
+ react_1.default.createElement(material_1.Grid, { item: true, md: 6, xs: 12 },
142
+ react_1.default.createElement(material_1.TextField, { size: "small", margin: "none", required: true, fullWidth: true, type: "text", "aria-label": "lastName", label: helpers_1.Locale.label("createPerson.lastName"), name: "last", value: person.name.last || "", onChange: handleChange, onKeyDown: (e) => e.key === "Enter" && handleSubmit })),
143
+ react_1.default.createElement(material_1.Grid, { item: true, xs: 12 },
144
+ react_1.default.createElement(material_1.TextField, { size: "small", margin: "none", fullWidth: true, type: "text", "aria-label": "email", label: helpers_1.Locale.label("createPerson.email"), name: "email", value: person.contactInfo.email || "", onChange: handleChange, onKeyDown: (e) => e.key === "Enter" && handleSubmit })),
145
+ react_1.default.createElement(material_1.Grid, { item: true, xs: 12 },
77
146
  react_1.default.createElement(material_1.Button, { type: "submit", fullWidth: true, variant: "contained", disabled: isSubmitting, onClick: handleSubmit }, helpers_1.Locale.label("common.add"))))));
78
147
  }
79
148
  exports.CreatePerson = CreatePerson;
@@ -1 +1 @@
1
- {"version":3,"file":"CreatePerson.js","sourceRoot":"","sources":["../../src/components/CreatePerson.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CreatePerson.js","sourceRoot":"","sources":["../../src/components/CreatePerson.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PersonAdd.d.ts","sourceRoot":"","sources":["../../src/components/PersonAdd.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAKrD,UAAU,KAAK;IACb,WAAW,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/C,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,WAAW,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,MAAM,CAAC;IACjD,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAwDrC,CAAA"}
1
+ {"version":3,"file":"PersonAdd.d.ts","sourceRoot":"","sources":["../../src/components/PersonAdd.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAKrD,UAAU,KAAK;IACb,WAAW,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/C,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,WAAW,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,MAAM,CAAC;IACjD,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA0DrC,CAAA"}
@@ -33,6 +33,7 @@ const PersonAdd = ({ addFunction, getPhotoUrl, searchClicked, filterList = [], i
33
33
  const [searchResults, setSearchResults] = (0, react_1.useState)([]);
34
34
  const [searchText, setSearchText] = (0, react_1.useState)("");
35
35
  const [hasSearched, setHasSearched] = (0, react_1.useState)(false);
36
+ const [open, setOpen] = (0, react_1.useState)(false);
36
37
  const handleChange = (e) => { e.preventDefault(); setHasSearched(false); setSearchText(e.currentTarget.value); };
37
38
  const handleKeyDown = (e) => { if (e.key === "Enter") {
38
39
  e.preventDefault();
@@ -76,9 +77,13 @@ const PersonAdd = ({ addFunction, getPhotoUrl, searchClicked, filterList = [], i
76
77
  }
77
78
  return (react_1.default.createElement(react_1.default.Fragment, null,
78
79
  react_1.default.createElement(material_1.TextField, { fullWidth: true, name: "personAddText", label: helpers_1.Locale.label("person.person"), value: searchText, onChange: handleChange, onKeyDown: handleKeyDown, InputProps: { endAdornment: react_1.default.createElement(material_1.Button, { variant: "contained", id: "searchButton", "data-cy": "search-button", onClick: handleSearch }, helpers_1.Locale.label("common.search")) } }),
79
- showCreatePersonOnNotFound && hasSearched && searchText && searchResults.length === 0 && (react_1.default.createElement(CreatePerson_1.CreatePerson, { navigateOnCreate: false, onCreate: person => { setSearchText(""); setSearchResults([person]); } })),
80
+ showCreatePersonOnNotFound && hasSearched && searchText && searchResults.length === 0 && (react_1.default.createElement(material_1.Typography, { sx: { marginTop: "7px" } },
81
+ helpers_1.Locale.label("person.noRec"),
82
+ " ",
83
+ react_1.default.createElement("a", { href: "about:blank", onClick: (e) => { e.preventDefault(); setOpen(true); } }, helpers_1.Locale.label("createPerson.addNewPerson")))),
80
84
  react_1.default.createElement(material_1.Table, { size: "small", id: "householdMemberAddTable" },
81
- react_1.default.createElement(material_1.TableBody, null, rows))));
85
+ react_1.default.createElement(material_1.TableBody, null, rows)),
86
+ open && react_1.default.createElement(CreatePerson_1.CreatePerson, { showInModal: true, onClose: () => { setOpen(false); }, navigateOnCreate: false, onCreate: person => { setSearchText(""); setSearchResults([person]); } })));
82
87
  };
83
88
  exports.PersonAdd = PersonAdd;
84
89
  //# sourceMappingURL=PersonAdd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PersonAdd.js","sourceRoot":"","sources":["../../src/components/PersonAdd.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PersonAdd.js","sourceRoot":"","sources":["../../src/components/PersonAdd.tsx"],"names":[],"mappings":"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"}
@@ -29,7 +29,8 @@
29
29
  "createPerson": {
30
30
  "addNewPerson": "Add a New Person",
31
31
  "firstName": "First Name",
32
- "lastName": "Last Name"
32
+ "lastName": "Last Name",
33
+ "email": "Email"
33
34
  },
34
35
  "donation": {
35
36
  "bankForm": {
@@ -214,7 +215,8 @@
214
215
  "lastName": "Last Name",
215
216
  "name": "Name",
216
217
  "person": "Person",
217
- "years": "years"
218
+ "years": "years",
219
+ "noRec": "Don't have a person record?"
218
220
  },
219
221
  "reporting": {
220
222
  "detailedSummary": "Detailed Summary",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@churchapps/apphelper",
3
- "version": "0.2.34",
3
+ "version": "0.2.35",
4
4
  "description": "Library of helper functions for React and NextJS ChurchApps",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -29,7 +29,8 @@
29
29
  "createPerson": {
30
30
  "addNewPerson": "Add a New Person",
31
31
  "firstName": "First Name",
32
- "lastName": "Last Name"
32
+ "lastName": "Last Name",
33
+ "email": "Email"
33
34
  },
34
35
  "donation": {
35
36
  "bankForm": {
@@ -214,7 +215,8 @@
214
215
  "lastName": "Last Name",
215
216
  "name": "Name",
216
217
  "person": "Person",
217
- "years": "years"
218
+ "years": "years",
219
+ "noRec": "Don't have a person record?"
218
220
  },
219
221
  "reporting": {
220
222
  "detailedSummary": "Detailed Summary",
@@ -2,16 +2,22 @@ import React from "react"
2
2
  import { useNavigate } from "react-router-dom"
3
3
  import { UserHelper, ApiHelper, Locale } from "../helpers";
4
4
  import { Permissions, PersonInterface, HouseholdInterface } from "@churchapps/helpers";
5
- import { Button, Grid, TextField } from "@mui/material"
5
+ import { Button, Dialog, DialogActions, DialogContent, DialogTitle, Grid, TextField } from "@mui/material"
6
6
  import { ErrorMessages } from "./ErrorMessages"
7
7
  import { useMountedState } from "../hooks/useMountedState"
8
8
 
9
- interface Props {
9
+ interface CommonProps {
10
10
  navigateOnCreate?: boolean;
11
11
  onCreate?: (person: PersonInterface) => void;
12
12
  }
13
13
 
14
- export function CreatePerson({ navigateOnCreate = true, onCreate = () => {} }: Props) {
14
+ type ConditionalProps =
15
+ | { showInModal: true; onClose: () => void; }
16
+ | { showInModal?: false; onClose?: never; }
17
+
18
+ type Props = CommonProps & ConditionalProps
19
+
20
+ export function CreatePerson({ navigateOnCreate = true, onCreate = () => {}, showInModal = false, ...props }: Props) {
15
21
  const navigate = useNavigate()
16
22
  const [person, setPerson] = React.useState<PersonInterface>({ name: { first: "", last: "" }, contactInfo: {} });
17
23
  const [errors, setErrors] = React.useState<string[]>([]);
@@ -33,45 +39,96 @@ export function CreatePerson({ navigateOnCreate = true, onCreate = () => {} }: P
33
39
  switch (e.target.name) {
34
40
  case "first": p.name.first = value; break;
35
41
  case "last": p.name.last = value; break;
42
+ case "email": p.contactInfo.email = value; break;
36
43
  }
37
44
  setPerson(p);
38
45
  }
39
46
 
40
- function handleSubmit() {
47
+ const validateEmail = (email: string) => (/^\w+([.-]?\w+)*@\w+([.-]?\w+)*(.\w{2,3})+$/.test(email));
48
+
49
+ const checkExistingEmail = async () => {
50
+ const result = await ApiHelper.get("/people/search?email=" + person.contactInfo.email, "MembershipApi");
51
+ return result[0];
52
+ }
53
+
54
+ const handleSave = () => {
41
55
  let household = { name: person.name.last } as HouseholdInterface;
56
+
57
+ setIsSubmitting(true);
58
+ ApiHelper.post("/households", [household], "MembershipApi").then(data => {
59
+ household.id = data[0].id;
60
+ person.householdId = household.id;
61
+ person.name.display = [person.name.first, person.name.last].join(" ");
62
+ ApiHelper.post("/people", [person], "MembershipApi").then(data => {
63
+ person.id = data[0].id
64
+ onCreate(person);
65
+ setPerson({...person, name: { first: "", last: "" }, contactInfo: { email: "" }});
66
+ navigateOnCreate && navigate("/people/" + person.id);
67
+ }).finally(() => {
68
+ if (isMounted()) {
69
+ setIsSubmitting(false);
70
+ showInModal && props.onClose();
71
+ }
72
+ });
73
+ });
74
+ }
75
+
76
+ async function handleSubmit() {
42
77
  if (validate()) {
43
- setIsSubmitting(true);
44
- ApiHelper.post("/households", [household], "MembershipApi").then(data => {
45
- household.id = data[0].id;
46
- person.householdId = household.id;
47
- person.name.display = [person.name.first, person.name.last].join(" ");
48
- ApiHelper.post("/people", [person], "MembershipApi").then(data => {
49
- person.id = data[0].id
50
- onCreate(person);
51
- setPerson({...person, name: { first: "", last: "" }});
52
- navigateOnCreate && navigate("/people/" + person.id);
53
- }).finally(() => {
54
- if (isMounted()) {
55
- setIsSubmitting(false);
78
+ if (person.contactInfo.email && (person.contactInfo.email?.trim() !== undefined || person.contactInfo.email?.trim() !== "")) {
79
+ if (!validateEmail(person.contactInfo.email)) {
80
+ setErrors(["Please enter a valid email address."]);
81
+ } else {
82
+ const existingPerson = await checkExistingEmail();
83
+ if (existingPerson) {
84
+ if (window.confirm(`${existingPerson.name.display} already exists with an email of ${existingPerson.contactInfo.email}. Are you sure you wish to add ${person.name.first} ${person.name.last}?`)) {
85
+ handleSave();
86
+ }
87
+ } else {
88
+ handleSave();
56
89
  }
57
- });
58
- });
90
+ }
91
+ } else {
92
+ handleSave();
93
+ }
59
94
  }
60
95
  }
61
96
 
62
97
  if (!UserHelper.checkAccess(Permissions.membershipApi.people.edit)) return null;
98
+ if (showInModal) {
99
+ return(
100
+ <>
101
+ <ErrorMessages errors={errors} />
102
+ <Dialog open onClose={props.onClose} fullWidth>
103
+ <DialogTitle>{Locale.label("createPerson.addNewPerson")}</DialogTitle>
104
+ <DialogContent>
105
+ <TextField margin="dense" required fullWidth type="text" aria-label="firstName" label={Locale.label("createPerson.firstName")} name="first" value={person.name.first || ""} onChange={handleChange} onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => e.key === "Enter" && handleSubmit} />
106
+ <TextField margin="dense" required fullWidth type="text" aria-label="lastName" label={Locale.label("createPerson.lastName")} name="last" value={person.name.last || ""} onChange={handleChange} onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => e.key === "Enter" && handleSubmit} />
107
+ <TextField margin="dense" fullWidth type="text" aria-label="email" label={Locale.label("createPerson.email")} name="email" value={person.contactInfo.email || ""} onChange={handleChange} onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => e.key === "Enter" && handleSubmit} />
108
+ </DialogContent>
109
+ <DialogActions>
110
+ <Button onClick={() => { props.onClose(); }}>{Locale.label("common.cancel")}</Button>
111
+ <Button type="submit" variant="contained" disabled={isSubmitting} onClick={handleSubmit}>{Locale.label("common.add")}</Button>
112
+ </DialogActions>
113
+ </Dialog>
114
+ </>
115
+ )
116
+ }
63
117
  return (
64
118
  <div>
65
119
  <p className="pl-1 mb-3 text-dark"><b>{Locale.label("createPerson.addNewPerson")}</b></p>
66
120
  <ErrorMessages errors={errors} />
67
121
  <Grid container spacing={3} alignItems="center">
68
- <Grid item md={4} xs={12}>
69
- <TextField size="small" margin="none" fullWidth type="text" aria-label="firstName" label={Locale.label("createPerson.firstName")} name="first" value={person.name.first || ""} onChange={handleChange} onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => e.key === "Enter" && handleSubmit} />
122
+ <Grid item md={6} xs={12}>
123
+ <TextField size="small" margin="none" required fullWidth type="text" aria-label="firstName" label={Locale.label("createPerson.firstName")} name="first" value={person.name.first || ""} onChange={handleChange} onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => e.key === "Enter" && handleSubmit} />
124
+ </Grid>
125
+ <Grid item md={6} xs={12}>
126
+ <TextField size="small" margin="none" required fullWidth type="text" aria-label="lastName" label={Locale.label("createPerson.lastName")} name="last" value={person.name.last || ""} onChange={handleChange} onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => e.key === "Enter" && handleSubmit} />
70
127
  </Grid>
71
- <Grid item md={4} xs={12}>
72
- <TextField size="small" margin="none" fullWidth type="text" aria-label="lastName" label={Locale.label("createPerson.lastName")} name="last" value={person.name.last || ""} onChange={handleChange} onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => e.key === "Enter" && handleSubmit} />
128
+ <Grid item xs={12}>
129
+ <TextField size="small" margin="none" fullWidth type="text" aria-label="email" label={Locale.label("createPerson.email")} name="email" value={person.contactInfo.email || ""} onChange={handleChange} onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => e.key === "Enter" && handleSubmit} />
73
130
  </Grid>
74
- <Grid item md={4} xs={12}>
131
+ <Grid item xs={12}>
75
132
  <Button type="submit" fullWidth variant="contained" disabled={isSubmitting} onClick={handleSubmit}>{Locale.label("common.add")}</Button>
76
133
  </Grid>
77
134
  </Grid>
@@ -1,7 +1,7 @@
1
1
  import React, { useState } from "react";
2
2
  import { ApiHelper, Locale } from "../helpers";
3
3
  import { PersonInterface } from "@churchapps/helpers"
4
- import { TextField, Button, Table, TableBody, TableRow, TableCell } from "@mui/material";
4
+ import { TextField, Button, Table, TableBody, TableRow, TableCell, Typography } from "@mui/material";
5
5
  import { SmallButton } from "./SmallButton";
6
6
  import { CreatePerson } from "./CreatePerson";
7
7
 
@@ -20,6 +20,7 @@ export const PersonAdd: React.FC<Props> = ({ addFunction, getPhotoUrl, searchCli
20
20
  const [searchResults, setSearchResults] = useState<PersonInterface[]>([]);
21
21
  const [searchText, setSearchText] = useState("");
22
22
  const [hasSearched, setHasSearched] = useState<boolean>(false);
23
+ const [open, setOpen] = useState<boolean>(false);
23
24
 
24
25
  const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => { e.preventDefault(); setHasSearched(false); setSearchText(e.currentTarget.value); }
25
26
  const handleKeyDown = (e: React.KeyboardEvent<any>) => { if (e.key === "Enter") { e.preventDefault(); handleSearch(null); } }
@@ -67,9 +68,10 @@ export const PersonAdd: React.FC<Props> = ({ addFunction, getPhotoUrl, searchCli
67
68
  InputProps={{ endAdornment: <Button variant="contained" id="searchButton" data-cy="search-button" onClick={handleSearch}>{Locale.label("common.search")}</Button> }}
68
69
  />
69
70
  {showCreatePersonOnNotFound && hasSearched && searchText && searchResults.length === 0 && (
70
- <CreatePerson navigateOnCreate={false} onCreate={person => { setSearchText(""); setSearchResults([person]) }} />
71
+ <Typography sx={{ marginTop: "7px" }}>{Locale.label("person.noRec")} <a href="about:blank" onClick={(e) => { e.preventDefault(); setOpen(true); }}>{Locale.label("createPerson.addNewPerson")}</a></Typography>
71
72
  )}
72
73
  <Table size="small" id="householdMemberAddTable"><TableBody>{rows}</TableBody></Table>
74
+ {open && <CreatePerson showInModal onClose={() => { setOpen(false); }} navigateOnCreate={false} onCreate={person => { setSearchText(""); setSearchResults([person]) }} />}
73
75
  </>
74
76
  );
75
77
  }