@churchapps/apphelper 0.0.14 → 0.1.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 (292) hide show
  1. package/.eslintignore +3 -3
  2. package/.eslintrc.json +22 -22
  3. package/LICENSE +21 -21
  4. package/README.md +22 -16
  5. package/dist/components/FormSubmissionEdit.d.ts.map +1 -1
  6. package/dist/components/FormSubmissionEdit.js +9 -2
  7. package/dist/components/FormSubmissionEdit.js.map +1 -1
  8. package/dist/components/QuestionEdit.d.ts.map +1 -1
  9. package/dist/components/QuestionEdit.js +2 -1
  10. package/dist/components/QuestionEdit.js.map +1 -1
  11. package/dist/components/iconPicker/IconNamesList.d.ts.map +1 -0
  12. package/dist/components/iconPicker/IconNamesList.js.map +1 -0
  13. package/dist/components/iconPicker/IconPicker.d.ts.map +1 -0
  14. package/dist/components/iconPicker/IconPicker.js.map +1 -0
  15. package/dist/components/index.d.ts +2 -1
  16. package/dist/components/index.d.ts.map +1 -1
  17. package/dist/components/index.js +4 -2
  18. package/dist/components/index.js.map +1 -1
  19. package/dist/components/markdownEditor/editor.css +787 -787
  20. package/dist/components/markdownEditor/images/icons/arrow-clockwise.svg +3 -3
  21. package/dist/components/markdownEditor/images/icons/arrow-counterclockwise.svg +3 -3
  22. package/dist/components/markdownEditor/images/icons/chat-square-quote.svg +3 -3
  23. package/dist/components/markdownEditor/images/icons/chevron-down.svg +2 -2
  24. package/dist/components/markdownEditor/images/icons/code.svg +2 -2
  25. package/dist/components/markdownEditor/images/icons/journal-code.svg +4 -4
  26. package/dist/components/markdownEditor/images/icons/journal-text.svg +4 -4
  27. package/dist/components/markdownEditor/images/icons/justify.svg +2 -2
  28. package/dist/components/markdownEditor/images/icons/link.svg +3 -3
  29. package/dist/components/markdownEditor/images/icons/list-ol.svg +3 -3
  30. package/dist/components/markdownEditor/images/icons/list-ul.svg +2 -2
  31. package/dist/components/markdownEditor/images/icons/pencil-fill.svg +2 -2
  32. package/dist/components/markdownEditor/images/icons/text-center.svg +2 -2
  33. package/dist/components/markdownEditor/images/icons/text-left.svg +2 -2
  34. package/dist/components/markdownEditor/images/icons/text-paragraph.svg +2 -2
  35. package/dist/components/markdownEditor/images/icons/text-right.svg +2 -2
  36. package/dist/components/markdownEditor/images/icons/type-bold.svg +2 -2
  37. package/dist/components/markdownEditor/images/icons/type-h1.svg +2 -2
  38. package/dist/components/markdownEditor/images/icons/type-h2.svg +2 -2
  39. package/dist/components/markdownEditor/images/icons/type-h3.svg +2 -2
  40. package/dist/components/markdownEditor/images/icons/type-h4.svg +12 -12
  41. package/dist/components/markdownEditor/images/icons/type-italic.svg +2 -2
  42. package/dist/components/markdownEditor/images/icons/type-strikethrough.svg +2 -2
  43. package/dist/components/markdownEditor/images/icons/type-underline.svg +2 -2
  44. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNodeTransformer.js +1 -1
  45. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNodeTransformer.js.map +1 -1
  46. package/dist/components/markdownEditor/plugins/emoji/EmojiNodeTransform.js +1 -1
  47. package/dist/components/markdownEditor/plugins/emoji/EmojiNodeTransform.js.map +1 -1
  48. package/dist/components/markdownEditor/plugins/emoji/EmojiPickerPlugin.js +1 -1
  49. package/dist/components/markdownEditor/plugins/emoji/EmojiPickerPlugin.js.map +1 -1
  50. package/dist/components/markdownEditor/plugins/emoji/EmojisPlugin.js +1 -1
  51. package/dist/components/markdownEditor/plugins/emoji/EmojisPlugin.js.map +1 -1
  52. package/dist/components/notes/Notes.d.ts +1 -0
  53. package/dist/components/notes/Notes.d.ts.map +1 -1
  54. package/dist/components/notes/Notes.js +18 -1
  55. package/dist/components/notes/Notes.js.map +1 -1
  56. package/dist/components/wrapper/AppList.d.ts.map +1 -0
  57. package/dist/components/wrapper/AppList.js.map +1 -0
  58. package/dist/components/wrapper/ChurchList.d.ts.map +1 -0
  59. package/dist/components/wrapper/ChurchList.js.map +1 -0
  60. package/dist/components/wrapper/Drawers.d.ts +22 -0
  61. package/dist/components/wrapper/Drawers.d.ts.map +1 -0
  62. package/dist/components/wrapper/Drawers.js +51 -0
  63. package/dist/components/wrapper/Drawers.js.map +1 -0
  64. package/dist/components/wrapper/NavItem.d.ts.map +1 -0
  65. package/dist/components/wrapper/NavItem.js.map +1 -0
  66. package/dist/components/wrapper/NewPrivateMessage.d.ts.map +1 -0
  67. package/dist/components/wrapper/NewPrivateMessage.js.map +1 -0
  68. package/dist/components/wrapper/NotificationMenu.d.ts +14 -0
  69. package/dist/components/wrapper/NotificationMenu.d.ts.map +1 -0
  70. package/dist/components/wrapper/NotificationMenu.js +60 -0
  71. package/dist/components/wrapper/NotificationMenu.js.map +1 -0
  72. package/dist/components/wrapper/Notifications.d.ts +8 -0
  73. package/dist/components/wrapper/Notifications.d.ts.map +1 -0
  74. package/dist/components/wrapper/Notifications.js +67 -0
  75. package/dist/components/wrapper/Notifications.js.map +1 -0
  76. package/dist/components/wrapper/PrivateMessageDetails.d.ts.map +1 -0
  77. package/dist/components/{material → wrapper}/PrivateMessageDetails.js +1 -1
  78. package/dist/components/wrapper/PrivateMessageDetails.js.map +1 -0
  79. package/dist/components/wrapper/PrivateMessages.d.ts.map +1 -0
  80. package/dist/components/{material → wrapper}/PrivateMessages.js +1 -1
  81. package/dist/components/wrapper/PrivateMessages.js.map +1 -0
  82. package/dist/components/wrapper/SiteWrapper.d.ts.map +1 -0
  83. package/dist/components/{material → wrapper}/SiteWrapper.js +13 -49
  84. package/dist/components/wrapper/SiteWrapper.js.map +1 -0
  85. package/dist/components/wrapper/TabPanel.d.ts +9 -0
  86. package/dist/components/wrapper/TabPanel.d.ts.map +1 -0
  87. package/dist/components/wrapper/TabPanel.js +24 -0
  88. package/dist/components/wrapper/TabPanel.js.map +1 -0
  89. package/dist/components/wrapper/UserMenu.d.ts.map +1 -0
  90. package/dist/components/{material → wrapper}/UserMenu.js +14 -31
  91. package/dist/components/wrapper/UserMenu.js.map +1 -0
  92. package/dist/components/{material → wrapper}/index.d.ts +0 -1
  93. package/dist/components/wrapper/index.d.ts.map +1 -0
  94. package/dist/components/{material → wrapper}/index.js +1 -3
  95. package/dist/components/wrapper/index.js.map +1 -0
  96. package/dist/interfaces/Messaging.d.ts +10 -0
  97. package/dist/interfaces/Messaging.d.ts.map +1 -1
  98. package/package.json +85 -84
  99. package/src/components/CreatePerson.tsx +80 -80
  100. package/src/components/DisplayBox.tsx +68 -68
  101. package/src/components/ErrorMessages.tsx +26 -26
  102. package/src/components/ExportLink.tsx +67 -67
  103. package/src/components/FloatingSupport.tsx +16 -16
  104. package/src/components/FormSubmissionEdit.tsx +129 -120
  105. package/src/components/HelpIcon.tsx +10 -10
  106. package/src/components/ImageEditor.tsx +126 -126
  107. package/src/components/InputBox.tsx +73 -73
  108. package/src/components/Loading.tsx +29 -29
  109. package/src/components/PersonAdd.tsx +75 -75
  110. package/src/components/QuestionEdit.tsx +63 -62
  111. package/src/components/SmallButton.tsx +39 -39
  112. package/src/components/SupportModal.tsx +26 -26
  113. package/src/components/TabPanel.tsx +34 -34
  114. package/src/components/gallery/GalleryModal.tsx +102 -102
  115. package/src/components/gallery/StockPhotos.tsx +74 -74
  116. package/src/components/gallery/index.ts +1 -1
  117. package/src/components/{material/iconPicker → iconPicker}/IconNamesList.ts +2240 -2240
  118. package/src/components/{material/iconPicker → iconPicker}/IconPicker.tsx +153 -153
  119. package/src/components/index.tsx +24 -23
  120. package/src/components/markdownEditor/Editor.tsx +132 -132
  121. package/src/components/markdownEditor/MarkdownEditor.tsx +16 -16
  122. package/src/components/markdownEditor/MarkdownModal.tsx +46 -46
  123. package/src/components/markdownEditor/MarkdownPreview.tsx +14 -14
  124. package/src/components/markdownEditor/editor.css +787 -787
  125. package/src/components/markdownEditor/images/icons/arrow-clockwise.svg +3 -3
  126. package/src/components/markdownEditor/images/icons/arrow-counterclockwise.svg +3 -3
  127. package/src/components/markdownEditor/images/icons/chat-square-quote.svg +3 -3
  128. package/src/components/markdownEditor/images/icons/chevron-down.svg +2 -2
  129. package/src/components/markdownEditor/images/icons/code.svg +2 -2
  130. package/src/components/markdownEditor/images/icons/journal-code.svg +4 -4
  131. package/src/components/markdownEditor/images/icons/journal-text.svg +4 -4
  132. package/src/components/markdownEditor/images/icons/justify.svg +2 -2
  133. package/src/components/markdownEditor/images/icons/link.svg +3 -3
  134. package/src/components/markdownEditor/images/icons/list-ol.svg +3 -3
  135. package/src/components/markdownEditor/images/icons/list-ul.svg +2 -2
  136. package/src/components/markdownEditor/images/icons/pencil-fill.svg +2 -2
  137. package/src/components/markdownEditor/images/icons/text-center.svg +2 -2
  138. package/src/components/markdownEditor/images/icons/text-left.svg +2 -2
  139. package/src/components/markdownEditor/images/icons/text-paragraph.svg +2 -2
  140. package/src/components/markdownEditor/images/icons/text-right.svg +2 -2
  141. package/src/components/markdownEditor/images/icons/type-bold.svg +2 -2
  142. package/src/components/markdownEditor/images/icons/type-h1.svg +2 -2
  143. package/src/components/markdownEditor/images/icons/type-h2.svg +2 -2
  144. package/src/components/markdownEditor/images/icons/type-h3.svg +2 -2
  145. package/src/components/markdownEditor/images/icons/type-h4.svg +12 -12
  146. package/src/components/markdownEditor/images/icons/type-italic.svg +2 -2
  147. package/src/components/markdownEditor/images/icons/type-strikethrough.svg +2 -2
  148. package/src/components/markdownEditor/images/icons/type-underline.svg +2 -2
  149. package/src/components/markdownEditor/index.ts +2 -2
  150. package/src/components/markdownEditor/plugins/AutoLinkPlugin.tsx +35 -35
  151. package/src/components/markdownEditor/plugins/ControlledEditorPlugin.tsx +24 -24
  152. package/src/components/markdownEditor/plugins/ListMaxIndentLevelPlugin.tsx +68 -68
  153. package/src/components/markdownEditor/plugins/MarkdownTransformers.ts +106 -106
  154. package/src/components/markdownEditor/plugins/ReadOnlyPlugin.tsx +15 -15
  155. package/src/components/markdownEditor/plugins/ToolbarPlugin.tsx +401 -401
  156. package/src/components/markdownEditor/plugins/customLink/CustomLinkNode.tsx +224 -224
  157. package/src/components/markdownEditor/plugins/customLink/CustomLinkNodePlugin.tsx +32 -32
  158. package/src/components/markdownEditor/plugins/customLink/CustomLinkNodeTransformer.tsx +102 -102
  159. package/src/components/markdownEditor/plugins/customLink/FloatingLinkEditor.tsx +243 -243
  160. package/src/components/markdownEditor/plugins/customLink/FloatingLinkEditor.types.ts +11 -11
  161. package/src/components/markdownEditor/plugins/emoji/EmojiNode.tsx +95 -95
  162. package/src/components/markdownEditor/plugins/emoji/EmojiNodeTransform.ts +41 -41
  163. package/src/components/markdownEditor/plugins/emoji/EmojiPickerPlugin.tsx +152 -152
  164. package/src/components/markdownEditor/plugins/emoji/EmojisPlugin.tsx +65 -65
  165. package/src/components/markdownEditor/plugins/index.ts +6 -6
  166. package/src/components/markdownEditor/theme.ts +65 -65
  167. package/src/components/notes/AddNote.tsx +90 -90
  168. package/src/components/notes/Conversation.tsx +82 -82
  169. package/src/components/notes/Conversations.tsx +58 -58
  170. package/src/components/notes/NewConversation.tsx +78 -78
  171. package/src/components/notes/Note.tsx +44 -44
  172. package/src/components/notes/Notes.tsx +68 -52
  173. package/src/components/notes/index.ts +5 -5
  174. package/src/components/reporting/ChartReport.tsx +98 -98
  175. package/src/components/reporting/ReportFilter.tsx +54 -54
  176. package/src/components/reporting/ReportFilterField.tsx +160 -160
  177. package/src/components/reporting/ReportOutput.tsx +79 -79
  178. package/src/components/reporting/ReportWithFilter.tsx +70 -70
  179. package/src/components/reporting/TableReport.tsx +57 -57
  180. package/src/components/reporting/TreeReport.tsx +111 -111
  181. package/src/components/reporting/index.ts +4 -4
  182. package/src/components/{material → wrapper}/AppList.tsx +20 -20
  183. package/src/components/{material → wrapper}/ChurchList.tsx +22 -22
  184. package/src/components/wrapper/Drawers.tsx +60 -0
  185. package/src/components/{material → wrapper}/NavItem.tsx +41 -41
  186. package/src/components/{material → wrapper}/NewPrivateMessage.tsx +103 -103
  187. package/src/components/wrapper/NotificationMenu.tsx +85 -0
  188. package/src/components/wrapper/Notifications.tsx +50 -0
  189. package/src/components/{material → wrapper}/PrivateMessageDetails.tsx +23 -23
  190. package/src/components/{material → wrapper}/PrivateMessages.tsx +87 -87
  191. package/src/components/{material → wrapper}/SiteWrapper.tsx +96 -145
  192. package/src/components/wrapper/TabPanel.tsx +30 -0
  193. package/src/components/{material → wrapper}/UserMenu.tsx +106 -141
  194. package/src/components/{material → wrapper}/index.tsx +5 -6
  195. package/src/donationComponents/DonationPage.tsx +136 -136
  196. package/src/donationComponents/components/BankForm.tsx +159 -159
  197. package/src/donationComponents/components/CardForm.tsx +104 -104
  198. package/src/donationComponents/components/DonationForm.tsx +235 -235
  199. package/src/donationComponents/components/FundDonation.tsx +49 -49
  200. package/src/donationComponents/components/FundDonations.tsx +39 -39
  201. package/src/donationComponents/components/NonAuthDonation.tsx +31 -31
  202. package/src/donationComponents/components/NonAuthDonationInner.tsx +259 -259
  203. package/src/donationComponents/components/PaymentMethods.tsx +135 -135
  204. package/src/donationComponents/components/RecurringDonations.tsx +121 -121
  205. package/src/donationComponents/components/RecurringDonationsEdit.tsx +93 -93
  206. package/src/donationComponents/components/index.tsx +9 -9
  207. package/src/donationComponents/index.ts +3 -3
  208. package/src/donationComponents/modals/DonationPreviewModal.tsx +66 -66
  209. package/src/helpers/AnalyticsHelper.ts +33 -33
  210. package/src/helpers/ApiHelper.ts +125 -125
  211. package/src/helpers/AppearanceHelper.ts +69 -69
  212. package/src/helpers/ArrayHelper.ts +81 -81
  213. package/src/helpers/CommonEnvironmentHelper.ts +80 -80
  214. package/src/helpers/CurrencyHelper.ts +10 -10
  215. package/src/helpers/DateHelper.ts +108 -108
  216. package/src/helpers/DonationHelper.ts +26 -26
  217. package/src/helpers/ErrorHelper.ts +36 -36
  218. package/src/helpers/EventHelper.ts +52 -52
  219. package/src/helpers/FileHelper.ts +31 -31
  220. package/src/helpers/PersonHelper.ts +60 -60
  221. package/src/helpers/SocketHelper.ts +76 -76
  222. package/src/helpers/Themes.ts +14 -14
  223. package/src/helpers/UniqueIdHelper.ts +36 -36
  224. package/src/helpers/UserHelper.ts +59 -59
  225. package/src/helpers/createEmotionCache.ts +17 -17
  226. package/src/helpers/index.ts +18 -18
  227. package/src/hooks/index.ts +1 -1
  228. package/src/hooks/useMountedState.ts +16 -16
  229. package/src/index.ts +6 -6
  230. package/src/interfaces/Access.ts +24 -24
  231. package/src/interfaces/Attendance.ts +8 -8
  232. package/src/interfaces/Content.ts +10 -10
  233. package/src/interfaces/Doing.ts +24 -24
  234. package/src/interfaces/Donation.ts +45 -45
  235. package/src/interfaces/Error.ts +17 -17
  236. package/src/interfaces/Membership.ts +51 -51
  237. package/src/interfaces/Messaging.ts +21 -20
  238. package/src/interfaces/Permissions.ts +68 -68
  239. package/src/interfaces/Reporting.ts +7 -7
  240. package/src/interfaces/UserContextInterface.ts +13 -13
  241. package/src/interfaces/index.ts +13 -13
  242. package/src/pageComponents/LoginPage.tsx +244 -244
  243. package/src/pageComponents/LogoutPage.tsx +28 -28
  244. package/src/pageComponents/components/Forgot.tsx +79 -79
  245. package/src/pageComponents/components/Login.tsx +54 -54
  246. package/src/pageComponents/components/LoginSetPassword.tsx +63 -63
  247. package/src/pageComponents/components/Register.tsx +107 -107
  248. package/src/pageComponents/components/SelectChurchModal.tsx +41 -41
  249. package/src/pageComponents/components/SelectChurchRegister.tsx +88 -88
  250. package/src/pageComponents/components/SelectChurchSearch.tsx +69 -69
  251. package/src/pageComponents/components/SelectableChurch.tsx +38 -38
  252. package/src/pageComponents/index.ts +3 -3
  253. package/tsconfig.json +34 -34
  254. package/tslint.json +14 -14
  255. package/dist/components/material/AppList.d.ts.map +0 -1
  256. package/dist/components/material/AppList.js.map +0 -1
  257. package/dist/components/material/ChurchList.d.ts.map +0 -1
  258. package/dist/components/material/ChurchList.js.map +0 -1
  259. package/dist/components/material/NavItem.d.ts.map +0 -1
  260. package/dist/components/material/NavItem.js.map +0 -1
  261. package/dist/components/material/NewPrivateMessage.d.ts.map +0 -1
  262. package/dist/components/material/NewPrivateMessage.js.map +0 -1
  263. package/dist/components/material/PrivateMessageDetails.d.ts.map +0 -1
  264. package/dist/components/material/PrivateMessageDetails.js.map +0 -1
  265. package/dist/components/material/PrivateMessages.d.ts.map +0 -1
  266. package/dist/components/material/PrivateMessages.js.map +0 -1
  267. package/dist/components/material/SiteWrapper.d.ts.map +0 -1
  268. package/dist/components/material/SiteWrapper.js.map +0 -1
  269. package/dist/components/material/UserMenu.d.ts.map +0 -1
  270. package/dist/components/material/UserMenu.js.map +0 -1
  271. package/dist/components/material/iconPicker/IconNamesList.d.ts.map +0 -1
  272. package/dist/components/material/iconPicker/IconNamesList.js.map +0 -1
  273. package/dist/components/material/iconPicker/IconPicker.d.ts.map +0 -1
  274. package/dist/components/material/iconPicker/IconPicker.js.map +0 -1
  275. package/dist/components/material/index.d.ts.map +0 -1
  276. package/dist/components/material/index.js.map +0 -1
  277. /package/dist/components/{material/iconPicker → iconPicker}/IconNamesList.d.ts +0 -0
  278. /package/dist/components/{material/iconPicker → iconPicker}/IconNamesList.js +0 -0
  279. /package/dist/components/{material/iconPicker → iconPicker}/IconPicker.d.ts +0 -0
  280. /package/dist/components/{material/iconPicker → iconPicker}/IconPicker.js +0 -0
  281. /package/dist/components/{material → wrapper}/AppList.d.ts +0 -0
  282. /package/dist/components/{material → wrapper}/AppList.js +0 -0
  283. /package/dist/components/{material → wrapper}/ChurchList.d.ts +0 -0
  284. /package/dist/components/{material → wrapper}/ChurchList.js +0 -0
  285. /package/dist/components/{material → wrapper}/NavItem.d.ts +0 -0
  286. /package/dist/components/{material → wrapper}/NavItem.js +0 -0
  287. /package/dist/components/{material → wrapper}/NewPrivateMessage.d.ts +0 -0
  288. /package/dist/components/{material → wrapper}/NewPrivateMessage.js +0 -0
  289. /package/dist/components/{material → wrapper}/PrivateMessageDetails.d.ts +0 -0
  290. /package/dist/components/{material → wrapper}/PrivateMessages.d.ts +0 -0
  291. /package/dist/components/{material → wrapper}/SiteWrapper.d.ts +0 -0
  292. /package/dist/components/{material → wrapper}/UserMenu.d.ts +0 -0
