From 499e34a83ae3933a8ea0a5fc2f6c3e89295d751c Mon Sep 17 00:00:00 2001 From: Vincent den Boer Date: Fri, 7 Jun 2019 12:21:25 +0200 Subject: [PATCH 1/6] Start of navigation integration --- app/android/app/build.gradle | 1 + .../src/main/java/com/app/MainActivity.java | 13 ++ .../main/java/com/app/MainApplication.java | 4 +- app/android/settings.gradle | 2 + app/ios/app.xcodeproj/project.pbxproj | 28 ++++ app/package.json | 2 + .../example/ui/screens/home-screen/index.tsx | 6 +- .../example/ui/screens/other-screen/index.tsx | 22 +++ .../ui/screens/other-screen/logic.test.ts | 0 .../example/ui/screens/other-screen/logic.ts | 22 +++ .../example/ui/screens/other-screen/styles.ts | 20 +++ app/src/services/index.ts | 4 +- app/src/services/navigation/react-native.ts | 24 ++++ app/src/services/navigation/types.ts | 3 + app/src/services/types.ts | 2 + app/src/ui/index.tsx | 15 +- app/src/ui/navigator.ts | 17 +++ app/tsconfig.json | 2 +- app/yarn.lock | 134 +++++++++++++++++- 19 files changed, 313 insertions(+), 8 deletions(-) create mode 100644 app/src/features/example/ui/screens/other-screen/index.tsx create mode 100644 app/src/features/example/ui/screens/other-screen/logic.test.ts create mode 100644 app/src/features/example/ui/screens/other-screen/logic.ts create mode 100644 app/src/features/example/ui/screens/other-screen/styles.ts create mode 100644 app/src/services/navigation/react-native.ts create mode 100644 app/src/services/navigation/types.ts create mode 100644 app/src/ui/navigator.ts diff --git a/app/android/app/build.gradle b/app/android/app/build.gradle index f9d387f91..77ab1f564 100644 --- a/app/android/app/build.gradle +++ b/app/android/app/build.gradle @@ -138,6 +138,7 @@ android { } dependencies { + implementation project(':react-native-gesture-handler') implementation fileTree(dir: "libs", include: ["*.jar"]) implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}" implementation "com.facebook.react:react-native:+" // From node_modules diff --git a/app/android/app/src/main/java/com/app/MainActivity.java b/app/android/app/src/main/java/com/app/MainActivity.java index 0f886891e..3e5613c50 100644 --- a/app/android/app/src/main/java/com/app/MainActivity.java +++ b/app/android/app/src/main/java/com/app/MainActivity.java @@ -1,6 +1,9 @@ package com.app; import com.facebook.react.ReactActivity; +import com.facebook.react.ReactActivityDelegate; +import com.facebook.react.ReactRootView; +import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView; public class MainActivity extends ReactActivity { @@ -12,4 +15,14 @@ public class MainActivity extends ReactActivity { protected String getMainComponentName() { return "app"; } + + @Override + protected ReactActivityDelegate createReactActivityDelegate() { + return new ReactActivityDelegate(this, getMainComponentName()) { + @Override + protected ReactRootView createRootView() { + return new RNGestureHandlerEnabledRootView(MainActivity.this); + } + }; + } } diff --git a/app/android/app/src/main/java/com/app/MainApplication.java b/app/android/app/src/main/java/com/app/MainApplication.java index b30b4eff3..a84b85f6d 100644 --- a/app/android/app/src/main/java/com/app/MainApplication.java +++ b/app/android/app/src/main/java/com/app/MainApplication.java @@ -3,6 +3,7 @@ import android.app.Application; import com.facebook.react.ReactApplication; +import com.swmansion.gesturehandler.react.RNGestureHandlerPackage; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; import com.facebook.react.shell.MainReactPackage; @@ -25,7 +26,8 @@ public boolean getUseDeveloperSupport() { protected List getPackages() { return Arrays.asList( new SQLitePluginPackage(), // register SQLite Plugin here - new MainReactPackage() + new MainReactPackage(), + new RNGestureHandlerPackage() ); } diff --git a/app/android/settings.gradle b/app/android/settings.gradle index 7ab18bf24..8bc59e3e3 100644 --- a/app/android/settings.gradle +++ b/app/android/settings.gradle @@ -1,4 +1,6 @@ rootProject.name = 'app' +include ':react-native-gesture-handler' +project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android') include ':app' diff --git a/app/ios/app.xcodeproj/project.pbxproj b/app/ios/app.xcodeproj/project.pbxproj index bdb153313..f38cefe53 100644 --- a/app/ios/app.xcodeproj/project.pbxproj +++ b/app/ios/app.xcodeproj/project.pbxproj @@ -40,6 +40,8 @@ ED297163215061F000B7C4FE /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED297162215061F000B7C4FE /* JavaScriptCore.framework */; }; ED2971652150620600B7C4FE /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED2971642150620600B7C4FE /* JavaScriptCore.framework */; }; 999492CD9D124478849E5D8D /* libSQLite.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78A893EFA88441FF9E6C3C8B /* libSQLite.a */; }; + 0393502E386B47F0BE5B5B6A /* libRNGestureHandler.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B71D08F94C3A47F88AC38E2F /* libRNGestureHandler.a */; }; + DF41734314674576882027C9 /* libRNGestureHandler-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C4037B6869D945759F8293FD /* libRNGestureHandler-tvOS.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -349,6 +351,9 @@ ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; C84920786E2F47CCAA6497C4 /* SQLite.xcodeproj */ = {isa = PBXFileReference; name = "SQLite.xcodeproj"; path = "../node_modules/react-native-sqlite-storage/src/ios/SQLite.xcodeproj"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; }; 78A893EFA88441FF9E6C3C8B /* libSQLite.a */ = {isa = PBXFileReference; name = "libSQLite.a"; path = "libSQLite.a"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; + 75ADCF7C797A43A0B971753F /* RNGestureHandler.xcodeproj */ = {isa = PBXFileReference; name = "RNGestureHandler.xcodeproj"; path = "../node_modules/react-native-gesture-handler/ios/RNGestureHandler.xcodeproj"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; }; + B71D08F94C3A47F88AC38E2F /* libRNGestureHandler.a */ = {isa = PBXFileReference; name = "libRNGestureHandler.a"; path = "libRNGestureHandler.a"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; + C4037B6869D945759F8293FD /* libRNGestureHandler-tvOS.a */ = {isa = PBXFileReference; name = "libRNGestureHandler-tvOS.a"; path = "libRNGestureHandler-tvOS.a"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -378,6 +383,7 @@ 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */, 999492CD9D124478849E5D8D /* libSQLite.a in Frameworks */, + 0393502E386B47F0BE5B5B6A /* libRNGestureHandler.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -394,6 +400,7 @@ 2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */, 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */, 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */, + DF41734314674576882027C9 /* libRNGestureHandler-tvOS.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -568,6 +575,7 @@ 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, C84920786E2F47CCAA6497C4 /* SQLite.xcodeproj */, + 75ADCF7C797A43A0B971753F /* RNGestureHandler.xcodeproj */, ); name = Libraries; sourceTree = ""; @@ -1196,10 +1204,13 @@ LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", ); HEADER_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../node_modules/react-native-sqlite-storage/src/ios", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", ); }; name = Debug; @@ -1222,10 +1233,13 @@ LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", ); HEADER_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../node_modules/react-native-sqlite-storage/src/ios", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", ); }; name = Release; @@ -1249,6 +1263,7 @@ HEADER_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../node_modules/react-native-sqlite-storage/src/ios", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", ); }; name = Debug; @@ -1271,6 +1286,7 @@ HEADER_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../node_modules/react-native-sqlite-storage/src/ios", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", ); }; name = Release; @@ -1301,10 +1317,13 @@ LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", ); HEADER_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../node_modules/react-native-sqlite-storage/src/ios", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", ); }; name = Debug; @@ -1335,10 +1354,13 @@ LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", ); HEADER_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../node_modules/react-native-sqlite-storage/src/ios", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", ); }; name = Release; @@ -1368,10 +1390,13 @@ LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", ); HEADER_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../node_modules/react-native-sqlite-storage/src/ios", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", ); }; name = Debug; @@ -1401,10 +1426,13 @@ LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", ); HEADER_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../node_modules/react-native-sqlite-storage/src/ios", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", ); }; name = Release; diff --git a/app/package.json b/app/package.json index 540a4e2a7..92fdf5a41 100644 --- a/app/package.json +++ b/app/package.json @@ -15,8 +15,10 @@ "randombytes": "^2.1.0", "react": "16.8.3", "react-native": "0.59.8", + "react-native-gesture-handler": "^1.3.0", "react-native-knex": "^0.14.5", "react-native-sqlite-storage": "^3.3.10", + "react-navigation": "^3.11.0", "sqlite3": "^4.0.8", "typeorm": "^0.2.17", "ui-logic-core": "^0.1.1", diff --git a/app/src/features/example/ui/screens/home-screen/index.tsx b/app/src/features/example/ui/screens/home-screen/index.tsx index b340059e4..281d86294 100644 --- a/app/src/features/example/ui/screens/home-screen/index.tsx +++ b/app/src/features/example/ui/screens/home-screen/index.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { Text, View } from 'react-native'; +import { Text, View, Button } from 'react-native'; import { StatefulUIElement } from 'src/ui/types' import Logic, { State, Event } from './logic'; import styles from './styles' @@ -17,6 +17,10 @@ export default class HomeScreen extends StatefulUIElement { Welcome to React Native! To bla, just bla the bla + {/*