@plusscommunities/pluss-core-app 6.1.7 → 6.1.8-auth.0

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 (320) hide show
  1. package/dist/module/actions/FollowerActions.js +4 -4
  2. package/dist/module/actions/FollowerActions.js.map +1 -1
  3. package/dist/module/actions/MediaActions.js +1 -1
  4. package/dist/module/actions/MediaActions.js.map +1 -1
  5. package/dist/module/actions/ResidentActions.js +1 -1
  6. package/dist/module/actions/ResidentActions.js.map +1 -1
  7. package/dist/module/actions/UserActions.js +1 -1
  8. package/dist/module/actions/UserActions.js.map +1 -1
  9. package/dist/module/actions/UserSettingsActions.js +1 -1
  10. package/dist/module/actions/UserSettingsActions.js.map +1 -1
  11. package/dist/module/actions/index.js +5 -5
  12. package/dist/module/actions/index.js.map +1 -1
  13. package/dist/module/actions/types.js +16 -16
  14. package/dist/module/actions/types.js.map +1 -1
  15. package/dist/module/apis/analyticsActions.js +5 -5
  16. package/dist/module/apis/analyticsActions.js.map +1 -1
  17. package/dist/module/apis/contactActions.js +6 -6
  18. package/dist/module/apis/contactActions.js.map +1 -1
  19. package/dist/module/apis/eventActions.js +28 -28
  20. package/dist/module/apis/eventActions.js.map +1 -1
  21. package/dist/module/apis/fileActions.js +21 -28
  22. package/dist/module/apis/fileActions.js.map +1 -1
  23. package/dist/module/apis/followerActions.js +8 -8
  24. package/dist/module/apis/followerActions.js.map +1 -1
  25. package/dist/module/apis/index.js +12 -12
  26. package/dist/module/apis/index.js.map +1 -1
  27. package/dist/module/apis/notificationActions.js +17 -17
  28. package/dist/module/apis/notificationActions.js.map +1 -1
  29. package/dist/module/apis/profileActions.js +4 -4
  30. package/dist/module/apis/profileActions.js.map +1 -1
  31. package/dist/module/apis/reactionActions.js +15 -15
  32. package/dist/module/apis/reactionActions.js.map +1 -1
  33. package/dist/module/apis/settingActions.js +6 -6
  34. package/dist/module/apis/settingActions.js.map +1 -1
  35. package/dist/module/apis/stringActions.js +8 -8
  36. package/dist/module/apis/stringActions.js.map +1 -1
  37. package/dist/module/apis/typeActions.js +4 -4
  38. package/dist/module/apis/typeActions.js.map +1 -1
  39. package/dist/module/apis/userActions.js +8 -8
  40. package/dist/module/apis/userActions.js.map +1 -1
  41. package/dist/module/assets/icons/fontawesome/fa-brands-400.ttf +0 -0
  42. package/dist/module/assets/icons/fontawesome/fa-light-300.ttf +0 -0
  43. package/dist/module/assets/icons/fontawesome/fa-regular-400.ttf +0 -0
  44. package/dist/module/assets/icons/fontawesome/fa-solid-900.ttf +0 -0
  45. package/dist/module/assets/icons/fontawesome/fa-thin-100.ttf +0 -0
  46. package/dist/module/assets/icons/fontawesome/fa7-glyphmap.json +4205 -0
  47. package/dist/module/colours.js +26 -29
  48. package/dist/module/colours.js.map +1 -1
  49. package/dist/module/components/AddButton.js +8 -8
  50. package/dist/module/components/AddButton.js.map +1 -1
  51. package/dist/module/components/AddToCalendarButton.js +30 -29
  52. package/dist/module/components/AddToCalendarButton.js.map +1 -1
  53. package/dist/module/components/Attachment.js +10 -9
  54. package/dist/module/components/Attachment.js.map +1 -1
  55. package/dist/module/components/AudienceSelectorLauncher.js +11 -11
  56. package/dist/module/components/AudienceSelectorLauncher.js.map +1 -1
  57. package/dist/module/components/AudienceSelectorPage.js +45 -44
  58. package/dist/module/components/AudienceSelectorPage.js.map +1 -1
  59. package/dist/module/components/AutoOffsetImage.js +13 -13
  60. package/dist/module/components/AutoOffsetImage.js.map +1 -1
  61. package/dist/module/components/BackButton.js +10 -10
  62. package/dist/module/components/BackButton.js.map +1 -1
  63. package/dist/module/components/CalendarPopup.js +21 -21
  64. package/dist/module/components/CalendarPopup.js.map +1 -1
  65. package/dist/module/components/CategoryTabs.js +30 -29
  66. package/dist/module/components/CategoryTabs.js.map +1 -1
  67. package/dist/module/components/CommentReply.js +36 -34
  68. package/dist/module/components/CommentReply.js.map +1 -1
  69. package/dist/module/components/CommentSection.js +74 -74
  70. package/dist/module/components/CommentSection.js.map +1 -1
  71. package/dist/module/components/ConfirmPopup.js +21 -20
  72. package/dist/module/components/ConfirmPopup.js.map +1 -1
  73. package/dist/module/components/ConfirmationPopup.js +11 -11
  74. package/dist/module/components/ConfirmationPopup.js.map +1 -1
  75. package/dist/module/components/DocumentUploader.js +253 -0
  76. package/dist/module/components/DocumentUploader.js.map +1 -0
  77. package/dist/module/components/DropDownItem.js +14 -13
  78. package/dist/module/components/DropDownItem.js.map +1 -1
  79. package/dist/module/components/DropDownMenu.js +5 -5
  80. package/dist/module/components/DropDownMenu.js.map +1 -1
  81. package/dist/module/components/EmptyStateMain.js +10 -9
  82. package/dist/module/components/EmptyStateMain.js.map +1 -1
  83. package/dist/module/components/EmptyStateWidget.js +7 -6
  84. package/dist/module/components/EmptyStateWidget.js.map +1 -1
  85. package/dist/module/components/FontScaleButton.js +5 -4
  86. package/dist/module/components/FontScaleButton.js.map +1 -1
  87. package/dist/module/components/FontScalePopup.js +11 -10
  88. package/dist/module/components/FontScalePopup.js.map +1 -1
  89. package/dist/module/components/Forbidden.js +13 -13
  90. package/dist/module/components/Forbidden.js.map +1 -1
  91. package/dist/module/components/FormCard.js +4 -4
  92. package/dist/module/components/FormCard.js.map +1 -1
  93. package/dist/module/components/FormCardSection.js +20 -18
  94. package/dist/module/components/FormCardSection.js.map +1 -1
  95. package/dist/module/components/FormCardSectionOptionLauncher.js +13 -12
  96. package/dist/module/components/FormCardSectionOptionLauncher.js.map +1 -1
  97. package/dist/module/components/FormattedText.js +18 -16
  98. package/dist/module/components/FormattedText.js.map +1 -1
  99. package/dist/module/components/GenericInput.js +24 -21
  100. package/dist/module/components/GenericInput.js.map +1 -1
  101. package/dist/module/components/GenericInputSection.js +27 -26
  102. package/dist/module/components/GenericInputSection.js.map +1 -1
  103. package/dist/module/components/Header.js +70 -69
  104. package/dist/module/components/Header.js.map +1 -1
  105. package/dist/module/components/Icon.js +109 -0
  106. package/dist/module/components/Icon.js.map +1 -0
  107. package/dist/module/components/ImagePopup.js +237 -77
  108. package/dist/module/components/ImagePopup.js.map +1 -1
  109. package/dist/module/components/ImageUploadProgress.js +10 -9
  110. package/dist/module/components/ImageUploadProgress.js.map +1 -1
  111. package/dist/module/components/ImageUploader.js +22 -13
  112. package/dist/module/components/ImageUploader.js.map +1 -1
  113. package/dist/module/components/InlineButton.js +9 -8
  114. package/dist/module/components/InlineButton.js.map +1 -1
  115. package/dist/module/components/Input.js +28 -26
  116. package/dist/module/components/Input.js.map +1 -1
  117. package/dist/module/components/LoadingCircles.js +20 -20
  118. package/dist/module/components/LoadingCircles.js.map +1 -1
  119. package/dist/module/components/LoadingIndicator.js +11 -11
  120. package/dist/module/components/LoadingIndicator.js.map +1 -1
  121. package/dist/module/components/LoadingStateWidget.js +5 -5
  122. package/dist/module/components/LoadingStateWidget.js.map +1 -1
  123. package/dist/module/components/MediaPlayer.js +32 -32
  124. package/dist/module/components/MediaPlayer.js.map +1 -1
  125. package/dist/module/components/MiddlePopup.js +9 -9
  126. package/dist/module/components/MiddlePopup.js.map +1 -1
  127. package/dist/module/components/PDFPopup.js +36 -36
  128. package/dist/module/components/PDFPopup.js.map +1 -1
  129. package/dist/module/components/PlussChat.js +234 -146
  130. package/dist/module/components/PlussChat.js.map +1 -1
  131. package/dist/module/components/PlussChatMessage.js +75 -38
  132. package/dist/module/components/PlussChatMessage.js.map +1 -1
  133. package/dist/module/components/PlussChatTime.js +18 -17
  134. package/dist/module/components/PlussChatTime.js.map +1 -1
  135. package/dist/module/components/Popup.js +20 -19
  136. package/dist/module/components/Popup.js.map +1 -1
  137. package/dist/module/components/PopupMenu.js +15 -14
  138. package/dist/module/components/PopupMenu.js.map +1 -1
  139. package/dist/module/components/PositionedImage.js +20 -20
  140. package/dist/module/components/PositionedImage.js.map +1 -1
  141. package/dist/module/components/ProfilePic.js +10 -10
  142. package/dist/module/components/ProfilePic.js.map +1 -1
  143. package/dist/module/components/RadioButton.js +10 -9
  144. package/dist/module/components/RadioButton.js.map +1 -1
  145. package/dist/module/components/Reaction.js +18 -17
  146. package/dist/module/components/Reaction.js.map +1 -1
  147. package/dist/module/components/Reactions.js +7 -7
  148. package/dist/module/components/Reactions.js.map +1 -1
  149. package/dist/module/components/SharingTools.js +29 -28
  150. package/dist/module/components/SharingTools.js.map +1 -1
  151. package/dist/module/components/Spinner.js +5 -5
  152. package/dist/module/components/Spinner.js.map +1 -1
  153. package/dist/module/components/StickyFooter.js +6 -6
  154. package/dist/module/components/StickyFooter.js.map +1 -1
  155. package/dist/module/components/Text.js +57 -0
  156. package/dist/module/components/Text.js.map +1 -0
  157. package/dist/module/components/TickIcon.js +6 -6
  158. package/dist/module/components/TickIcon.js.map +1 -1
  159. package/dist/module/components/Toggle.js +10 -9
  160. package/dist/module/components/Toggle.js.map +1 -1
  161. package/dist/module/components/TouchableSearchBar.js +18 -17
  162. package/dist/module/components/TouchableSearchBar.js.map +1 -1
  163. package/dist/module/components/UserListPopup.js +20 -19
  164. package/dist/module/components/UserListPopup.js.map +1 -1
  165. package/dist/module/components/UserListing.js +41 -40
  166. package/dist/module/components/UserListing.js.map +1 -1
  167. package/dist/module/components/VideoPopup.js +20 -20
  168. package/dist/module/components/VideoPopup.js.map +1 -1
  169. package/dist/module/components/WarningPopup.js +21 -20
  170. package/dist/module/components/WarningPopup.js.map +1 -1
  171. package/dist/module/components/expo-image-picker-multiple/ImageBrowser.js +13 -13
  172. package/dist/module/components/expo-image-picker-multiple/ImageBrowser.js.map +1 -1
  173. package/dist/module/components/expo-image-picker-multiple/ImageTile.js +24 -23
  174. package/dist/module/components/expo-image-picker-multiple/ImageTile.js.map +1 -1
  175. package/dist/module/components/index.js +59 -57
  176. package/dist/module/components/index.js.map +1 -1
  177. package/dist/module/components/react-native-expo-image-cropper/ExpoImageManipulator.js +90 -58
  178. package/dist/module/components/react-native-expo-image-cropper/ExpoImageManipulator.js.map +1 -1
  179. package/dist/module/components/react-native-expo-image-cropper/ImageCropOverlay.js +64 -64
  180. package/dist/module/components/react-native-expo-image-cropper/ImageCropOverlay.js.map +1 -1
  181. package/dist/module/config.js +6 -1
  182. package/dist/module/config.js.map +1 -1
  183. package/dist/module/constants.js +3 -3
  184. package/dist/module/constants.js.map +1 -1
  185. package/dist/module/helper.js +83 -82
  186. package/dist/module/helper.js.map +1 -1
  187. package/dist/module/index.js +12 -12
  188. package/dist/module/index.js.map +1 -1
  189. package/dist/module/js/images/detectFaces.js +6 -6
  190. package/dist/module/js/images/detectFaces.js.map +1 -1
  191. package/dist/module/js/images/findLandmarkRange.js +8 -8
  192. package/dist/module/js/images/findLandmarkRange.js.map +1 -1
  193. package/dist/module/js/images/getScaledOffset.js.map +1 -1
  194. package/dist/module/js/site/getSiteLevelFromState.js +2 -2
  195. package/dist/module/js/site/getSiteLevelFromState.js.map +1 -1
  196. package/dist/module/js/site/isTVEnabled.js +2 -2
  197. package/dist/module/js/site/isTVEnabled.js.map +1 -1
  198. package/dist/module/session.js +2 -2
  199. package/dist/module/session.js.map +1 -1
  200. package/dist/module/styles.js +17 -17
  201. package/dist/module/styles.js.map +1 -1
  202. package/dist/module/withNavigationFocus.js +30 -0
  203. package/dist/module/withNavigationFocus.js.map +1 -0
  204. package/package.json +4 -1
  205. package/src/actions/FollowerActions.js +36 -32
  206. package/src/actions/MediaActions.js +25 -20
  207. package/src/actions/ResidentActions.js +26 -21
  208. package/src/actions/UserActions.js +22 -22
  209. package/src/actions/UserSettingsActions.js +11 -11
  210. package/src/actions/index.js +5 -5
  211. package/src/actions/types.js +16 -16
  212. package/src/apis/analyticsActions.js +17 -17
  213. package/src/apis/contactActions.js +20 -20
  214. package/src/apis/eventActions.js +153 -144
  215. package/src/apis/fileActions.js +19 -27
  216. package/src/apis/followerActions.js +29 -29
  217. package/src/apis/index.js +12 -12
  218. package/src/apis/notificationActions.js +44 -44
  219. package/src/apis/profileActions.js +8 -8
  220. package/src/apis/reactionActions.js +81 -73
  221. package/src/apis/settingActions.js +15 -15
  222. package/src/apis/stringActions.js +29 -25
  223. package/src/apis/typeActions.js +10 -10
  224. package/src/apis/userActions.js +93 -93
  225. package/src/assets/icons/fontawesome/fa-brands-400.ttf +0 -0
  226. package/src/assets/icons/fontawesome/fa-light-300.ttf +0 -0
  227. package/src/assets/icons/fontawesome/fa-regular-400.ttf +0 -0
  228. package/src/assets/icons/fontawesome/fa-solid-900.ttf +0 -0
  229. package/src/assets/icons/fontawesome/fa-thin-100.ttf +0 -0
  230. package/src/assets/icons/fontawesome/fa7-glyphmap.json +4205 -0
  231. package/src/colours.js +116 -96
  232. package/src/components/AddButton.js +32 -27
  233. package/src/components/AddToCalendarButton.js +236 -202
  234. package/src/components/Attachment.js +59 -36
  235. package/src/components/AudienceSelectorLauncher.js +52 -48
  236. package/src/components/AudienceSelectorPage.js +353 -311
  237. package/src/components/AutoOffsetImage.js +237 -196
  238. package/src/components/BackButton.js +57 -41
  239. package/src/components/CalendarPopup.js +127 -97
  240. package/src/components/CategoryTabs.js +208 -163
  241. package/src/components/CommentReply.js +363 -309
  242. package/src/components/CommentSection.js +974 -782
  243. package/src/components/ConfirmPopup.js +141 -110
  244. package/src/components/ConfirmationPopup.js +80 -69
  245. package/src/components/DocumentUploader.js +255 -0
  246. package/src/components/DropDownItem.js +70 -60
  247. package/src/components/DropDownMenu.js +31 -27
  248. package/src/components/EmptyStateMain.js +51 -44
  249. package/src/components/EmptyStateWidget.js +47 -38
  250. package/src/components/FontScaleButton.js +29 -25
  251. package/src/components/FontScalePopup.js +67 -56
  252. package/src/components/Forbidden.js +48 -46
  253. package/src/components/FormCard.js +21 -17
  254. package/src/components/FormCardSection.js +284 -233
  255. package/src/components/FormCardSectionOptionLauncher.js +72 -46
  256. package/src/components/FormattedText.js +128 -111
  257. package/src/components/GenericInput.js +168 -136
  258. package/src/components/GenericInputSection.js +209 -161
  259. package/src/components/Header.js +620 -474
  260. package/src/components/Icon.js +119 -0
  261. package/src/components/ImagePopup.js +425 -206
  262. package/src/components/ImageUploadProgress.js +49 -41
  263. package/src/components/ImageUploader.js +23 -13
  264. package/src/components/InlineButton.js +79 -69
  265. package/src/components/Input.js +190 -156
  266. package/src/components/LoadingCircles.js +233 -233
  267. package/src/components/LoadingIndicator.js +87 -76
  268. package/src/components/LoadingStateWidget.js +47 -37
  269. package/src/components/MediaPlayer.js +416 -387
  270. package/src/components/MiddlePopup.js +50 -32
  271. package/src/components/PDFPopup.js +198 -159
  272. package/src/components/PlussChat.js +1271 -986
  273. package/src/components/PlussChatMessage.js +330 -262
  274. package/src/components/PlussChatTime.js +57 -53
  275. package/src/components/Popup.js +138 -116
  276. package/src/components/PopupMenu.js +140 -110
  277. package/src/components/PositionedImage.js +281 -237
  278. package/src/components/ProfilePic.js +122 -113
  279. package/src/components/RadioButton.js +76 -52
  280. package/src/components/Reaction.js +134 -96
  281. package/src/components/Reactions.js +65 -63
  282. package/src/components/SharingTools.js +136 -122
  283. package/src/components/Spinner.js +13 -13
  284. package/src/components/StickyFooter.js +36 -26
  285. package/src/components/Text.js +62 -0
  286. package/src/components/TickIcon.js +20 -20
  287. package/src/components/Toggle.js +74 -73
  288. package/src/components/TouchableSearchBar.js +68 -50
  289. package/src/components/UserListPopup.js +161 -124
  290. package/src/components/UserListing.js +273 -238
  291. package/src/components/VideoPopup.js +110 -96
  292. package/src/components/WarningPopup.js +92 -71
  293. package/src/components/expo-image-picker-multiple/ImageBrowser.js +288 -256
  294. package/src/components/expo-image-picker-multiple/ImageTile.js +108 -84
  295. package/src/components/index.js +59 -57
  296. package/src/components/react-native-expo-image-cropper/ExpoImageManipulator.js +442 -358
  297. package/src/components/react-native-expo-image-cropper/ImageCropOverlay.js +420 -324
  298. package/src/config.js +5 -0
  299. package/src/constants.js +8 -8
  300. package/src/helper.js +469 -438
  301. package/src/index.js +24 -12
  302. package/src/js/images/detectFaces.js +27 -20
  303. package/src/js/images/findLandmarkRange.js +97 -90
  304. package/src/js/images/getScaledOffset.js +80 -75
  305. package/src/js/site/getSiteLevelFromState.js +26 -26
  306. package/src/js/site/isTVEnabled.js +10 -10
  307. package/src/session.js +2 -2
  308. package/src/styles.js +61 -61
  309. package/src/withNavigationFocus.js +28 -0
  310. package/dist/module/components/TextStyle.js +0 -45
  311. package/dist/module/components/TextStyle.js.map +0 -1
  312. package/dist/module/fonts/index.js +0 -2
  313. package/dist/module/fonts/index.js.map +0 -1
  314. package/dist/module/fonts/pluss60-icons.js +0 -5
  315. package/dist/module/fonts/pluss60-icons.js.map +0 -1
  316. package/dist/module/fonts/pluss60-icons.json +0 -1097
  317. package/src/components/TextStyle.js +0 -48
  318. package/src/fonts/index.js +0 -1
  319. package/src/fonts/pluss60-icons.js +0 -6
  320. package/src/fonts/pluss60-icons.json +0 -1097
