From 5d8aeb1f8cc13cdfbb1bf75ea12866548f872edd Mon Sep 17 00:00:00 2001 From: Sokovikov Date: Sun, 9 Oct 2016 21:22:44 +0400 Subject: [PATCH 01/34] use ScrollView instead of ViewPager --- index.js | 84 ++++++++++++++++++-------------------------------------- 1 file changed, 26 insertions(+), 58 deletions(-) diff --git a/index.js b/index.js index 165937e9..c3afc6fb 100644 --- a/index.js +++ b/index.js @@ -9,9 +9,7 @@ const { View, Animated, ScrollView, - Platform, StyleSheet, - ViewPagerAndroid, InteractionManager, } = ReactNative; const TimerMixin = require('react-timer-mixin'); @@ -76,19 +74,9 @@ const ScrollableTabView = React.createClass({ }, goToPage(pageNumber) { - if (Platform.OS === 'ios') { - const offset = pageNumber * this.state.containerWidth; - if (this.scrollView) { - this.scrollView.scrollTo({x: offset, y: 0, animated: !this.props.scrollWithoutAnimation, }); - } - } else { - if (this.scrollView) { - if (this.props.scrollWithoutAnimation) { - this.scrollView.setPageWithoutAnimation(pageNumber); - } else { - this.scrollView.setPage(pageNumber); - } - } + const offset = pageNumber * this.state.containerWidth; + if (this.scrollView) { + this.scrollView.scrollTo({x: offset, y: 0, animated: !this.props.scrollWithoutAnimation, }); } const currentPage = this.state.currentPage; @@ -140,50 +128,30 @@ const ScrollableTabView = React.createClass({ }, renderScrollableContent() { - if (Platform.OS === 'ios') { - const scenes = this._composeScenes(); - return { this.scrollView = scrollView; }} - onScroll={(e) => { - const offsetX = e.nativeEvent.contentOffset.x; - this._updateScrollValue(offsetX / this.state.containerWidth); - }} - onMomentumScrollBegin={this._onMomentumScrollBeginAndEnd} - onMomentumScrollEnd={this._onMomentumScrollBeginAndEnd} - scrollEventThrottle={16} - scrollsToTop={false} - showsHorizontalScrollIndicator={false} - scrollEnabled={!this.props.locked} - directionalLockEnabled - alwaysBounceVertical={false} - keyboardDismissMode="on-drag" - {...this.props.contentProps} + const scenes = this._composeScenes(); + return { this.scrollView = scrollView; }} + onScroll={(e) => { + const offsetX = e.nativeEvent.contentOffset.x; + this._updateScrollValue(offsetX / this.state.containerWidth); + }} + onMomentumScrollBegin={this._onMomentumScrollBeginAndEnd} + onMomentumScrollEnd={this._onMomentumScrollBeginAndEnd} + scrollEventThrottle={16} + scrollsToTop={false} + showsHorizontalScrollIndicator={false} + scrollEnabled={!this.props.locked} + directionalLockEnabled + alwaysBounceVertical={false} + keyboardDismissMode="on-drag" + {...this.props.contentProps} > - {scenes} - ; - } else { - const scenes = this._composeScenes(); - return { - const { offset, position, } = e.nativeEvent; - this._updateScrollValue(position + offset); - }} - ref={(scrollView) => { this.scrollView = scrollView; }} - {...this.props.contentProps} - > - {scenes} - ; - } + {scenes} + ; }, _composeScenes() { From 3f0c01579e998c754f3b0165be2f1470dc96a61b Mon Sep 17 00:00:00 2001 From: Evgeniy Sokovikov Date: Sun, 9 Oct 2016 21:33:51 +0400 Subject: [PATCH 02/34] Create CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1 @@ + From 3fd6828809621c5dc0b5bcd4fbc23d4d23848526 Mon Sep 17 00:00:00 2001 From: Evgeniy Sokovikov Date: Fri, 21 Oct 2016 12:03:26 +0400 Subject: [PATCH 03/34] Create LICENSE.md --- LICENSE.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE.md diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 00000000..a1ad9ca8 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 Evgeniy Sokovikov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From aa39788cf38de60e7359c879f70d43fda49b9cd4 Mon Sep 17 00:00:00 2001 From: alexstroukov Date: Wed, 9 Nov 2016 14:35:39 +0000 Subject: [PATCH 04/34] fix(ScrollableTabBar): ScrollView automaticallyAdjustContentInsets={false} This fixes vertical scrolling of the ScrollableTabBar row behind the View container when its not placed at the top of the page but inside a navigator for instance on ios ScrollView made assumptions about where it was placed and tried to to adjust its container. setting automaticallyAdjustContentInsets={false} gives the styling power back to the container --- ScrollableTabBar.js | 1 + 1 file changed, 1 insertion(+) diff --git a/ScrollableTabBar.js b/ScrollableTabBar.js index e9d41bee..22013a0c 100644 --- a/ScrollableTabBar.js +++ b/ScrollableTabBar.js @@ -166,6 +166,7 @@ const ScrollableTabBar = React.createClass({ onLayout={this.onContainerLayout} > { this._scrollView = scrollView; }} horizontal={true} showsHorizontalScrollIndicator={false} From 0ec815f88a1b082fddacef12b3f09012e2021cd5 Mon Sep 17 00:00:00 2001 From: Felix Bernhardt Date: Sat, 26 Nov 2016 12:08:53 +0100 Subject: [PATCH 05/34] fix progress-computation in FacebookTabBar The progress should be computed by using the absolute distance between each tab and the current animation-position. This enables smooth transitions from both sides rather than only during back-transitions. --- examples/FacebookTabsExample/FacebookTabBar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/FacebookTabsExample/FacebookTabBar.js b/examples/FacebookTabsExample/FacebookTabBar.js index 0a36c75f..cddf0007 100644 --- a/examples/FacebookTabsExample/FacebookTabBar.js +++ b/examples/FacebookTabsExample/FacebookTabBar.js @@ -22,7 +22,7 @@ const FacebookTabBar = React.createClass({ setAnimationValue({ value, }) { this.tabIcons.forEach((icon, i) => { - const progress = (value - i >= 0 && value - i <= 1) ? value - i : 1; + const progress = Math.min(1, Math.abs(value - i)) icon.setNativeProps({ style: { color: this.iconColor(progress), From a2c8578db52e4577cb5453fd0a80995e72ac1c69 Mon Sep 17 00:00:00 2001 From: Sokovikov Date: Sat, 26 Nov 2016 22:50:30 +0400 Subject: [PATCH 06/34] 0.7.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3671b07d..e80446fc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-scrollable-tab-view", - "version": "0.6.0", + "version": "0.7.0", "description": "", "main": "index.js", "scripts": { From 7f902b017ec9cab8f4c7ca45f0d70b7b1ae1d60a Mon Sep 17 00:00:00 2001 From: Eugene Sokovikov Date: Sat, 26 Nov 2016 22:56:52 +0400 Subject: [PATCH 07/34] Update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b137891..20068996 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1 +1,3 @@ +## 0.7.0 +* ```ViewPager``` was replaced by ```ScrollView``` for android. From 9cb9c8ef2214df432e0d87f377250c40a6be88a5 Mon Sep 17 00:00:00 2001 From: Sokovikov Date: Sat, 26 Nov 2016 23:56:18 +0400 Subject: [PATCH 08/34] update example to rm 38 --- examples/FacebookTabsExample/.flowconfig | 7 +- examples/FacebookTabsExample/.gitignore | 2 +- .../android/app/build.gradle | 4 +- .../facebooktabsexample/MainApplication.java | 9 ++- .../project.pbxproj | 78 +++++++++---------- .../ios/FacebookTabsExample/Info.plist | 2 +- examples/FacebookTabsExample/package.json | 2 +- 7 files changed, 56 insertions(+), 48 deletions(-) diff --git a/examples/FacebookTabsExample/.flowconfig b/examples/FacebookTabsExample/.flowconfig index f565799e..5c5a16d1 100644 --- a/examples/FacebookTabsExample/.flowconfig +++ b/examples/FacebookTabsExample/.flowconfig @@ -17,6 +17,7 @@ # Ignore unexpected extra @providesModule .*/node_modules/commoner/test/source/widget/share.js +.*/node_modules/.*/node_modules/fbjs/.* # Ignore duplicate module providers # For RN Apps installed via npm, "Libraries" folder is inside node_modules/react-native but in the source repo it is in the root @@ -48,11 +49,11 @@ suppress_type=$FlowIssue suppress_type=$FlowFixMe suppress_type=$FixMe -suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(3[0-2]\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) -suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(3[0-2]\\|1[0-9]\\|[1-2][0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ +suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(3[0-3]\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) +suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(3[0-3]\\|1[0-9]\\|[1-2][0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy unsafe.enable_getters_and_setters=true [version] -^0.32.0 +^0.33.0 diff --git a/examples/FacebookTabsExample/.gitignore b/examples/FacebookTabsExample/.gitignore index eb1535e4..73359e1a 100644 --- a/examples/FacebookTabsExample/.gitignore +++ b/examples/FacebookTabsExample/.gitignore @@ -38,4 +38,4 @@ npm-debug.log buck-out/ \.buckd/ android/app/libs -android/keystores/debug.keystore +*.keystore diff --git a/examples/FacebookTabsExample/android/app/build.gradle b/examples/FacebookTabsExample/android/app/build.gradle index 210ce310..48653703 100644 --- a/examples/FacebookTabsExample/android/app/build.gradle +++ b/examples/FacebookTabsExample/android/app/build.gradle @@ -135,6 +135,6 @@ dependencies { // Run this once to be able to run the application with BUCK // puts all compile dependencies into folder libs for BUCK to use task copyDownloadableDepsToLibs(type: Copy) { - from configurations.compile - into 'libs' + from configurations.compile + into 'libs' } diff --git a/examples/FacebookTabsExample/android/app/src/main/java/com/facebooktabsexample/MainApplication.java b/examples/FacebookTabsExample/android/app/src/main/java/com/facebooktabsexample/MainApplication.java index 9563cd72..488e517e 100644 --- a/examples/FacebookTabsExample/android/app/src/main/java/com/facebooktabsexample/MainApplication.java +++ b/examples/FacebookTabsExample/android/app/src/main/java/com/facebooktabsexample/MainApplication.java @@ -9,6 +9,7 @@ import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; import com.facebook.react.shell.MainReactPackage; +import com.facebook.soloader.SoLoader; import java.util.Arrays; import java.util.List; @@ -32,6 +33,12 @@ protected List getPackages() { @Override public ReactNativeHost getReactNativeHost() { - return mReactNativeHost; + return mReactNativeHost; + } + + @Override + public void onCreate() { + super.onCreate(); + SoLoader.init(this, /* native exopackage */ false); } } diff --git a/examples/FacebookTabsExample/ios/FacebookTabsExample.xcodeproj/project.pbxproj b/examples/FacebookTabsExample/ios/FacebookTabsExample.xcodeproj/project.pbxproj index a0eeaabc..cc41a4fe 100644 --- a/examples/FacebookTabsExample/ios/FacebookTabsExample.xcodeproj/project.pbxproj +++ b/examples/FacebookTabsExample/ios/FacebookTabsExample.xcodeproj/project.pbxproj @@ -22,15 +22,15 @@ 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; - 584874D0FE404BA7932ACBE2 /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 22BDAF142981412385B745C1 /* libRNVectorIcons.a */; }; - 671B66239FAA4384BBC93D8B /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B6123AA17F9F4089BDC1E408 /* Entypo.ttf */; }; - FD0CC5EF61604A9B8BC7257E /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 99ADF6673658426AAB245409 /* EvilIcons.ttf */; }; - 79FB6310B7D74D099566C879 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = EC65C9411E2D412F8D59F88C /* FontAwesome.ttf */; }; - 2A107191981C4EB59E8246A0 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 558E1749E2A348309A32DD2F /* Foundation.ttf */; }; - 5511C57E574A4AF79F122F12 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AF311572B12C4A648679D921 /* Ionicons.ttf */; }; - E4F54E86DE0447D3A2D7679E /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1022540A5C2246DDA3042455 /* MaterialIcons.ttf */; }; - DEA6F8287584444B9A95433F /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 553F335B9DCD49B8A16DBEE9 /* Octicons.ttf */; }; - C559644653F74A619ED1A86E /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0EFF4AC03B5E44ACB751A974 /* Zocial.ttf */; }; + 007FB3FCFC4449BB8D03A830 /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C38C9023040409B89BAB61E /* libRNVectorIcons.a */; }; + 8B92CFFA39C641EF8BCBBE13 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 09B4078555DD4760B272E0A7 /* Entypo.ttf */; }; + 94F83075A50C434A811E73F4 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2F14162D54AB4E0A9AC681B2 /* EvilIcons.ttf */; }; + 3F8CB16961B54F628DB211BA /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A3B220AAB0644D5D9C988437 /* FontAwesome.ttf */; }; + 08C1ADDEB73747B3BAAE8399 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 25A324789DAD4B728F3AFE35 /* Foundation.ttf */; }; + 7C085D0781B54FF292DDA30E /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A16EA9B66A9C49D08E47C01D /* Ionicons.ttf */; }; + 572C882E80574ED0881F7DDC /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 768FEAF0228C4D8E9AA47854 /* MaterialIcons.ttf */; }; + D3C46853FC7749D39C0CDADE /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B5DD9C55A24242A0A08AA771 /* Octicons.ttf */; }; + B917E20BD15E4D65941A5B65 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = EFDB0658781D41299E2D591B /* Zocial.ttf */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -135,16 +135,16 @@ 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = ../node_modules/react-native/React/React.xcodeproj; sourceTree = ""; }; 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = ../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj; sourceTree = ""; }; 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = ../node_modules/react-native/Libraries/Text/RCTText.xcodeproj; sourceTree = ""; }; - 9BEB862C8FCD459A9ACEB9EF /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; name = "RNVectorIcons.xcodeproj"; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; }; - 22BDAF142981412385B745C1 /* libRNVectorIcons.a */ = {isa = PBXFileReference; name = "libRNVectorIcons.a"; path = "libRNVectorIcons.a"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; - B6123AA17F9F4089BDC1E408 /* Entypo.ttf */ = {isa = PBXFileReference; name = "Entypo.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - 99ADF6673658426AAB245409 /* EvilIcons.ttf */ = {isa = PBXFileReference; name = "EvilIcons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - EC65C9411E2D412F8D59F88C /* FontAwesome.ttf */ = {isa = PBXFileReference; name = "FontAwesome.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - 558E1749E2A348309A32DD2F /* Foundation.ttf */ = {isa = PBXFileReference; name = "Foundation.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - AF311572B12C4A648679D921 /* Ionicons.ttf */ = {isa = PBXFileReference; name = "Ionicons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - 1022540A5C2246DDA3042455 /* MaterialIcons.ttf */ = {isa = PBXFileReference; name = "MaterialIcons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - 553F335B9DCD49B8A16DBEE9 /* Octicons.ttf */ = {isa = PBXFileReference; name = "Octicons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - 0EFF4AC03B5E44ACB751A974 /* Zocial.ttf */ = {isa = PBXFileReference; name = "Zocial.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + 1EBBBA3F498247E98CDE2C05 /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; name = "RNVectorIcons.xcodeproj"; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; }; + 0C38C9023040409B89BAB61E /* libRNVectorIcons.a */ = {isa = PBXFileReference; name = "libRNVectorIcons.a"; path = "libRNVectorIcons.a"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; + 09B4078555DD4760B272E0A7 /* Entypo.ttf */ = {isa = PBXFileReference; name = "Entypo.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + 2F14162D54AB4E0A9AC681B2 /* EvilIcons.ttf */ = {isa = PBXFileReference; name = "EvilIcons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + A3B220AAB0644D5D9C988437 /* FontAwesome.ttf */ = {isa = PBXFileReference; name = "FontAwesome.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + 25A324789DAD4B728F3AFE35 /* Foundation.ttf */ = {isa = PBXFileReference; name = "Foundation.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + A16EA9B66A9C49D08E47C01D /* Ionicons.ttf */ = {isa = PBXFileReference; name = "Ionicons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + 768FEAF0228C4D8E9AA47854 /* MaterialIcons.ttf */ = {isa = PBXFileReference; name = "MaterialIcons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + B5DD9C55A24242A0A08AA771 /* Octicons.ttf */ = {isa = PBXFileReference; name = "Octicons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + EFDB0658781D41299E2D591B /* Zocial.ttf */ = {isa = PBXFileReference; name = "Zocial.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -170,7 +170,7 @@ 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */, 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */, - 584874D0FE404BA7932ACBE2 /* libRNVectorIcons.a in Frameworks */, + 007FB3FCFC4449BB8D03A830 /* libRNVectorIcons.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -293,7 +293,7 @@ 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, - 9BEB862C8FCD459A9ACEB9EF /* RNVectorIcons.xcodeproj */, + 1EBBBA3F498247E98CDE2C05 /* RNVectorIcons.xcodeproj */, ); name = Libraries; sourceTree = ""; @@ -313,7 +313,7 @@ 832341AE1AAA6A7D00B99B32 /* Libraries */, 00E356EF1AD99517003FC87E /* FacebookTabsExampleTests */, 83CBBA001A601CBA00E9B192 /* Products */, - F74B7707A6504DCDAB3EECAF /* Resources */, + 76627028D2A8407F8AD3BDFD /* Resources */, ); indentWidth = 2; sourceTree = ""; @@ -328,17 +328,17 @@ name = Products; sourceTree = ""; }; - F74B7707A6504DCDAB3EECAF /* Resources */ = { + 76627028D2A8407F8AD3BDFD /* Resources */ = { isa = PBXGroup; children = ( - B6123AA17F9F4089BDC1E408 /* Entypo.ttf */, - 99ADF6673658426AAB245409 /* EvilIcons.ttf */, - EC65C9411E2D412F8D59F88C /* FontAwesome.ttf */, - 558E1749E2A348309A32DD2F /* Foundation.ttf */, - AF311572B12C4A648679D921 /* Ionicons.ttf */, - 1022540A5C2246DDA3042455 /* MaterialIcons.ttf */, - 553F335B9DCD49B8A16DBEE9 /* Octicons.ttf */, - 0EFF4AC03B5E44ACB751A974 /* Zocial.ttf */, + 09B4078555DD4760B272E0A7 /* Entypo.ttf */, + 2F14162D54AB4E0A9AC681B2 /* EvilIcons.ttf */, + A3B220AAB0644D5D9C988437 /* FontAwesome.ttf */, + 25A324789DAD4B728F3AFE35 /* Foundation.ttf */, + A16EA9B66A9C49D08E47C01D /* Ionicons.ttf */, + 768FEAF0228C4D8E9AA47854 /* MaterialIcons.ttf */, + B5DD9C55A24242A0A08AA771 /* Octicons.ttf */, + EFDB0658781D41299E2D591B /* Zocial.ttf */, ); name = Resources; path = ""; @@ -546,14 +546,14 @@ files = ( 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, - 671B66239FAA4384BBC93D8B /* Entypo.ttf in Resources */, - FD0CC5EF61604A9B8BC7257E /* EvilIcons.ttf in Resources */, - 79FB6310B7D74D099566C879 /* FontAwesome.ttf in Resources */, - 2A107191981C4EB59E8246A0 /* Foundation.ttf in Resources */, - 5511C57E574A4AF79F122F12 /* Ionicons.ttf in Resources */, - E4F54E86DE0447D3A2D7679E /* MaterialIcons.ttf in Resources */, - DEA6F8287584444B9A95433F /* Octicons.ttf in Resources */, - C559644653F74A619ED1A86E /* Zocial.ttf in Resources */, + 8B92CFFA39C641EF8BCBBE13 /* Entypo.ttf in Resources */, + 94F83075A50C434A811E73F4 /* EvilIcons.ttf in Resources */, + 3F8CB16961B54F628DB211BA /* FontAwesome.ttf in Resources */, + 08C1ADDEB73747B3BAAE8399 /* Foundation.ttf in Resources */, + 7C085D0781B54FF292DDA30E /* Ionicons.ttf in Resources */, + 572C882E80574ED0881F7DDC /* MaterialIcons.ttf in Resources */, + D3C46853FC7749D39C0CDADE /* Octicons.ttf in Resources */, + B917E20BD15E4D65941A5B65 /* Zocial.ttf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/examples/FacebookTabsExample/ios/FacebookTabsExample/Info.plist b/examples/FacebookTabsExample/ios/FacebookTabsExample/Info.plist index df50cd28..2dff97a9 100644 --- a/examples/FacebookTabsExample/ios/FacebookTabsExample/Info.plist +++ b/examples/FacebookTabsExample/ios/FacebookTabsExample/Info.plist @@ -44,7 +44,7 @@ localhost - NSTemporaryExceptionAllowsInsecureHTTPLoads + NSExceptionAllowsInsecureHTTPLoads diff --git a/examples/FacebookTabsExample/package.json b/examples/FacebookTabsExample/package.json index 82ca883e..42a990fe 100644 --- a/examples/FacebookTabsExample/package.json +++ b/examples/FacebookTabsExample/package.json @@ -7,7 +7,7 @@ }, "dependencies": { "react": "^15.1.0", - "react-native": "^0.34.1", + "react-native": "^0.38.0", "react-native-scrollable-tab-view": "../..", "react-native-vector-icons": "^2.0.3", "react-timer-mixin": "^0.13.3" From e63e6be6a09ca8d077e37aa2c1ba14f66ce6730a Mon Sep 17 00:00:00 2001 From: Sokovikov Date: Tue, 20 Dec 2016 22:04:53 +0400 Subject: [PATCH 09/34] content offset for android --- examples/FacebookTabsExample/ScrollableTabsExample.js | 2 +- index.js | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/examples/FacebookTabsExample/ScrollableTabsExample.js b/examples/FacebookTabsExample/ScrollableTabsExample.js index f3d777e1..96a9dd0f 100644 --- a/examples/FacebookTabsExample/ScrollableTabsExample.js +++ b/examples/FacebookTabsExample/ScrollableTabsExample.js @@ -10,7 +10,7 @@ export default React.createClass({ render() { return } > My diff --git a/index.js b/index.js index c3afc6fb..93810bcd 100644 --- a/index.js +++ b/index.js @@ -11,6 +11,7 @@ const { ScrollView, StyleSheet, InteractionManager, + Platform, } = ReactNative; const TimerMixin = require('react-timer-mixin'); @@ -63,6 +64,15 @@ const ScrollableTabView = React.createClass({ }; }, + componentDidMount() { + InteractionManager.runAfterInteractions(() => { + if (this.scrollView && Platform.OS === 'android') { + const x = this.props.initialPage * this.state.containerWidth; + this.scrollView.scrollTo({ x, animated: false }); + } + }); + }, + componentWillReceiveProps(props) { if (props.children !== this.props.children) { this.updateSceneKeys({ page: this.state.currentPage, children: props.children, }); From 6788f5cf08e7ebb8947cd3cae9e7c132704f7a51 Mon Sep 17 00:00:00 2001 From: Gianmarco Leone Date: Thu, 22 Dec 2016 12:20:56 +0100 Subject: [PATCH 10/34] setTimeout() instead of InteractionManager In componentDidMount() of index.js, using a timeout resolves a problem with scrollView.scrollTo() not working --- index.js | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/index.js b/index.js index 93810bcd..803aa98e 100644 --- a/index.js +++ b/index.js @@ -21,14 +21,14 @@ const ScrollableTabBar = require('./ScrollableTabBar'); const ScrollableTabView = React.createClass({ - mixins: [TimerMixin, ], + mixins: [TimerMixin,], statics: { DefaultTabBar, ScrollableTabBar, }, propTypes: { - tabBarPosition: PropTypes.oneOf(['top', 'bottom', 'overlayTop', 'overlayBottom', ]), + tabBarPosition: PropTypes.oneOf(['top', 'bottom', 'overlayTop', 'overlayBottom',]), initialPage: PropTypes.number, page: PropTypes.number, onChangeTab: PropTypes.func, @@ -46,8 +46,8 @@ const ScrollableTabView = React.createClass({ tabBarPosition: 'top', initialPage: 0, page: -1, - onChangeTab: () => {}, - onScroll: () => {}, + onChangeTab: () => { }, + onScroll: () => { }, contentProps: {}, scrollWithoutAnimation: false, locked: false, @@ -65,12 +65,14 @@ const ScrollableTabView = React.createClass({ }, componentDidMount() { - InteractionManager.runAfterInteractions(() => { + //InteractionManager.runAfterInteractions(() => { + setTimeout(() => { if (this.scrollView && Platform.OS === 'android') { + console.log("Scrolling to " + this.props.initialPage + " with containerWidth " + this.state.containerWidth); const x = this.props.initialPage * this.state.containerWidth; this.scrollView.scrollTo({ x, animated: false }); } - }); + }, 0); }, componentWillReceiveProps(props) { @@ -86,7 +88,7 @@ const ScrollableTabView = React.createClass({ goToPage(pageNumber) { const offset = pageNumber * this.state.containerWidth; if (this.scrollView) { - this.scrollView.scrollTo({x: offset, y: 0, animated: !this.props.scrollWithoutAnimation, }); + this.scrollView.scrollTo({ x: offset, y: 0, animated: !this.props.scrollWithoutAnimation, }); } const currentPage = this.state.currentPage; @@ -106,9 +108,9 @@ const ScrollableTabView = React.createClass({ } }, - updateSceneKeys({ page, children = this.props.children, callback = () => {}, }) { + updateSceneKeys({ page, children = this.props.children, callback = () => { }, }) { let newKeys = this.newSceneKeys({ previousKeys: this.state.sceneKeys, currentPage: page, children, }); - this.setState({currentPage: page, sceneKeys: newKeys, }, callback); + this.setState({ currentPage: page, sceneKeys: newKeys, }, callback); }, newSceneKeys({ previousKeys = [], currentPage = 0, children = this.props.children, }) { @@ -144,11 +146,11 @@ const ScrollableTabView = React.createClass({ pagingEnabled automaticallyAdjustContentInsets={false} contentOffset={{ x: this.props.initialPage * this.state.containerWidth, }} - ref={(scrollView) => { this.scrollView = scrollView; }} + ref={(scrollView) => { this.scrollView = scrollView; } } onScroll={(e) => { const offsetX = e.nativeEvent.contentOffset.x; this._updateScrollValue(offsetX / this.state.containerWidth); - }} + } } onMomentumScrollBegin={this._onMomentumScrollBeginAndEnd} onMomentumScrollEnd={this._onMomentumScrollBeginAndEnd} scrollEventThrottle={16} @@ -170,9 +172,9 @@ const ScrollableTabView = React.createClass({ return - {this._keyExists(this.state.sceneKeys, key) ? child : } + style={{ width: this.state.containerWidth, }} + > + {this._keyExists(this.state.sceneKeys, key) ? child : } ; }); }, @@ -260,7 +262,7 @@ const ScrollableTabView = React.createClass({ }; } - return + return {this.props.tabBarPosition === 'top' && this.renderTabBar(tabBarProps)} {this.renderScrollableContent()} {(this.props.tabBarPosition === 'bottom' || overlayTabs) && this.renderTabBar(tabBarProps)} From 90addb427c7dc5c85e583358e350d380a4d0c2b7 Mon Sep 17 00:00:00 2001 From: wuhuabin <13804087628@163.com> Date: Mon, 26 Dec 2016 17:43:49 +0800 Subject: [PATCH 11/34] add scrollableTabBar onScroll Event --- ScrollableTabBar.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ScrollableTabBar.js b/ScrollableTabBar.js index 22013a0c..6a0f9fee 100644 --- a/ScrollableTabBar.js +++ b/ScrollableTabBar.js @@ -28,6 +28,7 @@ const ScrollableTabBar = React.createClass({ textStyle: Text.propTypes.style, renderTab: React.PropTypes.func, underlineStyle: View.propTypes.style, + onScroll:React.PropTypes.func, }, getDefaultProps() { @@ -172,6 +173,7 @@ const ScrollableTabBar = React.createClass({ showsHorizontalScrollIndicator={false} showsVerticalScrollIndicator={false} directionalLockEnabled={true} + onScroll={this.props.onScroll} bounces={false} scrollsToTop={false} > From f7265fce6a2444abfac06142726999eb620e93ee Mon Sep 17 00:00:00 2001 From: Sokovikov Date: Mon, 16 Jan 2017 17:46:23 +0400 Subject: [PATCH 12/34] 0.7.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e80446fc..5f5b0e00 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-scrollable-tab-view", - "version": "0.7.0", + "version": "0.7.1", "description": "", "main": "index.js", "scripts": { From b49813a1ed4cc5a1dc332a1e7442226179b2f0f6 Mon Sep 17 00:00:00 2001 From: Jonathan Marrot Date: Thu, 19 Jan 2017 11:52:30 +0100 Subject: [PATCH 13/34] Copy Button.ios.js to Button.windows.js --- Button.windows.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Button.windows.js diff --git a/Button.windows.js b/Button.windows.js new file mode 100644 index 00000000..c2cc1a45 --- /dev/null +++ b/Button.windows.js @@ -0,0 +1,14 @@ +const React = require('react'); +const ReactNative = require('react-native'); +const { + TouchableOpacity, + View, +} = ReactNative; + +const Button = (props) => { + return + {props.children} + ; +}; + +module.exports = Button; From 7d6ddf145161f726f1a6bc64ade75b0f76492075 Mon Sep 17 00:00:00 2001 From: Sokovikov Date: Sat, 21 Jan 2017 17:43:39 +0100 Subject: [PATCH 14/34] update example to rn-40 --- .DS_Store | Bin 0 -> 8196 bytes examples/FacebookTabsExample/.babelrc | 3 + examples/FacebookTabsExample/.flowconfig | 33 +- examples/FacebookTabsExample/.gitattributes | 1 + examples/FacebookTabsExample/.gitignore | 16 +- .../android/app/src/main/AndroidManifest.xml | 9 +- .../app/src/main/res/values/strings.xml | 1 - .../android/keystores/BUCK | 8 + .../keystores/debug.keystore.properties | 4 + .../android/settings.gradle | 4 +- .../project.pbxproj | 407 ++++++++++++++---- .../xcschemes/FacebookTabsExample.xcscheme | 27 +- .../ios/FacebookTabsExample/AppDelegate.m | 4 +- .../FacebookTabsExampleTests.m | 4 +- examples/FacebookTabsExample/package.json | 4 +- 15 files changed, 401 insertions(+), 124 deletions(-) create mode 100644 .DS_Store create mode 100644 examples/FacebookTabsExample/.babelrc create mode 100644 examples/FacebookTabsExample/.gitattributes create mode 100644 examples/FacebookTabsExample/android/keystores/BUCK create mode 100644 examples/FacebookTabsExample/android/keystores/debug.keystore.properties diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5db50e2a8550374228cd0923675365c7aca11105 GIT binary patch literal 8196 zcmeHMPj4GV6n~Qjx^5D(&L5H@4i-_RN{ymKZ7C9}>N<&9tCW~J3JGa(cfA{T>3YW6 zT_;UKkS}}yZsouS;KYF=U!dQB6XGL)#EBF9W@eo_Yg=$asGYH9-puTK^LBpo-kZD) z5wTL+TOpb!A`4YgdkoEhBA?6JS4PsADNqJ^B0-#%$U*D%ahnN)fI+|@U=T0}7zF+g z2;k0^#Ts(&>!+qQ2p9xjO9W(mD41$TEX`1u(hj+TVkcJA)U*ZxgFrt5GI!5Y ziQ1Il*PFjb7zN1Vm*@+M%b}>dp>V-19qdEY%YUhY9??W*g#fbgK*{ejlH;^Wcj-2L zOm}FVKB5iKC2Ep)RwJ9s$l0_;KJDRKLz_ap`6hZU-ol}1kY4t6Mt%%C^Pxvj4ZCbY zu7Po8pX`r}lm(t=;B8V1TKo7FF3)>#>Em|~;#P{|3%3;pak9MpGaETK`o^2*tz6E^ zO<0erPsBkragugia-v-|3OwIU`lti0* zv0A6%Bu^l#6xHmx;tEViZ?~Ifs{42Rv^sI*B6x8=q+hjj>ZSz;#KDEvZW8)KVP1^aX>HJK7 zc6Rpdx!L)P?_8|e)2>s0+K8l`t%^`YrLgVqHlo0*ww!vv8{3KhEU5-Ze$AfBus-m; z&tFb$9=5M`-twauv`>C}$B80`H~iA!qtJ2vaD$gbl8EMZP#0Xk`J`GF!%F1KB^Pe} z4x>d`DBkOKF6)j>3%Ucxu-PUT+|Ml(D|#*mXSsracb~TCDIL)_^d0>`KhX>Ng?^(y z*?DHO_t+J7jooCo*j-j;_gIB}!amdDBV9Lqx2r-^whKD+Xfy6Oj_~DB9r|_HQ!WYT z;hCT-!(Xqf;>%!7?L-z&VY>yv+aChkyS!Xc+_y0)B6mcT0A! zGS@DkK1P*A@^v&-B4|`P4yw{|(9?eyqF(^3lqsgPqbX)k{__t3=Kjau3FiJ+#`hXG Fe*+uMOFjSq literal 0 HcmV?d00001 diff --git a/examples/FacebookTabsExample/.babelrc b/examples/FacebookTabsExample/.babelrc new file mode 100644 index 00000000..8df53fe4 --- /dev/null +++ b/examples/FacebookTabsExample/.babelrc @@ -0,0 +1,3 @@ +{ +"presets": ["react-native"] +} \ No newline at end of file diff --git a/examples/FacebookTabsExample/.flowconfig b/examples/FacebookTabsExample/.flowconfig index 5c5a16d1..876e701f 100644 --- a/examples/FacebookTabsExample/.flowconfig +++ b/examples/FacebookTabsExample/.flowconfig @@ -1,29 +1,18 @@ [ignore] - -# We fork some components by platform. +; We fork some components by platform .*/*[.]android.js -# Ignore templates with `@flow` in header -.*/local-cli/generator.* - -# Ignore malformed json -.*/node_modules/y18n/test/.*\.json - -# Ignore the website subdir -/website/.* - -# Ignore BUCK generated dirs +; Ignore "BUCK" generated dirs /\.buckd/ -# Ignore unexpected extra @providesModule -.*/node_modules/commoner/test/source/widget/share.js +; Ignore unexpected extra "@providesModule" .*/node_modules/.*/node_modules/fbjs/.* -# Ignore duplicate module providers -# For RN Apps installed via npm, "Libraries" folder is inside node_modules/react-native but in the source repo it is in the root +; Ignore duplicate module providers +; For RN Apps installed via npm, "Libraries" folder is inside +; "node_modules/react-native" but in the source repo it is in the root .*/Libraries/react-native/React.js .*/Libraries/react-native/ReactNative.js -.*/node_modules/jest-runtime/build/__tests__/.* [include] @@ -35,25 +24,21 @@ flow/ [options] module.system=haste -esproposal.class_static_fields=enable -esproposal.class_instance_fields=enable - experimental.strict_type_args=true munge_underscores=true -module.name_mapper='^image![a-zA-Z0-9$_-]+$' -> 'GlobalImageStub' module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub' suppress_type=$FlowIssue suppress_type=$FlowFixMe suppress_type=$FixMe -suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(3[0-3]\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) -suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(3[0-3]\\|1[0-9]\\|[1-2][0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ +suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(3[0-6]\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) +suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(3[0-6]\\|1[0-9]\\|[1-2][0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy unsafe.enable_getters_and_setters=true [version] -^0.33.0 +^0.36.0 diff --git a/examples/FacebookTabsExample/.gitattributes b/examples/FacebookTabsExample/.gitattributes new file mode 100644 index 00000000..d42ff183 --- /dev/null +++ b/examples/FacebookTabsExample/.gitattributes @@ -0,0 +1 @@ +*.pbxproj -text diff --git a/examples/FacebookTabsExample/.gitignore b/examples/FacebookTabsExample/.gitignore index 73359e1a..fc13f169 100644 --- a/examples/FacebookTabsExample/.gitignore +++ b/examples/FacebookTabsExample/.gitignore @@ -22,12 +22,13 @@ DerivedData *.xcuserstate project.xcworkspace -# Android/IJ +# Android/IntelliJ # -*.iml +build/ .idea .gradle local.properties +*.iml # node.js # @@ -39,3 +40,14 @@ buck-out/ \.buckd/ android/app/libs *.keystore + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots diff --git a/examples/FacebookTabsExample/android/app/src/main/AndroidManifest.xml b/examples/FacebookTabsExample/android/app/src/main/AndroidManifest.xml index 16b92fa3..8c42f151 100644 --- a/examples/FacebookTabsExample/android/app/src/main/AndroidManifest.xml +++ b/examples/FacebookTabsExample/android/app/src/main/AndroidManifest.xml @@ -1,7 +1,14 @@ + package="com.facebooktabsexample" + android:versionCode="1" + android:versionName="1.0"> + + + - FacebookTabsExample diff --git a/examples/FacebookTabsExample/android/keystores/BUCK b/examples/FacebookTabsExample/android/keystores/BUCK new file mode 100644 index 00000000..15da20e6 --- /dev/null +++ b/examples/FacebookTabsExample/android/keystores/BUCK @@ -0,0 +1,8 @@ +keystore( + name = 'debug', + store = 'debug.keystore', + properties = 'debug.keystore.properties', + visibility = [ + 'PUBLIC', + ], +) diff --git a/examples/FacebookTabsExample/android/keystores/debug.keystore.properties b/examples/FacebookTabsExample/android/keystores/debug.keystore.properties new file mode 100644 index 00000000..121bfb49 --- /dev/null +++ b/examples/FacebookTabsExample/android/keystores/debug.keystore.properties @@ -0,0 +1,4 @@ +key.store=debug.keystore +key.alias=androiddebugkey +key.store.password=android +key.alias.password=android diff --git a/examples/FacebookTabsExample/android/settings.gradle b/examples/FacebookTabsExample/android/settings.gradle index 15d7d3a7..db2adae6 100644 --- a/examples/FacebookTabsExample/android/settings.gradle +++ b/examples/FacebookTabsExample/android/settings.gradle @@ -1,5 +1,5 @@ rootProject.name = 'FacebookTabsExample' - -include ':app' include ':react-native-vector-icons' project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android') + +include ':app' diff --git a/examples/FacebookTabsExample/ios/FacebookTabsExample.xcodeproj/project.pbxproj b/examples/FacebookTabsExample/ios/FacebookTabsExample.xcodeproj/project.pbxproj index cc41a4fe..5ab20ced 100644 --- a/examples/FacebookTabsExample/ios/FacebookTabsExample.xcodeproj/project.pbxproj +++ b/examples/FacebookTabsExample/ios/FacebookTabsExample.xcodeproj/project.pbxproj @@ -5,6 +5,7 @@ }; objectVersion = 46; objects = { + /* Begin PBXBuildFile section */ 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; @@ -12,6 +13,7 @@ 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; }; 00E356F31AD99517003FC87E /* FacebookTabsExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* FacebookTabsExampleTests.m */; }; + 0BD5F64C8F074847B9D4F3DA /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0429B348D6C04E428BA0F52B /* Entypo.ttf */; }; 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; }; 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; }; 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; }; @@ -21,16 +23,16 @@ 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; + 37F8A21538BB440D9A67C3E6 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 685A82E66D2A431EAE5CACD0 /* Foundation.ttf */; }; + 5BD22D54F0604826BF9F695F /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B5303D9D4E3342709BCA4C3B /* Octicons.ttf */; }; + 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; + 6385D1CBFC304AA4BE9647C1 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CF17115DEBA3434D8FA6E5DA /* MaterialIcons.ttf */; }; 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; - 007FB3FCFC4449BB8D03A830 /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C38C9023040409B89BAB61E /* libRNVectorIcons.a */; }; - 8B92CFFA39C641EF8BCBBE13 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 09B4078555DD4760B272E0A7 /* Entypo.ttf */; }; - 94F83075A50C434A811E73F4 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2F14162D54AB4E0A9AC681B2 /* EvilIcons.ttf */; }; - 3F8CB16961B54F628DB211BA /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A3B220AAB0644D5D9C988437 /* FontAwesome.ttf */; }; - 08C1ADDEB73747B3BAAE8399 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 25A324789DAD4B728F3AFE35 /* Foundation.ttf */; }; - 7C085D0781B54FF292DDA30E /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A16EA9B66A9C49D08E47C01D /* Ionicons.ttf */; }; - 572C882E80574ED0881F7DDC /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 768FEAF0228C4D8E9AA47854 /* MaterialIcons.ttf */; }; - D3C46853FC7749D39C0CDADE /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B5DD9C55A24242A0A08AA771 /* Octicons.ttf */; }; - B917E20BD15E4D65941A5B65 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = EFDB0658781D41299E2D591B /* Zocial.ttf */; }; + A209C0F213734F3EB196E421 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BCA9F77E60ED4F6795E90D34 /* FontAwesome.ttf */; }; + AC9D8A7D9E00464CBAA4D0D1 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E35314265F83484E9D37A9CA /* EvilIcons.ttf */; }; + CF568E16D2A6442AA21C98E9 /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 48E06620738E46A8B04E8C3D /* libRNVectorIcons.a */; }; + FC4F3CC6F5B34BC2B7B52D29 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8207E9CD44514F4CA3FE59EB /* Ionicons.ttf */; }; + FE07361C667B43FF95E3AA39 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D808C3C34DD943B394A469CB /* Zocial.ttf */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -97,6 +99,111 @@ remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; remoteInfo = React; }; + 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A283A1D9B042B00D4039D; + remoteInfo = "RCTImage-tvOS"; + }; + 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28471D9B043800D4039D; + remoteInfo = "RCTLinking-tvOS"; + }; + 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28541D9B044C00D4039D; + remoteInfo = "RCTNetwork-tvOS"; + }; + 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28611D9B046600D4039D; + remoteInfo = "RCTSettings-tvOS"; + }; + 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A287B1D9B048500D4039D; + remoteInfo = "RCTText-tvOS"; + }; + 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28881D9B049200D4039D; + remoteInfo = "RCTWebSocket-tvOS"; + }; + 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28131D9B038B00D4039D; + remoteInfo = "React-tvOS"; + }; + 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3C059A1DE3340900C268FA; + remoteInfo = yoga; + }; + 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3C06751DE3340C00C268FA; + remoteInfo = "yoga-tvOS"; + }; + 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4; + remoteInfo = cxxreact; + }; + 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4; + remoteInfo = "cxxreact-tvOS"; + }; + 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD90B1DE5FBD600167DC4; + remoteInfo = jschelpers; + }; + 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4; + remoteInfo = "jschelpers-tvOS"; + }; + 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RCTAnimation; + }; + 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 2D2A28201D9B03D100D4039D; + remoteInfo = "RCTAnimation-tvOS"; + }; 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; @@ -111,20 +218,28 @@ remoteGlobalIDString = 58B5119B1A9E6C1200147676; remoteInfo = RCTText; }; + AA62F3B61E33C56000FC33FB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AC68DEA02AA14A4C85449F08 /* RNVectorIcons.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 5DBEB1501B18CEA900B34395; + remoteInfo = RNVectorIcons; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = main.jsbundle; path = main.jsbundle; sourceTree = ""; }; - 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = ../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj; sourceTree = ""; }; - 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = ../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj; sourceTree = ""; }; - 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = ../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj; sourceTree = ""; }; - 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = ../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj; sourceTree = ""; }; - 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = ../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj; sourceTree = ""; }; + 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; + 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; }; + 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; }; + 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; }; + 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; }; + 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; }; 00E356EE1AD99517003FC87E /* FacebookTabsExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FacebookTabsExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 00E356F21AD99517003FC87E /* FacebookTabsExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FacebookTabsExampleTests.m; sourceTree = ""; }; - 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = ../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj; sourceTree = ""; }; - 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = ../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj; sourceTree = ""; }; + 0429B348D6C04E428BA0F52B /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = ""; }; + 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; }; + 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* FacebookTabsExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FacebookTabsExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = FacebookTabsExample/AppDelegate.h; sourceTree = ""; }; 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = FacebookTabsExample/AppDelegate.m; sourceTree = ""; }; @@ -132,19 +247,19 @@ 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = FacebookTabsExample/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = FacebookTabsExample/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = FacebookTabsExample/main.m; sourceTree = ""; }; - 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = ../node_modules/react-native/React/React.xcodeproj; sourceTree = ""; }; - 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = ../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj; sourceTree = ""; }; - 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = ../node_modules/react-native/Libraries/Text/RCTText.xcodeproj; sourceTree = ""; }; - 1EBBBA3F498247E98CDE2C05 /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; name = "RNVectorIcons.xcodeproj"; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; }; - 0C38C9023040409B89BAB61E /* libRNVectorIcons.a */ = {isa = PBXFileReference; name = "libRNVectorIcons.a"; path = "libRNVectorIcons.a"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; - 09B4078555DD4760B272E0A7 /* Entypo.ttf */ = {isa = PBXFileReference; name = "Entypo.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - 2F14162D54AB4E0A9AC681B2 /* EvilIcons.ttf */ = {isa = PBXFileReference; name = "EvilIcons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - A3B220AAB0644D5D9C988437 /* FontAwesome.ttf */ = {isa = PBXFileReference; name = "FontAwesome.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - 25A324789DAD4B728F3AFE35 /* Foundation.ttf */ = {isa = PBXFileReference; name = "Foundation.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - A16EA9B66A9C49D08E47C01D /* Ionicons.ttf */ = {isa = PBXFileReference; name = "Ionicons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - 768FEAF0228C4D8E9AA47854 /* MaterialIcons.ttf */ = {isa = PBXFileReference; name = "MaterialIcons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - B5DD9C55A24242A0A08AA771 /* Octicons.ttf */ = {isa = PBXFileReference; name = "Octicons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - EFDB0658781D41299E2D591B /* Zocial.ttf */ = {isa = PBXFileReference; name = "Zocial.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; + 48E06620738E46A8B04E8C3D /* libRNVectorIcons.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNVectorIcons.a; sourceTree = ""; }; + 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; }; + 685A82E66D2A431EAE5CACD0 /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = ""; }; + 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; + 8207E9CD44514F4CA3FE59EB /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = ""; }; + 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; + AC68DEA02AA14A4C85449F08 /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNVectorIcons.xcodeproj; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = ""; }; + B5303D9D4E3342709BCA4C3B /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = ""; }; + BCA9F77E60ED4F6795E90D34 /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = ""; }; + CF17115DEBA3434D8FA6E5DA /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = ""; }; + D808C3C34DD943B394A469CB /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = ""; }; + E35314265F83484E9D37A9CA /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -160,6 +275,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */, 146834051AC3E58100842450 /* libReact.a in Frameworks */, 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */, 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */, @@ -170,7 +286,7 @@ 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */, 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */, - 007FB3FCFC4449BB8D03A830 /* libRNVectorIcons.a in Frameworks */, + CF568E16D2A6442AA21C98E9 /* libRNVectorIcons.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -197,6 +313,7 @@ isa = PBXGroup; children = ( 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */, + 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */, ); name = Products; sourceTree = ""; @@ -205,6 +322,7 @@ isa = PBXGroup; children = ( 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */, + 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */, ); name = Products; sourceTree = ""; @@ -238,6 +356,7 @@ isa = PBXGroup; children = ( 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */, + 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */, ); name = Products; sourceTree = ""; @@ -246,6 +365,7 @@ isa = PBXGroup; children = ( 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */, + 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */, ); name = Products; sourceTree = ""; @@ -264,10 +384,41 @@ name = FacebookTabsExample; sourceTree = ""; }; + 142655D88D704C188A5F5C82 /* Resources */ = { + isa = PBXGroup; + children = ( + 0429B348D6C04E428BA0F52B /* Entypo.ttf */, + E35314265F83484E9D37A9CA /* EvilIcons.ttf */, + BCA9F77E60ED4F6795E90D34 /* FontAwesome.ttf */, + 685A82E66D2A431EAE5CACD0 /* Foundation.ttf */, + 8207E9CD44514F4CA3FE59EB /* Ionicons.ttf */, + CF17115DEBA3434D8FA6E5DA /* MaterialIcons.ttf */, + B5303D9D4E3342709BCA4C3B /* Octicons.ttf */, + D808C3C34DD943B394A469CB /* Zocial.ttf */, + ); + name = Resources; + sourceTree = ""; + }; 146834001AC3E56700842450 /* Products */ = { isa = PBXGroup; children = ( 146834041AC3E56700842450 /* libReact.a */, + 3DAD3EA31DF850E9000B6D8A /* libReact.a */, + 3DAD3EA51DF850E9000B6D8A /* libyoga.a */, + 3DAD3EA71DF850E9000B6D8A /* libyoga.a */, + 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */, + 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */, + 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */, + 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */, + ); + name = Products; + sourceTree = ""; + }; + 5E91572E1DD0AC6500FF2AA8 /* Products */ = { + isa = PBXGroup; + children = ( + 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */, + 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */, ); name = Products; sourceTree = ""; @@ -276,6 +427,7 @@ isa = PBXGroup; children = ( 78C398B91ACF4ADC00677621 /* libRCTLinking.a */, + 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */, ); name = Products; sourceTree = ""; @@ -283,6 +435,7 @@ 832341AE1AAA6A7D00B99B32 /* Libraries */ = { isa = PBXGroup; children = ( + 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */, 146833FF1AC3E56700842450 /* React.xcodeproj */, 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, @@ -293,7 +446,7 @@ 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, - 1EBBBA3F498247E98CDE2C05 /* RNVectorIcons.xcodeproj */, + AC68DEA02AA14A4C85449F08 /* RNVectorIcons.xcodeproj */, ); name = Libraries; sourceTree = ""; @@ -302,6 +455,7 @@ isa = PBXGroup; children = ( 832341B51AAA6A8300B99B32 /* libRCTText.a */, + 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */, ); name = Products; sourceTree = ""; @@ -313,7 +467,7 @@ 832341AE1AAA6A7D00B99B32 /* Libraries */, 00E356EF1AD99517003FC87E /* FacebookTabsExampleTests */, 83CBBA001A601CBA00E9B192 /* Products */, - 76627028D2A8407F8AD3BDFD /* Resources */, + 142655D88D704C188A5F5C82 /* Resources */, ); indentWidth = 2; sourceTree = ""; @@ -328,20 +482,12 @@ name = Products; sourceTree = ""; }; - 76627028D2A8407F8AD3BDFD /* Resources */ = { + AA62F39A1E33C55F00FC33FB /* Products */ = { isa = PBXGroup; children = ( - 09B4078555DD4760B272E0A7 /* Entypo.ttf */, - 2F14162D54AB4E0A9AC681B2 /* EvilIcons.ttf */, - A3B220AAB0644D5D9C988437 /* FontAwesome.ttf */, - 25A324789DAD4B728F3AFE35 /* Foundation.ttf */, - A16EA9B66A9C49D08E47C01D /* Ionicons.ttf */, - 768FEAF0228C4D8E9AA47854 /* MaterialIcons.ttf */, - B5DD9C55A24242A0A08AA771 /* Octicons.ttf */, - EFDB0658781D41299E2D591B /* Zocial.ttf */, + AA62F3B71E33C56000FC33FB /* libRNVectorIcons.a */, ); - name = Resources; - path = ""; + name = Products; sourceTree = ""; }; /* End PBXGroup section */ @@ -414,6 +560,10 @@ ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */; ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; }, + { + ProductGroup = 5E91572E1DD0AC6500FF2AA8 /* Products */; + ProjectRef = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; + }, { ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; @@ -450,6 +600,10 @@ ProductGroup = 146834001AC3E56700842450 /* Products */; ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; }, + { + ProductGroup = AA62F39A1E33C55F00FC33FB /* Products */; + ProjectRef = AC68DEA02AA14A4C85449F08 /* RNVectorIcons.xcodeproj */; + }, ); projectRoot = ""; targets = ( @@ -516,6 +670,111 @@ remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; + 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTImage-tvOS.a"; + remoteRef = 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTLinking-tvOS.a"; + remoteRef = 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTNetwork-tvOS.a"; + remoteRef = 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTSettings-tvOS.a"; + remoteRef = 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTText-tvOS.a"; + remoteRef = 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTWebSocket-tvOS.a"; + remoteRef = 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA31DF850E9000B6D8A /* libReact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libReact.a; + remoteRef = 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA51DF850E9000B6D8A /* libyoga.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libyoga.a; + remoteRef = 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA71DF850E9000B6D8A /* libyoga.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libyoga.a; + remoteRef = 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libcxxreact.a; + remoteRef = 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libcxxreact.a; + remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjschelpers.a; + remoteRef = 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjschelpers.a; + remoteRef = 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTAnimation.a; + remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libRCTAnimation-tvOS.a"; + remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; @@ -530,6 +789,13 @@ remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; + AA62F3B71E33C56000FC33FB /* libRNVectorIcons.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNVectorIcons.a; + remoteRef = AA62F3B61E33C56000FC33FB /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ @@ -546,14 +812,14 @@ files = ( 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, - 8B92CFFA39C641EF8BCBBE13 /* Entypo.ttf in Resources */, - 94F83075A50C434A811E73F4 /* EvilIcons.ttf in Resources */, - 3F8CB16961B54F628DB211BA /* FontAwesome.ttf in Resources */, - 08C1ADDEB73747B3BAAE8399 /* Foundation.ttf in Resources */, - 7C085D0781B54FF292DDA30E /* Ionicons.ttf in Resources */, - 572C882E80574ED0881F7DDC /* MaterialIcons.ttf in Resources */, - D3C46853FC7749D39C0CDADE /* Octicons.ttf in Resources */, - B917E20BD15E4D65941A5B65 /* Zocial.ttf in Resources */, + 0BD5F64C8F074847B9D4F3DA /* Entypo.ttf in Resources */, + AC9D8A7D9E00464CBAA4D0D1 /* EvilIcons.ttf in Resources */, + A209C0F213734F3EB196E421 /* FontAwesome.ttf in Resources */, + 37F8A21538BB440D9A67C3E6 /* Foundation.ttf in Resources */, + FC4F3CC6F5B34BC2B7B52D29 /* Ionicons.ttf in Resources */, + 6385D1CBFC304AA4BE9647C1 /* MaterialIcons.ttf in Resources */, + 5BD22D54F0604826BF9F695F /* Octicons.ttf in Resources */, + FE07361C667B43FF95E3AA39 /* Zocial.ttf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -573,7 +839,6 @@ runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "export NODE_BINARY=node\n../node_modules/react-native/packager/react-native-xcode.sh"; - showEnvVarsInLog = 1; }; /* End PBXShellScriptBuildPhase section */ @@ -629,12 +894,12 @@ INFOPLIST_FILE = FacebookTabsExampleTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FacebookTabsExample.app/FacebookTabsExample"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/$(TARGET_NAME)\"", ); + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FacebookTabsExample.app/FacebookTabsExample"; }; name = Debug; }; @@ -646,12 +911,12 @@ INFOPLIST_FILE = FacebookTabsExampleTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FacebookTabsExample.app/FacebookTabsExample"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/$(TARGET_NAME)\"", ); + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FacebookTabsExample.app/FacebookTabsExample"; }; name = Release; }; @@ -661,13 +926,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = NO; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - "$(SRCROOT)/../node_modules/react-native/React/**", - "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", - ); - INFOPLIST_FILE = "FacebookTabsExample/Info.plist"; + INFOPLIST_FILE = FacebookTabsExample/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", @@ -684,13 +943,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CURRENT_PROJECT_VERSION = 1; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - "$(SRCROOT)/../node_modules/react-native/React/**", - "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", - ); - INFOPLIST_FILE = "FacebookTabsExample/Info.plist"; + INFOPLIST_FILE = FacebookTabsExample/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", @@ -736,12 +989,6 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - "$(SRCROOT)/../node_modules/react-native/React/**", - "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", - ); IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; @@ -777,12 +1024,6 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - "$(SRCROOT)/../node_modules/react-native/React/**", - "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", - ); IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; diff --git a/examples/FacebookTabsExample/ios/FacebookTabsExample.xcodeproj/xcshareddata/xcschemes/FacebookTabsExample.xcscheme b/examples/FacebookTabsExample/ios/FacebookTabsExample.xcodeproj/xcshareddata/xcschemes/FacebookTabsExample.xcscheme index 38bf7857..78edcb83 100644 --- a/examples/FacebookTabsExample/ios/FacebookTabsExample.xcodeproj/xcshareddata/xcschemes/FacebookTabsExample.xcscheme +++ b/examples/FacebookTabsExample/ios/FacebookTabsExample.xcodeproj/xcshareddata/xcschemes/FacebookTabsExample.xcscheme @@ -3,9 +3,23 @@ LastUpgradeVersion = "0620" version = "1.3"> + + + + + shouldUseLaunchSchemeArgsEnv = "YES"> @@ -62,15 +76,18 @@ ReferencedContainer = "container:FacebookTabsExample.xcodeproj"> + + @@ -86,10 +103,10 @@ diff --git a/examples/FacebookTabsExample/ios/FacebookTabsExample/AppDelegate.m b/examples/FacebookTabsExample/ios/FacebookTabsExample/AppDelegate.m index c68f12de..b533e0b0 100644 --- a/examples/FacebookTabsExample/ios/FacebookTabsExample/AppDelegate.m +++ b/examples/FacebookTabsExample/ios/FacebookTabsExample/AppDelegate.m @@ -9,8 +9,8 @@ #import "AppDelegate.h" -#import "RCTBundleURLProvider.h" -#import "RCTRootView.h" +#import +#import @implementation AppDelegate diff --git a/examples/FacebookTabsExample/ios/FacebookTabsExampleTests/FacebookTabsExampleTests.m b/examples/FacebookTabsExample/ios/FacebookTabsExampleTests/FacebookTabsExampleTests.m index b07e25e1..d03ce65a 100644 --- a/examples/FacebookTabsExample/ios/FacebookTabsExampleTests/FacebookTabsExampleTests.m +++ b/examples/FacebookTabsExample/ios/FacebookTabsExampleTests/FacebookTabsExampleTests.m @@ -10,8 +10,8 @@ #import #import -#import "RCTLog.h" -#import "RCTRootView.h" +#import +#import #define TIMEOUT_SECONDS 600 #define TEXT_TO_LOOK_FOR @"Welcome to React Native!" diff --git a/examples/FacebookTabsExample/package.json b/examples/FacebookTabsExample/package.json index 42a990fe..b2170b23 100644 --- a/examples/FacebookTabsExample/package.json +++ b/examples/FacebookTabsExample/package.json @@ -7,9 +7,9 @@ }, "dependencies": { "react": "^15.1.0", - "react-native": "^0.38.0", + "react-native": "^0.40.0", "react-native-scrollable-tab-view": "../..", - "react-native-vector-icons": "^2.0.3", + "react-native-vector-icons": "^4.0.0", "react-timer-mixin": "^0.13.3" } } From f5bcf9f32e905ab1ba3092ff6d465c9fcb5b1799 Mon Sep 17 00:00:00 2001 From: Gianmarco Leone Date: Tue, 24 Jan 2017 12:29:04 +0100 Subject: [PATCH 15/34] Undo automatic formatter --- index.js | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/index.js b/index.js index 803aa98e..53d2ffeb 100644 --- a/index.js +++ b/index.js @@ -21,14 +21,14 @@ const ScrollableTabBar = require('./ScrollableTabBar'); const ScrollableTabView = React.createClass({ - mixins: [TimerMixin,], + mixins: [TimerMixin, ], statics: { DefaultTabBar, ScrollableTabBar, }, propTypes: { - tabBarPosition: PropTypes.oneOf(['top', 'bottom', 'overlayTop', 'overlayBottom',]), + tabBarPosition: PropTypes.oneOf(['top', 'bottom', 'overlayTop', 'overlayBottom', ]), initialPage: PropTypes.number, page: PropTypes.number, onChangeTab: PropTypes.func, @@ -46,8 +46,8 @@ const ScrollableTabView = React.createClass({ tabBarPosition: 'top', initialPage: 0, page: -1, - onChangeTab: () => { }, - onScroll: () => { }, + onChangeTab: () => {}, + onScroll: () => {}, contentProps: {}, scrollWithoutAnimation: false, locked: false, @@ -65,7 +65,6 @@ const ScrollableTabView = React.createClass({ }, componentDidMount() { - //InteractionManager.runAfterInteractions(() => { setTimeout(() => { if (this.scrollView && Platform.OS === 'android') { console.log("Scrolling to " + this.props.initialPage + " with containerWidth " + this.state.containerWidth); @@ -88,7 +87,7 @@ const ScrollableTabView = React.createClass({ goToPage(pageNumber) { const offset = pageNumber * this.state.containerWidth; if (this.scrollView) { - this.scrollView.scrollTo({ x: offset, y: 0, animated: !this.props.scrollWithoutAnimation, }); + this.scrollView.scrollTo({x: offset, y: 0, animated: !this.props.scrollWithoutAnimation, }); } const currentPage = this.state.currentPage; @@ -108,9 +107,9 @@ const ScrollableTabView = React.createClass({ } }, - updateSceneKeys({ page, children = this.props.children, callback = () => { }, }) { + updateSceneKeys({ page, children = this.props.children, callback = () => {}, }) { let newKeys = this.newSceneKeys({ previousKeys: this.state.sceneKeys, currentPage: page, children, }); - this.setState({ currentPage: page, sceneKeys: newKeys, }, callback); + this.setState({currentPage: page, sceneKeys: newKeys, }, callback); }, newSceneKeys({ previousKeys = [], currentPage = 0, children = this.props.children, }) { @@ -146,11 +145,11 @@ const ScrollableTabView = React.createClass({ pagingEnabled automaticallyAdjustContentInsets={false} contentOffset={{ x: this.props.initialPage * this.state.containerWidth, }} - ref={(scrollView) => { this.scrollView = scrollView; } } + ref={(scrollView) => { this.scrollView = scrollView; }} onScroll={(e) => { const offsetX = e.nativeEvent.contentOffset.x; this._updateScrollValue(offsetX / this.state.containerWidth); - } } + }} onMomentumScrollBegin={this._onMomentumScrollBeginAndEnd} onMomentumScrollEnd={this._onMomentumScrollBeginAndEnd} scrollEventThrottle={16} @@ -172,9 +171,9 @@ const ScrollableTabView = React.createClass({ return - {this._keyExists(this.state.sceneKeys, key) ? child : } + style={{width: this.state.containerWidth, }} + > + {this._keyExists(this.state.sceneKeys, key) ? child : } ; }); }, @@ -262,7 +261,7 @@ const ScrollableTabView = React.createClass({ }; } - return + return {this.props.tabBarPosition === 'top' && this.renderTabBar(tabBarProps)} {this.renderScrollableContent()} {(this.props.tabBarPosition === 'bottom' || overlayTabs) && this.renderTabBar(tabBarProps)} From 5c4ace061c99ccf6d197080f230b73f5913268cf Mon Sep 17 00:00:00 2001 From: Gianmarco Leone Date: Wed, 25 Jan 2017 16:07:53 +0100 Subject: [PATCH 16/34] Using this.setTimeout and console.log elimination As documented in https://facebook.github.io/react-native/docs/timers.html, using this.setTimeout --- index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/index.js b/index.js index 53d2ffeb..0da7561e 100644 --- a/index.js +++ b/index.js @@ -65,9 +65,8 @@ const ScrollableTabView = React.createClass({ }, componentDidMount() { - setTimeout(() => { + this.setTimeout(() => { if (this.scrollView && Platform.OS === 'android') { - console.log("Scrolling to " + this.props.initialPage + " with containerWidth " + this.state.containerWidth); const x = this.props.initialPage * this.state.containerWidth; this.scrollView.scrollTo({ x, animated: false }); } From fc7b1c40c38e1c41f0bc6d47eb9cafb8171af77e Mon Sep 17 00:00:00 2001 From: Gianmarco Leone Date: Mon, 30 Jan 2017 10:15:10 +0100 Subject: [PATCH 17/34] Using both InteractionManager and timeout --- index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index 0da7561e..2f76ae63 100644 --- a/index.js +++ b/index.js @@ -65,11 +65,14 @@ const ScrollableTabView = React.createClass({ }, componentDidMount() { - this.setTimeout(() => { + const scrollFn = () => { if (this.scrollView && Platform.OS === 'android') { const x = this.props.initialPage * this.state.containerWidth; this.scrollView.scrollTo({ x, animated: false }); } + }; + this.setTimeout(() => { + InteractionManager.runAfterInteractions(scrollFn); }, 0); }, From 30789ebdf40efef575be2033976f8b545f7f5061 Mon Sep 17 00:00:00 2001 From: Sokovikov Date: Thu, 2 Feb 2017 16:01:01 +0400 Subject: [PATCH 18/34] 0.7.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5f5b0e00..5ec2adb7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-scrollable-tab-view", - "version": "0.7.1", + "version": "0.7.2", "description": "", "main": "index.js", "scripts": { From d7a6bddad2a9980527c0de4812fb9cff5993cc84 Mon Sep 17 00:00:00 2001 From: Eugene Sokovikov Date: Thu, 16 Feb 2017 12:42:34 +0400 Subject: [PATCH 19/34] Changing between tabs README --- README.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/README.md b/README.md index fc0c7acf..5b793e9c 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,28 @@ var App = React.createClass({ ``` To start you can just copy [DefaultTabBar](https://github.com/skv-headless/react-native-scrollable-tab-view/blob/master/DefaultTabBar.js). +## Changing between tabs + +You can change tabs programmatically. Just use `goToPage` method. + +``` +var App = React.createClass({ + render() { + return } + ref={(tabView) => { this.tabView = tabView; }} + > + My + favorite + project + this.tabView.goToPage(0)}> + Lets go back! + + ; + }, +}); +``` + ## Examples [SimpleExample](https://github.com/skv-headless/react-native-scrollable-tab-view/blob/master/examples/FacebookTabsExample/SimpleExample.js). From 212be9bbe5af2510a25351af01d31851cd80bcd6 Mon Sep 17 00:00:00 2001 From: Eugene Sokovikov Date: Thu, 16 Feb 2017 12:54:22 +0400 Subject: [PATCH 20/34] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5b793e9c..8ec16147 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ To start you can just copy [DefaultTabBar](https://github.com/skv-headless/react You can change tabs programmatically. Just use `goToPage` method. -``` +```javascript var App = React.createClass({ render() { return Date: Wed, 1 Mar 2017 21:45:53 +0200 Subject: [PATCH 21/34] RTL ScrollableTabBar support --- ScrollableTabBar.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/ScrollableTabBar.js b/ScrollableTabBar.js index 6a0f9fee..95855a76 100644 --- a/ScrollableTabBar.js +++ b/ScrollableTabBar.js @@ -8,6 +8,7 @@ const { Text, Platform, Dimensions, + I18nManager } = ReactNative; const Button = require('./Button'); @@ -157,10 +158,18 @@ const ScrollableTabBar = React.createClass({ bottom: 0, }; - const dynamicTabUnderline = { - left: this.state._leftTabUnderline, - width: this.state._widthTabUnderline, - }; + const dynamicTabUnderline = {}; + if(I18nManager.isRTL){ + dynamicTabUnderline = { + right: this.state._leftTabUnderline, + width: this.state._widthTabUnderline, + }; + }else{ + dynamicTabUnderline = { + left: this.state._leftTabUnderline, + width: this.state._widthTabUnderline, + }; + } return Date: Thu, 2 Mar 2017 12:29:59 +0200 Subject: [PATCH 22/34] Update code schema --- ScrollableTabBar.js | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/ScrollableTabBar.js b/ScrollableTabBar.js index 95855a76..30a8b205 100644 --- a/ScrollableTabBar.js +++ b/ScrollableTabBar.js @@ -158,18 +158,11 @@ const ScrollableTabBar = React.createClass({ bottom: 0, }; - const dynamicTabUnderline = {}; - if(I18nManager.isRTL){ - dynamicTabUnderline = { - right: this.state._leftTabUnderline, - width: this.state._widthTabUnderline, - }; - }else{ - dynamicTabUnderline = { - left: this.state._leftTabUnderline, - width: this.state._widthTabUnderline, - }; - } + const key = I18nManager.isRTL ? 'right' : 'left'; + const dynamicTabUnderline = { + [`${key}`]: this.state._leftTabUnderline, + width: this.state._widthTabUnderline + } return Date: Tue, 14 Mar 2017 23:57:18 +0100 Subject: [PATCH 23/34] avoid creating new object for each button --- DefaultTabBar.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/DefaultTabBar.js b/DefaultTabBar.js index 7ccd6d95..906b0c81 100644 --- a/DefaultTabBar.js +++ b/DefaultTabBar.js @@ -39,7 +39,7 @@ const DefaultTabBar = React.createClass({ const fontWeight = isTabActive ? 'bold' : 'normal'; return