From 295f75e4735a39d2281580ef2e49bbd6315612a8 Mon Sep 17 00:00:00 2001 From: Vlad Mitkovsky Date: Tue, 6 Apr 2021 20:29:24 -0300 Subject: [PATCH] Beta - Apr 6 2020 (#626) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * VC-1368 - Create interactions for videos when the videos are started, paused, resumed and finished (#611) https://jesusfilmmedia.atlassian.net/browse/VC-1368 * VC-1412: Change Blocking Endpoint (#620) https://jesusfilmmedia.atlassian.net/browse/VC-1412 * VC-1408: When joining the group it’s not showing users modal (#618) https://jesusfilmmedia.atlassian.net/browse/VC-1408 * VC-1403: Invite link screen looks bad (#619) https://jesusfilmmedia.atlassian.net/browse/VC-1403 * VC-1407: UI Language won’t be the same after app restart (#617) https://jesusfilmmedia.atlassian.net/browse/VC-1407 * VC-1406: Existing Reactions are missing on android (#615) * VC-1406: Existing Reactions are missing on android https://jesusfilmmedia.atlassian.net/browse/VC-1406 * VC-1360: Exiting out of message context not working every time https://jesusfilmmedia.atlassian.net/browse/VC-1360 * VC-1405: Can’t select reaction on android https://jesusfilmmedia.atlassian.net/browse/VC-1405 * VC-1404: New reactions won’t appear for other users without refresh (#616) https://jesusfilmmedia.atlassian.net/browse/VC-1404 * build(deps): bump swiperefreshlayout from 1.0.0 to 1.1.0 in /android (#582) Bumps swiperefreshlayout from 1.0.0 to 1.1.0. * VC-1418: Leader Zone > Step > Users Modal - Can’t exit out of this modal (#624) https://jesusfilmmedia.atlassian.net/browse/VC-1418 * VC-1417: Main question card > Footer > Invalid date (#623) https://jesusfilmmedia.atlassian.net/browse/VC-1417 * My Adventures > Have an Adventure Code link unstyled (#622) https://jesusfilmmedia.atlassian.net/browse/VC-1413 * VC-1416 Fullscreen Video on Android (#625) https://jesusfilmmedia.atlassian.net/browse/VC-1416 --- .eslintrc | 1 + .../main/java/org/cru/voke/MainActivity.java | 13 + package-lock.json | 34 +++ package.json | 2 + src/actions/info.ts | 6 +- .../DateComponent/{index.js => index.tsx} | 11 +- src/components/Video/index.tsx | 236 ++++++++---------- src/domain/Adventure/Manage/ManageMembers.tsx | 3 - .../StepScreen/AdventureStepScreenRender.tsx | 11 +- src/domain/Adventure/StepScreen/index.tsx | 5 +- src/domain/Adventures/AdventuresMy/index.tsx | 37 +-- src/domain/Adventures/AdventuresMy/styles.ts | 2 +- .../containers/Notifications/index.tsx | 2 - 13 files changed, 190 insertions(+), 173 deletions(-) rename src/components/DateComponent/{index.js => index.tsx} (55%) diff --git a/.eslintrc b/.eslintrc index 81ce0e19d..57cd494f4 100644 --- a/.eslintrc +++ b/.eslintrc @@ -44,6 +44,7 @@ "vokebot_action", "organization_journeys", "page_number", + "preview_journey_url", "gating_period", "total_pages", "total_count", diff --git a/android/app/src/main/java/org/cru/voke/MainActivity.java b/android/app/src/main/java/org/cru/voke/MainActivity.java index 5d81283e8..13d769550 100644 --- a/android/app/src/main/java/org/cru/voke/MainActivity.java +++ b/android/app/src/main/java/org/cru/voke/MainActivity.java @@ -7,6 +7,7 @@ // https://jeremybarbet.github.io/react-native-modalize/#/INSTALLATION import com.facebook.react.ReactActivityDelegate; import com.facebook.react.ReactRootView; +import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView; // Voke: RN Orientation Locker // https://github.com/wonday/react-native-orientation-locker#android import android.content.Intent; @@ -39,4 +40,16 @@ public void onConfigurationChanged(Configuration newConfig) { protected String getMainComponentName() { return "Voke"; } + + // React Native Gesture Handler + // https://docs.swmansion.com/react-native-gesture-handler/docs/#updating-mainactivityjava + @Override + protected ReactActivityDelegate createReactActivityDelegate() { + return new ReactActivityDelegate(this, getMainComponentName()) { + @Override + protected ReactRootView createRootView() { + return new RNGestureHandlerEnabledRootView(MainActivity.this); + } + }; + } } diff --git a/package-lock.json b/package-lock.json index 106fbe09a..b11ebc1c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -88,7 +88,9 @@ "@testing-library/jest-native": "^3.4.3", "@testing-library/react-native": "^7.1.0", "@types/jest": "^26.0.19", + "@types/react-native-communications": "^2.2.1", "@types/react-native-material-menu": "^1.0.3", + "@types/react-native-video": "^5.0.4", "@types/react-redux": "^7.1.15", "@types/react-test-renderer": "^16.9.2", "@types/redux-mock-store": "^1.0.2", @@ -3539,6 +3541,12 @@ "@types/react": "*" } }, + "node_modules/@types/react-native-communications": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@types/react-native-communications/-/react-native-communications-2.2.1.tgz", + "integrity": "sha512-eTgJlMjrx825VuO+3y5rT4Xu3it6oH3i7Zck/QhJO3c8RM61nBp9lJ7BBI3Coc8nxweYkS6i1lkrPPmZOnNzNA==", + "dev": true + }, "node_modules/@types/react-native-material-menu": { "version": "1.0.4", "dev": true, @@ -3548,6 +3556,16 @@ "@types/react-native": "*" } }, + "node_modules/@types/react-native-video": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/react-native-video/-/react-native-video-5.0.4.tgz", + "integrity": "sha512-0NzgoA1e8vMr0lvTJ4qDmwfiBXh0ju6GXLEHUUsgFuxtaqKGXsMDogzDFwqJ4gqsq5T3oQuiLffw2Se/rQAfFw==", + "dev": true, + "dependencies": { + "@types/react": "*", + "@types/react-native": "*" + } + }, "node_modules/@types/react-redux": { "version": "7.1.16", "dev": true, @@ -17764,6 +17782,12 @@ "@types/react": "*" } }, + "@types/react-native-communications": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@types/react-native-communications/-/react-native-communications-2.2.1.tgz", + "integrity": "sha512-eTgJlMjrx825VuO+3y5rT4Xu3it6oH3i7Zck/QhJO3c8RM61nBp9lJ7BBI3Coc8nxweYkS6i1lkrPPmZOnNzNA==", + "dev": true + }, "@types/react-native-material-menu": { "version": "1.0.4", "dev": true, @@ -17772,6 +17796,16 @@ "@types/react-native": "*" } }, + "@types/react-native-video": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/react-native-video/-/react-native-video-5.0.4.tgz", + "integrity": "sha512-0NzgoA1e8vMr0lvTJ4qDmwfiBXh0ju6GXLEHUUsgFuxtaqKGXsMDogzDFwqJ4gqsq5T3oQuiLffw2Se/rQAfFw==", + "dev": true, + "requires": { + "@types/react": "*", + "@types/react-native": "*" + } + }, "@types/react-redux": { "version": "7.1.16", "dev": true, diff --git a/package.json b/package.json index 6762c4e59..754add42e 100644 --- a/package.json +++ b/package.json @@ -111,7 +111,9 @@ "@testing-library/jest-native": "^3.4.3", "@testing-library/react-native": "^7.1.0", "@types/jest": "^26.0.19", + "@types/react-native-communications": "^2.2.1", "@types/react-native-material-menu": "^1.0.3", + "@types/react-native-video": "^5.0.4", "@types/react-redux": "^7.1.15", "@types/react-test-renderer": "^16.9.2", "@types/redux-mock-store": "^1.0.2", diff --git a/src/actions/info.ts b/src/actions/info.ts index b194feed8..3c38f6fe4 100755 --- a/src/actions/info.ts +++ b/src/actions/info.ts @@ -24,10 +24,10 @@ export function toastAction(text: string, length?: 'long' | 'short' | null) { }; } -type setCurrentScreenProps = { +interface setCurrentScreenProps { screen: string; - data: object; -}; + data?: object; +} export function setCurrentScreen({ screen, data }: setCurrentScreenProps) { return async (dispatch: Dispatch, getState: any) => { dispatch({ diff --git a/src/components/DateComponent/index.js b/src/components/DateComponent/index.tsx similarity index 55% rename from src/components/DateComponent/index.js rename to src/components/DateComponent/index.tsx index 791a4bb26..ff3d45d52 100644 --- a/src/components/DateComponent/index.js +++ b/src/components/DateComponent/index.tsx @@ -1,15 +1,20 @@ -import React from 'react'; +import React, { ReactElement } from 'react'; import moment from 'moment'; import { isString, momentUtc } from 'utils'; import Text from '../Text'; -function DateComponent({ date, format = 'ddd, lll', ...rest }) { +function DateComponent({ + date = '', + format = 'ddd, lll', + ...rest +}): ReactElement { let text; if (isString(date) && date.indexOf('UTC') >= 0) { text = momentUtc(date).local().format(format); } else { - text = moment(date).format(format); + const messageDate = moment(date); + text = messageDate.isValid() ? moment(date).format(format) : ''; } return {text}; } diff --git a/src/components/Video/index.tsx b/src/components/Video/index.tsx index 99f7ea6b6..ede2e896b 100644 --- a/src/components/Video/index.tsx +++ b/src/components/Video/index.tsx @@ -1,4 +1,10 @@ -import React, { useState, useRef, useEffect } from 'react'; +import React, { + useState, + useRef, + useEffect, + ReactElement, + useCallback, +} from 'react'; import RNVideo from 'react-native-video'; // https://github.com/react-native-community/react-native-video#usage import YoutubePlayer from 'react-native-youtube-iframe'; @@ -9,6 +15,9 @@ import { ImageBackground, ActivityIndicator, Platform, + StyleProp, + ViewStyle, + Modal, } from 'react-native'; import Orientation, { OrientationType } from 'react-native-orientation-locker'; import { useFocusEffect } from '@react-navigation/native'; @@ -29,15 +38,13 @@ import { updateVideoIsPlayingState } from '../../actions/requests'; import styles from './styles'; -function convertTime(time): string { +function convertTime(time: number): string { const roundedTime = Math.round(time); const seconds = '00' + (roundedTime % 60); const minutes = '00' + Math.floor(roundedTime / 60); - let hours = ''; let str = `${minutes.substr(-2)}:${seconds.substr(-2)}`; if (time / 3600 >= 1) { - hours = Math.floor(time / 3600); - str = `${hours}:${str}`; + str = `${Math.floor(time / 3600)}:${str}`; } return str; } @@ -58,39 +65,32 @@ interface Props { onPlay?: (time: number) => void; onPause?: (time: number) => void; onStop?: (time: number) => void; - hideBack?: boolean; item: TStep['item']['content']; onCancel?: () => void; - hideInsets?: boolean; autoPlay?: boolean; lockOrientation?: boolean; - children?: any; // Used to create custom overlay/play button. Ex: "Watch Trailer". - containerStyles?: any; - [x: string]: any; + children?: React.ReactNode; // Used to create custom overlay/play button. Ex: "Watch Trailer". } function Video({ - onOrientationChange = (orientation: string) => { + onOrientationChange = (): void => { + //void + }, + onPlay = (): void => { + //void + }, + onPause = (): void => { + //void + }, + onStop = (): void => { //void }, - onPlay = () => {}, - onPause = () => {}, - onStop = () => {}, - hideBack = false, item, onCancel, - hideInsets, autoPlay = false, - // fullscreenOrientation = 'all', lockOrientation = false, children, // Used to create custom overlay/play button. Ex: "Watch Trailer". - containerStyles = {}, - ...rest -}: Props) { - // Don't even bother if there is no info about video provided. - if (!item) { - return <>; - } +}: Props): ReactElement { let youtubeVideo = useRef(null); let arclightVideo = useRef(null); const lockOrientationRef = useRef(lockOrientation); @@ -104,15 +104,12 @@ function Video({ const [videoReady, setVideoReady] = useState(false); const [started, setStarted] = useState(false); const [isPlaying, setIsPlaying] = useState(false); - const [fullscreen, setFullscreen] = useState(false); - const [fullscreenOrientation, setFullscreenOrientation] = useState( - 'landscape', - ); const [refreshInterval, setRefreshInterval] = useState(null); const [sliderValue, setSliderValue] = useState(0); - const [currentTime, setCurrentTime] = useState(0); const window = useWindowDimensions(); const dispatch = useDispatch(); + const [width, setWidth] = useState(0); + const [height, setHeight] = useState(0); // const time = youtubeVideo.current.getCurrentTime(); // const duration = youtubeVideo.current.getDuration(); @@ -121,7 +118,6 @@ function Video({ useInterval(() => { if (!youtubeVideo.current) return; youtubeVideo.current.getCurrentTime().then((currentTime: void | number) => { - setCurrentTime(currentTime ? currentTime : 0); setSliderValue(currentTime ? currentTime : 0); }); }, refreshInterval); @@ -130,44 +126,54 @@ function Video({ dispatch(updateVideoIsPlayingState(isPlaying)); if (!youtubeVideo.current) return; setRefreshInterval(isPlaying ? 1000 : null); - }, [isPlaying]); + }, [dispatch, isPlaying]); - const getPlayerDimensions = () => { - let shortSize = window.width; - if (window.width > window.height) { - shortSize = window.height; - } - const currentWidth = lockOrientation ? shortSize : window.width; + useEffect(() => { + const shortSize = + window.width > window.height ? window.height : window.width; + const longSize = + window.width > window.height ? window.width : window.height; - return { - width: currentWidth, - height: - !lockOrientation && screenOrientation === 'landscape' - ? window.height - : item?.type === 'youtube' - ? currentWidth / 1.7 - : currentWidth / 1.7, - }; - }; + setWidth(screenOrientation === 'portrait' ? shortSize : longSize); + setHeight( + screenOrientation === 'portrait' ? shortSize / 1.75 : longSize / 1.75, + ); + }, [lockOrientation, screenOrientation, window.height, window.width]); - function getLandscapeOrPortrait(orientation: string) { - let newOrientation = screenOrientation; - if ( - lockOrientationRef.current || - orientation === 'PORTRAIT' || - orientation === 'PORTRAIT-UPSIDEDOWN' // ot supported on iOS - ) { - newOrientation = 'portrait'; - } else if ( - orientation === 'LANDSCAPE-LEFT' || - orientation === 'LANDSCAPE-RIGHT' - ) { - newOrientation = 'landscape'; - } - // In all other cases (FACE-UP,FACE-DOWN,UNKNOWN) leave current value as is. - setScreenOrientation(newOrientation); - return newOrientation; - } + const getLandscapeOrPortrait = useCallback( + (orientation: string): string => { + let newOrientation = screenOrientation; + + if ( + lockOrientationRef.current || + orientation === 'PORTRAIT' || + orientation === 'PORTRAIT-UPSIDEDOWN' // ot supported on iOS + ) { + newOrientation = 'portrait'; + } else if ( + orientation === 'LANDSCAPE-LEFT' || + orientation === 'LANDSCAPE-RIGHT' + ) { + newOrientation = 'landscape'; + } + + // In all other cases (FACE-UP,FACE-DOWN,UNKNOWN) leave current value as is. + setScreenOrientation(newOrientation); + return newOrientation; + }, + [screenOrientation], + ); + + const handleOrientationChange = useCallback( + (orientation: OrientationType): void => { + if (!lockOrientationRef.current) { + onOrientationChange(getLandscapeOrPortrait(orientation)); + } else { + onOrientationChange(getLandscapeOrPortrait('PORTRAIT')); + } + }, + [getLandscapeOrPortrait, onOrientationChange], + ); useMount(() => { if (lockOrientation) { @@ -217,19 +223,15 @@ function Video({ onOrientationChange(getLandscapeOrPortrait(orientation)); }); } - }, [lockOrientation]); - - useEffect(() => { - if (screenOrientation === 'portrait') { - setFullscreen(true); - } else { - setFullscreen(false); - } - }, [screenOrientation]); + }, [ + getLandscapeOrPortrait, + handleOrientationChange, + lockOrientation, + onOrientationChange, + ]); // Events firing when user leaves the screen with player or comes back. useFocusEffect( - // eslint-disable-next-line arrow-body-style React.useCallback(() => { // When the screen with player is focused: // - Do something here. @@ -243,21 +245,13 @@ function Video({ }, []), ); - const handleOrientationChange = (orientation: OrientationType): void => { - if (!lockOrientationRef.current) { - onOrientationChange(getLandscapeOrPortrait(orientation)); - } else { - onOrientationChange(getLandscapeOrPortrait('PORTRAIT')); - } - }; - - function handleVideoStateChange(event: string) { + function handleVideoStateChange(event: string): void { switch (event) { case 'buffering': setIsBuffering(true); break; case 'paused': - if (started && isPlaying && sliderValue <= item.duration - 1) { + if (started && isPlaying && sliderValue <= item?.duration - 1) { // Send an interaction when the user press pause. onPause(sliderValue); } @@ -290,11 +284,11 @@ function Video({ } } - function togglePlayState() { + function togglePlayState(): void { handleVideoStateChange(isPlaying ? 'paused' : 'play'); } - function handleSliderChange(value: number) { + function handleSliderChange(value: number): void { if (youtubeVideo.current) { youtubeVideo.current.seekTo(value); } else if (arclightVideo.current) { @@ -303,31 +297,24 @@ function Video({ setSliderValue(value); } - return ( + // Don't even bother if there is no info about video provided. + return !item ? ( + <> + ) : ( {!started && ( // || !isPlaying && ( sliderValue < 1 || sliderValue >= item.duration ) // || isPlaying && sliderValue < .05 { handleVideoStateChange(state); @@ -356,7 +343,7 @@ function Video({ onReady={(): void => { handleVideoStateChange('ready'); }} - onError={(e): void => { + onError={(): void => { setIsPlaying(false); }} onPlaybackQualityChange={(q): void => console.log(q)} @@ -367,8 +354,8 @@ function Video({ modestbranding: true, }} webViewStyle={{ - width: getPlayerDimensions().width, - height: getPlayerDimensions().height, + width: width, + height: height, opacity: videoReady ? 1 : 0, }} /> @@ -381,23 +368,23 @@ function Video({ item.url.replace('http:', 'https:'), type: item.hls ? 'm3u8' : undefined, }} - onLoad={e => { + onLoad={(): void => { handleVideoStateChange('ready'); }} paused={!isPlaying} - onProgress={e => { + onProgress={(e): void => { if (e.currentTime !== sliderValue) { setSliderValue(e.currentTime); } }} - onEnd={e => { + onEnd={(): void => { if (sliderValue >= 1) { handleVideoStateChange('paused'); setSliderValue(0); onStop(sliderValue); } }} - onError={e => { + onError={(e): void => { console.log('🆘 onError e:', e); }} playInBackground={false} @@ -406,26 +393,11 @@ function Video({ // resizeMode="cover" repeat={true} style={{ - position: 'absolute', - top: - screenOrientation === 'portrait' || lockOrientation - ? getPlayerDimensions().width / -10 // Small video (Portrait) - : getPlayerDimensions().width / -20, // Fullscreen video. - bottom: - screenOrientation === 'portrait' || lockOrientation - ? getPlayerDimensions().width / -10 // Small video (Portrait) - : getPlayerDimensions().width / -20, // Fullscreen video. - left: - screenOrientation === 'portrait' || lockOrientation - ? 0 // Small video (Portrait) - : getPlayerDimensions().width / -20, // Fullscreen video. - right: - screenOrientation === 'portrait' || lockOrientation - ? 0 // Small video (Portrait) - : getPlayerDimensions().width / -20, // Fullscreen video. + width: '100%', + height: '100%', }} // fullscreen={false} // Platforms: iOS - Controls whether the player enters fullscreen on play. - fullscreenOrientation={fullscreenOrientation} // Platforms: iOS - all / landscape / portrait + // fullscreenOrientation="landscape" // Platforms: iOS - all / landscape / portrait /> )} { + scrollRef.current.scrollTo({ + x: 0, + y: 0, + animated: true, + }); if (time > 1) { dispatch( reportVideoInteraction({ @@ -493,7 +499,8 @@ const AdventureStepScreenRender = ({ }), ); }} - lockOrientation={!videoIsPlaying} + // lockOrientation={!videoIsPlaying} + lockOrientation={false} /> {isPortrait && ( <> diff --git a/src/domain/Adventure/StepScreen/index.tsx b/src/domain/Adventure/StepScreen/index.tsx index 34a72d300..06b02654e 100644 --- a/src/domain/Adventure/StepScreen/index.tsx +++ b/src/domain/Adventure/StepScreen/index.tsx @@ -20,9 +20,8 @@ import { TDataState, TStep, } from 'utils/types'; - -import { getMyAdventures, getAdventureSteps } from '../../../actions/requests'; -import { setCurrentScreen } from '../../../actions/info'; +import { setCurrentScreen } from 'actions/info'; +import { getMyAdventures, getAdventureSteps } from 'actions/requests'; import AdventureStepScreenRender from './AdventureStepScreenRender'; import styles from './styles'; diff --git a/src/domain/Adventures/AdventuresMy/index.tsx b/src/domain/Adventures/AdventuresMy/index.tsx index 813376868..ba59bdcf3 100644 --- a/src/domain/Adventures/AdventuresMy/index.tsx +++ b/src/domain/Adventures/AdventuresMy/index.tsx @@ -2,18 +2,15 @@ import React, { useEffect, useCallback } from 'react'; import { useFocusEffect, useNavigation } from '@react-navigation/native'; import { useDispatch, useSelector } from 'react-redux'; import { useTranslation } from 'react-i18next'; -import { ScrollView, FlatList, View, Text } from 'react-native'; +import { ScrollView, View } from 'react-native'; +import Text from 'components/Text'; import Touchable from 'components/Touchable'; import AdventureInvite from 'components/AdventureInvite'; import AdventureCard from 'components/AdventureCard'; import NotificationBanner from 'components/NotificationBanner'; import { TDataState } from 'utils/types'; - -import { - getMyAdventures, - getAdventuresInvitations, -} from '../../../actions/requests'; -import { setCurrentScreen } from '../../../actions/info'; +import { setCurrentScreen } from 'actions/info'; +import { getMyAdventures, getAdventuresInvitations } from 'actions/requests'; import styles from './styles'; @@ -30,17 +27,15 @@ const AdventuresMy = (): React.ReactElement => { ) || []; const { t } = useTranslation('title'); - const updateAdventures = (): void => { - // TODO: Do some kind of time based caching for these requests - dispatch(getMyAdventures('AdventuresMy')); - dispatch(getAdventuresInvitations()); - }; - // On first render update adventures and invites via API. useEffect(() => { + const updateAdventures = (): void => { + dispatch(getMyAdventures('AdventuresMy')); + dispatch(getAdventuresInvitations()); + }; // Load my adventures + invites. Note: async function can't be part of hook! updateAdventures(); - }, []); + }, [dispatch]); // Events firing when user leaves the screen or comes back. useFocusEffect( @@ -52,13 +47,7 @@ const AdventuresMy = (): React.ReactElement => { screen: 'AdventuresMy', }), ); - // Update adventures so we have up to date unreads badge. - // dispatch( getMyAdventures('AdventuresMy - Use Focus Effect') ); - return () => { - // Do something when the screen is unfocused - // Useful for cleanup functions - }; - }, []), + }, [dispatch]), ); return ( @@ -90,9 +79,9 @@ const AdventuresMy = (): React.ReactElement => { {myAdventuresIds.length > 0 && ( <> {t('adventures')} - {myAdventuresIds.map((advId: string) => ( - - ))} + {myAdventuresIds.map((advId: string | null) => + advId ? : null, + )} )} diff --git a/src/domain/Adventures/AdventuresMy/styles.ts b/src/domain/Adventures/AdventuresMy/styles.ts index 45776e7fe..20be66ce5 100644 --- a/src/domain/Adventures/AdventuresMy/styles.ts +++ b/src/domain/Adventures/AdventuresMy/styles.ts @@ -2,7 +2,7 @@ import { StyleSheet } from 'react-native'; import theme from 'utils/theme'; const styles = StyleSheet.create({ - AdventuresSreen: { + AdventuresScreen: { backgroundColor: theme.colors.primary, }, AdventuresList: { diff --git a/src/domain/Notifications/containers/Notifications/index.tsx b/src/domain/Notifications/containers/Notifications/index.tsx index 905be0ac5..368347d8b 100644 --- a/src/domain/Notifications/containers/Notifications/index.tsx +++ b/src/domain/Notifications/containers/Notifications/index.tsx @@ -118,8 +118,6 @@ function Notifications() { > {videoToShow && (