@plusscommunities/pluss-core-app 1.4.9 → 1.5.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 (183) 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 +20 -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 +214 -0
  8. package/dist/module/actions/UserActions.js.map +1 -0
  9. package/dist/module/actions/index.js +5 -0
  10. package/dist/module/actions/index.js.map +1 -0
  11. package/dist/module/actions/types.js +14 -0
  12. package/dist/module/actions/types.js.map +1 -0
  13. package/dist/module/apis/analyticsActions.js +20 -0
  14. package/dist/module/apis/analyticsActions.js.map +1 -0
  15. package/dist/module/apis/contactActions.js +27 -0
  16. package/dist/module/apis/contactActions.js.map +1 -0
  17. package/dist/module/apis/eventActions.js +163 -0
  18. package/dist/module/apis/eventActions.js.map +1 -0
  19. package/dist/module/apis/fileActions.js +96 -0
  20. package/dist/module/apis/fileActions.js.map +1 -0
  21. package/dist/module/apis/followerActions.js +38 -0
  22. package/dist/module/apis/followerActions.js.map +1 -0
  23. package/dist/module/apis/index.js +11 -0
  24. package/dist/module/apis/index.js.map +1 -0
  25. package/dist/module/apis/notificationActions.js +60 -0
  26. package/dist/module/apis/notificationActions.js.map +1 -0
  27. package/dist/module/apis/profileActions.js +14 -0
  28. package/dist/module/apis/profileActions.js.map +1 -0
  29. package/dist/module/apis/reactionActions.js +78 -0
  30. package/dist/module/apis/reactionActions.js.map +1 -0
  31. package/dist/module/apis/typeActions.js +15 -0
  32. package/dist/module/apis/typeActions.js.map +1 -0
  33. package/dist/module/apis/userActions.js +104 -0
  34. package/dist/module/apis/userActions.js.map +1 -0
  35. package/{assets → dist/module/assets}/icons/reactions/heart.png +0 -0
  36. package/{assets → dist/module/assets}/icons/reactions/party.png +0 -0
  37. package/{assets → dist/module/assets}/icons/reactions/sad.png +0 -0
  38. package/{assets → dist/module/assets}/icons/reactions/smile.png +0 -0
  39. package/dist/module/colours.js +149 -0
  40. package/dist/module/colours.js.map +1 -0
  41. package/dist/module/components/AddButton.js +45 -0
  42. package/dist/module/components/AddButton.js.map +1 -0
  43. package/dist/module/components/Attachment.js +59 -0
  44. package/dist/module/components/Attachment.js.map +1 -0
  45. package/dist/module/components/AudienceSelectorLauncher.js +70 -0
  46. package/dist/module/components/AudienceSelectorLauncher.js.map +1 -0
  47. package/dist/module/components/AudienceSelectorPage.js +376 -0
  48. package/dist/module/components/AudienceSelectorPage.js.map +1 -0
  49. package/dist/module/components/BackButton.js +62 -0
  50. package/dist/module/components/BackButton.js.map +1 -0
  51. package/dist/module/components/CategoryTabs.js +171 -0
  52. package/dist/module/components/CategoryTabs.js.map +1 -0
  53. package/dist/module/components/CommentReply.js +363 -0
  54. package/dist/module/components/CommentReply.js.map +1 -0
  55. package/dist/module/components/CommentSection.js +785 -0
  56. package/dist/module/components/CommentSection.js.map +1 -0
  57. package/dist/module/components/ConfirmPopup.js +85 -0
  58. package/dist/module/components/ConfirmPopup.js.map +1 -0
  59. package/dist/module/components/ConfirmationPopup.js +77 -0
  60. package/dist/module/components/ConfirmationPopup.js.map +1 -0
  61. package/dist/module/components/DropDownItem.js +82 -0
  62. package/dist/module/components/DropDownItem.js.map +1 -0
  63. package/dist/module/components/DropDownMenu.js +46 -0
  64. package/dist/module/components/DropDownMenu.js.map +1 -0
  65. package/dist/module/components/EmptyStateMain.js +50 -0
  66. package/dist/module/components/EmptyStateMain.js.map +1 -0
  67. package/dist/module/components/EmptyStateWidget.js +52 -0
  68. package/dist/module/components/EmptyStateWidget.js.map +1 -0
  69. package/dist/module/components/FontScaleButton.js +37 -0
  70. package/dist/module/components/FontScaleButton.js.map +1 -0
  71. package/dist/module/components/FontScalePopup.js +77 -0
  72. package/dist/module/components/FontScalePopup.js.map +1 -0
  73. package/dist/module/components/FormCard.js +28 -0
  74. package/dist/module/components/FormCard.js.map +1 -0
  75. package/dist/module/components/FormCardSection.js +240 -0
  76. package/dist/module/components/FormCardSection.js.map +1 -0
  77. package/dist/module/components/FormCardSectionOptionLauncher.js +77 -0
  78. package/dist/module/components/FormCardSectionOptionLauncher.js.map +1 -0
  79. package/dist/module/components/FormattedText.js +145 -0
  80. package/dist/module/components/FormattedText.js.map +1 -0
  81. package/dist/module/components/GenericInput.js +161 -0
  82. package/dist/module/components/GenericInput.js.map +1 -0
  83. package/dist/module/components/GenericInputSection.js +174 -0
  84. package/dist/module/components/GenericInputSection.js.map +1 -0
  85. package/dist/module/components/Header.js +491 -0
  86. package/dist/module/components/Header.js.map +1 -0
  87. package/dist/module/components/ImagePopup.js +257 -0
  88. package/dist/module/components/ImagePopup.js.map +1 -0
  89. package/dist/module/components/ImageUploadProgress.js +72 -0
  90. package/dist/module/components/ImageUploadProgress.js.map +1 -0
  91. package/dist/module/components/ImageUploader.js +850 -0
  92. package/dist/module/components/ImageUploader.js.map +1 -0
  93. package/dist/module/components/InlineButton.js +72 -0
  94. package/dist/module/components/InlineButton.js.map +1 -0
  95. package/dist/module/components/Input.js +164 -0
  96. package/dist/module/components/Input.js.map +1 -0
  97. package/dist/module/components/LoadingCircles.js +224 -0
  98. package/dist/module/components/LoadingCircles.js.map +1 -0
  99. package/dist/module/components/LoadingIndicator.js +95 -0
  100. package/dist/module/components/LoadingIndicator.js.map +1 -0
  101. package/dist/module/components/LoadingStateWidget.js +51 -0
  102. package/dist/module/components/LoadingStateWidget.js.map +1 -0
  103. package/dist/module/components/MediaPlayer.js +440 -0
  104. package/dist/module/components/MediaPlayer.js.map +1 -0
  105. package/dist/module/components/MiddlePopup.js +46 -0
  106. package/dist/module/components/MiddlePopup.js.map +1 -0
  107. package/dist/module/components/PDFPopup.js +188 -0
  108. package/dist/module/components/PDFPopup.js.map +1 -0
  109. package/dist/module/components/PlussChat.js +997 -0
  110. package/dist/module/components/PlussChat.js.map +1 -0
  111. package/dist/module/components/PlussChatMessage.js +204 -0
  112. package/dist/module/components/PlussChatMessage.js.map +1 -0
  113. package/dist/module/components/PlussChatTime.js +66 -0
  114. package/dist/module/components/PlussChatTime.js.map +1 -0
  115. package/dist/module/components/Popup.js +138 -0
  116. package/dist/module/components/Popup.js.map +1 -0
  117. package/dist/module/components/PopupMenu.js +128 -0
  118. package/dist/module/components/PopupMenu.js.map +1 -0
  119. package/dist/module/components/PositionedImage.js +333 -0
  120. package/dist/module/components/PositionedImage.js.map +1 -0
  121. package/dist/module/components/ProfilePic.js +119 -0
  122. package/dist/module/components/ProfilePic.js.map +1 -0
  123. package/dist/module/components/RadioButton.js +84 -0
  124. package/dist/module/components/RadioButton.js.map +1 -0
  125. package/dist/module/components/Reaction.js +129 -0
  126. package/dist/module/components/Reaction.js.map +1 -0
  127. package/dist/module/components/Reactions.js +84 -0
  128. package/dist/module/components/Reactions.js.map +1 -0
  129. package/dist/module/components/SharingTools.js +162 -0
  130. package/dist/module/components/SharingTools.js.map +1 -0
  131. package/dist/module/components/Spinner.js +25 -0
  132. package/dist/module/components/Spinner.js.map +1 -0
  133. package/dist/module/components/StickyFooter.js +37 -0
  134. package/dist/module/components/StickyFooter.js.map +1 -0
  135. package/dist/module/components/TextStyle.js +34 -0
  136. package/dist/module/components/TextStyle.js.map +1 -0
  137. package/dist/module/components/Toggle.js +70 -0
  138. package/dist/module/components/Toggle.js.map +1 -0
  139. package/dist/module/components/TouchableSearchBar.js +73 -0
  140. package/dist/module/components/TouchableSearchBar.js.map +1 -0
  141. package/dist/module/components/UserListPopup.js +146 -0
  142. package/dist/module/components/UserListPopup.js.map +1 -0
  143. package/dist/module/components/UserListing.js +291 -0
  144. package/dist/module/components/UserListing.js.map +1 -0
  145. package/dist/module/components/VideoPopup.js +123 -0
  146. package/dist/module/components/VideoPopup.js.map +1 -0
  147. package/dist/module/components/WarningPopup.js +87 -0
  148. package/dist/module/components/WarningPopup.js.map +1 -0
  149. package/dist/module/components/expo-image-picker-multiple/ImageBrowser.js +325 -0
  150. package/dist/module/components/expo-image-picker-multiple/ImageBrowser.js.map +1 -0
  151. package/dist/module/components/expo-image-picker-multiple/ImageTile.js +123 -0
  152. package/dist/module/components/expo-image-picker-multiple/ImageTile.js.map +1 -0
  153. package/dist/module/components/index.js +53 -0
  154. package/dist/module/components/index.js.map +1 -0
  155. package/dist/module/components/react-native-expo-image-cropper/ExpoImageManipulator.js +416 -0
  156. package/dist/module/components/react-native-expo-image-cropper/ExpoImageManipulator.js.map +1 -0
  157. package/dist/module/components/react-native-expo-image-cropper/ImageCropOverlay.js +405 -0
  158. package/dist/module/components/react-native-expo-image-cropper/ImageCropOverlay.js.map +1 -0
  159. package/dist/module/config.js +27 -0
  160. package/dist/module/config.js.map +1 -0
  161. package/dist/module/constants.js +16 -0
  162. package/dist/module/constants.js.map +1 -0
  163. package/dist/module/fonts/index.js +2 -0
  164. package/dist/module/fonts/index.js.map +1 -0
  165. package/dist/module/fonts/pluss60-icons.js +5 -0
  166. package/dist/module/fonts/pluss60-icons.js.map +1 -0
  167. package/dist/module/fonts/pluss60-icons.json +1097 -0
  168. package/dist/module/helper.js +436 -0
  169. package/dist/module/helper.js.map +1 -0
  170. package/dist/module/index.js +13 -0
  171. package/dist/module/index.js.map +1 -0
  172. package/dist/module/session.js +54 -0
  173. package/dist/module/session.js.map +1 -0
  174. package/dist/module/styles.js +67 -0
  175. package/dist/module/styles.js.map +1 -0
  176. package/package.json +22 -5
  177. package/src/assets/icons/reactions/heart.png +0 -0
  178. package/src/assets/icons/reactions/party.png +0 -0
  179. package/src/assets/icons/reactions/sad.png +0 -0
  180. package/src/assets/icons/reactions/smile.png +0 -0
  181. package/src/components/CommentReply.js +0 -2
  182. package/src/constants.js +4 -4
  183. package/src/helper.js +4 -4
