@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
@@ -1,18 +1,17 @@
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, LoginUserChurchInterface, UserContextInterface, CommonEnvironmentHelper } from "@churchapps/helpers";
6
5
  import { Avatar, Menu, Typography, Icon, Button, Box, Badge, Modal, Dialog, DialogContent, DialogTitle } from "@mui/material";
7
6
  import { NavItem, AppList } from ".";
8
- import { LoginUserChurchInterface, UserContextInterface } from "@churchapps/helpers";
9
7
  import { ChurchList } from "./ChurchList";
10
- import { CommonEnvironmentHelper } from "../../helpers/CommonEnvironmentHelper";
11
8
  import { TabPanel } from "../TabPanel";
12
9
  import { Locale } from "../../helpers";
13
10
  import { PrivateMessages } from "./PrivateMessages";
14
11
  import { Notifications } from "./Notifications";
15
12
  import { useCookies, CookiesProvider } from "react-cookie";
13
+ import { NotificationService } from "../../helpers/NotificationService";
14
+ import { SocketHelper } from "../../helpers";
16
15
 
17
16
 
18
17
  interface Props {
@@ -27,15 +26,66 @@ interface Props {
27
26
  onNavigate: (url: string) => void;
28
27
  }
29
28
 
30
- const UserMenuContent: React.FC<Props> = (props) => {
29
+ // Create a persistent store for modal state that survives component re-renders
30
+ const modalStateStore = {
31
+ showPM: false,
32
+ showNotifications: false,
33
+ listeners: new Set<() => void>(),
34
+
35
+ setShowPM(value: boolean) {
36
+ this.showPM = value;
37
+ this.listeners.forEach((listener: () => void) => listener());
38
+ },
39
+
40
+ setShowNotifications(value: boolean) {
41
+ this.showNotifications = value;
42
+ this.listeners.forEach((listener: () => void) => listener());
43
+ },
44
+
45
+ subscribe(listener: () => void) {
46
+ this.listeners.add(listener);
47
+ return () => this.listeners.delete(listener);
48
+ }
49
+ };
50
+
51
+ const UserMenuContent: React.FC<Props> = React.memo((props) => {
31
52
  const userName = props.userName;
32
53
  const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
33
- const [showPM, setShowPM] = React.useState(false);
34
- const [showNotifications, setShowNotifications] = React.useState(false);
35
- const [refreshKey, setRefreshKey] = React.useState(0);
54
+ const [, forceUpdate] = React.useReducer(x => x + 1, 0);
55
+ const [refreshKey, setRefreshKey] = React.useState(() => Math.random());
36
56
  const [, , removeCookie] = useCookies(["lastChurchId"]);
57
+ const [directNotificationCounts, setDirectNotificationCounts] = React.useState(() => props.notificationCounts || { notificationCount: 0, pmCount: 0 });
37
58
  const open = Boolean(anchorEl);
38
59
 
60
+ // Subscribe to modal state changes
61
+ React.useEffect(() => {
62
+ return modalStateStore.subscribe(forceUpdate);
63
+ }, [forceUpdate]);
64
+
65
+ // Subscribe directly to NotificationService to update badge counts without re-renders
66
+ React.useEffect(() => {
67
+ const notificationService = NotificationService.getInstance();
68
+ const unsubscribe = notificationService.subscribe((newCounts) => {
69
+ setDirectNotificationCounts(newCounts);
70
+ });
71
+
72
+ // Initialize with current counts
73
+ if (notificationService.isReady()) {
74
+ setDirectNotificationCounts(notificationService.getCounts());
75
+ }
76
+
77
+ return unsubscribe;
78
+ }, []);
79
+
80
+ const showPM = modalStateStore.showPM;
81
+ const showNotifications = modalStateStore.showNotifications;
82
+
83
+ // Create a stable callback for onUpdate that doesn't depend on props
84
+ const stableOnUpdate = React.useCallback(() => {
85
+ // Use NotificationService directly to avoid dependency on props.loadCounts
86
+ NotificationService.getInstance().refresh();
87
+ }, []);
88
+
39
89
 
40
90
  const handleClick = (e: React.MouseEvent<HTMLElement>) => {
41
91
  e.preventDefault();
@@ -57,17 +107,25 @@ const UserMenuContent: React.FC<Props> = (props) => {
57
107
  const churchId = UserHelper.currentUserChurch.church.id;
58
108
  let result: React.ReactElement[] = [];
59
109
 
110
+ // Helper function to get label with fallback
111
+ const getLabel = (key: string, fallback: string) => {
112
+ const label = Locale.label(key);
113
+ return label && label !== key ? label : fallback;
114
+ };
60
115
 
61
- result.push(<NavItem onClick={() => {setShowPM(true)}} label={Locale.label("wrapper.messages")} icon="mail" key="/messages" onNavigate={props.onNavigate} badgeCount={props.notificationCounts.pmCount} />);
116
+ result.push(<NavItem onClick={() => {modalStateStore.setShowPM(true)}} label={getLabel("wrapper.messages", "Messages")} icon="mail" key="/messages" onNavigate={props.onNavigate} badgeCount={directNotificationCounts.pmCount} />);
62
117
 
63
- result.push(<NavItem onClick={() => {setShowNotifications(true)}} label={Locale.label("wrapper.notifications")} icon="notifications" key="/notifications" onNavigate={props.onNavigate} badgeCount={props.notificationCounts.notificationCount} />);
118
+ result.push(<NavItem onClick={() => {modalStateStore.setShowNotifications(true)}} label={getLabel("wrapper.notifications", "Notifications")} icon="notifications" key="/notifications" onNavigate={props.onNavigate} badgeCount={directNotificationCounts.notificationCount} />);
64
119
 
65
- if (props.appName === "CHUMS") result.push(<NavItem url={"/profile"} key="/profile" label={Locale.label("wrapper.profile")} icon="person" onNavigate={props.onNavigate} />);
66
- else result.push(<NavItem url={`${CommonEnvironmentHelper.ChumsRoot}/login?jwt=${jwt}&churchId=${churchId}&returnUrl=/profile`} key="/profile" label={Locale.label("wrapper.profile")} icon="person" external={true} onNavigate={props.onNavigate} />);
67
- result.push(<NavItem url="/logout" label={Locale.label("wrapper.logout")} icon="logout" key="/logout" onNavigate={props.onNavigate} />);
68
- result.push(<div style={{borderTop:"1px solid #CCC", paddingTop:2, paddingBottom:2}}></div>)
69
- result.push(<NavItem label="Switch App" key={Locale.label("wrapper.switchApp")} icon="apps" onClick={() => { setTabIndex(1); }} />);
70
- result.push(<NavItem label={Locale.label("wrapper.switchChurch")} key="Switch Church" icon="church" onClick={handleSwitchChurch} />);
120
+ if (props.appName === "CHUMS") result.push(<NavItem url={"/profile"} key="/profile" label={getLabel("wrapper.profile", "Profile")} icon="person" onNavigate={props.onNavigate} />);
121
+ else result.push(<NavItem url={`${CommonEnvironmentHelper.ChumsRoot}/login?jwt=${jwt}&churchId=${churchId}&returnUrl=/profile`} key="/profile" label={getLabel("wrapper.profile", "Profile")} icon="person" external={true} onNavigate={props.onNavigate} />);
122
+ // Create logout URL with current page as return URL
123
+ const currentPath = typeof window !== 'undefined' ? window.location.pathname + window.location.search : '/';
124
+ const logoutUrl = `/login?action=logout&returnUrl=${encodeURIComponent(currentPath)}`;
125
+ result.push(<NavItem url={logoutUrl} label={getLabel("wrapper.logout", "Logout")} icon="logout" key="/logout" onNavigate={props.onNavigate} />);
126
+ result.push(<div key="divider" style={{borderTop:"1px solid #CCC", paddingTop:2, paddingBottom:2}}></div>)
127
+ result.push(<NavItem label={getLabel("wrapper.switchApp", "Switch App")} key="Switch App" icon="apps" onClick={() => { setTabIndex(1); }} />);
128
+ result.push(<NavItem label={getLabel("wrapper.switchChurch", "Switch Church")} key="Switch Church" icon="church" onClick={handleSwitchChurch} />);
71
129
  return result;
72
130
  }
73
131
 
@@ -88,7 +146,7 @@ const UserMenuContent: React.FC<Props> = (props) => {
88
146
  };
89
147
 
90
148
  const handleItemClick = (e: React.MouseEvent<HTMLDivElement>) => {
91
- console.log(e);
149
+ // Handle menu item clicks if needed
92
150
  }
93
151
 
94
152
  const [tabIndex, setTabIndex] = React.useState(0);
@@ -113,28 +171,118 @@ const UserMenuContent: React.FC<Props> = (props) => {
113
171
  );
114
172
 
115
173
  const getModals = () => {
116
- if (showPM) return (
117
- <Dialog open onClose={() => setShowPM(false)} maxWidth="md" fullWidth>
118
- <DialogTitle>{Locale.label("wrapper.messages")}</DialogTitle>
119
- <DialogContent>
120
- <PrivateMessages context={props.context} refreshKey={refreshKey} onUpdate={props.loadCounts} />
121
- </DialogContent>
122
- </Dialog>);
123
- else if (showNotifications) return (<Dialog open onClose={() => setShowNotifications(false)} maxWidth="md" fullWidth>
124
- <DialogTitle>{Locale.label("wrapper.notifications")}</DialogTitle>
125
- <DialogContent>
126
- <Notifications context={props.context} appName={props.appName} onUpdate={props.loadCounts} onNavigate={props.onNavigate} />
127
- </DialogContent>
128
- </Dialog>);
129
- else return <></>;
174
+ // Helper function to get label with fallback
175
+ const getLabel = (key: string, fallback: string) => {
176
+ const label = Locale.label(key);
177
+ return label && label !== key ? label : fallback;
178
+ };
179
+
180
+ return (
181
+ <>
182
+ <Dialog
183
+ open={showPM}
184
+ onClose={() => {
185
+ modalStateStore.setShowPM(false);
186
+ }}
187
+ maxWidth="md"
188
+ fullWidth
189
+ PaperProps={{
190
+ sx: {
191
+ height: '80vh',
192
+ maxHeight: '700px',
193
+ display: 'flex',
194
+ flexDirection: 'column'
195
+ }
196
+ }}
197
+ >
198
+ <DialogTitle>{getLabel("wrapper.messages", "Messages")}</DialogTitle>
199
+ <DialogContent
200
+ sx={{
201
+ flex: 1,
202
+ display: 'flex',
203
+ flexDirection: 'column',
204
+ p: 0,
205
+ overflow: 'hidden',
206
+ minHeight: 0
207
+ }}
208
+ >
209
+ <PrivateMessages context={props.context} refreshKey={currentRefreshKey} onUpdate={stableOnUpdate} />
210
+ </DialogContent>
211
+ </Dialog>
212
+
213
+ <Dialog
214
+ open={showNotifications}
215
+ onClose={() => {
216
+ modalStateStore.setShowNotifications(false);
217
+ }}
218
+ maxWidth="md"
219
+ fullWidth
220
+ >
221
+ <DialogTitle>{getLabel("wrapper.notifications", "Notifications")}</DialogTitle>
222
+ <DialogContent>
223
+ <Notifications context={props.context} appName={props.appName} onUpdate={props.loadCounts} onNavigate={props.onNavigate} />
224
+ </DialogContent>
225
+ </Dialog>
226
+ </>
227
+ );
130
228
  }
131
229
 
132
- const totalNotifcations = props.notificationCounts.notificationCount + props.notificationCounts.pmCount;
230
+ const totalNotifcations = directNotificationCounts.notificationCount + directNotificationCounts.pmCount;
133
231
 
232
+ // Use a ref to track if we should update refresh key
233
+ const stableRefreshKeyRef = React.useRef(refreshKey);
234
+
235
+ // Set up WebSocket handlers to update refreshKey when messages arrive
134
236
  React.useEffect(() => {
135
- console.log("THE COUNTS CHANGED")
136
- setRefreshKey(Math.random());
137
- }, [props.notificationCounts]);
237
+ if (!props.context?.person?.id) return;
238
+
239
+ const handleMessageUpdate = (data: any) => {
240
+ // Only update refreshKey if a modal is open to trigger child updates
241
+ if (modalStateStore.showPM || modalStateStore.showNotifications) {
242
+ const newKey = Math.random();
243
+ setRefreshKey(newKey);
244
+ stableRefreshKeyRef.current = newKey;
245
+ }
246
+ };
247
+
248
+ const handlePrivateMessage = (data: any) => {
249
+ // Only update refreshKey if PM modal is open
250
+ if (modalStateStore.showPM) {
251
+ const newKey = Math.random();
252
+ setRefreshKey(newKey);
253
+ stableRefreshKeyRef.current = newKey;
254
+ }
255
+ };
256
+
257
+ const handleNotification = (data: any) => {
258
+ // Update refreshKey if any modal is open to trigger child updates
259
+ if (modalStateStore.showPM || modalStateStore.showNotifications) {
260
+ const newKey = Math.random();
261
+ setRefreshKey(newKey);
262
+ stableRefreshKeyRef.current = newKey;
263
+ }
264
+ };
265
+
266
+ // Register WebSocket handlers
267
+ const messageHandlerId = `UserMenu-MessageUpdate-${props.context.person.id}`;
268
+ const privateMessageHandlerId = `UserMenu-PrivateMessage-${props.context.person.id}`;
269
+ const notificationHandlerId = `UserMenu-Notification-${props.context.person.id}`;
270
+
271
+ SocketHelper.addHandler("message", messageHandlerId, handleMessageUpdate);
272
+ SocketHelper.addHandler("privateMessage", privateMessageHandlerId, handlePrivateMessage);
273
+ SocketHelper.addHandler("notification", notificationHandlerId, handleNotification);
274
+
275
+ // Cleanup
276
+ return () => {
277
+ SocketHelper.removeHandler(messageHandlerId);
278
+ SocketHelper.removeHandler(privateMessageHandlerId);
279
+ SocketHelper.removeHandler(notificationHandlerId);
280
+ };
281
+ }, [props.context?.person?.id]); // Removed showPM, showNotifications dependencies
282
+
283
+
284
+ // Use current refresh key
285
+ const currentRefreshKey = refreshKey;
138
286
 
139
287
  return (
140
288
  <>
@@ -150,12 +298,44 @@ const UserMenuContent: React.FC<Props> = (props) => {
150
298
  {getModals()}
151
299
  </>
152
300
  );
153
- };
301
+ });
154
302
 
155
- export const UserMenu: React.FC<Props> = (props) => {
303
+ export const UserMenu: React.FC<Props> = React.memo((props) => {
156
304
  return (
157
305
  <CookiesProvider defaultSetOptions={{ path: '/' }}>
158
306
  <UserMenuContent {...props} />
159
307
  </CookiesProvider>
160
308
  );
161
- };
309
+ }, (prevProps, nextProps) => {
310
+ // Only re-render if essential props change, ignore notification count changes completely
311
+ if (prevProps.userName !== nextProps.userName) {
312
+ return false;
313
+ }
314
+
315
+ if (prevProps.profilePicture !== nextProps.profilePicture) {
316
+ return false;
317
+ }
318
+
319
+ if (prevProps.appName !== nextProps.appName) {
320
+ return false;
321
+ }
322
+
323
+ // Check if context has actually changed (deep comparison of relevant parts)
324
+ if (prevProps.context?.person?.id !== nextProps.context?.person?.id ||
325
+ prevProps.context?.userChurch?.church?.id !== nextProps.context?.userChurch?.church?.id) {
326
+ return false;
327
+ }
328
+
329
+ // Check if userChurches array changed
330
+ if (prevProps.userChurches?.length !== nextProps.userChurches?.length) {
331
+ return false;
332
+ }
333
+
334
+ // Check if loadCounts function reference changed (important for functionality)
335
+ if (prevProps.loadCounts !== nextProps.loadCounts) {
336
+ return false;
337
+ }
338
+
339
+ // Ignore both notificationCounts and onNavigate changes as they don't affect the component
340
+ return true; // Skip re-render
341
+ });
@@ -1,7 +1,8 @@
1
1
  export { NavItem } from "./NavItem";
2
2
  export { AppList } from "./AppList";
3
- export { SiteWrapper } from "./SiteWrapper";
4
3
  export { ChurchList } from "./ChurchList";
5
4
  export { UserMenu } from "./UserMenu";
6
- export {NewPrivateMessage} from "./NewPrivateMessage";
5
+ export { NewPrivateMessage } from "./NewPrivateMessage";
6
+ export { PrivateMessages } from "./PrivateMessages";
7
7
  export { PrivateMessageDetails } from "./PrivateMessageDetails";
8
+ export { Notifications } from "./Notifications";
@@ -1,6 +1,5 @@
1
1
  import ReactGA from "react-ga4";
2
- import { CommonEnvironmentHelper } from "./CommonEnvironmentHelper";
3
- import { UserHelper } from "./UserHelper";
2
+ import { CommonEnvironmentHelper, UserHelper } from "@churchapps/helpers";
4
3
 
5
4
  export class AnalyticsHelper {
6
5
 
@@ -17,7 +17,6 @@ export class ArrayHelper {
17
17
  const valB = b[propertyName];
18
18
  if (valA < valB) return descending ? 1 : -1;
19
19
  else return descending ? -1 : 1;
20
- //console.log(valA, valB, valA < valB, )
21
20
  });
22
21
  }
