From a5135fc04b41cb17456e5baac84cbb40dd47cf36 Mon Sep 17 00:00:00 2001 From: Omar Date: Sat, 5 Jan 2019 14:51:29 -0800 Subject: [PATCH] Import Contacts --- android/app/build.gradle | 1 + .../main/java/com/tagfer/MainApplication.java | 2 + android/settings.gradle | 2 + ios/Tagfer.xcodeproj/project.pbxproj | 432 ++++++++++++------ ios/Tagfer/Info.plist | 4 +- package-lock.json | 5 + package.json | 1 + src/components/lists/ContactImportListItem.js | 73 --- src/components/lists/ContactListItem.js | 61 +++ src/config/apiEndpoints.js | 4 + src/config/colors.json | 1 + src/config/router.js | 2 + src/locales/translations/en.json | 4 +- src/screens/auth/SignupScreen5.js | 227 +++++++++ 14 files changed, 608 insertions(+), 211 deletions(-) delete mode 100644 src/components/lists/ContactImportListItem.js create mode 100644 src/components/lists/ContactListItem.js create mode 100644 src/screens/auth/SignupScreen5.js diff --git a/android/app/build.gradle b/android/app/build.gradle index c157b36..e112598 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -137,6 +137,7 @@ android { } dependencies { + compile project(':react-native-contacts') compile project(':react-native-webview') compile project(':react-native-vector-icons') compile project(':react-native-gesture-handler') diff --git a/android/app/src/main/java/com/tagfer/MainApplication.java b/android/app/src/main/java/com/tagfer/MainApplication.java index a9221ba..544a5ff 100644 --- a/android/app/src/main/java/com/tagfer/MainApplication.java +++ b/android/app/src/main/java/com/tagfer/MainApplication.java @@ -3,6 +3,7 @@ package com.tagfer; import android.app.Application; import com.facebook.react.ReactApplication; +import com.rt2zz.reactnativecontacts.ReactNativeContacts; import com.reactnativecommunity.webview.RNCWebViewPackage; import com.oblador.vectoricons.VectorIconsPackage; import com.swmansion.gesturehandler.react.RNGestureHandlerPackage; @@ -27,6 +28,7 @@ public class MainApplication extends Application implements ReactApplication { protected List getPackages() { return Arrays.asList( new MainReactPackage(), + new ReactNativeContacts(), new RNCWebViewPackage(), new VectorIconsPackage(), new RNGestureHandlerPackage(), diff --git a/android/settings.gradle b/android/settings.gradle index 9d5e610..9e1189e 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,4 +1,6 @@ rootProject.name = 'Tagfer' +include ':react-native-contacts' +project(':react-native-contacts').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-contacts/android') include ':react-native-webview' project(':react-native-webview').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webview/android') include ':react-native-vector-icons' diff --git a/ios/Tagfer.xcodeproj/project.pbxproj b/ios/Tagfer.xcodeproj/project.pbxproj index 6dc2d45..85010ea 100644 --- a/ios/Tagfer.xcodeproj/project.pbxproj +++ b/ios/Tagfer.xcodeproj/project.pbxproj @@ -5,13 +5,18 @@ }; objectVersion = 46; objects = { + /* Begin PBXBuildFile section */ + 00703E436FE7412D82B8B2ED /* libRealmReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 35A364E2A9804D0FA6E9C2BD /* libRealmReact.a */; }; 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; }; 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; }; 00E356F31AD99517003FC87E /* TagferTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* TagferTests.m */; }; + 0446F832C7AD487A80B3E846 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4F118585274849369219BFCB /* Zocial.ttf */; }; + 054B5176D9D541119DF55198 /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3F803AC4AB4414E9AC91E62 /* libRNVectorIcons.a */; }; + 06C8DD01CFDB435EB4BEE3CD /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6C25D0FC266544929C701A89 /* MaterialIcons.ttf */; }; 11D1A2F320CAFA9E000508D9 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; }; 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; }; @@ -22,6 +27,7 @@ 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 */; }; + 1BF10613A6304DD5B4189358 /* libRCTContacts.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7093AEA19630406782486DB0 /* libRCTContacts.a */; }; 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; @@ -35,25 +41,21 @@ 2D16E6881FA4F8E400B85C8A /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D16E6891FA4F8E400B85C8A /* libReact.a */; }; 2DCD954D1E0B4F2C00145EB5 /* TagferTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* TagferTests.m */; }; 2DF0FFEE2056DD460020B375 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3EA31DF850E9000B6D8A /* libReact.a */; }; - 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; - ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; }; - 00703E436FE7412D82B8B2ED /* libRealmReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 35A364E2A9804D0FA6E9C2BD /* libRealmReact.a */; }; - 70DA5C2695334981A0240A1D /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BD99765C4D944D88DFB0C3D /* libc++.tbd */; }; - 840B2F4BA84C4F819BD96330 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = E76DD57CF0E846F0B388335E /* libz.tbd */; }; - C82C9AD575F240A5AAC7BD27 /* libRNGestureHandler.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F4AB2611A0B4CE5A9FD41C4 /* libRNGestureHandler.a */; }; - 054B5176D9D541119DF55198 /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D3F803AC4AB4414E9AC91E62 /* libRNVectorIcons.a */; }; 352FECA94AE843BA869FA7D9 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2D8A567E322246B4BEB9BFF3 /* Entypo.ttf */; }; - 682FE70E8BF1459990F7CEEB /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6084982B5FB04776AB51F562 /* EvilIcons.ttf */; }; - 9D589CB7979845E6B5306594 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A0DFBDDDC4B54403AD569E6C /* Feather.ttf */; }; - 973D9FD5F5624A0AA1A2028E /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B6A6C1EAC009435782F73933 /* FontAwesome.ttf */; }; - 7C2FD9C5AE014828B86818FE /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = DB6CE8411CF34300A2ED791F /* Foundation.ttf */; }; 3F8FE81467D4436983DEB534 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 37BE857FFF804A28981B46FB /* Ionicons.ttf */; }; + 682FE70E8BF1459990F7CEEB /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6084982B5FB04776AB51F562 /* EvilIcons.ttf */; }; + 70DA5C2695334981A0240A1D /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BD99765C4D944D88DFB0C3D /* libc++.tbd */; }; + 7C2FD9C5AE014828B86818FE /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = DB6CE8411CF34300A2ED791F /* Foundation.ttf */; }; + 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; + 840B2F4BA84C4F819BD96330 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = E76DD57CF0E846F0B388335E /* libz.tbd */; }; + 973D9FD5F5624A0AA1A2028E /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B6A6C1EAC009435782F73933 /* FontAwesome.ttf */; }; + 9D589CB7979845E6B5306594 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A0DFBDDDC4B54403AD569E6C /* Feather.ttf */; }; + AD3198E72354473C9CFBB5F9 /* libRNCWebView.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D20792500D4B45FCBCC640FE /* libRNCWebView.a */; }; + ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; }; + C82C9AD575F240A5AAC7BD27 /* libRNGestureHandler.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F4AB2611A0B4CE5A9FD41C4 /* libRNGestureHandler.a */; }; CCFF320D8D3B429E98A05055 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AC4E3A77FB9C4C96AC304034 /* MaterialCommunityIcons.ttf */; }; - 06C8DD01CFDB435EB4BEE3CD /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6C25D0FC266544929C701A89 /* MaterialIcons.ttf */; }; D9DE5DDB1B7D4D3A97259D9B /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F025858B6C364BB985AFD241 /* Octicons.ttf */; }; E42DCC4F98F24BC99A74B29B /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 05246261280A4D30B02BFE85 /* SimpleLineIcons.ttf */; }; - 0446F832C7AD487A80B3E846 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4F118585274849369219BFCB /* Zocial.ttf */; }; - AD3198E72354473C9CFBB5F9 /* libRNCWebView.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D20792500D4B45FCBCC640FE /* libRNCWebView.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -99,6 +101,41 @@ remoteGlobalIDString = 13B07F861A680F5B00A75B9A; remoteInfo = Tagfer; }; + 0715CF9A21DF118C004C7919 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 90515674F3834203B1DE6531 /* RCTContacts.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 1441618E1BD0A79300FA4F59; + remoteInfo = RCTContacts; + }; + 0715CF9D21DF118C004C7919 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5F8E09E191C84292BA09C78C /* RealmReact.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = F60690131CA2766F0003FB26; + remoteInfo = RealmReact; + }; + 0715CFA021DF118C004C7919 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A6904FF8C83444048D6F2AF5 /* RNCWebView.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RNCWebView; + }; + 0715CFA321DF118C004C7919 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D85798D39A3B49938F477F4D /* RNGestureHandler.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 134814201AA4EA6300B7C361; + remoteInfo = RNGestureHandler; + }; + 0715CFA621DF118C004C7919 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 2DACAA5CB9F345B5888D681E /* RNVectorIcons.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 5DBEB1501B18CEA900B34395; + remoteInfo = RNVectorIcons; + }; 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; @@ -342,6 +379,7 @@ 00E356EE1AD99517003FC87E /* TagferTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TagferTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 00E356F21AD99517003FC87E /* TagferTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TagferTests.m; sourceTree = ""; }; + 05246261280A4D30B02BFE85 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.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 /* Tagfer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Tagfer.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -355,31 +393,32 @@ 2D02E47B1E0B4A5D006451C7 /* Tagfer-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Tagfer-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 2D02E4901E0B4A5D006451C7 /* Tagfer-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Tagfer-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 2D16E6891FA4F8E400B85C8A /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 2D8A567E322246B4BEB9BFF3 /* 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 = ""; }; + 2DACAA5CB9F345B5888D681E /* 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 = ""; }; + 35A364E2A9804D0FA6E9C2BD /* libRealmReact.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRealmReact.a; sourceTree = ""; }; + 37BE857FFF804A28981B46FB /* 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 = ""; }; + 4BD99765C4D944D88DFB0C3D /* libc++.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; + 4F118585274849369219BFCB /* 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 = ""; }; + 4F4AB2611A0B4CE5A9FD41C4 /* libRNGestureHandler.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNGestureHandler.a; sourceTree = ""; }; 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; }; + 5F8E09E191C84292BA09C78C /* RealmReact.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RealmReact.xcodeproj; path = "../node_modules/realm/react-native/ios/RealmReact.xcodeproj"; sourceTree = ""; }; + 6084982B5FB04776AB51F562 /* 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 = ""; }; + 6C25D0FC266544929C701A89 /* 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 = ""; }; + 7093AEA19630406782486DB0 /* libRCTContacts.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRCTContacts.a; 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 = ""; }; + 90515674F3834203B1DE6531 /* RCTContacts.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RCTContacts.xcodeproj; path = "../node_modules/react-native-contacts/ios/RCTContacts.xcodeproj"; sourceTree = ""; }; + A0DFBDDDC4B54403AD569E6C /* Feather.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Feather.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = ""; }; + A6904FF8C83444048D6F2AF5 /* RNCWebView.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNCWebView.xcodeproj; path = "../node_modules/react-native-webview/ios/RNCWebView.xcodeproj"; sourceTree = ""; }; + AC4E3A77FB9C4C96AC304034 /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = ""; }; ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = ""; }; - 5F8E09E191C84292BA09C78C /* RealmReact.xcodeproj */ = {isa = PBXFileReference; name = "RealmReact.xcodeproj"; path = "../node_modules/realm/react-native/ios/RealmReact.xcodeproj"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; }; - 35A364E2A9804D0FA6E9C2BD /* libRealmReact.a */ = {isa = PBXFileReference; name = "libRealmReact.a"; path = "libRealmReact.a"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; - 4BD99765C4D944D88DFB0C3D /* libc++.tbd */ = {isa = PBXFileReference; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = sourcecode.text-based-dylib-definition; explicitFileType = undefined; includeInIndex = 0; }; - E76DD57CF0E846F0B388335E /* libz.tbd */ = {isa = PBXFileReference; name = "libz.tbd"; path = "usr/lib/libz.tbd"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = sourcecode.text-based-dylib-definition; explicitFileType = undefined; includeInIndex = 0; }; - D85798D39A3B49938F477F4D /* 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; }; - 4F4AB2611A0B4CE5A9FD41C4 /* libRNGestureHandler.a */ = {isa = PBXFileReference; name = "libRNGestureHandler.a"; path = "libRNGestureHandler.a"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; - 2DACAA5CB9F345B5888D681E /* 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; }; - D3F803AC4AB4414E9AC91E62 /* libRNVectorIcons.a */ = {isa = PBXFileReference; name = "libRNVectorIcons.a"; path = "libRNVectorIcons.a"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; - 2D8A567E322246B4BEB9BFF3 /* 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; }; - 6084982B5FB04776AB51F562 /* 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; }; - A0DFBDDDC4B54403AD569E6C /* Feather.ttf */ = {isa = PBXFileReference; name = "Feather.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - B6A6C1EAC009435782F73933 /* 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; }; - DB6CE8411CF34300A2ED791F /* 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; }; - 37BE857FFF804A28981B46FB /* 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; }; - AC4E3A77FB9C4C96AC304034 /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; name = "MaterialCommunityIcons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - 6C25D0FC266544929C701A89 /* 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; }; - F025858B6C364BB985AFD241 /* 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; }; - 05246261280A4D30B02BFE85 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; name = "SimpleLineIcons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - 4F118585274849369219BFCB /* 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; }; - A6904FF8C83444048D6F2AF5 /* RNCWebView.xcodeproj */ = {isa = PBXFileReference; name = "RNCWebView.xcodeproj"; path = "../node_modules/react-native-webview/ios/RNCWebView.xcodeproj"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; }; - D20792500D4B45FCBCC640FE /* libRNCWebView.a */ = {isa = PBXFileReference; name = "libRNCWebView.a"; path = "libRNCWebView.a"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; }; + B6A6C1EAC009435782F73933 /* 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 = ""; }; + D20792500D4B45FCBCC640FE /* libRNCWebView.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNCWebView.a; sourceTree = ""; }; + D3F803AC4AB4414E9AC91E62 /* libRNVectorIcons.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNVectorIcons.a; sourceTree = ""; }; + D85798D39A3B49938F477F4D /* RNGestureHandler.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNGestureHandler.xcodeproj; path = "../node_modules/react-native-gesture-handler/ios/RNGestureHandler.xcodeproj"; sourceTree = ""; }; + DB6CE8411CF34300A2ED791F /* 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 = ""; }; + E76DD57CF0E846F0B388335E /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; + F025858B6C364BB985AFD241 /* 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 = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -413,6 +452,7 @@ C82C9AD575F240A5AAC7BD27 /* libRNGestureHandler.a in Frameworks */, 054B5176D9D541119DF55198 /* libRNVectorIcons.a in Frameworks */, AD3198E72354473C9CFBB5F9 /* libRNCWebView.a in Frameworks */, + 1BF10613A6304DD5B4189358 /* libRCTContacts.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -501,6 +541,58 @@ name = "Supporting Files"; sourceTree = ""; }; + 0715CF6821DF1181004C7919 /* Recovered References */ = { + isa = PBXGroup; + children = ( + 35A364E2A9804D0FA6E9C2BD /* libRealmReact.a */, + 4F4AB2611A0B4CE5A9FD41C4 /* libRNGestureHandler.a */, + D3F803AC4AB4414E9AC91E62 /* libRNVectorIcons.a */, + D20792500D4B45FCBCC640FE /* libRNCWebView.a */, + 7093AEA19630406782486DB0 /* libRCTContacts.a */, + ); + name = "Recovered References"; + sourceTree = ""; + }; + 0715CF8F21DF118B004C7919 /* Products */ = { + isa = PBXGroup; + children = ( + 0715CFA721DF118C004C7919 /* libRNVectorIcons.a */, + ); + name = Products; + sourceTree = ""; + }; + 0715CF9121DF118B004C7919 /* Products */ = { + isa = PBXGroup; + children = ( + 0715CFA121DF118C004C7919 /* libRNCWebView.a */, + ); + name = Products; + sourceTree = ""; + }; + 0715CF9321DF118B004C7919 /* Products */ = { + isa = PBXGroup; + children = ( + 0715CF9E21DF118C004C7919 /* libRealmReact.a */, + ); + name = Products; + sourceTree = ""; + }; + 0715CF9521DF118B004C7919 /* Products */ = { + isa = PBXGroup; + children = ( + 0715CFA421DF118C004C7919 /* libRNGestureHandler.a */, + ); + name = Products; + sourceTree = ""; + }; + 0715CF9721DF118B004C7919 /* Products */ = { + isa = PBXGroup; + children = ( + 0715CF9B21DF118C004C7919 /* libRCTContacts.a */, + ); + name = Products; + sourceTree = ""; + }; 139105B71AF99BAD00B5F7CC /* Products */ = { isa = PBXGroup; children = ( @@ -605,6 +697,7 @@ D85798D39A3B49938F477F4D /* RNGestureHandler.xcodeproj */, 2DACAA5CB9F345B5888D681E /* RNVectorIcons.xcodeproj */, A6904FF8C83444048D6F2AF5 /* RNCWebView.xcodeproj */, + 90515674F3834203B1DE6531 /* RCTContacts.xcodeproj */, ); name = Libraries; sourceTree = ""; @@ -627,6 +720,7 @@ 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, EEC11838EA02439898BF7CB5 /* Resources */, + 0715CF6821DF1181004C7919 /* Recovered References */, ); indentWidth = 2; sourceTree = ""; @@ -654,7 +748,7 @@ sourceTree = ""; }; EEC11838EA02439898BF7CB5 /* Resources */ = { - isa = "PBXGroup"; + isa = PBXGroup; children = ( 2D8A567E322246B4BEB9BFF3 /* Entypo.ttf */, 6084982B5FB04776AB51F562 /* EvilIcons.ttf */, @@ -670,7 +764,6 @@ ); name = Resources; sourceTree = ""; - path = ""; }; /* End PBXGroup section */ @@ -795,6 +888,10 @@ ProductGroup = ADBDB9201DFEBF0600ED6528 /* Products */; ProjectRef = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; }, + { + ProductGroup = 0715CF9721DF118B004C7919 /* Products */; + ProjectRef = 90515674F3834203B1DE6531 /* RCTContacts.xcodeproj */; + }, { ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; @@ -831,6 +928,22 @@ ProductGroup = 146834001AC3E56700842450 /* Products */; ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; }, + { + ProductGroup = 0715CF9321DF118B004C7919 /* Products */; + ProjectRef = 5F8E09E191C84292BA09C78C /* RealmReact.xcodeproj */; + }, + { + ProductGroup = 0715CF9121DF118B004C7919 /* Products */; + ProjectRef = A6904FF8C83444048D6F2AF5 /* RNCWebView.xcodeproj */; + }, + { + ProductGroup = 0715CF9521DF118B004C7919 /* Products */; + ProjectRef = D85798D39A3B49938F477F4D /* RNGestureHandler.xcodeproj */; + }, + { + ProductGroup = 0715CF8F21DF118B004C7919 /* Products */; + ProjectRef = 2DACAA5CB9F345B5888D681E /* RNVectorIcons.xcodeproj */; + }, ); projectRoot = ""; targets = ( @@ -878,6 +991,41 @@ remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; + 0715CF9B21DF118C004C7919 /* libRCTContacts.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRCTContacts.a; + remoteRef = 0715CF9A21DF118C004C7919 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 0715CF9E21DF118C004C7919 /* libRealmReact.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRealmReact.a; + remoteRef = 0715CF9D21DF118C004C7919 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 0715CFA121DF118C004C7919 /* libRNCWebView.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNCWebView.a; + remoteRef = 0715CFA021DF118C004C7919 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 0715CFA421DF118C004C7919 /* libRNGestureHandler.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNGestureHandler.a; + remoteRef = 0715CFA321DF118C004C7919 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 0715CFA721DF118C004C7919 /* libRNVectorIcons.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libRNVectorIcons.a; + remoteRef = 0715CFA621DF118C004C7919 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; @@ -1251,9 +1399,25 @@ "DEBUG=1", "$(inherited)", ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/realm/src/**", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-contacts/ios/RCTContacts", + ); INFOPLIST_FILE = TagferTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); OTHER_LDFLAGS = ( "-ObjC", "-lc++", @@ -1261,20 +1425,6 @@ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Tagfer.app/Tagfer"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/../node_modules/realm/src/**", - "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", - "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", - "$(SRCROOT)/../node_modules/react-native-webview/ios", - ); }; name = Debug; }; @@ -1283,9 +1433,25 @@ buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COPY_PHASE_STRIP = NO; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/realm/src/**", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-contacts/ios/RCTContacts", + ); INFOPLIST_FILE = TagferTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); OTHER_LDFLAGS = ( "-ObjC", "-lc++", @@ -1293,20 +1459,6 @@ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Tagfer.app/Tagfer"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/../node_modules/realm/src/**", - "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", - "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", - "$(SRCROOT)/../node_modules/react-native-webview/ios", - ); }; name = Release; }; @@ -1316,6 +1468,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = NO; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/realm/src/**", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-contacts/ios/RCTContacts", + ); INFOPLIST_FILE = Tagfer/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( @@ -1326,13 +1486,6 @@ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Tagfer; VERSIONING_SYSTEM = "apple-generic"; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/../node_modules/realm/src/**", - "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", - "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", - "$(SRCROOT)/../node_modules/react-native-webview/ios", - ); }; name = Debug; }; @@ -1341,6 +1494,14 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CURRENT_PROJECT_VERSION = 1; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/realm/src/**", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-contacts/ios/RCTContacts", + ); INFOPLIST_FILE = Tagfer/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( @@ -1351,13 +1512,6 @@ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = Tagfer; VERSIONING_SYSTEM = "apple-generic"; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/../node_modules/realm/src/**", - "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", - "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", - "$(SRCROOT)/../node_modules/react-native-webview/ios", - ); }; name = Release; }; @@ -1373,8 +1527,24 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_TESTABILITY = YES; GCC_NO_COMMON_BLOCKS = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/realm/src/**", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-contacts/ios/RCTContacts", + ); INFOPLIST_FILE = "Tagfer-tvOS/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); OTHER_LDFLAGS = ( "-ObjC", "-lc++", @@ -1384,20 +1554,6 @@ SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.2; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/../node_modules/realm/src/**", - "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", - "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", - "$(SRCROOT)/../node_modules/react-native-webview/ios", - ); }; name = Debug; }; @@ -1413,8 +1569,24 @@ COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_NO_COMMON_BLOCKS = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/realm/src/**", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-contacts/ios/RCTContacts", + ); INFOPLIST_FILE = "Tagfer-tvOS/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); OTHER_LDFLAGS = ( "-ObjC", "-lc++", @@ -1424,20 +1596,6 @@ SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 9.2; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/../node_modules/realm/src/**", - "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", - "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", - "$(SRCROOT)/../node_modules/react-native-webview/ios", - ); }; name = Release; }; @@ -1452,8 +1610,24 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_TESTABILITY = YES; GCC_NO_COMMON_BLOCKS = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/realm/src/**", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-contacts/ios/RCTContacts", + ); INFOPLIST_FILE = "Tagfer-tvOSTests/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); OTHER_LDFLAGS = ( "-ObjC", "-lc++", @@ -1463,20 +1637,6 @@ SDKROOT = appletvos; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Tagfer-tvOS.app/Tagfer-tvOS"; TVOS_DEPLOYMENT_TARGET = 10.1; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/../node_modules/realm/src/**", - "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", - "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", - "$(SRCROOT)/../node_modules/react-native-webview/ios", - ); }; name = Debug; }; @@ -1491,8 +1651,24 @@ COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_NO_COMMON_BLOCKS = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/realm/src/**", + "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + "$(SRCROOT)/../node_modules/react-native-webview/ios", + "$(SRCROOT)/../node_modules/react-native-contacts/ios/RCTContacts", + ); INFOPLIST_FILE = "Tagfer-tvOSTests/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); OTHER_LDFLAGS = ( "-ObjC", "-lc++", @@ -1502,20 +1678,6 @@ SDKROOT = appletvos; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Tagfer-tvOS.app/Tagfer-tvOS"; TVOS_DEPLOYMENT_TARGET = 10.1; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/../node_modules/realm/src/**", - "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", - "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", - "$(SRCROOT)/../node_modules/react-native-webview/ios", - ); }; name = Release; }; diff --git a/ios/Tagfer/Info.plist b/ios/Tagfer/Info.plist index 8790119..ff58dca 100644 --- a/ios/Tagfer/Info.plist +++ b/ios/Tagfer/Info.plist @@ -2,6 +2,8 @@ + NSContactsUsageDescription + Allow the user to search for his phone contacts in network CFBundleDevelopmentRegion en CFBundleDisplayName @@ -25,7 +27,7 @@ LSRequiresIPhoneOS NSLocationWhenInUseUsageDescription - + UILaunchStoryboardName LaunchScreen UIRequiredDeviceCapabilities diff --git a/package-lock.json b/package-lock.json index 34d3318..967f41e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8523,6 +8523,11 @@ "yargs": "^9.0.0" } }, + "react-native-contacts": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/react-native-contacts/-/react-native-contacts-2.2.5.tgz", + "integrity": "sha512-yorPL9PS/g3lKIczZZ18s+LI2+tPHfudsAwuEKA63VB0YteBb5Rz2NnMmBzvI3bRdvNgzzXoCPwxOzAHL0tt1g==" + }, "react-native-country-picker-modal": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/react-native-country-picker-modal/-/react-native-country-picker-modal-0.6.2.tgz", diff --git a/package.json b/package.json index df55e6f..463dd18 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "i18n-js": "^3.1.0", "react": "16.6.3", "react-native": "0.57.8", + "react-native-contacts": "^2.2.5", "react-native-country-picker-modal": "^0.6.2", "react-native-elements": "^0.19.1", "react-native-flash-message": "^0.1.10", diff --git a/src/components/lists/ContactImportListItem.js b/src/components/lists/ContactImportListItem.js deleted file mode 100644 index ee8f430..0000000 --- a/src/components/lists/ContactImportListItem.js +++ /dev/null @@ -1,73 +0,0 @@ -/** Pure component for each Contact Import Item **/ -import React from 'react'; -import { Image } from 'react-native'; -import { CheckBox, ListItem } from 'react-native-elements'; -import colors from '../../config/colors.json'; - -class ContactImportListItem extends React.PureComponent { - /** - * Render method - **/ - render() { - const { isChecked, item, onPress } = this.props; - - const title = `${item.fullName}`; - const subTitle = `${item.jobTitle} ${item.company}`; - - if (item.contactAvatarImg) { - return ( - - } - onPress={onPress} - rightIcon={ - - } - /> - ); - } - - return ( - - } - /> - ); - } -} - -const styles = { - avatarImageStyle: { - width: 40, - height: 40, - borderWidth: 1, - borderRadius: 20, - marginLeft: 5, - marginRight: 10 - } -}; - -export default ContactImportListItem; diff --git a/src/components/lists/ContactListItem.js b/src/components/lists/ContactListItem.js new file mode 100644 index 0000000..63681b2 --- /dev/null +++ b/src/components/lists/ContactListItem.js @@ -0,0 +1,61 @@ +import React from 'react'; +import { CheckBox, ListItem, Avatar } from 'react-native-elements'; + +import colors from '../../config/colors.json'; +import { isEmpty } from '../../utils/aux'; + +const ContactListItem = ({ contact, selected, onPress }) => { + const { givenName, familyName, phoneNumbers } = contact; + const fullName = `${contact.givenName} ${contact.familyName}`; + + return ( + } + title={fullName} + subtitle={phoneNumbers.length !== 0 ? phoneNumbers[0].number : ''} + subtitleStyle={{ fontSize: 12, fontWeight: 'normal' }} + titleStyle={{ fontSize: 18, color: colors.black }} + rightIcon={} + containerStyle={{ backgroundColor: colors.white }} + /> + ); +}; + +const TagferCheckbox = ({ isChecked, onPress }) => ( + +); + +const TagferAvatar = ({ firstName, lastName }) => { + let initials = ''; + if (!isEmpty(firstName)) { + initials += firstName[0]; + } + + if (!isEmpty(lastName)) { + initials += lastName[0]; + } + + return ( + + ); +}; + +export default ContactListItem; diff --git a/src/config/apiEndpoints.js b/src/config/apiEndpoints.js index cdcefc1..f828865 100644 --- a/src/config/apiEndpoints.js +++ b/src/config/apiEndpoints.js @@ -27,6 +27,10 @@ const endpoints = { verifyCode: { method: 'POST', url: `${baseurl}/auth/phone/verify` + }, + findUsersByPhone: { + method: 'POST', + url: `${baseurl}/users/by/phone` } }; diff --git a/src/config/colors.json b/src/config/colors.json index a060fd5..1fba15a 100644 --- a/src/config/colors.json +++ b/src/config/colors.json @@ -6,6 +6,7 @@ "darkGrey": "#535353", "darkOrange": "#FBBF35", "faintGreen": "#DDEEDD", + "addGreen": "#00E62E", "green": "#4CD964", "grey": "#7D7D7D", "greyBlue": "#8699A7", diff --git a/src/config/router.js b/src/config/router.js index 9eaaf5c..445faff 100644 --- a/src/config/router.js +++ b/src/config/router.js @@ -5,6 +5,7 @@ import SignupScreenOne from '../screens/auth/SignupScreen1'; import SignupScreenTwo from '../screens/auth/SignupScreen2'; import SignupScreenThreeA from '../screens/auth/SignupScreen3a'; import SignupScreenThreeB from '../screens/auth/SignupScreen3b'; +import SignupScreenFive from '../screens/auth/SignupScreen5'; import TwitterWebView from '../screens/auth/TwitterWebView'; import ForgotPasswordScreen from '../screens/auth/ForgotPasswordScreen'; @@ -16,6 +17,7 @@ const MainNavigator = createStackNavigator({ signup2: SignupScreenTwo, signup3a: SignupScreenThreeA, signup3b: SignupScreenThreeB, + signup5: SignupScreenFive }); const RootNavigator = createStackNavigator( diff --git a/src/locales/translations/en.json b/src/locales/translations/en.json index 6789c5b..d7005e0 100644 --- a/src/locales/translations/en.json +++ b/src/locales/translations/en.json @@ -197,10 +197,10 @@ "createScreen_title": "Add Contact", "editScreen_title": "Edit Contact", "editScreen_textButton": "Text Contact", - "importScreen_description": "Import your contacts, friends, and family now. After you create your profile you can invite them to join your Tagfer network. Your contacts will be on the Blockchain for you to manage and ONLY you will have access to them. The more trusted contacts you have in your network, the more Tagfer can help you harness your net worth.", + "importScreen_description": "Invite your contacts from you phone onto Tagfer. The more trusted contacts you have, we can help you harness your networth.", "importScreen_noContacts": "We didn't find any new contacts to import.", "importScreen_startButton": "Import", - "importScreen_title": "Import Phone Contacts", + "importScreen_title": "Find your network", "importScreen_warning": "This may take awhile depending on the number of contacts you have. Are you sure?", "listAllScreen_title": "All", "mainScreen_title": "Contacts", diff --git a/src/screens/auth/SignupScreen5.js b/src/screens/auth/SignupScreen5.js new file mode 100644 index 0000000..e5cedd7 --- /dev/null +++ b/src/screens/auth/SignupScreen5.js @@ -0,0 +1,227 @@ +import React from 'react'; +import { Alert, Linking, Dimensions, Text, View, FlatList, TouchableOpacity } from 'react-native'; +import { Button, CheckBox } from 'react-native-elements'; +import Contacts from 'react-native-contacts'; + +import { strings } from '../../locales/i18n'; +import { fetchAuth } from '../../utils/fetch'; + +import colors from '../../config/colors.json'; +import errors from '../../config/errors'; +import endpoints from '../../config/apiEndpoints'; +import ContactListItem from '../../components/lists/ContactListItem'; + + +export default class SignupScreenFive extends React.Component { + static navigationOptions = { + title: strings('contact.importScreen_title'), + headerStyle: { borderBottomWidth: 0, backgroundColor: colors.offWhite }, + headerTintColor: '#0D497E', + headerRight: 5/6 + }; + + constructor(props) { + super(props); + this.state = { + allContacts: [], + selectedContacts: new Map() + }; + + this.onSelectAll = this.onSelectAll.bind(this); + this.fetchContactsIOS(); + } + + // Handles when the user presses on the select all button + onSelectAll() { + const { allContacts } = this.state; + const selectedContacts = new Map(); + if (this.state.selectedContacts.size === 0) { + for (let i = 0; i < allContacts.length; i++) { + selectedContacts.set(i, allContacts[i].phoneNumbers); + } + } + + this.setState({ selectedContacts }); + } + + // When a user clicks on a single contact + onSelectContact(index) { + this.setState((state) => { + const selectedContacts = new Map(state.selectedContacts); + if (selectedContacts.has(index)) { + selectedContacts.delete(index); + } else { + const phoneNumbers = this.state.allContacts[index].phoneNumbers; + selectedContacts.set(index, phoneNumbers); + } + + return { selectedContacts }; + }); + } + + // Sends the request and navigates the user to next page. + onSaveButtonPress() { + const { selectedContacts } = this.state; + const phoneNumbers = []; + for (const record of selectedContacts.values()) { + phoneNumbers.push(...record.map(entry => entry.number)); + } + + fetchAuth(endpoints.findUsersByPhone, { contacts: phoneNumbers }) + .then(res => console.log(res)) + .catch(() => console.log(errors.APP_NETWORK_ERROR)); + + this.props.navigation.navigate('signup6'); + } + + // BEGIN: iOS Contacts Handlers + getContacts() { + Contacts.getAllWithoutPhotos((error, contacts) => { + if (error) { + this.props.navigation.navigate('signup6'); + } else { + const selectedContacts = new Map(); + for (let i = 0; i < contacts.length; i++) { + selectedContacts.set(i, contacts[i].phoneNumbers); + } + + this.setState({ allContacts: contacts, selectedContacts }); + } + }); + } + + createSettingsAlert() { + Alert.alert( + 'Tagfer does not have access to your contacts', + 'To enable access, tap Settings and turn on Contacts', + [ + { text: 'Cancel', onPress: () => this.props.navigation.navigate('signup6') }, + { text: 'Settings', onPress: () => Linking.openURL('app-settings:') } + ] + ); + } + + fetchContactsIOS() { + Contacts.checkPermission((error, permission) => { + if (error) this.props.navigation.navigate('signup6'); + + if (permission === 'denied') { + this.createSettingsAlert(); + } else { + this.getContacts(); + } + }); + } + // END: iOS Handlers + + renderItem(contact, index) { + const selected = this.state.selectedContacts.has(index); + return this.onSelectContact(index)} />; + } + + render() { + return ( + + {/* INSTRUCTIONS */} + {strings('contact.importScreen_description')} + + {/* FLAT LIST OF CONTACTS */} + this.props.navigation.navigate('signup6')} />} + data={this.state.allContacts} + extraData={this.state} + renderItem={({ item, index }) => this.renderItem(item, index)} + keyExtractor={(item) => item.recordID} + style={{ flex: 1, marginHorizontal: 10 }} + /> + + {/* SAVE AND CONTINUE BUTTON */} +