@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.
@@ -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.getVideoPlayer(embedUrl, width, height, autoPlay);
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,5 +1,6 @@
1
1
  export * from './InlineButton';
2
2
  export * from './AddToCalendarButton';
3
+ export * from './Forbidden';
3
4
  export * from './FormCard';
4
5
  export * from './FormCardSection';
5
6
  export * from './FormCardSectionOptionLauncher';
@@ -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"}
@@ -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-auth.0",
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": "Phillip Suh",
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.18.1",
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",
@@ -1,34 +1,41 @@
1
- import Axios from 'axios';
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 (blob, url, progressCallback = null) => {
19
- return fileActions.uploadBlobAWS(url, blob, progressCallback);
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: async (uri, blob, progressCallback = null) => {
26
- return Axios.put(uri, blob, {
27
- headers: {
28
- 'Content-Type': blob.type,
29
- },
30
- transformRequest: d => d,
31
- onUploadProgress: progress =>
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 uploadResult = await fileActions.uploadUserMediaWithProgress(blob, presignedUriRes.url, progress => {
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 + uploadUri, uploadUri);
163
- console.log('upload success', Config.env.baseUploadsUrl + uploadUri);
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 uploadResult = await fileActions.uploadUserMediaWithProgress(blob, presignedUriRes.url, progress => {
189
+ const res = await fileActions.uploadUserMediaWithProgress(resized.uri, uploadUri, progress => {
195
190
  if (this.props.onUploadProgress) this.props.onUploadProgress(progress);
196
191
  });
197
-
198
- this.props.onUploadSuccess(Config.env.baseUploadsUrl + uploadUri, uploadUri);
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 = await fileActions.getPresignedUrl(fileName);
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
- <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
- );
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.getVideoPlayer(embedUrl, width, height, autoPlay);
354
+ player = this.getStreamPlayer(embedUrl, width, height, autoPlay);
355
355
  }
356
356
  }
357
357
  if (!player && isUrlLink) {
@@ -1,5 +1,6 @@
1
1
  export * from './InlineButton';
2
2
  export * from './AddToCalendarButton';
3
+ export * from './Forbidden';
3
4
  export * from './FormCard';
4
5
  export * from './FormCardSection';
5
6
  export * from './FormCardSectionOptionLauncher';
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 token = await Config.env.AuthStrategy.getAccessToken();
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
  };