@@ -1,120 +1,151 @@
1
- import React, { PureComponent } from 'react';
2
- import { Text, View } from 'react-native';
3
- import _ from 'lodash';
4
- import { connect } from 'react-redux';
5
- import { getMainBrandingColourFromState, TEXT_DARK } from '../colours';
6
- import { Spinner } from './Spinner';
7
- import { InlineButton } from './InlineButton';
8
- import { MiddlePopup } from './MiddlePopup';
1
+ import React, { PureComponent } from "react";
2
+ import { View } from "react-native";
3
+ import { Text } from "./Text";
4
+ import _ from "lodash";
5
+ import { connect } from "react-redux";
6
+ import { getMainBrandingColourFromState, TEXT_DARK } from "../colours";
7
+ import { Spinner } from "./Spinner";
8
+ import { InlineButton } from "./InlineButton";
9
+ import { MiddlePopup } from "./MiddlePopup";
9
10
 
10
11
  class ConfirmPopup extends PureComponent {
11
- render() {
12
- return (
13
- <MiddlePopup
14
- visible={this.props.visible}
15
- onClose={this.props.onClose}
16
- style={[styles.popup, this.props.headerContent && { paddingTop: 16 }]}
17
- >
18
- {this.props.headerContent && <View style={{ width: 350, marginBottom: 16 }}>{this.props.headerContent}</View>}
19
- {!_.isEmpty(this.props.text) && (
20
- <Text style={[styles.text, this.props.textAlignLeft && styles.textAlignLeft]}>{this.props.text}</Text>
21
- )}
22
- {!_.isEmpty(this.props.subtext) && (
23
- <Text style={[styles.subtext, this.props.textAlignLeft && styles.textAlignLeft]}>{this.props.subtext}</Text>
24
- )}
25
- {this.props.extraContent && <View style={{ width: 350, marginTop: 16 }}>{this.props.extraContent}</View>}
26
- {this.props.children}
27
- <View style={[styles.buttonsContainer, this.props.verticalButtons && styles.verticalButtons]}>
28
- {this.props.buttonsLoading && (
29
- <View style={styles.loadingContainer}>
30
- <Spinner />
31
- </View>
32
- )}
33
- {!this.props.hideNo && !this.props.buttonsLoading && (
34
- <InlineButton
35
- onPress={this.props.onCancel}
36
- color="#fff"
37
- style={[
38
- styles.button,
39
- styles.noButton,
40
- this.props.verticalButtons && styles.buttonVertical,
41
- { borderColor: this.props.colourBrandingMain },
42
- ]}
43
- textStyle={{ color: this.props.colourBrandingMain }}
44
- large
45
- >
46
- {this.props.noText || 'No'}
47
- </InlineButton>
48
- )}
49
- {!this.props.hideYes && !this.props.buttonsLoading && (
50
- <InlineButton
51
- onPress={this.props.onConfirm}
52
- color={this.props.colourBrandingMain}
53
- style={[styles.button, this.props.verticalButtons && styles.buttonVertical]}
54
- large
55
- >
56
- {this.props.yesText || 'Yes'}
57
- </InlineButton>
58
- )}
59
- </View>
60
- </MiddlePopup>
61
- );
62
- }
12
+ render() {
13
+ return (
14
+ <MiddlePopup
15
+ visible={this.props.visible}
16
+ onClose={this.props.onClose}
17
+ style={[styles.popup, this.props.headerContent && { paddingTop: 16 }]}
18
+ >
19
+ {this.props.headerContent && (
20
+ <View style={{ width: 350, marginBottom: 16 }}>
21
+ {this.props.headerContent}
22
+ </View>
23
+ )}
24
+ {!_.isEmpty(this.props.text) && (
25
+ <Text
26
+ style={[
27
+ styles.text,
28
+ this.props.textAlignLeft && styles.textAlignLeft,
29
+ ]}
30
+ >
31
+ {this.props.text}
32
+ </Text>
33
+ )}
34
+ {!_.isEmpty(this.props.subtext) && (
35
+ <Text
36
+ style={[
37
+ styles.subtext,
38
+ this.props.textAlignLeft && styles.textAlignLeft,
39
+ ]}
40
+ >
41
+ {this.props.subtext}
42
+ </Text>
43
+ )}
44
+ {this.props.extraContent && (
45
+ <View style={{ width: 350, marginTop: 16 }}>
46
+ {this.props.extraContent}
47
+ </View>
48
+ )}
49
+ {this.props.children}
50
+ <View
51
+ style={[
52
+ styles.buttonsContainer,
53
+ this.props.verticalButtons && styles.verticalButtons,
54
+ ]}
55
+ >
56
+ {this.props.buttonsLoading && (
57
+ <View style={styles.loadingContainer}>
58
+ <Spinner />
59
+ </View>
60
+ )}
61
+ {!this.props.hideNo && !this.props.buttonsLoading && (
62
+ <InlineButton
63
+ onPress={this.props.onCancel}
64
+ color="#fff"
65
+ style={[
66
+ styles.button,
67
+ styles.noButton,
68
+ this.props.verticalButtons && styles.buttonVertical,
69
+ { borderColor: this.props.colourBrandingMain },
70
+ ]}
71
+ textStyle={{ color: this.props.colourBrandingMain }}
72
+ large
73
+ >
74
+ {this.props.noText || "No"}
75
+ </InlineButton>
76
+ )}
77
+ {!this.props.hideYes && !this.props.buttonsLoading && (
78
+ <InlineButton
79
+ onPress={this.props.onConfirm}
80
+ color={this.props.colourBrandingMain}
81
+ style={[
82
+ styles.button,
83
+ this.props.verticalButtons && styles.buttonVertical,
84
+ ]}
85
+ large
86
+ >
87
+ {this.props.yesText || "Yes"}
88
+ </InlineButton>
89
+ )}
90
+ </View>
91
+ </MiddlePopup>
92
+ );
93
+ }
63
94
  }
