From 55be0860b980e97fde30b058afc88929f697e09c Mon Sep 17 00:00:00 2001 From: Adrian Castro <22133246+castdrian@users.noreply.github.com> Date: Sun, 4 Feb 2024 22:45:30 +0100 Subject: [PATCH] feat: add video player --- apps/expo/index.js | 1 + apps/expo/package.json | 2 +- apps/expo/src/app/components/item/item.tsx | 15 +++- apps/expo/src/app/video-player.tsx | 82 ++++++++++++++++++++++ 4 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 apps/expo/index.js create mode 100644 apps/expo/src/app/video-player.tsx diff --git a/apps/expo/index.js b/apps/expo/index.js new file mode 100644 index 0000000..63e531c --- /dev/null +++ b/apps/expo/index.js @@ -0,0 +1 @@ +import "expo-router/entry"; \ No newline at end of file diff --git a/apps/expo/package.json b/apps/expo/package.json index 1e9ba39..61f1a05 100644 --- a/apps/expo/package.json +++ b/apps/expo/package.json @@ -2,7 +2,7 @@ "name": "@movie-web/mobile", "version": "0.1.0", "private": true, - "main": "expo-router/entry", + "main": "index.js", "scripts": { "clean": "git clean -xdf .expo .turbo node_modules", "dev": "expo start", diff --git a/apps/expo/src/app/components/item/item.tsx b/apps/expo/src/app/components/item/item.tsx index f146621..e7125a3 100644 --- a/apps/expo/src/app/components/item/item.tsx +++ b/apps/expo/src/app/components/item/item.tsx @@ -1,4 +1,5 @@ -import { Image, View } from "react-native"; +import { useRouter } from "expo-router"; +import { Image, View, TouchableOpacity } from "react-native"; import { Text } from "~/components/ui/Text"; @@ -11,10 +12,18 @@ export interface ItemData { } export default function Item({ data }: { data: ItemData }) { + const router = useRouter(); const { title, type, year, posterUrl } = data; + const handlePress = () => { + console.log('Item pressed. Opening VideoPlayer...'); + router.push('/video-player'); + }; + return ( - + + { + {year} + } + ); } diff --git a/apps/expo/src/app/video-player.tsx b/apps/expo/src/app/video-player.tsx new file mode 100644 index 0000000..d92ccd0 --- /dev/null +++ b/apps/expo/src/app/video-player.tsx @@ -0,0 +1,82 @@ +import React, { Component } from 'react'; +import { StyleSheet, View, ActivityIndicator } from 'react-native'; +import type { VideoRef } from 'react-native-video'; +import Video from 'react-native-video'; + +interface VideoPlayerState { + videoUrl: string; + fullscreen: boolean; + isLoading: boolean; + paused: boolean; +} + +class VideoPlayer extends Component { + private videoPlayer: React.RefObject; + + constructor(props: object) { + super(props); + this.state = { + videoUrl: 'your_video_url', + fullscreen: true, + isLoading: true, + paused: false + }; + this.videoPlayer = React.createRef(); + } + + componentDidMount() { + if (this.videoPlayer.current) { + this.videoPlayer.current.presentFullscreenPlayer(); + } + } + + onVideoLoadStart = () => { + this.setState({ isLoading: true }); + }; + + onReadyForDisplay = () => { + this.setState({ isLoading: false }); + }; + + onVideoError = () => { + console.log("Video playback error"); + }; + + render() { + return ( + + + ); + } +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: 'black', + }, + fullScreen: { + position: 'absolute', + top: 0, + left: 0, + bottom: 0, + right: 0, + } +}); + +export default VideoPlayer; \ No newline at end of file