@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,20 +1,20 @@
1
- import React from "react";
2
- import { ApiHelper } from "../../helpers/ApiHelper";
3
- import { UserHelper } from "../../helpers/UserHelper";
4
- import { NavItem } from "./NavItem";
5
- import { CommonEnvironmentHelper } from "../../helpers/CommonEnvironmentHelper";
6
- import { LoginUserChurchInterface } from "../../interfaces";
7
-
8
- export interface Props { appName: string; currentUserChurch: LoginUserChurchInterface; router?: any; }
9
-
10
- export const AppList: React.FC<Props> = props => {
11
- const jwt = ApiHelper.getConfig("MembershipApi").jwt;
12
- const churchId = UserHelper.currentUserChurch.church.id;
13
- return (
14
- <>
15
- <NavItem url={`${CommonEnvironmentHelper.ChumsRoot}/login?jwt=${jwt}&churchId=${churchId}`} selected={props.appName === "CHUMS"} external={true} label="Chums" icon="logout" router={props.router} />
16
- <NavItem url={`${CommonEnvironmentHelper.B1Root.replace("{key}", props.currentUserChurch.church.subDomain)}/login?jwt=${jwt}&churchId=${churchId}`} selected={props.appName === "B1.church"} external={true} label="B1.Church" icon="logout" router={props.router} />
17
- <NavItem url={`${CommonEnvironmentHelper.LessonsRoot}/login?jwt=${jwt}&churchId=${churchId}`} selected={props.appName === "Lessons.church"} external={true} label="Lessons.church" icon="logout" router={props.router} />
18
- </>
19
- );
20
- }
1
+ import React from "react";
2
+ import { ApiHelper } from "../../helpers/ApiHelper";
3
+ import { UserHelper } from "../../helpers/UserHelper";
4
+ import { NavItem } from "./NavItem";
5
+ import { CommonEnvironmentHelper } from "../../helpers/CommonEnvironmentHelper";
6
+ import { LoginUserChurchInterface } from "../../interfaces";
7
+
8
+ export interface Props { appName: string; currentUserChurch: LoginUserChurchInterface; router?: any; }
9
+
10
+ export const AppList: React.FC<Props> = props => {
11
+ const jwt = ApiHelper.getConfig("MembershipApi").jwt;
12
+ const churchId = UserHelper.currentUserChurch.church.id;
13
+ return (
14
+ <>
15
+ <NavItem url={`${CommonEnvironmentHelper.ChumsRoot}/login?jwt=${jwt}&churchId=${churchId}`} selected={props.appName === "CHUMS"} external={true} label="Chums" icon="logout" router={props.router} />
16
+ <NavItem url={`${CommonEnvironmentHelper.B1Root.replace("{key}", props.currentUserChurch.church.subDomain)}/login?jwt=${jwt}&churchId=${churchId}`} selected={props.appName === "B1.church"} external={true} label="B1.Church" icon="logout" router={props.router} />
17
+ <NavItem url={`${CommonEnvironmentHelper.LessonsRoot}/login?jwt=${jwt}&churchId=${churchId}`} selected={props.appName === "Lessons.church"} external={true} label="Lessons.church" icon="logout" router={props.router} />
18
+ </>
19
+ );
20
+ }
@@ -1,22 +1,22 @@
1
- import React from "react";
2
- import { LoginUserChurchInterface, UserContextInterface } from "../../interfaces";
3
- import { UserHelper } from "../../helpers/UserHelper";
4
- import { NavItem } from "./NavItem";
5
-
6
- export interface Props { userChurches: LoginUserChurchInterface[], currentUserChurch: LoginUserChurchInterface, context: UserContextInterface }
7
-
8
- export const ChurchList: React.FC<Props> = props => {
9
-
10
- if (props.userChurches.length < 2) return <></>;
11
- else {
12
- let result: JSX.Element[] = [];
13
- const userChurches = props.userChurches.filter(uc => uc.apis.length > 0)
14
- userChurches.forEach(uc => {
15
- const userChurch = uc;
16
- const churchName = uc.church.name;
17
- result.push(<NavItem key={userChurch.church.id} selected={(uc.church.id === props.currentUserChurch.church.id) && true} onClick={() => UserHelper.selectChurch(props.context, userChurch.church.id, null)} label={churchName} icon="church" />);
18
- });
19
-
20
- return <>{result}</>;
21
- }
22
- };
1
+ import React from "react";
2
+ import { LoginUserChurchInterface, UserContextInterface } from "../../interfaces";
3
+ import { UserHelper } from "../../helpers/UserHelper";
4
+ import { NavItem } from "./NavItem";
5
+
6
+ export interface Props { userChurches: LoginUserChurchInterface[], currentUserChurch: LoginUserChurchInterface, context: UserContextInterface }
7
+
8
+ export const ChurchList: React.FC<Props> = props => {
9
+
10
+ if (props.userChurches.length < 2) return <></>;
11
+ else {
12
+ let result: JSX.Element[] = [];
13
+ const userChurches = props.userChurches.filter(uc => uc.apis.length > 0)
14
+ userChurches.forEach(uc => {
15
+ const userChurch = uc;
16
+ const churchName = uc.church.name;
17
+ result.push(<NavItem key={userChurch.church.id} selected={(uc.church.id === props.currentUserChurch.church.id) && true} onClick={() => UserHelper.selectChurch(props.context, userChurch.church.id, null)} label={churchName} icon="church" />);
18
+ });
19
+
20
+ return <>{result}</>;
21
+ }
22
+ };
@@ -0,0 +1,60 @@
1
+ import { AppBar, Drawer, styled } from "@mui/material";
2
+
3
+ export const OpenDrawer = styled(Drawer)(
4
+ ({ theme }) => ({
5
+ "& .MuiDrawer-paper": {
6
+ position: "relative",
7
+ backgroundColor: theme.palette.primary.main,
8
+ color: "#FFFFFF",
9
+ whiteSpace: "nowrap",
10
+ width: "100vw",
11
+ zIndex: 9999,
12
+ [theme.breakpoints.up("md")]: { width: 220 },
13
+ transition: theme.transitions.create("width", {
14
+ easing: theme.transitions.easing.sharp,
15
+ duration: theme.transitions.duration.enteringScreen
16
+ }),
17
+ boxSizing: "border-box"
18
+ },
19
+ "& .MuiListItemButton-root, & .MuiListItemIcon-root": { color: "#FFFFFF" }
20
+ })
21
+ );
22
+
23
+ export const ClosedDrawer = styled(OpenDrawer)(
24
+ ({ theme }) => ({
25
+ overflowX: "hidden",
26
+ transition: theme.transitions.create("width", {
27
+ easing: theme.transitions.easing.sharp,
28
+ duration: theme.transitions.duration.leavingScreen
29
+ }),
30
+ zIndex: 1,
31
+ width: theme.spacing(7),
32
+ [theme.breakpoints.up("sm")]: { width: theme.spacing(7) },
33
+ "& .MuiListSubheader-root": {
34
+ opacity: 0
35
+ }
36
+ })
37
+ );
38
+
39
+ export const ClosedDrawerAppBar = styled(AppBar)(
40
+ ({ theme }) => ({
41
+ zIndex: theme.zIndex.drawer + 1,
42
+ transition: theme.transitions.create(["width", "margin"], {
43
+ easing: theme.transitions.easing.sharp,
44
+ duration: theme.transitions.duration.leavingScreen
45
+ }),
46
+ "& .MuiIcon-root": { color: "#FFFFFF" }
47
+ })
48
+ );
49
+
50
+ export const OpenDrawerAppBar = styled(ClosedDrawerAppBar)(
51
+ ({ theme }) => ({
52
+ marginLeft: 220,
53
+ width: `calc(100% - ${220}px)`,
54
+ transition: theme.transitions.create(["width", "margin"], {
55
+ easing: theme.transitions.easing.sharp,
56
+ duration: theme.transitions.duration.enteringScreen
57
+ })
58
+ })
59
+ );
60
+
@@ -1,41 +1,41 @@
1
- import React from "react";
2
- import { Icon, ListItemButton, ListItemIcon, ListItemText, styled, Tooltip } from "@mui/material";
3
- import { NavLink, useLocation } from "react-router-dom";
4
-
5
- interface Props {
6
- url?: string;
7
- target?: string;
8
- label: string;
9
- icon: string;
10
- onClick?: () => void;
11
- router?: any;
12
- external?: boolean;
13
- selected?: boolean;
14
- }
15
-
16
- const StyledNavLink = styled(NavLink)({
17
- textDecoration: "none",
18
- "&:hover": { textDecoration: "none" },
19
- "& .MuiListItemIcon-root": { minWidth: 40 }
20
- });
21
-
22
- export const NavItem: React.FC<Props> = (props) => {
23
- let isReact = false;
24
- try {
25
- const a = typeof useLocation();
26
- if (a !== null) isReact = true;
27
- } catch { }
28
-
29
- const getIcon = () => <Icon>{props.icon}</Icon>
30
-
31
- const getLinkContents = () => (<ListItemButton>
32
- <Tooltip title={props.label || ""} arrow placement="right">
33
- <ListItemIcon sx={{ minWidth: "40px" }}>{getIcon()}</ListItemIcon>
34
- </Tooltip>
35
- <ListItemText primary={props.label} />
36
- </ListItemButton>)
37
-
38
- if (props.router) return (<a href={props.url} target={props.target} onClick={(e) => { e.preventDefault(); props.onClick ? props.onClick() : props.router.push(props.url) }} className={(props.selected) ? "selected" : ""}>{getLinkContents()}</a>)
39
- else if (props.external || !isReact) return (<a href={props.url} target={props.target} rel="noreferrer" style={{ textDecoration: "none" }} className={(props.selected) ? "selected" : ""} onClick={(e) => { e.preventDefault(); props.onClick ? props.onClick() : window.location.href = props.url }}>{getLinkContents()}</a>)
40
- else return (<StyledNavLink to={props.url || "about:blank"} target={props.target} className={(props.selected) ? "selected" : ""} onClick={props.onClick ? (e) => { e.preventDefault(); props.onClick() } : null}>{getLinkContents()}</StyledNavLink>)
41
- };
1
+ import React from "react";
2
+ import { Icon, ListItemButton, ListItemIcon, ListItemText, styled, Tooltip } from "@mui/material";
3
+ import { NavLink, useLocation } from "react-router-dom";
4
+
5
+ interface Props {
6
+ url?: string;
7
+ target?: string;
8
+ label: string;
9
+ icon: string;
10
+ onClick?: () => void;
11
+ router?: any;
12
+ external?: boolean;
13
+ selected?: boolean;
14
+ }
15
+
16
+ const StyledNavLink = styled(NavLink)({
17
+ textDecoration: "none",
18
+ "&:hover": { textDecoration: "none" },
19
+ "& .MuiListItemIcon-root": { minWidth: 40 }
20
+ });
21
+
22
+ export const NavItem: React.FC<Props> = (props) => {
23
+ let isReact = false;
24
+ try {
25
+ const a = typeof useLocation();
26
+ if (a !== null) isReact = true;
27
+ } catch { }
28
+
29
+ const getIcon = () => <Icon>{props.icon}</Icon>
30
+
31
+ const getLinkContents = () => (<ListItemButton>
32
+ <Tooltip title={props.label || ""} arrow placement="right">
33
+ <ListItemIcon sx={{ minWidth: "40px" }}>{getIcon()}</ListItemIcon>
34
+ </Tooltip>
35
+ <ListItemText primary={props.label} />
36
+ </ListItemButton>)
37
+
38
+ if (props.router) return (<a href={props.url} target={props.target} onClick={(e) => { e.preventDefault(); props.onClick ? props.onClick() : props.router.push(props.url) }} className={(props.selected) ? "selected" : ""}>{getLinkContents()}</a>)
39
+ else if (props.external || !isReact) return (<a href={props.url} target={props.target} rel="noreferrer" style={{ textDecoration: "none" }} className={(props.selected) ? "selected" : ""} onClick={(e) => { e.preventDefault(); props.onClick ? props.onClick() : window.location.href = props.url }}>{getLinkContents()}</a>)
40
+ else return (<StyledNavLink to={props.url || "about:blank"} target={props.target} className={(props.selected) ? "selected" : ""} onClick={props.onClick ? (e) => { e.preventDefault(); props.onClick() } : null}>{getLinkContents()}</StyledNavLink>)
41
+ };
@@ -1,103 +1,103 @@
1
- import { Button, TextField, TableRow, TableCell, Table, TableBody } from "@mui/material";
2
- import React from "react";
3
- import { ApiHelper, PersonHelper } from "../../helpers";
4
- import { ConversationInterface, PersonInterface, PrivateMessageInterface, UserContextInterface } from "../../interfaces";
5
- import { AddNote } from "../notes/AddNote";
6
- import { SmallButton } from "../SmallButton";
7
-
8
- interface Props {
9
- context: UserContextInterface;
10
- onSelectMessage: (pm: PrivateMessageInterface) => void
11
- onBack: () => void
12
- }
13
-
14
- export const NewPrivateMessage: React.FC<Props> = (props) => {
15
-
16
- const [searchText, setSearchText] = React.useState("");
17
- const [searchResults, setSearchResults] = React.useState([]);
18
- const [selectedPerson, setSelectedPerson] = React.useState<PersonInterface>(null);
19
-
20
- const handleSubmit = (e: React.MouseEvent) => {
21
- if (e !== null) e.preventDefault();
22
- let term = escape(searchText.trim());
23
- ApiHelper.get("/people/search?term=" + term, "MembershipApi").then(data => setSearchResults(data));
24
- }
25
-
26
- const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
27
- setSearchText(e.currentTarget.value);
28
- }
29
-
30
- /*
31
- const handleKeyDown = (e: React.KeyboardEvent<any>) => {
32
- //if (e.key === "Enter") { e.preventDefault(); handleSubmit(null); }
33
- }
34
- */
35
-
36
- const handlePersonSelected = async (person: PersonInterface) => {
37
- const existing: PrivateMessageInterface = await ApiHelper.get("/privateMessages/existing/" + person.id, "MessagingApi");
38
- if (existing.id) {
39
- existing.person = person;
40
- props.onSelectMessage(existing);
41
- }
42
- else setSelectedPerson(person);
43
- }
44
-
45
- const getPeople = () => {
46
- let result = [];
47
- for (let i = 0; i < searchResults.length; i++) {
48
- const p = searchResults[i];
49
- result.push(<TableRow key={p.id}>
50
- <TableCell><img src={PersonHelper.getPhotoUrl(p)} alt="avatar" /></TableCell>
51
- <TableCell><a href="about:blank" onClick={(e) => { e.preventDefault(); handlePersonSelected(p) }}>{p.name.display}</a></TableCell>
52
- </TableRow>);
53
- }
54
- return result;
55
- }
56
-
57
- const handleNoteAdded = () => {
58
- handlePersonSelected(selectedPerson);
59
- }
60
-
61
- const createConversation = async () => {
62
- const conv: ConversationInterface = { allowAnonymousPosts: false, contentType: "privateMessage", contentId: props.context.person.id, title: props.context.person.name.display + " Private Message", visibility: "hidden" }
63
- const result: ConversationInterface[] = await ApiHelper.post("/conversations", [conv], "MessagingApi");
64
-
65
- const pm: PrivateMessageInterface = {
66
- fromPersonId: props.context.person.id,
67
- toPersonId: selectedPerson.id,
68
- conversationId: result[0].id
69
- }
70
- const privateMessages: PrivateMessageInterface[] = await ApiHelper.post("/privateMessages", [pm], "MessagingApi");
71
- return privateMessages[0].conversationId;
72
- }
73
-
74
- if (!selectedPerson) return (
75
- <div style={{ paddingLeft: 10, paddingRight: 10 }}>
76
- <span style={{ float: "right" }}>
77
- <SmallButton icon="chevron_left" text="Back" onClick={props.onBack} />
78
- </span>
79
- <b>New Private Message</b>
80
- <div>Search for a person</div>
81
-
82
- <TextField fullWidth label="Name" id="searchText" data-cy="search-input" name="searchText" type="text" placeholder="Name" value={searchText} onChange={handleChange}
83
- InputProps={{ endAdornment: <Button variant="contained" id="searchButton" data-cy="search-button" onClick={handleSubmit}>Search</Button> }}
84
- />
85
- <br />
86
- <Table id="smallPeopleTable" size="small">
87
- <TableBody>{getPeople()}</TableBody>
88
- </Table>
89
- </div>
90
- );
91
- else {
92
- return (
93
- <div style={{ paddingLeft: 10, paddingRight: 10 }}>
94
- <span style={{ float: "right" }}>
95
- <SmallButton icon="chevron_left" text="Back" onClick={props.onBack} />
96
- </span>
97
- <b>New Private Message</b>
98
- <div>To: {selectedPerson.name.display}</div>
99
- <AddNote context={props.context} conversationId={null} onUpdate={handleNoteAdded} createConversation={createConversation} />
100
- </div>
101
- )
102
- }
103
- }
1
+ import { Button, TextField, TableRow, TableCell, Table, TableBody } from "@mui/material";
2
+ import React from "react";
3
+ import { ApiHelper, PersonHelper } from "../../helpers";
4
+ import { ConversationInterface, PersonInterface, PrivateMessageInterface, UserContextInterface } from "../../interfaces";
5
+ import { AddNote } from "../notes/AddNote";
6
+ import { SmallButton } from "../SmallButton";
7
+
8
+ interface Props {
9
+ context: UserContextInterface;
10
+ onSelectMessage: (pm: PrivateMessageInterface) => void
11
+ onBack: () => void
12
+ }
13
+
14
+ export const NewPrivateMessage: React.FC<Props> = (props) => {
15
+
16
+ const [searchText, setSearchText] = React.useState("");
17
+ const [searchResults, setSearchResults] = React.useState([]);
18
+ const [selectedPerson, setSelectedPerson] = React.useState<PersonInterface>(null);
19
+
20
+ const handleSubmit = (e: React.MouseEvent) => {
21
+ if (e !== null) e.preventDefault();
22
+ let term = escape(searchText.trim());
23
+ ApiHelper.get("/people/search?term=" + term, "MembershipApi").then(data => setSearchResults(data));
24
+ }
25
+
26
+ const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
27
+ setSearchText(e.currentTarget.value);
28
+ }
29
+
30
+ /*
31
+ const handleKeyDown = (e: React.KeyboardEvent<any>) => {
32
+ //if (e.key === "Enter") { e.preventDefault(); handleSubmit(null); }
33
+ }
34
+ */
35
+
36
+ const handlePersonSelected = async (person: PersonInterface) => {
37
+ const existing: PrivateMessageInterface = await ApiHelper.get("/privateMessages/existing/" + person.id, "MessagingApi");
38
+ if (existing.id) {
39
+ existing.person = person;
40
+ props.onSelectMessage(existing);
41
+ }
42
+ else setSelectedPerson(person);
43
+ }
44
+
45
+ const getPeople = () => {
46
+ let result = [];
47
+ for (let i = 0; i < searchResults.length; i++) {
48
+ const p = searchResults[i];
49
+ result.push(<TableRow key={p.id}>
50
+ <TableCell><img src={PersonHelper.getPhotoUrl(p)} alt="avatar" /></TableCell>
51
+ <TableCell><a href="about:blank" onClick={(e) => { e.preventDefault(); handlePersonSelected(p) }}>{p.name.display}</a></TableCell>
52
+ </TableRow>);
53
+ }
54
+ return result;
55
+ }
56
+
57
+ const handleNoteAdded = () => {
58
+ handlePersonSelected(selectedPerson);
59
+ }
60
+
61
+ const createConversation = async () => {
62
+ const conv: ConversationInterface = { allowAnonymousPosts: false, contentType: "privateMessage", contentId: props.context.person.id, title: props.context.person.name.display + " Private Message", visibility: "hidden" }
63
+ const result: ConversationInterface[] = await ApiHelper.post("/conversations", [conv], "MessagingApi");
64
+
65
+ const pm: PrivateMessageInterface = {
66
+ fromPersonId: props.context.person.id,
67
+ toPersonId: selectedPerson.id,
68
+ conversationId: result[0].id
69
+ }
70
+ const privateMessages: PrivateMessageInterface[] = await ApiHelper.post("/privateMessages", [pm], "MessagingApi");
71
+ return privateMessages[0].conversationId;
72
+ }
73
+
74
+ if (!selectedPerson) return (
75
+ <div style={{ paddingLeft: 10, paddingRight: 10 }}>
76
+ <span style={{ float: "right" }}>
77
+ <SmallButton icon="chevron_left" text="Back" onClick={props.onBack} />
78
+ </span>
79
+ <b>New Private Message</b>
80
+ <div>Search for a person</div>
81
+
82
+ <TextField fullWidth label="Name" id="searchText" data-cy="search-input" name="searchText" type="text" placeholder="Name" value={searchText} onChange={handleChange}
83
+ InputProps={{ endAdornment: <Button variant="contained" id="searchButton" data-cy="search-button" onClick={handleSubmit}>Search</Button> }}
84
+ />
85
+ <br />
86
+ <Table id="smallPeopleTable" size="small">
87
+ <TableBody>{getPeople()}</TableBody>
88
+ </Table>
89
+ </div>
90
+ );
91
+ else {
92
+ return (
93
+ <div style={{ paddingLeft: 10, paddingRight: 10 }}>
94
+ <span style={{ float: "right" }}>
95
+ <SmallButton icon="chevron_left" text="Back" onClick={props.onBack} />
96
+ </span>
97
+ <b>New Private Message</b>
98
+ <div>To: {selectedPerson.name.display}</div>
99
+ <AddNote context={props.context} conversationId={null} onUpdate={handleNoteAdded} createConversation={createConversation} />
100
+ </div>
101
+ )
102
+ }
103
+ }
@@ -0,0 +1,85 @@
1
+ import React from "react";
2
+ import { Menu, Icon, Button, Box, Tabs, Tab } from "@mui/material";
3
+ import { UserContextInterface } from "../../interfaces";
4
+ import { PrivateMessages } from "./PrivateMessages";
5
+ import { TabPanel } from "../TabPanel";
6
+ import { Notifications } from "./Notifications";
7
+ import { Badge } from "@mui/base";
8
+
9
+ interface Props {
10
+ counts: { notificationCount: number, pmCount: number };
11
+ context: UserContextInterface;
12
+ router?: any;
13
+ onUpdate: () => void;
14
+ }
15
+
16
+ export const NotificationMenu: React.FC<Props> = (props) => {
17
+ const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
18
+ const open = Boolean(anchorEl);
19
+
20
+ const handleClick = (e: React.MouseEvent<HTMLElement>) => {
21
+ e.preventDefault();
22
+ setAnchorEl(e.currentTarget);
23
+ };
24
+
25
+ const handleClose = () => {
26
+ props.onUpdate();
27
+ setAnchorEl(null);
28
+ };
29
+
30
+
31
+ const paperProps = {
32
+ elevation: 0,
33
+ sx: {
34
+ overflow: "visible",
35
+ filter: "drop-shadow(0px 2px 8px rgba(0,0,0,0.32))",
36
+ mt: 1.5,
37
+ "& .MuiAvatar-root": { width: 32, height: 32, ml: -0.5, mr: 1 },
38
+ minWidth: 450
39
+ }
40
+ };
41
+
42
+ const handleItemClick = (e: React.MouseEvent<HTMLDivElement>) => {
43
+ console.log(e);
44
+ }
45
+
46
+ const [tabIndex, setTabIndex] = React.useState(0);
47
+
48
+ function handleChange(el: any, newValue: any) {
49
+ setTabIndex(newValue);
50
+ }
51
+
52
+ const getTabs = () => (
53
+ <Box sx={{ borderBottom: 1, borderColor: "divider" }}>
54
+ <Tabs variant="fullWidth" value={tabIndex} onChange={handleChange}>
55
+ <Tab label="Messages" icon={(props.counts.pmCount>0) ? <Icon style={{color:"#FF0000"}}>notifications</Icon> : <></>} iconPosition="end" />
56
+ <Tab label="Notifications" icon={(props.counts.notificationCount>0) ? <Icon style={{color:"#FF0000"}}>notifications</Icon> : <></>} iconPosition="end" />
57
+ </Tabs>
58
+ <TabPanel value={tabIndex} index={0}>
59
+ <PrivateMessages context={props.context} />
60
+ </TabPanel>
61
+ <TabPanel value={tabIndex} index={1}>
62
+ <Notifications context={props.context} />
63
+ </TabPanel>
64
+ </Box>
65
+ );
66
+
67
+ const totalCount = props.counts.notificationCount + props.counts.pmCount;
68
+ console.log("totalCount", totalCount, props.counts);
69
+
70
+ //const buttonStyle = (totalCount > 0) ? { color: "#FF3333" } : { };
71
+ let icon = <Icon>notifications</Icon>;
72
+ if (totalCount>0) icon = <Badge style={{backgroundColor:"#FF0000", padding:"0px 5px 0px 5px", borderRadius:5}} badgeContent={totalCount} color="error">{icon}</Badge>
73
+
74
+
75
+ return (
76
+ <>
77
+ <Button onClick={handleClick} color="inherit" aria-controls={open ? "account-menu" : undefined} aria-haspopup="true" aria-expanded={open ? "true" : undefined} style={{ textTransform: "none" }}>
78
+ {icon}
79
+ </Button>
80
+ <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 } }}>
81
+ {getTabs()}
82
+ </Menu>
83
+ </>
84
+ );
85
+ };
@@ -0,0 +1,50 @@
1
+ import React, { useState } from "react";
2
+ import { ApiHelper } from "../../helpers/ApiHelper";
3
+ import { Box, Icon, Stack } from "@mui/material";
4
+ import { NotificationInterface, UserContextInterface } from "../../interfaces";
5
+ import { ArrayHelper, DateHelper, PersonHelper } from "../../helpers";
6
+
7
+ interface Props {
8
+ context: UserContextInterface;
9
+ }
10
+
11
+ export const Notifications: React.FC<Props> = (props) => {
12
+
13
+ const [notifications, setNotifications] = useState<NotificationInterface[]>([]);
14
+
15
+ const loadData = async () => {
16
+ const n: NotificationInterface[] = await ApiHelper.get("/notifications/my", "MessagingApi");
17
+ setNotifications(n);
18
+ }
19
+
20
+ React.useEffect(() => { loadData(); }, []); //eslint-disable-line
21
+
22
+ const getMainLinks = () => {
23
+ let result: JSX.Element[] = [];
24
+ notifications.forEach(notification => {
25
+ let datePosted = new Date(notification.timeSent);
26
+ const displayDuration = DateHelper.getDisplayDuration(datePosted);
27
+
28
+ result.push(
29
+ <div className="note" style={{ cursor: "pointer" }} onClick={(e) => { e.preventDefault(); }}>
30
+ <Box sx={{ width: "100%" }} className="note-contents">
31
+ <Stack direction="row" justifyContent="space-between">
32
+ <div style={{width:"100%"}}>
33
+ <span className="text-grey" style={{float:"right"}}>{displayDuration}</span>
34
+ <p><Icon>notifications</Icon> {notification.message}</p>
35
+ </div>
36
+ </Stack>
37
+ </Box>
38
+ </div>
39
+ );
40
+ })
41
+ return result;
42
+ }
43
+
44
+
45
+ return (
46
+ <>
47
+ {getMainLinks()}
48
+ </>
49
+ );
50
+ };
@@ -1,23 +1,23 @@
1
- import React from "react";
2
- import { SmallButton } from "../SmallButton";
3
- import { PrivateMessageInterface, UserContextInterface } from "../../interfaces";
4
- import { Notes } from "../notes/Notes";
5
-
6
- interface Props {
7
- context: UserContextInterface;
8
- privateMessage: PrivateMessageInterface;
9
- onBack: () => void
10
- }
11
-
12
- export const PrivateMessageDetails: React.FC<Props> = (props) => (
13
- <>
14
- <div style={{ paddingLeft: 10, paddingRight: 10, paddingBottom: 10 }}>
15
- <span style={{ float: "right" }}>
16
- <SmallButton icon="chevron_left" text="Back" onClick={props.onBack} />
17
- </span>
18
- Chat with {props.privateMessage.person.name.display}
19
- </div>
20
- <Notes context={props.context} conversationId={props.privateMessage.conversationId} noDisplayBox={true} />
21
- </>
22
- );
23
-
1
+ import React from "react";
2
+ import { SmallButton } from "../SmallButton";
3
+ import { PrivateMessageInterface, UserContextInterface } from "../../interfaces";
4
+ import { Notes } from "../notes/Notes";
5
+
6
+ interface Props {
7
+ context: UserContextInterface;
8
+ privateMessage: PrivateMessageInterface;
9
+ onBack: () => void
10
+ }
11
+
12
+ export const PrivateMessageDetails: React.FC<Props> = (props) => (
13
+ <>
14
+ <div style={{ paddingLeft: 10, paddingRight: 10, paddingBottom: 10 }}>
15
+ <span style={{ float: "right" }}>
16
+ <SmallButton icon="chevron_left" text="Back" onClick={props.onBack} />
17
+ </span>
18
+ Chat with {props.privateMessage.person.name.display}
19
+ </div>
20
+ <Notes maxHeight={"50vh"} context={props.context} conversationId={props.privateMessage.conversationId} noDisplayBox={true} />
21
+ </>
22
+ );
23
+