64
95
 
65
96
  const styles = {
66
- popup: {
67
- padding: 24,
68
- margin: 16,
69
- maxWidth: 350,
70
- },
71
- text: {
72
- fontFamily: 'sf-bold',
73
- fontSize: 20,
74
- color: TEXT_DARK,
75
- textAlign: 'center',
76
- },
77
- subtext: {
78
- fontFamily: 'sf-regular',
79
- fontSize: 17,
80
- color: TEXT_DARK,
81
- textAlign: 'center',
82
- },
83
- textAlignLeft: {
84
- textAlign: 'left',
85
- },
86
- buttonsContainer: {
87
- flexDirection: 'row',
88
- marginTop: 24,
89
- },
90
- loadingContainer: {
91
- height: 40,
92
- justifyContent: 'center',
93
- alignItems: 'center',
94
- },
95
- button: {
96
- width: 120,
97
- paddingHorizontal: 2,
98
- },
99
- noButton: {
100
- borderWidth: 1,
101
- marginRight: 16,
102
- },
103
- buttonVertical: {
104
- width: '100%',
105
- marginTop: 16,
106
- marginRight: 0,
107
- paddingHorizontal: 8,
108
- },
109
- verticalButtons: {
110
- flexDirection: 'column-reverse',
111
- },
97
+ popup: {
98
+ padding: 24,
99
+ margin: 16,
100
+ maxWidth: 350,
101
+ },
102
+ text: {
103
+ fontFamily: "sf-bold",
104
+ fontSize: 20,
105
+ color: TEXT_DARK,
106
+ textAlign: "center",
107
+ },
108
+ subtext: {
109
+ fontFamily: "sf-regular",
110
+ fontSize: 17,
111
+ color: TEXT_DARK,
112
+ textAlign: "center",
113
+ },
114
+ textAlignLeft: {
115
+ textAlign: "left",
116
+ },
117
+ buttonsContainer: {
118
+ flexDirection: "row",
119
+ marginTop: 24,
120
+ },
121
+ loadingContainer: {
122
+ height: 40,
123
+ justifyContent: "center",
124
+ alignItems: "center",
125
+ },
126
+ button: {
127
+ width: 120,
128
+ paddingHorizontal: 2,
129
+ },
130
+ noButton: {
131
+ borderWidth: 1,
132
+ marginRight: 16,
133
+ },
134
+ buttonVertical: {
135
+ width: "100%",
136
+ marginTop: 16,
137
+ marginRight: 0,
138
+ paddingHorizontal: 8,
139
+ },
140
+ verticalButtons: {
141
+ flexDirection: "column-reverse",
142
+ },
112
143
  };
