@churchapps/apphelper 0.4.12 → 0.4.18

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 (608) hide show
  1. package/dist/components/DisplayBox.js +12 -18
  2. package/dist/components/DisplayBox.js.map +1 -1
  3. package/dist/components/ErrorMessages.js +9 -46
  4. package/dist/components/ErrorMessages.js.map +1 -1
  5. package/dist/components/ExportLink.d.ts.map +1 -1
  6. package/dist/components/ExportLink.js +8 -10
  7. package/dist/components/ExportLink.js.map +1 -1
  8. package/dist/components/FloatingSupport.js +7 -14
  9. package/dist/components/FloatingSupport.js.map +1 -1
  10. package/dist/components/FormCardPayment.d.ts.map +1 -1
  11. package/dist/components/FormCardPayment.js +28 -64
  12. package/dist/components/FormCardPayment.js.map +1 -1
  13. package/dist/components/FormSubmissionEdit.d.ts.map +1 -1
  14. package/dist/components/FormSubmissionEdit.js +28 -66
  15. package/dist/components/FormSubmissionEdit.js.map +1 -1
  16. package/dist/components/HelpIcon.js +3 -7
  17. package/dist/components/HelpIcon.js.map +1 -1
  18. package/dist/components/ImageEditor.d.ts.map +1 -1
  19. package/dist/components/ImageEditor.js +13 -19
  20. package/dist/components/ImageEditor.js.map +1 -1
  21. package/dist/components/InputBox.d.ts.map +1 -1
  22. package/dist/components/InputBox.js +13 -15
  23. package/dist/components/InputBox.js.map +1 -1
  24. package/dist/components/Loading.d.ts +0 -1
  25. package/dist/components/Loading.d.ts.map +1 -1
  26. package/dist/components/Loading.js +52 -12
  27. package/dist/components/Loading.js.map +1 -1
  28. package/dist/components/PageHeader.d.ts +15 -0
  29. package/dist/components/PageHeader.d.ts.map +1 -0
  30. package/dist/components/PageHeader.js +41 -0
  31. package/dist/components/PageHeader.js.map +1 -0
  32. package/dist/components/PersonAvatar.d.ts +12 -0
  33. package/dist/components/PersonAvatar.d.ts.map +1 -0
  34. package/dist/components/PersonAvatar.js +55 -0
  35. package/dist/components/PersonAvatar.js.map +1 -0
  36. package/dist/components/QuestionEdit.js +20 -26
  37. package/dist/components/QuestionEdit.js.map +1 -1
  38. package/dist/components/SmallButton.js +9 -15
  39. package/dist/components/SmallButton.js.map +1 -1
  40. package/dist/components/SupportModal.d.ts.map +1 -1
  41. package/dist/components/SupportModal.js +5 -9
  42. package/dist/components/SupportModal.js.map +1 -1
  43. package/dist/components/TabPanel.js +5 -9
  44. package/dist/components/TabPanel.js.map +1 -1
  45. package/dist/components/header/Banner.js +3 -7
  46. package/dist/components/header/Banner.js.map +1 -1
  47. package/dist/components/header/PrimaryMenu.d.ts.map +1 -1
  48. package/dist/components/header/PrimaryMenu.js +30 -30
  49. package/dist/components/header/PrimaryMenu.js.map +1 -1
  50. package/dist/components/header/SecondaryMenu.js +6 -10
  51. package/dist/components/header/SecondaryMenu.js.map +1 -1
  52. package/dist/components/header/SecondaryMenuAlt.js +8 -15
  53. package/dist/components/header/SecondaryMenuAlt.js.map +1 -1
  54. package/dist/components/header/SiteHeader.d.ts +2 -1
  55. package/dist/components/header/SiteHeader.d.ts.map +1 -1
  56. package/dist/components/header/SiteHeader.js +109 -17
  57. package/dist/components/header/SiteHeader.js.map +1 -1
  58. package/dist/components/header/SupportDrawer.js +14 -18
  59. package/dist/components/header/SupportDrawer.js.map +1 -1
  60. package/dist/components/header/index.js +2 -7
  61. package/dist/components/header/index.js.map +1 -1
  62. package/dist/components/index.d.ts +2 -4
  63. package/dist/components/index.d.ts.map +1 -1
  64. package/dist/components/index.js +18 -52
  65. package/dist/components/index.js.map +1 -1
  66. package/dist/components/notes/AddNote.d.ts.map +1 -1
  67. package/dist/components/notes/AddNote.js +56 -54
  68. package/dist/components/notes/AddNote.js.map +1 -1
  69. package/dist/components/notes/Note.d.ts.map +1 -1
  70. package/dist/components/notes/Note.js +11 -15
  71. package/dist/components/notes/Note.js.map +1 -1
  72. package/dist/components/notes/Notes.d.ts.map +1 -1
  73. package/dist/components/notes/Notes.js +134 -40
  74. package/dist/components/notes/Notes.js.map +1 -1
  75. package/dist/components/notes/index.js +3 -9
  76. package/dist/components/notes/index.js.map +1 -1
  77. package/dist/components/wrapper/AppList.d.ts.map +1 -1
  78. package/dist/components/wrapper/AppList.js +7 -13
  79. package/dist/components/wrapper/AppList.js.map +1 -1
  80. package/dist/components/wrapper/ChurchList.d.ts.map +1 -1
  81. package/dist/components/wrapper/ChurchList.js +55 -21
  82. package/dist/components/wrapper/ChurchList.js.map +1 -1
  83. package/dist/components/wrapper/NavItem.js +11 -15
  84. package/dist/components/wrapper/NavItem.js.map +1 -1
  85. package/dist/components/wrapper/NewPrivateMessage.d.ts.map +1 -1
  86. package/dist/components/wrapper/NewPrivateMessage.js +38 -68
  87. package/dist/components/wrapper/NewPrivateMessage.js.map +1 -1
  88. package/dist/components/wrapper/Notifications.d.ts.map +1 -1
  89. package/dist/components/wrapper/Notifications.js +53 -57
  90. package/dist/components/wrapper/Notifications.js.map +1 -1
  91. package/dist/components/wrapper/PrivateMessageDetails.d.ts +1 -0
  92. package/dist/components/wrapper/PrivateMessageDetails.d.ts.map +1 -1
  93. package/dist/components/wrapper/PrivateMessageDetails.js +54 -9
  94. package/dist/components/wrapper/PrivateMessageDetails.js.map +1 -1
  95. package/dist/components/wrapper/PrivateMessages.d.ts.map +1 -1
  96. package/dist/components/wrapper/PrivateMessages.js +363 -78
  97. package/dist/components/wrapper/PrivateMessages.js.map +1 -1
  98. package/dist/components/wrapper/UserMenu.d.ts.map +1 -1
  99. package/dist/components/wrapper/UserMenu.js +182 -54
  100. package/dist/components/wrapper/UserMenu.js.map +1 -1
  101. package/dist/components/wrapper/index.d.ts +2 -1
  102. package/dist/components/wrapper/index.d.ts.map +1 -1
  103. package/dist/components/wrapper/index.js +8 -17
  104. package/dist/components/wrapper/index.js.map +1 -1
  105. package/dist/helpers/AnalyticsHelper.d.ts.map +1 -1
  106. package/dist/helpers/AnalyticsHelper.js +11 -19
  107. package/dist/helpers/AnalyticsHelper.js.map +1 -1
  108. package/dist/helpers/AppearanceHelper.js +1 -5
  109. package/dist/helpers/AppearanceHelper.js.map +1 -1
  110. package/dist/helpers/ArrayHelper.d.ts.map +1 -1
  111. package/dist/helpers/ArrayHelper.js +3 -8
  112. package/dist/helpers/ArrayHelper.js.map +1 -1
  113. package/dist/helpers/CurrencyHelper.js +1 -5
  114. package/dist/helpers/CurrencyHelper.js.map +1 -1
  115. package/dist/helpers/DateHelper.js +3 -7
  116. package/dist/helpers/DateHelper.js.map +1 -1
  117. package/dist/helpers/ErrorHelper.js +3 -7
  118. package/dist/helpers/ErrorHelper.js.map +1 -1
  119. package/dist/helpers/EventHelper.d.ts.map +1 -1
  120. package/dist/helpers/EventHelper.js +4 -11
  121. package/dist/helpers/EventHelper.js.map +1 -1
  122. package/dist/helpers/FileHelper.js +3 -10
  123. package/dist/helpers/FileHelper.js.map +1 -1
  124. package/dist/helpers/Locale.d.ts +1 -1
  125. package/dist/helpers/Locale.d.ts.map +1 -1
  126. package/dist/helpers/Locale.js +18 -20
  127. package/dist/helpers/Locale.js.map +1 -1
  128. package/dist/helpers/NotificationService.d.ts +56 -0
  129. package/dist/helpers/NotificationService.d.ts.map +1 -0
  130. package/dist/helpers/NotificationService.js +176 -0
  131. package/dist/helpers/NotificationService.js.map +1 -0
  132. package/dist/helpers/PersonHelper.d.ts.map +1 -1
  133. package/dist/helpers/PersonHelper.js +5 -9
  134. package/dist/helpers/PersonHelper.js.map +1 -1
  135. package/dist/helpers/SlugHelper.js +4 -11
  136. package/dist/helpers/SlugHelper.js.map +1 -1
  137. package/dist/helpers/SocketHelper.d.ts +12 -0
  138. package/dist/helpers/SocketHelper.d.ts.map +1 -1
  139. package/dist/helpers/SocketHelper.js +163 -44
  140. package/dist/helpers/SocketHelper.js.map +1 -1
  141. package/dist/helpers/UniqueIdHelper.js +1 -5
  142. package/dist/helpers/UniqueIdHelper.js.map +1 -1
  143. package/dist/helpers/UserHelper.js +8 -12
  144. package/dist/helpers/UserHelper.js.map +1 -1
  145. package/dist/helpers/createEmotionCache.js +3 -9
  146. package/dist/helpers/createEmotionCache.js.map +1 -1
  147. package/dist/helpers/index.d.ts +7 -16
  148. package/dist/helpers/index.d.ts.map +1 -1
  149. package/dist/helpers/index.js +10 -54
  150. package/dist/helpers/index.js.map +1 -1
  151. package/dist/hooks/index.d.ts +2 -0
  152. package/dist/hooks/index.d.ts.map +1 -1
  153. package/dist/hooks/index.js +2 -5
  154. package/dist/hooks/index.js.map +1 -1
  155. package/dist/hooks/useMountedState.js +5 -9
  156. package/dist/hooks/useMountedState.js.map +1 -1
  157. package/dist/hooks/useNotifications.d.ts +30 -0
  158. package/dist/hooks/useNotifications.d.ts.map +1 -0
  159. package/dist/hooks/useNotifications.js +79 -0
  160. package/dist/hooks/useNotifications.js.map +1 -0
  161. package/dist/index.d.ts +0 -3
  162. package/dist/index.d.ts.map +1 -1
  163. package/dist/index.js +3 -22
  164. package/dist/index.js.map +1 -1
  165. package/dist/public/css/styles.css +6 -2
  166. package/package.json +6 -28
  167. package/public/css/styles.css +6 -2
  168. package/src/components/ExportLink.tsx +12 -3
  169. package/src/components/FormCardPayment.tsx +4 -3
  170. package/src/components/FormSubmissionEdit.tsx +5 -6
  171. package/src/components/ImageEditor.tsx +15 -12
  172. package/src/components/InputBox.tsx +2 -1
  173. package/src/components/Loading.tsx +47 -1
  174. package/src/components/PageHeader.tsx +107 -0
  175. package/src/components/PersonAvatar.tsx +78 -0
  176. package/src/components/SupportModal.tsx +8 -3
  177. package/src/components/header/PrimaryMenu.tsx +85 -42
  178. package/src/components/header/SiteHeader.tsx +131 -8
  179. package/src/components/header/SupportDrawer.tsx +1 -1
  180. package/src/components/index.tsx +2 -5
  181. package/src/components/notes/AddNote.tsx +105 -19
  182. package/src/components/notes/Note.tsx +43 -22
  183. package/src/components/notes/Notes.tsx +160 -21
  184. package/src/components/wrapper/AppList.tsx +1 -4
  185. package/src/components/wrapper/ChurchList.tsx +45 -5
  186. package/src/components/wrapper/NewPrivateMessage.tsx +181 -44
  187. package/src/components/wrapper/Notifications.tsx +164 -29
  188. package/src/components/wrapper/PrivateMessageDetails.tsx +100 -13
  189. package/src/components/wrapper/PrivateMessages.tsx +539 -56
  190. package/src/components/wrapper/UserMenu.tsx +218 -38
  191. package/src/components/wrapper/index.tsx +3 -2
  192. package/src/helpers/AnalyticsHelper.ts +1 -2
  193. package/src/helpers/ArrayHelper.ts +0 -1
  194. package/src/helpers/ErrorHelper.ts +1 -1
  195. package/src/helpers/EventHelper.ts +0 -3
  196. package/src/helpers/Locale.ts +8 -3
  197. package/src/helpers/NotificationService.ts +211 -0
  198. package/src/helpers/PersonHelper.ts +1 -2
  199. package/src/helpers/SocketHelper.ts +184 -39
  200. package/src/helpers/UserHelper.ts +2 -2
  201. package/src/helpers/index.ts +46 -16
  202. package/src/hooks/index.ts +2 -0
  203. package/src/hooks/useNotifications.ts +94 -0
  204. package/src/index.ts +1 -4
  205. package/tsconfig.json +2 -2
  206. package/.eslintignore +0 -4
  207. package/.github/FUNDING.yml +0 -1
  208. package/.vscode/settings.json +0 -6
  209. package/CHUMS_COMPONENT_EXTRACTION_CANDIDATES.md +0 -210
  210. package/CLAUDE.md +0 -111
  211. package/COMPONENT_USAGE_REPORT.md +0 -322
  212. package/LICENSE +0 -21
  213. package/README.md +0 -24
  214. package/b1app-specific-components.md +0 -146
  215. package/component-usage-analysis.md +0 -169
  216. package/dist/components/markdownEditor/Editor.d.ts +0 -13
  217. package/dist/components/markdownEditor/Editor.d.ts.map +0 -1
  218. package/dist/components/markdownEditor/Editor.js +0 -92
  219. package/dist/components/markdownEditor/Editor.js.map +0 -1
  220. package/dist/components/markdownEditor/IconNamesList.d.ts +0 -3
  221. package/dist/components/markdownEditor/IconNamesList.d.ts.map +0 -1
  222. package/dist/components/markdownEditor/IconNamesList.js +0 -16
  223. package/dist/components/markdownEditor/IconNamesList.js.map +0 -1
  224. package/dist/components/markdownEditor/MarkdownEditor.d.ts +0 -10
  225. package/dist/components/markdownEditor/MarkdownEditor.d.ts.map +0 -1
  226. package/dist/components/markdownEditor/MarkdownEditor.js +0 -45
  227. package/dist/components/markdownEditor/MarkdownEditor.js.map +0 -1
  228. package/dist/components/markdownEditor/MarkdownModal.d.ts +0 -9
  229. package/dist/components/markdownEditor/MarkdownModal.d.ts.map +0 -1
  230. package/dist/components/markdownEditor/MarkdownModal.js +0 -24
  231. package/dist/components/markdownEditor/MarkdownModal.js.map +0 -1
  232. package/dist/components/markdownEditor/MarkdownPreview.d.ts +0 -9
  233. package/dist/components/markdownEditor/MarkdownPreview.d.ts.map +0 -1
  234. package/dist/components/markdownEditor/MarkdownPreview.js +0 -45
  235. package/dist/components/markdownEditor/MarkdownPreview.js.map +0 -1
  236. package/dist/components/markdownEditor/MarkdownPreviewLight.d.ts +0 -7
  237. package/dist/components/markdownEditor/MarkdownPreviewLight.d.ts.map +0 -1
  238. package/dist/components/markdownEditor/MarkdownPreviewLight.js +0 -53
  239. package/dist/components/markdownEditor/MarkdownPreviewLight.js.map +0 -1
  240. package/dist/components/markdownEditor/editor.css +0 -787
  241. package/dist/components/markdownEditor/images/emoji/1F600.png +0 -0
  242. package/dist/components/markdownEditor/images/emoji/1F641.png +0 -0
  243. package/dist/components/markdownEditor/images/emoji/1F642.png +0 -0
  244. package/dist/components/markdownEditor/images/emoji/2764.png +0 -0
  245. package/dist/components/markdownEditor/images/icons/arrow-clockwise.svg +0 -4
  246. package/dist/components/markdownEditor/images/icons/arrow-counterclockwise.svg +0 -4
  247. package/dist/components/markdownEditor/images/icons/chat-square-quote.svg +0 -4
  248. package/dist/components/markdownEditor/images/icons/chevron-down.svg +0 -3
  249. package/dist/components/markdownEditor/images/icons/code.svg +0 -3
  250. package/dist/components/markdownEditor/images/icons/journal-code.svg +0 -5
  251. package/dist/components/markdownEditor/images/icons/journal-text.svg +0 -5
  252. package/dist/components/markdownEditor/images/icons/justify.svg +0 -3
  253. package/dist/components/markdownEditor/images/icons/link.svg +0 -4
  254. package/dist/components/markdownEditor/images/icons/list-ol.svg +0 -4
  255. package/dist/components/markdownEditor/images/icons/list-ul.svg +0 -3
  256. package/dist/components/markdownEditor/images/icons/pencil-fill.svg +0 -3
  257. package/dist/components/markdownEditor/images/icons/text-center.svg +0 -3
  258. package/dist/components/markdownEditor/images/icons/text-left.svg +0 -3
  259. package/dist/components/markdownEditor/images/icons/text-paragraph.svg +0 -3
  260. package/dist/components/markdownEditor/images/icons/text-right.svg +0 -3
  261. package/dist/components/markdownEditor/images/icons/type-bold.svg +0 -3
  262. package/dist/components/markdownEditor/images/icons/type-h1.svg +0 -3
  263. package/dist/components/markdownEditor/images/icons/type-h2.svg +0 -3
  264. package/dist/components/markdownEditor/images/icons/type-h3.svg +0 -3
  265. package/dist/components/markdownEditor/images/icons/type-h4.svg +0 -13
  266. package/dist/components/markdownEditor/images/icons/type-italic.svg +0 -3
  267. package/dist/components/markdownEditor/images/icons/type-strikethrough.svg +0 -3
  268. package/dist/components/markdownEditor/images/icons/type-underline.svg +0 -3
  269. package/dist/components/markdownEditor/index.d.ts +0 -4
  270. package/dist/components/markdownEditor/index.d.ts.map +0 -1
  271. package/dist/components/markdownEditor/index.js +0 -10
  272. package/dist/components/markdownEditor/index.js.map +0 -1
  273. package/dist/components/markdownEditor/plugins/AutoLinkPlugin.d.ts +0 -2
  274. package/dist/components/markdownEditor/plugins/AutoLinkPlugin.d.ts.map +0 -1
  275. package/dist/components/markdownEditor/plugins/AutoLinkPlugin.js +0 -31
  276. package/dist/components/markdownEditor/plugins/AutoLinkPlugin.js.map +0 -1
  277. package/dist/components/markdownEditor/plugins/ControlledEditorPlugin.d.ts +0 -8
  278. package/dist/components/markdownEditor/plugins/ControlledEditorPlugin.d.ts.map +0 -1
  279. package/dist/components/markdownEditor/plugins/ControlledEditorPlugin.js +0 -19
  280. package/dist/components/markdownEditor/plugins/ControlledEditorPlugin.js.map +0 -1
  281. package/dist/components/markdownEditor/plugins/FloatingTextMenu/FloatingTextFormatToolbarPlugin.d.ts +0 -6
  282. package/dist/components/markdownEditor/plugins/FloatingTextMenu/FloatingTextFormatToolbarPlugin.d.ts.map +0 -1
  283. package/dist/components/markdownEditor/plugins/FloatingTextMenu/FloatingTextFormatToolbarPlugin.js +0 -310
  284. package/dist/components/markdownEditor/plugins/FloatingTextMenu/FloatingTextFormatToolbarPlugin.js.map +0 -1
  285. package/dist/components/markdownEditor/plugins/FloatingTextMenu/getDOMRangeRect.d.ts +0 -2
  286. package/dist/components/markdownEditor/plugins/FloatingTextMenu/getDOMRangeRect.d.ts.map +0 -1
  287. package/dist/components/markdownEditor/plugins/FloatingTextMenu/getDOMRangeRect.js +0 -19
  288. package/dist/components/markdownEditor/plugins/FloatingTextMenu/getDOMRangeRect.js.map +0 -1
  289. package/dist/components/markdownEditor/plugins/FloatingTextMenu/getSelectNode.d.ts +0 -2
  290. package/dist/components/markdownEditor/plugins/FloatingTextMenu/getSelectNode.d.ts.map +0 -1
  291. package/dist/components/markdownEditor/plugins/FloatingTextMenu/getSelectNode.js +0 -21
  292. package/dist/components/markdownEditor/plugins/FloatingTextMenu/getSelectNode.js.map +0 -1
  293. package/dist/components/markdownEditor/plugins/FloatingTextMenu/setFloatingElemPosition.d.ts +0 -2
  294. package/dist/components/markdownEditor/plugins/FloatingTextMenu/setFloatingElemPosition.d.ts.map +0 -1
  295. package/dist/components/markdownEditor/plugins/FloatingTextMenu/setFloatingElemPosition.js +0 -29
  296. package/dist/components/markdownEditor/plugins/FloatingTextMenu/setFloatingElemPosition.js.map +0 -1
  297. package/dist/components/markdownEditor/plugins/ListMaxIndentLevelPlugin.d.ts +0 -2
  298. package/dist/components/markdownEditor/plugins/ListMaxIndentLevelPlugin.d.ts.map +0 -1
  299. package/dist/components/markdownEditor/plugins/ListMaxIndentLevelPlugin.js +0 -45
  300. package/dist/components/markdownEditor/plugins/ListMaxIndentLevelPlugin.js.map +0 -1
  301. package/dist/components/markdownEditor/plugins/MarkdownTransformers.d.ts +0 -12
  302. package/dist/components/markdownEditor/plugins/MarkdownTransformers.d.ts.map +0 -1
  303. package/dist/components/markdownEditor/plugins/MarkdownTransformers.js +0 -85
  304. package/dist/components/markdownEditor/plugins/MarkdownTransformers.js.map +0 -1
  305. package/dist/components/markdownEditor/plugins/ReadOnlyPlugin.d.ts +0 -6
  306. package/dist/components/markdownEditor/plugins/ReadOnlyPlugin.d.ts.map +0 -1
  307. package/dist/components/markdownEditor/plugins/ReadOnlyPlugin.js +0 -12
  308. package/dist/components/markdownEditor/plugins/ReadOnlyPlugin.js.map +0 -1
  309. package/dist/components/markdownEditor/plugins/ToolbarPlugin.d.ts +0 -7
  310. package/dist/components/markdownEditor/plugins/ToolbarPlugin.d.ts.map +0 -1
  311. package/dist/components/markdownEditor/plugins/ToolbarPlugin.js +0 -282
  312. package/dist/components/markdownEditor/plugins/ToolbarPlugin.js.map +0 -1
  313. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNode.d.ts +0 -27
  314. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNode.d.ts.map +0 -1
  315. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNode.js +0 -158
  316. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNode.js.map +0 -1
  317. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNodePlugin.d.ts +0 -4
  318. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNodePlugin.d.ts.map +0 -1
  319. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNodePlugin.js +0 -21
  320. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNodePlugin.js.map +0 -1
  321. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNodeTransformer.d.ts +0 -3
  322. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNodeTransformer.d.ts.map +0 -1
  323. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNodeTransformer.js +0 -71
  324. package/dist/components/markdownEditor/plugins/customLink/CustomLinkNodeTransformer.js.map +0 -1
  325. package/dist/components/markdownEditor/plugins/customLink/FloatingLinkEditor.d.ts +0 -5
  326. package/dist/components/markdownEditor/plugins/customLink/FloatingLinkEditor.d.ts.map +0 -1
  327. package/dist/components/markdownEditor/plugins/customLink/FloatingLinkEditor.js +0 -190
  328. package/dist/components/markdownEditor/plugins/customLink/FloatingLinkEditor.js.map +0 -1
  329. package/dist/components/markdownEditor/plugins/customLink/FloatingLinkEditor.types.d.ts +0 -11
  330. package/dist/components/markdownEditor/plugins/customLink/FloatingLinkEditor.types.d.ts.map +0 -1
  331. package/dist/components/markdownEditor/plugins/customLink/FloatingLinkEditor.types.js +0 -3
  332. package/dist/components/markdownEditor/plugins/customLink/FloatingLinkEditor.types.js.map +0 -1
  333. package/dist/components/markdownEditor/plugins/emoji/EmojiNode.d.ts +0 -24
  334. package/dist/components/markdownEditor/plugins/emoji/EmojiNode.d.ts.map +0 -1
  335. package/dist/components/markdownEditor/plugins/emoji/EmojiNode.js +0 -66
  336. package/dist/components/markdownEditor/plugins/emoji/EmojiNode.js.map +0 -1
  337. package/dist/components/markdownEditor/plugins/emoji/EmojiNodeTransform.d.ts +0 -4
  338. package/dist/components/markdownEditor/plugins/emoji/EmojiNodeTransform.d.ts.map +0 -1
  339. package/dist/components/markdownEditor/plugins/emoji/EmojiNodeTransform.js +0 -35
  340. package/dist/components/markdownEditor/plugins/emoji/EmojiNodeTransform.js.map +0 -1
  341. package/dist/components/markdownEditor/plugins/emoji/EmojiPickerPlugin.d.ts +0 -9
  342. package/dist/components/markdownEditor/plugins/emoji/EmojiPickerPlugin.d.ts.map +0 -1
  343. package/dist/components/markdownEditor/plugins/emoji/EmojiPickerPlugin.js +0 -103
  344. package/dist/components/markdownEditor/plugins/emoji/EmojiPickerPlugin.js.map +0 -1
  345. package/dist/components/markdownEditor/plugins/emoji/EmojisPlugin.d.ts +0 -10
  346. package/dist/components/markdownEditor/plugins/emoji/EmojisPlugin.d.ts.map +0 -1
  347. package/dist/components/markdownEditor/plugins/emoji/EmojisPlugin.js +0 -59
  348. package/dist/components/markdownEditor/plugins/emoji/EmojisPlugin.js.map +0 -1
  349. package/dist/components/markdownEditor/plugins/index.d.ts +0 -7
  350. package/dist/components/markdownEditor/plugins/index.d.ts.map +0 -1
  351. package/dist/components/markdownEditor/plugins/index.js +0 -16
  352. package/dist/components/markdownEditor/plugins/index.js.map +0 -1
  353. package/dist/components/markdownEditor/theme.d.ts +0 -66
  354. package/dist/components/markdownEditor/theme.d.ts.map +0 -1
  355. package/dist/components/markdownEditor/theme.js +0 -69
  356. package/dist/components/markdownEditor/theme.js.map +0 -1
  357. package/dist/components/reporting/ChartReport.d.ts +0 -8
  358. package/dist/components/reporting/ChartReport.d.ts.map +0 -1
  359. package/dist/components/reporting/ChartReport.js +0 -81
  360. package/dist/components/reporting/ChartReport.js.map +0 -1
  361. package/dist/components/reporting/ReportFilter.d.ts +0 -9
  362. package/dist/components/reporting/ReportFilter.d.ts.map +0 -1
  363. package/dist/components/reporting/ReportFilter.js +0 -52
  364. package/dist/components/reporting/ReportFilter.js.map +0 -1
  365. package/dist/components/reporting/ReportFilterField.d.ts +0 -9
  366. package/dist/components/reporting/ReportFilterField.d.ts.map +0 -1
  367. package/dist/components/reporting/ReportFilterField.js +0 -156
  368. package/dist/components/reporting/ReportFilterField.js.map +0 -1
  369. package/dist/components/reporting/ReportOutput.d.ts +0 -8
  370. package/dist/components/reporting/ReportOutput.d.ts.map +0 -1
  371. package/dist/components/reporting/ReportOutput.js +0 -177
  372. package/dist/components/reporting/ReportOutput.js.map +0 -1
  373. package/dist/components/reporting/ReportWithFilter.d.ts +0 -7
  374. package/dist/components/reporting/ReportWithFilter.d.ts.map +0 -1
  375. package/dist/components/reporting/ReportWithFilter.js +0 -65
  376. package/dist/components/reporting/ReportWithFilter.js.map +0 -1
  377. package/dist/components/reporting/TableReport.d.ts +0 -8
  378. package/dist/components/reporting/TableReport.d.ts.map +0 -1
  379. package/dist/components/reporting/TableReport.js +0 -30
  380. package/dist/components/reporting/TableReport.js.map +0 -1
  381. package/dist/components/reporting/TreeReport.d.ts +0 -8
  382. package/dist/components/reporting/TreeReport.d.ts.map +0 -1
  383. package/dist/components/reporting/TreeReport.js +0 -89
  384. package/dist/components/reporting/TreeReport.js.map +0 -1
  385. package/dist/components/reporting/index.d.ts +0 -5
  386. package/dist/components/reporting/index.d.ts.map +0 -1
  387. package/dist/components/reporting/index.js +0 -12
  388. package/dist/components/reporting/index.js.map +0 -1
  389. package/dist/components/wrapper/Drawers.d.ts +0 -5
  390. package/dist/components/wrapper/Drawers.d.ts.map +0 -1
  391. package/dist/components/wrapper/Drawers.js +0 -54
  392. package/dist/components/wrapper/Drawers.js.map +0 -1
  393. package/dist/components/wrapper/SiteWrapper.d.ts +0 -15
  394. package/dist/components/wrapper/SiteWrapper.d.ts.map +0 -1
  395. package/dist/components/wrapper/SiteWrapper.js +0 -60
  396. package/dist/components/wrapper/SiteWrapper.js.map +0 -1
  397. package/dist/components/wrapper/TabPanel.d.ts +0 -9
  398. package/dist/components/wrapper/TabPanel.d.ts.map +0 -1
  399. package/dist/components/wrapper/TabPanel.js +0 -20
  400. package/dist/components/wrapper/TabPanel.js.map +0 -1
  401. package/dist/donationComponents/components/BankForm.d.ts +0 -14
  402. package/dist/donationComponents/components/BankForm.d.ts.map +0 -1
  403. package/dist/donationComponents/components/BankForm.js +0 -126
  404. package/dist/donationComponents/components/BankForm.js.map +0 -1
  405. package/dist/donationComponents/components/CardForm.d.ts +0 -13
  406. package/dist/donationComponents/components/CardForm.d.ts.map +0 -1
  407. package/dist/donationComponents/components/CardForm.js +0 -122
  408. package/dist/donationComponents/components/CardForm.js.map +0 -1
  409. package/dist/donationComponents/components/DonationForm.d.ts +0 -15
  410. package/dist/donationComponents/components/DonationForm.d.ts.map +0 -1
  411. package/dist/donationComponents/components/DonationForm.js +0 -199
  412. package/dist/donationComponents/components/DonationForm.js.map +0 -1
  413. package/dist/donationComponents/components/FundDonation.d.ts +0 -12
  414. package/dist/donationComponents/components/FundDonation.d.ts.map +0 -1
  415. package/dist/donationComponents/components/FundDonation.js +0 -32
  416. package/dist/donationComponents/components/FundDonation.js.map +0 -1
  417. package/dist/donationComponents/components/FundDonations.d.ts +0 -11
  418. package/dist/donationComponents/components/FundDonations.d.ts.map +0 -1
  419. package/dist/donationComponents/components/FundDonations.js +0 -33
  420. package/dist/donationComponents/components/FundDonations.js.map +0 -1
  421. package/dist/donationComponents/components/NonAuthDonation.d.ts +0 -12
  422. package/dist/donationComponents/components/NonAuthDonation.d.ts.map +0 -1
  423. package/dist/donationComponents/components/NonAuthDonation.js +0 -27
  424. package/dist/donationComponents/components/NonAuthDonation.js.map +0 -1
  425. package/dist/donationComponents/components/NonAuthDonationInner.d.ts +0 -12
  426. package/dist/donationComponents/components/NonAuthDonationInner.d.ts.map +0 -1
  427. package/dist/donationComponents/components/NonAuthDonationInner.js +0 -277
  428. package/dist/donationComponents/components/NonAuthDonationInner.js.map +0 -1
  429. package/dist/donationComponents/components/PaymentMethods.d.ts +0 -14
  430. package/dist/donationComponents/components/PaymentMethods.d.ts.map +0 -1
  431. package/dist/donationComponents/components/PaymentMethods.js +0 -84
  432. package/dist/donationComponents/components/PaymentMethods.js.map +0 -1
  433. package/dist/donationComponents/components/RecurringDonations.d.ts +0 -10
  434. package/dist/donationComponents/components/RecurringDonations.d.ts.map +0 -1
  435. package/dist/donationComponents/components/RecurringDonations.js +0 -93
  436. package/dist/donationComponents/components/RecurringDonations.js.map +0 -1
  437. package/dist/donationComponents/components/RecurringDonationsEdit.d.ts +0 -11
  438. package/dist/donationComponents/components/RecurringDonationsEdit.d.ts.map +0 -1
  439. package/dist/donationComponents/components/RecurringDonationsEdit.js +0 -66
  440. package/dist/donationComponents/components/RecurringDonationsEdit.js.map +0 -1
  441. package/dist/donationComponents/components/index.d.ts +0 -11
  442. package/dist/donationComponents/components/index.d.ts.map +0 -1
  443. package/dist/donationComponents/components/index.js +0 -24
  444. package/dist/donationComponents/components/index.js.map +0 -1
  445. package/dist/donationComponents/index.d.ts +0 -3
  446. package/dist/donationComponents/index.d.ts.map +0 -1
  447. package/dist/donationComponents/index.js +0 -21
  448. package/dist/donationComponents/index.js.map +0 -1
  449. package/dist/donationComponents/modals/DonationPreviewModal.d.ts +0 -15
  450. package/dist/donationComponents/modals/DonationPreviewModal.d.ts.map +0 -1
  451. package/dist/donationComponents/modals/DonationPreviewModal.js +0 -33
  452. package/dist/donationComponents/modals/DonationPreviewModal.js.map +0 -1
  453. package/dist/helpers/ApiHelper.d.ts +0 -18
  454. package/dist/helpers/ApiHelper.d.ts.map +0 -1
  455. package/dist/helpers/ApiHelper.js +0 -123
  456. package/dist/helpers/ApiHelper.js.map +0 -1
  457. package/dist/helpers/CommonEnvironmentHelper.d.ts +0 -21
  458. package/dist/helpers/CommonEnvironmentHelper.d.ts.map +0 -1
  459. package/dist/helpers/CommonEnvironmentHelper.js +0 -100
  460. package/dist/helpers/CommonEnvironmentHelper.js.map +0 -1
  461. package/dist/helpers/DonationHelper.d.ts +0 -8
  462. package/dist/helpers/DonationHelper.d.ts.map +0 -1
  463. package/dist/helpers/DonationHelper.js +0 -33
  464. package/dist/helpers/DonationHelper.js.map +0 -1
  465. package/dist/helpers/ReportHelper.d.ts +0 -5
  466. package/dist/helpers/ReportHelper.d.ts.map +0 -1
  467. package/dist/helpers/ReportHelper.js +0 -37
  468. package/dist/helpers/ReportHelper.js.map +0 -1
  469. package/dist/pageComponents/LoginPage.d.ts +0 -25
  470. package/dist/pageComponents/LoginPage.d.ts.map +0 -1
  471. package/dist/pageComponents/LoginPage.js +0 -288
  472. package/dist/pageComponents/LoginPage.js.map +0 -1
  473. package/dist/pageComponents/LogoutPage.d.ts +0 -9
  474. package/dist/pageComponents/LogoutPage.d.ts.map +0 -1
  475. package/dist/pageComponents/LogoutPage.js +0 -37
  476. package/dist/pageComponents/LogoutPage.js.map +0 -1
  477. package/dist/pageComponents/components/Forgot.d.ts +0 -8
  478. package/dist/pageComponents/components/Forgot.d.ts.map +0 -1
  479. package/dist/pageComponents/components/Forgot.js +0 -53
  480. package/dist/pageComponents/components/Forgot.js.map +0 -1
  481. package/dist/pageComponents/components/Login.d.ts +0 -15
  482. package/dist/pageComponents/components/Login.d.ts.map +0 -1
  483. package/dist/pageComponents/components/Login.js +0 -73
  484. package/dist/pageComponents/components/Login.js.map +0 -1
  485. package/dist/pageComponents/components/LoginSetPassword.d.ts +0 -13
  486. package/dist/pageComponents/components/LoginSetPassword.d.ts.map +0 -1
  487. package/dist/pageComponents/components/LoginSetPassword.js +0 -112
  488. package/dist/pageComponents/components/LoginSetPassword.js.map +0 -1
  489. package/dist/pageComponents/components/Register.d.ts +0 -12
  490. package/dist/pageComponents/components/Register.d.ts.map +0 -1
  491. package/dist/pageComponents/components/Register.js +0 -95
  492. package/dist/pageComponents/components/Register.js.map +0 -1
  493. package/dist/pageComponents/components/SelectChurchModal.d.ts +0 -14
  494. package/dist/pageComponents/components/SelectChurchModal.d.ts.map +0 -1
  495. package/dist/pageComponents/components/SelectChurchModal.js +0 -37
  496. package/dist/pageComponents/components/SelectChurchModal.js.map +0 -1
  497. package/dist/pageComponents/components/SelectChurchRegister.d.ts +0 -11
  498. package/dist/pageComponents/components/SelectChurchRegister.d.ts.map +0 -1
  499. package/dist/pageComponents/components/SelectChurchRegister.js +0 -89
  500. package/dist/pageComponents/components/SelectChurchRegister.js.map +0 -1
  501. package/dist/pageComponents/components/SelectChurchSearch.d.ts +0 -10
  502. package/dist/pageComponents/components/SelectChurchSearch.d.ts.map +0 -1
  503. package/dist/pageComponents/components/SelectChurchSearch.js +0 -58
  504. package/dist/pageComponents/components/SelectChurchSearch.js.map +0 -1
  505. package/dist/pageComponents/components/SelectableChurch.d.ts +0 -9
  506. package/dist/pageComponents/components/SelectableChurch.d.ts.map +0 -1
  507. package/dist/pageComponents/components/SelectableChurch.js +0 -18
  508. package/dist/pageComponents/components/SelectableChurch.js.map +0 -1
  509. package/dist/pageComponents/index.d.ts +0 -4
  510. package/dist/pageComponents/index.d.ts.map +0 -1
  511. package/dist/pageComponents/index.js +0 -10
  512. package/dist/pageComponents/index.js.map +0 -1
  513. package/src/components/markdownEditor/Editor.tsx +0 -150
  514. package/src/components/markdownEditor/IconNamesList.ts +0 -14
  515. package/src/components/markdownEditor/MarkdownEditor.tsx +0 -18
  516. package/src/components/markdownEditor/MarkdownModal.tsx +0 -49
  517. package/src/components/markdownEditor/MarkdownPreview.tsx +0 -18
  518. package/src/components/markdownEditor/MarkdownPreviewLight.tsx +0 -53
  519. package/src/components/markdownEditor/editor.css +0 -787
  520. package/src/components/markdownEditor/images/emoji/1F600.png +0 -0
  521. package/src/components/markdownEditor/images/emoji/1F641.png +0 -0
  522. package/src/components/markdownEditor/images/emoji/1F642.png +0 -0
  523. package/src/components/markdownEditor/images/emoji/2764.png +0 -0
  524. package/src/components/markdownEditor/images/icons/arrow-clockwise.svg +0 -4
  525. package/src/components/markdownEditor/images/icons/arrow-counterclockwise.svg +0 -4
  526. package/src/components/markdownEditor/images/icons/chat-square-quote.svg +0 -4
  527. package/src/components/markdownEditor/images/icons/chevron-down.svg +0 -3
  528. package/src/components/markdownEditor/images/icons/code.svg +0 -3
  529. package/src/components/markdownEditor/images/icons/journal-code.svg +0 -5
  530. package/src/components/markdownEditor/images/icons/journal-text.svg +0 -5
  531. package/src/components/markdownEditor/images/icons/justify.svg +0 -3
  532. package/src/components/markdownEditor/images/icons/link.svg +0 -4
  533. package/src/components/markdownEditor/images/icons/list-ol.svg +0 -4
  534. package/src/components/markdownEditor/images/icons/list-ul.svg +0 -3
  535. package/src/components/markdownEditor/images/icons/pencil-fill.svg +0 -3
  536. package/src/components/markdownEditor/images/icons/text-center.svg +0 -3
  537. package/src/components/markdownEditor/images/icons/text-left.svg +0 -3
  538. package/src/components/markdownEditor/images/icons/text-paragraph.svg +0 -3
  539. package/src/components/markdownEditor/images/icons/text-right.svg +0 -3
  540. package/src/components/markdownEditor/images/icons/type-bold.svg +0 -3
  541. package/src/components/markdownEditor/images/icons/type-h1.svg +0 -3
  542. package/src/components/markdownEditor/images/icons/type-h2.svg +0 -3
  543. package/src/components/markdownEditor/images/icons/type-h3.svg +0 -3
  544. package/src/components/markdownEditor/images/icons/type-h4.svg +0 -13
  545. package/src/components/markdownEditor/images/icons/type-italic.svg +0 -3
  546. package/src/components/markdownEditor/images/icons/type-strikethrough.svg +0 -3
  547. package/src/components/markdownEditor/images/icons/type-underline.svg +0 -3
  548. package/src/components/markdownEditor/index.ts +0 -3
  549. package/src/components/markdownEditor/plugins/AutoLinkPlugin.tsx +0 -35
  550. package/src/components/markdownEditor/plugins/ControlledEditorPlugin.tsx +0 -24
  551. package/src/components/markdownEditor/plugins/FloatingTextMenu/FloatingTextFormatToolbarPlugin.tsx +0 -445
  552. package/src/components/markdownEditor/plugins/FloatingTextMenu/getDOMRangeRect.tsx +0 -17
  553. package/src/components/markdownEditor/plugins/FloatingTextMenu/getSelectNode.tsx +0 -17
  554. package/src/components/markdownEditor/plugins/FloatingTextMenu/setFloatingElemPosition.tsx +0 -33
  555. package/src/components/markdownEditor/plugins/ListMaxIndentLevelPlugin.tsx +0 -68
  556. package/src/components/markdownEditor/plugins/MarkdownTransformers.ts +0 -106
  557. package/src/components/markdownEditor/plugins/ReadOnlyPlugin.tsx +0 -15
  558. package/src/components/markdownEditor/plugins/ToolbarPlugin.tsx +0 -424
  559. package/src/components/markdownEditor/plugins/customLink/CustomLinkNode.tsx +0 -224
  560. package/src/components/markdownEditor/plugins/customLink/CustomLinkNodePlugin.tsx +0 -32
  561. package/src/components/markdownEditor/plugins/customLink/CustomLinkNodeTransformer.tsx +0 -102
  562. package/src/components/markdownEditor/plugins/customLink/FloatingLinkEditor.tsx +0 -270
  563. package/src/components/markdownEditor/plugins/customLink/FloatingLinkEditor.types.ts +0 -11
  564. package/src/components/markdownEditor/plugins/emoji/EmojiNode.tsx +0 -95
  565. package/src/components/markdownEditor/plugins/emoji/EmojiNodeTransform.ts +0 -41
  566. package/src/components/markdownEditor/plugins/emoji/EmojiPickerPlugin.tsx +0 -152
  567. package/src/components/markdownEditor/plugins/emoji/EmojisPlugin.tsx +0 -70
  568. package/src/components/markdownEditor/plugins/index.ts +0 -6
  569. package/src/components/markdownEditor/theme.ts +0 -65
  570. package/src/components/reporting/ChartReport.tsx +0 -89
  571. package/src/components/reporting/ReportFilter.tsx +0 -56
  572. package/src/components/reporting/ReportFilterField.tsx +0 -163
  573. package/src/components/reporting/ReportOutput.tsx +0 -168
  574. package/src/components/reporting/ReportWithFilter.tsx +0 -72
  575. package/src/components/reporting/TableReport.tsx +0 -44
  576. package/src/components/reporting/TreeReport.tsx +0 -103
  577. package/src/components/reporting/index.ts +0 -4
  578. package/src/components/wrapper/Drawers.tsx +0 -62
  579. package/src/components/wrapper/SiteWrapper.tsx +0 -99
  580. package/src/components/wrapper/TabPanel.tsx +0 -32
  581. package/src/donationComponents/components/BankForm.tsx +0 -163
  582. package/src/donationComponents/components/CardForm.tsx +0 -104
  583. package/src/donationComponents/components/DonationForm.tsx +0 -260
  584. package/src/donationComponents/components/FundDonation.tsx +0 -59
  585. package/src/donationComponents/components/FundDonations.tsx +0 -44
  586. package/src/donationComponents/components/NonAuthDonation.tsx +0 -34
  587. package/src/donationComponents/components/NonAuthDonationInner.tsx +0 -300
  588. package/src/donationComponents/components/PaymentMethods.tsx +0 -133
  589. package/src/donationComponents/components/RecurringDonations.tsx +0 -117
  590. package/src/donationComponents/components/RecurringDonationsEdit.tsx +0 -96
  591. package/src/donationComponents/components/index.tsx +0 -10
  592. package/src/donationComponents/index.ts +0 -2
  593. package/src/donationComponents/modals/DonationPreviewModal.tsx +0 -70
  594. package/src/helpers/ApiHelper.ts +0 -127
  595. package/src/helpers/CommonEnvironmentHelper.ts +0 -98
  596. package/src/helpers/DonationHelper.ts +0 -26
  597. package/src/helpers/ReportHelper.ts +0 -34
  598. package/src/pageComponents/LoginPage.tsx +0 -284
  599. package/src/pageComponents/LogoutPage.tsx +0 -43
  600. package/src/pageComponents/components/Forgot.tsx +0 -81
  601. package/src/pageComponents/components/Login.tsx +0 -62
  602. package/src/pageComponents/components/LoginSetPassword.tsx +0 -98
  603. package/src/pageComponents/components/Register.tsx +0 -103
  604. package/src/pageComponents/components/SelectChurchModal.tsx +0 -58
  605. package/src/pageComponents/components/SelectChurchRegister.tsx +0 -87
  606. package/src/pageComponents/components/SelectChurchSearch.tsx +0 -71
  607. package/src/pageComponents/components/SelectableChurch.tsx +0 -40
  608. package/src/pageComponents/index.ts +0 -3
