@churchapps/apphelper 0.1.10 → 0.1.11

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 (190) hide show
  1. package/.eslintignore +3 -3
  2. package/.eslintrc.json +22 -22
  3. package/LICENSE +21 -21
  4. package/README.md +24 -24
  5. package/dist/components/markdownEditor/editor.css +787 -787
  6. package/dist/components/markdownEditor/images/icons/arrow-clockwise.svg +3 -3
  7. package/dist/components/markdownEditor/images/icons/arrow-counterclockwise.svg +3 -3
  8. package/dist/components/markdownEditor/images/icons/chat-square-quote.svg +3 -3
  9. package/dist/components/markdownEditor/images/icons/chevron-down.svg +2 -2
  10. package/dist/components/markdownEditor/images/icons/code.svg +2 -2
  11. package/dist/components/markdownEditor/images/icons/journal-code.svg +4 -4
  12. package/dist/components/markdownEditor/images/icons/journal-text.svg +4 -4
  13. package/dist/components/markdownEditor/images/icons/justify.svg +2 -2
  14. package/dist/components/markdownEditor/images/icons/link.svg +3 -3
  15. package/dist/components/markdownEditor/images/icons/list-ol.svg +3 -3
  16. package/dist/components/markdownEditor/images/icons/list-ul.svg +2 -2
  17. package/dist/components/markdownEditor/images/icons/pencil-fill.svg +2 -2
  18. package/dist/components/markdownEditor/images/icons/text-center.svg +2 -2
  19. package/dist/components/markdownEditor/images/icons/text-left.svg +2 -2
  20. package/dist/components/markdownEditor/images/icons/text-paragraph.svg +2 -2
  21. package/dist/components/markdownEditor/images/icons/text-right.svg +2 -2
  22. package/dist/components/markdownEditor/images/icons/type-bold.svg +2 -2
  23. package/dist/components/markdownEditor/images/icons/type-h1.svg +2 -2
  24. package/dist/components/markdownEditor/images/icons/type-h2.svg +2 -2
  25. package/dist/components/markdownEditor/images/icons/type-h3.svg +2 -2
  26. package/dist/components/markdownEditor/images/icons/type-h4.svg +12 -12
  27. package/dist/components/markdownEditor/images/icons/type-italic.svg +2 -2
  28. package/dist/components/markdownEditor/images/icons/type-strikethrough.svg +2 -2
  29. package/dist/components/markdownEditor/images/icons/type-underline.svg +2 -2
  30. package/dist/components/markdownEditor/plugins/customLink/FloatingLinkEditor.d.ts.map +1 -1
  31. package/dist/components/markdownEditor/plugins/customLink/FloatingLinkEditor.js +10 -3
  32. package/dist/components/markdownEditor/plugins/customLink/FloatingLinkEditor.js.map +1 -1
  33. package/package.json +88 -88
  34. package/src/components/CreatePerson.tsx +80 -80
  35. package/src/components/DisplayBox.tsx +68 -68
  36. package/src/components/ErrorMessages.tsx +26 -26
  37. package/src/components/ExportLink.tsx +67 -67
  38. package/src/components/FloatingSupport.tsx +16 -16
  39. package/src/components/FormSubmissionEdit.tsx +120 -120
  40. package/src/components/HelpIcon.tsx +10 -10
  41. package/src/components/ImageEditor.tsx +126 -126
  42. package/src/components/InputBox.tsx +73 -73
  43. package/src/components/Loading.tsx +29 -29
  44. package/src/components/PersonAdd.tsx +75 -75
  45. package/src/components/QuestionEdit.tsx +63 -63
  46. package/src/components/SmallButton.tsx +39 -39
  47. package/src/components/SupportModal.tsx +26 -26
  48. package/src/components/TabPanel.tsx +34 -34
  49. package/src/components/gallery/GalleryModal.tsx +119 -119
  50. package/src/components/gallery/StockPhotos.tsx +74 -74
  51. package/src/components/gallery/index.ts +1 -1
  52. package/src/components/iconPicker/IconNamesList.ts +2240 -2240
  53. package/src/components/iconPicker/IconPicker.tsx +153 -153
  54. package/src/components/index.tsx +24 -24
  55. package/src/components/markdownEditor/Editor.tsx +132 -132
  56. package/src/components/markdownEditor/MarkdownEditor.tsx +16 -16
  57. package/src/components/markdownEditor/MarkdownModal.tsx +46 -46
  58. package/src/components/markdownEditor/MarkdownPreview.tsx +14 -14
  59. package/src/components/markdownEditor/editor.css +787 -787
  60. package/src/components/markdownEditor/images/icons/arrow-clockwise.svg +3 -3
  61. package/src/components/markdownEditor/images/icons/arrow-counterclockwise.svg +3 -3
  62. package/src/components/markdownEditor/images/icons/chat-square-quote.svg +3 -3
  63. package/src/components/markdownEditor/images/icons/chevron-down.svg +2 -2
  64. package/src/components/markdownEditor/images/icons/code.svg +2 -2
  65. package/src/components/markdownEditor/images/icons/journal-code.svg +4 -4
  66. package/src/components/markdownEditor/images/icons/journal-text.svg +4 -4
  67. package/src/components/markdownEditor/images/icons/justify.svg +2 -2
  68. package/src/components/markdownEditor/images/icons/link.svg +3 -3
  69. package/src/components/markdownEditor/images/icons/list-ol.svg +3 -3
  70. package/src/components/markdownEditor/images/icons/list-ul.svg +2 -2
  71. package/src/components/markdownEditor/images/icons/pencil-fill.svg +2 -2
  72. package/src/components/markdownEditor/images/icons/text-center.svg +2 -2
  73. package/src/components/markdownEditor/images/icons/text-left.svg +2 -2
  74. package/src/components/markdownEditor/images/icons/text-paragraph.svg +2 -2
  75. package/src/components/markdownEditor/images/icons/text-right.svg +2 -2
  76. package/src/components/markdownEditor/images/icons/type-bold.svg +2 -2
  77. package/src/components/markdownEditor/images/icons/type-h1.svg +2 -2
  78. package/src/components/markdownEditor/images/icons/type-h2.svg +2 -2
  79. package/src/components/markdownEditor/images/icons/type-h3.svg +2 -2
  80. package/src/components/markdownEditor/images/icons/type-h4.svg +12 -12
  81. package/src/components/markdownEditor/images/icons/type-italic.svg +2 -2
  82. package/src/components/markdownEditor/images/icons/type-strikethrough.svg +2 -2
  83. package/src/components/markdownEditor/images/icons/type-underline.svg +2 -2
  84. package/src/components/markdownEditor/index.ts +2 -2
  85. package/src/components/markdownEditor/plugins/AutoLinkPlugin.tsx +35 -35
  86. package/src/components/markdownEditor/plugins/ControlledEditorPlugin.tsx +24 -24
  87. package/src/components/markdownEditor/plugins/ListMaxIndentLevelPlugin.tsx +68 -68
  88. package/src/components/markdownEditor/plugins/MarkdownTransformers.ts +106 -106
  89. package/src/components/markdownEditor/plugins/ReadOnlyPlugin.tsx +15 -15
  90. package/src/components/markdownEditor/plugins/ToolbarPlugin.tsx +401 -401
  91. package/src/components/markdownEditor/plugins/customLink/CustomLinkNode.tsx +224 -224
  92. package/src/components/markdownEditor/plugins/customLink/CustomLinkNodePlugin.tsx +32 -32
  93. package/src/components/markdownEditor/plugins/customLink/CustomLinkNodeTransformer.tsx +102 -102
  94. package/src/components/markdownEditor/plugins/customLink/FloatingLinkEditor.tsx +252 -243
  95. package/src/components/markdownEditor/plugins/customLink/FloatingLinkEditor.types.ts +11 -11
  96. package/src/components/markdownEditor/plugins/emoji/EmojiNode.tsx +95 -95
  97. package/src/components/markdownEditor/plugins/emoji/EmojiNodeTransform.ts +41 -41
  98. package/src/components/markdownEditor/plugins/emoji/EmojiPickerPlugin.tsx +152 -152
  99. package/src/components/markdownEditor/plugins/emoji/EmojisPlugin.tsx +65 -65
  100. package/src/components/markdownEditor/plugins/index.ts +6 -6
  101. package/src/components/markdownEditor/theme.ts +65 -65
  102. package/src/components/notes/AddNote.tsx +90 -90
  103. package/src/components/notes/Conversation.tsx +82 -82
  104. package/src/components/notes/Conversations.tsx +58 -58
  105. package/src/components/notes/NewConversation.tsx +78 -78
  106. package/src/components/notes/Note.tsx +44 -44
  107. package/src/components/notes/Notes.tsx +69 -69
  108. package/src/components/notes/index.ts +5 -5
  109. package/src/components/reporting/ChartReport.tsx +98 -98
  110. package/src/components/reporting/ReportFilter.tsx +54 -54
  111. package/src/components/reporting/ReportFilterField.tsx +160 -160
  112. package/src/components/reporting/ReportOutput.tsx +79 -79
  113. package/src/components/reporting/ReportWithFilter.tsx +70 -70
  114. package/src/components/reporting/TableReport.tsx +57 -57
  115. package/src/components/reporting/TreeReport.tsx +111 -111
  116. package/src/components/reporting/index.ts +4 -4
  117. package/src/components/wrapper/AppList.tsx +20 -20
  118. package/src/components/wrapper/ChurchList.tsx +22 -22
  119. package/src/components/wrapper/Drawers.tsx +60 -60
  120. package/src/components/wrapper/NavItem.tsx +41 -41
  121. package/src/components/wrapper/NewPrivateMessage.tsx +103 -103
  122. package/src/components/wrapper/NotificationMenu.tsx +96 -96
  123. package/src/components/wrapper/Notifications.tsx +53 -53
  124. package/src/components/wrapper/PrivateMessageDetails.tsx +24 -24
  125. package/src/components/wrapper/PrivateMessages.tsx +92 -92
  126. package/src/components/wrapper/SiteWrapper.tsx +99 -99
  127. package/src/components/wrapper/TabPanel.tsx +30 -30
  128. package/src/components/wrapper/UserMenu.tsx +106 -106
  129. package/src/components/wrapper/index.tsx +5 -5
  130. package/src/donationComponents/DonationPage.tsx +136 -136
  131. package/src/donationComponents/components/BankForm.tsx +159 -159
  132. package/src/donationComponents/components/CardForm.tsx +104 -104
  133. package/src/donationComponents/components/DonationForm.tsx +235 -235
  134. package/src/donationComponents/components/FundDonation.tsx +49 -49
  135. package/src/donationComponents/components/FundDonations.tsx +39 -39
  136. package/src/donationComponents/components/NonAuthDonation.tsx +31 -31
  137. package/src/donationComponents/components/NonAuthDonationInner.tsx +259 -259
  138. package/src/donationComponents/components/PaymentMethods.tsx +135 -135
  139. package/src/donationComponents/components/RecurringDonations.tsx +121 -121
  140. package/src/donationComponents/components/RecurringDonationsEdit.tsx +93 -93
  141. package/src/donationComponents/components/index.tsx +9 -9
  142. package/src/donationComponents/index.ts +3 -3
  143. package/src/donationComponents/modals/DonationPreviewModal.tsx +66 -66
  144. package/src/helpers/AnalyticsHelper.ts +33 -33
  145. package/src/helpers/ApiHelper.ts +125 -125
  146. package/src/helpers/AppearanceHelper.ts +69 -69
  147. package/src/helpers/ArrayHelper.ts +81 -81
  148. package/src/helpers/CommonEnvironmentHelper.ts +80 -80
  149. package/src/helpers/CurrencyHelper.ts +10 -10
  150. package/src/helpers/DateHelper.ts +109 -109
  151. package/src/helpers/DonationHelper.ts +26 -26
  152. package/src/helpers/ErrorHelper.ts +36 -36
  153. package/src/helpers/EventHelper.ts +52 -52
  154. package/src/helpers/FileHelper.ts +31 -31
  155. package/src/helpers/PersonHelper.ts +60 -60
  156. package/src/helpers/SlugHelper.ts +37 -37
  157. package/src/helpers/SocketHelper.ts +78 -78
  158. package/src/helpers/Themes.ts +14 -14
  159. package/src/helpers/UniqueIdHelper.ts +36 -36
  160. package/src/helpers/UserHelper.ts +59 -59
  161. package/src/helpers/createEmotionCache.ts +17 -17
  162. package/src/helpers/index.ts +19 -19
  163. package/src/hooks/index.ts +1 -1
  164. package/src/hooks/useMountedState.ts +16 -16
  165. package/src/index.ts +6 -6
  166. package/src/interfaces/Access.ts +24 -24
  167. package/src/interfaces/Attendance.ts +8 -8
  168. package/src/interfaces/Content.ts +10 -10
  169. package/src/interfaces/Doing.ts +24 -24
  170. package/src/interfaces/Donation.ts +45 -45
  171. package/src/interfaces/Error.ts +17 -17
  172. package/src/interfaces/Membership.ts +51 -51
  173. package/src/interfaces/Messaging.ts +11 -11
  174. package/src/interfaces/Permissions.ts +68 -68
  175. package/src/interfaces/Reporting.ts +7 -7
  176. package/src/interfaces/UserContextInterface.ts +13 -13
  177. package/src/interfaces/index.ts +13 -13
  178. package/src/pageComponents/LoginPage.tsx +244 -244
  179. package/src/pageComponents/LogoutPage.tsx +28 -28
  180. package/src/pageComponents/components/Forgot.tsx +79 -79
  181. package/src/pageComponents/components/Login.tsx +54 -54
  182. package/src/pageComponents/components/LoginSetPassword.tsx +63 -63
  183. package/src/pageComponents/components/Register.tsx +107 -107
  184. package/src/pageComponents/components/SelectChurchModal.tsx +41 -41
  185. package/src/pageComponents/components/SelectChurchRegister.tsx +88 -88
  186. package/src/pageComponents/components/SelectChurchSearch.tsx +69 -69
  187. package/src/pageComponents/components/SelectableChurch.tsx +38 -38
  188. package/src/pageComponents/index.ts +3 -3
  189. package/tsconfig.json +34 -34
  190. package/tslint.json +14 -14