23
22
 
@@ -1,5 +1,5 @@
1
1
  import { ErrorLogInterface, ErrorAppDataInterface } from "@churchapps/helpers";
2
- import { ApiHelper } from "./ApiHelper";
2
+ import { ApiHelper } from "@churchapps/helpers";
3
3
 
4
4
 
5
5
  export class ErrorHelper {
@@ -21,7 +21,6 @@ export class EventHelper {
21
21
  static getFullRRule = (event:EventInterface) => {
22
22
  let rrule = RRule.fromString(event.recurrenceRule);
23
23
  rrule.options.dtstart = new Date(event.start);
24
- console.log("START", rrule.options.dtstart, event.start, rrule)
25
24
  return rrule;
26
25
  }
27
26
 
@@ -30,7 +29,6 @@ export class EventHelper {
30
29
  if (events[i].exceptionDates?.length>0)
31
30
  {
32
31
  const parsedDates = events[i].exceptionDates.map(d=>new Date(d).toISOString());
33
- //console.log("Compare", events[i].start.toISOString(), parsedDates, parsedDates.indexOf(events[i].start.toISOString()));
34
32
  if (parsedDates.indexOf(events[i].start.toISOString())>-1) events.splice(i,1);
35
33
  }
36
34
  }
@@ -39,7 +37,6 @@ export class EventHelper {
39
37
  static getPartialRRuleString = (options:ParsedOptions) => {
40
38
  const parts = new RRule(options).toString().split("RRULE:");
41
39
  const result = parts.length===2 ? parts[1] : "";
42
- console.log("getPartialRRuleString", options, new RRule(options).toString(), result);
43
40
  return result;
44
41
  }
45
42
 
@@ -66,7 +66,7 @@ export class Locale {
66
66
  .init({
67
67
  resources,
68
68
  fallbackLng: "en",
69
- debug: process.env.NODE_ENV === "development",
69
+ debug: false,
70
70
  interpolation: {
71
71
  escapeValue: false,
72
72
  },
@@ -103,7 +103,12 @@ export class Locale {
103
103
  }
104
104
 
105
105
  // Keep the old method for backward compatibility
106
- static label(key: string): string {
107
- return this.t(key);
106
+ static label(key: string, fallback?: string): string {
107
+ const translation = this.t(key);
108
+ // If translation equals the key, it means no translation was found
109
+ if (translation === key && fallback) {
110
+ return fallback;
111
+ }
112
+ return translation;
108
113
  }
109
114
  }
@@ -0,0 +1,211 @@
1
+ import { SocketHelper } from "./SocketHelper";
2
+ import { ApiHelper, UserContextInterface } from "@churchapps/helpers";
3
+
4
+ export interface NotificationCounts {
5
+ notificationCount: number;
6
+ pmCount: number;
7
+ }
8
+
9
+ export class NotificationService {
10
+ private static instance: NotificationService;
11
+ private counts: NotificationCounts = { notificationCount: 0, pmCount: 0 };
12
+ private listeners: Array<(counts: NotificationCounts) => void> = [];
13
+ private isInitialized: boolean = false;
14
+ private currentPersonId: string | null = null;
15
+ private loadTimeout: any | null = null;
16
+
17
+ private constructor() {}
18
+
19
+ static getInstance(): NotificationService {
20
+ if (!NotificationService.instance) {
21
+ NotificationService.instance = new NotificationService();
22
+ }
23
+ return NotificationService.instance;
24
+ }
25
+
26
+ /**
27
+ * Initialize the notification service with user context
28
+ */
29
+ async initialize(context: UserContextInterface): Promise<void> {
30
+ if (this.isInitialized) return;
31
+
32
+ try {
33
+ // Store current person ID for conversation counting
34
+ this.currentPersonId = context?.person?.id || null;
35
+
36
+ // Initialize WebSocket connection
37
+ await SocketHelper.init();
38
+
39
+ // Set person/church context for websocket
40
+ if (context?.person?.id && context?.userChurch?.church?.id) {
41
+ SocketHelper.setPersonChurch({
42
+ personId: context.person.id,
43
+ churchId: context.userChurch.church.id
44
+ });
45
+ }
46
+
47
+ // Register handlers for notification updates
48
+ this.registerWebSocketHandlers();
49
+
50
+ // Load initial notification counts
51
+ await this.loadNotificationCounts();
52
+
53
+ this.isInitialized = true;
54
+
55
+ } catch (error) {
56
+ console.error("❌ Failed to initialize NotificationService:", error);
57
+ throw error;
58
+ }
59
+ }
60
+
61
+ /**
62
+ * Register websocket handlers for real-time notification updates
63
+ */
64
+ private registerWebSocketHandlers(): void {
65
+ // Handler for new private messages
66
+ SocketHelper.addHandler("privateMessage", "NotificationService-PM", (data: any) => {
67
+ console.log('🔔 NotificationService: New private message received, updating counts');
68
+ this.debouncedLoadNotificationCounts();
69
+ });
70
+
71
+ // Handler for general notifications
72
+ SocketHelper.addHandler("notification", "NotificationService-Notification", (data: any) => {
73
+ console.log('🔔 NotificationService: New notification received, updating counts');
74
+ this.debouncedLoadNotificationCounts();
75
+ });
76
+
77
+ // Handler for message updates that could affect notification counts
78
+ SocketHelper.addHandler("message", "NotificationService-MessageUpdate", (data: any) => {
79
+ // Only update counts if the message update involves the current person
80
+ if (data?.message?.personId === this.currentPersonId ||
81
+ data?.notifyPersonId === this.currentPersonId) {
82
+ console.log('🔔 NotificationService: Message update affecting current user, updating counts');
83
+ this.debouncedLoadNotificationCounts();
84
+ }
85
+ });
86
+
87
+ // Handler for reconnect events
88
+ SocketHelper.addHandler("reconnect", "NotificationService-Reconnect", (data: any) => {
89
+ console.log('🔔 NotificationService: WebSocket reconnected, refreshing counts');
90
+ this.loadNotificationCounts(); // Don't debounce reconnect - need immediate update
91
+ });
92
+ }
93
+
94
+ /**
95
+ * Load notification counts from the API with debouncing
96
+ */
97
+ private debouncedLoadNotificationCounts(): void {
98
+ if (this.loadTimeout) {
99
+ clearTimeout(this.loadTimeout);
100
+ }
101
+
102
+ this.loadTimeout = setTimeout(() => {
103
+ this.loadNotificationCounts();
104
+ }, 300); // 300ms debounce
105
+ }
106
+
107
+ /**
108
+ * Load notification counts from the API
109
+ */
110
+ async loadNotificationCounts(): Promise<void> {
111
+ try {
112
+ // Use the unreadCount endpoint which returns both notification and PM counts
113
+ const counts = await ApiHelper.get("/notifications/unreadCount", "MessagingApi");
114
+
115
+ const newCounts = {
116
+ notificationCount: counts?.notificationCount || 0,
117
+ pmCount: counts?.pmCount || 0
118
+ };
119
+
120
+ // Update counts and notify listeners
121
+ this.updateCounts(newCounts);
122
+
123
+ } catch (error) {
124
+ console.error("❌ Failed to load notification counts:", error);
125
+ // Don't throw - just log the error and keep existing counts
126
+ }
127
+ }
128
+
129
+ /**
130
+ * Update counts and notify all listeners
131
+ */
132
+ private updateCounts(newCounts: NotificationCounts): void {
133
+ const countsChanged =
134
+ this.counts.notificationCount !== newCounts.notificationCount ||
135
+ this.counts.pmCount !== newCounts.pmCount;
136
+
137
+ if (countsChanged) {
138
+ this.counts = { ...newCounts };
139
+
140
+ // Notify all listeners
141
+ this.listeners.forEach(listener => {
142
+ try {
143
+ listener(this.counts);
144
+ } catch (error) {
145
+ console.error("❌ Error in notification listener:", error);
146
+ }
147
+ });
148
+ }
149
+ }
150
+
151
+ /**
152
+ * Subscribe to notification count changes
153
+ */
154
+ subscribe(listener: (counts: NotificationCounts) => void): () => void {
155
+ this.listeners.push(listener);
156
+
157
+ // Immediately call with current counts
158
+ listener(this.counts);
159
+
160
+ // Return unsubscribe function
161
+ return () => {
162
+ this.listeners = this.listeners.filter(l => l !== listener);
163
+ };
164
+ }
165
+
166
+ /**
167
+ * Get current notification counts
168
+ */
169
+ getCounts(): NotificationCounts {
170
+ return { ...this.counts };
171
+ }
172
+
173
+ /**
174
+ * Manually refresh notification counts
175
+ */
176
+ async refresh(): Promise<void> {
177
+ await this.loadNotificationCounts();
178
+ }
179
+
180
+ /**
181
+ * Cleanup the service
182
+ */
183
+ cleanup(): void {
184
+ // Clear any pending timeout
185
+ if (this.loadTimeout) {
186
+ clearTimeout(this.loadTimeout);
187
+ this.loadTimeout = null;
188
+ }
189
+
190
+ // Remove websocket handlers
191
+ SocketHelper.removeHandler("NotificationService-PM");
192
+ SocketHelper.removeHandler("NotificationService-Notification");
193
+ SocketHelper.removeHandler("NotificationService-MessageUpdate");
194
+ SocketHelper.removeHandler("NotificationService-Reconnect");
195
+
196
+ // Clear listeners
197
+ this.listeners = [];
198
+
199
+ // Reset state
200
+ this.counts = { notificationCount: 0, pmCount: 0 };
201
+ this.currentPersonId = null;
202
+ this.isInitialized = false;
203
+ }
204
+
205
+ /**
206
+ * Check if service is initialized
207
+ */
208
+ isReady(): boolean {
209
+ return this.isInitialized && SocketHelper.isConnected();
210
+ }
211
+ }
@@ -1,5 +1,4 @@
1
- import { PersonInterface, ContactInfoInterface } from "@churchapps/helpers";
2
- import { CommonEnvironmentHelper } from "./CommonEnvironmentHelper";
1
+ import { PersonInterface, ContactInfoInterface, CommonEnvironmentHelper } from "@churchapps/helpers";
3
2
  import { Locale } from "./Locale";
4
3
 
5
4
  export class PersonHelper {