@churchapps/apphelper 0.0.1

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 (641) hide show
  1. package/.eslintignore +4 -0
  2. package/.eslintrc.json +22 -0
  3. package/LICENSE +21 -0
  4. package/README.md +16 -0
  5. package/dist/components/CreatePerson.d.ts +9 -0
  6. package/dist/components/CreatePerson.d.ts.map +1 -0
  7. package/dist/components/CreatePerson.js +80 -0
  8. package/dist/components/CreatePerson.js.map +1 -0
  9. package/dist/components/DisplayBox.d.ts +16 -0
  10. package/dist/components/DisplayBox.d.ts.map +1 -0
  11. package/dist/components/DisplayBox.js +48 -0
  12. package/dist/components/DisplayBox.js.map +1 -0
  13. package/dist/components/ErrorMessages.d.ts +7 -0
  14. package/dist/components/ErrorMessages.d.ts.map +1 -0
  15. package/dist/components/ErrorMessages.js +47 -0
  16. package/dist/components/ErrorMessages.js.map +1 -0
  17. package/dist/components/ExportLink.d.ts +10 -0
  18. package/dist/components/ExportLink.d.ts.map +1 -0
  19. package/dist/components/ExportLink.js +70 -0
  20. package/dist/components/ExportLink.js.map +1 -0
  21. package/dist/components/FloatingSupport.d.ts +7 -0
  22. package/dist/components/FloatingSupport.d.ts.map +1 -0
  23. package/dist/components/FloatingSupport.js +18 -0
  24. package/dist/components/FloatingSupport.js.map +1 -0
  25. package/dist/components/FormSubmissionEdit.d.ts +18 -0
  26. package/dist/components/FormSubmissionEdit.d.ts.map +1 -0
  27. package/dist/components/FormSubmissionEdit.js +125 -0
  28. package/dist/components/FormSubmissionEdit.js.map +1 -0
  29. package/dist/components/HelpIcon.d.ts +7 -0
  30. package/dist/components/HelpIcon.d.ts.map +1 -0
  31. package/dist/components/HelpIcon.js +12 -0
  32. package/dist/components/HelpIcon.js.map +1 -0
  33. package/dist/components/ImageEditor.d.ts +15 -0
  34. package/dist/components/ImageEditor.d.ts.map +1 -0
  35. package/dist/components/ImageEditor.js +109 -0
  36. package/dist/components/ImageEditor.js.map +1 -0
  37. package/dist/components/InputBox.d.ts +24 -0
  38. package/dist/components/InputBox.d.ts.map +1 -0
  39. package/dist/components/InputBox.js +59 -0
  40. package/dist/components/InputBox.js.map +1 -0
  41. package/dist/components/Loading.d.ts +10 -0
  42. package/dist/components/Loading.d.ts.map +1 -0
  43. package/dist/components/Loading.js +34 -0
  44. package/dist/components/Loading.js.map +1 -0
  45. package/dist/components/PersonAdd.d.ts +15 -0
  46. package/dist/components/PersonAdd.d.ts.map +1 -0
  47. package/dist/components/PersonAdd.js +84 -0
  48. package/dist/components/PersonAdd.js.map +1 -0
  49. package/dist/components/QuestionEdit.d.ts +11 -0
  50. package/dist/components/QuestionEdit.d.ts.map +1 -0
  51. package/dist/components/QuestionEdit.js +76 -0
  52. package/dist/components/QuestionEdit.js.map +1 -0
  53. package/dist/components/SmallButton.d.ts +14 -0
  54. package/dist/components/SmallButton.d.ts.map +1 -0
  55. package/dist/components/SmallButton.js +31 -0
  56. package/dist/components/SmallButton.js.map +1 -0
  57. package/dist/components/SupportModal.d.ts +8 -0
  58. package/dist/components/SupportModal.d.ts.map +1 -0
  59. package/dist/components/SupportModal.js +47 -0
  60. package/dist/components/SupportModal.js.map +1 -0
  61. package/dist/components/TabPanel.d.ts +9 -0
  62. package/dist/components/TabPanel.d.ts.map +1 -0
  63. package/dist/components/TabPanel.js +24 -0
  64. package/dist/components/TabPanel.js.map +1 -0
  65. package/dist/components/gallery/GalleryModal.d.ts +9 -0
  66. package/dist/components/gallery/GalleryModal.d.ts.map +1 -0
  67. package/dist/components/gallery/GalleryModal.js +108 -0
  68. package/dist/components/gallery/GalleryModal.js.map +1 -0
  69. package/dist/components/gallery/StockPhotos.d.ts +9 -0
  70. package/dist/components/gallery/StockPhotos.d.ts.map +1 -0
  71. package/dist/components/gallery/StockPhotos.js +82 -0
  72. package/dist/components/gallery/StockPhotos.js.map +1 -0
  73. package/dist/components/index.d.ts +18 -0
  74. package/dist/components/index.d.ts.map +1 -0
  75. package/dist/components/index.js +51 -0
  76. package/dist/components/index.js.map +1 -0
  77. package/dist/components/markdownEditor/Editor.d.ts +12 -0
  78. package/dist/components/markdownEditor/Editor.d.ts.map +1 -0
  79. package/dist/components/markdownEditor/Editor.js +106 -0
  80. package/dist/components/markdownEditor/Editor.js.map +1 -0
  81. package/dist/components/markdownEditor/MarkdownEditor.d.ts +11 -0
  82. package/dist/components/markdownEditor/MarkdownEditor.d.ts.map +1 -0
  83. package/dist/components/markdownEditor/MarkdownEditor.js +39 -0
  84. package/dist/components/markdownEditor/MarkdownEditor.js.map +1 -0
  85. package/dist/components/markdownEditor/MarkdownModal.d.ts +9 -0
  86. package/dist/components/markdownEditor/MarkdownModal.d.ts.map +1 -0
  87. package/dist/components/markdownEditor/MarkdownModal.js +58 -0
  88. package/dist/components/markdownEditor/MarkdownModal.js.map +1 -0
  89. package/dist/components/markdownEditor/MarkdownPreview.d.ts +8 -0
  90. package/dist/components/markdownEditor/MarkdownPreview.d.ts.map +1 -0
  91. package/dist/components/markdownEditor/MarkdownPreview.js +35 -0
  92. package/dist/components/markdownEditor/MarkdownPreview.js.map +1 -0
  93. package/dist/components/markdownEditor/plugins/AutoLinkPlugin.d.ts +3 -0
  94. package/dist/components/markdownEditor/plugins/AutoLinkPlugin.d.ts.map +1 -0
  95. package/dist/components/markdownEditor/plugins/AutoLinkPlugin.js +35 -0
  96. package/dist/components/markdownEditor/plugins/AutoLinkPlugin.js.map +1 -0
  97. package/dist/components/markdownEditor/plugins/ControlledEditorPlugin.d.ts +8 -0
  98. package/dist/components/markdownEditor/plugins/ControlledEditorPlugin.d.ts.map +1 -0
  99. package/dist/components/markdownEditor/plugins/ControlledEditorPlugin.js +20 -0
  100. package/dist/components/markdownEditor/plugins/ControlledEditorPlugin.js.map +1 -0
  101. package/dist/components/markdownEditor/plugins/ListMaxIndentLevelPlugin.d.ts +2 -0
  102. package/dist/components/markdownEditor/plugins/ListMaxIndentLevelPlugin.d.ts.map +1 -0
  103. package/dist/components/markdownEditor/plugins/ListMaxIndentLevelPlugin.js +46 -0
  104. package/dist/components/markdownEditor/plugins/ListMaxIndentLevelPlugin.js.map +1 -0
  105. package/dist/components/markdownEditor/plugins/MarkdownTransformers.d.ts +12 -0
  106. package/dist/components/markdownEditor/plugins/MarkdownTransformers.d.ts.map +1 -0
  107. package/dist/components/markdownEditor/plugins/MarkdownTransformers.js +85 -0
  108. package/dist/components/markdownEditor/plugins/MarkdownTransformers.js.map +1 -0
  109. package/dist/components/markdownEditor/plugins/ReadOnlyPlugin.d.ts +6 -0
  110. package/dist/components/markdownEditor/plugins/ReadOnlyPlugin.d.ts.map +1 -0
  111. package/dist/components/markdownEditor/plugins/ReadOnlyPlugin.js +13 -0
  112. package/dist/components/markdownEditor/plugins/ReadOnlyPlugin.js.map +1 -0
  113. package/dist/components/markdownEditor/plugins/ToolbarPlugin.d.ts +8 -0
  114. package/dist/components/markdownEditor/plugins/ToolbarPlugin.d.ts.map +1 -0
  115. package/dist/components/markdownEditor/plugins/ToolbarPlugin.js +324 -0
  116. package/dist/components/markdownEditor/plugins/ToolbarPlugin.js.map +1 -0
  117. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNode.d.ts +27 -0
  118. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNode.d.ts.map +1 -0
  119. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNode.js +158 -0
  120. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNode.js.map +1 -0
  121. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNodePlugin.d.ts +4 -0
  122. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNodePlugin.d.ts.map +1 -0
  123. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNodePlugin.js +18 -0
  124. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNodePlugin.js.map +1 -0
  125. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNodeTransformer.d.ts +3 -0
  126. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNodeTransformer.d.ts.map +1 -0
  127. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNodeTransformer.js +67 -0
  128. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNodeTransformer.js.map +1 -0
  129. package/dist/components/markdownEditor/plugins/customLink/FloatingLinkEditor.d.ts +5 -0
  130. package/dist/components/markdownEditor/plugins/customLink/FloatingLinkEditor.d.ts.map +1 -0
  131. package/dist/components/markdownEditor/plugins/customLink/FloatingLinkEditor.js +212 -0
  132. package/dist/components/markdownEditor/plugins/customLink/FloatingLinkEditor.js.map +1 -0
  133. package/dist/components/markdownEditor/plugins/customLink/FloatingLinkEditor.types.d.ts +11 -0
  134. package/dist/components/markdownEditor/plugins/customLink/FloatingLinkEditor.types.d.ts.map +1 -0
  135. package/dist/components/markdownEditor/plugins/customLink/FloatingLinkEditor.types.js +3 -0
  136. package/dist/components/markdownEditor/plugins/customLink/FloatingLinkEditor.types.js.map +1 -0
  137. package/dist/components/markdownEditor/plugins/emoji/EmojiNode.d.ts +24 -0
  138. package/dist/components/markdownEditor/plugins/emoji/EmojiNode.d.ts.map +1 -0
  139. package/dist/components/markdownEditor/plugins/emoji/EmojiNode.js +63 -0
  140. package/dist/components/markdownEditor/plugins/emoji/EmojiNode.js.map +1 -0
  141. package/dist/components/markdownEditor/plugins/emoji/EmojiNodeTransform.d.ts +4 -0
  142. package/dist/components/markdownEditor/plugins/emoji/EmojiNodeTransform.d.ts.map +1 -0
  143. package/dist/components/markdownEditor/plugins/emoji/EmojiNodeTransform.js +35 -0
  144. package/dist/components/markdownEditor/plugins/emoji/EmojiNodeTransform.js.map +1 -0
  145. package/dist/components/markdownEditor/plugins/emoji/EmojiPickerPlugin.d.ts +10 -0
  146. package/dist/components/markdownEditor/plugins/emoji/EmojiPickerPlugin.d.ts.map +1 -0
  147. package/dist/components/markdownEditor/plugins/emoji/EmojiPickerPlugin.js +99 -0
  148. package/dist/components/markdownEditor/plugins/emoji/EmojiPickerPlugin.js.map +1 -0
  149. package/dist/components/markdownEditor/plugins/emoji/EmojisPlugin.d.ts +11 -0
  150. package/dist/components/markdownEditor/plugins/emoji/EmojisPlugin.d.ts.map +1 -0
  151. package/dist/components/markdownEditor/plugins/emoji/EmojisPlugin.js +55 -0
  152. package/dist/components/markdownEditor/plugins/emoji/EmojisPlugin.js.map +1 -0
  153. package/dist/components/markdownEditor/plugins/index.d.ts +7 -0
  154. package/dist/components/markdownEditor/plugins/index.d.ts.map +1 -0
  155. package/dist/components/markdownEditor/plugins/index.js +16 -0
  156. package/dist/components/markdownEditor/plugins/index.js.map +1 -0
  157. package/dist/components/markdownEditor/theme.d.ts +66 -0
  158. package/dist/components/markdownEditor/theme.d.ts.map +1 -0
  159. package/dist/components/markdownEditor/theme.js +69 -0
  160. package/dist/components/markdownEditor/theme.js.map +1 -0
  161. package/dist/components/material/AppList.d.ts +9 -0
  162. package/dist/components/material/AppList.d.ts.map +1 -0
  163. package/dist/components/material/AppList.js +21 -0
  164. package/dist/components/material/AppList.js.map +1 -0
  165. package/dist/components/material/ChurchList.d.ts +9 -0
  166. package/dist/components/material/ChurchList.d.ts.map +1 -0
  167. package/dist/components/material/ChurchList.js +25 -0
  168. package/dist/components/material/ChurchList.js.map +1 -0
  169. package/dist/components/material/NavItem.d.ts +14 -0
  170. package/dist/components/material/NavItem.d.ts.map +1 -0
  171. package/dist/components/material/NavItem.js +36 -0
  172. package/dist/components/material/NavItem.js.map +1 -0
  173. package/dist/components/material/NewPrivateMessage.d.ts +10 -0
  174. package/dist/components/material/NewPrivateMessage.d.ts.map +1 -0
  175. package/dist/components/material/NewPrivateMessage.js +96 -0
  176. package/dist/components/material/NewPrivateMessage.js.map +1 -0
  177. package/dist/components/material/PrivateMessageDetails.d.ts +10 -0
  178. package/dist/components/material/PrivateMessageDetails.d.ts.map +1 -0
  179. package/dist/components/material/PrivateMessageDetails.js +18 -0
  180. package/dist/components/material/PrivateMessageDetails.js.map +1 -0
  181. package/dist/components/material/PrivateMessages.d.ts +8 -0
  182. package/dist/components/material/PrivateMessages.d.ts.map +1 -0
  183. package/dist/components/material/PrivateMessages.js +105 -0
  184. package/dist/components/material/PrivateMessages.js.map +1 -0
  185. package/dist/components/material/SiteWrapper.d.ts +14 -0
  186. package/dist/components/material/SiteWrapper.d.ts.map +1 -0
  187. package/dist/components/material/SiteWrapper.js +120 -0
  188. package/dist/components/material/SiteWrapper.js.map +1 -0
  189. package/dist/components/material/UserMenu.d.ts +14 -0
  190. package/dist/components/material/UserMenu.d.ts.map +1 -0
  191. package/dist/components/material/UserMenu.js +98 -0
  192. package/dist/components/material/UserMenu.js.map +1 -0
  193. package/dist/components/material/iconPicker/IconNamesList.d.ts +3 -0
  194. package/dist/components/material/iconPicker/IconNamesList.d.ts.map +1 -0
  195. package/dist/components/material/iconPicker/IconNamesList.js +2241 -0
  196. package/dist/components/material/iconPicker/IconNamesList.js.map +1 -0
  197. package/dist/components/material/iconPicker/IconPicker.d.ts +7 -0
  198. package/dist/components/material/iconPicker/IconPicker.d.ts.map +1 -0
  199. package/dist/components/material/iconPicker/IconPicker.js +136 -0
  200. package/dist/components/material/iconPicker/IconPicker.js.map +1 -0
  201. package/dist/components/material/index.d.ts +6 -0
  202. package/dist/components/material/index.d.ts.map +1 -0
  203. package/dist/components/material/index.js +14 -0
  204. package/dist/components/material/index.js.map +1 -0
  205. package/dist/components/notes/AddNote.d.ts +12 -0
  206. package/dist/components/notes/AddNote.d.ts.map +1 -0
  207. package/dist/components/notes/AddNote.js +123 -0
  208. package/dist/components/notes/AddNote.js.map +1 -0
  209. package/dist/components/notes/Conversation.d.ts +11 -0
  210. package/dist/components/notes/Conversation.d.ts.map +1 -0
  211. package/dist/components/notes/Conversation.js +85 -0
  212. package/dist/components/notes/Conversation.js.map +1 -0
  213. package/dist/components/notes/Conversations.d.ts +11 -0
  214. package/dist/components/notes/Conversations.d.ts.map +1 -0
  215. package/dist/components/notes/Conversations.js +64 -0
  216. package/dist/components/notes/Conversations.js.map +1 -0
  217. package/dist/components/notes/NewConversation.d.ts +13 -0
  218. package/dist/components/notes/NewConversation.d.ts.map +1 -0
  219. package/dist/components/notes/NewConversation.js +86 -0
  220. package/dist/components/notes/NewConversation.js.map +1 -0
  221. package/dist/components/notes/Note.d.ts +9 -0
  222. package/dist/components/notes/Note.d.ts.map +1 -0
  223. package/dist/components/notes/Note.js +58 -0
  224. package/dist/components/notes/Note.js.map +1 -0
  225. package/dist/components/notes/Notes.d.ts +11 -0
  226. package/dist/components/notes/Notes.d.ts.map +1 -0
  227. package/dist/components/notes/Notes.js +59 -0
  228. package/dist/components/notes/Notes.js.map +1 -0
  229. package/dist/components/reporting/ChartReport.d.ts +9 -0
  230. package/dist/components/reporting/ChartReport.d.ts.map +1 -0
  231. package/dist/components/reporting/ChartReport.js +93 -0
  232. package/dist/components/reporting/ChartReport.js.map +1 -0
  233. package/dist/components/reporting/ReportFilter.d.ts +10 -0
  234. package/dist/components/reporting/ReportFilter.d.ts.map +1 -0
  235. package/dist/components/reporting/ReportFilter.js +54 -0
  236. package/dist/components/reporting/ReportFilter.js.map +1 -0
  237. package/dist/components/reporting/ReportFilterField.d.ts +10 -0
  238. package/dist/components/reporting/ReportFilterField.d.ts.map +1 -0
  239. package/dist/components/reporting/ReportFilterField.js +167 -0
  240. package/dist/components/reporting/ReportFilterField.js.map +1 -0
  241. package/dist/components/reporting/ReportOutput.d.ts +8 -0
  242. package/dist/components/reporting/ReportOutput.d.ts.map +1 -0
  243. package/dist/components/reporting/ReportOutput.js +95 -0
  244. package/dist/components/reporting/ReportOutput.js.map +1 -0
  245. package/dist/components/reporting/ReportWithFilter.d.ts +8 -0
  246. package/dist/components/reporting/ReportWithFilter.d.ts.map +1 -0
  247. package/dist/components/reporting/ReportWithFilter.js +67 -0
  248. package/dist/components/reporting/ReportWithFilter.js.map +1 -0
  249. package/dist/components/reporting/TableReport.d.ts +9 -0
  250. package/dist/components/reporting/TableReport.d.ts.map +1 -0
  251. package/dist/components/reporting/TableReport.js +50 -0
  252. package/dist/components/reporting/TableReport.js.map +1 -0
  253. package/dist/components/reporting/TreeReport.d.ts +9 -0
  254. package/dist/components/reporting/TreeReport.d.ts.map +1 -0
  255. package/dist/components/reporting/TreeReport.js +104 -0
  256. package/dist/components/reporting/TreeReport.js.map +1 -0
  257. package/dist/components/reporting/index.d.ts +5 -0
  258. package/dist/components/reporting/index.d.ts.map +1 -0
  259. package/dist/components/reporting/index.js +12 -0
  260. package/dist/components/reporting/index.js.map +1 -0
  261. package/dist/donationComponents/DonationPage.d.ts +9 -0
  262. package/dist/donationComponents/DonationPage.d.ts.map +1 -0
  263. package/dist/donationComponents/DonationPage.js +128 -0
  264. package/dist/donationComponents/DonationPage.js.map +1 -0
  265. package/dist/donationComponents/components/BankForm.d.ts +14 -0
  266. package/dist/donationComponents/components/BankForm.d.ts.map +1 -0
  267. package/dist/donationComponents/components/BankForm.js +161 -0
  268. package/dist/donationComponents/components/BankForm.js.map +1 -0
  269. package/dist/donationComponents/components/CardForm.d.ts +13 -0
  270. package/dist/donationComponents/components/CardForm.d.ts.map +1 -0
  271. package/dist/donationComponents/components/CardForm.js +128 -0
  272. package/dist/donationComponents/components/CardForm.js.map +1 -0
  273. package/dist/donationComponents/components/DonationForm.d.ts +14 -0
  274. package/dist/donationComponents/components/DonationForm.d.ts.map +1 -0
  275. package/dist/donationComponents/components/DonationForm.js +227 -0
  276. package/dist/donationComponents/components/DonationForm.js.map +1 -0
  277. package/dist/donationComponents/components/FundDonation.d.ts +11 -0
  278. package/dist/donationComponents/components/FundDonation.d.ts.map +1 -0
  279. package/dist/donationComponents/components/FundDonation.js +37 -0
  280. package/dist/donationComponents/components/FundDonation.js.map +1 -0
  281. package/dist/donationComponents/components/FundDonations.d.ts +10 -0
  282. package/dist/donationComponents/components/FundDonations.d.ts.map +1 -0
  283. package/dist/donationComponents/components/FundDonations.js +35 -0
  284. package/dist/donationComponents/components/FundDonations.js.map +1 -0
  285. package/dist/donationComponents/components/NonAuthDonation.d.ts +11 -0
  286. package/dist/donationComponents/components/NonAuthDonation.d.ts.map +1 -0
  287. package/dist/donationComponents/components/NonAuthDonation.js +40 -0
  288. package/dist/donationComponents/components/NonAuthDonation.js.map +1 -0
  289. package/dist/donationComponents/components/NonAuthDonationInner.d.ts +11 -0
  290. package/dist/donationComponents/components/NonAuthDonationInner.d.ts.map +1 -0
  291. package/dist/donationComponents/components/NonAuthDonationInner.js +246 -0
  292. package/dist/donationComponents/components/NonAuthDonationInner.js.map +1 -0
  293. package/dist/donationComponents/components/PaymentMethods.d.ts +14 -0
  294. package/dist/donationComponents/components/PaymentMethods.d.ts.map +1 -0
  295. package/dist/donationComponents/components/PaymentMethods.js +113 -0
  296. package/dist/donationComponents/components/PaymentMethods.js.map +1 -0
  297. package/dist/donationComponents/components/RecurringDonations.d.ts +10 -0
  298. package/dist/donationComponents/components/RecurringDonations.d.ts.map +1 -0
  299. package/dist/donationComponents/components/RecurringDonations.js +118 -0
  300. package/dist/donationComponents/components/RecurringDonations.js.map +1 -0
  301. package/dist/donationComponents/components/RecurringDonationsEdit.d.ts +11 -0
  302. package/dist/donationComponents/components/RecurringDonationsEdit.d.ts.map +1 -0
  303. package/dist/donationComponents/components/RecurringDonationsEdit.js +81 -0
  304. package/dist/donationComponents/components/RecurringDonationsEdit.js.map +1 -0
  305. package/dist/donationComponents/components/index.d.ts +10 -0
  306. package/dist/donationComponents/components/index.d.ts.map +1 -0
  307. package/dist/donationComponents/components/index.js +22 -0
  308. package/dist/donationComponents/components/index.js.map +1 -0
  309. package/dist/donationComponents/modals/DonationPreviewModal.d.ts +15 -0
  310. package/dist/donationComponents/modals/DonationPreviewModal.d.ts.map +1 -0
  311. package/dist/donationComponents/modals/DonationPreviewModal.js +73 -0
  312. package/dist/donationComponents/modals/DonationPreviewModal.js.map +1 -0
  313. package/dist/helpers/AnalyticsHelper.d.ts +7 -0
  314. package/dist/helpers/AnalyticsHelper.d.ts.map +1 -0
  315. package/dist/helpers/AnalyticsHelper.js +39 -0
  316. package/dist/helpers/AnalyticsHelper.js.map +1 -0
  317. package/dist/helpers/ApiHelper.d.ts +18 -0
  318. package/dist/helpers/ApiHelper.d.ts.map +1 -0
  319. package/dist/helpers/ApiHelper.js +145 -0
  320. package/dist/helpers/ApiHelper.js.map +1 -0
  321. package/dist/helpers/AppearanceHelper.d.ts +19 -0
  322. package/dist/helpers/AppearanceHelper.d.ts.map +1 -0
  323. package/dist/helpers/AppearanceHelper.js +64 -0
  324. package/dist/helpers/AppearanceHelper.js.map +1 -0
  325. package/dist/helpers/ArrayHelper.d.ts +12 -0
  326. package/dist/helpers/ArrayHelper.d.ts.map +1 -0
  327. package/dist/helpers/ArrayHelper.js +88 -0
  328. package/dist/helpers/ArrayHelper.js.map +1 -0
  329. package/dist/helpers/CommonEnvironmentHelper.d.ts +20 -0
  330. package/dist/helpers/CommonEnvironmentHelper.d.ts.map +1 -0
  331. package/dist/helpers/CommonEnvironmentHelper.js +82 -0
  332. package/dist/helpers/CommonEnvironmentHelper.js.map +1 -0
  333. package/dist/helpers/CurrencyHelper.d.ts +4 -0
  334. package/dist/helpers/CurrencyHelper.d.ts.map +1 -0
  335. package/dist/helpers/CurrencyHelper.js +15 -0
  336. package/dist/helpers/CurrencyHelper.js.map +1 -0
  337. package/dist/helpers/DateHelper.d.ts +19 -0
  338. package/dist/helpers/DateHelper.d.ts.map +1 -0
  339. package/dist/helpers/DateHelper.js +108 -0
  340. package/dist/helpers/DateHelper.js.map +1 -0
  341. package/dist/helpers/DonationHelper.d.ts +8 -0
  342. package/dist/helpers/DonationHelper.d.ts.map +1 -0
  343. package/dist/helpers/DonationHelper.js +33 -0
  344. package/dist/helpers/DonationHelper.js.map +1 -0
  345. package/dist/helpers/ErrorHelper.d.ts +13 -0
  346. package/dist/helpers/ErrorHelper.d.ts.map +1 -0
  347. package/dist/helpers/ErrorHelper.js +34 -0
  348. package/dist/helpers/ErrorHelper.js.map +1 -0
  349. package/dist/helpers/EventHelper.d.ts +11 -0
  350. package/dist/helpers/EventHelper.d.ts.map +1 -0
  351. package/dist/helpers/EventHelper.js +47 -0
  352. package/dist/helpers/EventHelper.js.map +1 -0
  353. package/dist/helpers/FileHelper.d.ts +5 -0
  354. package/dist/helpers/FileHelper.d.ts.map +1 -0
  355. package/dist/helpers/FileHelper.js +34 -0
  356. package/dist/helpers/FileHelper.js.map +1 -0
  357. package/dist/helpers/PersonHelper.d.ts +11 -0
  358. package/dist/helpers/PersonHelper.d.ts.map +1 -0
  359. package/dist/helpers/PersonHelper.js +53 -0
  360. package/dist/helpers/PersonHelper.js.map +1 -0
  361. package/dist/helpers/SocketHelper.d.ts +16 -0
  362. package/dist/helpers/SocketHelper.d.ts.map +1 -0
  363. package/dist/helpers/SocketHelper.js +87 -0
  364. package/dist/helpers/SocketHelper.js.map +1 -0
  365. package/dist/helpers/Themes.d.ts +9 -0
  366. package/dist/helpers/Themes.d.ts.map +1 -0
  367. package/dist/helpers/Themes.js +16 -0
  368. package/dist/helpers/Themes.js.map +1 -0
  369. package/dist/helpers/UniqueIdHelper.d.ts +9 -0
  370. package/dist/helpers/UniqueIdHelper.d.ts.map +1 -0
  371. package/dist/helpers/UniqueIdHelper.js +37 -0
  372. package/dist/helpers/UniqueIdHelper.js.map +1 -0
  373. package/dist/helpers/UserHelper.d.ts +14 -0
  374. package/dist/helpers/UserHelper.d.ts.map +1 -0
  375. package/dist/helpers/UserHelper.js +68 -0
  376. package/dist/helpers/UserHelper.js.map +1 -0
  377. package/dist/helpers/createEmotionCache.d.ts +2 -0
  378. package/dist/helpers/createEmotionCache.d.ts.map +1 -0
  379. package/dist/helpers/createEmotionCache.js +21 -0
  380. package/dist/helpers/createEmotionCache.js.map +1 -0
  381. package/dist/helpers/index.d.ts +16 -0
  382. package/dist/helpers/index.d.ts.map +1 -0
  383. package/dist/helpers/index.js +47 -0
  384. package/dist/helpers/index.js.map +1 -0
  385. package/dist/hooks/index.d.ts +2 -0
  386. package/dist/hooks/index.d.ts.map +1 -0
  387. package/dist/hooks/index.js +6 -0
  388. package/dist/hooks/index.js.map +1 -0
  389. package/dist/hooks/useMountedState.d.ts +2 -0
  390. package/dist/hooks/useMountedState.d.ts.map +1 -0
  391. package/dist/hooks/useMountedState.js +17 -0
  392. package/dist/hooks/useMountedState.js.map +1 -0
  393. package/dist/index.d.ts +7 -0
  394. package/dist/index.d.ts.map +1 -0
  395. package/dist/index.js +25 -0
  396. package/dist/index.js.map +1 -0
  397. package/dist/interfaces/Access.d.ts +131 -0
  398. package/dist/interfaces/Access.d.ts.map +1 -0
  399. package/dist/interfaces/Access.js +3 -0
  400. package/dist/interfaces/Access.js.map +1 -0
  401. package/dist/interfaces/Attendance.d.ts +45 -0
  402. package/dist/interfaces/Attendance.d.ts.map +1 -0
  403. package/dist/interfaces/Attendance.js +3 -0
  404. package/dist/interfaces/Attendance.js.map +1 -0
  405. package/dist/interfaces/Content.d.ts +86 -0
  406. package/dist/interfaces/Content.d.ts.map +1 -0
  407. package/dist/interfaces/Content.js +3 -0
  408. package/dist/interfaces/Content.js.map +1 -0
  409. package/dist/interfaces/Doing.d.ts +50 -0
  410. package/dist/interfaces/Doing.d.ts.map +1 -0
  411. package/dist/interfaces/Doing.js +3 -0
  412. package/dist/interfaces/Doing.js.map +1 -0
  413. package/dist/interfaces/Donation.d.ts +138 -0
  414. package/dist/interfaces/Donation.d.ts.map +1 -0
  415. package/dist/interfaces/Donation.js +24 -0
  416. package/dist/interfaces/Donation.js.map +1 -0
  417. package/dist/interfaces/Error.d.ts +17 -0
  418. package/dist/interfaces/Error.d.ts.map +1 -0
  419. package/dist/interfaces/Error.js +4 -0
  420. package/dist/interfaces/Error.js.map +1 -0
  421. package/dist/interfaces/Membership.d.ts +172 -0
  422. package/dist/interfaces/Membership.d.ts.map +1 -0
  423. package/dist/interfaces/Membership.js +3 -0
  424. package/dist/interfaces/Membership.js.map +1 -0
  425. package/dist/interfaces/Messaging.d.ts +59 -0
  426. package/dist/interfaces/Messaging.d.ts.map +1 -0
  427. package/dist/interfaces/Messaging.js +3 -0
  428. package/dist/interfaces/Messaging.js.map +1 -0
  429. package/dist/interfaces/Permissions.d.ts +159 -0
  430. package/dist/interfaces/Permissions.d.ts.map +1 -0
  431. package/dist/interfaces/Permissions.js +67 -0
  432. package/dist/interfaces/Permissions.js.map +1 -0
  433. package/dist/interfaces/Reporting.d.ts +45 -0
  434. package/dist/interfaces/Reporting.d.ts.map +1 -0
  435. package/dist/interfaces/Reporting.js +3 -0
  436. package/dist/interfaces/Reporting.js.map +1 -0
  437. package/dist/interfaces/UserContextInterface.d.ts +13 -0
  438. package/dist/interfaces/UserContextInterface.d.ts.map +1 -0
  439. package/dist/interfaces/UserContextInterface.js +3 -0
  440. package/dist/interfaces/UserContextInterface.js.map +1 -0
  441. package/dist/interfaces/index.d.ts +11 -0
  442. package/dist/interfaces/index.d.ts.map +1 -0
  443. package/dist/interfaces/index.js +28 -0
  444. package/dist/interfaces/index.js.map +1 -0
  445. package/dist/pageComponents/LoginPage.d.ts +22 -0
  446. package/dist/pageComponents/LoginPage.d.ts.map +1 -0
  447. package/dist/pageComponents/LoginPage.js +287 -0
  448. package/dist/pageComponents/LoginPage.js.map +1 -0
  449. package/dist/pageComponents/LogoutPage.d.ts +8 -0
  450. package/dist/pageComponents/LogoutPage.d.ts.map +1 -0
  451. package/dist/pageComponents/LogoutPage.js +26 -0
  452. package/dist/pageComponents/LogoutPage.js.map +1 -0
  453. package/dist/pageComponents/components/Forgot.d.ts +8 -0
  454. package/dist/pageComponents/components/Forgot.d.ts.map +1 -0
  455. package/dist/pageComponents/components/Forgot.js +70 -0
  456. package/dist/pageComponents/components/Forgot.js.map +1 -0
  457. package/dist/pageComponents/components/Login.d.ts +13 -0
  458. package/dist/pageComponents/components/Login.d.ts.map +1 -0
  459. package/dist/pageComponents/components/Login.js +57 -0
  460. package/dist/pageComponents/components/Login.js.map +1 -0
  461. package/dist/pageComponents/components/LoginSetPassword.d.ts +13 -0
  462. package/dist/pageComponents/components/LoginSetPassword.d.ts.map +1 -0
  463. package/dist/pageComponents/components/LoginSetPassword.js +68 -0
  464. package/dist/pageComponents/components/LoginSetPassword.js.map +1 -0
  465. package/dist/pageComponents/components/Register.d.ts +12 -0
  466. package/dist/pageComponents/components/Register.d.ts.map +1 -0
  467. package/dist/pageComponents/components/Register.js +105 -0
  468. package/dist/pageComponents/components/Register.js.map +1 -0
  469. package/dist/pageComponents/components/SelectChurchModal.d.ts +13 -0
  470. package/dist/pageComponents/components/SelectChurchModal.d.ts.map +1 -0
  471. package/dist/pageComponents/components/SelectChurchModal.js +33 -0
  472. package/dist/pageComponents/components/SelectChurchModal.js.map +1 -0
  473. package/dist/pageComponents/components/SelectChurchRegister.d.ts +11 -0
  474. package/dist/pageComponents/components/SelectChurchRegister.d.ts.map +1 -0
  475. package/dist/pageComponents/components/SelectChurchRegister.js +114 -0
  476. package/dist/pageComponents/components/SelectChurchRegister.js.map +1 -0
  477. package/dist/pageComponents/components/SelectChurchSearch.d.ts +10 -0
  478. package/dist/pageComponents/components/SelectChurchSearch.d.ts.map +1 -0
  479. package/dist/pageComponents/components/SelectChurchSearch.js +61 -0
  480. package/dist/pageComponents/components/SelectChurchSearch.js.map +1 -0
  481. package/dist/pageComponents/components/SelectableChurch.d.ts +9 -0
  482. package/dist/pageComponents/components/SelectableChurch.d.ts.map +1 -0
  483. package/dist/pageComponents/components/SelectableChurch.js +31 -0
  484. package/dist/pageComponents/components/SelectableChurch.js.map +1 -0
  485. package/dist/pageComponents/index.d.ts +4 -0
  486. package/dist/pageComponents/index.d.ts.map +1 -0
  487. package/dist/pageComponents/index.js +10 -0
  488. package/dist/pageComponents/index.js.map +1 -0
  489. package/package.json +77 -0
  490. package/src/components/CreatePerson.tsx +80 -0
  491. package/src/components/DisplayBox.tsx +68 -0
  492. package/src/components/ErrorMessages.tsx +26 -0
  493. package/src/components/ExportLink.tsx +61 -0
  494. package/src/components/FloatingSupport.tsx +16 -0
  495. package/src/components/FormSubmissionEdit.tsx +122 -0
  496. package/src/components/HelpIcon.tsx +10 -0
  497. package/src/components/ImageEditor.tsx +126 -0
  498. package/src/components/InputBox.tsx +73 -0
  499. package/src/components/Loading.tsx +29 -0
  500. package/src/components/PersonAdd.tsx +75 -0
  501. package/src/components/QuestionEdit.tsx +62 -0
  502. package/src/components/SmallButton.tsx +39 -0
  503. package/src/components/SupportModal.tsx +26 -0
  504. package/src/components/TabPanel.tsx +34 -0
  505. package/src/components/gallery/GalleryModal.tsx +102 -0
  506. package/src/components/gallery/StockPhotos.tsx +74 -0
  507. package/src/components/index.tsx +18 -0
  508. package/src/components/markdownEditor/Editor.tsx +132 -0
  509. package/src/components/markdownEditor/MarkdownEditor.tsx +16 -0
  510. package/src/components/markdownEditor/MarkdownModal.tsx +46 -0
  511. package/src/components/markdownEditor/MarkdownPreview.tsx +14 -0
  512. package/src/components/markdownEditor/editor.css +787 -0
  513. package/src/components/markdownEditor/images/emoji/1F600.png +0 -0
  514. package/src/components/markdownEditor/images/emoji/1F641.png +0 -0
  515. package/src/components/markdownEditor/images/emoji/1F642.png +0 -0
  516. package/src/components/markdownEditor/images/emoji/2764.png +0 -0
  517. package/src/components/markdownEditor/images/icons/arrow-clockwise.svg +4 -0
  518. package/src/components/markdownEditor/images/icons/arrow-counterclockwise.svg +4 -0
  519. package/src/components/markdownEditor/images/icons/chat-square-quote.svg +4 -0
  520. package/src/components/markdownEditor/images/icons/chevron-down.svg +3 -0
  521. package/src/components/markdownEditor/images/icons/code.svg +3 -0
  522. package/src/components/markdownEditor/images/icons/journal-code.svg +5 -0
  523. package/src/components/markdownEditor/images/icons/journal-text.svg +5 -0
  524. package/src/components/markdownEditor/images/icons/justify.svg +3 -0
  525. package/src/components/markdownEditor/images/icons/link.svg +4 -0
  526. package/src/components/markdownEditor/images/icons/list-ol.svg +4 -0
  527. package/src/components/markdownEditor/images/icons/list-ul.svg +3 -0
  528. package/src/components/markdownEditor/images/icons/pencil-fill.svg +3 -0
  529. package/src/components/markdownEditor/images/icons/text-center.svg +3 -0
  530. package/src/components/markdownEditor/images/icons/text-left.svg +3 -0
  531. package/src/components/markdownEditor/images/icons/text-paragraph.svg +3 -0
  532. package/src/components/markdownEditor/images/icons/text-right.svg +3 -0
  533. package/src/components/markdownEditor/images/icons/type-bold.svg +3 -0
  534. package/src/components/markdownEditor/images/icons/type-h1.svg +3 -0
  535. package/src/components/markdownEditor/images/icons/type-h2.svg +3 -0
  536. package/src/components/markdownEditor/images/icons/type-h3.svg +3 -0
  537. package/src/components/markdownEditor/images/icons/type-h4.svg +13 -0
  538. package/src/components/markdownEditor/images/icons/type-italic.svg +3 -0
  539. package/src/components/markdownEditor/images/icons/type-strikethrough.svg +3 -0
  540. package/src/components/markdownEditor/images/icons/type-underline.svg +3 -0
  541. package/src/components/markdownEditor/plugins/AutoLinkPlugin.tsx +35 -0
  542. package/src/components/markdownEditor/plugins/ControlledEditorPlugin.tsx +24 -0
  543. package/src/components/markdownEditor/plugins/ListMaxIndentLevelPlugin.tsx +68 -0
  544. package/src/components/markdownEditor/plugins/MarkdownTransformers.ts +106 -0
  545. package/src/components/markdownEditor/plugins/ReadOnlyPlugin.tsx +15 -0
  546. package/src/components/markdownEditor/plugins/ToolbarPlugin.tsx +401 -0
  547. package/src/components/markdownEditor/plugins/customLink/CustomLinkNode.tsx +224 -0
  548. package/src/components/markdownEditor/plugins/customLink/CustomLinkNodePlugin.tsx +32 -0
  549. package/src/components/markdownEditor/plugins/customLink/CustomLinkNodeTransformer.tsx +102 -0
  550. package/src/components/markdownEditor/plugins/customLink/FloatingLinkEditor.tsx +243 -0
  551. package/src/components/markdownEditor/plugins/customLink/FloatingLinkEditor.types.ts +11 -0
  552. package/src/components/markdownEditor/plugins/emoji/EmojiNode.tsx +95 -0
  553. package/src/components/markdownEditor/plugins/emoji/EmojiNodeTransform.ts +41 -0
  554. package/src/components/markdownEditor/plugins/emoji/EmojiPickerPlugin.tsx +152 -0
  555. package/src/components/markdownEditor/plugins/emoji/EmojisPlugin.tsx +65 -0
  556. package/src/components/markdownEditor/plugins/index.ts +6 -0
  557. package/src/components/markdownEditor/theme.ts +65 -0
  558. package/src/components/material/AppList.tsx +20 -0
  559. package/src/components/material/ChurchList.tsx +22 -0
  560. package/src/components/material/NavItem.tsx +41 -0
  561. package/src/components/material/NewPrivateMessage.tsx +103 -0
  562. package/src/components/material/PrivateMessageDetails.tsx +23 -0
  563. package/src/components/material/PrivateMessages.tsx +87 -0
  564. package/src/components/material/SiteWrapper.tsx +140 -0
  565. package/src/components/material/UserMenu.tsx +141 -0
  566. package/src/components/material/iconPicker/IconNamesList.ts +2240 -0
  567. package/src/components/material/iconPicker/IconPicker.tsx +153 -0
  568. package/src/components/material/index.tsx +5 -0
  569. package/src/components/notes/AddNote.tsx +90 -0
  570. package/src/components/notes/Conversation.tsx +82 -0
  571. package/src/components/notes/Conversations.tsx +58 -0
  572. package/src/components/notes/NewConversation.tsx +78 -0
  573. package/src/components/notes/Note.tsx +44 -0
  574. package/src/components/notes/Notes.tsx +52 -0
  575. package/src/components/reporting/ChartReport.tsx +98 -0
  576. package/src/components/reporting/ReportFilter.tsx +54 -0
  577. package/src/components/reporting/ReportFilterField.tsx +160 -0
  578. package/src/components/reporting/ReportOutput.tsx +79 -0
  579. package/src/components/reporting/ReportWithFilter.tsx +70 -0
  580. package/src/components/reporting/TableReport.tsx +57 -0
  581. package/src/components/reporting/TreeReport.tsx +111 -0
  582. package/src/components/reporting/index.ts +4 -0
  583. package/src/donationComponents/DonationPage.tsx +136 -0
  584. package/src/donationComponents/components/BankForm.tsx +159 -0
  585. package/src/donationComponents/components/CardForm.tsx +104 -0
  586. package/src/donationComponents/components/DonationForm.tsx +228 -0
  587. package/src/donationComponents/components/FundDonation.tsx +49 -0
  588. package/src/donationComponents/components/FundDonations.tsx +39 -0
  589. package/src/donationComponents/components/NonAuthDonation.tsx +31 -0
  590. package/src/donationComponents/components/NonAuthDonationInner.tsx +208 -0
  591. package/src/donationComponents/components/PaymentMethods.tsx +135 -0
  592. package/src/donationComponents/components/RecurringDonations.tsx +121 -0
  593. package/src/donationComponents/components/RecurringDonationsEdit.tsx +93 -0
  594. package/src/donationComponents/components/index.tsx +9 -0
  595. package/src/donationComponents/modals/DonationPreviewModal.tsx +66 -0
  596. package/src/helpers/AnalyticsHelper.ts +33 -0
  597. package/src/helpers/ApiHelper.ts +125 -0
  598. package/src/helpers/AppearanceHelper.ts +69 -0
  599. package/src/helpers/ArrayHelper.ts +81 -0
  600. package/src/helpers/CommonEnvironmentHelper.ts +80 -0
  601. package/src/helpers/CurrencyHelper.ts +10 -0
  602. package/src/helpers/DateHelper.ts +108 -0
  603. package/src/helpers/DonationHelper.ts +26 -0
  604. package/src/helpers/ErrorHelper.ts +36 -0
  605. package/src/helpers/EventHelper.ts +52 -0
  606. package/src/helpers/FileHelper.ts +31 -0
  607. package/src/helpers/PersonHelper.ts +60 -0
  608. package/src/helpers/SocketHelper.ts +76 -0
  609. package/src/helpers/Themes.ts +14 -0
  610. package/src/helpers/UniqueIdHelper.ts +36 -0
  611. package/src/helpers/UserHelper.ts +59 -0
  612. package/src/helpers/createEmotionCache.ts +17 -0
  613. package/src/helpers/index.ts +15 -0
  614. package/src/hooks/index.ts +1 -0
  615. package/src/hooks/useMountedState.ts +16 -0
  616. package/src/index.ts +6 -0
  617. package/src/interfaces/Access.ts +24 -0
  618. package/src/interfaces/Attendance.ts +8 -0
  619. package/src/interfaces/Content.ts +10 -0
  620. package/src/interfaces/Doing.ts +24 -0
  621. package/src/interfaces/Donation.ts +45 -0
  622. package/src/interfaces/Error.ts +17 -0
  623. package/src/interfaces/Membership.ts +51 -0
  624. package/src/interfaces/Messaging.ts +20 -0
  625. package/src/interfaces/Permissions.ts +68 -0
  626. package/src/interfaces/Reporting.ts +7 -0
  627. package/src/interfaces/UserContextInterface.ts +13 -0
  628. package/src/interfaces/index.ts +12 -0
  629. package/src/pageComponents/LoginPage.tsx +244 -0
  630. package/src/pageComponents/LogoutPage.tsx +28 -0
  631. package/src/pageComponents/components/Forgot.tsx +79 -0
  632. package/src/pageComponents/components/Login.tsx +54 -0
  633. package/src/pageComponents/components/LoginSetPassword.tsx +63 -0
  634. package/src/pageComponents/components/Register.tsx +107 -0
  635. package/src/pageComponents/components/SelectChurchModal.tsx +41 -0
  636. package/src/pageComponents/components/SelectChurchRegister.tsx +88 -0
  637. package/src/pageComponents/components/SelectChurchSearch.tsx +69 -0
  638. package/src/pageComponents/components/SelectableChurch.tsx +38 -0
  639. package/src/pageComponents/index.ts +3 -0
  640. package/tsconfig.json +35 -0
  641. package/tslint.json +15 -0