@@ -19,18 +19,72 @@ export function Notes(props: Props) {
19
19
 
20
20
  const [messages, setMessages] = React.useState<MessageInterface[]>(null)
21
21
  const [editMessageId, setEditMessageId] = React.useState(null)
22
+ const [isInitialLoad, setIsInitialLoad] = React.useState(true)
23
+ const [previousMessageCount, setPreviousMessageCount] = React.useState(0)
24
+
25
+ // Add CSS for custom scrollbar styling
26
+ React.useEffect(() => {
27
+ const styleId = 'notes-scrollbar-styles';
28
+ if (!document.getElementById(styleId)) {
29
+ const style = document.createElement('style');
30
+ style.id = styleId;
31
+ style.textContent = `
32
+ .notes-scroll-container {
33
+ scrollbar-width: thin;
34
+ scrollbar-color: rgba(0, 0, 0, 0.3) rgba(0, 0, 0, 0.1);
35
+ }
36
+ .notes-scroll-container::-webkit-scrollbar {
37
+ width: 12px;
38
+ background: transparent;
39
+ }
40
+ .notes-scroll-container::-webkit-scrollbar-track {
41
+ background: rgba(0, 0, 0, 0.1);
42
+ border-radius: 6px;
43
+ margin: 4px;
44
+ }
45
+ .notes-scroll-container::-webkit-scrollbar-thumb {
46
+ background: rgba(0, 0, 0, 0.3);
47
+ border-radius: 6px;
48
+ border: 2px solid transparent;
49
+ background-clip: content-box;
50
+ }
51
+ .notes-scroll-container::-webkit-scrollbar-thumb:hover {
52
+ background: rgba(0, 0, 0, 0.5);
53
+ background-clip: content-box;
54
+ }
55
+ .notes-scroll-container::-webkit-scrollbar-corner {
56
+ background: transparent;
57
+ }
58
+ `;
59
+ document.head.appendChild(style);
60
+ }
61
+ }, []);
22
62
 
23
63
  const loadNotes = async () => {
24
- const messages: MessageInterface[] = (props.conversationId) ? await ApiHelper.get("/messages/conversation/" + props.conversationId, "MessagingApi") : [];
25
- if (messages.length > 0) {
26
- const peopleIds = ArrayHelper.getIds(messages, "personId");
27
- const people = await ApiHelper.get("/people/basic?ids=" + peopleIds.join(","), "MembershipApi");
28
- messages.forEach(n => {
29
- n.person = ArrayHelper.getOne(people, "id", n.personId);
30
- })
64
+ try {
65
+ const messages: MessageInterface[] = (props.conversationId) ? await ApiHelper.get("/messages/conversation/" + props.conversationId, "MessagingApi") : [];
66
+ if (messages.length > 0) {
67
+ const peopleIds = ArrayHelper.getIds(messages, "personId");
68
+ const people = await ApiHelper.get("/people/basic?ids=" + peopleIds.join(","), "MembershipApi");
69
+ messages.forEach(n => {
70
+ n.person = ArrayHelper.getOne(people, "id", n.personId);
71
+ })
72
+ }
73
+ setMessages(messages);
74
+ setEditMessageId(null);
75
+
76
+ // Mark as no longer initial load after first load
77
+ if (isInitialLoad) {
78
+ setIsInitialLoad(false);
79
+ }
80
+ } catch (error) {
81
+ console.error("❌ Failed to load messages for conversation:", props.conversationId, error);
82
+ // Don't clear messages on error - keep showing existing messages
83
+ // Only set isInitialLoad to false if this was the first load attempt
84
+ if (isInitialLoad) {
85
+ setIsInitialLoad(false);
86
+ }
31
87
  }
32
- setMessages(messages);
33
- setEditMessageId(null);
34
88
  };
35
89
 
36
90
  const getNotes = () => {
@@ -45,25 +99,110 @@ export function Notes(props: Props) {
45
99
 
46
100
  const getNotesWrapper = () => {
47
101
  const notes = getNotes();
48
- if (props.maxHeight) return <div id="notesScroll" style={{maxHeight: props.maxHeight, overflowY: "scroll"}}>{notes}</div>
102
+ if (props.maxHeight) {
103
+ return (
104
+ <div
105
+ id="notesScroll"
106
+ style={{
107
+ flex: 1,
108
+ minHeight: 0,
109
+ overflowY: "auto",
110
+ overflowX: "hidden",
111
+ padding: "8px 12px",
112
+ scrollBehavior: "smooth",
113
+ height: "100%"
114
+ }}
115
+ className="notes-scroll-container"
116
+ data-testid="message-scroll-area"
117
+ >
118
+ <div style={{
119
+ display: "flex",
120
+ flexDirection: "column",
121
+ gap: "8px",
122
+ minHeight: "min-content"
123
+ }}>
124
+ {notes}
125
+ </div>
126
+ </div>
127
+ );
128
+ }
49
129
  else return notes;
50
130
  }
51
131
 
52
132
  React.useEffect(() => { loadNotes() }, [props.conversationId, props.refreshKey]); //eslint-disable-line
53
133
 
134
+ // Simply reload notes when refreshKey changes
135
+ // This is triggered by the parent component when WebSocket messages arrive
136
+
137
+ // Auto-scroll to bottom only when new messages are added (not on initial load)
54
138
  React.useEffect(() => {
55
- if (props.maxHeight && messages?.length>0) {
56
- setTimeout(() => {
57
- const element = window?.document?.getElementById("notesScroll");
58
- if (element) element.scrollTop = element.scrollHeight;
59
- }, 100);
139
+ if (props.maxHeight && messages?.length > 0 && !isInitialLoad) {
140
+ const currentMessageCount = messages.length;
141
+
142
+ // Only auto-scroll if messages were added
143
+ if (currentMessageCount > previousMessageCount) {
144
+ // Use requestAnimationFrame for smoother scrolling
145
+ requestAnimationFrame(() => {
146
+ const element = window?.document?.getElementById("notesScroll");
147
+ if (element) {
148
+ element.scrollTop = element.scrollHeight;
149
+ }
150
+ });
151
+ }
152
+
153
+ setPreviousMessageCount(currentMessageCount);
154
+ } else if (messages?.length > 0 && isInitialLoad) {
155
+ // On initial load, just set the previous count without scrolling
156
+ setPreviousMessageCount(messages.length);
60
157
  }
61
- }, [messages, props.maxHeight]);
158
+ }, [messages, props.maxHeight, isInitialLoad, previousMessageCount]);
62
159
 
63
- let result = <>
64
- {getNotesWrapper()}
65
- {messages && (<AddNote context={props.context} conversationId={props.conversationId} onUpdate={loadNotes} createConversation={props.createConversation} messageId={editMessageId} />)}
66
- </>
160
+ let result = props.maxHeight ? (
161
+ <div style={{
162
+ height: "100%",
163
+ display: "flex",
164
+ flexDirection: "column",
165
+ overflow: "hidden",
166
+ minHeight: 0
167
+ }}>
168
+ {/* Messages area - scrollable */}
169
+ <div style={{
170
+ flex: 1,
171
+ minHeight: 0,
172
+ display: "flex",
173
+ flexDirection: "column",
174
+ overflow: "hidden"
175
+ }}>
176
+ {getNotesWrapper()}
177
+ </div>
178
+
179
+ {/* Input area - always visible at bottom */}
180
+ {messages && (
181
+ <div style={{
182
+ flexShrink: 0,
183
+ borderTop: "1px solid #e0e0e0",
184
+ backgroundColor: "#fafafa",
185
+ padding: "12px",
186
+ minHeight: "auto",
187
+ maxHeight: "200px"
188
+ }}>
189
+ <AddNote
190
+ context={props.context}
191
+ conversationId={props.conversationId}
192
+ onUpdate={loadNotes}
193
+ createConversation={props.createConversation}
194
+ messageId={editMessageId}
195
+ />
196
+ </div>
197
+ )}
198
+ </div>
199
+ ) : (
200
+ <>
201
+ {getNotesWrapper()}
202
+ {messages && (<AddNote context={props.context} conversationId={props.conversationId} onUpdate={loadNotes} createConversation={props.createConversation} messageId={editMessageId} />)}
203
+ </>
204
+ );
205
+
67
206
  if (props.noDisplayBox) return result;
68
- else return (<DisplayBox id="notesBox" data-testid="notes-box" headerIcon="sticky_note_2" headerText={Locale.label("notes.notes")}>{result}</DisplayBox>);
207
+ else return (<DisplayBox id="notesBox" data-testid="notes-box" headerIcon="sticky_note_2" headerText={Locale.label("notes.notes", "Notes")}>{result}</DisplayBox>);
69
208
  };
@@ -1,11 +1,8 @@
1
1
  "use client";
2
2
 
3
3
  import React from "react";
4
- import { ApiHelper } from "../../helpers/ApiHelper";
5
- import { UserHelper } from "../../helpers/UserHelper";
4
+ import { ApiHelper, UserHelper, CommonEnvironmentHelper, LoginUserChurchInterface } from "@churchapps/helpers";
6
5
  import { NavItem } from "./NavItem";
7
- import { CommonEnvironmentHelper } from "../../helpers/CommonEnvironmentHelper";
8
- import { LoginUserChurchInterface } from "@churchapps/helpers";
9
6
 
10
7
  export interface Props { appName: string; currentUserChurch: LoginUserChurchInterface; onNavigate: (url: string) => void; }
11
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  import React, { useState } from "react";
4
4
  import { LoginUserChurchInterface, UserContextInterface, ArrayHelper } from "@churchapps/helpers";
5
- import { ApiHelper } from "../../helpers/ApiHelper";
5
+ import { ApiHelper } from "@churchapps/helpers";
6
6
  import { UserHelper } from "../../helpers/UserHelper";
7
7
  import { NavItem } from "./NavItem";
8
8
  import { Locale } from "../../helpers";
@@ -10,11 +10,45 @@ import { Locale } from "../../helpers";
10
10
  export interface Props { userChurches: LoginUserChurchInterface[], currentUserChurch: LoginUserChurchInterface, context: UserContextInterface, onDelete?: () => void }
11
11
 
12
12
  export const ChurchList: React.FC<Props> = props => {
13
- const [userChurches, setUserChurches] = useState(UserHelper.userChurches.filter(uc => uc.apis.length > 0));
13
+
14
+ const [userChurches, setUserChurches] = useState(() => {
15
+ try {
16
+ // Handle both array and single object cases
17
+ let churches = props.userChurches;
18
+ if (!Array.isArray(churches)) {
19
+ churches = churches ? [churches] : [];
20
+ }
21
+ return churches.filter(uc => uc && uc.apis && uc.apis.length > 0);
22
+ } catch (error) {
23
+ console.error('Error filtering userChurches:', error);
24
+ return [];
25
+ }
26
+ });
27
+
28
+ // Update local state when props change
29
+ React.useEffect(() => {
30
+ try {
31
+ // Handle both array and single object cases
32
+ let churches = props.userChurches;
33
+ if (!Array.isArray(churches)) {
34
+ churches = churches ? [churches] : [];
35
+ }
36
+ setUserChurches(churches.filter(uc => uc && uc.apis && uc.apis.length > 0));
37
+ } catch (error) {
38
+ console.error('Error updating userChurches:', error);
39
+ setUserChurches([]);
40
+ }
41
+ }, [props.userChurches]);
14
42
 
15
43
  const handleDelete = async (uc: LoginUserChurchInterface) => {
16
- const label = Locale.label("wrapper.sureRemoveChurch").replace("{}", uc.church.name?.toUpperCase());
17
- if (window.confirm(label)) {
44
+ // Helper function to get label with fallback
45
+ const getLabel = (key: string, fallback: string) => {
46
+ const label = Locale.label(key);
47
+ return label && label !== key ? label : fallback;
48
+ };
49
+
50
+ const confirmMessage = getLabel("wrapper.sureRemoveChurch", "Are you sure you wish to delete this church? You will no longer be a member of {}.").replace("{}", uc.church.name?.toUpperCase());
51
+ if (window.confirm(confirmMessage)) {
18
52
  await ApiHelper.delete(`/userchurch/record/${props.context.user.id}/${uc.church.id}/${uc.person.id}`, "MembershipApi");
19
53
  await ApiHelper.delete(`/rolemembers/self/${uc.church.id}/${props.context.user.id}`, "MembershipApi");
20
54
  // remove the same from userChurches
@@ -24,6 +58,12 @@ export const ChurchList: React.FC<Props> = props => {
24
58
  }
25
59
  }
26
60
 
61
+ // Helper function to get label with fallback
62
+ const getLabel = (key: string, fallback: string) => {
63
+ const label = Locale.label(key);
64
+ return label && label !== key ? label : fallback;
65
+ };
66
+
27
67
  let result: React.ReactElement[] = [];
28
68
  userChurches.forEach(uc => {
29
69
  const userChurch = uc;
@@ -35,7 +75,7 @@ export const ChurchList: React.FC<Props> = props => {
35
75
  label={churchName || "Unknown"}
36
76
  icon="church"
37
77
  deleteIcon={uc.church.id !== props.currentUserChurch.church.id ? "delete" : null}
38
- deleteLabel={Locale.label("wrapper.deleteChurch")}
78
+ deleteLabel={getLabel("wrapper.deleteChurch", "Delete")}
39
79
  deleteFunction={() => { handleDelete(uc); }}
40
80
  />);
41
81
  });
@@ -1,11 +1,35 @@
1
1
  "use client";
2
2
 
3
- import { Button, TextField, TableRow, TableCell, Table, TableBody } from "@mui/material";
4
- import React, { useEffect } from "react";
3
+ import {
4
+ Button,
5
+ TextField,
6
+ Paper,
7
+ Box,
8
+ Typography,
9
+ Stack,
10
+ IconButton,
11
+ List,
12
+ ListItem,
13
+ ListItemAvatar,
14
+ ListItemText,
15
+ ListItemButton,
16
+ InputAdornment,
17
+ Divider,
18
+ Skeleton,
19
+ Avatar,
20
+ useTheme
21
+ } from "@mui/material";
22
+ import {
23
+ ArrowBack as ArrowBackIcon,
24
+ Search as SearchIcon,
25
+ PersonSearch as PersonSearchIcon,
26
+ Chat as ChatIcon
27
+ } from "@mui/icons-material";
28
+ import React, { useEffect, useState } from "react";
5
29
  import { ApiHelper, Locale, PersonHelper } from "../../helpers";
6
30
  import { ConversationInterface, PersonInterface, PrivateMessageInterface, UserContextInterface } from "@churchapps/helpers";
7
31
  import { AddNote } from "../notes/AddNote";
8
- import { SmallButton } from "../SmallButton";
32
+ import { PersonAvatar } from "../PersonAvatar";
9
33
 
10
34
  interface Props {
11
35
  context: UserContextInterface;
@@ -20,11 +44,6 @@ export const NewPrivateMessage: React.FC<Props> = (props) => {
20
44
  const [searchResults, setSearchResults] = React.useState([]);
21
45
  const [selectedPerson, setSelectedPerson] = React.useState<PersonInterface>(null);
22
46
 
23
- const handleSubmit = (e: React.MouseEvent) => {
24
- if (e !== null) e.preventDefault();
25
- let term = escape(searchText.trim());
26
- ApiHelper.get("/people/search?term=" + term, "MembershipApi").then(data => setSearchResults(data));
27
- }
28
47
 
29
48
  const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
30
49
  setSearchText(e.currentTarget.value);
@@ -51,24 +70,13 @@ export const NewPrivateMessage: React.FC<Props> = (props) => {
51
70
  setSelectedPerson(person);
52
71
  }
53
72
 
54
- const getPeople = () => {
55
- let result = [];
56
- for (let i = 0; i < searchResults.length; i++) {
57
- const p = searchResults[i];
58
- result.push(<TableRow key={p.id}>
59
- <TableCell><img src={PersonHelper.getPhotoUrl(p)} alt="avatar" /></TableCell>
60
- <TableCell><a href="about:blank" onClick={(e) => { e.preventDefault(); handlePersonSelected(p) }}>{p.name.display}</a></TableCell>
61
- </TableRow>);
62
- }
63
- return result;
64
- }
65
73
 
66
74
  const handleNoteAdded = () => {
67
75
  handlePersonSelected(selectedPerson);
68
76
  }
69
77
 
70
78
  const createConversation = async () => {
71
- const conv: ConversationInterface = { allowAnonymousPosts: false, contentType: "privateMessage", contentId: props.context.person.id, title: props.context.person.name.display + " " + Locale.label("wrapper.privateMessage"), visibility: "hidden" }
79
+ const conv: ConversationInterface = { allowAnonymousPosts: false, contentType: "privateMessage", contentId: props.context.person.id, title: props.context.person.name.display + " " + Locale.label("wrapper.privateMessage", "Private Message"), visibility: "hidden" }
72
80
  const result: ConversationInterface[] = await ApiHelper.post("/conversations", [conv], "MessagingApi");
73
81
 
74
82
  const pm: PrivateMessageInterface = {
@@ -86,34 +94,163 @@ export const NewPrivateMessage: React.FC<Props> = (props) => {
86
94
  }, [props.selectedPerson]);
87
95
 
88
96
 
97
+ const theme = useTheme();
98
+ const [isSearching, setIsSearching] = useState(false);
99
+
100
+ const handleSearchSubmit = async (e: React.MouseEvent) => {
101
+ if (e !== null) e.preventDefault();
102
+ if (!searchText.trim()) return;
103
+
104
+ setIsSearching(true);
105
+ let term = escape(searchText.trim());
106
+ const data = await ApiHelper.get("/people/search?term=" + term, "MembershipApi");
107
+ setSearchResults(data);
108
+ setIsSearching(false);
109
+ };
110
+
89
111
  if (!selectedPerson) return (
90
- <div style={{ paddingLeft: 10, paddingRight: 10 }}>
91
- <span style={{ float: "right" }}>
92
- <SmallButton icon="chevron_left" text="Back" onClick={props.onBack} />
93
- </span>
94
- <b>{Locale.label("wrapper.newPrivateMessage")}</b>
95
- <div>{Locale.label("wrapper.searchForPerson")}</div>
96
-
97
- <TextField fullWidth label="Name" id="searchText" data-testid="search-input" name="searchText" type="text" placeholder="Name" value={searchText} onChange={handleChange}
98
- onKeyDown={(e) => {e.stopPropagation()}}
99
- InputProps={{ endAdornment: <Button variant="contained" id="searchButton" data-testid="search-button" onClick={handleSubmit}>{Locale.label("common.search")}</Button> }}
100
- />
101
- <br />
102
- <Table id="smallPeopleTable" size="small">
103
- <TableBody>{getPeople()}</TableBody>
104
- </Table>
105
- </div>
112
+ <Paper elevation={0} sx={{ height: '100%', display: 'flex', flexDirection: 'column' }}>
113
+ <Box sx={{ p: 2, borderBottom: 1, borderColor: 'divider' }}>
114
+ <Stack direction="row" alignItems="center" spacing={2}>
115
+ <IconButton onClick={props.onBack}>
116
+ <ArrowBackIcon />
117
+ </IconButton>
118
+ <Typography variant="h6" component="h2">
119
+ {Locale.label("wrapper.newPrivateMessage", "New Private Message")}
120
+ </Typography>
121
+ </Stack>
122
+ </Box>
123
+
124
+ <Box sx={{ p: 3 }}>
125
+ <Stack spacing={3}>
126
+ <Box>
127
+ <Typography variant="body1" color="textSecondary" gutterBottom>
128
+ {Locale.label("wrapper.searchForPerson", "Search for a person to message")}
129
+ </Typography>
130
+ <TextField
131
+ fullWidth
132
+ placeholder="Search by name..."
133
+ id="searchText"
134
+ data-testid="search-input"
135
+ value={searchText}
136
+ onChange={handleChange}
137
+ onKeyDown={(e) => {
138
+ e.stopPropagation();
139
+ if (e.key === 'Enter') handleSearchSubmit(null);
140
+ }}
141
+ InputProps={{
142
+ startAdornment: (
143
+ <InputAdornment position="start">
144
+ <PersonSearchIcon color="action" />
145
+ </InputAdornment>
146
+ ),
147
+ endAdornment: (
148
+ <InputAdornment position="end">
149
+ <Button
150
+ variant="contained"
151
+ size="small"
152
+ onClick={handleSearchSubmit}
153
+ disabled={!searchText.trim() || isSearching}
154
+ >
155
+ {Locale.label("common.search", "Search")}
156
+ </Button>
157
+ </InputAdornment>
158
+ )
159
+ }}
160
+ sx={{ mt: 1 }}
161
+ />
162
+ </Box>
163
+
164
+ {isSearching && (
165
+ <Box>
166
+ {[...Array(3)].map((_, index) => (
167
+ <Box key={index} sx={{ display: 'flex', alignItems: 'center', mb: 2 }}>
168
+ <Skeleton variant="circular" width={48} height={48} sx={{ mr: 2 }} />
169
+ <Skeleton variant="text" width="60%" height={24} />
170
+ </Box>
171
+ ))}
172
+ </Box>
173
+ )}
174
+
175
+ {!isSearching && searchResults.length > 0 && (
176
+ <Box>
177
+ <Typography variant="subtitle2" color="textSecondary" gutterBottom>
178
+ {searchResults.length} {searchResults.length === 1 ? 'person' : 'people'} found
179
+ </Typography>
180
+ <List sx={{ bgcolor: 'background.paper', borderRadius: 1 }}>
181
+ {searchResults.map((person, index) => (
182
+ <React.Fragment key={person.id}>
183
+ <ListItemButton
184
+ onClick={() => handlePersonSelected(person)}
185
+ sx={{ py: 2 }}
186
+ >
187
+ <ListItemAvatar>
188
+ <PersonAvatar person={person} size="small" />
189
+ </ListItemAvatar>
190
+ <ListItemText
191
+ primary={person.name.display}
192
+ secondary={person.contactInfo?.email || ''}
193
+ />
194
+ </ListItemButton>
195
+ {index < searchResults.length - 1 && <Divider />}
196
+ </React.Fragment>
197
+ ))}
198
+ </List>
199
+ </Box>
200
+ )}
201
+
202
+ {!isSearching && searchText && searchResults.length === 0 && (
203
+ <Box sx={{ textAlign: 'center', py: 4 }}>
204
+ <PersonSearchIcon sx={{ fontSize: 48, color: 'grey.400', mb: 2 }} />
205
+ <Typography variant="h6" color="textSecondary">
206
+ No people found
207
+ </Typography>
208
+ <Typography variant="body2" color="textSecondary">
209
+ Try searching with a different name
210
+ </Typography>
211
+ </Box>
212
+ )}
213
+ </Stack>
214
+ </Box>
215
+ </Paper>
106
216
  );
107
217
  else {
108
218
  return (
109
- <div style={{ paddingLeft: 10, paddingRight: 10 }}>
110
- <span style={{ float: "right" }}>
111
- <SmallButton icon="chevron_left" text="Back" onClick={props.onBack} />
112
- </span>
113
- <b>{Locale.label("wrapper.newPrivateMessage")}</b>
114
- <div>To: {selectedPerson.name.display}</div>
115
- <AddNote context={props.context} conversationId={null} onUpdate={handleNoteAdded} createConversation={createConversation} />
116
- </div>
219
+ <Paper elevation={0} sx={{ height: '100%', display: 'flex', flexDirection: 'column' }}>
220
+ <Box sx={{ p: 2, borderBottom: 1, borderColor: 'divider' }}>
221
+ <Stack direction="row" alignItems="center" spacing={2}>
222
+ <IconButton onClick={props.onBack}>
223
+ <ArrowBackIcon />
224
+ </IconButton>
225
+ <Typography variant="h6" component="h2">
226
+ {Locale.label("wrapper.newPrivateMessage", "New Private Message")}
227
+ </Typography>
228
+ </Stack>
229
+ </Box>
230
+
231
+ <Box sx={{ p: 3 }}>
232
+ <Stack direction="row" spacing={2} alignItems="center" sx={{ mb: 3 }}>
233
+ <PersonAvatar person={selectedPerson} size="medium" />
234
+ <Box>
235
+ <Typography variant="subtitle1" fontWeight="medium">
236
+ {selectedPerson.name.display}
237
+ </Typography>
238
+ {selectedPerson.contactInfo?.email && (
239
+ <Typography variant="body2" color="textSecondary">
240
+ {selectedPerson.contactInfo.email}
241
+ </Typography>
242
+ )}
243
+ </Box>
244
+ </Stack>
245
+ <Divider sx={{ mb: 3 }} />
246
+ <AddNote
247
+ context={props.context}
248
+ conversationId={null}
249
+ onUpdate={handleNoteAdded}
250
+ createConversation={createConversation}
251
+ />
252
+ </Box>
253
+ </Paper>
117
254
  )
118
255
  }
119
256
  }