packages = new PackageList(this).getPackages();
30 | // Packages that cannot be autolinked yet can be added manually here, for example:
31 | // packages.add(new MyReactNativePackage());
32 | return packages;
33 | }
34 |
35 | @Override
36 | protected String getJSMainModuleName() {
37 | return "index";
38 | }
39 | };
40 |
41 | @Override
42 | public ReactNativeHost getReactNativeHost() {
43 | return mReactNativeHost;
44 | }
45 |
46 | @Override
47 | public void onCreate() {
48 | super.onCreate();
49 | SoLoader.init(this, /* native exopackage */ false);
50 | initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
51 | }
52 |
53 | /**
54 | * Loads Flipper in React Native templates. Call this in the onCreate method with something like
55 | * initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
56 | *
57 | * @param context
58 | * @param reactInstanceManager
59 | */
60 | private static void initializeFlipper(
61 | Context context, ReactInstanceManager reactInstanceManager) {
62 | if (BuildConfig.DEBUG) {
63 | try {
64 | /*
65 | We use reflection here to pick up the class that initializes Flipper,
66 | since Flipper library is not available in release mode
67 | */
68 | Class> aClass = Class.forName("com.moviesdaily.ReactNativeFlipper");
69 | aClass
70 | .getMethod("initializeFlipper", Context.class, ReactInstanceManager.class)
71 | .invoke(null, context, reactInstanceManager);
72 | } catch (ClassNotFoundException e) {
73 | e.printStackTrace();
74 | } catch (NoSuchMethodException e) {
75 | e.printStackTrace();
76 | } catch (IllegalAccessException e) {
77 | e.printStackTrace();
78 | } catch (InvocationTargetException e) {
79 | e.printStackTrace();
80 | }
81 | }
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/src/api/url.js:
--------------------------------------------------------------------------------
1 | const ROOT_URL = "https://api.themoviedb.org/3";
2 | const IMAGE_URL = "https://image.tmdb.org/t/p/";
3 | const API_KEY = "1abb3e68d878be1155d781ce812f80a8";
4 |
5 | const defaultQuery = {
6 | api_key: API_KEY,
7 | language: "en-US",
8 | // include_adult: true,
9 | // region: "ID",
10 | };
11 |
12 | const queryString = (obj) => {
13 | return Object.entries(obj)
14 | .map(([index, val]) => `${index}=${val}`)
15 | .join("&");
16 | };
17 |
18 | export const getPopularMoviesUrl = (page) => `${ROOT_URL}/movie/popular?${queryString({ ...defaultQuery, ...page })}`;
19 | export const getTopRatedMoviesUrl = (page) =>
20 | `${ROOT_URL}/discover/movie?${queryString({ ...defaultQuery, ...{ sort_by: "vote_count.desc" }, ...page })}`;
21 | export const getMustWatchMoviesUrl = (page) =>
22 | `${ROOT_URL}/discover/movie?${queryString({ ...defaultQuery, ...{ sort_by: "revenue.desc" }, ...page })}`;
23 | export const getUpcomingMoviesUrl = (page) => `${ROOT_URL}/movie/upcoming?${queryString({ ...defaultQuery, ...page })}`;
24 |
25 | export const getPopularTVShowUrl = (page) => `${ROOT_URL}/tv/popular?${queryString({ ...defaultQuery, ...page })}`;
26 | export const getTopRatedTVShowUrl = (page) => `${ROOT_URL}/tv/top_rated?${queryString({ ...defaultQuery, ...page })}`;
27 | export const getMustWatchTVShowUrl = (page) =>
28 | `${ROOT_URL}/discover/tv?${queryString({ ...defaultQuery, ...{ sort_by: "vote_count.desc" }, ...page })}`;
29 | export const getOnTheAirTVShowUrl = (page) => `${ROOT_URL}/tv/on_the_air?${queryString({ ...defaultQuery, ...page })}`;
30 |
31 | export const getMovieDetailUrl = (id) => `${ROOT_URL}/movie/${id}?${queryString(defaultQuery)}`;
32 | export const getMovieCreditUrl = (id) => `${ROOT_URL}/movie/${id}/credits?${queryString(defaultQuery)}`;
33 | export const getMovieImageUrl = (id) => `${ROOT_URL}/movie/${id}/images?${queryString({ api_key: API_KEY })}`;
34 | export const getMovieVideoUrl = (id) => `${ROOT_URL}/movie/${id}/videos?${queryString({ api_key: API_KEY })}`;
35 | export const getMovieRecommendationsUrl = (id) => `${ROOT_URL}/movie/${id}/recommendations?${queryString(defaultQuery)}`;
36 |
37 | export const getTvShowDetailUrl = (id) => `${ROOT_URL}/tv/${id}?${queryString(defaultQuery)}`;
38 | export const getTvShowCreditUrl = (id) => `${ROOT_URL}/tv/${id}/credits?${queryString(defaultQuery)}`;
39 | export const getTvShowImageUrl = (id) => `${ROOT_URL}/tv/${id}/images?${queryString({ api_key: API_KEY })}`;
40 | export const getTvShowVideoUrl = (id) => `${ROOT_URL}/tv/${id}/videos?${queryString({ api_key: API_KEY })}`;
41 | export const getTvShowRecommendationsUrl = (id) => `${ROOT_URL}/tv/${id}/recommendations?${queryString(defaultQuery)}`;
42 |
43 | export const getTvShowSeasonUrl = (id, season_number) =>
44 | `${ROOT_URL}/tv/${id}/season/${season_number}?${queryString(defaultQuery)}`;
45 |
46 | export const getSearchMovieUrl = (keyword) =>
47 | `${ROOT_URL}/search/movie?${queryString({ ...defaultQuery, ...{ query: keyword } })}`;
48 | export const getSearchTvUrl = (keyword) =>
49 | `${ROOT_URL}/search/tv?${queryString({ ...defaultQuery, ...{ query: keyword } })}`;
50 |
51 | export const getImageUrl = (path, key = "uri", width = "w500") => {
52 | return { [key]: `${IMAGE_URL}${width}${path}` };
53 | };
54 |
--------------------------------------------------------------------------------
/android/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem https://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 |
17 | @if "%DEBUG%" == "" @echo off
18 | @rem ##########################################################################
19 | @rem
20 | @rem Gradle startup script for Windows
21 | @rem
22 | @rem ##########################################################################
23 |
24 | @rem Set local scope for the variables with windows NT shell
25 | if "%OS%"=="Windows_NT" setlocal
26 |
27 | set DIRNAME=%~dp0
28 | if "%DIRNAME%" == "" set DIRNAME=.
29 | set APP_BASE_NAME=%~n0
30 | set APP_HOME=%DIRNAME%
31 |
32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
34 |
35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
37 |
38 | @rem Find java.exe
39 | if defined JAVA_HOME goto findJavaFromJavaHome
40 |
41 | set JAVA_EXE=java.exe
42 | %JAVA_EXE% -version >NUL 2>&1
43 | if "%ERRORLEVEL%" == "0" goto init
44 |
45 | echo.
46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
47 | echo.
48 | echo Please set the JAVA_HOME variable in your environment to match the
49 | echo location of your Java installation.
50 |
51 | goto fail
52 |
53 | :findJavaFromJavaHome
54 | set JAVA_HOME=%JAVA_HOME:"=%
55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
56 |
57 | if exist "%JAVA_EXE%" goto init
58 |
59 | echo.
60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
61 | echo.
62 | echo Please set the JAVA_HOME variable in your environment to match the
63 | echo location of your Java installation.
64 |
65 | goto fail
66 |
67 | :init
68 | @rem Get command-line arguments, handling Windows variants
69 |
70 | if not "%OS%" == "Windows_NT" goto win9xME_args
71 |
72 | :win9xME_args
73 | @rem Slurp the command line arguments.
74 | set CMD_LINE_ARGS=
75 | set _SKIP=2
76 |
77 | :win9xME_args_slurp
78 | if "x%~1" == "x" goto execute
79 |
80 | set CMD_LINE_ARGS=%*
81 |
82 | :execute
83 | @rem Setup the command line
84 |
85 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
86 |
87 | @rem Execute Gradle
88 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
89 |
90 | :end
91 | @rem End local scope for the variables with windows NT shell
92 | if "%ERRORLEVEL%"=="0" goto mainEnd
93 |
94 | :fail
95 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
96 | rem the _cmd.exe /c_ return code!
97 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
98 | exit /b 1
99 |
100 | :mainEnd
101 | if "%OS%"=="Windows_NT" endlocal
102 |
103 | :omega
104 |
--------------------------------------------------------------------------------
/android/app/src/debug/java/com/moviesdaily/ReactNativeFlipper.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the LICENSE file in the root
5 | * directory of this source tree.
6 | */
7 | package com.moviesdaily;
8 |
9 | import android.content.Context;
10 | import com.facebook.flipper.android.AndroidFlipperClient;
11 | import com.facebook.flipper.android.utils.FlipperUtils;
12 | import com.facebook.flipper.core.FlipperClient;
13 | import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin;
14 | import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin;
15 | import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin;
16 | import com.facebook.flipper.plugins.inspector.DescriptorMapping;
17 | import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;
18 | import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;
19 | import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
20 | import com.facebook.flipper.plugins.react.ReactFlipperPlugin;
21 | import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
22 | import com.facebook.react.ReactInstanceManager;
23 | import com.facebook.react.bridge.ReactContext;
24 | import com.facebook.react.modules.network.NetworkingModule;
25 | import okhttp3.OkHttpClient;
26 |
27 | public class ReactNativeFlipper {
28 | public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
29 | if (FlipperUtils.shouldEnableFlipper(context)) {
30 | final FlipperClient client = AndroidFlipperClient.getInstance(context);
31 |
32 | client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
33 | client.addPlugin(new ReactFlipperPlugin());
34 | client.addPlugin(new DatabasesFlipperPlugin(context));
35 | client.addPlugin(new SharedPreferencesFlipperPlugin(context));
36 | client.addPlugin(CrashReporterPlugin.getInstance());
37 |
38 | NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
39 | NetworkingModule.setCustomClientBuilder(
40 | new NetworkingModule.CustomClientBuilder() {
41 | @Override
42 | public void apply(OkHttpClient.Builder builder) {
43 | builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
44 | }
45 | });
46 | client.addPlugin(networkFlipperPlugin);
47 | client.start();
48 |
49 | // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
50 | // Hence we run if after all native modules have been initialized
51 | ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
52 | if (reactContext == null) {
53 | reactInstanceManager.addReactInstanceEventListener(
54 | new ReactInstanceManager.ReactInstanceEventListener() {
55 | @Override
56 | public void onReactContextInitialized(ReactContext reactContext) {
57 | reactInstanceManager.removeReactInstanceEventListener(this);
58 | reactContext.runOnNativeModulesQueueThread(
59 | new Runnable() {
60 | @Override
61 | public void run() {
62 | client.addPlugin(new FrescoFlipperPlugin());
63 | }
64 | });
65 | }
66 | });
67 | } else {
68 | client.addPlugin(new FrescoFlipperPlugin());
69 | }
70 | }
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/ios/MoviesDaily.xcodeproj/xcshareddata/xcschemes/MoviesDaily-tvOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
33 |
39 |
40 |
41 |
42 |
43 |
53 |
55 |
61 |
62 |
63 |
64 |
70 |
72 |
78 |
79 |
80 |
81 |
83 |
84 |
87 |
88 |
89 |
--------------------------------------------------------------------------------
/src/screen/SearchScreen.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import PropTypes from "prop-types";
3 | import { Text, TextInput, View, StyleSheet } from "react-native";
4 |
5 | import Screen from "../component/Screen";
6 | import { requestSearchMovie, requestSearchTv } from "../api/api";
7 | import { orange, lightGray } from "../helper/Color";
8 | import MovieList from "../component/MovieList";
9 |
10 | import Icon from "react-native-vector-icons/Ionicons";
11 | import BackIcon from "../component/Utils/BackIcon";
12 |
13 | class SearchScreen extends Component {
14 | constructor(props) {
15 | super(props);
16 | this.state = {
17 | search: {},
18 | };
19 | }
20 |
21 | renderHeaderTitle = () => {
22 | const { type } = this.props.route.params;
23 | const { navigation } = this.props;
24 | const title = type === "tv" ? "TV Shows" : "Movies";
25 |
26 | return (
27 |
28 |
29 |
30 | {`Search ${title}`}
31 |
32 |
33 |
34 |
35 | {`We'll help you find your favorite ${title.toLowerCase()}. Discover wonderful ${title.toLowerCase()}.`}
36 |
37 |
38 | );
39 | };
40 |
41 | renderSearchText = () => {
42 | return (
43 |
44 |
45 |
46 | this.requestMovie(text)}
50 | returnKeyType={"search"}
51 | autoCorrect={false}
52 | />
53 |
54 |
55 | );
56 | };
57 |
58 | renderListMovies = () => {
59 | const { results = [] } = this.state.search;
60 | const { type } = this.props.route.params;
61 | const { navigation } = this.props;
62 | return ;
63 | };
64 |
65 | render() {
66 | return (
67 |
68 | {this.renderHeaderTitle()}
69 | {this.renderSearchText()}
70 | {this.renderListMovies()}
71 |
72 | );
73 | }
74 |
75 | renderMovies = () => {
76 | const { results = [] } = this.state.search;
77 | return results.map((item) => {item.title});
78 | };
79 |
80 | requestMovie = async (text) => {
81 | const { type } = this.props.route.params;
82 | const requestSearch = type === "tv" ? requestSearchTv : requestSearchMovie;
83 | if (text !== "") {
84 | const search = await requestSearch(text);
85 | if (search) this.setState({ search });
86 | }
87 | };
88 | }
89 |
90 | export default SearchScreen;
91 |
92 | SearchScreen.propTypes = {
93 | route: PropTypes.any,
94 | navigation: PropTypes.object,
95 | };
96 |
97 | const _styles = StyleSheet.create({
98 | headerTitle: {
99 | fontFamily: "Montserrat-Bold",
100 | fontSize: 20,
101 | flex: 8,
102 | textAlign: "center",
103 | alignSelf: "center",
104 | },
105 |
106 | titleBar: {
107 | width: 40,
108 | height: 5,
109 | backgroundColor: orange,
110 | marginTop: 4,
111 | marginBottom: 12,
112 | alignSelf: "center",
113 | },
114 |
115 | subTitle: {
116 | margin: 16,
117 | marginTop: 5,
118 | fontFamily: "Montserrat-Regular",
119 | fontSize: 12,
120 | textAlign: "center",
121 | alignSelf: "center",
122 | width: "70%",
123 | },
124 |
125 | searchContainer: {
126 | marginHorizontal: 16,
127 | backgroundColor: lightGray,
128 | borderRadius: 24,
129 | flexDirection: "row",
130 | },
131 |
132 | searchInput: {
133 | fontFamily: "Montserrat-Medium",
134 | fontSize: 14,
135 | flex: 1,
136 | marginRight: 12,
137 | },
138 | });
139 |
--------------------------------------------------------------------------------
/src/component/MovieDetail/MoviePlayButton.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import PropTypes from "prop-types";
3 | import Modal from "react-native-modal";
4 | import { View, StyleSheet, TouchableWithoutFeedback, Text } from "react-native";
5 |
6 | import Icon from "react-native-vector-icons/FontAwesome5";
7 |
8 | import { orange, white } from "../../helper/Color";
9 |
10 | class MoviePlayButton extends Component {
11 | state = {
12 | isModalShown: false,
13 | };
14 |
15 | toggleModal = () => {
16 | this.setState((prevState) => ({ isModalShown: !prevState.isModalShown }));
17 | };
18 |
19 | renderPlayButton = () => {
20 | return (
21 |
22 |
23 |
24 |
25 |
26 | );
27 | };
28 |
29 | onPressPlay = (key) => {
30 | this.toggleModal();
31 | this.props.navigation.navigate("Webview", { id: key });
32 | };
33 |
34 | videoItem = () => {
35 | const results = this.props.videoData.results.slice(0, 7);
36 | return results.map((item) => (
37 |
38 |
39 | {item.name}
40 | {item.type}
41 |
42 | this.onPressPlay(item.key)}>
43 |
44 | Play
45 |
46 |
47 |
48 | ));
49 | };
50 |
51 | renderModal = () => {
52 | const { results = [] } = this.props.videoData;
53 |
54 | if (this.state.isModalShown && results.length !== 0) {
55 | return (
56 |
64 |
65 |
66 | Videos
67 | {this.videoItem()}
68 |
69 |
70 | );
71 | }
72 | };
73 |
74 | render() {
75 | return (
76 | <>
77 | {this.renderPlayButton()}
78 | {this.renderModal()}
79 | >
80 | );
81 | }
82 | }
83 |
84 | export default MoviePlayButton;
85 |
86 | MoviePlayButton.propTypes = {
87 | videoData: PropTypes.object,
88 | navigation: PropTypes.object,
89 | };
90 |
91 | const _styles = StyleSheet.create({
92 | wrapper: {
93 | position: "absolute",
94 | right: 0,
95 | top: -30,
96 | marginRight: 32,
97 | width: 60,
98 | height: 60,
99 | borderRadius: 12,
100 | backgroundColor: orange,
101 | justifyContent: "center",
102 | },
103 |
104 | icon: {
105 | alignSelf: "center",
106 | },
107 |
108 | modalStyle: {
109 | backgroundColor: white,
110 | paddingHorizontal: 24,
111 | paddingTop: 0,
112 | paddingBottom: 48,
113 | minHeight: "40%",
114 | borderTopRightRadius: 16,
115 | borderTopLeftRadius: 16,
116 | },
117 |
118 | bar: {
119 | width: 40,
120 | height: 5,
121 | backgroundColor: orange,
122 | marginBottom: 24,
123 | borderRadius: 2,
124 | alignSelf: "center",
125 | marginTop: 8,
126 | },
127 |
128 | playText: {
129 | fontFamily: "Montserrat-SemiBold",
130 | textAlign: "right",
131 | backgroundColor: orange,
132 | color: white,
133 | paddingVertical: 4,
134 | paddingHorizontal: 8,
135 | fontSize: 14,
136 | },
137 |
138 | videoText: {
139 | fontFamily: "Montserrat-SemiBold",
140 | fontSize: 18,
141 | paddingBottom: 12,
142 | },
143 | });
144 |
--------------------------------------------------------------------------------
/src/screen/MovieDetailScreen.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import PropTypes from "prop-types";
3 | import { View, StatusBar, ScrollView, StyleSheet } from "react-native";
4 |
5 | import { requestMovieDetailScreen } from "../api/api";
6 |
7 | import MovieBackdrop from "../component/MovieDetail/MovieBackdrop";
8 | import MovieOverview from "../component/MovieDetail/MovieOverview";
9 | import MovieImages from "../component/MovieDetail/MovieImages";
10 | import MovieCast from "../component/MovieDetail/MovieCast";
11 | import MovieRecommendations from "../component/MovieDetail/MovieRecommendations";
12 | import MovieGenres from "../component/MovieDetail/MovieGenres";
13 | import MovieRating from "../component/MovieDetail/MovieRating";
14 | import MoviePlayButton from "../component/MovieDetail/MoviePlayButton";
15 | import MovieTitle from "../component/MovieDetail/MovieTitle";
16 | import { black, white } from "../helper/Color";
17 | import BackIcon from "../component/Utils/BackIcon";
18 |
19 | class MovieDetailScreen extends Component {
20 | constructor(props) {
21 | super(props);
22 | this.state = {
23 | movieData: {},
24 | credit: {},
25 | images: {},
26 | videos: {},
27 | recommendations: {},
28 | isLoaded: false,
29 | };
30 | }
31 |
32 | componentDidMount() {
33 | this.requestInfoDetail();
34 | }
35 |
36 | requestInfoDetail = async () => {
37 | const { id } = this.props.route.params;
38 | console.log("movie id", id);
39 |
40 | await requestMovieDetailScreen(id, this.callbackRequest);
41 | };
42 |
43 | callbackRequest = (response) => {
44 | const [movieData, credit, images, videos, recommendations] = response;
45 | this.setState({ movieData, credit, images, videos, recommendations, isLoaded: true });
46 | };
47 |
48 | movieInfoGeneral = () => {
49 | const { movieData, isLoaded } = this.state;
50 | return (
51 |
52 | {isLoaded && (
53 |
54 |
55 |
56 |
57 | )}
58 |
59 | );
60 | };
61 |
62 | movieInfoDetail = () => {
63 | const { movieData, credit, isLoaded, images, videos, recommendations } = this.state;
64 | const { navigation } = this.props;
65 | return (
66 |
67 |
68 | {isLoaded && (
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 | )}
77 |
78 |
79 |
80 | );
81 | };
82 |
83 | render() {
84 | const { navigation } = this.props;
85 | return (
86 |
87 |
88 |
89 | {this.movieInfoGeneral()}
90 | {this.movieInfoDetail()}
91 |
92 |
93 |
94 | );
95 | }
96 | }
97 |
98 | export default MovieDetailScreen;
99 |
100 | MovieDetailScreen.propTypes = {
101 | route: PropTypes.any,
102 | navigation: PropTypes.object,
103 | };
104 |
105 | const Styles = StyleSheet.create({
106 | scrollview: {
107 | backgroundColor: white,
108 | flexGrow: 1,
109 | },
110 |
111 | movieDetailWrapper: {
112 | flex: 1,
113 | backgroundColor: black,
114 | },
115 |
116 | movieDetail: {
117 | flex: 1,
118 | padding: 16,
119 | paddingTop: 24,
120 | borderTopLeftRadius: 16,
121 | borderTopRightRadius: 16,
122 | backgroundColor: white,
123 | },
124 | });
125 |
--------------------------------------------------------------------------------
/src/screen/TVDetailScreen.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import PropTypes from "prop-types";
3 | import { View, StatusBar, ScrollView, StyleSheet } from "react-native";
4 |
5 | import { requestTvDetailScreen } from "../api/api";
6 |
7 | import MovieBackdrop from "../component/MovieDetail/MovieBackdrop";
8 | import MovieOverview from "../component/MovieDetail/MovieOverview";
9 | import MovieImages from "../component/MovieDetail/MovieImages";
10 | import MovieCast from "../component/MovieDetail/MovieCast";
11 | import MovieRecommendations from "../component/MovieDetail/MovieRecommendations";
12 | import MovieGenres from "../component/MovieDetail/MovieGenres";
13 | import MovieRating from "../component/MovieDetail/MovieRating";
14 | import MoviePlayButton from "../component/MovieDetail/MoviePlayButton";
15 | import MovieTitle from "../component/MovieDetail/MovieTitle";
16 | import { black, white } from "../helper/Color";
17 | import BackIcon from "../component/Utils/BackIcon";
18 | import MovieSeason from "../component/MovieDetail/MovieSeason";
19 |
20 | class TVDetailScreen extends Component {
21 | constructor(props) {
22 | super(props);
23 | this.state = {
24 | movieData: {},
25 | credit: {},
26 | images: {},
27 | videos: {},
28 | recommendations: {},
29 | isLoaded: false,
30 | };
31 | }
32 |
33 | componentDidMount() {
34 | this.requestInfoDetail();
35 | }
36 |
37 | requestInfoDetail = async () => {
38 | const { id } = this.props.route.params;
39 | console.log("tv id", id);
40 |
41 | await requestTvDetailScreen(id, this.callbackRequest);
42 | };
43 |
44 | callbackRequest = (response) => {
45 | const [movieData, credit, images, videos, recommendations] = response;
46 | this.setState({ movieData, credit, images, videos, recommendations, isLoaded: true });
47 | };
48 |
49 | movieInfoGeneral = () => {
50 | const { movieData, isLoaded } = this.state;
51 | return (
52 |
53 | {isLoaded && (
54 |
55 |
56 |
57 |
58 | )}
59 |
60 | );
61 | };
62 |
63 | movieInfoDetail = () => {
64 | const { movieData, credit, isLoaded, images, recommendations, videos } = this.state;
65 | const { navigation } = this.props;
66 | return (
67 |
68 |
69 | {isLoaded && (
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 | )}
79 |
80 |
81 |
82 | );
83 | };
84 |
85 | render() {
86 | const { navigation } = this.props;
87 | return (
88 |
89 |
90 |
91 | {this.movieInfoGeneral()}
92 | {this.movieInfoDetail()}
93 |
94 |
95 |
96 | );
97 | }
98 | }
99 |
100 | export default TVDetailScreen;
101 |
102 | TVDetailScreen.propTypes = {
103 | route: PropTypes.any,
104 | navigation: PropTypes.object,
105 | };
106 |
107 | const Styles = StyleSheet.create({
108 | scrollview: {
109 | backgroundColor: white,
110 | flexGrow: 1,
111 | },
112 |
113 | movieDetailWrapper: {
114 | flex: 1,
115 | backgroundColor: black,
116 | },
117 |
118 | movieDetail: {
119 | flex: 1,
120 | padding: 16,
121 | paddingTop: 24,
122 | borderTopLeftRadius: 16,
123 | borderTopRightRadius: 16,
124 | backgroundColor: white,
125 | },
126 | });
127 |
--------------------------------------------------------------------------------
/android/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | #
4 | # Copyright 2015 the original author or authors.
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # https://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 |
19 | ##############################################################################
20 | ##
21 | ## Gradle start up script for UN*X
22 | ##
23 | ##############################################################################
24 |
25 | # Attempt to set APP_HOME
26 | # Resolve links: $0 may be a link
27 | PRG="$0"
28 | # Need this for relative symlinks.
29 | while [ -h "$PRG" ] ; do
30 | ls=`ls -ld "$PRG"`
31 | link=`expr "$ls" : '.*-> \(.*\)$'`
32 | if expr "$link" : '/.*' > /dev/null; then
33 | PRG="$link"
34 | else
35 | PRG=`dirname "$PRG"`"/$link"
36 | fi
37 | done
38 | SAVED="`pwd`"
39 | cd "`dirname \"$PRG\"`/" >/dev/null
40 | APP_HOME="`pwd -P`"
41 | cd "$SAVED" >/dev/null
42 |
43 | APP_NAME="Gradle"
44 | APP_BASE_NAME=`basename "$0"`
45 |
46 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
47 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
48 |
49 | # Use the maximum available, or set MAX_FD != -1 to use that value.
50 | MAX_FD="maximum"
51 |
52 | warn () {
53 | echo "$*"
54 | }
55 |
56 | die () {
57 | echo
58 | echo "$*"
59 | echo
60 | exit 1
61 | }
62 |
63 | # OS specific support (must be 'true' or 'false').
64 | cygwin=false
65 | msys=false
66 | darwin=false
67 | nonstop=false
68 | case "`uname`" in
69 | CYGWIN* )
70 | cygwin=true
71 | ;;
72 | Darwin* )
73 | darwin=true
74 | ;;
75 | MINGW* )
76 | msys=true
77 | ;;
78 | NONSTOP* )
79 | nonstop=true
80 | ;;
81 | esac
82 |
83 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
84 |
85 | # Determine the Java command to use to start the JVM.
86 | if [ -n "$JAVA_HOME" ] ; then
87 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
88 | # IBM's JDK on AIX uses strange locations for the executables
89 | JAVACMD="$JAVA_HOME/jre/sh/java"
90 | else
91 | JAVACMD="$JAVA_HOME/bin/java"
92 | fi
93 | if [ ! -x "$JAVACMD" ] ; then
94 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
95 |
96 | Please set the JAVA_HOME variable in your environment to match the
97 | location of your Java installation."
98 | fi
99 | else
100 | JAVACMD="java"
101 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
102 |
103 | Please set the JAVA_HOME variable in your environment to match the
104 | location of your Java installation."
105 | fi
106 |
107 | # Increase the maximum file descriptors if we can.
108 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
109 | MAX_FD_LIMIT=`ulimit -H -n`
110 | if [ $? -eq 0 ] ; then
111 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
112 | MAX_FD="$MAX_FD_LIMIT"
113 | fi
114 | ulimit -n $MAX_FD
115 | if [ $? -ne 0 ] ; then
116 | warn "Could not set maximum file descriptor limit: $MAX_FD"
117 | fi
118 | else
119 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
120 | fi
121 | fi
122 |
123 | # For Darwin, add options to specify how the application appears in the dock
124 | if $darwin; then
125 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
126 | fi
127 |
128 | # For Cygwin or MSYS, switch paths to Windows format before running java
129 | if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
130 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
131 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
132 | JAVACMD=`cygpath --unix "$JAVACMD"`
133 |
134 | # We build the pattern for arguments to be converted via cygpath
135 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
136 | SEP=""
137 | for dir in $ROOTDIRSRAW ; do
138 | ROOTDIRS="$ROOTDIRS$SEP$dir"
139 | SEP="|"
140 | done
141 | OURCYGPATTERN="(^($ROOTDIRS))"
142 | # Add a user-defined pattern to the cygpath arguments
143 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
144 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
145 | fi
146 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
147 | i=0
148 | for arg in "$@" ; do
149 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
150 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
151 |
152 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
153 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
154 | else
155 | eval `echo args$i`="\"$arg\""
156 | fi
157 | i=`expr $i + 1`
158 | done
159 | case $i in
160 | 0) set -- ;;
161 | 1) set -- "$args0" ;;
162 | 2) set -- "$args0" "$args1" ;;
163 | 3) set -- "$args0" "$args1" "$args2" ;;
164 | 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
165 | 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
166 | 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
167 | 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
168 | 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
169 | 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
170 | esac
171 | fi
172 |
173 | # Escape application args
174 | save () {
175 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
176 | echo " "
177 | }
178 | APP_ARGS=`save "$@"`
179 |
180 | # Collect all arguments for the java command, following the shell quoting and substitution rules
181 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
182 |
183 | exec "$JAVACMD" "$@"
184 |
--------------------------------------------------------------------------------
/src/screen/MovieSeasonScreen.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import PropTypes from "prop-types";
3 | import { Text, View, FlatList, StyleSheet, TouchableWithoutFeedback } from "react-native";
4 | import Modal from "react-native-modal";
5 | import FastImage from "react-native-fast-image";
6 | import { BlurView } from "@react-native-community/blur";
7 |
8 | import Screen from "../component/Screen";
9 | import { request } from "../api/api";
10 | import { getTvShowSeasonUrl, getImageUrl } from "../api/url";
11 | import { Styles } from "../component/MovieDetail/Styles";
12 | import { white, orange } from "../helper/Color";
13 | import BackIcon from "../component/Utils/BackIcon";
14 |
15 | import Icon from "react-native-vector-icons/MaterialCommunityIcons";
16 |
17 | class MovieSeasonScreen extends Component {
18 | constructor(props) {
19 | super(props);
20 | const { season } = this.props.route.params;
21 | this.state = {
22 | dataSeason: [],
23 | isLoaded: false,
24 | season_number: season.season_number,
25 | isModalVisible: false,
26 | };
27 | }
28 |
29 | componentDidMount() {
30 | this.fetchSeasonData(this.state.season_number);
31 | }
32 |
33 | fetchSeasonData = async (season_number) => {
34 | const { movieid } = this.props.route.params;
35 | let tempData = this.state.dataSeason;
36 | if (!tempData[season_number]) tempData[season_number] = await request(getTvShowSeasonUrl(movieid, season_number));
37 |
38 | if (tempData[season_number]) this.setState({ dataSeason: tempData, isLoaded: true, season_number: season_number });
39 | };
40 |
41 | seasonEpisode = (data) => {
42 | const imageUrl = getImageUrl(data.still_path, "uri", "w500");
43 | return (
44 |
45 |
46 |
47 |
48 |
49 |
50 | {`Episode ${data.episode_number}`}
51 |
52 | {data.name}
53 |
54 |
55 |
56 |
57 |
61 | {data.overview}
62 |
63 |
64 | );
65 | };
66 |
67 | onPressSeason = (index) => {
68 | this.fetchSeasonData(index);
69 | this.toggleModal();
70 | };
71 |
72 | handleOnScroll = (event) => {
73 | this.setState({
74 | scrollOffset: event.nativeEvent.contentOffset.y,
75 | });
76 | };
77 | handleScrollTo = (p) => {
78 | if (this.season_list.current) {
79 | this.season_list.current.scrollTo(p);
80 | }
81 | };
82 |
83 | toggleModal = () => {
84 | this.setState((prevState) => ({ isModalVisible: !prevState.isModalVisible }));
85 | };
86 |
87 | seasonTab = (item, index) => {
88 | const { season_number } = this.state;
89 | return (
90 |
91 | {
93 | this.onPressSeason(index);
94 | }}
95 | >
96 |
104 | {item}
105 |
106 |
107 |
108 | );
109 | };
110 |
111 | renderTitle = () => {
112 | const { navigation } = this.props;
113 | return (
114 |
115 |
116 |
117 | Season Detail
118 |
119 |
120 |
121 |
122 | );
123 | };
124 |
125 | renderSeasonDropdown = () => {
126 | const { season_number = 0 } = this.state;
127 | const { listSeason } = this.props.route.params;
128 | return (
129 |
130 |
131 |
132 |
139 | {listSeason[season_number]}
140 |
141 |
142 |
143 |
144 |
145 | );
146 | };
147 |
148 | renderEpisodeList = () => {
149 | const { season_number = 0 } = this.state;
150 | return (
151 |
152 | {this.state.isLoaded && (
153 | item.id.toString()}
155 | data={this.state.dataSeason[season_number].episodes}
156 | renderItem={({ item }) => this.seasonEpisode(item)}
157 | contentContainerStyle={{ margin: 8 }}
158 | />
159 | )}
160 |
161 | );
162 | };
163 |
164 | renderListSeasonModal = () => {
165 | const { listSeason } = this.props.route.params;
166 | return (
167 |
177 |
182 |
183 | (this.season_list = ref)}
185 | onScroll={this.handleOnScroll}
186 | data={listSeason}
187 | renderItem={({ item, index }) => this.seasonTab(item, index)}
188 | showsVerticalScrollIndicator={false}
189 | keyExtractor={(item) => item}
190 | />
191 |
192 |
193 |
204 |
205 |
206 |
207 |
208 | );
209 | };
210 |
211 | render() {
212 | return (
213 |
214 | {this.renderTitle()}
215 | {this.renderSeasonDropdown()}
216 | {this.renderEpisodeList()}
217 | {this.renderListSeasonModal()}
218 |
219 | );
220 | }
221 | }
222 |
223 | export default MovieSeasonScreen;
224 |
225 | MovieSeasonScreen.propTypes = {
226 | route: PropTypes.shape({
227 | params: PropTypes.shape({
228 | season: PropTypes.object,
229 | movieid: PropTypes.number,
230 | listSeason: PropTypes.array,
231 | }),
232 | }),
233 | listSeason: PropTypes.any,
234 | navigation: PropTypes.object,
235 | };
236 |
237 | const _styles = StyleSheet.create({
238 | headerTitle: {
239 | fontFamily: "Montserrat-Bold",
240 | fontSize: 20,
241 | flex: 8,
242 | textAlign: "center",
243 | alignSelf: "center",
244 | },
245 |
246 | titleBar: {
247 | width: 40,
248 | height: 5,
249 | backgroundColor: orange,
250 | marginTop: 4,
251 | alignSelf: "center",
252 | },
253 | });
254 |
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: "com.android.application"
2 |
3 | import com.android.build.OutputFile
4 |
5 | /**
6 | * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
7 | * and bundleReleaseJsAndAssets).
8 | * These basically call `react-native bundle` with the correct arguments during the Android build
9 | * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
10 | * bundle directly from the development server. Below you can see all the possible configurations
11 | * and their defaults. If you decide to add a configuration block, make sure to add it before the
12 | * `apply from: "../../node_modules/react-native/react.gradle"` line.
13 | *
14 | * project.ext.react = [
15 | * // the name of the generated asset file containing your JS bundle
16 | * bundleAssetName: "index.android.bundle",
17 | *
18 | * // the entry file for bundle generation. If none specified and
19 | * // "index.android.js" exists, it will be used. Otherwise "index.js" is
20 | * // default. Can be overridden with ENTRY_FILE environment variable.
21 | * entryFile: "index.android.js",
22 | *
23 | * // https://reactnative.dev/docs/performance#enable-the-ram-format
24 | * bundleCommand: "ram-bundle",
25 | *
26 | * // whether to bundle JS and assets in debug mode
27 | * bundleInDebug: false,
28 | *
29 | * // whether to bundle JS and assets in release mode
30 | * bundleInRelease: true,
31 | *
32 | * // whether to bundle JS and assets in another build variant (if configured).
33 | * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
34 | * // The configuration property can be in the following formats
35 | * // 'bundleIn${productFlavor}${buildType}'
36 | * // 'bundleIn${buildType}'
37 | * // bundleInFreeDebug: true,
38 | * // bundleInPaidRelease: true,
39 | * // bundleInBeta: true,
40 | *
41 | * // whether to disable dev mode in custom build variants (by default only disabled in release)
42 | * // for example: to disable dev mode in the staging build type (if configured)
43 | * devDisabledInStaging: true,
44 | * // The configuration property can be in the following formats
45 | * // 'devDisabledIn${productFlavor}${buildType}'
46 | * // 'devDisabledIn${buildType}'
47 | *
48 | * // the root of your project, i.e. where "package.json" lives
49 | * root: "../../",
50 | *
51 | * // where to put the JS bundle asset in debug mode
52 | * jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
53 | *
54 | * // where to put the JS bundle asset in release mode
55 | * jsBundleDirRelease: "$buildDir/intermediates/assets/release",
56 | *
57 | * // where to put drawable resources / React Native assets, e.g. the ones you use via
58 | * // require('./image.png')), in debug mode
59 | * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
60 | *
61 | * // where to put drawable resources / React Native assets, e.g. the ones you use via
62 | * // require('./image.png')), in release mode
63 | * resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
64 | *
65 | * // by default the gradle tasks are skipped if none of the JS files or assets change; this means
66 | * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
67 | * // date; if you have any other folders that you want to ignore for performance reasons (gradle
68 | * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
69 | * // for example, you might want to remove it from here.
70 | * inputExcludes: ["android/**", "ios/**"],
71 | *
72 | * // override which node gets called and with what additional arguments
73 | * nodeExecutableAndArgs: ["node"],
74 | *
75 | * // supply additional arguments to the packager
76 | * extraPackagerArgs: []
77 | * ]
78 | */
79 |
80 | project.ext.react = [
81 | enableHermes: false, // clean and rebuild if changing
82 | ]
83 |
84 | apply from: "../../node_modules/react-native/react.gradle"
85 |
86 | /**
87 | * Set this to true to create two separate APKs instead of one:
88 | * - An APK that only works on ARM devices
89 | * - An APK that only works on x86 devices
90 | * The advantage is the size of the APK is reduced by about 4MB.
91 | * Upload all the APKs to the Play Store and people will download
92 | * the correct one based on the CPU architecture of their device.
93 | */
94 | def enableSeparateBuildPerCPUArchitecture = false
95 |
96 | /**
97 | * Run Proguard to shrink the Java bytecode in release builds.
98 | */
99 | def enableProguardInReleaseBuilds = false
100 |
101 | /**
102 | * The preferred build flavor of JavaScriptCore.
103 | *
104 | * For example, to use the international variant, you can use:
105 | * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
106 | *
107 | * The international variant includes ICU i18n library and necessary data
108 | * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
109 | * give correct results when using with locales other than en-US. Note that
110 | * this variant is about 6MiB larger per architecture than default.
111 | */
112 | def jscFlavor = 'org.webkit:android-jsc:+'
113 |
114 | /**
115 | * Whether to enable the Hermes VM.
116 | *
117 | * This should be set on project.ext.react and mirrored here. If it is not set
118 | * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
119 | * and the benefits of using Hermes will therefore be sharply reduced.
120 | */
121 | def enableHermes = project.ext.react.get("enableHermes", false);
122 |
123 | android {
124 | compileSdkVersion rootProject.ext.compileSdkVersion
125 |
126 | compileOptions {
127 | sourceCompatibility JavaVersion.VERSION_1_8
128 | targetCompatibility JavaVersion.VERSION_1_8
129 | }
130 |
131 | defaultConfig {
132 | applicationId "com.moviesdaily"
133 | minSdkVersion rootProject.ext.minSdkVersion
134 | targetSdkVersion rootProject.ext.targetSdkVersion
135 | versionCode 1
136 | versionName "1.0"
137 | }
138 | splits {
139 | abi {
140 | reset()
141 | enable enableSeparateBuildPerCPUArchitecture
142 | universalApk false // If true, also generate a universal APK
143 | include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
144 | }
145 | }
146 | signingConfigs {
147 | debug {
148 | storeFile file('debug.keystore')
149 | storePassword 'android'
150 | keyAlias 'androiddebugkey'
151 | keyPassword 'android'
152 | }
153 | }
154 | buildTypes {
155 | debug {
156 | signingConfig signingConfigs.debug
157 | }
158 | release {
159 | // Caution! In production, you need to generate your own keystore file.
160 | // see https://reactnative.dev/docs/signed-apk-android.
161 | signingConfig signingConfigs.debug
162 | minifyEnabled enableProguardInReleaseBuilds
163 | proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
164 | }
165 | }
166 |
167 | // applicationVariants are e.g. debug, release
168 | applicationVariants.all { variant ->
169 | variant.outputs.each { output ->
170 | // For each separate APK per architecture, set a unique version code as described here:
171 | // https://developer.android.com/studio/build/configure-apk-splits.html
172 | def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
173 | def abi = output.getFilter(OutputFile.ABI)
174 | if (abi != null) { // null for the universal-debug, universal-release variants
175 | output.versionCodeOverride =
176 | versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
177 | }
178 |
179 | }
180 | }
181 | }
182 |
183 | dependencies {
184 | implementation fileTree(dir: "libs", include: ["*.jar"])
185 | //noinspection GradleDynamicVersion
186 | implementation "com.facebook.react:react-native:+" // From node_modules
187 |
188 | implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
189 |
190 | debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
191 | exclude group:'com.facebook.fbjni'
192 | }
193 |
194 | debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
195 | exclude group:'com.facebook.flipper'
196 | }
197 |
198 | debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") {
199 | exclude group:'com.facebook.flipper'
200 | }
201 |
202 | if (enableHermes) {
203 | def hermesPath = "../../node_modules/hermes-engine/android/";
204 | debugImplementation files(hermesPath + "hermes-debug.aar")
205 | releaseImplementation files(hermesPath + "hermes-release.aar")
206 | } else {
207 | implementation jscFlavor
208 | }
209 | }
210 |
211 | // Run this once to be able to run the application with BUCK
212 | // puts all compile dependencies into folder libs for BUCK to use
213 | task copyDownloadableDepsToLibs(type: Copy) {
214 | from configurations.compile
215 | into 'libs'
216 | }
217 |
218 | apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
219 |
--------------------------------------------------------------------------------
/ios/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - boost-for-react-native (1.63.0)
3 | - BVLinearGradient (2.5.6):
4 | - React
5 | - CocoaAsyncSocket (7.6.4)
6 | - CocoaLibEvent (1.0.0)
7 | - DoubleConversion (1.1.6)
8 | - FBLazyVector (0.63.2)
9 | - FBReactNativeSpec (0.63.2):
10 | - Folly (= 2020.01.13.00)
11 | - RCTRequired (= 0.63.2)
12 | - RCTTypeSafety (= 0.63.2)
13 | - React-Core (= 0.63.2)
14 | - React-jsi (= 0.63.2)
15 | - ReactCommon/turbomodule/core (= 0.63.2)
16 | - Flipper (0.41.5):
17 | - Flipper-Folly (~> 2.2)
18 | - Flipper-RSocket (~> 1.1)
19 | - Flipper-DoubleConversion (1.1.7)
20 | - Flipper-Folly (2.2.0):
21 | - boost-for-react-native
22 | - CocoaLibEvent (~> 1.0)
23 | - Flipper-DoubleConversion
24 | - Flipper-Glog
25 | - OpenSSL-Universal (= 1.0.2.19)
26 | - Flipper-Glog (0.3.6)
27 | - Flipper-PeerTalk (0.0.4)
28 | - Flipper-RSocket (1.1.0):
29 | - Flipper-Folly (~> 2.2)
30 | - FlipperKit (0.41.5):
31 | - FlipperKit/Core (= 0.41.5)
32 | - FlipperKit/Core (0.41.5):
33 | - Flipper (~> 0.41.5)
34 | - FlipperKit/CppBridge
35 | - FlipperKit/FBCxxFollyDynamicConvert
36 | - FlipperKit/FBDefines
37 | - FlipperKit/FKPortForwarding
38 | - FlipperKit/CppBridge (0.41.5):
39 | - Flipper (~> 0.41.5)
40 | - FlipperKit/FBCxxFollyDynamicConvert (0.41.5):
41 | - Flipper-Folly (~> 2.2)
42 | - FlipperKit/FBDefines (0.41.5)
43 | - FlipperKit/FKPortForwarding (0.41.5):
44 | - CocoaAsyncSocket (~> 7.6)
45 | - Flipper-PeerTalk (~> 0.0.4)
46 | - FlipperKit/FlipperKitHighlightOverlay (0.41.5)
47 | - FlipperKit/FlipperKitLayoutPlugin (0.41.5):
48 | - FlipperKit/Core
49 | - FlipperKit/FlipperKitHighlightOverlay
50 | - FlipperKit/FlipperKitLayoutTextSearchable
51 | - YogaKit (~> 1.18)
52 | - FlipperKit/FlipperKitLayoutTextSearchable (0.41.5)
53 | - FlipperKit/FlipperKitNetworkPlugin (0.41.5):
54 | - FlipperKit/Core
55 | - FlipperKit/FlipperKitReactPlugin (0.41.5):
56 | - FlipperKit/Core
57 | - FlipperKit/FlipperKitUserDefaultsPlugin (0.41.5):
58 | - FlipperKit/Core
59 | - FlipperKit/SKIOSNetworkPlugin (0.41.5):
60 | - FlipperKit/Core
61 | - FlipperKit/FlipperKitNetworkPlugin
62 | - Folly (2020.01.13.00):
63 | - boost-for-react-native
64 | - DoubleConversion
65 | - Folly/Default (= 2020.01.13.00)
66 | - glog
67 | - Folly/Default (2020.01.13.00):
68 | - boost-for-react-native
69 | - DoubleConversion
70 | - glog
71 | - glog (0.3.5)
72 | - libwebp (1.1.0):
73 | - libwebp/demux (= 1.1.0)
74 | - libwebp/mux (= 1.1.0)
75 | - libwebp/webp (= 1.1.0)
76 | - libwebp/demux (1.1.0):
77 | - libwebp/webp
78 | - libwebp/mux (1.1.0):
79 | - libwebp/demux
80 | - libwebp/webp (1.1.0)
81 | - OpenSSL-Universal (1.0.2.19):
82 | - OpenSSL-Universal/Static (= 1.0.2.19)
83 | - OpenSSL-Universal/Static (1.0.2.19)
84 | - RCTRequired (0.63.2)
85 | - RCTTypeSafety (0.63.2):
86 | - FBLazyVector (= 0.63.2)
87 | - Folly (= 2020.01.13.00)
88 | - RCTRequired (= 0.63.2)
89 | - React-Core (= 0.63.2)
90 | - React (0.63.2):
91 | - React-Core (= 0.63.2)
92 | - React-Core/DevSupport (= 0.63.2)
93 | - React-Core/RCTWebSocket (= 0.63.2)
94 | - React-RCTActionSheet (= 0.63.2)
95 | - React-RCTAnimation (= 0.63.2)
96 | - React-RCTBlob (= 0.63.2)
97 | - React-RCTImage (= 0.63.2)
98 | - React-RCTLinking (= 0.63.2)
99 | - React-RCTNetwork (= 0.63.2)
100 | - React-RCTSettings (= 0.63.2)
101 | - React-RCTText (= 0.63.2)
102 | - React-RCTVibration (= 0.63.2)
103 | - React-callinvoker (0.63.2)
104 | - React-Core (0.63.2):
105 | - Folly (= 2020.01.13.00)
106 | - glog
107 | - React-Core/Default (= 0.63.2)
108 | - React-cxxreact (= 0.63.2)
109 | - React-jsi (= 0.63.2)
110 | - React-jsiexecutor (= 0.63.2)
111 | - Yoga
112 | - React-Core/CoreModulesHeaders (0.63.2):
113 | - Folly (= 2020.01.13.00)
114 | - glog
115 | - React-Core/Default
116 | - React-cxxreact (= 0.63.2)
117 | - React-jsi (= 0.63.2)
118 | - React-jsiexecutor (= 0.63.2)
119 | - Yoga
120 | - React-Core/Default (0.63.2):
121 | - Folly (= 2020.01.13.00)
122 | - glog
123 | - React-cxxreact (= 0.63.2)
124 | - React-jsi (= 0.63.2)
125 | - React-jsiexecutor (= 0.63.2)
126 | - Yoga
127 | - React-Core/DevSupport (0.63.2):
128 | - Folly (= 2020.01.13.00)
129 | - glog
130 | - React-Core/Default (= 0.63.2)
131 | - React-Core/RCTWebSocket (= 0.63.2)
132 | - React-cxxreact (= 0.63.2)
133 | - React-jsi (= 0.63.2)
134 | - React-jsiexecutor (= 0.63.2)
135 | - React-jsinspector (= 0.63.2)
136 | - Yoga
137 | - React-Core/RCTActionSheetHeaders (0.63.2):
138 | - Folly (= 2020.01.13.00)
139 | - glog
140 | - React-Core/Default
141 | - React-cxxreact (= 0.63.2)
142 | - React-jsi (= 0.63.2)
143 | - React-jsiexecutor (= 0.63.2)
144 | - Yoga
145 | - React-Core/RCTAnimationHeaders (0.63.2):
146 | - Folly (= 2020.01.13.00)
147 | - glog
148 | - React-Core/Default
149 | - React-cxxreact (= 0.63.2)
150 | - React-jsi (= 0.63.2)
151 | - React-jsiexecutor (= 0.63.2)
152 | - Yoga
153 | - React-Core/RCTBlobHeaders (0.63.2):
154 | - Folly (= 2020.01.13.00)
155 | - glog
156 | - React-Core/Default
157 | - React-cxxreact (= 0.63.2)
158 | - React-jsi (= 0.63.2)
159 | - React-jsiexecutor (= 0.63.2)
160 | - Yoga
161 | - React-Core/RCTImageHeaders (0.63.2):
162 | - Folly (= 2020.01.13.00)
163 | - glog
164 | - React-Core/Default
165 | - React-cxxreact (= 0.63.2)
166 | - React-jsi (= 0.63.2)
167 | - React-jsiexecutor (= 0.63.2)
168 | - Yoga
169 | - React-Core/RCTLinkingHeaders (0.63.2):
170 | - Folly (= 2020.01.13.00)
171 | - glog
172 | - React-Core/Default
173 | - React-cxxreact (= 0.63.2)
174 | - React-jsi (= 0.63.2)
175 | - React-jsiexecutor (= 0.63.2)
176 | - Yoga
177 | - React-Core/RCTNetworkHeaders (0.63.2):
178 | - Folly (= 2020.01.13.00)
179 | - glog
180 | - React-Core/Default
181 | - React-cxxreact (= 0.63.2)
182 | - React-jsi (= 0.63.2)
183 | - React-jsiexecutor (= 0.63.2)
184 | - Yoga
185 | - React-Core/RCTSettingsHeaders (0.63.2):
186 | - Folly (= 2020.01.13.00)
187 | - glog
188 | - React-Core/Default
189 | - React-cxxreact (= 0.63.2)
190 | - React-jsi (= 0.63.2)
191 | - React-jsiexecutor (= 0.63.2)
192 | - Yoga
193 | - React-Core/RCTTextHeaders (0.63.2):
194 | - Folly (= 2020.01.13.00)
195 | - glog
196 | - React-Core/Default
197 | - React-cxxreact (= 0.63.2)
198 | - React-jsi (= 0.63.2)
199 | - React-jsiexecutor (= 0.63.2)
200 | - Yoga
201 | - React-Core/RCTVibrationHeaders (0.63.2):
202 | - Folly (= 2020.01.13.00)
203 | - glog
204 | - React-Core/Default
205 | - React-cxxreact (= 0.63.2)
206 | - React-jsi (= 0.63.2)
207 | - React-jsiexecutor (= 0.63.2)
208 | - Yoga
209 | - React-Core/RCTWebSocket (0.63.2):
210 | - Folly (= 2020.01.13.00)
211 | - glog
212 | - React-Core/Default (= 0.63.2)
213 | - React-cxxreact (= 0.63.2)
214 | - React-jsi (= 0.63.2)
215 | - React-jsiexecutor (= 0.63.2)
216 | - Yoga
217 | - React-CoreModules (0.63.2):
218 | - FBReactNativeSpec (= 0.63.2)
219 | - Folly (= 2020.01.13.00)
220 | - RCTTypeSafety (= 0.63.2)
221 | - React-Core/CoreModulesHeaders (= 0.63.2)
222 | - React-jsi (= 0.63.2)
223 | - React-RCTImage (= 0.63.2)
224 | - ReactCommon/turbomodule/core (= 0.63.2)
225 | - React-cxxreact (0.63.2):
226 | - boost-for-react-native (= 1.63.0)
227 | - DoubleConversion
228 | - Folly (= 2020.01.13.00)
229 | - glog
230 | - React-callinvoker (= 0.63.2)
231 | - React-jsinspector (= 0.63.2)
232 | - React-jsi (0.63.2):
233 | - boost-for-react-native (= 1.63.0)
234 | - DoubleConversion
235 | - Folly (= 2020.01.13.00)
236 | - glog
237 | - React-jsi/Default (= 0.63.2)
238 | - React-jsi/Default (0.63.2):
239 | - boost-for-react-native (= 1.63.0)
240 | - DoubleConversion
241 | - Folly (= 2020.01.13.00)
242 | - glog
243 | - React-jsiexecutor (0.63.2):
244 | - DoubleConversion
245 | - Folly (= 2020.01.13.00)
246 | - glog
247 | - React-cxxreact (= 0.63.2)
248 | - React-jsi (= 0.63.2)
249 | - React-jsinspector (0.63.2)
250 | - react-native-blur (0.8.0):
251 | - React
252 | - react-native-netinfo (5.9.5):
253 | - React
254 | - react-native-safe-area-context (3.1.1):
255 | - React
256 | - react-native-splash-screen (3.2.0):
257 | - React
258 | - react-native-webview (10.3.2):
259 | - React
260 | - React-RCTActionSheet (0.63.2):
261 | - React-Core/RCTActionSheetHeaders (= 0.63.2)
262 | - React-RCTAnimation (0.63.2):
263 | - FBReactNativeSpec (= 0.63.2)
264 | - Folly (= 2020.01.13.00)
265 | - RCTTypeSafety (= 0.63.2)
266 | - React-Core/RCTAnimationHeaders (= 0.63.2)
267 | - React-jsi (= 0.63.2)
268 | - ReactCommon/turbomodule/core (= 0.63.2)
269 | - React-RCTBlob (0.63.2):
270 | - FBReactNativeSpec (= 0.63.2)
271 | - Folly (= 2020.01.13.00)
272 | - React-Core/RCTBlobHeaders (= 0.63.2)
273 | - React-Core/RCTWebSocket (= 0.63.2)
274 | - React-jsi (= 0.63.2)
275 | - React-RCTNetwork (= 0.63.2)
276 | - ReactCommon/turbomodule/core (= 0.63.2)
277 | - React-RCTImage (0.63.2):
278 | - FBReactNativeSpec (= 0.63.2)
279 | - Folly (= 2020.01.13.00)
280 | - RCTTypeSafety (= 0.63.2)
281 | - React-Core/RCTImageHeaders (= 0.63.2)
282 | - React-jsi (= 0.63.2)
283 | - React-RCTNetwork (= 0.63.2)
284 | - ReactCommon/turbomodule/core (= 0.63.2)
285 | - React-RCTLinking (0.63.2):
286 | - FBReactNativeSpec (= 0.63.2)
287 | - React-Core/RCTLinkingHeaders (= 0.63.2)
288 | - React-jsi (= 0.63.2)
289 | - ReactCommon/turbomodule/core (= 0.63.2)
290 | - React-RCTNetwork (0.63.2):
291 | - FBReactNativeSpec (= 0.63.2)
292 | - Folly (= 2020.01.13.00)
293 | - RCTTypeSafety (= 0.63.2)
294 | - React-Core/RCTNetworkHeaders (= 0.63.2)
295 | - React-jsi (= 0.63.2)
296 | - ReactCommon/turbomodule/core (= 0.63.2)
297 | - React-RCTSettings (0.63.2):
298 | - FBReactNativeSpec (= 0.63.2)
299 | - Folly (= 2020.01.13.00)
300 | - RCTTypeSafety (= 0.63.2)
301 | - React-Core/RCTSettingsHeaders (= 0.63.2)
302 | - React-jsi (= 0.63.2)
303 | - ReactCommon/turbomodule/core (= 0.63.2)
304 | - React-RCTText (0.63.2):
305 | - React-Core/RCTTextHeaders (= 0.63.2)
306 | - React-RCTVibration (0.63.2):
307 | - FBReactNativeSpec (= 0.63.2)
308 | - Folly (= 2020.01.13.00)
309 | - React-Core/RCTVibrationHeaders (= 0.63.2)
310 | - React-jsi (= 0.63.2)
311 | - ReactCommon/turbomodule/core (= 0.63.2)
312 | - ReactCommon/turbomodule/core (0.63.2):
313 | - DoubleConversion
314 | - Folly (= 2020.01.13.00)
315 | - glog
316 | - React-callinvoker (= 0.63.2)
317 | - React-Core (= 0.63.2)
318 | - React-cxxreact (= 0.63.2)
319 | - React-jsi (= 0.63.2)
320 | - RNCMaskedView (0.1.10):
321 | - React
322 | - RNFastImage (8.3.2):
323 | - React
324 | - SDWebImage (~> 5.8)
325 | - SDWebImageWebPCoder (~> 0.6.1)
326 | - RNGestureHandler (1.7.0):
327 | - React
328 | - RNReanimated (1.10.1):
329 | - React
330 | - RNScreens (2.9.0):
331 | - React
332 | - RNVectorIcons (7.0.0):
333 | - React
334 | - SDWebImage (5.8.4):
335 | - SDWebImage/Core (= 5.8.4)
336 | - SDWebImage/Core (5.8.4)
337 | - SDWebImageWebPCoder (0.6.1):
338 | - libwebp (~> 1.0)
339 | - SDWebImage/Core (~> 5.7)
340 | - Yoga (1.14.0)
341 | - YogaKit (1.18.1):
342 | - Yoga (~> 1.14)
343 |
344 | DEPENDENCIES:
345 | - BVLinearGradient (from `../node_modules/react-native-linear-gradient`)
346 | - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
347 | - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
348 | - FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`)
349 | - Flipper (~> 0.41.1)
350 | - Flipper-DoubleConversion (= 1.1.7)
351 | - Flipper-Folly (~> 2.2)
352 | - Flipper-Glog (= 0.3.6)
353 | - Flipper-PeerTalk (~> 0.0.4)
354 | - Flipper-RSocket (~> 1.1)
355 | - FlipperKit (~> 0.41.1)
356 | - FlipperKit/Core (~> 0.41.1)
357 | - FlipperKit/CppBridge (~> 0.41.1)
358 | - FlipperKit/FBCxxFollyDynamicConvert (~> 0.41.1)
359 | - FlipperKit/FBDefines (~> 0.41.1)
360 | - FlipperKit/FKPortForwarding (~> 0.41.1)
361 | - FlipperKit/FlipperKitHighlightOverlay (~> 0.41.1)
362 | - FlipperKit/FlipperKitLayoutPlugin (~> 0.41.1)
363 | - FlipperKit/FlipperKitLayoutTextSearchable (~> 0.41.1)
364 | - FlipperKit/FlipperKitNetworkPlugin (~> 0.41.1)
365 | - FlipperKit/FlipperKitReactPlugin (~> 0.41.1)
366 | - FlipperKit/FlipperKitUserDefaultsPlugin (~> 0.41.1)
367 | - FlipperKit/SKIOSNetworkPlugin (~> 0.41.1)
368 | - Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`)
369 | - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
370 | - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
371 | - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
372 | - React (from `../node_modules/react-native/`)
373 | - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
374 | - React-Core (from `../node_modules/react-native/`)
375 | - React-Core/DevSupport (from `../node_modules/react-native/`)
376 | - React-Core/RCTWebSocket (from `../node_modules/react-native/`)
377 | - React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
378 | - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
379 | - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
380 | - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
381 | - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
382 | - "react-native-blur (from `../node_modules/@react-native-community/blur`)"
383 | - "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)"
384 | - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
385 | - react-native-splash-screen (from `../node_modules/react-native-splash-screen`)
386 | - react-native-webview (from `../node_modules/react-native-webview`)
387 | - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
388 | - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
389 | - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
390 | - React-RCTImage (from `../node_modules/react-native/Libraries/Image`)
391 | - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`)
392 | - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`)
393 | - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
394 | - React-RCTText (from `../node_modules/react-native/Libraries/Text`)
395 | - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
396 | - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
397 | - "RNCMaskedView (from `../node_modules/@react-native-community/masked-view`)"
398 | - RNFastImage (from `../node_modules/react-native-fast-image`)
399 | - RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
400 | - RNReanimated (from `../node_modules/react-native-reanimated`)
401 | - RNScreens (from `../node_modules/react-native-screens`)
402 | - RNVectorIcons (from `../node_modules/react-native-vector-icons`)
403 | - Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
404 |
405 | SPEC REPOS:
406 | trunk:
407 | - boost-for-react-native
408 | - CocoaAsyncSocket
409 | - CocoaLibEvent
410 | - Flipper
411 | - Flipper-DoubleConversion
412 | - Flipper-Folly
413 | - Flipper-Glog
414 | - Flipper-PeerTalk
415 | - Flipper-RSocket
416 | - FlipperKit
417 | - libwebp
418 | - OpenSSL-Universal
419 | - SDWebImage
420 | - SDWebImageWebPCoder
421 | - YogaKit
422 |
423 | EXTERNAL SOURCES:
424 | BVLinearGradient:
425 | :path: "../node_modules/react-native-linear-gradient"
426 | DoubleConversion:
427 | :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
428 | FBLazyVector:
429 | :path: "../node_modules/react-native/Libraries/FBLazyVector"
430 | FBReactNativeSpec:
431 | :path: "../node_modules/react-native/Libraries/FBReactNativeSpec"
432 | Folly:
433 | :podspec: "../node_modules/react-native/third-party-podspecs/Folly.podspec"
434 | glog:
435 | :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
436 | RCTRequired:
437 | :path: "../node_modules/react-native/Libraries/RCTRequired"
438 | RCTTypeSafety:
439 | :path: "../node_modules/react-native/Libraries/TypeSafety"
440 | React:
441 | :path: "../node_modules/react-native/"
442 | React-callinvoker:
443 | :path: "../node_modules/react-native/ReactCommon/callinvoker"
444 | React-Core:
445 | :path: "../node_modules/react-native/"
446 | React-CoreModules:
447 | :path: "../node_modules/react-native/React/CoreModules"
448 | React-cxxreact:
449 | :path: "../node_modules/react-native/ReactCommon/cxxreact"
450 | React-jsi:
451 | :path: "../node_modules/react-native/ReactCommon/jsi"
452 | React-jsiexecutor:
453 | :path: "../node_modules/react-native/ReactCommon/jsiexecutor"
454 | React-jsinspector:
455 | :path: "../node_modules/react-native/ReactCommon/jsinspector"
456 | react-native-blur:
457 | :path: "../node_modules/@react-native-community/blur"
458 | react-native-netinfo:
459 | :path: "../node_modules/@react-native-community/netinfo"
460 | react-native-safe-area-context:
461 | :path: "../node_modules/react-native-safe-area-context"
462 | react-native-splash-screen:
463 | :path: "../node_modules/react-native-splash-screen"
464 | react-native-webview:
465 | :path: "../node_modules/react-native-webview"
466 | React-RCTActionSheet:
467 | :path: "../node_modules/react-native/Libraries/ActionSheetIOS"
468 | React-RCTAnimation:
469 | :path: "../node_modules/react-native/Libraries/NativeAnimation"
470 | React-RCTBlob:
471 | :path: "../node_modules/react-native/Libraries/Blob"
472 | React-RCTImage:
473 | :path: "../node_modules/react-native/Libraries/Image"
474 | React-RCTLinking:
475 | :path: "../node_modules/react-native/Libraries/LinkingIOS"
476 | React-RCTNetwork:
477 | :path: "../node_modules/react-native/Libraries/Network"
478 | React-RCTSettings:
479 | :path: "../node_modules/react-native/Libraries/Settings"
480 | React-RCTText:
481 | :path: "../node_modules/react-native/Libraries/Text"
482 | React-RCTVibration:
483 | :path: "../node_modules/react-native/Libraries/Vibration"
484 | ReactCommon:
485 | :path: "../node_modules/react-native/ReactCommon"
486 | RNCMaskedView:
487 | :path: "../node_modules/@react-native-community/masked-view"
488 | RNFastImage:
489 | :path: "../node_modules/react-native-fast-image"
490 | RNGestureHandler:
491 | :path: "../node_modules/react-native-gesture-handler"
492 | RNReanimated:
493 | :path: "../node_modules/react-native-reanimated"
494 | RNScreens:
495 | :path: "../node_modules/react-native-screens"
496 | RNVectorIcons:
497 | :path: "../node_modules/react-native-vector-icons"
498 | Yoga:
499 | :path: "../node_modules/react-native/ReactCommon/yoga"
500 |
501 | SPEC CHECKSUMS:
502 | boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
503 | BVLinearGradient: e3aad03778a456d77928f594a649e96995f1c872
504 | CocoaAsyncSocket: 694058e7c0ed05a9e217d1b3c7ded962f4180845
505 | CocoaLibEvent: 2fab71b8bd46dd33ddb959f7928ec5909f838e3f
506 | DoubleConversion: cde416483dac037923206447da6e1454df403714
507 | FBLazyVector: 3ef4a7f62e7db01092f9d517d2ebc0d0677c4a37
508 | FBReactNativeSpec: dc7fa9088f0f2a998503a352b0554d69a4391c5a
509 | Flipper: 33585e2d9810fe5528346be33bcf71b37bb7ae13
510 | Flipper-DoubleConversion: 38631e41ef4f9b12861c67d17cb5518d06badc41
511 | Flipper-Folly: c12092ea368353b58e992843a990a3225d4533c3
512 | Flipper-Glog: 1dfd6abf1e922806c52ceb8701a3599a79a200a6
513 | Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9
514 | Flipper-RSocket: 64e7431a55835eb953b0bf984ef3b90ae9fdddd7
515 | FlipperKit: bc68102cd4952a258a23c9c1b316c7bec1fecf83
516 | Folly: b73c3869541e86821df3c387eb0af5f65addfab4
517 | glog: 40a13f7840415b9a77023fbcae0f1e6f43192af3
518 | libwebp: 946cb3063cea9236285f7e9a8505d806d30e07f3
519 | OpenSSL-Universal: 8b48cc0d10c1b2923617dfe5c178aa9ed2689355
520 | RCTRequired: f13f25e7b12f925f1f6a6a8c69d929a03c0129fe
521 | RCTTypeSafety: 44982c5c8e43ff4141eb519a8ddc88059acd1f3a
522 | React: e1c65dd41cb9db13b99f24608e47dd595f28ca9a
523 | React-callinvoker: 552a6a6bc8b3bb794cf108ad59e5a9e2e3b4fc98
524 | React-Core: 9d341e725dc9cd2f49e4c49ad1fc4e8776aa2639
525 | React-CoreModules: 5335e168165da7f7083ce7147768d36d3e292318
526 | React-cxxreact: d3261ec5f7d11743fbf21e263a34ea51d1f13ebc
527 | React-jsi: 54245e1d5f4b690dec614a73a3795964eeef13a8
528 | React-jsiexecutor: 8ca588cc921e70590820ce72b8789b02c67cce38
529 | React-jsinspector: b14e62ebe7a66e9231e9581279909f2fc3db6606
530 | react-native-blur: cad4d93b364f91e7b7931b3fa935455487e5c33c
531 | react-native-netinfo: 7f3f3ed9e8f0e7ab3e7cac00cbfdc6997e25ecaf
532 | react-native-safe-area-context: 4c3249e4840225c61fcd215b136af0a737bccb79
533 | react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865
534 | react-native-webview: e2c0bce9a1a7c7edd4eb30f0c3016fce216245ce
535 | React-RCTActionSheet: 910163b6b09685a35c4ebbc52b66d1bfbbe39fc5
536 | React-RCTAnimation: 9a883bbe1e9d2e158d4fb53765ed64c8dc2200c6
537 | React-RCTBlob: 39cf0ece1927996c4466510e25d2105f67010e13
538 | React-RCTImage: de355d738727b09ad3692f2a979affbd54b5f378
539 | React-RCTLinking: 8122f221d395a63364b2c0078ce284214bd04575
540 | React-RCTNetwork: 8f96c7b49ea6a0f28f98258f347b6ad218bc0830
541 | React-RCTSettings: 8a49622aff9c1925f5455fa340b6fe4853d64ab6
542 | React-RCTText: 1b6773e776e4b33f90468c20fe3b16ca3e224bb8
543 | React-RCTVibration: 4d2e726957f4087449739b595f107c0d4b6c2d2d
544 | ReactCommon: a0a1edbebcac5e91338371b72ffc66aa822792ce
545 | RNCMaskedView: f5c7d14d6847b7b44853f7acb6284c1da30a3459
546 | RNFastImage: e19ba191922e7dab9d932a4d59d62d76660aa222
547 | RNGestureHandler: b6b359bb800ae399a9c8b27032bdbf7c18f08a08
548 | RNReanimated: c2bb7438b57a3d987bb2e4e6e4bca94787e30b02
549 | RNScreens: c526239bbe0e957b988dacc8d75ac94ec9cb19da
550 | RNVectorIcons: da6fe858f5a65d7bbc3379540a889b0b12aa5976
551 | SDWebImage: cf6922231e95550934da2ada0f20f2becf2ceba9
552 | SDWebImageWebPCoder: d0dac55073088d24b2ac1b191a71a8f8d0adac21
553 | Yoga: 7740b94929bbacbddda59bf115b5317e9a161598
554 | YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
555 |
556 | PODFILE CHECKSUM: 18dc6d9ea80755fcb8805245cce7dacac564763f
557 |
558 | COCOAPODS: 1.9.3
559 |
--------------------------------------------------------------------------------