Merge pull request #2 from catalinmiron/2-add-author-view

Add author view, update react native, improve fetch
This commit is contained in:
Catalin Miron 2015-08-14 16:19:25 +03:00
commit cb25632238
21 changed files with 895 additions and 364 deletions

View File

@ -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

27
.npmignore Normal file
View File

@ -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

View File

@ -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;
};

View File

@ -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);
}

View File

@ -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`

83
app/CommentItem.js Normal file
View File

@ -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;

36
app/Loading.js Normal file
View File

@ -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;

248
app/Player.js Normal file
View File

@ -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;

View File

@ -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,

View File

@ -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
}
});

View File

@ -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,

View File

@ -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);
}
};

View File

@ -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} {

View File

@ -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

View File

@ -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"

View File

@ -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"/>

View File

@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@ -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

View File

@ -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;

View File

@ -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"
}
}