mirror of
https://github.com/ecency/ecency-mobile.git
synced 2024-12-23 13:22:02 +03:00
Merge pull request #53 from esteemapp/merge/navigation-profile
Profile Screen (main branch from navigation)
This commit is contained in:
commit
fc3336e251
@ -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')
|
||||
|
@ -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(),
|
||||
|
@ -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'
|
||||
|
@ -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
5526
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -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",
|
||||
|
BIN
src/assets/default_cover_image.png
Normal file
BIN
src/assets/default_cover_image.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 127 KiB |
BIN
src/assets/no_post.png
Normal file
BIN
src/assets/no_post.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 306 KiB |
@ -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,
|
||||
};
|
||||
|
12
src/components/basicUIElements/view/cardStyles.js
Normal file
12
src/components/basicUIElements/view/cardStyles.js
Normal 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,
|
||||
},
|
||||
});
|
7
src/components/basicUIElements/view/cardView.js
Normal file
7
src/components/basicUIElements/view/cardView.js
Normal 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;
|
9
src/components/basicUIElements/view/grayWrapperStyles.js
Normal file
9
src/components/basicUIElements/view/grayWrapperStyles.js
Normal file
@ -0,0 +1,9 @@
|
||||
import EStyleSheet from 'react-native-extended-stylesheet';
|
||||
|
||||
export default EStyleSheet.create({
|
||||
wrapper: {
|
||||
flexDirection: 'column',
|
||||
backgroundColor: '$primaryGray',
|
||||
borderRadius: 8,
|
||||
},
|
||||
});
|
7
src/components/basicUIElements/view/grayWrapperView.js
Normal file
7
src/components/basicUIElements/view/grayWrapperView.js
Normal 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;
|
21
src/components/basicUIElements/view/noPostStyles.js
Normal file
21
src/components/basicUIElements/view/noPostStyles.js
Normal 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",
|
||||
},
|
||||
});
|
17
src/components/basicUIElements/view/noPostView.js
Normal file
17
src/components/basicUIElements/view/noPostView.js
Normal 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;
|
24
src/components/basicUIElements/view/percentBarStyles.js
Normal file
24
src/components/basicUIElements/view/percentBarStyles.js
Normal 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,
|
||||
},
|
||||
});
|
42
src/components/basicUIElements/view/percentBarView.js
Normal file
42
src/components/basicUIElements/view/percentBarView.js
Normal 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;
|
21
src/components/basicUIElements/view/textWithIconStyles.js
Normal file
21
src/components/basicUIElements/view/textWithIconStyles.js
Normal 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,
|
||||
},
|
||||
});
|
27
src/components/basicUIElements/view/textWithIconView.js
Normal file
27
src/components/basicUIElements/view/textWithIconView.js
Normal 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;
|
75
src/components/basicUIElements/view/walletLineItemStyles.js
Normal file
75
src/components/basicUIElements/view/walletLineItemStyles.js
Normal 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',
|
||||
},
|
||||
});
|
61
src/components/basicUIElements/view/walletLineItemView.js
Normal file
61
src/components/basicUIElements/view/walletLineItemView.js
Normal 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;
|
@ -9,7 +9,7 @@ export default EStyleSheet.create({
|
||||
height: 19,
|
||||
},
|
||||
buttonText: {
|
||||
color: '#c1c5c7',
|
||||
color: '$iconColor',
|
||||
fontSize: 16,
|
||||
},
|
||||
});
|
||||
|
4
src/components/collapsibleCard/index.js
Normal file
4
src/components/collapsibleCard/index.js
Normal file
@ -0,0 +1,4 @@
|
||||
import CollapsibleCard from "./view/collapsibleCardView";
|
||||
|
||||
export { CollapsibleCard };
|
||||
export default CollapsibleCard;
|
23
src/components/collapsibleCard/view/collapsibleCardStyles.js
Normal file
23
src/components/collapsibleCard/view/collapsibleCardStyles.js
Normal 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,
|
||||
},
|
||||
});
|
105
src/components/collapsibleCard/view/collapsibleCardView.js
Normal file
105
src/components/collapsibleCard/view/collapsibleCardView.js
Normal 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;
|
@ -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,
|
||||
},
|
||||
});
|
||||
|
@ -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>
|
||||
);
|
||||
}
|
||||
|
@ -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',
|
||||
},
|
||||
});
|
||||
|
@ -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>
|
||||
);
|
||||
|
||||
|
@ -10,11 +10,10 @@ export default EStyleSheet.create({
|
||||
},
|
||||
rightIconWrapper: {
|
||||
marginRight: 32,
|
||||
alignSelf: 'center',
|
||||
},
|
||||
rightIcon: {
|
||||
color: '#c1c5c7',
|
||||
fontSize: 32,
|
||||
color:"$iconColor",
|
||||
textAlign: 'center',
|
||||
width: 32,
|
||||
},
|
||||
});
|
||||
|
@ -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>
|
||||
);
|
||||
|
||||
|
@ -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",
|
||||
},
|
||||
});
|
||||
|
@ -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"
|
||||
|
4
src/components/iconButton/index.js
Normal file
4
src/components/iconButton/index.js
Normal file
@ -0,0 +1,4 @@
|
||||
import IconButton from "./view/iconButtonView";
|
||||
|
||||
export { IconButton };
|
||||
export default IconButton;
|
13
src/components/iconButton/view/iconButtonStyles.js
Normal file
13
src/components/iconButton/view/iconButtonStyles.js
Normal 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",
|
||||
},
|
||||
});
|
32
src/components/iconButton/view/iconButtonView.js
Normal file
32
src/components/iconButton/view/iconButtonView.js
Normal 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;
|
@ -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,
|
||||
|
@ -15,6 +15,6 @@ export default EStyleSheet.create({
|
||||
infoText: {
|
||||
flex: 0.875,
|
||||
fontSize: 12,
|
||||
color: '$primaryGray',
|
||||
color: '$primaryDarkGray',
|
||||
},
|
||||
});
|
||||
|
@ -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: {
|
||||
|
@ -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",
|
||||
},
|
||||
});
|
||||
|
@ -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>
|
||||
);
|
||||
|
@ -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',
|
||||
|
@ -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)}
|
||||
|
@ -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,
|
||||
},
|
||||
});
|
||||
|
@ -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,
|
||||
|
@ -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',
|
||||
|
4
src/components/profileSummary/index.js
Normal file
4
src/components/profileSummary/index.js
Normal file
@ -0,0 +1,4 @@
|
||||
import ProfileSummary from "./view/profileSummaryView";
|
||||
|
||||
export { ProfileSummary };
|
||||
export default ProfileSummary;
|
54
src/components/profileSummary/view/profileSummaryStyles.js
Normal file
54
src/components/profileSummary/view/profileSummaryStyles.js
Normal 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,
|
||||
},
|
||||
});
|
119
src/components/profileSummary/view/profileSummaryView.js
Normal file
119
src/components/profileSummary/view/profileSummaryView.js
Normal 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;
|
@ -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>
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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',
|
||||
},
|
||||
});
|
||||
|
@ -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;
|
43
src/components/transaction/container/transactionContainer.js
Normal file
43
src/components/transaction/container/transactionContainer.js
Normal 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;
|
5
src/components/transaction/index.js
Normal file
5
src/components/transaction/index.js
Normal file
@ -0,0 +1,5 @@
|
||||
import TransactionView from './view/transactionView';
|
||||
import Transaction from './container/transactionContainer';
|
||||
|
||||
export { TransactionView, Transaction };
|
||||
export default Transaction;
|
99
src/components/transaction/view/transactionView.js
Normal file
99
src/components/transaction/view/transactionView.js
Normal 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;
|
39
src/components/wallet/container/walletContainer.js
Normal file
39
src/components/wallet/container/walletContainer.js
Normal 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;
|
5
src/components/wallet/index.js
Normal file
5
src/components/wallet/index.js
Normal file
@ -0,0 +1,5 @@
|
||||
import WalletView from './view/walletView';
|
||||
import Wallet from './container/walletContainer';
|
||||
|
||||
export { WalletView, Wallet };
|
||||
export default Wallet;
|
36
src/components/wallet/view/walletStyles.js
Normal file
36
src/components/wallet/view/walletStyles.js
Normal 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
|
||||
});
|
66
src/components/wallet/view/walletView.js
Normal file
66
src/components/wallet/view/walletView.js
Normal 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;
|
@ -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;
|
5
src/components/walletDetails/index.js
Normal file
5
src/components/walletDetails/index.js
Normal file
@ -0,0 +1,5 @@
|
||||
import WalletDetailsView from './view/walletDetailsView';
|
||||
import WalletDetails from './container/walletDetailsContainer';
|
||||
|
||||
export { WalletDetails, WalletDetailsView };
|
||||
export default WalletDetails;
|
7
src/components/walletDetails/view/walletDetailsStyles.js
Normal file
7
src/components/walletDetails/view/walletDetailsStyles.js
Normal 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.
|
||||
},
|
||||
});
|
63
src/components/walletDetails/view/walletDetailsView.js
Normal file
63
src/components/walletDetails/view/walletDetailsView.js
Normal 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;
|
@ -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,
|
||||
});
|
||||
|
14
src/constants/routeNames.js
Normal file
14
src/constants/routeNames.js
Normal 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}`,
|
||||
},
|
||||
};
|
@ -38,9 +38,9 @@ const authMenuItems = [
|
||||
|
||||
const noAuthMenuItems = [
|
||||
{
|
||||
name: 'Test',
|
||||
route: 'Test',
|
||||
icon: 'contact',
|
||||
name: 'Login',
|
||||
route: 'Login',
|
||||
icon: 'user-o',
|
||||
},
|
||||
];
|
||||
|
||||
|
@ -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
|
||||
|
@ -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} />,
|
||||
}),
|
||||
|
@ -1,4 +1,4 @@
|
||||
import sc2 from 'sc2-sdk';
|
||||
import sc2 from 'steemconnect';
|
||||
|
||||
const api = sc2.Initialize({
|
||||
app: 'esteem-app',
|
||||
|
@ -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 });
|
||||
|
@ -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';
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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,
|
||||
},
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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,
|
||||
};
|
||||
|
@ -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>
|
||||
);
|
||||
}
|
||||
|
@ -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,
|
||||
),
|
||||
});
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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}` });
|
||||
|
@ -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';
|
@ -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>
|
||||
);
|
||||
}
|
||||
|
@ -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: {},
|
||||
});
|
||||
|
@ -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,
|
||||
},
|
||||
});
|
@ -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>
|
||||
);
|
||||
}
|
||||
}
|
@ -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>
|
||||
);
|
||||
}
|
||||
}
|
@ -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,
|
||||
},
|
||||
});
|
@ -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',
|
||||
},
|
||||
};
|
@ -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() {
|
||||
|
@ -1,3 +1,3 @@
|
||||
import SplashContainer from './container/splashContainer';
|
||||
import Splash from './container/splashContainer';
|
||||
|
||||
export default SplashContainer;
|
||||
export default Splash;
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
21
src/utils/realm.js
Normal 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;
|
||||
});
|
||||
};
|
@ -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");
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user