@churchapps/apphelper-login 0.4.13

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.
Files changed (73) hide show
  1. package/README.md +104 -0
  2. package/dist/LoginPage.d.ts +25 -0
  3. package/dist/LoginPage.d.ts.map +1 -0
  4. package/dist/LoginPage.js +248 -0
  5. package/dist/LoginPage.js.map +1 -0
  6. package/dist/LogoutPage.d.ts +9 -0
  7. package/dist/LogoutPage.d.ts.map +1 -0
  8. package/dist/LogoutPage.js +33 -0
  9. package/dist/LogoutPage.js.map +1 -0
  10. package/dist/components/Forgot.d.ts +8 -0
  11. package/dist/components/Forgot.d.ts.map +1 -0
  12. package/dist/components/Forgot.js +127 -0
  13. package/dist/components/Forgot.js.map +1 -0
  14. package/dist/components/Login.d.ts +15 -0
  15. package/dist/components/Login.d.ts.map +1 -0
  16. package/dist/components/Login.js +126 -0
  17. package/dist/components/Login.js.map +1 -0
  18. package/dist/components/LoginSetPassword.d.ts +13 -0
  19. package/dist/components/LoginSetPassword.d.ts.map +1 -0
  20. package/dist/components/LoginSetPassword.js +167 -0
  21. package/dist/components/LoginSetPassword.js.map +1 -0
  22. package/dist/components/Register.d.ts +12 -0
  23. package/dist/components/Register.d.ts.map +1 -0
  24. package/dist/components/Register.js +217 -0
  25. package/dist/components/Register.js.map +1 -0
  26. package/dist/components/SelectChurchModal.d.ts +14 -0
  27. package/dist/components/SelectChurchModal.d.ts.map +1 -0
  28. package/dist/components/SelectChurchModal.js +39 -0
  29. package/dist/components/SelectChurchModal.js.map +1 -0
  30. package/dist/components/SelectChurchRegister.d.ts +11 -0
  31. package/dist/components/SelectChurchRegister.d.ts.map +1 -0
  32. package/dist/components/SelectChurchRegister.js +83 -0
  33. package/dist/components/SelectChurchRegister.js.map +1 -0
  34. package/dist/components/SelectChurchSearch.d.ts +10 -0
  35. package/dist/components/SelectChurchSearch.d.ts.map +1 -0
  36. package/dist/components/SelectChurchSearch.js +61 -0
  37. package/dist/components/SelectChurchSearch.js.map +1 -0
  38. package/dist/components/SelectableChurch.d.ts +9 -0
  39. package/dist/components/SelectableChurch.d.ts.map +1 -0
  40. package/dist/components/SelectableChurch.js +34 -0
  41. package/dist/components/SelectableChurch.js.map +1 -0
  42. package/dist/helpers/AnalyticsHelper.d.ts +7 -0
  43. package/dist/helpers/AnalyticsHelper.d.ts.map +1 -0
  44. package/dist/helpers/AnalyticsHelper.js +30 -0
  45. package/dist/helpers/AnalyticsHelper.js.map +1 -0
  46. package/dist/helpers/Locale.d.ts +13 -0
  47. package/dist/helpers/Locale.d.ts.map +1 -0
  48. package/dist/helpers/Locale.js +200 -0
  49. package/dist/helpers/Locale.js.map +1 -0
  50. package/dist/helpers/index.d.ts +3 -0
  51. package/dist/helpers/index.d.ts.map +1 -0
  52. package/dist/helpers/index.js +3 -0
  53. package/dist/helpers/index.js.map +1 -0
  54. package/dist/index.d.ts +11 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +11 -0
  57. package/dist/index.js.map +1 -0
  58. package/package.json +57 -0
  59. package/src/LoginPage.tsx +283 -0
  60. package/src/LogoutPage.tsx +43 -0
  61. package/src/components/Forgot.tsx +247 -0
  62. package/src/components/Login.tsx +250 -0
  63. package/src/components/LoginSetPassword.tsx +298 -0
  64. package/src/components/Register.tsx +371 -0
  65. package/src/components/SelectChurchModal.tsx +82 -0
  66. package/src/components/SelectChurchRegister.tsx +88 -0
  67. package/src/components/SelectChurchSearch.tsx +85 -0
  68. package/src/components/SelectableChurch.tsx +72 -0
  69. package/src/helpers/AnalyticsHelper.ts +32 -0
  70. package/src/helpers/Locale.ts +233 -0
  71. package/src/helpers/index.ts +2 -0
  72. package/src/index.ts +10 -0
  73. package/tsconfig.json +30 -0
@@ -0,0 +1,126 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import React, { useState } from "react";
4
+ import { TextField, InputAdornment, IconButton, Card, CardContent, Typography, Button } from "@mui/material";
5
+ import { Visibility, VisibilityOff } from "@mui/icons-material";
6
+ import { Locale } from "../helpers";
7
+ export const Login = ({ mainContainerCssProps = {}, ...props }) => {
8
+ const [email, setEmail] = React.useState(props.defaultEmail || "");
9
+ const [password, setPassword] = React.useState(props.defaultPassword || "");
10
+ const [showPassword, setShowPassword] = useState(false);
11
+ const validateEmail = (email) => (/^\w+([.-]?\w+)*@\w+([.-]?\w+)*(.\w{2,3})+$/.test(email));
12
+ const validate = () => {
13
+ const result = [];
14
+ if (!email)
15
+ result.push(Locale.label("login.validate.email"));
16
+ else if (!validateEmail(email))
17
+ result.push(Locale.label("login.validate.email"));
18
+ if (!password)
19
+ result.push(Locale.label("login.validate.password"));
20
+ props.setErrors(result);
21
+ return result.length === 0;
22
+ };
23
+ const submitLogin = () => {
24
+ if (validate())
25
+ props.login({ email, password });
26
+ };
27
+ const handleShowRegister = (e) => {
28
+ e.preventDefault();
29
+ props.setShowRegister(true);
30
+ };
31
+ return (_jsx("div", { style: { minHeight: '100vh', backgroundColor: 'white', display: 'flex', alignItems: 'center', justifyContent: 'center', padding: '16px' }, children: _jsx(Card, { sx: {
32
+ width: '100%',
33
+ maxWidth: { xs: '400px', sm: '500px' },
34
+ backgroundColor: 'white',
35
+ border: '1px solid #e5e7eb',
36
+ boxShadow: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',
37
+ ...mainContainerCssProps
38
+ }, children: _jsxs(CardContent, { sx: { textAlign: 'center', padding: '32px' }, children: [_jsx("div", { style: { marginBottom: '32px' }, children: _jsx("img", { src: "/images/logo-login.png", alt: "Church Logo", style: {
39
+ maxWidth: '100%',
40
+ width: 'auto',
41
+ height: 'auto',
42
+ maxHeight: '80px',
43
+ marginBottom: '16px',
44
+ objectFit: 'contain'
45
+ } }) }), _jsx(Typography, { component: "h1", sx: {
46
+ fontSize: '24px',
47
+ fontWeight: 'bold',
48
+ color: '#111827',
49
+ marginBottom: '8px'
50
+ }, children: Locale.label("login.signInTitle") }), _jsx(Typography, { sx: {
51
+ color: '#6b7280',
52
+ marginBottom: '32px'
53
+ }, children: "Enter your email and password to access your church" }), _jsxs("form", { onSubmit: (e) => { e.preventDefault(); submitLogin(); }, style: { display: 'flex', flexDirection: 'column', gap: '16px' }, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: '8px' }, children: [_jsx("label", { htmlFor: "email", style: { fontSize: '14px', fontWeight: 500, color: '#374151', textAlign: 'left' }, children: Locale.label("login.email") }), _jsx(TextField, { id: "email", name: "email", type: "email", placeholder: Locale.label("login.email"), value: email, onChange: (e) => setEmail(e.target.value), autoFocus: true, required: true, autoComplete: "email", variant: "outlined", fullWidth: true, sx: {
54
+ '& .MuiOutlinedInput-root': {
55
+ backgroundColor: 'white',
56
+ '& fieldset': {
57
+ borderColor: '#d1d5db'
58
+ },
59
+ '&:hover fieldset': {
60
+ borderColor: '#d1d5db'
61
+ },
62
+ '&.Mui-focused fieldset': {
63
+ borderColor: '#3b82f6'
64
+ },
65
+ '& input': {
66
+ color: '#111827',
67
+ fontSize: '16px'
68
+ }
69
+ },
70
+ '& .MuiInputLabel-root': {
71
+ display: 'none'
72
+ }
73
+ } })] }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: '8px', position: 'relative' }, children: [_jsx("label", { htmlFor: "password", style: { fontSize: '14px', fontWeight: 500, color: '#374151', textAlign: 'left' }, children: Locale.label("login.password") }), _jsx(TextField, { id: "password", name: "password", type: showPassword ? "text" : "password", placeholder: Locale.label("login.password"), value: password, onChange: (e) => setPassword(e.target.value), required: true, autoComplete: "current-password", variant: "outlined", fullWidth: true, InputProps: {
74
+ endAdornment: (_jsx(InputAdornment, { position: "end", children: _jsx(IconButton, { "aria-label": "toggle password visibility", onClick: () => setShowPassword(!showPassword), edge: "end", sx: { color: '#6b7280' }, children: showPassword ? _jsx(VisibilityOff, {}) : _jsx(Visibility, {}) }) }))
75
+ }, sx: {
76
+ '& .MuiOutlinedInput-root': {
77
+ backgroundColor: 'white',
78
+ paddingRight: '10px',
79
+ '& fieldset': {
80
+ borderColor: '#d1d5db'
81
+ },
82
+ '&:hover fieldset': {
83
+ borderColor: '#d1d5db'
84
+ },
85
+ '&.Mui-focused fieldset': {
86
+ borderColor: '#3b82f6'
87
+ },
88
+ '& input': {
89
+ color: '#111827',
90
+ fontSize: '16px'
91
+ }
92
+ },
93
+ '& .MuiInputLabel-root': {
94
+ display: 'none'
95
+ }
96
+ } })] }), _jsx(Button, { type: "submit", variant: "contained", fullWidth: true, disabled: props.isSubmitting, sx: {
97
+ backgroundColor: 'hsl(218, 85%, 55%)',
98
+ color: 'white',
99
+ padding: '12px',
100
+ textTransform: 'none',
101
+ fontSize: '16px',
102
+ fontWeight: 500,
103
+ borderRadius: '6px',
104
+ '&:hover': {
105
+ backgroundColor: 'hsl(218, 85%, 50%)'
106
+ },
107
+ '&:disabled': {
108
+ backgroundColor: '#9ca3af'
109
+ }
110
+ }, children: props.isSubmitting ? Locale.label("common.pleaseWait") : Locale.label("login.signIn") }), _jsxs("div", { style: { textAlign: 'center', display: 'flex', flexDirection: 'column', gap: '8px' }, children: [_jsx("button", { type: "button", onClick: (e) => { e.preventDefault(); props.setShowForgot(true); }, style: {
111
+ background: 'none',
112
+ border: 'none',
113
+ color: '#3b82f6',
114
+ fontSize: '14px',
115
+ cursor: 'pointer',
116
+ textDecoration: 'none'
117
+ }, onMouseOver: (e) => e.currentTarget.style.textDecoration = 'underline', onMouseOut: (e) => e.currentTarget.style.textDecoration = 'none', children: Locale.label("login.forgot") }), _jsxs("div", { style: { fontSize: '14px', color: '#6b7280' }, children: ["Don't have an account?", ' ', _jsx("button", { type: "button", onClick: handleShowRegister, style: {
118
+ background: 'none',
119
+ border: 'none',
120
+ color: '#3b82f6',
121
+ fontSize: '14px',
122
+ cursor: 'pointer',
123
+ textDecoration: 'none'
124
+ }, onMouseOver: (e) => e.currentTarget.style.textDecoration = 'underline', onMouseOut: (e) => e.currentTarget.style.textDecoration = 'none', children: Locale.label("login.register") })] })] })] })] }) }) }));
125
+ };
126
+ //# sourceMappingURL=Login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Login.js","sourceRoot":"","sources":["../../src/components/Login.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ interface Props {
3
+ appName: string;
4
+ appUrl: string;
5
+ setErrors: (errors: string[]) => void;
6
+ setShowForgot: (showForgot: boolean) => void;
7
+ isSubmitting: boolean;
8
+ auth: string;
9
+ login: (data: any) => void;
10
+ }
11
+ export declare const LoginSetPassword: React.FC<Props>;
12
+ export {};
13
+ //# sourceMappingURL=LoginSetPassword.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginSetPassword.d.ts","sourceRoot":"","sources":["../../src/components/LoginSetPassword.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAOxC,UAAU,KAAK;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACtC,aAAa,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,YAAY,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;CAC5B;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAsR5C,CAAA"}
@@ -0,0 +1,167 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import React, { useState } from "react";
4
+ import { IconButton, InputAdornment, TextField, Typography, Card, CardContent, Button } from "@mui/material";
5
+ import { Visibility, VisibilityOff } from "@mui/icons-material";
6
+ import { ApiHelper } from "@churchapps/helpers";
7
+ import { Locale } from "../helpers";
8
+ export const LoginSetPassword = props => {
9
+ const [password, setPassword] = React.useState("");
10
+ const [verifyPassword, setVerifyPassword] = React.useState("");
11
+ const [user, setUser] = React.useState(null);
12
+ const [showPassword, setShowPassword] = useState(false);
13
+ const [linkExpired, setLinkExpired] = React.useState(false);
14
+ const validate = () => {
15
+ const result = [];
16
+ if (!password)
17
+ result.push(Locale.label("login.validate.password"));
18
+ else if (password.length < 8)
19
+ result.push(Locale.label("login.validate.passwordLength"));
20
+ else if (password !== verifyPassword)
21
+ result.push(Locale.label("login.validate.passwordMatch"));
22
+ props.setErrors(result);
23
+ return result.length === 0;
24
+ };
25
+ const submitChangePassword = () => {
26
+ if (linkExpired) {
27
+ window.open("/login", "_blank");
28
+ }
29
+ else if (validate()) {
30
+ submit();
31
+ }
32
+ };
33
+ const loadUser = () => {
34
+ ApiHelper.postAnonymous("/users/login", { authGuid: props.auth }, "MembershipApi").then((resp) => {
35
+ console.log("RESPONSE", resp);
36
+ if (resp.user)
37
+ setUser(resp.user);
38
+ else
39
+ props.setShowForgot(true);
40
+ }).catch(() => {
41
+ props.setShowForgot(true);
42
+ });
43
+ };
44
+ const submit = async () => {
45
+ const resp = await ApiHelper.postAnonymous("/users/setPasswordGuid", { authGuid: props.auth, newPassword: password, appName: props.appName, appUrl: props.appUrl }, "MembershipApi");
46
+ if (resp.success)
47
+ props.login({ email: user.email, password });
48
+ else
49
+ props.setShowForgot(true);
50
+ };
51
+ React.useEffect(() => {
52
+ //Get the timestamp from the URL
53
+ const urlParams = new URLSearchParams(window.location.search);
54
+ const timestampParam = urlParams.get("timestamp");
55
+ if (timestampParam) {
56
+ const linkTimestamp = parseInt(timestampParam, 10);
57
+ const currentTime = Date.now();
58
+ //Check if the link is expired (2 min)
59
+ if (currentTime - linkTimestamp > 600000) {
60
+ setLinkExpired(true);
61
+ }
62
+ else {
63
+ loadUser();
64
+ }
65
+ }
66
+ else {
67
+ setLinkExpired(true); //No timestamp means link is invalid
68
+ }
69
+ }, []);
70
+ return (_jsx("div", { style: { minHeight: '100vh', backgroundColor: 'white', display: 'flex', alignItems: 'center', justifyContent: 'center', padding: '16px' }, children: _jsx(Card, { sx: {
71
+ width: '100%',
72
+ maxWidth: { xs: '400px', sm: '500px' },
73
+ backgroundColor: 'white',
74
+ border: '1px solid #e5e7eb',
75
+ boxShadow: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)'
76
+ }, children: _jsxs(CardContent, { sx: { textAlign: 'center', padding: '32px' }, children: [_jsx("div", { style: { marginBottom: '32px' }, children: _jsx("img", { src: "/images/logo-login.png", alt: "Church Logo", style: {
77
+ maxWidth: '100%',
78
+ width: 'auto',
79
+ height: 'auto',
80
+ maxHeight: '80px',
81
+ marginBottom: '16px',
82
+ objectFit: 'contain'
83
+ } }) }), _jsx(Typography, { component: "h1", sx: {
84
+ fontSize: '24px',
85
+ fontWeight: 'bold',
86
+ color: '#111827',
87
+ marginBottom: '8px'
88
+ }, children: Locale.label("login.setPassword") }), _jsx(Typography, { sx: {
89
+ color: '#6b7280',
90
+ marginBottom: '32px'
91
+ }, children: linkExpired ? 'Your link has expired' : `Welcome back ${user?.firstName || ''}. Please set your password.` }), linkExpired ? (_jsxs("div", { style: { textAlign: 'center', display: 'flex', flexDirection: 'column', gap: '16px' }, children: [_jsx(Typography, { sx: { color: '#dc2626', marginBottom: '16px' }, children: Locale.label("login.expiredLink") }), _jsx(Button, { variant: "contained", fullWidth: true, onClick: submitChangePassword, disabled: props.isSubmitting, sx: {
92
+ backgroundColor: 'hsl(218, 85%, 55%)',
93
+ color: 'white',
94
+ padding: '12px',
95
+ textTransform: 'none',
96
+ fontSize: '16px',
97
+ fontWeight: 500,
98
+ borderRadius: '6px',
99
+ '&:hover': {
100
+ backgroundColor: 'hsl(218, 85%, 50%)'
101
+ },
102
+ '&:disabled': {
103
+ backgroundColor: '#9ca3af'
104
+ }
105
+ }, children: Locale.label("login.requestLink") })] })) : (_jsxs("form", { onSubmit: (e) => { e.preventDefault(); submitChangePassword(); }, style: { display: 'flex', flexDirection: 'column', gap: '16px' }, children: [user && (_jsxs(Typography, { sx: { color: '#6b7280', textAlign: 'center', marginBottom: '8px' }, children: [Locale.label("login.welcomeBack"), " ", user.firstName, "."] })), _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: '8px' }, children: [_jsx("label", { htmlFor: "new-password", style: { fontSize: '14px', fontWeight: 500, color: '#374151', textAlign: 'left' }, children: Locale.label("login.setPassword") }), _jsx(TextField, { id: "new-password", name: "new-password", type: showPassword ? "text" : "password", placeholder: Locale.label("login.setPassword"), value: password, onChange: (e) => { e.preventDefault(); setPassword(e.target.value); }, required: true, autoComplete: "new-password", variant: "outlined", fullWidth: true, InputProps: {
106
+ endAdornment: (_jsx(InputAdornment, { position: "end", children: _jsx(IconButton, { "aria-label": "toggle password visibility", onClick: () => setShowPassword(!showPassword), edge: "end", sx: { color: '#6b7280' }, children: showPassword ? _jsx(VisibilityOff, {}) : _jsx(Visibility, {}) }) }))
107
+ }, sx: {
108
+ '& .MuiOutlinedInput-root': {
109
+ backgroundColor: 'white',
110
+ paddingRight: '10px',
111
+ '& fieldset': {
112
+ borderColor: '#d1d5db'
113
+ },
114
+ '&:hover fieldset': {
115
+ borderColor: '#d1d5db'
116
+ },
117
+ '&.Mui-focused fieldset': {
118
+ borderColor: '#3b82f6'
119
+ },
120
+ '& input': {
121
+ color: '#111827',
122
+ fontSize: '16px'
123
+ }
124
+ },
125
+ '& .MuiInputLabel-root': {
126
+ display: 'none'
127
+ }
128
+ } })] }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: '8px' }, children: [_jsx("label", { htmlFor: "verify-password", style: { fontSize: '14px', fontWeight: 500, color: '#374151', textAlign: 'left' }, children: Locale.label("login.verifyPassword") }), _jsx(TextField, { id: "verify-password", name: "verify-password", type: showPassword ? "text" : "password", placeholder: Locale.label("login.verifyPassword"), value: verifyPassword, onChange: (e) => { e.preventDefault(); setVerifyPassword(e.target.value); }, required: true, autoComplete: "new-password", variant: "outlined", fullWidth: true, InputProps: {
129
+ endAdornment: (_jsx(InputAdornment, { position: "end", children: _jsx(IconButton, { "aria-label": "toggle password visibility", onClick: () => setShowPassword(!showPassword), edge: "end", sx: { color: '#6b7280' }, children: showPassword ? _jsx(VisibilityOff, {}) : _jsx(Visibility, {}) }) }))
130
+ }, sx: {
131
+ '& .MuiOutlinedInput-root': {
132
+ backgroundColor: 'white',
133
+ paddingRight: '10px',
134
+ '& fieldset': {
135
+ borderColor: '#d1d5db'
136
+ },
137
+ '&:hover fieldset': {
138
+ borderColor: '#d1d5db'
139
+ },
140
+ '&.Mui-focused fieldset': {
141
+ borderColor: '#3b82f6'
142
+ },
143
+ '& input': {
144
+ color: '#111827',
145
+ fontSize: '16px'
146
+ }
147
+ },
148
+ '& .MuiInputLabel-root': {
149
+ display: 'none'
150
+ }
151
+ } })] }), _jsx(Button, { type: "submit", variant: "contained", fullWidth: true, disabled: props.isSubmitting || !user, sx: {
152
+ backgroundColor: 'hsl(218, 85%, 55%)',
153
+ color: 'white',
154
+ padding: '12px',
155
+ textTransform: 'none',
156
+ fontSize: '16px',
157
+ fontWeight: 500,
158
+ borderRadius: '6px',
159
+ '&:hover': {
160
+ backgroundColor: 'hsl(218, 85%, 50%)'
161
+ },
162
+ '&:disabled': {
163
+ backgroundColor: '#9ca3af'
164
+ }
165
+ }, children: (props.isSubmitting || !user) ? Locale.label("common.pleaseWait") : Locale.label("login.signIn") })] }))] }) }) }));
166
+ };
167
+ //# sourceMappingURL=LoginSetPassword.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginSetPassword.js","sourceRoot":"","sources":["../../src/components/LoginSetPassword.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ import { UserInterface } from "@churchapps/helpers";
3
+ interface Props {
4
+ appName?: string;
5
+ appUrl?: string;
6
+ updateErrors: (errors: string[]) => void;
7
+ loginCallback?: () => void;
8
+ userRegisteredCallback?: (user: UserInterface) => Promise<void>;
9
+ }
10
+ export declare const Register: React.FC<Props>;
11
+ export {};
12
+ //# sourceMappingURL=Register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Register.d.ts","sourceRoot":"","sources":["../../src/components/Register.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAChD,OAAO,EAAiD,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKnG,UAAU,KAAK;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IAC1B,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAkWpC,CAAC"}
@@ -0,0 +1,217 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import React from "react";
4
+ import { ApiHelper } from "@churchapps/helpers";
5
+ import { AnalyticsHelper, Locale } from "../helpers";
6
+ import { TextField, Card, CardContent, Typography, Button } from "@mui/material";
7
+ export const Register = (props) => {
8
+ const cleanAppUrl = () => {
9
+ if (!props.appUrl)
10
+ return null;
11
+ else {
12
+ const index = props.appUrl.indexOf("/", 9);
13
+ if (index === -1)
14
+ return props.appUrl;
15
+ else
16
+ return props.appUrl.substring(0, index);
17
+ }
18
+ };
19
+ const [registered, setRegistered] = React.useState(false);
20
+ const [user, setUser] = React.useState({ firstName: "", lastName: "", email: "", appName: props.appName, appUrl: cleanAppUrl() });
21
+ const [errors, setErrors] = React.useState([]);
22
+ const [isSubmitting, setIsSubmitting] = React.useState(false);
23
+ const handleRegisterErrors = (errors) => {
24
+ props.updateErrors(errors);
25
+ };
26
+ const handleRegisterSuccess = (resp) => {
27
+ setRegistered(true);
28
+ AnalyticsHelper.logEvent("User", "Register");
29
+ if (props.userRegisteredCallback)
30
+ props.userRegisteredCallback(resp.user);
31
+ };
32
+ const validateEmail = (email) => (/^\w+([.-]?\w+)*@\w+([.-]?\w+)*(.\w{2,3})+$/.test(email));
33
+ const handleChange = (e) => {
34
+ const u = { ...user };
35
+ switch (e.target.name) {
36
+ case "firstName":
37
+ u.firstName = e.target.value;
38
+ break;
39
+ case "lastName":
40
+ u.lastName = e.target.value;
41
+ break;
42
+ case "email":
43
+ u.email = e.target.value;
44
+ break;
45
+ }
46
+ setUser(u);
47
+ };
48
+ const validate = () => {
49
+ let errors = [];
50
+ if (!user.email?.trim())
51
+ errors.push(Locale.label("login.validate.email"));
52
+ else if (!validateEmail(user.email))
53
+ errors.push(Locale.label("login.validate.email"));
54
+ if (!user.firstName?.trim())
55
+ errors.push(Locale.label("login.validate.firstName"));
56
+ if (!user.lastName?.trim())
57
+ errors.push(Locale.label("login.validate.lastName"));
58
+ setErrors(errors);
59
+ return errors.length === 0;
60
+ };
61
+ const register = (e) => {
62
+ e.preventDefault();
63
+ props.updateErrors([]);
64
+ if (validate()) {
65
+ setIsSubmitting(true);
66
+ ApiHelper.postAnonymous("/users/register", user, "MembershipApi")
67
+ .then((resp) => {
68
+ if (resp.errors)
69
+ handleRegisterErrors(resp.errors);
70
+ else
71
+ handleRegisterSuccess(resp);
72
+ })
73
+ .catch((e) => { props.updateErrors([e.toString()]); throw e; })
74
+ .finally(() => {
75
+ setIsSubmitting(false);
76
+ });
77
+ }
78
+ };
79
+ if (registered) {
80
+ return (_jsx("div", { style: { minHeight: '100vh', backgroundColor: 'white', display: 'flex', alignItems: 'center', justifyContent: 'center', padding: '16px' }, children: _jsx(Card, { sx: {
81
+ width: '100%',
82
+ maxWidth: { xs: '400px', sm: '500px' },
83
+ backgroundColor: 'white',
84
+ border: '1px solid #e5e7eb',
85
+ boxShadow: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)'
86
+ }, children: _jsxs(CardContent, { sx: { textAlign: 'center', padding: '32px' }, children: [_jsx("div", { style: { marginBottom: '32px' }, children: _jsx("img", { src: "/images/logo-login.png", alt: "Church Logo", style: {
87
+ maxWidth: '100%',
88
+ width: 'auto',
89
+ height: 'auto',
90
+ maxHeight: '80px',
91
+ marginBottom: '16px',
92
+ objectFit: 'contain'
93
+ } }) }), _jsx(Typography, { component: "h1", sx: {
94
+ fontSize: '24px',
95
+ fontWeight: 'bold',
96
+ color: '#111827',
97
+ marginBottom: '32px'
98
+ }, children: "Registration Complete" }), _jsx(Typography, { sx: { color: '#6b7280', marginBottom: '24px' }, children: Locale.label("login.registerThankYou") }), _jsx("button", { type: "button", onClick: (e) => { e.preventDefault(); props.loginCallback && props.loginCallback(); }, style: {
99
+ background: 'none',
100
+ border: 'none',
101
+ color: '#3b82f6',
102
+ fontSize: '14px',
103
+ cursor: 'pointer',
104
+ textDecoration: 'none'
105
+ }, onMouseOver: (e) => e.currentTarget.style.textDecoration = 'underline', onMouseOut: (e) => e.currentTarget.style.textDecoration = 'none', children: "Back to sign in" })] }) }) }));
106
+ }
107
+ return (_jsx("div", { style: { minHeight: '100vh', backgroundColor: 'white', display: 'flex', alignItems: 'center', justifyContent: 'center', padding: '16px' }, children: _jsx(Card, { sx: {
108
+ width: '100%',
109
+ maxWidth: { xs: '400px', sm: '500px' },
110
+ backgroundColor: 'white',
111
+ border: '1px solid #e5e7eb',
112
+ boxShadow: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)'
113
+ }, children: _jsxs(CardContent, { sx: { textAlign: 'center', padding: '32px' }, children: [_jsx("div", { style: { marginBottom: '32px' }, children: _jsx("img", { src: "/images/logo-login.png", alt: "Church Logo", style: {
114
+ maxWidth: '100%',
115
+ width: 'auto',
116
+ height: 'auto',
117
+ maxHeight: '80px',
118
+ marginBottom: '16px',
119
+ objectFit: 'contain'
120
+ } }) }), _jsx(Typography, { component: "h1", sx: {
121
+ fontSize: '24px',
122
+ fontWeight: 'bold',
123
+ color: '#111827',
124
+ marginBottom: '8px'
125
+ }, children: "Create Account" }), _jsx(Typography, { sx: {
126
+ color: '#6b7280',
127
+ marginBottom: '32px'
128
+ }, children: "Create a new account to access your church" }), _jsxs("form", { onSubmit: register, style: { display: 'flex', flexDirection: 'column', gap: '16px' }, children: [errors.length > 0 && (_jsx("div", { style: {
129
+ backgroundColor: '#fef2f2',
130
+ border: '1px solid #fecaca',
131
+ borderRadius: '6px',
132
+ padding: '12px',
133
+ textAlign: 'left'
134
+ }, children: errors.map((error, index) => (_jsx("div", { style: { color: '#dc2626', fontSize: '14px' }, children: error }, index))) })), _jsxs("div", { style: { display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '8px' }, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: '8px' }, children: [_jsx("label", { htmlFor: "firstName", style: { fontSize: '14px', fontWeight: 500, color: '#374151', textAlign: 'left' }, children: "First Name" }), _jsx(TextField, { id: "firstName", name: "firstName", type: "text", placeholder: "First Name", value: user.firstName, onChange: handleChange, required: true, autoComplete: "given-name", variant: "outlined", fullWidth: true, sx: {
135
+ '& .MuiOutlinedInput-root': {
136
+ backgroundColor: 'white',
137
+ '& fieldset': {
138
+ borderColor: '#d1d5db'
139
+ },
140
+ '&:hover fieldset': {
141
+ borderColor: '#d1d5db'
142
+ },
143
+ '&.Mui-focused fieldset': {
144
+ borderColor: '#3b82f6'
145
+ },
146
+ '& input': {
147
+ color: '#111827',
148
+ fontSize: '16px'
149
+ }
150
+ },
151
+ '& .MuiInputLabel-root': {
152
+ display: 'none'
153
+ }
154
+ } })] }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: '8px' }, children: [_jsx("label", { htmlFor: "lastName", style: { fontSize: '14px', fontWeight: 500, color: '#374151', textAlign: 'left' }, children: "Last Name" }), _jsx(TextField, { id: "lastName", name: "lastName", type: "text", placeholder: "Last Name", value: user.lastName, onChange: handleChange, required: true, autoComplete: "family-name", variant: "outlined", fullWidth: true, sx: {
155
+ '& .MuiOutlinedInput-root': {
156
+ backgroundColor: 'white',
157
+ '& fieldset': {
158
+ borderColor: '#d1d5db'
159
+ },
160
+ '&:hover fieldset': {
161
+ borderColor: '#d1d5db'
162
+ },
163
+ '&.Mui-focused fieldset': {
164
+ borderColor: '#3b82f6'
165
+ },
166
+ '& input': {
167
+ color: '#111827',
168
+ fontSize: '16px'
169
+ }
170
+ },
171
+ '& .MuiInputLabel-root': {
172
+ display: 'none'
173
+ }
174
+ } })] })] }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: '8px' }, children: [_jsx("label", { htmlFor: "email", style: { fontSize: '14px', fontWeight: 500, color: '#374151', textAlign: 'left' }, children: "Email" }), _jsx(TextField, { id: "email", name: "email", type: "email", placeholder: "Email", value: user.email, onChange: handleChange, required: true, autoComplete: "email", variant: "outlined", fullWidth: true, sx: {
175
+ '& .MuiOutlinedInput-root': {
176
+ backgroundColor: 'white',
177
+ '& fieldset': {
178
+ borderColor: '#d1d5db'
179
+ },
180
+ '&:hover fieldset': {
181
+ borderColor: '#d1d5db'
182
+ },
183
+ '&.Mui-focused fieldset': {
184
+ borderColor: '#3b82f6'
185
+ },
186
+ '& input': {
187
+ color: '#111827',
188
+ fontSize: '16px'
189
+ }
190
+ },
191
+ '& .MuiInputLabel-root': {
192
+ display: 'none'
193
+ }
194
+ } })] }), _jsx(Button, { type: "submit", variant: "contained", fullWidth: true, disabled: isSubmitting, sx: {
195
+ backgroundColor: 'hsl(218, 85%, 55%)',
196
+ color: 'white',
197
+ padding: '12px',
198
+ textTransform: 'none',
199
+ fontSize: '16px',
200
+ fontWeight: 500,
201
+ borderRadius: '6px',
202
+ '&:hover': {
203
+ backgroundColor: 'hsl(218, 85%, 50%)'
204
+ },
205
+ '&:disabled': {
206
+ backgroundColor: '#9ca3af'
207
+ }
208
+ }, children: isSubmitting ? "Please wait..." : "Register" }), _jsx("div", { style: { textAlign: 'center' }, children: _jsxs("div", { style: { fontSize: '14px', color: '#6b7280' }, children: ["Already have an account?", ' ', _jsx("button", { type: "button", onClick: (e) => { e.preventDefault(); props.loginCallback && props.loginCallback(); }, style: {
209
+ background: 'none',
210
+ border: 'none',
211
+ color: '#3b82f6',
212
+ fontSize: '14px',
213
+ cursor: 'pointer',
214
+ textDecoration: 'none'
215
+ }, onMouseOver: (e) => e.currentTarget.style.textDecoration = 'underline', onMouseOut: (e) => e.currentTarget.style.textDecoration = 'none', children: "Sign in" })] }) })] })] }) }) }));
216
+ };
217
+ //# sourceMappingURL=Register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Register.js","sourceRoot":"","sources":["../../src/components/Register.tsx"],"names":[],"mappings":"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"}