@plusscommunities/pluss-core-app 4.0.4-auth.0 → 6.0.0-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 (195) hide show
  1. package/dist/module/actions/FollowerActions.js +34 -0
  2. package/dist/module/actions/FollowerActions.js.map +1 -0
  3. package/dist/module/actions/MediaActions.js +29 -0
  4. package/dist/module/actions/MediaActions.js.map +1 -0
  5. package/dist/module/actions/ResidentActions.js +26 -0
  6. package/dist/module/actions/ResidentActions.js.map +1 -0
  7. package/dist/module/actions/UserActions.js +223 -0
  8. package/dist/module/actions/UserActions.js.map +1 -0
  9. package/dist/module/actions/UserSettingsActions.js +14 -0
  10. package/dist/module/actions/UserSettingsActions.js.map +1 -0
  11. package/dist/module/actions/index.js +6 -0
  12. package/dist/module/actions/index.js.map +1 -0
  13. package/dist/module/actions/types.js +17 -0
  14. package/dist/module/actions/types.js.map +1 -0
  15. package/dist/module/apis/analyticsActions.js +20 -0
  16. package/dist/module/apis/analyticsActions.js.map +1 -0
  17. package/dist/module/apis/contactActions.js +27 -0
  18. package/dist/module/apis/contactActions.js.map +1 -0
  19. package/dist/module/apis/eventActions.js +161 -0
  20. package/dist/module/apis/eventActions.js.map +1 -0
  21. package/dist/module/apis/fileActions.js +86 -0
  22. package/dist/module/apis/fileActions.js.map +1 -0
  23. package/dist/module/apis/followerActions.js +38 -0
  24. package/dist/module/apis/followerActions.js.map +1 -0
  25. package/dist/module/apis/index.js +12 -0
  26. package/dist/module/apis/index.js.map +1 -0
  27. package/dist/module/apis/notificationActions.js +60 -0
  28. package/dist/module/apis/notificationActions.js.map +1 -0
  29. package/dist/module/apis/profileActions.js +14 -0
  30. package/dist/module/apis/profileActions.js.map +1 -0
  31. package/dist/module/apis/reactionActions.js +76 -0
  32. package/dist/module/apis/reactionActions.js.map +1 -0
  33. package/dist/module/apis/stringActions.js +30 -0
  34. package/dist/module/apis/stringActions.js.map +1 -0
  35. package/dist/module/apis/typeActions.js +15 -0
  36. package/dist/module/apis/typeActions.js.map +1 -0
  37. package/dist/module/apis/userActions.js +104 -0
  38. package/dist/module/apis/userActions.js.map +1 -0
  39. package/dist/module/assets/icons/reactions/heart.png +0 -0
  40. package/dist/module/assets/icons/reactions/party.png +0 -0
  41. package/dist/module/assets/icons/reactions/sad.png +0 -0
  42. package/dist/module/assets/icons/reactions/smile.png +0 -0
  43. package/dist/module/colours.js +168 -0
  44. package/dist/module/colours.js.map +1 -0
  45. package/dist/module/components/AddButton.js +43 -0
  46. package/dist/module/components/AddButton.js.map +1 -0
  47. package/dist/module/components/AddToCalendarButton.js +225 -0
  48. package/dist/module/components/AddToCalendarButton.js.map +1 -0
  49. package/dist/module/components/Attachment.js +54 -0
  50. package/dist/module/components/Attachment.js.map +1 -0
  51. package/dist/module/components/AudienceSelectorLauncher.js +64 -0
  52. package/dist/module/components/AudienceSelectorLauncher.js.map +1 -0
  53. package/dist/module/components/AudienceSelectorPage.js +350 -0
  54. package/dist/module/components/AudienceSelectorPage.js.map +1 -0
  55. package/dist/module/components/AutoOffsetImage.js +186 -0
  56. package/dist/module/components/AutoOffsetImage.js.map +1 -0
  57. package/dist/module/components/BackButton.js +58 -0
  58. package/dist/module/components/BackButton.js.map +1 -0
  59. package/dist/module/components/CategoryTabs.js +154 -0
  60. package/dist/module/components/CategoryTabs.js.map +1 -0
  61. package/dist/module/components/CommentReply.js +328 -0
  62. package/dist/module/components/CommentReply.js.map +1 -0
  63. package/dist/module/components/CommentSection.js +822 -0
  64. package/dist/module/components/CommentSection.js.map +1 -0
  65. package/dist/module/components/ConfirmPopup.js +108 -0
  66. package/dist/module/components/ConfirmPopup.js.map +1 -0
  67. package/dist/module/components/ConfirmationPopup.js +72 -0
  68. package/dist/module/components/ConfirmationPopup.js.map +1 -0
  69. package/dist/module/components/DropDownItem.js +74 -0
  70. package/dist/module/components/DropDownItem.js.map +1 -0
  71. package/dist/module/components/DropDownMenu.js +41 -0
  72. package/dist/module/components/DropDownMenu.js.map +1 -0
  73. package/dist/module/components/EmptyStateMain.js +50 -0
  74. package/dist/module/components/EmptyStateMain.js.map +1 -0
  75. package/dist/module/components/EmptyStateWidget.js +47 -0
  76. package/dist/module/components/EmptyStateWidget.js.map +1 -0
  77. package/dist/module/components/FontScaleButton.js +36 -0
  78. package/dist/module/components/FontScaleButton.js.map +1 -0
  79. package/dist/module/components/FontScalePopup.js +75 -0
  80. package/dist/module/components/FontScalePopup.js.map +1 -0
  81. package/dist/module/components/FormCard.js +25 -0
  82. package/dist/module/components/FormCard.js.map +1 -0
  83. package/dist/module/components/FormCardSection.js +212 -0
  84. package/dist/module/components/FormCardSection.js.map +1 -0
  85. package/dist/module/components/FormCardSectionOptionLauncher.js +72 -0
  86. package/dist/module/components/FormCardSectionOptionLauncher.js.map +1 -0
  87. package/dist/module/components/FormattedText.js +131 -0
  88. package/dist/module/components/FormattedText.js.map +1 -0
  89. package/dist/module/components/GenericInput.js +148 -0
  90. package/dist/module/components/GenericInput.js.map +1 -0
  91. package/dist/module/components/GenericInputSection.js +158 -0
  92. package/dist/module/components/GenericInputSection.js.map +1 -0
  93. package/dist/module/components/Header.js +458 -0
  94. package/dist/module/components/Header.js.map +1 -0
  95. package/dist/module/components/ImagePopup.js +240 -0
  96. package/dist/module/components/ImagePopup.js.map +1 -0
  97. package/dist/module/components/ImageUploadProgress.js +68 -0
  98. package/dist/module/components/ImageUploadProgress.js.map +1 -0
  99. package/dist/module/components/ImageUploader.js +795 -0
  100. package/dist/module/components/ImageUploader.js.map +1 -0
  101. package/dist/module/components/InlineButton.js +65 -0
  102. package/dist/module/components/InlineButton.js.map +1 -0
  103. package/dist/module/components/Input.js +154 -0
  104. package/dist/module/components/Input.js.map +1 -0
  105. package/dist/module/components/LoadingCircles.js +220 -0
  106. package/dist/module/components/LoadingCircles.js.map +1 -0
  107. package/dist/module/components/LoadingIndicator.js +86 -0
  108. package/dist/module/components/LoadingIndicator.js.map +1 -0
  109. package/dist/module/components/LoadingStateWidget.js +46 -0
  110. package/dist/module/components/LoadingStateWidget.js.map +1 -0
  111. package/dist/module/components/MediaPlayer.js +418 -0
  112. package/dist/module/components/MediaPlayer.js.map +1 -0
  113. package/dist/module/components/MiddlePopup.js +43 -0
  114. package/dist/module/components/MiddlePopup.js.map +1 -0
  115. package/dist/module/components/PDFPopup.js +191 -0
  116. package/dist/module/components/PDFPopup.js.map +1 -0
  117. package/dist/module/components/PlussChat.js +986 -0
  118. package/dist/module/components/PlussChat.js.map +1 -0
  119. package/dist/module/components/PlussChatMessage.js +262 -0
  120. package/dist/module/components/PlussChatMessage.js.map +1 -0
  121. package/dist/module/components/PlussChatTime.js +58 -0
  122. package/dist/module/components/PlussChatTime.js.map +1 -0
  123. package/dist/module/components/Popup.js +125 -0
  124. package/dist/module/components/Popup.js.map +1 -0
  125. package/dist/module/components/PopupMenu.js +119 -0
  126. package/dist/module/components/PopupMenu.js.map +1 -0
  127. package/dist/module/components/PositionedImage.js +313 -0
  128. package/dist/module/components/PositionedImage.js.map +1 -0
  129. package/dist/module/components/ProfilePic.js +106 -0
  130. package/dist/module/components/ProfilePic.js.map +1 -0
  131. package/dist/module/components/RadioButton.js +77 -0
  132. package/dist/module/components/RadioButton.js.map +1 -0
  133. package/dist/module/components/Reaction.js +116 -0
  134. package/dist/module/components/Reaction.js.map +1 -0
  135. package/dist/module/components/Reactions.js +71 -0
  136. package/dist/module/components/Reactions.js.map +1 -0
  137. package/dist/module/components/SharingTools.js +154 -0
  138. package/dist/module/components/SharingTools.js.map +1 -0
  139. package/dist/module/components/Spinner.js +22 -0
  140. package/dist/module/components/Spinner.js.map +1 -0
  141. package/dist/module/components/StickyFooter.js +34 -0
  142. package/dist/module/components/StickyFooter.js.map +1 -0
  143. package/dist/module/components/TextStyle.js +45 -0
  144. package/dist/module/components/TextStyle.js.map +1 -0
  145. package/dist/module/components/Toggle.js +65 -0
  146. package/dist/module/components/Toggle.js.map +1 -0
  147. package/dist/module/components/TouchableSearchBar.js +67 -0
  148. package/dist/module/components/TouchableSearchBar.js.map +1 -0
  149. package/dist/module/components/UserListPopup.js +135 -0
  150. package/dist/module/components/UserListPopup.js.map +1 -0
  151. package/dist/module/components/UserListing.js +267 -0
  152. package/dist/module/components/UserListing.js.map +1 -0
  153. package/dist/module/components/VideoPopup.js +113 -0
  154. package/dist/module/components/VideoPopup.js.map +1 -0
  155. package/dist/module/components/WarningPopup.js +82 -0
  156. package/dist/module/components/WarningPopup.js.map +1 -0
  157. package/dist/module/components/expo-image-picker-multiple/ImageBrowser.js +289 -0
  158. package/dist/module/components/expo-image-picker-multiple/ImageBrowser.js.map +1 -0
  159. package/dist/module/components/expo-image-picker-multiple/ImageTile.js +116 -0
  160. package/dist/module/components/expo-image-picker-multiple/ImageTile.js.map +1 -0
  161. package/dist/module/components/index.js +55 -0
  162. package/dist/module/components/index.js.map +1 -0
  163. package/dist/module/components/react-native-expo-image-cropper/ExpoImageManipulator.js +385 -0
  164. package/dist/module/components/react-native-expo-image-cropper/ExpoImageManipulator.js.map +1 -0
  165. package/dist/module/components/react-native-expo-image-cropper/ImageCropOverlay.js +387 -0
  166. package/dist/module/components/react-native-expo-image-cropper/ImageCropOverlay.js.map +1 -0
  167. package/dist/module/config.js +32 -0
  168. package/dist/module/config.js.map +1 -0
  169. package/dist/module/constants.js +19 -0
  170. package/dist/module/constants.js.map +1 -0
  171. package/dist/module/fonts/index.js +2 -0
  172. package/dist/module/fonts/index.js.map +1 -0
  173. package/dist/module/fonts/pluss60-icons.js +5 -0
  174. package/dist/module/fonts/pluss60-icons.js.map +1 -0
  175. package/dist/module/fonts/pluss60-icons.json +1097 -0
  176. package/dist/module/helper.js +397 -0
  177. package/dist/module/helper.js.map +1 -0
  178. package/dist/module/index.js +13 -0
  179. package/dist/module/index.js.map +1 -0
  180. package/dist/module/js/images/detectFaces.js +30 -0
  181. package/dist/module/js/images/detectFaces.js.map +1 -0
  182. package/dist/module/js/images/findLandmarkRange.js +93 -0
  183. package/dist/module/js/images/findLandmarkRange.js.map +1 -0
  184. package/dist/module/js/images/getScaledOffset.js +81 -0
  185. package/dist/module/js/images/getScaledOffset.js.map +1 -0
  186. package/dist/module/js/site/getSiteLevelFromState.js +29 -0
  187. package/dist/module/js/site/getSiteLevelFromState.js.map +1 -0
  188. package/dist/module/js/site/isTVEnabled.js +10 -0
  189. package/dist/module/js/site/isTVEnabled.js.map +1 -0
  190. package/dist/module/session.js +58 -0
  191. package/dist/module/session.js.map +1 -0
  192. package/dist/module/styles.js +67 -0
  193. package/dist/module/styles.js.map +1 -0
  194. package/package.json +20 -24
  195. package/src/js/images/detectFaces.js +8 -4
