├── .babelrc ├── .buckconfig ├── .circleci └── config.yml ├── .eslintignore ├── .eslintrc ├── .flowconfig ├── .gitattributes ├── .github └── screenshot-app@2x.png ├── .gitignore ├── .watchmanconfig ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── __mocks__ └── react-native.js ├── android ├── app │ ├── BUCK │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ ├── debug │ │ └── res │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_notification.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_notification.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_notification.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_notification.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_notification.png │ │ │ └── values │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── facebook │ │ │ └── f8 │ │ │ ├── MainActivity.java │ │ │ └── MainApplication.java │ │ └── res │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_notification.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_notification.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_notification.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_notification.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_notification.png │ │ └── values │ │ ├── strings.xml │ │ └── styles.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── keystores │ ├── BUCK │ └── debug.keystore.properties └── settings.gradle ├── app.json ├── docker-compose.yml ├── index.android.js ├── index.ios.js ├── ios ├── 512.png ├── 512@2x.png ├── F82017-tvOS │ └── Info.plist ├── F82017-tvOSTests │ └── Info.plist ├── F82017.xcodeproj │ ├── project.pbxproj │ └── xcshareddata │ │ └── xcschemes │ │ ├── F82017-tvOS.xcscheme │ │ └── F82017.xcscheme ├── F82017 │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Base.lproj │ │ └── LaunchScreen.xib │ ├── F82017.entitlements │ ├── Images.xcassets │ │ └── AppIcon.appiconset │ │ │ ├── 20@2x.png │ │ │ ├── 20@3x.png │ │ │ ├── 29@2x.png │ │ │ ├── 29@3x.png │ │ │ ├── 40@2x.png │ │ │ ├── 40@3x.png │ │ │ ├── 60@2x.png │ │ │ ├── 60@3x.png │ │ │ └── Contents.json │ ├── Info.plist │ └── main.m ├── F82017Tests │ ├── F82017Tests.m │ └── Info.plist ├── launchscreen.png ├── launchscreen@2x.png └── launchscreen@3x.png ├── js ├── F8Analytics.js ├── F8App.js ├── F8Navigator.js ├── FacebookSDK.js ├── Playground.js ├── PushNotificationsController.js ├── actions │ ├── config.js │ ├── filter.js │ ├── index.js │ ├── installation.js │ ├── login.js │ ├── navigation.js │ ├── notifications.js │ ├── parse.js │ ├── schedule.js │ ├── surveys.js │ ├── test.js │ ├── types.js │ └── video.js ├── common │ ├── ActionsOverlay.js │ ├── Carousel.js │ ├── F8ActionSheet.js │ ├── F8BackgroundRepeat.js │ ├── F8Button.js │ ├── F8Colors.js │ ├── F8DrawerLayout.js │ ├── F8Fonts.js │ ├── F8Header.js │ ├── F8Linking.js │ ├── F8Modal.js │ ├── F8PageControl.js │ ├── F8ScrollingHeader.js │ ├── F8SegmentedControl.js │ ├── F8StyleSheet.js │ ├── F8Text.js │ ├── F8TimelineBackground.js │ ├── F8TimelineSegment.js │ ├── F8Toast.js │ ├── F8Tooltip.js │ ├── F8Touchable.js │ ├── F8WebView.js │ ├── Hitbox.js │ ├── ItemsWithSeparator.js │ ├── LaunchScreen.js │ ├── ListContainer.js │ ├── LoginButton.js │ ├── MapView.js │ ├── MessengerChatHead.js │ ├── MessengerModal.js │ ├── ParallaxBackground.js │ ├── PlayButton.js │ ├── ProfilePicture.js │ ├── PureListView.js │ ├── ViewPager.js │ ├── __tests__ │ │ └── convertTimes-test.js │ ├── convertTimes.js │ └── img │ │ ├── buttons │ │ ├── icon-check.png │ │ ├── icon-check@2x.png │ │ ├── icon-check@3x.png │ │ ├── icon-x.png │ │ ├── icon-x@2x.png │ │ ├── icon-x@3x.png │ │ ├── logo-fb.png │ │ ├── logo-fb@2x.png │ │ ├── logo-fb@3x.png │ │ ├── play-large.png │ │ ├── play-large@2x.png │ │ ├── play-large@3x.png │ │ ├── play-medium.png │ │ ├── play-medium@2x.png │ │ ├── play-medium@3x.png │ │ ├── play-small.png │ │ ├── play-small@2x.png │ │ └── play-small@3x.png │ │ ├── chathead-logo.png │ │ ├── chathead-logo@2x.png │ │ ├── chathead-logo@3x.png │ │ ├── favorite-smiley.png │ │ ├── favorite-smiley@2x.png │ │ ├── favorite-smiley@3x.png │ │ ├── favorite-star.png │ │ ├── favorite-star@2x.png │ │ ├── favorite-star@3x.png │ │ ├── header │ │ ├── back-blue.png │ │ ├── back-blue@2x.png │ │ ├── back-blue@3x.png │ │ ├── back.png │ │ ├── back@2x.png │ │ ├── back@3x.png │ │ ├── confirm.png │ │ ├── confirm@2x.png │ │ ├── confirm@3x.png │ │ ├── filter.png │ │ ├── filter@2x.png │ │ ├── filter@3x.png │ │ ├── logout.png │ │ ├── logout@2x.png │ │ ├── logout@3x.png │ │ ├── map.png │ │ ├── map@2x.png │ │ ├── map@3x.png │ │ ├── settings.png │ │ ├── settings@2x.png │ │ ├── settings@3x.png │ │ ├── share.android.png │ │ ├── share.ios.png │ │ ├── share@2x.android.png │ │ ├── share@2x.ios.png │ │ ├── share@3x.android.png │ │ ├── share@3x.ios.png │ │ ├── star.png │ │ ├── star@2x.png │ │ ├── star@3x.png │ │ ├── x.png │ │ ├── x@2x.png │ │ └── x@3x.png │ │ ├── launchscreen.png │ │ ├── launchscreen@2x.png │ │ ├── launchscreen@3x.png │ │ ├── messenger-app-icon.png │ │ ├── messenger-app-icon@2x.png │ │ ├── messenger-app-icon@3x.png │ │ ├── pattern-dots.png │ │ ├── pattern-dots@2x.png │ │ ├── pattern-dots@3x.png │ │ ├── pointer-right.png │ │ ├── pointer-right@2x.png │ │ ├── pointer-right@3x.png │ │ ├── privacy.png │ │ ├── privacy@2x.png │ │ ├── privacy@3x.png │ │ ├── tooltip-arrow.png │ │ ├── tooltip-arrow@2x.png │ │ ├── tooltip-arrow@3x.png │ │ ├── webview │ │ ├── back.android.png │ │ ├── back.ios.png │ │ ├── back@2x.android.png │ │ ├── back@2x.ios.png │ │ ├── back@3x.android.png │ │ ├── back@3x.ios.png │ │ ├── browser.android.png │ │ ├── browser.ios.png │ │ ├── browser@2x.android.png │ │ ├── browser@2x.ios.png │ │ ├── browser@3x.android.png │ │ ├── browser@3x.ios.png │ │ ├── close.png │ │ ├── close@2x.png │ │ ├── close@3x.png │ │ ├── forward.android.png │ │ ├── forward.ios.png │ │ ├── forward@2x.android.png │ │ ├── forward@2x.ios.png │ │ ├── forward@3x.android.png │ │ ├── forward@3x.ios.png │ │ ├── logo.png │ │ ├── logo@2x.png │ │ └── logo@3x.png │ │ ├── x-white@2x.png │ │ └── x-white@3x.png ├── env.js ├── filter │ ├── FilterScreen.android.js │ ├── FilterScreen.ios.js │ ├── FriendsList.js │ ├── Header.js │ ├── Section.js │ ├── TopicItem.js │ ├── img │ │ ├── active │ │ │ ├── 1.png │ │ │ ├── 10.png │ │ │ ├── 10@2x.png │ │ │ ├── 10@3x.png │ │ │ ├── 1@2x.png │ │ │ ├── 1@3x.png │ │ │ ├── 2.png │ │ │ ├── 2@2x.png │ │ │ ├── 2@3x.png │ │ │ ├── 3.png │ │ │ ├── 3@2x.png │ │ │ ├── 3@3x.png │ │ │ ├── 4.png │ │ │ ├── 4@2x.png │ │ │ ├── 4@3x.png │ │ │ ├── 5.png │ │ │ ├── 5@2x.png │ │ │ ├── 5@3x.png │ │ │ ├── 6.png │ │ │ ├── 6@2x.png │ │ │ ├── 6@3x.png │ │ │ ├── 7.png │ │ │ ├── 7@2x.png │ │ │ ├── 7@3x.png │ │ │ ├── 8.png │ │ │ ├── 8@2x.png │ │ │ ├── 8@3x.png │ │ │ ├── 9.png │ │ │ ├── 9@2x.png │ │ │ └── 9@3x.png │ │ ├── default │ │ │ ├── 1.png │ │ │ ├── 10.png │ │ │ ├── 10@2x.png │ │ │ ├── 10@3x.png │ │ │ ├── 11.png │ │ │ ├── 11@2x.png │ │ │ ├── 11@3x.png │ │ │ ├── 12.png │ │ │ ├── 12@2x.png │ │ │ ├── 12@3x.png │ │ │ ├── 13.png │ │ │ ├── 13@2x.png │ │ │ ├── 13@3x.png │ │ │ ├── 14.png │ │ │ ├── 14@2x.png │ │ │ ├── 14@3x.png │ │ │ ├── 1@2x.png │ │ │ ├── 1@3x.png │ │ │ ├── 2.png │ │ │ ├── 2@2x.png │ │ │ ├── 2@3x.png │ │ │ ├── 3.png │ │ │ ├── 3@2x.png │ │ │ ├── 3@3x.png │ │ │ ├── 4.png │ │ │ ├── 4@2x.png │ │ │ ├── 4@3x.png │ │ │ ├── 5.png │ │ │ ├── 5@2x.png │ │ │ ├── 5@3x.png │ │ │ ├── 6.png │ │ │ ├── 6@2x.png │ │ │ ├── 6@3x.png │ │ │ ├── 7.png │ │ │ ├── 7@2x.png │ │ │ ├── 7@3x.png │ │ │ ├── 8.png │ │ │ ├── 8@2x.png │ │ │ ├── 8@3x.png │ │ │ ├── 9.png │ │ │ ├── 9@2x.png │ │ │ └── 9@3x.png │ │ ├── icon-x.png │ │ ├── icon-x@2x.png │ │ └── icon-x@3x.png │ └── topicIcons.js ├── flow-lib.js ├── login │ ├── LoginModal.js │ ├── LoginScreen.js │ └── img │ │ ├── arrow.png │ │ ├── arrow@2x.png │ │ ├── arrow@3x.png │ │ ├── illustration.png │ │ ├── illustration@2x.png │ │ ├── illustration@3x.png │ │ ├── login-modal.png │ │ ├── login-modal@2x.png │ │ ├── login-modal@3x.png │ │ ├── logo.png │ │ ├── logo@2x.png │ │ └── logo@3x.png ├── rating │ ├── Header.js │ ├── RadioButtons.js │ ├── RatingQuestion.js │ ├── RatingScreen.js │ ├── StarRating.js │ ├── StarRatings.js │ ├── WrittenResponse.js │ └── img │ │ ├── radio-active.png │ │ ├── radio-active@2x.png │ │ ├── radio-active@3x.png │ │ ├── radio-default.png │ │ ├── radio-default@2x.png │ │ ├── radio-default@3x.png │ │ ├── star-active.png │ │ ├── star-active@2x.png │ │ ├── star-active@3x.png │ │ ├── star-default.png │ │ ├── star-default@2x.png │ │ └── star-default@3x.png ├── reducers │ ├── __mocks__ │ │ └── parse.js │ ├── __tests__ │ │ ├── maps-test.js │ │ ├── notifications-test.js │ │ └── schedule-test.js │ ├── config.js │ ├── createParseReducer.js │ ├── faqs.js │ ├── friendsSchedules.js │ ├── index.js │ ├── maps.js │ ├── navigation.js │ ├── notifications.js │ ├── pages.js │ ├── policies.js │ ├── schedule.js │ ├── scheduleFilter.js │ ├── scheduleTopics.js │ ├── sessions.js │ ├── surveys.js │ ├── testEventDates.js │ ├── user.js │ ├── videoFilter.js │ ├── videoTopics.js │ └── videos.js ├── relay-environment.js ├── setup.js ├── store │ ├── analytics.js │ ├── array.js │ ├── compatibility.js │ ├── configureStore.js │ ├── promise.js │ └── track.js ├── tabs │ ├── F8TabsView.js │ ├── MenuItem.js │ ├── demos │ │ ├── DemosCarousel.js │ │ ├── F8DemoDetails.js │ │ ├── F8DemosView.js │ │ ├── __generated__ │ │ │ └── F8DemosViewQuery.graphql.js │ │ └── img │ │ │ ├── bookable-flag.png │ │ │ ├── bookable-flag@2x.png │ │ │ ├── bookable-flag@3x.png │ │ │ ├── header.png │ │ │ ├── header@2x.png │ │ │ ├── header@3x.png │ │ │ └── tab-icon │ │ │ ├── active.png │ │ │ ├── active@2x.png │ │ │ ├── active@3x.png │ │ │ ├── default.png │ │ │ ├── default@2x.png │ │ │ └── default@3x.png │ ├── info │ │ ├── AboutLocation.js │ │ ├── CommonQuestions.js │ │ ├── DirectionsLink.js │ │ ├── F8AboutView.js │ │ ├── F8InfoView.js │ │ ├── LinksList.js │ │ ├── Section.js │ │ ├── WiFiDetails.js │ │ └── img │ │ │ ├── hello-world.png │ │ │ ├── hello-world@2x.png │ │ │ ├── hello-world@3x.png │ │ │ └── tab-icon │ │ │ ├── active.png │ │ │ ├── active@2x.png │ │ │ ├── active@3x.png │ │ │ ├── default.png │ │ │ ├── default@2x.png │ │ │ └── default@3x.png │ ├── maps │ │ ├── F8MapView.js │ │ ├── F8VenueMap.js │ │ ├── ZoomableImage.js │ │ └── img │ │ │ └── tab-icon │ │ │ ├── active.png │ │ │ ├── active@2x.png │ │ │ ├── active@3x.png │ │ │ ├── default.png │ │ │ ├── default@2x.png │ │ │ └── default@3x.png │ ├── notifications │ │ ├── F8NotificationsView.js │ │ ├── NotificationCell.js │ │ ├── PushNUXModal.js │ │ ├── RateSessionsCell.js │ │ ├── allNotifications.js │ │ ├── findSessionByURI.js │ │ ├── img │ │ │ ├── nux-header.png │ │ │ ├── nux-header@2x.png │ │ │ ├── nux-header@3x.png │ │ │ ├── stars.png │ │ │ ├── stars@2x.png │ │ │ ├── stars@3x.png │ │ │ └── timeline │ │ │ │ ├── circle-active.png │ │ │ │ ├── circle-active@2x.png │ │ │ │ ├── circle-active@3x.png │ │ │ │ ├── circle.png │ │ │ │ ├── circle@2x.png │ │ │ │ ├── circle@3x.png │ │ │ │ ├── square-active.png │ │ │ │ ├── square-active@2x.png │ │ │ │ ├── square-active@3x.png │ │ │ │ ├── square.png │ │ │ │ ├── square@2x.png │ │ │ │ ├── square@3x.png │ │ │ │ ├── triangle-active.png │ │ │ │ ├── triangle-active@2x.png │ │ │ │ ├── triangle-active@3x.png │ │ │ │ ├── triangle.png │ │ │ │ ├── triangle@2x.png │ │ │ │ └── triangle@3x.png │ │ └── unseenNotificationsCount.js │ ├── schedule │ │ ├── AddToScheduleButton.js │ │ ├── EmptySchedule.js │ │ ├── F8FriendGoing.js │ │ ├── F8GanttGrid.js │ │ ├── F8GanttNowMarker.js │ │ ├── F8GanttRow.js │ │ ├── F8ScheduleGantt.js │ │ ├── F8SessionCell.js │ │ ├── F8SessionDetails.js │ │ ├── F8SpeakerProfile.js │ │ ├── FilterHeader.js │ │ ├── FriendCell.js │ │ ├── FriendsListView.js │ │ ├── FriendsScheduleView.js │ │ ├── FriendsUsingApp.js │ │ ├── GeneralScheduleView.js │ │ ├── HideCompleted.js │ │ ├── InviteFriendsButton.js │ │ ├── MyScheduleView.js │ │ ├── PrivacyIcon.js │ │ ├── ProfileButton.js │ │ ├── ScheduleListView.js │ │ ├── SessionsCarousel.js │ │ ├── SessionsSectionHeader.js │ │ ├── SharingSettingsCommon.js │ │ ├── SharingSettingsModal.js │ │ ├── SharingSettingsScreen.js │ │ ├── __tests__ │ │ │ ├── formatDuration-test.js │ │ │ └── formatTime-test.js │ │ ├── filterSessions.js │ │ ├── formatDuration.js │ │ ├── formatTime.js │ │ ├── groupSessions.js │ │ └── img │ │ │ ├── added-react.png │ │ │ ├── added-react@2x.png │ │ │ ├── added-react@3x.png │ │ │ ├── added.png │ │ │ ├── added@2x.png │ │ │ ├── added@3x.png │ │ │ ├── empty-header-1.png │ │ │ ├── empty-header-1@2x.png │ │ │ ├── empty-header-1@3x.png │ │ │ ├── empty-header-2.png │ │ │ ├── empty-header-2@2x.png │ │ │ ├── empty-header-2@3x.png │ │ │ ├── filters-x.png │ │ │ ├── filters-x@2x.png │ │ │ ├── filters-x@3x.png │ │ │ ├── gantt-bar-color.png │ │ │ ├── gantt-bar-color@2x.png │ │ │ ├── gantt-bar-color@3x.png │ │ │ ├── gantt-bar-end.png │ │ │ ├── gantt-bar-end@2x.png │ │ │ ├── gantt-bar-end@3x.png │ │ │ ├── gantt-bar-start.png │ │ │ ├── gantt-bar-start@2x.png │ │ │ ├── gantt-bar-start@3x.png │ │ │ ├── no-friends-found.png │ │ │ ├── no-friends-found@2x.png │ │ │ ├── no-friends-found@3x.png │ │ │ ├── sharing-nux.png │ │ │ ├── sharing-nux@2x.png │ │ │ ├── sharing-nux@3x.png │ │ │ └── tab-icon │ │ │ ├── 1 │ │ │ ├── active.png │ │ │ ├── active@2x.png │ │ │ ├── active@3x.png │ │ │ ├── default.png │ │ │ ├── default@2x.png │ │ │ └── default@3x.png │ │ │ ├── 2 │ │ │ ├── active.png │ │ │ ├── active@2x.png │ │ │ ├── active@3x.png │ │ │ ├── default.png │ │ │ ├── default@2x.png │ │ │ └── default@3x.png │ │ │ └── my-f8 │ │ │ ├── active.png │ │ │ ├── active@2x.png │ │ │ ├── active@3x.png │ │ │ ├── default.png │ │ │ ├── default@2x.png │ │ │ └── default@3x.png │ └── videos │ │ ├── F8EmptyVideosView.js │ │ ├── F8VideoThumb.js │ │ ├── F8VideoView.js │ │ ├── F8VideosView.js │ │ ├── filterVideos.js │ │ └── img │ │ ├── empty-header.png │ │ ├── empty-header@2x.png │ │ ├── empty-header@3x.png │ │ └── tab-icon │ │ ├── active.png │ │ ├── active@2x.png │ │ ├── active@3x.png │ │ ├── default.png │ │ ├── default@2x.png │ │ └── default@3x.png └── video │ ├── F8VideoPlayer.js │ ├── VideoControls.js │ └── VideoLoader.js ├── package.json ├── scripts ├── generate-graphql-schema.js ├── open-ios-project.js ├── optimize-images.sh ├── pre-push-checks.sh └── run-android-app.sh ├── server ├── .gitignore ├── graphql │ ├── .babelrc │ ├── Dockerfile │ ├── package.json │ ├── src │ │ ├── index.js │ │ └── schema │ │ │ ├── __generated__ │ │ │ └── schema.graphql │ │ │ ├── demo.js │ │ │ ├── index.js │ │ │ ├── node.js │ │ │ ├── query.js │ │ │ └── typeRegistry.js │ └── yarn.lock ├── mongorestore │ ├── Dockerfile │ └── data │ │ ├── Agenda.bson │ │ ├── Agenda.metadata.json │ │ ├── Attendance.bson │ │ ├── Attendance.metadata.json │ │ ├── Demo.bson │ │ ├── Demo.metadata.json │ │ ├── FAQ.bson │ │ ├── FAQ.metadata.json │ │ ├── Maps.bson │ │ ├── Maps.metadata.json │ │ ├── MeetupSponsors.bson │ │ ├── MeetupSponsors.metadata.json │ │ ├── Meetups.bson │ │ ├── Meetups.metadata.json │ │ ├── Notification.bson │ │ ├── Notification.metadata.json │ │ ├── Page.bson │ │ ├── Page.metadata.json │ │ ├── PendingNotifications.bson │ │ ├── PendingNotifications.metadata.json │ │ ├── Policy.bson │ │ ├── Policy.metadata.json │ │ ├── Speakers.bson │ │ ├── Speakers.metadata.json │ │ ├── Survey.bson │ │ ├── Survey.metadata.json │ │ ├── SurveyQuestions.bson │ │ ├── SurveyQuestions.metadata.json │ │ ├── SurveyResult.bson │ │ ├── SurveyResult.metadata.json │ │ ├── UTestAgenda.bson │ │ ├── UTestAgenda.metadata.json │ │ ├── UnmaskedAgenda.bson │ │ ├── UnmaskedAgenda.metadata.json │ │ ├── Video.bson │ │ ├── Video.metadata.json │ │ ├── _Audience.bson │ │ ├── _Audience.metadata.json │ │ ├── _Cardinality.bson │ │ ├── _Cardinality.metadata.json │ │ ├── _EventDimension.bson │ │ ├── _EventDimension.metadata.json │ │ ├── _GlobalConfig.bson │ │ ├── _GlobalConfig.metadata.json │ │ ├── _Installation.bson │ │ ├── _Installation.metadata.json │ │ ├── _JobStatus.bson │ │ ├── _JobStatus.metadata.json │ │ ├── _Join:mySchedule:_User.bson │ │ ├── _Join:mySchedule:_User.metadata.json │ │ ├── _PushStatus.bson │ │ ├── _PushStatus.metadata.json │ │ ├── _QueryToolQuery.bson │ │ ├── _QueryToolQuery.metadata.json │ │ ├── _Role.bson │ │ ├── _Role.metadata.json │ │ ├── _SCHEMA.bson │ │ ├── _SCHEMA.metadata.json │ │ ├── _Session.bson │ │ ├── _Session.metadata.json │ │ ├── _User.bson │ │ ├── _User.metadata.json │ │ ├── _dummy.bson │ │ ├── _dummy.metadata.json │ │ ├── objectlabs-system.bson │ │ └── objectlabs-system.metadata.json ├── parse-dashboard │ ├── Dockerfile │ └── config.json └── parse-server │ ├── .babelrc │ ├── Dockerfile │ ├── cloud │ ├── auth.js │ ├── functions │ │ ├── agenda.js │ │ ├── friends.js │ │ ├── index.js │ │ ├── meetups.js │ │ ├── messengerbot.js │ │ ├── notifications.js │ │ ├── surveyexports.js │ │ ├── surveys.js │ │ └── tests.js │ ├── index.js │ ├── jobs │ │ ├── index.js │ │ ├── installationSync.js │ │ ├── unmaskAgenda.js │ │ ├── unmaskDemos.js │ │ └── updateVideoSources.js │ └── triggers │ │ ├── index.js │ │ ├── pushChannels.js │ │ └── videos.js │ ├── config.json │ ├── package.json │ └── yarn.lock └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": ["relay"], 3 | "presets": ["react-native"] 4 | } 5 | -------------------------------------------------------------------------------- /.buckconfig: -------------------------------------------------------------------------------- 1 | 2 | [android] 3 | target = Google Inc.:Google APIs:23 4 | 5 | [maven_repositories] 6 | central = https://repo1.maven.org/maven2 7 | -------------------------------------------------------------------------------- /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | jobs: 3 | build: 4 | working_directory: ~/f8app 5 | docker: 6 | - image: circleci/node:7.10 7 | steps: 8 | - checkout 9 | - restore_cache: 10 | keys: 11 | - v1-dependencies-{{ checksum "package.json" }} 12 | # fallback to using the latest cache if no exact match is found 13 | - v1-dependencies- 14 | - run: yarn install 15 | - save_cache: 16 | paths: 17 | - node_modules 18 | key: v1-dependencies-{{ checksum "package.json" }} 19 | - run: yarn lint 20 | - run: yarn flow 21 | - run: yarn test 22 | 23 | android: 24 | working_directory: ~/f8app 25 | docker: 26 | - image: circleci/android:api-27-node8-alpha 27 | steps: 28 | - checkout 29 | - run: yarn install 30 | - run: cd android && ./gradlew assembleDebug 31 | 32 | workflows: 33 | version: 2 34 | build_and_test: 35 | jobs: 36 | - build 37 | - android 38 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | **/node_modules/** 2 | -------------------------------------------------------------------------------- /.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | ; We fork some components by platform 3 | .*/*[.]android.js 4 | 5 | ; Ignore "BUCK" generated dirs 6 | /\.buckd/ 7 | 8 | ; Ignore unexpected extra "@providesModule" 9 | .*/node_modules/.*/node_modules/fbjs/.* 10 | 11 | ; Ignore unrelated errors in node_modules 12 | .*/react-native/Libraries/.* 13 | .*/react-native/lib/.* 14 | .*/babel-plugin-relay/lib/.* 15 | .*/react-relay/lib/.* 16 | .*/relay-compiler/lib/.* 17 | .*/relay-runtime/lib/.* 18 | .*/graphql/.* 19 | .*/react-native-keyboard-aware-scroll-view/.* 20 | .*/react-native-linear-gradient/.* 21 | .*/react-native-deprecated-custom-components/src/flattenStyle.js 22 | 23 | [include] 24 | 25 | [libs] 26 | node_modules/react-native/Libraries/react-native/react-native-interface.js 27 | node_modules/react-native/flow/ 28 | flow/ 29 | js/flow-lib.js 30 | 31 | [options] 32 | emoji=true 33 | 34 | module.system=haste 35 | 36 | experimental.strict_type_args=true 37 | 38 | munge_underscores=true 39 | 40 | module.name_mapper.extension='\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub' 41 | 42 | suppress_type=$FlowIssue 43 | suppress_type=$FlowFixMe 44 | suppress_type=$FixMe 45 | 46 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(3[0-8]\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) 47 | suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(3[0-8]\\|1[0-9]\\|[1-2][0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ 48 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy 49 | 50 | unsafe.enable_getters_and_setters=true 51 | 52 | [version] 53 | ^0.42.0 54 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj -text 2 | -------------------------------------------------------------------------------- /.github/screenshot-app@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/.github/screenshot-app@2x.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # Xcode 6 | # 7 | build/ 8 | *.pbxuser 9 | !default.pbxuser 10 | *.mode1v3 11 | !default.mode1v3 12 | *.mode2v3 13 | !default.mode2v3 14 | *.perspectivev3 15 | !default.perspectivev3 16 | xcuserdata 17 | *.xccheckout 18 | *.moved-aside 19 | DerivedData 20 | *.hmap 21 | *.ipa 22 | *.xcuserstate 23 | project.xcworkspace 24 | 25 | # Android/IntelliJ 26 | # 27 | build/ 28 | .idea 29 | .gradle 30 | local.properties 31 | *.iml 32 | 33 | # node.js 34 | # 35 | node_modules/ 36 | npm-debug.log 37 | yarn-error.log 38 | package-lock.json 39 | 40 | # BUCK 41 | buck-out/ 42 | \.buckd/ 43 | *.keystore 44 | 45 | # fastlane 46 | # 47 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 48 | # screenshots whenever they are needed. 49 | # For more information about the recommended setup visit: 50 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md 51 | 52 | fastlane/report.xml 53 | fastlane/Preview.html 54 | fastlane/screenshots 55 | -------------------------------------------------------------------------------- /.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Code of Conduct 2 | 3 | Facebook has adopted a Code of Conduct that we expect project participants to adhere to. Please read [the full text](https://code.facebook.com/codeofconduct) so that you can understand what actions will and will not be tolerated. 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2016 Facebook, Inc. 2 | 3 | You are hereby granted a non-exclusive, worldwide, royalty-free license to 4 | use, copy, modify, and distribute this software in source code or binary 5 | form for use in connection with the web services and APIs provided by 6 | Facebook. 7 | 8 | As with any software that integrates with the Facebook platform, your use 9 | of this software is subject to the Facebook Developer Principles and 10 | Policies [http://developers.facebook.com/policy/]. This copyright notice 11 | shall be included in all copies or substantial portions of the software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 16 | THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 19 | DEALINGS IN THE SOFTWARE 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # F8 App 2017 2 | 3 | This is the entire source code of the official [F8](https://fbf8.com/) app of 2017, available on [Google Play](https://play.google.com/store/apps/details?id=com.facebook.f8) and the [App Store](https://itunes.apple.com/us/app/f8/id853467066). 4 | 5 | 6 | 7 | 8 | ## How We Build It 9 | 10 | We've created a series of tutorials at http://makeitopen.com/ that explain how we built the app, and that dive into how we used React Native, Redux, Relay, GraphQL, and more. 11 | 12 | Check out how to set the app up for local development [here](http://makeitopen.com/docs/en/1-A1-local-setup.html)! 13 | -------------------------------------------------------------------------------- /__mocks__/react-native.js: -------------------------------------------------------------------------------- 1 | import rn from "react-native"; 2 | 3 | jest.mock("Linking", () => { 4 | return { 5 | addEventListener: jest.fn(), 6 | removeEventListener: jest.fn(), 7 | openURL: jest.fn(), 8 | canOpenURL: jest.fn(), 9 | getInitialURL: jest.fn() 10 | }; 11 | }); 12 | 13 | jest.mock("PushNotificationIOS", () => ({ 14 | addEventListener: jest.fn(), 15 | requestPermissions: jest.fn() 16 | })); 17 | 18 | module.exports = rn; 19 | -------------------------------------------------------------------------------- /android/app/BUCK: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | # To learn about Buck see [Docs](https://buckbuild.com/). 4 | # To run your application with Buck: 5 | # - install Buck 6 | # - `npm start` - to start the packager 7 | # - `cd android` 8 | # - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` 9 | # - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck 10 | # - `buck install -r android/app` - compile, install and run application 11 | # 12 | 13 | lib_deps = [] 14 | for jarfile in glob(['libs/*.jar']): 15 | name = 'jars__' + re.sub(r'^.*/([^/]+)\.jar$', r'\1', jarfile) 16 | lib_deps.append(':' + name) 17 | prebuilt_jar( 18 | name = name, 19 | binary_jar = jarfile, 20 | ) 21 | 22 | for aarfile in glob(['libs/*.aar']): 23 | name = 'aars__' + re.sub(r'^.*/([^/]+)\.aar$', r'\1', aarfile) 24 | lib_deps.append(':' + name) 25 | android_prebuilt_aar( 26 | name = name, 27 | aar = aarfile, 28 | ) 29 | 30 | android_library( 31 | name = 'all-libs', 32 | exported_deps = lib_deps 33 | ) 34 | 35 | android_library( 36 | name = 'app-code', 37 | srcs = glob([ 38 | 'src/main/java/**/*.java', 39 | ]), 40 | deps = [ 41 | ':all-libs', 42 | ':build_config', 43 | ':res', 44 | ], 45 | ) 46 | 47 | android_build_config( 48 | name = 'build_config', 49 | package = 'com.f82017', 50 | ) 51 | 52 | android_resource( 53 | name = 'res', 54 | res = 'src/main/res', 55 | package = 'com.f82017', 56 | ) 57 | 58 | android_binary( 59 | name = 'app', 60 | package_type = 'debug', 61 | manifest = 'src/main/AndroidManifest.xml', 62 | keystore = '//android/keystores:debug', 63 | deps = [ 64 | ':app-code', 65 | ], 66 | ) 67 | -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/app/src/debug/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-hdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/app/src/debug/res/mipmap-hdpi/ic_notification.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/app/src/debug/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-mdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/app/src/debug/res/mipmap-mdpi/ic_notification.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/app/src/debug/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-xhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/app/src/debug/res/mipmap-xhdpi/ic_notification.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-xxhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/app/src/debug/res/mipmap-xxhdpi/ic_notification.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/debug/res/mipmap-xxxhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/app/src/debug/res/mipmap-xxxhdpi/ic_notification.png -------------------------------------------------------------------------------- /android/app/src/debug/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | F8 Debug 3 | 619048868222429 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/debug/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/main/java/com/facebook/f8/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.facebook.f8; 2 | 3 | import com.facebook.react.ReactActivity; 4 | import android.content.Intent; 5 | /*import com.facebook.reactnative.androidsdk.FBSDKPackage; 6 | import com.microsoft.codepush.react.CodePush;*/ 7 | 8 | public class MainActivity extends ReactActivity { 9 | 10 | /** 11 | * Returns the name of the main component registered from JavaScript. 12 | * This is used to schedule rendering of the component. 13 | */ 14 | @Override 15 | protected String getMainComponentName() { 16 | return "F82017"; 17 | } 18 | 19 | @Override 20 | public void onActivityResult(int requestCode, int resultCode, Intent data) { 21 | super.onActivityResult(requestCode, resultCode, data); 22 | MainApplication.getCallbackManager().onActivityResult(requestCode, resultCode, data); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/app/src/main/res/mipmap-hdpi/ic_notification.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/app/src/main/res/mipmap-mdpi/ic_notification.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/app/src/main/res/mipmap-xhdpi/ic_notification.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/app/src/main/res/mipmap-xxhdpi/ic_notification.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/app/src/main/res/mipmap-xxxhdpi/ic_notification.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | F8 3 | 619048868222429 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | jcenter() 6 | google() 7 | } 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:3.0.1' 10 | 11 | // NOTE: Do not place your application dependencies here; they belong 12 | // in the individual module build.gradle files 13 | } 14 | } 15 | 16 | allprojects { 17 | repositories { 18 | mavenLocal() 19 | jcenter() 20 | google() 21 | maven { 22 | // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm 23 | url "$rootDir/../node_modules/react-native/android" 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | 20 | android.useDeprecatedNdk=true 21 | 22 | F8_RELEASE_STORE_FILE=f8-release.keystore 23 | F8_RELEASE_KEY_ALIAS=f8-release 24 | F8_RELEASE_STORE_PASSWORD=K0IvEbWKWyrZR3KpbfDi 25 | F8_RELEASE_KEY_PASSWORD=D7UhkezSHJqXbBVlAlxA -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue Jan 17 15:39:05 EST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.2-all.zip 7 | -------------------------------------------------------------------------------- /android/keystores/BUCK: -------------------------------------------------------------------------------- 1 | keystore( 2 | name = 'debug', 3 | store = 'debug.keystore', 4 | properties = 'debug.keystore.properties', 5 | visibility = [ 6 | 'PUBLIC', 7 | ], 8 | ) 9 | -------------------------------------------------------------------------------- /android/keystores/debug.keystore.properties: -------------------------------------------------------------------------------- 1 | key.store=debug.keystore 2 | key.alias=androiddebugkey 3 | key.store.password=android 4 | key.alias.password=android 5 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'F82017' 2 | include ':react-native-linear-gradient' 3 | project(':react-native-linear-gradient').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-linear-gradient/android') 4 | include ':react-native-native-video-player' 5 | project(':react-native-native-video-player').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-native-video-player/android') 6 | include ':react-native-push-notification' 7 | project(':react-native-push-notification').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-push-notification/android') 8 | include ':react-native-photo-view' 9 | project(':react-native-photo-view').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-photo-view/android') 10 | 11 | include ':app' 12 | include ':react-native-fbsdk' 13 | project(':react-native-fbsdk').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fbsdk/android') 14 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "F82017", 3 | "displayName": "F82017" 4 | } -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | mongo: 4 | image: mongo 5 | networks: 6 | default: 7 | aliases: 8 | - mongo 9 | mongorestore: 10 | build: ./server/mongorestore 11 | depends_on: 12 | - mongo 13 | parse: 14 | build: ./server/parse-server 15 | ports: 16 | - "1337:1337" 17 | depends_on: 18 | - mongo 19 | parse_dashboard: 20 | build: ./server/parse-dashboard 21 | ports: 22 | - "4040:4040" 23 | graphql: 24 | build: ./server/graphql 25 | environment: 26 | - PARSE_URL=http://parse:1337/parse 27 | ports: 28 | - "4000:4000" 29 | -------------------------------------------------------------------------------- /index.android.js: -------------------------------------------------------------------------------- 1 | import { AppRegistry } from "react-native"; 2 | import setup from "./js/setup"; 3 | 4 | AppRegistry.registerComponent("F82017", setup); 5 | -------------------------------------------------------------------------------- /index.ios.js: -------------------------------------------------------------------------------- 1 | import { AppRegistry } from "react-native"; 2 | import setup from "./js/setup"; 3 | 4 | AppRegistry.registerComponent("F82017", setup); 5 | -------------------------------------------------------------------------------- /ios/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/ios/512.png -------------------------------------------------------------------------------- /ios/512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/ios/512@2x.png -------------------------------------------------------------------------------- /ios/F82017-tvOSTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /ios/F82017/AppDelegate.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | @interface AppDelegate : UIResponder 13 | 14 | @property (nonatomic, strong) UIWindow *window; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /ios/F82017/F82017.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | aps-environment 6 | development 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/F82017/Images.xcassets/AppIcon.appiconset/20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/ios/F82017/Images.xcassets/AppIcon.appiconset/20@2x.png -------------------------------------------------------------------------------- /ios/F82017/Images.xcassets/AppIcon.appiconset/20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/ios/F82017/Images.xcassets/AppIcon.appiconset/20@3x.png -------------------------------------------------------------------------------- /ios/F82017/Images.xcassets/AppIcon.appiconset/29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/ios/F82017/Images.xcassets/AppIcon.appiconset/29@2x.png -------------------------------------------------------------------------------- /ios/F82017/Images.xcassets/AppIcon.appiconset/29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/ios/F82017/Images.xcassets/AppIcon.appiconset/29@3x.png -------------------------------------------------------------------------------- /ios/F82017/Images.xcassets/AppIcon.appiconset/40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/ios/F82017/Images.xcassets/AppIcon.appiconset/40@2x.png -------------------------------------------------------------------------------- /ios/F82017/Images.xcassets/AppIcon.appiconset/40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/ios/F82017/Images.xcassets/AppIcon.appiconset/40@3x.png -------------------------------------------------------------------------------- /ios/F82017/Images.xcassets/AppIcon.appiconset/60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/ios/F82017/Images.xcassets/AppIcon.appiconset/60@2x.png -------------------------------------------------------------------------------- /ios/F82017/Images.xcassets/AppIcon.appiconset/60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/ios/F82017/Images.xcassets/AppIcon.appiconset/60@3x.png -------------------------------------------------------------------------------- /ios/F82017/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "29@2x.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "29@3x.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "40@2x.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "40@3x.png", 37 | "scale" : "3x" 38 | }, 39 | { 40 | "size" : "60x60", 41 | "idiom" : "iphone", 42 | "filename" : "60@2x.png", 43 | "scale" : "2x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "60@3x.png", 49 | "scale" : "3x" 50 | }, 51 | { 52 | "idiom" : "ios-marketing", 53 | "size" : "1024x1024", 54 | "scale" : "1x" 55 | } 56 | ], 57 | "info" : { 58 | "version" : 1, 59 | "author" : "xcode" 60 | } 61 | } -------------------------------------------------------------------------------- /ios/F82017/main.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #import "AppDelegate.h" 13 | 14 | int main(int argc, char * argv[]) { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /ios/F82017Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /ios/launchscreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/ios/launchscreen.png -------------------------------------------------------------------------------- /ios/launchscreen@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/ios/launchscreen@2x.png -------------------------------------------------------------------------------- /ios/launchscreen@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/ios/launchscreen@3x.png -------------------------------------------------------------------------------- /js/F8Analytics.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | * @flow 23 | */ 24 | 25 | import { AppEventsLogger } from "react-native-fbsdk"; 26 | 27 | export default class F8Analytics { 28 | static logEvent(name, value, opts) { 29 | AppEventsLogger.logEvent(name, value, opts); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /js/actions/config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | * @flow 23 | */ 24 | 25 | "use strict"; 26 | 27 | import Parse from "parse/react-native"; 28 | import { InteractionManager } from "react-native"; 29 | 30 | import type { Action } from "./types"; 31 | 32 | async function loadConfig(): Promise { 33 | const config = await Parse.Config.get(); 34 | await InteractionManager.runAfterInteractions(); 35 | return { 36 | type: "LOADED_CONFIG", 37 | config 38 | }; 39 | } 40 | 41 | module.exports = { loadConfig }; 42 | -------------------------------------------------------------------------------- /js/actions/navigation.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | */ 22 | 23 | "use strict"; 24 | 25 | import type { Action } from "./types"; 26 | 27 | type Tab = "schedule" | "myF8" | "demos" | "videos" | "info"; 28 | 29 | module.exports = { 30 | switchTab: (tab: Tab): Action => ({ 31 | type: "SWITCH_TAB", 32 | tab 33 | }), 34 | 35 | switchDay: (day: 1 | 2): Action => ({ 36 | type: "SWITCH_DAY", 37 | day 38 | }) 39 | }; 40 | -------------------------------------------------------------------------------- /js/actions/video.js: -------------------------------------------------------------------------------- 1 | import F8Analytics from "../F8Analytics"; 2 | import { Platform, Share, ActionSheetIOS } from "react-native"; 3 | 4 | import type { ThunkAction } from "./types"; 5 | import type { Video } from "../reducers/videos"; 6 | 7 | function shareVideo(video: Video): ThunkAction { 8 | return dispatch => { 9 | if (Platform.OS === "ios") { 10 | ActionSheetIOS.showShareActionSheetWithOptions( 11 | { 12 | message: video.title, 13 | url: video.shareURL 14 | }, 15 | e => {}, 16 | logShare.bind(null, video.id) 17 | ); 18 | } else { 19 | Share.share( 20 | { 21 | // content 22 | title: video.title, 23 | message: video.shareURL 24 | }, 25 | { 26 | // options 27 | dialogTitle: "Share Link to " + video.title // droid-only share option 28 | } 29 | ).then( 30 | // callback 31 | _ => logShare(video.id, true, null) 32 | ); 33 | } 34 | }; 35 | } 36 | 37 | function logShare(id, completed, activity) { 38 | F8Analytics.logEvent("Share Video", 1, { id }); 39 | // Parse.Analytics.track('share', { 40 | // id, 41 | // completed: completed ? 'yes' : 'no', 42 | // activity: activity || '?' 43 | // }); 44 | } 45 | 46 | export { shareVideo }; 47 | -------------------------------------------------------------------------------- /js/common/F8Touchable.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * @flow 22 | */ 23 | 24 | "use strict"; 25 | 26 | import React from "react"; 27 | import { 28 | TouchableHighlight, 29 | TouchableNativeFeedback, 30 | Platform 31 | } from "react-native"; 32 | 33 | function F8TouchableIOS(props: Object): ReactElement { 34 | return ( 35 | 40 | ); 41 | } 42 | 43 | const F8Touchable = 44 | Platform.OS === "android" ? TouchableNativeFeedback : F8TouchableIOS; 45 | 46 | module.exports = F8Touchable; 47 | -------------------------------------------------------------------------------- /js/common/convertTimes.js: -------------------------------------------------------------------------------- 1 | import moment from "moment-timezone"; 2 | import { timezone } from "../env.js"; 3 | 4 | import type { Session } from "../reducers/sessions"; 5 | 6 | const CONFERENCE_DATES = [1492473600000, 1492560000000]; 7 | 8 | export function parseTimeToUTC(unix: number): number { 9 | const offset = moment.tz.zone(timezone).offset(unix); 10 | const utc = moment.utc(unix); 11 | const fixed = utc.clone().add(offset, "minutes"); 12 | return fixed.valueOf(); 13 | } 14 | 15 | function minutesSinceMidnight(): number { 16 | const now = moment().tz(timezone); 17 | const dayStart = now.clone().startOf("day"); 18 | return now.diff(dayStart, "minutes"); 19 | } 20 | 21 | export function currentTimeOnConferenceDay(day: number = 1): number { 22 | const utc = moment.utc(parseTimeToUTC(CONFERENCE_DATES[day - 1])); 23 | const mappedTime = utc.clone().add(minutesSinceMidnight(), "minutes"); 24 | return mappedTime.valueOf(); 25 | } 26 | 27 | export function sessionsHappeningNow( 28 | now: number, 29 | sessions: Array = [] 30 | ): boolean { 31 | if (sessions.length) { 32 | let start, end; 33 | sessions.map(session => { 34 | if (!start || start > session.startTime) { 35 | start = session.startTime; 36 | } 37 | if (!end || end < session.endTime) { 38 | end = session.startTime; 39 | } 40 | }); 41 | return now >= start && now <= end; 42 | } else { 43 | return false; 44 | } 45 | } 46 | 47 | export function sessionsHappeningToday(now: number): boolean { 48 | const day1Start = new Date( 49 | "Tue Apr 18 2017 00:00:00 GMT-0700 (PDT)" 50 | ).getTime(); 51 | const day2End = new Date("Wed Apr 19 2017 23:59:59 GMT-0700 (PDT)").getTime(); 52 | return now >= day1Start && now <= day2End; 53 | } 54 | -------------------------------------------------------------------------------- /js/common/img/buttons/icon-check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/buttons/icon-check.png -------------------------------------------------------------------------------- /js/common/img/buttons/icon-check@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/buttons/icon-check@2x.png -------------------------------------------------------------------------------- /js/common/img/buttons/icon-check@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/buttons/icon-check@3x.png -------------------------------------------------------------------------------- /js/common/img/buttons/icon-x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/buttons/icon-x.png -------------------------------------------------------------------------------- /js/common/img/buttons/icon-x@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/buttons/icon-x@2x.png -------------------------------------------------------------------------------- /js/common/img/buttons/icon-x@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/buttons/icon-x@3x.png -------------------------------------------------------------------------------- /js/common/img/buttons/logo-fb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/buttons/logo-fb.png -------------------------------------------------------------------------------- /js/common/img/buttons/logo-fb@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/buttons/logo-fb@2x.png -------------------------------------------------------------------------------- /js/common/img/buttons/logo-fb@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/buttons/logo-fb@3x.png -------------------------------------------------------------------------------- /js/common/img/buttons/play-large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/buttons/play-large.png -------------------------------------------------------------------------------- /js/common/img/buttons/play-large@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/buttons/play-large@2x.png -------------------------------------------------------------------------------- /js/common/img/buttons/play-large@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/buttons/play-large@3x.png -------------------------------------------------------------------------------- /js/common/img/buttons/play-medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/buttons/play-medium.png -------------------------------------------------------------------------------- /js/common/img/buttons/play-medium@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/buttons/play-medium@2x.png -------------------------------------------------------------------------------- /js/common/img/buttons/play-medium@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/buttons/play-medium@3x.png -------------------------------------------------------------------------------- /js/common/img/buttons/play-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/buttons/play-small.png -------------------------------------------------------------------------------- /js/common/img/buttons/play-small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/buttons/play-small@2x.png -------------------------------------------------------------------------------- /js/common/img/buttons/play-small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/buttons/play-small@3x.png -------------------------------------------------------------------------------- /js/common/img/chathead-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/chathead-logo.png -------------------------------------------------------------------------------- /js/common/img/chathead-logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/chathead-logo@2x.png -------------------------------------------------------------------------------- /js/common/img/chathead-logo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/chathead-logo@3x.png -------------------------------------------------------------------------------- /js/common/img/favorite-smiley.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/favorite-smiley.png -------------------------------------------------------------------------------- /js/common/img/favorite-smiley@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/favorite-smiley@2x.png -------------------------------------------------------------------------------- /js/common/img/favorite-smiley@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/favorite-smiley@3x.png -------------------------------------------------------------------------------- /js/common/img/favorite-star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/favorite-star.png -------------------------------------------------------------------------------- /js/common/img/favorite-star@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/favorite-star@2x.png -------------------------------------------------------------------------------- /js/common/img/favorite-star@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/favorite-star@3x.png -------------------------------------------------------------------------------- /js/common/img/header/back-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/back-blue.png -------------------------------------------------------------------------------- /js/common/img/header/back-blue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/back-blue@2x.png -------------------------------------------------------------------------------- /js/common/img/header/back-blue@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/back-blue@3x.png -------------------------------------------------------------------------------- /js/common/img/header/back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/back.png -------------------------------------------------------------------------------- /js/common/img/header/back@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/back@2x.png -------------------------------------------------------------------------------- /js/common/img/header/back@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/back@3x.png -------------------------------------------------------------------------------- /js/common/img/header/confirm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/confirm.png -------------------------------------------------------------------------------- /js/common/img/header/confirm@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/confirm@2x.png -------------------------------------------------------------------------------- /js/common/img/header/confirm@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/confirm@3x.png -------------------------------------------------------------------------------- /js/common/img/header/filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/filter.png -------------------------------------------------------------------------------- /js/common/img/header/filter@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/filter@2x.png -------------------------------------------------------------------------------- /js/common/img/header/filter@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/filter@3x.png -------------------------------------------------------------------------------- /js/common/img/header/logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/logout.png -------------------------------------------------------------------------------- /js/common/img/header/logout@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/logout@2x.png -------------------------------------------------------------------------------- /js/common/img/header/logout@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/logout@3x.png -------------------------------------------------------------------------------- /js/common/img/header/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/map.png -------------------------------------------------------------------------------- /js/common/img/header/map@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/map@2x.png -------------------------------------------------------------------------------- /js/common/img/header/map@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/map@3x.png -------------------------------------------------------------------------------- /js/common/img/header/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/settings.png -------------------------------------------------------------------------------- /js/common/img/header/settings@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/settings@2x.png -------------------------------------------------------------------------------- /js/common/img/header/settings@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/settings@3x.png -------------------------------------------------------------------------------- /js/common/img/header/share.android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/share.android.png -------------------------------------------------------------------------------- /js/common/img/header/share.ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/share.ios.png -------------------------------------------------------------------------------- /js/common/img/header/share@2x.android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/share@2x.android.png -------------------------------------------------------------------------------- /js/common/img/header/share@2x.ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/share@2x.ios.png -------------------------------------------------------------------------------- /js/common/img/header/share@3x.android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/share@3x.android.png -------------------------------------------------------------------------------- /js/common/img/header/share@3x.ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/share@3x.ios.png -------------------------------------------------------------------------------- /js/common/img/header/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/star.png -------------------------------------------------------------------------------- /js/common/img/header/star@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/star@2x.png -------------------------------------------------------------------------------- /js/common/img/header/star@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/star@3x.png -------------------------------------------------------------------------------- /js/common/img/header/x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/x.png -------------------------------------------------------------------------------- /js/common/img/header/x@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/x@2x.png -------------------------------------------------------------------------------- /js/common/img/header/x@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/header/x@3x.png -------------------------------------------------------------------------------- /js/common/img/launchscreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/launchscreen.png -------------------------------------------------------------------------------- /js/common/img/launchscreen@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/launchscreen@2x.png -------------------------------------------------------------------------------- /js/common/img/launchscreen@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/launchscreen@3x.png -------------------------------------------------------------------------------- /js/common/img/messenger-app-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/messenger-app-icon.png -------------------------------------------------------------------------------- /js/common/img/messenger-app-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/messenger-app-icon@2x.png -------------------------------------------------------------------------------- /js/common/img/messenger-app-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/messenger-app-icon@3x.png -------------------------------------------------------------------------------- /js/common/img/pattern-dots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/pattern-dots.png -------------------------------------------------------------------------------- /js/common/img/pattern-dots@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/pattern-dots@2x.png -------------------------------------------------------------------------------- /js/common/img/pattern-dots@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/pattern-dots@3x.png -------------------------------------------------------------------------------- /js/common/img/pointer-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/pointer-right.png -------------------------------------------------------------------------------- /js/common/img/pointer-right@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/pointer-right@2x.png -------------------------------------------------------------------------------- /js/common/img/pointer-right@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/pointer-right@3x.png -------------------------------------------------------------------------------- /js/common/img/privacy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/privacy.png -------------------------------------------------------------------------------- /js/common/img/privacy@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/privacy@2x.png -------------------------------------------------------------------------------- /js/common/img/privacy@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/privacy@3x.png -------------------------------------------------------------------------------- /js/common/img/tooltip-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/tooltip-arrow.png -------------------------------------------------------------------------------- /js/common/img/tooltip-arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/tooltip-arrow@2x.png -------------------------------------------------------------------------------- /js/common/img/tooltip-arrow@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/tooltip-arrow@3x.png -------------------------------------------------------------------------------- /js/common/img/webview/back.android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/back.android.png -------------------------------------------------------------------------------- /js/common/img/webview/back.ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/back.ios.png -------------------------------------------------------------------------------- /js/common/img/webview/back@2x.android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/back@2x.android.png -------------------------------------------------------------------------------- /js/common/img/webview/back@2x.ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/back@2x.ios.png -------------------------------------------------------------------------------- /js/common/img/webview/back@3x.android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/back@3x.android.png -------------------------------------------------------------------------------- /js/common/img/webview/back@3x.ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/back@3x.ios.png -------------------------------------------------------------------------------- /js/common/img/webview/browser.android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/browser.android.png -------------------------------------------------------------------------------- /js/common/img/webview/browser.ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/browser.ios.png -------------------------------------------------------------------------------- /js/common/img/webview/browser@2x.android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/browser@2x.android.png -------------------------------------------------------------------------------- /js/common/img/webview/browser@2x.ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/browser@2x.ios.png -------------------------------------------------------------------------------- /js/common/img/webview/browser@3x.android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/browser@3x.android.png -------------------------------------------------------------------------------- /js/common/img/webview/browser@3x.ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/browser@3x.ios.png -------------------------------------------------------------------------------- /js/common/img/webview/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/close.png -------------------------------------------------------------------------------- /js/common/img/webview/close@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/close@2x.png -------------------------------------------------------------------------------- /js/common/img/webview/close@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/close@3x.png -------------------------------------------------------------------------------- /js/common/img/webview/forward.android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/forward.android.png -------------------------------------------------------------------------------- /js/common/img/webview/forward.ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/forward.ios.png -------------------------------------------------------------------------------- /js/common/img/webview/forward@2x.android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/forward@2x.android.png -------------------------------------------------------------------------------- /js/common/img/webview/forward@2x.ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/forward@2x.ios.png -------------------------------------------------------------------------------- /js/common/img/webview/forward@3x.android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/forward@3x.android.png -------------------------------------------------------------------------------- /js/common/img/webview/forward@3x.ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/forward@3x.ios.png -------------------------------------------------------------------------------- /js/common/img/webview/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/logo.png -------------------------------------------------------------------------------- /js/common/img/webview/logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/logo@2x.png -------------------------------------------------------------------------------- /js/common/img/webview/logo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/webview/logo@3x.png -------------------------------------------------------------------------------- /js/common/img/x-white@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/x-white@2x.png -------------------------------------------------------------------------------- /js/common/img/x-white@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/common/img/x-white@3x.png -------------------------------------------------------------------------------- /js/env.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | */ 22 | 23 | "use strict"; 24 | 25 | module.exports = { 26 | version: 410, 27 | testMenuEnabled: false, 28 | parseAppID: "oss-f8-app-2017", 29 | serverURL: "http://localhost:1337", 30 | graphqlURL: "http://localhost:4000/graphql", 31 | compatibleStoreVersion: "0.10", 32 | gcmSenderId: "336769939688", 33 | timezone: "America/Los_Angeles", 34 | dayLabel(num) { 35 | const days = { 1: "Tue 4/18", 2: "Wed 4/19" }; 36 | return days[num] || `Day ${num}`; 37 | } 38 | }; 39 | -------------------------------------------------------------------------------- /js/filter/img/active/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/1.png -------------------------------------------------------------------------------- /js/filter/img/active/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/10.png -------------------------------------------------------------------------------- /js/filter/img/active/10@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/10@2x.png -------------------------------------------------------------------------------- /js/filter/img/active/10@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/10@3x.png -------------------------------------------------------------------------------- /js/filter/img/active/1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/1@2x.png -------------------------------------------------------------------------------- /js/filter/img/active/1@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/1@3x.png -------------------------------------------------------------------------------- /js/filter/img/active/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/2.png -------------------------------------------------------------------------------- /js/filter/img/active/2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/2@2x.png -------------------------------------------------------------------------------- /js/filter/img/active/2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/2@3x.png -------------------------------------------------------------------------------- /js/filter/img/active/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/3.png -------------------------------------------------------------------------------- /js/filter/img/active/3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/3@2x.png -------------------------------------------------------------------------------- /js/filter/img/active/3@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/3@3x.png -------------------------------------------------------------------------------- /js/filter/img/active/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/4.png -------------------------------------------------------------------------------- /js/filter/img/active/4@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/4@2x.png -------------------------------------------------------------------------------- /js/filter/img/active/4@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/4@3x.png -------------------------------------------------------------------------------- /js/filter/img/active/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/5.png -------------------------------------------------------------------------------- /js/filter/img/active/5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/5@2x.png -------------------------------------------------------------------------------- /js/filter/img/active/5@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/5@3x.png -------------------------------------------------------------------------------- /js/filter/img/active/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/6.png -------------------------------------------------------------------------------- /js/filter/img/active/6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/6@2x.png -------------------------------------------------------------------------------- /js/filter/img/active/6@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/6@3x.png -------------------------------------------------------------------------------- /js/filter/img/active/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/7.png -------------------------------------------------------------------------------- /js/filter/img/active/7@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/7@2x.png -------------------------------------------------------------------------------- /js/filter/img/active/7@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/7@3x.png -------------------------------------------------------------------------------- /js/filter/img/active/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/8.png -------------------------------------------------------------------------------- /js/filter/img/active/8@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/8@2x.png -------------------------------------------------------------------------------- /js/filter/img/active/8@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/8@3x.png -------------------------------------------------------------------------------- /js/filter/img/active/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/9.png -------------------------------------------------------------------------------- /js/filter/img/active/9@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/9@2x.png -------------------------------------------------------------------------------- /js/filter/img/active/9@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/active/9@3x.png -------------------------------------------------------------------------------- /js/filter/img/default/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/1.png -------------------------------------------------------------------------------- /js/filter/img/default/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/10.png -------------------------------------------------------------------------------- /js/filter/img/default/10@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/10@2x.png -------------------------------------------------------------------------------- /js/filter/img/default/10@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/10@3x.png -------------------------------------------------------------------------------- /js/filter/img/default/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/11.png -------------------------------------------------------------------------------- /js/filter/img/default/11@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/11@2x.png -------------------------------------------------------------------------------- /js/filter/img/default/11@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/11@3x.png -------------------------------------------------------------------------------- /js/filter/img/default/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/12.png -------------------------------------------------------------------------------- /js/filter/img/default/12@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/12@2x.png -------------------------------------------------------------------------------- /js/filter/img/default/12@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/12@3x.png -------------------------------------------------------------------------------- /js/filter/img/default/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/13.png -------------------------------------------------------------------------------- /js/filter/img/default/13@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/13@2x.png -------------------------------------------------------------------------------- /js/filter/img/default/13@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/13@3x.png -------------------------------------------------------------------------------- /js/filter/img/default/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/14.png -------------------------------------------------------------------------------- /js/filter/img/default/14@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/14@2x.png -------------------------------------------------------------------------------- /js/filter/img/default/14@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/14@3x.png -------------------------------------------------------------------------------- /js/filter/img/default/1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/1@2x.png -------------------------------------------------------------------------------- /js/filter/img/default/1@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/1@3x.png -------------------------------------------------------------------------------- /js/filter/img/default/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/2.png -------------------------------------------------------------------------------- /js/filter/img/default/2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/2@2x.png -------------------------------------------------------------------------------- /js/filter/img/default/2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/2@3x.png -------------------------------------------------------------------------------- /js/filter/img/default/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/3.png -------------------------------------------------------------------------------- /js/filter/img/default/3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/3@2x.png -------------------------------------------------------------------------------- /js/filter/img/default/3@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/3@3x.png -------------------------------------------------------------------------------- /js/filter/img/default/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/4.png -------------------------------------------------------------------------------- /js/filter/img/default/4@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/4@2x.png -------------------------------------------------------------------------------- /js/filter/img/default/4@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/4@3x.png -------------------------------------------------------------------------------- /js/filter/img/default/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/5.png -------------------------------------------------------------------------------- /js/filter/img/default/5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/5@2x.png -------------------------------------------------------------------------------- /js/filter/img/default/5@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/5@3x.png -------------------------------------------------------------------------------- /js/filter/img/default/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/6.png -------------------------------------------------------------------------------- /js/filter/img/default/6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/6@2x.png -------------------------------------------------------------------------------- /js/filter/img/default/6@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/6@3x.png -------------------------------------------------------------------------------- /js/filter/img/default/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/7.png -------------------------------------------------------------------------------- /js/filter/img/default/7@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/7@2x.png -------------------------------------------------------------------------------- /js/filter/img/default/7@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/7@3x.png -------------------------------------------------------------------------------- /js/filter/img/default/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/8.png -------------------------------------------------------------------------------- /js/filter/img/default/8@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/8@2x.png -------------------------------------------------------------------------------- /js/filter/img/default/8@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/8@3x.png -------------------------------------------------------------------------------- /js/filter/img/default/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/9.png -------------------------------------------------------------------------------- /js/filter/img/default/9@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/9@2x.png -------------------------------------------------------------------------------- /js/filter/img/default/9@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/default/9@3x.png -------------------------------------------------------------------------------- /js/filter/img/icon-x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/icon-x.png -------------------------------------------------------------------------------- /js/filter/img/icon-x@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/icon-x@2x.png -------------------------------------------------------------------------------- /js/filter/img/icon-x@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/filter/img/icon-x@3x.png -------------------------------------------------------------------------------- /js/filter/topicIcons.js: -------------------------------------------------------------------------------- 1 | const TOPIC_ICONS = { 2 | default: [require("./img/default/1.png")], 3 | active: [ 4 | require("./img/active/1.png"), 5 | require("./img/active/2.png"), 6 | require("./img/active/3.png"), 7 | require("./img/active/4.png"), 8 | require("./img/active/5.png"), 9 | require("./img/active/6.png"), 10 | require("./img/active/7.png"), 11 | require("./img/active/8.png"), 12 | require("./img/active/9.png"), 13 | require("./img/active/10.png") 14 | ] 15 | }; 16 | 17 | /** 18 | * ============================================================================== 19 | * Get filter list item icons by index and active/default state 20 | * ------------------------------------------------------------------------------ 21 | * @param {?string} state Whether to return default or active state icons 22 | * @param {?number} idx Index for varied icons 23 | * @return {number} RN Asset Source format 24 | * ============================================================================== 25 | */ 26 | export function get(state = "default", idx = 0) { 27 | // sanitize input 28 | if (!TOPIC_ICONS[state]) { 29 | return TOPIC_ICONS.default[0]; 30 | } 31 | // map provided index to the number of available options 32 | const mappedIndex = (idx + 1) % TOPIC_ICONS[state].length; 33 | return TOPIC_ICONS[state][mappedIndex]; 34 | } 35 | -------------------------------------------------------------------------------- /js/flow-lib.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | * @flow 23 | */ 24 | 25 | "use strict"; 26 | 27 | /* eslint no-unused-vars:0 */ 28 | declare var jest: any; 29 | declare var jasmine: any; 30 | declare var describe: (name: string, callback: () => void) => void; 31 | declare var it: (name: string, callback: () => void) => void; 32 | declare var expect: any; 33 | 34 | declare module "graphql" { 35 | declare var exports: any; 36 | } 37 | 38 | declare module "react-native-linear-gradient" { 39 | declare var exports: any; 40 | } 41 | 42 | declare module "resolveAssetSource" { 43 | declare var exports: any; 44 | } 45 | -------------------------------------------------------------------------------- /js/login/img/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/login/img/arrow.png -------------------------------------------------------------------------------- /js/login/img/arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/login/img/arrow@2x.png -------------------------------------------------------------------------------- /js/login/img/arrow@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/login/img/arrow@3x.png -------------------------------------------------------------------------------- /js/login/img/illustration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/login/img/illustration.png -------------------------------------------------------------------------------- /js/login/img/illustration@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/login/img/illustration@2x.png -------------------------------------------------------------------------------- /js/login/img/illustration@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/login/img/illustration@3x.png -------------------------------------------------------------------------------- /js/login/img/login-modal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/login/img/login-modal.png -------------------------------------------------------------------------------- /js/login/img/login-modal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/login/img/login-modal@2x.png -------------------------------------------------------------------------------- /js/login/img/login-modal@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/login/img/login-modal@3x.png -------------------------------------------------------------------------------- /js/login/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/login/img/logo.png -------------------------------------------------------------------------------- /js/login/img/logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/login/img/logo@2x.png -------------------------------------------------------------------------------- /js/login/img/logo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/login/img/logo@3x.png -------------------------------------------------------------------------------- /js/rating/img/radio-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/rating/img/radio-active.png -------------------------------------------------------------------------------- /js/rating/img/radio-active@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/rating/img/radio-active@2x.png -------------------------------------------------------------------------------- /js/rating/img/radio-active@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/rating/img/radio-active@3x.png -------------------------------------------------------------------------------- /js/rating/img/radio-default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/rating/img/radio-default.png -------------------------------------------------------------------------------- /js/rating/img/radio-default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/rating/img/radio-default@2x.png -------------------------------------------------------------------------------- /js/rating/img/radio-default@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/rating/img/radio-default@3x.png -------------------------------------------------------------------------------- /js/rating/img/star-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/rating/img/star-active.png -------------------------------------------------------------------------------- /js/rating/img/star-active@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/rating/img/star-active@2x.png -------------------------------------------------------------------------------- /js/rating/img/star-active@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/rating/img/star-active@3x.png -------------------------------------------------------------------------------- /js/rating/img/star-default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/rating/img/star-default.png -------------------------------------------------------------------------------- /js/rating/img/star-default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/rating/img/star-default@2x.png -------------------------------------------------------------------------------- /js/rating/img/star-default@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/rating/img/star-default@3x.png -------------------------------------------------------------------------------- /js/reducers/createParseReducer.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | * @flow 23 | */ 24 | 25 | "use strict"; 26 | 27 | import type { Action } from "../actions/types"; 28 | 29 | type Convert = (object: Object) => T; 30 | type Reducer = (state: ?Array, action: any) => Array; 31 | 32 | function createParseReducer(type: string, convert: Convert): Reducer { 33 | return function(state: ?Array, action: Action): Array { 34 | if (action.type === type) { 35 | // Flow can't guarantee {type, list} is a valid action 36 | return (action: any).list.map(convert); 37 | } 38 | return state || []; 39 | }; 40 | } 41 | 42 | module.exports = createParseReducer; 43 | -------------------------------------------------------------------------------- /js/reducers/faqs.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | * @flow 23 | */ 24 | 25 | "use strict"; 26 | 27 | import createParseReducer from "./createParseReducer"; 28 | 29 | export type FAQ = { 30 | id: string, 31 | question: string, 32 | answer: string 33 | }; 34 | 35 | function fromParseObject(map: Object): FAQ { 36 | return { 37 | id: map.id, 38 | question: map.get("question"), 39 | answer: map.get("answer") 40 | }; 41 | } 42 | 43 | module.exports = createParseReducer("LOADED_FAQS", fromParseObject); 44 | -------------------------------------------------------------------------------- /js/reducers/friendsSchedules.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | * @flow 23 | */ 24 | 25 | "use strict"; 26 | 27 | import type { Action } from "../actions/types"; 28 | 29 | export type FriendsSchedule = { 30 | id: string, 31 | name: string, 32 | schedule: { [key: string]: boolean } 33 | }; 34 | 35 | type State = Array; 36 | 37 | function friendsSchedules(state: State = [], action: Action): State { 38 | if (action.type === "LOADED_FRIENDS_SCHEDULES") { 39 | return action.list; 40 | } 41 | if (action.type === "LOGGED_OUT") { 42 | return []; 43 | } 44 | return state; 45 | } 46 | 47 | module.exports = friendsSchedules; 48 | -------------------------------------------------------------------------------- /js/reducers/pages.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | * @flow 23 | */ 24 | 25 | "use strict"; 26 | 27 | import createParseReducer from "./createParseReducer"; 28 | 29 | export type Page = { 30 | id: string, 31 | title: string, 32 | url: string, 33 | logo: ?string 34 | }; 35 | 36 | function fromParseObject(map: Object): Page { 37 | return { 38 | id: map.id, 39 | title: map.get("title"), 40 | url: map.get("url"), 41 | logo: map.get("logo") && map.get("logo").url() 42 | }; 43 | } 44 | 45 | module.exports = createParseReducer("LOADED_PAGES", fromParseObject); 46 | -------------------------------------------------------------------------------- /js/reducers/policies.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | * @flow 23 | */ 24 | 25 | "use strict"; 26 | 27 | import createParseReducer from "./createParseReducer"; 28 | 29 | export type Policy = { 30 | id: string, 31 | title: string, 32 | url: string 33 | }; 34 | 35 | function fromParseObject(policy: Object): Policy { 36 | return { 37 | id: policy.id, 38 | title: policy.get("title"), 39 | url: policy.get("url") 40 | }; 41 | } 42 | 43 | module.exports = createParseReducer("LOADED_POLICIES", fromParseObject); 44 | -------------------------------------------------------------------------------- /js/reducers/scheduleFilter.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | * @flow 23 | */ 24 | 25 | "use strict"; 26 | 27 | import type { Action } from "../actions/types"; 28 | 29 | export type FriendFilter = { 30 | id: string, 31 | name: string, 32 | schedule: { [key: string]: boolean } 33 | }; 34 | 35 | export type TopicsFilter = { 36 | [key: string]: boolean 37 | }; 38 | 39 | type State = TopicsFilter; 40 | 41 | function filter(state: State = {}, action: Action): State { 42 | if (action.type === "APPLY_SCHEDULE_TOPICS_FILTER") { 43 | return action.scheduleTopics; 44 | } 45 | if (action.type === "CLEAR_SCHEDULE_FILTER") { 46 | return {}; 47 | } 48 | return state; 49 | } 50 | 51 | module.exports = filter; 52 | -------------------------------------------------------------------------------- /js/reducers/scheduleTopics.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | * @flow 23 | */ 24 | 25 | "use strict"; 26 | 27 | type State = Array; 28 | type Action = { type: string, list: Array }; 29 | 30 | function topics(state: State = [], action: Action): State { 31 | if (action.type === "LOADED_SESSIONS") { 32 | const topicsMap = Object.create(null); 33 | action.list.forEach(session => { 34 | const tags = session.get("tags") || []; 35 | tags.forEach(tag => { 36 | topicsMap[tag] = true; 37 | }); 38 | }); 39 | return Object.keys(topicsMap).sort(); 40 | } 41 | return state; 42 | } 43 | 44 | module.exports = topics; 45 | -------------------------------------------------------------------------------- /js/reducers/testEventDates.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | * @flow 23 | */ 24 | 25 | "use strict"; 26 | 27 | import type { Action } from "../actions/types"; 28 | type State = ?number; 29 | 30 | function setCurrentDateForTesting(state: State = null, action: Action): State { 31 | if (action.type === "SET_TIMED_TESTING") { 32 | return action.value; 33 | } 34 | return state; 35 | } 36 | 37 | module.exports = setCurrentDateForTesting; 38 | -------------------------------------------------------------------------------- /js/reducers/videoFilter.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | * @flow 23 | */ 24 | 25 | "use strict"; 26 | 27 | import type { Action } from "../actions/types"; 28 | 29 | // export type FriendFilter = { 30 | // id: string; 31 | // name: string; 32 | // video: {[key: string]: boolean}; 33 | // }; 34 | 35 | export type TopicsFilter = { 36 | [key: string]: boolean 37 | }; 38 | 39 | type State = TopicsFilter; 40 | 41 | function filter(state: State = {}, action: Action): State { 42 | if (action.type === "APPLY_VIDEO_TOPICS_FILTER") { 43 | return action.videoTopics; 44 | } 45 | if (action.type === "CLEAR_VIDEO_FILTER") { 46 | return {}; 47 | } 48 | return state; 49 | } 50 | 51 | module.exports = filter; 52 | -------------------------------------------------------------------------------- /js/reducers/videoTopics.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | * @flow 23 | */ 24 | 25 | "use strict"; 26 | 27 | type State = Array; 28 | type Action = { type: string, list: Array }; 29 | 30 | function topics(state: State = [], action: Action): State { 31 | if (action.type === "LOADED_VIDEOS") { 32 | const topicsMap = Object.create(null); 33 | action.list.forEach(video => { 34 | const tags = video.get("tags") || []; 35 | tags.forEach(tag => { 36 | topicsMap[tag] = true; 37 | }); 38 | }); 39 | return Object.keys(topicsMap).sort(); 40 | } 41 | return state; 42 | } 43 | 44 | module.exports = topics; 45 | -------------------------------------------------------------------------------- /js/store/analytics.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | */ 22 | 23 | "use strict"; 24 | 25 | import track from "./track"; 26 | 27 | module.exports = store => next => action => { 28 | track(action); 29 | return next(action); 30 | }; 31 | -------------------------------------------------------------------------------- /js/store/array.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | */ 22 | 23 | "use strict"; 24 | 25 | module.exports = store => next => action => 26 | Array.isArray(action) ? action.map(next) : next(action); 27 | -------------------------------------------------------------------------------- /js/store/compatibility.js: -------------------------------------------------------------------------------- 1 | import { AsyncStorage } from "react-native"; 2 | import { compatibleStoreVersion } from "../env"; 3 | 4 | const LS_GROUP = "F8StoreCompatibility", 5 | LS_VERSIONING = `${LS_GROUP}:version`; 6 | 7 | export async function ensureCompatibility() { 8 | try { 9 | const stored = await AsyncStorage.getItem(LS_VERSIONING); 10 | if (stored && stored === JSON.stringify(compatibleStoreVersion)) { 11 | return false; // no need to update 12 | } 13 | } catch (error) {} 14 | return await resetCompatibility(); 15 | } 16 | 17 | async function resetCompatibility() { 18 | try { 19 | const keys = await AsyncStorage.getAllKeys(); 20 | // force clear everything except for versioning (all reduxPersist:x and Parse:x keys) 21 | const targets = (keys || []).filter(k => k !== LS_VERSIONING); 22 | if (targets.length) { 23 | await AsyncStorage.multiRemove(targets); 24 | } 25 | // after storage reset, update the compatibility to the current storage version 26 | return await updateCompatibility(); 27 | } catch (error) {} 28 | return false; 29 | } 30 | 31 | async function updateCompatibility() { 32 | try { 33 | await AsyncStorage.setItem( 34 | LS_VERSIONING, 35 | JSON.stringify(compatibleStoreVersion) 36 | ); 37 | return true; 38 | } catch (error) {} 39 | return false; 40 | } 41 | -------------------------------------------------------------------------------- /js/store/promise.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | */ 22 | 23 | "use strict"; 24 | 25 | import { testMenuEnabled } from "../env"; 26 | 27 | function warn(error) { 28 | if (testMenuEnabled) { 29 | console.warn(error.message || error); 30 | } // only log promise failures when debug menu is enabled 31 | throw error; // To let the caller handle the rejection 32 | } 33 | 34 | module.exports = store => next => action => 35 | typeof action.then === "function" 36 | ? Promise.resolve(action).then(next, warn) 37 | : next(action); 38 | -------------------------------------------------------------------------------- /js/tabs/demos/img/bookable-flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/demos/img/bookable-flag.png -------------------------------------------------------------------------------- /js/tabs/demos/img/bookable-flag@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/demos/img/bookable-flag@2x.png -------------------------------------------------------------------------------- /js/tabs/demos/img/bookable-flag@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/demos/img/bookable-flag@3x.png -------------------------------------------------------------------------------- /js/tabs/demos/img/header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/demos/img/header.png -------------------------------------------------------------------------------- /js/tabs/demos/img/header@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/demos/img/header@2x.png -------------------------------------------------------------------------------- /js/tabs/demos/img/header@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/demos/img/header@3x.png -------------------------------------------------------------------------------- /js/tabs/demos/img/tab-icon/active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/demos/img/tab-icon/active.png -------------------------------------------------------------------------------- /js/tabs/demos/img/tab-icon/active@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/demos/img/tab-icon/active@2x.png -------------------------------------------------------------------------------- /js/tabs/demos/img/tab-icon/active@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/demos/img/tab-icon/active@3x.png -------------------------------------------------------------------------------- /js/tabs/demos/img/tab-icon/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/demos/img/tab-icon/default.png -------------------------------------------------------------------------------- /js/tabs/demos/img/tab-icon/default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/demos/img/tab-icon/default@2x.png -------------------------------------------------------------------------------- /js/tabs/demos/img/tab-icon/default@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/demos/img/tab-icon/default@3x.png -------------------------------------------------------------------------------- /js/tabs/info/img/hello-world.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/info/img/hello-world.png -------------------------------------------------------------------------------- /js/tabs/info/img/hello-world@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/info/img/hello-world@2x.png -------------------------------------------------------------------------------- /js/tabs/info/img/hello-world@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/info/img/hello-world@3x.png -------------------------------------------------------------------------------- /js/tabs/info/img/tab-icon/active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/info/img/tab-icon/active.png -------------------------------------------------------------------------------- /js/tabs/info/img/tab-icon/active@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/info/img/tab-icon/active@2x.png -------------------------------------------------------------------------------- /js/tabs/info/img/tab-icon/active@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/info/img/tab-icon/active@3x.png -------------------------------------------------------------------------------- /js/tabs/info/img/tab-icon/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/info/img/tab-icon/default.png -------------------------------------------------------------------------------- /js/tabs/info/img/tab-icon/default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/info/img/tab-icon/default@2x.png -------------------------------------------------------------------------------- /js/tabs/info/img/tab-icon/default@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/info/img/tab-icon/default@3x.png -------------------------------------------------------------------------------- /js/tabs/maps/img/tab-icon/active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/maps/img/tab-icon/active.png -------------------------------------------------------------------------------- /js/tabs/maps/img/tab-icon/active@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/maps/img/tab-icon/active@2x.png -------------------------------------------------------------------------------- /js/tabs/maps/img/tab-icon/active@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/maps/img/tab-icon/active@3x.png -------------------------------------------------------------------------------- /js/tabs/maps/img/tab-icon/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/maps/img/tab-icon/default.png -------------------------------------------------------------------------------- /js/tabs/maps/img/tab-icon/default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/maps/img/tab-icon/default@2x.png -------------------------------------------------------------------------------- /js/tabs/maps/img/tab-icon/default@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/maps/img/tab-icon/default@3x.png -------------------------------------------------------------------------------- /js/tabs/notifications/findSessionByURI.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | * @flow 23 | */ 24 | "use strict"; 25 | 26 | import type { Session } from "../../reducers/sessions"; 27 | 28 | function findSessionByURI(sessions: Array, uri: ?string): ?Session { 29 | if (!uri) { 30 | return null; 31 | } 32 | const slug = uri.replace("f8://", ""); 33 | for (let i = 0; i < sessions.length; i++) { 34 | const session = sessions[i]; 35 | if (session.slug === slug || session.id === slug) { 36 | return session; 37 | } 38 | } 39 | return null; 40 | } 41 | 42 | module.exports = findSessionByURI; 43 | -------------------------------------------------------------------------------- /js/tabs/notifications/img/nux-header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/nux-header.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/nux-header@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/nux-header@2x.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/nux-header@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/nux-header@3x.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/stars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/stars.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/stars@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/stars@2x.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/stars@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/stars@3x.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/timeline/circle-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/timeline/circle-active.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/timeline/circle-active@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/timeline/circle-active@2x.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/timeline/circle-active@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/timeline/circle-active@3x.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/timeline/circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/timeline/circle.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/timeline/circle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/timeline/circle@2x.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/timeline/circle@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/timeline/circle@3x.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/timeline/square-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/timeline/square-active.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/timeline/square-active@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/timeline/square-active@2x.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/timeline/square-active@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/timeline/square-active@3x.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/timeline/square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/timeline/square.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/timeline/square@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/timeline/square@2x.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/timeline/square@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/timeline/square@3x.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/timeline/triangle-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/timeline/triangle-active.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/timeline/triangle-active@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/timeline/triangle-active@2x.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/timeline/triangle-active@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/timeline/triangle-active@3x.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/timeline/triangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/timeline/triangle.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/timeline/triangle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/timeline/triangle@2x.png -------------------------------------------------------------------------------- /js/tabs/notifications/img/timeline/triangle@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/notifications/img/timeline/triangle@3x.png -------------------------------------------------------------------------------- /js/tabs/notifications/unseenNotificationsCount.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | * @flow 23 | */ 24 | "use strict"; 25 | 26 | import allNotifications from "./allNotifications"; 27 | import { createSelector } from "reselect"; 28 | 29 | import type { 30 | Notification, 31 | SeenNotifications 32 | } from "../../reducers/notifications"; 33 | 34 | function unseenNotificationsCount( 35 | notifications: Array, 36 | seen: SeenNotifications 37 | ): number { 38 | return notifications.filter(notification => !seen[notification.id]).length; 39 | } 40 | 41 | module.exports = createSelector( 42 | allNotifications, 43 | store => store.notifications.seen, 44 | unseenNotificationsCount 45 | ); 46 | -------------------------------------------------------------------------------- /js/tabs/schedule/ProfileButton.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | * @flow 23 | */ 24 | "use strict"; 25 | 26 | import React from "react"; 27 | import { Image, StyleSheet } from "react-native"; 28 | 29 | class ProfileButton extends React.Component { 30 | render() { 31 | return ( 32 | 38 | ); 39 | } 40 | } 41 | 42 | const styles = StyleSheet.create({ 43 | profilePic: { 44 | width: 30, 45 | height: 30, 46 | borderRadius: 15 47 | } 48 | }); 49 | 50 | module.exports = ProfileButton; 51 | -------------------------------------------------------------------------------- /js/tabs/schedule/__tests__/formatDuration-test.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | */ 22 | 23 | "use strict"; 24 | 25 | jest.autoMockOff(); 26 | import formatDuration from "../formatDuration"; 27 | 28 | describe("formatDuration", () => { 29 | it("formats duration", () => { 30 | expect(formatDuration(0, 3600000)).toEqual("1 hour"); 31 | expect(formatDuration(0, 7200000)).toEqual("2 hours"); 32 | expect(formatDuration(0, 1800000)).toEqual("30 min"); 33 | expect(formatDuration(0, 3601000)).toEqual("1 hour 1 min"); 34 | expect(formatDuration(0, 1427371200000)).toEqual("Until 5:00am"); 35 | }); 36 | }); 37 | -------------------------------------------------------------------------------- /js/tabs/schedule/__tests__/formatTime-test.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | */ 22 | 23 | "use strict"; 24 | 25 | jest.dontMock("../formatTime"); 26 | import formatTime from "../formatTime"; 27 | 28 | describe("formatTime", () => { 29 | it("formats time", () => { 30 | expect(formatTime(1427371200000)).toEqual("5:00am"); 31 | expect(formatTime(1427373900000)).toEqual("5:45am"); 32 | }); 33 | }); 34 | -------------------------------------------------------------------------------- /js/tabs/schedule/formatTime.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | * @flow 23 | */ 24 | "use strict"; 25 | 26 | import moment from "moment-timezone"; 27 | import { timezone } from "../../env.js"; 28 | 29 | function formatTime(unix: number, hideAMPM: boolean): string { 30 | return moment.tz(unix, timezone).format(hideAMPM ? "h:mm" : "h:mma"); 31 | } 32 | 33 | module.exports = formatTime; 34 | -------------------------------------------------------------------------------- /js/tabs/schedule/img/added-react.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/added-react.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/added-react@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/added-react@2x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/added-react@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/added-react@3x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/added.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/added.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/added@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/added@2x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/added@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/added@3x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/empty-header-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/empty-header-1.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/empty-header-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/empty-header-1@2x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/empty-header-1@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/empty-header-1@3x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/empty-header-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/empty-header-2.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/empty-header-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/empty-header-2@2x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/empty-header-2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/empty-header-2@3x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/filters-x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/filters-x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/filters-x@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/filters-x@2x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/filters-x@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/filters-x@3x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/gantt-bar-color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/gantt-bar-color.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/gantt-bar-color@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/gantt-bar-color@2x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/gantt-bar-color@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/gantt-bar-color@3x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/gantt-bar-end.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/gantt-bar-end.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/gantt-bar-end@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/gantt-bar-end@2x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/gantt-bar-end@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/gantt-bar-end@3x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/gantt-bar-start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/gantt-bar-start.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/gantt-bar-start@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/gantt-bar-start@2x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/gantt-bar-start@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/gantt-bar-start@3x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/no-friends-found.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/no-friends-found.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/no-friends-found@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/no-friends-found@2x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/no-friends-found@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/no-friends-found@3x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/sharing-nux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/sharing-nux.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/sharing-nux@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/sharing-nux@2x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/sharing-nux@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/sharing-nux@3x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/tab-icon/1/active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/tab-icon/1/active.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/tab-icon/1/active@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/tab-icon/1/active@2x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/tab-icon/1/active@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/tab-icon/1/active@3x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/tab-icon/1/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/tab-icon/1/default.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/tab-icon/1/default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/tab-icon/1/default@2x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/tab-icon/1/default@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/tab-icon/1/default@3x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/tab-icon/2/active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/tab-icon/2/active.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/tab-icon/2/active@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/tab-icon/2/active@2x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/tab-icon/2/active@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/tab-icon/2/active@3x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/tab-icon/2/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/tab-icon/2/default.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/tab-icon/2/default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/tab-icon/2/default@2x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/tab-icon/2/default@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/tab-icon/2/default@3x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/tab-icon/my-f8/active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/tab-icon/my-f8/active.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/tab-icon/my-f8/active@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/tab-icon/my-f8/active@2x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/tab-icon/my-f8/active@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/tab-icon/my-f8/active@3x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/tab-icon/my-f8/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/tab-icon/my-f8/default.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/tab-icon/my-f8/default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/tab-icon/my-f8/default@2x.png -------------------------------------------------------------------------------- /js/tabs/schedule/img/tab-icon/my-f8/default@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/schedule/img/tab-icon/my-f8/default@3x.png -------------------------------------------------------------------------------- /js/tabs/videos/img/empty-header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/videos/img/empty-header.png -------------------------------------------------------------------------------- /js/tabs/videos/img/empty-header@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/videos/img/empty-header@2x.png -------------------------------------------------------------------------------- /js/tabs/videos/img/empty-header@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/videos/img/empty-header@3x.png -------------------------------------------------------------------------------- /js/tabs/videos/img/tab-icon/active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/videos/img/tab-icon/active.png -------------------------------------------------------------------------------- /js/tabs/videos/img/tab-icon/active@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/videos/img/tab-icon/active@2x.png -------------------------------------------------------------------------------- /js/tabs/videos/img/tab-icon/active@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/videos/img/tab-icon/active@3x.png -------------------------------------------------------------------------------- /js/tabs/videos/img/tab-icon/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/videos/img/tab-icon/default.png -------------------------------------------------------------------------------- /js/tabs/videos/img/tab-icon/default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/videos/img/tab-icon/default@2x.png -------------------------------------------------------------------------------- /js/tabs/videos/img/tab-icon/default@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/js/tabs/videos/img/tab-icon/default@3x.png -------------------------------------------------------------------------------- /scripts/generate-graphql-schema.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | */ 23 | 24 | import fs from "fs"; 25 | import path from "path"; 26 | import { printSchema } from "graphql/utilities"; 27 | 28 | import schema from "../server/graphql/src/schema"; 29 | 30 | fs.writeFileSync( 31 | path.join( 32 | __dirname, 33 | "../server/graphql/src/schema/__generated__/schema.graphql" 34 | ), 35 | printSchema(schema) 36 | ); 37 | -------------------------------------------------------------------------------- /scripts/optimize-images.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Copyright 2016 Facebook, Inc. 4 | # 5 | # You are hereby granted a non-exclusive, worldwide, royalty-free license to 6 | # use, copy, modify, and distribute this software in source code or binary 7 | # form for use in connection with the web services and APIs provided by 8 | # Facebook. 9 | # 10 | # As with any software that integrates with the Facebook platform, your use 11 | # of this software is subject to the Facebook Developer Principles and 12 | # Policies [http://developers.facebook.com/policy/]. This copyright notice 13 | # shall be included in all copies or substantial portions of the software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 | # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 | # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 | # DEALINGS IN THE SOFTWARE 22 | 23 | find js -name '*.png' -exec pngcrush -ow {} \; 24 | -------------------------------------------------------------------------------- /scripts/run-android-app.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Copyright 2016 Facebook, Inc. 4 | # 5 | # You are hereby granted a non-exclusive, worldwide, royalty-free license to 6 | # use, copy, modify, and distribute this software in source code or binary 7 | # form for use in connection with the web services and APIs provided by 8 | # Facebook. 9 | # 10 | # As with any software that integrates with the Facebook platform, your use 11 | # of this software is subject to the Facebook Developer Principles and 12 | # Policies [http://developers.facebook.com/policy/]. This copyright notice 13 | # shall be included in all copies or substantial portions of the software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 | # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 | # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 | # DEALINGS IN THE SOFTWARE 22 | 23 | adb reverse tcp:1337 tcp:1337 # Parse server 24 | adb reverse tcp:4000 tcp:4000 # GraphQL server 25 | yarn react-native run-android 26 | -------------------------------------------------------------------------------- /server/.gitignore: -------------------------------------------------------------------------------- 1 | npm-debug.log 2 | -------------------------------------------------------------------------------- /server/graphql/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | "es2015" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /server/graphql/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:8.4-alpine 2 | 3 | ADD . . 4 | RUN ["npm", "install"] 5 | RUN ["npm", "run", "build"] 6 | 7 | ENTRYPOINT [ "node", "lib/index.js" ] 8 | -------------------------------------------------------------------------------- /server/graphql/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "2017-f8-graphql-server", 3 | "version": "1.4.0", 4 | "description": "GraphQL API Server for F8 2017", 5 | "scripts": { 6 | "build": "babel src --out-dir lib --copy-files", 7 | "start": "PARSE_URL=http://localhost:1337/parse babel-node src/index.js" 8 | }, 9 | "dependencies": { 10 | "express": "^4.15.4", 11 | "express-graphql": "0.6.11", 12 | "graphql": "^0.11.3", 13 | "graphql-relay": "0.5.2", 14 | "parse": "^1.9.2" 15 | }, 16 | "devDependencies": { 17 | "babel-cli": "^6.24.1", 18 | "babel-preset-es2015": "6.24.1" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /server/graphql/src/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | * @flow 23 | */ 24 | 25 | import process from "process"; 26 | import express from "express"; 27 | import graphqlHTTP from "express-graphql"; 28 | import Parse from "parse/node"; 29 | 30 | import schema from "./schema"; 31 | 32 | Parse.initialize("oss-f8-app-2017"); 33 | Parse.serverURL = process.env.PARSE_URL; 34 | Parse.masterKey = "oss-f8-app-2017-mk"; 35 | Parse.Cloud.useMasterKey(); 36 | 37 | const app = express(); 38 | app.use( 39 | "/graphql", 40 | graphqlHTTP({ 41 | schema, 42 | graphiql: true 43 | }) 44 | ); 45 | app.listen(4000); 46 | -------------------------------------------------------------------------------- /server/graphql/src/schema/__generated__/schema.graphql: -------------------------------------------------------------------------------- 1 | type Demo implements Node { 2 | # The ID of an object 3 | id: ID! 4 | title: String 5 | description: String 6 | booking: String 7 | location: String 8 | links: [DemoLink] 9 | logo: String 10 | logoHeight: Int 11 | logoWidth: Int 12 | devGarage: Boolean 13 | } 14 | 15 | type DemoLink { 16 | title: String 17 | url: String 18 | } 19 | 20 | # An object with an ID 21 | interface Node { 22 | # The id of the object. 23 | id: ID! 24 | } 25 | 26 | type Query { 27 | # Fetches an object given its ID 28 | node( 29 | # The ID of an object 30 | id: ID! 31 | ): Node 32 | demos: [Demo] 33 | } 34 | -------------------------------------------------------------------------------- /server/graphql/src/schema/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | * @flow 23 | */ 24 | 25 | import { GraphQLSchema } from "graphql"; 26 | 27 | import { queryType } from "./query"; 28 | 29 | export default new GraphQLSchema({ 30 | query: queryType 31 | }); 32 | -------------------------------------------------------------------------------- /server/graphql/src/schema/node.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | * 22 | * @flow 23 | */ 24 | 25 | import { fromGlobalId, nodeDefinitions } from "graphql-relay"; 26 | import Parse from "parse/node"; 27 | 28 | import typeRegistry from "./typeRegistry"; 29 | 30 | module.exports = nodeDefinitions( 31 | globalId => { 32 | const { type, id } = fromGlobalId(globalId); 33 | return new Parse.Query(type).get(id); 34 | }, 35 | obj => typeRegistry.lookup(obj.className) 36 | ); 37 | -------------------------------------------------------------------------------- /server/graphql/src/schema/query.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | */ 22 | 23 | import { GraphQLObjectType } from "graphql"; 24 | 25 | import { demosField } from "./demo"; 26 | import { nodeField } from "./node"; 27 | 28 | const queryType = new GraphQLObjectType({ 29 | name: "Query", 30 | fields: () => ({ 31 | node: nodeField, 32 | demos: demosField 33 | }) 34 | }); 35 | 36 | export { queryType }; 37 | -------------------------------------------------------------------------------- /server/graphql/src/schema/typeRegistry.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 Facebook, Inc. 3 | * 4 | * You are hereby granted a non-exclusive, worldwide, royalty-free license to 5 | * use, copy, modify, and distribute this software in source code or binary 6 | * form for use in connection with the web services and APIs provided by 7 | * Facebook. 8 | * 9 | * As with any software that integrates with the Facebook platform, your use 10 | * of this software is subject to the Facebook Developer Principles and 11 | * Policies [http://developers.facebook.com/policy/]. This copyright notice 12 | * shall be included in all copies or substantial portions of the software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 | * DEALINGS IN THE SOFTWARE 21 | */ 22 | 23 | const typeRegistry = new Map(); 24 | 25 | export default { 26 | register(type) { 27 | typeRegistry.set(type.name, type); 28 | }, 29 | lookup(name) { 30 | return typeRegistry.get(name); 31 | } 32 | }; 33 | -------------------------------------------------------------------------------- /server/mongorestore/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mongo:latest 2 | 3 | ADD data data 4 | 5 | ENTRYPOINT [ \ 6 | "mongorestore", \ 7 | "--drop", \ 8 | "--db", "dev", \ 9 | "--host", "mongo", \ 10 | "data" \ 11 | ] 12 | -------------------------------------------------------------------------------- /server/mongorestore/data/Agenda.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/Agenda.bson -------------------------------------------------------------------------------- /server/mongorestore/data/Agenda.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial.Agenda"},{"v":2,"key":{"_created_at":-1},"name":"_created_at_-1","ns":"f8app_initial.Agenda","background":true},{"v":2,"key":{"_id":1,"_created_at":-1},"name":"_id_1__created_at_-1","ns":"f8app_initial.Agenda","background":true},{"v":2,"key":{"_rperm":1,"startTime":1},"name":"_rperm_1_startTime_1","background":true,"ns":"f8app_initial.Agenda"},{"v":2,"key":{"sessionSlug":1},"name":"sessionSlug_1","ns":"f8app_initial.Agenda","background":true}]} -------------------------------------------------------------------------------- /server/mongorestore/data/Attendance.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/Attendance.bson -------------------------------------------------------------------------------- /server/mongorestore/data/Attendance.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial.Attendance"},{"v":2,"key":{"_created_at":-1},"name":"_created_at_-1","background":true,"ns":"f8app_initial.Attendance"}]} -------------------------------------------------------------------------------- /server/mongorestore/data/Demo.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/Demo.bson -------------------------------------------------------------------------------- /server/mongorestore/data/Demo.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial.Demo"}]} -------------------------------------------------------------------------------- /server/mongorestore/data/FAQ.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/FAQ.bson -------------------------------------------------------------------------------- /server/mongorestore/data/FAQ.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial.FAQ"},{"v":2,"key":{"_created_at":-1},"name":"_created_at_-1","ns":"f8app_initial.FAQ","background":true},{"v":2,"key":{"_rperm":1},"name":"_rperm_1","ns":"f8app_initial.FAQ","background":true}]} -------------------------------------------------------------------------------- /server/mongorestore/data/Maps.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/Maps.bson -------------------------------------------------------------------------------- /server/mongorestore/data/Maps.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial.Maps"},{"v":2,"key":{"_created_at":-1},"name":"_created_at_-1","ns":"f8app_initial.Maps","background":true},{"v":2,"key":{"_rperm":1},"name":"_rperm_1","ns":"f8app_initial.Maps","background":true}]} -------------------------------------------------------------------------------- /server/mongorestore/data/MeetupSponsors.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/MeetupSponsors.bson -------------------------------------------------------------------------------- /server/mongorestore/data/MeetupSponsors.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial.MeetupSponsors"},{"v":2,"key":{"_created_at":-1},"name":"_created_at_-1","ns":"f8app_initial.MeetupSponsors","background":true},{"v":2,"key":{"_rperm":1},"name":"_rperm_1","background":true,"ns":"f8app_initial.MeetupSponsors"}]} -------------------------------------------------------------------------------- /server/mongorestore/data/Meetups.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/Meetups.bson -------------------------------------------------------------------------------- /server/mongorestore/data/Meetups.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial.Meetups"},{"v":2,"key":{"_created_at":-1},"name":"_created_at_-1","ns":"f8app_initial.Meetups","background":true},{"v":2,"key":{"_rperm":1},"name":"_rperm_1","background":true,"ns":"f8app_initial.Meetups"}]} -------------------------------------------------------------------------------- /server/mongorestore/data/Notification.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/Notification.bson -------------------------------------------------------------------------------- /server/mongorestore/data/Notification.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial.Notification"},{"v":2,"key":{"_created_at":-1},"name":"_created_at_-1","background":true,"ns":"f8app_initial.Notification"},{"v":2,"key":{"_rperm":1,"_created_at":-1},"name":"_rperm_1__created_at_-1","ns":"f8app_initial.Notification","background":true}]} -------------------------------------------------------------------------------- /server/mongorestore/data/Page.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/Page.bson -------------------------------------------------------------------------------- /server/mongorestore/data/Page.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial.Page"},{"v":2,"key":{"_created_at":-1},"name":"_created_at_-1","ns":"f8app_initial.Page","background":true},{"v":2,"key":{"_rperm":1},"name":"_rperm_1","ns":"f8app_initial.Page","background":true}]} -------------------------------------------------------------------------------- /server/mongorestore/data/PendingNotifications.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/PendingNotifications.bson -------------------------------------------------------------------------------- /server/mongorestore/data/PendingNotifications.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial.PendingNotifications"},{"v":2,"key":{"_created_at":-1},"name":"_created_at_-1","ns":"f8app_initial.PendingNotifications","background":true}]} -------------------------------------------------------------------------------- /server/mongorestore/data/Policy.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/Policy.bson -------------------------------------------------------------------------------- /server/mongorestore/data/Policy.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial.Policy"}]} -------------------------------------------------------------------------------- /server/mongorestore/data/Speakers.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/Speakers.bson -------------------------------------------------------------------------------- /server/mongorestore/data/Speakers.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial.Speakers"},{"v":2,"key":{"_created_at":-1},"name":"_created_at_-1","ns":"f8app_initial.Speakers","background":true},{"v":2,"key":{"_id":1,"_created_at":-1},"name":"_id_1__created_at_-1","background":true,"ns":"f8app_initial.Speakers"},{"v":2,"key":{"_rperm":1},"name":"_rperm_1","ns":"f8app_initial.Speakers","background":true}]} -------------------------------------------------------------------------------- /server/mongorestore/data/Survey.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/Survey.bson -------------------------------------------------------------------------------- /server/mongorestore/data/Survey.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial.Survey"},{"v":2,"key":{"_created_at":-1},"name":"_created_at_-1","ns":"f8app_initial.Survey","background":true}]} -------------------------------------------------------------------------------- /server/mongorestore/data/SurveyQuestions.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/SurveyQuestions.bson -------------------------------------------------------------------------------- /server/mongorestore/data/SurveyQuestions.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial.SurveyQuestions"}]} -------------------------------------------------------------------------------- /server/mongorestore/data/SurveyResult.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/SurveyResult.bson -------------------------------------------------------------------------------- /server/mongorestore/data/SurveyResult.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial.SurveyResult"},{"v":2,"key":{"_created_at":-1},"name":"_created_at_-1","ns":"f8app_initial.SurveyResult","background":true},{"v":2,"key":{"_p_user":1},"name":"_p_user_1","ns":"f8app_initial.SurveyResult","background":true},{"v":2,"key":{"rawAnswers":1,"_p_user":1},"name":"rawAnswers_1__p_user_1","ns":"f8app_initial.SurveyResult","background":true}]} -------------------------------------------------------------------------------- /server/mongorestore/data/UTestAgenda.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/UTestAgenda.bson -------------------------------------------------------------------------------- /server/mongorestore/data/UTestAgenda.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial.UTestAgenda"},{"v":2,"key":{"_created_at":-1},"name":"_created_at_-1","ns":"f8app_initial.UTestAgenda","background":true}]} -------------------------------------------------------------------------------- /server/mongorestore/data/UnmaskedAgenda.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/UnmaskedAgenda.bson -------------------------------------------------------------------------------- /server/mongorestore/data/UnmaskedAgenda.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial.UnmaskedAgenda"},{"v":2,"key":{"_created_at":-1},"name":"_created_at_-1","ns":"f8app_initial.UnmaskedAgenda","background":true}]} -------------------------------------------------------------------------------- /server/mongorestore/data/Video.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/Video.bson -------------------------------------------------------------------------------- /server/mongorestore/data/Video.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial.Video"}]} -------------------------------------------------------------------------------- /server/mongorestore/data/_Audience.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/_Audience.bson -------------------------------------------------------------------------------- /server/mongorestore/data/_Audience.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial._Audience"},{"v":2,"unique":true,"key":{"name":1},"name":"name_1","ns":"f8app_initial._Audience","background":true}]} -------------------------------------------------------------------------------- /server/mongorestore/data/_Cardinality.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/_Cardinality.bson -------------------------------------------------------------------------------- /server/mongorestore/data/_Cardinality.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial._Cardinality"},{"v":2,"unique":true,"key":{"className":1,"column":1},"name":"className_1_column_1","background":true,"ns":"f8app_initial._Cardinality"}]} -------------------------------------------------------------------------------- /server/mongorestore/data/_EventDimension.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/_EventDimension.bson -------------------------------------------------------------------------------- /server/mongorestore/data/_EventDimension.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial._EventDimension"}]} -------------------------------------------------------------------------------- /server/mongorestore/data/_GlobalConfig.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/_GlobalConfig.bson -------------------------------------------------------------------------------- /server/mongorestore/data/_GlobalConfig.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial._GlobalConfig"}]} -------------------------------------------------------------------------------- /server/mongorestore/data/_Installation.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/_Installation.bson -------------------------------------------------------------------------------- /server/mongorestore/data/_Installation.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial._Installation"},{"v":2,"key":{"badge":1,"_created_at":1},"name":"badge_1__created_at_1","ns":"f8app_initial._Installation","background":true},{"v":2,"key":{"deviceType":1},"name":"deviceType_1","background":true,"ns":"f8app_initial._Installation"},{"v":2,"key":{"_p_user":1,"badge":1,"_created_at":1},"name":"_p_user_1_badge_1__created_at_1","ns":"f8app_initial._Installation","background":true},{"v":2,"key":{"_p_user":1,"deviceType":1},"name":"_p_user_1_deviceType_1","ns":"f8app_initial._Installation","background":true},{"v":2,"key":{"installationId":1},"name":"installationId_1","ns":"f8app_initial._Installation","background":true},{"v":2,"key":{"deviceToken":1,"installationId":1},"name":"_deviceToken_by_installationId","background":true,"ns":"f8app_initial._Installation"}]} -------------------------------------------------------------------------------- /server/mongorestore/data/_JobStatus.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/_JobStatus.bson -------------------------------------------------------------------------------- /server/mongorestore/data/_JobStatus.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial._JobStatus"}]} -------------------------------------------------------------------------------- /server/mongorestore/data/_Join:mySchedule:_User.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/_Join:mySchedule:_User.bson -------------------------------------------------------------------------------- /server/mongorestore/data/_Join:mySchedule:_User.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial._Join:mySchedule:_User"},{"v":2,"unique":true,"key":{"owningId":1,"relatedId":-1},"name":"owningId_1_relatedId_-1","ns":"f8app_initial._Join:mySchedule:_User","background":true},{"v":2,"unique":true,"key":{"owningId":1,"relatedId":1},"name":"owningId_1_relatedId_1","background":true,"ns":"f8app_initial._Join:mySchedule:_User"},{"v":2,"key":{"relatedId":1},"name":"relatedId_1","ns":"f8app_initial._Join:mySchedule:_User","background":true}]} -------------------------------------------------------------------------------- /server/mongorestore/data/_PushStatus.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/_PushStatus.bson -------------------------------------------------------------------------------- /server/mongorestore/data/_PushStatus.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial._PushStatus"}]} -------------------------------------------------------------------------------- /server/mongorestore/data/_QueryToolQuery.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/_QueryToolQuery.bson -------------------------------------------------------------------------------- /server/mongorestore/data/_QueryToolQuery.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial._QueryToolQuery"}]} -------------------------------------------------------------------------------- /server/mongorestore/data/_Role.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/_Role.bson -------------------------------------------------------------------------------- /server/mongorestore/data/_Role.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial._Role"},{"v":2,"unique":true,"key":{"name":1},"name":"name_1","ns":"f8app_initial._Role","background":true,"sparse":true}]} -------------------------------------------------------------------------------- /server/mongorestore/data/_SCHEMA.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/_SCHEMA.bson -------------------------------------------------------------------------------- /server/mongorestore/data/_SCHEMA.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial._SCHEMA"}]} -------------------------------------------------------------------------------- /server/mongorestore/data/_Session.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/_Session.bson -------------------------------------------------------------------------------- /server/mongorestore/data/_Session.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial._Session"},{"v":2,"key":{"_session_token":1},"name":"_session_token_1","ns":"f8app_initial._Session","background":true},{"v":2,"key":{"_p_user":1},"name":"_p_user_1","ns":"f8app_initial._Session","background":true}]} -------------------------------------------------------------------------------- /server/mongorestore/data/_User.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/_User.bson -------------------------------------------------------------------------------- /server/mongorestore/data/_User.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial._User"},{"v":2,"unique":true,"key":{"username":1},"name":"username_1","ns":"f8app_initial._User","background":true,"sparse":true},{"v":2,"unique":true,"key":{"email":1},"name":"email_1","sparse":true,"ns":"f8app_initial._User","background":true},{"v":2,"key":{"facebook_id":1,"name":1},"name":"facebook_id_1_name_1","ns":"f8app_initial._User","background":true}]} -------------------------------------------------------------------------------- /server/mongorestore/data/_dummy.bson: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fbsamples/f8app/119f062943c9d7dfa2892a178199435d6854a06f/server/mongorestore/data/_dummy.bson -------------------------------------------------------------------------------- /server/mongorestore/data/_dummy.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial._dummy"}]} -------------------------------------------------------------------------------- /server/mongorestore/data/objectlabs-system.bson: -------------------------------------------------------------------------------- 1 | 3_idMetaDataControllermetaDataEnabled -------------------------------------------------------------------------------- /server/mongorestore/data/objectlabs-system.metadata.json: -------------------------------------------------------------------------------- 1 | {"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"f8app_initial.objectlabs-system"}]} -------------------------------------------------------------------------------- /server/parse-dashboard/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:8.4-alpine 2 | 3 | RUN ["npm", "install", "-g", "parse-dashboard"] 4 | 5 | ADD config.json config.json 6 | 7 | ENTRYPOINT [ \ 8 | "parse-dashboard", \ 9 | "--config", "config.json", \ 10 | "--allowInsecureHTTP" \ 11 | ] 12 | -------------------------------------------------------------------------------- /server/parse-dashboard/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "apps": [ 3 | { 4 | "serverURL": "http://localhost:1337/parse", 5 | "appId": "oss-f8-app-2017", 6 | "masterKey": "oss-f8-app-2017-mk", 7 | "appName": "F8" 8 | } 9 | ], 10 | "users": [ 11 | { 12 | "user": "admin", 13 | "pass": "admin" 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /server/parse-server/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | "es2015" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /server/parse-server/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:8.11-alpine 2 | 3 | RUN ["npm", "install", "-g", "parse-server"] 4 | 5 | ADD . . 6 | RUN [ "npm", "install" ] 7 | RUN [ "npm", "run", "build" ] 8 | 9 | ENTRYPOINT [ "parse-server", "config.json" ] 10 | -------------------------------------------------------------------------------- /server/parse-server/cloud/auth.js: -------------------------------------------------------------------------------- 1 | const tokenTypes = { 2 | PushConsole: 1, 3 | MessengerBot: 2, 4 | SurveyExports: 3 5 | }; 6 | 7 | module.exports = { 8 | type: tokenTypes, 9 | 10 | valid: function(type, value) { 11 | switch (type) { 12 | case tokenTypes.PushConsole: 13 | return value === process.env.PARSE_TOKEN_PUSHCONSOLE; 14 | case tokenTypes.MessengerBot: 15 | return value === process.env.PARSE_TOKEN_MESSENGERBOT; 16 | case tokenTypes.SurveyExports: 17 | return value === process.env.PARSE_TOKEN_SURVEYEXPORTS; 18 | default: 19 | return false; 20 | } 21 | } 22 | }; 23 | -------------------------------------------------------------------------------- /server/parse-server/cloud/functions/index.js: -------------------------------------------------------------------------------- 1 | // fbf8.com website endpoints 2 | import "./agenda"; 3 | 4 | import "./meetups"; 5 | 6 | // app push/notifications/surveys 7 | import "./notifications"; 8 | 9 | import "./surveys"; 10 | import "./surveyexports"; 11 | 12 | // app facebook friends 13 | import "./friends"; 14 | 15 | // fb messenger bot 16 | import "./messengerbot"; 17 | 18 | // app push/survey/attendance tests 19 | import "./tests"; 20 | -------------------------------------------------------------------------------- /server/parse-server/cloud/functions/meetups.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | /* global Parse */ 3 | 4 | const Meetups = Parse.Object.extend("Meetups"); 5 | const Sponsors = Parse.Object.extend("MeetupSponsors"); 6 | 7 | Parse.Cloud.define("meetups", function(request, response) { 8 | const meetupsQuery = new Parse.Query(Meetups); 9 | const sponsorsQuery = new Parse.Query(Sponsors); 10 | 11 | function queryMeetups() { 12 | return new Promise(function(resolve, reject) { 13 | meetupsQuery.find({ 14 | success: function(results) { 15 | resolve(results); 16 | }, 17 | useMasterKey: true 18 | }); 19 | }); 20 | } 21 | 22 | function querySponsors() { 23 | return new Promise(function(resolve, reject) { 24 | sponsorsQuery.find({ 25 | success: function(results) { 26 | resolve(results); 27 | }, 28 | useMasterKey: true 29 | }); 30 | }); 31 | } 32 | 33 | Parse.Promise.when([queryMeetups(), querySponsors()]).then( 34 | function(results) { 35 | response.success(results); 36 | }, 37 | function(error) { 38 | response.error(error); 39 | } 40 | ); 41 | }); 42 | -------------------------------------------------------------------------------- /server/parse-server/cloud/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | /* global Parse */ 3 | 4 | // Cloud code status check 5 | Parse.Cloud.define("cloudcode_status", function(request, response) { 6 | response.success("👌"); 7 | }); 8 | 9 | // Cloud functions 10 | import "./functions"; 11 | 12 | // Parse Jobs 13 | import "./jobs"; 14 | 15 | // Class triggers (beforeSave & afterSave) 16 | import "./triggers"; 17 | -------------------------------------------------------------------------------- /server/parse-server/cloud/jobs/index.js: -------------------------------------------------------------------------------- 1 | // cloud jobs 2 | // require('./installationSync'); 3 | import "./updateVideoSources"; 4 | 5 | import "./unmaskDemos"; 6 | import "./unmaskAgenda"; 7 | -------------------------------------------------------------------------------- /server/parse-server/cloud/jobs/installationSync.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | /* global Parse */ 3 | 4 | Parse.Cloud.job("installationSync", function(request, status) { 5 | // Parse.Cloud.useMasterKey(); 6 | let counter = 0; 7 | 8 | new Parse.Query(Parse.Installation) 9 | .get({ useMasterKey: true }) 10 | .each(function(installation) { 11 | return findUserChannels(installation.get("user")).then(function( 12 | channels 13 | ) { 14 | counter++; 15 | if (counter % 10 === 0) { 16 | status.message(counter + " installations processed."); 17 | } 18 | installation.set("channels", channels); 19 | return installation.save(null, { useMasterKey: true }); 20 | }); 21 | }) 22 | .then( 23 | function() { 24 | status.success("Sync finished successfully"); 25 | }, 26 | function(error) { 27 | console.error(error); 28 | status.error("Error! " + error.message); 29 | } 30 | ); 31 | }); 32 | 33 | function findUserChannels(user) { 34 | if (!user) { 35 | return Parse.Promise.as([]); 36 | } 37 | 38 | return user 39 | .relation("mySchedule") 40 | .query() 41 | .select(["id"]) 42 | .find({ useMasterKey: true }) 43 | .then(function(schedule) { 44 | return schedule.map(function(s) { 45 | return "session_" + s.id; 46 | }); 47 | }); 48 | } 49 | -------------------------------------------------------------------------------- /server/parse-server/cloud/triggers/index.js: -------------------------------------------------------------------------------- 1 | // before & afterSave trigger functions 2 | // require('./pushChannels'); // legacy, works well but very resource intensive 3 | import "./videos"; 4 | -------------------------------------------------------------------------------- /server/parse-server/cloud/triggers/videos.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | /* global Parse */ 3 | 4 | const Video = Parse.Object.extend("Video"); 5 | 6 | Parse.Cloud.afterSave(Video, function(request) { 7 | if (request.object.existed()) { 8 | // skip this if it's an update to an existing object 9 | return; 10 | } 11 | // request up-to-date video source url from Graph API 12 | // see ../jobs/updateVideoSources.js 13 | return Parse.Cloud 14 | .httpRequest({ 15 | method: "POST", 16 | url: process.env.PARSE_SERVER_URL + "/jobs/updateVideoSources", 17 | headers: { 18 | "X-Parse-Application-Id": process.env.PARSE_APP_ID, 19 | "X-Parse-Master-Key": process.env.PARSE_MASTER_KEY 20 | } 21 | }) 22 | .then( 23 | function(value) { 24 | console.log("Video.afterSave success!", value); 25 | }, 26 | function(error) { 27 | console.log("Video.afterSave error!", error); 28 | } 29 | ); 30 | }); 31 | -------------------------------------------------------------------------------- /server/parse-server/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "appId": "oss-f8-app-2017", 3 | "masterKey": "oss-f8-app-2017-mk", 4 | "databaseURI": "mongodb://mongo/dev", 5 | "cloud": "cloud-lib/index.js" 6 | } 7 | -------------------------------------------------------------------------------- /server/parse-server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "2017-f8-parse-server", 3 | "version": "1.4.0", 4 | "description": "Parse API Server for F8 2017", 5 | "scripts": { 6 | "build": "babel cloud --out-dir cloud-lib --copy-files" 7 | }, 8 | "dependencies": { 9 | "lodash": "^4.17.13", 10 | "moment": "^2.19.3" 11 | }, 12 | "devDependencies": { 13 | "babel-cli": "^6.24.1", 14 | "babel-preset-es2015": "6.24.1" 15 | } 16 | } 17 | --------------------------------------------------------------------------------