@@ -0,0 +1,208 @@
1
+ import { CardElement, useElements, useStripe } from "@stripe/react-stripe-js";
2
+ import React, { useState, useRef } from "react";
3
+ import ReCAPTCHA from "react-google-recaptcha";
4
+ import { ErrorMessages, InputBox } from "../../components";
5
+ import { ApiHelper, DateHelper } from "../../helpers";
6
+ import { FundDonationInterface, FundInterface, PersonInterface, StripeDonationInterface, StripePaymentMethod, UserInterface } from "../../interfaces";
7
+ import { FundDonations } from "./FundDonations";
8
+ import { Grid, Alert, TextField, Button, FormControl, InputLabel, Select, MenuItem, PaperProps } from "@mui/material"
9
+ import { DonationHelper } from "../../helpers/DonationHelper";
10
+
11
+ interface Props { churchId: string, mainContainerCssProps?: PaperProps, showHeader?: boolean, recaptchaSiteKey: string }
12
+
13
+ export const NonAuthDonationInner: React.FC<Props> = ({ mainContainerCssProps, showHeader = true, ...props }) => {
14
+ const stripe = useStripe();
15
+ const elements = useElements();
16
+ const formStyling = { style: { base: { fontSize: "18px" } } };
17
+ const [firstName, setFirstName] = React.useState("");
18
+ const [lastName, setLastName] = React.useState("");
19
+ const [email, setEmail] = React.useState("");
20
+ const [amount, setAmount] = React.useState(0);
21
+ const [errors, setErrors] = React.useState([]);
22
+ const [fundDonations, setFundDonations] = React.useState<FundDonationInterface[]>([]);
23
+ const [funds, setFunds] = React.useState<FundInterface[]>([]);
24
+ const [donationComplete, setDonationComplete] = React.useState(false);
25
+ const [processing, setProcessing] = React.useState(false);
26
+ const [donationType, setDonationType] = useState<"once" | "recurring">("once");
27
+ const [interval, setInterval] = useState("one_month");
28
+ const [startDate, setStartDate] = useState(new Date().toDateString());
29
+ const [captchaResponse, setCaptchaResponse] = useState("");
30
+ const captchaRef = useRef(null);
31
+
32
+ const init = () => {
33
+ ApiHelper.get("/funds/churchId/" + props.churchId, "GivingApi").then(data => {
34
+ setFunds(data);
35
+ if (data.length) setFundDonations([{ fundId: data[0].id }]);
36
+ });
37
+ }
38
+
39
+ const handleCaptchaChange = (value: string) => {
40
+ const captchaToken = captchaRef.current.getValue();
41
+ ApiHelper.postAnonymous("/donate/captcha-verify", { token: captchaToken }, "GivingApi").then((data) => { setCaptchaResponse(data.response); })
42
+ }
43
+
44
+ const handleSave = async () => {
45
+ if (validate()) {
46
+ setProcessing(true);
47
+ ApiHelper.post("/users/loadOrCreate", { userEmail: email, firstName, lastName }, "MembershipApi")
48
+ .catch(ex => { setErrors([ex.toString()]); setProcessing(false); })
49
+ .then(async userData => {
50
+ const personData = { churchId: props.churchId, firstName, lastName, email };
51
+ const person = await ApiHelper.post("/people/loadOrCreate", personData, "MembershipApi")
52
+ saveCard(userData, person)
53
+ });
54
+ }
55
+ }
56
+
57
+ const saveCard = async (user: UserInterface, person: PersonInterface) => {
58
+ const cardData = elements.getElement(CardElement);
59
+ const stripePM = await stripe.createPaymentMethod({ type: "card", card: cardData });
60
+ if (stripePM.error) setErrors([stripePM.error.message]);
61
+ else {
62
+ const pm = { id: stripePM.paymentMethod.id, personId: person.id, email: email, name: person.name.display, churchId: props.churchId }
63
+ await ApiHelper.post("/paymentmethods/addcard", pm, "GivingApi").then(result => {
64
+ if (result?.raw?.message) {
65
+ setErrors([result.raw.message]);
66
+ setProcessing(false);
67
+ } else {
68
+ const d: { paymentMethod: StripePaymentMethod, customerId: string } = result;
69
+ saveDonation(d.paymentMethod, d.customerId, person);
70
+ }
71
+ });
72
+ }
73
+ }
74
+
75
+ const saveDonation = async (paymentMethod: StripePaymentMethod, customerId: string, person?: PersonInterface) => {
76
+ let donation: StripeDonationInterface = {
77
+ amount: amount,
78
+ id: paymentMethod.id,
79
+ customerId: customerId,
80
+ type: paymentMethod.type,
81
+ churchId: props.churchId,
82
+ funds: [],
83
+ person: {
84
+ id: person?.id,
85
+ email: person?.contactInfo?.email,
86
+ name: person?.name?.display
87
+ }
88
+ }
89
+
90
+ if (donationType === "recurring") {
91
+ donation.billing_cycle_anchor = + new Date();
92
+ donation.interval = DonationHelper.getInterval(interval);
93
+ }
94
+
95
+ for (const fundDonation of fundDonations) {
96
+ let fund = funds.find((fund: FundInterface) => fund.id === fundDonation.fundId);
97
+ donation.funds.push({ id: fundDonation.fundId, amount: fundDonation.amount || 0, name: fund.name });
98
+ }
99
+
100
+ const results = await ApiHelper.post("/donate/charge/", donation, "GivingApi");
101
+ if (results?.status === "succeeded" || results?.status === "pending" || results?.status === "active") {
102
+ setDonationComplete(true)
103
+ }
104
+ if (results?.raw?.message) {
105
+ setErrors([results?.raw?.message]);
106
+ setProcessing(false);
107
+ }
108
+ setProcessing(false);
109
+ }
110
+
111
+ const validate = () => {
112
+ const result = [];
113
+ if (!firstName) result.push("Please enter your first name.");
114
+ if (!lastName) result.push("Please enter your last name.");
115
+ if (!email) result.push("Please enter your email address.");
116
+ if (amount === 0) result.push("Amount cannot be $0");
117
+ if (result.length === 0) {
118
+ if (!email.match(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/)) result.push("Please enter a valid email address"); //eslint-disable-line
119
+ }
120
+ //Todo - make sure the account doesn't exist. (loadOrCreate?)
121
+ setErrors(result);
122
+ return result.length === 0;
123
+ }
124
+
125
+ const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>) => {
126
+ const val = e.currentTarget.value;
127
+ switch (e.currentTarget.name) {
128
+ case "firstName": setFirstName(val); break;
129
+ case "lastName": setLastName(val); break;
130
+ case "email": setEmail(val); break;
131
+ case "startDate": setStartDate(val); break;
132
+ case "interval": setInterval(val); break;
133
+ }
134
+ }
135
+
136
+ const handleFundDonationsChange = (fd: FundDonationInterface[]) => {
137
+ setFundDonations(fd);
138
+ let totalAmount = 0;
139
+ let selectedFunds: any = [];
140
+ for (const fundDonation of fd) {
141
+ totalAmount += fundDonation.amount || 0;
142
+ let fund = funds.find((fund: FundInterface) => fund.id === fundDonation.fundId);
143
+ selectedFunds.push({ id: fundDonation.fundId, amount: fundDonation.amount || 0, name: fund.name });
144
+ }
145
+ setAmount(totalAmount);
146
+ }
147
+
148
+ const getFundList = () => {
149
+ if (funds) return (<>
150
+ <hr />
151
+ <h4>Funds</h4>
152
+ <FundDonations fundDonations={fundDonations} funds={funds} updatedFunction={handleFundDonationsChange} />
153
+ </>);
154
+ }
155
+
156
+ React.useEffect(init, []); //eslint-disable-line
157
+
158
+ if (donationComplete) return <Alert severity="success">Thank you for your donation.</Alert>
159
+ else return (
160
+ <InputBox headerIcon={showHeader ? "volunteer_activism" : ""} headerText={showHeader ? "Donate" : ""} saveFunction={handleSave} saveText="Donate" isSubmitting={processing || !captchaResponse || captchaResponse === "robot"} mainContainerCssProps={mainContainerCssProps}>
161
+ <ErrorMessages errors={errors} />
162
+ <Grid container spacing={3}>
163
+ <Grid item md={6} xs={12}>
164
+ <Button aria-label="single-donation" size="small" fullWidth style={{ minHeight: "50px" }} variant={donationType === "once" ? "contained" : "outlined"} onClick={() => setDonationType("once")}>Make a Donation</Button>
165
+ </Grid>
166
+ <Grid item md={6} xs={12}>
167
+ <Button aria-label="recurring-donation" size="small" fullWidth style={{ minHeight: "50px" }} variant={donationType === "recurring" ? "contained" : "outlined"} onClick={() => setDonationType("recurring")}>Make a Recurring Donation</Button>
168
+ </Grid>
169
+ <Grid item md={6} xs={12}>
170
+ <TextField fullWidth label="First Name" name="firstName" value={firstName} onChange={handleChange} />
171
+ </Grid>
172
+ <Grid item md={6} xs={12}>
173
+ <TextField fullWidth label="Last Name" name="lastName" value={lastName} onChange={handleChange} />
174
+ </Grid>
175
+ <Grid item md={6} xs={12}>
176
+ <TextField fullWidth label="Email" name="email" value={email} onChange={handleChange} />
177
+ </Grid>
178
+ <Grid item md={6} xs={12}>
179
+ <ReCAPTCHA sitekey={props.recaptchaSiteKey} ref={captchaRef} onChange={handleCaptchaChange} />
180
+ </Grid>
181
+ </Grid>
182
+ <div style={{ padding: 10, border: "1px solid #CCC", borderRadius: 5, marginTop: 10 }}>
183
+ <CardElement options={formStyling} />
184
+ </div>
185
+ {donationType === "recurring"
186
+ && <Grid container spacing={3} style={{marginTop:0}}>
187
+ <Grid item md={6} xs={12}>
188
+ <FormControl fullWidth>
189
+ <InputLabel>Frequency</InputLabel>
190
+ <Select label="Frequency" name="interval" aria-label="interval" value={interval} onChange={(e) => {setInterval(e.target.value) }}>
191
+ <MenuItem value="one_week">Weekly</MenuItem>
192
+ <MenuItem value="two_week">Bi-Weekly</MenuItem>
193
+ <MenuItem value="one_month">Monthly</MenuItem>
194
+ <MenuItem value="three_month">Quarterly</MenuItem>
195
+ <MenuItem value="one_year">Annually</MenuItem>
196
+ </Select>
197
+ </FormControl>
198
+ </Grid>
199
+ <Grid item md={6} xs={12}>
200
+ <TextField fullWidth name="startDate" type="date" aria-label="startDate" label="Start Date" value={DateHelper.formatHtml5Date(new Date(startDate))} onChange={handleChange} />
201
+ </Grid>
202
+ </Grid>
203
+ }
204
+ {getFundList()}
205
+ </InputBox>
206
+ );
207
+ }
208
+
@@ -0,0 +1,135 @@
1
+ import React from "react";
2
+ import { Stripe } from "@stripe/stripe-js";
3
+ import { Elements } from "@stripe/react-stripe-js";
4
+ import { CardForm, BankForm } from ".";
5
+ import { DisplayBox, Loading } from "../../components";
6
+ import { ApiHelper, UserHelper } from "../../helpers";
7
+ import { PersonInterface, StripePaymentMethod, Permissions } from "../../interfaces";
8
+ import { Icon, Table, TableBody, TableCell, TableRow, IconButton, Menu, MenuItem } from "@mui/material";
9
+
10
+ interface Props { person: PersonInterface, customerId: string, paymentMethods: StripePaymentMethod[], stripePromise: Promise<Stripe>, appName: string, dataUpdate: (message?: string) => void }
11
+
12
+ export const PaymentMethods: React.FC<Props> = (props) => {
13
+ const [editPaymentMethod, setEditPaymentMethod] = React.useState<StripePaymentMethod>(new StripePaymentMethod());
14
+ const [mode, setMode] = React.useState("display");
15
+ const [verify, setVerify] = React.useState<boolean>(false);
16
+
17
+ const handleEdit = (pm?: StripePaymentMethod, verifyAccount?: boolean) => (e: React.MouseEvent) => {
18
+ e.preventDefault();
19
+ setEditPaymentMethod(pm);
20
+ setVerify(verifyAccount)
21
+ setMode("edit");
22
+ }
23
+
24
+ const handleDelete = async () => {
25
+ let confirmed = window.confirm("Are you sure you want to delete this payment method?");
26
+ if (confirmed) {
27
+ ApiHelper.delete("/paymentmethods/" + editPaymentMethod.id + "/" + props.customerId, "GivingApi").then(() => {
28
+ setMode("display");
29
+ props.dataUpdate("Payment method deleted.");
30
+ })
31
+ }
32
+ }
33
+
34
+ const MenuIcon = () => {
35
+ const [anchorEl, setAnchorEl] = React.useState(null);
36
+ const open = Boolean(anchorEl);
37
+ const handleClick = (e: React.MouseEvent) => {
38
+ setAnchorEl(e.currentTarget);
39
+ };
40
+ const handleClose = () => {
41
+ setAnchorEl(null);
42
+ };
43
+ return (
44
+ <>
45
+ <IconButton
46
+ aria-label="add-button"
47
+ id="addBtnGroup"
48
+ aria-controls={open ? "add-menu" : undefined}
49
+ aria-expanded={open ? "true" : undefined}
50
+ aria-haspopup="true"
51
+ onClick={handleClick}
52
+ >
53
+ <Icon color="primary">add</Icon>
54
+ </IconButton>
55
+ <Menu
56
+ id="add-menu"
57
+ MenuListProps={{
58
+ "aria-labelledby": "addBtnGroup"
59
+ }}
60
+ anchorEl={anchorEl}
61
+ open={open}
62
+ onClose={handleClose}
63
+ >
64
+ <MenuItem aria-label="add-card" onClick={handleEdit(new StripePaymentMethod({ type: "card" }))}>
65
+ <Icon sx={{mr: "3px"}}>credit_card</Icon> Add Card
66
+ </MenuItem>
67
+ <MenuItem aria-label="add-bank" onClick={handleEdit(new StripePaymentMethod({ type: "bank" }))}>
68
+ <Icon sx={{mr: "3px"}}>account_balance</Icon> Add Bank
69
+ </MenuItem>
70
+ </Menu>
71
+ </>
72
+ );
73
+ }
74
+
75
+ const getNewContent = () => {
76
+ if (!UserHelper.checkAccess(Permissions.givingApi.settings.edit) && props.appName !== "B1App") return null;
77
+ return <MenuIcon />;
78
+ }
79
+
80
+ const getEditOptions = (pm: StripePaymentMethod) => {
81
+ if (!UserHelper.checkAccess(Permissions.givingApi.settings.edit) && props.appName !== "B1App") return null;
82
+ return <a aria-label="edit-button" onClick={handleEdit(pm)} href="about:blank"><Icon>edit</Icon></a>;
83
+ }
84
+
85
+ const getPMIcon = (type: string) => (type === "card" ? <Icon>credit_card</Icon> : <Icon>account_balance</Icon>)
86
+
87
+ const getPaymentRows = () => {
88
+ let rows: JSX.Element[] = [];
89
+
90
+ props.paymentMethods.forEach((method: StripePaymentMethod) => {
91
+ rows.push(
92
+ <TableRow key={method.id}>
93
+ <TableCell className="capitalize">{getPMIcon(method.type)} {method.name + " ****" + method.last4}</TableCell>
94
+ <TableCell>{method?.status === "new" && <a href="about:blank" aria-label="verify-account" onClick={handleEdit(method, true)}>Verify Account</a>}</TableCell>
95
+ <TableCell align="right">{getEditOptions(method)}</TableCell>
96
+ </TableRow>
97
+ );
98
+ });
99
+ return rows;
100
+ }
101
+
102
+ const PaymentMethodsTable = () => {
103
+ if (!props.paymentMethods) return <Loading></Loading>
104
+ if (props.paymentMethods.length) {
105
+ return (
106
+ <Table>
107
+ <TableBody>
108
+ {getPaymentRows()}
109
+ </TableBody>
110
+ </Table>
111
+ );
112
+ }
113
+ else return <div>No payment methods. Add a payment method to make a donation.</div>
114
+ }
115
+
116
+ const EditForm = () => (
117
+ <Elements stripe={props.stripePromise}>
118
+ {editPaymentMethod.type === "card" && <CardForm card={editPaymentMethod} customerId={props.customerId} person={props.person} setMode={setMode} deletePayment={handleDelete} updateList={(message) => { props.dataUpdate(message) }} />}
119
+ {editPaymentMethod.type === "bank" && <BankForm bank={editPaymentMethod} showVerifyForm={verify} customerId={props.customerId} person={props.person} setMode={setMode} deletePayment={handleDelete} updateList={(message) => { props.dataUpdate(message) }} />}
120
+ </Elements>
121
+ )
122
+
123
+ const PaymentMethods = () => {
124
+ if (mode === "display") {
125
+ return (
126
+ <DisplayBox aria-label="payment-methods-box" headerIcon="credit_card" headerText="Payment Methods" editContent={getNewContent()}>
127
+ <PaymentMethodsTable></PaymentMethodsTable>
128
+ </DisplayBox>
129
+ );
130
+ }
131
+ else return <EditForm></EditForm>;
132
+ }
133
+
134
+ return props.stripePromise ? <PaymentMethods></PaymentMethods> : null;
135
+ }
@@ -0,0 +1,121 @@
1
+ import React from "react";
2
+ import { DisplayBox } from "../../components";
3
+ import { ApiHelper, UserHelper, CurrencyHelper, DateHelper } from "../../helpers";
4
+ import { Permissions, SubscriptionInterface } from "../../interfaces";
5
+ import { RecurringDonationsEdit } from ".";
6
+ import { Icon, Table, TableBody, TableCell, TableRow, TableHead } from "@mui/material";
7
+
8
+ interface Props { customerId: string, paymentMethods: any[], appName: string, dataUpdate: (message?: string) => void, };
9
+
10
+ export const RecurringDonations: React.FC<Props> = (props) => {
11
+ const [subscriptions, setSubscriptions] = React.useState<SubscriptionInterface[]>([]);
12
+ const [mode, setMode] = React.useState("display");
13
+ const [editSubscription, setEditSubscription] = React.useState<SubscriptionInterface>();
14
+
15
+ const loadData = () => {
16
+ if (props.customerId) {
17
+ ApiHelper.get("/customers/" + props.customerId + "/subscriptions", "GivingApi").then(subResult => {
18
+ const subs: SubscriptionInterface[] = [];
19
+ const requests = subResult.data?.map((s: any) => ApiHelper.get("/subscriptionfunds?subscriptionId=" + s.id, "GivingApi").then(subFunds => {
20
+ s.funds = subFunds;
21
+ subs.push(s);
22
+ }));
23
+ return requests && Promise.all(requests).then(() => {
24
+ setSubscriptions(subs);
25
+ });
26
+ });
27
+ }
28
+ }
29
+
30
+ const handleUpdate = (message: string) => {
31
+ loadData();
32
+ setMode("display");
33
+ if (message) props.dataUpdate(message);
34
+ }
35
+
36
+ const handleEdit = (sub: SubscriptionInterface) => (e: React.MouseEvent) => {
37
+ e.preventDefault();
38
+ setEditSubscription(sub);
39
+ setMode("edit");
40
+ }
41
+
42
+ const getPaymentMethod = (sub: SubscriptionInterface) => {
43
+ const pm = props.paymentMethods.find((pm: any) => pm.id === (sub.default_payment_method || sub.default_source));
44
+ if (!pm) return <span style={{ color: "red" }}>Payment method not found.</span>;
45
+ return `${pm.name} ****${pm.last4}`;
46
+ }
47
+
48
+ const getInterval = (subscription: SubscriptionInterface) => {
49
+ let interval = subscription.plan.interval_count + " " + subscription.plan.interval;
50
+ return subscription.plan.interval_count > 1 ? interval + "s" : interval;
51
+ }
52
+
53
+ const getFunds = (subscription: SubscriptionInterface) => {
54
+ let result: JSX.Element[] = [];
55
+ subscription.funds.forEach((fund: any) => {
56
+ result.push(
57
+ <div key={subscription.id + fund.id}>
58
+ {fund.name} <span style={{ float: "right" }}>{CurrencyHelper.formatCurrency(fund.amount)}</span>
59
+ </div>
60
+ );
61
+ });
62
+ const total = (subscription.plan.amount / 100);
63
+ result.push(
64
+ <div key={subscription.id + "-total"} style={{ borderTop: "solid #dee2e6 1px" }}>
65
+ Total <span style={{ float: "right" }}>{CurrencyHelper.formatCurrency(total)}</span>
66
+ </div>
67
+ );
68
+ return result;
69
+ }
70
+
71
+ const getEditOptions = (sub: SubscriptionInterface) => {
72
+ if ((!UserHelper.checkAccess(Permissions.givingApi.settings.edit) && props.appName !== "B1App") || props?.paymentMethods?.length === 0) return null;
73
+ return <a aria-label="edit-button" onClick={handleEdit(sub)} href="about:blank"><Icon>edit</Icon></a>;
74
+ }
75
+
76
+ const getTableHeader = () => {
77
+ let result: JSX.Element[] = [];
78
+ result.push(<TableRow key="header" sx={{textAlign: "left"}}><TableCell><b>Start Date</b></TableCell><TableCell><b>Amount</b></TableCell><TableCell><b>Interval</b></TableCell><TableCell><b>Payment Method</b></TableCell>{props?.paymentMethods?.length > 0 && <TableCell></TableCell>}</TableRow>);
79
+ return result;
80
+ }
81
+
82
+ const getTableRows = () => {
83
+ let rows: JSX.Element[] = [];
84
+
85
+ subscriptions.forEach((sub: any) => {
86
+ rows.push(
87
+ <TableRow key={sub.id}>
88
+ <TableCell>{DateHelper.prettyDate(new Date(sub.billing_cycle_anchor * 1000))}</TableCell>
89
+ <TableCell>{getFunds(sub)}</TableCell>
90
+ <TableCell>Every {getInterval(sub)}</TableCell>
91
+ <TableCell className="capitalize">{getPaymentMethod(sub)}</TableCell>
92
+ <TableCell align="right">{getEditOptions(sub)}</TableCell>
93
+ </TableRow>
94
+ );
95
+ });
96
+ return rows;
97
+ }
98
+
99
+ const getSubscriptionsTable = () => (
100
+ <Table>
101
+ <TableHead>{getTableHeader()}</TableHead>
102
+ <TableBody>{getTableRows()}</TableBody>
103
+ </Table>
104
+ )
105
+
106
+ React.useEffect(loadData, []); //eslint-disable-line
107
+
108
+ if (!subscriptions.length) return null;
109
+ if (mode === "display") {
110
+ return (
111
+ <DisplayBox data-cy="recurring-donations" headerIcon="restart_alt" headerText="Recurring Donations">
112
+ {getSubscriptionsTable()}
113
+ </DisplayBox>
114
+ );
115
+ }
116
+ if (mode === "edit" && editSubscription) {
117
+ return (
118
+ <RecurringDonationsEdit customerId={props.customerId} paymentMethods={props.paymentMethods} editSubscription={editSubscription} subscriptionUpdated={handleUpdate} />
119
+ );
120
+ }
121
+ }
@@ -0,0 +1,93 @@
1
+ import React from "react";
2
+ import { ApiHelper } from "../../helpers";
3
+ import { InputBox } from "../../components";
4
+ import { StripePaymentMethod, SubscriptionInterface } from "../../interfaces";
5
+ import { FormControl, Grid, InputLabel, MenuItem, Select, SelectChangeEvent, TextField } from "@mui/material"
6
+ import { DonationHelper } from "../../helpers"
7
+
8
+ interface Props { subscriptionUpdated: (message?: string) => void, customerId: string, paymentMethods: StripePaymentMethod[], editSubscription: SubscriptionInterface };
9
+
10
+ export const RecurringDonationsEdit: React.FC<Props> = (props) => {
11
+ const [editSubscription, setEditSubscription] = React.useState<SubscriptionInterface>(props.editSubscription);
12
+ const [interval, setInterval] = React.useState("one_month");
13
+
14
+ const handleCancel = () => { props.subscriptionUpdated(); }
15
+ const handleSave = () => {
16
+ let sub = { ...editSubscription } as SubscriptionInterface;
17
+ const pmFound = props.paymentMethods.find((pm: StripePaymentMethod) => pm.id === sub.id);
18
+ if (!pmFound) {
19
+ let pm = props.paymentMethods[0];
20
+ sub.default_payment_method = pm.type === "card" ? pm.id : null;
21
+ sub.default_source = pm.type === "bank" ? pm.id : null;
22
+ }
23
+ ApiHelper.post("/subscriptions", [sub], "GivingApi").then(() => props.subscriptionUpdated("Recurring donation updated."))
24
+ }
25
+
26
+ const handleDelete = () => {
27
+ const conf = window.confirm("Are you sure you want to delete this recurring donation?");
28
+ if (!conf) return;
29
+ let promises = [];
30
+ promises.push(ApiHelper.delete("/subscriptions/" + props.editSubscription.id, "GivingApi"));
31
+ promises.push(ApiHelper.delete("/subscriptionfunds/subscription/" + props.editSubscription.id, "GivingApi"));
32
+ Promise.all(promises).then(() => props.subscriptionUpdated("Recurring donation canceled."));
33
+ }
34
+
35
+ const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement> | SelectChangeEvent<string>) => {
36
+ let sub = { ...editSubscription } as SubscriptionInterface;
37
+ let value = e.target.value;
38
+ switch (e.target.name) {
39
+ case "method":
40
+ let pm = props.paymentMethods.find((pm: StripePaymentMethod) => pm.id === value);
41
+ sub.default_payment_method = pm.type === "card" ? value : null;
42
+ sub.default_source = pm.type === "bank" ? value : null;
43
+ break;
44
+ case "interval":
45
+ setInterval(value);
46
+ const inter = DonationHelper.getInterval(value);
47
+ sub.plan.interval_count = inter.interval_count;
48
+ sub.plan.interval = inter.interval;
49
+ break;
50
+ }
51
+ setEditSubscription(sub);
52
+ }
53
+
54
+ const getFields = () => (
55
+ <>
56
+ <Grid container spacing={3}>
57
+ <Grid item md={6} xs={12}>
58
+ <FormControl fullWidth>
59
+ <InputLabel>Method</InputLabel>
60
+ <Select label="Method" name="method" aria-label="method" value={editSubscription.default_payment_method || editSubscription.default_source} className="capitalize" onChange={handleChange}>
61
+ {props.paymentMethods.map((paymentMethod: any, i: number) => <MenuItem key={i} value={paymentMethod.id}>{paymentMethod.name} ****{paymentMethod.last4}</MenuItem>)}
62
+ </Select>
63
+ </FormControl>
64
+ </Grid>
65
+ <Grid item md={6} xs={12}>
66
+ <FormControl fullWidth>
67
+ <InputLabel>Frequency</InputLabel>
68
+ <Select label="Frequency" name="interval" aria-label="interval" value={interval} onChange={handleChange}>
69
+ <MenuItem value="one_week">Weekly</MenuItem>
70
+ <MenuItem value="two_week">Bi-Weekly</MenuItem>
71
+ <MenuItem value="one_month">Monthly</MenuItem>
72
+ <MenuItem value="three_month">Quarterly</MenuItem>
73
+ <MenuItem value="one_year">Annually</MenuItem>
74
+ </Select>
75
+ </FormControl>
76
+ </Grid>
77
+ </Grid>
78
+ </>
79
+ )
80
+
81
+ React.useEffect(() => {
82
+ if (props.editSubscription) {
83
+ const keyName = DonationHelper.getIntervalKeyName(props.editSubscription.plan.interval_count, props.editSubscription.plan.interval);
84
+ setInterval(keyName);
85
+ }
86
+ }, [props.editSubscription]);
87
+
88
+ return (
89
+ <InputBox aria-label="person-details-box" headerIcon="person" headerText="Edit Recurring Donation" ariaLabelSave="save-button" ariaLabelDelete="delete-button" cancelFunction={handleCancel} deleteFunction={handleDelete} saveFunction={handleSave}>
90
+ {getFields()}
91
+ </InputBox>
92
+ );
93
+ }
@@ -0,0 +1,9 @@
1
+ export { BankForm } from "./BankForm";
2
+ export { CardForm } from "./CardForm";
3
+ export { DonationForm } from "./DonationForm";
4
+ export { NonAuthDonation } from "./NonAuthDonation";
5
+ export { PaymentMethods } from "./PaymentMethods";
6
+ export { RecurringDonations } from "./RecurringDonations";
7
+ export { RecurringDonationsEdit } from "./RecurringDonationsEdit";
8
+ export { FundDonations } from "./FundDonations";
9
+ export { FundDonation } from "./FundDonation";
@@ -0,0 +1,66 @@
1
+ import React from "react";
2
+ import { DateHelper, CurrencyHelper } from "../../helpers";
3
+ import { StripeDonationInterface } from "../../interfaces";
4
+ import { Table, TableBody, TableRow, TableCell, Dialog, DialogTitle, DialogContent, DialogActions, Button } from "@mui/material"
5
+
6
+ interface Props {
7
+ show: boolean;
8
+ onHide: () => void;
9
+ handleDonate: (message: string) => void;
10
+ donation: StripeDonationInterface;
11
+ donationType: string;
12
+ paymentMethodName: string;
13
+ funds: any;
14
+ payFee: number;
15
+ }
16
+
17
+ export const DonationPreviewModal: React.FC<Props> = (props) => {
18
+ const donationType: any = { once: "One-time Donation", recurring: "Recurring Donation" };
19
+ const [isLoading, setLoading] = React.useState<boolean>(false);
20
+
21
+ const handleClick = () => {
22
+ setLoading(true);
23
+ let message = "Thank you for your donation.";
24
+ if (props.donationType === "recurring") message = "Recurring donation created. " + message;
25
+ props.handleDonate(message);
26
+ }
27
+
28
+ const formatInterval = () => {
29
+ const count = props.donation.interval.interval_count;
30
+ const interval = props.donation.interval.interval;
31
+ let result = `${count} ${interval}`;
32
+ return count > 1 ? result + "s" : result;
33
+ }
34
+
35
+ return (
36
+ <Dialog open={props.show} {...props}>
37
+ <DialogTitle>Donation Preview</DialogTitle>
38
+ <DialogContent>
39
+ <Table>
40
+ <TableBody>
41
+ <TableRow><TableCell>Name:</TableCell><TableCell>{props.donation.person.name}</TableCell></TableRow>
42
+ <TableRow><TableCell>Payment Method:</TableCell><TableCell className="capitalize">{props.paymentMethodName}</TableCell></TableRow>
43
+ <TableRow><TableCell>Type:</TableCell><TableCell>{donationType[props.donationType]}</TableCell></TableRow>
44
+ {props.donationType === "once"
45
+ && <TableRow><TableCell>Donation Date:</TableCell><TableCell>{DateHelper.formatHtml5Date(new Date(props.donation.billing_cycle_anchor))}</TableCell></TableRow>
46
+ }
47
+ <TableRow><TableCell>Notes:</TableCell><TableCell>{props.donation.notes}</TableCell></TableRow>
48
+ {props.donationType === "recurring"
49
+ && <>
50
+ <TableRow><TableCell>Starting On:</TableCell><TableCell>{DateHelper.formatHtml5Date(new Date(props.donation.billing_cycle_anchor))}</TableCell></TableRow>
51
+ <TableRow><TableCell>Recurring Every:</TableCell><TableCell className="capitalize">{formatInterval()}</TableCell></TableRow>
52
+ </>
53
+ }
54
+ <TableRow><TableCell>Funds:</TableCell><TableCell>{props.donation.funds.map((fund: any, i: number) => <p key={i}>{CurrencyHelper.formatCurrency(fund.amount)} - {fund.name}</p>)}</TableCell></TableRow>
55
+ {props.payFee > 0 && <TableRow><TableCell>Transaction Fee:</TableCell><TableCell>{CurrencyHelper.formatCurrency(props.payFee)}</TableCell></TableRow>}
56
+ <TableRow><TableCell>Total:</TableCell><TableCell><h4>{CurrencyHelper.formatCurrency(props.donation.amount)}</h4></TableCell></TableRow>
57
+ </TableBody>
58
+ </Table>
59
+ </DialogContent>
60
+ <DialogActions>
61
+ <Button onClick={props.onHide} variant="outlined" aria-label="cancel-button">Cancel</Button>
62
+ <Button onClick={handleClick} variant="contained" aria-label="donate-button" disabled={isLoading}>Donate</Button>
63
+ </DialogActions>
64
+ </Dialog>
65
+ );
66
+ }
@@ -0,0 +1,33 @@
1
+ import ReactGA from "react-ga4";
2
+ import { CommonEnvironmentHelper } from "./CommonEnvironmentHelper";
3
+ import { UserHelper } from "./UserHelper";
4
+
5
+ export class AnalyticsHelper {
6
+
7
+ static init = () => {
8
+ if (CommonEnvironmentHelper.GoogleAnalyticsTag !== "" && typeof(window)!=="undefined") {
9
+ ReactGA.initialize([{trackingId: CommonEnvironmentHelper.GoogleAnalyticsTag}]);
10
+ AnalyticsHelper.logPageView();
11
+ }
12
+ }
13
+
14
+ static logPageView = () => {
15
+ if (CommonEnvironmentHelper.GoogleAnalyticsTag !== "" && typeof(window)!=="undefined") {
16
+ this.setChurchKey();
17
+ ReactGA.send({ hitType: "pageview", page: window.location.pathname + window.location.search });
18
+ }
19
+ }
20
+
21
+ static logEvent = (category: string, action: string, label?:string) => {
22
+ if (CommonEnvironmentHelper.GoogleAnalyticsTag !== "" && typeof(window)!=="undefined") {
23
+ this.setChurchKey();
24
+ ReactGA.event({ category, action, label });
25
+ }
26
+ }
27
+
28
+ private static setChurchKey = () => {
29
+ const churchKey = UserHelper?.currentUserChurch?.church?.subDomain;
30
+ if (churchKey) ReactGA.set({church_key: churchKey });
31
+ }
32
+
33
+ }