@plusscommunities/pluss-core-app 6.0.3-auth.0 → 6.0.3
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/components/Forbidden.js +58 -0
- package/dist/module/components/Forbidden.js.map +1 -0
- package/dist/module/components/MediaPlayer.js +16 -16
- package/dist/module/components/MediaPlayer.js.map +1 -1
- package/dist/module/components/index.js +1 -0
- package/dist/module/components/index.js.map +1 -1
- package/dist/module/helper.js +3 -0
- package/dist/module/helper.js.map +1 -1
- package/package.json +3 -6
- package/src/apis/fileActions.js +27 -19
- package/src/components/Forbidden.js +54 -0
- package/src/components/ImageUploader.js +10 -17
- package/src/components/MediaPlayer.js +16 -16
- package/src/components/index.js +1 -0
- package/src/config.js +0 -5
- package/src/helper.js +3 -0
- package/src/session.js +2 -2
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import _ from 'lodash';
|
|
3
|
+
import { View } from 'react-native';
|
|
4
|
+
import { TextStyle } from './TextStyle';
|
|
5
|
+
import { getMainBrandingColourFromState } from '../colours';
|
|
6
|
+
import { InlineButton } from './InlineButton';
|
|
7
|
+
import { Services } from '../config';
|
|
8
|
+
import { connect } from 'react-redux';
|
|
9
|
+
import Header from './Header';
|
|
10
|
+
const Forbidden = ({
|
|
11
|
+
colourBrandingMain,
|
|
12
|
+
title,
|
|
13
|
+
description
|
|
14
|
+
}) => {
|
|
15
|
+
const goBack = () => {
|
|
16
|
+
Services.navigation.goBack();
|
|
17
|
+
};
|
|
18
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
19
|
+
style: {
|
|
20
|
+
flex: 1,
|
|
21
|
+
backgroundColor: '#fff'
|
|
22
|
+
}
|
|
23
|
+
}, /*#__PURE__*/React.createElement(Header, {
|
|
24
|
+
leftIcon: "angle-left",
|
|
25
|
+
onPressLeft: goBack
|
|
26
|
+
}), /*#__PURE__*/React.createElement(View, {
|
|
27
|
+
style: {
|
|
28
|
+
padding: 16
|
|
29
|
+
}
|
|
30
|
+
}, /*#__PURE__*/React.createElement(TextStyle, {
|
|
31
|
+
type: "pageHeading",
|
|
32
|
+
style: {
|
|
33
|
+
color: colourBrandingMain
|
|
34
|
+
}
|
|
35
|
+
}, !_.isEmpty(title) ? title : 'Oops!'), /*#__PURE__*/React.createElement(TextStyle, {
|
|
36
|
+
type: "body",
|
|
37
|
+
style: {
|
|
38
|
+
marginTop: 10
|
|
39
|
+
}
|
|
40
|
+
}, !_.isEmpty(description) ? description : 'It seems this item is no longer accessible. It may have been removed or your access might have changed.'), /*#__PURE__*/React.createElement(View, {
|
|
41
|
+
style: {
|
|
42
|
+
marginTop: 20
|
|
43
|
+
}
|
|
44
|
+
}, /*#__PURE__*/React.createElement(InlineButton, {
|
|
45
|
+
onPress: goBack,
|
|
46
|
+
color: colourBrandingMain
|
|
47
|
+
}, "Go back"))));
|
|
48
|
+
};
|
|
49
|
+
const mapStateToProps = state => {
|
|
50
|
+
return {
|
|
51
|
+
colourBrandingMain: getMainBrandingColourFromState(state)
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
const forbidden = connect(mapStateToProps, {}, null, {
|
|
55
|
+
forwardRef: true
|
|
56
|
+
})(Forbidden);
|
|
57
|
+
export { forbidden as Forbidden };
|
|
58
|
+
//# sourceMappingURL=Forbidden.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","_","View","TextStyle","getMainBrandingColourFromState","InlineButton","Services","connect","Header","Forbidden","colourBrandingMain","title","description","goBack","navigation","createElement","style","flex","backgroundColor","leftIcon","onPressLeft","padding","type","color","isEmpty","marginTop","onPress","mapStateToProps","state","forbidden","forwardRef"],"sources":["Forbidden.js"],"sourcesContent":["import React from 'react';\nimport _ from 'lodash';\nimport { View } from 'react-native';\nimport { TextStyle } from './TextStyle';\nimport { getMainBrandingColourFromState } from '../colours';\nimport { InlineButton } from './InlineButton';\nimport { Services } from '../config';\nimport { connect } from 'react-redux';\nimport Header from './Header';\n\nconst Forbidden = ({ colourBrandingMain, title, description }) => {\n const goBack = () => {\n Services.navigation.goBack();\n };\n\n return (\n <View\n style={{\n flex: 1,\n backgroundColor: '#fff',\n }}\n >\n <Header leftIcon=\"angle-left\" onPressLeft={goBack} />\n <View\n style={{\n padding: 16,\n }}\n >\n <TextStyle type=\"pageHeading\" style={{ color: colourBrandingMain }}>\n {!_.isEmpty(title) ? title : 'Oops!'}\n </TextStyle>\n <TextStyle type=\"body\" style={{ marginTop: 10 }}>\n {!_.isEmpty(description)\n ? description\n : 'It seems this item is no longer accessible. It may have been removed or your access might have changed.'}\n </TextStyle>\n <View style={{ marginTop: 20 }}>\n <InlineButton onPress={goBack} color={colourBrandingMain}>\n Go back\n </InlineButton>\n </View>\n </View>\n </View>\n );\n};\n\nconst mapStateToProps = state => {\n return {\n colourBrandingMain: getMainBrandingColourFromState(state),\n };\n};\n\nconst forbidden = connect(mapStateToProps, {}, null, { forwardRef: true })(Forbidden);\nexport { forbidden as Forbidden };\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,CAAC,MAAM,QAAQ;AACtB,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,SAAS,QAAQ,aAAa;AACvC,SAASC,8BAA8B,QAAQ,YAAY;AAC3D,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SAASC,QAAQ,QAAQ,WAAW;AACpC,SAASC,OAAO,QAAQ,aAAa;AACrC,OAAOC,MAAM,MAAM,UAAU;AAE7B,MAAMC,SAAS,GAAGA,CAAC;EAAEC,kBAAkB;EAAEC,KAAK;EAAEC;AAAY,CAAC,KAAK;EAChE,MAAMC,MAAM,GAAGA,CAAA,KAAM;IACnBP,QAAQ,CAACQ,UAAU,CAACD,MAAM,CAAC,CAAC;EAC9B,CAAC;EAED,oBACEb,KAAA,CAAAe,aAAA,CAACb,IAAI;IACHc,KAAK,EAAE;MACLC,IAAI,EAAE,CAAC;MACPC,eAAe,EAAE;IACnB;EAAE,gBAEFlB,KAAA,CAAAe,aAAA,CAACP,MAAM;IAACW,QAAQ,EAAC,YAAY;IAACC,WAAW,EAAEP;EAAO,CAAE,CAAC,eACrDb,KAAA,CAAAe,aAAA,CAACb,IAAI;IACHc,KAAK,EAAE;MACLK,OAAO,EAAE;IACX;EAAE,gBAEFrB,KAAA,CAAAe,aAAA,CAACZ,SAAS;IAACmB,IAAI,EAAC,aAAa;IAACN,KAAK,EAAE;MAAEO,KAAK,EAAEb;IAAmB;EAAE,GAChE,CAACT,CAAC,CAACuB,OAAO,CAACb,KAAK,CAAC,GAAGA,KAAK,GAAG,OACpB,CAAC,eACZX,KAAA,CAAAe,aAAA,CAACZ,SAAS;IAACmB,IAAI,EAAC,MAAM;IAACN,KAAK,EAAE;MAAES,SAAS,EAAE;IAAG;EAAE,GAC7C,CAACxB,CAAC,CAACuB,OAAO,CAACZ,WAAW,CAAC,GACpBA,WAAW,GACX,yGACK,CAAC,eACZZ,KAAA,CAAAe,aAAA,CAACb,IAAI;IAACc,KAAK,EAAE;MAAES,SAAS,EAAE;IAAG;EAAE,gBAC7BzB,KAAA,CAAAe,aAAA,CAACV,YAAY;IAACqB,OAAO,EAAEb,MAAO;IAACU,KAAK,EAAEb;EAAmB,GAAC,SAE5C,CACV,CACF,CACF,CAAC;AAEX,CAAC;AAED,MAAMiB,eAAe,GAAGC,KAAK,IAAI;EAC/B,OAAO;IACLlB,kBAAkB,EAAEN,8BAA8B,CAACwB,KAAK;EAC1D,CAAC;AACH,CAAC;AAED,MAAMC,SAAS,GAAGtB,OAAO,CAACoB,eAAe,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE;EAAEG,UAAU,EAAE;AAAK,CAAC,CAAC,CAACrB,SAAS,CAAC;AACrF,SAASoB,SAAS,IAAIpB,SAAS"}
|
|
@@ -10,7 +10,7 @@ import YoutubePlayer, { getYoutubeMeta } from 'react-native-youtube-iframe';
|
|
|
10
10
|
import { Vimeo } from 'react-native-vimeo-iframe';
|
|
11
11
|
import { WebView } from 'react-native-webview';
|
|
12
12
|
import { Video } from 'expo-av';
|
|
13
|
-
import VideoPlayer from 'expo-video-player';
|
|
13
|
+
// import VideoPlayer from 'expo-video-player';
|
|
14
14
|
import { Spinner } from './Spinner';
|
|
15
15
|
const SCREEN_HEIGHT = Dimensions.get('window').height;
|
|
16
16
|
const SCREEN_WIDTH = Dimensions.get('window').width;
|
|
@@ -282,20 +282,6 @@ class MediaPlayer extends Component {
|
|
|
282
282
|
onError: this.onStreamError,
|
|
283
283
|
onPlaybackStatusUpdate: this.onStreamStatusUpdate
|
|
284
284
|
})));
|
|
285
|
-
_defineProperty(this, "getVideoPlayer", (embedUrl, width, height, autoPlay) => /*#__PURE__*/React.createElement(VideoPlayer, {
|
|
286
|
-
videoProps: {
|
|
287
|
-
shouldPlay: autoPlay,
|
|
288
|
-
resizeMode: Video.RESIZE_MODE_CONTAIN,
|
|
289
|
-
source: {
|
|
290
|
-
uri: embedUrl
|
|
291
|
-
}
|
|
292
|
-
},
|
|
293
|
-
showFullscreenButton: false,
|
|
294
|
-
errorCallback: this.onVideoPlayError,
|
|
295
|
-
playbackCallback: this.onVideoPlayStatusUpdate,
|
|
296
|
-
height: height,
|
|
297
|
-
width: width
|
|
298
|
-
}));
|
|
299
285
|
this.state = {
|
|
300
286
|
deviceOrientation: null,
|
|
301
287
|
isLandscape: false,
|
|
@@ -315,6 +301,20 @@ class MediaPlayer extends Component {
|
|
|
315
301
|
this.retryLoading = false;
|
|
316
302
|
this.orientationQueue = [];
|
|
317
303
|
}
|
|
304
|
+
// getVideoPlayer = (embedUrl, width, height, autoPlay) => (
|
|
305
|
+
// <VideoPlayer
|
|
306
|
+
// videoProps={{
|
|
307
|
+
// shouldPlay: autoPlay,
|
|
308
|
+
// resizeMode: Video.RESIZE_MODE_CONTAIN,
|
|
309
|
+
// source: { uri: embedUrl },
|
|
310
|
+
// }}
|
|
311
|
+
// showFullscreenButton={false}
|
|
312
|
+
// errorCallback={this.onVideoPlayError}
|
|
313
|
+
// playbackCallback={this.onVideoPlayStatusUpdate}
|
|
314
|
+
// height={height}
|
|
315
|
+
// width={width}
|
|
316
|
+
// />
|
|
317
|
+
// );
|
|
318
318
|
render() {
|
|
319
319
|
let width, height;
|
|
320
320
|
const {
|
|
@@ -362,7 +362,7 @@ class MediaPlayer extends Component {
|
|
|
362
362
|
} else if (useVideoPlayer) {
|
|
363
363
|
embedUrl = source;
|
|
364
364
|
// console.log('getVideoPlayer', embedUrl, width, height, autoPlay);
|
|
365
|
-
player = this.
|
|
365
|
+
player = this.getStreamPlayer(embedUrl, width, height, autoPlay);
|
|
366
366
|
}
|
|
367
367
|
}
|
|
368
368
|
if (!player && isUrlLink) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Component","Platform","View","StyleSheet","Dimensions","ScreenOrientation","DeviceMotion","YoutubePlayer","getYoutubeMeta","Vimeo","WebView","Video","VideoPlayer","Spinner","SCREEN_HEIGHT","get","height","SCREEN_WIDTH","width","EXPO_VIDEO_PROPS","rate","isMuted","volume","RETRY_RECOVER","RETRY_LOADING","MediaPlayer","constructor","props","_defineProperty","setupForPlaying","lockAsync","OS","OrientationLock","DEFAULT","ALL","motionAvailalble","isAvailableAsync","setUpdateInterval","addListener","onMotionChange","checkStreamLoaded","clearInterval","removeAllListeners","PORTRAIT_UP","url","replace","split","undefined","ids","result","match","source","useVideoPlayer","isUrlLink","startsWith","isYoutube","includes","isVimeo","heightFactor","metadata","getYoutubeVideoId","setState","playbackLoaded","readyToRender","playbackId","wait","force","retryLoading","console","log","setTimeout","playbackBuffering","state","videoPlayer","loadAsync","uri","getStreamPlaybackUrl","overrideFileExtensionAndroid","deviceRotation","beta","gamma","absGamma","Math","abs","absBeta","isGammaNegative","sign","changeEvent","rotation","deviceOrientation","orientation","isLandscape","orientationQueue","push","length","slice","every","i","orientationChanged","setInterval","checkReloadStream","status","isLoaded","isBuffering","isPlaying","error","playbackPlaying","shouldPlay","e","forceWebview","type","youtubeId","autoPlay","createElement","ref","youtubePlayer","videoId","play","onReady","onYoutubeReady","onError","onYoutubeError","playbackRate","playerParams","cc_lang_pref","showClosedCaptions","vimeoId","style","marginLeft","marginRight","loop","controls","speed","time","embedUrl","startInLoadingState","javaScriptEnabled","scrollEnabled","automaticallyAdjustContentInsets","mediaPlaybackRequiresUserAction","styles","webView","_extends","vp","resizeMode","RESIZE_MODE_CONTAIN","useNativeControls","onLoadStart","onStreamLoadStart","onLoad","onStreamLoaded","onStreamError","onPlaybackStatusUpdate","onStreamStatusUpdate","videoProps","showFullscreenButton","errorCallback","onVideoPlayError","playbackCallback","onVideoPlayStatusUpdate","render","player","showLoading","getYoutubePlayer","getVimeoId","getVimeoPlayer","getStreamPlayer","getVideoPlayer","getWebviewPlayer","container","loadingContainer","color","create","flex","backgroundColor","alignItems","justifyContent","position","top","left","right","bottom"],"sources":["MediaPlayer.js"],"sourcesContent":["import React, { Component } from 'react';\nimport { Platform, View, StyleSheet, Dimensions } from 'react-native';\nimport * as ScreenOrientation from 'expo-screen-orientation';\nimport { DeviceMotion } from 'expo-sensors';\nimport YoutubePlayer, { getYoutubeMeta } from 'react-native-youtube-iframe';\nimport { Vimeo } from 'react-native-vimeo-iframe';\nimport { WebView } from 'react-native-webview';\nimport { Video } from 'expo-av';\nimport VideoPlayer from 'expo-video-player';\nimport { Spinner } from './Spinner';\n\nconst SCREEN_HEIGHT = Dimensions.get('window').height;\nconst SCREEN_WIDTH = Dimensions.get('window').width;\nconst EXPO_VIDEO_PROPS = { rate: 1, isMuted: false, volume: 1 };\nconst RETRY_RECOVER = 30000;\nconst RETRY_LOADING = 10000;\n\nclass MediaPlayer extends Component {\n constructor(props) {\n super(props);\n this.state = {\n deviceOrientation: null,\n isLandscape: false,\n isUrlLink: true,\n isYoutube: false,\n isVimeo: false,\n forceWebview: false,\n heightFactor: 0,\n playbackLoaded: false,\n playbackBuffering: false,\n playbackPlaying: false,\n readyToRender: false,\n };\n this.youtubePlayer = null;\n this.videoPlayer = null;\n this.checkStreamLoaded = null;\n this.retryLoading = false;\n this.orientationQueue = [];\n }\n\n componentDidMount = async () => {\n await this.setupForPlaying();\n\n ScreenOrientation.lockAsync(Platform.OS === 'ios' ? ScreenOrientation.OrientationLock.DEFAULT : ScreenOrientation.OrientationLock.ALL);\n const motionAvailalble = await DeviceMotion.isAvailableAsync();\n // console.log('motionAvailalble', motionAvailalble);\n if (motionAvailalble) {\n DeviceMotion.setUpdateInterval(500);\n DeviceMotion.addListener(this.onMotionChange);\n }\n };\n\n componentWillUnmount = () => {\n if (this.checkStreamLoaded) clearInterval(this.checkStreamLoaded);\n DeviceMotion.removeAllListeners();\n ScreenOrientation.lockAsync(ScreenOrientation.OrientationLock.PORTRAIT_UP);\n };\n\n getYoutubeVideoId = url => {\n url = url.replace(/(>|<)/gi, '').split(/(vi\\/|v=|\\/v\\/|youtu\\.be\\/|\\/embed\\/)/);\n if (url[2] !== undefined) {\n const ids = url[2].split(/[^0-9a-z_\\-]/i);\n return ids[0];\n } else {\n return '';\n }\n };\n\n getVimeoId = url => {\n const result = url.match(\n /(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/(?:[^\\/]*)\\/videos\\/|album\\/(?:\\d+)\\/video\\/|video\\/|)(\\d+)(?:[a-zA-Z0-9_\\-]+)?/i,\n );\n return result[1];\n };\n\n setupForPlaying = async () => {\n // Extract live stream info\n const { source, useVideoPlayer } = this.props;\n const isUrlLink = source && source.startsWith('http');\n const isYoutube = source && (source.includes('youtube.com/watch?v=') || source.includes('youtu.be/'));\n const isVimeo = source && source.includes('vimeo.com/');\n let heightFactor = 0;\n\n if (isYoutube) {\n const metadata = await getYoutubeMeta(this.getYoutubeVideoId(source));\n heightFactor = metadata.height / metadata.width;\n } else if (useVideoPlayer) {\n heightFactor = 0;\n } else {\n heightFactor = 0.565;\n }\n\n this.setState({ isUrlLink, isYoutube, isVimeo, playbackLoaded: isYoutube || isVimeo, heightFactor, readyToRender: true });\n };\n\n getStreamPlaybackUrl = () => {\n // return 'https://stream.mux.com/Ym4nKktRpGuZNBBBlzhxpyRwZLpvMlPRchcu01x6Ur600.m3u8';\n return `https://stream.mux.com/${this.props.playbackId}.m3u8`;\n };\n\n checkReloadStream = (wait = RETRY_LOADING, force = false) => {\n if (!force && this.retryLoading) return;\n\n console.log(`Check loading in ${wait} milliseconds...`);\n this.retryLoading = true;\n setTimeout(async () => {\n const { playbackLoaded, playbackBuffering } = this.state;\n try {\n if (playbackLoaded === false || playbackBuffering === true) {\n console.log('Reloading started');\n await this.videoPlayer.loadAsync(\n { uri: this.getStreamPlaybackUrl(), overrideFileExtensionAndroid: 'm3u8' },\n EXPO_VIDEO_PROPS,\n false,\n );\n } else {\n console.log('Already loaded - not reloading');\n }\n this.retryLoading = false;\n } catch {}\n }, wait);\n };\n\n isLandscape = deviceRotation => {\n const { beta, gamma } = deviceRotation;\n const absGamma = Math.abs(gamma);\n const absBeta = Math.abs(beta);\n const isGammaNegative = Math.sign(gamma) === -1;\n\n if (absGamma <= 0.04 && absBeta <= 0.24) {\n //Portrait mode, on a flat surface.\n return false;\n } else if ((absGamma <= 1.0 || absGamma >= 2.3) && absBeta >= 0.5) {\n //General Portrait mode, accounting for forward and back tilt on the top of the phone.\n return false;\n } else {\n if (isGammaNegative) {\n //Landscape mode with the top of the phone to the left.\n return true;\n } else {\n //Landscape mode with the top of the phone to the right.\n return true;\n }\n }\n };\n\n onMotionChange = async changeEvent => {\n const deviceRotation = changeEvent.rotation;\n const deviceOrientation = changeEvent.orientation;\n const isLandscape = this.isLandscape(deviceRotation);\n this.orientationQueue.push(isLandscape);\n if (this.orientationQueue.length > 2) this.orientationQueue = this.orientationQueue.slice(-2);\n // console.log('onMotionChange - orientationQueue', this.orientationQueue);\n if (\n isLandscape !== this.state.isLandscape &&\n isLandscape === (Math.abs(deviceOrientation) === 90) &&\n this.orientationQueue.every(i => i === isLandscape)\n ) {\n this.setState({ isLandscape }, () => {\n // console.log('isLandscape', this.state.isLandscape);\n if (this.props.orientationChanged) this.props.orientationChanged(this.state.isLandscape);\n });\n }\n };\n\n onStreamLoadStart = () => {\n console.log('Stream load started');\n this.checkStreamLoaded = setInterval(() => {\n const { playbackLoaded } = this.state;\n if (playbackLoaded === false) {\n console.log('Stream loading failed unexpectedly');\n this.checkReloadStream(1000, true);\n } else {\n clearInterval(this.checkStreamLoaded);\n }\n }, RETRY_RECOVER);\n };\n\n onStreamLoaded = status => {\n console.log(`Stream loaded - isLoaded:${status.isLoaded}, isBuffering:${status.isBuffering}, isPlaying:${status.isPlaying}`);\n };\n\n onStreamError = error => {\n console.log('Stream error', error);\n };\n\n onStreamStatusUpdate = status => {\n this.setState(\n {\n playbackLoaded: status.isLoaded,\n playbackBuffering: status.isBuffering,\n playbackPlaying: status.isPlaying,\n },\n () => {\n const { playbackLoaded, playbackBuffering, playbackPlaying, shouldPlay } = this.state;\n // console.log(`Status updated - isLoaded:${playbackLoaded}, isBuffering:${playbackBuffering}, isPlaying:${playbackPlaying}`);\n if (playbackLoaded === false && playbackBuffering === undefined && playbackPlaying === undefined) {\n this.checkReloadStream();\n } else if (playbackLoaded === true && playbackBuffering === true) {\n this.checkReloadStream(RETRY_RECOVER);\n }\n },\n );\n };\n\n onYoutubeError = e => {\n // console.log('onYoutubeError', e);\n this.setState({ forceWebview: true });\n };\n\n onYoutubeReady = () => {\n // console.log('onYoutubeReady');\n };\n\n onVideoPlayStatusUpdate = status => {\n // console.log('onVideoPlayStatusUpdate', status);\n };\n\n onVideoPlayError = error => {\n if (error && error.type === 'NonFatal') {\n return;\n }\n // console.log('onVideoPlayError', error);\n this.setState({ forceWebview: true });\n };\n\n getYoutubePlayer = (youtubeId, width, height, autoPlay) => (\n <YoutubePlayer\n ref={ref => (this.youtubePlayer = ref)}\n height={height}\n width={width}\n videoId={youtubeId}\n play={autoPlay}\n // onChangeState={event => console.log('onChangeState', event)}\n onReady={this.onYoutubeReady}\n onError={this.onYoutubeError}\n // onPlaybackQualityChange={q => console.log('onPlaybackQualityChange', q)}\n volume={50}\n playbackRate={1}\n playerParams={{\n cc_lang_pref: 'us',\n showClosedCaptions: true,\n }}\n />\n );\n\n getVimeoPlayer = (vimeoId, width, height, autoPlay) => (\n <View style={{ width, height }}>\n <Vimeo\n style={{ marginLeft: -8, marginRight: -5 }}\n videoId={vimeoId}\n // onReady={() => console.log('Video is ready')}\n // onPlay={() => console.log('Video is playing')}\n // onPlayProgress={data => console.log('Video progress data:', data)}\n // onFinish={() => console.log('Video is finished')}\n loop={false}\n autoPlay={autoPlay}\n controls={true}\n speed={true}\n time={'0m0s'}\n />\n </View>\n );\n\n getWebviewPlayer = (embedUrl, width, height) => (\n <WebView\n startInLoadingState\n javaScriptEnabled\n scrollEnabled={false}\n automaticallyAdjustContentInsets={false}\n mediaPlaybackRequiresUserAction\n style={[styles.webView, { width, height }]}\n source={{ uri: embedUrl }}\n />\n );\n\n getStreamPlayer = (embedUrl, width, height, autoPlay) => (\n <Video\n ref={vp => {\n this.videoPlayer = vp;\n }}\n source={{ uri: embedUrl }}\n {...EXPO_VIDEO_PROPS}\n shouldPlay={autoPlay}\n resizeMode={Video.RESIZE_MODE_CONTAIN}\n useNativeControls\n style={{ width, height }}\n onLoadStart={this.onStreamLoadStart}\n onLoad={this.onStreamLoaded}\n onError={this.onStreamError}\n onPlaybackStatusUpdate={this.onStreamStatusUpdate}\n />\n );\n\n getVideoPlayer = (embedUrl, width, height, autoPlay) => (\n <VideoPlayer\n videoProps={{\n shouldPlay: autoPlay,\n resizeMode: Video.RESIZE_MODE_CONTAIN,\n source: { uri: embedUrl },\n }}\n showFullscreenButton={false}\n errorCallback={this.onVideoPlayError}\n playbackCallback={this.onVideoPlayStatusUpdate}\n height={height}\n width={width}\n />\n );\n\n render() {\n let width, height;\n const { playbackId, source, autoPlay, useVideoPlayer } = this.props;\n const {\n readyToRender,\n isLandscape,\n heightFactor,\n isUrlLink,\n isYoutube,\n isVimeo,\n forceWebview,\n playbackLoaded,\n playbackBuffering,\n } = this.state;\n if (!readyToRender) return null;\n\n if (isLandscape) {\n width = SCREEN_HEIGHT;\n height = SCREEN_WIDTH;\n } else {\n width = SCREEN_WIDTH;\n height = heightFactor ? SCREEN_WIDTH * heightFactor : SCREEN_HEIGHT;\n }\n\n let embedUrl, player, showLoading;\n if (!forceWebview) {\n if (isYoutube) {\n const youtubeId = this.getYoutubeVideoId(source);\n embedUrl = youtubeId ? `https://www.youtube.com/embed/${youtubeId}` : source;\n // console.log('getYoutubePlayer', youtubeId, width, height, autoPlay);\n player = this.getYoutubePlayer(youtubeId, width, height, autoPlay);\n } else if (isVimeo) {\n const vimeoId = this.getVimeoId(source);\n embedUrl = source;\n // console.log('getVimeoPlayer', vimeoId, width, height, autoPlay);\n player = this.getVimeoPlayer(vimeoId, width, height, autoPlay);\n } else if (playbackId) {\n embedUrl = this.getStreamPlaybackUrl();\n // console.log('getStreamPlayer', embedUrl, width, height, autoPlay);\n player = this.getStreamPlayer(embedUrl, width, height, autoPlay);\n showLoading = true;\n } else if (useVideoPlayer) {\n embedUrl = source;\n // console.log('getVideoPlayer', embedUrl, width, height, autoPlay);\n player = this.getVideoPlayer(embedUrl, width, height, autoPlay);\n }\n }\n if (!player && isUrlLink) {\n embedUrl = source;\n console.log('getWebviewPlayer', embedUrl, width, height);\n player = this.getWebviewPlayer(embedUrl, width, height);\n }\n\n // console.log({\n // Streaming: embedUrl,\n // Landscape: isLandscape,\n // Loaded: playbackLoaded,\n // Buffering: playbackBuffering,\n // LoadingIndicator: showLoading,\n // Width: width,\n // Height: height,\n // HeightFactor: heightFactor,\n // isYoutube,\n // isVimeo,\n // playbackId,\n // useVideoPlayer,\n // });\n return (\n <View style={styles.container}>\n {player}\n {showLoading && (!playbackLoaded || playbackBuffering) && (\n <View style={styles.loadingContainer}>\n <Spinner color={'#fff'} />\n </View>\n )}\n </View>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: '#000',\n alignItems: 'center',\n justifyContent: 'center',\n },\n webView: {\n flex: 1,\n },\n loadingContainer: {\n position: 'absolute',\n top: 50,\n left: 0,\n right: 0,\n bottom: 50,\n justifyContent: 'center',\n alignItems: 'center',\n },\n});\n\nexport default MediaPlayer;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","Component","Platform","View","StyleSheet","Dimensions","ScreenOrientation","DeviceMotion","YoutubePlayer","getYoutubeMeta","Vimeo","WebView","Video","Spinner","SCREEN_HEIGHT","get","height","SCREEN_WIDTH","width","EXPO_VIDEO_PROPS","rate","isMuted","volume","RETRY_RECOVER","RETRY_LOADING","MediaPlayer","constructor","props","_defineProperty","setupForPlaying","lockAsync","OS","OrientationLock","DEFAULT","ALL","motionAvailalble","isAvailableAsync","setUpdateInterval","addListener","onMotionChange","checkStreamLoaded","clearInterval","removeAllListeners","PORTRAIT_UP","url","replace","split","undefined","ids","result","match","source","useVideoPlayer","isUrlLink","startsWith","isYoutube","includes","isVimeo","heightFactor","metadata","getYoutubeVideoId","setState","playbackLoaded","readyToRender","playbackId","wait","force","retryLoading","console","log","setTimeout","playbackBuffering","state","videoPlayer","loadAsync","uri","getStreamPlaybackUrl","overrideFileExtensionAndroid","deviceRotation","beta","gamma","absGamma","Math","abs","absBeta","isGammaNegative","sign","changeEvent","rotation","deviceOrientation","orientation","isLandscape","orientationQueue","push","length","slice","every","i","orientationChanged","setInterval","checkReloadStream","status","isLoaded","isBuffering","isPlaying","error","playbackPlaying","shouldPlay","e","forceWebview","type","youtubeId","autoPlay","createElement","ref","youtubePlayer","videoId","play","onReady","onYoutubeReady","onError","onYoutubeError","playbackRate","playerParams","cc_lang_pref","showClosedCaptions","vimeoId","style","marginLeft","marginRight","loop","controls","speed","time","embedUrl","startInLoadingState","javaScriptEnabled","scrollEnabled","automaticallyAdjustContentInsets","mediaPlaybackRequiresUserAction","styles","webView","_extends","vp","resizeMode","RESIZE_MODE_CONTAIN","useNativeControls","onLoadStart","onStreamLoadStart","onLoad","onStreamLoaded","onStreamError","onPlaybackStatusUpdate","onStreamStatusUpdate","render","player","showLoading","getYoutubePlayer","getVimeoId","getVimeoPlayer","getStreamPlayer","getWebviewPlayer","container","loadingContainer","color","create","flex","backgroundColor","alignItems","justifyContent","position","top","left","right","bottom"],"sources":["MediaPlayer.js"],"sourcesContent":["import React, { Component } from 'react';\nimport { Platform, View, StyleSheet, Dimensions } from 'react-native';\nimport * as ScreenOrientation from 'expo-screen-orientation';\nimport { DeviceMotion } from 'expo-sensors';\nimport YoutubePlayer, { getYoutubeMeta } from 'react-native-youtube-iframe';\nimport { Vimeo } from 'react-native-vimeo-iframe';\nimport { WebView } from 'react-native-webview';\nimport { Video } from 'expo-av';\n// import VideoPlayer from 'expo-video-player';\nimport { Spinner } from './Spinner';\n\nconst SCREEN_HEIGHT = Dimensions.get('window').height;\nconst SCREEN_WIDTH = Dimensions.get('window').width;\nconst EXPO_VIDEO_PROPS = { rate: 1, isMuted: false, volume: 1 };\nconst RETRY_RECOVER = 30000;\nconst RETRY_LOADING = 10000;\n\nclass MediaPlayer extends Component {\n constructor(props) {\n super(props);\n this.state = {\n deviceOrientation: null,\n isLandscape: false,\n isUrlLink: true,\n isYoutube: false,\n isVimeo: false,\n forceWebview: false,\n heightFactor: 0,\n playbackLoaded: false,\n playbackBuffering: false,\n playbackPlaying: false,\n readyToRender: false,\n };\n this.youtubePlayer = null;\n this.videoPlayer = null;\n this.checkStreamLoaded = null;\n this.retryLoading = false;\n this.orientationQueue = [];\n }\n\n componentDidMount = async () => {\n await this.setupForPlaying();\n\n ScreenOrientation.lockAsync(Platform.OS === 'ios' ? ScreenOrientation.OrientationLock.DEFAULT : ScreenOrientation.OrientationLock.ALL);\n const motionAvailalble = await DeviceMotion.isAvailableAsync();\n // console.log('motionAvailalble', motionAvailalble);\n if (motionAvailalble) {\n DeviceMotion.setUpdateInterval(500);\n DeviceMotion.addListener(this.onMotionChange);\n }\n };\n\n componentWillUnmount = () => {\n if (this.checkStreamLoaded) clearInterval(this.checkStreamLoaded);\n DeviceMotion.removeAllListeners();\n ScreenOrientation.lockAsync(ScreenOrientation.OrientationLock.PORTRAIT_UP);\n };\n\n getYoutubeVideoId = url => {\n url = url.replace(/(>|<)/gi, '').split(/(vi\\/|v=|\\/v\\/|youtu\\.be\\/|\\/embed\\/)/);\n if (url[2] !== undefined) {\n const ids = url[2].split(/[^0-9a-z_\\-]/i);\n return ids[0];\n } else {\n return '';\n }\n };\n\n getVimeoId = url => {\n const result = url.match(\n /(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/(?:[^\\/]*)\\/videos\\/|album\\/(?:\\d+)\\/video\\/|video\\/|)(\\d+)(?:[a-zA-Z0-9_\\-]+)?/i,\n );\n return result[1];\n };\n\n setupForPlaying = async () => {\n // Extract live stream info\n const { source, useVideoPlayer } = this.props;\n const isUrlLink = source && source.startsWith('http');\n const isYoutube = source && (source.includes('youtube.com/watch?v=') || source.includes('youtu.be/'));\n const isVimeo = source && source.includes('vimeo.com/');\n let heightFactor = 0;\n\n if (isYoutube) {\n const metadata = await getYoutubeMeta(this.getYoutubeVideoId(source));\n heightFactor = metadata.height / metadata.width;\n } else if (useVideoPlayer) {\n heightFactor = 0;\n } else {\n heightFactor = 0.565;\n }\n\n this.setState({ isUrlLink, isYoutube, isVimeo, playbackLoaded: isYoutube || isVimeo, heightFactor, readyToRender: true });\n };\n\n getStreamPlaybackUrl = () => {\n // return 'https://stream.mux.com/Ym4nKktRpGuZNBBBlzhxpyRwZLpvMlPRchcu01x6Ur600.m3u8';\n return `https://stream.mux.com/${this.props.playbackId}.m3u8`;\n };\n\n checkReloadStream = (wait = RETRY_LOADING, force = false) => {\n if (!force && this.retryLoading) return;\n\n console.log(`Check loading in ${wait} milliseconds...`);\n this.retryLoading = true;\n setTimeout(async () => {\n const { playbackLoaded, playbackBuffering } = this.state;\n try {\n if (playbackLoaded === false || playbackBuffering === true) {\n console.log('Reloading started');\n await this.videoPlayer.loadAsync(\n { uri: this.getStreamPlaybackUrl(), overrideFileExtensionAndroid: 'm3u8' },\n EXPO_VIDEO_PROPS,\n false,\n );\n } else {\n console.log('Already loaded - not reloading');\n }\n this.retryLoading = false;\n } catch {}\n }, wait);\n };\n\n isLandscape = deviceRotation => {\n const { beta, gamma } = deviceRotation;\n const absGamma = Math.abs(gamma);\n const absBeta = Math.abs(beta);\n const isGammaNegative = Math.sign(gamma) === -1;\n\n if (absGamma <= 0.04 && absBeta <= 0.24) {\n //Portrait mode, on a flat surface.\n return false;\n } else if ((absGamma <= 1.0 || absGamma >= 2.3) && absBeta >= 0.5) {\n //General Portrait mode, accounting for forward and back tilt on the top of the phone.\n return false;\n } else {\n if (isGammaNegative) {\n //Landscape mode with the top of the phone to the left.\n return true;\n } else {\n //Landscape mode with the top of the phone to the right.\n return true;\n }\n }\n };\n\n onMotionChange = async changeEvent => {\n const deviceRotation = changeEvent.rotation;\n const deviceOrientation = changeEvent.orientation;\n const isLandscape = this.isLandscape(deviceRotation);\n this.orientationQueue.push(isLandscape);\n if (this.orientationQueue.length > 2) this.orientationQueue = this.orientationQueue.slice(-2);\n // console.log('onMotionChange - orientationQueue', this.orientationQueue);\n if (\n isLandscape !== this.state.isLandscape &&\n isLandscape === (Math.abs(deviceOrientation) === 90) &&\n this.orientationQueue.every(i => i === isLandscape)\n ) {\n this.setState({ isLandscape }, () => {\n // console.log('isLandscape', this.state.isLandscape);\n if (this.props.orientationChanged) this.props.orientationChanged(this.state.isLandscape);\n });\n }\n };\n\n onStreamLoadStart = () => {\n console.log('Stream load started');\n this.checkStreamLoaded = setInterval(() => {\n const { playbackLoaded } = this.state;\n if (playbackLoaded === false) {\n console.log('Stream loading failed unexpectedly');\n this.checkReloadStream(1000, true);\n } else {\n clearInterval(this.checkStreamLoaded);\n }\n }, RETRY_RECOVER);\n };\n\n onStreamLoaded = status => {\n console.log(`Stream loaded - isLoaded:${status.isLoaded}, isBuffering:${status.isBuffering}, isPlaying:${status.isPlaying}`);\n };\n\n onStreamError = error => {\n console.log('Stream error', error);\n };\n\n onStreamStatusUpdate = status => {\n this.setState(\n {\n playbackLoaded: status.isLoaded,\n playbackBuffering: status.isBuffering,\n playbackPlaying: status.isPlaying,\n },\n () => {\n const { playbackLoaded, playbackBuffering, playbackPlaying, shouldPlay } = this.state;\n // console.log(`Status updated - isLoaded:${playbackLoaded}, isBuffering:${playbackBuffering}, isPlaying:${playbackPlaying}`);\n if (playbackLoaded === false && playbackBuffering === undefined && playbackPlaying === undefined) {\n this.checkReloadStream();\n } else if (playbackLoaded === true && playbackBuffering === true) {\n this.checkReloadStream(RETRY_RECOVER);\n }\n },\n );\n };\n\n onYoutubeError = e => {\n // console.log('onYoutubeError', e);\n this.setState({ forceWebview: true });\n };\n\n onYoutubeReady = () => {\n // console.log('onYoutubeReady');\n };\n\n onVideoPlayStatusUpdate = status => {\n // console.log('onVideoPlayStatusUpdate', status);\n };\n\n onVideoPlayError = error => {\n if (error && error.type === 'NonFatal') {\n return;\n }\n // console.log('onVideoPlayError', error);\n this.setState({ forceWebview: true });\n };\n\n getYoutubePlayer = (youtubeId, width, height, autoPlay) => (\n <YoutubePlayer\n ref={ref => (this.youtubePlayer = ref)}\n height={height}\n width={width}\n videoId={youtubeId}\n play={autoPlay}\n // onChangeState={event => console.log('onChangeState', event)}\n onReady={this.onYoutubeReady}\n onError={this.onYoutubeError}\n // onPlaybackQualityChange={q => console.log('onPlaybackQualityChange', q)}\n volume={50}\n playbackRate={1}\n playerParams={{\n cc_lang_pref: 'us',\n showClosedCaptions: true,\n }}\n />\n );\n\n getVimeoPlayer = (vimeoId, width, height, autoPlay) => (\n <View style={{ width, height }}>\n <Vimeo\n style={{ marginLeft: -8, marginRight: -5 }}\n videoId={vimeoId}\n // onReady={() => console.log('Video is ready')}\n // onPlay={() => console.log('Video is playing')}\n // onPlayProgress={data => console.log('Video progress data:', data)}\n // onFinish={() => console.log('Video is finished')}\n loop={false}\n autoPlay={autoPlay}\n controls={true}\n speed={true}\n time={'0m0s'}\n />\n </View>\n );\n\n getWebviewPlayer = (embedUrl, width, height) => (\n <WebView\n startInLoadingState\n javaScriptEnabled\n scrollEnabled={false}\n automaticallyAdjustContentInsets={false}\n mediaPlaybackRequiresUserAction\n style={[styles.webView, { width, height }]}\n source={{ uri: embedUrl }}\n />\n );\n\n getStreamPlayer = (embedUrl, width, height, autoPlay) => (\n <Video\n ref={vp => {\n this.videoPlayer = vp;\n }}\n source={{ uri: embedUrl }}\n {...EXPO_VIDEO_PROPS}\n shouldPlay={autoPlay}\n resizeMode={Video.RESIZE_MODE_CONTAIN}\n useNativeControls\n style={{ width, height }}\n onLoadStart={this.onStreamLoadStart}\n onLoad={this.onStreamLoaded}\n onError={this.onStreamError}\n onPlaybackStatusUpdate={this.onStreamStatusUpdate}\n />\n );\n\n // getVideoPlayer = (embedUrl, width, height, autoPlay) => (\n // <VideoPlayer\n // videoProps={{\n // shouldPlay: autoPlay,\n // resizeMode: Video.RESIZE_MODE_CONTAIN,\n // source: { uri: embedUrl },\n // }}\n // showFullscreenButton={false}\n // errorCallback={this.onVideoPlayError}\n // playbackCallback={this.onVideoPlayStatusUpdate}\n // height={height}\n // width={width}\n // />\n // );\n\n render() {\n let width, height;\n const { playbackId, source, autoPlay, useVideoPlayer } = this.props;\n const {\n readyToRender,\n isLandscape,\n heightFactor,\n isUrlLink,\n isYoutube,\n isVimeo,\n forceWebview,\n playbackLoaded,\n playbackBuffering,\n } = this.state;\n if (!readyToRender) return null;\n\n if (isLandscape) {\n width = SCREEN_HEIGHT;\n height = SCREEN_WIDTH;\n } else {\n width = SCREEN_WIDTH;\n height = heightFactor ? SCREEN_WIDTH * heightFactor : SCREEN_HEIGHT;\n }\n\n let embedUrl, player, showLoading;\n if (!forceWebview) {\n if (isYoutube) {\n const youtubeId = this.getYoutubeVideoId(source);\n embedUrl = youtubeId ? `https://www.youtube.com/embed/${youtubeId}` : source;\n // console.log('getYoutubePlayer', youtubeId, width, height, autoPlay);\n player = this.getYoutubePlayer(youtubeId, width, height, autoPlay);\n } else if (isVimeo) {\n const vimeoId = this.getVimeoId(source);\n embedUrl = source;\n // console.log('getVimeoPlayer', vimeoId, width, height, autoPlay);\n player = this.getVimeoPlayer(vimeoId, width, height, autoPlay);\n } else if (playbackId) {\n embedUrl = this.getStreamPlaybackUrl();\n // console.log('getStreamPlayer', embedUrl, width, height, autoPlay);\n player = this.getStreamPlayer(embedUrl, width, height, autoPlay);\n showLoading = true;\n } else if (useVideoPlayer) {\n embedUrl = source;\n // console.log('getVideoPlayer', embedUrl, width, height, autoPlay);\n player = this.getStreamPlayer(embedUrl, width, height, autoPlay);\n }\n }\n if (!player && isUrlLink) {\n embedUrl = source;\n console.log('getWebviewPlayer', embedUrl, width, height);\n player = this.getWebviewPlayer(embedUrl, width, height);\n }\n\n // console.log({\n // Streaming: embedUrl,\n // Landscape: isLandscape,\n // Loaded: playbackLoaded,\n // Buffering: playbackBuffering,\n // LoadingIndicator: showLoading,\n // Width: width,\n // Height: height,\n // HeightFactor: heightFactor,\n // isYoutube,\n // isVimeo,\n // playbackId,\n // useVideoPlayer,\n // });\n return (\n <View style={styles.container}>\n {player}\n {showLoading && (!playbackLoaded || playbackBuffering) && (\n <View style={styles.loadingContainer}>\n <Spinner color={'#fff'} />\n </View>\n )}\n </View>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: '#000',\n alignItems: 'center',\n justifyContent: 'center',\n },\n webView: {\n flex: 1,\n },\n loadingContainer: {\n position: 'absolute',\n top: 50,\n left: 0,\n right: 0,\n bottom: 50,\n justifyContent: 'center',\n alignItems: 'center',\n },\n});\n\nexport default MediaPlayer;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["default","EmptyStateWidget","EmptyStateMain","LoadingStateWidget","Header","LoadingIndicator","ImageUploader","ImageUploadProgress","UserListing","PlussChat","PositionedImage","FormattedText","MediaPlayer","AudienceSelectorPage"],"sources":["index.js"],"sourcesContent":["export * from './InlineButton';\nexport * from './AddToCalendarButton';\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 * from './AutoOffsetImage';\nexport { default as FormattedText } from './FormattedText';\nexport { default as MediaPlayer } from './MediaPlayer';\nexport { default as AudienceSelectorPage } from './AudienceSelectorPage';\n"],"mappings":"AAAA,cAAc,gBAAgB;AAC9B,cAAc,uBAAuB;AACrC,cAAc,YAAY;AAC1B,cAAc,mBAAmB;AACjC,cAAc,iCAAiC;AAC/C,cAAc,cAAc;AAC5B,cAAc,WAAW;AACzB,cAAc,kBAAkB;AAChC,cAAc,SAAS;AACvB,cAAc,cAAc;AAC5B,cAAc,cAAc;AAC5B,cAAc,gBAAgB;AAC9B,cAAc,eAAe;AAC7B,cAAc,gBAAgB;AAC9B,cAAc,qBAAqB;AACnC,cAAc,kBAAkB;AAChC,cAAc,gBAAgB;AAC9B,cAAc,aAAa;AAC3B,cAAc,aAAa;AAC3B,cAAc,cAAc;AAC5B,cAAc,uBAAuB;AACrC,cAAc,gBAAgB;AAC9B,cAAc,eAAe;AAC7B,cAAc,YAAY;AAC1B,cAAc,aAAa;AAC3B,cAAc,UAAU;AACxB,cAAc,SAAS;AACvB,cAAc,gBAAgB;AAC9B,cAAc,gBAAgB;AAC9B,cAAc,gBAAgB;AAC9B,cAAc,gBAAgB;AAC9B,cAAc,cAAc;AAC5B,cAAc,YAAY;AAC1B,cAAc,sBAAsB;AACpC,cAAc,gBAAgB;AAC9B,cAAc,kBAAkB;AAChC,cAAc,mBAAmB;AACjC,cAAc,iBAAiB;AAC/B,cAAc,aAAa;AAC3B,cAAc,4BAA4B;AAC1C,SAASA,OAAO,IAAIC,gBAAgB,QAAQ,oBAAoB;AAChE,SAASD,OAAO,IAAIE,cAAc,QAAQ,kBAAkB;AAC5D,SAASF,OAAO,IAAIG,kBAAkB,QAAQ,sBAAsB;AACpE,SAASH,OAAO,IAAII,MAAM,QAAQ,UAAU;AAC5C,SAASJ,OAAO,IAAIK,gBAAgB,QAAQ,oBAAoB;AAChE,SAASL,OAAO,IAAIM,aAAa,QAAQ,iBAAiB;AAC1D,SAASN,OAAO,IAAIO,mBAAmB,QAAQ,uBAAuB;AACtE,SAASP,OAAO,IAAIQ,WAAW,QAAQ,eAAe;AACtD,SAASR,OAAO,IAAIS,SAAS,QAAQ,aAAa;AAClD,SAAST,OAAO,IAAIU,eAAe,QAAQ,mBAAmB;AAC9D,cAAc,mBAAmB;AACjC,SAASV,OAAO,IAAIW,aAAa,QAAQ,iBAAiB;AAC1D,SAASX,OAAO,IAAIY,WAAW,QAAQ,eAAe;AACtD,SAASZ,OAAO,IAAIa,oBAAoB,QAAQ,wBAAwB"}
|
|
1
|
+
{"version":3,"names":["default","EmptyStateWidget","EmptyStateMain","LoadingStateWidget","Header","LoadingIndicator","ImageUploader","ImageUploadProgress","UserListing","PlussChat","PositionedImage","FormattedText","MediaPlayer","AudienceSelectorPage"],"sources":["index.js"],"sourcesContent":["export * from './InlineButton';\nexport * from './AddToCalendarButton';\nexport * from './Forbidden';\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 * from './AutoOffsetImage';\nexport { default as FormattedText } from './FormattedText';\nexport { default as MediaPlayer } from './MediaPlayer';\nexport { default as AudienceSelectorPage } from './AudienceSelectorPage';\n"],"mappings":"AAAA,cAAc,gBAAgB;AAC9B,cAAc,uBAAuB;AACrC,cAAc,aAAa;AAC3B,cAAc,YAAY;AAC1B,cAAc,mBAAmB;AACjC,cAAc,iCAAiC;AAC/C,cAAc,cAAc;AAC5B,cAAc,WAAW;AACzB,cAAc,kBAAkB;AAChC,cAAc,SAAS;AACvB,cAAc,cAAc;AAC5B,cAAc,cAAc;AAC5B,cAAc,gBAAgB;AAC9B,cAAc,eAAe;AAC7B,cAAc,gBAAgB;AAC9B,cAAc,qBAAqB;AACnC,cAAc,kBAAkB;AAChC,cAAc,gBAAgB;AAC9B,cAAc,aAAa;AAC3B,cAAc,aAAa;AAC3B,cAAc,cAAc;AAC5B,cAAc,uBAAuB;AACrC,cAAc,gBAAgB;AAC9B,cAAc,eAAe;AAC7B,cAAc,YAAY;AAC1B,cAAc,aAAa;AAC3B,cAAc,UAAU;AACxB,cAAc,SAAS;AACvB,cAAc,gBAAgB;AAC9B,cAAc,gBAAgB;AAC9B,cAAc,gBAAgB;AAC9B,cAAc,gBAAgB;AAC9B,cAAc,cAAc;AAC5B,cAAc,YAAY;AAC1B,cAAc,sBAAsB;AACpC,cAAc,gBAAgB;AAC9B,cAAc,kBAAkB;AAChC,cAAc,mBAAmB;AACjC,cAAc,iBAAiB;AAC/B,cAAc,aAAa;AAC3B,cAAc,4BAA4B;AAC1C,SAASA,OAAO,IAAIC,gBAAgB,QAAQ,oBAAoB;AAChE,SAASD,OAAO,IAAIE,cAAc,QAAQ,kBAAkB;AAC5D,SAASF,OAAO,IAAIG,kBAAkB,QAAQ,sBAAsB;AACpE,SAASH,OAAO,IAAII,MAAM,QAAQ,UAAU;AAC5C,SAASJ,OAAO,IAAIK,gBAAgB,QAAQ,oBAAoB;AAChE,SAASL,OAAO,IAAIM,aAAa,QAAQ,iBAAiB;AAC1D,SAASN,OAAO,IAAIO,mBAAmB,QAAQ,uBAAuB;AACtE,SAASP,OAAO,IAAIQ,WAAW,QAAQ,eAAe;AACtD,SAASR,OAAO,IAAIS,SAAS,QAAQ,aAAa;AAClD,SAAST,OAAO,IAAIU,eAAe,QAAQ,mBAAmB;AAC9D,cAAc,mBAAmB;AACjC,SAASV,OAAO,IAAIW,aAAa,QAAQ,iBAAiB;AAC1D,SAASX,OAAO,IAAIY,WAAW,QAAQ,eAAe;AACtD,SAASZ,OAAO,IAAIa,oBAAoB,QAAQ,wBAAwB"}
|
package/dist/module/helper.js
CHANGED
|
@@ -109,6 +109,9 @@ const getThumb300 = url => {
|
|
|
109
109
|
if (!url) {
|
|
110
110
|
return url;
|
|
111
111
|
}
|
|
112
|
+
if (isVideo(url)) {
|
|
113
|
+
return 'https://pluss60-demo-uploads.s3.ap-southeast-2.amazonaws.com/uploads/users/ap-southeast-2:97769b56-25ec-41c0-a73c-6c2c4140f629/public/9d0bbec64614b1ed654a03f7e7/movie.jpg';
|
|
114
|
+
}
|
|
112
115
|
if (url.indexOf('https://plussprdstorage.blob.core.windows.net/') !== -1) {
|
|
113
116
|
return url.replace('https://plussprdstorage.blob.core.windows.net/', 'https://plusscdn.azureedge.net/');
|
|
114
117
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_","Platform","StatusBar","Dimensions","Constants","Config","LINEGREY","getSessionTokenAWS","detectFaces","findLandmarkRange","getScaledOffset","getSiteLevelFromState","isTVEnabled","TIMESTAMP_FORMAT","DATE_FORMAT","getUrl","baseAction","action","query","baseAPIUrl","baseStage","env","queryPart","keys","forEach","key","index","encodeURIComponent","getAuthTokenHeader","Promise","resolve","reject","then","idToken","getShadowStyle","OS","shadowColor","shadowOffset","width","height","shadowOpacity","shadowRadius","backgroundColor","borderColor","elevation","StatusBarHeight","size","getStatusBarHeight","statusBarHeight","currentHeight","getSiteSettingFromState","state","defaultValue","user","siteSettings","isUndefined","getValueOrDefault","value","def","getExtension","url","fileSplit","split","length","toLowerCase","getFileName","noExtension","name","isVideo","extension","includes","isVideoUrl","urlToCheck","getValidUrl","isYoutube","isVimeo","isStockImage","indexOf","getThumb300","replace","baseUploadsUrl","urlToUse","substring","get1400","get300","getMimeType","getCompressed","imageExists","fetch","method","cache","response","status","catch","formatTime","hours","minutes","period","adjustedHours","adjustedMinutes","String","padStart","minutesToString","isTimeOfDay","Math","floor","remainingMinutes","hoursString","minutesString","getPluralS","count","getPluralOptions","singular","plural","randomString","c","r","random","v","toString","generateImageName","source","result","last","getSite","site","preferredSite","getTakeoverThumb","uri","filename","pop","getTakeoverImage","getImageSource","isThumb","getFirstName","isEmpty","usersToSearchResult","contacts","excludedUserIds","push","displayName","id","objectID","ID","userId","Id","profilePic","photoURL","unit","contact","searchUsers","term","filter","some","part","getTabSettingsFromState","tabSettings","interface","getEnabledTabsFromState","tab","isEnabled","getReactions","icon","require","hasReacted","reactions","isTablet","get","getVimeoEmbed","vimeoId","regExp","match","getYoutubeEmbed","newUrl","decodeURIComponent","trim","test","getUserPreview","uid","allowComments","canComment","defaultAllowComments"],"sources":["helper.js"],"sourcesContent":["import _ from 'lodash';\nimport { Platform, StatusBar, Dimensions } from 'react-native';\nimport Constants from 'expo-constants';\nimport Config from './config';\nimport { LINEGREY } from './colours';\nimport { getSessionTokenAWS } from './session';\n\n// seperated files to export\nimport detectFaces from './js/images/detectFaces';\nimport findLandmarkRange from './js/images/findLandmarkRange';\nimport getScaledOffset from './js/images/getScaledOffset';\n\nimport getSiteLevelFromState from './js/site/getSiteLevelFromState';\nimport isTVEnabled from './js/site/isTVEnabled';\n\nconst TIMESTAMP_FORMAT = 'D MMM • h:mma';\nconst DATE_FORMAT = 'D MMM YYYY';\n\nconst getUrl = (baseAction, action, query) => {\n const { baseAPIUrl, baseStage } = Config.env;\n let queryPart = '';\n if (query) {\n _.keys(query).forEach((key, index) => {\n queryPart += `${index === 0 ? '?' : '&'}${key}=${encodeURIComponent(query[key])}`;\n });\n }\n return `${baseAPIUrl}/${baseAction}-${baseStage}/${action}${queryPart}`;\n};\n\nconst getAuthTokenHeader = () => {\n return new Promise((resolve, reject) => {\n getSessionTokenAWS().then(idToken => {\n resolve(`Bearer ${idToken}`);\n });\n });\n};\n\nconst getShadowStyle = () => {\n if (Platform.OS === 'ios') {\n return {\n shadowColor: '#000',\n shadowOffset: {\n width: 0,\n height: 1,\n },\n shadowOpacity: 0.1,\n shadowRadius: 3,\n backgroundColor: '#fff',\n };\n }\n return {\n borderColor: LINEGREY,\n backgroundColor: '#fff',\n elevation: 8,\n };\n};\n\nconst StatusBarHeight = size => {\n return getStatusBarHeight() + size;\n};\n\nconst getStatusBarHeight = () => {\n return Platform.OS === 'ios' ? Constants.statusBarHeight : StatusBar.currentHeight;\n};\n\nconst getSiteSettingFromState = (state, key, defaultValue) => {\n if (state && state.user && state.user.siteSettings && !_.isUndefined(state.user.siteSettings[key])) {\n return state.user.siteSettings[key];\n }\n return defaultValue || null;\n};\n\nconst getValueOrDefault = (value, def) => {\n return !_.isUndefined(value) ? value : def;\n};\n\nconst getExtension = url => {\n if (!url) {\n return null;\n }\n const fileSplit = url.split('.');\n return fileSplit[fileSplit.length - 1].toLowerCase();\n};\n\nconst getFileName = (url, noExtension) => {\n if (!url) {\n return null;\n }\n const fileSplit = url.split('/');\n const name = fileSplit[fileSplit.length - 1].toLowerCase();\n if (!noExtension) {\n return name;\n }\n return name.split('.')[0];\n};\n\nconst isVideo = url => {\n const extension = getExtension(url);\n return ['mov', 'mp4'].includes(extension);\n};\n\nconst isVideoUrl = url => {\n const urlToCheck = getValidUrl(url);\n if (isVideo(urlToCheck)) {\n return true;\n }\n if (isYoutube(urlToCheck)) {\n return true;\n }\n if (isVimeo(urlToCheck)) {\n return true;\n }\n return false;\n};\n\nconst isStockImage = url => {\n return url.indexOf('https://pluss60-dev-uploads.s3.ap-southeast-2.amazonaws.com/uploads/library') !== -1;\n};\n\nconst getThumb300 = url => {\n if (!url) {\n return url;\n }\n if (url.indexOf('https://plussprdstorage.blob.core.windows.net/') !== -1) {\n return url.replace('https://plussprdstorage.blob.core.windows.net/', 'https://plusscdn.azureedge.net/');\n }\n if (url.indexOf('https://plusscdn.azureedge.net/') !== -1) {\n return url\n .replace('/uploads/', '/uploads-thumb/')\n .replace('/general/', '/general300/')\n .replace('/uploads1400/', '/uploads-thumb/')\n .replace('/general1400/', '/general300/');\n }\n if (isStockImage(url) || url.indexOf(Config.env.baseUploadsUrl) !== -1) {\n const extension = getExtension(url);\n let urlToUse = url;\n if (extension !== 'jpg') {\n urlToUse = `${url.substring(0, url.length - extension.length)}jpg`;\n }\n return urlToUse.replace('/1400/', '/thumb300/').replace('/uploads/', '/thumb300/');\n }\n return url;\n};\n\nconst get1400 = url => {\n if (!url) {\n return url;\n }\n if (url.indexOf('https://plussprdstorage.blob.core.windows.net/') !== -1) {\n return url.replace('https://plussprdstorage.blob.core.windows.net/', 'https://plusscdn.azureedge.net/');\n }\n if (url.indexOf('https://plusscdn.azureedge.net/') !== -1) {\n return url.replace('/uploads/', '/uploads1400/').replace('/general/', '/general1400/');\n }\n if (isStockImage(url) || url.indexOf(Config.env.baseUploadsUrl) !== -1) {\n const extension = getExtension(url);\n let urlToUse = url;\n if (extension !== 'jpg') {\n urlToUse = `${url.substring(0, url.length - extension.length)}jpg`;\n }\n return urlToUse.replace('/uploads/', '/1400/');\n }\n return url;\n};\n\nconst get300 = url => {\n if (!url) {\n return url;\n }\n if (isStockImage(url) || url.indexOf(Config.env.baseUploadsUrl) !== -1) {\n const extension = getExtension(url);\n let urlToUse = url;\n if (extension !== 'jpg') {\n urlToUse = `${url.substring(0, url.length - extension.length)}jpg`;\n }\n return urlToUse.replace('/uploads/', '/300/').replace('/1400/', '/300/');\n }\n return url;\n};\n\nconst getMimeType = url => {\n const extension = getExtension(url);\n switch (extension) {\n case 'mov':\n return 'video/quicktime';\n case 'mp4':\n return 'video/mp4';\n default:\n return 'image/jpeg';\n }\n};\n\nconst getCompressed = url => {\n if (!url || typeof url !== 'string') return '';\n return url.replace('/uploads/', '/compressed/');\n};\n\nconst imageExists = url => {\n return new Promise(resolve => {\n fetch(url, { method: 'HEAD', cache: 'no-cache' })\n .then(response => {\n resolve(response.status === 200);\n })\n .catch(() => {\n resolve(false);\n });\n });\n};\n\nconst formatTime = (hours, minutes) => {\n const period = hours >= 12 ? 'pm' : 'am';\n\n // Convert 24-hour format to 12-hour format\n const adjustedHours = hours > 12 ? hours - 12 : hours === 0 ? 12 : hours;\n\n // Ensure minutes are two digits\n const adjustedMinutes = String(minutes).padStart(2, '0');\n\n return `${adjustedHours}:${adjustedMinutes}${period}`;\n};\n\nconst minutesToString = (minutes, isTimeOfDay) => {\n const hours = Math.floor(minutes / 60);\n const remainingMinutes = minutes % 60;\n\n if (isTimeOfDay) {\n return formatTime(hours, remainingMinutes);\n }\n\n const hoursString = hours > 1 ? `${hours} hours` : `${hours} hour`;\n const minutesString = remainingMinutes > 1 ? `${remainingMinutes} minutes` : `${remainingMinutes} minute`;\n\n if (hours && remainingMinutes) {\n return `${hoursString} ${minutesString}`;\n }\n if (hours) {\n return hoursString;\n }\n if (remainingMinutes) {\n return minutesString;\n }\n return '0 minutes';\n};\n\nconst getPluralS = count => {\n return count === 1 ? '' : 's';\n};\n\nconst getPluralOptions = (count, singular, plural) => {\n if (count === 1) {\n return singular;\n }\n return plural;\n};\n\nconst randomString = (name = '') => {\n return `xxxxxxxx4xxxyxxxxxxxxxxxxx${name}`.replace(/[xy]/g, c => {\n // eslint-disable-next-line\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n\nconst generateImageName = (name, source) => {\n let result = randomString(name);\n if (source) {\n result += `.${_.last(source.split('.'))}`;\n }\n return result;\n};\n\nconst getSite = site => {\n return site === 'plussSpace' || site === 'hq' ? Config.env.preferredSite : site;\n};\n\nconst getTakeoverThumb = uri => {\n const filename = uri.split('/').pop();\n switch (filename) {\n default:\n return { uri };\n }\n};\n\nconst getTakeoverImage = uri => {\n const filename = uri.split('/').pop();\n switch (filename) {\n default:\n return { uri };\n }\n};\n\nconst getImageSource = (uri, isThumb) => {\n if (uri == null) return null;\n if (isThumb) return getTakeoverThumb(uri);\n return getTakeoverImage(uri);\n};\n\nconst getFirstName = name => {\n if (_.isEmpty(name)) {\n return name;\n }\n return name.split(' ')[0];\n};\n\nconst usersToSearchResult = (contacts, excludedUserIds) => {\n let result = [];\n contacts.forEach(user => {\n result.push({\n displayName: user.displayName,\n id: user.objectID || user.id || user.ID || user.userId || user.Id,\n profilePic: user.profilePic || user.photoURL || null,\n unit: user.unit,\n });\n });\n result = _.reject(result, contact => {\n return _.includes(excludedUserIds, contact.id);\n });\n return result;\n};\n\nconst searchUsers = (source, term) => {\n if (_.isEmpty(term)) {\n return source;\n }\n return _.filter(source, user => {\n const split = user.displayName.split(' ');\n return _.some(split, part => {\n return part.toLowerCase().indexOf(term.toLowerCase()) === 0;\n });\n });\n};\n\nconst getTabSettingsFromState = state => {\n const tabSettings = (state.user && state.user.interface) || getSiteSettingFromState(state, 'TabSettings', null);\n return tabSettings;\n};\n\nconst getEnabledTabsFromState = state => {\n const tabSettings = getTabSettingsFromState(state);\n return tabSettings ? tabSettings.filter(tab => tab.isEnabled) : [];\n};\n\nconst getReactions = () => {\n return [\n {\n key: 'heart',\n icon: require('./assets/icons/reactions/heart.png'),\n },\n {\n key: 'smile',\n icon: require('./assets/icons/reactions/smile.png'),\n },\n {\n key: 'sad',\n icon: require('./assets/icons/reactions/sad.png'),\n },\n {\n key: 'party',\n icon: require('./assets/icons/reactions/party.png'),\n },\n ];\n};\n\nconst hasReacted = (reactions, userId) => {\n return _.some(reactions, r => {\n return !!r[userId];\n });\n};\n\nconst isTablet = () => {\n return Dimensions.get('screen').width > 600;\n};\n\nconst isVimeo = url => {\n if (_.isEmpty(url)) {\n return false;\n }\n if (url.indexOf('https://vimeo.com/') === 0) {\n return true;\n }\n if (url.indexOf('https://player.vimeo.com/video/') === 0) {\n return true;\n }\n};\n\nconst getVimeoEmbed = url => {\n if (_.isEmpty(url)) {\n return '';\n }\n if (url.indexOf('https://vimeo.com/') === 0) {\n const vimeoId = 'lol'; //TODO\n return `https://player.vimeo.com/video/${vimeoId}`;\n }\n return url; //TODO\n};\n\nconst isYoutube = url => {\n if (_.isUndefined(url) || _.isEmpty(url)) {\n return false;\n }\n const regExp = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|\\&v=|\\?v=)([^#\\&\\?]*).*/;\n const match = url.match(regExp);\n if (match && match[2].length === 11) {\n return true;\n }\n return false;\n};\n\nconst getYoutubeEmbed = url => {\n const regExp = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|\\&v=|\\?v=)([^#\\&\\?]*).*/;\n const match = url.match(regExp);\n return `https://www.youtube.com/embed/${match[2]}?autoplay=0`;\n};\n\nconst getValidUrl = (url = '') => {\n let newUrl = decodeURIComponent(url);\n newUrl = newUrl.trim().replace(/\\s/g, '');\n\n if (/^(:\\/\\/)/.test(newUrl)) {\n return `https${newUrl}`;\n }\n if (!/^(f|ht)tps?:\\/\\//i.test(newUrl)) {\n return `https://${newUrl}`;\n }\n\n return newUrl;\n};\n\nconst getUserPreview = user => {\n return {\n id: user.uid,\n displayName: user.displayName,\n profilePic: user.profilePic || null,\n };\n};\n\nconst allowComments = canComment => {\n if (canComment === false) {\n return false;\n }\n if (canComment === true) {\n return true;\n }\n return Config.env.defaultAllowComments;\n};\n\nexport {\n TIMESTAMP_FORMAT,\n DATE_FORMAT,\n getUrl,\n getAuthTokenHeader,\n getShadowStyle,\n StatusBarHeight,\n getStatusBarHeight,\n getSiteSettingFromState,\n getValueOrDefault,\n getExtension,\n getFileName,\n isVideo,\n get300,\n getThumb300,\n get1400,\n getMimeType,\n getCompressed,\n imageExists,\n getPluralS,\n getPluralOptions,\n formatTime,\n minutesToString,\n randomString,\n generateImageName,\n getSite,\n getImageSource,\n getFirstName,\n usersToSearchResult,\n searchUsers,\n getEnabledTabsFromState,\n getReactions,\n hasReacted,\n isTablet,\n isYoutube,\n getYoutubeEmbed,\n getValidUrl,\n getUserPreview,\n allowComments,\n isVideoUrl,\n detectFaces,\n findLandmarkRange,\n getScaledOffset,\n getSiteLevelFromState,\n isTVEnabled,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_","Platform","StatusBar","Dimensions","Constants","Config","LINEGREY","getSessionTokenAWS","detectFaces","findLandmarkRange","getScaledOffset","getSiteLevelFromState","isTVEnabled","TIMESTAMP_FORMAT","DATE_FORMAT","getUrl","baseAction","action","query","baseAPIUrl","baseStage","env","queryPart","keys","forEach","key","index","encodeURIComponent","getAuthTokenHeader","Promise","resolve","reject","then","idToken","getShadowStyle","OS","shadowColor","shadowOffset","width","height","shadowOpacity","shadowRadius","backgroundColor","borderColor","elevation","StatusBarHeight","size","getStatusBarHeight","statusBarHeight","currentHeight","getSiteSettingFromState","state","defaultValue","user","siteSettings","isUndefined","getValueOrDefault","value","def","getExtension","url","fileSplit","split","length","toLowerCase","getFileName","noExtension","name","isVideo","extension","includes","isVideoUrl","urlToCheck","getValidUrl","isYoutube","isVimeo","isStockImage","indexOf","getThumb300","replace","baseUploadsUrl","urlToUse","substring","get1400","get300","getMimeType","getCompressed","imageExists","fetch","method","cache","response","status","catch","formatTime","hours","minutes","period","adjustedHours","adjustedMinutes","String","padStart","minutesToString","isTimeOfDay","Math","floor","remainingMinutes","hoursString","minutesString","getPluralS","count","getPluralOptions","singular","plural","randomString","c","r","random","v","toString","generateImageName","source","result","last","getSite","site","preferredSite","getTakeoverThumb","uri","filename","pop","getTakeoverImage","getImageSource","isThumb","getFirstName","isEmpty","usersToSearchResult","contacts","excludedUserIds","push","displayName","id","objectID","ID","userId","Id","profilePic","photoURL","unit","contact","searchUsers","term","filter","some","part","getTabSettingsFromState","tabSettings","interface","getEnabledTabsFromState","tab","isEnabled","getReactions","icon","require","hasReacted","reactions","isTablet","get","getVimeoEmbed","vimeoId","regExp","match","getYoutubeEmbed","newUrl","decodeURIComponent","trim","test","getUserPreview","uid","allowComments","canComment","defaultAllowComments"],"sources":["helper.js"],"sourcesContent":["import _ from 'lodash';\nimport { Platform, StatusBar, Dimensions } from 'react-native';\nimport Constants from 'expo-constants';\nimport Config from './config';\nimport { LINEGREY } from './colours';\nimport { getSessionTokenAWS } from './session';\n\n// seperated files to export\nimport detectFaces from './js/images/detectFaces';\nimport findLandmarkRange from './js/images/findLandmarkRange';\nimport getScaledOffset from './js/images/getScaledOffset';\n\nimport getSiteLevelFromState from './js/site/getSiteLevelFromState';\nimport isTVEnabled from './js/site/isTVEnabled';\n\nconst TIMESTAMP_FORMAT = 'D MMM • h:mma';\nconst DATE_FORMAT = 'D MMM YYYY';\n\nconst getUrl = (baseAction, action, query) => {\n const { baseAPIUrl, baseStage } = Config.env;\n let queryPart = '';\n if (query) {\n _.keys(query).forEach((key, index) => {\n queryPart += `${index === 0 ? '?' : '&'}${key}=${encodeURIComponent(query[key])}`;\n });\n }\n return `${baseAPIUrl}/${baseAction}-${baseStage}/${action}${queryPart}`;\n};\n\nconst getAuthTokenHeader = () => {\n return new Promise((resolve, reject) => {\n getSessionTokenAWS().then(idToken => {\n resolve(`Bearer ${idToken}`);\n });\n });\n};\n\nconst getShadowStyle = () => {\n if (Platform.OS === 'ios') {\n return {\n shadowColor: '#000',\n shadowOffset: {\n width: 0,\n height: 1,\n },\n shadowOpacity: 0.1,\n shadowRadius: 3,\n backgroundColor: '#fff',\n };\n }\n return {\n borderColor: LINEGREY,\n backgroundColor: '#fff',\n elevation: 8,\n };\n};\n\nconst StatusBarHeight = size => {\n return getStatusBarHeight() + size;\n};\n\nconst getStatusBarHeight = () => {\n return Platform.OS === 'ios' ? Constants.statusBarHeight : StatusBar.currentHeight;\n};\n\nconst getSiteSettingFromState = (state, key, defaultValue) => {\n if (state && state.user && state.user.siteSettings && !_.isUndefined(state.user.siteSettings[key])) {\n return state.user.siteSettings[key];\n }\n return defaultValue || null;\n};\n\nconst getValueOrDefault = (value, def) => {\n return !_.isUndefined(value) ? value : def;\n};\n\nconst getExtension = url => {\n if (!url) {\n return null;\n }\n const fileSplit = url.split('.');\n return fileSplit[fileSplit.length - 1].toLowerCase();\n};\n\nconst getFileName = (url, noExtension) => {\n if (!url) {\n return null;\n }\n const fileSplit = url.split('/');\n const name = fileSplit[fileSplit.length - 1].toLowerCase();\n if (!noExtension) {\n return name;\n }\n return name.split('.')[0];\n};\n\nconst isVideo = url => {\n const extension = getExtension(url);\n return ['mov', 'mp4'].includes(extension);\n};\n\nconst isVideoUrl = url => {\n const urlToCheck = getValidUrl(url);\n if (isVideo(urlToCheck)) {\n return true;\n }\n if (isYoutube(urlToCheck)) {\n return true;\n }\n if (isVimeo(urlToCheck)) {\n return true;\n }\n return false;\n};\n\nconst isStockImage = url => {\n return url.indexOf('https://pluss60-dev-uploads.s3.ap-southeast-2.amazonaws.com/uploads/library') !== -1;\n};\n\nconst getThumb300 = url => {\n if (!url) {\n return url;\n }\n if (isVideo(url)) {\n return 'https://pluss60-demo-uploads.s3.ap-southeast-2.amazonaws.com/uploads/users/ap-southeast-2:97769b56-25ec-41c0-a73c-6c2c4140f629/public/9d0bbec64614b1ed654a03f7e7/movie.jpg';\n }\n if (url.indexOf('https://plussprdstorage.blob.core.windows.net/') !== -1) {\n return url.replace('https://plussprdstorage.blob.core.windows.net/', 'https://plusscdn.azureedge.net/');\n }\n if (url.indexOf('https://plusscdn.azureedge.net/') !== -1) {\n return url\n .replace('/uploads/', '/uploads-thumb/')\n .replace('/general/', '/general300/')\n .replace('/uploads1400/', '/uploads-thumb/')\n .replace('/general1400/', '/general300/');\n }\n if (isStockImage(url) || url.indexOf(Config.env.baseUploadsUrl) !== -1) {\n const extension = getExtension(url);\n let urlToUse = url;\n if (extension !== 'jpg') {\n urlToUse = `${url.substring(0, url.length - extension.length)}jpg`;\n }\n return urlToUse.replace('/1400/', '/thumb300/').replace('/uploads/', '/thumb300/');\n }\n return url;\n};\n\nconst get1400 = url => {\n if (!url) {\n return url;\n }\n if (url.indexOf('https://plussprdstorage.blob.core.windows.net/') !== -1) {\n return url.replace('https://plussprdstorage.blob.core.windows.net/', 'https://plusscdn.azureedge.net/');\n }\n if (url.indexOf('https://plusscdn.azureedge.net/') !== -1) {\n return url.replace('/uploads/', '/uploads1400/').replace('/general/', '/general1400/');\n }\n if (isStockImage(url) || url.indexOf(Config.env.baseUploadsUrl) !== -1) {\n const extension = getExtension(url);\n let urlToUse = url;\n if (extension !== 'jpg') {\n urlToUse = `${url.substring(0, url.length - extension.length)}jpg`;\n }\n return urlToUse.replace('/uploads/', '/1400/');\n }\n return url;\n};\n\nconst get300 = url => {\n if (!url) {\n return url;\n }\n if (isStockImage(url) || url.indexOf(Config.env.baseUploadsUrl) !== -1) {\n const extension = getExtension(url);\n let urlToUse = url;\n if (extension !== 'jpg') {\n urlToUse = `${url.substring(0, url.length - extension.length)}jpg`;\n }\n return urlToUse.replace('/uploads/', '/300/').replace('/1400/', '/300/');\n }\n return url;\n};\n\nconst getMimeType = url => {\n const extension = getExtension(url);\n switch (extension) {\n case 'mov':\n return 'video/quicktime';\n case 'mp4':\n return 'video/mp4';\n default:\n return 'image/jpeg';\n }\n};\n\nconst getCompressed = url => {\n if (!url || typeof url !== 'string') return '';\n return url.replace('/uploads/', '/compressed/');\n};\n\nconst imageExists = url => {\n return new Promise(resolve => {\n fetch(url, { method: 'HEAD', cache: 'no-cache' })\n .then(response => {\n resolve(response.status === 200);\n })\n .catch(() => {\n resolve(false);\n });\n });\n};\n\nconst formatTime = (hours, minutes) => {\n const period = hours >= 12 ? 'pm' : 'am';\n\n // Convert 24-hour format to 12-hour format\n const adjustedHours = hours > 12 ? hours - 12 : hours === 0 ? 12 : hours;\n\n // Ensure minutes are two digits\n const adjustedMinutes = String(minutes).padStart(2, '0');\n\n return `${adjustedHours}:${adjustedMinutes}${period}`;\n};\n\nconst minutesToString = (minutes, isTimeOfDay) => {\n const hours = Math.floor(minutes / 60);\n const remainingMinutes = minutes % 60;\n\n if (isTimeOfDay) {\n return formatTime(hours, remainingMinutes);\n }\n\n const hoursString = hours > 1 ? `${hours} hours` : `${hours} hour`;\n const minutesString = remainingMinutes > 1 ? `${remainingMinutes} minutes` : `${remainingMinutes} minute`;\n\n if (hours && remainingMinutes) {\n return `${hoursString} ${minutesString}`;\n }\n if (hours) {\n return hoursString;\n }\n if (remainingMinutes) {\n return minutesString;\n }\n return '0 minutes';\n};\n\nconst getPluralS = count => {\n return count === 1 ? '' : 's';\n};\n\nconst getPluralOptions = (count, singular, plural) => {\n if (count === 1) {\n return singular;\n }\n return plural;\n};\n\nconst randomString = (name = '') => {\n return `xxxxxxxx4xxxyxxxxxxxxxxxxx${name}`.replace(/[xy]/g, c => {\n // eslint-disable-next-line\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n\nconst generateImageName = (name, source) => {\n let result = randomString(name);\n if (source) {\n result += `.${_.last(source.split('.'))}`;\n }\n return result;\n};\n\nconst getSite = site => {\n return site === 'plussSpace' || site === 'hq' ? Config.env.preferredSite : site;\n};\n\nconst getTakeoverThumb = uri => {\n const filename = uri.split('/').pop();\n switch (filename) {\n default:\n return { uri };\n }\n};\n\nconst getTakeoverImage = uri => {\n const filename = uri.split('/').pop();\n switch (filename) {\n default:\n return { uri };\n }\n};\n\nconst getImageSource = (uri, isThumb) => {\n if (uri == null) return null;\n if (isThumb) return getTakeoverThumb(uri);\n return getTakeoverImage(uri);\n};\n\nconst getFirstName = name => {\n if (_.isEmpty(name)) {\n return name;\n }\n return name.split(' ')[0];\n};\n\nconst usersToSearchResult = (contacts, excludedUserIds) => {\n let result = [];\n contacts.forEach(user => {\n result.push({\n displayName: user.displayName,\n id: user.objectID || user.id || user.ID || user.userId || user.Id,\n profilePic: user.profilePic || user.photoURL || null,\n unit: user.unit,\n });\n });\n result = _.reject(result, contact => {\n return _.includes(excludedUserIds, contact.id);\n });\n return result;\n};\n\nconst searchUsers = (source, term) => {\n if (_.isEmpty(term)) {\n return source;\n }\n return _.filter(source, user => {\n const split = user.displayName.split(' ');\n return _.some(split, part => {\n return part.toLowerCase().indexOf(term.toLowerCase()) === 0;\n });\n });\n};\n\nconst getTabSettingsFromState = state => {\n const tabSettings = (state.user && state.user.interface) || getSiteSettingFromState(state, 'TabSettings', null);\n return tabSettings;\n};\n\nconst getEnabledTabsFromState = state => {\n const tabSettings = getTabSettingsFromState(state);\n return tabSettings ? tabSettings.filter(tab => tab.isEnabled) : [];\n};\n\nconst getReactions = () => {\n return [\n {\n key: 'heart',\n icon: require('./assets/icons/reactions/heart.png'),\n },\n {\n key: 'smile',\n icon: require('./assets/icons/reactions/smile.png'),\n },\n {\n key: 'sad',\n icon: require('./assets/icons/reactions/sad.png'),\n },\n {\n key: 'party',\n icon: require('./assets/icons/reactions/party.png'),\n },\n ];\n};\n\nconst hasReacted = (reactions, userId) => {\n return _.some(reactions, r => {\n return !!r[userId];\n });\n};\n\nconst isTablet = () => {\n return Dimensions.get('screen').width > 600;\n};\n\nconst isVimeo = url => {\n if (_.isEmpty(url)) {\n return false;\n }\n if (url.indexOf('https://vimeo.com/') === 0) {\n return true;\n }\n if (url.indexOf('https://player.vimeo.com/video/') === 0) {\n return true;\n }\n};\n\nconst getVimeoEmbed = url => {\n if (_.isEmpty(url)) {\n return '';\n }\n if (url.indexOf('https://vimeo.com/') === 0) {\n const vimeoId = 'lol'; //TODO\n return `https://player.vimeo.com/video/${vimeoId}`;\n }\n return url; //TODO\n};\n\nconst isYoutube = url => {\n if (_.isUndefined(url) || _.isEmpty(url)) {\n return false;\n }\n const regExp = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|\\&v=|\\?v=)([^#\\&\\?]*).*/;\n const match = url.match(regExp);\n if (match && match[2].length === 11) {\n return true;\n }\n return false;\n};\n\nconst getYoutubeEmbed = url => {\n const regExp = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|\\&v=|\\?v=)([^#\\&\\?]*).*/;\n const match = url.match(regExp);\n return `https://www.youtube.com/embed/${match[2]}?autoplay=0`;\n};\n\nconst getValidUrl = (url = '') => {\n let newUrl = decodeURIComponent(url);\n newUrl = newUrl.trim().replace(/\\s/g, '');\n\n if (/^(:\\/\\/)/.test(newUrl)) {\n return `https${newUrl}`;\n }\n if (!/^(f|ht)tps?:\\/\\//i.test(newUrl)) {\n return `https://${newUrl}`;\n }\n\n return newUrl;\n};\n\nconst getUserPreview = user => {\n return {\n id: user.uid,\n displayName: user.displayName,\n profilePic: user.profilePic || null,\n };\n};\n\nconst allowComments = canComment => {\n if (canComment === false) {\n return false;\n }\n if (canComment === true) {\n return true;\n }\n return Config.env.defaultAllowComments;\n};\n\nexport {\n TIMESTAMP_FORMAT,\n DATE_FORMAT,\n getUrl,\n getAuthTokenHeader,\n getShadowStyle,\n StatusBarHeight,\n getStatusBarHeight,\n getSiteSettingFromState,\n getValueOrDefault,\n getExtension,\n getFileName,\n isVideo,\n get300,\n getThumb300,\n get1400,\n getMimeType,\n getCompressed,\n imageExists,\n getPluralS,\n getPluralOptions,\n formatTime,\n minutesToString,\n randomString,\n generateImageName,\n getSite,\n getImageSource,\n getFirstName,\n usersToSearchResult,\n searchUsers,\n getEnabledTabsFromState,\n getReactions,\n hasReacted,\n isTablet,\n isYoutube,\n getYoutubeEmbed,\n getValidUrl,\n getUserPreview,\n allowComments,\n isVideoUrl,\n detectFaces,\n findLandmarkRange,\n getScaledOffset,\n getSiteLevelFromState,\n isTVEnabled,\n};\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plusscommunities/pluss-core-app",
|
|
3
|
-
"version": "6.0.3
|
|
3
|
+
"version": "6.0.3",
|
|
4
4
|
"description": "Core extension package for Pluss Communities platform",
|
|
5
5
|
"main": "dist/module/index.js",
|
|
6
6
|
"module": "dist/module/index.js",
|
|
@@ -15,13 +15,10 @@
|
|
|
15
15
|
"patch": "npm version patch",
|
|
16
16
|
"betaupload": "npm run build && npm publish --access public --tag beta",
|
|
17
17
|
"betaupload:p": "npm run betapatch && npm run betaupload",
|
|
18
|
-
"authpatch": "npm version prepatch --preid=auth",
|
|
19
|
-
"authupload": "npm i && npm i && npm publish --access public --tag auth",
|
|
20
|
-
"authupload:p": "npm run authpatch && npm run authupload",
|
|
21
18
|
"upload": "npm run build && npm publish --access public",
|
|
22
19
|
"upload:p": "npm run patch && npm run upload"
|
|
23
20
|
},
|
|
24
|
-
"author": "
|
|
21
|
+
"author": "Thorbjorn Kappel Davis",
|
|
25
22
|
"license": "ISC",
|
|
26
23
|
"dependencies": {},
|
|
27
24
|
"peerDependencies": {
|
|
@@ -45,7 +42,7 @@
|
|
|
45
42
|
"js-cookie": "^2.2.1",
|
|
46
43
|
"lodash": "^4.17.4",
|
|
47
44
|
"mime-types": "^2.1.24",
|
|
48
|
-
"moment": "^2.
|
|
45
|
+
"moment": "^2.30.1",
|
|
49
46
|
"react": "18.2.0",
|
|
50
47
|
"react-native": "0.73.6",
|
|
51
48
|
"react-native-auto-height-image": "3.1.3",
|
package/src/apis/fileActions.js
CHANGED
|
@@ -1,34 +1,41 @@
|
|
|
1
|
-
import
|
|
1
|
+
import mime from 'mime-types';
|
|
2
|
+
import { Storage } from 'aws-amplify';
|
|
2
3
|
import { getUrl, generateImageName, randomString } from '../helper';
|
|
3
4
|
import { authedFunction } from '../session';
|
|
5
|
+
import Config from '../config';
|
|
4
6
|
|
|
5
7
|
export const fileActions = {
|
|
6
|
-
getPresignedUrl: async (filename, contentType) => {
|
|
7
|
-
// const newFilename = filename.replace(/[^a-z0-9+.]+/gi, '').toLowerCase();
|
|
8
|
-
const signedUrlRes = await authedFunction({
|
|
9
|
-
method: 'GET',
|
|
10
|
-
url: getUrl('media', 'get/presignedurl', { filename, contentType }),
|
|
11
|
-
});
|
|
12
|
-
return signedUrlRes.data;
|
|
13
|
-
},
|
|
14
8
|
getUploadUrl: (userId, fileName) => {
|
|
15
9
|
const newFilename = fileName.replace(/[^a-z0-9+.]+/gi, '').toLowerCase();
|
|
16
10
|
return `uploads/users/${userId}/public/${randomString()}/${newFilename}`;
|
|
17
11
|
},
|
|
18
|
-
uploadUserMediaWithProgress: async (
|
|
19
|
-
|
|
12
|
+
uploadUserMediaWithProgress: async (imageUri, url, progressCallback = null) => {
|
|
13
|
+
const blob = await fileActions.imageToBlob(imageUri);
|
|
14
|
+
return fileActions.uploadBlobAWS(Config.env.awsUploadsBucket, url, blob, '', progressCallback);
|
|
20
15
|
},
|
|
16
|
+
// uploadUserMedia: async (userId, image, fileName) => {
|
|
17
|
+
// const blob = await fileActions.imageToBlob(image.uri);
|
|
18
|
+
// const url = fileActions.getUploadUrl(userId, fileName);
|
|
19
|
+
// return fileActions.uploadBlobAWS(Config.env.awsUploadsBucket, url, blob);
|
|
20
|
+
// },
|
|
21
|
+
// uploadSignatureImage: async (image, name) => {
|
|
22
|
+
// const blob = await fileActions.imageToBlob(image);
|
|
23
|
+
// const newImageName = generateImageName(name, 'signature.png');
|
|
24
|
+
// return fileActions.uploadBlobAWS(Config.env.awsStorageBucket, newImageName, blob, 'images/');
|
|
25
|
+
// },
|
|
21
26
|
imageToBlob: async imageUri => {
|
|
22
27
|
const response = await fetch(imageUri);
|
|
23
28
|
return response.blob();
|
|
24
29
|
},
|
|
25
|
-
uploadBlobAWS:
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
uploadBlobAWS: (bucket, uri, blob, prefix = '', progressCallback = null) => {
|
|
31
|
+
const imageName = prefix ? uri.replace(/^.*[\\/]/, '') : uri;
|
|
32
|
+
const fileType = mime.lookup(uri);
|
|
33
|
+
const access = {
|
|
34
|
+
level: 'public',
|
|
35
|
+
bucket,
|
|
36
|
+
contentType: fileType,
|
|
37
|
+
customPrefix: { public: '' },
|
|
38
|
+
progressCallback: progress =>
|
|
32
39
|
progressCallback &&
|
|
33
40
|
progressCallback({
|
|
34
41
|
uri,
|
|
@@ -36,7 +43,8 @@ export const fileActions = {
|
|
|
36
43
|
total: progress.total,
|
|
37
44
|
percentage: `${Math.floor((progress.loaded / progress.total) * 100)}%`,
|
|
38
45
|
}),
|
|
39
|
-
}
|
|
46
|
+
};
|
|
47
|
+
return Storage.put(`${prefix}${imageName}`, blob, access);
|
|
40
48
|
},
|
|
41
49
|
getStockPhotos: async () => {
|
|
42
50
|
const response = await authedFunction({
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import _ from 'lodash';
|
|
3
|
+
import { View } from 'react-native';
|
|
4
|
+
import { TextStyle } from './TextStyle';
|
|
5
|
+
import { getMainBrandingColourFromState } from '../colours';
|
|
6
|
+
import { InlineButton } from './InlineButton';
|
|
7
|
+
import { Services } from '../config';
|
|
8
|
+
import { connect } from 'react-redux';
|
|
9
|
+
import Header from './Header';
|
|
10
|
+
|
|
11
|
+
const Forbidden = ({ colourBrandingMain, title, description }) => {
|
|
12
|
+
const goBack = () => {
|
|
13
|
+
Services.navigation.goBack();
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
return (
|
|
17
|
+
<View
|
|
18
|
+
style={{
|
|
19
|
+
flex: 1,
|
|
20
|
+
backgroundColor: '#fff',
|
|
21
|
+
}}
|
|
22
|
+
>
|
|
23
|
+
<Header leftIcon="angle-left" onPressLeft={goBack} />
|
|
24
|
+
<View
|
|
25
|
+
style={{
|
|
26
|
+
padding: 16,
|
|
27
|
+
}}
|
|
28
|
+
>
|
|
29
|
+
<TextStyle type="pageHeading" style={{ color: colourBrandingMain }}>
|
|
30
|
+
{!_.isEmpty(title) ? title : 'Oops!'}
|
|
31
|
+
</TextStyle>
|
|
32
|
+
<TextStyle type="body" style={{ marginTop: 10 }}>
|
|
33
|
+
{!_.isEmpty(description)
|
|
34
|
+
? description
|
|
35
|
+
: 'It seems this item is no longer accessible. It may have been removed or your access might have changed.'}
|
|
36
|
+
</TextStyle>
|
|
37
|
+
<View style={{ marginTop: 20 }}>
|
|
38
|
+
<InlineButton onPress={goBack} color={colourBrandingMain}>
|
|
39
|
+
Go back
|
|
40
|
+
</InlineButton>
|
|
41
|
+
</View>
|
|
42
|
+
</View>
|
|
43
|
+
</View>
|
|
44
|
+
);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const mapStateToProps = state => {
|
|
48
|
+
return {
|
|
49
|
+
colourBrandingMain: getMainBrandingColourFromState(state),
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const forbidden = connect(mapStateToProps, {}, null, { forwardRef: true })(Forbidden);
|
|
54
|
+
export { forbidden as Forbidden };
|
|
@@ -142,25 +142,23 @@ class ImageUploader extends Component {
|
|
|
142
142
|
let uploadUri;
|
|
143
143
|
try {
|
|
144
144
|
const fileName = `${getValueOrDefault(this.props.fileName, DEFAULT_IMAGE_NAME)}.${DEFULAT_IMAGE_TYPE}`;
|
|
145
|
+
uploadUri = fileActions.getUploadUrl(this.props.userId, fileName);
|
|
145
146
|
|
|
147
|
+
this.props.onUploadStarted(uploadUri, imageUri);
|
|
146
148
|
this.hideUploadMenu();
|
|
147
149
|
|
|
148
150
|
const resized = await this.resizeImageAsync(imageUri);
|
|
149
|
-
const blob = await fileActions.imageToBlob(resized.uri);
|
|
150
|
-
const presignedUriRes = await fileActions.getPresignedUrl(_.last(resized.uri.split('/')), blob.type);
|
|
151
|
-
uploadUri = presignedUriRes.key;
|
|
152
|
-
this.props.onUploadStarted(uploadUri, imageUri);
|
|
153
151
|
if (this.props.onlySelectImage) {
|
|
154
152
|
this.props.onImageSelected(resized, fileName);
|
|
155
153
|
return;
|
|
156
154
|
}
|
|
157
155
|
|
|
158
|
-
const
|
|
156
|
+
const res = await fileActions.uploadUserMediaWithProgress(resized.uri, uploadUri, progress => {
|
|
159
157
|
if (this.props.onUploadProgress) this.props.onUploadProgress(progress);
|
|
160
158
|
});
|
|
161
159
|
|
|
162
|
-
this.props.onUploadSuccess(Config.env.baseUploadsUrl +
|
|
163
|
-
console.log('upload success', Config.env.baseUploadsUrl +
|
|
160
|
+
this.props.onUploadSuccess(Config.env.baseUploadsUrl + res.key, uploadUri);
|
|
161
|
+
console.log('upload success', Config.env.baseUploadsUrl + res.key);
|
|
164
162
|
} catch (e) {
|
|
165
163
|
console.log('handleImagePicked error', e);
|
|
166
164
|
this.props.onUploadFailed(uploadUri);
|
|
@@ -172,6 +170,7 @@ class ImageUploader extends Component {
|
|
|
172
170
|
const imagesUploaded = imagesSelected.map(image => {
|
|
173
171
|
const fileName = `${getValueOrDefault(this.props.fileName, DEFAULT_IMAGE_NAME)}.${DEFULAT_IMAGE_TYPE}`;
|
|
174
172
|
const uploadUri = fileActions.getUploadUrl(this.props.userId, fileName);
|
|
173
|
+
if (!this.props.onlySelectImage) this.props.onUploadStarted(uploadUri, image.uri);
|
|
175
174
|
return { imageUri: image.uri, uploadUri, fileName };
|
|
176
175
|
});
|
|
177
176
|
this.hideUploadMenu();
|
|
@@ -182,21 +181,16 @@ class ImageUploader extends Component {
|
|
|
182
181
|
const { imageUri, uploadUri, fileName } = image;
|
|
183
182
|
try {
|
|
184
183
|
const resized = await this.resizeImageAsync(imageUri);
|
|
185
|
-
const blob = await fileActions.imageToBlob(resized.uri);
|
|
186
184
|
if (this.props.onlySelectImage) {
|
|
187
185
|
this.props.onImageSelected(resized, fileName);
|
|
188
186
|
return;
|
|
189
187
|
}
|
|
190
|
-
const presignedUriRes = await fileActions.getPresignedUrl(_.last(resized.uri.split('/')), blob.type);
|
|
191
|
-
const uploadUri = presignedUriRes.key;
|
|
192
|
-
if (!this.props.onlySelectImage) this.props.onUploadStarted(uploadUri, imageUri);
|
|
193
188
|
|
|
194
|
-
const
|
|
189
|
+
const res = await fileActions.uploadUserMediaWithProgress(resized.uri, uploadUri, progress => {
|
|
195
190
|
if (this.props.onUploadProgress) this.props.onUploadProgress(progress);
|
|
196
191
|
});
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
console.log('upload success', Config.env.baseUploadsUrl + uploadUri);
|
|
192
|
+
this.props.onUploadSuccess(Config.env.baseUploadsUrl + res.key, uploadUri);
|
|
193
|
+
console.log('upload success', Config.env.baseUploadsUrl + res.key);
|
|
200
194
|
} catch (e) {
|
|
201
195
|
console.log('handleMultiImagePicked error', e);
|
|
202
196
|
this.props.onUploadFailed(uploadUri);
|
|
@@ -209,7 +203,7 @@ class ImageUploader extends Component {
|
|
|
209
203
|
try {
|
|
210
204
|
const fileType = uri.substring(uri.lastIndexOf('.') + 1);
|
|
211
205
|
const fileName = `${getValueOrDefault(this.props.fileName, DEFAULT_VIDEO_NAME)}.${fileType}`;
|
|
212
|
-
uploadUri =
|
|
206
|
+
uploadUri = fileActions.getUploadUrl(this.props.userId, fileName);
|
|
213
207
|
|
|
214
208
|
this.props.onUploadStarted(uploadUri, uri);
|
|
215
209
|
this.hideUploadMenu();
|
|
@@ -272,7 +266,6 @@ class ImageUploader extends Component {
|
|
|
272
266
|
};
|
|
273
267
|
|
|
274
268
|
isEditingEnabled = () => {
|
|
275
|
-
return false;
|
|
276
269
|
return !this.props.multiple && !this.props.allowVideo && getValueOrDefault(this.props.allowsEditing, DEFAULT_ALLOWS_EDITING);
|
|
277
270
|
};
|
|
278
271
|
|
|
@@ -6,7 +6,7 @@ import YoutubePlayer, { getYoutubeMeta } from 'react-native-youtube-iframe';
|
|
|
6
6
|
import { Vimeo } from 'react-native-vimeo-iframe';
|
|
7
7
|
import { WebView } from 'react-native-webview';
|
|
8
8
|
import { Video } from 'expo-av';
|
|
9
|
-
import VideoPlayer from 'expo-video-player';
|
|
9
|
+
// import VideoPlayer from 'expo-video-player';
|
|
10
10
|
import { Spinner } from './Spinner';
|
|
11
11
|
|
|
12
12
|
const SCREEN_HEIGHT = Dimensions.get('window').height;
|
|
@@ -292,20 +292,20 @@ class MediaPlayer extends Component {
|
|
|
292
292
|
/>
|
|
293
293
|
);
|
|
294
294
|
|
|
295
|
-
getVideoPlayer = (embedUrl, width, height, autoPlay) => (
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
);
|
|
295
|
+
// getVideoPlayer = (embedUrl, width, height, autoPlay) => (
|
|
296
|
+
// <VideoPlayer
|
|
297
|
+
// videoProps={{
|
|
298
|
+
// shouldPlay: autoPlay,
|
|
299
|
+
// resizeMode: Video.RESIZE_MODE_CONTAIN,
|
|
300
|
+
// source: { uri: embedUrl },
|
|
301
|
+
// }}
|
|
302
|
+
// showFullscreenButton={false}
|
|
303
|
+
// errorCallback={this.onVideoPlayError}
|
|
304
|
+
// playbackCallback={this.onVideoPlayStatusUpdate}
|
|
305
|
+
// height={height}
|
|
306
|
+
// width={width}
|
|
307
|
+
// />
|
|
308
|
+
// );
|
|
309
309
|
|
|
310
310
|
render() {
|
|
311
311
|
let width, height;
|
|
@@ -351,7 +351,7 @@ class MediaPlayer extends Component {
|
|
|
351
351
|
} else if (useVideoPlayer) {
|
|
352
352
|
embedUrl = source;
|
|
353
353
|
// console.log('getVideoPlayer', embedUrl, width, height, autoPlay);
|
|
354
|
-
player = this.
|
|
354
|
+
player = this.getStreamPlayer(embedUrl, width, height, autoPlay);
|
|
355
355
|
}
|
|
356
356
|
}
|
|
357
357
|
if (!player && isUrlLink) {
|
package/src/components/index.js
CHANGED
package/src/config.js
CHANGED
|
@@ -18,11 +18,6 @@ const CoreConfig = {
|
|
|
18
18
|
strings: {},
|
|
19
19
|
newEventDefaults: '',
|
|
20
20
|
defaultAllowComments: true,
|
|
21
|
-
AuthStrategy: {
|
|
22
|
-
getAccessToken: async () => null,
|
|
23
|
-
getCurrentUserId: async () => null,
|
|
24
|
-
hasActiveSession: async () => false,
|
|
25
|
-
},
|
|
26
21
|
},
|
|
27
22
|
init: (environment, navigation) => {
|
|
28
23
|
CoreConfig.env = environment;
|
package/src/helper.js
CHANGED
|
@@ -121,6 +121,9 @@ const getThumb300 = url => {
|
|
|
121
121
|
if (!url) {
|
|
122
122
|
return url;
|
|
123
123
|
}
|
|
124
|
+
if (isVideo(url)) {
|
|
125
|
+
return 'https://pluss60-demo-uploads.s3.ap-southeast-2.amazonaws.com/uploads/users/ap-southeast-2:97769b56-25ec-41c0-a73c-6c2c4140f629/public/9d0bbec64614b1ed654a03f7e7/movie.jpg';
|
|
126
|
+
}
|
|
124
127
|
if (url.indexOf('https://plussprdstorage.blob.core.windows.net/') !== -1) {
|
|
125
128
|
return url.replace('https://plussprdstorage.blob.core.windows.net/', 'https://plusscdn.azureedge.net/');
|
|
126
129
|
}
|
package/src/session.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
2
|
import axios from 'axios';
|
|
3
3
|
import { Auth } from 'aws-amplify';
|
|
4
|
-
import Config from './config';
|
|
5
4
|
|
|
6
5
|
export const getSessionTokenAWS = async prefix => {
|
|
7
|
-
const
|
|
6
|
+
const data = await Auth.currentSession();
|
|
7
|
+
const token = data.accessToken.jwtToken;
|
|
8
8
|
if (_.isUndefined(prefix)) return token;
|
|
9
9
|
return `${prefix} ${token}`;
|
|
10
10
|
};
|