@@ -0,0 +1,123 @@
1
+ import React from 'react';
2
+ import { Dimensions, ImageBackground, TouchableHighlight, View, Text, StyleSheet } from 'react-native';
3
+ import * as MediaLibrary from 'expo-media-library';
4
+ import { Icon } from 'react-native-elements';
5
+ import moment from 'moment';
6
+ import { getThumb300 } from '../../helper';
7
+ const screenWidth = Dimensions.get('window').width;
8
+
9
+ class ImageTile extends React.PureComponent {
10
+ renderVideoOverlay() {
11
+ const {
12
+ item
13
+ } = this.props;
14
+ if (item.mediaType !== MediaLibrary.MediaType.video) return null;
15
+ let durationText = '';
16
+
17
+ if (item.duration) {
18
+ const duration = moment.duration(item.duration, 'seconds').asMilliseconds();
19
+ durationText = moment.utc(duration).format('HH:mm:ss');
20
+ }
21
+
22
+ return /*#__PURE__*/React.createElement(View, {
23
+ style: styles.defaultVideoOverlay
24
+ }, /*#__PURE__*/React.createElement(Icon, {
25
+ name: "video-camera",
26
+ type: "font-awesome",
27
+ iconStyle: styles.videoIcon,
28
+ style: styles.videoIconContainer
29
+ }), /*#__PURE__*/React.createElement(Text, {
30
+ style: styles.videoDurationText
31
+ }, durationText));
32
+ }
33
+
34
+ renderSelectedOverlay() {
35
+ const {
36
+ selected,
37
+ selectedItemNumber,
38
+ renderSelectedComponent
39
+ } = this.props;
40
+ if (!selected) return null;
41
+ if (renderSelectedComponent) return renderSelectedComponent(selectedItemNumber);
42
+ return /*#__PURE__*/React.createElement(View, {
43
+ style: [styles.defaultSelectedOverlay, {
44
+ opacity: selected ? 0.5 : 1
45
+ }]
46
+ });
47
+ }
48
+
49
+ render() {
50
+ const {
51
+ item,
52
+ index,
53
+ selectImage,
54
+ width,
55
+ height,
56
+ style,
57
+ isRemote
58
+ } = this.props;
59
+ if (!item) return null;
60
+ const actualWidth = width || screenWidth / 4;
61
+ const actualHeight = height || screenWidth / 4;
62
+ const uri = isRemote ? getThumb300(item.uri) : item.uri;
63
+ return /*#__PURE__*/React.createElement(TouchableHighlight, {
64
+ underlayColor: "transparent",
65
+ onPress: () => selectImage(item, index)
66
+ }, /*#__PURE__*/React.createElement(View, {
67
+ style: [{
68
+ width: actualWidth,
69
+ height: actualHeight
70
+ }, style]
71
+ }, /*#__PURE__*/React.createElement(View, {
72
+ style: styles.imageContainer
73
+ }, /*#__PURE__*/React.createElement(ImageBackground, {
74
+ style: styles.imageBackground,
75
+ source: {
76
+ uri
77
+ }
78
+ }, this.renderVideoOverlay(), this.renderSelectedOverlay()))));
79
+ }
80
+
81
+ }
82
+
83
+ const styles = StyleSheet.create({
84
+ imageContainer: {
85
+ flex: 1,
86
+ alignItems: 'center',
87
+ justifyContent: 'center'
88
+ },
89
+ imageBackground: {
90
+ width: '100%',
91
+ height: '100%'
92
+ },
93
+ defaultSelectedOverlay: {
94
+ flex: 1,
95
+ backgroundColor: '#000'
96
+ },
97
+ defaultVideoOverlay: {
98
+ position: 'absolute',
99
+ left: 3,
100
+ bottom: 3,
101
+ right: 3,
102
+ flexDirection: 'row',
103
+ justifyContent: 'space-between',
104
+ alignItems: 'center'
105
+ },
106
+ videoIconContainer: {
107
+ flex: 1,
108
+ paddingRight: 8,
109
+ paddingBottom: 1
110
+ },
111
+ videoIcon: {
112
+ fontSize: 12,
113
+ color: '#fff',
114
+ textAlign: 'right'
115
+ },
116
+ videoDurationText: {
117
+ fontFamily: 'sf-semibold',
118
+ fontSize: 12,
119
+ color: '#fff'
120
+ }
121
+ });
122
+ export default ImageTile;
123
+ //# sourceMappingURL=ImageTile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ImageTile.js"],"names":["React","Dimensions","ImageBackground","TouchableHighlight","View","Text","StyleSheet","MediaLibrary","Icon","moment","getThumb300","screenWidth","get","width","ImageTile","PureComponent","renderVideoOverlay","item","props","mediaType","MediaType","video","durationText","duration","asMilliseconds","utc","format","styles","defaultVideoOverlay","videoIcon","videoIconContainer","videoDurationText","renderSelectedOverlay","selected","selectedItemNumber","renderSelectedComponent","defaultSelectedOverlay","opacity","render","index","selectImage","height","style","isRemote","actualWidth","actualHeight","uri","imageContainer","imageBackground","create","flex","alignItems","justifyContent","backgroundColor","position","left","bottom","right","flexDirection","paddingRight","paddingBottom","fontSize","color","textAlign","fontFamily"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Dimensions, ImageBackground, TouchableHighlight, View, Text, StyleSheet } from 'react-native';\nimport * as MediaLibrary from 'expo-media-library';\nimport { Icon } from 'react-native-elements';\nimport moment from 'moment';\nimport { getThumb300 } from '../../helper';\n\nconst screenWidth = Dimensions.get('window').width;\n\nclass ImageTile extends React.PureComponent {\n renderVideoOverlay() {\n const { item } = this.props;\n if (item.mediaType !== MediaLibrary.MediaType.video) return null;\n\n let durationText = '';\n if (item.duration) {\n const duration = moment.duration(item.duration, 'seconds').asMilliseconds();\n durationText = moment.utc(duration).format('HH:mm:ss');\n }\n return (\n <View style={styles.defaultVideoOverlay}>\n <Icon name=\"video-camera\" type=\"font-awesome\" iconStyle={styles.videoIcon} style={styles.videoIconContainer} />\n <Text style={styles.videoDurationText}>{durationText}</Text>\n </View>\n );\n }\n\n renderSelectedOverlay() {\n const { selected, selectedItemNumber, renderSelectedComponent } = this.props;\n if (!selected) return null;\n if (renderSelectedComponent) return renderSelectedComponent(selectedItemNumber);\n return <View style={[styles.defaultSelectedOverlay, { opacity: selected ? 0.5 : 1 }]} />;\n }\n\n render() {\n const { item, index, selectImage, width, height, style, isRemote } = this.props;\n if (!item) return null;\n\n const actualWidth = width || screenWidth / 4;\n const actualHeight = height || screenWidth / 4;\n const uri = isRemote ? getThumb300(item.uri) : item.uri;\n\n return (\n <TouchableHighlight underlayColor=\"transparent\" onPress={() => selectImage(item, index)}>\n <View style={[{ width: actualWidth, height: actualHeight }, style]}>\n <View style={styles.imageContainer}>\n <ImageBackground style={styles.imageBackground} source={{ uri }}>\n {this.renderVideoOverlay()}\n {this.renderSelectedOverlay()}\n </ImageBackground>\n </View>\n </View>\n </TouchableHighlight>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n imageContainer: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n imageBackground: {\n width: '100%',\n height: '100%',\n },\n defaultSelectedOverlay: {\n flex: 1,\n backgroundColor: '#000',\n },\n defaultVideoOverlay: {\n position: 'absolute',\n left: 3,\n bottom: 3,\n right: 3,\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n videoIconContainer: {\n flex: 1,\n paddingRight: 8,\n paddingBottom: 1,\n },\n videoIcon: {\n fontSize: 12,\n color: '#fff',\n textAlign: 'right',\n },\n videoDurationText: {\n fontFamily: 'sf-semibold',\n fontSize: 12,\n color: '#fff',\n },\n});\n\nexport default ImageTile;\n"]}
@@ -0,0 +1,53 @@
1
+ export * from './InlineButton';
2
+ export * from './FormCard';
3
+ export * from './FormCardSection';
4
+ export * from './FormCardSectionOptionLauncher';
5
+ export * from './ProfilePic';
6
+ export * from './Spinner';
7
+ export * from './LoadingCircles';
8
+ export * from './Popup';
9
+ export * from './ImagePopup';
10
+ export * from './VideoPopup';
11
+ export * from './SharingTools';
12
+ export * from './MiddlePopup';
13
+ export * from './ConfirmPopup';
14
+ export * from './ConfirmationPopup';
15
+ export * from './CommentSection';
16
+ export * from './CommentReply';
17
+ export * from './PopupMenu';
18
+ export * from './AddButton';
19
+ export * from './Attachment';
20
+ export * from './GenericInputSection';
21
+ export * from './GenericInput';
22
+ export * from './RadioButton';
23
+ export * from './PDFPopup';
24
+ export * from './TextStyle';
25
+ export * from './Toggle';
26
+ export * from './Input';
27
+ export * from './StickyFooter';
28
+ export * from './CategoryTabs';
29
+ export * from './DropDownMenu';
30
+ export * from './DropDownItem';
31
+ export * from './BackButton';
32
+ export * from './Reaction';
33
+ export * from './TouchableSearchBar';
34
+ export * from './WarningPopup';
35
+ export * from './FontScalePopup';
36
+ export * from './FontScaleButton';
37
+ export * from './UserListPopup';
38
+ export * from './Reactions';
39
+ export * from './AudienceSelectorLauncher';
40
+ export { default as EmptyStateWidget } from './EmptyStateWidget';
41
+ export { default as EmptyStateMain } from './EmptyStateMain';
42
+ export { default as LoadingStateWidget } from './LoadingStateWidget';
43
+ export { default as Header } from './Header';
44
+ export { default as LoadingIndicator } from './LoadingIndicator';
45
+ export { default as ImageUploader } from './ImageUploader';
46
+ export { default as ImageUploadProgress } from './ImageUploadProgress';
47
+ export { default as UserListing } from './UserListing';
48
+ export { default as PlussChat } from './PlussChat';
49
+ export { default as PositionedImage } from './PositionedImage';
50
+ export { default as FormattedText } from './FormattedText';
51
+ export { default as MediaPlayer } from './MediaPlayer';
52
+ export { default as AudienceSelectorPage } from './AudienceSelectorPage';
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.js"],"names":["default","EmptyStateWidget","EmptyStateMain","LoadingStateWidget","Header","LoadingIndicator","ImageUploader","ImageUploadProgress","UserListing","PlussChat","PositionedImage","FormattedText","MediaPlayer","AudienceSelectorPage"],"mappings":"AAAA,cAAc,gBAAd;AACA,cAAc,YAAd;AACA,cAAc,mBAAd;AACA,cAAc,iCAAd;AACA,cAAc,cAAd;AACA,cAAc,WAAd;AACA,cAAc,kBAAd;AACA,cAAc,SAAd;AACA,cAAc,cAAd;AACA,cAAc,cAAd;AACA,cAAc,gBAAd;AACA,cAAc,eAAd;AACA,cAAc,gBAAd;AACA,cAAc,qBAAd;AACA,cAAc,kBAAd;AACA,cAAc,gBAAd;AACA,cAAc,aAAd;AACA,cAAc,aAAd;AACA,cAAc,cAAd;AACA,cAAc,uBAAd;AACA,cAAc,gBAAd;AACA,cAAc,eAAd;AACA,cAAc,YAAd;AACA,cAAc,aAAd;AACA,cAAc,UAAd;AACA,cAAc,SAAd;AACA,cAAc,gBAAd;AACA,cAAc,gBAAd;AACA,cAAc,gBAAd;AACA,cAAc,gBAAd;AACA,cAAc,cAAd;AACA,cAAc,YAAd;AACA,cAAc,sBAAd;AACA,cAAc,gBAAd;AACA,cAAc,kBAAd;AACA,cAAc,mBAAd;AACA,cAAc,iBAAd;AACA,cAAc,aAAd;AACA,cAAc,4BAAd;AACA,SAASA,OAAO,IAAIC,gBAApB,QAA4C,oBAA5C;AACA,SAASD,OAAO,IAAIE,cAApB,QAA0C,kBAA1C;AACA,SAASF,OAAO,IAAIG,kBAApB,QAA8C,sBAA9C;AACA,SAASH,OAAO,IAAII,MAApB,QAAkC,UAAlC;AACA,SAASJ,OAAO,IAAIK,gBAApB,QAA4C,oBAA5C;AACA,SAASL,OAAO,IAAIM,aAApB,QAAyC,iBAAzC;AACA,SAASN,OAAO,IAAIO,mBAApB,QAA+C,uBAA/C;AACA,SAASP,OAAO,IAAIQ,WAApB,QAAuC,eAAvC;AACA,SAASR,OAAO,IAAIS,SAApB,QAAqC,aAArC;AACA,SAAST,OAAO,IAAIU,eAApB,QAA2C,mBAA3C;AACA,SAASV,OAAO,IAAIW,aAApB,QAAyC,iBAAzC;AACA,SAASX,OAAO,IAAIY,WAApB,QAAuC,eAAvC;AACA,SAASZ,OAAO,IAAIa,oBAApB,QAAgD,wBAAhD","sourcesContent":["export * from './InlineButton';\nexport * from './FormCard';\nexport * from './FormCardSection';\nexport * from './FormCardSectionOptionLauncher';\nexport * from './ProfilePic';\nexport * from './Spinner';\nexport * from './LoadingCircles';\nexport * from './Popup';\nexport * from './ImagePopup';\nexport * from './VideoPopup';\nexport * from './SharingTools';\nexport * from './MiddlePopup';\nexport * from './ConfirmPopup';\nexport * from './ConfirmationPopup';\nexport * from './CommentSection';\nexport * from './CommentReply';\nexport * from './PopupMenu';\nexport * from './AddButton';\nexport * from './Attachment';\nexport * from './GenericInputSection';\nexport * from './GenericInput';\nexport * from './RadioButton';\nexport * from './PDFPopup';\nexport * from './TextStyle';\nexport * from './Toggle';\nexport * from './Input';\nexport * from './StickyFooter';\nexport * from './CategoryTabs';\nexport * from './DropDownMenu';\nexport * from './DropDownItem';\nexport * from './BackButton';\nexport * from './Reaction';\nexport * from './TouchableSearchBar';\nexport * from './WarningPopup';\nexport * from './FontScalePopup';\nexport * from './FontScaleButton';\nexport * from './UserListPopup';\nexport * from './Reactions';\nexport * from './AudienceSelectorLauncher';\nexport { default as EmptyStateWidget } from './EmptyStateWidget';\nexport { default as EmptyStateMain } from './EmptyStateMain';\nexport { default as LoadingStateWidget } from './LoadingStateWidget';\nexport { default as Header } from './Header';\nexport { default as LoadingIndicator } from './LoadingIndicator';\nexport { default as ImageUploader } from './ImageUploader';\nexport { default as ImageUploadProgress } from './ImageUploadProgress';\nexport { default as UserListing } from './UserListing';\nexport { default as PlussChat } from './PlussChat';\nexport { default as PositionedImage } from './PositionedImage';\nexport { default as FormattedText } from './FormattedText';\nexport { default as MediaPlayer } from './MediaPlayer';\nexport { default as AudienceSelectorPage } from './AudienceSelectorPage';\n"]}
@@ -0,0 +1,416 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+
3
+ import React, { Component } from 'react';
4
+ import { Dimensions, Image, ScrollView, Modal, View, Text, SafeAreaView, TouchableOpacity, StyleSheet, Platform, LogBox } from 'react-native';
5
+ import * as ImageManipulator from 'expo-image-manipulator';
6
+ import PropTypes from 'prop-types';
7
+ import AutoHeightImage from 'react-native-auto-height-image';
8
+ import { isIphoneX, getStatusBarHeight } from 'react-native-iphone-x-helper';
9
+ import ImageCropOverlay from './ImageCropOverlay';
10
+ const {
11
+ width
12
+ } = Dimensions.get('window');
13
+ const topMargin = getStatusBarHeight() + (Platform.OS === 'ios' ? 50 : 20);
14
+ LogBox.ignoreLogs(['componentWillReceiveProps', 'componentWillUpdate', 'componentWillMount']);
15
+ LogBox.ignoreLogs(['Warning: componentWillMount is deprecated', 'Warning: componentWillReceiveProps is deprecated', 'Module RCTImageLoader requires']);
16
+
17
+ class ExpoImageManipulator extends Component {
18
+ constructor(props) {
19
+ var _this;
20
+
21
+ super(props);
22
+ _this = this;
23
+
24
+ _defineProperty(this, "onToggleModal", () => {
25
+ this.props.onToggleModal();
26
+ this.setState({
27
+ cropMode: false
28
+ });
29
+ });
30
+
31
+ _defineProperty(this, "onCropImage", function () {
32
+ let callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
33
+
34
+ _this.setState({
35
+ processing: true
36
+ });
37
+
38
+ const {
39
+ uri
40
+ } = _this.state;
41
+ Image.getSize(uri, async (actualWidth, actualHeight) => {
42
+ let cropObj = _this.getCropBounds(actualWidth, actualHeight);
43
+
44
+ if (cropObj.height > 0 && cropObj.width > 0) {
45
+ let uriToCrop = uri;
46
+ const {
47
+ uri: uriCroped,
48
+ base64,
49
+ width: croppedWidth,
50
+ height: croppedHeight
51
+ } = await _this.crop(cropObj, uriToCrop);
52
+ _this.actualSize.width = croppedWidth;
53
+ _this.actualSize.height = croppedHeight;
54
+
55
+ _this.setState({
56
+ uri: uriCroped,
57
+ base64,
58
+ cropMode: false,
59
+ processing: false
60
+ }, () => {
61
+ if (callback) callback();
62
+ });
63
+ } else {
64
+ _this.setState({
65
+ cropMode: false,
66
+ processing: false
67
+ }, () => {
68
+ if (callback) callback();
69
+ });
70
+ }
71
+ });
72
+ });
73
+
74
+ _defineProperty(this, "onHandleScroll", event => {
75
+ this.scrollOffset = event.nativeEvent.contentOffset.y;
76
+ });
77
+
78
+ _defineProperty(this, "getCropBounds", (actualWidth, actualHeight) => {
79
+ let imageRatio = actualHeight / actualWidth;
80
+ var originalHeight = Dimensions.get('window').height - 64;
81
+
82
+ if (isIphoneX()) {
83
+ originalHeight = Dimensions.get('window').height - 122;
84
+ }
85
+
86
+ let renderedImageWidth = imageRatio < originalHeight / width ? width : originalHeight / imageRatio;
87
+ let renderedImageHeight = imageRatio < originalHeight / width ? width * imageRatio : originalHeight;
88
+ let renderedImageY = (originalHeight - renderedImageHeight) / 2.0;
89
+ let renderedImageX = (width - renderedImageWidth) / 2.0;
90
+ const renderImageObj = {
91
+ left: renderedImageX,
92
+ top: renderedImageY,
93
+ width: renderedImageWidth,
94
+ height: renderedImageHeight
95
+ };
96
+ const cropOverlayObj = {
97
+ left: this.currentPos.left,
98
+ top: this.currentPos.top,
99
+ width: this.currentSize.width,
100
+ height: this.currentSize.height
101
+ };
102
+ var intersectAreaObj = {};
103
+ let x = Math.max(renderImageObj.left, cropOverlayObj.left);
104
+ let num1 = Math.min(renderImageObj.left + renderImageObj.width, cropOverlayObj.left + cropOverlayObj.width);
105
+ let y = Math.max(renderImageObj.top, cropOverlayObj.top);
106
+ let num2 = Math.min(renderImageObj.top + renderImageObj.height, cropOverlayObj.top + cropOverlayObj.height);
107
+ if (num1 >= x && num2 >= y) intersectAreaObj = {
108
+ originX: (x - renderedImageX) * (actualWidth / renderedImageWidth),
109
+ originY: (y - renderedImageY) * (actualWidth / renderedImageWidth),
110
+ width: (num1 - x) * (actualWidth / renderedImageWidth),
111
+ height: (num2 - y) * (actualWidth / renderedImageWidth)
112
+ };else {
113
+ intersectAreaObj = {
114
+ originX: x - renderedImageX,
115
+ originY: y - renderedImageY,
116
+ width: 0,
117
+ height: 0
118
+ };
119
+ }
120
+ return intersectAreaObj;
121
+ });
122
+
123
+ _defineProperty(this, "crop", async (cropObj, uri) => {
124
+ const {
125
+ saveOptions
126
+ } = this.props;
127
+
128
+ if (cropObj.height > 0 && cropObj.width > 0) {
129
+ const manipResult = await ImageManipulator.manipulateAsync(uri, [{
130
+ crop: cropObj
131
+ }], saveOptions);
132
+ return manipResult;
133
+ }
134
+
135
+ return {
136
+ uri: null,
137
+ base64: null
138
+ };
139
+ });
140
+
141
+ _defineProperty(this, "calculateMaxSizes", event => {
142
+ let w1 = event.nativeEvent.layout.width || 100;
143
+ let h1 = event.nativeEvent.layout.height || 100;
144
+
145
+ if (this.state.squareAspect) {
146
+ if (w1 < h1) h1 = w1;else w1 = h1;
147
+ }
148
+
149
+ this.maxSizes.width = w1;
150
+ this.maxSizes.height = h1;
151
+ });
152
+
153
+ const {
154
+ squareAspect
155
+ } = this.props;
156
+ this.state = {
157
+ cropMode: false,
158
+ processing: false,
159
+ squareAspect
160
+ };
161
+ this.scrollOffset = 0;
162
+ this.currentPos = {
163
+ left: 0,
164
+ top: 0
165
+ };
166
+ this.currentSize = {
167
+ width: 0,
168
+ height: 0
169
+ };
170
+ this.maxSizes = {
171
+ width: 0,
172
+ height: 0
173
+ };
174
+ this.actualSize = {
175
+ width: 0,
176
+ height: 0
177
+ };
178
+ }
179
+
180
+ async componentDidMount() {
181
+ await this.onConvertImageToEditableSize(); // Set cropping by default
182
+
183
+ this.setState({
184
+ cropMode: true
185
+ });
186
+ }
187
+
188
+ async onConvertImageToEditableSize() {
189
+ const {
190
+ photo: {
191
+ uri: rawUri
192
+ }
193
+ } = this.props;
194
+ const {
195
+ uri,
196
+ width,
197
+ height
198
+ } = await ImageManipulator.manipulateAsync(rawUri, [{
199
+ resize: {
200
+ width: 1080
201
+ }
202
+ }]);
203
+ this.setState({
204
+ uri
205
+ });
206
+ this.actualSize.width = width;
207
+ this.actualSize.height = height;
208
+ }
209
+
210
+ // eslint-disable-next-line camelcase
211
+ async UNSAFE_componentWillReceiveProps() {
212
+ await this.onConvertImageToEditableSize();
213
+ }
214
+
215
+ render() {
216
+ const {
217
+ isVisible,
218
+ onPictureChoosed
219
+ } = this.props;
220
+ const {
221
+ uri,
222
+ base64,
223
+ cropMode,
224
+ processing
225
+ } = this.state;
226
+ let imageRatio = this.actualSize.height / this.actualSize.width;
227
+ var originalHeight = Dimensions.get('window').height - 64;
228
+
229
+ if (isIphoneX()) {
230
+ originalHeight = Dimensions.get('window').height - 122;
231
+ }
232
+
233
+ let cropRatio = originalHeight / width;
234
+ let cropWidth = imageRatio < cropRatio ? width : originalHeight / imageRatio;
235
+ let cropHeight = imageRatio < cropRatio ? width * imageRatio : originalHeight;
236
+ let cropInitialTop = (originalHeight - cropHeight) / 2.0;
237
+ let cropInitialLeft = (width - cropWidth) / 2.0;
238
+
239
+ if (this.currentSize.width == 0 && cropMode) {
240
+ this.currentSize.width = cropWidth;
241
+ this.currentSize.height = cropHeight;
242
+ this.currentPos.top = cropInitialTop;
243
+ this.currentPos.left = cropInitialLeft;
244
+ }
245
+
246
+ return /*#__PURE__*/React.createElement(Modal, {
247
+ animationType: "slide",
248
+ transparent: true,
249
+ visible: isVisible,
250
+ hardwareAccelerated: true,
251
+ onRequestClose: () => {
252
+ this.onToggleModal();
253
+ }
254
+ }, uri !== undefined ? /*#__PURE__*/React.createElement(View, {
255
+ style: styles.container
256
+ }, /*#__PURE__*/React.createElement(SafeAreaView, {
257
+ style: [{
258
+ width
259
+ }, styles.headerContainer]
260
+ }, !cropMode ? /*#__PURE__*/React.createElement(View, {
261
+ style: [styles.headerButtonContainer, {
262
+ justifyContent: 'flex-end'
263
+ }]
264
+ }, /*#__PURE__*/React.createElement(TouchableOpacity, {
265
+ onPress: () => {
266
+ onPictureChoosed({
267
+ uri,
268
+ base64
269
+ });
270
+ this.onToggleModal();
271
+ },
272
+ style: styles.headerButton
273
+ }, /*#__PURE__*/React.createElement(Text, {
274
+ style: styles.headerButtonText
275
+ }, 'Done'))) : /*#__PURE__*/React.createElement(View, {
276
+ style: styles.headerButtonContainer
277
+ }, /*#__PURE__*/React.createElement(TouchableOpacity, {
278
+ onPress: this.onToggleModal,
279
+ style: styles.headerButton
280
+ }, /*#__PURE__*/React.createElement(Text, {
281
+ style: styles.headerButtonText
282
+ }, 'Cancel')), /*#__PURE__*/React.createElement(TouchableOpacity, {
283
+ onPress: () => {
284
+ this.onCropImage(() => {
285
+ onPictureChoosed({
286
+ uri: this.state.uri,
287
+ base64: this.state.base64
288
+ });
289
+ this.onToggleModal();
290
+ });
291
+ },
292
+ style: styles.headerButton
293
+ }, /*#__PURE__*/React.createElement(Text, {
294
+ style: styles.headerButtonText
295
+ }, processing ? 'Processing' : 'Done')))), /*#__PURE__*/React.createElement(View, {
296
+ style: [styles.contentContainer, {
297
+ width: Dimensions.get('window').width
298
+ }]
299
+ }, /*#__PURE__*/React.createElement(ScrollView, {
300
+ style: {
301
+ position: 'relative',
302
+ flex: 1
303
+ },
304
+ contentContainerStyle: {
305
+ backgroundColor: 'black'
306
+ },
307
+ maximumZoomScale: 5,
308
+ minimumZoomScale: 0.5,
309
+ onScroll: this.onHandleScroll,
310
+ bounces: false,
311
+ showsHorizontalScrollIndicator: false,
312
+ showsVerticalScrollIndicator: false,
313
+ ref: c => this.scrollView = c,
314
+ scrollEventThrottle: 16,
315
+ scrollEnabled: false,
316
+ pinchGestureEnabled: false
317
+ }, /*#__PURE__*/React.createElement(AutoHeightImage, {
318
+ style: {
319
+ backgroundColor: 'black'
320
+ },
321
+ source: {
322
+ uri
323
+ },
324
+ resizeMode: imageRatio >= 1 ? 'contain' : 'contain',
325
+ width: width,
326
+ height: originalHeight,
327
+ onLayout: this.calculateMaxSizes
328
+ }), !!cropMode && /*#__PURE__*/React.createElement(ImageCropOverlay, {
329
+ onLayoutChanged: (top, left, width, height) => {
330
+ this.currentSize.width = width;
331
+ this.currentSize.height = height;
332
+ this.currentPos.top = top;
333
+ this.currentPos.left = left;
334
+ },
335
+ initialWidth: cropWidth,
336
+ initialHeight: cropHeight,
337
+ initialTop: cropInitialTop,
338
+ initialLeft: cropInitialLeft,
339
+ minHeight: 100,
340
+ minWidth: 100,
341
+ topMargin: topMargin
342
+ })))) : /*#__PURE__*/React.createElement(View, {
343
+ style: styles.container
344
+ }, /*#__PURE__*/React.createElement(Text, {
345
+ style: styles.prepareMessageText
346
+ }, "Preparing..."))); // }
347
+ }
348
+
349
+ }
350
+
351
+ const styles = StyleSheet.create({
352
+ headerContainer: {
353
+ flexDirection: 'row',
354
+ backgroundColor: 'black',
355
+ justifyContent: 'space-between'
356
+ },
357
+ headerButtonContainer: {
358
+ flex: 1,
359
+ flexDirection: 'row',
360
+ justifyContent: 'space-between'
361
+ },
362
+ headerButton: {
363
+ marginHorizontal: 10,
364
+ width: 60,
365
+ height: 40,
366
+ alignItems: 'center',
367
+ justifyContent: 'center'
368
+ },
369
+ headerButtonText: {
370
+ fontWeight: '500',
371
+ color: 'white',
372
+ fontSize: 18
373
+ },
374
+ contentContainer: {
375
+ flex: 1,
376
+ backgroundColor: 'black'
377
+ },
378
+ container: {
379
+ flex: 1,
380
+ backgroundColor: '#000d',
381
+ alignItems: 'center',
382
+ justifyContent: 'center'
383
+ },
384
+ prepareMessageText: {
385
+ fontFamily: 'sf-bold',
386
+ fontSize: 20,
387
+ color: '#fff'
388
+ }
389
+ });
390
+ export default ExpoImageManipulator;
391
+ ExpoImageManipulator.defaultProps = {
392
+ onPictureChoosed: _ref => {
393
+ let {
394
+ uri,
395
+ base64
396
+ } = _ref;
397
+ return console.log('URI:', uri, base64);
398
+ },
399
+ dragVelocity: 100,
400
+ resizeVelocity: 50,
401
+ saveOptions: {
402
+ compress: 1,
403
+ format: ImageManipulator.SaveFormat.PNG,
404
+ base64: false
405
+ }
406
+ };
407
+ ExpoImageManipulator.propTypes = {
408
+ isVisible: PropTypes.bool.isRequired,
409
+ onPictureChoosed: PropTypes.func,
410
+ saveOptions: PropTypes.object,
411
+ photo: PropTypes.object.isRequired,
412
+ onToggleModal: PropTypes.func.isRequired,
413
+ dragVelocity: PropTypes.number,
414
+ resizeVelocity: PropTypes.number
415
+ };
416
+ //# sourceMappingURL=ExpoImageManipulator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ExpoImageManipulator.js"],"names":["React","Component","Dimensions","Image","ScrollView","Modal","View","Text","SafeAreaView","TouchableOpacity","StyleSheet","Platform","LogBox","ImageManipulator","PropTypes","AutoHeightImage","isIphoneX","getStatusBarHeight","ImageCropOverlay","width","get","topMargin","OS","ignoreLogs","ExpoImageManipulator","constructor","props","onToggleModal","setState","cropMode","callback","processing","uri","state","getSize","actualWidth","actualHeight","cropObj","getCropBounds","height","uriToCrop","uriCroped","base64","croppedWidth","croppedHeight","crop","actualSize","event","scrollOffset","nativeEvent","contentOffset","y","imageRatio","originalHeight","renderedImageWidth","renderedImageHeight","renderedImageY","renderedImageX","renderImageObj","left","top","cropOverlayObj","currentPos","currentSize","intersectAreaObj","x","Math","max","num1","min","num2","originX","originY","saveOptions","manipResult","manipulateAsync","w1","layout","h1","squareAspect","maxSizes","componentDidMount","onConvertImageToEditableSize","photo","rawUri","resize","UNSAFE_componentWillReceiveProps","render","isVisible","onPictureChoosed","cropRatio","cropWidth","cropHeight","cropInitialTop","cropInitialLeft","undefined","styles","container","headerContainer","headerButtonContainer","justifyContent","headerButton","headerButtonText","onCropImage","contentContainer","position","flex","backgroundColor","onHandleScroll","c","scrollView","calculateMaxSizes","prepareMessageText","create","flexDirection","marginHorizontal","alignItems","fontWeight","color","fontSize","fontFamily","defaultProps","console","log","dragVelocity","resizeVelocity","compress","format","SaveFormat","PNG","propTypes","bool","isRequired","func","object","number"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport {\n Dimensions,\n Image,\n ScrollView,\n Modal,\n View,\n Text,\n SafeAreaView,\n TouchableOpacity,\n StyleSheet,\n Platform,\n LogBox,\n} from 'react-native';\nimport * as ImageManipulator from 'expo-image-manipulator';\nimport PropTypes from 'prop-types';\nimport AutoHeightImage from 'react-native-auto-height-image';\nimport { isIphoneX, getStatusBarHeight } from 'react-native-iphone-x-helper';\nimport ImageCropOverlay from './ImageCropOverlay';\n\nconst { width } = Dimensions.get('window');\nconst topMargin = getStatusBarHeight() + (Platform.OS === 'ios' ? 50 : 20);\n\nLogBox.ignoreLogs(['componentWillReceiveProps', 'componentWillUpdate', 'componentWillMount']);\nLogBox.ignoreLogs([\n 'Warning: componentWillMount is deprecated',\n 'Warning: componentWillReceiveProps is deprecated',\n 'Module RCTImageLoader requires',\n]);\n\nclass ExpoImageManipulator extends Component {\n constructor(props) {\n super(props);\n const { squareAspect } = this.props;\n this.state = {\n cropMode: false,\n processing: false,\n squareAspect,\n };\n\n this.scrollOffset = 0;\n this.currentPos = { left: 0, top: 0 };\n this.currentSize = { width: 0, height: 0 };\n this.maxSizes = { width: 0, height: 0 };\n this.actualSize = { width: 0, height: 0 };\n }\n\n async componentDidMount() {\n await this.onConvertImageToEditableSize();\n\n // Set cropping by default\n this.setState({ cropMode: true });\n }\n\n async onConvertImageToEditableSize() {\n const {\n photo: { uri: rawUri },\n } = this.props;\n const { uri, width, height } = await ImageManipulator.manipulateAsync(rawUri, [{ resize: { width: 1080 } }]);\n this.setState({ uri });\n this.actualSize.width = width;\n this.actualSize.height = height;\n }\n\n onToggleModal = () => {\n this.props.onToggleModal();\n this.setState({ cropMode: false });\n };\n\n onCropImage = (callback = null) => {\n this.setState({ processing: true });\n const { uri } = this.state;\n Image.getSize(uri, async (actualWidth, actualHeight) => {\n let cropObj = this.getCropBounds(actualWidth, actualHeight);\n if (cropObj.height > 0 && cropObj.width > 0) {\n let uriToCrop = uri;\n const { uri: uriCroped, base64, width: croppedWidth, height: croppedHeight } = await this.crop(cropObj, uriToCrop);\n\n this.actualSize.width = croppedWidth;\n this.actualSize.height = croppedHeight;\n\n this.setState(\n {\n uri: uriCroped,\n base64,\n cropMode: false,\n processing: false,\n },\n () => {\n if (callback) callback();\n },\n );\n } else {\n this.setState({ cropMode: false, processing: false }, () => {\n if (callback) callback();\n });\n }\n });\n };\n\n onHandleScroll = event => {\n this.scrollOffset = event.nativeEvent.contentOffset.y;\n };\n\n getCropBounds = (actualWidth, actualHeight) => {\n let imageRatio = actualHeight / actualWidth;\n var originalHeight = Dimensions.get('window').height - 64;\n if (isIphoneX()) {\n originalHeight = Dimensions.get('window').height - 122;\n }\n let renderedImageWidth = imageRatio < originalHeight / width ? width : originalHeight / imageRatio;\n let renderedImageHeight = imageRatio < originalHeight / width ? width * imageRatio : originalHeight;\n\n let renderedImageY = (originalHeight - renderedImageHeight) / 2.0;\n let renderedImageX = (width - renderedImageWidth) / 2.0;\n\n const renderImageObj = {\n left: renderedImageX,\n top: renderedImageY,\n width: renderedImageWidth,\n height: renderedImageHeight,\n };\n const cropOverlayObj = {\n left: this.currentPos.left,\n top: this.currentPos.top,\n width: this.currentSize.width,\n height: this.currentSize.height,\n };\n\n var intersectAreaObj = {};\n\n let x = Math.max(renderImageObj.left, cropOverlayObj.left);\n let num1 = Math.min(renderImageObj.left + renderImageObj.width, cropOverlayObj.left + cropOverlayObj.width);\n let y = Math.max(renderImageObj.top, cropOverlayObj.top);\n let num2 = Math.min(renderImageObj.top + renderImageObj.height, cropOverlayObj.top + cropOverlayObj.height);\n if (num1 >= x && num2 >= y)\n intersectAreaObj = {\n originX: (x - renderedImageX) * (actualWidth / renderedImageWidth),\n originY: (y - renderedImageY) * (actualWidth / renderedImageWidth),\n width: (num1 - x) * (actualWidth / renderedImageWidth),\n height: (num2 - y) * (actualWidth / renderedImageWidth),\n };\n else {\n intersectAreaObj = {\n originX: x - renderedImageX,\n originY: y - renderedImageY,\n width: 0,\n height: 0,\n };\n }\n return intersectAreaObj;\n };\n\n crop = async (cropObj, uri) => {\n const { saveOptions } = this.props;\n if (cropObj.height > 0 && cropObj.width > 0) {\n const manipResult = await ImageManipulator.manipulateAsync(\n uri,\n [\n {\n crop: cropObj,\n },\n ],\n saveOptions,\n );\n return manipResult;\n }\n return {\n uri: null,\n base64: null,\n };\n };\n\n calculateMaxSizes = event => {\n let w1 = event.nativeEvent.layout.width || 100;\n let h1 = event.nativeEvent.layout.height || 100;\n if (this.state.squareAspect) {\n if (w1 < h1) h1 = w1;\n else w1 = h1;\n }\n this.maxSizes.width = w1;\n this.maxSizes.height = h1;\n };\n\n // eslint-disable-next-line camelcase\n async UNSAFE_componentWillReceiveProps() {\n await this.onConvertImageToEditableSize();\n }\n\n render() {\n const { isVisible, onPictureChoosed } = this.props;\n const { uri, base64, cropMode, processing } = this.state;\n\n let imageRatio = this.actualSize.height / this.actualSize.width;\n var originalHeight = Dimensions.get('window').height - 64;\n if (isIphoneX()) {\n originalHeight = Dimensions.get('window').height - 122;\n }\n\n let cropRatio = originalHeight / width;\n\n let cropWidth = imageRatio < cropRatio ? width : originalHeight / imageRatio;\n let cropHeight = imageRatio < cropRatio ? width * imageRatio : originalHeight;\n\n let cropInitialTop = (originalHeight - cropHeight) / 2.0;\n let cropInitialLeft = (width - cropWidth) / 2.0;\n\n if (this.currentSize.width == 0 && cropMode) {\n this.currentSize.width = cropWidth;\n this.currentSize.height = cropHeight;\n\n this.currentPos.top = cropInitialTop;\n this.currentPos.left = cropInitialLeft;\n }\n\n return (\n <Modal\n animationType=\"slide\"\n transparent={true}\n visible={isVisible}\n hardwareAccelerated\n onRequestClose={() => {\n this.onToggleModal();\n }}\n >\n {uri !== undefined ? (\n <View style={styles.container}>\n <SafeAreaView style={[{ width }, styles.headerContainer]}>\n {!cropMode ? (\n <View style={[styles.headerButtonContainer, { justifyContent: 'flex-end' }]}>\n <TouchableOpacity\n onPress={() => {\n onPictureChoosed({ uri, base64 });\n this.onToggleModal();\n }}\n style={styles.headerButton}\n >\n <Text style={styles.headerButtonText}>{'Done'}</Text>\n </TouchableOpacity>\n </View>\n ) : (\n <View style={styles.headerButtonContainer}>\n <TouchableOpacity onPress={this.onToggleModal} style={styles.headerButton}>\n <Text style={styles.headerButtonText}>{'Cancel'}</Text>\n </TouchableOpacity>\n <TouchableOpacity\n onPress={() => {\n this.onCropImage(() => {\n onPictureChoosed({ uri: this.state.uri, base64: this.state.base64 });\n this.onToggleModal();\n });\n }}\n style={styles.headerButton}\n >\n <Text style={styles.headerButtonText}>{processing ? 'Processing' : 'Done'}</Text>\n </TouchableOpacity>\n </View>\n )}\n </SafeAreaView>\n <View style={[styles.contentContainer, { width: Dimensions.get('window').width }]}>\n <ScrollView\n style={{ position: 'relative', flex: 1 }}\n contentContainerStyle={{ backgroundColor: 'black' }}\n maximumZoomScale={5}\n minimumZoomScale={0.5}\n onScroll={this.onHandleScroll}\n bounces={false}\n showsHorizontalScrollIndicator={false}\n showsVerticalScrollIndicator={false}\n ref={c => (this.scrollView = c)}\n scrollEventThrottle={16}\n scrollEnabled={false}\n pinchGestureEnabled={false}\n >\n <AutoHeightImage\n style={{ backgroundColor: 'black' }}\n source={{ uri }}\n resizeMode={imageRatio >= 1 ? 'contain' : 'contain'}\n width={width}\n height={originalHeight}\n onLayout={this.calculateMaxSizes}\n />\n {!!cropMode && (\n <ImageCropOverlay\n onLayoutChanged={(top, left, width, height) => {\n this.currentSize.width = width;\n this.currentSize.height = height;\n this.currentPos.top = top;\n this.currentPos.left = left;\n }}\n initialWidth={cropWidth}\n initialHeight={cropHeight}\n initialTop={cropInitialTop}\n initialLeft={cropInitialLeft}\n minHeight={100}\n minWidth={100}\n topMargin={topMargin}\n />\n )}\n </ScrollView>\n </View>\n </View>\n ) : (\n <View style={styles.container}>\n <Text style={styles.prepareMessageText}>Preparing...</Text>\n </View>\n )}\n </Modal>\n );\n // }\n }\n}\n\nconst styles = StyleSheet.create({\n headerContainer: {\n flexDirection: 'row',\n backgroundColor: 'black',\n justifyContent: 'space-between',\n },\n headerButtonContainer: {\n flex: 1,\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n headerButton: {\n marginHorizontal: 10,\n width: 60,\n height: 40,\n alignItems: 'center',\n justifyContent: 'center',\n },\n headerButtonText: {\n fontWeight: '500',\n color: 'white',\n fontSize: 18,\n },\n contentContainer: {\n flex: 1,\n backgroundColor: 'black',\n },\n container: {\n flex: 1,\n backgroundColor: '#000d',\n alignItems: 'center',\n justifyContent: 'center',\n },\n prepareMessageText: {\n fontFamily: 'sf-bold',\n fontSize: 20,\n color: '#fff',\n },\n});\n\nexport default ExpoImageManipulator;\n\nExpoImageManipulator.defaultProps = {\n onPictureChoosed: ({ uri, base64 }) => console.log('URI:', uri, base64),\n dragVelocity: 100,\n resizeVelocity: 50,\n saveOptions: {\n compress: 1,\n format: ImageManipulator.SaveFormat.PNG,\n base64: false,\n },\n};\n\nExpoImageManipulator.propTypes = {\n isVisible: PropTypes.bool.isRequired,\n onPictureChoosed: PropTypes.func,\n saveOptions: PropTypes.object,\n photo: PropTypes.object.isRequired,\n onToggleModal: PropTypes.func.isRequired,\n dragVelocity: PropTypes.number,\n resizeVelocity: PropTypes.number,\n};\n"]}