@@ -0,0 +1,113 @@
1
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
4
+ import React, { Component } from 'react';
5
+ import { Platform, View, Modal, TouchableOpacity, StyleSheet } from 'react-native';
6
+ import * as ScreenOrientation from 'expo-screen-orientation';
7
+ import { StatusBarHeight, getCompressed, imageExists } from '../helper';
8
+ import { Pl60Icon } from '../fonts';
9
+ import { SharingTools } from './SharingTools';
10
+ import MediaPlayer from './MediaPlayer';
11
+ class VideoPopup extends Component {
12
+ constructor(props) {
13
+ super(props);
14
+ _defineProperty(this, "UNSAFE_componentWillMount", async () => {
15
+ this.checkCompressed(this.props.uri);
16
+ await ScreenOrientation.lockAsync(Platform.OS === 'ios' ? ScreenOrientation.OrientationLock.DEFAULT : ScreenOrientation.OrientationLock.ALL);
17
+ });
18
+ _defineProperty(this, "componentWillUnmount", async () => {
19
+ await ScreenOrientation.lockAsync(ScreenOrientation.OrientationLock.PORTRAIT_UP);
20
+ });
21
+ _defineProperty(this, "checkCompressed", url => {
22
+ const compressedUri = getCompressed(url);
23
+ imageExists(compressedUri).then(compressedExists => {
24
+ this.setState({
25
+ uri: compressedExists ? compressedUri : url
26
+ });
27
+ });
28
+ });
29
+ this.state = {
30
+ uri: '',
31
+ isFullScreen: false
32
+ };
33
+ }
34
+ UNSAFE_componentWillReceiveProps(nextProps) {
35
+ if (this.props.uri === nextProps.uri) return;
36
+ this.checkCompressed(nextProps.uri);
37
+ }
38
+ renderClose() {
39
+ return /*#__PURE__*/React.createElement(TouchableOpacity, {
40
+ style: styles.menuIconContainer,
41
+ onPress: this.props.onClose,
42
+ activeOpacity: 0.6
43
+ }, /*#__PURE__*/React.createElement(Pl60Icon, {
44
+ name: "close",
45
+ style: styles.menuIcon
46
+ }));
47
+ }
48
+ renderPlayer() {
49
+ const {
50
+ uri
51
+ } = this.state;
52
+ if (!uri) return null;
53
+ return /*#__PURE__*/React.createElement(View, {
54
+ style: styles.playerContainer
55
+ }, /*#__PURE__*/React.createElement(MediaPlayer, {
56
+ source: uri,
57
+ useVideoPlayer: true,
58
+ autoPlay: true,
59
+ orientationChanged: isFullScreen => this.setState({
60
+ isFullScreen
61
+ })
62
+ }));
63
+ }
64
+ render() {
65
+ const {
66
+ isFullScreen
67
+ } = this.state;
68
+ const {
69
+ visible,
70
+ onClose,
71
+ animationType,
72
+ style
73
+ } = this.props;
74
+ return /*#__PURE__*/React.createElement(Modal, {
75
+ visible: visible,
76
+ animationType: animationType || 'fade',
77
+ onRequestClose: onClose,
78
+ style: [styles.container, style],
79
+ supportedOrientations: ['portrait', 'landscape']
80
+ }, this.renderPlayer(), !isFullScreen && this.renderClose(), !isFullScreen && /*#__PURE__*/React.createElement(SharingTools, {
81
+ uri: this.props.uri
82
+ }));
83
+ }
84
+ }
85
+ const styles = StyleSheet.create({
86
+ container: {
87
+ backgroundColor: '#000'
88
+ },
89
+ menuIconContainer: {
90
+ position: 'absolute',
91
+ top: StatusBarHeight(0),
92
+ right: 0,
93
+ width: 55,
94
+ height: 55,
95
+ zIndex: 3
96
+ },
97
+ menuIcon: {
98
+ fontSize: 25,
99
+ padding: 15,
100
+ width: 55,
101
+ textAlign: 'center',
102
+ color: '#fff',
103
+ zIndex: 3
104
+ },
105
+ playerContainer: {
106
+ flex: 1,
107
+ backgroundColor: '#000',
108
+ alignItems: 'center',
109
+ justifyContent: 'center'
110
+ }
111
+ });
112
+ export { VideoPopup };
113
+ //# sourceMappingURL=VideoPopup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Component","Platform","View","Modal","TouchableOpacity","StyleSheet","ScreenOrientation","StatusBarHeight","getCompressed","imageExists","Pl60Icon","SharingTools","MediaPlayer","VideoPopup","constructor","props","_defineProperty","checkCompressed","uri","lockAsync","OS","OrientationLock","DEFAULT","ALL","PORTRAIT_UP","url","compressedUri","then","compressedExists","setState","state","isFullScreen","UNSAFE_componentWillReceiveProps","nextProps","renderClose","createElement","style","styles","menuIconContainer","onPress","onClose","activeOpacity","name","menuIcon","renderPlayer","playerContainer","source","useVideoPlayer","autoPlay","orientationChanged","render","visible","animationType","onRequestClose","container","supportedOrientations","create","backgroundColor","position","top","right","width","height","zIndex","fontSize","padding","textAlign","color","flex","alignItems","justifyContent"],"sources":["VideoPopup.js"],"sourcesContent":["import React, { Component } from 'react';\nimport { Platform, View, Modal, TouchableOpacity, StyleSheet } from 'react-native';\nimport * as ScreenOrientation from 'expo-screen-orientation';\nimport { StatusBarHeight, getCompressed, imageExists } from '../helper';\nimport { Pl60Icon } from '../fonts';\nimport { SharingTools } from './SharingTools';\nimport MediaPlayer from './MediaPlayer';\n\nclass VideoPopup extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n uri: '',\n isFullScreen: false,\n };\n }\n\n UNSAFE_componentWillMount = async () => {\n this.checkCompressed(this.props.uri);\n await ScreenOrientation.lockAsync(\n Platform.OS === 'ios' ? ScreenOrientation.OrientationLock.DEFAULT : ScreenOrientation.OrientationLock.ALL,\n );\n };\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (this.props.uri === nextProps.uri) return;\n this.checkCompressed(nextProps.uri);\n }\n\n componentWillUnmount = async () => {\n await ScreenOrientation.lockAsync(ScreenOrientation.OrientationLock.PORTRAIT_UP);\n };\n\n checkCompressed = url => {\n const compressedUri = getCompressed(url);\n imageExists(compressedUri).then(compressedExists => {\n this.setState({ uri: compressedExists ? compressedUri : url });\n });\n };\n\n renderClose() {\n return (\n <TouchableOpacity style={styles.menuIconContainer} onPress={this.props.onClose} activeOpacity={0.6}>\n <Pl60Icon name=\"close\" style={styles.menuIcon} />\n </TouchableOpacity>\n );\n }\n\n renderPlayer() {\n const { uri } = this.state;\n if (!uri) return null;\n\n return (\n <View style={styles.playerContainer}>\n <MediaPlayer\n source={uri}\n useVideoPlayer={true}\n autoPlay={true}\n orientationChanged={isFullScreen => this.setState({ isFullScreen })}\n />\n </View>\n );\n }\n\n render() {\n const { isFullScreen } = this.state;\n const { visible, onClose, animationType, style } = this.props;\n\n return (\n <Modal\n visible={visible}\n animationType={animationType || 'fade'}\n onRequestClose={onClose}\n style={[styles.container, style]}\n supportedOrientations={['portrait', 'landscape']}\n >\n {this.renderPlayer()}\n {!isFullScreen && this.renderClose()}\n {!isFullScreen && <SharingTools uri={this.props.uri} />}\n </Modal>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n backgroundColor: '#000',\n },\n menuIconContainer: {\n position: 'absolute',\n top: StatusBarHeight(0),\n right: 0,\n width: 55,\n height: 55,\n zIndex: 3,\n },\n menuIcon: {\n fontSize: 25,\n padding: 15,\n width: 55,\n textAlign: 'center',\n color: '#fff',\n zIndex: 3,\n },\n playerContainer: {\n flex: 1,\n backgroundColor: '#000',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nexport { VideoPopup };\n"],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import React, { PureComponent } from 'react';
2
+ import _ from 'lodash';
3
+ import { View, Text, Dimensions } from 'react-native';
4
+ import { connect } from 'react-redux';
5
+ import { Pl60Icon } from '../fonts';
6
+ import { COLOUR_GREEN, TEXT_DARK, getMainBrandingColourFromState } from '../colours';
7
+ import { MiddlePopup } from './MiddlePopup';
8
+ import { InlineButton } from './InlineButton';
9
+ const SCREEN_WIDTH = Dimensions.get('window').width;
10
+ class WarningPopup extends PureComponent {
11
+ render() {
12
+ return /*#__PURE__*/React.createElement(MiddlePopup, {
13
+ visible: this.props.visible,
14
+ onClose: this.props.onClose,
15
+ style: styles.popup
16
+ }, this.props.isSuccess && /*#__PURE__*/React.createElement(Pl60Icon, {
17
+ style: styles.icon,
18
+ name: "circleoutlined"
19
+ }), /*#__PURE__*/React.createElement(Text, {
20
+ style: styles.text
21
+ }, this.props.confirmText), /*#__PURE__*/React.createElement(View, {
22
+ style: {
23
+ marginTop: 16,
24
+ paddingHorizontal: 24
25
+ }
26
+ }, /*#__PURE__*/React.createElement(Text, {
27
+ style: [styles.infoText, this.props.infoTextStyle]
28
+ }, this.props.infoText)), /*#__PURE__*/React.createElement(InlineButton, {
29
+ onPress: this.props.onClose,
30
+ color: this.props.ctaButton ? this.props.colourBrandingMain : '#fff',
31
+ style: styles.button,
32
+ textStyle: [styles.closeText, {
33
+ color: this.props.ctaButton ? '#fff' : this.props.colourBrandingMain
34
+ }],
35
+ large: true
36
+ }, !_.isUndefined(this.props.buttonText) ? this.props.buttonText : 'Close'));
37
+ }
38
+ }
39
+ const styles = {
40
+ popup: {
41
+ width: 'auto',
42
+ maxWidth: SCREEN_WIDTH - 34,
43
+ paddingVertical: 16
44
+ },
45
+ icon: {
46
+ marginTop: 20,
47
+ paddingBottom: 16,
48
+ fontSize: 52,
49
+ color: COLOUR_GREEN
50
+ },
51
+ text: {
52
+ fontFamily: 'sf-bold',
53
+ fontSize: 24,
54
+ lineHeight: 24,
55
+ color: TEXT_DARK,
56
+ textAlign: 'center',
57
+ marginTop: 8
58
+ },
59
+ infoText: {
60
+ fontFamily: 'sf-regular',
61
+ fontSize: 16,
62
+ lineHeight: 22,
63
+ color: TEXT_DARK,
64
+ textAlign: 'left'
65
+ },
66
+ button: {
67
+ width: 130,
68
+ marginTop: 20
69
+ },
70
+ closeText: {
71
+ fontFamily: 'sf-medium',
72
+ fontSize: 15
73
+ }
74
+ };
75
+ const mapStateToProps = state => {
76
+ return {
77
+ colourBrandingMain: getMainBrandingColourFromState(state)
78
+ };
79
+ };
80
+ const warningPopup = connect(mapStateToProps, {})(WarningPopup);
81
+ export { warningPopup as WarningPopup };
82
+ //# sourceMappingURL=WarningPopup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","PureComponent","_","View","Text","Dimensions","connect","Pl60Icon","COLOUR_GREEN","TEXT_DARK","getMainBrandingColourFromState","MiddlePopup","InlineButton","SCREEN_WIDTH","get","width","WarningPopup","render","createElement","visible","props","onClose","style","styles","popup","isSuccess","icon","name","text","confirmText","marginTop","paddingHorizontal","infoText","infoTextStyle","onPress","color","ctaButton","colourBrandingMain","button","textStyle","closeText","large","isUndefined","buttonText","maxWidth","paddingVertical","paddingBottom","fontSize","fontFamily","lineHeight","textAlign","mapStateToProps","state","warningPopup"],"sources":["WarningPopup.js"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport _ from 'lodash';\nimport { View, Text, Dimensions } from 'react-native';\nimport { connect } from 'react-redux';\nimport { Pl60Icon } from '../fonts';\nimport { COLOUR_GREEN, TEXT_DARK, getMainBrandingColourFromState } from '../colours';\nimport { MiddlePopup } from './MiddlePopup';\nimport { InlineButton } from './InlineButton';\n\nconst SCREEN_WIDTH = Dimensions.get('window').width;\n\nclass WarningPopup extends PureComponent {\n render() {\n return (\n <MiddlePopup visible={this.props.visible} onClose={this.props.onClose} style={styles.popup}>\n {this.props.isSuccess && <Pl60Icon style={styles.icon} name=\"circleoutlined\" />}\n <Text style={styles.text}>{this.props.confirmText}</Text>\n <View style={{ marginTop: 16, paddingHorizontal: 24 }}>\n <Text style={[styles.infoText, this.props.infoTextStyle]}>{this.props.infoText}</Text>\n </View>\n <InlineButton\n onPress={this.props.onClose}\n color={this.props.ctaButton ? this.props.colourBrandingMain : '#fff'}\n style={styles.button}\n textStyle={[styles.closeText, { color: this.props.ctaButton ? '#fff' : this.props.colourBrandingMain }]}\n large\n >\n {!_.isUndefined(this.props.buttonText) ? this.props.buttonText : 'Close'}\n </InlineButton>\n </MiddlePopup>\n );\n }\n}\n\nconst styles = {\n popup: {\n width: 'auto',\n maxWidth: SCREEN_WIDTH - 34,\n paddingVertical: 16,\n },\n icon: {\n marginTop: 20,\n paddingBottom: 16,\n fontSize: 52,\n color: COLOUR_GREEN,\n },\n text: {\n fontFamily: 'sf-bold',\n fontSize: 24,\n lineHeight: 24,\n color: TEXT_DARK,\n textAlign: 'center',\n marginTop: 8,\n },\n infoText: {\n fontFamily: 'sf-regular',\n fontSize: 16,\n lineHeight: 22,\n color: TEXT_DARK,\n textAlign: 'left',\n },\n button: {\n width: 130,\n marginTop: 20,\n },\n closeText: {\n fontFamily: 'sf-medium',\n fontSize: 15,\n },\n};\n\nconst mapStateToProps = state => {\n return {\n colourBrandingMain: getMainBrandingColourFromState(state),\n };\n};\n\nconst warningPopup = connect(mapStateToProps, {})(WarningPopup);\nexport { warningPopup as WarningPopup };\n"],"mappings":"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"}
@@ -0,0 +1,289 @@
1
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
4
+ import React from 'react';
5
+ import { StyleSheet, View, FlatList, Dimensions, ActivityIndicator, Platform } from 'react-native';
6
+ import _ from 'lodash';
7
+ import * as ScreenOrientation from 'expo-screen-orientation';
8
+ import * as MediaLibrary from 'expo-media-library';
9
+ import { Camera } from 'expo-camera';
10
+ import { isVideo } from '../../helper';
11
+ import ImageTile from './ImageTile';
12
+ const {
13
+ width
14
+ } = Dimensions.get('window');
15
+ const defaultSelectionLimit = 10;
16
+ const defaultLoadCount = 50;
17
+ export default class ImageBrowser extends React.Component {
18
+ constructor(props) {
19
+ super(props);
20
+ _defineProperty(this, "isLocal", () => {
21
+ return _.isNil(this.props.remoteAlbums);
22
+ });
23
+ _defineProperty(this, "getPermissionsAsync", async () => {
24
+ const {
25
+ status: camera
26
+ } = await Camera.requestCameraPermissionsAsync();
27
+ const {
28
+ status: cameraRoll
29
+ } = await MediaLibrary.requestPermissionsAsync();
30
+ this.setState({
31
+ hasCameraPermission: camera === 'granted',
32
+ hasCameraRollPermission: cameraRoll === 'granted'
33
+ });
34
+ });
35
+ _defineProperty(this, "onOrientationChange", ({
36
+ orientationInfo
37
+ }) => {
38
+ ScreenOrientation.removeOrientationChangeListeners();
39
+ ScreenOrientation.addOrientationChangeListener(this.onOrientationChange);
40
+ const numColumns = this.getNumColumns(orientationInfo.orientation);
41
+ this.setState({
42
+ numColumns
43
+ });
44
+ });
45
+ _defineProperty(this, "getNumColumns", orientation => orientation === ScreenOrientation.Orientation.PORTRAIT_UP || orientation === ScreenOrientation.Orientation.PORTRAIT_DOWN ? 4 : 7);
46
+ _defineProperty(this, "isVideoSelected", () => {
47
+ return this.state.selected.find(uri => {
48
+ const photo = this.state.photos.find(photo => photo.uri === uri);
49
+ return photo && photo.mediaType === MediaLibrary.MediaType.video;
50
+ });
51
+ });
52
+ _defineProperty(this, "checkSelection", item => {
53
+ let videoSelected = this.isVideoSelected();
54
+ let newSelected = [...this.state.selected];
55
+
56
+ // Check video/photo selection
57
+ if (item.mediaType === MediaLibrary.MediaType.video) {
58
+ if (videoSelected && videoSelected !== item.uri) {
59
+ // If different video is already selected, reset
60
+ videoSelected = null;
61
+ newSelected = [];
62
+ } else if (!videoSelected && newSelected.length > 0) {
63
+ // If photos selected, don't allow selecting video
64
+ videoSelected = null;
65
+ newSelected = [];
66
+ }
67
+ // Toggle video selected
68
+ videoSelected = videoSelected !== item.uri ? item.uri : null;
69
+ } else if (videoSelected) {
70
+ // If video selected, reset
71
+ videoSelected = null;
72
+ newSelected = [];
73
+ }
74
+
75
+ // Check multiple selection
76
+ const selectionLimit = this.props.max || defaultSelectionLimit;
77
+ if (selectionLimit && selectionLimit > 1) {
78
+ // Limit selection
79
+ if (newSelected.length === selectionLimit && newSelected.indexOf(item.uri) === -1) return {
80
+ isFull: true
81
+ };
82
+ } else {
83
+ // Force single selection
84
+ if (newSelected.length > 0 && newSelected[0] !== item.uri) newSelected = [];
85
+ }
86
+ return {
87
+ newSelected,
88
+ videoSelected
89
+ };
90
+ });
91
+ _defineProperty(this, "selectImage", item => {
92
+ const {
93
+ newSelected,
94
+ videoSelected,
95
+ isFull
96
+ } = this.checkSelection(item);
97
+ if (isFull) return;
98
+ if (newSelected.indexOf(item.uri) === -1) {
99
+ newSelected.push(item.uri);
100
+ } else {
101
+ const deleteIndex = newSelected.indexOf(item.uri);
102
+ newSelected.splice(deleteIndex, 1);
103
+ }
104
+ if (newSelected.length > this.props.max) return;
105
+ if (!newSelected) newSelected = [];
106
+ this.setState({
107
+ selected: newSelected
108
+ });
109
+ this.props.onChange(newSelected, videoSelected, () => this.prepareCallback());
110
+ });
111
+ _defineProperty(this, "getPhotos", (reset = false) => {
112
+ const {
113
+ remoteAlbums,
114
+ allowVideo,
115
+ loadCount,
116
+ album
117
+ } = this.props;
118
+ if (this.isLocal()) {
119
+ // Retrieve local photos
120
+ const mediaType = [MediaLibrary.MediaType.photo];
121
+ if (allowVideo) mediaType.push(MediaLibrary.MediaType.video);
122
+ const params = {
123
+ first: loadCount || defaultLoadCount,
124
+ mediaType,
125
+ album: album || undefined,
126
+ sortBy: [Platform.OS === 'android' ? 'modificationTime' : 'creationTime']
127
+ };
128
+ if (reset) {
129
+ this.setState({
130
+ photos: [],
131
+ after: null,
132
+ hasNextPage: true
133
+ });
134
+ } else {
135
+ if (this.state.after) params.after = this.state.after;
136
+ if (!this.state.hasNextPage) return;
137
+ }
138
+ MediaLibrary.getAssetsAsync(params).then(this.processPhotos);
139
+ } else {
140
+ var _selectedAlbum$images;
141
+ // Use remote albums
142
+ const selectedAlbum = remoteAlbums.find(item => item.id === album);
143
+ if (selectedAlbum && ((_selectedAlbum$images = selectedAlbum.images) === null || _selectedAlbum$images === void 0 ? void 0 : _selectedAlbum$images.length) > 0) {
144
+ const ordered = _.orderBy(selectedAlbum.images, 'date', 'desc');
145
+ this.setState({
146
+ photos: ordered.map(image => {
147
+ return {
148
+ uri: image.uri,
149
+ mediaType: isVideo(image.uri) ? MediaLibrary.MediaType.video : MediaLibrary.MediaType.photo
150
+ };
151
+ }),
152
+ isEmpty: false
153
+ });
154
+ } else {
155
+ this.setState({
156
+ photos: [],
157
+ isEmpty: true
158
+ });
159
+ }
160
+ }
161
+ });
162
+ _defineProperty(this, "processPhotos", data => {
163
+ if (data.totalCount) {
164
+ if (this.state.after === data.endCursor) return;
165
+ const uris = data.assets;
166
+ this.setState({
167
+ photos: [...this.state.photos, ...uris],
168
+ after: data.endCursor,
169
+ hasNextPage: data.hasNextPage
170
+ });
171
+ } else {
172
+ this.setState({
173
+ isEmpty: true
174
+ });
175
+ }
176
+ });
177
+ _defineProperty(this, "getItemLayout", (data, index) => {
178
+ const length = this.props.itemWidth || width / 4;
179
+ return {
180
+ length,
181
+ offset: length * index,
182
+ index
183
+ };
184
+ });
185
+ _defineProperty(this, "renderImageTile", ({
186
+ item,
187
+ index
188
+ }) => {
189
+ if (!item) return null;
190
+ const selectedIndex = this.state.selected.indexOf(item.uri);
191
+ const selected = selectedIndex !== -1;
192
+ return /*#__PURE__*/React.createElement(ImageTile, {
193
+ selectedItemNumber: selectedIndex + 1,
194
+ item: item,
195
+ index: index,
196
+ selected: selected,
197
+ selectImage: this.selectImage,
198
+ renderSelectedComponent: this.props.renderSelectedComponent,
199
+ style: this.props.itemStyle,
200
+ width: this.props.itemWidth,
201
+ height: this.props.itemHeight,
202
+ isRemote: !this.isLocal()
203
+ });
204
+ });
205
+ _defineProperty(this, "renderPreloader", () => this.props.preloaderComponent || /*#__PURE__*/React.createElement(ActivityIndicator, {
206
+ size: "large"
207
+ }));
208
+ _defineProperty(this, "renderEmptyState", () => this.props.emptyStateComponent || null);
209
+ this.state = {
210
+ hasCameraPermission: null,
211
+ hasCameraRollPermission: null,
212
+ numColumns: null,
213
+ photos: [],
214
+ selected: [],
215
+ isEmpty: false,
216
+ after: null,
217
+ hasNextPage: true
218
+ };
219
+ }
220
+ async componentDidMount() {
221
+ if (this.isLocal()) await this.getPermissionsAsync();
222
+ ScreenOrientation.addOrientationChangeListener(this.onOrientationChange);
223
+ const orientation = await ScreenOrientation.getOrientationAsync();
224
+ const numColumns = this.getNumColumns(orientation);
225
+ this.setState({
226
+ numColumns
227
+ }, () => {
228
+ this.getPhotos();
229
+ });
230
+ }
231
+ componentDidUpdate(prevProps) {
232
+ if (prevProps.album !== this.props.album) this.getPhotos(true);
233
+ if (!_.isEqual(prevProps.selected, this.props.selected)) {
234
+ this.setState({
235
+ selected: this.props.selected
236
+ });
237
+ }
238
+ }
239
+ prepareCallback() {
240
+ const {
241
+ selected,
242
+ photos
243
+ } = this.state;
244
+ const selectedPhotos = selected.map(uri => photos.find(p => p.uri === uri));
245
+ if (this.isLocal()) {
246
+ const assetsInfo = Promise.all(selectedPhotos.map(p => MediaLibrary.getAssetInfoAsync(p)));
247
+ this.props.callback(assetsInfo);
248
+ } else {
249
+ // No need to retrieve local assets
250
+ this.props.callback(selectedPhotos);
251
+ }
252
+ }
253
+ renderImages() {
254
+ if (_.isEmpty(this.state.photos) && !this.state.isEmpty) {
255
+ return null;
256
+ }
257
+ return /*#__PURE__*/React.createElement(FlatList, {
258
+ data: this.state.photos,
259
+ numColumns: this.state.numColumns,
260
+ key: this.state.numColumns,
261
+ renderItem: this.renderImageTile,
262
+ keyExtractor: (_, index) => index,
263
+ onEndReached: () => {
264
+ if (this.isLocal()) this.getPhotos();
265
+ },
266
+ onEndReachedThreshold: 0.5,
267
+ ListEmptyComponent: this.state.isEmpty ? this.renderEmptyState() : this.renderPreloader(),
268
+ initialNumToRender: 24,
269
+ getItemLayout: this.getItemLayout
270
+ });
271
+ }
272
+ render() {
273
+ const {
274
+ hasCameraPermission
275
+ } = this.state;
276
+ if (this.isLocal() && !hasCameraPermission) {
277
+ return this.props.noCameraPermissionComponent || null;
278
+ }
279
+ return /*#__PURE__*/React.createElement(View, {
280
+ style: [styles.container, this.props.style]
281
+ }, this.renderImages());
282
+ }
283
+ }
284
+ const styles = StyleSheet.create({
285
+ container: {
286
+ flex: 1
287
+ }
288
+ });
289
+ //# sourceMappingURL=ImageBrowser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","StyleSheet","View","FlatList","Dimensions","ActivityIndicator","Platform","_","ScreenOrientation","MediaLibrary","Camera","isVideo","ImageTile","width","get","defaultSelectionLimit","defaultLoadCount","ImageBrowser","Component","constructor","props","_defineProperty","isNil","remoteAlbums","status","camera","requestCameraPermissionsAsync","cameraRoll","requestPermissionsAsync","setState","hasCameraPermission","hasCameraRollPermission","orientationInfo","removeOrientationChangeListeners","addOrientationChangeListener","onOrientationChange","numColumns","getNumColumns","orientation","Orientation","PORTRAIT_UP","PORTRAIT_DOWN","state","selected","find","uri","photo","photos","mediaType","MediaType","video","item","videoSelected","isVideoSelected","newSelected","length","selectionLimit","max","indexOf","isFull","checkSelection","push","deleteIndex","splice","onChange","prepareCallback","reset","allowVideo","loadCount","album","isLocal","params","first","undefined","sortBy","OS","after","hasNextPage","getAssetsAsync","then","processPhotos","_selectedAlbum$images","selectedAlbum","id","images","ordered","orderBy","map","image","isEmpty","data","totalCount","endCursor","uris","assets","index","itemWidth","offset","selectedIndex","createElement","selectedItemNumber","selectImage","renderSelectedComponent","style","itemStyle","height","itemHeight","isRemote","preloaderComponent","size","emptyStateComponent","componentDidMount","getPermissionsAsync","getOrientationAsync","getPhotos","componentDidUpdate","prevProps","isEqual","selectedPhotos","p","assetsInfo","Promise","all","getAssetInfoAsync","callback","renderImages","key","renderItem","renderImageTile","keyExtractor","onEndReached","onEndReachedThreshold","ListEmptyComponent","renderEmptyState","renderPreloader","initialNumToRender","getItemLayout","render","noCameraPermissionComponent","styles","container","create","flex"],"sources":["ImageBrowser.js"],"sourcesContent":["import React from 'react';\nimport { StyleSheet, View, FlatList, Dimensions, ActivityIndicator, Platform } from 'react-native';\nimport _ from 'lodash';\nimport * as ScreenOrientation from 'expo-screen-orientation';\nimport * as MediaLibrary from 'expo-media-library';\nimport { Camera } from 'expo-camera';\nimport { isVideo } from '../../helper';\nimport ImageTile from './ImageTile';\n\nconst { width } = Dimensions.get('window');\nconst defaultSelectionLimit = 10;\nconst defaultLoadCount = 50;\n\nexport default class ImageBrowser extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n hasCameraPermission: null,\n hasCameraRollPermission: null,\n numColumns: null,\n photos: [],\n selected: [],\n isEmpty: false,\n after: null,\n hasNextPage: true,\n };\n }\n\n async componentDidMount() {\n if (this.isLocal()) await this.getPermissionsAsync();\n\n ScreenOrientation.addOrientationChangeListener(this.onOrientationChange);\n const orientation = await ScreenOrientation.getOrientationAsync();\n const numColumns = this.getNumColumns(orientation);\n this.setState({ numColumns }, () => {\n this.getPhotos();\n });\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.album !== this.props.album) this.getPhotos(true);\n if (!_.isEqual(prevProps.selected, this.props.selected)) {\n this.setState({ selected: this.props.selected });\n }\n }\n\n isLocal = () => {\n return _.isNil(this.props.remoteAlbums);\n };\n\n getPermissionsAsync = async () => {\n const { status: camera } = await Camera.requestCameraPermissionsAsync();\n const { status: cameraRoll } = await MediaLibrary.requestPermissionsAsync();\n this.setState({\n hasCameraPermission: camera === 'granted',\n hasCameraRollPermission: cameraRoll === 'granted',\n });\n };\n\n onOrientationChange = ({ orientationInfo }) => {\n ScreenOrientation.removeOrientationChangeListeners();\n ScreenOrientation.addOrientationChangeListener(this.onOrientationChange);\n const numColumns = this.getNumColumns(orientationInfo.orientation);\n this.setState({ numColumns });\n };\n\n getNumColumns = orientation =>\n orientation === ScreenOrientation.Orientation.PORTRAIT_UP || orientation === ScreenOrientation.Orientation.PORTRAIT_DOWN ? 4 : 7;\n\n isVideoSelected = () => {\n return this.state.selected.find(uri => {\n const photo = this.state.photos.find(photo => photo.uri === uri);\n return photo && photo.mediaType === MediaLibrary.MediaType.video;\n });\n };\n\n checkSelection = item => {\n let videoSelected = this.isVideoSelected();\n let newSelected = [...this.state.selected];\n\n // Check video/photo selection\n if (item.mediaType === MediaLibrary.MediaType.video) {\n if (videoSelected && videoSelected !== item.uri) {\n // If different video is already selected, reset\n videoSelected = null;\n newSelected = [];\n } else if (!videoSelected && newSelected.length > 0) {\n // If photos selected, don't allow selecting video\n videoSelected = null;\n newSelected = [];\n }\n // Toggle video selected\n videoSelected = videoSelected !== item.uri ? item.uri : null;\n } else if (videoSelected) {\n // If video selected, reset\n videoSelected = null;\n newSelected = [];\n }\n\n // Check multiple selection\n const selectionLimit = this.props.max || defaultSelectionLimit;\n if (selectionLimit && selectionLimit > 1) {\n // Limit selection\n if (newSelected.length === selectionLimit && newSelected.indexOf(item.uri) === -1) return { isFull: true };\n } else {\n // Force single selection\n if (newSelected.length > 0 && newSelected[0] !== item.uri) newSelected = [];\n }\n\n return { newSelected, videoSelected };\n };\n\n selectImage = item => {\n const { newSelected, videoSelected, isFull } = this.checkSelection(item);\n if (isFull) return;\n\n if (newSelected.indexOf(item.uri) === -1) {\n newSelected.push(item.uri);\n } else {\n const deleteIndex = newSelected.indexOf(item.uri);\n newSelected.splice(deleteIndex, 1);\n }\n if (newSelected.length > this.props.max) return;\n if (!newSelected) newSelected = [];\n this.setState({ selected: newSelected });\n this.props.onChange(newSelected, videoSelected, () => this.prepareCallback());\n };\n\n getPhotos = (reset = false) => {\n const { remoteAlbums, allowVideo, loadCount, album } = this.props;\n\n if (this.isLocal()) {\n // Retrieve local photos\n const mediaType = [MediaLibrary.MediaType.photo];\n if (allowVideo) mediaType.push(MediaLibrary.MediaType.video);\n\n const params = {\n first: loadCount || defaultLoadCount,\n mediaType,\n album: album || undefined,\n sortBy: [Platform.OS === 'android' ? 'modificationTime' : 'creationTime'],\n };\n if (reset) {\n this.setState({ photos: [], after: null, hasNextPage: true });\n } else {\n if (this.state.after) params.after = this.state.after;\n if (!this.state.hasNextPage) return;\n }\n MediaLibrary.getAssetsAsync(params).then(this.processPhotos);\n } else {\n // Use remote albums\n const selectedAlbum = remoteAlbums.find(item => item.id === album);\n if (selectedAlbum && selectedAlbum.images?.length > 0) {\n const ordered = _.orderBy(selectedAlbum.images, 'date', 'desc');\n this.setState({\n photos: ordered.map(image => {\n return {\n uri: image.uri,\n mediaType: isVideo(image.uri) ? MediaLibrary.MediaType.video : MediaLibrary.MediaType.photo,\n };\n }),\n isEmpty: false,\n });\n } else {\n this.setState({ photos: [], isEmpty: true });\n }\n }\n };\n\n processPhotos = data => {\n if (data.totalCount) {\n if (this.state.after === data.endCursor) return;\n const uris = data.assets;\n this.setState({\n photos: [...this.state.photos, ...uris],\n after: data.endCursor,\n hasNextPage: data.hasNextPage,\n });\n } else {\n this.setState({ isEmpty: true });\n }\n };\n\n getItemLayout = (data, index) => {\n const length = this.props.itemWidth || width / 4;\n return { length, offset: length * index, index };\n };\n\n prepareCallback() {\n const { selected, photos } = this.state;\n const selectedPhotos = selected.map(uri => photos.find(p => p.uri === uri));\n if (this.isLocal()) {\n const assetsInfo = Promise.all(selectedPhotos.map(p => MediaLibrary.getAssetInfoAsync(p)));\n this.props.callback(assetsInfo);\n } else {\n // No need to retrieve local assets\n this.props.callback(selectedPhotos);\n }\n }\n\n renderImageTile = ({ item, index }) => {\n if (!item) return null;\n\n const selectedIndex = this.state.selected.indexOf(item.uri);\n const selected = selectedIndex !== -1;\n\n return (\n <ImageTile\n selectedItemNumber={selectedIndex + 1}\n item={item}\n index={index}\n selected={selected}\n selectImage={this.selectImage}\n renderSelectedComponent={this.props.renderSelectedComponent}\n style={this.props.itemStyle}\n width={this.props.itemWidth}\n height={this.props.itemHeight}\n isRemote={!this.isLocal()}\n />\n );\n };\n\n renderPreloader = () => this.props.preloaderComponent || <ActivityIndicator size=\"large\" />;\n\n renderEmptyState = () => this.props.emptyStateComponent || null;\n\n renderImages() {\n if (_.isEmpty(this.state.photos) && !this.state.isEmpty) {\n return null;\n }\n return (\n <FlatList\n data={this.state.photos}\n numColumns={this.state.numColumns}\n key={this.state.numColumns}\n renderItem={this.renderImageTile}\n keyExtractor={(_, index) => index}\n onEndReached={() => {\n if (this.isLocal()) this.getPhotos();\n }}\n onEndReachedThreshold={0.5}\n ListEmptyComponent={this.state.isEmpty ? this.renderEmptyState() : this.renderPreloader()}\n initialNumToRender={24}\n getItemLayout={this.getItemLayout}\n />\n );\n }\n\n render() {\n const { hasCameraPermission } = this.state;\n\n if (this.isLocal() && !hasCameraPermission) {\n return this.props.noCameraPermissionComponent || null;\n }\n\n return <View style={[styles.container, this.props.style]}>{this.renderImages()}</View>;\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n"],"mappings":"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"}