@@ -1,104 +1,104 @@
1
- import React, { useEffect } from "react";
2
- import { Grid, TextField } from "@mui/material"
3
- import { CardElement, useStripe, useElements } from "@stripe/react-stripe-js";
4
- import { InputBox, ErrorMessages } from "../../components";
5
- import { ApiHelper } from "../../helpers";
6
- import { PersonInterface, StripePaymentMethod, PaymentMethodInterface, StripeCardUpdateInterface } from "../../interfaces";
7
-
8
- interface Props { card: StripePaymentMethod, customerId: string, person: PersonInterface, setMode: any, deletePayment: any, updateList: (message: string) => void }
9
-
10
- export const CardForm: React.FC<Props> = (props) => {
11
- const stripe = useStripe();
12
- const elements = useElements();
13
- const formStyling = { style: { base: { fontSize: "18px" } } };
14
- const [showSave, setShowSave] = React.useState(true);
15
- const [paymentMethod] = React.useState<PaymentMethodInterface>({ id: props.card.id, customerId: props.customerId, personId: props.person.id, email: props.person.contactInfo.email, name: props.person.name.display });
16
- const [cardUpdate, setCardUpdate] = React.useState<StripeCardUpdateInterface>({ personId: props.person.id, paymentMethodId: props.card.id, cardData: { card: {} } } as StripeCardUpdateInterface);
17
- const [errorMessage, setErrorMessage] = React.useState<string>(null);
18
- const handleCancel = () => { props.setMode("display"); }
19
- const handleSave = () => { setShowSave(false); props.card.id ? updateCard() : createCard(); }
20
- const saveDisabled = () => { }
21
- const handleDelete = () => { props.deletePayment(); }
22
-
23
- const handleKeyPress = (e: React.KeyboardEvent<any>) => {
24
- const pattern = /^\d+$/;
25
- if (!pattern.test(e.key)) e.preventDefault();
26
- }
27
-
28
- useEffect(() => {
29
- setCardUpdate({ ...cardUpdate, cardData: { card: { exp_year: props.card?.exp_year?.toString().slice(2) || "", exp_month: props.card?.exp_month || "" } } });
30
- }, []) //eslint-disable-line
31
-
32
- const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
33
- const card = { ...cardUpdate };
34
- if (e.currentTarget.name === "exp_month") card.cardData.card.exp_month = e.currentTarget.value;
35
- if (e.currentTarget.name === "exp_year") card.cardData.card.exp_year = e.currentTarget.value;
36
- setCardUpdate(card);
37
- setShowSave(true);
38
- }
39
-
40
- const createCard = async () => {
41
- const cardData = elements.getElement(CardElement);
42
- const stripePM = await stripe.createPaymentMethod({
43
- type: "card",
44
- card: cardData
45
- });
46
- if (stripePM.error) {
47
- setErrorMessage(stripePM.error.message);
48
- setShowSave(true);
49
- } else {
50
- let pm = { ...paymentMethod };
51
- pm.id = stripePM.paymentMethod.id;
52
- await ApiHelper.post("/paymentmethods/addcard", pm, "GivingApi").then(result => {
53
- if (result?.raw?.message) {
54
- setErrorMessage(result.raw.message);
55
- setShowSave(true);
56
- }
57
- else {
58
- props.updateList("Card added successfully");
59
- props.setMode("display");
60
- }
61
- });
62
- }
63
- }
64
-
65
- const updateCard = async () => {
66
- if (!cardUpdate.cardData.card.exp_month || !cardUpdate.cardData.card.exp_year) setErrorMessage("Expiration month and year cannot be blank.");
67
- else {
68
- await ApiHelper.post("/paymentmethods/updatecard", cardUpdate, "GivingApi").then(result => {
69
- if (result?.raw?.message) {
70
- setErrorMessage(result.raw.message);
71
- setShowSave(true);
72
- }
73
- else {
74
- props.updateList("Card updated successfully");
75
- props.setMode("display");
76
- }
77
- });
78
- }
79
- }
80
-
81
- const getHeaderText = () => props.card.id
82
- ? `${props.card.name.toUpperCase()} ****${props.card.last4}`
83
- : "Add New Card"
84
-
85
- return (
86
- <InputBox headerIcon="volunteer_activism" headerText={getHeaderText()} ariaLabelSave="save-button" ariaLabelDelete="delete-button" cancelFunction={handleCancel} saveFunction={showSave ? handleSave : saveDisabled} deleteFunction={props.card.id ? handleDelete : undefined}>
87
- {errorMessage && <ErrorMessages errors={[errorMessage]}></ErrorMessages>}
88
- <div>
89
- {!props.card.id
90
- ? <CardElement options={formStyling} />
91
- : <Grid container spacing={3}>
92
- <Grid item md={6} xs={12}>
93
- <TextField fullWidth aria-label="card-exp-month" label="Card Expiration Month:" name="exp_month" value={cardUpdate.cardData.card.exp_month} placeholder="MM" inputProps={{ maxLength: 2 }} onChange={handleChange} onKeyPress={handleKeyPress} />
94
- </Grid>
95
- <Grid item md={6} xs={12}>
96
- <TextField fullWidth aria-label="card-exp-year" label="Card Expiration Year:" name="exp_year" value={cardUpdate.cardData.card.exp_year} placeholder="YY" inputProps={{ maxLength: 2 }} onChange={handleChange} onKeyPress={handleKeyPress} />
97
- </Grid>
98
- </Grid>
99
- }
100
- </div>
101
- </InputBox>
102
- );
103
-
104
- }
1
+ import React, { useEffect } from "react";
2
+ import { Grid, TextField } from "@mui/material"
3
+ import { CardElement, useStripe, useElements } from "@stripe/react-stripe-js";
4
+ import { InputBox, ErrorMessages } from "../../components";
5
+ import { ApiHelper } from "../../helpers";
6
+ import { PersonInterface, StripePaymentMethod, PaymentMethodInterface, StripeCardUpdateInterface } from "../../interfaces";
7
+
8
+ interface Props { card: StripePaymentMethod, customerId: string, person: PersonInterface, setMode: any, deletePayment: any, updateList: (message: string) => void }
9
+
10
+ export const CardForm: React.FC<Props> = (props) => {
11
+ const stripe = useStripe();
12
+ const elements = useElements();
13
+ const formStyling = { style: { base: { fontSize: "18px" } } };
14
+ const [showSave, setShowSave] = React.useState(true);
15
+ const [paymentMethod] = React.useState<PaymentMethodInterface>({ id: props.card.id, customerId: props.customerId, personId: props.person.id, email: props.person.contactInfo.email, name: props.person.name.display });
16
+ const [cardUpdate, setCardUpdate] = React.useState<StripeCardUpdateInterface>({ personId: props.person.id, paymentMethodId: props.card.id, cardData: { card: {} } } as StripeCardUpdateInterface);
17
+ const [errorMessage, setErrorMessage] = React.useState<string>(null);
18
+ const handleCancel = () => { props.setMode("display"); }
19
+ const handleSave = () => { setShowSave(false); props.card.id ? updateCard() : createCard(); }
20
+ const saveDisabled = () => { }
21
+ const handleDelete = () => { props.deletePayment(); }
22
+
23
+ const handleKeyPress = (e: React.KeyboardEvent<any>) => {
24
+ const pattern = /^\d+$/;
25
+ if (!pattern.test(e.key)) e.preventDefault();
26
+ }
27
+
28
+ useEffect(() => {
29
+ setCardUpdate({ ...cardUpdate, cardData: { card: { exp_year: props.card?.exp_year?.toString().slice(2) || "", exp_month: props.card?.exp_month || "" } } });
30
+ }, []) //eslint-disable-line
31
+
32
+ const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
33
+ const card = { ...cardUpdate };
34
+ if (e.currentTarget.name === "exp_month") card.cardData.card.exp_month = e.currentTarget.value;
35
+ if (e.currentTarget.name === "exp_year") card.cardData.card.exp_year = e.currentTarget.value;
36
+ setCardUpdate(card);
37
+ setShowSave(true);
38
+ }
39
+
40
+ const createCard = async () => {
41
+ const cardData = elements.getElement(CardElement);
42
+ const stripePM = await stripe.createPaymentMethod({
43
+ type: "card",
44
+ card: cardData
45
+ });
46
+ if (stripePM.error) {
47
+ setErrorMessage(stripePM.error.message);
48
+ setShowSave(true);
49
+ } else {
50
+ let pm = { ...paymentMethod };
51
+ pm.id = stripePM.paymentMethod.id;
52
+ await ApiHelper.post("/paymentmethods/addcard", pm, "GivingApi").then(result => {
53
+ if (result?.raw?.message) {
54
+ setErrorMessage(result.raw.message);
55
+ setShowSave(true);
56
+ }
57
+ else {
58
+ props.updateList("Card added successfully");
59
+ props.setMode("display");
60
+ }
61
+ });
62
+ }
63
+ }
64
+
65
+ const updateCard = async () => {
66
+ if (!cardUpdate.cardData.card.exp_month || !cardUpdate.cardData.card.exp_year) setErrorMessage("Expiration month and year cannot be blank.");
67
+ else {
68
+ await ApiHelper.post("/paymentmethods/updatecard", cardUpdate, "GivingApi").then(result => {
69
+ if (result?.raw?.message) {
70
+ setErrorMessage(result.raw.message);
71
+ setShowSave(true);
72
+ }
73
+ else {
74
+ props.updateList("Card updated successfully");
75
+ props.setMode("display");
76
+ }
77
+ });
78
+ }
79
+ }
80
+
81
+ const getHeaderText = () => props.card.id
82
+ ? `${props.card.name.toUpperCase()} ****${props.card.last4}`
83
+ : "Add New Card"
84
+
85
+ return (
86
+ <InputBox headerIcon="volunteer_activism" headerText={getHeaderText()} ariaLabelSave="save-button" ariaLabelDelete="delete-button" cancelFunction={handleCancel} saveFunction={showSave ? handleSave : saveDisabled} deleteFunction={props.card.id ? handleDelete : undefined}>
87
+ {errorMessage && <ErrorMessages errors={[errorMessage]}></ErrorMessages>}
88
+ <div>
89
+ {!props.card.id
90
+ ? <CardElement options={formStyling} />
91
+ : <Grid container spacing={3}>
92
+ <Grid item md={6} xs={12}>
93
+ <TextField fullWidth aria-label="card-exp-month" label="Card Expiration Month:" name="exp_month" value={cardUpdate.cardData.card.exp_month} placeholder="MM" inputProps={{ maxLength: 2 }} onChange={handleChange} onKeyPress={handleKeyPress} />
94
+ </Grid>
95
+ <Grid item md={6} xs={12}>
96
+ <TextField fullWidth aria-label="card-exp-year" label="Card Expiration Year:" name="exp_year" value={cardUpdate.cardData.card.exp_year} placeholder="YY" inputProps={{ maxLength: 2 }} onChange={handleChange} onKeyPress={handleKeyPress} />
97
+ </Grid>
98
+ </Grid>
99
+ }
100
+ </div>
101
+ </InputBox>
102
+ );
103
+
104
+ }