@@ -1,141 +1,106 @@
1
- import React from "react";
2
- import { ApiHelper } from "../../helpers/ApiHelper";
3
- import { UserHelper } from "../../helpers/UserHelper";
4
- import { Avatar, Menu, Typography, Icon, Button, Box, Tabs, Tab, styled } from "@mui/material";
5
- import { NavItem, AppList } from "./";
6
- import { LoginUserChurchInterface, UserContextInterface } from "../../interfaces";
7
- import { ChurchList } from "./ChurchList";
8
- import { SupportModal } from "../SupportModal";
9
- import { CommonEnvironmentHelper } from "../../helpers/CommonEnvironmentHelper";
10
- import { PrivateMessages } from "./PrivateMessages";
11
-
12
- interface TabPanelProps { children?: React.ReactNode; index: number; value: number; }
13
-
14
- const StyledMenuBox = styled(Box)(
15
- ({ theme }) => ({
16
- paddingTop: 10,
17
- "& .MuiListItemButton-root": { paddingLeft: 30 },
18
- "& .MuiListItemIcon-root": {
19
- color: theme.palette.primary.main
20
- },
21
- "& .MuiListItemText-root": { color: theme.palette.text.primary },
22
- "& .selected .MuiListItemText-root span": { fontWeight: "bold" }
23
- })
24
- );
25
-
26
- function TabPanel(props: TabPanelProps) {
27
- const { children, value, index } = props;
28
-
29
- return (
30
- <div role="tabpanel" hidden={value !== index} id={`userMenuPanel-${index}`}>
31
- {value === index && (
32
- <StyledMenuBox>
33
- <Box>{children}</Box>
34
- </StyledMenuBox>
35
- )}
36
- </div>
37
- );
38
- }
39
-
40
- interface Props {
41
- userName: string;
42
- profilePicture: string;
43
- userChurches: LoginUserChurchInterface[];
44
- currentUserChurch: LoginUserChurchInterface;
45
- context: UserContextInterface;
46
- appName: string;
47
- router?: any;
48
- }
49
-
50
- export const UserMenu: React.FC<Props> = (props) => {
51
- const userName = props.userName;
52
- const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
53
- const [showSupport, setShowSupport] = React.useState(false);
54
- const open = Boolean(anchorEl);
55
-
56
- const handleClick = (e: React.MouseEvent<HTMLElement>) => {
57
- e.preventDefault();
58
- setAnchorEl(e.currentTarget);
59
- };
60
-
61
- const handleClose = () => {
62
- setAnchorEl(null);
63
- };
64
-
65
- const getMainLinks = () => {
66
- const jwt = ApiHelper.getConfig("MembershipApi").jwt;
67
- const churchId = UserHelper.currentUserChurch.church.id;
68
- let result: JSX.Element[] = [];
69
- if (props.appName === "CHUMS") result.push(<NavItem url={"/profile"} key="/profile" label="Profile" icon="person" router={props.router} />);
70
- else result.push(<NavItem url={`${CommonEnvironmentHelper.ChumsRoot}/login?jwt=${jwt}&churchId=${churchId}&returnUrl=/profile`} key="/profile" label="Profile" icon="person" external={true} router={props.router} />);
71
- result.push(<NavItem url="/logout" label="Logout" icon="logout" key="/logout" router={props.router} />);
72
- result.push(<NavItem label="Support" key="Support" icon="help" onClick={() => { setShowSupport(true) }} />);
73
- return result;
74
- }
75
-
76
- const getProfilePic = () => {
77
- if (props.profilePicture) return props.profilePicture
78
- else return "/images/sample-profile.png";
79
- }
80
-
81
- const paperProps = {
82
- elevation: 0,
83
- sx: {
84
- overflow: "visible",
85
- filter: "drop-shadow(0px 2px 8px rgba(0,0,0,0.32))",
86
- mt: 1.5,
87
- "& .MuiAvatar-root": { width: 32, height: 32, ml: -0.5, mr: 1 },
88
- minWidth: 450
89
- }
90
- };
91
-
92
- const handleItemClick = (e: React.MouseEvent<HTMLDivElement>) => {
93
- console.log(e);
94
- }
95
-
96
- const [tabIndex, setTabIndex] = React.useState(0);
97
-
98
- function handleChange(el: any, newValue: any) {
99
- setTabIndex(newValue);
100
- }
101
-
102
- const getTabs = () => (
103
- <Box sx={{ borderBottom: 1, borderColor: "divider" }}>
104
- <Tabs variant="fullWidth" value={tabIndex} onChange={handleChange}>
105
- <Tab label="User" />
106
- <Tab label="Messages" />
107
- {props.userChurches.length > 1 && <Tab label="Church" />}
108
- <Tab label="App" />
109
- </Tabs>
110
-
111
- <TabPanel value={tabIndex} index={0}>
112
- {getMainLinks()}
113
- </TabPanel>
114
- <TabPanel value={tabIndex} index={1}>
115
- <PrivateMessages context={props.context} />
116
- </TabPanel>
117
-
118
- {props.userChurches.length > 1 && <TabPanel value={tabIndex} index={2}>
119
- <ChurchList userChurches={props.userChurches} currentUserChurch={props.currentUserChurch} context={props.context} />
120
- </TabPanel>}
121
- <TabPanel value={tabIndex} index={(props.userChurches.length > 1) ? 3 : 2}>
122
- <AppList currentUserChurch={props.currentUserChurch} appName={props.appName} />
123
- </TabPanel>
124
- </Box>
125
- );
126
-
127
- return (
128
- <>
129
- {showSupport && <SupportModal onClose={() => setShowSupport(false)} appName={props.appName} />}
130
- <Button onClick={handleClick} color="inherit" aria-controls={open ? "account-menu" : undefined} aria-haspopup="true" aria-expanded={open ? "true" : undefined} style={{ textTransform: "none" }} endIcon={<Icon>expand_more</Icon>}>
131
- <Avatar src={getProfilePic()} sx={{ width: 32, height: 32, marginRight: 1 }}></Avatar>
132
- <Typography color="inherit" noWrap>{userName}</Typography>
133
- </Button>
134
-
135
- <Menu anchorEl={anchorEl} id="account-menu" open={open} onClose={handleClose} onClick={(e) => { handleItemClick(e) }} PaperProps={paperProps} transformOrigin={{ horizontal: "right", vertical: "top" }} anchorOrigin={{ horizontal: "right", vertical: "bottom" }} sx={{ "& .MuiBox-root": { borderBottom: 0 } }}>
136
- {getTabs()}
137
-
138
- </Menu>
139
- </>
140
- );
141
- };
1
+ import React from "react";
2
+ import { ApiHelper } from "../../helpers/ApiHelper";
3
+ import { UserHelper } from "../../helpers/UserHelper";
4
+ import { Avatar, Menu, Typography, Icon, Button, Box, Tabs, Tab, Divider } from "@mui/material";
5
+ import { NavItem, AppList } from ".";
6
+ import { LoginUserChurchInterface, UserContextInterface } from "../../interfaces";
7
+ import { ChurchList } from "./ChurchList";
8
+ import { SupportModal } from "../SupportModal";
9
+ import { CommonEnvironmentHelper } from "../../helpers/CommonEnvironmentHelper";
10
+ import { TabPanel } from "../TabPanel";
11
+ import { NavLink } from "react-router-dom";
12
+
13
+
14
+ interface Props {
15
+ userName: string;
16
+ profilePicture: string;
17
+ userChurches: LoginUserChurchInterface[];
18
+ currentUserChurch: LoginUserChurchInterface;
19
+ context: UserContextInterface;
20
+ appName: string;
21
+ router?: any;
22
+ }
23
+
24
+ export const UserMenu: React.FC<Props> = (props) => {
25
+ const userName = props.userName;
26
+ const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
27
+ const [showSupport, setShowSupport] = React.useState(false);
28
+ const open = Boolean(anchorEl);
29
+
30
+ const handleClick = (e: React.MouseEvent<HTMLElement>) => {
31
+ e.preventDefault();
32
+ setAnchorEl(e.currentTarget);
33
+ };
34
+
35
+ const handleClose = () => {
36
+ setTabIndex(0);
37
+ setAnchorEl(null);
38
+ };
39
+
40
+ const getMainLinks = () => {
41
+ const jwt = ApiHelper.getConfig("MembershipApi").jwt;
42
+ const churchId = UserHelper.currentUserChurch.church.id;
43
+ let result: JSX.Element[] = [];
44
+ if (props.appName === "CHUMS") result.push(<NavItem url={"/profile"} key="/profile" label="Profile" icon="person" router={props.router} />);
45
+ else result.push(<NavItem url={`${CommonEnvironmentHelper.ChumsRoot}/login?jwt=${jwt}&churchId=${churchId}&returnUrl=/profile`} key="/profile" label="Profile" icon="person" external={true} router={props.router} />);
46
+ result.push(<NavItem url="/logout" label="Logout" icon="logout" key="/logout" router={props.router} />);
47
+ result.push(<NavItem label="Support" key="Support" icon="help" onClick={() => { setShowSupport(true) }} />);
48
+ result.push(<div style={{borderTop:"1px solid #CCC", paddingTop:2, paddingBottom:2}}></div>)
49
+ result.push(<NavItem label="Switch App" key="Switch App" icon="apps" onClick={() => { setTabIndex(1); }} />);
50
+ if (props.userChurches.length > 1) result.push(<NavItem label="Switch Church" key="Switch Church" icon="church" onClick={() => { setTabIndex(2); }} />);
51
+ return result;
52
+ }
53
+
54
+ const getProfilePic = () => {
55
+ if (props.profilePicture) return props.profilePicture
56
+ else return "/images/sample-profile.png";
57
+ }
58
+
59
+ const paperProps = {
60
+ elevation: 0,
61
+ sx: {
62
+ overflow: "visible",
63
+ filter: "drop-shadow(0px 2px 8px rgba(0,0,0,0.32))",
64
+ mt: 1.5,
65
+ "& .MuiAvatar-root": { width: 32, height: 32, ml: -0.5, mr: 1 },
66
+ minWidth: 450
67
+ }
68
+ };
69
+
70
+ const handleItemClick = (e: React.MouseEvent<HTMLDivElement>) => {
71
+ console.log(e);
72
+ }
73
+
74
+ const [tabIndex, setTabIndex] = React.useState(0);
75
+
76
+ const getTabs = () => (
77
+ <Box sx={{ borderBottom: 1, borderColor: "divider" }}>
78
+ <TabPanel value={tabIndex} index={0}>
79
+ {getMainLinks()}
80
+ </TabPanel>
81
+ <TabPanel value={tabIndex} index={1}>
82
+ <NavItem label="Back" key="AppBack" icon="arrow_back" onClick={() => { setTabIndex(0); }} />
83
+ <AppList currentUserChurch={props.currentUserChurch} appName={props.appName} />
84
+ </TabPanel>
85
+ {props.userChurches.length > 1 && <TabPanel value={tabIndex} index={2}>
86
+ <NavItem label="Back" key="ChurchBack" icon="arrow_back" onClick={() => { setTabIndex(0); }} />
87
+ <ChurchList userChurches={props.userChurches} currentUserChurch={props.currentUserChurch} context={props.context} />
88
+ </TabPanel>}
89
+
90
+ </Box>
91
+ );
92
+
93
+ return (
94
+ <>
95
+ {showSupport && <SupportModal onClose={() => setShowSupport(false)} appName={props.appName} />}
96
+ <Button onClick={handleClick} color="inherit" aria-controls={open ? "account-menu" : undefined} aria-haspopup="true" aria-expanded={open ? "true" : undefined} style={{ textTransform: "none" }} endIcon={<Icon>expand_more</Icon>}>
97
+ <Avatar src={getProfilePic()} sx={{ width: 32, height: 32, marginRight: 1 }}></Avatar>
98
+ <Typography color="inherit" noWrap>{userName}</Typography>
99
+ </Button>
100
+
101
+ <Menu anchorEl={anchorEl} id="account-menu" open={open} onClose={handleClose} onClick={(e) => { handleItemClick(e) }} PaperProps={paperProps} transformOrigin={{ horizontal: "right", vertical: "top" }} anchorOrigin={{ horizontal: "right", vertical: "bottom" }} sx={{ "& .MuiBox-root": { borderBottom: 0 } }}>
102
+ {getTabs()}
103
+ </Menu>
104
+ </>
105
+ );
106
+ };
@@ -1,6 +1,5 @@
1
- export { NavItem } from "./NavItem";
2
- export { AppList } from "./AppList";
3
- export { SiteWrapper } from "./SiteWrapper";
4
- export { ChurchList } from "./ChurchList";
5
- export { UserMenu } from "./UserMenu";
6
- export { IconPicker } from "./iconPicker/IconPicker";
1
+ export { NavItem } from "./NavItem";
2
+ export { AppList } from "./AppList";
3
+ export { SiteWrapper } from "./SiteWrapper";
4
+ export { ChurchList } from "./ChurchList";
5
+ export { UserMenu } from "./UserMenu";
@@ -1,136 +1,136 @@
1
- import React from "react";
2
- import { loadStripe, Stripe } from "@stripe/stripe-js";
3
- import { DonationForm, RecurringDonations, PaymentMethods } from "./components";
4
- import { DisplayBox, Loading } from "../components";
5
- import { ApiHelper, DateHelper, UniqueIdHelper, CurrencyHelper } from "../helpers";
6
- import { DonationInterface, PersonInterface, StripePaymentMethod, ChurchInterface } from "../interfaces";
7
- import { Link } from "react-router-dom"
8
- import { Table, TableBody, TableRow, TableCell, TableHead, Alert } from "@mui/material"
9
- import { useMountedState } from "../hooks/useMountedState";
10
-
11
- interface Props { personId: string, appName?: string, church?: ChurchInterface, churchLogo?: string }
12
-
13
- export const DonationPage: React.FC<Props> = (props) => {
14
- const [donations, setDonations] = React.useState<DonationInterface[]>(null);
15
- const [stripePromise, setStripe] = React.useState<Promise<Stripe>>(null);
16
- const [paymentMethods, setPaymentMethods] = React.useState<StripePaymentMethod[]>(null);
17
- const [customerId, setCustomerId] = React.useState(null);
18
- const [person, setPerson] = React.useState<PersonInterface>(null);
19
- const [message, setMessage] = React.useState<string>(null);
20
- const [appName, setAppName] = React.useState<string>("");
21
- const isMounted = useMountedState();
22
-
23
- const loadData = () => {
24
- if (props?.appName) setAppName(props.appName);
25
- if (!UniqueIdHelper.isMissing(props.personId)) {
26
- ApiHelper.get("/donations?personId=" + props.personId, "GivingApi").then(data => {
27
- if(isMounted()) {
28
- setDonations(data);
29
- }});
30
- ApiHelper.get("/gateways", "GivingApi").then(data => {
31
- if (data.length && data[0]?.publicKey) {
32
- if(isMounted()) {
33
- setStripe(loadStripe(data[0].publicKey));
34
- }
35
- ApiHelper.get("/paymentmethods/personid/" + props.personId, "GivingApi").then(results => {
36
- if(!isMounted()) {
37
- return;
38
- }
39
- if (!results.length) setPaymentMethods([]);
40
- else {
41
- let cards = results[0].cards.data.map((card: any) => new StripePaymentMethod(card));
42
- let banks = results[0].banks.data.map((bank: any) => new StripePaymentMethod(bank));
43
- let methods = cards.concat(banks);
44
- setCustomerId(results[0].customer.id);
45
- setPaymentMethods(methods);
46
- }
47
- });
48
- ApiHelper.get("/people/" + props.personId, "MembershipApi").then(data => {
49
- if(isMounted()) {
50
- setPerson(data);
51
- }
52
- });
53
- }
54
- else setPaymentMethods([]);
55
- });
56
- }
57
- }
58
-
59
- const handleDataUpdate = (message?: string) => {
60
- setMessage(message)
61
- setPaymentMethods(null);
62
- loadData();
63
- }
64
-
65
- const getRows = () => {
66
- let rows: JSX.Element[] = [];
67
-
68
- if (donations.length === 0) {
69
- rows.push(<TableRow key="0"><TableCell>Donations will appear once a donation has been entered.</TableCell></TableRow>);
70
- return rows;
71
- }
72
-
73
- for (let i = 0; i < donations.length; i++) {
74
- let d = donations[i];
75
- rows.push(
76
- <TableRow key={i}>
77
- {appName !== "B1App" && <TableCell><Link to={"/donations/" + d.batchId}>{d.batchId}</Link></TableCell>}
78
- <TableCell>{DateHelper.prettyDate(new Date(d.donationDate))}</TableCell>
79
- <TableCell>{d.method} - {d.methodDetails}</TableCell>
80
- <TableCell>{d.fund.name}</TableCell>
81
- <TableCell>{CurrencyHelper.formatCurrency(d.fund.amount)}</TableCell>
82
- </TableRow>
83
- );
84
- }
85
- return rows;
86
- }
87
-
88
- const getTableHeader = () => {
89
- const rows: JSX.Element[] = []
90
-
91
- if (donations.length > 0) {
92
- rows.push(
93
- <TableRow key="header" sx={{textAlign: "left"}}>
94
- {appName !== "B1App" && <th>Batch</th>}
95
- <th>Date</th>
96
- <th>Method</th>
97
- <th>Fund</th>
98
- <th>Amount</th>
99
- </TableRow>
100
- );
101
- }
102
-
103
- return rows;
104
- }
105
-
106
- React.useEffect(loadData, [isMounted]); //eslint-disable-line
107
-
108
- const getTable = () => {
109
- if (!donations) return <Loading />;
110
- else return (<Table>
111
- <TableHead>{getTableHeader()}</TableHead>
112
- <TableBody>{getRows()}</TableBody>
113
- </Table>);
114
- }
115
-
116
- const getPaymentMethodComponents = () => {
117
- if (!paymentMethods) return <Loading />;
118
- else return (
119
- <>
120
- <DonationForm person={person} customerId={customerId} paymentMethods={paymentMethods} stripePromise={stripePromise} donationSuccess={handleDataUpdate} church={props?.church} churchLogo={props?.churchLogo} />
121
- <DisplayBox headerIcon="payments" headerText="Donations">
122
- {getTable()}
123
- </DisplayBox>
124
- <RecurringDonations customerId={customerId} paymentMethods={paymentMethods} appName={appName} dataUpdate={handleDataUpdate} />
125
- <PaymentMethods person={person} customerId={customerId} paymentMethods={paymentMethods} appName={appName} stripePromise={stripePromise} dataUpdate={handleDataUpdate} />
126
- </>
127
- );
128
- }
129
-
130
- return (
131
- <>
132
- {paymentMethods && message && <Alert severity="success">{message}</Alert>}
133
- {getPaymentMethodComponents()}
134
- </>
135
- );
136
- }
1
+ import React from "react";
2
+ import { loadStripe, Stripe } from "@stripe/stripe-js";
3
+ import { DonationForm, RecurringDonations, PaymentMethods } from "./components";
4
+ import { DisplayBox, Loading } from "../components";
5
+ import { ApiHelper, DateHelper, UniqueIdHelper, CurrencyHelper } from "../helpers";
6
+ import { DonationInterface, PersonInterface, StripePaymentMethod, ChurchInterface } from "../interfaces";
7
+ import { Link } from "react-router-dom"
8
+ import { Table, TableBody, TableRow, TableCell, TableHead, Alert } from "@mui/material"
9
+ import { useMountedState } from "../hooks/useMountedState";
10
+
11
+ interface Props { personId: string, appName?: string, church?: ChurchInterface, churchLogo?: string }
12
+
13
+ export const DonationPage: React.FC<Props> = (props) => {
14
+ const [donations, setDonations] = React.useState<DonationInterface[]>(null);
15
+ const [stripePromise, setStripe] = React.useState<Promise<Stripe>>(null);
16
+ const [paymentMethods, setPaymentMethods] = React.useState<StripePaymentMethod[]>(null);
17
+ const [customerId, setCustomerId] = React.useState(null);
18
+ const [person, setPerson] = React.useState<PersonInterface>(null);
19
+ const [message, setMessage] = React.useState<string>(null);
20
+ const [appName, setAppName] = React.useState<string>("");
21
+ const isMounted = useMountedState();
22
+
23
+ const loadData = () => {
24
+ if (props?.appName) setAppName(props.appName);
25
+ if (!UniqueIdHelper.isMissing(props.personId)) {
26
+ ApiHelper.get("/donations?personId=" + props.personId, "GivingApi").then(data => {
27
+ if(isMounted()) {
28
+ setDonations(data);
29
+ }});
30
+ ApiHelper.get("/gateways", "GivingApi").then(data => {
31
+ if (data.length && data[0]?.publicKey) {
32
+ if(isMounted()) {
33
+ setStripe(loadStripe(data[0].publicKey));
34
+ }
35
+ ApiHelper.get("/paymentmethods/personid/" + props.personId, "GivingApi").then(results => {
36
+ if(!isMounted()) {
37
+ return;
38
+ }
39
+ if (!results.length) setPaymentMethods([]);
40
+ else {
41
+ let cards = results[0].cards.data.map((card: any) => new StripePaymentMethod(card));
42
+ let banks = results[0].banks.data.map((bank: any) => new StripePaymentMethod(bank));
43
+ let methods = cards.concat(banks);
44
+ setCustomerId(results[0].customer.id);
45
+ setPaymentMethods(methods);
46
+ }
47
+ });
48
+ ApiHelper.get("/people/" + props.personId, "MembershipApi").then(data => {
49
+ if(isMounted()) {
50
+ setPerson(data);
51
+ }
52
+ });
53
+ }
54
+ else setPaymentMethods([]);
55
+ });
56
+ }
57
+ }
58
+
59
+ const handleDataUpdate = (message?: string) => {
60
+ setMessage(message)
61
+ setPaymentMethods(null);
62
+ loadData();
63
+ }
64
+
65
+ const getRows = () => {
66
+ let rows: JSX.Element[] = [];
67
+
68
+ if (donations.length === 0) {
69
+ rows.push(<TableRow key="0"><TableCell>Donations will appear once a donation has been entered.</TableCell></TableRow>);
70
+ return rows;
71
+ }
72
+
73
+ for (let i = 0; i < donations.length; i++) {
74
+ let d = donations[i];
75
+ rows.push(
76
+ <TableRow key={i}>
77
+ {appName !== "B1App" && <TableCell><Link to={"/donations/" + d.batchId}>{d.batchId}</Link></TableCell>}
78
+ <TableCell>{DateHelper.prettyDate(new Date(d.donationDate))}</TableCell>
79
+ <TableCell>{d.method} - {d.methodDetails}</TableCell>
80
+ <TableCell>{d.fund.name}</TableCell>
81
+ <TableCell>{CurrencyHelper.formatCurrency(d.fund.amount)}</TableCell>
82
+ </TableRow>
83
+ );
84
+ }
85
+ return rows;
86
+ }
87
+
88
+ const getTableHeader = () => {
89
+ const rows: JSX.Element[] = []
90
+
91
+ if (donations.length > 0) {
92
+ rows.push(
93
+ <TableRow key="header" sx={{textAlign: "left"}}>
94
+ {appName !== "B1App" && <th>Batch</th>}
95
+ <th>Date</th>
96
+ <th>Method</th>
97
+ <th>Fund</th>
98
+ <th>Amount</th>
99
+ </TableRow>
100
+ );
101
+ }
102
+
103
+ return rows;
104
+ }
105
+
106
+ React.useEffect(loadData, [isMounted]); //eslint-disable-line
107
+
108
+ const getTable = () => {
109
+ if (!donations) return <Loading />;
110
+ else return (<Table>
111
+ <TableHead>{getTableHeader()}</TableHead>
112
+ <TableBody>{getRows()}</TableBody>
113
+ </Table>);
114
+ }
115
+
116
+ const getPaymentMethodComponents = () => {
117
+ if (!paymentMethods) return <Loading />;
118
+ else return (
119
+ <>
120
+ <DonationForm person={person} customerId={customerId} paymentMethods={paymentMethods} stripePromise={stripePromise} donationSuccess={handleDataUpdate} church={props?.church} churchLogo={props?.churchLogo} />
121
+ <DisplayBox headerIcon="payments" headerText="Donations">
122
+ {getTable()}
123
+ </DisplayBox>
124
+ <RecurringDonations customerId={customerId} paymentMethods={paymentMethods} appName={appName} dataUpdate={handleDataUpdate} />
125
+ <PaymentMethods person={person} customerId={customerId} paymentMethods={paymentMethods} appName={appName} stripePromise={stripePromise} dataUpdate={handleDataUpdate} />
126
+ </>
127
+ );
128
+ }
129
+
130
+ return (
131
+ <>
132
+ {paymentMethods && message && <Alert severity="success">{message}</Alert>}
133
+ {getPaymentMethodComponents()}
134
+ </>
135
+ );
136
+ }