├── .watchmanconfig
├── src
├── translations
│ ├── ru.json
│ ├── en.json
│ └── index.js
├── components
│ ├── StyledButton.js
│ ├── Images
│ │ ├── checked.png
│ │ ├── checked@2x.png
│ │ └── checked@3x.png
│ ├── BackgroundView.js
│ ├── LoadingOverlay.js
│ ├── index.js
│ ├── TextInput.js
│ ├── StyledText.js
│ ├── CollapsibleView.js
│ ├── GridRow.js
│ ├── TopNavigatorView.js
│ ├── RadioGroup.js
│ ├── Dropdown.js
│ └── PhotoPickerView.js
├── modules
│ ├── chat
│ │ ├── components
│ │ │ ├── CustomAudioView.js
│ │ │ ├── CustomMapView.js
│ │ │ ├── MessageTypes.js
│ │ │ ├── index.js
│ │ │ └── CustomView.js
│ │ ├── data
│ │ │ ├── old_messages.js
│ │ │ └── messages.js
│ │ └── Chat.js
│ ├── AppView.js
│ ├── AppViewContainer.js
│ ├── navigation
│ │ ├── Navigator.js
│ │ ├── ModalNavigator.js
│ │ ├── AuthNavigator.js
│ │ └── MainTabNavigator.js
│ ├── AppState.js
│ ├── profile
│ │ ├── components
│ │ │ ├── SectionTitleItem.js
│ │ │ ├── NumberPickerListItem.js
│ │ │ ├── ItemPickerListItem.js
│ │ │ ├── NumberRangePickerListItem.js
│ │ │ └── ListItem.js
│ │ ├── Profile.js
│ │ └── UploadPhoto.js
│ ├── term
│ │ └── Terms.js
│ ├── auth
│ │ └── Auth.js
│ ├── shared
│ │ └── PhotoModal.js
│ └── lock-code
│ │ └── LockCode.js
├── config
│ ├── index.js
│ ├── unitSystems.js
│ └── api.js
├── helpers
│ ├── encrypt.js
│ ├── calculateConstrainedDimensions.js
│ ├── toast.js
│ ├── calculatePortraitDimension.js
│ ├── index.js
│ ├── alert.js
│ └── validator.js
├── styles
│ ├── fonts.js
│ ├── common.js
│ ├── colors.js
│ └── index.js
├── middlewares
│ ├── index.js
│ ├── requestMiddleware.js
│ └── requestFormUrlEncodeMiddleware.js
├── actions
│ ├── LockCodeActions.js
│ ├── AppActions.js
│ ├── CommentActions.js
│ ├── GalleryActions.js
│ └── PublicUserActions.js
├── reducers
│ ├── LockCodeReducer.js
│ ├── AppReducer.js
│ ├── ChatReducer.js
│ ├── CommentReducer.js
│ └── GalleryReducer.js
├── redux
│ ├── store.js
│ └── reducer.js
└── socket-manager
│ └── SocketActions.js
├── .gitattributes
├── app.json
├── babel.config.js
├── assets
├── images
│ ├── edit.png
│ ├── lock.png
│ ├── play.png
│ ├── plus.png
│ ├── send.png
│ ├── time.png
│ ├── block.png
│ ├── camera.png
│ ├── close.png
│ ├── eyeoff.png
│ ├── eyeon.png
│ ├── locate.png
│ ├── mic_on.png
│ ├── minus.png
│ ├── pause.png
│ ├── record.png
│ ├── splash.jpg
│ ├── splash.png
│ ├── boneoffcb.png
│ ├── boneoncb.png
│ ├── bonestock.jpg
│ ├── checked.png
│ ├── dot_chat.png
│ ├── download.png
│ ├── filteroff.png
│ ├── filteron.png
│ ├── forward.png
│ ├── gallery.png
│ ├── location.png
│ ├── mic_off.png
│ ├── plus_pic.png
│ ├── rating_on.png
│ ├── searchoff.png
│ ├── searchon.png
│ ├── settings.png
│ ├── tab_bone.png
│ ├── tab_chat.png
│ ├── voicecall.png
│ ├── boneprofile.png
│ ├── brokenbone.png
│ ├── chatprofile.png
│ ├── checked@2x.png
│ ├── checked@3x.png
│ ├── locationoff.png
│ ├── locationon.png
│ ├── rating_off.png
│ ├── status_away.png
│ ├── tab_profile.png
│ ├── three_dots.png
│ ├── boneoffcb_gray.png
│ ├── boneprofileon.png
│ ├── bubble_gray.9.png
│ ├── bubble_mine.9.png
│ ├── chat_wallpaper.jpg
│ ├── defaultImage.png
│ ├── forward_white.png
│ ├── report_profile.png
│ ├── role_profile.png
│ ├── status_offline.png
│ ├── status_online.png
│ ├── switch_camera.png
│ ├── video_cam_off.png
│ ├── video_cam_on.png
│ ├── bubble_someone.9.png
│ ├── icons
│ │ ├── arrow-back.png
│ │ ├── arrow-back@2x.png
│ │ └── arrow-back@3x.png
│ ├── rating_small_off.png
│ ├── rating_small_on.png
│ ├── bubble_mine_seen.9.png
│ ├── lookingfors
│ │ ├── 420_off.png
│ │ ├── 420_on.png
│ │ ├── bear_on.png
│ │ ├── drag_on.png
│ │ ├── duo_off.png
│ │ ├── duo_on.png
│ │ ├── pig_off.png
│ │ ├── pig_on.png
│ │ ├── rice_on.png
│ │ ├── snm_off.png
│ │ ├── snm_on.png
│ │ ├── trio_on.png
│ │ ├── xl_off.png
│ │ ├── xl_on.png
│ │ ├── bear_off.png
│ │ ├── drag_off.png
│ │ ├── glory_off.png
│ │ ├── glory_on.png
│ │ ├── muscle_on.png
│ │ ├── quatro_on.png
│ │ ├── rice_off.png
│ │ ├── sauna_off.png
│ │ ├── sauna_on.png
│ │ ├── trio_off.png
│ │ ├── twink_off.png
│ │ ├── twink_on.png
│ │ ├── camaction_on.png
│ │ ├── muscle_off.png
│ │ ├── quatro_off.png
│ │ ├── service_off.png
│ │ ├── service_on.png
│ │ ├── camaction_off.png
│ │ ├── quatroplus_off.png
│ │ ├── quatroplus_on.png
│ │ ├── transformation_on.png
│ │ └── transformation_off.png
│ ├── tab_bone_selected.png
│ ├── tab_chat_selected.png
│ ├── bone_profile_default.jpg
│ ├── bubble_mine_deliverr.9.png
│ └── bubble_someone_black.9.png
└── fonts
│ ├── Lato-Bold.ttf
│ ├── Lato-Light.ttf
│ ├── Lato-Thin.ttf
│ ├── Lato-Italic.ttf
│ ├── Lato-Medium.ttf
│ ├── Lato-Regular.ttf
│ ├── aller_std_bd.ttf
│ ├── aller_std_it.ttf
│ ├── aller_std_lt.ttf
│ ├── aller_std_rg.ttf
│ ├── Lato-BoldItalic.ttf
│ ├── Lato-Semibold.ttf
│ ├── aller_std_bd_it.ttf
│ ├── aller_std_lt_it.ttf
│ ├── Lato-LightItalic.ttf
│ ├── aller_display_std_rg.ttf
│ ├── helvetica_ltstd_bold.otf
│ ├── proxima_nova_alt_bold.otf
│ ├── proxima_nova_alt_light.otf
│ ├── proxima_nova_alt_thin.otf
│ ├── proxima_nova_alt_regular.otf
│ └── proxima_nova_alt_semibold.otf
├── android
├── app
│ ├── src
│ │ └── main
│ │ │ ├── res
│ │ │ ├── values
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ └── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ ├── assets
│ │ │ └── fonts
│ │ │ │ ├── Entypo.ttf
│ │ │ │ ├── Zocial.ttf
│ │ │ │ ├── AntDesign.ttf
│ │ │ │ ├── EvilIcons.ttf
│ │ │ │ ├── Feather.ttf
│ │ │ │ ├── Ionicons.ttf
│ │ │ │ ├── Lato-Bold.ttf
│ │ │ │ ├── Lato-Thin.ttf
│ │ │ │ ├── Octicons.ttf
│ │ │ │ ├── FontAwesome.ttf
│ │ │ │ ├── Foundation.ttf
│ │ │ │ ├── Lato-Italic.ttf
│ │ │ │ ├── Lato-Light.ttf
│ │ │ │ ├── Lato-Medium.ttf
│ │ │ │ ├── Lato-Regular.ttf
│ │ │ │ ├── Lato-Semibold.ttf
│ │ │ │ ├── MaterialIcons.ttf
│ │ │ │ ├── aller_std_bd.ttf
│ │ │ │ ├── aller_std_it.ttf
│ │ │ │ ├── aller_std_lt.ttf
│ │ │ │ ├── aller_std_rg.ttf
│ │ │ │ ├── Lato-BoldItalic.ttf
│ │ │ │ ├── Lato-LightItalic.ttf
│ │ │ │ ├── SimpleLineIcons.ttf
│ │ │ │ ├── aller_std_bd_it.ttf
│ │ │ │ ├── aller_std_lt_it.ttf
│ │ │ │ ├── FontAwesome5_Brands.ttf
│ │ │ │ ├── FontAwesome5_Solid.ttf
│ │ │ │ ├── FontAwesome5_Regular.ttf
│ │ │ │ ├── aller_display_std_rg.ttf
│ │ │ │ ├── helvetica_ltstd_bold.otf
│ │ │ │ ├── proxima_nova_alt_bold.otf
│ │ │ │ ├── proxima_nova_alt_thin.otf
│ │ │ │ ├── MaterialCommunityIcons.ttf
│ │ │ │ ├── proxima_nova_alt_light.otf
│ │ │ │ ├── proxima_nova_alt_regular.otf
│ │ │ │ └── proxima_nova_alt_semibold.otf
│ │ │ ├── java
│ │ │ └── com
│ │ │ │ └── reactnativestarter
│ │ │ │ ├── MainActivity.java
│ │ │ │ └── MainApplication.java
│ │ │ └── AndroidManifest.xml
│ ├── build_defs.bzl
│ ├── proguard-rules.pro
│ ├── google-services.json
│ └── BUCK
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── keystores
│ ├── debug.keystore.properties
│ └── BUCK
├── gradle.properties
├── build.gradle
├── gradlew.bat
└── settings.gradle
├── ios
├── Resources
│ ├── Lato-Bold.ttf
│ ├── Lato-Thin.ttf
│ ├── Lato-Italic.ttf
│ ├── Lato-Light.ttf
│ ├── Lato-Medium.ttf
│ ├── Lato-Regular.ttf
│ ├── Lato-Semibold.ttf
│ ├── aller_std_bd.ttf
│ ├── aller_std_it.ttf
│ ├── aller_std_lt.ttf
│ ├── aller_std_rg.ttf
│ ├── Lato-BoldItalic.ttf
│ ├── Lato-LightItalic.ttf
│ ├── aller_std_bd_it.ttf
│ ├── aller_std_lt_it.ttf
│ ├── aller_display_std_rg.ttf
│ ├── helvetica_ltstd_bold.otf
│ ├── proxima_nova_alt_bold.otf
│ ├── proxima_nova_alt_thin.otf
│ ├── proxima_nova_alt_light.otf
│ ├── proxima_nova_alt_regular.otf
│ └── proxima_nova_alt_semibold.otf
├── ReactNativeStarter
│ ├── Images.xcassets
│ │ ├── Contents.json
│ │ ├── splash.imageset
│ │ │ ├── splash.jpg
│ │ │ └── Contents.json
│ │ └── AppIcon.appiconset
│ │ │ ├── Icon-App-20x20@1x.png
│ │ │ ├── Icon-App-20x20@2x.png
│ │ │ ├── Icon-App-20x20@3x.png
│ │ │ ├── Icon-App-29x29@1x.png
│ │ │ ├── Icon-App-29x29@2x.png
│ │ │ ├── Icon-App-29x29@3x.png
│ │ │ ├── Icon-App-40x40@1x.png
│ │ │ ├── Icon-App-40x40@2x.png
│ │ │ ├── Icon-App-40x40@3x.png
│ │ │ ├── Icon-App-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.png
│ │ │ ├── Icon-App-76x76@1x.png
│ │ │ ├── Icon-App-76x76@2x.png
│ │ │ ├── ItunesArtwork@2x.png
│ │ │ └── Icon-App-83.5x83.5@2x.png
│ ├── Resources
│ │ ├── Lato-Bold.ttf
│ │ ├── Lato-Light.ttf
│ │ ├── Lato-Thin.ttf
│ │ ├── Lato-Italic.ttf
│ │ ├── Lato-Medium.ttf
│ │ ├── Lato-Regular.ttf
│ │ ├── aller_std_bd.ttf
│ │ ├── aller_std_it.ttf
│ │ ├── aller_std_lt.ttf
│ │ ├── aller_std_rg.ttf
│ │ ├── Lato-BoldItalic.ttf
│ │ ├── Lato-Semibold.ttf
│ │ ├── aller_std_bd_it.ttf
│ │ ├── aller_std_lt_it.ttf
│ │ ├── Lato-LightItalic.ttf
│ │ ├── aller_display_std_rg.ttf
│ │ ├── helvetica_ltstd_bold.otf
│ │ ├── proxima_nova_alt_bold.otf
│ │ ├── proxima_nova_alt_light.otf
│ │ ├── proxima_nova_alt_thin.otf
│ │ ├── proxima_nova_alt_regular.otf
│ │ └── proxima_nova_alt_semibold.otf
│ ├── ReactNativeStarter.entitlements
│ ├── AppDelegate.h
│ ├── main.m
│ ├── AppDelegate.m
│ └── Base.lproj
│ │ └── LaunchScreen.xib
├── Pods
│ └── Local Podspecs
│ │ └── RNSha256.podspec.json
├── ReactNativeStarterTests
│ ├── Info.plist
│ └── ReactNativeStarterTests.m
├── ReactNativeStarter-tvOSTests
│ └── Info.plist
└── ReactNativeStarter-tvOS
│ └── Info.plist
├── .buckconfig
├── .prettierrc
├── README.md
├── jest-setup.js
├── .eslintrc
├── index.js
├── App.js
├── .vscode
└── launch.json
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── dangerfile.js
├── .flowconfig
└── plopfile.js
/.watchmanconfig:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/src/translations/ru.json:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/src/components/StyledButton.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/translations/en.json:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | *.pbxproj -text
2 |
--------------------------------------------------------------------------------
/src/modules/chat/components/CustomAudioView.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/modules/chat/components/CustomMapView.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ReactNativeStarter",
3 | "displayName": "Bone"
4 | }
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ["module:metro-react-native-babel-preset"]
3 | }
4 |
--------------------------------------------------------------------------------
/assets/images/edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/edit.png
--------------------------------------------------------------------------------
/assets/images/lock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lock.png
--------------------------------------------------------------------------------
/assets/images/play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/play.png
--------------------------------------------------------------------------------
/assets/images/plus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/plus.png
--------------------------------------------------------------------------------
/assets/images/send.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/send.png
--------------------------------------------------------------------------------
/assets/images/time.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/time.png
--------------------------------------------------------------------------------
/assets/images/block.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/block.png
--------------------------------------------------------------------------------
/assets/images/camera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/camera.png
--------------------------------------------------------------------------------
/assets/images/close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/close.png
--------------------------------------------------------------------------------
/assets/images/eyeoff.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/eyeoff.png
--------------------------------------------------------------------------------
/assets/images/eyeon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/eyeon.png
--------------------------------------------------------------------------------
/assets/images/locate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/locate.png
--------------------------------------------------------------------------------
/assets/images/mic_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/mic_on.png
--------------------------------------------------------------------------------
/assets/images/minus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/minus.png
--------------------------------------------------------------------------------
/assets/images/pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/pause.png
--------------------------------------------------------------------------------
/assets/images/record.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/record.png
--------------------------------------------------------------------------------
/assets/images/splash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/splash.jpg
--------------------------------------------------------------------------------
/assets/images/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Bone
3 |
4 |
--------------------------------------------------------------------------------
/assets/fonts/Lato-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/Lato-Bold.ttf
--------------------------------------------------------------------------------
/assets/fonts/Lato-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/Lato-Light.ttf
--------------------------------------------------------------------------------
/assets/fonts/Lato-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/Lato-Thin.ttf
--------------------------------------------------------------------------------
/assets/images/boneoffcb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/boneoffcb.png
--------------------------------------------------------------------------------
/assets/images/boneoncb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/boneoncb.png
--------------------------------------------------------------------------------
/assets/images/bonestock.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/bonestock.jpg
--------------------------------------------------------------------------------
/assets/images/checked.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/checked.png
--------------------------------------------------------------------------------
/assets/images/dot_chat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/dot_chat.png
--------------------------------------------------------------------------------
/assets/images/download.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/download.png
--------------------------------------------------------------------------------
/assets/images/filteroff.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/filteroff.png
--------------------------------------------------------------------------------
/assets/images/filteron.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/filteron.png
--------------------------------------------------------------------------------
/assets/images/forward.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/forward.png
--------------------------------------------------------------------------------
/assets/images/gallery.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/gallery.png
--------------------------------------------------------------------------------
/assets/images/location.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/location.png
--------------------------------------------------------------------------------
/assets/images/mic_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/mic_off.png
--------------------------------------------------------------------------------
/assets/images/plus_pic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/plus_pic.png
--------------------------------------------------------------------------------
/assets/images/rating_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/rating_on.png
--------------------------------------------------------------------------------
/assets/images/searchoff.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/searchoff.png
--------------------------------------------------------------------------------
/assets/images/searchon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/searchon.png
--------------------------------------------------------------------------------
/assets/images/settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/settings.png
--------------------------------------------------------------------------------
/assets/images/tab_bone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/tab_bone.png
--------------------------------------------------------------------------------
/assets/images/tab_chat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/tab_chat.png
--------------------------------------------------------------------------------
/assets/images/voicecall.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/voicecall.png
--------------------------------------------------------------------------------
/ios/Resources/Lato-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/Lato-Bold.ttf
--------------------------------------------------------------------------------
/ios/Resources/Lato-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/Lato-Thin.ttf
--------------------------------------------------------------------------------
/assets/fonts/Lato-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/Lato-Italic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Lato-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/Lato-Medium.ttf
--------------------------------------------------------------------------------
/assets/fonts/Lato-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/Lato-Regular.ttf
--------------------------------------------------------------------------------
/assets/fonts/aller_std_bd.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/aller_std_bd.ttf
--------------------------------------------------------------------------------
/assets/fonts/aller_std_it.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/aller_std_it.ttf
--------------------------------------------------------------------------------
/assets/fonts/aller_std_lt.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/aller_std_lt.ttf
--------------------------------------------------------------------------------
/assets/fonts/aller_std_rg.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/aller_std_rg.ttf
--------------------------------------------------------------------------------
/assets/images/boneprofile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/boneprofile.png
--------------------------------------------------------------------------------
/assets/images/brokenbone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/brokenbone.png
--------------------------------------------------------------------------------
/assets/images/chatprofile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/chatprofile.png
--------------------------------------------------------------------------------
/assets/images/checked@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/checked@2x.png
--------------------------------------------------------------------------------
/assets/images/checked@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/checked@3x.png
--------------------------------------------------------------------------------
/assets/images/locationoff.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/locationoff.png
--------------------------------------------------------------------------------
/assets/images/locationon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/locationon.png
--------------------------------------------------------------------------------
/assets/images/rating_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/rating_off.png
--------------------------------------------------------------------------------
/assets/images/status_away.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/status_away.png
--------------------------------------------------------------------------------
/assets/images/tab_profile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/tab_profile.png
--------------------------------------------------------------------------------
/assets/images/three_dots.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/three_dots.png
--------------------------------------------------------------------------------
/ios/Resources/Lato-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/Lato-Italic.ttf
--------------------------------------------------------------------------------
/ios/Resources/Lato-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/Lato-Light.ttf
--------------------------------------------------------------------------------
/ios/Resources/Lato-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/Lato-Medium.ttf
--------------------------------------------------------------------------------
/assets/fonts/Lato-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/Lato-BoldItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Lato-Semibold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/Lato-Semibold.ttf
--------------------------------------------------------------------------------
/assets/fonts/aller_std_bd_it.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/aller_std_bd_it.ttf
--------------------------------------------------------------------------------
/assets/fonts/aller_std_lt_it.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/aller_std_lt_it.ttf
--------------------------------------------------------------------------------
/assets/images/boneoffcb_gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/boneoffcb_gray.png
--------------------------------------------------------------------------------
/assets/images/boneprofileon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/boneprofileon.png
--------------------------------------------------------------------------------
/assets/images/bubble_gray.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/bubble_gray.9.png
--------------------------------------------------------------------------------
/assets/images/bubble_mine.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/bubble_mine.9.png
--------------------------------------------------------------------------------
/assets/images/chat_wallpaper.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/chat_wallpaper.jpg
--------------------------------------------------------------------------------
/assets/images/defaultImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/defaultImage.png
--------------------------------------------------------------------------------
/assets/images/forward_white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/forward_white.png
--------------------------------------------------------------------------------
/assets/images/report_profile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/report_profile.png
--------------------------------------------------------------------------------
/assets/images/role_profile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/role_profile.png
--------------------------------------------------------------------------------
/assets/images/status_offline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/status_offline.png
--------------------------------------------------------------------------------
/assets/images/status_online.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/status_online.png
--------------------------------------------------------------------------------
/assets/images/switch_camera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/switch_camera.png
--------------------------------------------------------------------------------
/assets/images/video_cam_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/video_cam_off.png
--------------------------------------------------------------------------------
/assets/images/video_cam_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/video_cam_on.png
--------------------------------------------------------------------------------
/ios/Resources/Lato-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/Lato-Regular.ttf
--------------------------------------------------------------------------------
/ios/Resources/Lato-Semibold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/Lato-Semibold.ttf
--------------------------------------------------------------------------------
/ios/Resources/aller_std_bd.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/aller_std_bd.ttf
--------------------------------------------------------------------------------
/ios/Resources/aller_std_it.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/aller_std_it.ttf
--------------------------------------------------------------------------------
/ios/Resources/aller_std_lt.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/aller_std_lt.ttf
--------------------------------------------------------------------------------
/ios/Resources/aller_std_rg.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/aller_std_rg.ttf
--------------------------------------------------------------------------------
/assets/fonts/Lato-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/Lato-LightItalic.ttf
--------------------------------------------------------------------------------
/assets/images/bubble_someone.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/bubble_someone.9.png
--------------------------------------------------------------------------------
/assets/images/icons/arrow-back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/icons/arrow-back.png
--------------------------------------------------------------------------------
/assets/images/rating_small_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/rating_small_off.png
--------------------------------------------------------------------------------
/assets/images/rating_small_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/rating_small_on.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Images.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/ios/Resources/Lato-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/Lato-BoldItalic.ttf
--------------------------------------------------------------------------------
/ios/Resources/Lato-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/Lato-LightItalic.ttf
--------------------------------------------------------------------------------
/ios/Resources/aller_std_bd_it.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/aller_std_bd_it.ttf
--------------------------------------------------------------------------------
/ios/Resources/aller_std_lt_it.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/aller_std_lt_it.ttf
--------------------------------------------------------------------------------
/src/components/Images/checked.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/src/components/Images/checked.png
--------------------------------------------------------------------------------
/assets/fonts/aller_display_std_rg.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/aller_display_std_rg.ttf
--------------------------------------------------------------------------------
/assets/fonts/helvetica_ltstd_bold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/helvetica_ltstd_bold.otf
--------------------------------------------------------------------------------
/assets/images/bubble_mine_seen.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/bubble_mine_seen.9.png
--------------------------------------------------------------------------------
/assets/images/icons/arrow-back@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/icons/arrow-back@2x.png
--------------------------------------------------------------------------------
/assets/images/icons/arrow-back@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/icons/arrow-back@3x.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/420_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/420_off.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/420_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/420_on.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/bear_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/bear_on.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/drag_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/drag_on.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/duo_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/duo_off.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/duo_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/duo_on.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/pig_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/pig_off.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/pig_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/pig_on.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/rice_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/rice_on.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/snm_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/snm_off.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/snm_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/snm_on.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/trio_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/trio_on.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/xl_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/xl_off.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/xl_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/xl_on.png
--------------------------------------------------------------------------------
/assets/images/tab_bone_selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/tab_bone_selected.png
--------------------------------------------------------------------------------
/assets/images/tab_chat_selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/tab_chat_selected.png
--------------------------------------------------------------------------------
/src/components/Images/checked@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/src/components/Images/checked@2x.png
--------------------------------------------------------------------------------
/src/components/Images/checked@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/src/components/Images/checked@3x.png
--------------------------------------------------------------------------------
/assets/fonts/proxima_nova_alt_bold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/proxima_nova_alt_bold.otf
--------------------------------------------------------------------------------
/assets/fonts/proxima_nova_alt_light.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/proxima_nova_alt_light.otf
--------------------------------------------------------------------------------
/assets/fonts/proxima_nova_alt_thin.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/proxima_nova_alt_thin.otf
--------------------------------------------------------------------------------
/assets/images/bone_profile_default.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/bone_profile_default.jpg
--------------------------------------------------------------------------------
/assets/images/lookingfors/bear_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/bear_off.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/drag_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/drag_off.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/glory_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/glory_off.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/glory_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/glory_on.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/muscle_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/muscle_on.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/quatro_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/quatro_on.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/rice_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/rice_off.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/sauna_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/sauna_off.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/sauna_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/sauna_on.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/trio_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/trio_off.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/twink_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/twink_off.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/twink_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/twink_on.png
--------------------------------------------------------------------------------
/ios/Resources/aller_display_std_rg.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/aller_display_std_rg.ttf
--------------------------------------------------------------------------------
/ios/Resources/helvetica_ltstd_bold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/helvetica_ltstd_bold.otf
--------------------------------------------------------------------------------
/ios/Resources/proxima_nova_alt_bold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/proxima_nova_alt_bold.otf
--------------------------------------------------------------------------------
/ios/Resources/proxima_nova_alt_thin.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/proxima_nova_alt_thin.otf
--------------------------------------------------------------------------------
/.buckconfig:
--------------------------------------------------------------------------------
1 |
2 | [android]
3 | target = Google Inc.:Google APIs:23
4 |
5 | [maven_repositories]
6 | central = https://repo1.maven.org/maven2
7 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/assets/fonts/proxima_nova_alt_regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/proxima_nova_alt_regular.otf
--------------------------------------------------------------------------------
/assets/fonts/proxima_nova_alt_semibold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/fonts/proxima_nova_alt_semibold.otf
--------------------------------------------------------------------------------
/assets/images/bubble_mine_deliverr.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/bubble_mine_deliverr.9.png
--------------------------------------------------------------------------------
/assets/images/bubble_someone_black.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/bubble_someone_black.9.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/camaction_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/camaction_on.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/muscle_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/muscle_off.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/quatro_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/quatro_off.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/service_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/service_off.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/service_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/service_on.png
--------------------------------------------------------------------------------
/ios/Resources/proxima_nova_alt_light.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/proxima_nova_alt_light.otf
--------------------------------------------------------------------------------
/ios/Resources/proxima_nova_alt_regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/proxima_nova_alt_regular.otf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Entypo.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/Entypo.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Zocial.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/Zocial.ttf
--------------------------------------------------------------------------------
/assets/images/lookingfors/camaction_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/camaction_off.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/quatroplus_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/quatroplus_off.png
--------------------------------------------------------------------------------
/assets/images/lookingfors/quatroplus_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/quatroplus_on.png
--------------------------------------------------------------------------------
/ios/Resources/proxima_nova_alt_semibold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/Resources/proxima_nova_alt_semibold.otf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/AntDesign.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/AntDesign.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/EvilIcons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/EvilIcons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Feather.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/Feather.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Ionicons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/Ionicons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Lato-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/Lato-Bold.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Lato-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/Lato-Thin.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Octicons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/Octicons.ttf
--------------------------------------------------------------------------------
/assets/images/lookingfors/transformation_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/transformation_on.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/Lato-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/Lato-Bold.ttf
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/Lato-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/Lato-Light.ttf
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/Lato-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/Lato-Thin.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/FontAwesome.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/FontAwesome.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Foundation.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/Foundation.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Lato-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/Lato-Italic.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Lato-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/Lato-Light.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Lato-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/Lato-Medium.ttf
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/assets/images/lookingfors/transformation_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/assets/images/lookingfors/transformation_off.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/Lato-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/Lato-Italic.ttf
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/Lato-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/Lato-Medium.ttf
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/Lato-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/Lato-Regular.ttf
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/aller_std_bd.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/aller_std_bd.ttf
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/aller_std_it.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/aller_std_it.ttf
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/aller_std_lt.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/aller_std_lt.ttf
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/aller_std_rg.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/aller_std_rg.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Lato-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/Lato-Regular.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Lato-Semibold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/Lato-Semibold.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/MaterialIcons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/MaterialIcons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/aller_std_bd.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/aller_std_bd.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/aller_std_it.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/aller_std_it.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/aller_std_lt.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/aller_std_lt.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/aller_std_rg.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/aller_std_rg.ttf
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/Lato-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/Lato-BoldItalic.ttf
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/Lato-Semibold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/Lato-Semibold.ttf
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/aller_std_bd_it.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/aller_std_bd_it.ttf
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/aller_std_lt_it.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/aller_std_lt_it.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Lato-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/Lato-BoldItalic.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Lato-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/Lato-LightItalic.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/SimpleLineIcons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/SimpleLineIcons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/aller_std_bd_it.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/aller_std_bd_it.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/aller_std_lt_it.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/aller_std_lt_it.ttf
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/Lato-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/Lato-LightItalic.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/FontAwesome5_Brands.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/FontAwesome5_Brands.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/aller_display_std_rg.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/aller_display_std_rg.ttf
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/helvetica_ltstd_bold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/helvetica_ltstd_bold.otf
--------------------------------------------------------------------------------
/src/config/index.js:
--------------------------------------------------------------------------------
1 | import api from './api'
2 | import terms from './terms'
3 | import unitSystems from './unitSystems'
4 |
5 | export {
6 | api,
7 | terms,
8 | unitSystems
9 | }
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/FontAwesome5_Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/FontAwesome5_Regular.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/aller_display_std_rg.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/aller_display_std_rg.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/helvetica_ltstd_bold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/helvetica_ltstd_bold.otf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/proxima_nova_alt_bold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/proxima_nova_alt_bold.otf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/proxima_nova_alt_thin.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/proxima_nova_alt_thin.otf
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/proxima_nova_alt_bold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/proxima_nova_alt_bold.otf
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/proxima_nova_alt_light.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/proxima_nova_alt_light.otf
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/proxima_nova_alt_thin.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/proxima_nova_alt_thin.otf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/proxima_nova_alt_light.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/proxima_nova_alt_light.otf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/proxima_nova_alt_regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/proxima_nova_alt_regular.otf
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/proxima_nova_alt_regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/proxima_nova_alt_regular.otf
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Resources/proxima_nova_alt_semibold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Resources/proxima_nova_alt_semibold.otf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/proxima_nova_alt_semibold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/android/app/src/main/assets/fonts/proxima_nova_alt_semibold.otf
--------------------------------------------------------------------------------
/src/helpers/encrypt.js:
--------------------------------------------------------------------------------
1 | import { sha256 } from 'react-native-sha256';
2 |
3 | export function sha256Hash(message, cb) {
4 | sha256(message).then( hash => {
5 | cb(hash)
6 | })
7 | }
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Images.xcassets/splash.imageset/splash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Images.xcassets/splash.imageset/splash.jpg
--------------------------------------------------------------------------------
/android/keystores/BUCK:
--------------------------------------------------------------------------------
1 | keystore(
2 | name = "debug",
3 | properties = "debug.keystore.properties",
4 | store = "debug.keystore",
5 | visibility = [
6 | "PUBLIC",
7 | ],
8 | )
9 |
--------------------------------------------------------------------------------
/src/modules/chat/components/MessageTypes.js:
--------------------------------------------------------------------------------
1 | export const MESSAGE_TYPE_TEXT = 0;
2 | export const MESSAGE_TYPE_IMAGE = 1;
3 | export const MESSAGE_TYPE_LOCATION = 2;
4 | export const MESSAGE_TYPE_VOICE = 2;
--------------------------------------------------------------------------------
/src/config/unitSystems.js:
--------------------------------------------------------------------------------
1 |
2 | export default [
3 | {
4 | id: 1,
5 | name: 'Metric'
6 | },
7 | {
8 | id:2,
9 | name: 'Imperial'
10 | }
11 | ]
12 |
13 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "trailingComma": "all",
3 | "semi": true,
4 | "singleQuote": true,
5 | "bracketSpacing": true,
6 | "jsxBracketSameLine": false,
7 | "tabWidth": 2,
8 | "parser": "flow"
9 | }
10 |
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png
--------------------------------------------------------------------------------
/src/styles/fonts.js:
--------------------------------------------------------------------------------
1 | // @flow
2 | export default {
3 | primaryLight: 'Proxima Nova Alt',
4 | primaryRegular: 'Proxima Nova Alt',
5 | primaryBold: 'Proxima Nova Alt',
6 | primarySemiBold: 'Proxima Nova Alt',
7 | };
8 |
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dingdev88/react_native_dating_app/HEAD/ios/ReactNativeStarter/Images.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/src/middlewares/index.js:
--------------------------------------------------------------------------------
1 | import request from './requestMiddleware';
2 | import requestFormUrlEncode from './requestFormUrlEncodeMiddleware';
3 | import thunk from 'redux-thunk';
4 |
5 | export default [ request, requestFormUrlEncode, thunk ];
--------------------------------------------------------------------------------
/src/modules/AppView.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import Navigator from './navigation/Navigator';
4 |
5 | export default function AppView() {
6 | return {}} uriPrefix="/app" />;
7 | }
8 |
--------------------------------------------------------------------------------
/src/config/api.js:
--------------------------------------------------------------------------------
1 |
2 | export default {
3 | baseURL: 'http://34.219.223.44:2368',
4 | base: 'http://34.219.223.44',
5 | twilioURL: 'http://34.219.223.44:2368/api/twilio/token',
6 | socketURL: 'http://34.219.223.44:2368/socket'
7 |
8 | }
9 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | zipStoreBase=GRADLE_USER_HOME
4 | zipStorePath=wrapper/dists
5 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip
6 |
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/ReactNativeStarter.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | aps-environment
6 | development
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/styles/common.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet, StatusBar, Platform } from 'react-native';
2 |
3 | import colors from './colors';
4 |
5 | export default StyleSheet.create({
6 | safeArea: {
7 | flex: 1,
8 | backgroundColor: colors.white,
9 | paddingTop: Platform.select({ ios: 0, android: StatusBar.currentHeight }),
10 | },
11 | });
12 |
--------------------------------------------------------------------------------
/src/helpers/calculateConstrainedDimensions.js:
--------------------------------------------------------------------------------
1 | export default function calculateConstrainedDimensions(sourceWidthHeight, maxWidthHeight) {
2 | var ratio = Math.min(maxWidthHeight.width / sourceWidthHeight.width, maxWidthHeight.height / sourceWidthHeight.height);
3 |
4 | return { width: sourceWidthHeight.width*ratio, height: sourceWidthHeight.height*ratio };
5 | }
--------------------------------------------------------------------------------
/src/actions/LockCodeActions.js:
--------------------------------------------------------------------------------
1 | import { api } from '../config';
2 | import * as ACTION_TYPES from './ActionTypes';
3 |
4 | export function enableLock(lockCode) {
5 |
6 | return {
7 | type: ACTION_TYPES.ENABLE_LOCK,
8 | lockCode
9 | }
10 | }
11 | export function disableLock() {
12 | return {
13 | type: ACTION_TYPES.DISABLE_LOCK
14 | }
15 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Dating App on React Native
2 | Function
3 |
4 | User search by location, filters
5 | Upload public/private profiles
6 | Invite, Accept/Reject invitation
7 | Group/Private chat with texts, location, image, video, calling
8 | User report
9 |
10 |
--------------------------------------------------------------------------------
/src/modules/chat/components/index.js:
--------------------------------------------------------------------------------
1 | import CustomActions from './CustomActions';
2 | import CustomView from './CustomView';
3 | import ChatRoomList from './ChatRoomList';
4 | import ComposerContainer from './ComposerContainer';
5 | import MessagesHolder from './MessagesHolder';
6 | export {
7 | CustomActions,
8 | CustomView,
9 | ChatRoomList,
10 | ComposerContainer,
11 | MessagesHolder
12 | }
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/AppDelegate.h:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | #import
9 |
10 | @interface AppDelegate : UIResponder
11 |
12 | @property (nonatomic, strong) UIWindow *window;
13 |
14 | @end
15 |
--------------------------------------------------------------------------------
/src/helpers/toast.js:
--------------------------------------------------------------------------------
1 | import Toast from 'react-native-root-toast';
2 | export function showToast(message, time){
3 |
4 | // Add a Toast on screen.
5 | let toast = Toast.show(message, {
6 | duration: time== 'long' ? Toast.durations.LONG : Toast.durations.SHORT,
7 | position: Toast.positions.BOTTOM,
8 | shadow: true,
9 | animation: true,
10 | hideOnPress: true,
11 | delay: 0,
12 | });
13 | }
14 |
--------------------------------------------------------------------------------
/src/actions/AppActions.js:
--------------------------------------------------------------------------------
1 | import { api } from '../config';
2 | import * as ACTION_TYPES from './ActionTypes';
3 | import { AsyncStorage } from 'react-native';
4 | import RNFetchBlob from 'rn-fetch-blob';
5 |
6 | export function getModifiables(userId) {
7 |
8 | return {
9 | type: ACTION_TYPES.GET_MODIFIABLES,
10 | request: {
11 | url: `${api.baseURL}/api/user/modifiables/${userId}`,
12 | },
13 | }
14 | }
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Images.xcassets/splash.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "splash.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/jest-setup.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-undef,import/no-extraneous-dependencies */
2 | import { NativeModules } from 'react-native';
3 | import Enzyme from 'enzyme';
4 | import Adapter from 'enzyme-adapter-react-16';
5 |
6 | Enzyme.configure({ adapter: new Adapter() });
7 |
8 | NativeModules.StatusBarManager = { getHeight: jest.fn() };
9 |
10 | jest.mock('react-native-languages', () => ({
11 | RNLanguages: {
12 | language: 'en',
13 | languages: ['en']
14 | }
15 | }));
16 |
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/main.m:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | #import
9 |
10 | #import "AppDelegate.h"
11 |
12 | int main(int argc, char * argv[]) {
13 | @autoreleasepool {
14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/translations/index.js:
--------------------------------------------------------------------------------
1 | import * as RNLocalize from 'react-native-localize';
2 | import i18n from 'i18n-js';
3 |
4 | import en from './en.json';
5 | import ru from './ru.json';
6 |
7 | const translations = { en, ru };
8 |
9 | const { languageTag } = RNLocalize.findBestAvailableLanguage(
10 | Object.keys(translations),
11 | ) || { languageTag: 'en' };
12 |
13 | i18n.locale = languageTag;
14 | i18n.fallbacks = true;
15 | i18n.translations = translations;
16 |
17 | export default i18n;
18 |
--------------------------------------------------------------------------------
/android/app/src/main/java/com/reactnativestarter/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.reactnativestarter;
2 |
3 | import com.facebook.react.ReactActivity;
4 |
5 | public class MainActivity extends ReactActivity {
6 |
7 | /**
8 | * Returns the name of the main component registered from JavaScript.
9 | * This is used to schedule rendering of the component.
10 | */
11 | @Override
12 | protected String getMainComponentName() {
13 | return "ReactNativeStarter";
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/helpers/calculatePortraitDimension.js:
--------------------------------------------------------------------------------
1 | import {
2 | Dimensions
3 | } from 'react-native';
4 | export default function calculatePortraitDimension() {
5 | var {
6 | width: deviceWidth,
7 | height: deviceHeight
8 | } = Dimensions.get('window');
9 |
10 | var portraitWidth = deviceWidth < deviceHeight ? deviceWidth : deviceHeight;
11 | var portraitHeight = deviceWidth < deviceHeight ? deviceHeight: deviceWidth;
12 | return { width: portraitWidth, height: portraitHeight};
13 |
14 | }
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["airbnb", "prettier"],
3 | "plugins": ["react", "jsx-a11y", "import"],
4 | "parser": "babel-eslint",
5 | "rules": {
6 | "react/jsx-filename-extension": "off",
7 | "react/destructuring-assignment": "off",
8 | "no-use-before-define": "off",
9 | "react/prop-types": "off",
10 | "no-case-declarations": "off",
11 | "global-require": "off",
12 | "no-underscore-dangle": "off",
13 | "react/jsx-one-expression-per-line": "off",
14 | "react/require-default-props": "off"
15 | }
16 | }
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @format
3 | * @lint-ignore-every XPLATJSCOPYRIGHT1
4 | */
5 |
6 | import {AppRegistry} from 'react-native';
7 | import App from './App';
8 | import {name as appName} from './app.json';
9 | import {setCustomText, setCustomTextInput} from 'react-native-global-props';
10 |
11 | const customTextProps = {
12 | style: {
13 | fontFamily: 'Proxima Nova Alt'
14 | }
15 | };
16 | setCustomTextInput(customTextProps)
17 | setCustomText(customTextProps);
18 |
19 | AppRegistry.registerComponent(appName, () => App);
20 |
--------------------------------------------------------------------------------
/src/reducers/LockCodeReducer.js:
--------------------------------------------------------------------------------
1 | import * as ACTION_TYPES from '../actions/ActionTypes';
2 |
3 | const INITIAL_STATE = {
4 | locked: false,
5 | lockCode: ''
6 | };
7 |
8 | export default (state = INITIAL_STATE, action) => {
9 | switch (action.type) {
10 | case ACTION_TYPES.ENABLE_LOCK:
11 | return {lockCode: action.lockCode, locked: true}
12 | case ACTION_TYPES.DISABLE_LOCK:
13 | return {lockCode: '', locked: false}
14 | default:
15 | return state;
16 | }
17 | };
18 |
--------------------------------------------------------------------------------
/src/modules/AppViewContainer.js:
--------------------------------------------------------------------------------
1 | import { compose, lifecycle } from 'recompose';
2 | import { Platform, UIManager, StatusBar } from 'react-native';
3 |
4 | import AppView from './AppView';
5 |
6 | export default compose(
7 | lifecycle({
8 | componentWillMount() {
9 | StatusBar.setBarStyle('light-content');
10 | if (Platform.OS === 'android') {
11 | // eslint-disable-next-line no-unused-expressions
12 | UIManager.setLayoutAnimationEnabledExperimental &&
13 | UIManager.setLayoutAnimationEnabledExperimental(true);
14 | }
15 | },
16 | }),
17 | )(AppView);
18 |
--------------------------------------------------------------------------------
/src/modules/navigation/Navigator.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { connect } from 'react-redux';
3 |
4 | import AuthNavigator from './AuthNavigator';
5 | import ModalNavigator from './ModalNavigator';
6 |
7 | class NavigatorView extends React.Component {
8 |
9 | render () {
10 | const { auth } = this.props;
11 | if(auth.user && auth.token)
12 | return
13 | else
14 | return
15 | }
16 | }
17 |
18 | const mapStateToProps = (state) => ({ app: state.app, auth: state.auth });
19 |
20 | export default connect(mapStateToProps)(NavigatorView);
--------------------------------------------------------------------------------
/ios/Pods/Local Podspecs/RNSha256.podspec.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "RNSha256",
3 | "version": "1.3.6",
4 | "summary": "Native sha256 react-native",
5 | "authors": "Hagen Huebel (hhuebel@itinance.com)",
6 | "homepage": "https://github.com/itinance/react-native-sha256",
7 | "license": "MIT",
8 | "platforms": {
9 | "ios": "8.0"
10 | },
11 | "source": {
12 | "git": "https://github.com/itinance/react-native-sha256.git",
13 | "tag": "1.3.6"
14 | },
15 | "source_files": "ios/**/*.{h,m,swift}",
16 | "preserve_paths": "**/*.js",
17 | "dependencies": {
18 | "React": [
19 |
20 | ]
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/helpers/index.js:
--------------------------------------------------------------------------------
1 |
2 | import calculateConstrainedDimensions from './calculateConstrainedDimensions';
3 | import calculatePortraitDimension from './calculatePortraitDimension';
4 | import { showAlert, showAlertWithCallback, showAlertWithQuestionCallback } from './alert';
5 | import { emailValidate, passwordValidate } from './validator';
6 | import { showToast } from './toast';
7 | import { sha256Hash } from './encrypt';
8 |
9 | export {
10 | calculatePortraitDimension,
11 | calculateConstrainedDimensions,
12 | showAlert,
13 | showAlertWithCallback,
14 | emailValidate,
15 | passwordValidate,
16 | sha256Hash,
17 | showToast,
18 | showAlertWithQuestionCallback
19 | }
--------------------------------------------------------------------------------
/android/app/build_defs.bzl:
--------------------------------------------------------------------------------
1 | """Helper definitions to glob .aar and .jar targets"""
2 |
3 | def create_aar_targets(aarfiles):
4 | for aarfile in aarfiles:
5 | name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")]
6 | lib_deps.append(":" + name)
7 | android_prebuilt_aar(
8 | name = name,
9 | aar = aarfile,
10 | )
11 |
12 | def create_jar_targets(jarfiles):
13 | for jarfile in jarfiles:
14 | name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")]
15 | lib_deps.append(":" + name)
16 | prebuilt_jar(
17 | name = name,
18 | binary_jar = jarfile,
19 | )
20 |
--------------------------------------------------------------------------------
/android/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/src/modules/AppState.js:
--------------------------------------------------------------------------------
1 | // @flow
2 | type AppStateType = {
3 | isFirstOpen: boolean,
4 | };
5 |
6 | type ActionType = {
7 | type: string,
8 | payload?: any,
9 | };
10 |
11 | export const initialState: AppStateType = {
12 | isFirstOpen: true,
13 | };
14 |
15 | export const SET_FIRST_OPEN = 'AppState/SET_FIRST_OPEN';
16 |
17 | export function setAppOpened(): ActionType {
18 | return {
19 | type: SET_FIRST_OPEN,
20 | };
21 | }
22 |
23 | export default function AppStateReducer(
24 | state: AppStateType = initialState,
25 | action: ActionType,
26 | ): AppStateType {
27 | switch (action.type) {
28 | case SET_FIRST_OPEN:
29 | return {
30 | ...state,
31 | isFirstOpen: false,
32 | };
33 | default:
34 | return state;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/helpers/alert.js:
--------------------------------------------------------------------------------
1 | import {Alert} from 'react-native';
2 | export function showAlert(title, message){
3 | setTimeout(()=> {
4 | Alert.alert(title, message);
5 | }, 200)
6 | }
7 |
8 | export function showAlertWithCallback(title, message, cb) {
9 | setTimeout(()=> {
10 | Alert.alert(title, message, [{text: 'OK', onPress:cb}]);
11 | }, 200)
12 | }
13 | export function showAlertWithQuestionCallback(title, message, cb) {
14 | setTimeout(()=> {
15 | Alert.alert(title, message, [{text: 'YES', onPress:cb},{text: 'NO'}]);
16 | }, 200)
17 | }
18 |
19 | export function confirmAlertWithCallback(title, message, cb) {
20 | setTimeout(()=> {
21 | Alert.alert(title, message, [{text: 'OK', onPress:cb}, {text: 'Cancel', onPress: () => false, style: 'cancel'}]);
22 | }, 200)
23 | }
--------------------------------------------------------------------------------
/src/reducers/AppReducer.js:
--------------------------------------------------------------------------------
1 | import * as ACTION_TYPES from '../actions/ActionTypes';
2 |
3 | const INITIAL_STATE = {
4 | isLoading: false,
5 | success: false,
6 | error: null,
7 | modifiables: null
8 | };
9 |
10 | export default (state = INITIAL_STATE, action) => {
11 | switch (action.type) {
12 | case ACTION_TYPES.GET_MODIFIABLES:
13 | return { ...state, isLoading: true, success: false, error: null };
14 | case ACTION_TYPES.GET_MODIFIABLES_SUCCESS:
15 | return { ...state, isLoading: false, success: true, error: null, modifiables: action.data.data.modifiables };
16 | case ACTION_TYPES.GET_MODIFIABLES_FAILURE:
17 | return { ...state, isLoading: false, error: 'An error occured', success: false };
18 |
19 | default:
20 | return state;
21 | }
22 | };
23 |
--------------------------------------------------------------------------------
/ios/ReactNativeStarterTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
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 |
--------------------------------------------------------------------------------
/src/helpers/validator.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | var tester = /^[-!#$%&'*+\/0-9=?A-Z^_a-z{|}~](\.?[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\.?[a-zA-Z0-9])*\.[a-zA-Z](-?[a-zA-Z0-9])+$/;
4 | exports.emailValidate = function(email)
5 | {
6 | if (!email)
7 | return false;
8 |
9 | if(email.length>254)
10 | return false;
11 |
12 | var valid = tester.test(email);
13 | if(!valid)
14 | return false;
15 |
16 | // Further checking of some things regex can't handle
17 | var parts = email.split("@");
18 | if(parts[0].length>64)
19 | return false;
20 |
21 | var domainParts = parts[1].split(".");
22 | if(domainParts.some(function(part) { return part.length>63; }))
23 | return false;
24 |
25 | return true;
26 | }
27 |
28 | exports.passwordValidate = function(password)
29 | {
30 | if (password.length < 6)
31 | return false;
32 | return true;
33 | }
--------------------------------------------------------------------------------
/src/reducers/ChatReducer.js:
--------------------------------------------------------------------------------
1 | import * as ACTION_TYPES from '../actions/ActionTypes';
2 |
3 | const INITIAL_STATE = {
4 | isLoading: false,
5 | success: false,
6 | error: null,
7 | chatrooms: []
8 | };
9 |
10 | export default (state = INITIAL_STATE, action) => {
11 | switch (action.type) {
12 | case ACTION_TYPES.GET_CHATROOM_LIST:
13 | return { ...state, isLoading: true, success: false, error: null, currentAction: action.type };
14 | case ACTION_TYPES.GET_CHATROOM_LIST_SUCCESS:
15 | return { ...state, isLoading: false, success: true, error: null, chatrooms: action.data.data.chatroom, currentAction: action.type };
16 | case ACTION_TYPES.GET_CHATROOM_LIST_FAILURE:
17 | return { ...state, isLoading: false, error: 'An error occured', success: false, currentAction: action.type };
18 | default:
19 | return state;
20 | }
21 | };
22 |
--------------------------------------------------------------------------------
/src/styles/colors.js:
--------------------------------------------------------------------------------
1 | const blueVersion = {
2 | primary: '#f7f7f7',
3 | primaryLight: '#f7f7f7',
4 | primaryGradientStart: '#f7f7f7',
5 | primaryGradientEnd: '#f7f7f7',
6 | secondaryGradientStart: '#97211e',
7 | secondaryGradientEnd: '#97211e',
8 | profileGradientStart: '#54CBF6',
9 | profileGradientEnd: '#49D2D0',
10 | secondary: '#97211e',
11 | grey: '#acacac',
12 | gray: '#5f5f5f',
13 | lightGray2: '#c1c0c1',
14 | darkGray: '#1f1f21',
15 | lightGray: '#9b9b9b',
16 | lightGray3: '#cbcacb',
17 | white: '#f7f7f7',
18 | transparentWhite: 'rgba(255,255,255, 0.6)',
19 | blue: '#5A81F7',
20 | bluish: '#F1F1F7',
21 | black: '#171716',
22 | green: '#6DD0A3',
23 | yellow: '#ffc247',
24 | redLight: '#97211e',
25 | transparentBlack: 'rgba(0,0,0, 0.6)',
26 | red: '#831818',
27 | darkBackground: '#272727'
28 | };
29 |
30 | export default blueVersion;
31 |
--------------------------------------------------------------------------------
/ios/ReactNativeStarter-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 |
--------------------------------------------------------------------------------
/src/modules/chat/data/old_messages.js:
--------------------------------------------------------------------------------
1 | module.exports = [
2 | {
3 | _id: Math.round(Math.random() * 1000000),
4 | text: "Yeah, let's do this!",
5 | createdAt: new Date(Date.UTC(2016, 7, 30, 17, 19, 0)),
6 | user: {
7 | _id: 2,
8 | name: 'User',
9 | },
10 | },
11 | {
12 | _id: Math.round(Math.random() * 1000000),
13 | text:
14 | 'I was thinking about having lunch with you tonight. What do you think?',
15 | createdAt: new Date(Date.UTC(2016, 7, 30, 17, 21, 0)),
16 | user: {
17 | _id: 1,
18 | name: 'Developer',
19 | },
20 | },
21 | {
22 | _id: Math.round(Math.random() * 1000000),
23 | text: 'How about 8pm at Starbucks?',
24 | createdAt: new Date(Date.UTC(2016, 7, 30, 17, 20, 0)),
25 | user: {
26 | _id: 1,
27 | name: 'Developer',
28 | },
29 | },
30 | ];
31 |
--------------------------------------------------------------------------------
/src/redux/store.js:
--------------------------------------------------------------------------------
1 | import { applyMiddleware, createStore, compose } from 'redux';
2 | import { persistStore } from 'redux-persist';
3 |
4 | import middlewares from '../middlewares';
5 | import { createLogger } from 'redux-logger';
6 | import reducer from './reducer';
7 |
8 | const enhancers = [
9 | applyMiddleware(
10 | ...middlewares,
11 | createLogger({
12 | collapsed: true,
13 | // eslint-disable-next-line no-undef
14 | predicate: () => __DEV__,
15 | }),
16 | ),
17 | ];
18 |
19 | /* eslint-disable no-undef */
20 | const composeEnhancers =
21 | (__DEV__ &&
22 | typeof window !== 'undefined' &&
23 | window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) ||
24 | compose;
25 | /* eslint-enable no-undef */
26 |
27 | const enhancer = composeEnhancers(...enhancers);
28 |
29 | export const store = createStore(reducer, {}, enhancer);
30 | export const persistor = persistStore(store);
31 |
--------------------------------------------------------------------------------
/src/components/BackgroundView.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import { View, StyleSheet, ImageBackground } from 'react-native';
3 | import { connect } from 'react-redux';
4 | import ImageView from './ImageView';
5 |
6 | class BackgroundView extends Component {
7 | render = () => {
8 | return (
9 |
15 |
16 | );
17 | };
18 | }
19 |
20 | const styles = StyleSheet.create({
21 | background: {
22 | position: 'absolute',
23 | left: 0,
24 | right: 0,
25 | top: 0,
26 | bottom: 0,
27 | },
28 | });
29 |
30 | const mapStateToProps = (state) => {
31 | const { app } = state;
32 |
33 | return { app };
34 | };
35 |
36 | export default connect(mapStateToProps)(BackgroundView);
37 |
--------------------------------------------------------------------------------
/src/modules/navigation/ModalNavigator.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Image, TouchableOpacity,View } from 'react-native';
3 | import { createAppContainer, createStackNavigator } from 'react-navigation';
4 |
5 | import MainNavigator from './MainNavigator';
6 | import PhotoModal from '../shared/PhotoModal';
7 |
8 | const modalNavigator = createStackNavigator(
9 | {
10 | Main: {
11 | screen: MainNavigator,
12 | navigationOptions: {
13 | header: null,
14 | },
15 | },
16 | PhotoModal:{
17 | screen: PhotoModal,
18 | navigationOptions: {
19 | header: null,
20 | },
21 | }
22 |
23 | },
24 | {
25 | mode: 'modal',
26 | transparentCard: true,
27 |
28 | transitionConfig : () => ({
29 | containerStyle: {
30 | backgroundColor: 'transparent',
31 | }
32 | }),
33 | },
34 | );
35 |
36 | export default createAppContainer(modalNavigator);
37 |
--------------------------------------------------------------------------------
/src/components/LoadingOverlay.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import { View, StyleSheet, ImageBackground, ActivityIndicator } from 'react-native';
3 | import { connect } from 'react-redux';
4 |
5 | class LoadingOverlay extends Component {
6 |
7 | render = () => {
8 | const { visible } = this.props;
9 | if(!visible)
10 | return null;
11 | return (
12 |
13 |
14 |
15 |
16 | );
17 | };
18 | }
19 |
20 | const styles = StyleSheet.create({
21 | background: {
22 | position: 'absolute',
23 | left: 0,
24 | right: 0,
25 | top: 0,
26 | bottom: 0,
27 | zIndex: 1,
28 | justifyContent: 'center',
29 | alignItems:'center'
30 | },
31 | });
32 |
33 | const mapStateToProps = (state) => {
34 | const { app } = state;
35 |
36 | return { app };
37 | };
38 |
39 | export default LoadingOverlay;
40 |
--------------------------------------------------------------------------------
/App.js:
--------------------------------------------------------------------------------
1 | import { Provider } from 'react-redux';
2 | import React from 'react';
3 | import { View, ActivityIndicator, StyleSheet } from 'react-native';
4 | import { PersistGate } from 'redux-persist/integration/react';
5 | import { colors } from './src/styles';
6 |
7 | import { store, persistor } from './src/redux/store';
8 |
9 | import AppView from './src/modules/AppViewContainer';
10 |
11 | export default function App() {
12 | return (
13 |
14 |
17 |
18 |
19 | }
20 | persistor={persistor}
21 | >
22 |
23 |
24 |
25 | );
26 | }
27 |
28 | const styles = StyleSheet.create({
29 | container: {
30 | flex: 1,
31 | justifyContent: 'center',
32 | alignItems: 'center',
33 | backgroundColor: 'white',
34 | },
35 | });
36 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "name": "Debug Android",
9 | "program": "${workspaceRoot}/.vscode/launchReactNative.js",
10 | "type": "reactnative",
11 | "request": "launch",
12 | "platform": "android",
13 | "sourceMaps": true,
14 | "outDir": "${workspaceRoot}/.vscode/.react"
15 | },
16 | {
17 | "name": "Debug iOS",
18 | "program": "${workspaceRoot}/.vscode/launchReactNative.js",
19 | "type": "reactnative",
20 | "request": "launch",
21 | "platform": "ios",
22 | "sourceMaps": true,
23 | "outDir": "${workspaceRoot}/.vscode/.react"
24 | }
25 |
26 | ]
27 | }
--------------------------------------------------------------------------------
/.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 |
39 | # BUCK
40 | buck-out/
41 | \.buckd/
42 | *.keystore
43 |
44 | # fastlane
45 | #
46 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
47 | # screenshots whenever they are needed.
48 | # For more information about the recommended setup visit:
49 | # https://docs.fastlane.tools/best-practices/source-control/
50 |
51 | */fastlane/report.xml
52 | */fastlane/Preview.html
53 | */fastlane/screenshots
54 |
55 | # Bundle artifact
56 | *.jsbundle
57 |
58 | jest_coverage
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | ## [2.0.0]
4 |
5 | It's a huge update that doesn't have a backward compability with the 1.x version because we totally rebuilt the RNS from the ground.
6 |
7 | ### New Features
8 |
9 | - Removed Expo and transitioned to native projects, because of lots of restrictions that expo adds to your projects.
10 | - Added Plop generator for easy deveopment.
11 | - Added support for unit testing with Jest and Enzyme.
12 | - Added support for e2e testing with Detox.
13 | - New modular architecture that will help you speed up the applications development.
14 | - Lots of performance improvements in comparison with v1.0.0
15 | - Removed eslint styling rules in favour of prettier.
16 | - Added new documentation at https://docs.reactnativestarter.com/
17 | - CI/CD compatibale project
18 | - Lots of new fixes and improvements
19 |
20 | ## [1.1.0]
21 |
22 | ### Fixed
23 |
24 | - Navigation header issue
25 |
26 | ### Updated
27 |
28 | - Updated React Navigation to version 3.0.0
29 | - Updated all the libraries to latest versions
30 | - Added Prettier
31 |
--------------------------------------------------------------------------------
/src/components/index.js:
--------------------------------------------------------------------------------
1 | // ## Generator Components Imports
2 | import Button from './Button';
3 | import RadioGroup from './RadioGroup';
4 | import Dropdown from './Dropdown';
5 | import GridRow from './GridRow';
6 | import TextInput from './TextInput';
7 | import SegmentedControl from './SegmentedControl';
8 | import BackgroundView from './BackgroundView';
9 | import IconizedTextInput from './IconizedTextInput';
10 | import LoadingOverlay from './LoadingOverlay';
11 | import ImageView from './ImageView';
12 | import CollapsibleView from './CollapsibleView';
13 | import TopNavigatorView from './TopNavigatorView';
14 | import PhotoPickerView from './PhotoPickerView';
15 | import StyledButton from './StyledButton';
16 |
17 | export {
18 | // ## Generator Components Exports
19 | Button,
20 | RadioGroup,
21 | Dropdown,
22 | GridRow,
23 | TextInput,
24 | SegmentedControl,
25 | BackgroundView,
26 | IconizedTextInput,
27 | LoadingOverlay,
28 | ImageView,
29 | CollapsibleView,
30 | TopNavigatorView,
31 | PhotoPickerView,
32 | StyledButton
33 | };
34 |
--------------------------------------------------------------------------------
/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 | MYAPP_RELEASE_STORE_FILE=bone-release-key.keystore
21 | MYAPP_RELEASE_KEY_ALIAS=bone-key-alias
22 | MYAPP_RELEASE_STORE_PASSWORD=123456
23 | MYAPP_RELEASE_KEY_PASSWORD=123456
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 Futurice
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | 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 THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
--------------------------------------------------------------------------------
/android/app/google-services.json:
--------------------------------------------------------------------------------
1 | {
2 | "project_info": {
3 | "project_number": "904794305606",
4 | "firebase_url": "https://boneandroid-da1c2.firebaseio.com",
5 | "project_id": "boneandroid-da1c2",
6 | "storage_bucket": "boneandroid-da1c2.appspot.com"
7 | },
8 | "client": [
9 | {
10 | "client_info": {
11 | "mobilesdk_app_id": "1:904794305606:android:81fc8d9eb864e9d4",
12 | "android_client_info": {
13 | "package_name": "com.bone"
14 | }
15 | },
16 | "oauth_client": [
17 | {
18 | "client_id": "904794305606-524nl76s6v0559rbsiuua6nvsmevat1i.apps.googleusercontent.com",
19 | "client_type": 3
20 | }
21 | ],
22 | "api_key": [
23 | {
24 | "current_key": "AIzaSyCvFwT8aDWFmuA2D6XKlIo3d4vE8fQZgRE"
25 | }
26 | ],
27 | "services": {
28 | "analytics_service": {
29 | "status": 1
30 | },
31 | "appinvite_service": {
32 | "status": 1,
33 | "other_platform_oauth_client": []
34 | },
35 | "ads_service": {
36 | "status": 2
37 | }
38 | }
39 | }
40 | ],
41 | "configuration_version": "1"
42 | }
--------------------------------------------------------------------------------
/src/modules/profile/components/SectionTitleItem.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {
3 | StyleSheet,
4 | View,
5 | Text,
6 | } from 'react-native';
7 |
8 | import PropTypes from 'prop-types';
9 | import { colors } from '../../../styles';
10 |
11 | export default class SectionTitleItem extends React.Component {
12 | render () {
13 | const { title } = this.props;
14 | return (
15 |
16 | {title}
17 |
18 | )
19 | }
20 |
21 | }
22 |
23 | SectionTitleItem.proptypes = {
24 | title: PropTypes.object.isRequired,
25 | };
26 |
27 | const styles = StyleSheet.create({
28 | itemContainerStyle: {
29 | height: 32,
30 | backgroundColor: 'black',
31 | marginRight: 16,
32 | marginLeft: 16,
33 | alignSelf: 'stretch',
34 | flexDirection: 'row',
35 | alignItems: 'center',
36 | borderBottomWidth: 1,
37 | borderBottomColor: colors.darkGray
38 | },
39 | title: {
40 | fontSize: 17,
41 | fontWeight: 'bold',
42 | color: 'white'
43 | }
44 |
45 | });
46 |
--------------------------------------------------------------------------------
/src/actions/CommentActions.js:
--------------------------------------------------------------------------------
1 | import { api } from '../config';
2 | import * as ACTION_TYPES from './ActionTypes';
3 |
4 | export function postComment(fromUserId, toUserId, comment) {
5 | let body = {
6 | review: comment
7 | }
8 | return {
9 | type: ACTION_TYPES.POST_COMMENT,
10 | request: {
11 | url: `${api.baseURL}/api/review/${fromUserId}/submit/${toUserId}`,
12 | method: 'post',
13 | body: JSON.stringify(body)
14 | },
15 | }
16 | }
17 |
18 | export function confirmComment(fromUserId, toUserId, approved) {
19 | let body = {
20 | isAccepted: approved? "true" : "false"
21 | }
22 | return {
23 | type: ACTION_TYPES.CONFIRM_COMMENT,
24 | request: {
25 | url: `${api.baseURL}/api/review/${fromUserId}/confirm/${toUserId}`,
26 | method: 'post',
27 | body: JSON.stringify(body)
28 | },
29 |
30 | }
31 | }
32 |
33 | export function getAcceptedComments(userId) {
34 | return {
35 | type: ACTION_TYPES.GET_ACCEPTED_COMMENTS,
36 | request: {
37 | url: `${api.baseURL}/api/review/${userId}/acceptedReviews`
38 |
39 | },
40 | userId
41 |
42 | }
43 | }
--------------------------------------------------------------------------------
/dangerfile.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable import/no-extraneous-dependencies */
2 | import { markdown, message, danger, fail, warn } from 'danger';
3 | import includes from 'lodash/includes';
4 |
5 | const modifiedMD = danger.git.modified_files.join('\n- ');
6 | message(`Changed Files in this PR: \n - ${modifiedMD}`);
7 |
8 | if (danger.github.pr.body.length < 10) {
9 | fail('This pull request needs an description.');
10 | }
11 |
12 | const packageChanged = includes(danger.git.modified_files, 'package.json');
13 | const lockfileChanged = includes(danger.git.modified_files, 'yarn.lock');
14 | if (packageChanged && !lockfileChanged) {
15 | const msg = 'Changes were made to package.json, but not to yarn.lock';
16 | const idea = 'Perhaps you need to run `yarn install`?';
17 | warn(`${msg} - ${idea}`);
18 | }
19 |
20 | const bigPRThreshold = 600;
21 | if (danger.github.pr.additions + danger.github.pr.deletions > bigPRThreshold) {
22 | warn(`:exclamation: Big PR`);
23 | markdown(
24 | `Pull Request size seems relatively large. If Pull Request contains multiple changes, split each into separate PR will helps faster, easier review.`
25 | );
26 | }
27 |
28 | if (danger.github.pr.assignee === null) {
29 | fail(
30 | 'Please assign someone to merge this PR, and optionally include people who should review.'
31 | );
32 | }
33 |
--------------------------------------------------------------------------------
/src/modules/term/Terms.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {
3 | StyleSheet,
4 | View,
5 | WebView,
6 | ScrollView
7 | } from 'react-native';
8 |
9 | import { fonts, colors } from '../../styles';
10 | import { Button, BackgroundView } from '../../components';
11 | import { getStatusBarHeight, getBottomSpace } from 'react-native-iphone-x-helper';
12 | import { terms } from '../../config'
13 | import HTML from 'react-native-render-html';
14 |
15 | export default class Terms extends React.Component {
16 |
17 | componentDidMount() {
18 | }
19 |
20 | render() {
21 | return (
22 |
23 |
24 | ${terms}
`}} />
25 |
26 |
27 |
28 | );
29 | }
30 | }
31 |
32 | const styles = StyleSheet.create({
33 | container: {
34 | flex: 1,
35 | marginBottom: getBottomSpace(),
36 | },
37 | background: {
38 | flex: 1,
39 | backgroundColor: 'black'
40 | },
41 | text:{
42 | fontSize: 14,
43 | color: '#fff',
44 | margin: 16,
45 | },
46 |
47 | });
48 |
--------------------------------------------------------------------------------
/src/socket-manager/SocketActions.js:
--------------------------------------------------------------------------------
1 | export const CONNECT = 'connect';
2 | export const RECONNECT = 'reconnect';
3 | export const DISCONNECT = 'disconnect';
4 |
5 | export const GET_STATUS = "getStatus";
6 | export const PRIVATE_MESSAGE= 'privateMessage';
7 | export const PRIVATE_MESSAGE_SENT = 'privateMessageSent';
8 | export const GROUP_CHAT_MESSAGE = 'groupChatMessage';
9 | export const GROUP_CHAT_MESSAGE_SENT = 'groupChatMessageSent';
10 | export const TYPING= 'typing';
11 | export const TYPING_STOPPED = 'typingStopped';
12 | export const MESSAGE_STATUS_SENT = 'messageStatusSent';
13 | export const MESSAGE_STATUS_DELIVERED= 'messageStatusDeliveried';
14 | export const MESSAGE_STATUS_READ= 'messageStatusRead';
15 | export const MESSAGE_DELETE = 'messageDelete';
16 |
17 | export const LOGIN_SIGNUP = 'loginsignup'
18 |
19 | export const MESSAGE_STATUS_UPDATE = 'messageStatusUpdate'
20 |
21 | export const GET_CHATS_ONLINE_STATUS = 'getChatsOnlineStatus'
22 | export const MULTIPLE_MESSAGES = 'multipleMessages'
23 |
24 | export const INITIALIZE_UNAVAILABLE_IDS_LIST= 'initializeUnavailableIdsList'
25 | export const UPDATE_UNAVAILABLE_IDS_LIST = 'updateUnavailableIdsList'
26 |
27 | export const SET_USER_WAY = 'setUserAway'
28 | export const SET_USER_OFFLINE = 'setUserOffline'
29 |
30 | export const VOICE_CALL = 'videoCall'
31 | export const VOICE_CALL_OFF = 'videoCallOff'
32 | export const REJECT_CALL = 'rejectCall'
33 |
--------------------------------------------------------------------------------
/src/redux/reducer.js:
--------------------------------------------------------------------------------
1 | import { combineReducers } from 'redux';
2 | import { persistReducer } from 'redux-persist';
3 | import storage from 'redux-persist/lib/storage';
4 | // ## Generator Reducer Imports
5 | import app from '../reducers/AppReducer';
6 | import auth from '../reducers/AuthReducer';
7 | import users from '../reducers/UserReducer';
8 | import publicUser from '../reducers/PublicUserReducer';
9 | import gallery from '../reducers/GalleryReducer';
10 | import comment from '../reducers/CommentReducer';
11 | import lockCode from '../reducers/LockCodeReducer';
12 | import chat from '../reducers/ChatReducer';
13 |
14 | const authPersistConfig = {
15 | key: 'auth',
16 | storage: storage,
17 | blacklist: ['isLoading'],
18 | };
19 |
20 | const usersPersistConfig = {
21 | key: 'users',
22 | storage: storage,
23 | blacklist: ['isLoading', 'success', 'error', 'searchUsers'],
24 | };
25 |
26 | const lockCodePersistConfig = {
27 | key: 'lockCode',
28 | storage: storage,
29 | blacklist: []
30 | }
31 |
32 | export default combineReducers({
33 | // ## Generator Reducers
34 | app: persistReducer(getNormalConfig('app', []), app),
35 | auth: persistReducer(authPersistConfig, auth),
36 | users,
37 | publicUser,
38 | gallery,
39 | comment,
40 | lockCode: persistReducer(lockCodePersistConfig, lockCode),
41 | chat
42 | });
43 |
44 |
45 | function getNormalConfig(name, blackList) {
46 | return {
47 | key: name,
48 | storage: storage,
49 | blacklist: blackList,
50 |
51 | };
52 | }
--------------------------------------------------------------------------------
/src/components/TextInput.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { View, Platform, StyleSheet, TextInput } from 'react-native';
3 |
4 | import { fonts, colors } from '../styles';
5 |
6 | const RNSTextInput = props => {
7 | const finalStyle = [
8 | styles.default,
9 | props.type === 'bordered' && styles.bordered,
10 | props.dark && styles.dark,
11 | props.style && props.style,
12 | ];
13 |
14 | return (
15 |
16 |
22 | {Platform.OS === 'ios' && (
23 |
24 | )}
25 |
26 | );
27 | };
28 |
29 | const HEIGHT = 40;
30 |
31 | const styles = StyleSheet.create({
32 | default: {
33 | height: HEIGHT,
34 | color: 'white',
35 | fontFamily: fonts.primaryRegular,
36 | ...Platform.select({
37 | android: {
38 | paddingLeft: 5,
39 | opacity: 0.9,
40 | },
41 | }),
42 | },
43 | bordered: {
44 | borderWidth: 0.5,
45 | borderColor: colors.lightGray,
46 | borderRadius: 20,
47 | paddingHorizontal: 20,
48 | },
49 | dark: {
50 | color: colors.gray,
51 | },
52 | primary: {
53 | borderRadius: HEIGHT / 2,
54 | backgroundColor: 'transparent',
55 | },
56 | });
57 |
58 | export default RNSTextInput;
59 |
--------------------------------------------------------------------------------
/src/reducers/CommentReducer.js:
--------------------------------------------------------------------------------
1 | import * as ACTION_TYPES from '../actions/ActionTypes';
2 |
3 | const INITIAL_STATE = {
4 | isLoading: false,
5 | success: false,
6 | error: null,
7 | comments: [],
8 | userId: null
9 | };
10 |
11 | export default (state = INITIAL_STATE, action) => {
12 | switch (action.type) {
13 | case ACTION_TYPES.POST_COMMENT:
14 | return { ...state, isLoading: true, success: false, error: null , currentAction: action.type};
15 | case ACTION_TYPES.POST_COMMENT_SUCCESS:
16 | return { ...state, isLoading: false, success: true, error: null, currentAction: action.type};
17 | case ACTION_TYPES.POST_COMMENT_FAILURE:
18 | return { ...state, isLoading: false, error: 'You have already commented on this profile.', success: false, currentAction: action.type};
19 |
20 | case ACTION_TYPES.GET_ACCEPTED_COMMENTS:
21 | return { ...state, isLoading: true, success: false, error: null , currentAction: action.type};
22 | case ACTION_TYPES.GET_ACCEPTED_COMMENTS_SUCCESS:
23 | return { ...state, isLoading: false, success: true, error: null, currentAction: action.type, comments: action.data.data.reviews, userId: action.userId};
24 | case ACTION_TYPES.GET_ACCEPTED_COMMENTS_FAILURE:
25 | return { ...state, isLoading: false, error: 'An error occured', success: false, currentAction: action.type};
26 |
27 | default:
28 | return state;
29 | }
30 | };
31 |
--------------------------------------------------------------------------------
/android/app/BUCK:
--------------------------------------------------------------------------------
1 | # To learn about Buck see [Docs](https://buckbuild.com/).
2 | # To run your application with Buck:
3 | # - install Buck
4 | # - `npm start` - to start the packager
5 | # - `cd android`
6 | # - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"`
7 | # - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck
8 | # - `buck install -r android/app` - compile, install and run application
9 | #
10 |
11 | load(":build_defs.bzl", "create_aar_targets", "create_jar_targets")
12 |
13 | lib_deps = []
14 |
15 | create_aar_targets(glob(["libs/*.aar"]))
16 |
17 | create_jar_targets(glob(["libs/*.jar"]))
18 |
19 | android_library(
20 | name = "all-libs",
21 | exported_deps = lib_deps,
22 | )
23 |
24 | android_library(
25 | name = "app-code",
26 | srcs = glob([
27 | "src/main/java/**/*.java",
28 | ]),
29 | deps = [
30 | ":all-libs",
31 | ":build_config",
32 | ":res",
33 | ],
34 | )
35 |
36 | android_build_config(
37 | name = "build_config",
38 | package = "com.reactnativestarter",
39 | )
40 |
41 | android_resource(
42 | name = "res",
43 | package = "com.reactnativestarter",
44 | res = "src/main/res",
45 | )
46 |
47 | android_binary(
48 | name = "app",
49 | keystore = "//android/keystores:debug",
50 | manifest = "src/main/AndroidManifest.xml",
51 | package_type = "debug",
52 | deps = [
53 | ":app-code",
54 | ],
55 | )
56 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 | ext {
5 | buildToolsVersion = "28.0.3"
6 | minSdkVersion = 16
7 | compileSdkVersion = 28
8 | targetSdkVersion = 27
9 | supportLibVersion = "28.0.0"
10 | }
11 | repositories {
12 | google()
13 | jcenter()
14 | }
15 | dependencies {
16 | classpath 'com.android.tools.build:gradle:3.2.1'
17 | classpath 'com.google.gms:google-services:4.2.0'
18 | // NOTE: Do not place your application dependencies here; they belong
19 | // in the individual module build.gradle files
20 | }
21 | }
22 |
23 | allprojects {
24 | repositories {
25 | mavenLocal()
26 | google()
27 | jcenter()
28 | maven {
29 | // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
30 | url "$rootDir/../node_modules/react-native/android"
31 | }
32 |
33 | maven { url 'https://maven.google.com' }
34 | maven { url "https://jitpack.io" }
35 | }
36 | }
37 |
38 | subprojects {
39 | afterEvaluate {project ->
40 | if (project.hasProperty("android")) {
41 | android {
42 | compileSdkVersion 28
43 | buildToolsVersion "28.0.3"
44 | }
45 | }
46 | }
47 | }
48 |
49 | task wrapper(type: Wrapper) {
50 | gradleVersion = '4.7'
51 | distributionUrl = distributionUrl.replace("bin", "all")
52 | }
53 |
--------------------------------------------------------------------------------
/src/modules/chat/data/messages.js:
--------------------------------------------------------------------------------
1 | module.exports = [
2 | {
3 | _id: Math.round(Math.random() * 1000000),
4 | text: 'Do you want to build a cool app?',
5 | createdAt: new Date(Date.UTC(2016, 10, 30, 17, 20, 0)),
6 | user: {
7 | _id: 2,
8 | avatar: 'https://s3.amazonaws.com/uifaces/faces/twitter/ladylexy/128.jpg',
9 | name: 'User',
10 | },
11 | deliveryStatus: 3
12 | },
13 | {
14 | _id: Math.round(Math.random() * 1000000),
15 | text: "Me too. I'm here now",
16 | createdAt: new Date(Date.UTC(2016, 9, 30, 17, 20, 0)),
17 | user: {
18 | _id: 1,
19 | avatar: '',
20 | name: 'Developer',
21 | },
22 | sent: true,
23 | received: true,
24 | location: {
25 | latitude: 48.864601,
26 | longitude: 2.398704,
27 | },
28 | deliveryStatus: 2
29 | },
30 | {
31 | _id: Math.round(Math.random() * 1000000),
32 | text: 'Doing great!',
33 | createdAt: new Date(Date.UTC(2016, 8, 30, 17, 20, 0)),
34 | user: {
35 | _id: 1,
36 | avatar: '',
37 | name: 'User',
38 | },
39 | deliveryStatus: 1
40 | },
41 | {
42 | _id: Math.round(Math.random() * 1000000),
43 | text: "Sup man, how're you doing?",
44 | createdAt: new Date(Date.UTC(2016, 7, 30, 17, 20, 0)),
45 | user: {
46 | _id: 1,
47 | avatar: '',
48 | name: 'Developer',
49 | },
50 | sent: true,
51 | received: true,
52 | deliveryStatus: 0
53 | },
54 | ];
55 |
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/AppDelegate.m:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | #import "AppDelegate.h"
9 |
10 | #import
11 | #import
12 |
13 | @implementation AppDelegate
14 |
15 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
16 | {
17 | NSURL *jsCodeLocation;
18 |
19 | jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
20 |
21 | RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
22 | moduleName:@"ReactNativeStarter"
23 | initialProperties:nil
24 | launchOptions:launchOptions];
25 | rootView.backgroundColor = [UIColor blackColor];
26 |
27 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
28 | UIViewController *rootViewController = [UIViewController new];
29 | rootViewController.view = rootView;
30 | self.window.rootViewController = rootViewController;
31 | [self.window makeKeyAndVisible];
32 |
33 | /*for (NSString* family in [UIFont familyNames])
34 | {
35 | NSLog(@"%@", family);
36 | for (NSString* name in [UIFont fontNamesForFamilyName: family])
37 | {
38 | NSLog(@" %@", name);
39 | }
40 | }*/
41 | return YES;
42 | }
43 |
44 | @end
45 |
--------------------------------------------------------------------------------
/src/reducers/GalleryReducer.js:
--------------------------------------------------------------------------------
1 | import * as ACTION_TYPES from '../actions/ActionTypes';
2 |
3 |
4 | const INITIAL_STATE = {
5 | isLoading: false,
6 | success: false,
7 | error: null,
8 | gallery: [],
9 | };
10 |
11 | export default (state = INITIAL_STATE, action) => {
12 | switch (action.type) {
13 | case ACTION_TYPES.GET_GALLERY:
14 | return { ...state, isLoading: true, success: false, error: null };
15 | case ACTION_TYPES.GET_GALLERY_SUCCESS:
16 | return { ...state, isLoading: false, success: true, error: null, gallery: action.data.data.gallery};
17 | case ACTION_TYPES.GET_GALLERY_FAILURE:
18 | return { ...state, isLoading: false, error: 'An error occured', success: false };
19 |
20 | case ACTION_TYPES.ADD_IMAGE_GALLERY:
21 | return { ...state, isLoading: true, success: false, error: null };
22 | case ACTION_TYPES.ADD_IMAGE_GALLERY_SUCCESS:
23 | return { ...state, isLoading: false, success: true, error: null, gallery: action.data.gallery };
24 | case ACTION_TYPES.ADD_IMAGE_GALLERY_FAILURE:
25 | return { ...state, isLoading: false, error: 'An error occured', success: false };
26 |
27 | case ACTION_TYPES.DELETE_IMAGE_GALLERY:
28 | return { ...state, isLoading: true, success: false, error: null };
29 | case ACTION_TYPES.DELETE_IMAGE_GALLERY_SUCCESS:
30 | return { ...state, isLoading: false, success: true, error: null, gallery: action.data.data.gallery };
31 | case ACTION_TYPES.DELETE_IMAGE_GALLERY_FAILURE:
32 | return { ...state, isLoading: false, error: 'An error occured', success: false };
33 | default:
34 | return state;
35 | }
36 | };
37 |
--------------------------------------------------------------------------------
/src/modules/auth/Auth.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {
3 | StyleSheet,
4 | View,
5 | Platform,
6 | } from 'react-native';
7 |
8 | import { fonts, colors } from '../../styles';
9 | import { Button, BackgroundView } from '../../components';
10 | import { getStatusBarHeight, getBottomSpace } from 'react-native-iphone-x-helper';
11 |
12 |
13 | export default class Auth extends React.Component {
14 |
15 | componentDidMount() {
16 | }
17 |
18 | render() {
19 | return (
20 |
21 |
22 |
23 |
24 |
42 |
43 | );
44 | }
45 | }
46 |
47 | const styles = StyleSheet.create({
48 | container: {
49 | flex: 1,
50 | alignItems: 'center',
51 | justifyContent: 'flex-end',
52 | paddingHorizontal: 30,
53 | marginTop: Platform.OS === 'ios' ? getStatusBarHeight(true) : 0,
54 | marginBottom: getBottomSpace(),
55 | },
56 | background: {
57 | flex: 1,
58 |
59 | }
60 | });
61 |
--------------------------------------------------------------------------------
/src/modules/chat/Chat.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {
3 | StyleSheet,
4 | View,
5 | Text,
6 | TouchableOpacity,
7 | Platform
8 | } from 'react-native';
9 |
10 | import { getStatusBarHeight, getBottomSpace } from 'react-native-iphone-x-helper';
11 | import { connect } from 'react-redux';
12 | import ChatRoomList from './components/ChatRoomList';
13 |
14 | class Chat extends React.Component {
15 | constructor(props) {
16 | super(props);
17 | }
18 | getAddGroupButton = () => {
19 | return
20 |
21 | Add Group
22 |
23 |
24 | }
25 |
26 | renderChatrooms = () => {
27 | return
28 |
29 |
30 | }
31 |
32 | render() {
33 | return (
34 |
35 |
36 | {this.getAddGroupButton()}
37 | {this.renderChatrooms()}
38 |
39 |
40 | );
41 | }
42 | }
43 |
44 | const styles = StyleSheet.create({
45 | container: {
46 | flex: 1,
47 | marginTop: Platform.OS === 'ios' ? getStatusBarHeight(true) : 0,
48 | },
49 | background:{
50 | flex: 1,
51 | backgroundColor:'black'
52 | },
53 | chatlistContainer: {
54 | marginTop: 50,
55 | flex:1
56 | },
57 |
58 | text: {
59 | fontSize: 14,
60 | color: 'white'
61 | }
62 | });
63 |
64 | const mapStateToProps = (state) => ({ app: state.app });
65 |
66 | export default connect(mapStateToProps)(Chat);
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
15 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/ios/ReactNativeStarter-tvOS/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 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UIViewControllerBasedStatusBarAppearance
38 |
39 | NSLocationWhenInUseUsageDescription
40 |
41 | NSAppTransportSecurity
42 |
43 |
44 | NSExceptionDomains
45 |
46 | localhost
47 |
48 | NSExceptionAllowsInsecureHTTPLoads
49 |
50 |
51 |
52 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/src/components/StyledText.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Text as RNText, StyleSheet } from 'react-native';
3 |
4 | import { colors, fonts } from '../styles';
5 |
6 | function applyGeneralStyles(props) {
7 | return [
8 | props.style && props.style,
9 | props.bold && styles.bold,
10 | props.light && styles.light,
11 | props.white && styles.white,
12 | props.underline && styles.underline,
13 | props.hCenter && { textAlign: 'center' },
14 | props.lineThrough && styles.lineThrough,
15 | props.color && { color: props.color },
16 | props.size && { fontSize: props.size },
17 | ];
18 | }
19 |
20 | export function Text(props) {
21 | const finalStyle = [styles.default, ...applyGeneralStyles(props)];
22 |
23 | return ;
24 | }
25 |
26 | export function Title(props) {
27 | const finalStyle = [
28 | styles.default,
29 | styles.title,
30 | ...applyGeneralStyles(props),
31 | ];
32 |
33 | return ;
34 | }
35 |
36 | export function Caption(props) {
37 | const finalStyle = [
38 | styles.default,
39 | styles.caption,
40 | ...applyGeneralStyles(props),
41 | ];
42 |
43 | return ;
44 | }
45 |
46 | const styles = StyleSheet.create({
47 | default: {
48 | fontFamily: fonts.primaryRegular,
49 | },
50 | bold: {
51 | fontFamily: fonts.primaryBold,
52 | },
53 | light: {
54 | fontFamily: fonts.primaryLight,
55 | },
56 | title: {
57 | fontSize: 18,
58 | },
59 | caption: {
60 | fontSize: 13,
61 | },
62 | underline: {
63 | textDecorationLine: 'underline',
64 | textDecorationStyle: 'solid',
65 | textDecorationColor: colors.gray,
66 | },
67 | lineThrough: {
68 | textDecorationLine: 'line-through',
69 | },
70 | white: {
71 | color: colors.white,
72 | },
73 | });
74 |
--------------------------------------------------------------------------------
/src/modules/profile/components/NumberPickerListItem.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import React, { Component } from 'react';
3 | import { StyleSheet, View, } from 'react-native';
4 | import ListItem from './ListItem';
5 | import Picker from 'react-native-picker';
6 |
7 | class NumberPickerListItem extends Component {
8 | constructor(props) {
9 | super(props);
10 | this.state = {
11 | text: props.value || props.min
12 | };
13 | }
14 |
15 | componentWillReceiveProps(nextProps) {
16 | this.setState({text: nextProps.value})
17 | }
18 |
19 | openPicker(){
20 | const { min, max, value } = this.props;
21 | let data = [];
22 | for(let i=min; i {
30 |
31 | },
32 | onPickerCancel: data => {
33 |
34 | },
35 | onPickerSelect: data => {
36 | this.setState({text: data})
37 | if(this.props.onPickNumber) {
38 | this.props.onPickNumber(data);
39 | }
40 | },
41 | pickerConfirmBtnText: 'Done',
42 | pickerCancelBtnText: '',
43 | pickerTitleText: ''
44 | });
45 | Picker.show();
46 | }
47 |
48 | render() {
49 | return (
50 | {
54 | console.log("onItemPress")
55 | this.openPicker();
56 | }}
57 | />
58 | );
59 | }
60 | }
61 |
62 | NumberPickerListItem.propTypes = {
63 | max: PropTypes.number.isRequired,
64 | min: PropTypes.number.isRequired,
65 | value: PropTypes.number,
66 | title: PropTypes.string,
67 | onPickNumber: PropTypes.func
68 | };
69 |
70 | export default NumberPickerListItem;
71 |
--------------------------------------------------------------------------------
/src/modules/profile/components/ItemPickerListItem.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import React, { Component } from 'react';
3 | import { StyleSheet, View, } from 'react-native';
4 | import ListItem from './ListItem';
5 | import Picker from 'react-native-picker';
6 |
7 | class ItemPickerListItem extends Component {
8 | constructor(props) {
9 | super(props);
10 | this.state = {
11 | text: props.value || ''
12 | };
13 | }
14 |
15 | componentWillReceiveProps(nextProps) {
16 | this.setState({text: nextProps.value})
17 | }
18 |
19 | findItemWithName(name) {
20 | const { items } = this.props;
21 | for(let i=0; i< items.length; i++) {
22 | if(items[i].name == name) {
23 | return items[i];
24 | }
25 |
26 | }
27 | return null;
28 | }
29 | openPicker(){
30 | const { items, value } = this.props;
31 | let data = [];
32 | for(let i=0; i {
40 |
41 | },
42 | onPickerCancel: data => {
43 |
44 | },
45 | onPickerSelect: data => {
46 | this.setState({text: data})
47 | let item = this.findItemWithName(data);
48 | if(item && this.props.onPickItem) {
49 | this.props.onPickItem(item);
50 | }
51 | },
52 | pickerConfirmBtnText: 'Done',
53 | pickerCancelBtnText: '',
54 | pickerTitleText: ''
55 | });
56 | Picker.show();
57 | }
58 |
59 | render() {
60 | return (
61 | {
65 | console.log("onItemPress")
66 | this.openPicker();
67 | }}
68 | />
69 | );
70 | }
71 | }
72 |
73 | ItemPickerListItem.propTypes = {
74 | value: PropTypes.string,
75 | items: PropTypes.array,
76 | title: PropTypes.string,
77 | onPickItem: PropTypes.func
78 | };
79 |
80 | export default ItemPickerListItem;
81 |
--------------------------------------------------------------------------------
/src/components/CollapsibleView.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { View, StyleSheet, TouchableOpacity, Text } from 'react-native';
3 | import { colors } from '../styles';
4 |
5 | export default class CollapsibleView extends React.Component {
6 |
7 | constructor(props) {
8 | super(props);
9 | this.state = {
10 | collapsed : true
11 | }
12 | }
13 |
14 |
15 | render() {
16 | const { containerStyle, textStyle,
17 | collapseButtonStyle, title,
18 | collapseText, viewAllText,
19 | getComponent } = this.props;
20 | return (
21 |
22 |
23 | {title}
24 | {
26 | this.setState({collapsed: !this.state.collapsed})
27 | }}
28 | >
29 |
30 | { !this.state.collapsed? (collapseText ? collapseText :'Collapse >') : (viewAllText? viewAllText : 'View all >')}
31 |
32 |
33 |
34 |
35 | {
36 | getComponent &&
37 | getComponent(this.state.collapsed)
38 | }
39 |
40 |
41 | )
42 | }
43 |
44 | }
45 |
46 | const styles = StyleSheet.create({
47 | container: {
48 | alignSelf: 'stretch',
49 | padding: 16
50 | },
51 | content: {
52 | alignSelf: 'stretch',
53 | marginTop: 8,
54 | },
55 | header: {
56 | flexDirection: 'row',
57 | justifyContent: 'space-between',
58 | alignItems: 'center'
59 | },
60 | text: {
61 | fontSize: 13,
62 | color: colors.red
63 | },
64 | collapseButton: {
65 | fontSize: 13,
66 | color: colors.lightGray
67 | }
68 |
69 |
70 |
71 | });
--------------------------------------------------------------------------------
/ios/ReactNativeStarterTests/ReactNativeStarterTests.m:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | #import
9 | #import
10 |
11 | #import
12 | #import
13 |
14 | #define TIMEOUT_SECONDS 600
15 | #define TEXT_TO_LOOK_FOR @"Welcome to React Native!"
16 |
17 | @interface ReactNativeStarterTests : XCTestCase
18 |
19 | @end
20 |
21 | @implementation ReactNativeStarterTests
22 |
23 | - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test
24 | {
25 | if (test(view)) {
26 | return YES;
27 | }
28 | for (UIView *subview in [view subviews]) {
29 | if ([self findSubviewInView:subview matching:test]) {
30 | return YES;
31 | }
32 | }
33 | return NO;
34 | }
35 |
36 | - (void)testRendersWelcomeScreen
37 | {
38 | UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController];
39 | NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];
40 | BOOL foundElement = NO;
41 |
42 | __block NSString *redboxError = nil;
43 | RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
44 | if (level >= RCTLogLevelError) {
45 | redboxError = message;
46 | }
47 | });
48 |
49 | while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
50 | [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
51 | [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
52 |
53 | foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) {
54 | if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
55 | return YES;
56 | }
57 | return NO;
58 | }];
59 | }
60 |
61 | RCTSetLogFunction(RCTDefaultLogFunction);
62 |
63 | XCTAssertNil(redboxError, @"RedBox error: %@", redboxError);
64 | XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
65 | }
66 |
67 |
68 | @end
69 |
--------------------------------------------------------------------------------
/src/modules/navigation/AuthNavigator.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Image, TouchableOpacity,View } from 'react-native';
3 | import { createAppContainer, createStackNavigator } from 'react-navigation';
4 |
5 |
6 | import Auth from '../auth/Auth';
7 | import Login from '../auth/Login';
8 | import Register from '../auth/Register';
9 | import Terms from '../term/Terms';
10 | import ForgotPassword from '../auth/ForgotPassword';
11 |
12 | import { colors, fonts } from '../../styles';
13 |
14 | const stackNavigator = createStackNavigator(
15 | {
16 | Auth: {
17 | screen: Auth,
18 | navigationOptions: {
19 | header: null,
20 | },
21 | },
22 | Login: {
23 | screen: Login,
24 | navigationOptions: {
25 | header: null,
26 | },
27 | },
28 | Register: {
29 | screen: Register,
30 | navigationOptions: {
31 | header: null,
32 | },
33 | },
34 | ForgotPassword: {
35 | screen: ForgotPassword,
36 | navigationOptions: {
37 | header: null,
38 | },
39 | },
40 | Terms: {
41 | screen: Terms,
42 | navigationOptions: {
43 | title: 'Terms of Service'
44 | }
45 | }
46 | },
47 | {
48 | defaultNavigationOptions: () => ({
49 | titleStyle: {
50 | fontFamily: fonts.primaryLight,
51 | },
52 | headerStyle: {
53 | backgroundColor: colors.primary,
54 | borderBottomWidth: 0,
55 | },
56 | headerBackground: (
57 |
60 | ),
61 | headerTitleStyle: {
62 | color: 'white',
63 | fontFamily: fonts.primaryRegular,
64 | fontSize: 24
65 | },
66 | headerTintColor: 'white',
67 | headerLeft: props => (
68 |
74 |
81 |
82 | ),
83 | }),
84 | },
85 | );
86 |
87 | export default createAppContainer(stackNavigator);
88 |
--------------------------------------------------------------------------------
/src/modules/profile/components/NumberRangePickerListItem.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import React, { Component } from 'react';
3 | import { StyleSheet, View, } from 'react-native';
4 | import ListItem from './ListItem';
5 | import Picker from 'react-native-picker';
6 |
7 | class NumberRangePickerListItem extends Component {
8 | constructor(props) {
9 | super(props);
10 | this.state = {
11 | text: (props.fromValue != null && props.toValue != null) ? props.fromValue + '-' + props.toValue : ""
12 | };
13 | }
14 |
15 | componentWillReceiveProps(nextProps) {
16 | this.setState({text: (nextProps.fromValue != null && nextProps.toValue != null) ? nextProps.fromValue + '-' + nextProps.toValue : ""})
17 | }
18 |
19 | openPicker(){
20 | const { min, max, fromValue, toValue } = this.props;
21 | let fromData = [];
22 | for(let i=min; i {
35 |
36 | },
37 | onPickerCancel: data => {
38 |
39 | },
40 | onPickerSelect: data => {
41 | this.setState({text: data[0] +'-'+ data[1]})
42 | if(this.props.onPickRange) {
43 | this.props.onPickRange(data[0], data[1]);
44 | }
45 | },
46 | pickerConfirmBtnText: 'Done',
47 | pickerCancelBtnText: '',
48 | pickerTitleText: ''
49 | });
50 | Picker.show();
51 | }
52 |
53 | render() {
54 | return (
55 | {
59 | console.log("onItemPress")
60 | this.openPicker();
61 | }}
62 | />
63 | );
64 | }
65 | }
66 |
67 | NumberRangePickerListItem.propTypes = {
68 | max: PropTypes.number.isRequired,
69 | min: PropTypes.number.isRequired,
70 | fromValue: PropTypes.number,
71 | toValue: PropTypes.number,
72 | title: PropTypes.string,
73 | onPickRange: PropTypes.func
74 | };
75 |
76 | export default NumberRangePickerListItem;
77 |
--------------------------------------------------------------------------------
/src/modules/chat/components/CustomView.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import MapView from 'react-native-maps';
3 | import {
4 | Linking,
5 | Platform,
6 | StyleSheet,
7 | TouchableOpacity,
8 | Dimensions,
9 | } from 'react-native';
10 |
11 | const { width, height } = Dimensions.get('window');
12 | const ASPECT_RATIO = width / height;
13 | const LATITUDE = 37.78825;
14 | const LONGITUDE = -122.4324;
15 | const LATITUDE_DELTA = 0.0922;
16 | const LONGITUDE_DELTA = LATITUDE_DELTA * ASPECT_RATIO;
17 |
18 | const SAMPLE_REGION = {
19 | latitude: LATITUDE,
20 | longitude: LONGITUDE,
21 | latitudeDelta: LATITUDE_DELTA,
22 | longitudeDelta: LONGITUDE_DELTA,
23 | };
24 |
25 | export default class CustomView extends React.Component {
26 | render() {
27 | if (this.props.currentMessage.location) {
28 | return (
29 | {
32 | const url = Platform.select({
33 | ios: `http://maps.apple.com/?ll=${
34 | this.props.currentMessage.location.latitude
35 | },${this.props.currentMessage.location.longitude}`,
36 | android: `http://maps.google.com/?q=${
37 | this.props.currentMessage.location.latitude
38 | },${this.props.currentMessage.location.longitude}`,
39 | });
40 | Linking.canOpenURL(url)
41 | // eslint-disable-next-line consistent-return
42 | .then(supported => {
43 | if (supported) {
44 | return Linking.openURL(url);
45 | }
46 | })
47 | .catch(err => {
48 | console.error('An error occurred', err);
49 | });
50 | }}
51 | >
52 |
53 |
54 | );
55 | }
56 | return null;
57 | }
58 | }
59 |
60 | const styles = StyleSheet.create({
61 | container: {},
62 | mapView: {
63 | width: 150,
64 | height: 100,
65 | borderRadius: 13,
66 | margin: 3,
67 | },
68 | map: {
69 | height: 200,
70 | margin: 10,
71 | },
72 | });
73 |
74 | CustomView.defaultProps = {
75 | currentMessage: {},
76 | containerStyle: {},
77 | mapViewStyle: {},
78 | };
79 |
--------------------------------------------------------------------------------
/src/modules/shared/PhotoModal.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {
3 | StyleSheet,
4 | View,
5 | Platform,
6 | TouchableOpacity
7 | } from 'react-native';
8 |
9 | import { getStatusBarHeight, getBottomSpace } from 'react-native-iphone-x-helper';
10 | import { ImageView } from '../../components';
11 | import { colors } from '../../styles';
12 | import { calculatePortraitDimension } from '../../helpers'
13 |
14 | import Icon from 'react-native-vector-icons/FontAwesome';
15 |
16 | const {width: deviceWidth, height: deviceHeight} = calculatePortraitDimension();
17 | export default class PhotoModal extends React.Component {
18 | constructor(props) {
19 | super(props);
20 | this.state={
21 | source: this.props.navigation.getParam('source'),
22 | shortUrl: this.props.navigation.getParam('shortUrl')
23 | }
24 | console.log("photoModal", this.props.navigation.getParam('shortUrl'));
25 | }
26 |
27 | getCloseButton = () => {
28 | return {
32 | this.props.navigation.goBack()
33 | }}>
34 |
35 |
36 | }
37 | render() {
38 | return (
39 |
40 |
41 |
42 | {this.getCloseButton()}
43 |
49 |
50 |
51 |
52 | )
53 | }
54 | }
55 |
56 | const styles = StyleSheet.create({
57 | background: {
58 | flex: 1,
59 | backgroundColor: 'rgba(0,0,0,0.6)',
60 | },
61 | container: {
62 | flex: 1,
63 | marginTop: Platform.OS === 'ios' ? getStatusBarHeight(true) : 0,
64 | marginBottom: getBottomSpace(),
65 | justifyContent:'center',
66 | alignItems:'center'
67 | },
68 |
69 |
70 |
71 | });
72 |
73 |
--------------------------------------------------------------------------------
/src/components/GridRow.js:
--------------------------------------------------------------------------------
1 | import React, { Children } from 'react';
2 | import { View } from 'react-native';
3 | import _ from 'lodash';
4 |
5 | /**
6 | * Renders empty placeholder views to fill any empty space
7 | * left by missing views within a row. This is necessary so that
8 | * the items in a row remain aligned correctly.
9 | *
10 | * @param count Number of placeholders to render
11 | * @returns {*} Placeholder views
12 | */
13 | function renderPlaceholderViews(count) {
14 | return _.times(count, index => );
15 | }
16 |
17 | // Ref needed
18 | // eslint-disable-next-line react/prefer-stateless-function
19 | class GridRow extends React.Component {
20 | render() {
21 | const { children, columns } = this.props;
22 | const missingElementsCount = columns - Children.count(children);
23 |
24 | return (
25 |
26 | {children}
27 | {renderPlaceholderViews(missingElementsCount)}
28 |
29 | );
30 | }
31 | }
32 |
33 | /* eslint-disable no-param-reassign */
34 | /**
35 | * Groups data into rows for rendering in grid views.
36 | * Elements may need more than one column in the grid.
37 | * To accomplish this, a column span can be assigned to
38 | * each element. The column span of an element determines
39 | * the number of columns it should occupy.
40 | *
41 | * @param data The data elements to group.
42 | * @param columns The number of columns of the grid.
43 | * @param getColumnSpan Optional function that returns the
44 | * column span of a single element. Each element has a span
45 | * of 1 by default.
46 | * @returns {Array} An array of rows, each row is an array of
47 | * data elements.
48 | */
49 | GridRow.groupByRows = (data, columns, getColumnSpan = _.constant(1)) => {
50 | const groupedData = _.reduce(
51 | data,
52 | (result, element) => {
53 | let currentRow = _.last(result.rows);
54 | const elementSpan = getColumnSpan(element);
55 |
56 | if (!currentRow || result.currentRowSize + elementSpan > columns) {
57 | currentRow = [];
58 | result.currentRowSize = 0;
59 | result.rows.push(currentRow);
60 | }
61 |
62 | result.currentRowSize += elementSpan;
63 | currentRow.push(element);
64 | return result;
65 | },
66 | { currentRowSize: 0, rows: [] },
67 | );
68 |
69 | return groupedData.rows;
70 | };
71 |
72 | export default GridRow;
73 |
--------------------------------------------------------------------------------
/src/middlewares/requestMiddleware.js:
--------------------------------------------------------------------------------
1 | import { AsyncStorage } from 'react-native';
2 |
3 | export default function requestMiddleware() {
4 | return (next) => (action) => {
5 | const { request, type, retryAction, ...rest } = action;
6 |
7 | if (!request) return next(action);
8 |
9 | const REQUEST = type;
10 | const SUCCESS = `${type}_SUCCESS`;
11 | const FAILURE = `${type}_FAILURE`;
12 |
13 | const UNAUTHORIZED = 'AUTH_UNAUTHORIZED';
14 | const TERMINATED = 'AUTH_TERMINATED';
15 |
16 | next({ ...rest, type: REQUEST, isLoading: true });
17 |
18 | AsyncStorage.getItem('auth')
19 | .then((authString) => {
20 | const auth = JSON.parse(authString);
21 |
22 | const defaults = {
23 | headers: {
24 | Accept: 'application/json',
25 | 'Content-Type': 'application/json',
26 | 'token': auth ? `${auth.token}` : '',
27 | },
28 | };
29 |
30 | return fetch(request.url, { ...defaults, ...request })
31 | .then((res) => {
32 | console.log('Reponse', res);
33 | if (res.status === 204) {
34 | next({ ...rest, type: SUCCESS, isLoading: false });
35 | } else if (res.ok) {
36 | return res.json().then((data) => {
37 | if(data.success) {
38 | next({ ...rest, data, type: SUCCESS, isLoading: false })
39 | }else {
40 | next({ ...rest, type: FAILURE, lastAction: action, isLoading: false, message: data.message });
41 | }
42 | });
43 | } else if (res.status === 401) {
44 | next({ ...rest, type: FAILURE, lastAction: action, isLoading: false });
45 | next({ ...rest, type: UNAUTHORIZED, lastAction: action });
46 | } else if (res.status === 430) {
47 | next({ ...rest, type: FAILURE, lastAction: action, isLoading: false });
48 | next({ ...rest, type: TERMINATED, lastAction: action });
49 | } else {
50 |
51 | next({ ...rest, type: FAILURE, lastAction: action, isLoading: false });
52 | }
53 | })
54 | .catch((error) => {
55 | next({ ...rest, error, type: FAILURE });
56 | console.log('MIDDLE WARE REQUEST ERROR', error);
57 |
58 | return false;
59 | });
60 | })
61 | .catch((err) => {
62 | console.log('UNAUTHORIZED', err.message);
63 | });
64 | };
65 | }
66 |
--------------------------------------------------------------------------------
/src/modules/profile/components/ListItem.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {
3 | StyleSheet,
4 | View,
5 | Text,
6 | TouchableOpacity,
7 | Image
8 | } from 'react-native';
9 |
10 | import PropTypes from 'prop-types';
11 | import { colors } from '../../../styles';
12 |
13 | export default class ListItem extends React.Component {
14 | onItemPress = () => {
15 | if(this.props.onItemPress)
16 | this.props.onItemPress();
17 | }
18 | render () {
19 | const { title, text, rightIconImage } = this.props;
20 |
21 | return (
22 | {
24 | this.onItemPress();
25 | }}
26 | >
27 |
28 | {title}
29 | {
30 | ((text != undefined && text != "") || rightIconImage) &&
31 |
32 | {
33 | (text != undefined && text != "") &&
34 | {text}
35 | }
36 | {
37 | rightIconImage &&
38 |
39 | }
40 |
41 |
42 | }
43 |
44 |
45 |
46 | )
47 | }
48 |
49 | }
50 |
51 | ListItem.proptypes = {
52 | title: PropTypes.object.isRequired,
53 | text: PropTypes.string,
54 | rightIconImage: PropTypes.object,
55 | onItemPress: PropTypes.func
56 |
57 | };
58 |
59 | const styles = StyleSheet.create({
60 | itemContainerStyle: {
61 | height: 48,
62 | backgroundColor: 'black',
63 | marginLeft: 16,
64 | marginRight: 16,
65 | alignSelf: 'stretch',
66 | flexDirection: 'row',
67 | alignItems: 'center',
68 | justifyContent: 'space-between',
69 | borderBottomWidth: 0.5,
70 | borderBottomColor: colors.darkGray
71 | },
72 | title: {
73 | fontSize: 17,
74 | color: 'white'
75 | },
76 | text: {
77 | fontSize: 17,
78 | color: colors.red
79 | }
80 | });
81 |
--------------------------------------------------------------------------------
/android/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | set DIRNAME=%~dp0
12 | if "%DIRNAME%" == "" set DIRNAME=.
13 | set APP_BASE_NAME=%~n0
14 | set APP_HOME=%DIRNAME%
15 |
16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17 | set DEFAULT_JVM_OPTS=
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windows variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 |
53 | :win9xME_args
54 | @rem Slurp the command line arguments.
55 | set CMD_LINE_ARGS=
56 | set _SKIP=2
57 |
58 | :win9xME_args_slurp
59 | if "x%~1" == "x" goto execute
60 |
61 | set CMD_LINE_ARGS=%*
62 |
63 | :execute
64 | @rem Setup the command line
65 |
66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
67 |
68 | @rem Execute Gradle
69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
70 |
71 | :end
72 | @rem End local scope for the variables with windows NT shell
73 | if "%ERRORLEVEL%"=="0" goto mainEnd
74 |
75 | :fail
76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
77 | rem the _cmd.exe /c_ return code!
78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
79 | exit /b 1
80 |
81 | :mainEnd
82 | if "%OS%"=="Windows_NT" endlocal
83 |
84 | :omega
85 |
--------------------------------------------------------------------------------
/.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 duplicate module providers
12 | ; For RN Apps installed via npm, "Libraries" folder is inside
13 | ; "node_modules/react-native" but in the source repo it is in the root
14 | .*/Libraries/react-native/React.js
15 |
16 | ; Ignore polyfills
17 | .*/Libraries/polyfills/.*
18 |
19 | ; Ignore metro
20 | .*/node_modules/metro/.*
21 |
22 | [include]
23 |
24 | [libs]
25 | node_modules/react-native/Libraries/react-native/react-native-interface.js
26 | node_modules/react-native/flow/
27 | node_modules/react-native/flow-github/
28 |
29 | [options]
30 | emoji=true
31 |
32 | esproposal.optional_chaining=enable
33 | esproposal.nullish_coalescing=enable
34 |
35 | module.system=haste
36 | module.system.haste.use_name_reducers=true
37 | # get basename
38 | module.system.haste.name_reducers='^.*/\([a-zA-Z0-9$_.-]+\.js\(\.flow\)?\)$' -> '\1'
39 | # strip .js or .js.flow suffix
40 | module.system.haste.name_reducers='^\(.*\)\.js\(\.flow\)?$' -> '\1'
41 | # strip .ios suffix
42 | module.system.haste.name_reducers='^\(.*\)\.ios$' -> '\1'
43 | module.system.haste.name_reducers='^\(.*\)\.android$' -> '\1'
44 | module.system.haste.name_reducers='^\(.*\)\.native$' -> '\1'
45 | module.system.haste.paths.blacklist=.*/__tests__/.*
46 | module.system.haste.paths.blacklist=.*/__mocks__/.*
47 | module.system.haste.paths.blacklist=/node_modules/react-native/Libraries/Animated/src/polyfills/.*
48 | module.system.haste.paths.whitelist=/node_modules/react-native/Libraries/.*
49 |
50 | munge_underscores=true
51 |
52 | module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub'
53 |
54 | module.file_ext=.js
55 | module.file_ext=.jsx
56 | module.file_ext=.json
57 | module.file_ext=.native.js
58 |
59 | suppress_type=$FlowIssue
60 | suppress_type=$FlowFixMe
61 | suppress_type=$FlowFixMeProps
62 | suppress_type=$FlowFixMeState
63 |
64 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)
65 | suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+
66 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy
67 | suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError
68 |
69 | [version]
70 | ^0.86.0
71 |
--------------------------------------------------------------------------------
/ios/ReactNativeStarter/Base.lproj/LaunchScreen.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/src/components/TopNavigatorView.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import { View, StyleSheet, Text, TouchableOpacity } from 'react-native';
3 | import { connect } from 'react-redux';
4 | import PropTypes from 'prop-types';
5 | import { colors } from '../styles'
6 | import Icon from 'react-native-vector-icons/FontAwesome';
7 |
8 | class TopNavigatorView extends Component {
9 | render = () => {
10 | const { title, rightComponent, leftComponent } = this.props;
11 | return (
12 |
13 |
14 | {
15 | title&&
16 | {title}
17 | }
18 |
19 |
20 |
21 | {
23 | if(this.props.onBackPressed) this.props.onBackPressed();
24 | }}
25 | >
26 |
27 |
28 |
29 |
30 |
31 |
32 | { leftComponent || }
33 | { rightComponent || }
34 |
35 |
36 |
37 |
38 | );
39 | };
40 | }
41 |
42 | TopNavigatorView.proptypes = {
43 | title: PropTypes.string,
44 | onBackPressed: PropTypes.func,
45 | rightComponent: PropTypes.object,
46 | leftComponent: PropTypes.object,
47 | containerStyle: PropTypes.object
48 | };
49 |
50 | const styles = StyleSheet.create({
51 | container: {
52 | height: 50,
53 | alignSelf: 'stretch',
54 | flexDirection: 'row',
55 | alignItems:'center'
56 | },
57 | titleContainer: {
58 | left: 0,
59 | top: 0,
60 | right: 0,
61 | bottom: 0,
62 | position: 'absolute',
63 | alignItems: 'center',
64 | justifyContent: 'center'
65 | },
66 | backContainer: {
67 | width: 50,
68 | height: 50,
69 | justifyContent: 'center',
70 | alignItems:'center'
71 | },
72 |
73 | title: {
74 | fontSize: 24,
75 | fontWeight:'bold',
76 | color: colors.white
77 | }
78 | });
79 |
80 | export default TopNavigatorView;
81 |
--------------------------------------------------------------------------------
/src/middlewares/requestFormUrlEncodeMiddleware.js:
--------------------------------------------------------------------------------
1 | import { AsyncStorage } from 'react-native';
2 |
3 | export default function requestFormUrlEncodeMiddleware() {
4 | return (next) => (action) => {
5 | const { request, type, retryAction, ...rest } = action;
6 |
7 | if (!request) return next(action);
8 |
9 | const REQUEST = type;
10 | const SUCCESS = `${type}_SUCCESS`;
11 | const FAILURE = `${type}_FAILURE`;
12 |
13 | const UNAUTHORIZED = 'AUTH_UNAUTHORIZED';
14 | const TERMINATED = 'AUTH_TERMINATED';
15 |
16 | next({ ...rest, type: REQUEST, isLoading: true });
17 |
18 | AsyncStorage.getItem('auth')
19 | .then((authString) => {
20 | const auth = JSON.parse(authString);
21 |
22 | const defaults = {
23 | headers: {
24 | Accept: 'application/json',
25 | 'Content-Type': 'application/json',
26 | Authorization: auth ? `Bearer ${auth.accessToken}` : '',
27 | },
28 | };
29 | if(request.body) {
30 | var formBody = [];
31 | for (var property in request.body) {
32 | var encodedKey = encodeURIComponent(property);
33 | var encodedValue = encodeURIComponent(details[property]);
34 | formBody.push(encodedKey + "=" + encodedValue);
35 | }
36 | formBody = formBody.join("&");
37 | request.body = formBody;
38 | }
39 |
40 |
41 | return fetch(request.url, { ...defaults, ...request })
42 | .then((res) => {
43 | if (res.status === 204) {
44 | next({ ...rest, type: SUCCESS, isLoading: false });
45 | } else if (res.ok) {
46 | return res.json().then((data) => next({ ...rest, data, type: SUCCESS, isLoading: false }));
47 | } else if (res.status === 401) {
48 | console.log("unauthorized", type);
49 | next({ ...rest, type: FAILURE, lastAction: action, isLoading: false });
50 | next({ ...rest, type: UNAUTHORIZED, lastAction: action });
51 | } else if (res.status === 430) {
52 | next({ ...rest, type: FAILURE, lastAction: action, isLoading: false });
53 | next({ ...rest, type: TERMINATED, lastAction: action });
54 | } else {
55 | next({ ...rest, type: FAILURE, lastAction: action, isLoading: false });
56 | }
57 | })
58 | .catch((error) => {
59 | next({ ...rest, error, type: FAILURE });
60 | console.log('MIDDLE WARE REQUEST ERROR', error);
61 |
62 | return false;
63 | });
64 | })
65 | .catch((err) => {
66 | console.log('UNAUTHORIZED', err.message);
67 | });
68 | };
69 | }
70 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'ReactNativeStarter'
2 | include ':@react-native-community_blur'
3 | project(':@react-native-community_blur').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/blur/android')
4 | include ':react-native-picker'
5 | project(':react-native-picker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-picker/android')
6 | include ':react-native-image-crop-picker'
7 | project(':react-native-image-crop-picker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-image-crop-picker/android')
8 | include ':react-native-image-picker'
9 | project(':react-native-image-picker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-image-picker/android')
10 | include ':rn-fetch-blob'
11 | project(':rn-fetch-blob').projectDir = new File(rootProject.projectDir, '../node_modules/rn-fetch-blob/android')
12 | include ':react-native-fast-image'
13 | project(':react-native-fast-image').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fast-image/android')
14 | include ':react-native-firebase'
15 | project(':react-native-firebase').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-firebase/android')
16 | include ':react-native-webview'
17 | project(':react-native-webview').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webview/android')
18 | include ':react-native-sha256'
19 | project(':react-native-sha256').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sha256/android')
20 | include ':react-native-config'
21 | project(':react-native-config').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-config/android')
22 | include ':react-native-maps'
23 | project(':react-native-maps').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-maps/lib/android')
24 | include ':react-native-svg'
25 | project(':react-native-svg').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-svg/android')
26 | include ':react-native-vector-icons'
27 | project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android')
28 | include ':react-native-localize'
29 | project(':react-native-localize').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-localize/android')
30 | include ':react-native-linear-gradient'
31 | project(':react-native-linear-gradient').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-linear-gradient/android')
32 | include ':react-native-gesture-handler'
33 | project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android')
34 |
35 | include ':app'
36 |
--------------------------------------------------------------------------------
/android/app/src/main/java/com/reactnativestarter/MainApplication.java:
--------------------------------------------------------------------------------
1 | package com.reactnativestarter;
2 |
3 | import android.app.Application;
4 |
5 | import com.facebook.react.ReactApplication;
6 | import com.cmcewen.blurview.BlurViewPackage;
7 | import com.beefe.picker.PickerViewPackage;
8 | import com.reactnative.ivpusic.imagepicker.PickerPackage;
9 | import com.imagepicker.ImagePickerPackage;
10 | import com.RNFetchBlob.RNFetchBlobPackage;
11 | import com.dylanvann.fastimage.FastImageViewPackage;
12 | import io.invertase.firebase.RNFirebasePackage;
13 | import com.sha256lib.Sha256Package;
14 | import com.lugg.ReactNativeConfig.ReactNativeConfigPackage;
15 | import com.airbnb.android.react.maps.MapsPackage;
16 | import com.horcrux.svg.SvgPackage;
17 | import com.oblador.vectoricons.VectorIconsPackage;
18 | import com.reactcommunity.rnlocalize.RNLocalizePackage;
19 | import com.BV.LinearGradient.LinearGradientPackage;
20 | import com.swmansion.gesturehandler.react.RNGestureHandlerPackage;
21 | import com.facebook.react.ReactNativeHost;
22 | import com.facebook.react.ReactPackage;
23 | import com.facebook.react.shell.MainReactPackage;
24 | import com.facebook.soloader.SoLoader;
25 | import io.invertase.firebase.messaging.RNFirebaseMessagingPackage;
26 |
27 | import java.util.Arrays;
28 | import java.util.List;
29 |
30 | public class MainApplication extends Application implements ReactApplication {
31 |
32 | private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
33 | @Override
34 | public boolean getUseDeveloperSupport() {
35 | return BuildConfig.DEBUG;
36 | }
37 |
38 | @Override
39 | protected List getPackages() {
40 | return Arrays.asList(
41 | new MainReactPackage(),
42 | new BlurViewPackage(),
43 | new PickerViewPackage(),
44 | new PickerPackage(),
45 | new ImagePickerPackage(),
46 | new RNFetchBlobPackage(),
47 | new FastImageViewPackage(),
48 | new RNFirebasePackage(),
49 | new RNFirebaseMessagingPackage(),
50 | new Sha256Package(),
51 | new ReactNativeConfigPackage(),
52 | new MapsPackage(),
53 | new SvgPackage(),
54 | new VectorIconsPackage(),
55 | new RNLocalizePackage(),
56 | new LinearGradientPackage(),
57 | new RNGestureHandlerPackage()
58 | );
59 | }
60 |
61 | @Override
62 | protected String getJSMainModuleName() {
63 | return "index";
64 | }
65 | };
66 |
67 | @Override
68 | public ReactNativeHost getReactNativeHost() {
69 | return mReactNativeHost;
70 | }
71 |
72 | @Override
73 | public void onCreate() {
74 | super.onCreate();
75 | SoLoader.init(this, /* native exopackage */ false);
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/src/modules/lock-code/LockCode.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {
3 | StyleSheet,
4 | View,
5 | Text,
6 | Platform,
7 | } from 'react-native';
8 |
9 | import { connect } from 'react-redux';
10 | import { fonts, colors } from '../../styles';
11 | import { Button } from '../../components';
12 | import { getStatusBarHeight, getBottomSpace } from 'react-native-iphone-x-helper';
13 | import LockNumberPad from './components/LockNumberPad';
14 | import { enableLock, disableLock } from '../../actions/LockCodeActions';
15 |
16 | class LockCode extends React.Component {
17 | constructor(props) {
18 | super(props);
19 | this.state= {
20 | mode: props.navigation.getParam('mode'), // capture : verify : reset
21 | capturedLockCode: ''
22 | }
23 | }
24 |
25 | render(){
26 | const { lockCode,locked } = this.props.lockCode
27 | return (
28 | {locked ? 'Enter Password' : 'New Password'}
29 | {
32 | this.setState({capturedLockCode: lockCode})
33 | }}
34 | onVerified ={ (lockCode) => {
35 | this.props.navigation.goBack();
36 | if(this.state.mode == 'reset') {
37 | this.props.dispatch(disableLock());
38 | }
39 | }}
40 | onReset = {()=> {
41 | this.setState({capturedLockCode: ''})
42 | }}
43 | mode={this.state.mode == 'capture'? 'capture' : 'verify'}
44 | verifyCode={lockCode}
45 | />
46 |
47 | {
48 | this.state.capturedLockCode.length == 6 &&
49 | {
56 | this.props.navigation.goBack();
57 | this.props.dispatch(enableLock(this.state.capturedLockCode));
58 | }}
59 | />
60 | }
61 |
62 | );
63 | }
64 | }
65 |
66 |
67 | const styles = StyleSheet.create({
68 | container: {
69 | flex: 1,
70 | alignItems: 'center',
71 | backgroundColor: 'black',
72 | marginBottom: getBottomSpace()
73 | },
74 | title: {
75 | fontSize: 32,
76 | fontWeight: '200',
77 | color: 'white',
78 | marginTop: 32
79 | }
80 | });
81 | const mapStateToProps = (state) => ({ lockCode: state.lockCode });
82 |
83 | export default connect(mapStateToProps)(LockCode);
--------------------------------------------------------------------------------
/src/components/RadioGroup.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import { TouchableOpacity, View, Text } from 'react-native';
4 |
5 | import { colors } from '../styles';
6 |
7 | export default function RNSRadioGroup({
8 | items,
9 | selectedIndex,
10 | onChange,
11 | style,
12 | underline,
13 | }) {
14 | return (
15 |
18 | {items &&
19 | items.map((item, index) => {
20 | let isActive = false;
21 | if (selectedIndex !== undefined && selectedIndex === index)
22 | isActive = true;
23 |
24 | let activeStyle = styles.itemActive;
25 | if (underline) activeStyle = styles.itemActiveUnderline;
26 |
27 | let activeTextStyle = styles.textActive;
28 | if (underline) activeTextStyle = styles.textActiveUnderline;
29 |
30 | return (
31 | onChange(index)}
33 | key={item.id || item}
34 | style={[
35 | styles.item,
36 | underline && styles.itemUnderline,
37 | isActive && activeStyle,
38 | ]}
39 | >
40 |
47 | {item.value || item}
48 |
49 | {underline && isActive && (
50 |
58 | )}
59 |
60 | );
61 | })}
62 |
63 | );
64 | }
65 |
66 | const styles = {
67 | container: {
68 | flex: 1,
69 | flexDirection: 'row',
70 | borderColor: colors.primary,
71 | borderWidth: 1,
72 | borderRadius: 5,
73 | },
74 | underline: {
75 | borderWidth: 0,
76 | },
77 | item: {
78 | flex: 1,
79 | alignItems: 'center',
80 | justifyContent: 'center',
81 | paddingVertical: 10,
82 | },
83 | itemUnderline: {
84 | borderBottomWidth: 0.5,
85 | borderBottomColor: '#e3e3e3',
86 | },
87 | itemActive: {
88 | backgroundColor: colors.primary,
89 | },
90 | itemActiveUnderline: {
91 | borderBottomWidth: 2,
92 | borderBottomColor: colors.primary,
93 | },
94 | text: {
95 | color: colors.primary,
96 | },
97 | textUnderline: {
98 | color: '#a6a6a6',
99 | },
100 | textActive: {
101 | color: colors.white,
102 | },
103 | textActiveUnderline: {
104 | color: colors.primary,
105 | },
106 | };
107 |
--------------------------------------------------------------------------------
/src/actions/GalleryActions.js:
--------------------------------------------------------------------------------
1 | import { api } from '../config';
2 | import * as ACTION_TYPES from './ActionTypes';
3 | import { AsyncStorage } from 'react-native';
4 | import RNFetchBlob from 'rn-fetch-blob';
5 |
6 | export function getGallery(viewerUserId, viewingUserId) {
7 |
8 | return {
9 | type: ACTION_TYPES.GET_GALLERY,
10 | request: {
11 | url: `${api.baseURL}/api/user/${viewerUserId}/gallery/${viewingUserId}`,
12 | },
13 | }
14 | }
15 | export function addGallery(userId, media) {
16 | const {uri: PATH , isPrivate, mime} = media;
17 | return (dispatch, getState) => {
18 |
19 | AsyncStorage.getItem('auth')
20 | .then((authString) => {
21 | const auth = JSON.parse(authString);
22 |
23 | dispatch({ type: ACTION_TYPES.ADD_IMAGE_GALLERY });
24 | const requrestURL = `${api.baseURL}/api/user/${userId}/gallery/add`;
25 | const body = [
26 | {
27 | name: 'isPrivate',
28 | data: isPrivate? 'true': 'false',
29 | },
30 | {
31 | name: 'galleryPhoto',
32 | filename: 'photo.jpg',
33 | data: RNFetchBlob.wrap(PATH.replace('file://', '')),
34 | type: mime,
35 | },
36 | ];
37 |
38 | console.log('addGallery', body);
39 | const requestCONFIG = {
40 | 'Content-Type': 'multipart/form-data',
41 | 'token': auth ? `${auth.token}` : ''
42 | };
43 |
44 | RNFetchBlob.fetch('POST', requrestURL, requestCONFIG, body)
45 | .uploadProgress({ interval: 5000 }, (written, total) => {
46 | const LEVEL = Math.round((written / total) * 100);
47 | console.log('uploaded', LEVEL);
48 | dispatch({
49 | type: ACTION_TYPES.ADD_IMAGE_GALLERY_PROCESS,
50 | data: LEVEL.toString(),
51 | });
52 | })
53 | .then((res) => {
54 | dispatch({
55 | type: ACTION_TYPES.ADD_IMAGE_GALLERY_SUCCESS,
56 | data: res,
57 | });
58 | })
59 | .catch((err) => {
60 | console.error(err);
61 | dispatch({ type: ACTION_TYPES.ADD_IMAGE_GALLERY_FAILURE });
62 | showAlert('upload error', 'Please try again later, or contact your administrator.');
63 | });
64 | })
65 | .catch((err) => {
66 | console.log('UNAUTHORIZED', err.message);
67 | dispatch({ type: ACTION_TYPES.ADD_IMAGE_GALLERY_FAILURE });
68 | });
69 |
70 | }
71 | }
72 | export function deleteGallery(userId, photoIds) {
73 |
74 | return {
75 | type: ACTION_TYPES.DELETE_IMAGE_GALLERY,
76 | request: {
77 | url: `${api.baseURL}/api/user/${userId}/gallery/delete`,
78 | method: 'post',
79 | body: JSON.stringify({photoId: photoIds})
80 | },
81 | }
82 | }
--------------------------------------------------------------------------------
/src/styles/index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @flow
3 | */
4 | import { Typography, Colors, Assets } from 'react-native-ui-lib';
5 | import { Dimensions, Platform } from 'react-native';
6 |
7 | import colors from './colors';
8 | import fonts from './fonts';
9 | import commonStyles from './common';
10 |
11 | const { width } = Dimensions.get('window');
12 |
13 | // Guideline sizes are based on standard ~5" screen mobile device
14 | const guidelineBaseWidth: number = 350;
15 |
16 | Colors.loadColors(colors);
17 |
18 | Typography.loadTypographies({
19 | title: {
20 | fontSize: 35,
21 | ...Platform.select({
22 | ios: {
23 | fontFamily: fonts.primary,
24 | fontWeight: 'bold',
25 | },
26 | android: {
27 | fontFamily: fonts.primaryBold,
28 | },
29 | }),
30 | },
31 | h1: {
32 | fontSize: 34,
33 | ...Platform.select({
34 | ios: {
35 | fontFamily: fonts.primary,
36 | fontWeight: 'bold',
37 | },
38 | android: {
39 | fontFamily: fonts.primaryBold,
40 | },
41 | }),
42 | },
43 | rubik18: {
44 | fontFamily: fonts.primary,
45 | fontSize: 18,
46 | lineHeight: 22,
47 | },
48 | rubik20Bold: {
49 | fontFamily: fonts.primary,
50 | fontSize: 20,
51 | lineHeight: 22,
52 | fontWeight: 'bold',
53 | },
54 | rubik24Bold: {
55 | fontFamily: fonts.primary,
56 | fontSize: 24,
57 | lineHeight: 22,
58 | fontWeight: 'bold',
59 | },
60 | h1Rubik: {
61 | fontSize: 28,
62 | ...Platform.select({
63 | ios: {
64 | fontFamily: fonts.primary,
65 | fontWeight: '500',
66 | },
67 | android: {
68 | fontFamily: fonts.primaryBold,
69 | },
70 | }),
71 | },
72 | h2: {
73 | fontSize: 18,
74 | lineHeight: 22,
75 | fontFamily: fonts.primaryBold,
76 | },
77 | h3: {
78 | fontSize: 16,
79 | lineHeight: 22,
80 | ...Platform.select({
81 | ios: {
82 | fontFamily: fonts.primary,
83 | fontWeight: 'bold',
84 | },
85 | android: {
86 | fontFamily: fonts.primaryBold,
87 | },
88 | }),
89 | },
90 | h4: {
91 | fontSize: 14,
92 | lineHeight: 22,
93 | fontFamily: fonts.primary,
94 | },
95 | p: {
96 | fontSize: 14,
97 | lineHeight: 20,
98 | ...Platform.select({
99 | ios: {
100 | fontFamily: fonts.primary,
101 | fontWeight: '400',
102 | },
103 | android: {
104 | fontFamily: fonts.primaryAndroid,
105 | },
106 | }),
107 | },
108 | default: {
109 | fontFamily: fonts.primary,
110 | fontSize: 18,
111 | },
112 | defaultMedium: {
113 | fontFamily: fonts.primaryMedium,
114 | fontSize: 18,
115 | },
116 | defaultLight: {
117 | fontFamily: fonts.primary,
118 | },
119 | });
120 |
121 | Assets.loadAssetsGroup('images', {});
122 |
123 | Assets.loadAssetsGroup('icons', {});
124 |
125 | const scale = (size: number): number => (width / guidelineBaseWidth) * size;
126 |
127 | export { colors, fonts, scale, commonStyles };
128 |
--------------------------------------------------------------------------------
/plopfile.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable max-len */
2 | module.exports = function(plop) {
3 | plop.setGenerator('module', {
4 | description: 'Generates new module with or without redux connection',
5 | prompts: [
6 | {
7 | type: 'input',
8 | name: 'name',
9 | message: 'Module name (Casing will be modified)'
10 | },
11 | {
12 | type: 'list',
13 | name: 'type',
14 | message: 'Choose Module type',
15 | choices: ['statefull', 'stateless']
16 | }
17 | ],
18 | actions(data) {
19 | const actions = [
20 | {
21 | type: 'add',
22 | path: 'src/modules/{{camelCase name}}/{{properCase name}}View.js',
23 | templateFile: 'generators/module/ModuleView.js.hbs'
24 | },
25 | {
26 | type: 'add',
27 | path:
28 | 'src/modules/{{camelCase name}}/{{properCase name}}ViewContainer.js',
29 | templateFile: 'generators/module/ModuleViewContainer.js.hbs'
30 | }
31 | ];
32 |
33 | if (data.type === 'statefull') {
34 | actions.push({
35 | type: 'add',
36 | path: 'src/modules/{{camelCase name}}/{{properCase name}}State.js',
37 | templateFile: 'generators/module/ModuleState.js.hbs'
38 | });
39 | actions.push({
40 | type: 'modify',
41 | path: 'src/redux/reducer.js',
42 | pattern: /\/\/ ## Generator Reducer Imports/gi,
43 | template:
44 | "// ## Generator Reducer Imports\r\nimport {{camelCase name}} from '../modules/{{camelCase name}}/{{properCase name}}State';"
45 | });
46 | actions.push({
47 | type: 'modify',
48 | path: 'src/redux/reducer.js',
49 | pattern: /\/\/ ## Generator Reducers/gi,
50 | template: '// ## Generator Reducers\r\n {{camelCase name}},'
51 | });
52 | }
53 |
54 | return actions;
55 | }
56 | });
57 |
58 | plop.setGenerator('component', {
59 | description: 'Generates new component',
60 | prompts: [
61 | {
62 | type: 'input',
63 | name: 'name',
64 | message: 'Component name (Casing will be modified)'
65 | }
66 | ],
67 | actions: [
68 | {
69 | type: 'add',
70 | path: 'src/components/{{properCase name}}.js',
71 | templateFile: 'generators/component/Component.js.hbs'
72 | },
73 | {
74 | type: 'add',
75 | path: 'src/components/__tests__/{{properCase name}}.spec.js',
76 | templateFile: 'generators/component/Component.spec.js.hbs'
77 | },
78 | {
79 | type: 'modify',
80 | path: 'src/components/index.js',
81 | pattern: /\/\/ ## Generator Components Imports/gi,
82 | template:
83 | "// ## Generator Components Imports\r\nimport {{properCase name}} from './{{properCase name}}';"
84 | },
85 | {
86 | type: 'modify',
87 | path: 'src/components/index.js',
88 | pattern: /\/\/ ## Generator Components Exports/gi,
89 | template: '// ## Generator Components Exports\r\n {{properCase name}},'
90 | }
91 | ]
92 | });
93 | };
94 |
--------------------------------------------------------------------------------
/src/components/Dropdown.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ModalDropdown from 'react-native-modal-dropdown';
3 | import Icon from 'react-native-vector-icons/FontAwesome';
4 |
5 | import { View, Text } from 'react-native';
6 |
7 | import { colors } from '../styles';
8 |
9 | class RNSDropDown extends React.Component {
10 | static defaultProps = {
11 | placeholder: 'Please Select...',
12 | selectedIndex: -1,
13 | color: colors.primary,
14 | borderColor: colors.primary,
15 | };
16 |
17 | constructor(props) {
18 | super(props);
19 | this.state = {
20 | isOpened: false,
21 | };
22 |
23 | this._openModal = this._openModal.bind(this);
24 | this._closeModal = this._closeModal.bind(this);
25 | }
26 |
27 | _openModal() {
28 | this.setState({ isOpened: true });
29 | }
30 |
31 | _closeModal() {
32 | this.setState({ isOpened: false });
33 | }
34 |
35 | render() {
36 | return (
37 | {
51 | // eslint-disable-next-line no-param-reassign
52 | params.left = 0;
53 | // eslint-disable-next-line no-param-reassign
54 | params.right = 0;
55 | return params;
56 | }}
57 | renderRow={text => (
58 |
59 | {text}
60 |
61 | )}
62 | onSelect={this.props.onSelect}
63 | >
64 |
71 |
72 | {this.props.selectedIndex > -1 &&
73 | this.props.items[this.props.selectedIndex]
74 | ? this.props.items[this.props.selectedIndex]
75 | : this.props.placeholder}
76 |
77 |
83 |
84 |
85 | );
86 | }
87 | }
88 |
89 | const styles = {
90 | container: {
91 | height: 40,
92 | borderWidth: 1,
93 | borderColor: colors.primary,
94 | alignItems: 'center',
95 | justifyContent: 'space-between',
96 | paddingHorizontal: 10,
97 | flexDirection: 'row',
98 | borderRadius: 5,
99 | },
100 | icon: {
101 | marginLeft: 10,
102 | },
103 | };
104 |
105 | export default RNSDropDown;
106 |
--------------------------------------------------------------------------------
/src/actions/PublicUserActions.js:
--------------------------------------------------------------------------------
1 | import { api } from '../config';
2 | import * as ACTION_TYPES from './ActionTypes';
3 | import { AsyncStorage } from 'react-native';
4 | import { showToast } from '../helpers';
5 |
6 | export function loadUserProfile(userId, otherUserId) {
7 | return {
8 | type: ACTION_TYPES.LOAD_PUBLIC_PROFILE,
9 | request: {
10 | url: `${api.baseURL}/api/user/${userId}/profile/${otherUserId}`,
11 | },
12 |
13 | }
14 | }
15 |
16 | export function rateUser(userId, otherUserId, rating) {
17 | let body = {
18 | rating: rating
19 | }
20 | return {
21 | type: ACTION_TYPES.RATE_USER,
22 | request: {
23 | url: `${api.baseURL}/api/review/Rating/${userId}/${otherUserId}`,
24 | method: 'post',
25 | body: JSON.stringify(body)
26 | },
27 | rating
28 | }
29 | }
30 |
31 | export function reportUser(reporter, reported, reason, comment) {
32 | let body = {
33 | reasonReported: reason,
34 | reportComment: comment
35 | }
36 | return {
37 | type: ACTION_TYPES.REPORT_USER,
38 | request: {
39 | url: `${api.baseURL}/api/report/${reporter}/profile/${reported}`,
40 | method: 'post',
41 | body: JSON.stringify(body)
42 | }
43 | }
44 | }
45 | export function blockUser(fromUserId, toUserId) {
46 | return {
47 | type: ACTION_TYPES.BLOCK_USER,
48 | request: {
49 | url: `${api.baseURL}/api/interaction/${fromUserId}/block/${toUserId}`,
50 | method: 'post'
51 | }
52 | }
53 | }
54 |
55 | export function unblockUser(fromUserId, toUserId) {
56 | return {
57 | type: ACTION_TYPES.UNBLOCK_USER,
58 | request: {
59 | url: `${api.baseURL}/api/interaction/${fromUserId}/unblock/${toUserId}`,
60 | method: 'post'
61 | }
62 | }
63 | }
64 |
65 | export function watchUser(fromUserId, toUserId) {
66 | return {
67 | type: ACTION_TYPES.WATCH_USER,
68 | request: {
69 | url: `${api.baseURL}/api/interaction/${fromUserId}/watch/${toUserId}`,
70 | method: 'post'
71 | }
72 | }
73 | }
74 |
75 | export function unwatchUser(fromUserId, toUserId) {
76 | return {
77 | type: ACTION_TYPES.UNWATCH_USER,
78 | request: {
79 | url: `${api.baseURL}/api/interaction/${fromUserId}/unwatch/${toUserId}`,
80 | method: 'post'
81 | }
82 | }
83 | }
84 |
85 | export function boneUser(fromUserId, toUserId) {
86 | return {
87 | type: ACTION_TYPES.BONE_USER,
88 | request: {
89 | url: `${api.baseURL}/api/interaction/${fromUserId}/bone/${toUserId}`,
90 | method: 'post'
91 | }
92 | }
93 | }
94 |
95 | export function unboneUser(fromUserId, toUserId) {
96 | return {
97 | type: ACTION_TYPES.UNBONE_USER,
98 | request: {
99 | url: `${api.baseURL}/api/interaction/${fromUserId}/unbone/${toUserId}`,
100 | method: 'post'
101 | }
102 | }
103 | }
104 |
--------------------------------------------------------------------------------
/src/modules/profile/Profile.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {
3 | StyleSheet,
4 | View,
5 | Text,
6 | Animated,
7 | Image,
8 | Platform,
9 | TouchableOpacity
10 | } from 'react-native';
11 |
12 |
13 | import { connect } from 'react-redux';
14 |
15 | import { calculatePortraitDimension } from '../../helpers';
16 | import { getStatusBarHeight, getBottomSpace } from 'react-native-iphone-x-helper';
17 | import BottomSheet from './components/BottomSheet';
18 | import { ImageView } from '../../components';
19 |
20 | const { height : deviceHeight } = calculatePortraitDimension();
21 |
22 | class Profile extends React.Component {
23 |
24 | constructor(props) {
25 | super(props);
26 | }
27 |
28 | getSettingsButton = () => {
29 | const { settings , user} = this.props.auth;
30 | return
31 | {
33 | this.props.navigation.navigate('Settings', {settings, user});
34 | }}
35 | >
36 |
37 |
38 |
39 |
40 |
41 | }
42 |
43 | render() {
44 | const { user, gallery } = this.props.auth;
45 | return (
46 |
47 |
48 | {
52 | this.props.navigation.navigate("PhotoModal", {shortUrl: user.bigImageUrl})
53 | }}>
54 |
55 |
56 |
57 | {this.getSettingsButton()}
58 |
63 |
64 |
65 |
66 |
67 | )
68 | }
69 | }
70 |
71 | const styles = StyleSheet.create({
72 | container: {
73 | flex: 1,
74 | alignItems: 'center',
75 | justifyContent: 'center',
76 | marginTop: Platform.OS === 'ios' ? getStatusBarHeight(true) : 0,
77 | },
78 | background:{
79 | flex: 1,
80 | backgroundColor:'black'
81 | },
82 | text: {
83 | fontSize: 14,
84 | color: 'white'
85 | },
86 |
87 | panel: {
88 | flex: 1,
89 | backgroundColor: 'white',
90 | position: 'relative'
91 | },
92 | panelHeader: {
93 | height: 120,
94 | backgroundColor: '#b197fc',
95 | alignItems: 'center',
96 | justifyContent: 'center'
97 | },
98 | favoriteIcon: {
99 | position: 'absolute',
100 | top: -24,
101 | right: 24,
102 | backgroundColor: '#2b8a3e',
103 | width: 48,
104 | height: 48,
105 | padding: 8,
106 | borderRadius: 24,
107 | zIndex: 1
108 | },
109 | settingsButton: {
110 | width: 48,
111 | height: 48,
112 |
113 | }
114 | });
115 |
116 | const mapStateToProps = (state) => ({ app: state.app, auth: state.auth });
117 |
118 | export default connect(mapStateToProps)(Profile);
--------------------------------------------------------------------------------
/src/modules/navigation/MainTabNavigator.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable import/no-unresolved */
2 | import React from 'react';
3 | import { Image, View, StyleSheet, Text } from 'react-native';
4 | import { createMaterialTopTabNavigator } from 'react-navigation';
5 | import { getBottomSpace } from 'react-native-iphone-x-helper';
6 |
7 | import { colors, fonts } from '../../styles';
8 |
9 | import Profile from '../profile/Profile';
10 | import Home from '../home/Home';
11 | import Chat from '../chat/Chat';
12 |
13 | const iconProfile = require('../../../assets/images/tab_profile.png');
14 | const iconHome = require('../../../assets/images/tab_bone.png');
15 | const iconChat = require('../../../assets/images/tab_chat.png');
16 |
17 | const styles = StyleSheet.create({
18 | tabBarItemContainer: {
19 | flex: 1,
20 | alignItems: 'center',
21 | justifyContent: 'center',
22 | paddingHorizontal: 10,
23 | },
24 | tabBarIcon: {
25 | width: 23,
26 | height: 23,
27 | },
28 | tabBarIconFocused: {
29 | tintColor: 'red',
30 | },
31 | headerContainer: {
32 | height: 70,
33 | alignItems: 'center',
34 | justifyContent: 'flex-end',
35 | paddingBottom: 10,
36 | },
37 | headerImage: {
38 | position: 'absolute',
39 | top: 0,
40 | left: 0,
41 | right: 0,
42 | bottom: 0,
43 | height: 70,
44 | },
45 | headerCaption: {
46 | fontFamily: fonts.primaryRegular,
47 | color: colors.white,
48 | fontSize: 18,
49 | },
50 | });
51 |
52 | export default createMaterialTopTabNavigator(
53 | {
54 | Profile: {
55 | screen: Profile,
56 | navigationOptions: {
57 | header: null,
58 | },
59 | },
60 | Home: {
61 | screen: Home,
62 | navigationOptions: {
63 | header: null,
64 | },
65 | },
66 | Chat: {
67 | screen: Chat,
68 | navigationOptions: {
69 | title: 'Chats'
70 | },
71 | },
72 | },
73 | {
74 | defaultNavigationOptions: ({ navigation }) => ({
75 | // eslint-disable-next-line react/prop-types
76 | tabBarVisible: navigation.state.routeName != 'Profile' ,
77 | tabBarIcon: ({ focused }) => {
78 | const { routeName } = navigation.state;
79 | let iconSource;
80 | switch (routeName) {
81 | case 'Home':
82 | iconSource = iconHome;
83 | break;
84 | case 'Chat':
85 | iconSource = iconChat;
86 | break;
87 | case 'Profile':
88 | iconSource = iconProfile;
89 | break;
90 | default:
91 | iconHome = iconHome;
92 | }
93 | return (
94 |
95 |
100 |
101 | );
102 | },
103 | }),
104 | initialRouteName:'Home',
105 | tabBarPosition: 'bottom',
106 | animationEnabled: false,
107 | swipeEnabled: true,
108 | tabBarOptions: {
109 | showIcon: true,
110 | showLabel: false,
111 | style: {
112 | backgroundColor: 'black',
113 | borderTopWidth: 0.5,
114 | borderTopColor: 'rgba(255,255,255,0.3)',
115 | paddingBottom: getBottomSpace()
116 | },
117 | labelStyle: {
118 | color: 'white',
119 | },
120 | activeTintColor:'red',
121 | indicatorStyle: {
122 | backgroundColor: 'transparent',
123 | },
124 | },
125 | },
126 | );
127 |
128 |
--------------------------------------------------------------------------------
/src/modules/profile/UploadPhoto.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {
3 | StyleSheet,
4 | View,
5 | Platform,
6 | TouchableOpacity
7 | } from 'react-native';
8 |
9 | import { connect } from 'react-redux';
10 | import { getStatusBarHeight, getBottomSpace } from 'react-native-iphone-x-helper';
11 | import { ImageView, SegmentedControl, LoadingOverlay } from '../../components';
12 | import { colors } from '../../styles';
13 | import { calculatePortraitDimension } from '../../helpers';
14 | const { width : deviceWidth } = calculatePortraitDimension();
15 | import {addGallery} from '../../actions/GalleryActions';
16 |
17 | import Icon from 'react-native-vector-icons/FontAwesome';
18 |
19 | class UploadPhoto extends React.Component {
20 | constructor(props) {
21 | super(props);
22 | this.state={
23 | image: this.props.navigation.getParam('image'),
24 | selectedIndex: 0,
25 |
26 | }
27 | }
28 |
29 | componentWillReceiveProps(nextProps) {
30 | const { user } = this.props.auth;
31 | if(this.props.gallery.success == false && nextProps.gallery.success) {
32 | //upload successed, reload user profile.
33 | this.props.navigation.goBack();
34 | }
35 | }
36 | uploadImage(userId) {
37 | if(this.state.image) {
38 | console.log("upload image:", this.state.image);
39 | let media = {...this.state.image};
40 | media.isPrivate = this.state.selectedIndex == 1;
41 | this.props.dispatch(addGallery(userId, media))
42 | }
43 | }
44 | render() {
45 | const { user } = this.props.auth;
46 | const { gallery, auth } = this.props;
47 | return (
48 |
49 |
50 |
51 |
55 |
56 | {
60 | this.setState({selectedIndex: index})
61 | }}
62 | selectedIndex = {this.state.selectedIndex}
63 | style={{width: 250, height: 50}}
64 | />
65 |
66 | {
70 | this.uploadImage(user.id)
71 | }}>
72 |
73 |
74 |
75 |
76 |
77 | )
78 | }
79 | }
80 |
81 | const styles = StyleSheet.create({
82 | background: {
83 | flex: 1,
84 | backgroundColor: colors.black,
85 | },
86 | container: {
87 | flex: 1,
88 | marginBottom: getBottomSpace()
89 | },
90 |
91 | });
92 |
93 | const mapStateToProps = (state) => ({ app: state.app, auth: state.auth, gallery: state.gallery });
94 |
95 | export default connect(mapStateToProps)(UploadPhoto);
--------------------------------------------------------------------------------
/src/components/PhotoPickerView.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import { View, StyleSheet, Alert, TouchableOpacity, Text,Image } from 'react-native';
3 | import ImagePicker from 'react-native-image-crop-picker';
4 | import ImageView from './ImageView';
5 |
6 | export default class PhotoPickerView extends Component {
7 | constructor(props) {
8 | super(props);
9 | }
10 |
11 | onPickFromGallery = () => {
12 | ImagePicker.openPicker({
13 | width: 1024,
14 | height: 1024,
15 | cropping: true
16 | }).then(image => {
17 | this.updateImage({uri: image.path, width: image.width, height: image.height, mime: image.mime});
18 | });
19 | }
20 | onPickFromCamera = () => {
21 | ImagePicker.openCamera({
22 | width: 1024,
23 | height: 1024,
24 | cropping: true,
25 | }).then(image => {
26 | this.updateImage({uri: image.path, width: image.width, height: image.height, mime: image.mime});
27 | });
28 | }
29 |
30 | onPhotoPick = () => {
31 | let title = this.props.selectPhotoLabel ? this.props.selectPhotoLabel : 'Upload photo';
32 | Alert.alert(
33 | title,
34 | 'Whould you like to upload a photo from the camera or your gallary?',
35 | [
36 | {text: 'Camera', onPress: () => {
37 | this.onPickFromCamera();
38 | }},
39 | {
40 | text: 'Gallery',
41 | onPress: () => {
42 | this.onPickFromGallery();
43 | },
44 |
45 | },
46 | {text: 'Cancel', style: 'cancel'},
47 | ],
48 | {cancelable: false},
49 | );
50 |
51 | }
52 |
53 | updateImage(response) {
54 | const source = { uri: response.uri };
55 | if(this.props.updateImage) {
56 | this.props.updateImage(source);
57 | }
58 | }
59 |
60 | render = () => {
61 | const { imageUrl } = this.props;
62 | console.log("photopickerview", imageUrl);
63 | return (
64 |
65 |
66 |
71 |
72 |
73 | {
76 | this.onPhotoPick();
77 | }}
78 | >
79 |
82 |
83 |
84 |
85 |
86 | );
87 | };
88 | }
89 |
90 | const styles = StyleSheet.create({
91 | container: {
92 | alignSelf:'stretch',
93 | height: 200,
94 | alignItems: 'center',
95 | justifyContent: 'center',
96 | backgroundColor: '#19181a'
97 | },
98 | imageContainer: {
99 | width: 200,
100 | height: 200,
101 | alignItems:'center',
102 | justifyContent:'center'
103 | },
104 | image: {
105 | width:200,
106 | height:200
107 | },
108 | cameraBtn: {
109 | position: 'absolute',
110 | width: 40,
111 | height: 40,
112 | right: 16,
113 | bottom: 16,
114 | justifyContent:'center',
115 | alignItems:'center'
116 | }
117 | });
118 |
119 | const mapStateToProps = (state) => {
120 | const { app } = state;
121 | return { app };
122 | };
123 |
124 |
125 |
--------------------------------------------------------------------------------