@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.
- package/dist/module/actions/FollowerActions.js +34 -0
- package/dist/module/actions/FollowerActions.js.map +1 -0
- package/dist/module/actions/MediaActions.js +29 -0
- package/dist/module/actions/MediaActions.js.map +1 -0
- package/dist/module/actions/ResidentActions.js +26 -0
- package/dist/module/actions/ResidentActions.js.map +1 -0
- package/dist/module/actions/UserActions.js +223 -0
- package/dist/module/actions/UserActions.js.map +1 -0
- package/dist/module/actions/UserSettingsActions.js +14 -0
- package/dist/module/actions/UserSettingsActions.js.map +1 -0
- package/dist/module/actions/index.js +6 -0
- package/dist/module/actions/index.js.map +1 -0
- package/dist/module/actions/types.js +17 -0
- package/dist/module/actions/types.js.map +1 -0
- package/dist/module/apis/analyticsActions.js +20 -0
- package/dist/module/apis/analyticsActions.js.map +1 -0
- package/dist/module/apis/contactActions.js +27 -0
- package/dist/module/apis/contactActions.js.map +1 -0
- package/dist/module/apis/eventActions.js +161 -0
- package/dist/module/apis/eventActions.js.map +1 -0
- package/dist/module/apis/fileActions.js +86 -0
- package/dist/module/apis/fileActions.js.map +1 -0
- package/dist/module/apis/followerActions.js +38 -0
- package/dist/module/apis/followerActions.js.map +1 -0
- package/dist/module/apis/index.js +12 -0
- package/dist/module/apis/index.js.map +1 -0
- package/dist/module/apis/notificationActions.js +60 -0
- package/dist/module/apis/notificationActions.js.map +1 -0
- package/dist/module/apis/profileActions.js +14 -0
- package/dist/module/apis/profileActions.js.map +1 -0
- package/dist/module/apis/reactionActions.js +76 -0
- package/dist/module/apis/reactionActions.js.map +1 -0
- package/dist/module/apis/stringActions.js +30 -0
- package/dist/module/apis/stringActions.js.map +1 -0
- package/dist/module/apis/typeActions.js +15 -0
- package/dist/module/apis/typeActions.js.map +1 -0
- package/dist/module/apis/userActions.js +104 -0
- package/dist/module/apis/userActions.js.map +1 -0
- package/dist/module/assets/icons/reactions/heart.png +0 -0
- package/dist/module/assets/icons/reactions/party.png +0 -0
- package/dist/module/assets/icons/reactions/sad.png +0 -0
- package/dist/module/assets/icons/reactions/smile.png +0 -0
- package/dist/module/colours.js +168 -0
- package/dist/module/colours.js.map +1 -0
- package/dist/module/components/AddButton.js +43 -0
- package/dist/module/components/AddButton.js.map +1 -0
- package/dist/module/components/AddToCalendarButton.js +225 -0
- package/dist/module/components/AddToCalendarButton.js.map +1 -0
- package/dist/module/components/Attachment.js +54 -0
- package/dist/module/components/Attachment.js.map +1 -0
- package/dist/module/components/AudienceSelectorLauncher.js +64 -0
- package/dist/module/components/AudienceSelectorLauncher.js.map +1 -0
- package/dist/module/components/AudienceSelectorPage.js +350 -0
- package/dist/module/components/AudienceSelectorPage.js.map +1 -0
- package/dist/module/components/AutoOffsetImage.js +186 -0
- package/dist/module/components/AutoOffsetImage.js.map +1 -0
- package/dist/module/components/BackButton.js +58 -0
- package/dist/module/components/BackButton.js.map +1 -0
- package/dist/module/components/CategoryTabs.js +154 -0
- package/dist/module/components/CategoryTabs.js.map +1 -0
- package/dist/module/components/CommentReply.js +328 -0
- package/dist/module/components/CommentReply.js.map +1 -0
- package/dist/module/components/CommentSection.js +822 -0
- package/dist/module/components/CommentSection.js.map +1 -0
- package/dist/module/components/ConfirmPopup.js +108 -0
- package/dist/module/components/ConfirmPopup.js.map +1 -0
- package/dist/module/components/ConfirmationPopup.js +72 -0
- package/dist/module/components/ConfirmationPopup.js.map +1 -0
- package/dist/module/components/DropDownItem.js +74 -0
- package/dist/module/components/DropDownItem.js.map +1 -0
- package/dist/module/components/DropDownMenu.js +41 -0
- package/dist/module/components/DropDownMenu.js.map +1 -0
- package/dist/module/components/EmptyStateMain.js +50 -0
- package/dist/module/components/EmptyStateMain.js.map +1 -0
- package/dist/module/components/EmptyStateWidget.js +47 -0
- package/dist/module/components/EmptyStateWidget.js.map +1 -0
- package/dist/module/components/FontScaleButton.js +36 -0
- package/dist/module/components/FontScaleButton.js.map +1 -0
- package/dist/module/components/FontScalePopup.js +75 -0
- package/dist/module/components/FontScalePopup.js.map +1 -0
- package/dist/module/components/FormCard.js +25 -0
- package/dist/module/components/FormCard.js.map +1 -0
- package/dist/module/components/FormCardSection.js +212 -0
- package/dist/module/components/FormCardSection.js.map +1 -0
- package/dist/module/components/FormCardSectionOptionLauncher.js +72 -0
- package/dist/module/components/FormCardSectionOptionLauncher.js.map +1 -0
- package/dist/module/components/FormattedText.js +131 -0
- package/dist/module/components/FormattedText.js.map +1 -0
- package/dist/module/components/GenericInput.js +148 -0
- package/dist/module/components/GenericInput.js.map +1 -0
- package/dist/module/components/GenericInputSection.js +158 -0
- package/dist/module/components/GenericInputSection.js.map +1 -0
- package/dist/module/components/Header.js +458 -0
- package/dist/module/components/Header.js.map +1 -0
- package/dist/module/components/ImagePopup.js +240 -0
- package/dist/module/components/ImagePopup.js.map +1 -0
- package/dist/module/components/ImageUploadProgress.js +68 -0
- package/dist/module/components/ImageUploadProgress.js.map +1 -0
- package/dist/module/components/ImageUploader.js +795 -0
- package/dist/module/components/ImageUploader.js.map +1 -0
- package/dist/module/components/InlineButton.js +65 -0
- package/dist/module/components/InlineButton.js.map +1 -0
- package/dist/module/components/Input.js +154 -0
- package/dist/module/components/Input.js.map +1 -0
- package/dist/module/components/LoadingCircles.js +220 -0
- package/dist/module/components/LoadingCircles.js.map +1 -0
- package/dist/module/components/LoadingIndicator.js +86 -0
- package/dist/module/components/LoadingIndicator.js.map +1 -0
- package/dist/module/components/LoadingStateWidget.js +46 -0
- package/dist/module/components/LoadingStateWidget.js.map +1 -0
- package/dist/module/components/MediaPlayer.js +418 -0
- package/dist/module/components/MediaPlayer.js.map +1 -0
- package/dist/module/components/MiddlePopup.js +43 -0
- package/dist/module/components/MiddlePopup.js.map +1 -0
- package/dist/module/components/PDFPopup.js +191 -0
- package/dist/module/components/PDFPopup.js.map +1 -0
- package/dist/module/components/PlussChat.js +986 -0
- package/dist/module/components/PlussChat.js.map +1 -0
- package/dist/module/components/PlussChatMessage.js +262 -0
- package/dist/module/components/PlussChatMessage.js.map +1 -0
- package/dist/module/components/PlussChatTime.js +58 -0
- package/dist/module/components/PlussChatTime.js.map +1 -0
- package/dist/module/components/Popup.js +125 -0
- package/dist/module/components/Popup.js.map +1 -0
- package/dist/module/components/PopupMenu.js +119 -0
- package/dist/module/components/PopupMenu.js.map +1 -0
- package/dist/module/components/PositionedImage.js +313 -0
- package/dist/module/components/PositionedImage.js.map +1 -0
- package/dist/module/components/ProfilePic.js +106 -0
- package/dist/module/components/ProfilePic.js.map +1 -0
- package/dist/module/components/RadioButton.js +77 -0
- package/dist/module/components/RadioButton.js.map +1 -0
- package/dist/module/components/Reaction.js +116 -0
- package/dist/module/components/Reaction.js.map +1 -0
- package/dist/module/components/Reactions.js +71 -0
- package/dist/module/components/Reactions.js.map +1 -0
- package/dist/module/components/SharingTools.js +154 -0
- package/dist/module/components/SharingTools.js.map +1 -0
- package/dist/module/components/Spinner.js +22 -0
- package/dist/module/components/Spinner.js.map +1 -0
- package/dist/module/components/StickyFooter.js +34 -0
- package/dist/module/components/StickyFooter.js.map +1 -0
- package/dist/module/components/TextStyle.js +45 -0
- package/dist/module/components/TextStyle.js.map +1 -0
- package/dist/module/components/Toggle.js +65 -0
- package/dist/module/components/Toggle.js.map +1 -0
- package/dist/module/components/TouchableSearchBar.js +67 -0
- package/dist/module/components/TouchableSearchBar.js.map +1 -0
- package/dist/module/components/UserListPopup.js +135 -0
- package/dist/module/components/UserListPopup.js.map +1 -0
- package/dist/module/components/UserListing.js +267 -0
- package/dist/module/components/UserListing.js.map +1 -0
- package/dist/module/components/VideoPopup.js +113 -0
- package/dist/module/components/VideoPopup.js.map +1 -0
- package/dist/module/components/WarningPopup.js +82 -0
- package/dist/module/components/WarningPopup.js.map +1 -0
- package/dist/module/components/expo-image-picker-multiple/ImageBrowser.js +289 -0
- package/dist/module/components/expo-image-picker-multiple/ImageBrowser.js.map +1 -0
- package/dist/module/components/expo-image-picker-multiple/ImageTile.js +116 -0
- package/dist/module/components/expo-image-picker-multiple/ImageTile.js.map +1 -0
- package/dist/module/components/index.js +55 -0
- package/dist/module/components/index.js.map +1 -0
- package/dist/module/components/react-native-expo-image-cropper/ExpoImageManipulator.js +385 -0
- package/dist/module/components/react-native-expo-image-cropper/ExpoImageManipulator.js.map +1 -0
- package/dist/module/components/react-native-expo-image-cropper/ImageCropOverlay.js +387 -0
- package/dist/module/components/react-native-expo-image-cropper/ImageCropOverlay.js.map +1 -0
- package/dist/module/config.js +32 -0
- package/dist/module/config.js.map +1 -0
- package/dist/module/constants.js +19 -0
- package/dist/module/constants.js.map +1 -0
- package/dist/module/fonts/index.js +2 -0
- package/dist/module/fonts/index.js.map +1 -0
- package/dist/module/fonts/pluss60-icons.js +5 -0
- package/dist/module/fonts/pluss60-icons.js.map +1 -0
- package/dist/module/fonts/pluss60-icons.json +1097 -0
- package/dist/module/helper.js +397 -0
- package/dist/module/helper.js.map +1 -0
- package/dist/module/index.js +13 -0
- package/dist/module/index.js.map +1 -0
- package/dist/module/js/images/detectFaces.js +30 -0
- package/dist/module/js/images/detectFaces.js.map +1 -0
- package/dist/module/js/images/findLandmarkRange.js +93 -0
- package/dist/module/js/images/findLandmarkRange.js.map +1 -0
- package/dist/module/js/images/getScaledOffset.js +81 -0
- package/dist/module/js/images/getScaledOffset.js.map +1 -0
- package/dist/module/js/site/getSiteLevelFromState.js +29 -0
- package/dist/module/js/site/getSiteLevelFromState.js.map +1 -0
- package/dist/module/js/site/isTVEnabled.js +10 -0
- package/dist/module/js/site/isTVEnabled.js.map +1 -0
- package/dist/module/session.js +58 -0
- package/dist/module/session.js.map +1 -0
- package/dist/module/styles.js +67 -0
- package/dist/module/styles.js.map +1 -0
- package/package.json +20 -24
- 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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"}
|