Merge pull request #53 from esteemapp/merge/navigation-profile

Profile Screen (main branch from navigation)
This commit is contained in:
Feruz M 2018-10-09 18:38:53 +03:00 committed by GitHub
commit fc3336e251
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
97 changed files with 4906 additions and 4115 deletions

View File

@ -137,6 +137,7 @@ android {
}
dependencies {
compile project(':react-native-linear-gradient')
compile project(':realm')
compile project(':react-native-vector-icons')
compile project(':react-native-restart')

View File

@ -3,6 +3,7 @@ package com.esteem;
import android.app.Application;
import com.facebook.react.ReactApplication;
import com.BV.LinearGradient.LinearGradientPackage;
import io.realm.react.RealmReactPackage;
import com.oblador.vectoricons.VectorIconsPackage;
import com.avishayil.rnrestart.ReactNativeRestartPackage;
@ -27,6 +28,7 @@ public class MainApplication extends Application implements ReactApplication {
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new LinearGradientPackage(),
new RealmReactPackage(),
new VectorIconsPackage(),
new ReactNativeRestartPackage(),

View File

@ -1,4 +1,6 @@
rootProject.name = 'esteem'
include ':react-native-linear-gradient'
project(':react-native-linear-gradient').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-linear-gradient/android')
include ':realm'
project(':realm').projectDir = new File(rootProject.projectDir, '../node_modules/realm/android')
include ':react-native-vector-icons'

View File

@ -13,6 +13,7 @@
00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; };
00E356F31AD99517003FC87E /* esteemTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* esteemTests.m */; };
11D1A2F320CAFA9E000508D9 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
12085D907BCF4310AE841EB9 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B242092C489E46F489763E94 /* Feather.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 */; };
@ -22,6 +23,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 */; };
1FD6AD382A1C40938E1A4F4E /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D4E71579126B447188B83123 /* Octicons.ttf */; };
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,27 +37,26 @@
2D16E6881FA4F8E400B85C8A /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D16E6891FA4F8E400B85C8A /* libReact.a */; };
2DCD954D1E0B4F2C00145EB5 /* esteemTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* esteemTests.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 */; };
5A970712B67D4D3E880FACF7 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 60B8ECE2B75A41409C5E7345 /* SimpleLineIcons.ttf */; };
620157480AC0446384C486A5 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C3C604F08F154AB7BB7781A8 /* Foundation.ttf */; };
62D327BAA2D142E4A9EC55F4 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5AC4147E86084FBA8814BCE9 /* MaterialIcons.ttf */; };
6CE8C7F361F44C63BBBAE1E9 /* libBVLinearGradient.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6EDDDE364E5C4508B16ED939 /* libBVLinearGradient.a */; };
789EA10E61C845E0BB2EC9D3 /* libFastImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C9EDC249E2B441C984F426D1 /* libFastImage.a */; };
7C38F7E48880400891592857 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5FD4DA409A1C42EB89B6F3BC /* MaterialCommunityIcons.ttf */; };
8134509F8F3548E6A46AE80F /* rubicon-icon-font.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5D5AB59069724329806D80E2 /* rubicon-icon-font.ttf */; };
832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
89E87D4D15E3405CAAABC8DB /* Roboto_medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2CB7FEA66264445A9035FB51 /* Roboto_medium.ttf */; };
8DDFF3D8476F4862B118D572 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F85E524A382E4A6A957E771B /* EvilIcons.ttf */; };
9CE84579A16E4530ACB21BE3 /* libRCTRestart.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DCAC90A21B43431A84847EBC /* libRCTRestart.a */; };
A4D99EE97F504E04ADAC2AE7 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BFB50DC91BBC4BDD95A818FD /* Entypo.ttf */; };
A58AFEDD1A994E5D85792786 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B3581C9185843E386F8226D /* libc++.tbd */; };
AAFABA2977754B7A8A966F38 /* Roboto.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CBFA1E890EF94235B811F694 /* Roboto.ttf */; };
ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; };
CC18270D8A144D8BB1B92074 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 798FE1CBDA064EBDA4CD12C3 /* FontAwesome.ttf */; };
D667736551DF47A7925EDFB7 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F1B7D17736AC464DA683AB3A /* Ionicons.ttf */; };
DA84410F09C648E99513F11C /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A0E703B1D82B464482AAD10D /* libRNVectorIcons.a */; };
E41F2366F3EA43FD9B22CEFE /* libRealmReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 218B93019DD44DA89C47CD00 /* libRealmReact.a */; };
A58AFEDD1A994E5D85792786 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B3581C9185843E386F8226D /* libc++.tbd */; };
E4910A11500840519C89B56C /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CEE09FF1C1A4339A61091F2 /* libz.tbd */; };
A4D99EE97F504E04ADAC2AE7 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BFB50DC91BBC4BDD95A818FD /* Entypo.ttf */; };
8DDFF3D8476F4862B118D572 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F85E524A382E4A6A957E771B /* EvilIcons.ttf */; };
12085D907BCF4310AE841EB9 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B242092C489E46F489763E94 /* Feather.ttf */; };
CC18270D8A144D8BB1B92074 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 798FE1CBDA064EBDA4CD12C3 /* FontAwesome.ttf */; };
620157480AC0446384C486A5 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C3C604F08F154AB7BB7781A8 /* Foundation.ttf */; };
D667736551DF47A7925EDFB7 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F1B7D17736AC464DA683AB3A /* Ionicons.ttf */; };
7C38F7E48880400891592857 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5FD4DA409A1C42EB89B6F3BC /* MaterialCommunityIcons.ttf */; };
62D327BAA2D142E4A9EC55F4 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5AC4147E86084FBA8814BCE9 /* MaterialIcons.ttf */; };
1FD6AD382A1C40938E1A4F4E /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D4E71579126B447188B83123 /* Octicons.ttf */; };
89E87D4D15E3405CAAABC8DB /* Roboto_medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2CB7FEA66264445A9035FB51 /* Roboto_medium.ttf */; };
AAFABA2977754B7A8A966F38 /* Roboto.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CBFA1E890EF94235B811F694 /* Roboto.ttf */; };
8134509F8F3548E6A46AE80F /* rubicon-icon-font.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5D5AB59069724329806D80E2 /* rubicon-icon-font.ttf */; };
5A970712B67D4D3E880FACF7 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 60B8ECE2B75A41409C5E7345 /* SimpleLineIcons.ttf */; };
FE4AFF7DBCC14A01A1221E15 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6B1C085C089045A38BB6F760 /* Zocial.ttf */; };
/* End PBXBuildFile section */
@ -298,6 +299,48 @@
remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4;
remoteInfo = "jschelpers-tvOS";
};
47C7F1532167EB8A0095C133 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = A478B598576048B99C164A52 /* BVLinearGradient.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 134814201AA4EA6300B7C361;
remoteInfo = BVLinearGradient;
};
47C7F1552167EB8A0095C133 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = A478B598576048B99C164A52 /* BVLinearGradient.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 64AA15081EF7F30100718508;
remoteInfo = "BVLinearGradient-tvOS";
};
47C7F1582167EB8A0095C133 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 24CEB0A6D57C4A038E1DB75A /* RCTRestart.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 3245CDED1BFEE35C00EABF68;
remoteInfo = RCTRestart;
};
47C7F15B2167EB8A0095C133 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 2EFB1ECFDD9C4D4DBF153260 /* RealmReact.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = F60690131CA2766F0003FB26;
remoteInfo = RealmReact;
};
47C7F1612167EB8A0095C133 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = D8FE25B09BFD479994B879E8 /* RNVectorIcons.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 5DBEB1501B18CEA900B34395;
remoteInfo = RNVectorIcons;
};
47C7F1662167EB8A0095C133 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 671E67B1E9D345C2A7483C90 /* FastImage.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = A287971D1DE0C0A60081BDFA;
remoteInfo = FastImage;
};
5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
@ -355,37 +398,39 @@
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = esteem/Info.plist; sourceTree = "<group>"; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = esteem/main.m; sourceTree = "<group>"; };
146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = "<group>"; };
1CEE09FF1C1A4339A61091F2 /* 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; };
218B93019DD44DA89C47CD00 /* libRealmReact.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRealmReact.a; sourceTree = "<group>"; };
24CEB0A6D57C4A038E1DB75A /* RCTRestart.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RCTRestart.xcodeproj; path = "../node_modules/react-native-restart/ios/RCTRestart.xcodeproj"; sourceTree = "<group>"; };
2CB7FEA66264445A9035FB51 /* Roboto_medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Roboto_medium.ttf; path = "../node_modules/native-base/Fonts/Roboto_medium.ttf"; sourceTree = "<group>"; };
2D02E47B1E0B4A5D006451C7 /* esteem-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "esteem-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
2D02E4901E0B4A5D006451C7 /* esteem-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "esteem-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
2D16E6891FA4F8E400B85C8A /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; };
2EFB1ECFDD9C4D4DBF153260 /* 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 = "<group>"; };
5AC4147E86084FBA8814BCE9 /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/native-base/Fonts/MaterialIcons.ttf"; sourceTree = "<group>"; };
5D5AB59069724329806D80E2 /* rubicon-icon-font.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "rubicon-icon-font.ttf"; path = "../node_modules/native-base/Fonts/rubicon-icon-font.ttf"; sourceTree = "<group>"; };
5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = "<group>"; };
5FD4DA409A1C42EB89B6F3BC /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/native-base/Fonts/MaterialCommunityIcons.ttf"; sourceTree = "<group>"; };
60B8ECE2B75A41409C5E7345 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/native-base/Fonts/SimpleLineIcons.ttf"; sourceTree = "<group>"; };
671E67B1E9D345C2A7483C90 /* FastImage.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = FastImage.xcodeproj; path = "../node_modules/react-native-fast-image/ios/FastImage.xcodeproj"; sourceTree = "<group>"; };
6B1C085C089045A38BB6F760 /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/native-base/Fonts/Zocial.ttf"; sourceTree = "<group>"; };
6B3581C9185843E386F8226D /* 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; };
6EDDDE364E5C4508B16ED939 /* libBVLinearGradient.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libBVLinearGradient.a; sourceTree = "<group>"; };
78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = "<group>"; };
798FE1CBDA064EBDA4CD12C3 /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/native-base/Fonts/FontAwesome.ttf"; sourceTree = "<group>"; };
832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = "<group>"; };
A0E703B1D82B464482AAD10D /* libRNVectorIcons.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNVectorIcons.a; sourceTree = "<group>"; };
A478B598576048B99C164A52 /* BVLinearGradient.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = BVLinearGradient.xcodeproj; path = "../node_modules/react-native-linear-gradient/BVLinearGradient.xcodeproj"; sourceTree = "<group>"; };
ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = "<group>"; };
671E67B1E9D345C2A7483C90 /* FastImage.xcodeproj */ = {isa = PBXFileReference; name = "FastImage.xcodeproj"; path = "../node_modules/react-native-fast-image/ios/FastImage.xcodeproj"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; };
C9EDC249E2B441C984F426D1 /* libFastImage.a */ = {isa = PBXFileReference; name = "libFastImage.a"; path = "libFastImage.a"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; };
24CEB0A6D57C4A038E1DB75A /* RCTRestart.xcodeproj */ = {isa = PBXFileReference; name = "RCTRestart.xcodeproj"; path = "../node_modules/react-native-restart/ios/RCTRestart.xcodeproj"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; };
DCAC90A21B43431A84847EBC /* libRCTRestart.a */ = {isa = PBXFileReference; name = "libRCTRestart.a"; path = "libRCTRestart.a"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; };
D8FE25B09BFD479994B879E8 /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; name = "RNVectorIcons.xcodeproj"; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; };
A0E703B1D82B464482AAD10D /* libRNVectorIcons.a */ = {isa = PBXFileReference; name = "libRNVectorIcons.a"; path = "libRNVectorIcons.a"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; };
2EFB1ECFDD9C4D4DBF153260 /* RealmReact.xcodeproj */ = {isa = PBXFileReference; name = "RealmReact.xcodeproj"; path = "../node_modules/realm/react-native/ios/RealmReact.xcodeproj"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; };
218B93019DD44DA89C47CD00 /* libRealmReact.a */ = {isa = PBXFileReference; name = "libRealmReact.a"; path = "libRealmReact.a"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; };
6B3581C9185843E386F8226D /* 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; };
1CEE09FF1C1A4339A61091F2 /* 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; };
BFB50DC91BBC4BDD95A818FD /* Entypo.ttf */ = {isa = PBXFileReference; name = "Entypo.ttf"; path = "../node_modules/native-base/Fonts/Entypo.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
F85E524A382E4A6A957E771B /* EvilIcons.ttf */ = {isa = PBXFileReference; name = "EvilIcons.ttf"; path = "../node_modules/native-base/Fonts/EvilIcons.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
B242092C489E46F489763E94 /* Feather.ttf */ = {isa = PBXFileReference; name = "Feather.ttf"; path = "../node_modules/native-base/Fonts/Feather.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
798FE1CBDA064EBDA4CD12C3 /* FontAwesome.ttf */ = {isa = PBXFileReference; name = "FontAwesome.ttf"; path = "../node_modules/native-base/Fonts/FontAwesome.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
C3C604F08F154AB7BB7781A8 /* Foundation.ttf */ = {isa = PBXFileReference; name = "Foundation.ttf"; path = "../node_modules/native-base/Fonts/Foundation.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
F1B7D17736AC464DA683AB3A /* Ionicons.ttf */ = {isa = PBXFileReference; name = "Ionicons.ttf"; path = "../node_modules/native-base/Fonts/Ionicons.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
5FD4DA409A1C42EB89B6F3BC /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; name = "MaterialCommunityIcons.ttf"; path = "../node_modules/native-base/Fonts/MaterialCommunityIcons.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
5AC4147E86084FBA8814BCE9 /* MaterialIcons.ttf */ = {isa = PBXFileReference; name = "MaterialIcons.ttf"; path = "../node_modules/native-base/Fonts/MaterialIcons.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
D4E71579126B447188B83123 /* Octicons.ttf */ = {isa = PBXFileReference; name = "Octicons.ttf"; path = "../node_modules/native-base/Fonts/Octicons.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
2CB7FEA66264445A9035FB51 /* Roboto_medium.ttf */ = {isa = PBXFileReference; name = "Roboto_medium.ttf"; path = "../node_modules/native-base/Fonts/Roboto_medium.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
CBFA1E890EF94235B811F694 /* Roboto.ttf */ = {isa = PBXFileReference; name = "Roboto.ttf"; path = "../node_modules/native-base/Fonts/Roboto.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
5D5AB59069724329806D80E2 /* rubicon-icon-font.ttf */ = {isa = PBXFileReference; name = "rubicon-icon-font.ttf"; path = "../node_modules/native-base/Fonts/rubicon-icon-font.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
60B8ECE2B75A41409C5E7345 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; name = "SimpleLineIcons.ttf"; path = "../node_modules/native-base/Fonts/SimpleLineIcons.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
6B1C085C089045A38BB6F760 /* Zocial.ttf */ = {isa = PBXFileReference; name = "Zocial.ttf"; path = "../node_modules/native-base/Fonts/Zocial.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
B242092C489E46F489763E94 /* Feather.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Feather.ttf; path = "../node_modules/native-base/Fonts/Feather.ttf"; sourceTree = "<group>"; };
BFB50DC91BBC4BDD95A818FD /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/native-base/Fonts/Entypo.ttf"; sourceTree = "<group>"; };
C3C604F08F154AB7BB7781A8 /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/native-base/Fonts/Foundation.ttf"; sourceTree = "<group>"; };
C9EDC249E2B441C984F426D1 /* libFastImage.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libFastImage.a; sourceTree = "<group>"; };
CBFA1E890EF94235B811F694 /* Roboto.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Roboto.ttf; path = "../node_modules/native-base/Fonts/Roboto.ttf"; sourceTree = "<group>"; };
D4E71579126B447188B83123 /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/native-base/Fonts/Octicons.ttf"; sourceTree = "<group>"; };
D8FE25B09BFD479994B879E8 /* 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 = "<group>"; };
DCAC90A21B43431A84847EBC /* libRCTRestart.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRCTRestart.a; sourceTree = "<group>"; };
F1B7D17736AC464DA683AB3A /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/native-base/Fonts/Ionicons.ttf"; sourceTree = "<group>"; };
F85E524A382E4A6A957E771B /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/native-base/Fonts/EvilIcons.ttf"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -419,6 +464,7 @@
E41F2366F3EA43FD9B22CEFE /* libRealmReact.a in Frameworks */,
A58AFEDD1A994E5D85792786 /* libc++.tbd in Frameworks */,
E4910A11500840519C89B56C /* libz.tbd in Frameworks */,
6CE8C7F361F44C63BBBAE1E9 /* libBVLinearGradient.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -564,6 +610,27 @@
name = Products;
sourceTree = "<group>";
};
22089A0D075844FE8AA2DA40 /* Resources */ = {
isa = PBXGroup;
children = (
BFB50DC91BBC4BDD95A818FD /* Entypo.ttf */,
F85E524A382E4A6A957E771B /* EvilIcons.ttf */,
B242092C489E46F489763E94 /* Feather.ttf */,
798FE1CBDA064EBDA4CD12C3 /* FontAwesome.ttf */,
C3C604F08F154AB7BB7781A8 /* Foundation.ttf */,
F1B7D17736AC464DA683AB3A /* Ionicons.ttf */,
5FD4DA409A1C42EB89B6F3BC /* MaterialCommunityIcons.ttf */,
5AC4147E86084FBA8814BCE9 /* MaterialIcons.ttf */,
D4E71579126B447188B83123 /* Octicons.ttf */,
2CB7FEA66264445A9035FB51 /* Roboto_medium.ttf */,
CBFA1E890EF94235B811F694 /* Roboto.ttf */,
5D5AB59069724329806D80E2 /* rubicon-icon-font.ttf */,
60B8ECE2B75A41409C5E7345 /* SimpleLineIcons.ttf */,
6B1C085C089045A38BB6F760 /* Zocial.ttf */,
);
name = Resources;
sourceTree = "<group>";
};
2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
isa = PBXGroup;
children = (
@ -574,6 +641,59 @@
name = Frameworks;
sourceTree = "<group>";
};
47C7F1242167EB890095C133 /* Recovered References */ = {
isa = PBXGroup;
children = (
C9EDC249E2B441C984F426D1 /* libFastImage.a */,
DCAC90A21B43431A84847EBC /* libRCTRestart.a */,
A0E703B1D82B464482AAD10D /* libRNVectorIcons.a */,
218B93019DD44DA89C47CD00 /* libRealmReact.a */,
6EDDDE364E5C4508B16ED939 /* libBVLinearGradient.a */,
);
name = "Recovered References";
sourceTree = "<group>";
};
47C7F14B2167EB8A0095C133 /* Products */ = {
isa = PBXGroup;
children = (
47C7F1542167EB8A0095C133 /* libBVLinearGradient.a */,
47C7F1562167EB8A0095C133 /* libBVLinearGradient.a */,
);
name = Products;
sourceTree = "<group>";
};
47C7F14D2167EB8A0095C133 /* Products */ = {
isa = PBXGroup;
children = (
47C7F15C2167EB8A0095C133 /* libRealmReact.a */,
);
name = Products;
sourceTree = "<group>";
};
47C7F14F2167EB8A0095C133 /* Products */ = {
isa = PBXGroup;
children = (
47C7F1592167EB8A0095C133 /* libRCTRestart.a */,
);
name = Products;
sourceTree = "<group>";
};
47C7F15E2167EB8A0095C133 /* Products */ = {
isa = PBXGroup;
children = (
47C7F1622167EB8A0095C133 /* libRNVectorIcons.a */,
);
name = Products;
sourceTree = "<group>";
};
47C7F1632167EB8A0095C133 /* Products */ = {
isa = PBXGroup;
children = (
47C7F1672167EB8A0095C133 /* libFastImage.a */,
);
name = Products;
sourceTree = "<group>";
};
5E91572E1DD0AC6500FF2AA8 /* Products */ = {
isa = PBXGroup;
children = (
@ -611,6 +731,7 @@
24CEB0A6D57C4A038E1DB75A /* RCTRestart.xcodeproj */,
D8FE25B09BFD479994B879E8 /* RNVectorIcons.xcodeproj */,
2EFB1ECFDD9C4D4DBF153260 /* RealmReact.xcodeproj */,
A478B598576048B99C164A52 /* BVLinearGradient.xcodeproj */,
);
name = Libraries;
sourceTree = "<group>";
@ -633,6 +754,7 @@
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
22089A0D075844FE8AA2DA40 /* Resources */,
47C7F1242167EB890095C133 /* Recovered References */,
);
indentWidth = 2;
sourceTree = "<group>";
@ -659,28 +781,6 @@
name = Products;
sourceTree = "<group>";
};
22089A0D075844FE8AA2DA40 /* Resources */ = {
isa = "PBXGroup";
children = (
BFB50DC91BBC4BDD95A818FD /* Entypo.ttf */,
F85E524A382E4A6A957E771B /* EvilIcons.ttf */,
B242092C489E46F489763E94 /* Feather.ttf */,
798FE1CBDA064EBDA4CD12C3 /* FontAwesome.ttf */,
C3C604F08F154AB7BB7781A8 /* Foundation.ttf */,
F1B7D17736AC464DA683AB3A /* Ionicons.ttf */,
5FD4DA409A1C42EB89B6F3BC /* MaterialCommunityIcons.ttf */,
5AC4147E86084FBA8814BCE9 /* MaterialIcons.ttf */,
D4E71579126B447188B83123 /* Octicons.ttf */,
2CB7FEA66264445A9035FB51 /* Roboto_medium.ttf */,
CBFA1E890EF94235B811F694 /* Roboto.ttf */,
5D5AB59069724329806D80E2 /* rubicon-icon-font.ttf */,
60B8ECE2B75A41409C5E7345 /* SimpleLineIcons.ttf */,
6B1C085C089045A38BB6F760 /* Zocial.ttf */,
);
name = Resources;
sourceTree = "<group>";
path = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@ -780,7 +880,7 @@
};
};
};
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "esteem" */;
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "eSteem" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
@ -792,6 +892,14 @@
productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
projectDirPath = "";
projectReferences = (
{
ProductGroup = 47C7F14B2167EB8A0095C133 /* Products */;
ProjectRef = A478B598576048B99C164A52 /* BVLinearGradient.xcodeproj */;
},
{
ProductGroup = 47C7F1632167EB8A0095C133 /* Products */;
ProjectRef = 671E67B1E9D345C2A7483C90 /* FastImage.xcodeproj */;
},
{
ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */;
ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
@ -820,6 +928,10 @@
ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */;
ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
},
{
ProductGroup = 47C7F14F2167EB8A0095C133 /* Products */;
ProjectRef = 24CEB0A6D57C4A038E1DB75A /* RCTRestart.xcodeproj */;
},
{
ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */;
ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
@ -840,6 +952,14 @@
ProductGroup = 146834001AC3E56700842450 /* Products */;
ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
},
{
ProductGroup = 47C7F14D2167EB8A0095C133 /* Products */;
ProjectRef = 2EFB1ECFDD9C4D4DBF153260 /* RealmReact.xcodeproj */;
},
{
ProductGroup = 47C7F15E2167EB8A0095C133 /* Products */;
ProjectRef = D8FE25B09BFD479994B879E8 /* RNVectorIcons.xcodeproj */;
},
);
projectRoot = "";
targets = (
@ -1076,6 +1196,48 @@
remoteRef = 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
47C7F1542167EB8A0095C133 /* libBVLinearGradient.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libBVLinearGradient.a;
remoteRef = 47C7F1532167EB8A0095C133 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
47C7F1562167EB8A0095C133 /* libBVLinearGradient.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libBVLinearGradient.a;
remoteRef = 47C7F1552167EB8A0095C133 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
47C7F1592167EB8A0095C133 /* libRCTRestart.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRCTRestart.a;
remoteRef = 47C7F1582167EB8A0095C133 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
47C7F15C2167EB8A0095C133 /* libRealmReact.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRealmReact.a;
remoteRef = 47C7F15B2167EB8A0095C133 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
47C7F1622167EB8A0095C133 /* libRNVectorIcons.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRNVectorIcons.a;
remoteRef = 47C7F1612167EB8A0095C133 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
47C7F1672167EB8A0095C133 /* libFastImage.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libFastImage.a;
remoteRef = 47C7F1662167EB8A0095C133 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
@ -1263,9 +1425,25 @@
"DEBUG=1",
"$(inherited)",
);
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**",
"$(SRCROOT)/../node_modules/react-native-restart/ios/RCTRestart/**",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/realm/src/**",
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
);
INFOPLIST_FILE = esteemTests/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++",
@ -1273,20 +1451,6 @@
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/esteem.app/esteem";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
);
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**",
"$(SRCROOT)/../node_modules/react-native-restart/ios/RCTRestart/**",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/realm/src/**",
);
};
name = Debug;
};
@ -1295,9 +1459,25 @@
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
COPY_PHASE_STRIP = NO;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**",
"$(SRCROOT)/../node_modules/react-native-restart/ios/RCTRestart/**",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/realm/src/**",
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
);
INFOPLIST_FILE = esteemTests/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++",
@ -1305,20 +1485,6 @@
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/esteem.app/esteem";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
);
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**",
"$(SRCROOT)/../node_modules/react-native-restart/ios/RCTRestart/**",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/realm/src/**",
);
};
name = Release;
};
@ -1328,6 +1494,14 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = 1;
DEAD_CODE_STRIPPING = NO;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**",
"$(SRCROOT)/../node_modules/react-native-restart/ios/RCTRestart/**",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/realm/src/**",
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
);
INFOPLIST_FILE = esteem/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = (
@ -1338,13 +1512,6 @@
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = esteem;
VERSIONING_SYSTEM = "apple-generic";
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**",
"$(SRCROOT)/../node_modules/react-native-restart/ios/RCTRestart/**",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/realm/src/**",
);
};
name = Debug;
};
@ -1353,6 +1520,14 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = 1;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**",
"$(SRCROOT)/../node_modules/react-native-restart/ios/RCTRestart/**",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/realm/src/**",
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
);
INFOPLIST_FILE = esteem/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = (
@ -1363,13 +1538,6 @@
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = esteem;
VERSIONING_SYSTEM = "apple-generic";
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**",
"$(SRCROOT)/../node_modules/react-native-restart/ios/RCTRestart/**",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/realm/src/**",
);
};
name = Release;
};
@ -1385,8 +1553,24 @@
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_TESTABILITY = YES;
GCC_NO_COMMON_BLOCKS = YES;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**",
"$(SRCROOT)/../node_modules/react-native-restart/ios/RCTRestart/**",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/realm/src/**",
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
);
INFOPLIST_FILE = "esteem-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++",
@ -1396,20 +1580,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/react-native-fast-image/ios/FastImage/**",
"$(SRCROOT)/../node_modules/react-native-restart/ios/RCTRestart/**",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/realm/src/**",
);
};
name = Debug;
};
@ -1425,8 +1595,24 @@
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_NO_COMMON_BLOCKS = YES;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**",
"$(SRCROOT)/../node_modules/react-native-restart/ios/RCTRestart/**",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/realm/src/**",
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
);
INFOPLIST_FILE = "esteem-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++",
@ -1436,20 +1622,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/react-native-fast-image/ios/FastImage/**",
"$(SRCROOT)/../node_modules/react-native-restart/ios/RCTRestart/**",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/realm/src/**",
);
};
name = Release;
};
@ -1464,8 +1636,24 @@
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_TESTABILITY = YES;
GCC_NO_COMMON_BLOCKS = YES;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**",
"$(SRCROOT)/../node_modules/react-native-restart/ios/RCTRestart/**",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/realm/src/**",
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
);
INFOPLIST_FILE = "esteem-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++",
@ -1475,20 +1663,6 @@
SDKROOT = appletvos;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/esteem-tvOS.app/esteem-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/react-native-fast-image/ios/FastImage/**",
"$(SRCROOT)/../node_modules/react-native-restart/ios/RCTRestart/**",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/realm/src/**",
);
};
name = Debug;
};
@ -1503,8 +1677,24 @@
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_NO_COMMON_BLOCKS = YES;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-fast-image/ios/FastImage/**",
"$(SRCROOT)/../node_modules/react-native-restart/ios/RCTRestart/**",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/realm/src/**",
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
);
INFOPLIST_FILE = "esteem-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++",
@ -1514,20 +1704,6 @@
SDKROOT = appletvos;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/esteem-tvOS.app/esteem-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/react-native-fast-image/ios/FastImage/**",
"$(SRCROOT)/../node_modules/react-native-restart/ios/RCTRestart/**",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/realm/src/**",
);
};
name = Release;
};
@ -1669,7 +1845,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "esteem" */ = {
83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "eSteem" */ = {
isa = XCConfigurationList;
buildConfigurations = (
83CBBA201A601CBA00E9B192 /* Debug */,

5526
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -22,12 +22,13 @@
"dsteem": "^0.10.1",
"moment": "^2.22.2",
"native-base": "^2.8.1",
"react": "16.5.0",
"react-native": "0.57.1",
"react": "^16.5.0",
"react-native": "^0.57.1",
"react-native-extended-stylesheet": "^0.10.0",
"react-native-fast-image": "^4.0.14",
"react-native-html-renderer": "^1.0.0",
"react-native-keyboard-aware-scroll-view": "^0.7.2",
"react-native-linear-gradient": "^2.4.2",
"react-native-markdown-editor": "^1.0.1",
"react-native-modal": "^6.5.0",
"react-native-modal-dropdown": "^0.6.2",
@ -38,13 +39,13 @@
"react-navigation": "^2.17.0",
"react-navigation-redux-helpers": "^2.0.6",
"react-redux": "^5.0.7",
"realm": "^2.17.0",
"realm": "^2.18.0",
"redux": "^4.0.0",
"redux-promise": "^0.6.0",
"redux-thunk": "^2.3.0",
"remarkable": "^1.7.1",
"rn-placeholder": "^1.2.0",
"sc2-sdk": "^1.0.2"
"steemconnect": "^2.0.0"
},
"devDependencies": {
"babel-eslint": "^10.0.1",

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

BIN
src/assets/no_post.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 KiB

View File

@ -1,3 +1,11 @@
import Card from './view/cardView';
import GrayWrapper from './view/grayWrapperView';
import LineBreak from './view/lineBreakView';
import NoPost from './view/noPostView';
import PercentBar from './view/percentBarView';
import TextWithIcon from './view/textWithIconView';
import WalletLineItem from './view/walletLineItemView';
export { LineBreak };
export {
Card, GrayWrapper, LineBreak, NoPost, PercentBar, TextWithIcon, WalletLineItem,
};

View File

@ -0,0 +1,12 @@
import EStyleSheet from 'react-native-extended-stylesheet';
export default EStyleSheet.create({
wrapper: {
flexDirection: 'column',
backgroundColor: '$white',
shadowOpacity: 0.8,
shadowColor: '#e7e7e7',
paddingHorizontal: 8,
paddingVertical: 8,
},
});

View File

@ -0,0 +1,7 @@
import React from 'react';
import { View } from 'react-native';
import styles from './cardStyles';
const Card = ({ children }) => <View style={styles.wrapper}>{children}</View>;
export default Card;

View File

@ -0,0 +1,9 @@
import EStyleSheet from 'react-native-extended-stylesheet';
export default EStyleSheet.create({
wrapper: {
flexDirection: 'column',
backgroundColor: '$primaryGray',
borderRadius: 8,
},
});

View File

@ -0,0 +1,7 @@
import React from 'react';
import { View } from 'react-native';
import styles from './grayWrapperStyles';
const GrayWrapper = ({ children }) => <View style={styles.wrapper}>{children}</View>;
export default GrayWrapper;

View File

@ -0,0 +1,21 @@
import EStyleSheet from "react-native-extended-stylesheet";
export default EStyleSheet.create({
wrapper: {
flexDirection: "column",
alignItems: "center",
height: "$deviceHeight",
backgroundColor: "$white",
},
image: {
width: "$deviceWidth - 40",
height: 192,
marginTop: 16,
},
text: {
color: "$primaryDarkGray",
fontSize: 14,
marginTop: 12,
fontWeight: "bold",
},
});

View File

@ -0,0 +1,17 @@
import React from 'react';
import { View, Text, Image } from 'react-native';
import NO_POST from '../../../assets/no_post.png';
import styles from './noPostStyles';
const NoPost = ({ text, name, defaultText }) => (
<View style={styles.wrapper}>
<Image style={styles.image} source={NO_POST} />
{name ? (
<Text style={styles.text}>{`@${name} ${text}`}</Text>
) : (
<Text style={styles.text}>{defaultText}</Text>
)}
</View>
);
export default NoPost;

View File

@ -0,0 +1,24 @@
import EStyleSheet from 'react-native-extended-stylesheet';
export default EStyleSheet.create({
container: {
backgroundColor: '$primaryLightBlue',
height: 2,
marginVertical: 4,
borderRadius: 50,
},
powerBar: {
backgroundColor: '$primaryBlue',
height: 2,
borderRadius: 50,
},
percentTitleWrapper: {
flexDirection: 'row',
justifyContent: 'center',
},
percentTitle: {
color: '$primaryBlue',
fontSize: 11,
marginVertical: 10,
},
});

View File

@ -0,0 +1,42 @@
import React from 'react';
import { View, Dimensions, Text } from 'react-native';
import styles from './percentBarStyles';
const PercentBar = ({
percent, margin, text, barColor, barPercentColor, textColor, isTop,
}) => (
<View>
{_getText(textColor, text, isTop, true)}
<View style={[styles.container, barColor && { backgroundColor: barColor }]}>
<View
style={[
styles.powerBar,
barPercentColor && { backgroundColor: barPercentColor },
{ width: _calculateWidth(percent, margin) },
]}
/>
</View>
{_getText(textColor, text, isTop, false)}
</View>
);
const _calculateWidth = (percent, margin = null) => {
if (percent) {
const per = 100 / percent;
return Dimensions.get('window').width / per - margin;
}
return null;
};
const _getText = (textColor, text, isTop, isRender) => {
if (isTop === isRender && text) {
return (
<View style={styles.percentTitleWrapper}>
<Text style={[styles.percentTitle, textColor && { color: textColor }]}>{text}</Text>
</View>
);
}
};
export default PercentBar;

View File

@ -0,0 +1,21 @@
import EStyleSheet from "react-native-extended-stylesheet";
export default EStyleSheet.create({
container: {
justifyContent: "center",
margin: 5,
},
wrapper: {
flexDirection: "row",
alignSelf: "flex-start",
},
icon: {
color: "#c1c5c7",
fontSize: 12,
marginRight: 3,
},
text: {
color: "#788187",
fontSize: 11,
},
});

View File

@ -0,0 +1,27 @@
import React from "react";
import { View, TouchableHighlight, Text } from "react-native";
import Ionicons from "react-native-vector-icons/Ionicons";
import styles from "./textWithIconStyles";
const TextWithIcon = ({ iconName, text, isClickable, onPress }) => (
<View style={styles.container}>
{isClickable || onPress ? (
<TouchableHighlight
underlayColor="transparent"
onPress={() => onPress && onPress()}
>
<View style={styles.wrapper}>
{text && <Ionicons style={styles.icon} name={iconName} />}
<Text style={styles.text}>{text}</Text>
</View>
</TouchableHighlight>
) : (
<View style={styles.wrapper}>
{text && <Ionicons style={styles.icon} name={iconName} />}
<Text style={styles.text}>{text}</Text>
</View>
)}
</View>
);
export default TextWithIcon;

View File

@ -0,0 +1,75 @@
import EStyleSheet from 'react-native-extended-stylesheet';
export default EStyleSheet.create({
container: {
marginVertical: 15,
flexDirection: 'row',
justifyContent: 'space-between',
paddingHorizontal: 16,
},
fitContent: {
marginVertical: 0,
},
iconTextWrapper: {
flexDirection: 'row',
justifyContent: 'space-between',
alignSelf: 'center',
alignItems: 'center',
},
iconWrapper: {
alignSelf: 'center',
alignItems: 'center',
justifyContent: 'center',
},
icon: {
color: '$primaryDarkGray',
fontSize: 18,
textAlign: 'center',
marginTop: 1,
},
rightTextWrapper: {
flexDirection: 'row',
justifyContent: 'center',
alignSelf: 'center',
},
text: {
fontFamily: '$primaryFont',
color: '$primaryBlack',
fontSize: 16,
marginLeft: 8,
},
longText: {
maxWidth: '$deviceWidth / 2.5',
},
description: {
fontSize: 12,
marginLeft: 8,
fontFamily: '$primaryFont',
color: '$iconColor',
},
onlyText: {
marginLeft: 40,
},
rightText: {
fontFamily: '$primaryFont',
color: '$primaryBlue',
fontSize: 14,
fontWeight: '600',
},
thinText: {
fontSize: 14,
fontWeight: '100',
color: '$primaryDarkGray',
},
onlyRightText: {
color: '$primaryDarkGray',
},
circleIcon: {
backgroundColor: '$primaryGray',
borderRadius: 20,
width: 32,
height: 32,
justifyContent: 'center',
alignSelf: 'center',
},
});

View File

@ -0,0 +1,61 @@
import React from 'react';
import { View, Text } from 'react-native';
import Ionicons from 'react-native-vector-icons/Ionicons';
import styles from './walletLineItemStyles';
const WalletLineItem = ({
text,
textColor,
iconName,
rightText,
rightTextColor,
isBoldText,
isThin,
isCircleIcon,
circleIconColor,
description,
fitContent,
}) => (
<View style={[styles.container, fitContent && styles.fitContent]}>
<View style={styles.iconTextWrapper}>
{iconName && (
<View
style={[
styles.iconWrapper,
isCircleIcon && styles.circleIcon,
circleIconColor && { backgroundColor: circleIconColor },
]}
>
<Ionicons style={styles.icon} name={iconName} />
</View>
)}
<View>
<Text
style={[
styles.text,
!iconName && styles.onlyText,
rightText && styles.longText,
textColor && { color: textColor },
isBoldText && { fontWeight: 'bold' },
isThin && styles.thinText,
]}
>
{text}
</Text>
{description && <Text style={styles.description}>{description}</Text>}
</View>
</View>
<View style={styles.rightTextWrapper}>
<Text
style={[
styles.rightText,
rightTextColor ? { color: rightTextColor } : !text && styles.onlyRightText,
]}
>
{rightText}
</Text>
</View>
</View>
);
export default WalletLineItem;

View File

@ -9,7 +9,7 @@ export default EStyleSheet.create({
height: 19,
},
buttonText: {
color: '#c1c5c7',
color: '$iconColor',
fontSize: 16,
},
});

View File

@ -0,0 +1,4 @@
import CollapsibleCard from "./view/collapsibleCardView";
export { CollapsibleCard };
export default CollapsibleCard;

View File

@ -0,0 +1,23 @@
import EStyleSheet from 'react-native-extended-stylesheet';
export default EStyleSheet.create({
container: {
flexDirection: 'column',
backgroundColor: '$white',
marginTop: 8,
marginBottom: 8,
overflow: 'hidden',
},
containerWithBorder: {
shadowOpacity: 0.8,
borderWidth: 0.8,
shadowColor: '#e7e7e7',
borderColor: '#e7e7e7',
},
content: {
backgroundColor: '$white',
},
contentBody: {
paddingHorizontal: 12,
},
});

View File

@ -0,0 +1,105 @@
import React, { Component } from 'react';
import { View, TouchableHighlight, Animated } from 'react-native';
// Constants
// Components
import { ContainerHeader } from '../../containerHeader';
// Styles
// eslint-disable-next-line
import styles from './collapsibleCardStyles';
class CollapsibleCardView extends Component {
/* Props
* ------------------------------------------------
* @prop { type } expanded - For is collapsible open or close declaration prop.
* @prop { type } children - Render include children
* @prop { type } title - Collapsible title.
*
*/
anime = {
height: new Animated.Value(),
expanded: false,
contentHeight: 0,
};
constructor(props) {
super(props);
this.anime.expanded = props.expanded;
this.state = {
expanded: props.expanded || false,
};
}
// Component Life Cycles
// Component Functions
_initContentHeight = (event) => {
if (this.anime.contentHeight > 0) return;
this.anime.contentHeight = event.nativeEvent.layout.height;
this.anime.height.setValue(this.anime.expanded ? this._getMaxValue() : this._getMinValue());
};
_getMaxValue = () => this.anime.contentHeight;
_getMinValue = () => 0;
_toggleOnPress = () => {
Animated.timing(this.anime.height, {
toValue: this.anime.expanded ? this._getMinValue() : this._getMaxValue(),
duration: 200,
}).start();
this.anime.expanded = !this.anime.expanded;
this.setState({
expanded: this.anime.expanded,
});
};
render() {
const {
title,
children,
defaultTitle,
fontSize,
titleColor,
isBoldTitle,
locked,
titleComponent,
noBorder,
fitContent,
} = this.props;
const { expanded } = this.state;
return (
<View style={[styles.container, !noBorder && styles.containerWithBorder]}>
<TouchableHighlight
underlayColor="transparent"
onPress={() => !locked && this._toggleOnPress()}
>
{titleComponent || (
<ContainerHeader
color={titleColor || '#788187'}
fontSize={fontSize || 12}
title={title}
defaultTitle={defaultTitle}
isBoldTitle={isBoldTitle}
iconName={expanded ? 'md-arrow-dropdown' : 'md-arrow-dropup'}
/>
)}
</TouchableHighlight>
<Animated.View
style={[styles.content, { height: this.anime.height }]}
onLayout={e => this._initContentHeight(e)}
>
<View style={[!fitContent && styles.contentBody]}>{children}</View>
</Animated.View>
</View>
);
}
}
export default CollapsibleCardView;

View File

@ -5,16 +5,25 @@ export default EStyleSheet.create({
width: '$deviceWidth',
height: 50,
backgroundColor: '$white',
flexDirection: 'row',
justifyContent: 'space-between',
},
hasTopBorder: {
borderTopColor: '#cfcfcf',
justifyContent: 'center',
borderTopColor: '#e7e7e7',
borderTopWidth: 1,
},
title: {
alignSelf: 'flex-start',
fontFamily: '$primaryFont',
alignSelf: 'center',
color: '$primaryDarkGray',
fontSize: 14,
color: '$primaryGray',
fontWeight: 'bold',
marginLeft: 26,
fontWeight: '600',
marginLeft: 32,
},
icon: {
alignSelf: 'center',
color:"$iconColor",
fontSize: 18,
marginRight: 32,
},
});

View File

@ -1,5 +1,6 @@
import React, { Component } from 'react';
import { View, Text } from 'react-native';
import Ionicons from 'react-native-vector-icons/Ionicons';
// Constants
@ -24,11 +25,29 @@ class ContainerHeaderView extends Component {
// Component Functions
render() {
const { title } = this.props;
const {
color,
defaultTitle,
fontSize,
hasSeperator,
iconName,
isBoldTitle,
title,
} = this.props;
return (
<View style={styles.wrapper}>
<Text style={styles.title}>{title}</Text>
<View style={[styles.wrapper, hasSeperator && styles.hasTopBorder]}>
<Text
style={[
styles.title,
isBoldTitle && { fontWeight: 'bold' },
color && { color },
fontSize && { fontSize },
]}
>
{title || defaultTitle}
</Text>
{iconName && <Ionicons style={styles.icon} name={iconName} />}
</View>
);
}

View File

@ -10,12 +10,12 @@ export default EStyleSheet.create({
},
dropdownText: {
fontSize: 9,
color: '$primaryGray',
color: '$primaryDarkGray',
marginLeft: 25,
},
dropdownIcon: {
fontSize: 18,
color: '#c1c5c7',
color:"$iconColor",
marginLeft: 7,
marginTop: 1,
},
@ -36,7 +36,7 @@ export default EStyleSheet.create({
},
dropdownText: {
fontSize: 9,
color: '$primaryGray',
color: '$primaryDarkGray',
padding: 5,
borderColor: '#e7e7e7',
},
@ -50,7 +50,7 @@ export default EStyleSheet.create({
buttonText: {
fontSize: 9,
alignSelf: 'center',
color: '$primaryGray',
color: '$primaryDarkGray',
fontWeight: 'normal',
},
rowWrapper: {
@ -80,6 +80,6 @@ export default EStyleSheet.create({
},
rowText: {
fontSize: 9,
color: '$primaryGray',
color: '$primaryDarkGray',
},
});

View File

@ -24,11 +24,7 @@ const DEVICE_HEIGHT = Dimensions.get('window').height;
const renderDropdownRow = (rowData, rowID, highlighted) => (
<TouchableHighlight style={styles.rowWrapper} underlayColor="#E9F2FC">
<View style={[styles.dropdownRow, highlighted && styles.highlightedRow]}>
<Text
style={[styles.rowText, highlighted && styles.highlightedRowText]}
>
{rowData}
</Text>
<Text style={[styles.rowText, highlighted && styles.highlightedRowText]}>{rowData}</Text>
</View>
</TouchableHighlight>
);
@ -39,10 +35,14 @@ const DropdownButtonView = ({
options,
onSelect,
defaultIndex,
children,
style,
isHasChildIcon,
childIconWrapperStyle,
}) => (
<View style={styles.container}>
<ModalDropdown
style={styles.button}
style={[!style ? styles.button : style]}
textStyle={styles.buttonText}
dropdownStyle={[styles.dropdown, { height: 35 * (options.length + 1) }]}
dropdownTextStyle={styles.dropdownText}
@ -52,15 +52,20 @@ const DropdownButtonView = ({
defaultIndex={defaultIndex}
defaultValue={defaultText}
renderSeparator={() => null}
renderRow={(rowData, rowID, highlighted) => renderDropdownRow(rowData, rowID, highlighted)
}
/>
<View style={styles.iconWrapper}>
<Ionicons
style={styles.dropdownIcon}
name={!iconName ? 'md-arrow-dropdown' : iconName}
/>
</View>
renderRow={(rowData, rowID, highlighted) => renderDropdownRow(rowData, rowID, highlighted)}
>
{isHasChildIcon && (
<View style={[styles.iconWrapper, childIconWrapperStyle && childIconWrapperStyle]}>
<Ionicons style={styles.dropdownIcon} name={!iconName ? 'md-arrow-dropdown' : iconName} />
</View>
)}
</ModalDropdown>
{!children
&& !isHasChildIcon && (
<View style={styles.iconWrapper}>
<Ionicons style={styles.dropdownIcon} name={!iconName ? 'md-arrow-dropdown' : iconName} />
</View>
)}
</View>
);

View File

@ -10,11 +10,10 @@ export default EStyleSheet.create({
},
rightIconWrapper: {
marginRight: 32,
alignSelf: 'center',
},
rightIcon: {
color: '#c1c5c7',
fontSize: 32,
color:"$iconColor",
textAlign: 'center',
width: 32,
},
});

View File

@ -1,5 +1,5 @@
import React from 'react';
import { View, TouchableOpacity, Text } from 'react-native';
import { View, TouchableOpacity } from 'react-native';
import Ionicons from 'react-native-vector-icons/Ionicons';
// External Components
@ -23,24 +23,28 @@ const FilterBarView = ({
dropdownIconName,
onDropdownSelect,
onRightIconPress,
isHide,
iconSize,
}) => (
<View style={styles.container}>
<LineBreak color="#f6f6f6" height={35}>
<View style={styles.filterBarWrapper}>
<DropdownButton
iconName={dropdownIconName}
options={options}
defaultText={defaultText}
onSelect={onDropdownSelect}
/>
<TouchableOpacity
onPress={onRightIconPress && onRightIconPress()}
style={styles.rightIconWrapper}
>
<Ionicons style={styles.rightIcon} name={rightIconName} />
</TouchableOpacity>
</View>
</LineBreak>
{!isHide && (
<LineBreak color="#f6f6f6" height={35}>
<View style={styles.filterBarWrapper}>
<DropdownButton
iconName={dropdownIconName}
options={options}
defaultText={defaultText}
onSelect={onDropdownSelect}
/>
<TouchableOpacity
onPress={onRightIconPress && onRightIconPress()}
style={styles.rightIconWrapper}
>
<Ionicons style={styles.rightIcon} size={iconSize || 32} name={rightIconName} />
</TouchableOpacity>
</View>
</LineBreak>
)}
</View>
);

View File

@ -7,7 +7,7 @@ export default EStyleSheet.create({
marginHorizontal: 30,
marginVertical: 10,
flexDirection: 'row',
backgroundColor: '#f5f5f5',
backgroundColor: '$primaryGray',
height: 60,
borderBottomWidth: 2,
},
@ -27,6 +27,6 @@ export default EStyleSheet.create({
fontSize: 25,
top: 18,
left: 8,
color: '#c1c5c7',
color:"$iconColor",
},
});

View File

@ -30,7 +30,7 @@ class FormInputView extends Component {
this.state = {
value: '',
inputBorderColor: '#c1c5c7',
inputBorderColor:"$iconColor",
isValid: true,
};
}
@ -93,7 +93,7 @@ class FormInputView extends Component {
})
}
onSubmitEditing={() => this.setState({
inputBorderColor: '#c1c5c7',
inputBorderColor:"$iconColor",
})
}
autoCapitalize="none"

View File

@ -0,0 +1,4 @@
import IconButton from "./view/iconButtonView";
export { IconButton };
export default IconButton;

View File

@ -0,0 +1,13 @@
import EStyleSheet from "react-native-extended-stylesheet";
export default EStyleSheet.create({
iconButton: {
width: 30,
height: 30,
borderRadius: 30 / 2,
justifyContent: "center",
},
icon: {
textAlign: "center",
},
});

View File

@ -0,0 +1,32 @@
import React from "react";
import { View, TouchableHighlight } from "react-native";
import Ionicons from "react-native-vector-icons/Ionicons";
import styles from "./iconButtonStyles";
/* Props
* ------------------------------------------------
* @prop { type } name - Description....
*/
const IconButton = ({ name, color, size, onPress, backgroundColor, style }) => (
<View>
<TouchableHighlight
style={[styles.iconButton, style && style]}
onPress={() => onPress && onPress()}
underlayColor={backgroundColor}
>
<Ionicons
style={[
styles.icon,
color && { color: color },
backgroundColor && { backgroundColor: backgroundColor },
]}
name={name}
size={size}
/>
</TouchableHighlight>
</View>
);
export default IconButton;

View File

@ -7,7 +7,7 @@ import { FormInput } from './formInput';
import { CircularButton, TextButton, IconButton } from './buttons';
import { NumericKeyboard } from './numericKeyboard';
import { PinAnimatedInput } from './pinAnimatedInput';
import SideMenu from './sideMenu';
import { SideMenu } from './sideMenu';
export {
Logo,

View File

@ -15,6 +15,6 @@ export default EStyleSheet.create({
infoText: {
flex: 0.875,
fontSize: 12,
color: '$primaryGray',
color: '$primaryDarkGray',
},
});

View File

@ -14,7 +14,7 @@ export default EStyleSheet.create({
},
description: {
textAlignVertical: 'center',
color: '$primaryGray',
color: '$primaryDarkGray',
fontSize: 14,
fontWeight: '400',
},
@ -22,7 +22,7 @@ export default EStyleSheet.create({
textAlignVertical: 'center',
fontSize: 20,
fontWeight: 'bold',
color: '$primaryGray',
color: '$primaryDarkGray',
marginBottom: 16,
},
mascot: {

View File

@ -3,8 +3,7 @@ import EStyleSheet from 'react-native-extended-stylesheet';
export default EStyleSheet.create({
wrapper: {},
touchable: {
maxWidth: 200,
minWidth: 56,
maxWidth: '$deviceWidth',
height: 56,
borderRadius: 30,
backgroundColor: '$primaryBlue',
@ -38,6 +37,8 @@ export default EStyleSheet.create({
},
body: {
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center',
},
image: {
marginLeft: 20,
@ -46,6 +47,6 @@ export default EStyleSheet.create({
height: 20,
},
disableTouchable: {
backgroundColor: '#c1c5c7',
backgroundColor:"$iconColor",
},
});

View File

@ -1,10 +1,6 @@
import React, { Component, Fragment } from 'react';
import {
ActivityIndicator,
Image,
Text,
TouchableOpacity,
View,
ActivityIndicator, Image, Text, TouchableOpacity, View,
} from 'react-native';
import Ionicons from 'react-native-vector-icons/Ionicons';
@ -38,10 +34,7 @@ class MainButton extends Component {
// Component Life Cycles
componentWillReceiveProps(nextProps) {
const { isLoading, isDisable } = this.props;
if (
nextProps.isLoading !== isLoading
|| nextProps.isDisable !== isDisable
) {
if (nextProps.isLoading !== isLoading || nextProps.isDisable !== isDisable) {
this.setState({
isDisable: !nextProps.isLoading && nextProps.isDisable,
});
@ -57,19 +50,13 @@ class MainButton extends Component {
_getBody = () => {
const {
isLoading,
text,
secondText,
iconColor,
iconName,
source,
isLoading, text, secondText, iconColor, iconName, source,
} = this.props;
if (isLoading) {
return (
<ActivityIndicator color="white" style={styles.activityIndicator} />
);
} if (text) {
return <ActivityIndicator color="white" style={styles.activityIndicator} />;
}
if (text) {
return (
<Fragment>
{source ? (
@ -88,7 +75,9 @@ class MainButton extends Component {
};
render() {
const { wrapperStyle } = this.props;
const {
wrapperStyle, children, height, style,
} = this.props;
const { isDisable } = this.state;
return (
@ -96,9 +85,14 @@ class MainButton extends Component {
<TouchableOpacity
disabled={isDisable}
onPress={() => this._handleOnPress()}
style={[styles.touchable, isDisable && styles.disableTouchable]}
style={[
styles.touchable,
isDisable && styles.disableTouchable,
height && { height },
style && style,
]}
>
<View style={styles.body}>{this._getBody()}</View>
<View style={styles.body}>{children || this._getBody()}</View>
</TouchableOpacity>
</View>
);

View File

@ -40,10 +40,10 @@ export default EStyleSheet.create({
fontWeight: 'bold',
},
title: {
color: '$primaryGray',
color: '$primaryDarkGray',
},
description: {
color: '#3c4449',
color: '$primaryBlack',
fontSize: 12,
fontWeight: '500',
},
@ -51,7 +51,7 @@ export default EStyleSheet.create({
height: '$deviceHeight / 1.35',
},
isNewNotification: {
backgroundColor: '#eaf2fc',
backgroundColor: '$primaryLightBlue',
borderTopWidth: 0.3,
borderBottomWidth: 0.3,
borderColor: '#e7e7e7',

View File

@ -128,14 +128,14 @@ class NotificationView extends Component {
rightIconName="ios-checkmark"
/>
<ScrollView style={styles.scrollView}>
<ContainerHeader title="Recent" />
<ContainerHeader hasSeperator isBoldTitle title="Recent" />
<FlatList
data={notification}
renderItem={({ item }) => this._getRenderItem(item)}
keyExtractor={item => item.email}
/>
{/* Will remove follow lines */}
<ContainerHeader title="Yesterday" />
<ContainerHeader hasSeperator isBoldTitle title="Yesterday" />
<FlatList
data={notification}
renderItem={({ item }) => this._getRenderItem(item)}

View File

@ -15,10 +15,13 @@ export default EStyleSheet.create({
position: 'absolute',
alignItems: 'center',
},
postButtonIcon: {
postButton: {
bottom: 25,
backgroundColor: '#357ce6',
alignItems: 'center',
justifyContent: 'center',
shadowColor: '$shadowColor',
shadowOffset: { height: 0 },
shadowOpacity: 1,
},
});

View File

@ -121,7 +121,7 @@ class PostButtonView extends Component {
<TouchableOpacity onPress={this.toggleView} activeOpacity={1}>
<Animated.View
style={[
styles.postButtonIcon,
styles.postButton,
{
transform: [{ rotate: rotation }],
width: SIZE,

View File

@ -103,8 +103,11 @@ export default EStyleSheet.create({
},
image: {
margin: 0,
width: '100%',
height: 160,
alignItems: 'center',
alignSelf: 'center',
height: 200,
width: '$deviceWidth - 16',
borderRadius: 8,
},
badge: {
alignSelf: 'center',

View File

@ -0,0 +1,4 @@
import ProfileSummary from "./view/profileSummaryView";
export { ProfileSummary };
export default ProfileSummary;

View File

@ -0,0 +1,54 @@
import EStyleSheet from 'react-native-extended-stylesheet';
export default EStyleSheet.create({
textWithIconWrapper: {
justifyContent: 'center',
flexDirection: 'row',
},
longImage: {
borderRadius: 5,
height: 60,
marginTop: 16,
marginBottom: 12,
alignSelf: 'stretch',
maxWidth: '$deviceWidth - 24',
backgroundColor: '#296CC0',
},
footer: {
width: '$deviceWidth - 24',
flexDirection: 'row',
justifyContent: 'space-between',
marginBottom: 17,
marginTop: 10,
},
leftIcons: {
flexDirection: 'row',
justifyContent: 'flex-start',
},
rightIcons: {
flexDirection: 'row',
justifyContent: 'flex-end',
},
insetIconStyle: {
marginRight: 12,
},
followCountWrapper: {
flexDirection: 'column',
marginRight: 40,
},
followCount: {
fontWeight: 'bold',
color: '$primaryDarkGray',
fontSize: 14,
textAlign: 'center',
},
followText: {
textAlign: 'center',
color: '$primaryDarkGray',
fontSize: 9,
},
// TODO: look at here
dropdownIconStyle: {
marginBottom: 7,
},
});

View File

@ -0,0 +1,119 @@
import React, { Component } from 'react';
import { View, Image, Text } from 'react-native';
import { DropdownButton } from '../../dropdownButton';
// Constants
import DEFAULT_IMAGE from '../../../assets/default_cover_image.png';
// Components
import { TextWithIcon } from '../../basicUIElements';
import { PercentBar } from '../../basicUIElements';
import { IconButton } from '../../iconButton';
// Styles
// eslint-disable-next-line
import styles from './profileSummaryStyles';
class ProfileSummaryView extends Component {
/* Props
* ------------------------------------------------
* @prop { type } name - Description....
*/
constructor(props) {
super(props);
this.state = {};
}
// Component Life Cycles
// Component Functions
_getFollowerCount = () => {
const { followerCount } = this.props;
return 32;
};
_getFollowingCount = () => {
const { followingCoung } = this.props;
return 32;
};
render() {
const {
percent,
hours,
location,
link,
date,
followingCount,
followerCount,
coverImage,
} = this.props;
const votingPowerText = `Voting power:${{ percent }}% • Full in ${{ hours }}hours`;
const rcsPowerText = 'RCs: 20% • Full in 36 hours';
return (
<View>
<View style={styles.textWithIconWrapper}>
<TextWithIcon text={location} iconName="md-navigate" />
<TextWithIcon isClickable text={link} iconName="md-globe" />
<TextWithIcon text={date} iconName="md-calendar" />
</View>
<View />
<Image
style={styles.longImage}
source={{ uri: coverImage }}
defaultSource={DEFAULT_IMAGE}
/>
<PercentBar percent={percent} margin={24} isTop text={votingPowerText} />
<PercentBar
percent={percent}
margin={24}
barColor="#eafcef"
barPercentColor="#11c28b"
textColor="#11c28b"
isTop={false}
text={rcsPowerText}
/>
<View style={styles.footer}>
<View style={styles.leftIcons}>
<View style={styles.followCountWrapper}>
<Text style={styles.followCount}>{followerCount}</Text>
<Text style={styles.followText}>followers</Text>
</View>
<View style={styles.followCountWrapper}>
<Text style={styles.followCount}>{followingCount}</Text>
<Text style={styles.followText}>following</Text>
</View>
</View>
<View style={styles.rightIcons}>
<IconButton
backgroundColor="transparent"
name="ios-heart"
size={16}
style={styles.insetIconStyle}
color="#c1c5c7"
/>
<IconButton
backgroundColor="transparent"
name="md-person-add"
size={16}
style={styles.insetIconStyle}
color="#c1c5c7"
/>
<DropdownButton
style={styles.insetIconStyle}
options={['option1', 'option2', 'option3', 'option4']}
iconName="md-more"
isHasChildIcon
childIconWrapperStyle={styles.dropdownIconStyle}
/>
</View>
</View>
</View>
);
}
}
export default ProfileSummaryView;

View File

@ -87,7 +87,7 @@ export default class Search extends Component {
style={{
flexDirection: 'row',
borderRadius: 8,
backgroundColor: '#f5f5f5',
backgroundColor: '$primaryGray',
paddingLeft: 10,
marginHorizontal: 10,
}}
@ -98,7 +98,7 @@ export default class Search extends Component {
flex: 0.1,
fontSize: 18,
top: 10,
color: '$primaryGray',
color: '$primaryDarkGray',
}}
/>
@ -116,7 +116,7 @@ export default class Search extends Component {
flex: 0.1,
fontSize: 15,
top: 12.5,
color: '#c1c5c7',
color:"$iconColor",
}}
/>
</View>

View File

@ -1,34 +1,54 @@
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { getAuthStatus } from '../../../realm/realm';
// Component
import { AuthSideMenuView } from '..';
import { SideMenuView } from '..';
/*
* Props Name Description Value
*@props --> props name here description here Value Type Here
*
*/
* Props Name Description
*@props --> props name here description here
*
*/
class SideMenuContainer extends Component {
constructor(props) {
super(props);
this.state = {};
this.state = {
isLoggedIn: false,
};
}
// Component Life Cycle Functions
componentWillMount() {
getAuthStatus().then((res) => {
this.setState({ isLoggedIn: res });
});
}
// Component Functions
render() {
const {} = this.props;
_navigateToRoute = (route) => {
const { navigation } = this.props;
navigation.navigate(route);
};
return <AuthSideMenuView />;
render() {
const { isLoggedIn } = this.state;
return (
<SideMenuView
navigateToRoute={this._navigateToRoute}
isLoggedIn={isLoggedIn}
userAvatar={null}
/>
);
}
}
const mapStateToProps = state => ({
user: state.user.user,
isLoggedIn: state,
});
export default SideMenuContainer;
export default connect(mapStateToProps)(SideMenuContainer);

View File

@ -1,5 +1,5 @@
import SideMenuContainer from './container/sideMenuContainer';
import AuthSideMenuView from './view/authSideMenuView';
import SideMenu from './container/sideMenuContainer';
import SideMenuView from './view/sideMenuView';
export { SideMenuContainer, AuthSideMenuView };
export default SideMenuContainer;
export { SideMenu, SideMenuView };
export default SideMenu;

View File

@ -43,12 +43,26 @@ export default EStyleSheet.create({
paddingLeft: '$deviceWidth / 10',
},
listItemIcon: {
color: '$primaryGray',
color: '$primaryDarkGray',
fontSize: 20,
},
listItemText: {
color: '$primaryGray',
color: '$primaryDarkGray',
marginLeft: 15,
fontWeight: '500',
},
linearGradient: {
flex: 1,
paddingLeft: 15,
paddingRight: 15,
borderRadius: 5,
},
buttonText: {
fontSize: 18,
fontFamily: 'Gill Sans',
textAlign: 'center',
margin: 10,
color: '#ffffff',
backgroundColor: 'transparent',
},
});

View File

@ -9,7 +9,9 @@ import { default as MENU } from '../../../constants/sideMenuItems';
// Styles
import styles from './sideMenuStyles';
class ExampleView extends Component {
const DEFAULT_IMAGE = require('../../../assets/esteem.png');
class SideMenuView extends Component {
/* Props
* ------------------------------------------------
* @prop { type } name - Description....
@ -23,20 +25,14 @@ class ExampleView extends Component {
// Component Life Cycles
// Component Functions
_navigateToRoute = (route) => {
const { navigation } = this.props;
navigation.navigate(route);
};
render() {
const { isLoggedIn, userAvatar, navigateToRoute } = this.props;
return (
<View style={styles.container}>
<View style={styles.headerView}>
<View style={styles.headerContentView}>
<Thumbnail
style={styles.userAvatar}
source={{ uri: 'https://facebook.github.io/react-native/docs/assets/favicon.png' }}
/>
<Thumbnail style={styles.userAvatar} source={userAvatar || DEFAULT_IMAGE} />
<View style={styles.userInfoView}>
<Text style={styles.username}>Mustafa</Text>
<Text style={styles.usernick}>@mistikk</Text>
@ -46,12 +42,12 @@ class ExampleView extends Component {
<View style={styles.contentView}>
<List
itemDivider={false}
dataArray={MENU.AUTH_MENU_ITEMS}
dataArray={isLoggedIn ? MENU.AUTH_MENU_ITEMS : MENU.NO_AUTH_MENU_ITEMS}
renderRow={item => (
<ListItem
noBorder
style={styles.listItem}
onPress={() => this._navigateToRoute(item.route)}
onPress={() => navigateToRoute(item.route)}
>
<Icon style={styles.listItemIcon} name={item.icon} />
<Text style={styles.listItemText}>{item.name}</Text>
@ -64,4 +60,4 @@ class ExampleView extends Component {
}
}
export default ExampleView;
export default SideMenuView;

View File

@ -0,0 +1,43 @@
import React, { Component } from 'react';
// import { connect } from 'react-redux';
// Services and Actions
// Middleware
// Constants
// Utilities
// Component
import { TransactionView } from '..';
/*
* Props Name Description Value
*@props --> props name here description here Value Type Here
*
*/
class TransactionContainer extends Component {
constructor(props) {
super(props);
this.state = {};
}
// Component Life Cycle Functions
// Component Functions
render() {
// eslint-disable-next-line
//const {} = this.props;
return <TransactionView {...this.props} />;
}
}
// const mapStateToProps = state => ({
// user: state.user.user,
// });
export default TransactionContainer;

View File

@ -0,0 +1,5 @@
import TransactionView from './view/transactionView';
import Transaction from './container/transactionContainer';
export { TransactionView, Transaction };
export default Transaction;

View File

@ -0,0 +1,99 @@
import React, { Component } from 'react';
import { View } from 'react-native';
// Constants
// Components
import { FilterBar } from '../../filterBar';
import { GrayWrapper, WalletLineItem, Card } from '../../basicUIElements';
import { CollapsibleCard } from '../../collapsibleCard';
class TransactionView extends Component {
/* Props
* ------------------------------------------------
* @prop { type } name - Description....
*/
constructor(props) {
super(props);
this.state = {};
}
// Component Life Cycles
// Component Functions
_handleOnDropdownSelect = () => {};
render() {
return (
<View>
<FilterBar
dropdownIconName="md-arrow-dropdown"
options={['ALL TRANSACTIONS', 'VOTES', 'REPLIES']}
defaultText="ALL TRANSACTIONS"
onDropdownSelect={() => this._handleOnDropdownSelect()}
rightIconName="ios-lock"
iconSize={16}
/>
<Card>
<WalletLineItem
text="Steem"
isCircleIcon
isThin
textColor="#3c4449"
iconName="md-star"
rightText="27.178 STEEM"
/>
<GrayWrapper>
<WalletLineItem
text="Comment Benefactor Reward"
description="32 minutes ago"
isCircleIcon
isThin
circleIconColor="white"
textColor="#3c4449"
iconName="ios-chatboxes"
rightText="18,891.867 STEEM"
tightTextColor="red"
/>
</GrayWrapper>
<WalletLineItem
text="Steem"
isCircleIcon
isThin
textColor="#3c4449"
iconName="md-star"
rightText="27.178 STEEM"
/>
<CollapsibleCard
titleColor="#788187"
title="Wallet Details"
expanded={false}
noBorder
fitContent
titleComponent={(
<WalletLineItem
text="Steem"
isCircleIcon
isThin
textColor="#3c4449"
iconName="md-star"
rightText="27.178 STEEM"
description="1 hour ago"
/>
)}
>
<WalletLineItem
fitContent
text="@barbara-orenya / recycled-items-embellishments-recyclage-pour-decoration-poetique-eng-fr-901b24da0394fest"
isThin
textColor="#3c4449"
/>
</CollapsibleCard>
</Card>
</View>
);
}
}
export default TransactionView;

View File

@ -0,0 +1,39 @@
import React, { Component } from 'react';
// import { connect } from "react-redux";
// Services and Actions
// Middleware
// Constants
// Utilities
// Component
import { WalletView } from '..';
/*
* Props Name Description Value
*@props --> props name here description here Value Type Here
*
*/
class WalletContainer extends Component {
constructor(props) {
super(props);
this.state = {};
}
// Component Life Cycle Functions
// Component Functions
render() {
// eslint-disable-next-line
//const {} = this.props;
return <WalletView {...this.props} />;
}
}
export default WalletContainer;

View File

@ -0,0 +1,5 @@
import WalletView from './view/walletView';
import Wallet from './container/walletContainer';
export { WalletView, Wallet };
export default Wallet;

View File

@ -0,0 +1,36 @@
import EStyleSheet from 'react-native-extended-stylesheet';
export default EStyleSheet.create({
container: {},
// First collabsible component
mainButton: {
marginBottom: 12,
alignSelf: 'center',
paddingHorizontal: 24,
},
mainButtonText: {
color: '$white',
fontSize: 14,
fontWeight: 'bold',
alignSelf: 'center',
},
mainButtonWrapper: {
flexDirection: 'row',
},
mainIconWrapper: {
backgroundColor: '$white',
justifyContent: 'center',
alignSelf: 'center',
alignItems: 'center',
borderRadius: 20,
marginLeft: 20,
width: 24,
height: 24,
},
scrollView: {
height: '$deviceHeight / 1.36',
},
// Second collabsible component
});

View File

@ -0,0 +1,66 @@
import React, { Component } from 'react';
import { View, Text, ScrollView } from 'react-native';
import Ionicons from 'react-native-vector-icons/Ionicons';
// Constants
// Components
import { MainButton } from '../../mainButton';
import { CollapsibleCard } from '../../collapsibleCard';
import { WalletDetails } from '../../walletDetails';
import { Transaction } from '../../transaction';
// Styles
import styles from './walletStyles';
class WalletView extends Component {
/* Props
* ------------------------------------------------
* @prop { type } name - Description....
*/
constructor(props) {
super(props);
this.state = {};
}
// Component Life Cycles
// Component Functions
render() {
// const {} = this.props;
return (
<View style={styles.container}>
<ScrollView style={styles.scrollView}>
<CollapsibleCard
titleColor="#788187"
isBoldTitle
fontSize={16}
defaultTitle="Unclaimed rewards"
expanded
>
<MainButton style={styles.mainButton} height={50} onPress={this._handleOnPressLogin}>
<View style={styles.mainButtonWrapper}>
<Text style={styles.mainButtonText}>18.323 STEEM 1.916 SBD 150.167 SP</Text>
<View style={styles.mainIconWrapper}>
<Ionicons name="md-add" color="#357ce6" size={23} />
</View>
</View>
</MainButton>
</CollapsibleCard>
<CollapsibleCard titleColor="#788187" title="Wallet Details" expanded>
<WalletDetails />
</CollapsibleCard>
<Transaction />
</ScrollView>
</View>
);
}
}
export default WalletView;

View File

@ -0,0 +1,42 @@
import React, { Component } from 'react';
import { connect } from 'react-redux';
// Services and Actions
// Middleware
// Constants
// Utilities
// Component
import { WalletDetailsView } from '..';
/*
* Props Name Description Value
*@props --> props name here description here Value Type Here
*
*/
class WalletContainer extends Component {
constructor(props) {
super(props);
this.state = {};
}
// Component Life Cycle Functions
// Component Functions
render() {
// const {} = this.props;
return <WalletDetailsView {...this.props} />;
}
}
// const mapStateToProps = state => ({
// // user: state.user.user,
// });
export default WalletContainer;

View File

@ -0,0 +1,5 @@
import WalletDetailsView from './view/walletDetailsView';
import WalletDetails from './container/walletDetailsContainer';
export { WalletDetails, WalletDetailsView };
export default WalletDetails;

View File

@ -0,0 +1,7 @@
import EStyleSheet from 'react-native-extended-stylesheet';
export default EStyleSheet.create({
styleName: {
// TODO: If we need default style. We can put there.
},
});

View File

@ -0,0 +1,63 @@
import React, { Component } from 'react';
import { View } from 'react-native';
// Constants
// Components
import { GrayWrapper, WalletLineItem } from '../../basicUIElements';
// Styles
// eslint-disable-next-line
import styles from './walletDetailsStyles';
class WalletDetailsView extends Component {
/* Props
* ------------------------------------------------
* @prop { type } name - Description....
*/
constructor(props) {
super(props);
this.state = {};
}
// Component Life Cycles
// Component Functions
render() {
return (
<View>
<WalletLineItem
text="Steem"
textColor="#3c4449"
iconName="ios-information-circle-outline"
rightText="27.178 STEEM"
isBoldText
/>
<GrayWrapper>
<WalletLineItem
text="Steem"
textColor="#3c4449"
iconName="ios-information-circle-outline"
rightText="18,891.867 STEEM"
tightTextColor="red"
isBoldText
/>
<WalletLineItem rightText="- 15,088.108 SP" />
<WalletLineItem rightText="+ 504,787.529 SP" />
<WalletLineItem rightText="= 508,591.288 SP" rightTextColor="#357ce6" />
</GrayWrapper>
<WalletLineItem
text="Net power down is in 6 days"
textColor="#788187"
isThin
iconName="ios-information-circle-outline"
/>
</View>
);
}
}
export default WalletDetailsView;

View File

@ -1,25 +1,19 @@
import { DrawerNavigator } from 'react-navigation';
import { DrawerNavigator, SwitchNavigator } from 'react-navigation';
import { BaseNavigator } from '../navigation';
import { default as ROUTES } from '../constants/routeNames';
// Screens
import { Splash } from '../screens';
import { Splash, Login, PinCode } from '../screens';
// Components
import { SideMenu } from '../components';
export default DrawerNavigator(
const mainNavigation = DrawerNavigator(
{
SplashScreen: {
screen: Splash,
navigationOptions: {
header: () => null,
},
},
HomeScreen: {
[ROUTES.SCREENS.HOME]: {
screen: BaseNavigator,
navigationOptions: {
header: () => null,
gesturesEnabled: false,
},
},
},
@ -27,3 +21,10 @@ export default DrawerNavigator(
contentComponent: SideMenu,
},
);
export default SwitchNavigator({
[ROUTES.SCREENS.SPLASH]: { screen: Splash },
[ROUTES.SCREENS.LOGIN]: { screen: Login },
[ROUTES.SCREENS.PINCODE]: { screen: PinCode },
[ROUTES.DRAWER.MAIN]: mainNavigation,
});

View File

@ -0,0 +1,14 @@
const SCREEN_SUFFIX = 'Screen';
const DRAWER_SUFFIX = 'Drawer';
export default {
SCREENS: {
SPLASH: `Splash${SCREEN_SUFFIX}`,
LOGIN: `Login${SCREEN_SUFFIX}`,
PINCODE: `PinCode${SCREEN_SUFFIX}`,
HOME: `Home${SCREEN_SUFFIX}`,
},
DRAWER: {
MAIN: `Main${DRAWER_SUFFIX}`,
},
};

View File

@ -38,9 +38,9 @@ const authMenuItems = [
const noAuthMenuItems = [
{
name: 'Test',
route: 'Test',
icon: 'contact',
name: 'Login',
route: 'Login',
icon: 'user-o',
},
];

View File

@ -5,7 +5,6 @@ import { Provider } from 'react-redux';
import EStyleSheet from 'react-native-extended-stylesheet';
import store from './redux/store/store';
import { ReduxNavigation } from './config/reduxNavigation';
import { BaseNavigator } from './navigation';
// STYLE
@ -14,9 +13,12 @@ EStyleSheet.build({
$white: '#FFFFFF',
$black: '#000000',
$primaryBlue: '#357ce6',
$primaryGray: '#788187',
$primaryLightBlue: '#eaf2fc',
$primaryGray: '#f5f5f5',
$primaryDarkGray: '#788187',
$primaryLightGray: '#f6f6f6',
$primaryRed: '#e63535',
$primaryBlack: '#3c4449',
// General Colors
$borderColor: '#ffff',
@ -26,7 +28,7 @@ EStyleSheet.build({
$warningColor: '#fff',
$successColor: '#fff',
$disableButton: '#fff',
$shadowColor: '#fff',
$shadowColor: '#b0b0b0',
$disableGray: '#fff',
// Devices Sizes

View File

@ -4,7 +4,7 @@ import Icon from 'react-native-vector-icons/FontAwesome';
import Home from '../screens/home/home';
import { Notification } from '../screens/notification';
import AuthorProfile from '../screens/authorProfile';
import Wallet from '../screens/home/home';
import { Profile } from '../screens/profile';
import { PostButton } from '../components/postButton';
@ -34,8 +34,8 @@ const BaseNavigator = createBottomTabNavigator(
tabBarIcon: ({ tintColor }) => <Icon name="envelope-o" color={tintColor} size={18} />,
}),
},
Wallet: {
screen: Wallet,
Profile: {
screen: Profile,
navigationOptions: () => ({
tabBarIcon: ({ tintColor }) => <Icon name="credit-card" color={tintColor} size={18} />,
}),

View File

@ -1,4 +1,4 @@
import sc2 from 'sc2-sdk';
import sc2 from 'steemconnect';
const api = sc2.Initialize({
app: 'esteem-app',

View File

@ -4,8 +4,16 @@ import {
FETCH_USER_SUCCESS,
FETCH_USER_FAIL,
LOGOUT,
IS_LOGGED_IN,
} from '../constants/constants';
export function isLoggedIn(payload) {
return {
payload,
type: IS_LOGGED_IN,
};
}
export function fetchAccount(user) {
return (dispatch) => {
dispatch({ type: FETCH_USER });

View File

@ -12,3 +12,5 @@ export const UPDATE_ACCOUNT_DATA = 'UPDATE_ACCOUNT_DATA';
export const REMOVE_ACCOUNT_DATA = 'REMOVE_ACCOUNT_DATA';
export const FETCHING_ACCOUNT = 'FETCHING_ACCOUNT';
export const FETCH_ACCOUNT_FAIL = 'FETCH_ACCOUNT_FAIL';
export const IS_LOGGED_IN = 'IS_LOGGED_IN';

View File

@ -3,6 +3,7 @@ import {
FETCH_USER_SUCCESS,
FETCH_USER_FAIL,
LOGOUT,
IS_LOGGED_IN,
} from '../constants/constants';
const initialState = {
@ -38,6 +39,11 @@ export default function (state = initialState, action) {
errorMessage: action.err,
});
case IS_LOGGED_IN:
return Object.assign({}, state, {
isLoggedIn: action.payload,
});
case LOGOUT:
return initialState;

View File

@ -1,4 +1,4 @@
import React from 'react';
import React, { Component } from 'react';
import {
FlatList, View, ActivityIndicator, AppState,
} from 'react-native';
@ -15,7 +15,7 @@ import { FilterBar } from '../../components/filterBar';
/* eslint-enable no-unused-vars */
class FeedPage extends React.Component {
class FeedPage extends Component {
constructor(props) {
super(props);

View File

@ -1,4 +1,4 @@
import React from 'react';
import React, { PureComponent } from 'react';
import {
Text, View, Dimensions, TouchableOpacity,
} from 'react-native';
@ -26,7 +26,7 @@ import HotPage from './hot';
import FeedPage from './feed';
import TrendingPage from './trending';
export default class Home extends React.PureComponent {
export default class Home extends PureComponent {
static navigationOptions = {
title: 'Home',
};
@ -182,7 +182,6 @@ const styles = {
},
tabbarItem: {
flex: 1,
paddingHorizontal: 7,
backgroundColor: '#f9f9f9',
minWidth: Dimensions.get('window').width,
},

View File

@ -1,5 +1,5 @@
/* eslint-disable no-unused-vars */
import React from 'react';
import React, { Component } from 'react';
import { FlatList, View, ActivityIndicator } from 'react-native';
import Placeholder from 'rn-placeholder';
@ -17,7 +17,7 @@ import { FilterBar } from '../../components/filterBar';
// SCREENS
/* eslint-enable no-unused-vars */
class HotPage extends React.Component {
class HotPage extends Component {
constructor(props) {
super(props);

View File

@ -1,5 +1,5 @@
/* eslint-disable no-unused-vars */
import React from 'react';
import React, { Component } from 'react';
import {
StyleSheet, FlatList, View, ActivityIndicator,
} from 'react-native';
@ -16,7 +16,7 @@ import { PostCard } from '../../components/postCard';
// SCREENS
/* eslint-enable no-unused-vars */
class TrendingPage extends React.Component {
class TrendingPage extends Component {
constructor(props) {
super(props);

View File

@ -1,24 +1,26 @@
// import Author from './authorProfile';
import Splash from './splash';
// import SideMenu from './sideMenuScreen';
import Login from './login';
import PinCode from './pinCode';
import Home from './home/home';
// import Author from './authorProfile';
// import SideMenu from './sideMenuScreen';
// import Hot from './home/hot';
// import Feed from './home/feed';
// import { SinglePost } from './singlePost';
// import { Profile } from './profile';
// import { Login } from './login';
// import Wallet from './wallet/wallet';
// import Editor from './editor/editor';
// import Discover from './discover/discover';
// import Settings from './settings/settings';
// import { Notification } from './notification';
// import PinCode from './pinCode/pinCodeContainer';
export {
// Author,
Splash,
// SideMenu,
Login,
PinCode,
Home,
// Author,
// SideMenu,
// Hot,
// Feed,
// SinglePost,
@ -28,5 +30,4 @@ export {
// Editor,
// Discover,
// Notification,
// PinCode,
};

View File

@ -1,12 +1,13 @@
import React, { Component } from 'react';
import {
View, BackHandler, Linking, StatusBar,
} from 'react-native';
import { View, Linking, StatusBar } from 'react-native';
import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view';
import ScrollableTabView from '@esteemapp/react-native-scrollable-tab-view';
// Actions
import { addNewAccount } from '../../../redux/actions/accountAction';
import { isLoggedIn } from '../../../redux/actions/userActions';
// Internal Components
// import { Navigation } from 'react-native-navigation';
import { FormInput } from '../../../components/formInput';
import { TextButton } from '../../../components/buttons';
import { InformationArea } from '../../../components/informationArea';
@ -14,11 +15,12 @@ import { Login } from '../../../providers/steem/auth';
import { LoginHeader } from '../../../components/loginHeader';
import { MainButton } from '../../../components/mainButton';
import { TabBar } from '../../../components/tabBar';
import { addNewAccount } from '../../../redux/actions/accountAction';
// import { goToAuthScreens } from '../../../navigation';
import { lookupAccounts } from '../../../providers/steem/dsteem';
import STEEM_CONNECT_LOGO from '../../../assets/steem_connect.png';
// Constants
import { default as ROUTES } from '../../../constants/routeNames';
// Styles
import styles from './loginStyles';
@ -26,32 +28,17 @@ class LoginScreen extends Component {
constructor(props) {
super(props);
// Navigation.events().bindComponent(this);
this.handleUsername = this.handleUsername.bind(this);
this.state = {
username: '',
password: '',
isLoading: false,
isUsernameValid: false,
isUsernameValid: true,
keyboardIsOpen: false,
};
}
componentDidMount() {
BackHandler.addEventListener('hardwareBackPress', () => {
// Navigation.pop(this.props.componentId);
return true;
});
Linking.getInitialURL().then((url) => {
console.log(url);
});
}
componentWillUnmount() {
BackHandler.removeEventListener('hardwareBackPress');
}
_handleOnPressLogin = () => {
const { componentId, dispatch } = this.props;
const { dispatch, navigation } = this.props;
const { password, username } = this.state;
this.setState({ isLoading: true });
@ -60,28 +47,22 @@ class LoginScreen extends Component {
.then((result) => {
if (result) {
dispatch(addNewAccount(result));
// Navigation.setStackRoot(componentId, {
// component: {
// name: 'navigation.eSteem.PinCode',
// options: {
// topBar: {
// visible: false,
// },
// },
// },
// });
dispatch(isLoggedIn(true));
navigation.navigate(ROUTES.SCREENS.PINCODE);
}
})
.catch((err) => {
// alert(err);
.catch(() => {
dispatch(isLoggedIn(false));
this.setState({ isLoading: false });
});
};
handleUsername = async (username) => {
_handleUsernameChange = async (username) => {
await this.setState({ username });
const validUsers = await lookupAccounts(username);
await this.setState({ isUsernameValid: validUsers.includes(username) });
const isValid = validUsers.includes(username);
this.setState({ isUsernameValid: isValid });
};
_handleOnPasswordChange = (value) => {
@ -109,12 +90,9 @@ class LoginScreen extends Component {
};
render() {
const { navigation } = this.props;
const {
isLoading,
username,
isUsernameValid,
keyboardIsOpen,
password,
isLoading, username, isUsernameValid, keyboardIsOpen, password,
} = this.state;
return (
@ -126,81 +104,74 @@ class LoginScreen extends Component {
description="To get all the benefits using eSteem"
onPress={() => this._handleSignUp()}
/>
<KeyboardAwareScrollView
onKeyboardWillShow={() => this.setState({ keyboardIsOpen: true })}
onKeyboardWillHide={() => this.setState({ keyboardIsOpen: false })}
<ScrollableTabView
locked={isLoading}
style={styles.tabView}
renderTabBar={() => (
<TabBar
style={styles.tabbar}
tabUnderlineDefaultWidth={100} // default containerWidth / (numberOfTabs * 4)
tabUnderlineScaleX={2} // default 3
activeColor="#357ce6"
inactiveColor="#222"
/>
)}
>
<ScrollableTabView
locked={isLoading}
style={styles.tabView}
renderTabBar={() => (
<TabBar
style={styles.tabbar}
tabUnderlineDefaultWidth={100} // default containerWidth / (numberOfTabs * 4)
tabUnderlineScaleX={2} // default 3
activeColor="#357ce6"
inactiveColor="#222"
/>
)}
>
<View tabLabel="Sign in" style={styles.tabbarItem}>
<FormInput
rightIconName="md-at"
leftIconName="md-close-circle"
isValid={isUsernameValid}
onChange={value => this.handleUsername(value)}
placeholder="Username"
isEditable
type="username"
isFirstImage
value={username}
/>
<FormInput
rightIconName="md-lock"
leftIconName="md-close-circle"
isValid={isUsernameValid}
onChange={value => this._handleOnPasswordChange(value)}
placeholder="Password or WIF"
isEditable
secureTextEntry
type="password"
/>
<InformationArea
description="User credentials are kept locally on the device. Credentials are
<View tabLabel="Sign in" style={styles.tabbarItem}>
<FormInput
rightIconName="md-at"
leftIconName="md-close-circle"
isValid={isUsernameValid}
onChange={value => this._handleUsernameChange(value)}
placeholder="Username"
isEditable
type="username"
isFirstImage
value={username}
/>
<FormInput
rightIconName="md-lock"
leftIconName="md-close-circle"
isValid={isUsernameValid}
onChange={value => this._handleOnPasswordChange(value)}
placeholder="Password or WIF"
isEditable
secureTextEntry
type="password"
/>
<InformationArea
description="User credentials are kept locally on the device. Credentials are
removed upon logout!"
iconName="ios-information-circle-outline"
/>
<View style={styles.footerButtons}>
{/* <TextButton onPress={goToAuthScreens} text="cancel" /> */}
</View>
<MainButton
wrapperStyle={styles.mainButtonWrapper}
onPress={this._handleOnPressLogin}
iconName="md-person"
iconColor="white"
text="LOGIN"
isDisable={
!isUsernameValid || password.length < 2 || username.length < 2
}
isLoading={isLoading}
/>
iconName="ios-information-circle-outline"
/>
<View style={styles.footerButtons}>
<TextButton onPress={() => navigation.navigate(ROUTES.DRAWER.MAIN)} text="cancel" />
</View>
<View tabLabel="SteemConnect" style={styles.steemConnectTab}>
<InformationArea
description="If you don't want to keep your password encrypted and saved on your device, you can use Steemconnect."
iconName="ios-information-circle-outline"
/>
<MainButton
wrapperStyle={styles.mainButtonWrapper}
onPress={this._loginwithSc2}
iconName="md-person"
source={STEEM_CONNECT_LOGO}
text="steem"
secondText="connect"
/>
</View>
</ScrollableTabView>
</KeyboardAwareScrollView>
<MainButton
wrapperStyle={styles.mainButtonWrapper}
onPress={this._handleOnPressLogin}
iconName="md-person"
iconColor="white"
text="LOGIN"
isDisable={!isUsernameValid || password.length < 2 || username.length < 2}
isLoading={isLoading}
/>
</View>
<View tabLabel="SteemConnect" style={styles.steemConnectTab}>
<InformationArea
description="If you don't want to keep your password encrypted and saved on your device, you can use Steemconnect."
iconName="ios-information-circle-outline"
/>
<MainButton
wrapperStyle={styles.mainButtonWrapper}
onPress={() => this._loginwithSc2()}
iconName="md-person"
source={STEEM_CONNECT_LOGO}
text="steem"
secondText="connect"
/>
</View>
</ScrollableTabView>
</View>
);
}

View File

@ -1,23 +1,21 @@
import React from "react";
import { AsyncStorage } from "react-native";
import { connect } from "react-redux";
import { Navigation } from "react-native-navigation";
import React, { Component } from 'react';
import { AsyncStorage } from 'react-native';
import { connect } from 'react-redux';
import {
setUserDataWithPinCode,
verifyPinCode,
} from "../../../providers/steem/auth";
import { setUserDataWithPinCode, verifyPinCode } from '../../../providers/steem/auth';
import { default as INITIAL } from "../../../constants/initial";
// Constants
import { default as INITIAL } from '../../../constants/initial';
import { default as ROUTES } from '../../../constants/routeNames';
import { PinCodeScreen } from "../";
import { PinCodeScreen } from '..';
class PinCodeContainer extends React.Component {
class PinCodeContainer extends Component {
constructor(props) {
super(props);
this.state = {
isExistUser: null,
informationText: "",
informationText: '',
pinCode: null,
};
}
@ -28,99 +26,81 @@ class PinCodeContainer extends React.Component {
const { isExistUser } = this.state;
if (isExistUser) {
this.setState({
informationText: "Enter pin to unlock",
informationText: 'Enter pin to unlock',
});
} else {
this.setState({
informationText: "Set new pin",
informationText: 'Set new pin',
});
}
});
}
_getDataFromStorage = () =>
new Promise(resolve => {
AsyncStorage.getItem(INITIAL.IS_EXIST_USER, (err, result) => {
this.setState(
{
isExistUser: JSON.parse(result),
},
resolve
);
});
_getDataFromStorage = () => new Promise((resolve) => {
AsyncStorage.getItem(INITIAL.IS_EXIST_USER, (err, result) => {
this.setState(
{
isExistUser: JSON.parse(result),
},
resolve,
);
});
});
_setPinCode = pin =>
new Promise((resolve, reject) => {
const {
currentAccount: { password, name },
componentId,
} = this.props;
const { isExistUser, pinCode } = this.state;
if (isExistUser) {
// If the user is exist, we are just checking to pin and navigating to home screen
const pinData = {
pinCode: pin,
password,
username: name,
};
verifyPinCode(pinData)
.then(() => {
Navigation.setStackRoot(componentId, {
component: {
name: "navigation.eSteem.Home",
},
});
resolve();
})
.catch(err => {
alert(err);
reject(err);
});
} else {
// If the user is logging in for the first time, the user should set to pin
if (!pinCode) {
this.setState({
informationText: "Write again",
pinCode: pin,
});
_setPinCode = pin => new Promise((resolve, reject) => {
const {
currentAccount: { password, name },
navigation,
} = this.props;
const { isExistUser, pinCode } = this.state;
if (isExistUser) {
// If the user is exist, we are just checking to pin and navigating to home screen
const pinData = {
pinCode: pin,
password,
username: name,
};
verifyPinCode(pinData)
.then(() => {
navigation.navigate(ROUTES.DRAWER.MAIN);
resolve();
} else {
if (pinCode === pin) {
const pinData = {
pinCode: pin,
password,
username: name,
};
setUserDataWithPinCode(pinData).then(() => {
AsyncStorage.setItem(
INITIAL.IS_EXIST_USER,
JSON.stringify(true),
() => {
Navigation.setStackRoot(componentId, {
component: {
name: "navigation.eSteem.Home",
},
});
resolve();
}
);
});
} else {
this.setState({
informationText: "wrongggg!!!",
});
setTimeout(() => {
this.setState({
informationText: "setup screen",
pinCode: null,
});
resolve();
}, 1000);
}
}
}
});
})
.catch((err) => {
alert(err);
reject(err);
});
} else if (!pinCode) {
// If the user is logging in for the first time, the user should set to pin
this.setState({
informationText: 'Write again',
pinCode: pin,
});
resolve();
} else if (pinCode === pin) {
const pinData = {
pinCode: pin,
password,
username: name,
};
setUserDataWithPinCode(pinData).then(() => {
AsyncStorage.setItem(INITIAL.IS_EXIST_USER, JSON.stringify(true), () => {
navigation.navigate(ROUTES.DRAWER.MAIN);
resolve();
});
});
} else {
this.setState({
informationText: 'wrongggg!!!',
});
setTimeout(() => {
this.setState({
informationText: 'setup screen',
pinCode: null,
});
resolve();
}, 1000);
}
});
render() {
const { currentAccount } = this.props;
@ -130,7 +110,7 @@ class PinCodeContainer extends React.Component {
informationText={informationText}
setPinCode={this._setPinCode}
showForgotButton={isExistUser}
username={currentAccount ? currentAccount.name : "unknow"}
username={currentAccount ? currentAccount.name : 'unknow'}
/>
);
}
@ -138,7 +118,7 @@ class PinCodeContainer extends React.Component {
const mapStateToProps = state => ({
currentAccount: state.account.data.accounts.find(
item => item.id === state.account.data.currentAccountId
item => item.id === state.account.data.currentAccountId,
),
});

View File

@ -1,5 +1,5 @@
import PinCodeScreen from "./screen/pinCodeScreen";
import PinCode from "./container/pinCodeContainer";
import PinCodeScreen from './screen/pinCodeScreen';
import PinCodeContainer from './container/pinCodeContainer';
export { PinCodeScreen, PinCode };
export default PinCode;
export { PinCodeScreen, PinCodeContainer };
export default PinCodeContainer;

View File

@ -1,17 +1,19 @@
import React from "react";
import { Text, TouchableOpacity, Animated, View } from "react-native";
import { Container } from "native-base";
import React, { Component } from 'react';
import {
Text, TouchableOpacity, Animated, View,
} from 'react-native';
import { Container } from 'native-base';
import { Logo, NumericKeyboard, PinAnimatedInput } from "../../../components";
import { Logo, NumericKeyboard, PinAnimatedInput } from '../../../components';
import styles from "./pinCodeStyles";
import styles from './pinCodeStyles';
class PinCodeScreen extends React.Component {
class PinCodeScreen extends Component {
constructor(props) {
super(props);
this.state = {
showPassword: false,
pin: "",
pin: '',
};
}
@ -19,12 +21,12 @@ class PinCodeScreen extends React.Component {
// Component Functions
_handleKeyboardOnPress = value => {
_handleKeyboardOnPress = (value) => {
const { setPinCode } = this.props;
const { pin } = this.state;
if (value === "clear") {
this.setState({ pin: "" });
if (value === 'clear') {
this.setState({ pin: '' });
return;
}
const newPin = `${pin}${value}`;
@ -35,10 +37,10 @@ class PinCodeScreen extends React.Component {
this.setState({ pin: newPin });
setPinCode(`${pin}${value}`)
.then(() => {
this.setState({ pin: "" });
this.setState({ pin: '' });
})
.catch(() => {
this.setState({ pin: "" });
this.setState({ pin: '' });
});
} else if (pin.length > 3) {
this.setState({ pin: `${value}` });

View File

@ -9,10 +9,11 @@ import {
} from 'native-base';
import { getTimeFromNow } from '../../utils/time';
import { TabBar } from '../../../components/tabBar';
import DiscoverPage from '../discover/discover';
import { PostCard } from '../../components/postCard';
import Comment from '../../components/comment/comment';
import ScrollableTabView from "@esteemapp/react-native-scrollable-tab-view";
import { TabBar } from "../../components/tabBar";
import DiscoverPage from "../discover/discover";
import { PostCard } from "../../components/postCard";
import Comment from "../../components/comment/comment";
import { getUserData, getAuthStatus } from '../../realm/realm';

View File

@ -1,63 +1,34 @@
/* eslint-disable no-unused-vars */
import React from 'react';
import { FlatList, ActivityIndicator } from 'react-native';
import React, { Component } from 'react';
import {
FlatList, ActivityIndicator, View, Text,
} from 'react-native';
import FastImage from 'react-native-fast-image';
// Components
import ScrollableTabView from '@esteemapp/react-native-scrollable-tab-view';
import {
Card, CardItem, View, Body, Icon, Text,
} from 'native-base';
import { getTimeFromNow } from '../../../utils/time';
import { TabBar } from '../../../components/tabBar';
import DiscoverPage from '../../discover/discover';
import { PostCard } from '../../../components/postCard';
import Comment from '../../../components/comment/comment';
import { CollapsibleCard } from '../../../components/collapsibleCard';
import { FilterBar } from '../../../components/filterBar';
import { NoPost } from '../../../components/basicUIElements';
import { PostCard } from '../../../components/postCard';
import { ProfileSummary } from '../../../components/profileSummary';
import { TabBar } from '../../../components/tabBar';
import { Wallet } from '../../../components/wallet';
import { getUserData, getAuthStatus } from '../../../realm/realm';
// Utilitites
import {
getUser,
getFollows,
getPosts,
getUserComments,
getUser, getFollows, getPosts, getUserComments,
} from '../../../providers/steem/dsteem';
import { getUserData, getAuthStatus } from '../../../realm/realm';
import { getFormatedCreatedDate } from '../../../utils/time';
// Styles
import styles from './profileStyles';
/* eslint-enable no-unused-vars */
class ProfileScreen extends React.Component {
static get options() {
return {
_statusBar: {
visible: true,
drawBehind: false,
},
topBar: {
animate: true,
hideOnScroll: false,
drawBehind: false,
leftButtons: {
id: 'back',
},
},
layout: {
backgroundColor: '#f5fcff',
},
bottomTabs: {
visible: false,
drawBehind: true,
},
};
}
constructor() {
super();
this.getBlog = this.getBlog.bind(this);
this.getMore = this.getMore.bind(this);
this.getComments = this.getComments.bind(this);
class ProfileScreen extends Component {
constructor(props) {
super(props);
this.state = {
user: [],
posts: [],
@ -66,12 +37,14 @@ class ProfileScreen extends React.Component {
about: {},
follows: {},
isLoggedIn: false,
isLoading: true,
};
}
async componentDidMount() {
let isLoggedIn;
await getAuthStatus().then((res) => {
const isLoggedIn = res;
isLoggedIn = res;
});
if (isLoggedIn) {
@ -89,25 +62,25 @@ class ProfileScreen extends React.Component {
});
user = await getUser(userData[0].username);
about = JSON.parse(user.json_metadata);
// BUG: json_metadata: "{}" is coming emty object!!
// json_metadata: "{}" can be ceme as emty object if the account new!
about = user.json_metadata && JSON.parse(user.json_metadata);
this.setState(
{
user,
isLoggedIn,
follows,
about: about.profile,
about: about && about.profile,
},
() => {
this.getBlog(userData[0].username);
this.getComments(userData[0].username);
this._getBlog(userData[0].username);
this._getComments(userData[0].username);
},
);
}
}
renderFooter = () => {
if (this.state.loading) return null;
_renderFooter = () => {
if (this.state.isLoading) return null;
return (
<View style={{ marginVertical: 20 }}>
@ -116,8 +89,8 @@ class ProfileScreen extends React.Component {
);
};
getBlog = (user) => {
this.setState({ loading: true });
_getBlog = (user) => {
this.setState({ isLoading: true });
getPosts('blog', { tag: user, limit: 10 }, user)
.then((result) => {
this.setState({
@ -126,7 +99,7 @@ class ProfileScreen extends React.Component {
start_author: result[result.length - 1].author,
start_permlink: result[result.length - 1].permlink,
refreshing: false,
loading: false,
isLoading: false,
});
})
.catch((err) => {
@ -134,7 +107,7 @@ class ProfileScreen extends React.Component {
});
};
getMore = async () => {
_getMore = async () => {
console.log('get more');
await getPosts(
'blog',
@ -151,21 +124,21 @@ class ProfileScreen extends React.Component {
posts.shift();
this.setState({
posts: [...this.state.posts, ...posts],
start_author: result[result.length - 1].author,
start_permlink: result[result.length - 1].permlink,
loading: false,
start_author: result[result.length - 1] && result[result.length - 1].author,
start_permlink: result[result.length - 1] && result[result.length - 1].permlink,
isLoading: false,
});
});
};
getComments = async (user) => {
_getComments = async (user) => {
await getUserComments({ start_author: user, limit: 10 })
.then((result) => {
this.setState({
isReady: true,
commments: result,
refreshing: false,
loading: false,
isLoading: false,
});
})
.catch((err) => {
@ -173,200 +146,117 @@ class ProfileScreen extends React.Component {
});
};
_getPostRenderItem = () => {};
render() {
// TODO: Refactor ME !
const {
user, follows, posts, commments, isLoggedIn, isLoading, about,
} = this.state;
let _about;
let coverImage;
let location;
let website;
const votingPower = user && user.voting_power && user.voting_power / 100;
const fullInHour = Math.ceil((100 - votingPower) * 0.833333);
if (about) {
_about = about.about;
coverImage = about.cover_image;
location = about.location;
website = about.website;
}
return (
<View style={styles.container}>
{this.state.isLoggedIn ? (
<View style={{ flex: 1 }}>
<View style={styles.content}>
<FastImage
style={styles.cover}
source={{
uri: this.state.about.cover_image,
priority: FastImage.priority.high,
}}
/>
<FastImage
style={styles.avatar}
source={{
uri: this.state.about.profile_image,
priority: FastImage.priority.high,
}}
/>
<Body style={{ top: -40 }}>
<Text style={{ fontWeight: 'bold' }}>
{this.state.user.name}
</Text>
<Text>{this.state.about.about}</Text>
</Body>
<Card style={{ margin: 0 }}>
<CardItem style={styles.about}>
<View style={{ flex: 0.3 }}>
<Text>
{this.state.user.post_count}
{' '}
Posts
</Text>
</View>
<View style={{ flex: 0.4 }}>
<Text>
{this.state.follows.follower_count}
{' '}
Followers
</Text>
</View>
<View style={{ flex: 0.4 }}>
<Text>
{this.state.follows.following_count}
{' '}
Following
</Text>
</View>
</CardItem>
<CollapsibleCard
title={_about}
defaultTitle="Profile details"
expanded={true}
// locked={!isLoggedIn}
>
<ProfileSummary
percent={votingPower}
hours={fullInHour}
location={location}
link={website}
date={getFormatedCreatedDate(user && user.created)}
followerCount={follows.follower_count}
followingCount={follows.following_count}
coverImage={coverImage}
/>
</CollapsibleCard>
<CardItem style={styles.info}>
<View style={{ flex: 0.5 }}>
<Text
style={{
marginLeft: 20,
alignSelf: 'flex-start',
}}
>
<Icon
style={{
fontSize: 20,
alignSelf: 'flex-start',
}}
name="md-pin"
/>
{this.state.about.location}
</Text>
</View>
<View style={{ flex: 0.5 }}>
<Text>
<Icon
style={{
fontSize: 20,
marginRight: 10,
}}
name="md-calendar"
/>
{getTimeFromNow(this.state.user.created)}
</Text>
</View>
</CardItem>
</Card>
</View>
<ScrollableTabView
style={styles.tabs}
style={{ flex: 1 }}
renderTabBar={() => (
<TabBar
style={styles.tabbar}
tabUnderlineDefaultWidth={30} // default containerWidth / (numberOfTabs * 4)
tabUnderlineScaleX={3} // default 3
activeColor="#222"
inactiveColor="#222"
/>
)}
>
<View tabLabel="Blog" style={styles.tabbarItem}>
<FlatList
data={this.state.posts}
showsVerticalScrollIndicator={false}
renderItem={({ item }) => (
<PostCard
style={{ shadowColor: 'white' }}
content={item}
user={this.state.user}
isLoggedIn
/>
)}
keyExtractor={(post, index) => index.toString()}
onEndReached={(info) => {
if (!this.state.loading) {
console.log(info);
this.getMore();
}
}}
onEndThreshold={0}
bounces={false}
ListFooterComponent={this.renderFooter}
/>
</View>
<View tabLabel="Comments" style={styles.tabbarItem}>
<FlatList
data={this.state.commments}
showsVerticalScrollIndicator={false}
renderItem={({ item }) => (
<Comment
comment={item}
isLoggedIn
user={this.state.user}
/>
)}
keyExtractor={(post, index) => index.toString()}
onEndThreshold={0}
bounces={false}
ListFooterComponent={this.renderFooter}
/>
</View>
<View tabLabel="Replies" style={styles.tabbarItem} />
<View tabLabel="Wallet" style={styles.tabbarItem}>
<Card>
<Text>
STEEM Balance:
{this.state.user.balance}
</Text>
</Card>
<Card>
<Text>
SBD Balance:
{this.state.user.sbd_balance}
</Text>
</Card>
<Card>
<Text>
STEEM Power:
{this.state.user.steem_power}
{' '}
SP
</Text>
<Text>
Received STEEM Power:
{' '}
{this.state.user.received_steem_power}
{' '}
SP
</Text>
<Text>
Delegated Power Power:
{' '}
{this.state.user.delegated_steem_power}
{' '}
SP
</Text>
</Card>
<Card>
<Text>
Saving STEEM Balance:
{' '}
{this.state.user.savings_balance}
</Text>
<Text>
Saving STEEM Balance:
{' '}
{this.state.user.savings_sbd_balance}
</Text>
</Card>
</View>
</ScrollableTabView>
<ScrollableTabView
style={styles.tabView}
renderTabBar={() => (
<TabBar
style={styles.tabbar}
tabUnderlineDefaultWidth={80}
tabUnderlineScaleX={2}
activeColor="#357ce6"
inactiveColor="#788187"
/>
)}
>
<View tabLabel="Post" style={styles.postTabBar}>
<FilterBar
isHide={!isLoggedIn}
dropdownIconName="md-arrow-dropdown"
options={['NEW POSTS', 'VOTES', 'REPLIES', 'MENTIONS', 'FOLLOWS', 'REBLOGS']}
defaultText="ALL NOTIFICATION"
onDropdownSelect={this._handleOnDropdownSelect}
rightIconName="md-apps"
/>
{posts && posts.length > 0 ? (
<FlatList
data={posts}
showsVerticalScrollIndicator={false}
renderItem={({ item }) => (
<PostCard
style={{
shadowColor: '#f6f6f6',
}}
content={item}
user={user}
isLoggedIn
/>
)}
keyExtractor={(post, index) => index.toString()}
onEndReached={(info) => {
!isLoading && this._getMore();
}}
onEndThreshold={0}
bounces={false}
/>
) : (
<NoPost
name={user.name}
text={"haven't posted anything yet"}
defaultText="Login to see!"
/>
)}
</View>
) : (
<DiscoverPage />
)}
<View tabLabel="Comments" style={styles.commentsTabBar}>
{commments && commments.length > 0 ? (
<FlatList
data={commments}
showsVerticalScrollIndicator={false}
renderItem={({ item }) => <Comment comment={item} isLoggedIn user={user} />}
keyExtractor={(post, index) => index.toString()}
onEndThreshold={0}
bounces={false}
/>
) : (
<NoPost
name={user.name}
text="haven't commented anything yet"
defaultText="Login to see!"
/>
)}
</View>
<View tabLabel={user.balance ? `$${user.balance}` : 'Wallet'}>
<Wallet />
</View>
</ScrollableTabView>
</View>
);
}

View File

@ -5,6 +5,7 @@ export default EStyleSheet.create({
container: {
flex: 1,
top: StatusBar.currentHeight,
backgroundColor: '#f6f6f6',
},
content: {
backgroundColor: '#f9f9f9',
@ -47,4 +48,18 @@ export default EStyleSheet.create({
backgroundColor: '#f9f9f9',
minWidth: '$deviceWidth',
},
tabbar: {
alignSelf: 'center',
height: 55,
backgroundColor: 'white',
borderBottomColor: '#f1f1f1',
},
tabView: {
alignSelf: 'center',
backgroundColor: 'transparent',
},
postTabBar: {},
commentsTabBar: {},
tabBarTitle: {},
});

View File

@ -1,60 +0,0 @@
import React from 'react';
/* eslint-disable no-unused-vars */
import {
ActivityIndicator, StatusBar, StyleSheet, View,
} from 'react-native';
import { getAuthStatus, getUserData } from '../../realm/realm';
export class AuthLoadingScreen extends React.Component {
constructor(props) {
super(props);
this.checkAuth();
}
// Fetch the login state from storage then navigate to our appropriate place
checkAuth = async () => {
await getAuthStatus()
.then((result) => {
if (result) {
getUserData()
.then((userData) => {
// This will switch to the App screen or Auth screen and this loading
// screen will be unmounted and thrown away.
this.props.navigation.navigate('LoggedIn', {
account: userData['0'].username,
});
})
.catch((err) => {
alert(err);
});
} else {
this.props.navigation.navigate('LoggedOut');
}
})
.catch((err) => {
alert(err);
});
};
// Render any loading content that you like here
render() {
return (
<View style={styles.container}>
<StatusBar barStyle="default" />
<ActivityIndicator />
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
},
text: {
fontSize: 32,
},
});

View File

@ -1,267 +0,0 @@
import React from 'react';
/* eslint-disable no-unused-vars */
import {
Content,
Text,
List,
ListItem,
Icon,
Container,
Left,
Right,
View,
Badge,
Thumbnail,
} from 'native-base';
/* eslint-enable no-unused-vars */
import RNRestart from 'react-native-restart';
import { Navigation } from 'react-native-navigation';
import styles from './style';
import { getAccount } from '../../providers/steem/dsteem';
import { setAuthStatus } from '../../realm/realm';
const masterKeyMenuOptions = [
{
name: 'Profile',
route: 'Profile',
icon: 'contact',
bg: '#C5F442',
},
{
name: 'Bookmarks',
route: 'bookmarks',
icon: 'bookmarks',
bg: '#DA4437',
},
{
name: 'Favorites',
route: 'favorites',
icon: 'heart',
bg: '#DA4437',
},
{
name: 'Drafts',
route: 'drafts',
icon: 'create',
bg: '#DA4437',
},
{
name: 'Schedules',
route: 'schedules',
icon: 'time',
bg: '#DA4437',
},
{
name: 'Gallery',
route: 'galery',
icon: 'images',
bg: '#DA4437',
},
{
name: 'Settings',
route: 'Settings',
icon: 'settings',
bg: '#DA4437',
},
];
const postingKeyMenuOptions = [
{
name: 'Profile',
route: 'Profile',
icon: 'contact',
bg: '#C5F442',
},
{
name: 'Bookmarks',
route: 'bookmarks',
icon: 'bookmarks',
bg: '#DA4437',
},
{
name: 'Favorites',
route: 'favorites',
icon: 'heart',
bg: '#DA4437',
},
{
name: 'Drafts',
route: 'drafts',
icon: 'create',
bg: '#DA4437',
},
{
name: 'Schedules',
route: 'schedules',
icon: 'time',
bg: '#DA4437',
},
{
name: 'Gallery',
route: 'galery',
icon: 'images',
bg: '#DA4437',
},
{
name: 'Settings',
route: 'Settings',
icon: 'settings',
bg: '#DA4437',
},
];
export default class LoggedInSideBar extends React.Component {
constructor(props) {
super(props);
this.state = {
shadowOffsetWidth: 1,
shadowRadius: 4,
user: [],
loginType: '',
json_metadata: {},
};
}
componentDidMount() {
getAccount(this.props.user)
.then((result) => {
const json_metadata = JSON.parse(result[0].json_metadata);
this.setState({
user: result[0],
avatar: `https://steemitimages.com/u/${result[0].name}/avatar/small`,
json_metadata: json_metadata.profile,
});
})
.catch((err) => {
alert(err);
});
}
hideSideMenu() {
Navigation.mergeOptions('Component14', {
sideMenu: {
right: {
visible: false,
},
},
});
}
Logout = () => {
const authData = {
isLoggedIn: false,
};
setAuthStatus(authData)
.then(() => {
RNRestart.Restart();
})
.catch((err) => {
alert(err);
});
};
render() {
return (
<Container>
<Content
bounces={false}
style={{ flex: 1, backgroundColor: '#fff', top: -1 }}
>
<View style={styles.drawerCover} />
<Thumbnail
style={styles.drawerImage}
source={{ uri: this.state.avatar }}
/>
<View style={styles.info}>
<Text style={styles.userLabel}>
{(this.state.json_metadata && this.state.json_metadata.name)
|| ''}
</Text>
<Text style={styles.username}>
@
{this.state.user.name}
</Text>
</View>
<List
style={{ paddingLeft: 25 }}
dataArray={
this.state.loginType === 'master_key'
? masterKeyMenuOptions
: postingKeyMenuOptions
}
renderRow={data => (
<ListItem
button
noBorder
onPress={() => {
Navigation.push('tab1Stack', {
component: {
name: `navigation.eSteem.${data.route}`,
passProps: {},
options: {
topBar: {
title: {},
},
},
},
});
this.hideSideMenu();
}}
>
<Left>
<Icon
active
name={data.icon}
style={{
color: '#777',
fontSize: 26,
width: 30,
}}
/>
<Text style={styles.text}>{data.name}</Text>
</Left>
{data.types && (
<Right style={{ flex: 1 }}>
<Badge
style={{
borderRadius: 3,
height: 25,
width: 72,
backgroundColor: data.bg,
}}
>
<Text style={styles.badgeText}>
{`${
data.types
} Types`}
</Text>
</Badge>
</Right>
)}
</ListItem>
)}
/>
<ListItem
noBorder
style={{ paddingLeft: 25 }}
onPress={() => this.Logout()}
>
<Left>
<Icon
active
name="log-out"
style={{
color: '#777',
fontSize: 26,
width: 30,
}}
/>
<Text style={styles.text}>Logout</Text>
</Left>
</ListItem>
</Content>
</Container>
);
}
}

View File

@ -1,123 +0,0 @@
/* eslint-disable no-unused-vars */
import React, { Component } from 'react';
import { Image } from 'react-native';
import {
Content,
Text,
List,
ListItem,
Icon,
Container,
Left,
Right,
Badge,
} from 'native-base';
import { Navigation } from 'react-native-navigation';
import styles from './style';
const drawerCover = require('../../assets/drawer-cover.png');
const drawerImage = require('../../assets/esteem.png');
const datas = [
{
name: 'Login',
route: 'Login',
icon: 'log-in',
bg: '#C5F442',
},
];
export default class LoggedOutSideBar extends Component {
constructor(props) {
super(props);
this.state = {
shadowOffsetWidth: 1,
shadowRadius: 4,
};
}
hideSideMenu() {
Navigation.mergeOptions('Component14', {
sideMenu: {
right: {
visible: false,
},
},
});
}
render() {
return (
<Container>
<Content
bounces={false}
style={{ flex: 1, backgroundColor: '#fff' }}
>
<Image source={drawerCover} style={styles.drawerCover} />
<Image
square
style={styles.drawerImage}
source={drawerImage}
/>
<List
dataArray={datas}
renderRow={data => (
<ListItem
button
noBorder
onPress={() => {
Navigation.push('tab1Stack', {
component: {
name: `navigation.eSteem.${
data.route
}`,
passProps: {},
options: {
topBar: {
title: {},
},
},
},
});
this.hideSideMenu();
}}
>
<Left>
<Icon
active
name={data.icon}
style={{
color: '#777',
fontSize: 26,
width: 30,
}}
/>
<Text style={styles.text}>{data.name}</Text>
</Left>
{data.types && (
<Right style={{ flex: 1 }}>
<Badge
style={{
borderRadius: 3,
height: 25,
width: 72,
backgroundColor: data.bg,
}}
>
<Text style={styles.badgeText}>
{`${
data.types
} Types`}
</Text>
</Badge>
</Right>
)}
</ListItem>
)}
/>
</Content>
</Container>
);
}
}

View File

@ -1,63 +0,0 @@
import { Platform } from 'react-native';
import EStyleSheet from 'react-native-extended-stylesheet';
export default EStyleSheet.create({
drawerCover: {
alignSelf: 'stretch',
backgroundColor: '#296CC0',
height: '$deviceHeight / 5',
width: null,
position: 'relative',
marginBottom: 10,
},
drawerImage: {
position: 'absolute',
left:
Platform.OS === 'android'
? '$deviceWidth / 20'
: '$deviceWidth / 30',
top:
Platform.OS === 'android'
? '$deviceHeight / 20'
: '$deviceHeight / 20',
width: 70,
height: 70,
resizeMode: 'cover',
borderWidth: 1,
borderColor: 'white',
borderRadius: 35,
},
text: {
fontWeight: Platform.OS === 'ios' ? '500' : '400',
fontSize: 16,
marginLeft: 20,
color: '#778287',
},
badgeText: {
fontSize: Platform.OS === 'ios' ? 13 : 11,
fontWeight: '400',
textAlign: 'center',
marginTop: Platform.OS === 'android' ? -3 : undefined,
},
info: {
position: 'absolute',
top:
Platform.OS === 'android'
? '$deviceHeight / 11'
: '$deviceHeight / 11',
left:
Platform.OS === 'android' ? '$deviceWidth / 4' : '$deviceWidth / 4',
},
userLabel: {
fontWeight: 'bold',
color: 'white',
marginBottom: 3,
fontSize: 13,
},
username: {
fontWeight: 'normal',
color: '#e5e5e5',
fontSize: 12,
marginBottom: 3,
},
});

View File

@ -1,63 +0,0 @@
import React, { Component } from 'react';
import { View } from 'react-native';
import LoggedInMenu from './side-menu/loggedInMenu';
import LoggedOutMenu from './side-menu/loggedOutMenu';
import { getAuthStatus, getUserData } from '../realm/realm';
class SideMenuScreen extends Component {
constructor() {
super();
this.state = {
isLoggedIn: false,
username: '',
};
}
async componentDidMount() {
let user;
let isLoggedIn;
await getAuthStatus().then((res) => {
isLoggedIn = res;
});
if (isLoggedIn) {
await getUserData().then((res) => {
user = Array.from(res);
});
this.setState({
username: user[0].username,
isLoggedIn,
isLoading: false,
});
} else {
await this.setState({
isLoggedIn: false,
});
}
}
render() {
return (
<View style={styles.root}>
{this.state.isLoggedIn ? (
<LoggedInMenu user={this.state.username} />
) : (
<LoggedOutMenu />
)}
</View>
);
}
}
module.exports = SideMenuScreen;
const styles = {
root: {
flexGrow: 1,
backgroundColor: '#f5fcff',
},
};

View File

@ -1,11 +1,27 @@
import React, { Component } from 'react';
import { getUserData, getAuthStatus } from '../../../realm/realm';
// Constants
import { default as ROUTES } from '../../../constants/routeNames';
import SplashScreen from '../screen/splashScreen';
class SplashContainer extends Component {
componentWillMount() {
const { navigation } = this.props;
navigation.navigate('HomeScreen');
// getUserData().then((res) => {
// if (res) {
// alert(...res);
// }
// });
getAuthStatus().then((res) => {
if (res) {
navigation.navigate(ROUTES.DRAWER.MAIN);
} else {
navigation.navigate(ROUTES.SCREENS.LOGIN);
}
});
}
render() {

View File

@ -1,3 +1,3 @@
import SplashContainer from './container/splashContainer';
import Splash from './container/splashContainer';
export default SplashContainer;
export default Splash;

View File

@ -1,8 +1,8 @@
import React from 'react';
import React, { Component } from 'react';
import { Text } from 'react-native';
import { Container } from 'native-base';
class SplashScreen extends React.Component {
class SplashScreen extends Component {
constructor(props) {
super(props);
}

View File

@ -7,7 +7,7 @@ export default EStyleSheet.create({
justifyContent: 'center',
},
input: {
backgroundColor: '#f5f5f5',
backgroundColor: '$primaryGray',
borderRadius: 5,
padding: 15,
minWidth: '$deviceWidth / 2',

21
src/utils/realm.js Normal file
View File

@ -0,0 +1,21 @@
import { getUserData, getAuthStatus } from "../realm/realm";
export const getUserIsLoggedIn = () => {
getAuthStatus()
.then(res => {
return res;
})
.catch(() => {
return null;
});
};
export const getUserDataFromRealm = () => {
getUserData()
.then(res => {
userData = Array.from(res);
})
.catch(() => {
return null;
});
};

View File

@ -8,3 +8,9 @@ export const getTimeFromNow = (value) => {
.local()
.fromNow();
};
export const getFormatedCreatedDate = value => {
if (!value) return null;
return moment(value).format("DD MMM, YYYY");
};