113
144
 
114
- const mapStateToProps = state => {
115
- return {
116
- colourBrandingMain: getMainBrandingColourFromState(state),
117
- };
145
+ const mapStateToProps = (state) => {
146
+ return {
147
+ colourBrandingMain: getMainBrandingColourFromState(state),
148
+ };
118
149
  };
119
150
 
120
151
  const confirmPopup = connect(mapStateToProps, {})(ConfirmPopup);
@@ -1,79 +1,90 @@
1
- import React, { PureComponent } from 'react';
2
- import { Text } from 'react-native';
3
- import { connect } from 'react-redux';
4
- import { Pl60Icon } from '../fonts';
5
- import { COLOUR_GREEN, TEXT_DARK, getMainBrandingColourFromState } from '../colours';
6
- import { MiddlePopup } from './MiddlePopup';
7
- import { InlineButton } from './InlineButton';
1
+ import React, { PureComponent } from "react";
2
+ import { Text } from "./Text";
3
+ import { connect } from "react-redux";
4
+ import { FontAwesome } from "./Icon";
5
+ import {
6
+ COLOUR_GREEN,
7
+ TEXT_DARK,
8
+ getMainBrandingColourFromState,
9
+ } from "../colours";
10
+ import { MiddlePopup } from "./MiddlePopup";
11
+ import { InlineButton } from "./InlineButton";
8
12
 
9
13
  class ConfirmationPopup extends PureComponent {
10
- render() {
11
- return (
12
- <MiddlePopup visible={this.props.visible} onClose={this.props.onClose} style={[styles.popup, this.props.style]}>
13
- <Pl60Icon style={styles.icon} name="circleoutlined" />
14
- <Text style={styles.text}>{this.props.confirmText}</Text>
15
- {this.props.onPressAction && (
16
- <InlineButton
17
- onPress={this.props.onPressAction}
18
- color={this.props.colourBrandingMain}
19
- style={[styles.button, this.props.largeButtons && styles.largeButton]}
20
- large={this.props.largeButtons}
21
- >
22
- {this.props.repeatText}
23
- </InlineButton>
24
- )}
25
- <InlineButton
26
- onPress={this.props.onClose}
27
- color="#fff"
28
- style={[
29
- styles.button,
30
- styles.closeButton,
31
- this.props.largeButtons && styles.largeButton,
32
- { borderColor: this.props.colourBrandingMain },
33
- ]}
34
- textStyle={{ color: this.props.colourBrandingMain }}
35
- large={this.props.largeButtons}
36
- >
37
- Close
38
- </InlineButton>
39
- </MiddlePopup>
40
- );
41
- }
14
+ render() {
15
+ return (
16
+ <MiddlePopup
17
+ visible={this.props.visible}
18
+ onClose={this.props.onClose}
19
+ style={[styles.popup, this.props.style]}
20
+ >
21
+ <FontAwesome style={styles.icon} name="check-circle" />
22
+ <Text style={styles.text}>{this.props.confirmText}</Text>
23
+ {this.props.onPressAction && (
24
+ <InlineButton
25
+ onPress={this.props.onPressAction}
26
+ color={this.props.colourBrandingMain}
27
+ style={[
28
+ styles.button,
29
+ this.props.largeButtons && styles.largeButton,
30
+ ]}
31
+ large={this.props.largeButtons}
32
+ >
33
+ {this.props.repeatText}
34
+ </InlineButton>
35
+ )}
36
+ <InlineButton
37
+ onPress={this.props.onClose}
38
+ color="#fff"
39
+ style={[
40
+ styles.button,
41
+ styles.closeButton,
42
+ this.props.largeButtons && styles.largeButton,
43
+ { borderColor: this.props.colourBrandingMain },
44
+ ]}
45
+ textStyle={{ color: this.props.colourBrandingMain }}
46
+ large={this.props.largeButtons}
47
+ >
48
+ Close
49
+ </InlineButton>
50
+ </MiddlePopup>
51
+ );
52
+ }
42
53
  }
43
54
 
44
55
  const styles = {
45
- popup: {
46
- width: 280,
47
- paddingVertical: 40,
48
- },
49
- icon: {
50
- fontSize: 52,
51
- color: COLOUR_GREEN,
52
- },
53
- text: {
54
- fontFamily: 'sf-bold',
55
- fontSize: 24,
56
- lineHeight: 24,
57
- color: TEXT_DARK,
58
- textAlign: 'center',
59
- marginTop: 8,
60
- },
61
- button: {
62
- width: 150,
63
- marginTop: 20,
64
- },
65
- closeButton: {
66
- borderWidth: 1,
67
- },
68
- largeButton: {
69
- width: 250,
70
- },
56
+ popup: {
57
+ width: 280,
58
+ paddingVertical: 40,
59
+ },
60
+ icon: {
61
+ fontSize: 52,
62
+ color: COLOUR_GREEN,
63
+ },
64
+ text: {
65
+ fontFamily: "sf-bold",
66
+ fontSize: 24,
67
+ lineHeight: 24,
68
+ color: TEXT_DARK,
69
+ textAlign: "center",
70
+ marginTop: 8,
71
+ },
72
+ button: {
73
+ width: 150,
74
+ marginTop: 20,
75
+ },
76
+ closeButton: {
77
+ borderWidth: 1,
78
+ },
79
+ largeButton: {
80
+ width: 250,
81
+ },
71
82
  };
72
83
 
73
- const mapStateToProps = state => {
74
- return {
75
- colourBrandingMain: getMainBrandingColourFromState(state),
76
- };
84
+ const mapStateToProps = (state) => {
85
+ return {
86
+ colourBrandingMain: getMainBrandingColourFromState(state),
87
+ };
77
88
  };
78
89
 
79
90
  const confirmationPopup = connect(mapStateToProps, {})(ConfirmationPopup);
@@ -0,0 +1,255 @@
1
+ import React, { Component } from "react";
2
+ import { Text } from "@plusscommunities/pluss-core-app/components";
3
+ import {
4
+ View,
5
+ TouchableOpacity,
6
+ StyleSheet,
7
+ ActivityIndicator,
8
+ } from "react-native";
9
+ import { Icon } from "@rneui/themed";
10
+ import * as DocumentPicker from "expo-document-picker";
11
+ import { connect } from "react-redux";
12
+ import Config from "../config";
13
+ import { fileActions } from "../apis";
14
+ import { getValueOrDefault } from "../helper";
15
+ import { TEXT_DARK, getMainBrandingColourFromState } from "../colours";
16
+
17
+ const DEFAULT_DOCUMENT_NAME = "document";
18
+
19
+ class DocumentUploader extends Component {
20
+ static defaultProps = {
21
+ allowedTypes: ["application/pdf"],
22
+ buttonTitle: "Upload Document",
23
+ buttonStyle: {},
24
+ buttonTextStyle: {},
25
+ onUploadStarted: () => {},
26
+ onUploadSuccess: () => {},
27
+ onUploadFailed: () => {},
28
+ onUploadProgress: null,
29
+ userId: null,
30
+ fileName: null,
31
+ disabled: false,
32
+ };
33
+
34
+ state = {
35
+ isUploading: false,
36
+ uploadProgress: 0,
37
+ };
38
+
39
+ pickDocument = async () => {
40
+ const { allowedTypes, multiple } = this.props;
41
+
42
+ try {
43
+ const result = await DocumentPicker.getDocumentAsync({
44
+ type: allowedTypes,
45
+ copyToCacheDirectory: true,
46
+ multiple: multiple || false,
47
+ });
48
+ // console.log('pickDocument', JSON.stringify(result, null, 2));
49
+
50
+ if (!result.canceled) {
51
+ await this.handleDocumentPicked(result);
52
+ }
53
+ } catch (error) {
54
+ console.log("Document picker error:", error);
55
+ this.props.onUploadFailed(null, error.message);
56
+ }
57
+ };
58
+
59
+ handleDocumentPicked = async (documentResult) => {
60
+ const { assets } = documentResult;
61
+ const { userId } = this.props;
62
+
63
+ try {
64
+ this.setState({ isUploading: true, uploadProgress: 0 });
65
+
66
+ // Process each asset in parallel
67
+ const uploadPromises = assets.map(async (asset) => {
68
+ const { name, uri, mimeType } = asset;
69
+
70
+ let file, fileExt;
71
+ if (name && name.includes(".")) {
72
+ const lastDotIndex = name.lastIndexOf(".");
73
+ file = name.substring(0, lastDotIndex);
74
+ fileExt = name.substring(lastDotIndex + 1);
75
+ } else {
76
+ // Fallback: extract extension from mimeType
77
+ file = name || "document";
78
+ if (mimeType) {
79
+ const mimeTypeParts = mimeType.split("/");
80
+ // Handle specific MIME type mappings
81
+ if (mimeType === "application/pdf") fileExt = "pdf";
82
+ else if (mimeType.startsWith("image/")) fileExt = mimeTypeParts[1];
83
+ else if (mimeType.startsWith("text/")) fileExt = "txt";
84
+ else fileExt = mimeTypeParts[1] || "pdf";
85
+ } else {
86
+ fileExt = "pdf";
87
+ }
88
+ }
89
+
90
+ // Generate a unique filename if not provided
91
+ const fileName = `${getValueOrDefault(this.props.fileName, DEFAULT_DOCUMENT_NAME)}.${fileExt}`;
92
+ const uploadUri = fileActions.getUploadUrl(userId, fileName);
93
+ // console.log('handleDocumentPicked', JSON.stringify({ uploadUri, uri, name, fileName, mimeType, file, fileExt }, null, 2));
94
+
95
+ try {
96
+ // Notify parent component that upload has started for this file
97
+ this.props.onUploadStarted(
98
+ uploadUri,
99
+ uri,
100
+ file,
101
+ fileExt.toUpperCase(),
102
+ );
103
+
104
+ const res = await fileActions.uploadUserMediaWithProgress(
105
+ uri,
106
+ uploadUri,
107
+ (progress) => {
108
+ if (this.props.onUploadProgress)
109
+ this.props.onUploadProgress(progress);
110
+ },
111
+ );
112
+
113
+ const fileUrl = Config.env.baseUploadsUrl + res.key;
114
+ this.props.onUploadSuccess(fileUrl, uploadUri);
115
+ console.log("Upload success", fileUrl);
116
+ return { success: true, url: fileUrl, uploadUri };
117
+ } catch (error) {
118
+ console.error(`Upload failed for ${name}:`, error);
119
+ this.props.onUploadFailed(uploadUri, error.message);
120
+ return { success: false, error, uploadUri };
121
+ }
122
+ });
123
+
124
+ // Wait for all uploads to complete
125
+ const results = await Promise.all(uploadPromises);
126
+ return results;
127
+ } catch (error) {
128
+ console.error("Document upload error:", error);
129
+ return [];
130
+ } finally {
131
+ this.setState({ isUploading: false, uploadProgress: 0 });
132
+ }
133
+ };
134
+
135
+ renderUploadButton = () => {
136
+ const { buttonTitle, buttonStyle, buttonTextStyle, disabled } = this.props;
137
+ const { isUploading } = this.state;
138
+ const mainColor = getMainBrandingColourFromState(this.props);
139
+
140
+ return (
141
+ <TouchableOpacity
142
+ style={[styles.uploadButton, { borderColor: mainColor }, buttonStyle]}
143
+ onPress={this.pickDocument}
144
+ disabled={isUploading || disabled}
145
+ activeOpacity={0.7}
146
+ >
147
+ <View style={styles.buttonContent}>
148
+ {isUploading ? (
149
+ <ActivityIndicator color={mainColor} />
150
+ ) : (
151
+ <Icon
152
+ name="attachment"
153
+ type="entypo"
154
+ color={mainColor}
155
+ size={18}
156
+ style={styles.icon}
157
+ />
158
+ )}
159
+ <Text
160
+ style={[styles.buttonText, { color: mainColor }, buttonTextStyle]}
161
+ >
162
+ {buttonTitle}
163
+ </Text>
164
+ </View>
165
+ </TouchableOpacity>
166
+ );
167
+ };
168
+
169
+ renderProgress = () => {
170
+ const { uploadProgress } = this.state;
171
+ if (uploadProgress <= 0 || uploadProgress >= 1) return null;
172
+
173
+ return (
174
+ <View style={styles.progressContainer}>
175
+ <View style={styles.progressBar}>
176
+ <View
177
+ style={[styles.progressFill, { width: `${uploadProgress * 100}%` }]}
178
+ />
179
+ </View>
180
+ <Text style={styles.progressText}>
181
+ {Math.round(uploadProgress * 100)}%
182
+ </Text>
183
+ </View>
184
+ );
185
+ };
186
+
187
+ render() {
188
+ return (
189
+ <View style={styles.container}>
190
+ {this.renderUploadButton()}
191
+ {this.renderProgress()}
192
+ </View>
193
+ );
194
+ }
195
+ }
196
+
197
+ const styles = StyleSheet.create({
198
+ container: {
199
+ marginVertical: 10,
200
+ },
201
+ uploadButton: {
202
+ flexDirection: "row",
203
+ alignItems: "center",
204
+ justifyContent: "center",
205
+ paddingVertical: 8,
206
+ paddingHorizontal: 16,
207
+ borderRadius: 6,
208
+ backgroundColor: "#fff",
209
+ borderWidth: 1,
210
+ borderColor: "#007AFF",
211
+ },
212
+ buttonContent: {
213
+ flexDirection: "row",
214
+ alignItems: "center",
215
+ },
216
+ buttonText: {
217
+ color: "#fff",
218
+ fontSize: 16,
219
+ fontWeight: "500",
220
+ marginLeft: 8,
221
+ },
222
+ icon: {
223
+ marginRight: 8,
224
+ },
225
+ progressContainer: {
226
+ marginTop: 8,
227
+ alignItems: "center",
228
+ },
229
+ progressBar: {
230
+ height: 4,
231
+ width: "100%",
232
+ backgroundColor: "#E0E0E0",
233
+ borderRadius: 2,
234
+ overflow: "hidden",
235
+ },
236
+ progressFill: {
237
+ height: "100%",
238
+ backgroundColor: "#4CAF50",
239
+ },
240
+ progressText: {
241
+ marginTop: 4,
242
+ fontSize: 12,
243
+ color: TEXT_DARK,
244
+ },
245
+ });
246
+
247
+ const mapStateToProps = (state) => {
248
+ const { user } = state;
249
+ return {
250
+ user,
251
+ colourBrandingMain: getMainBrandingColourFromState(state),
252
+ };
253
+ };
254
+
255
+ export default connect(mapStateToProps)(DocumentUploader);