Merge pull request #2 from catalinmiron/2-add-author-view
Add author view, update react native, improve fetch
This commit is contained in:
commit
cb25632238
13
.flowconfig
13
.flowconfig
|
@ -16,7 +16,7 @@
|
|||
.*/node_modules/react-tools/src/event/EventPropagators.js
|
||||
|
||||
# Ignore commoner tests
|
||||
.*/node_modules/react-tools/node_modules/commoner/test/.*
|
||||
.*/node_modules/commoner/test/.*
|
||||
|
||||
# See https://github.com/facebook/flow/issues/442
|
||||
.*/react-tools/node_modules/commoner/lib/reader.js
|
||||
|
@ -31,3 +31,14 @@ node_modules/react-native/Libraries/react-native/react-native-interface.js
|
|||
|
||||
[options]
|
||||
module.system=haste
|
||||
|
||||
suppress_type=$FlowIssue
|
||||
suppress_type=$FlowFixMe
|
||||
suppress_type=$FixMe
|
||||
|
||||
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(1[0-3]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)
|
||||
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(1[0-3]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)? #[0-9]+
|
||||
suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy
|
||||
|
||||
[version]
|
||||
0.13.1
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
# OSX
|
||||
#
|
||||
.DS_Store
|
||||
|
||||
# Xcode
|
||||
#
|
||||
build/
|
||||
*.pbxuser
|
||||
!default.pbxuser
|
||||
*.mode1v3
|
||||
!default.mode1v3
|
||||
*.mode2v3
|
||||
!default.mode2v3
|
||||
*.perspectivev3
|
||||
!default.perspectivev3
|
||||
xcuserdata
|
||||
*.xccheckout
|
||||
*.moved-aside
|
||||
DerivedData
|
||||
*.hmap
|
||||
*.ipa
|
||||
*.xcuserstate
|
||||
|
||||
# node.js
|
||||
#
|
||||
node_modules/
|
||||
npm-debug.log
|
|
@ -9,31 +9,34 @@
|
|||
/* Begin PBXBuildFile section */
|
||||
008F07F31AC5B25A0029DE68 /* main.jsbundle in Resources */ = {isa = PBXBuildFile; fileRef = 008F07F21AC5B25A0029DE68 /* main.jsbundle */; };
|
||||
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; };
|
||||
00C302E61ABCBA2D00DB3ED1 /* libRCTAdSupport.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302B41ABCB8E700DB3ED1 /* libRCTAdSupport.a */; };
|
||||
00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; };
|
||||
00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; };
|
||||
00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; };
|
||||
00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; };
|
||||
00E356F31AD99517003FC87E /* DribbbleAppTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* DribbbleAppTests.m */; };
|
||||
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 */; };
|
||||
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
|
||||
13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
|
||||
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
|
||||
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
|
||||
146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
|
||||
832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
|
||||
C50C38731B0915AD009B679A /* BlurView.m in Sources */ = {isa = PBXBuildFile; fileRef = C50C386B1B0915AD009B679A /* BlurView.m */; };
|
||||
C50C38741B0915AD009B679A /* BlurViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C50C386D1B0915AD009B679A /* BlurViewManager.m */; };
|
||||
C50C38751B0915AD009B679A /* VibrancyView.m in Sources */ = {isa = PBXBuildFile; fileRef = C50C38701B0915AD009B679A /* VibrancyView.m */; };
|
||||
C50C38761B0915AD009B679A /* VibrancyViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C50C38721B0915AD009B679A /* VibrancyViewManager.m */; };
|
||||
C544F28F1B29F4F300EFFA3D /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C544F28E1B29F4C800EFFA3D /* libRNVectorIcons.a */; };
|
||||
C544F2981B29F55400EFFA3D /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C544F2911B29F55300EFFA3D /* Entypo.ttf */; };
|
||||
C544F2991B29F55400EFFA3D /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C544F2921B29F55300EFFA3D /* EvilIcons.ttf */; };
|
||||
C544F29A1B29F55400EFFA3D /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C544F2931B29F55300EFFA3D /* FontAwesome.ttf */; };
|
||||
C544F29B1B29F55400EFFA3D /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C544F2941B29F55400EFFA3D /* Foundation.ttf */; };
|
||||
C544F29C1B29F55400EFFA3D /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C544F2951B29F55400EFFA3D /* Ionicons.ttf */; };
|
||||
C544F29D1B29F55400EFFA3D /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C544F2961B29F55400EFFA3D /* MaterialIcons.ttf */; };
|
||||
C544F29E1B29F55400EFFA3D /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C544F2971B29F55400EFFA3D /* Zocial.ttf */; };
|
||||
C5C389EF1B2A117400760C7C /* libRNOverlay.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C5C389EE1B2A115F00760C7C /* libRNOverlay.a */; };
|
||||
C57100141B71652C00DD1721 /* libRNOverlay.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C57100131B71652600DD1721 /* libRNOverlay.a */; };
|
||||
C57100231B71660C00DD1721 /* BlurView.m in Sources */ = {isa = PBXBuildFile; fileRef = C571001B1B71660C00DD1721 /* BlurView.m */; };
|
||||
C57100241B71660C00DD1721 /* BlurViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C571001D1B71660C00DD1721 /* BlurViewManager.m */; };
|
||||
C57100251B71660C00DD1721 /* VibrancyView.m in Sources */ = {isa = PBXBuildFile; fileRef = C57100201B71660C00DD1721 /* VibrancyView.m */; };
|
||||
C57100261B71660C00DD1721 /* VibrancyViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C57100221B71660C00DD1721 /* VibrancyViewManager.m */; };
|
||||
C57100301B71687400DD1721 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C57100281B71687400DD1721 /* Entypo.ttf */; };
|
||||
C57100311B71687400DD1721 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C57100291B71687400DD1721 /* EvilIcons.ttf */; };
|
||||
C57100321B71687400DD1721 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C571002A1B71687400DD1721 /* FontAwesome.ttf */; };
|
||||
C57100331B71687400DD1721 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C571002B1B71687400DD1721 /* Foundation.ttf */; };
|
||||
C57100341B71687400DD1721 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C571002C1B71687400DD1721 /* Ionicons.ttf */; };
|
||||
C57100351B71687400DD1721 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C571002D1B71687400DD1721 /* MaterialIcons.ttf */; };
|
||||
C57100361B71687400DD1721 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C571002E1B71687400DD1721 /* Octicons.ttf */; };
|
||||
C57100371B71687400DD1721 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C571002F1B71687400DD1721 /* Zocial.ttf */; };
|
||||
C571004A1B7169F900DD1721 /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C57100491B7169ED00DD1721 /* libRNVectorIcons.a */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
|
@ -44,12 +47,12 @@
|
|||
remoteGlobalIDString = 134814201AA4EA6300B7C361;
|
||||
remoteInfo = RCTActionSheet;
|
||||
};
|
||||
00C302B31ABCB8E700DB3ED1 /* PBXContainerItemProxy */ = {
|
||||
00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 00C302AF1ABCB8E700DB3ED1 /* RCTAdSupport.xcodeproj */;
|
||||
containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 832C81801AAF6DEF007FA2F7;
|
||||
remoteInfo = RCTAdSupport;
|
||||
remoteGlobalIDString = 134814201AA4EA6300B7C361;
|
||||
remoteInfo = RCTGeolocation;
|
||||
};
|
||||
00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
|
@ -65,6 +68,13 @@
|
|||
remoteGlobalIDString = 58B511DB1A9E6C8500147676;
|
||||
remoteInfo = RCTNetwork;
|
||||
};
|
||||
00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 832C81801AAF6DEF007FA2F7;
|
||||
remoteInfo = RCTVibration;
|
||||
};
|
||||
00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
|
||||
|
@ -79,6 +89,13 @@
|
|||
remoteGlobalIDString = 134814201AA4EA6300B7C361;
|
||||
remoteInfo = RCTSettings;
|
||||
};
|
||||
139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 3C86DF461ADF2C930047B81A;
|
||||
remoteInfo = RCTWebSocket;
|
||||
};
|
||||
146834031AC3E56700842450 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
|
@ -100,67 +117,62 @@
|
|||
remoteGlobalIDString = 58B5119B1A9E6C1200147676;
|
||||
remoteInfo = RCTText;
|
||||
};
|
||||
C544F28D1B29F4C800EFFA3D /* PBXContainerItemProxy */ = {
|
||||
C57100121B71652600DD1721 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = C544F2811B29F4C800EFFA3D /* RNVectorIcons.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 5DBEB1501B18CEA900B34395;
|
||||
remoteInfo = RNVectorIcons;
|
||||
};
|
||||
C5C389E51B2A037000760C7C /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = C5C389E11B2A037000760C7C /* RNModal.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 134814201AA4EA6300B7C361;
|
||||
remoteInfo = RNModal;
|
||||
};
|
||||
C5C389ED1B2A115F00760C7C /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = C5C389E91B2A115F00760C7C /* RNOverlay.xcodeproj */;
|
||||
containerPortal = C571000E1B71652600DD1721 /* RNOverlay.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 134814201AA4EA6300B7C361;
|
||||
remoteInfo = RNOverlay;
|
||||
};
|
||||
C57100481B7169ED00DD1721 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = C57100441B7169ED00DD1721 /* RNVectorIcons.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 5DBEB1501B18CEA900B34395;
|
||||
remoteInfo = RNVectorIcons;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = main.jsbundle; path = iOS/main.jsbundle; sourceTree = "<group>"; };
|
||||
00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = "<group>"; };
|
||||
00C302AF1ABCB8E700DB3ED1 /* RCTAdSupport.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAdSupport.xcodeproj; path = "node_modules/react-native/Libraries/AdSupport/RCTAdSupport.xcodeproj"; sourceTree = "<group>"; };
|
||||
00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = "<group>"; };
|
||||
00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = "<group>"; };
|
||||
00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = "<group>"; };
|
||||
00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = "<group>"; };
|
||||
00E356EE1AD99517003FC87E /* DribbbleAppTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DribbbleAppTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
00E356F21AD99517003FC87E /* DribbbleAppTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DribbbleAppTests.m; sourceTree = "<group>"; };
|
||||
139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = "<group>"; };
|
||||
139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = "<group>"; };
|
||||
13B07F961A680F5B00A75B9A /* DribbbleApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DribbbleApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = iOS/AppDelegate.h; sourceTree = "<group>"; };
|
||||
13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = iOS/AppDelegate.m; sourceTree = "<group>"; };
|
||||
13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
|
||||
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = iOS/Images.xcassets; sourceTree = SOURCE_ROOT; };
|
||||
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = iOS/Images.xcassets; sourceTree = "<group>"; };
|
||||
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = iOS/Info.plist; sourceTree = "<group>"; };
|
||||
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = iOS/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>"; };
|
||||
78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; 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>"; };
|
||||
C50C386A1B0915AD009B679A /* BlurView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BlurView.h; sourceTree = "<group>"; };
|
||||
C50C386B1B0915AD009B679A /* BlurView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BlurView.m; sourceTree = "<group>"; };
|
||||
C50C386C1B0915AD009B679A /* BlurViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BlurViewManager.h; sourceTree = "<group>"; };
|
||||
C50C386D1B0915AD009B679A /* BlurViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BlurViewManager.m; sourceTree = "<group>"; };
|
||||
C50C386F1B0915AD009B679A /* VibrancyView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VibrancyView.h; sourceTree = "<group>"; };
|
||||
C50C38701B0915AD009B679A /* VibrancyView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VibrancyView.m; sourceTree = "<group>"; };
|
||||
C50C38711B0915AD009B679A /* VibrancyViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VibrancyViewManager.h; sourceTree = "<group>"; };
|
||||
C50C38721B0915AD009B679A /* VibrancyViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VibrancyViewManager.m; sourceTree = "<group>"; };
|
||||
C544F2811B29F4C800EFFA3D /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNVectorIcons.xcodeproj; path = "node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = "<group>"; };
|
||||
C544F2911B29F55300EFFA3D /* Entypo.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Entypo.ttf; sourceTree = "<group>"; };
|
||||
C544F2921B29F55300EFFA3D /* EvilIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = EvilIcons.ttf; sourceTree = "<group>"; };
|
||||
C544F2931B29F55300EFFA3D /* FontAwesome.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = FontAwesome.ttf; sourceTree = "<group>"; };
|
||||
C544F2941B29F55400EFFA3D /* Foundation.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Foundation.ttf; sourceTree = "<group>"; };
|
||||
C544F2951B29F55400EFFA3D /* Ionicons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Ionicons.ttf; sourceTree = "<group>"; };
|
||||
C544F2961B29F55400EFFA3D /* MaterialIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = MaterialIcons.ttf; sourceTree = "<group>"; };
|
||||
C544F2971B29F55400EFFA3D /* Zocial.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Zocial.ttf; sourceTree = "<group>"; };
|
||||
C5C389E11B2A037000760C7C /* RNModal.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNModal.xcodeproj; path = "node_modules/react-native-modal/RNModal.xcodeproj"; sourceTree = "<group>"; };
|
||||
C5C389E91B2A115F00760C7C /* RNOverlay.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNOverlay.xcodeproj; path = "node_modules/react-native-modal/node_modules/react-native-overlay/RNOverlay.xcodeproj"; sourceTree = "<group>"; };
|
||||
C571000E1B71652600DD1721 /* RNOverlay.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNOverlay.xcodeproj; path = "node_modules/react-native-modal/node_modules/react-native-overlay/RNOverlay.xcodeproj"; sourceTree = "<group>"; };
|
||||
C571001A1B71660C00DD1721 /* BlurView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BlurView.h; sourceTree = "<group>"; };
|
||||
C571001B1B71660C00DD1721 /* BlurView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BlurView.m; sourceTree = "<group>"; };
|
||||
C571001C1B71660C00DD1721 /* BlurViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BlurViewManager.h; sourceTree = "<group>"; };
|
||||
C571001D1B71660C00DD1721 /* BlurViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BlurViewManager.m; sourceTree = "<group>"; };
|
||||
C571001F1B71660C00DD1721 /* VibrancyView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VibrancyView.h; sourceTree = "<group>"; };
|
||||
C57100201B71660C00DD1721 /* VibrancyView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VibrancyView.m; sourceTree = "<group>"; };
|
||||
C57100211B71660C00DD1721 /* VibrancyViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VibrancyViewManager.h; sourceTree = "<group>"; };
|
||||
C57100221B71660C00DD1721 /* VibrancyViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VibrancyViewManager.m; sourceTree = "<group>"; };
|
||||
C57100281B71687400DD1721 /* Entypo.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Entypo.ttf; sourceTree = "<group>"; };
|
||||
C57100291B71687400DD1721 /* EvilIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = EvilIcons.ttf; sourceTree = "<group>"; };
|
||||
C571002A1B71687400DD1721 /* FontAwesome.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = FontAwesome.ttf; sourceTree = "<group>"; };
|
||||
C571002B1B71687400DD1721 /* Foundation.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Foundation.ttf; sourceTree = "<group>"; };
|
||||
C571002C1B71687400DD1721 /* Ionicons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Ionicons.ttf; sourceTree = "<group>"; };
|
||||
C571002D1B71687400DD1721 /* MaterialIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = MaterialIcons.ttf; sourceTree = "<group>"; };
|
||||
C571002E1B71687400DD1721 /* Octicons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Octicons.ttf; sourceTree = "<group>"; };
|
||||
C571002F1B71687400DD1721 /* Zocial.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Zocial.ttf; sourceTree = "<group>"; };
|
||||
C57100441B7169ED00DD1721 /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNVectorIcons.xcodeproj; path = "node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
|
@ -176,15 +188,17 @@
|
|||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
146834051AC3E58100842450 /* libReact.a in Frameworks */,
|
||||
139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */,
|
||||
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */,
|
||||
00C302E61ABCBA2D00DB3ED1 /* libRCTAdSupport.a in Frameworks */,
|
||||
00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */,
|
||||
00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */,
|
||||
133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */,
|
||||
00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */,
|
||||
139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */,
|
||||
832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */,
|
||||
C544F28F1B29F4F300EFFA3D /* libRNVectorIcons.a in Frameworks */,
|
||||
C5C389EF1B2A117400760C7C /* libRNOverlay.a in Frameworks */,
|
||||
00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */,
|
||||
139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */,
|
||||
C57100141B71652C00DD1721 /* libRNOverlay.a in Frameworks */,
|
||||
C571004A1B7169F900DD1721 /* libRNVectorIcons.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -199,10 +213,10 @@
|
|||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
00C302B01ABCB8E700DB3ED1 /* Products */ = {
|
||||
00C302B61ABCB90400DB3ED1 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
00C302B41ABCB8E700DB3ED1 /* libRCTAdSupport.a */,
|
||||
00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
|
@ -223,6 +237,14 @@
|
|||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
00C302E01ABCB9EE00DB3ED1 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
00E356EF1AD99517003FC87E /* DribbbleAppTests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -248,14 +270,22 @@
|
|||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
139FDEE71B06529A00C62182 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
139FDEF41B06529B00C62182 /* libRCTWebSocket.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
13B07FAE1A68108700A75B9A /* DribbbleApp */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C57100191B71660C00DD1721 /* RNBlur */,
|
||||
C571001E1B71660C00DD1721 /* RNVibrancy */,
|
||||
008F07F21AC5B25A0029DE68 /* main.jsbundle */,
|
||||
13B07FAF1A68108700A75B9A /* AppDelegate.h */,
|
||||
13B07FB01A68108700A75B9A /* AppDelegate.m */,
|
||||
C50C38691B0915AD009B679A /* RNBlur */,
|
||||
C50C386E1B0915AD009B679A /* RNVibrancy */,
|
||||
13B07FB51A68108700A75B9A /* Images.xcassets */,
|
||||
13B07FB61A68108700A75B9A /* Info.plist */,
|
||||
13B07FB11A68108700A75B9A /* LaunchScreen.xib */,
|
||||
|
@ -283,17 +313,18 @@
|
|||
832341AE1AAA6A7D00B99B32 /* Libraries */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C5C389E91B2A115F00760C7C /* RNOverlay.xcodeproj */,
|
||||
C5C389E11B2A037000760C7C /* RNModal.xcodeproj */,
|
||||
C544F2811B29F4C800EFFA3D /* RNVectorIcons.xcodeproj */,
|
||||
C57100441B7169ED00DD1721 /* RNVectorIcons.xcodeproj */,
|
||||
C571000E1B71652600DD1721 /* RNOverlay.xcodeproj */,
|
||||
146833FF1AC3E56700842450 /* React.xcodeproj */,
|
||||
00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */,
|
||||
00C302AF1ABCB8E700DB3ED1 /* RCTAdSupport.xcodeproj */,
|
||||
00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */,
|
||||
00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */,
|
||||
78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */,
|
||||
00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */,
|
||||
139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */,
|
||||
832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */,
|
||||
00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */,
|
||||
139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */,
|
||||
);
|
||||
name = Libraries;
|
||||
sourceTree = "<group>";
|
||||
|
@ -309,7 +340,7 @@
|
|||
83CBB9F61A601CBA00E9B192 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C544F2901B29F55300EFFA3D /* Fonts */,
|
||||
C57100271B71687400DD1721 /* Fonts */,
|
||||
13B07FAE1A68108700A75B9A /* DribbbleApp */,
|
||||
832341AE1AAA6A7D00B99B32 /* Libraries */,
|
||||
00E356EF1AD99517003FC87E /* DribbbleAppTests */,
|
||||
|
@ -328,65 +359,58 @@
|
|||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
C50C38691B0915AD009B679A /* RNBlur */ = {
|
||||
C571000F1B71652600DD1721 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C50C386A1B0915AD009B679A /* BlurView.h */,
|
||||
C50C386B1B0915AD009B679A /* BlurView.m */,
|
||||
C50C386C1B0915AD009B679A /* BlurViewManager.h */,
|
||||
C50C386D1B0915AD009B679A /* BlurViewManager.m */,
|
||||
C57100131B71652600DD1721 /* libRNOverlay.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
C57100191B71660C00DD1721 /* RNBlur */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C571001A1B71660C00DD1721 /* BlurView.h */,
|
||||
C571001B1B71660C00DD1721 /* BlurView.m */,
|
||||
C571001C1B71660C00DD1721 /* BlurViewManager.h */,
|
||||
C571001D1B71660C00DD1721 /* BlurViewManager.m */,
|
||||
);
|
||||
name = RNBlur;
|
||||
path = "node_modules/react-native-blur/RNBlur";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
C50C386E1B0915AD009B679A /* RNVibrancy */ = {
|
||||
C571001E1B71660C00DD1721 /* RNVibrancy */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C50C386F1B0915AD009B679A /* VibrancyView.h */,
|
||||
C50C38701B0915AD009B679A /* VibrancyView.m */,
|
||||
C50C38711B0915AD009B679A /* VibrancyViewManager.h */,
|
||||
C50C38721B0915AD009B679A /* VibrancyViewManager.m */,
|
||||
C571001F1B71660C00DD1721 /* VibrancyView.h */,
|
||||
C57100201B71660C00DD1721 /* VibrancyView.m */,
|
||||
C57100211B71660C00DD1721 /* VibrancyViewManager.h */,
|
||||
C57100221B71660C00DD1721 /* VibrancyViewManager.m */,
|
||||
);
|
||||
name = RNVibrancy;
|
||||
path = "node_modules/react-native-blur/RNVibrancy";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
C544F2821B29F4C800EFFA3D /* Products */ = {
|
||||
C57100271B71687400DD1721 /* Fonts */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C544F28E1B29F4C800EFFA3D /* libRNVectorIcons.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
C544F2901B29F55300EFFA3D /* Fonts */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C544F2911B29F55300EFFA3D /* Entypo.ttf */,
|
||||
C544F2921B29F55300EFFA3D /* EvilIcons.ttf */,
|
||||
C544F2931B29F55300EFFA3D /* FontAwesome.ttf */,
|
||||
C544F2941B29F55400EFFA3D /* Foundation.ttf */,
|
||||
C544F2951B29F55400EFFA3D /* Ionicons.ttf */,
|
||||
C544F2961B29F55400EFFA3D /* MaterialIcons.ttf */,
|
||||
C544F2971B29F55400EFFA3D /* Zocial.ttf */,
|
||||
C57100281B71687400DD1721 /* Entypo.ttf */,
|
||||
C57100291B71687400DD1721 /* EvilIcons.ttf */,
|
||||
C571002A1B71687400DD1721 /* FontAwesome.ttf */,
|
||||
C571002B1B71687400DD1721 /* Foundation.ttf */,
|
||||
C571002C1B71687400DD1721 /* Ionicons.ttf */,
|
||||
C571002D1B71687400DD1721 /* MaterialIcons.ttf */,
|
||||
C571002E1B71687400DD1721 /* Octicons.ttf */,
|
||||
C571002F1B71687400DD1721 /* Zocial.ttf */,
|
||||
);
|
||||
name = Fonts;
|
||||
path = "node_modules/react-native-vector-icons/Fonts";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
C5C389E21B2A037000760C7C /* Products */ = {
|
||||
C57100451B7169ED00DD1721 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C5C389E61B2A037000760C7C /* libRNModal.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
C5C389EA1B2A115F00760C7C /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C5C389EE1B2A115F00760C7C /* libRNOverlay.a */,
|
||||
C57100491B7169ED00DD1721 /* libRNVectorIcons.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
|
@ -442,6 +466,9 @@
|
|||
CreatedOnToolsVersion = 6.2;
|
||||
TestTargetID = 13B07F861A680F5B00A75B9A;
|
||||
};
|
||||
13B07F861A680F5B00A75B9A = {
|
||||
DevelopmentTeam = T6G34B93DF;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "DribbbleApp" */;
|
||||
|
@ -461,8 +488,8 @@
|
|||
ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 00C302B01ABCB8E700DB3ED1 /* Products */;
|
||||
ProjectRef = 00C302AF1ABCB8E700DB3ED1 /* RCTAdSupport.xcodeproj */;
|
||||
ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */;
|
||||
ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */;
|
||||
|
@ -484,21 +511,25 @@
|
|||
ProductGroup = 832341B11AAA6A8300B99B32 /* Products */;
|
||||
ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */;
|
||||
ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 139FDEE71B06529A00C62182 /* Products */;
|
||||
ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 146834001AC3E56700842450 /* Products */;
|
||||
ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = C5C389E21B2A037000760C7C /* Products */;
|
||||
ProjectRef = C5C389E11B2A037000760C7C /* RNModal.xcodeproj */;
|
||||
ProductGroup = C571000F1B71652600DD1721 /* Products */;
|
||||
ProjectRef = C571000E1B71652600DD1721 /* RNOverlay.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = C5C389EA1B2A115F00760C7C /* Products */;
|
||||
ProjectRef = C5C389E91B2A115F00760C7C /* RNOverlay.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = C544F2821B29F4C800EFFA3D /* Products */;
|
||||
ProjectRef = C544F2811B29F4C800EFFA3D /* RNVectorIcons.xcodeproj */;
|
||||
ProductGroup = C57100451B7169ED00DD1721 /* Products */;
|
||||
ProjectRef = C57100441B7169ED00DD1721 /* RNVectorIcons.xcodeproj */;
|
||||
},
|
||||
);
|
||||
projectRoot = "";
|
||||
|
@ -517,11 +548,11 @@
|
|||
remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
00C302B41ABCB8E700DB3ED1 /* libRCTAdSupport.a */ = {
|
||||
00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libRCTAdSupport.a;
|
||||
remoteRef = 00C302B31ABCB8E700DB3ED1 /* PBXContainerItemProxy */;
|
||||
path = libRCTGeolocation.a;
|
||||
remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = {
|
||||
|
@ -538,6 +569,13 @@
|
|||
remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libRCTVibration.a;
|
||||
remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
|
@ -545,6 +583,13 @@
|
|||
remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libRCTWebSocket.a;
|
||||
remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
146834041AC3E56700842450 /* libReact.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
|
@ -566,25 +611,18 @@
|
|||
remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
C544F28E1B29F4C800EFFA3D /* libRNVectorIcons.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libRNVectorIcons.a;
|
||||
remoteRef = C544F28D1B29F4C800EFFA3D /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
C5C389E61B2A037000760C7C /* libRNModal.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libRNModal.a;
|
||||
remoteRef = C5C389E51B2A037000760C7C /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
C5C389EE1B2A115F00760C7C /* libRNOverlay.a */ = {
|
||||
C57100131B71652600DD1721 /* libRNOverlay.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libRNOverlay.a;
|
||||
remoteRef = C5C389ED1B2A115F00760C7C /* PBXContainerItemProxy */;
|
||||
remoteRef = C57100121B71652600DD1721 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
C57100491B7169ED00DD1721 /* libRNVectorIcons.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libRNVectorIcons.a;
|
||||
remoteRef = C57100481B7169ED00DD1721 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
/* End PBXReferenceProxy section */
|
||||
|
@ -601,16 +639,17 @@
|
|||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
C57100361B71687400DD1721 /* Octicons.ttf in Resources */,
|
||||
008F07F31AC5B25A0029DE68 /* main.jsbundle in Resources */,
|
||||
C544F29B1B29F55400EFFA3D /* Foundation.ttf in Resources */,
|
||||
C544F29E1B29F55400EFFA3D /* Zocial.ttf in Resources */,
|
||||
C544F29C1B29F55400EFFA3D /* Ionicons.ttf in Resources */,
|
||||
C544F2981B29F55400EFFA3D /* Entypo.ttf in Resources */,
|
||||
C57100331B71687400DD1721 /* Foundation.ttf in Resources */,
|
||||
C57100341B71687400DD1721 /* Ionicons.ttf in Resources */,
|
||||
C57100301B71687400DD1721 /* Entypo.ttf in Resources */,
|
||||
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
|
||||
C544F29D1B29F55400EFFA3D /* MaterialIcons.ttf in Resources */,
|
||||
C544F2991B29F55400EFFA3D /* EvilIcons.ttf in Resources */,
|
||||
C57100371B71687400DD1721 /* Zocial.ttf in Resources */,
|
||||
C57100351B71687400DD1721 /* MaterialIcons.ttf in Resources */,
|
||||
C57100311B71687400DD1721 /* EvilIcons.ttf in Resources */,
|
||||
13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,
|
||||
C544F29A1B29F55400EFFA3D /* FontAwesome.ttf in Resources */,
|
||||
C57100321B71687400DD1721 /* FontAwesome.ttf in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -631,10 +670,10 @@
|
|||
files = (
|
||||
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
|
||||
13B07FC11A68108700A75B9A /* main.m in Sources */,
|
||||
C50C38731B0915AD009B679A /* BlurView.m in Sources */,
|
||||
C50C38741B0915AD009B679A /* BlurViewManager.m in Sources */,
|
||||
C50C38761B0915AD009B679A /* VibrancyViewManager.m in Sources */,
|
||||
C50C38751B0915AD009B679A /* VibrancyView.m in Sources */,
|
||||
C57100231B71660C00DD1721 /* BlurView.m in Sources */,
|
||||
C57100241B71660C00DD1721 /* BlurViewManager.m in Sources */,
|
||||
C57100261B71660C00DD1721 /* VibrancyViewManager.m in Sources */,
|
||||
C57100251B71660C00DD1721 /* VibrancyView.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -702,15 +741,20 @@
|
|||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
||||
"$(SRCROOT)/node_modules/react-native/React/**",
|
||||
);
|
||||
INFOPLIST_FILE = "$(SRCROOT)/iOS/Info.plist";
|
||||
INFOPLIST_FILE = iOS/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.2;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
OTHER_LDFLAGS = "-ObjC";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.DribbbleApp;
|
||||
PRODUCT_NAME = DribbbleApp;
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@ -718,15 +762,20 @@
|
|||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
HEADER_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
||||
"$(SRCROOT)/node_modules/react-native/React/**",
|
||||
);
|
||||
INFOPLIST_FILE = "$(SRCROOT)/iOS/Info.plist";
|
||||
INFOPLIST_FILE = iOS/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.2;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
OTHER_LDFLAGS = "-ObjC";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.DribbbleApp;
|
||||
PRODUCT_NAME = DribbbleApp;
|
||||
PROVISIONING_PROFILE = "";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
|
|
@ -50,18 +50,15 @@
|
|||
redboxError = [[RCTRedBox sharedInstance] currentErrorMessage];
|
||||
|
||||
foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) {
|
||||
if ([view respondsToSelector:@selector(attributedText)]) {
|
||||
NSString *text = [(id)view attributedText].string;
|
||||
if ([text isEqualToString:TEXT_TO_LOOK_FOR]) {
|
||||
return YES;
|
||||
}
|
||||
if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
}];
|
||||
}
|
||||
|
||||
XCTAssertNil(redboxError, @"RedBox error: %@", redboxError);
|
||||
XCTAssertTrue(foundElement, @"Cound't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
|
||||
XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
|
||||
}
|
||||
|
||||
|
||||
|
|
30
README.md
30
README.md
|
@ -1,30 +0,0 @@
|
|||
###Dribbble app built with React Native
|
||||
|
||||
A [Dribbble](http://dribbble.com) app build with [React Native](https://github.com/facebook/react-native).
|
||||
|
||||
![dribbble_app_screenshot](https://cloud.githubusercontent.com/assets/2805320/8113463/db61b072-1076-11e5-8aa2-52417f019ea0.jpg)
|
||||
|
||||
####Preview
|
||||
![dribbble_app_flow](https://cloud.githubusercontent.com/assets/2805320/8127634/25311eb0-1101-11e5-83aa-06dcc2d69da3.gif)
|
||||
|
||||
|
||||
Plugins used:
|
||||
- [HTML parser](https://github.com/jsdf/react-native-htmlview)
|
||||
- [React native Parallax view](https://github.com/lelandrichardson/react-native-parallax-view)
|
||||
- [React native vector icons](https://github.com/oblador/react-native-vector-icons)
|
||||
|
||||
####How to run it locally
|
||||
|
||||
- Clone this repo `git clone git@github.com:catalinmiron/react-native-dribbble-app.git`
|
||||
- `cd react-native-dribbble-app`
|
||||
- run `npm install`
|
||||
- Open `DribbbleApp.xcodeproj` in `XCode`
|
||||
- Press `cmd+r` to build it
|
||||
|
||||
|
||||
####Improvements
|
||||
- [x] add icons in TabBar
|
||||
- [ ] refactor 'facebook-movies' fetching logic
|
||||
- [ ] add author view
|
||||
- [ ] fetch comments in shot details
|
||||
- [ ] switch to `ES6`
|
|
@ -0,0 +1,83 @@
|
|||
"use strict";
|
||||
|
||||
var React = require("react-native");
|
||||
var {
|
||||
Image,
|
||||
StyleSheet,
|
||||
PixelRatio,
|
||||
Text,
|
||||
TouchableHighlight,
|
||||
View,
|
||||
Component
|
||||
} = React;
|
||||
|
||||
var Icon = require("react-native-vector-icons/FontAwesome"),
|
||||
getImage = require("./helpers/getImage"),
|
||||
HTML = require("react-native-htmlview"),
|
||||
screen = require("Dimensions").get("window");
|
||||
|
||||
var CommentItem = React.createClass({
|
||||
getDefaultProps: function() {
|
||||
return {
|
||||
comments: []
|
||||
}
|
||||
},
|
||||
|
||||
render: function() {
|
||||
return <View>
|
||||
<TouchableHighlight onPress={this.props.onSelect.bind(this, this.props.comment)}
|
||||
underlayColor={"#f3f3f3"}>
|
||||
<View>
|
||||
<View style={styles.commentContent}>
|
||||
<Image source={getImage.authorAvatar(this.props.comment.user)}
|
||||
style={styles.avatar}/>
|
||||
<View style={styles.commentBody}>
|
||||
<Text style={styles.userName}>
|
||||
{this.props.comment.user.name}
|
||||
</Text>
|
||||
<Text style={styles.commentText}>
|
||||
<HTML value={this.props.comment.body} />
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
<View style={styles.cellBorder} />
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</View>;
|
||||
}
|
||||
});
|
||||
|
||||
var styles = StyleSheet.create({
|
||||
commentContent: {
|
||||
padding: 10,
|
||||
flex: 1,
|
||||
flexDirection: "row",
|
||||
alignItems: "flex-start"
|
||||
},
|
||||
userName: {
|
||||
fontWeight: "700"
|
||||
},
|
||||
commentBody: {
|
||||
flex: 1,
|
||||
flexDirection: "column",
|
||||
justifyContent: "center"
|
||||
},
|
||||
commentText: {
|
||||
flex: 1,
|
||||
flexDirection: "row"
|
||||
},
|
||||
cellBorder: {
|
||||
backgroundColor: "rgba(0, 0, 0, 0.2)",
|
||||
// Trick to get the thinest line the device can display
|
||||
height: 1 / PixelRatio.get(),
|
||||
marginLeft: 4,
|
||||
},
|
||||
avatar: {
|
||||
borderRadius: 20,
|
||||
width: 40,
|
||||
height: 40,
|
||||
marginRight: 10
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = CommentItem;
|
|
@ -0,0 +1,36 @@
|
|||
var React = require("react-native");
|
||||
var {
|
||||
ActivityIndicatorIOS,
|
||||
StyleSheet,
|
||||
View,
|
||||
} = React;
|
||||
|
||||
var Loading = React.createClass({
|
||||
render: function() {
|
||||
return (
|
||||
<View style={[styles.container, styles.centerText]}>
|
||||
<ActivityIndicatorIOS
|
||||
animating={this.props.isLoading}
|
||||
style={styles.spinner}
|
||||
/>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
var styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
backgroundColor: "white",
|
||||
flexDirection: "column",
|
||||
justifyContent: "center",
|
||||
},
|
||||
centerText: {
|
||||
alignItems: "center",
|
||||
},
|
||||
spinner: {
|
||||
width: 50,
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = Loading;
|
|
@ -0,0 +1,248 @@
|
|||
"use strict";
|
||||
|
||||
var React = require("react-native");
|
||||
var {
|
||||
Image,
|
||||
StyleSheet,
|
||||
Text,
|
||||
TouchableOpacity,
|
||||
View,
|
||||
Component,
|
||||
ActivityIndicatorIOS,
|
||||
ListView
|
||||
} = React;
|
||||
|
||||
var Icon = require("react-native-vector-icons/FontAwesome"),
|
||||
getImage = require("./helpers/getImage"),
|
||||
HTML = require("react-native-htmlview"),
|
||||
{ Dimensions } = require('react-native'),
|
||||
screen = Dimensions.get('window'),
|
||||
ParallaxView = require("react-native-parallax-view"),
|
||||
Modal = require("react-native-modal");
|
||||
|
||||
var api = require("./helpers/api");
|
||||
|
||||
var ShotDetails = require("./ShotDetails");
|
||||
var ShotCell = require("./ShotCell");
|
||||
var Loading = require("./Loading");
|
||||
|
||||
var Player = React.createClass({
|
||||
|
||||
getInitialState: function() {
|
||||
return {
|
||||
isModalOpen: false,
|
||||
isLoading: true,
|
||||
dataSource: new ListView.DataSource({
|
||||
rowHasChanged: (row1, row2) => row1 !== row2,
|
||||
})
|
||||
};
|
||||
},
|
||||
|
||||
componentWillMount: function() {
|
||||
api.getResources(this.props.player.shots_url).then((responseData) => {
|
||||
this.setState({
|
||||
dataSource: this.state.dataSource.cloneWithRows(responseData),
|
||||
isLoading: false
|
||||
});
|
||||
}).done();
|
||||
},
|
||||
|
||||
openModal: function() {
|
||||
this.setState({
|
||||
isModalOpen: true
|
||||
});
|
||||
},
|
||||
|
||||
closeModal: function() {
|
||||
this.setState({
|
||||
isModalOpen: false
|
||||
});
|
||||
},
|
||||
|
||||
render: function() {
|
||||
return (
|
||||
<ParallaxView
|
||||
windowHeight={260}
|
||||
backgroundSource={getImage.authorAvatar(this.props.player)}
|
||||
blur={"dark"}
|
||||
header={(
|
||||
<TouchableOpacity onPress={this.openModal}>
|
||||
<View style={styles.headerContent}>
|
||||
<View style={styles.innerHeaderContent}>
|
||||
<Image source={getImage.authorAvatar(this.props.player)}
|
||||
style={styles.playerAvatar} />
|
||||
<Text style={styles.playerUsername}>{this.props.player.username}</Text>
|
||||
<Text style={styles.playerName}>{this.props.player.name}</Text>
|
||||
<View style={styles.playerDetailsRow}>
|
||||
<View style={styles.playerCounter}>
|
||||
<Icon name="users" size={18} color="#fff"/>
|
||||
<Text style={styles.playerCounterValue}> {this.props.player.followers_count} </Text>
|
||||
</View>
|
||||
<View style={styles.playerCounter}>
|
||||
<Icon name="camera-retro" size={18} color="#fff"/>
|
||||
<Text style={styles.playerCounterValue}> {this.props.player.shots_count} </Text>
|
||||
</View>
|
||||
<View style={styles.playerCounter}>
|
||||
<Icon name="heart-o" size={18} color="#fff"/>
|
||||
<Text style={styles.playerCounterValue}> {this.props.player.likes_count} </Text>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
)}
|
||||
>
|
||||
<View style={styles.shotList}>
|
||||
{this.state.dataSource.length !== 0 ? this.renderShots() : <Loading />}
|
||||
</View>
|
||||
|
||||
<Modal isVisible={this.state.isModalOpen}
|
||||
onClose={this.closeModal}
|
||||
backdropType="blur"
|
||||
backdropBlur="dark"
|
||||
forceToFront={true}
|
||||
customShowHandler={this._showModalTransition}
|
||||
customHideHandler={this._hideModalTransition}
|
||||
onPressBackdrop={this.closeModal}>
|
||||
<Image source={getImage.authorAvatar(this.props.player)}
|
||||
style={styles.playerImageModal}/>
|
||||
</Modal>
|
||||
</ParallaxView>
|
||||
);
|
||||
},
|
||||
|
||||
_showModalTransition: function(transition) {
|
||||
transition("opacity", {
|
||||
duration: 200,
|
||||
begin: 0,
|
||||
end: 1
|
||||
});
|
||||
transition("height", {
|
||||
duration: 200,
|
||||
begin: - screen.height * 2,
|
||||
end: screen.height
|
||||
});
|
||||
},
|
||||
|
||||
_hideModalTransition: function(transition) {
|
||||
transition("height", {
|
||||
duration: 200,
|
||||
begin: screen.height,
|
||||
end: screen.height * 2,
|
||||
reset: true
|
||||
});
|
||||
transition("opacity", {
|
||||
duration: 200,
|
||||
begin: 1,
|
||||
end: 0
|
||||
});
|
||||
},
|
||||
|
||||
renderShots: function() {
|
||||
return <ListView
|
||||
ref="playerShots"
|
||||
renderRow={this.renderRow}
|
||||
dataSource={this.state.dataSource}
|
||||
automaticallyAdjustContentInsets={false}
|
||||
keyboardDismissMode="on-drag"
|
||||
keyboardShouldPersistTaps={true}
|
||||
showsVerticalScrollIndicator={false}
|
||||
/>;
|
||||
},
|
||||
|
||||
renderRow: function(shot: Object) {
|
||||
return <ShotCell
|
||||
onSelect={() => this.selectShot(shot)}
|
||||
shot={shot}
|
||||
/>;
|
||||
},
|
||||
|
||||
selectShot: function(shot: Object) {
|
||||
console.log(shot);
|
||||
debugger;
|
||||
this.props.navigator.push({
|
||||
component: ShotDetails,
|
||||
passProps: {shot},
|
||||
title: shot.title
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
var styles = StyleSheet.create({
|
||||
listStyle: {
|
||||
flex: 1,
|
||||
backgroundColor: "red"
|
||||
},
|
||||
listView: {
|
||||
flex: 1,
|
||||
backgroundColor: "coral"
|
||||
},
|
||||
spinner: {
|
||||
width: 50,
|
||||
},
|
||||
headerContent: {
|
||||
flex: 1,
|
||||
alignItems: "center",
|
||||
justifyContent: "center",
|
||||
backgroundColor: "transparent",
|
||||
},
|
||||
innerHeaderContent: {
|
||||
marginTop: 30,
|
||||
alignItems: "center"
|
||||
},
|
||||
playerInfo: {
|
||||
flex: 1,
|
||||
alignItems: "center",
|
||||
justifyContent: "center",
|
||||
backgroundColor: "white",
|
||||
flexDirection: "row"
|
||||
},
|
||||
playerUsername: {
|
||||
color: "#fff",
|
||||
fontWeight: "300"
|
||||
},
|
||||
playerName: {
|
||||
fontSize: 14,
|
||||
color: "#fff",
|
||||
fontWeight: "900",
|
||||
lineHeight: 18
|
||||
},
|
||||
//Player details list
|
||||
playerDetailsRow: {
|
||||
flex: 1,
|
||||
alignItems: "center",
|
||||
justifyContent: "center",
|
||||
flexDirection: "row",
|
||||
width: screen.width / 2,
|
||||
marginTop: 20
|
||||
},
|
||||
playerCounter: {
|
||||
flex: 1,
|
||||
alignItems: "center"
|
||||
},
|
||||
playerCounterValue: {
|
||||
color: "#fff",
|
||||
fontWeight: "900",
|
||||
fontSize: 14,
|
||||
marginTop: 5,
|
||||
},
|
||||
playerAvatar: {
|
||||
width: 80,
|
||||
height: 80,
|
||||
borderRadius: 40,
|
||||
borderWidth: 2,
|
||||
borderColor: "#fff",
|
||||
marginBottom: 10
|
||||
},
|
||||
//Modal
|
||||
playerImageModal: {
|
||||
height: screen.height / 3,
|
||||
resizeMode: "contain"
|
||||
},
|
||||
//playerContent
|
||||
playerContent: {
|
||||
padding: 20
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = Player;
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
"use strict";
|
||||
|
||||
var React = require('react-native');
|
||||
var React = require("react-native");
|
||||
var {
|
||||
Image,
|
||||
PixelRatio,
|
||||
|
@ -10,8 +10,9 @@ var {
|
|||
View
|
||||
} = React;
|
||||
|
||||
var getImage = require('./helpers/getImage'),
|
||||
screen = require('Dimensions').get('window');
|
||||
var getImage = require("./helpers/getImage"),
|
||||
{ Dimensions } = require('react-native'),
|
||||
screen = Dimensions.get('window');
|
||||
|
||||
var ShotCell = React.createClass({
|
||||
render: function() {
|
||||
|
@ -21,7 +22,6 @@ var ShotCell = React.createClass({
|
|||
<View style={styles.row}>
|
||||
<Image
|
||||
source={getImage.shotImage(this.props.shot)}
|
||||
resizeMode="cover"
|
||||
style={styles.cellImage}
|
||||
accessible={true}
|
||||
/>
|
||||
|
@ -38,16 +38,17 @@ var styles = StyleSheet.create({
|
|||
flex: 1,
|
||||
},
|
||||
row: {
|
||||
backgroundColor: 'white',
|
||||
flexDirection: 'column'
|
||||
backgroundColor: "white",
|
||||
flexDirection: "column"
|
||||
},
|
||||
cellImage: {
|
||||
backgroundColor: 'transparent',
|
||||
height: 300,
|
||||
width: screen.width
|
||||
width: screen.width,
|
||||
backgroundColor: "transparent",
|
||||
resizeMode: "cover"
|
||||
},
|
||||
cellBorder: {
|
||||
backgroundColor: 'rgba(0, 0, 0, 0.2)',
|
||||
backgroundColor: "rgba(0, 0, 0, 0.2)",
|
||||
// Trick to get the thinest line the device can display
|
||||
height: 1 / PixelRatio.get(),
|
||||
marginLeft: 4,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
"use strict";
|
||||
|
||||
var React = require('react-native');
|
||||
var React = require("react-native");
|
||||
var {
|
||||
Image,
|
||||
PixelRatio,
|
||||
|
@ -8,23 +8,36 @@ var {
|
|||
StyleSheet,
|
||||
Text,
|
||||
TouchableOpacity,
|
||||
TouchableHighlight,
|
||||
ActivityIndicatorIOS,
|
||||
View,
|
||||
ListView,
|
||||
Component
|
||||
} = React;
|
||||
|
||||
var Icon = require('FontAwesome'),
|
||||
getImage = require('./helpers/getImage'),
|
||||
HTML = require('react-native-htmlview'),
|
||||
screen = require('Dimensions').get('window'),
|
||||
ParallaxView = require('react-native-parallax-view'),
|
||||
Modal = require('react-native-modal');
|
||||
var api = require("./helpers/api");
|
||||
|
||||
var Icon = require("react-native-vector-icons/FontAwesome"),
|
||||
getImage = require("./helpers/getImage"),
|
||||
HTML = require("react-native-htmlview"),
|
||||
{ Dimensions } = require('react-native'),
|
||||
screen = Dimensions.get('window'),
|
||||
ParallaxView = require("react-native-parallax-view"),
|
||||
Modal = require("react-native-modal");
|
||||
|
||||
var Player = require("./Player");
|
||||
var CommentItem = require("./CommentItem");
|
||||
var Loading = require("./Loading");
|
||||
|
||||
var ShotDetails = React.createClass({
|
||||
getInitialState: function() {
|
||||
return {
|
||||
isModalOpen: false
|
||||
}
|
||||
isModalOpen: false,
|
||||
isLoading: true,
|
||||
dataSource: new ListView.DataSource({
|
||||
rowHasChanged: (row1, row2) => row1 !== row2,
|
||||
}),
|
||||
};
|
||||
},
|
||||
|
||||
openModal: function() {
|
||||
|
@ -39,8 +52,17 @@ var ShotDetails = React.createClass({
|
|||
});
|
||||
},
|
||||
|
||||
componentDidMount: function() {
|
||||
api.getResources(this.props.shot.comments_url).then((responseData) => {
|
||||
this.setState({
|
||||
dataSource: this.state.dataSource.cloneWithRows(responseData),
|
||||
isLoading: false
|
||||
});
|
||||
}).done();
|
||||
},
|
||||
|
||||
render: function() {
|
||||
var shotAuthor = this.props.shot.player;
|
||||
var player = this.props.shot.user;
|
||||
|
||||
return (
|
||||
<ParallaxView
|
||||
|
@ -53,12 +75,17 @@ var ShotDetails = React.createClass({
|
|||
)}
|
||||
>
|
||||
<View>
|
||||
<View style={styles.headerContent}>
|
||||
<Image source={getImage.authorAvatar(shotAuthor)}
|
||||
style={styles.shotAuthorAvatar} />
|
||||
<Text style={styles.shotTitle}>{this.props.shot.title}</Text>
|
||||
<Text style={styles.shotAuthorContent}>by <Text style={styles.shotAuthor}>{shotAuthor.name}</Text></Text>
|
||||
</View>
|
||||
<TouchableHighlight style={styles.invisibleTouch}
|
||||
onPress={this.selectPlayer.bind(this, player)}
|
||||
underlayColor={"#333"}
|
||||
activeOpacity={0.95}>
|
||||
<View style={styles.headerContent}>
|
||||
<Image source={getImage.authorAvatar(player)}
|
||||
style={styles.playerAvatar} />
|
||||
<Text style={styles.shotTitle}>{this.props.shot.title}</Text>
|
||||
<Text style={styles.playerContent}>by <Text style={styles.player}>{player.name}</Text></Text>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
<View style={styles.mainSection}>
|
||||
<View style={styles.shotDetailsRow}>
|
||||
<View style={styles.shotCounter}>
|
||||
|
@ -79,6 +106,11 @@ var ShotDetails = React.createClass({
|
|||
<HTML value={this.props.shot.description}
|
||||
stylesheet={styles}/>
|
||||
</Text>
|
||||
<View>
|
||||
{this.state.dataSource.getRowCount() === 0 ?
|
||||
<Loading /> :
|
||||
this._renderCommentsList()}
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
<Modal isVisible={this.state.isModalOpen}
|
||||
|
@ -98,12 +130,12 @@ var ShotDetails = React.createClass({
|
|||
},
|
||||
|
||||
_showModalTransition: function(transition) {
|
||||
transition('opacity', {
|
||||
transition("opacity", {
|
||||
duration: 200,
|
||||
begin: 0,
|
||||
end: 1
|
||||
});
|
||||
transition('height', {
|
||||
transition("height", {
|
||||
duration: 200,
|
||||
begin: - screen.height * 2,
|
||||
end: screen.height
|
||||
|
@ -111,28 +143,70 @@ var ShotDetails = React.createClass({
|
|||
},
|
||||
|
||||
_hideModalTransition: function(transition) {
|
||||
transition('height', {
|
||||
transition("height", {
|
||||
duration: 200,
|
||||
begin: screen.height,
|
||||
end: screen.height * 2,
|
||||
reset: true
|
||||
});
|
||||
transition('opacity', {
|
||||
transition("opacity", {
|
||||
duration: 200,
|
||||
begin: 1,
|
||||
end: 0
|
||||
});
|
||||
},
|
||||
|
||||
selectPlayer: function(player: Object) {
|
||||
this.props.navigator.push({
|
||||
component: Player,
|
||||
passProps: {player},
|
||||
title: player.name
|
||||
});
|
||||
},
|
||||
|
||||
_renderCommentsList: function() {
|
||||
return <View style={styles.sectionSpacing}>
|
||||
<View style={styles.separator} />
|
||||
<Text style={styles.heading}>Comments</Text>
|
||||
<View style={styles.separator} />
|
||||
<ListView
|
||||
ref="commentsView"
|
||||
dataSource={this.state.dataSource}
|
||||
renderRow={this.renderRow}
|
||||
automaticallyAdjustContentInsets={false}
|
||||
/>
|
||||
</View>
|
||||
},
|
||||
|
||||
renderRow: function(comment: Object) {
|
||||
return <CommentItem
|
||||
onSelect={() => this.selectPlayer(comment.user)}
|
||||
comment={comment} />;
|
||||
},
|
||||
|
||||
_renderLoading: function() {
|
||||
return <ActivityIndicatorIOS animating={this.state.isLoading}
|
||||
style={styles.spinner}/>;
|
||||
}
|
||||
});
|
||||
|
||||
var styles = StyleSheet.create({
|
||||
spinner: {
|
||||
marginTop: 20,
|
||||
width: 50
|
||||
},
|
||||
a: {
|
||||
fontWeight: '300',
|
||||
color: '#ea4c89'
|
||||
fontWeight: "300",
|
||||
color: "#ea4c89"
|
||||
},
|
||||
p: {
|
||||
marginBottom: 0,
|
||||
flexDirection: "row",
|
||||
marginTop: 0,
|
||||
},
|
||||
invisibleView: {
|
||||
flex: 1,
|
||||
position: 'absolute',
|
||||
position: "absolute",
|
||||
top: 0,
|
||||
left: 0,
|
||||
bottom: 0,
|
||||
|
@ -145,63 +219,70 @@ var styles = StyleSheet.create({
|
|||
flex: 1,
|
||||
paddingBottom: 20,
|
||||
paddingTop: 40,
|
||||
alignItems: 'center',
|
||||
alignItems: "center",
|
||||
width: screen.width,
|
||||
backgroundColor: '#fff'
|
||||
backgroundColor: "#fff"
|
||||
},
|
||||
shotTitle: {
|
||||
fontSize: 16,
|
||||
fontWeight: '400',
|
||||
color: '#ea4c89',
|
||||
fontWeight: "400",
|
||||
color: "#ea4c89",
|
||||
lineHeight: 18
|
||||
},
|
||||
shotAuthorContent: {
|
||||
playerContent: {
|
||||
fontSize: 12
|
||||
},
|
||||
shotAuthor: {
|
||||
fontWeight: '900',
|
||||
player: {
|
||||
fontWeight: "900",
|
||||
lineHeight: 18
|
||||
},
|
||||
shotAuthorAvatar: {
|
||||
playerAvatar: {
|
||||
borderRadius: 40,
|
||||
width: 80,
|
||||
height: 80,
|
||||
position: 'absolute',
|
||||
position: "absolute",
|
||||
bottom: 60,
|
||||
left: screen.width / 2 - 40,
|
||||
borderWidth: 2,
|
||||
borderColor: '#fff'
|
||||
borderColor: "#fff"
|
||||
},
|
||||
rightPane: {
|
||||
flex: 1,
|
||||
flexDirection: 'column',
|
||||
alignItems: 'center'
|
||||
flexDirection: "column",
|
||||
alignItems: "center"
|
||||
},
|
||||
shotDetailsRow: {
|
||||
flex: 1,
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
backgroundColor: 'white',
|
||||
flexDirection: 'row'
|
||||
alignItems: "center",
|
||||
justifyContent: "center",
|
||||
backgroundColor: "white",
|
||||
flexDirection: "row"
|
||||
},
|
||||
shotCounter: {
|
||||
flex: 2,
|
||||
alignItems: 'center',
|
||||
justifyContent: 'space-between'
|
||||
alignItems: "center",
|
||||
justifyContent: "space-between"
|
||||
},
|
||||
shotCounterText: {
|
||||
color: '#333'
|
||||
color: "#333"
|
||||
},
|
||||
mainSection: {
|
||||
backgroundColor: 'white',
|
||||
flex: 1,
|
||||
alignItems: 'stretch',
|
||||
padding: 10
|
||||
alignItems: "stretch",
|
||||
padding: 10,
|
||||
backgroundColor: "white"
|
||||
},
|
||||
separator: {
|
||||
backgroundColor: 'rgba(0, 0, 0, 0.1)',
|
||||
backgroundColor: "rgba(0, 0, 0, 0.1)",
|
||||
height: 1 / PixelRatio.get(),
|
||||
marginVertical: 10,
|
||||
},
|
||||
sectionSpacing: {
|
||||
marginTop: 20
|
||||
},
|
||||
heading: {
|
||||
fontWeight: "700",
|
||||
fontSize: 16
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
"use strict";
|
||||
|
||||
var React = require('react-native');
|
||||
var React = require("react-native");
|
||||
var {
|
||||
ActivityIndicatorIOS,
|
||||
ListView,
|
||||
|
@ -10,19 +10,20 @@ var {
|
|||
View,
|
||||
} = React;
|
||||
|
||||
var api = require('./helpers/api');
|
||||
var api = require("./helpers/api");
|
||||
|
||||
var ShotCell = require('./ShotCell');
|
||||
var ShotDetails = require('./ShotDetails');
|
||||
var ShotCell = require("./ShotCell"),
|
||||
ShotDetails = require("./ShotDetails"),
|
||||
Loading = require("./Loading");
|
||||
|
||||
// Results should be cached keyed by the query
|
||||
// with values of null meaning "being fetched"
|
||||
// and anything besides null and undefined
|
||||
// as the result of a valid query
|
||||
var resultsCache = {
|
||||
dataForQuery: {},
|
||||
nextPageNumberForQuery: {},
|
||||
totalForQuery: {},
|
||||
dataForQuery: [],
|
||||
nextPageNumberForQuery: [],
|
||||
totalForQuery: [],
|
||||
};
|
||||
|
||||
var LOADING = {};
|
||||
|
@ -30,7 +31,7 @@ var LOADING = {};
|
|||
var ShotList = React.createClass({
|
||||
getDefaultProps: function() {
|
||||
return {
|
||||
filter: ''
|
||||
filter: ""
|
||||
};
|
||||
},
|
||||
|
||||
|
@ -51,8 +52,6 @@ var ShotList = React.createClass({
|
|||
},
|
||||
|
||||
getShots: function(query: string) {
|
||||
this.setState({filter: query});
|
||||
|
||||
var cachedResultsForQuery = resultsCache.dataForQuery[query];
|
||||
if (cachedResultsForQuery) {
|
||||
if (!LOADING[query]) {
|
||||
|
@ -74,8 +73,7 @@ var ShotList = React.createClass({
|
|||
isLoadingTail: false,
|
||||
});
|
||||
|
||||
fetch(api.getShotsByType(query, 1))
|
||||
.then((response) => response.json())
|
||||
api.getShotsByType(query, 1)
|
||||
.catch((error) => {
|
||||
LOADING[query] = false;
|
||||
resultsCache.dataForQuery[query] = undefined;
|
||||
|
@ -87,12 +85,12 @@ var ShotList = React.createClass({
|
|||
})
|
||||
.then((responseData) => {
|
||||
LOADING[query] = false;
|
||||
resultsCache.dataForQuery[query] = responseData.shots;
|
||||
resultsCache.dataForQuery[query] = responseData;
|
||||
resultsCache.nextPageNumberForQuery[query] = 2;
|
||||
|
||||
this.setState({
|
||||
isLoading: false,
|
||||
dataSource: this.getDataSource(responseData.shots),
|
||||
dataSource: this.getDataSource(responseData),
|
||||
});
|
||||
})
|
||||
.done();
|
||||
|
@ -112,7 +110,7 @@ var ShotList = React.createClass({
|
|||
onEndReached: function() {
|
||||
var query = this.state.filter;
|
||||
if (!this.hasMore() || this.state.isLoadingTail) {
|
||||
// We're already fetching or have all the elements so noop
|
||||
// We"re already fetching or have all the elements so noop
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -127,10 +125,8 @@ var ShotList = React.createClass({
|
|||
});
|
||||
|
||||
var page = resultsCache.nextPageNumberForQuery[query];
|
||||
fetch(api.getShotsByType(query, page))
|
||||
.then((response) => response.json())
|
||||
api.getShotsByType(query, page)
|
||||
.catch((error) => {
|
||||
console.error(error);
|
||||
LOADING[query] = false;
|
||||
this.setState({
|
||||
isLoadingTail: false,
|
||||
|
@ -141,11 +137,11 @@ var ShotList = React.createClass({
|
|||
|
||||
LOADING[query] = false;
|
||||
// We reached the end of the list before the expected number of results
|
||||
if (!responseData.shots) {
|
||||
if (!responseData) {
|
||||
resultsCache.totalForQuery[query] = shotsForQuery.length;
|
||||
} else {
|
||||
for (var i in responseData.shots) {
|
||||
shotsForQuery.push(responseData.shots[i]);
|
||||
for (var i in responseData) {
|
||||
shotsForQuery.push(responseData[i]);
|
||||
}
|
||||
resultsCache.dataForQuery[query] = shotsForQuery;
|
||||
resultsCache.nextPageNumberForQuery[query] += 1;
|
||||
|
@ -172,10 +168,9 @@ var ShotList = React.createClass({
|
|||
},
|
||||
|
||||
renderFooter: function() {
|
||||
if (!this.hasMore() || !this.state.isLoadingTail) {
|
||||
return <View style={styles.scrollSpinner} />;
|
||||
}
|
||||
return <ActivityIndicatorIOS style={styles.scrollSpinner} />;
|
||||
return <View style={styles.scrollSpinner}>
|
||||
<Loading />
|
||||
</View>;
|
||||
},
|
||||
|
||||
renderRow: function(shot: Object) {
|
||||
|
@ -197,7 +192,7 @@ var ShotList = React.createClass({
|
|||
renderRow={this.renderRow}
|
||||
onEndReached={this.onEndReached}
|
||||
automaticallyAdjustContentInsets={false}
|
||||
keyboardDismissMode="onDrag"
|
||||
keyboardDismissMode="on-drag"
|
||||
keyboardShouldPersistTaps={true}
|
||||
showsVerticalScrollIndicator={false}
|
||||
/>;
|
||||
|
@ -211,33 +206,17 @@ var ShotList = React.createClass({
|
|||
},
|
||||
});
|
||||
|
||||
var Loading = React.createClass({
|
||||
render: function() {
|
||||
return (
|
||||
<View style={[styles.container, styles.centerText]}>
|
||||
<ActivityIndicatorIOS
|
||||
animating={this.props.isLoading}
|
||||
style={styles.spinner}
|
||||
/>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
var styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
backgroundColor: 'white',
|
||||
},
|
||||
centerText: {
|
||||
alignItems: 'center',
|
||||
backgroundColor: "white",
|
||||
flexDirection: "column",
|
||||
justifyContent: "center"
|
||||
},
|
||||
separator: {
|
||||
height: 1,
|
||||
backgroundColor: '#eeeeee',
|
||||
},
|
||||
spinner: {
|
||||
width: 50,
|
||||
backgroundColor: "#eeeeee",
|
||||
},
|
||||
scrollSpinner: {
|
||||
marginVertical: 20,
|
||||
|
|
|
@ -1,9 +1,26 @@
|
|||
var API_URL = 'https://api.dribbble.com/shots/';
|
||||
"use strict";
|
||||
|
||||
var API_URL = "https://api.dribbble.com/v1/",
|
||||
ACCESS_TOKEN = "7a22f910dcdff63bd3ebbe48d022f05e8268c67249709b5489d923f97bcf96ec";
|
||||
|
||||
function fetchData(URL) {
|
||||
return fetch(URL, {
|
||||
headers: {
|
||||
"Authorization": "Bearer " + ACCESS_TOKEN
|
||||
}
|
||||
}).then((response) => response.json())
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getShotsByType: function(query: string, pageNumber: ?number): string {
|
||||
return (
|
||||
API_URL + query + '/' + '?per_page=20&page=' + pageNumber
|
||||
);
|
||||
getShotsByType: function(type: string, pageNumber: ?number): ?Object {
|
||||
var URL = API_URL + "shots/?list=" + type;
|
||||
if (pageNumber) {
|
||||
URL += "&per_page=10&page=" + pageNumber;
|
||||
}
|
||||
|
||||
return fetchData(URL);
|
||||
},
|
||||
getResources: function(url: ?string): ?Object {
|
||||
return fetchData(url);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
module.exports = {
|
||||
shotImage: function(shot: Object): {uri: ?string} {
|
||||
var uri = shot && shot.image_400_url ? shot.image_400_url : shot.image_url;
|
||||
var uri = shot.images.normal ? shot.images.normal : shot.images.teaser;
|
||||
return {uri};
|
||||
},
|
||||
authorAvatar: function(player: Object): {uri: ?string} {
|
||||
|
|
|
@ -1,15 +1,10 @@
|
|||
/**
|
||||
* The examples provided by Facebook are for non-commercial testing and
|
||||
* evaluation purposes only.
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Facebook reserves all rights not expressly granted.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL
|
||||
* FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
@ -19,4 +14,3 @@
|
|||
@property (nonatomic, strong) UIWindow *window;
|
||||
|
||||
@end
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
* see http://facebook.github.io/react-native/docs/runningondevice.html
|
||||
*/
|
||||
|
||||
// jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
|
||||
//jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
|
||||
|
||||
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
|
||||
moduleName:@"DribbbleApp"
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6245" systemVersion="14E17e" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7702" systemVersion="14D136" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
|
||||
<dependencies>
|
||||
<deployment defaultVersion="1792" identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6238"/>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7701"/>
|
||||
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
|
@ -13,13 +13,13 @@
|
|||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Powered by React Native" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
|
||||
<rect key="frame" x="20" y="439" width="441" height="20.5"/>
|
||||
<rect key="frame" x="20" y="439" width="441" height="21"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="DribbbleApp" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
|
||||
<rect key="frame" x="20" y="205" width="441" height="45"/>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="DribbbleApp" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
|
||||
<rect key="frame" x="20" y="140" width="441" height="43"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
|
||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
|
@ -2,22 +2,12 @@
|
|||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>UIAppFonts</key>
|
||||
<array>
|
||||
<string>Entypo.ttf</string>
|
||||
<string>EvilIcons.ttf</string>
|
||||
<string>FontAwesome.ttf</string>
|
||||
<string>Foundation.ttf</string>
|
||||
<string>Ionicons.ttf</string>
|
||||
<string>MaterialIcons.ttf</string>
|
||||
<string>Zocial.ttf</string>
|
||||
</array>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)</string>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
|
@ -32,6 +22,24 @@
|
|||
<string>1</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSAllowsArbitraryLoads</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>NSLocationWhenInUseUsageDescription</key>
|
||||
<string></string>
|
||||
<key>UIAppFonts</key>
|
||||
<array>
|
||||
<string>FontAwesome.ttf</string>
|
||||
<string>Foundation.ttf</string>
|
||||
<string>Entypo.ttf</string>
|
||||
<string>EvilIcons.ttf</string>
|
||||
<string>Ionicons.ttf</string>
|
||||
<string>MaterialIcons.ttf</string>
|
||||
<string>Octoicons.ttf</string>
|
||||
<string>Zocial.ttf</string>
|
||||
</array>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
|
@ -46,7 +54,5 @@
|
|||
</array>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<false/>
|
||||
<key>NSLocationWhenInUseUsageDescription</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
File diff suppressed because one or more lines are too long
65
index.ios.js
65
index.ios.js
|
@ -2,9 +2,9 @@
|
|||
* Dribbble App
|
||||
* Github url: https://github.com/catalinmiron/react-native-dribbble-app
|
||||
*/
|
||||
'use strict';
|
||||
"use strict";
|
||||
|
||||
var React = require('react-native');
|
||||
var React = require("react-native");
|
||||
var {
|
||||
AppRegistry,
|
||||
NavigatorIOS,
|
||||
|
@ -14,23 +14,22 @@ var {
|
|||
Text
|
||||
} = React;
|
||||
|
||||
|
||||
var ShotList = require('./app/ShotList'),
|
||||
Icon = require('FontAwesome');
|
||||
var ShotList = require("./app/ShotList"),
|
||||
Icon = require("react-native-vector-icons/FontAwesome");
|
||||
|
||||
var DribbbleApp = React.createClass({
|
||||
getInitialState: function() {
|
||||
return {
|
||||
selectedTab: 'popular'
|
||||
selectedTab: "default"
|
||||
};
|
||||
},
|
||||
|
||||
_renderContent: function(category: string) {
|
||||
_renderContent: function(category: string, title: ?string) {
|
||||
return (
|
||||
<NavigatorIOS style={styles.wrapper}
|
||||
initialRoute={{
|
||||
component: ShotList,
|
||||
title: category,
|
||||
title: title,
|
||||
passProps: {filter: category}
|
||||
}}
|
||||
/>
|
||||
|
@ -39,42 +38,54 @@ var DribbbleApp = React.createClass({
|
|||
|
||||
render: function() {
|
||||
return (
|
||||
<TabBarIOS>
|
||||
<TabBarIOS tintColor={"#ea4c89"}>
|
||||
<Icon.TabBarItem
|
||||
title="Popular"
|
||||
iconName="heart"
|
||||
selectedIconName="heart"
|
||||
selected={this.state.selectedTab === 'popular'}
|
||||
title="All"
|
||||
iconName="dribbble"
|
||||
selectedIconName="dribbble"
|
||||
selected={this.state.selectedTab === "default"}
|
||||
onPress={() => {
|
||||
this.setState({
|
||||
selectedTab: 'popular',
|
||||
selectedTab: "default",
|
||||
});
|
||||
}}>
|
||||
{this._renderContent('popular')}
|
||||
{this._renderContent("default", "All")}
|
||||
</Icon.TabBarItem>
|
||||
<Icon.TabBarItem
|
||||
title="Debuts"
|
||||
iconName="trophy"
|
||||
selectedIconName="trophy"
|
||||
selected={this.state.selectedTab === 'debuts'}
|
||||
selected={this.state.selectedTab === "debuts"}
|
||||
onPress={() => {
|
||||
this.setState({
|
||||
selectedTab: 'debuts',
|
||||
selectedTab: "debuts",
|
||||
});
|
||||
}}>
|
||||
{this._renderContent('debuts')}
|
||||
{this._renderContent("debuts", "Debuts")}
|
||||
</Icon.TabBarItem>
|
||||
<Icon.TabBarItem
|
||||
title="Everyone"
|
||||
iconName="dribbble"
|
||||
selectedIconName="dribbble"
|
||||
selected={this.state.selectedTab === 'everyone'}
|
||||
title="Animated"
|
||||
iconName="heart"
|
||||
selectedIconName="heart"
|
||||
selected={this.state.selectedTab === "animated"}
|
||||
onPress={() => {
|
||||
this.setState({
|
||||
selectedTab: 'everyone',
|
||||
selectedTab: "animated",
|
||||
});
|
||||
}}>
|
||||
{this._renderContent('everyone')}
|
||||
{this._renderContent("animated", "Animated")}
|
||||
</Icon.TabBarItem>
|
||||
<Icon.TabBarItem
|
||||
title="Rebounds"
|
||||
iconName="lightbulb-o"
|
||||
selectedIconName="lightbulb-o"
|
||||
selected={this.state.selectedTab === "rebounds"}
|
||||
onPress={() => {
|
||||
this.setState({
|
||||
selectedTab: "rebounds",
|
||||
});
|
||||
}}>
|
||||
{this._renderContent("rebounds", "Rebounds")}
|
||||
</Icon.TabBarItem>
|
||||
</TabBarIOS>
|
||||
);
|
||||
|
@ -84,10 +95,10 @@ var DribbbleApp = React.createClass({
|
|||
var styles = StyleSheet.create({
|
||||
tabContent: {
|
||||
flex: 1,
|
||||
alignItems: 'center',
|
||||
alignItems: "center",
|
||||
},
|
||||
tabText: {
|
||||
color: 'white',
|
||||
color: "white",
|
||||
margin: 50,
|
||||
},
|
||||
wrapper: {
|
||||
|
@ -95,6 +106,6 @@ var styles = StyleSheet.create({
|
|||
}
|
||||
});
|
||||
|
||||
AppRegistry.registerComponent('DribbbleApp', () => DribbbleApp);
|
||||
AppRegistry.registerComponent("DribbbleApp", () => DribbbleApp);
|
||||
|
||||
module.exports = DribbbleApp;
|
||||
|
|
11
package.json
11
package.json
|
@ -6,12 +6,11 @@
|
|||
"start": "node_modules/react-native/packager/packager.sh"
|
||||
},
|
||||
"dependencies": {
|
||||
"react-native": "^0.4.2",
|
||||
"react-native-blur": "^0.4.2",
|
||||
"react-native": "^0.8.0",
|
||||
"react-native-blur": "^0.5.4",
|
||||
"react-native-htmlview": "^0.2.0",
|
||||
"react-native-modal": "^0.3.7",
|
||||
"react-native-parallax-view": "git://github.com/lelandrichardson/react-native-parallax-view",
|
||||
"react-native-vector-icons": "^0.6.1",
|
||||
"react-timer-mixin": "^0.13.1"
|
||||
"react-native-modal": "^0.3.8",
|
||||
"react-native-parallax-view": "^2.0.2",
|
||||
"react-native-vector-icons": "^0.6.2"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue