├── src
├── Core
│ ├── truly-native
│ │ ├── TNImage
│ │ │ ├── styles.js
│ │ │ └── TNImage.js
│ │ ├── TNVideo
│ │ │ ├── styles.js
│ │ │ └── TNVideo.js
│ │ ├── TNNumberPicker
│ │ │ ├── index.js
│ │ │ ├── assets
│ │ │ │ ├── plus-icon.png
│ │ │ │ └── minus-icon.png
│ │ │ ├── styles.js
│ │ │ └── TNNumberPicker.js
│ │ ├── TNEmptyStateView
│ │ │ ├── index.js
│ │ │ ├── TNEmptyStateView.js
│ │ │ └── styles.js
│ │ ├── TNActivityIndicator
│ │ │ ├── index.js
│ │ │ ├── styles.js
│ │ │ └── TNActivityIndicator.js
│ │ ├── TNMediaViewerModal
│ │ │ └── index.js
│ │ ├── TNColor.js
│ │ ├── TNTouchableIcon
│ │ │ ├── styles.js
│ │ │ └── TNTouchableIcon.js
│ │ ├── TNStoriesTray
│ │ │ ├── styles.js
│ │ │ └── TNStoryItem
│ │ │ │ └── styles.js
│ │ ├── Buttons
│ │ │ ├── IMIconButton
│ │ │ │ └── IMIconButton.js
│ │ │ └── IMDismissButton.js
│ │ ├── TNCard
│ │ │ ├── TNCard.js
│ │ │ └── styles.js
│ │ ├── TNDateUtils.js
│ │ ├── index.js
│ │ └── TNProfilePictureSelector
│ │ │ └── styles.js
│ ├── chat
│ │ ├── IMConversationListView
│ │ │ ├── index.js
│ │ │ ├── styles.js
│ │ │ └── IMConversationListView.js
│ │ ├── audioVideo
│ │ │ ├── twilioServerMiddleware
│ │ │ │ ├── firebase.json
│ │ │ │ ├── functions
│ │ │ │ │ ├── .nvmrc
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── .env.example
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── config.js
│ │ │ │ │ ├── .travis.yml
│ │ │ │ │ ├── tests
│ │ │ │ │ │ └── token_generator.test.js
│ │ │ │ │ ├── package.json
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ └── src
│ │ │ │ │ │ └── tokenGenerator.js
│ │ │ │ ├── .firebaserc
│ │ │ │ └── .gitignore
│ │ │ ├── index.js
│ │ │ ├── twilio
│ │ │ │ ├── api
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── local
│ │ │ │ │ │ └── audioVideo.js
│ │ │ │ ├── index.js
│ │ │ │ ├── AppCallWrapper.js
│ │ │ │ └── pushKit
│ │ │ │ │ └── sendCallInitiationRemoteNotification.js
│ │ │ ├── webRTC
│ │ │ │ ├── api
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── local
│ │ │ │ │ │ ├── tracker.js
│ │ │ │ │ │ └── audioVideo.js
│ │ │ │ ├── index.js
│ │ │ │ ├── AppCallWrapper.js
│ │ │ │ ├── pushKit
│ │ │ │ │ └── sendCallInitiationRemoteNotification.js
│ │ │ │ └── redux
│ │ │ │ │ └── index.js
│ │ │ └── config.js
│ │ ├── IMChat
│ │ │ ├── index.js
│ │ │ ├── TypingIndicator.js
│ │ │ ├── FacePileCircleItem.js
│ │ │ └── IndicatorDot.js
│ │ ├── IMConversationList
│ │ │ ├── index.js
│ │ │ └── styles.js
│ │ ├── IMConversationView
│ │ │ ├── index.js
│ │ │ └── styles.js
│ │ ├── api
│ │ │ ├── firebase
│ │ │ │ └── index.js
│ │ │ ├── index.js
│ │ │ └── local
│ │ │ │ └── channelsTracker.js
│ │ ├── assets
│ │ │ ├── call.png
│ │ │ ├── pause.png
│ │ │ ├── play.png
│ │ │ ├── send.png
│ │ │ ├── speaker.png
│ │ │ ├── borderImg1.png
│ │ │ ├── borderImg2.png
│ │ │ ├── end-call.png
│ │ │ ├── microphone.png
│ │ │ ├── pause-alt.png
│ │ │ ├── phone-call.png
│ │ │ ├── reply-icon.png
│ │ │ ├── close-x-icon.png
│ │ │ ├── camera-filled.png
│ │ │ ├── settings-icon.png
│ │ │ ├── textBorderImg1.png
│ │ │ ├── textBorderImg2.png
│ │ │ └── video-camera-filled.png
│ │ ├── config.js
│ │ ├── index.js
│ │ ├── helpers
│ │ │ └── utils.js
│ │ ├── ui
│ │ │ └── IMChatHomeComponent
│ │ │ │ └── styles.js
│ │ └── redux
│ │ │ └── index.js
│ ├── location
│ │ ├── index.js
│ │ └── utils.js
│ ├── user-reporting
│ │ ├── index.js
│ │ └── redux
│ │ │ ├── index.js
│ │ │ ├── types.js
│ │ │ ├── actions.js
│ │ │ └── reducers.js
│ ├── inAppPurchase
│ │ ├── assets
│ │ │ ├── tick.png
│ │ │ ├── vip_1.png
│ │ │ ├── vip_2.png
│ │ │ ├── fencing.png
│ │ │ ├── fencing2.png
│ │ │ └── vip-pass.png
│ │ ├── context.js
│ │ ├── firebase.js
│ │ └── redux.js
│ ├── notifications
│ │ ├── redux
│ │ │ ├── index.js
│ │ │ ├── types.js
│ │ │ ├── actions.js
│ │ │ └── reducers.js
│ │ ├── index.js
│ │ ├── firebase
│ │ │ └── notification.js
│ │ └── Notification
│ │ │ ├── IMNotification.js
│ │ │ └── styles.js
│ ├── ui
│ │ ├── index.js
│ │ ├── TabBar
│ │ │ ├── Tab.js
│ │ │ ├── TabBar.js
│ │ │ └── styles.js
│ │ ├── SearchBar
│ │ │ └── styles.js
│ │ ├── drawer
│ │ │ └── IMMenuButton
│ │ │ │ ├── IMMenuButton.js
│ │ │ │ └── styles.js
│ │ └── SearchBarAlternate
│ │ │ ├── styles.js
│ │ │ └── SearchBarAlternate.js
│ ├── helpers
│ │ ├── colors.js
│ │ ├── statics.js
│ │ ├── devices.android.js
│ │ ├── timeFormat.js
│ │ ├── retrieveSource.js
│ │ ├── collections.js
│ │ └── devices.ios.js
│ ├── mentions
│ │ ├── index.js
│ │ ├── IMRichTextView
│ │ │ └── styles.js
│ │ ├── IMMentionList
│ │ │ └── styles.js
│ │ ├── IMMentionListItem
│ │ │ ├── styles.js
│ │ │ └── index.js
│ │ └── IMRichTextInput
│ │ │ └── styles.js
│ ├── index.js
│ ├── onboarding
│ │ ├── utils
│ │ │ ├── api
│ │ │ │ ├── index.js
│ │ │ │ └── local
│ │ │ │ │ └── localData.js
│ │ │ └── AuthDeviceStorage.js
│ │ ├── index.js
│ │ ├── redux
│ │ │ └── auth.js
│ │ ├── DelayedLogin
│ │ │ └── DelayedLoginScreen.js
│ │ ├── components
│ │ │ └── TermsOfUseView.js
│ │ ├── WalkthroughScreen
│ │ │ └── styles.js
│ │ └── ResetPasswordScreen
│ │ │ └── styles.js
│ ├── api
│ │ ├── index.js
│ │ └── firebase
│ │ │ ├── config.js
│ │ │ ├── user.js
│ │ │ └── timerConfig.js
│ ├── profile
│ │ ├── index.js
│ │ └── ui
│ │ │ ├── components
│ │ │ ├── IMProfileItemView
│ │ │ │ ├── IMProfileItemView.js
│ │ │ │ └── styles.js
│ │ │ └── IMUserProfileComponent
│ │ │ │ └── styles.js
│ │ │ └── IMProfileSettingsScreen
│ │ │ └── IMProfileSettingsScreen.js
│ ├── users
│ │ └── redux
│ │ │ └── index.js
│ └── localization
│ │ └── IMLocalization.js
├── Translations
│ └── fr.json
├── api
│ ├── index.js
│ └── firebase
│ │ ├── constants.js
│ │ └── utils.js
├── CoreAssets
│ ├── call.png
│ ├── search.png
│ ├── speed.png
│ ├── flash-on.png
│ ├── flash-auto.png
│ ├── flash-off.png
│ ├── play-button.png
│ ├── right-arrow.png
│ ├── camera-rotate.png
│ ├── musical-notes.png
│ ├── settings-icon.png
│ ├── video-camera.png
│ ├── arrow-back-icon.png
│ ├── blocked-user-64.png
│ ├── close-x-icon@1x.png
│ ├── close-x-icon@2x.png
│ ├── contact-us-icon.png
│ ├── default-avatar.jpg
│ ├── dismiss-rounded.png
│ ├── library-landscape.png
│ ├── account-details-icon.png
│ └── hamburger-menu-icon.png
├── redux
│ ├── types.js
│ ├── actions.js
│ ├── index.js
│ └── reducers.js
├── helpers
│ ├── statics.js
│ ├── devices.android.js
│ └── devices.ios.js
├── screens
│ ├── SwipeScreen
│ │ └── styles.js
│ └── ConversationsScreen
│ │ ├── styles.js
│ │ └── ConversationsHomeComponent.js
├── utils.js
└── components
│ ├── swipe
│ └── no_more_card.js
│ ├── ActivityModal.js
│ └── AvatorView.js
├── app.json
├── assets
├── icons
│ ├── vip.png
│ ├── tick.png
│ ├── undo.png
│ ├── menu@1x.png
│ ├── menu@2x.png
│ ├── thumb-up.png
│ ├── delete@1x.png
│ ├── delete@2x.png
│ ├── delete@3x.png
│ ├── thumb-down.png
│ ├── chat-icon@1x.png
│ ├── chat-icon@2x.png
│ ├── chat-icon@3x.png
│ ├── home-icon@1x.png
│ ├── home-icon@2x.png
│ ├── home-icon@3x.png
│ ├── share-icon@1x.png
│ ├── share-icon@2x.png
│ ├── share-icon@3x.png
│ ├── shutdown@1x.png
│ ├── sports-boxing.png
│ ├── blocked-user-64.png
│ ├── camera-icon@1x.png
│ ├── camera-icon@2x.png
│ ├── camera-icon@3x.png
│ ├── checked-icon@1x.png
│ ├── close-x-icon@1x.png
│ ├── close-x-icon@2x.png
│ ├── close-x-icon@3x.png
│ ├── friends-icon@1x.png
│ ├── friends-icon@2x.png
│ ├── friends-icon@3x.png
│ ├── search-icon@1x.png
│ ├── search-icon@2x.png
│ ├── search-icon@3x.png
│ ├── add-user-icon@1x.png
│ ├── add-user-icon@2x.png
│ ├── add-user-icon@3x.png
│ ├── inscription-icon@1x.png
│ ├── inscription-icon@2x.png
│ ├── inscription-icon@3x.png
│ ├── private-chat-icon@1x.png
│ ├── private-chat-icon@2x.png
│ ├── private-chat-icon@3x.png
│ ├── add-user-icon-filled@1x.png
│ ├── add-user-icon-filled@2x.png
│ ├── add-user-icon-filled@3x.png
│ ├── camera-filled-icon@1x.png
│ ├── camera-filled-icon@2x.png
│ └── camera-filled-icon@3x.png
└── images
│ ├── Logo.png
│ ├── chat.png
│ ├── AppIcon.png
│ ├── dislike.png
│ ├── fencing.png
│ ├── vip_1.png
│ ├── vip_2.png
│ ├── MNM_LOGO.png
│ ├── bell-icon.png
│ ├── fencing2.png
│ ├── fire-icon.png
│ ├── instagram.png
│ ├── layerson2.png
│ ├── vip-pass.png
│ ├── borderImg1.png
│ ├── borderImg2.png
│ ├── camera-icon.png
│ ├── notification.png
│ ├── sports-jiu.png
│ ├── sports-mma.png
│ ├── super_like.png
│ ├── user_avatar.png
│ ├── default-avatar.jpg
│ ├── sports-boxing.png
│ ├── textBorderImg1.png
│ ├── textBorderImg2.png
│ ├── workthrough-1.png
│ ├── workthrough-2.png
│ ├── workthrough-3.png
│ ├── workthrough-4.png
│ ├── account-male-icon.png
│ ├── add-photo-icon-1.png
│ ├── arrow-back-icon.png
│ ├── arrow-down-icon.png
│ ├── chat-filled-icon.png
│ ├── contact-call-icon.png
│ ├── cross-filled-icon.png
│ ├── heart-filled-icon.png
│ ├── icons8-delete-100.png
│ ├── icons8-marker-500.png
│ ├── icons8-menu-100.png
│ ├── logout-menu-item.png
│ ├── private-chat-icon.png
│ ├── sports-kickboxing.png
│ ├── star-filled-icon.png
│ ├── star-filled-icon2.png
│ ├── user_alternative.png
│ ├── camera-filled-icon.png
│ ├── educate-school-icon.png
│ ├── person-filled-icon.png
│ ├── settings-menu-item.png
│ ├── icons8-instagram-100.png
│ ├── pinpoint-place-icon-2.png
│ └── three-equal-lines-icon.png
├── babel.config.js
├── .vscode
└── settings.json
├── android
├── app
│ ├── debug.keystore
│ ├── my-upload-key.keystore
│ ├── src
│ │ ├── main
│ │ │ ├── assets
│ │ │ │ ├── fonts
│ │ │ │ │ ├── Entypo.ttf
│ │ │ │ │ ├── Feather.ttf
│ │ │ │ │ ├── Zocial.ttf
│ │ │ │ │ ├── AntDesign.ttf
│ │ │ │ │ ├── EvilIcons.ttf
│ │ │ │ │ ├── Ionicons.ttf
│ │ │ │ │ ├── Octicons.ttf
│ │ │ │ │ ├── FontAwesome.ttf
│ │ │ │ │ ├── Foundation.ttf
│ │ │ │ │ ├── MaterialIcons.ttf
│ │ │ │ │ ├── SimpleLineIcons.ttf
│ │ │ │ │ ├── FontAwesome5_Brands.ttf
│ │ │ │ │ ├── FontAwesome5_Solid.ttf
│ │ │ │ │ ├── FontAwesome5_Regular.ttf
│ │ │ │ │ └── MaterialCommunityIcons.ttf
│ │ │ │ └── index.android.bundle.meta
│ │ │ ├── res
│ │ │ │ ├── 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
│ │ │ │ ├── values
│ │ │ │ │ ├── colors.xml
│ │ │ │ │ ├── strings.xml
│ │ │ │ │ └── styles.xml
│ │ │ │ └── layout
│ │ │ │ │ └── launch_screen.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── mixnmatch
│ │ │ │ ├── generated
│ │ │ │ └── BasePackageList.java
│ │ │ │ ├── videoplayer
│ │ │ │ ├── VideoPlayerPackage.java
│ │ │ │ └── VideoPlayerModule.java
│ │ │ │ ├── MainActivity.java
│ │ │ │ └── launchapplication
│ │ │ │ └── LaunchApplicationPackage.java
│ │ └── debug
│ │ │ └── AndroidManifest.xml
│ ├── proguard-rules.pro
│ ├── build_defs.bzl
│ └── BUCK
├── my-upload-key.keystore
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── keystores
│ ├── debug.keystore.properties
│ └── BUCK
├── settings.gradle
├── gradle.properties
└── build.gradle
├── ios
├── MixnMatch
│ ├── Images.xcassets
│ │ ├── 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
│ │ └── logoicon.appiconset
│ │ │ ├── ItunesArtwork@2x.png
│ │ │ ├── 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
│ │ │ └── Icon-App-83.5x83.5@2x.png
│ ├── SwiftHeader.swift
│ ├── MixnMatch.entitlements
│ ├── main.m
│ ├── AppDelegate.h
│ └── GoogleService-Info.plist
├── mixNmatch-Bridging-Header.h
├── MixnMatch.xcworkspace
│ ├── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── contents.xcworkspacedata
├── MixnMatchTests
│ └── Info.plist
├── MixnMatch-tvOSTests
│ └── Info.plist
├── Podfile
└── MixnMatch-tvOS
│ └── Info.plist
├── .buckconfig
├── .prettierrc.js
├── __tests__
└── App-test.js
├── metro.config.js
├── .editorconfig
├── react-native.config.js
├── .gitignore
└── README.md
/src/Core/truly-native/TNImage/styles.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNVideo/styles.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/Core/chat/IMConversationListView/index.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/Core/chat/IMConversationListView/styles.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/twilioServerMiddleware/firebase.json:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Boxeo",
3 | "displayName": "Boxeo"
4 | }
5 |
--------------------------------------------------------------------------------
/src/Core/chat/IMChat/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './IMChat';
2 |
--------------------------------------------------------------------------------
/src/Core/location/index.js:
--------------------------------------------------------------------------------
1 | export { getDistance } from './utils';
2 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/twilioServerMiddleware/functions/.nvmrc:
--------------------------------------------------------------------------------
1 | v6.10.2
2 |
--------------------------------------------------------------------------------
/src/Translations/fr.json:
--------------------------------------------------------------------------------
1 | {
2 | "hello": "Hello World!"
3 | }
4 |
5 |
--------------------------------------------------------------------------------
/src/Core/chat/IMConversationList/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './IMConversationList';
2 |
--------------------------------------------------------------------------------
/src/Core/chat/IMConversationView/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './IMConversationView';
2 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNNumberPicker/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './TNNumberPicker';
2 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/index.js:
--------------------------------------------------------------------------------
1 | export * from './webRTC';
2 | // export * from './twilio';
3 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNEmptyStateView/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './TNEmptyStateView';
2 |
--------------------------------------------------------------------------------
/assets/icons/vip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/vip.png
--------------------------------------------------------------------------------
/src/Core/truly-native/TNActivityIndicator/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './TNActivityIndicator';
2 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNMediaViewerModal/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './TNMediaViewerModal';
2 |
--------------------------------------------------------------------------------
/src/api/index.js:
--------------------------------------------------------------------------------
1 | import SwipeTracker from './firebase/tracker';
2 |
3 | export { SwipeTracker };
4 |
--------------------------------------------------------------------------------
/assets/icons/tick.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/tick.png
--------------------------------------------------------------------------------
/assets/icons/undo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/undo.png
--------------------------------------------------------------------------------
/assets/images/Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/Logo.png
--------------------------------------------------------------------------------
/assets/images/chat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/chat.png
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ['module:metro-react-native-babel-preset'],
3 | };
4 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "editor.formatOnSave": true,
3 | "prettier.eslintIntegration": true
4 | }
5 |
--------------------------------------------------------------------------------
/assets/icons/menu@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/menu@1x.png
--------------------------------------------------------------------------------
/assets/icons/menu@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/menu@2x.png
--------------------------------------------------------------------------------
/assets/icons/thumb-up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/thumb-up.png
--------------------------------------------------------------------------------
/assets/images/AppIcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/AppIcon.png
--------------------------------------------------------------------------------
/assets/images/dislike.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/dislike.png
--------------------------------------------------------------------------------
/assets/images/fencing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/fencing.png
--------------------------------------------------------------------------------
/assets/images/vip_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/vip_1.png
--------------------------------------------------------------------------------
/assets/images/vip_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/vip_2.png
--------------------------------------------------------------------------------
/src/CoreAssets/call.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/call.png
--------------------------------------------------------------------------------
/src/CoreAssets/search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/search.png
--------------------------------------------------------------------------------
/src/CoreAssets/speed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/speed.png
--------------------------------------------------------------------------------
/android/app/debug.keystore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/debug.keystore
--------------------------------------------------------------------------------
/assets/icons/delete@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/delete@1x.png
--------------------------------------------------------------------------------
/assets/icons/delete@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/delete@2x.png
--------------------------------------------------------------------------------
/assets/icons/delete@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/delete@3x.png
--------------------------------------------------------------------------------
/assets/icons/thumb-down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/thumb-down.png
--------------------------------------------------------------------------------
/assets/images/MNM_LOGO.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/MNM_LOGO.png
--------------------------------------------------------------------------------
/assets/images/bell-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/bell-icon.png
--------------------------------------------------------------------------------
/assets/images/fencing2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/fencing2.png
--------------------------------------------------------------------------------
/assets/images/fire-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/fire-icon.png
--------------------------------------------------------------------------------
/assets/images/instagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/instagram.png
--------------------------------------------------------------------------------
/assets/images/layerson2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/layerson2.png
--------------------------------------------------------------------------------
/assets/images/vip-pass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/vip-pass.png
--------------------------------------------------------------------------------
/src/Core/chat/api/firebase/index.js:
--------------------------------------------------------------------------------
1 | import * as channelManager from './channel';
2 | export { channelManager };
3 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/twilioServerMiddleware/functions/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | npm-debug.log
3 | node_modules
4 |
--------------------------------------------------------------------------------
/src/Core/user-reporting/index.js:
--------------------------------------------------------------------------------
1 | import * as reportingManager from './firebase';
2 | export { reportingManager };
3 |
--------------------------------------------------------------------------------
/src/CoreAssets/flash-on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/flash-on.png
--------------------------------------------------------------------------------
/android/my-upload-key.keystore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/my-upload-key.keystore
--------------------------------------------------------------------------------
/assets/icons/chat-icon@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/chat-icon@1x.png
--------------------------------------------------------------------------------
/assets/icons/chat-icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/chat-icon@2x.png
--------------------------------------------------------------------------------
/assets/icons/chat-icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/chat-icon@3x.png
--------------------------------------------------------------------------------
/assets/icons/home-icon@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/home-icon@1x.png
--------------------------------------------------------------------------------
/assets/icons/home-icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/home-icon@2x.png
--------------------------------------------------------------------------------
/assets/icons/home-icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/home-icon@3x.png
--------------------------------------------------------------------------------
/assets/icons/share-icon@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/share-icon@1x.png
--------------------------------------------------------------------------------
/assets/icons/share-icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/share-icon@2x.png
--------------------------------------------------------------------------------
/assets/icons/share-icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/share-icon@3x.png
--------------------------------------------------------------------------------
/assets/icons/shutdown@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/shutdown@1x.png
--------------------------------------------------------------------------------
/assets/icons/sports-boxing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/sports-boxing.png
--------------------------------------------------------------------------------
/assets/images/borderImg1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/borderImg1.png
--------------------------------------------------------------------------------
/assets/images/borderImg2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/borderImg2.png
--------------------------------------------------------------------------------
/assets/images/camera-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/camera-icon.png
--------------------------------------------------------------------------------
/assets/images/notification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/notification.png
--------------------------------------------------------------------------------
/assets/images/sports-jiu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/sports-jiu.png
--------------------------------------------------------------------------------
/assets/images/sports-mma.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/sports-mma.png
--------------------------------------------------------------------------------
/assets/images/super_like.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/super_like.png
--------------------------------------------------------------------------------
/assets/images/user_avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/user_avatar.png
--------------------------------------------------------------------------------
/src/Core/chat/assets/call.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/chat/assets/call.png
--------------------------------------------------------------------------------
/src/Core/chat/assets/pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/chat/assets/pause.png
--------------------------------------------------------------------------------
/src/Core/chat/assets/play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/chat/assets/play.png
--------------------------------------------------------------------------------
/src/Core/chat/assets/send.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/chat/assets/send.png
--------------------------------------------------------------------------------
/src/CoreAssets/flash-auto.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/flash-auto.png
--------------------------------------------------------------------------------
/src/CoreAssets/flash-off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/flash-off.png
--------------------------------------------------------------------------------
/src/CoreAssets/play-button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/play-button.png
--------------------------------------------------------------------------------
/src/CoreAssets/right-arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/right-arrow.png
--------------------------------------------------------------------------------
/assets/icons/blocked-user-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/blocked-user-64.png
--------------------------------------------------------------------------------
/assets/icons/camera-icon@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/camera-icon@1x.png
--------------------------------------------------------------------------------
/assets/icons/camera-icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/camera-icon@2x.png
--------------------------------------------------------------------------------
/assets/icons/camera-icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/camera-icon@3x.png
--------------------------------------------------------------------------------
/assets/icons/checked-icon@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/checked-icon@1x.png
--------------------------------------------------------------------------------
/assets/icons/close-x-icon@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/close-x-icon@1x.png
--------------------------------------------------------------------------------
/assets/icons/close-x-icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/close-x-icon@2x.png
--------------------------------------------------------------------------------
/assets/icons/close-x-icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/close-x-icon@3x.png
--------------------------------------------------------------------------------
/assets/icons/friends-icon@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/friends-icon@1x.png
--------------------------------------------------------------------------------
/assets/icons/friends-icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/friends-icon@2x.png
--------------------------------------------------------------------------------
/assets/icons/friends-icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/friends-icon@3x.png
--------------------------------------------------------------------------------
/assets/icons/search-icon@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/search-icon@1x.png
--------------------------------------------------------------------------------
/assets/icons/search-icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/search-icon@2x.png
--------------------------------------------------------------------------------
/assets/icons/search-icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/search-icon@3x.png
--------------------------------------------------------------------------------
/assets/images/default-avatar.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/default-avatar.jpg
--------------------------------------------------------------------------------
/assets/images/sports-boxing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/sports-boxing.png
--------------------------------------------------------------------------------
/assets/images/textBorderImg1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/textBorderImg1.png
--------------------------------------------------------------------------------
/assets/images/textBorderImg2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/textBorderImg2.png
--------------------------------------------------------------------------------
/assets/images/workthrough-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/workthrough-1.png
--------------------------------------------------------------------------------
/assets/images/workthrough-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/workthrough-2.png
--------------------------------------------------------------------------------
/assets/images/workthrough-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/workthrough-3.png
--------------------------------------------------------------------------------
/assets/images/workthrough-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/workthrough-4.png
--------------------------------------------------------------------------------
/src/Core/chat/assets/speaker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/chat/assets/speaker.png
--------------------------------------------------------------------------------
/src/CoreAssets/camera-rotate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/camera-rotate.png
--------------------------------------------------------------------------------
/src/CoreAssets/musical-notes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/musical-notes.png
--------------------------------------------------------------------------------
/src/CoreAssets/settings-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/settings-icon.png
--------------------------------------------------------------------------------
/src/CoreAssets/video-camera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/video-camera.png
--------------------------------------------------------------------------------
/android/app/my-upload-key.keystore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/my-upload-key.keystore
--------------------------------------------------------------------------------
/assets/icons/add-user-icon@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/add-user-icon@1x.png
--------------------------------------------------------------------------------
/assets/icons/add-user-icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/add-user-icon@2x.png
--------------------------------------------------------------------------------
/assets/icons/add-user-icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/add-user-icon@3x.png
--------------------------------------------------------------------------------
/assets/images/account-male-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/account-male-icon.png
--------------------------------------------------------------------------------
/assets/images/add-photo-icon-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/add-photo-icon-1.png
--------------------------------------------------------------------------------
/assets/images/arrow-back-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/arrow-back-icon.png
--------------------------------------------------------------------------------
/assets/images/arrow-down-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/arrow-down-icon.png
--------------------------------------------------------------------------------
/assets/images/chat-filled-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/chat-filled-icon.png
--------------------------------------------------------------------------------
/assets/images/contact-call-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/contact-call-icon.png
--------------------------------------------------------------------------------
/assets/images/cross-filled-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/cross-filled-icon.png
--------------------------------------------------------------------------------
/assets/images/heart-filled-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/heart-filled-icon.png
--------------------------------------------------------------------------------
/assets/images/icons8-delete-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/icons8-delete-100.png
--------------------------------------------------------------------------------
/assets/images/icons8-marker-500.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/icons8-marker-500.png
--------------------------------------------------------------------------------
/assets/images/icons8-menu-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/icons8-menu-100.png
--------------------------------------------------------------------------------
/assets/images/logout-menu-item.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/logout-menu-item.png
--------------------------------------------------------------------------------
/assets/images/private-chat-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/private-chat-icon.png
--------------------------------------------------------------------------------
/assets/images/sports-kickboxing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/sports-kickboxing.png
--------------------------------------------------------------------------------
/assets/images/star-filled-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/star-filled-icon.png
--------------------------------------------------------------------------------
/assets/images/star-filled-icon2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/star-filled-icon2.png
--------------------------------------------------------------------------------
/assets/images/user_alternative.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/user_alternative.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/src/Core/chat/assets/borderImg1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/chat/assets/borderImg1.png
--------------------------------------------------------------------------------
/src/Core/chat/assets/borderImg2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/chat/assets/borderImg2.png
--------------------------------------------------------------------------------
/src/Core/chat/assets/end-call.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/chat/assets/end-call.png
--------------------------------------------------------------------------------
/src/Core/chat/assets/microphone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/chat/assets/microphone.png
--------------------------------------------------------------------------------
/src/Core/chat/assets/pause-alt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/chat/assets/pause-alt.png
--------------------------------------------------------------------------------
/src/Core/chat/assets/phone-call.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/chat/assets/phone-call.png
--------------------------------------------------------------------------------
/src/Core/chat/assets/reply-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/chat/assets/reply-icon.png
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/twilioServerMiddleware/.firebaserc:
--------------------------------------------------------------------------------
1 | {
2 | "projects": {
3 | "staging": "socialape-e8afb"
4 | }
5 | }
--------------------------------------------------------------------------------
/src/CoreAssets/arrow-back-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/arrow-back-icon.png
--------------------------------------------------------------------------------
/src/CoreAssets/blocked-user-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/blocked-user-64.png
--------------------------------------------------------------------------------
/src/CoreAssets/close-x-icon@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/close-x-icon@1x.png
--------------------------------------------------------------------------------
/src/CoreAssets/close-x-icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/close-x-icon@2x.png
--------------------------------------------------------------------------------
/src/CoreAssets/contact-us-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/contact-us-icon.png
--------------------------------------------------------------------------------
/src/CoreAssets/default-avatar.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/default-avatar.jpg
--------------------------------------------------------------------------------
/src/CoreAssets/dismiss-rounded.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/dismiss-rounded.png
--------------------------------------------------------------------------------
/assets/icons/inscription-icon@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/inscription-icon@1x.png
--------------------------------------------------------------------------------
/assets/icons/inscription-icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/inscription-icon@2x.png
--------------------------------------------------------------------------------
/assets/icons/inscription-icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/inscription-icon@3x.png
--------------------------------------------------------------------------------
/assets/icons/private-chat-icon@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/private-chat-icon@1x.png
--------------------------------------------------------------------------------
/assets/icons/private-chat-icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/private-chat-icon@2x.png
--------------------------------------------------------------------------------
/assets/icons/private-chat-icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/private-chat-icon@3x.png
--------------------------------------------------------------------------------
/assets/images/camera-filled-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/camera-filled-icon.png
--------------------------------------------------------------------------------
/assets/images/educate-school-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/educate-school-icon.png
--------------------------------------------------------------------------------
/assets/images/person-filled-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/person-filled-icon.png
--------------------------------------------------------------------------------
/assets/images/settings-menu-item.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/settings-menu-item.png
--------------------------------------------------------------------------------
/src/Core/chat/assets/close-x-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/chat/assets/close-x-icon.png
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/twilioServerMiddleware/functions/.env.example:
--------------------------------------------------------------------------------
1 | TWILIO_ACCOUNT_SID=
2 | TWILIO_API_KEY=
3 | TWILIO_API_SECRET=
4 |
--------------------------------------------------------------------------------
/src/Core/user-reporting/redux/index.js:
--------------------------------------------------------------------------------
1 | export { userReports } from './reducers';
2 | export { setBannedUserIDs } from './actions';
3 |
--------------------------------------------------------------------------------
/src/CoreAssets/library-landscape.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/library-landscape.png
--------------------------------------------------------------------------------
/assets/icons/add-user-icon-filled@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/add-user-icon-filled@1x.png
--------------------------------------------------------------------------------
/assets/icons/add-user-icon-filled@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/add-user-icon-filled@2x.png
--------------------------------------------------------------------------------
/assets/icons/add-user-icon-filled@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/add-user-icon-filled@3x.png
--------------------------------------------------------------------------------
/assets/icons/camera-filled-icon@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/camera-filled-icon@1x.png
--------------------------------------------------------------------------------
/assets/icons/camera-filled-icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/camera-filled-icon@2x.png
--------------------------------------------------------------------------------
/assets/icons/camera-filled-icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/icons/camera-filled-icon@3x.png
--------------------------------------------------------------------------------
/assets/images/icons8-instagram-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/icons8-instagram-100.png
--------------------------------------------------------------------------------
/assets/images/pinpoint-place-icon-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/pinpoint-place-icon-2.png
--------------------------------------------------------------------------------
/assets/images/three-equal-lines-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/assets/images/three-equal-lines-icon.png
--------------------------------------------------------------------------------
/src/Core/chat/assets/camera-filled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/chat/assets/camera-filled.png
--------------------------------------------------------------------------------
/src/Core/chat/assets/settings-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/chat/assets/settings-icon.png
--------------------------------------------------------------------------------
/src/Core/chat/assets/textBorderImg1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/chat/assets/textBorderImg1.png
--------------------------------------------------------------------------------
/src/Core/chat/assets/textBorderImg2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/chat/assets/textBorderImg2.png
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/twilio/api/index.js:
--------------------------------------------------------------------------------
1 | import apiManager from './firebase/audioVideo';
2 | import tracker from './firebase/tracker';
3 |
--------------------------------------------------------------------------------
/src/Core/inAppPurchase/assets/tick.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/inAppPurchase/assets/tick.png
--------------------------------------------------------------------------------
/src/Core/inAppPurchase/assets/vip_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/inAppPurchase/assets/vip_1.png
--------------------------------------------------------------------------------
/src/Core/inAppPurchase/assets/vip_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/inAppPurchase/assets/vip_2.png
--------------------------------------------------------------------------------
/src/CoreAssets/account-details-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/account-details-icon.png
--------------------------------------------------------------------------------
/src/CoreAssets/hamburger-menu-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/CoreAssets/hamburger-menu-icon.png
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/src/Core/inAppPurchase/assets/fencing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/inAppPurchase/assets/fencing.png
--------------------------------------------------------------------------------
/src/Core/inAppPurchase/assets/fencing2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/inAppPurchase/assets/fencing2.png
--------------------------------------------------------------------------------
/src/Core/inAppPurchase/assets/vip-pass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/inAppPurchase/assets/vip-pass.png
--------------------------------------------------------------------------------
/.buckconfig:
--------------------------------------------------------------------------------
1 |
2 | [android]
3 | target = Google Inc.:Google APIs:23
4 |
5 | [maven_repositories]
6 | central = https://repo1.maven.org/maven2
7 |
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Entypo.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/assets/fonts/Entypo.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Feather.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/assets/fonts/Feather.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Zocial.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/assets/fonts/Zocial.ttf
--------------------------------------------------------------------------------
/ios/mixNmatch-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | //
2 | // Use this file to import your target's public headers that you would like to expose to Swift.
3 | //
4 |
5 |
--------------------------------------------------------------------------------
/src/Core/chat/assets/video-camera-filled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/chat/assets/video-camera-filled.png
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/AntDesign.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/assets/fonts/AntDesign.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/EvilIcons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/assets/fonts/EvilIcons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Ionicons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/assets/fonts/Ionicons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Octicons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/assets/fonts/Octicons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/FontAwesome.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/assets/fonts/FontAwesome.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Foundation.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/assets/fonts/Foundation.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/MaterialIcons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/assets/fonts/MaterialIcons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/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/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/keystores/debug.keystore.properties:
--------------------------------------------------------------------------------
1 | key.store=debug.keystore
2 | key.alias=androiddebugkey
3 | key.store.password=android
4 | key.alias.password=android
5 |
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/SimpleLineIcons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/assets/fonts/SimpleLineIcons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/index.android.bundle.meta:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/assets/index.android.bundle.meta
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/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/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/FontAwesome5_Brands.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/assets/fonts/FontAwesome5_Brands.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf
--------------------------------------------------------------------------------
/src/Core/truly-native/TNNumberPicker/assets/plus-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/truly-native/TNNumberPicker/assets/plus-icon.png
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/FontAwesome5_Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/assets/fonts/FontAwesome5_Regular.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/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/bradjin8/MixNMatch-Fighting/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/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/src/Core/truly-native/TNNumberPicker/assets/minus-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/src/Core/truly-native/TNNumberPicker/assets/minus-icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/src/Core/notifications/redux/index.js:
--------------------------------------------------------------------------------
1 | export { notifications } from './reducers';
2 | export {
3 | setNotifications,
4 | setNotificationListenerDidSubscribe,
5 | } from './actions';
6 |
--------------------------------------------------------------------------------
/.prettierrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | bracketSpacing: true,
3 | jsxBracketSameLine: true,
4 | singleQuote: true,
5 | tabWidth: 2,
6 | trailingComma: 'all',
7 | semi: true,
8 | };
9 |
--------------------------------------------------------------------------------
/src/Core/user-reporting/redux/types.js:
--------------------------------------------------------------------------------
1 | const IMUserReportingActionsConstants = {
2 | SET_BANNED_USER_IDS: 'SET_BANNED_USER_IDS',
3 | };
4 |
5 | export default IMUserReportingActionsConstants;
6 |
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/logoicon.appiconset/ItunesArtwork@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/logoicon.appiconset/ItunesArtwork@2x.png
--------------------------------------------------------------------------------
/android/keystores/BUCK:
--------------------------------------------------------------------------------
1 | keystore(
2 | name = "debug",
3 | properties = "debug.keystore.properties",
4 | store = "debug.keystore",
5 | visibility = [
6 | "PUBLIC",
7 | ],
8 | )
9 |
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #000000
4 | #eb5a6d
5 |
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bradjin8/MixNMatch-Fighting/HEAD/ios/MixnMatch/Images.xcassets/logoicon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/src/api/firebase/constants.js:
--------------------------------------------------------------------------------
1 | const SwipeType = {
2 | like: 'like',
3 | outbound: 'superlike',
4 | reciprocal: 'dislike',
5 | };
6 |
7 | export const SwipeConstants = {
8 | SwipeType,
9 | };
10 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/twilioServerMiddleware/functions/index.js:
--------------------------------------------------------------------------------
1 | require('dotenv').config();
2 | const tokenGenerator = require('./src/tokenGenerator');
3 |
4 | exports.getTwilioAccessToken = tokenGenerator;
5 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/webRTC/api/index.js:
--------------------------------------------------------------------------------
1 | import * as apiManager from './firebase/audioVideo';
2 | import MediaChatTracker from './firebase/tracker';
3 | export { MediaChatTracker };
4 | export default apiManager;
5 |
--------------------------------------------------------------------------------
/src/Core/ui/index.js:
--------------------------------------------------------------------------------
1 | export { default as TabBarBuilder } from './TabBar/TabBar';
2 | export { default as SearchBar } from './SearchBar/SearchBar';
3 | export { default as IMDrawerMenu } from './drawer/IMDrawerMenu/IMDrawerMenu';
4 |
--------------------------------------------------------------------------------
/src/Core/user-reporting/redux/actions.js:
--------------------------------------------------------------------------------
1 | import IMUserReportingActionsConstants from './types';
2 |
3 | export const setBannedUserIDs = (data) => ({
4 | type: IMUserReportingActionsConstants.SET_BANNED_USER_IDS,
5 | data,
6 | });
7 |
--------------------------------------------------------------------------------
/src/Core/notifications/redux/types.js:
--------------------------------------------------------------------------------
1 | const IMNotificationActionsConstants = {
2 | SET_NOTIFICATIONS: 'SET_NOTIFICATIONS',
3 | DID_SUBSCRIBE: 'DID_SUBSCRIBE_TO_NOTIFICATIONS',
4 | };
5 |
6 | export default IMNotificationActionsConstants;
7 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Mix n Match
3 | 285315185217069
4 | fb285315185217069
5 |
6 |
--------------------------------------------------------------------------------
/src/Core/helpers/colors.js:
--------------------------------------------------------------------------------
1 | import { Appearance } from 'react-native-appearance';
2 |
3 | export const modedColor = (lightModeColor, darkModeColor) => {
4 | return Appearance.getColorScheme() === 'dark'
5 | ? darkModeColor
6 | : lightModeColor;
7 | };
8 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/twilio/index.js:
--------------------------------------------------------------------------------
1 | export { default as IMAudioVideoChat } from './IMAudioVideoChat';
2 | export { default as AppCallWrapper } from './AppCallWrapper';
3 | export * from './pushKit/sendCallInitiationRemoteNotification';
4 | export * from './redux';
5 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/webRTC/index.js:
--------------------------------------------------------------------------------
1 | export { default as IMAudioVideoChat } from './IMAudioVideoChat';
2 | export { default as AppCallWrapper } from './AppCallWrapper';
3 | export * from './pushKit/sendCallInitiationRemoteNotification';
4 | export * from './redux';
5 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/twilioServerMiddleware/functions/config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | TWILIO_ACCOUNT_SID: 'AC00fe742eba2bc869e7aa23de1029ef60',
3 | TWILIO_API_KEY: 'SK5c263dc292f2c58257702f0108b2780c',
4 | TWILIO_API_SECRET: 'jyR3fWurAGCEbPVfAlelQQiTh3EJ1fpP',
5 | };
6 |
--------------------------------------------------------------------------------
/src/redux/types.js:
--------------------------------------------------------------------------------
1 | const IMSwipeActionsConstants = {
2 | SET_SWIPES: 'SET_SWIPES',
3 | SET_MATCHES: 'SET_MATCHES',
4 | SET_INCOMING_SWIPES: 'SET_INCOMING_SWIPES',
5 | DID_SUBSCRIBE_TO_SWIPES: 'DID_SUBSCRIBE_TO_SWIPES',
6 | };
7 |
8 | export default IMSwipeActionsConstants;
9 |
--------------------------------------------------------------------------------
/src/Core/mentions/index.js:
--------------------------------------------------------------------------------
1 | export * from './IMRichTextInput/EditorUtils';
2 | export { default as IMRichTextInput } from './IMRichTextInput';
3 | export { default as IMMentionList } from './IMMentionList';
4 | export { default as IMRichTextView } from './IMRichTextView/IMRichTextView';
5 |
--------------------------------------------------------------------------------
/ios/MixnMatch/SwiftHeader.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwiftHeader.swift
3 | // Instadating
4 | //
5 | // Created by Florian Marcu on 9/10/20.
6 | // Copyright © 2020 Instamobile Code SRL. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class SwiftHeader: NSObject {
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/Core/chat/config.js:
--------------------------------------------------------------------------------
1 | const callID = 'E621E1F8-C36C-495A-93FC-0C247A3E6E5F';
2 |
3 | const pushKitEndpoint =
4 | 'https://us-central1-production-a9404.cloudfunctions.net/initiateChatCall';
5 |
6 | const iOSBundleID = 'io.instamobile.chat.rn.ios';
7 |
8 | export { callID, pushKitEndpoint, iOSBundleID };
9 |
--------------------------------------------------------------------------------
/src/Core/notifications/index.js:
--------------------------------------------------------------------------------
1 | export { default as IMNotificationScreen } from './IMNotificationScreen/IMNotificationScreen';
2 | export { notificationManager } from './firebase/notificationManager';
3 |
4 | import * as firebaseNotification from './firebase/notification';
5 | export { firebaseNotification };
6 |
--------------------------------------------------------------------------------
/ios/MixnMatch.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/twilioServerMiddleware/functions/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - 'stable'
4 | env:
5 | global:
6 | - TWILIO_ACCOUNT_SID=AC00fe742eba2bc869e7aa23de1029ef60
7 | - TWILIO_API_KEY=SK5c263dc292f2c58257702f0108b2780c
8 | - TWILIO_API_SECRET=jyR3fWurAGCEbPVfAlelQQiTh3EJ1fpP
9 |
--------------------------------------------------------------------------------
/src/helpers/statics.js:
--------------------------------------------------------------------------------
1 | import { Dimensions, Platform } from 'react-native';
2 |
3 | export const DEVICE_WIDTH = Dimensions.get('window').width;
4 | export const DEVICE_HEIGHT = Dimensions.get('window').height;
5 |
6 | export const IS_ANDROID = Platform.OS === 'android';
7 |
8 | export const LOCAL_STORAGE_KEY = 'mid5LocalStorage';
9 |
--------------------------------------------------------------------------------
/__tests__/App-test.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @format
3 | */
4 | import 'react-native';
5 | import React from 'react';
6 | import App from '../App';
7 | // Note: test renderer must be required after react-native.
8 | import renderer from 'react-test-renderer';
9 | it('renders correctly', () => {
10 | renderer.create();
11 | });
12 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/Core/helpers/statics.js:
--------------------------------------------------------------------------------
1 | import { Dimensions, Platform } from 'react-native';
2 |
3 | export const DEVICE_WIDTH = Dimensions.get('window').width;
4 | export const DEVICE_HEIGHT = Dimensions.get('window').height;
5 |
6 | export const IS_ANDROID = Platform.OS === 'android';
7 |
8 | export const LOCAL_STORAGE_KEY = 'mid5LocalStorage';
9 |
--------------------------------------------------------------------------------
/src/Core/inAppPurchase/context.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | export const IAPContext = React.createContext({
4 | processing: false,
5 | setProcessing: () => {},
6 | activePlan: 0,
7 | subscriptionVisible: false,
8 | setSubscriptionVisible: () => {},
9 | });
10 |
11 | export const useIap = () => React.useContext(IAPContext);
12 |
--------------------------------------------------------------------------------
/src/Core/index.js:
--------------------------------------------------------------------------------
1 | export { default as tabBarBuilder } from './ui/TabBar/TabBar';
2 | export { default as SearchBarAlternate } from './ui/SearchBarAlternate/SearchBarAlternate';
3 | export { default as SearchBar } from './ui/SearchBar/SearchBar';
4 | export { removeFromCollection, groupBy } from './helpers/collections';
5 | export { timeFormat } from './helpers/timeFormat';
6 |
--------------------------------------------------------------------------------
/src/Core/notifications/redux/actions.js:
--------------------------------------------------------------------------------
1 | import IMNotificationActionsConstants from './types';
2 |
3 | export const setNotifications = (data) => ({
4 | type: IMNotificationActionsConstants.SET_NOTIFICATIONS,
5 | data,
6 | });
7 |
8 | export const setNotificationListenerDidSubscribe = () => ({
9 | type: IMNotificationActionsConstants.DID_SUBSCRIBE,
10 | });
11 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/config.js:
--------------------------------------------------------------------------------
1 | // export const TWILIO_SERVER_ENDPOINT =
2 | // 'https://glacial-peak-35311.herokuapp.com';
3 | export const TWILIO_SERVER_ENDPOINT =
4 | 'https://us-central1-socialape-e8afb.cloudfunctions.net/getTwilioAccessToken';
5 | // export const TWILIO_SERVER_ENDPOINT =
6 | // 'https://us-central1-production-a9404.cloudfunctions.net/getTwilioAccessToken';
7 |
--------------------------------------------------------------------------------
/metro.config.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Metro configuration for React Native
3 | * https://github.com/facebook/react-native
4 | *
5 | * @format
6 | */
7 | module.exports = {
8 | transformer: {
9 | getTransformOptions: async () => ({
10 | transform: {
11 | experimentalImportSupport: false,
12 | inlineRequires: false,
13 | },
14 | }),
15 | },
16 | };
17 |
--------------------------------------------------------------------------------
/src/Core/onboarding/utils/api/index.js:
--------------------------------------------------------------------------------
1 | // Uncomment these if you want to remove firebase and add your own custom backend:
2 | // import authManager from './local/localAuthManager';
3 | // export { authManager };
4 |
5 |
6 | // Remove these lines if you want to remove firebase and add your own custom backend:
7 | import authManager from './firebase/firebaseAuthManager';
8 | export { authManager };
9 |
--------------------------------------------------------------------------------
/ios/MixnMatch.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig helps developers define and maintain consistent
2 | # coding styles between different editors and IDEs
3 | # editorconfig.org
4 |
5 | root = true
6 |
7 |
8 | [*]
9 | indent_style = space
10 | indent_size = 2
11 | end_of_line = lf
12 | charset = utf-8
13 | trim_trailing_whitespace = true
14 | insert_final_newline = true
15 |
16 | [*.md]
17 | trim_trailing_whitespace = false
18 |
19 |
--------------------------------------------------------------------------------
/src/Core/chat/index.js:
--------------------------------------------------------------------------------
1 | export { default as IMChatScreen } from './IMChatScreen/IMChatScreen';
2 | export { default as IMConversationListView } from './IMConversationListView/IMConversationListView';
3 | export { default as IMConversationIconView } from './IMConversationView/IMConversationIconView/IMConversationIconView';
4 | export { default as IMChatHomeComponent } from './ui/IMChatHomeComponent/IMChatHomeComponent';
5 |
--------------------------------------------------------------------------------
/ios/MixnMatch/MixnMatch.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | aps-environment
6 | development
7 | com.apple.developer.applesignin
8 |
9 | Default
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/helpers/devices.android.js:
--------------------------------------------------------------------------------
1 | import { Dimensions } from 'react-native';
2 |
3 | const device = Dimensions.get('window');
4 | let scale;
5 |
6 | if (device.width <= 414) {
7 | // Android smartphones
8 | scale = device.width / 414;
9 | } else {
10 | // Android tablets
11 | scale = 1;
12 | }
13 |
14 | module.exports = {
15 | scale,
16 | size: function size(pixel) {
17 | return Math.ceil(pixel * scale);
18 | },
19 | };
20 |
--------------------------------------------------------------------------------
/src/Core/helpers/devices.android.js:
--------------------------------------------------------------------------------
1 | import { Dimensions } from 'react-native';
2 |
3 | const device = Dimensions.get('window');
4 | let scale;
5 |
6 | if (device.width <= 414) {
7 | // Android smartphones
8 | scale = device.width / 414;
9 | } else {
10 | // Android tablets
11 | scale = 1;
12 | }
13 |
14 | module.exports = {
15 | scale,
16 | size: function size(pixel) {
17 | return Math.ceil(pixel * scale);
18 | },
19 | };
20 |
--------------------------------------------------------------------------------
/src/Core/helpers/timeFormat.js:
--------------------------------------------------------------------------------
1 | import moment from 'moment';
2 |
3 | export const timeFormat = (timeStamp) => {
4 | if (timeStamp) {
5 | if (moment(timeStamp).isValid()) {
6 | return '';
7 | }
8 | if (moment().diff(moment.unix(timeStamp.seconds), 'days') == 0) {
9 | return moment.unix(timeStamp.seconds).format('H:mm');
10 | }
11 | return moment.unix(timeStamp.seconds).fromNow();
12 | }
13 | return ' ';
14 | };
15 |
--------------------------------------------------------------------------------
/src/Core/user-reporting/redux/reducers.js:
--------------------------------------------------------------------------------
1 | import IMUserReportingActionsConstants from './types';
2 |
3 | const initialState = {
4 | bannedUserIDs: null,
5 | };
6 |
7 | export const userReports = (state = initialState, action) => {
8 | switch (action.type) {
9 | case IMUserReportingActionsConstants.SET_BANNED_USER_IDS:
10 | return { ...state, bannedUserIDs: [...action.data] };
11 | default:
12 | return state;
13 | }
14 | };
15 |
--------------------------------------------------------------------------------
/ios/MixnMatch/main.m:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015-present, Facebook, Inc.
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/Core/helpers/retrieveSource.js:
--------------------------------------------------------------------------------
1 | import { Platform } from 'react-native';
2 |
3 | exports.extractSourceFromFile = (file) => {
4 | const mime = file.mime || file.type;
5 | const source = file.path || file.uri;
6 | const uploadUri =
7 | Platform.OS === 'ios' ? source.replace('file://', '') : source;
8 | const filename =
9 | new Date() + '-' + source.substring(source.lastIndexOf('/') + 1);
10 |
11 | return { ...file, filename, source, uploadUri, mime };
12 | };
13 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNColor.js:
--------------------------------------------------------------------------------
1 | import invert from 'invert-color';
2 | import { Appearance } from 'react-native-appearance';
3 |
4 | const TNColor = (hexStringColor) => {
5 | return invert(hexStringColor);
6 | };
7 | // const TNColor = hexStringColor => {
8 | // const colorScheme = Appearance.getColorScheme();
9 | // if (colorScheme === 'dark') {
10 | // return invert(hexStringColor);
11 | // }
12 | // return hexStringColor;
13 | // };
14 | export default TNColor;
15 |
--------------------------------------------------------------------------------
/src/Core/onboarding/utils/api/local/localData.js:
--------------------------------------------------------------------------------
1 | const dummyPhoneNumber = 22323232323;
2 |
3 | const mockData = {
4 | id: '113311313',
5 | userID: '113311313',
6 | stripeCustomerID: 'addddvvd',
7 | phone: dummyPhoneNumber,
8 | email: 'jane@doe.com',
9 | firstName: 'Jane',
10 | lastName: 'Doe',
11 | profilePictureURL:
12 | 'https://static2.thethingsimages.com/wordpress/wp-content/uploads/2020/05/15-Sickest-Concept-Cars-In-2020-1.jpg',
13 | };
14 |
15 | export { mockData };
16 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'mixNmatch'
2 | apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
3 | apply from: '../node_modules/react-native-unimodules/gradle.groovy'
4 | includeUnimodulesProjects()
5 | include ':react-native-twilio-video-webrtc'
6 | project(':react-native-twilio-video-webrtc').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-twilio-video-webrtc/android')
7 |
8 | include ':app'
9 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNTouchableIcon/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet } from 'react-native';
2 |
3 | const dynamicStyles = (appStyles, colorScheme) => {
4 | return StyleSheet.create({
5 | headerButtonContainer: {
6 | padding: 10,
7 | },
8 | Image: {
9 | width: 25,
10 | height: 25,
11 | margin: 6,
12 | },
13 | title: {
14 | color: appStyles.colorSet[colorScheme].mainTextColor,
15 | fontSize: 12,
16 | },
17 | });
18 | };
19 |
20 | export default dynamicStyles;
21 |
--------------------------------------------------------------------------------
/src/Core/chat/api/index.js:
--------------------------------------------------------------------------------
1 | // Uncomment these if you want to remove firebase and add your own custom backend:
2 | // import * as channelManager from './local/channel';
3 | // import ChannelsTracker from './local/channelsTracker';
4 | // export { channelManager, ChannelsTracker };
5 |
6 |
7 | // Remove these lines if you want to remove firebase and add your own custom backend:
8 | import * as channelManager from './firebase/channel';
9 | import ChannelsTracker from './firebase/channelsTracker';
10 | export { channelManager, ChannelsTracker };
11 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNStoriesTray/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet } from 'react-native';
2 |
3 | const dynamicStyles = (appStyles, colorScheme) => {
4 | return StyleSheet.create({
5 | storiesContainer: {
6 | backgroundColor: appStyles.colorSet[colorScheme].mainThemeBackgroundColor,
7 | marginBottom: 5,
8 | flexDirection: 'row',
9 | },
10 | seenStyle: {
11 | borderColor: appStyles.colorSet[colorScheme].grey,
12 | borderWidth: 1,
13 | },
14 | });
15 | };
16 |
17 | export default dynamicStyles;
18 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/twilioServerMiddleware/functions/tests/token_generator.test.js:
--------------------------------------------------------------------------------
1 | const jwt = require('jsonwebtoken');
2 | const tokenGenerator = require('../src/token_generator');
3 |
4 | test('generates a new token', () => {
5 | const identity = 'alice';
6 | const room = 'example';
7 |
8 | const token = tokenGenerator(identity, room);
9 | const decoded = jwt.decode(token, { complete: true });
10 |
11 | expect(decoded).toHaveProperty('payload.grants', {
12 | identity: identity,
13 | video: { room: room },
14 | });
15 | });
16 |
--------------------------------------------------------------------------------
/src/Core/mentions/IMRichTextView/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet } from 'react-native';
2 |
3 | const styles = StyleSheet.create({
4 | url: {
5 | color: 'blue',
6 | textDecorationLine: 'underline',
7 | },
8 |
9 | email: {
10 | textDecorationLine: 'underline',
11 | },
12 |
13 | phone: {
14 | color: 'blue',
15 | textDecorationLine: 'underline',
16 | },
17 | username: {
18 | color: 'blue',
19 | },
20 |
21 | hashTag: {
22 | color: 'blue',
23 | fontStyle: 'italic',
24 | },
25 | });
26 |
27 | export default styles;
28 |
--------------------------------------------------------------------------------
/src/redux/actions.js:
--------------------------------------------------------------------------------
1 | import IMSwipeActionsConstants from './types';
2 |
3 | export const setSwipes = (data) => ({
4 | type: IMSwipeActionsConstants.SET_SWIPES,
5 | data,
6 | });
7 |
8 | export const setMatches = (data) => ({
9 | type: IMSwipeActionsConstants.SET_MATCHES,
10 | data,
11 | });
12 |
13 | export const setIncomingSwipes = (data) => ({
14 | type: IMSwipeActionsConstants.SET_INCOMING_SWIPES,
15 | data,
16 | });
17 |
18 | export const setSwipesListenerDidSubscribe = () => ({
19 | type: IMSwipeActionsConstants.DID_SUBSCRIBE_TO_SWIPES,
20 | });
21 |
--------------------------------------------------------------------------------
/src/Core/chat/IMChat/TypingIndicator.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { View } from 'react-native';
3 | import IndicatorDot from './IndicatorDot';
4 |
5 | export function TypingIndicator(props) {
6 | const { dotRadius, containerStyle } = props;
7 |
8 | return (
9 |
10 |
11 |
12 |
13 |
14 | );
15 | }
16 |
17 | export default TypingIndicator;
18 |
--------------------------------------------------------------------------------
/src/Core/mentions/IMMentionList/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet } from 'react-native';
2 |
3 | const dynamicStyles = (colorScheme, appStyles) => {
4 | return new StyleSheet.create({
5 | usersMentionContainer: {
6 | ...StyleSheet.absoluteFillObject,
7 | backgroundColor: appStyles.colorSet[colorScheme].whiteSmoke,
8 | },
9 | usersMentionScrollContainer: {
10 | flex: 1,
11 | },
12 | loaderContainer: {
13 | justifyContent: 'center',
14 | alignItems: 'center',
15 | },
16 | });
17 | };
18 |
19 | export default dynamicStyles;
20 |
--------------------------------------------------------------------------------
/src/Core/truly-native/Buttons/IMIconButton/IMIconButton.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Image, TouchableOpacity } from 'react-native';
3 |
4 | function IMIconButton(props) {
5 | const { tintColor, onPress, source, marginRight, width, height } = props;
6 | return (
7 |
8 |
12 |
13 | );
14 | }
15 |
16 | export default IMIconButton;
17 |
--------------------------------------------------------------------------------
/src/Core/chat/helpers/utils.js:
--------------------------------------------------------------------------------
1 | import { IMLocalized } from '../../localization/IMLocalization';
2 |
3 | const formatMessage = (message) => {
4 | if (message?.mime?.startsWith('video')) {
5 | return IMLocalized('Someone sent a video.');
6 | } else if (message?.mime?.startsWith('audio')) {
7 | return IMLocalized('Someone sent an audio.');
8 | } else if (message?.mime?.startsWith('image')) {
9 | return IMLocalized('Someone sent a photo.');
10 | } else if (message) {
11 | return message;
12 | }
13 | return '';
14 | };
15 |
16 | export { formatMessage };
17 |
--------------------------------------------------------------------------------
/android/app/src/main/res/layout/launch_screen.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
14 |
--------------------------------------------------------------------------------
/src/Core/helpers/collections.js:
--------------------------------------------------------------------------------
1 | export const removeFromCollection = (
2 | collection,
3 | collectionPropertyToCompare,
4 | propertyFieldToRemove,
5 | ) => {
6 | return collection.filter((collectionItem) => {
7 | return (
8 | collectionItem[collectionPropertyToCompare] !== propertyFieldToRemove
9 | );
10 | });
11 | };
12 |
13 | export const groupBy = (key) => (array) =>
14 | array.reduce((objectsByKeyValue, obj) => {
15 | const value = obj[key];
16 | objectsByKeyValue[value] = (objectsByKeyValue[value] || []).concat(obj);
17 | return objectsByKeyValue;
18 | }, {});
19 |
--------------------------------------------------------------------------------
/src/Core/api/index.js:
--------------------------------------------------------------------------------
1 | // Uncomment these if you want to remove firebase and add your own custom backend:
2 | // import storageAPI from './local/storage';
3 | // import * as authAPI from './local/auth';
4 | // import * as userAPIManager from './local/user';
5 | // export { storageAPI, authAPI, userAPIManager };
6 |
7 |
8 | // Remove these lines if you want to remove firebase and add your own custom backend:
9 | import storageAPI from './firebase/storage';
10 | import * as authAPI from './firebase/auth';
11 | import * as userAPIManager from './firebase/user';
12 | export { storageAPI, authAPI, userAPIManager };
13 |
--------------------------------------------------------------------------------
/ios/MixnMatch/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 | #import
10 | #import
11 |
12 | @interface AppDelegate : UIResponder
13 |
14 | @property (nonatomic, strong) UMModuleRegistryAdapter *moduleRegistryAdapter;
15 | @property (nonatomic, strong) UIWindow *window;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/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 | -keep class org.webrtc.** { *; }
13 | -keep class com.twilio.** { *; }
14 | -keep class tvi.webrtc.** { *; }
15 |
16 |
--------------------------------------------------------------------------------
/src/screens/SwipeScreen/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet } from 'react-native';
2 | import DynamicAppStyles from '../../DynamicAppStyles';
3 |
4 | const dynamicStyles = (colorScheme) => {
5 | return StyleSheet.create({
6 | container: {
7 | flex: 1,
8 | backgroundColor:
9 | DynamicAppStyles.colorSet[colorScheme].secondaryForegroundColor,
10 | height: '100%',
11 | },
12 | safeAreaContainer: {
13 | flex: 1,
14 | backgroundColor:
15 | DynamicAppStyles.colorSet[colorScheme].mainThemeBackgroundColor,
16 | },
17 | });
18 | };
19 |
20 | export default dynamicStyles;
21 |
--------------------------------------------------------------------------------
/src/helpers/devices.ios.js:
--------------------------------------------------------------------------------
1 | import { Dimensions } from 'react-native';
2 |
3 | const device = Dimensions.get('window');
4 | let calculatedScale;
5 |
6 | switch (device.width) {
7 | // iPhone 4, 4S, 5, 5S
8 | case 320:
9 | calculatedScale = 0.77;
10 | break;
11 | // iPhone 6, 6S
12 | case 375:
13 | calculatedScale = 0.902;
14 | break;
15 | // iPhone 6 plus, 6S plus
16 | case 414:
17 | calculatedScale = 1;
18 | break;
19 | default:
20 | calculatedScale = 1;
21 | }
22 |
23 | export const scale = calculatedScale;
24 | export const size = (pixel) => Math.ceil(pixel * calculatedScale);
25 |
--------------------------------------------------------------------------------
/src/Core/helpers/devices.ios.js:
--------------------------------------------------------------------------------
1 | import { Dimensions } from 'react-native';
2 |
3 | const device = Dimensions.get('window');
4 | let calculatedScale;
5 |
6 | switch (device.width) {
7 | // iPhone 4, 4S, 5, 5S
8 | case 320:
9 | calculatedScale = 0.77;
10 | break;
11 | // iPhone 6, 6S
12 | case 375:
13 | calculatedScale = 0.902;
14 | break;
15 | // iPhone 6 plus, 6S plus
16 | case 414:
17 | calculatedScale = 1;
18 | break;
19 | default:
20 | calculatedScale = 1;
21 | }
22 |
23 | export const scale = calculatedScale;
24 | export const size = (pixel) => Math.ceil(pixel * calculatedScale);
25 |
--------------------------------------------------------------------------------
/src/Core/notifications/redux/reducers.js:
--------------------------------------------------------------------------------
1 | import IMNotificationActionsConstants from './types';
2 |
3 | const initialState = {
4 | notifications: null,
5 | };
6 |
7 | export const notifications = (state = initialState, action) => {
8 | switch (action.type) {
9 | case IMNotificationActionsConstants.SET_NOTIFICATIONS:
10 | return { ...state, notifications: [...action.data] };
11 | case IMNotificationActionsConstants.DID_SUBSCRIBE:
12 | return { ...state, didSubscribeToNotifications: true };
13 | case 'LOG_OUT':
14 | return initialState;
15 | default:
16 | return state;
17 | }
18 | };
19 |
--------------------------------------------------------------------------------
/src/Core/profile/index.js:
--------------------------------------------------------------------------------
1 | export { default as IMEditProfileScreen } from './ui/IMEditProfileScreen/IMEditProfileScreen';
2 | export { default as IMUserSettingsScreen } from './ui/IMUserSettingsScreen/IMUserSettingsScreen';
3 | export { default as IMContactUsScreen } from './ui/IMContactUsScreen/IMContactUsScreen';
4 | export { default as IMUserProfileComponent } from './ui/components/IMUserProfileComponent/IMUserProfileComponent';
5 | export { default as IMProfileSettingsScreen } from './ui/IMProfileSettingsScreen/IMProfileSettingsScreen';
6 | export { default as IMBlockedUsersScreen } from './ui/IMBlockedUsersScreen/IMBlockedUsersScreen';
7 |
--------------------------------------------------------------------------------
/src/redux/index.js:
--------------------------------------------------------------------------------
1 | import { combineReducers } from 'redux';
2 | import { auth } from '../Core/onboarding/redux/auth';
3 | import { chat } from '../Core/chat/redux';
4 | import { userReports } from '../Core/user-reporting/redux';
5 | import { dating } from './reducers';
6 | import { audioVideoChat } from '../Core/chat/audioVideo';
7 | import { inAppPurchase } from '../Core/inAppPurchase/redux';
8 | import { users } from '../Core/users/redux';
9 |
10 | const AppReducer = combineReducers({
11 | auth,
12 | userReports,
13 | chat,
14 | dating,
15 | audioVideoChat,
16 | inAppPurchase,
17 | users,
18 | });
19 |
20 | export default AppReducer;
21 |
--------------------------------------------------------------------------------
/src/Core/onboarding/index.js:
--------------------------------------------------------------------------------
1 | export { default as LoadScreen } from './LoadScreen/LoadScreen';
2 | export { default as WalkthroughScreen } from './WalkthroughScreen/WalkthroughScreen';
3 | export { default as WelcomeScreen } from './WelcomeScreen/WelcomeScreen';
4 | export { default as SignupScreen } from './SignupScreen/SignupScreen';
5 | export { default as LoginScreen } from './LoginScreen/LoginScreen';
6 | export { default as SmsAuthenticationScreen } from './SmsAuthenticationScreen/SmsAuthenticationScreen';
7 | export { default as ResetPasswordScreen } from './ResetPasswordScreen/ResetPasswordScreen';
8 | export { default as DelayedLoginScreen } from './DelayedLogin/DelayedLoginScreen'
9 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNCard/TNCard.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { TouchableHighlight, View } from 'react-native';
3 | import dynamicStyles from './styles';
4 |
5 | const TNCard = ({ containerStyle, radius, onPress, appStyles, children }) => {
6 | const styles = dynamicStyles(appStyles);
7 |
8 | const containerStyles = [
9 | styles.tnCardContainer,
10 | radius && { borderRadius: radius },
11 | styles.tnCardShadow,
12 | containerStyle,
13 | ];
14 |
15 | return (
16 |
17 | {children}
18 |
19 | );
20 | };
21 |
22 | export default TNCard;
23 |
--------------------------------------------------------------------------------
/android/app/build_defs.bzl:
--------------------------------------------------------------------------------
1 | """Helper definitions to glob .aar and .jar targets"""
2 | def create_aar_targets(aarfiles):
3 | for aarfile in aarfiles:
4 | name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")]
5 | lib_deps.append(":" + name)
6 | android_prebuilt_aar(
7 | name = name,
8 | aar = aarfile,
9 | )
10 | def create_jar_targets(jarfiles):
11 | for jarfile in jarfiles:
12 | name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")]
13 | lib_deps.append(":" + name)
14 | prebuilt_jar(
15 | name = name,
16 | binary_jar = jarfile,
17 | )
18 |
--------------------------------------------------------------------------------
/src/screens/ConversationsScreen/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet } from 'react-native';
2 |
3 | const dynamicStyles = (colorScheme, appStyles) => {
4 | return StyleSheet.create({
5 | container: {
6 | flex: 1,
7 | backgroundColor: appStyles.colorSet[colorScheme].mainThemeBackgroundColor,
8 | },
9 | userImageContainer: {
10 | borderWidth: 0,
11 | },
12 | chatsChannelContainer: {
13 | // flex: 1,
14 | padding: 10,
15 | },
16 | content: {
17 | flexDirection: 'row',
18 | },
19 | message: {
20 | flex: 2,
21 | color: appStyles.colorSet[colorScheme].mainSubtextColor,
22 | },
23 | });
24 | };
25 |
26 | export default dynamicStyles;
27 |
--------------------------------------------------------------------------------
/src/utils.js:
--------------------------------------------------------------------------------
1 | import { AsyncStorage } from 'react-native';
2 |
3 | const AWARE_CAN_UNDO_SWIPE = 'AWARE_CAN_UNDO_SWIPE';
4 |
5 | export const isDatingProfileCompleteForUser = (user) => {
6 | return (
7 | user.profilePictureURL &&
8 | user.profilePictureURL.length > 0 &&
9 | user.age &&
10 | user.bio &&
11 | user.school &&
12 | user.firstName
13 | );
14 | };
15 |
16 | export const getUserAwareCanUndoAsync = async () => {
17 | const isUserAware = await AsyncStorage.getItem(AWARE_CAN_UNDO_SWIPE);
18 |
19 | if (isUserAware !== null) {
20 | return true;
21 | } else {
22 | await AsyncStorage.setItem(AWARE_CAN_UNDO_SWIPE, 'true');
23 |
24 | return false;
25 | }
26 | };
27 |
--------------------------------------------------------------------------------
/src/Core/chat/ui/IMChatHomeComponent/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet } from 'react-native';
2 |
3 | const dynamicStyles = (appStyles, colorScheme) => {
4 | return StyleSheet.create({
5 | container: {
6 | flex: 1,
7 | backgroundColor: appStyles.colorSet[colorScheme].mainThemeBackgroundColor,
8 | },
9 | userImageContainer: {
10 | borderWidth: 0,
11 | },
12 | chatsChannelContainer: {
13 | // flex: 1,
14 | padding: 10,
15 | },
16 | content: {
17 | flexDirection: 'row',
18 | },
19 | message: {
20 | flex: 2,
21 | color: appStyles.colorSet[colorScheme].mainSubtextColor,
22 | },
23 | });
24 | };
25 |
26 | export default dynamicStyles;
27 |
--------------------------------------------------------------------------------
/src/Core/onboarding/redux/auth.js:
--------------------------------------------------------------------------------
1 | const UPDATE_USER = 'UPDATE_USER';
2 | const LOG_OUT = 'LOG_OUT';
3 |
4 | export const DUMMY_USER_DATA = {};
5 |
6 | export const setUserData = (data) => ({
7 | type: UPDATE_USER,
8 | data,
9 | });
10 |
11 | export const logout = () => ({
12 | type: LOG_OUT,
13 | });
14 |
15 | const initialState = {
16 | user: DUMMY_USER_DATA,
17 | };
18 |
19 | export const auth = (state = initialState, action) => {
20 | switch (action.type) {
21 | case UPDATE_USER:
22 | return {
23 | ...state,
24 | user: action.data.user,
25 | };
26 | case LOG_OUT: {
27 | return initialState;
28 | }
29 | default:
30 | return state;
31 | }
32 | };
33 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/webRTC/api/local/tracker.js:
--------------------------------------------------------------------------------
1 | export default class MediaChatTracker {
2 | /**
3 | *
4 | * @param {store} reduxStore redux store to dispatch actions
5 | * @param {String} userID user ID of the current user
6 | * @param {Number} chatTimeout the timeout for the call
7 | */
8 | constructor(reduxStore, userID, chatTimeout) {
9 | //initialize redux store
10 | }
11 |
12 | /**
13 | *
14 | * @param {boolean} shouldClean whether to clean signal collection
15 | */
16 | async subscribe(shouldClean = true) {
17 | // subscribe to videochat and audiochat
18 | // subscribe to videochatModal and audiochatModal
19 | }
20 |
21 | unsubscribe = () => {
22 | //usnsubscribe from all listeners
23 | };
24 | }
25 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNVideo/TNVideo.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useState } from 'react';
2 | import { Video } from 'expo-av';
3 | import { loadCachedItem } from '../../helpers/cacheManager';
4 |
5 | export default function TNVideo(props) {
6 | const {
7 | source: { uri },
8 | videoRef,
9 | ...otherProps
10 | } = props;
11 |
12 | const [cachedUri, setCachedUri] = useState(null);
13 |
14 | useEffect(() => {
15 | setCachedUri(uri);
16 | (async () => {
17 | const video = await loadCachedItem({ uri });
18 | await setCachedUri(video);
19 | })();
20 | }, [uri]);
21 |
22 | return (
23 |
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/src/api/firebase/utils.js:
--------------------------------------------------------------------------------
1 | import { FriendshipConstants } from '../constants';
2 |
3 | export const filteredNonFriendshipsFromUsers = (
4 | keyword,
5 | users,
6 | friendships,
7 | ) => {
8 | var filteredUsers = users;
9 | if (keyword && keyword.length > 0) {
10 | filteredUsers = users.filter((user) => {
11 | return (
12 | user.firstName &&
13 | user.firstName.toLowerCase().indexOf(keyword.toLowerCase()) >= 0
14 | );
15 | });
16 | }
17 | filteredUsers = filteredUsers.filter(
18 | (user) => !friendships.find((friendship) => friendship.user.id == user.id),
19 | );
20 | return filteredUsers.map((user) => {
21 | return {
22 | user: user,
23 | type: FriendshipConstants.FriendshipType.none,
24 | };
25 | });
26 | };
27 |
--------------------------------------------------------------------------------
/src/Core/users/redux/index.js:
--------------------------------------------------------------------------------
1 | const SET_USERS = 'SET_USERS';
2 | const DID_SUBSCRIBE_TO_USERS = 'DID_SUBSCRIBE_TO_USERS';
3 |
4 | export const setUsers = (data) => ({
5 | type: SET_USERS,
6 | data,
7 | });
8 |
9 | export const setUsersListenerDidSubscribe = (data) => ({
10 | type: DID_SUBSCRIBE_TO_USERS,
11 | data,
12 | });
13 |
14 | const initialState = {
15 | users: null,
16 | didSubscribeToUsers: false,
17 | };
18 |
19 | export const users = (state = initialState, action) => {
20 | switch (action.type) {
21 | case DID_SUBSCRIBE_TO_USERS:
22 | return {
23 | ...state,
24 | didSubscribeToUsers: true,
25 | };
26 | case SET_USERS:
27 | return { ...state, users: [...action.data] };
28 | default:
29 | return state;
30 | }
31 | };
32 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNNumberPicker/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet } from 'react-native';
2 |
3 | const dynamicStyles = (appStyles, colorScheme) => {
4 | const colorSet = appStyles.colorSet[colorScheme];
5 |
6 | return StyleSheet.create({
7 | containerView: {
8 | backgroundColor: colorSet.mainThemeBackgroundColor,
9 | flex: 1,
10 | flexDirection: 'row',
11 | },
12 | buttonContainer: {
13 | marginLeft: 20,
14 | marginRight: 20,
15 | },
16 | title: {
17 | fontSize: 24,
18 | fontWeight: 'bold',
19 | color: colorSet.mainTextColor,
20 | },
21 | buttonImage: {
22 | width: 32,
23 | height: 32,
24 | tintColor: colorSet.mainThemeForegroundColor,
25 | },
26 | });
27 | };
28 |
29 | export default dynamicStyles;
30 |
--------------------------------------------------------------------------------
/react-native.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | dependencies: {
3 | 'react-native-twilio-video-webrtc': {
4 | platforms: {
5 | android: null, // enable/disable react-native-twilio-video-webrtc on Android platform.
6 | },
7 | },
8 | 'react-native-webrtc': {
9 | platforms: {
10 | // android: null, // enable/disable react-native-webrtc on Android platform.
11 | },
12 | },
13 | },
14 | project: {
15 | ios: {},
16 | android: {}, // grouped into "project"
17 | },
18 | assets: ['./assets/fonts/'], // stays the same
19 | };
20 |
21 | // Please note that for Android platform, you must comment out one of react-native-twilio-video-webrtc or react-native-webrtc to use the other.
22 | // A dependency conflict will occur on Android platform if you do not comment out one of the two.
23 |
--------------------------------------------------------------------------------
/src/Core/ui/TabBar/Tab.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { TouchableOpacity, Image } from 'react-native';
3 |
4 | import dynamicStyles from './styles';
5 | import { useColorScheme } from 'react-native-appearance';
6 |
7 | function Tab({ route, onPress, focus, tabIcons, appStyles }) {
8 | const colorScheme = useColorScheme();
9 | const styles = dynamicStyles(appStyles, colorScheme);
10 | return (
11 |
12 |
21 |
22 | );
23 | }
24 |
25 | export default Tab;
26 |
--------------------------------------------------------------------------------
/src/Core/inAppPurchase/firebase.js:
--------------------------------------------------------------------------------
1 | import { firebase } from '../api/firebase/config';
2 |
3 | const db = firebase.firestore();
4 | const subscriptionsRef = db.collection('subscriptions');
5 |
6 | export const updateUserSubscription = async (userID, subscriptionPlan) => {
7 | subscriptionsRef.doc(userID).set({ ...subscriptionPlan }, { merge: true });
8 | };
9 |
10 | export const getUserSubscription = async (userID) => {
11 | try {
12 | const subscription = await subscriptionsRef.doc(userID).get();
13 |
14 | if (subscription.data()) {
15 | return {
16 | sucess: true,
17 | subscription: { ...subscription.data(), id: subscription.id },
18 | };
19 | }
20 |
21 | return { sucess: false };
22 | } catch (error) {
23 | console.log(error);
24 |
25 | return { sucess: false, error };
26 | }
27 | };
28 |
--------------------------------------------------------------------------------
/ios/MixnMatchTests/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/Core/location/utils.js:
--------------------------------------------------------------------------------
1 | export const getDistance = (lat1, lon1, lat2, lon2, unit = 'M') => {
2 | if (lat1 == lat2 && lon1 == lon2) {
3 | return 0;
4 | } else {
5 | const radlat1 = (Math.PI * lat1) / 180;
6 | const radlat2 = (Math.PI * lat2) / 180;
7 | const theta = lon1 - lon2;
8 | const radtheta = (Math.PI * theta) / 180;
9 | let dist =
10 | Math.sin(radlat1) * Math.sin(radlat2) +
11 | Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
12 |
13 | if (dist > 1) {
14 | dist = 1;
15 | }
16 |
17 | dist = Math.acos(dist);
18 | dist = (dist * 180) / Math.PI;
19 | dist = dist * 60 * 1.1515;
20 |
21 | if (unit == 'K') {
22 | dist = dist * 1.609344;
23 | }
24 |
25 | if (unit == 'N') {
26 | dist = dist * 0.8684;
27 | }
28 | return dist;
29 | }
30 | };
31 |
--------------------------------------------------------------------------------
/src/Core/onboarding/DelayedLogin/DelayedLoginScreen.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import WelcomeScreen from '../WelcomeScreen/WelcomeScreen';
3 |
4 | export default function DelayedLoginScreen(props) {
5 |
6 | const appConfig = props.route?.params?.appConfig || props.appConfig;
7 | const authManager = props.route?.params?.authManager || props.authManager;
8 | const appStyles = props.route?.params?.appStyles || props.appStyles;
9 |
10 | return(
11 |
20 | )
21 | }
--------------------------------------------------------------------------------
/src/Core/chat/IMChat/FacePileCircleItem.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Animated } from 'react-native';
3 | import FastImage from 'react-native-fast-image';
4 |
5 | export default function FacePileCircleItem(props) {
6 | const { imageStyle, circleSize, face, offset, dynamicStyle } = props;
7 | const innerCircleSize = circleSize * 2;
8 | const marginRight = circleSize * offset;
9 |
10 | return (
11 |
12 |
24 |
25 | );
26 | }
27 |
--------------------------------------------------------------------------------
/src/Core/truly-native/Buttons/IMDismissButton.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import { TouchableOpacity, Image } from 'react-native';
3 | import PropTypes from 'prop-types';
4 |
5 | const dismissImage = require('../../../CoreAssets/dismiss-rounded.png');
6 |
7 | export default class IMDismissButton extends Component {
8 | render() {
9 | return (
10 |
11 |
20 |
21 | );
22 | }
23 | }
24 |
25 | IMDismissButton.propTypes = {
26 | style: PropTypes.object,
27 | onPress: PropTypes.func,
28 | };
29 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNActivityIndicator/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet } from 'react-native';
2 |
3 | const styles = (appStyles, colorScheme) =>
4 | StyleSheet.create({
5 | container: {
6 | flex: 1,
7 | alignItems: 'center',
8 | justifyContent: 'center',
9 | backgroundColor: 'rgba(0, 0, 0, 0.04)',
10 | position: 'absolute',
11 | top: 0,
12 | right: 0,
13 | left: 0,
14 | bottom: 0,
15 | },
16 | indicatorContainer: {
17 | width: 100,
18 | height: 100,
19 | borderRadius: 10,
20 | backgroundColor: 'rgba(52, 52, 52, 0.7)',
21 | alignItems: 'center',
22 | justifyContent: 'center',
23 | position: 'absolute',
24 | },
25 | text: {
26 | color: 'white',
27 | fontSize: 15,
28 | marginBottom: 20,
29 | },
30 | });
31 |
32 | export default styles;
33 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/twilio/AppCallWrapper.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { connect } from 'react-redux';
3 | import { View } from 'react-native';
4 | import IMAudioVideoChat from './IMAudioVideoChat';
5 |
6 | const AppCallWrapper = (MainComponent) => {
7 | const Component = ({ user, audioVideoChatConfig, ...otherProps }) => {
8 | return (
9 |
10 |
11 | {(user.email || user.phone) && (
12 |
13 | )}
14 |
15 | );
16 | };
17 |
18 | const mapStateToProps = ({ auth, audioVideoChat }) => {
19 | return {
20 | user: auth.user,
21 | audioVideoChatConfig: audioVideoChat,
22 | };
23 | };
24 |
25 | return connect(mapStateToProps)(Component);
26 | };
27 |
28 | export default AppCallWrapper;
29 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/webRTC/AppCallWrapper.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { connect } from 'react-redux';
3 | import { View } from 'react-native';
4 | import IMAudioVideoChat from './IMAudioVideoChat';
5 |
6 | const AppCallWrapper = (MainComponent) => {
7 | const Component = ({ user, audioVideoChatConfig, ...otherProps }) => {
8 | return (
9 |
10 |
11 | {(user.email || user.phone) && (
12 |
13 | )}
14 |
15 | );
16 | };
17 |
18 | const mapStateToProps = ({ auth, audioVideoChat }) => {
19 | return {
20 | user: auth.user,
21 | audioVideoChatConfig: audioVideoChat,
22 | };
23 | };
24 |
25 | return connect(mapStateToProps)(Component);
26 | };
27 |
28 | export default AppCallWrapper;
29 |
--------------------------------------------------------------------------------
/src/Core/ui/SearchBar/styles.js:
--------------------------------------------------------------------------------
1 | import { Platform, StyleSheet } from 'react-native';
2 |
3 | const dynamicStyles = (appStyles, colorScheme) => {
4 | return StyleSheet.create({
5 | container: {
6 | justifyContent: 'center',
7 | marginBottom: 4,
8 | flexDirection: 'row',
9 | height: 60,
10 | },
11 | cancelButtonText: {
12 | color: appStyles.colorSet[colorScheme].mainThemeForegroundColor,
13 | fontSize: 16,
14 | marginBottom: 5,
15 | },
16 | searchInput: {
17 | fontSize: 14,
18 | color: appStyles.colorSet[colorScheme].mainTextColor,
19 | backgroundColor:
20 | Platform.OS === 'ios'
21 | ? appStyles.colorSet[colorScheme].mainThemeBackgroundColor
22 | : appStyles.colorSet[colorScheme].whiteSmoke,
23 | flex: 1,
24 | },
25 | });
26 | };
27 |
28 | export default dynamicStyles;
29 |
--------------------------------------------------------------------------------
/ios/MixnMatch-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/Core/ui/drawer/IMMenuButton/IMMenuButton.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Image, Text, TouchableHighlight, View } from 'react-native';
3 | import { useColorScheme } from 'react-native-appearance';
4 | import dynamicStyles from './styles';
5 |
6 | const IMMenuButton = (props) => {
7 | const { appStyles } = props;
8 | const colorScheme = useColorScheme();
9 | const styles = dynamicStyles(appStyles, colorScheme);
10 |
11 | return (
12 |
16 |
17 |
18 | {props.title}
19 |
20 |
21 | );
22 | };
23 |
24 | export default IMMenuButton;
25 |
--------------------------------------------------------------------------------
/src/Core/chat/redux/index.js:
--------------------------------------------------------------------------------
1 | const SET_CHANNELS = 'SET_CHANNELS';
2 | const SET_CHANNELS_SUBCRIBED = 'SET_CHANNELS_SUBCRIBED';
3 |
4 | export const setChannels = (data) => ({
5 | type: SET_CHANNELS,
6 | data,
7 | });
8 |
9 | export const setChannelsSubcribed = (data) => ({
10 | type: SET_CHANNELS_SUBCRIBED,
11 | data,
12 | });
13 |
14 | const initialState = {
15 | channels: null,
16 | areChannelsSubcribed: false,
17 | };
18 |
19 | export const chat = (state = initialState, action) => {
20 | switch (action.type) {
21 | case SET_CHANNELS_SUBCRIBED:
22 | return {
23 | ...state,
24 | areChannelsSubcribed: action.data,
25 | };
26 | case SET_CHANNELS:
27 | return {
28 | ...state,
29 | channels: [...action.data],
30 | };
31 | case 'LOG_OUT':
32 | return initialState;
33 | default:
34 | return state;
35 | }
36 | };
37 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/webRTC/api/local/audioVideo.js:
--------------------------------------------------------------------------------
1 | const onMediaChatDataUpdate = (querySnapshot, chatTimeout, callback) => {};
2 |
3 | export const cleanSignalCollection = async (userId) => {};
4 |
5 | export const subscribeVideoChat = (userId, chatTimeout, callback) => {};
6 |
7 | export const subscribeAudioChat = (userId, chatTimeout, callback) => {};
8 |
9 | export const cleanChatRoomParticipants = async (channelId) => {};
10 |
11 | export const subscribeCallConnectionData = (data, callback) => {};
12 |
13 | export const addCallConnectionData = async (data) => {};
14 |
15 | export const addChatRoomParticipants = async (data) => {};
16 |
17 | export const updateChatRoomStatus = (channelId, status) => {};
18 |
19 | export const subscribeChatRoomParticipants = (data, callback) => {};
20 |
21 | export const signalChatRoomParticipants = async (data) => {};
22 |
23 | export const exitAudioVideoChatRoom = (data) => {};
24 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNCard/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet } from 'react-native';
2 | import { Appearance } from 'react-native-appearance';
3 |
4 | const COLOR_SCHEME = Appearance.getColorScheme();
5 |
6 | const styles = (appStyles) => {
7 | return new StyleSheet.create({
8 | tnCardContainer: {
9 | flex: 1,
10 | borderRadius: 8,
11 | alignItems: 'center',
12 | justifyContent: 'center',
13 | backgroundColor:
14 | appStyles.colorSet[COLOR_SCHEME].mainThemeBackgroundColor,
15 | paddingBottom: 15,
16 | paddingTop: 15,
17 | paddingLeft: 15,
18 | paddingRight: 15,
19 | },
20 | tnCardShadow: {
21 | shadowColor: '#000',
22 | shadowOffset: {
23 | width: 0,
24 | height: 2,
25 | },
26 | shadowOpacity: 0.25,
27 | shadowRadius: 3.84,
28 | elevation: 5,
29 | },
30 | });
31 | };
32 |
33 | export default styles;
34 |
--------------------------------------------------------------------------------
/src/Core/ui/SearchBarAlternate/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet } from 'react-native';
2 |
3 | const dynamicStyles = (appStyles, colorScheme) => {
4 | return StyleSheet.create({
5 | container: {
6 | flexDirection: 'row',
7 | justifyContent: 'flex-start',
8 | alignItems: 'center',
9 | backgroundColor: appStyles.colorSet[colorScheme].whiteSmoke,
10 | margin: 8,
11 | paddingLeft: 8,
12 | borderRadius: 12,
13 | height: 37,
14 | },
15 | searchIcon: {
16 | height: 15,
17 | width: 15,
18 | tintColor: appStyles.colorSet[colorScheme].grey,
19 | marginRight: 1,
20 | },
21 | searchInput: {
22 | padding: 4,
23 | paddingLeft: 4,
24 | fontSize: 15,
25 | color: appStyles.colorSet[colorScheme].grey,
26 | backgroundColor: appStyles.colorSet[colorScheme].whiteSmoke,
27 | },
28 | });
29 | };
30 |
31 | export default dynamicStyles;
32 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNActivityIndicator/TNActivityIndicator.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { View, Text } from 'react-native';
3 | import { useColorScheme } from 'react-native-appearance';
4 | import { UIActivityIndicator } from 'react-native-indicators';
5 | import dynamicStyles from './styles';
6 |
7 | const TNActivityIndicator = (props) => {
8 | const colorScheme = useColorScheme();
9 | const styles = dynamicStyles(props.appStyles, colorScheme);
10 |
11 | return (
12 |
13 |
14 |
19 | {props.text && props.text.length > 1 && (
20 | {props.text}
21 | )}
22 |
23 |
24 | );
25 | };
26 |
27 | export default TNActivityIndicator;
28 |
--------------------------------------------------------------------------------
/src/redux/reducers.js:
--------------------------------------------------------------------------------
1 | import IMSwipeActionsConstants from './types';
2 |
3 | const initialState = {
4 | matches: null,
5 | swipes: null,
6 | incomingSwipes: null,
7 | didSubscribeToSwipes: false,
8 | };
9 |
10 | export const dating = (state = initialState, action) => {
11 | switch (action.type) {
12 | case IMSwipeActionsConstants.SET_SWIPES:
13 | return { ...state, swipes: [...action.data] };
14 | case IMSwipeActionsConstants.SET_INCOMING_SWIPES:
15 | return { ...state, incomingSwipes: [...action.data] };
16 | case IMSwipeActionsConstants.SET_MATCHES:
17 | // console.log('reducer', IMSwipeActionsConstants.SET_MATCHES, action.data);
18 | return { ...state, matches: [...action.data] };
19 | case IMSwipeActionsConstants.DID_SUBSCRIBE_TO_SWIPES:
20 | return { ...state, didSubscribeToSwipes: true };
21 | case 'LOG_OUT':
22 | return initialState;
23 | default:
24 | return state;
25 | }
26 | };
27 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNImage/TNImage.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useState } from 'react';
2 | import Image from 'react-native-image-progress';
3 | import CircleSnail from 'react-native-progress/CircleSnail';
4 | import { loadCachedItem } from '../../helpers/cacheManager';
5 |
6 | const circleSnailProps = { thickness: 1, color: '#ddd', size: 80 };
7 |
8 | export default function TNImage(props) {
9 | const {
10 | source: { uri },
11 | ...otherProps
12 | } = props;
13 |
14 | const [cachedUri, setCachedUri] = useState(uri);
15 |
16 | useEffect(() => {
17 | setCachedUri(uri);
18 | (async () => {
19 | const image = await loadCachedItem({ uri });
20 | await setCachedUri(image);
21 | })();
22 | }, [uri]);
23 |
24 | return (
25 |
33 | );
34 | }
35 |
--------------------------------------------------------------------------------
/src/Core/ui/SearchBarAlternate/SearchBarAlternate.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import PropTypes from 'prop-types';
3 | import { TouchableOpacity, Image, Text } from 'react-native';
4 |
5 | import dynamicStyles from './styles';
6 | import { useColorScheme } from 'react-native-appearance';
7 |
8 | export default function SearchBarAlternate(props) {
9 | const { onPress, appStyles, placeholderTitle } = props;
10 | const colorScheme = useColorScheme();
11 | const styles = dynamicStyles(appStyles, colorScheme);
12 | const searchIcon = require('../../../CoreAssets/search.png');
13 |
14 | return (
15 |
19 |
20 | {placeholderTitle}
21 |
22 | );
23 | }
24 |
25 | SearchBarAlternate.propTypes = {
26 | onPress: PropTypes.func,
27 | };
28 |
--------------------------------------------------------------------------------
/src/Core/profile/ui/components/IMProfileItemView/IMProfileItemView.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Text, View, TouchableOpacity, Image } from 'react-native';
3 | import dynamicStyles from './styles';
4 | import { useColorScheme } from 'react-native-appearance';
5 |
6 | const IMProfileItemView = (props) => {
7 | const { appStyles } = props;
8 | const colorScheme = useColorScheme();
9 | const styles = dynamicStyles(appStyles, colorScheme);
10 | const rightArrowIcon = require('../../../../../CoreAssets/right-arrow.png');
11 |
12 | return (
13 |
14 |
15 |
16 | {props.title}
17 |
18 |
19 |
20 | );
21 | };
22 |
23 | export default IMProfileItemView;
24 |
--------------------------------------------------------------------------------
/android/app/src/main/java/com/mixnmatch/generated/BasePackageList.java:
--------------------------------------------------------------------------------
1 | package com.mixnmatch.generated;
2 |
3 | import java.util.Arrays;
4 | import java.util.List;
5 | import org.unimodules.core.interfaces.Package;
6 |
7 | public class BasePackageList {
8 | public List getPackageList() {
9 | return Arrays.asList(
10 | new expo.modules.av.AVPackage(),
11 | new expo.modules.camera.CameraPackage(),
12 | new expo.modules.constants.ConstantsPackage(),
13 | new expo.modules.facebook.FacebookPackage(),
14 | new expo.modules.filesystem.FileSystemPackage(),
15 | new expo.modules.firebase.core.FirebaseCorePackage(),
16 | new expo.modules.imageloader.ImageLoaderPackage(),
17 | new expo.modules.imagepicker.ImagePickerPackage(),
18 | new expo.modules.localization.LocalizationPackage(),
19 | new expo.modules.location.LocationPackage(),
20 | new expo.modules.permissions.PermissionsPackage()
21 | );
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNDateUtils.js:
--------------------------------------------------------------------------------
1 | import moment from 'moment';
2 | import { IMLocalized } from '../localization/IMLocalization';
3 |
4 | const monthNames = [
5 | IMLocalized('Jan'),
6 | IMLocalized('Feb'),
7 | IMLocalized('Mar'),
8 | IMLocalized('Apr'),
9 | IMLocalized('May'),
10 | IMLocalized('Jun'),
11 | IMLocalized('Jul'),
12 | IMLocalized('Aug'),
13 | IMLocalized('Sep'),
14 | IMLocalized('Oct'),
15 | IMLocalized('Nov'),
16 | IMLocalized('Dec'),
17 | ];
18 |
19 | const TNDateFormattedTimestamp = (timestamp) => {
20 | if (timestamp) {
21 | let time = moment(timestamp.toDate());
22 | if (moment().diff(time, 'days') == 0) {
23 | return time.format('H:mm');
24 | } else if (moment().diff(time, 'week') == 0) {
25 | return time.fromNow();
26 | } else {
27 | return `${monthNames[timestamp.toDate().getMonth()]} ${time.format(
28 | 'D, Y',
29 | )}`;
30 | }
31 | }
32 | return '';
33 | };
34 |
35 | export default TNDateFormattedTimestamp;
36 |
--------------------------------------------------------------------------------
/src/Core/ui/TabBar/TabBar.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { SafeAreaView } from 'react-native';
3 |
4 | import dynamicStyles from './styles';
5 | import { useColorScheme } from 'react-native-appearance';
6 | import Tab from './Tab';
7 |
8 | export function TabBarBuilder({
9 | tabIcons,
10 | appStyles,
11 | route,
12 | state,
13 | navigation,
14 | }) {
15 | const colorScheme = useColorScheme();
16 | const styles = dynamicStyles(appStyles, colorScheme);
17 | return (
18 |
19 | {state.routes.map((route, index) => {
20 | return (
21 | navigation.navigate(route.name)}
28 | />
29 | );
30 | })}
31 |
32 | );
33 | }
34 |
35 | export default TabBarBuilder;
36 |
--------------------------------------------------------------------------------
/src/Core/onboarding/utils/AuthDeviceStorage.js:
--------------------------------------------------------------------------------
1 | import AsyncStorage from '@react-native-community/async-storage';
2 |
3 | const SHOULD_SHOW_ONBOARDING_FLOW = 'SHOULD_SHOW_ONBOARDING_FLOW';
4 |
5 | /**
6 | * Get Should Show Onboarding
7 | * @param {String} value
8 | * @returns {Boolean}
9 | */
10 | const getShouldShowOnboardingFlow = async () => {
11 | try {
12 | const result = await AsyncStorage.getItem(SHOULD_SHOW_ONBOARDING_FLOW);
13 |
14 | return result !== null ? false : true;
15 | } catch (err) {
16 | console.log(err);
17 | }
18 | };
19 |
20 | /**
21 | * Get Should Show OnBoarding Flow
22 | * @param {String} value
23 | *
24 | */
25 | const setShouldShowOnboardingFlow = async (value) => {
26 | try {
27 | await AsyncStorage.setItem(SHOULD_SHOW_ONBOARDING_FLOW, value);
28 | } catch (err) {
29 | console.log(err);
30 | }
31 | };
32 |
33 | const authDeviceStorage = {
34 | getShouldShowOnboardingFlow,
35 | setShouldShowOnboardingFlow,
36 | };
37 |
38 | export default authDeviceStorage;
39 |
--------------------------------------------------------------------------------
/src/Core/ui/drawer/IMMenuButton/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet } from 'react-native';
2 |
3 | const dynamicStyles = (appStyles, colorScheme) => {
4 | const colorSet = appStyles.colorSet[colorScheme];
5 | const fontSet = appStyles.fontFamily;
6 | return new StyleSheet.create({
7 | btnClickContain: {
8 | flexDirection: 'row',
9 | padding: 5,
10 | marginTop: 0,
11 | marginBottom: 0,
12 | backgroundColor: colorSet.whiteSmoke,
13 | },
14 | btnContainer: {
15 | flex: 1,
16 | flexDirection: 'row',
17 | alignItems: 'flex-start',
18 | backgroundColor: colorSet.whiteSmoke,
19 | padding: 7,
20 | },
21 | btnIcon: {
22 | tintColor: colorSet.mainTextColor,
23 | height: 30,
24 | width: 30,
25 | },
26 | btnText: {
27 | fontFamily: fontSet.main,
28 | fontWeight: 'bold',
29 | marginLeft: 20,
30 | marginTop: 5,
31 | color: colorSet.mainTextColor,
32 | },
33 | });
34 | };
35 |
36 | export default dynamicStyles;
37 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your build environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m
13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
14 |
15 | # When configured, Gradle will run in incubating parallel mode.
16 | # This option should only be used with decoupled projects. More details, visit
17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18 | # org.gradle.parallel=true
19 |
20 | android.useAndroidX=true
21 | android.enableJetifier=true
22 | org.gradle.jvmargs=-Xmx4608M
23 |
--------------------------------------------------------------------------------
/android/app/src/main/java/com/mixnmatch/videoplayer/VideoPlayerPackage.java:
--------------------------------------------------------------------------------
1 | package com.mixnmatch.videoplayer;
2 |
3 | import com.facebook.react.ReactPackage;
4 | import com.facebook.react.bridge.JavaScriptModule;
5 | import com.facebook.react.bridge.NativeModule;
6 | import com.facebook.react.bridge.ReactApplicationContext;
7 | import com.facebook.react.uimanager.ViewManager;
8 |
9 | import java.util.Arrays;
10 | import java.util.Collections;
11 | import java.util.List;
12 |
13 | public class VideoPlayerPackage implements ReactPackage {
14 |
15 | @Override
16 | public List createNativeModules(ReactApplicationContext reactContext) {
17 | return Arrays.asList(new VideoPlayerModule(reactContext));
18 | }
19 |
20 |
21 | public List> createJSModules() {
22 | return Collections.emptyList();
23 | }
24 |
25 | @Override
26 | public List createViewManagers(ReactApplicationContext reactContext) {
27 | return Collections.emptyList();
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/Core/profile/ui/components/IMProfileItemView/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet } from 'react-native';
2 | import { I18nManager } from 'react-native';
3 |
4 | const dynamicStyles = (appStyles, colorScheme) => {
5 | return StyleSheet.create({
6 | container: {
7 | flexDirection: 'row',
8 | justifyContent: 'space-between',
9 | height: 50,
10 | width: '95%',
11 | },
12 | icon: {
13 | width: 24,
14 | height: 24,
15 | },
16 | itemContainer: {
17 | flex: 1,
18 | flexDirection: 'row',
19 | height: '100%',
20 | marginLeft: 10,
21 | },
22 | title: {
23 | marginLeft: 15,
24 | color: appStyles.colorSet[colorScheme].mainTextColor,
25 | fontSize: 14,
26 | marginTop: 3,
27 | },
28 | itemNavigationIcon: {
29 | height: 20,
30 | width: 20,
31 | marginRight: 10,
32 | tintColor: appStyles.colorSet[colorScheme].grey6,
33 | transform: [{ scaleX: I18nManager.isRTL ? -1 : 1 }],
34 | },
35 | });
36 | };
37 |
38 | export default dynamicStyles;
39 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/twilio/api/local/audioVideo.js:
--------------------------------------------------------------------------------
1 | const onMediaChatDataUpdate = (querySnapshot, chatTimeout, callback) => {};
2 |
3 | export const cleanSignalCollection = async (userId) => {};
4 |
5 | export const subscribeVideoChat = (userId, chatTimeout, callback) => {};
6 |
7 | export const subscribeAudioChat = (userId, chatTimeout, callback) => {};
8 |
9 | export const setMediaChatReceivers = async (data) => {};
10 |
11 | export const cleanChatRoomParticipants = async (channelId) => {};
12 |
13 | export const subscribeCallConnectionData = (data, callback) => {};
14 |
15 | export const addCallConnectionData = async (data) => {};
16 |
17 | export const addChatRoomParticipants = async (data) => {};
18 |
19 | export const updateChatRoomStatus = (channelId, status) => {};
20 |
21 | export const subscribeChatRoomParticipants = (data, callback) => {};
22 |
23 | export const signalChatRoomParticipants = async (data) => {};
24 |
25 | export const deletePrevSignalledParticipants = async (participantsId) => {};
26 |
27 | export const exitAudioVideoChatRoom = (data) => {};
28 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNEmptyStateView/TNEmptyStateView.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { View, Text, TouchableOpacity } from 'react-native';
3 | import { useColorScheme } from 'react-native-appearance';
4 | import dynamicStyles from './styles';
5 |
6 | const TNEmptyStateView = (props) => {
7 | const colorScheme = useColorScheme();
8 | const styles = dynamicStyles(props.appStyles, colorScheme);
9 | const { emptyStateConfig } = props;
10 | return (
11 |
12 | {emptyStateConfig.title}
13 | {emptyStateConfig.description}
14 | {emptyStateConfig.buttonName && emptyStateConfig.buttonName.length > 0 && (
15 |
18 | {emptyStateConfig.buttonName}
19 |
20 | )}
21 |
22 | );
23 | };
24 |
25 | export default TNEmptyStateView;
26 |
--------------------------------------------------------------------------------
/ios/Podfile:
--------------------------------------------------------------------------------
1 | require_relative '../node_modules/react-native/scripts/react_native_pods'
2 | require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
3 | require_relative '../node_modules/react-native-unimodules/cocoapods.rb'
4 |
5 | platform :ios, '12.0'
6 |
7 | $FirebaseSDKVersion = '7.0.0'
8 |
9 | target 'mixNmatch' do
10 | # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
11 | # use_frameworks!
12 |
13 | config = use_native_modules!
14 | use_react_native!(:path => config["reactNativePath"])
15 |
16 | # Enables Flipper.
17 | #
18 | # Note that if you have use_frameworks! enabled, Flipper will not work and
19 | # you should disable these next few lines.
20 | # use_flipper!({ 'Flipper-Folly' => '2.3.0' })
21 | post_install do |installer|
22 | flipper_post_install(installer)
23 | end
24 |
25 | pod 'ReactNativeART', :path => '../node_modules/@react-native-community/art'
26 | pod 'react-native-twilio-video-webrtc', path: '../node_modules/react-native-twilio-video-webrtc'
27 |
28 | use_unimodules!
29 | end
30 |
--------------------------------------------------------------------------------
/src/Core/truly-native/index.js:
--------------------------------------------------------------------------------
1 | export { default as TNTouchableIcon } from './TNTouchableIcon/TNTouchableIcon';
2 | export { default as TNProfilePictureSelector } from './TNProfilePictureSelector/TNProfilePictureSelector';
3 | export { default as TNMediaViewerModal } from './TNMediaViewerModal/TNMediaViewerModal';
4 | export { default as TNNumberPicker } from './TNNumberPicker/TNNumberPicker';
5 | export { default as TNEmptyStateView } from './TNEmptyStateView';
6 | export { default as TNActivityIndicator } from './TNActivityIndicator';
7 | export { default as CountriesModalPicker } from './CountriesModalPicker/CountriesModalPicker';
8 | export { default as TNStoriesTray } from './TNStoriesTray/TNStoriesTray';
9 | export { default as IMIconButton } from './Buttons/IMIconButton/IMIconButton';
10 | export { default as TNStoryItem } from './TNStoriesTray/TNStoryItem/TNStoryItem';
11 | export { default as TNCard } from './TNCard/TNCard';
12 | export { default as TNImage } from './TNImage/TNImage';
13 | export { default as TNVideo } from './TNVideo/TNVideo';
14 | export { default as IMDismissButton } from './Buttons/IMDismissButton';
15 |
--------------------------------------------------------------------------------
/.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 | package-lock.json
26 |
27 | # Android/IntelliJ
28 | #
29 | build/
30 | .idea
31 | .gradle
32 | local.properties
33 | *.iml
34 |
35 | # node.js
36 | #
37 | node_modules/
38 | npm-debug.log
39 | yarn-error.log
40 |
41 | # BUCK
42 | buck-out/
43 | \.buckd/
44 |
45 | # fastlane
46 | #
47 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
48 | # screenshots whenever they are needed.
49 | # For more information about the recommended setup visit:
50 | # https://docs.fastlane.tools/best-practices/source-control/
51 |
52 | */fastlane/report.xml
53 | */fastlane/Preview.html
54 | */fastlane/screenshots
55 |
56 | # Bundle artifact
57 | *.jsbundle
58 |
59 | iOS-certificates/
60 |
61 |
62 | # pod files
63 | ios/Pods/*
64 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/twilioServerMiddleware/functions/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "video-access-token-server-node",
3 | "version": "1.0.0",
4 | "private": true,
5 | "author": "instamobile.io",
6 | "license": "MIT",
7 | "description": "Video Access Token Server for Twilio",
8 | "main": "index.js",
9 | "scripts": {
10 | "test": "NODE_ENV=test ./node_modules/.bin/jest",
11 | "serve": "firebase serve --only functions",
12 | "shell": "firebase functions:shell",
13 | "start": "npm run shell",
14 | "deploy": "firebase deploy --only functions",
15 | "logs": "firebase functions:log"
16 | },
17 | "keywords": [
18 | "twilio",
19 | "video",
20 | "ip",
21 | "video",
22 | "chat",
23 | "real",
24 | "time",
25 | "diggity"
26 | ],
27 | "engines": {
28 | "node": "8"
29 | },
30 | "dependencies": {
31 | "dotenv": "^8.2.0",
32 | "firebase-admin": "^8.6.0",
33 | "firebase-functions": "^3.8.0",
34 | "twilio": "^3.48.0"
35 | },
36 | "devDependencies": {
37 | "firebase-functions-test": "^0.1.6",
38 | "jest": "^19.0.2",
39 | "jsonwebtoken": "^7.4.0"
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/android/app/src/main/java/com/mixnmatch/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.mixnmatch;
2 |
3 | import android.content.Intent;
4 | import android.content.res.Configuration;
5 |
6 | import android.os.Bundle; // here
7 | import com.facebook.react.ReactActivity;
8 |
9 | import org.devio.rn.splashscreen.SplashScreen; // here
10 |
11 | public class MainActivity extends ReactActivity {
12 |
13 | /**
14 | * Returns the name of the main component registered from JavaScript.
15 | * This is used to schedule rendering of the component.
16 | */
17 | @Override
18 | protected String getMainComponentName() {
19 | return "mixNmatch";
20 | }
21 |
22 | @Override
23 | protected void onCreate(Bundle savedInstanceState) {
24 | SplashScreen.show(this); // here
25 | super.onCreate(savedInstanceState);
26 | }
27 |
28 | @Override
29 | public void onConfigurationChanged(Configuration newConfig) {
30 | super.onConfigurationChanged(newConfig);
31 | Intent intent = new Intent("onConfigurationChanged");
32 | intent.putExtra("newConfig", newConfig);
33 | sendBroadcast(intent);
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/android/app/src/main/java/com/mixnmatch/launchapplication/LaunchApplicationPackage.java:
--------------------------------------------------------------------------------
1 | package com.mixnmatch.launchapplication;
2 |
3 | import java.util.Collections;
4 | import java.util.List;
5 | import java.util.ArrayList;
6 | import com.facebook.react.ReactPackage;
7 | import com.facebook.react.bridge.NativeModule;
8 | import com.facebook.react.bridge.ReactApplicationContext;
9 | import com.facebook.react.uimanager.ViewManager;
10 | import com.facebook.react.bridge.JavaScriptModule;
11 |
12 | public class LaunchApplicationPackage implements ReactPackage {
13 | @Override
14 | public List createNativeModules(ReactApplicationContext reactContext) {
15 | List modules = new ArrayList<>();
16 |
17 | modules.add(new LaunchApplicationModule(reactContext));
18 |
19 | return modules;
20 |
21 | }
22 |
23 | public List> createJSModules() {
24 | return Collections.emptyList();
25 | }
26 |
27 | @Override
28 | public List createViewManagers(ReactApplicationContext reactContext) {
29 | return Collections.emptyList();
30 |
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/Core/inAppPurchase/redux.js:
--------------------------------------------------------------------------------
1 | const SET_SUBSCRIPTION_PLAN = 'SET_SUBSCRIPTION_PLAN';
2 | const SET_PLANS = 'SET_PLANS';
3 | const IS_PLAN_ACTIVE = 'IS_PLAN_ACTIVE';
4 |
5 | export const setIsPlanActive = (data) => ({
6 | type: IS_PLAN_ACTIVE,
7 | data,
8 | });
9 |
10 | export const setSubscriptionPlan = (data) => ({
11 | type: SET_SUBSCRIPTION_PLAN,
12 | data,
13 | });
14 |
15 | export const setPlans = (data) => ({
16 | type: SET_PLANS,
17 | data,
18 | });
19 |
20 | const initialState = {
21 | planId: '',
22 | plans: [],
23 | isPlanActive: false,
24 | };
25 |
26 | export const inAppPurchase = (state = initialState, action) => {
27 | switch (action.type) {
28 | case SET_SUBSCRIPTION_PLAN:
29 | return {
30 | ...state,
31 | planId: action.data.planId,
32 | };
33 | case SET_PLANS:
34 | return {
35 | ...state,
36 | plans: action.data.plans,
37 | };
38 | case IS_PLAN_ACTIVE:
39 | return {
40 | ...state,
41 | isPlanActive: action.data,
42 | };
43 | case 'LOG_OUT':
44 | return initialState;
45 | default:
46 | return state;
47 | }
48 | };
49 |
--------------------------------------------------------------------------------
/src/Core/onboarding/components/TermsOfUseView.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Text, Linking, View } from 'react-native';
3 | import { IMLocalized } from '../../localization/IMLocalization';
4 |
5 | const TermsOfUseView = (props) => {
6 | const { tosLink, privacyPolicyLink, style } = props;
7 | return (
8 |
9 |
10 | {IMLocalized('By creating an account you agree with our')}
11 |
12 |
13 | Linking.openURL(tosLink)}>
16 | {IMLocalized('Terms of Use')}
17 | {privacyPolicyLink?.length > 0 && (
18 |
19 | {IMLocalized(' and ')}
20 | Linking.openURL(privacyPolicyLink)}>
23 | {IMLocalized('Privacy Policy')}
24 |
25 |
26 | )}
27 |
28 |
29 |
30 | );
31 | };
32 |
33 | export default TermsOfUseView;
34 |
--------------------------------------------------------------------------------
/src/Core/chat/IMConversationList/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet, Dimensions } from 'react-native';
2 |
3 | const { height } = Dimensions.get('window');
4 |
5 | const dynamicStyles = (appStyles, colorScheme) => {
6 | return StyleSheet.create({
7 | container: {
8 | flex: 1,
9 | backgroundColor: appStyles.colorSet[colorScheme].mainThemeBackgroundColor,
10 | },
11 | userImageContainer: {
12 | borderWidth: 0,
13 | },
14 | chatsChannelContainer: {
15 | // flex: 1,
16 | padding: 0,
17 | },
18 | chatItemContainer: {
19 | flexDirection: 'row',
20 | marginBottom: 20,
21 | },
22 | chatItemContent: {
23 | flex: 1,
24 | alignSelf: 'center',
25 | marginLeft: 10,
26 | },
27 | chatFriendName: {
28 | color: appStyles.colorSet[colorScheme].mainTextColor,
29 | fontSize: 17,
30 | },
31 | content: {
32 | flexDirection: 'row',
33 | },
34 | message: {
35 | flex: 2,
36 | color: appStyles.colorSet[colorScheme].mainSubtextColor,
37 | },
38 | emptyViewContainer: {
39 | marginTop: height / 5,
40 | },
41 | });
42 | };
43 |
44 | export default dynamicStyles;
45 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/twilioServerMiddleware/functions/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Twilio Inc.
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 all
13 | 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 THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNEmptyStateView/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet } from 'react-native';
2 |
3 | const dynamicStyles = (appStyles, colorScheme) => {
4 | return StyleSheet.create({
5 | title: {
6 | fontSize: 30,
7 | fontWeight: 'bold',
8 | alignSelf: 'center',
9 | color: appStyles.colorSet[colorScheme].mainTextColor,
10 | marginBottom: 15,
11 | },
12 | description: {
13 | alignSelf: 'center',
14 | color: appStyles.colorSet[colorScheme].mainTextColor,
15 | textAlign: 'center',
16 | width: '85%',
17 | lineHeight: 20,
18 | },
19 | buttonContainer: {
20 | backgroundColor: appStyles.colorSet[colorScheme].mainThemeForegroundColor,
21 | width: '75%',
22 | height: 45,
23 | alignSelf: 'center',
24 | borderRadius: 10,
25 | alignItems: 'center',
26 | justifyContent: 'center',
27 | marginTop: 30,
28 | },
29 | buttonName: {
30 | color: '#ffffff',
31 | fontSize: 16,
32 | fontWeight: '600',
33 | },
34 | container: {
35 | backgroundColor: appStyles.colorSet[colorScheme].mainThemeBackground,
36 | },
37 | });
38 | };
39 |
40 | export default dynamicStyles;
41 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/twilioServerMiddleware/functions/src/tokenGenerator.js:
--------------------------------------------------------------------------------
1 | require('dotenv').config();
2 | const functions = require('firebase-functions');
3 | const config = require('../config');
4 |
5 | const AccessToken = require('twilio').jwt.AccessToken;
6 | const VideoGrant = AccessToken.VideoGrant;
7 |
8 | function tokenGenerator(identity, room) {
9 | // Create an access token which we will sign and return to the client,
10 | // containing the grant we just created
11 | const token = new AccessToken(
12 | config.TWILIO_ACCOUNT_SID,
13 | config.TWILIO_API_KEY,
14 | config.TWILIO_API_SECRET,
15 | );
16 |
17 | // Assign identity to the token
18 | token.identity = identity;
19 |
20 | // Grant the access token Twilio Video capabilities
21 | const grant = new VideoGrant();
22 | grant.room = room;
23 | token.addGrant(grant);
24 |
25 | // Serialize the token to a JWT string
26 | return token.toJwt();
27 | }
28 |
29 | const app = (request, response) => {
30 | const identity = request.query.identity || 'identity';
31 | const room = request.query.room;
32 | response.json(tokenGenerator(identity, room));
33 | };
34 |
35 | module.exports = functions.https.onRequest(app);
36 |
--------------------------------------------------------------------------------
/src/Core/notifications/firebase/notification.js:
--------------------------------------------------------------------------------
1 | import { firebase } from '../../api/firebase/config';
2 |
3 | export const notificationsRef = firebase
4 | .firestore()
5 | .collection('notifications');
6 |
7 | export const subscribeNotifications = (userId, callback) => {
8 | return notificationsRef
9 | .where('toUserID', '==', userId)
10 | .orderBy('createdAt', 'desc')
11 | .limit(100)
12 | .onSnapshot(
13 | (notificationSnapshot) => {
14 | const notifications = [];
15 | notificationSnapshot.forEach((notificationDoc) => {
16 | const notification = notificationDoc.data();
17 | notification.id = notificationDoc.id;
18 | notifications.push(notification);
19 | });
20 | callback(notifications);
21 | },
22 | (error) => {
23 | console.log(error);
24 | alert(error);
25 | },
26 | );
27 | };
28 |
29 | export const updateNotification = async (notification) => {
30 | try {
31 | await notificationsRef.doc(notification.id).update({ ...notification });
32 |
33 | return { success: true };
34 | } catch (error) {
35 | console.log(error);
36 | return { error, success: false };
37 | }
38 | };
39 |
--------------------------------------------------------------------------------
/src/Core/chat/api/local/channelsTracker.js:
--------------------------------------------------------------------------------
1 | import { setChannels } from '../../redux';
2 | import { mockChannelsData } from './localData';
3 |
4 | /**
5 | * Implement These Methods If You Are Adding Your Own Custom Backend
6 | */
7 | export default class LocalChannelsTracker {
8 | /**
9 | * Constructor: initialize reduxstore and userid here
10 | *
11 | * @param {object} reduxStore redux store to dispatch actions
12 | * @param {string} userID id of the current logged in user
13 | */
14 | constructor(reduxStore, userID) {
15 | this.reduxStore = reduxStore;
16 | this.userID = userID;
17 | }
18 |
19 | /**
20 | * Subscribe to user, channels and abuse listeners on the backend
21 | */
22 | subscribeIfNeeded = () => {
23 | this.reduxStore.dispatch(setChannels(mockChannelsData));
24 | // subscribe to channelsManager api
25 | // subscribe to abusesManager api
26 | // subscribe to userManager api
27 | };
28 |
29 | /**
30 | * Unsubscribe from user, channels and abuse listeners on the backend
31 | *
32 | */
33 | unsubscribe = () => {
34 | // unsubscribe from channelsManager api
35 | // unsubscribe to abusesManager api
36 | // unsubscribe to userManager api
37 | };
38 | }
39 |
--------------------------------------------------------------------------------
/src/Core/chat/IMConversationView/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet } from 'react-native';
2 |
3 | const dynamicStyles = (appStyles, colorScheme) => {
4 | return StyleSheet.create({
5 | container: {
6 | flex: 1,
7 | backgroundColor: appStyles.colorSet[colorScheme].mainThemeBackgroundColor,
8 | },
9 | userImageContainer: {
10 | borderWidth: 0,
11 | },
12 | chatsChannelContainer: {
13 | // flex: 1,
14 | padding: 10,
15 | },
16 | chatItemContainer: {
17 | flexDirection: 'row',
18 | marginBottom: 20,
19 | },
20 | chatItemContent: {
21 | flex: 1,
22 | alignSelf: 'center',
23 | marginLeft: 10,
24 | },
25 | chatFriendName: {
26 | color: appStyles.colorSet[colorScheme].mainTextColor,
27 | fontSize: 17,
28 | fontWeight: '500',
29 | },
30 | content: {
31 | flexDirection: 'row',
32 | marginTop: 5,
33 | },
34 | message: {
35 | flex: 2,
36 | color: appStyles.colorSet[colorScheme].mainSubtextColor,
37 | fontWeight: '500',
38 | },
39 | unReadmessage: {
40 | fontWeight: 'bold',
41 | color: appStyles.colorSet[colorScheme].mainTextColor,
42 | },
43 | });
44 | };
45 |
46 | export default dynamicStyles;
47 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Instadating
2 | React Native
3 |
4 | ## Enable Push Notification
5 |
6 | To enable push notification, you need to deploy the firebase functions.
7 |
8 | ## Steps to deploying the firebase functions
9 |
10 | * At the root of InstadatingApp, change directory to firebaseFunctions:
11 |
12 | ```bash
13 | $ cd firebaseFunctions
14 | ```
15 |
16 | * First, we need to make sure that the Firebase Command Line Client is installed. Execute the following command to install the firebase-tools package:
17 |
18 | ```bash
19 | $ npm install -g firebase-tools
20 | ```
21 |
22 | * login to Firebase by using the following command:
23 |
24 | ```bash
25 | $ firebase login
26 | ```
27 |
28 | * The browser should open up and load a URL that was displayed in the console. At the same time the login is recognized by the Firebase CLI in the console.
29 |
30 | * next, execute the command bellow to choose your firebase project:
31 |
32 | ```bash
33 | $ firebase use --add
34 | ```
35 |
36 | * when prompted for alias name, you can enter: default
37 |
38 | * deploy the Firebase function by using the following command:
39 |
40 | ```bash
41 | $ firebase deploy
42 | ```
43 |
44 |
45 | After this, you should have firebaseFunctions deployed on your firebase console and Push Notification working.
46 |
--------------------------------------------------------------------------------
/src/Core/api/firebase/config.js:
--------------------------------------------------------------------------------
1 | import { decode, encode } from 'base-64';
2 | import './timerConfig';
3 | global.addEventListener = (x) => x;
4 | if (!global.btoa) {
5 | global.btoa = encode;
6 | }
7 |
8 | if (!global.atob) {
9 | global.atob = decode;
10 | }
11 |
12 | import * as firebase from 'firebase';
13 | import '@firebase/auth';
14 | import '@firebase/firestore';
15 |
16 | // Instadating config
17 | // const firebaseConfig = {
18 | // apiKey: 'AIzaSyAOWHBpPhKoNhcGFKHH_Q_0AtL2gV-imgQ',
19 | // authDomain: 'production-a9404.firebaseapp.com',
20 | // databaseURL: 'https://production-a9404.firebaseio.com',
21 | // projectId: 'production-a9404',
22 | // storageBucket: 'production-a9404.appspot.com',
23 | // messagingSenderId: '525472070731',
24 | // appId: '1:525472070731:web:ee873bd62c0deb7eba61ce',
25 | // };
26 |
27 | const firebaseConfig = {
28 | apiKey: "AIzaSyDdp5Ee86fZif0j3BJh0rxdKkZ82udYpg4",
29 | authDomain: "mixnmatch-31d2a.firebaseapp.com",
30 | projectId: "mixnmatch-31d2a",
31 | storageBucket: "mixnmatch-31d2a.appspot.com",
32 | messagingSenderId: "39056365912",
33 | appId: "1:39056365912:web:d57b94aa70b242c7f2ad2d",
34 | measurementId: "G-J09TXLYQ7Y"
35 | };
36 |
37 | if (!firebase.apps.length) firebase.initializeApp(firebaseConfig);
38 |
39 | export { firebase };
40 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/webRTC/pushKit/sendCallInitiationRemoteNotification.js:
--------------------------------------------------------------------------------
1 | import { notificationManager } from '../../../../notifications';
2 | import { callID, pushKitEndpoint, iOSBundleID } from '../../../config';
3 |
4 | export const sendCallInitiationRemoteNotification = (
5 | caller,
6 | recipients,
7 | callType,
8 | channelID,
9 | channelName,
10 | ) => {
11 | // We send a push kit notification (in case the recipients are on iOS)
12 | const data = {
13 | callerID: caller.id,
14 | recipientIDs: recipients.map((recipient) => recipient.id),
15 | callType,
16 | channelID,
17 | channelName,
18 | topic: iOSBundleID,
19 | uuid: callID,
20 | };
21 | fetch(pushKitEndpoint, {
22 | method: 'post',
23 | headers: new Headers({
24 | 'Content-Type': 'application/json',
25 | }),
26 | body: JSON.stringify(data),
27 | });
28 |
29 | console.log('ttttt push kit ' + JSON.stringify(data));
30 |
31 | // We send a push notification (in case the recipients are on Android)
32 | recipients.forEach((recipient) => {
33 | notificationManager.sendCallNotification(
34 | caller,
35 | recipient,
36 | channelID,
37 | callType,
38 | callID,
39 | );
40 | });
41 | };
42 |
43 | export default sendCallInitiationRemoteNotification;
44 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/twilio/pushKit/sendCallInitiationRemoteNotification.js:
--------------------------------------------------------------------------------
1 | import { notificationManager } from '../../../../notifications';
2 | import { callID, pushKitEndpoint, iOSBundleID } from '../../../config';
3 |
4 | export const sendCallInitiationRemoteNotification = (
5 | caller,
6 | recipients,
7 | callType,
8 | channelID,
9 | channelName,
10 | ) => {
11 | // We send a push kit notification (in case the recipients are on iOS)
12 | const data = {
13 | callerID: caller.id,
14 | recipientIDs: recipients.map((recipient) => recipient.id),
15 | callType,
16 | channelID,
17 | channelName,
18 | topic: iOSBundleID,
19 | uuid: callID,
20 | };
21 |
22 | fetch(pushKitEndpoint, {
23 | method: 'post',
24 | headers: new Headers({
25 | 'Content-Type': 'application/json',
26 | }),
27 | body: JSON.stringify(data),
28 | });
29 |
30 | console.log('ttttt push kit ' + JSON.stringify(data));
31 |
32 | // We send a push notification (in case the recipients are on Android)
33 | recipients.forEach((recipient) => {
34 | notificationManager.sendCallNotification(
35 | caller,
36 | recipient,
37 | channelID,
38 | callType,
39 | callID,
40 | );
41 | });
42 | };
43 |
44 | export default sendCallInitiationRemoteNotification;
45 |
--------------------------------------------------------------------------------
/src/Core/chat/IMChat/IndicatorDot.js:
--------------------------------------------------------------------------------
1 | import React, { useRef, useEffect } from 'react';
2 | import { Animated } from 'react-native';
3 |
4 | export default function IndicatorDot(props) {
5 | const animation = useRef(new Animated.Value(0));
6 |
7 | const { startTime, radius } = props;
8 |
9 | useEffect(() => {
10 | setTimeout(() => {
11 | handleAnimation();
12 | }, startTime);
13 | }, []);
14 |
15 | const handleAnimation = () => {
16 | Animated.sequence([
17 | Animated.timing(animation.current, {
18 | duration: 500,
19 | toValue: 1,
20 | useNativeDriver: false,
21 | }),
22 | Animated.timing(animation.current, {
23 | duration: 500,
24 | toValue: 0,
25 | useNativeDriver: false,
26 | }),
27 | ]).start(() => {
28 | handleAnimation();
29 | });
30 | };
31 |
32 | const backgroundColorInterpolation = animation.current.interpolate({
33 | inputRange: [0, 1],
34 | outputRange: ['rgb(150, 150, 150)', 'rgb(197,197,200)'],
35 | });
36 |
37 | const getStyles = () => ({
38 | width: radius * 2,
39 | height: radius * 2,
40 | borderRadius: radius,
41 | backgroundColor: backgroundColorInterpolation,
42 | marginHorizontal: 2,
43 | });
44 | return ;
45 | }
46 |
--------------------------------------------------------------------------------
/src/Core/mentions/IMMentionListItem/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet, Dimensions } from 'react-native';
2 |
3 | const height = Dimensions.get('window').height;
4 |
5 | const mentionItemContainerHeight = Math.floor(height * 0.066);
6 | const mentionPhotoSize = Math.floor(mentionItemContainerHeight * 0.66);
7 |
8 | const dynamicStyles = (colorScheme, appStyles) => {
9 | return new StyleSheet.create({
10 | mentionItemContainer: {
11 | width: ' 100%',
12 | height: mentionItemContainerHeight,
13 | alignSelf: 'center',
14 | padding: 10,
15 | alignItems: 'center',
16 | flexDirection: 'row',
17 | },
18 | mentionPhotoContainer: {
19 | flex: 0.8,
20 | flexDirection: 'row',
21 | alignItems: 'center',
22 | },
23 | mentionPhoto: {
24 | height: mentionPhotoSize,
25 | borderRadius: mentionPhotoSize / 2,
26 | width: mentionPhotoSize,
27 | },
28 | mentionNameContainer: {
29 | flex: 6,
30 | height: '100%',
31 | justifyContent: 'center',
32 | borderBottomColor: appStyles.colorSet[colorScheme].hairlineColor,
33 | borderBottomWidth: 0.5,
34 | },
35 | mentionName: {
36 | color: appStyles.colorSet[colorScheme].mainTextColor,
37 | fontWeight: '400',
38 | },
39 | });
40 | };
41 |
42 | export default dynamicStyles;
43 |
--------------------------------------------------------------------------------
/src/Core/ui/TabBar/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet } from 'react-native';
2 | import { ifIphoneX } from 'react-native-iphone-x-helper';
3 |
4 | const dynamicStyles = (appStyles, colorScheme) => {
5 | return StyleSheet.create({
6 | tabBarContainer: {
7 | ...ifIphoneX(
8 | {
9 | height: 80,
10 | },
11 | {
12 | height: 45,
13 | },
14 | ),
15 | backgroundColor: appStyles.colorSet[colorScheme].mainThemeBackgroundColor,
16 | flexDirection: 'row',
17 | borderTopWidth: 0.5,
18 | borderTopColor: appStyles.colorSet[colorScheme].hairlineColor,
19 | },
20 | tabContainer: {
21 | backgroundColor: appStyles.colorSet[colorScheme].mainThemeBackgroundColor,
22 | flex: 1,
23 | justifyContent: 'center',
24 | alignItems: 'center',
25 | },
26 | tabIcon: {
27 | ...ifIphoneX(
28 | {
29 | width: 25,
30 | height: 25,
31 | },
32 | {
33 | width: 22,
34 | height: 22,
35 | },
36 | ),
37 | },
38 | focusTintColor: {
39 | tintColor: appStyles.colorSet[colorScheme].mainThemeForegroundColor,
40 | },
41 | unFocusTintColor: {
42 | tintColor: appStyles.colorSet[colorScheme].bottomTintColor,
43 | },
44 | });
45 | };
46 |
47 | export default dynamicStyles;
48 |
--------------------------------------------------------------------------------
/ios/MixnMatch/GoogleService-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CLIENT_ID
6 | 525472070731-rrbncqdn3d9vgku8dipsnlu8bjm7fso9.apps.googleusercontent.com
7 | REVERSED_CLIENT_ID
8 | com.googleusercontent.apps.525472070731-rrbncqdn3d9vgku8dipsnlu8bjm7fso9
9 | ANDROID_CLIENT_ID
10 | 525472070731-skpn8mnelipkoqtgmvavuf9utkg1ig4d.apps.googleusercontent.com
11 | API_KEY
12 | AIzaSyCdOxJxTtMr4Vjxk0akt3z7CHP4LO3w1_E
13 | GCM_SENDER_ID
14 | 525472070731
15 | PLIST_VERSION
16 | 1
17 | BUNDLE_ID
18 | com.instaswipey
19 | PROJECT_ID
20 | production-a9404
21 | STORAGE_BUCKET
22 | production-a9404.appspot.com
23 | IS_ADS_ENABLED
24 |
25 | IS_ANALYTICS_ENABLED
26 |
27 | IS_APPINVITE_ENABLED
28 |
29 | IS_GCM_ENABLED
30 |
31 | IS_SIGNIN_ENABLED
32 |
33 | GOOGLE_APP_ID
34 | 1:525472070731:ios:0cdc4a490f5b9098ba61ce
35 | DATABASE_URL
36 | https://production-a9404.firebaseio.com
37 |
38 |
39 |
--------------------------------------------------------------------------------
/src/Core/mentions/IMMentionListItem/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Text, View, TouchableOpacity } from 'react-native';
3 | import FastImage from 'react-native-fast-image';
4 | import { useColorScheme } from 'react-native-appearance';
5 | import dynamicStyles from './styles';
6 |
7 | export default function IMMentionListItem(props) {
8 | const colorScheme = useColorScheme();
9 | const styles = dynamicStyles(colorScheme, props.appStyles);
10 |
11 | const onSuggestionTap = (user, hidePanel) => {
12 | props.onSuggestionTap(user);
13 | };
14 |
15 | const { item: user, index, editorStyles } = props;
16 |
17 | const fullname = `${user.firstName && user.firstName} ${
18 | user.lastName && user.lastName
19 | }`;
20 |
21 | return (
22 | onSuggestionTap(user)}
25 | style={[
26 | styles.mentionItemContainer,
27 | // editorStyles.mentionListItemWrapper,
28 | ]}>
29 |
30 |
31 |
35 |
36 |
37 |
38 | {fullname}
39 |
40 |
41 | );
42 | }
43 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/twilioServerMiddleware/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | firebase-debug.log*
8 |
9 | # Firebase cache
10 | .firebase/
11 |
12 | # Firebase config
13 |
14 | # Uncomment this if you'd like others to create their own Firebase project.
15 | # For a team working on the same Firebase project(s), it is recommended to leave
16 | # it commented so all members can deploy to the same project(s) in .firebaserc.
17 | # .firebaserc
18 |
19 | # Runtime data
20 | pids
21 | *.pid
22 | *.seed
23 | *.pid.lock
24 |
25 | # Directory for instrumented libs generated by jscoverage/JSCover
26 | lib-cov
27 |
28 | # Coverage directory used by tools like istanbul
29 | coverage
30 |
31 | # nyc test coverage
32 | .nyc_output
33 |
34 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
35 | .grunt
36 |
37 | # Bower dependency directory (https://bower.io/)
38 | bower_components
39 |
40 | # node-waf configuration
41 | .lock-wscript
42 |
43 | # Compiled binary addons (http://nodejs.org/api/addons.html)
44 | build/Release
45 |
46 | # Dependency directories
47 | node_modules/
48 |
49 | # Optional npm cache directory
50 | .npm
51 |
52 | # Optional eslint cache
53 | .eslintcache
54 |
55 | # Optional REPL history
56 | .node_repl_history
57 |
58 | # Output of 'npm pack'
59 | *.tgz
60 |
61 | # Yarn Integrity file
62 | .yarn-integrity
63 |
64 | # dotenv environment variables file
65 | .env
66 |
--------------------------------------------------------------------------------
/src/Core/api/firebase/user.js:
--------------------------------------------------------------------------------
1 | import { firebase } from './config';
2 |
3 | export const usersRef = firebase.firestore().collection('users');
4 |
5 | export const getUserData = async (userId) => {
6 | try {
7 | const user = await usersRef.doc(userId).get();
8 |
9 | return { data: { ...user.data(), id: user.id }, success: true };
10 | } catch (error) {
11 | console.log(error);
12 | return {
13 | error: 'Oops! an error occurred. Please try again',
14 | success: false,
15 | };
16 | }
17 | };
18 |
19 | export const updateUserData = async (userId, userData) => {
20 | try {
21 | const userRef = usersRef.doc(userId);
22 |
23 | await userRef.update({
24 | ...userData,
25 | });
26 |
27 | return { success: true };
28 | } catch (error) {
29 | return { error, success: false };
30 | }
31 | };
32 |
33 | export const subscribeUsers = (callback) => {
34 | return usersRef.onSnapshot((querySnapshot) => {
35 | const users = [];
36 | querySnapshot.forEach((doc) => {
37 | users.push(doc.data());
38 | });
39 | return callback(users);
40 | });
41 | };
42 |
43 | export const subscribeCurrentUser = (userId, callback) => {
44 | const ref = usersRef
45 | .where('id', '==', userId)
46 | .onSnapshot({ includeMetadataChanges: true }, (querySnapshot) => {
47 | const docs = querySnapshot.docs;
48 | if (docs.length > 0) {
49 | callback(docs[0].data());
50 | }
51 | });
52 | return ref;
53 | };
54 |
--------------------------------------------------------------------------------
/src/Core/api/firebase/timerConfig.js:
--------------------------------------------------------------------------------
1 | import { Platform, InteractionManager } from 'react-native';
2 |
3 | const _setTimeout = global.setTimeout;
4 | const _clearTimeout = global.clearTimeout;
5 | const MAX_TIMER_DURATION_MS = 60 * 1000;
6 | if (Platform.OS === 'android') {
7 | // Work around issue `Setting a timer for long time`
8 | // see: https://github.com/firebase/firebase-js-sdk/issues/97
9 | const timerFix = {};
10 | const runTask = (id, fn, ttl, args) => {
11 | const waitingTime = ttl - Date.now();
12 | if (waitingTime <= 1) {
13 | InteractionManager.runAfterInteractions(() => {
14 | if (!timerFix[id]) {
15 | return;
16 | }
17 | delete timerFix[id];
18 | fn(...args);
19 | });
20 | return;
21 | }
22 |
23 | const afterTime = Math.min(waitingTime, MAX_TIMER_DURATION_MS);
24 | timerFix[id] = _setTimeout(() => runTask(id, fn, ttl, args), afterTime);
25 | };
26 |
27 | global.setTimeout = (fn, time, ...args) => {
28 | if (MAX_TIMER_DURATION_MS < time) {
29 | const ttl = Date.now() + time;
30 | const id = '_lt_' + Object.keys(timerFix).length;
31 | runTask(id, fn, ttl, args);
32 | return id;
33 | }
34 | return _setTimeout(fn, time, ...args);
35 | };
36 |
37 | global.clearTimeout = (id) => {
38 | if (typeof id === 'string' && id.startsWith('_lt_')) {
39 | _clearTimeout(timerFix[id]);
40 | delete timerFix[id];
41 | return;
42 | }
43 | _clearTimeout(id);
44 | };
45 | }
46 |
--------------------------------------------------------------------------------
/src/screens/ConversationsScreen/ConversationsHomeComponent.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { ScrollView, View } from 'react-native';
3 | import { useColorScheme } from 'react-native-appearance';
4 | import { TNStoriesTray } from '../../Core/truly-native';
5 | import { IMConversationListView } from '../../Core/chat';
6 | import dynamicStyles from './styles';
7 |
8 | function ConversationsHomeComponent(props) {
9 | const {
10 | matches,
11 | onMatchUserItemPress,
12 | navigation,
13 | appStyles,
14 | emptyStateConfig,
15 | audioVideoChatConfig,
16 | } = props;
17 | const colorScheme = useColorScheme();
18 | const styles = dynamicStyles(colorScheme, appStyles);
19 |
20 | return (
21 |
22 |
23 |
31 |
32 |
38 |
39 |
40 |
41 | );
42 | }
43 |
44 | export default ConversationsHomeComponent;
45 |
--------------------------------------------------------------------------------
/android/app/src/main/java/com/mixnmatch/videoplayer/VideoPlayerModule.java:
--------------------------------------------------------------------------------
1 | package com.mixnmatch.videoplayer;
2 |
3 | import android.app.Activity;
4 | import android.content.Intent;
5 | import android.net.Uri;
6 |
7 | import com.facebook.react.bridge.ActivityEventListener;
8 | import com.facebook.react.bridge.ReactApplicationContext;
9 | import com.facebook.react.bridge.ReactContextBaseJavaModule;
10 | import com.facebook.react.bridge.ReactMethod;
11 |
12 | public class VideoPlayerModule extends ReactContextBaseJavaModule implements ActivityEventListener {
13 |
14 | public final int VIDEO_CODE = 1;
15 |
16 | public VideoPlayerModule(ReactApplicationContext reactContext) {
17 | super(reactContext);
18 | }
19 |
20 | @Override
21 | public String getName() {
22 | return "VideoPlayerManager";
23 | }
24 |
25 | @ReactMethod
26 | public void showVideoPlayer(String url) {
27 | Activity currentActivity = getCurrentActivity();
28 | if (currentActivity != null) {
29 | Intent videoIntent = new Intent(Intent.ACTION_VIEW);
30 | videoIntent.setDataAndType(Uri.parse(url), "video/*");
31 | currentActivity.startActivityForResult(videoIntent, VIDEO_CODE);
32 | }
33 | }
34 |
35 | @Override
36 | public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {
37 | if (requestCode == VIDEO_CODE) {
38 | getCurrentActivity().finish();
39 | }
40 | }
41 |
42 | @Override
43 | public void onNewIntent(Intent intent) {
44 |
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/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.instadating",
39 | )
40 |
41 | android_resource(
42 | name = "res",
43 | package = "com.instadating",
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 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNStoriesTray/TNStoryItem/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet } from 'react-native';
2 |
3 | const imageContainerWidth = 66;
4 | const imageWidth = imageContainerWidth - 6;
5 |
6 | const dynamicStyles = (appStyles, colorScheme) => {
7 | return StyleSheet.create({
8 | container: {
9 | margin: 8,
10 | overflow: 'hidden',
11 | },
12 | imageContainer: {
13 | width: imageContainerWidth,
14 | height: imageContainerWidth,
15 | borderRadius: Math.floor(imageContainerWidth / 2),
16 | borderColor: appStyles.colorSet[colorScheme].mainThemeForegroundColor,
17 | borderWidth: 2,
18 | justifyContent: 'center',
19 | alignItems: 'center',
20 | },
21 | image: {
22 | width: imageWidth,
23 | height: imageWidth,
24 | borderRadius: Math.floor(imageWidth / 2),
25 | borderColor: appStyles.colorSet[colorScheme].mainThemeBackgroundColor,
26 | borderWidth: 1,
27 | overflow: 'hidden',
28 | },
29 | text: {
30 | fontSize: 12,
31 | textAlign: 'center',
32 | color: appStyles.colorSet[colorScheme].mainSubtextColor,
33 | paddingTop: 5,
34 | },
35 | isOnlineIndicator: {
36 | position: 'absolute',
37 | backgroundColor: '#4acd1d',
38 | height: 16,
39 | width: 16,
40 | borderRadius: 16 / 2,
41 | borderWidth: 3,
42 | borderColor: appStyles.colorSet[colorScheme].mainThemeBackgroundColor,
43 | right: 5,
44 | bottom: 0,
45 | },
46 | });
47 | };
48 |
49 | export default dynamicStyles;
50 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNNumberPicker/TNNumberPicker.js:
--------------------------------------------------------------------------------
1 | import React, { useState } from 'react';
2 | import { Image, Text, TouchableOpacity, View } from 'react-native';
3 | import { useColorScheme } from 'react-native-appearance';
4 | import dynamicStyles from './styles';
5 |
6 | const assets = {
7 | plusIcon: require('./assets/plus-icon.png'),
8 | minusIcon: require('./assets/minus-icon.png'),
9 | };
10 |
11 | const TNNumberPicker = (props) => {
12 | const colorScheme = useColorScheme();
13 | const styles = dynamicStyles(props.appStyles, colorScheme);
14 | const { initialValue = 1, maxValue = 1000, minValue = 0, onChange } = props;
15 | const [value, setValue] = useState(initialValue);
16 |
17 | const onDecrement = () => {
18 | if (value > minValue) {
19 | setValue(value - 1);
20 | onChange(value - 1);
21 | }
22 | };
23 |
24 | const onIncrement = () => {
25 | if (value < maxValue) {
26 | setValue(value + 1);
27 | onChange(value + 1);
28 | }
29 | };
30 |
31 | return (
32 |
33 |
34 |
35 |
36 | {value}
37 |
38 |
39 |
40 |
41 | );
42 | };
43 |
44 | export default TNNumberPicker;
45 |
--------------------------------------------------------------------------------
/src/Core/localization/IMLocalization.js:
--------------------------------------------------------------------------------
1 | import memoize from 'lodash.memoize'; // Use for caching/memoize for better performance
2 | import i18n from 'i18n-js';
3 | import * as Localization from 'expo-localization';
4 | import { I18nManager } from 'react-native';
5 |
6 | export const translationGetters = {
7 | // lazy requires (metro bundler does not support symlinks)
8 | ar: () => require('../../Translations/ar.json'),
9 | en: () => require('../../Translations/en.json'),
10 | fr: () => require('../../Translations/fr.json'),
11 | };
12 |
13 | export const IMLocalized = memoize(
14 | (key, config) =>
15 | i18n.t(key, config).includes('missing') ? key : i18n.t(key, config),
16 | (key, config) => (config ? key + JSON.stringify(config) : key),
17 | );
18 |
19 | export const setI18nConfig = () => {
20 | // fallback if no available language fits
21 | const fallback = { languageTag: 'en', isRTL: false };
22 |
23 | // const { languageTag, isRTL } =
24 | // RNLocalize.findBestAvailableLanguage(Object.keys(translationGetters)) ||
25 | // fallback;
26 | let localeLanguageTag = Localization.locale;
27 | let isRTL = Localization.isRTL;
28 |
29 | if (localeLanguageTag) {
30 | localeLanguageTag = 'en';
31 | isRTL = false;
32 | }
33 |
34 | // i18n.fallbacks = true;
35 |
36 | // clear translation cache
37 | IMLocalized.cache.clear();
38 | // update layout direction
39 | I18nManager.forceRTL(isRTL);
40 | // set i18n-js config
41 | i18n.translations = {
42 | [localeLanguageTag]: translationGetters[localeLanguageTag](),
43 | };
44 | i18n.locale = localeLanguageTag;
45 | };
46 |
--------------------------------------------------------------------------------
/src/Core/notifications/Notification/IMNotification.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { ActivityIndicator, FlatList, View } from 'react-native';
3 | import { useColorScheme } from 'react-native-appearance';
4 | import IMNotificationItem from './IMNotificationItem';
5 | import dynamicStyles from './styles';
6 | import { TNEmptyStateView } from '../../truly-native';
7 |
8 | function IMNotification({
9 | notifications,
10 | onNotificationPress,
11 | appStyles,
12 | emptyStateConfig,
13 | }) {
14 | const colorScheme = useColorScheme();
15 | const styles = dynamicStyles(appStyles, colorScheme);
16 |
17 | const renderItem = ({ item }) => (
18 |
23 | );
24 |
25 | if (notifications == null) {
26 | return (
27 |
28 |
29 |
30 | );
31 | }
32 | if (notifications.length == 0) {
33 | return (
34 |
39 | );
40 | }
41 | return (
42 |
43 | item.id}
47 | removeClippedSubviews={true}
48 | />
49 |
50 | );
51 | }
52 |
53 | IMNotification.propTypes = {};
54 |
55 | export default IMNotification;
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 = "29.0.2"
6 | minSdkVersion = 24
7 | compileSdkVersion = 28
8 | targetSdkVersion = 28
9 | supportLibVersion = "28.0.0"
10 | // androidXAnnotation = "1.1.0"
11 | // androidXBrowser = "1.0.0"
12 | }
13 | repositories {
14 | google()
15 | jcenter()
16 | }
17 | dependencies {
18 | classpath 'com.android.tools.build:gradle:3.5.3'
19 | classpath 'com.google.gms:google-services:4.2.0'
20 |
21 | // NOTE: Do not place your application dependencies here; they belong
22 | // in the individual module build.gradle files
23 | }
24 | }
25 |
26 | allprojects {
27 | repositories {
28 | mavenLocal()
29 | google()
30 | jcenter()
31 | maven {
32 | // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
33 | url "$rootDir/../node_modules/react-native/android"
34 | }
35 | maven {
36 | // Android JSC is installed from npm
37 | url("$rootDir/../node_modules/jsc-android/dist")
38 | }
39 | maven { url 'https://maven.google.com' }
40 | maven { url 'https://www.jitpack.io' }
41 | maven {
42 | // expo-camera bundles a custom com.google.android:cameraview
43 | url "$rootDir/../node_modules/expo-camera/android/maven"
44 | }
45 | google()
46 | jcenter()
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/src/Core/onboarding/WalkthroughScreen/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet } from 'react-native';
2 |
3 | const dynamicStyles = (appStyles, colorScheme) => {
4 | return StyleSheet.create({
5 | title: {
6 | fontSize: 34,
7 | fontWeight: 'bold',
8 | textAlign: 'center',
9 | paddingBottom: 25,
10 | color: appStyles.colorSet[colorScheme].mainThemeForegroundColor,
11 | },
12 | text: {
13 | fontSize: 18,
14 | textAlign: 'center',
15 | color: appStyles.colorSet[colorScheme].mainSubtextColor,
16 | paddingLeft: 10,
17 | paddingRight: 10,
18 | },
19 | image: {
20 | width: 100,
21 | height: 100,
22 | marginBottom: 60,
23 | tintColor: 'white',
24 | },
25 | container: {
26 | flex: 1,
27 | flexDirection: 'column',
28 | justifyContent: 'center',
29 | alignItems: 'center',
30 | backgroundColor: appStyles.colorSet[colorScheme].mainThemeBackgroundColor,
31 | },
32 | backgroundImage: {
33 | flex: 1,
34 | top: '-36%',
35 | height: '100%',
36 | width: '100%',
37 | // justifyContent: 'flex-end',
38 | // alignItems: 'center',
39 | },
40 | descriptionContainer: {
41 | top: '-25%',
42 | // flex: 0.4,
43 | // marginTop: '100%'
44 | },
45 | button: {
46 | fontSize: 18,
47 | color: 'white',
48 | marginTop: 10,
49 | },
50 | dot: {
51 | backgroundColor: 'rgba(187,187,187,0.3)',
52 | top: '-20%'
53 | },
54 | activeDot: {
55 | backgroundColor: '#BBBBBB',
56 | top: '-20%'
57 | }
58 | });
59 | };
60 |
61 | export default dynamicStyles;
62 |
--------------------------------------------------------------------------------
/src/Core/chat/audioVideo/webRTC/redux/index.js:
--------------------------------------------------------------------------------
1 | const UPDATE_USER = 'UPDATE_USER';
2 | const SET_IS_MEDIA_CHAT_VISIBLE = 'SET_IS_MEDIA_CHAT_VISIBLE';
3 | const SET_MEDIA_CHAT_RECEIVER = 'SET_MEDIA_CHAT_RECEIVER';
4 | const SET_MEDIA_CHAT_DATA = 'SET_MEDIA_CHAT_DATA';
5 |
6 | export const setMediaChatReceivers = (data) => ({
7 | type: SET_MEDIA_CHAT_RECEIVER,
8 | data,
9 | });
10 |
11 | export const setIsMediaChatVisible = (data) => ({
12 | type: SET_IS_MEDIA_CHAT_VISIBLE,
13 | data,
14 | });
15 |
16 | export const setMediaChatData = (data) => ({
17 | type: SET_MEDIA_CHAT_DATA,
18 | data,
19 | });
20 |
21 | const initialState = {
22 | audioVideoChatReceivers: [],
23 | chatType: '',
24 | channelId: '',
25 | channelTitle: '',
26 | mediaChatData: null,
27 | isMediaChatVisible: false,
28 | user: {},
29 | };
30 |
31 | export const audioVideoChat = (state = initialState, action) => {
32 | switch (action.type) {
33 | case UPDATE_USER:
34 | return {
35 | ...state,
36 | user: action.data.user,
37 | };
38 | case SET_MEDIA_CHAT_RECEIVER:
39 | return {
40 | ...state,
41 | audioVideoChatReceivers: [...action.data.receivers],
42 | chatType: action.data.type,
43 | channelId: action.data.channelId,
44 | channelTitle: action.data.channelTitle,
45 | };
46 | case SET_IS_MEDIA_CHAT_VISIBLE:
47 | return {
48 | ...state,
49 | isMediaChatVisible: action.data,
50 | };
51 | case SET_MEDIA_CHAT_DATA:
52 | return {
53 | ...state,
54 | mediaChatData: action.data,
55 | };
56 | case 'LOG_OUT':
57 | return initialState;
58 | default:
59 | return state;
60 | }
61 | };
62 |
--------------------------------------------------------------------------------
/ios/MixnMatch-tvOS/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 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | NSAppTransportSecurity
26 |
27 | NSExceptionDomains
28 |
29 | localhost
30 |
31 | NSExceptionAllowsInsecureHTTPLoads
32 |
33 |
34 |
35 |
36 | NSLocationWhenInUseUsageDescription
37 |
38 | UILaunchStoryboardName
39 | LaunchScreen
40 | UIRequiredDeviceCapabilities
41 |
42 | armv7
43 |
44 | UISupportedInterfaceOrientations
45 |
46 | UIInterfaceOrientationPortrait
47 | UIInterfaceOrientationLandscapeLeft
48 | UIInterfaceOrientationLandscapeRight
49 |
50 | UIViewControllerBasedStatusBarAppearance
51 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/src/Core/mentions/IMRichTextInput/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet, Dimensions } from 'react-native';
2 | const width = Dimensions.get('window').width;
3 |
4 | const dynamicStyles = (colorScheme, appStyles) => {
5 | return new StyleSheet.create({
6 | container: {
7 | width: width,
8 | height: '100%',
9 | },
10 | editorContainer: {
11 | height: '100%',
12 | },
13 | textContainer: {
14 | alignSelf: 'stretch',
15 | position: 'relative',
16 | minHeight: 40,
17 | maxHeight: 140,
18 | },
19 | input: {
20 | fontSize: 16,
21 | color: appStyles.colorSet[colorScheme].mainTextColor,
22 | fontWeight: '400',
23 | paddingHorizontal: 20,
24 | minHeight: 40,
25 | position: 'absolute',
26 | top: 0,
27 | color: 'transparent',
28 | alignSelf: 'stretch',
29 | width: '100%',
30 | height: '100%',
31 | },
32 | formmatedTextWrapper: {
33 | minHeight: 40,
34 | position: 'absolute',
35 | top: 0,
36 | paddingHorizontal: 20,
37 | paddingVertical: 5,
38 | width: '100%',
39 | },
40 | formmatedText: {
41 | fontSize: 16,
42 | fontWeight: '400',
43 | },
44 | mention: {
45 | fontSize: 16,
46 | fontWeight: '400',
47 | backgroundColor: 'rgba(36, 77, 201, 0.05)',
48 | color: '#244dc9',
49 | },
50 | placeholderText: {
51 | color: 'rgba(0, 0, 0, 0.1)',
52 | fontSize: 16,
53 | },
54 | });
55 | };
56 |
57 | export const mentionStyle = {
58 | mention: {
59 | fontSize: 16,
60 | fontWeight: '400',
61 | backgroundColor: 'rgba(36, 77, 201, 0.05)',
62 | color: '#244dc9',
63 | },
64 | };
65 |
66 | export default dynamicStyles;
67 |
--------------------------------------------------------------------------------
/src/Core/profile/ui/IMProfileSettingsScreen/IMProfileSettingsScreen.js:
--------------------------------------------------------------------------------
1 | import React, { useLayoutEffect } from 'react';
2 | import { useDispatch, useSelector } from 'react-redux';
3 | import IMProfileSettings from '../components/IMProfileSettings/IMProfileSettings';
4 | import { logout } from '../../../onboarding/redux/auth';
5 | import { IMLocalized } from '../../../localization/IMLocalization';
6 | import { useColorScheme } from 'react-native-appearance';
7 |
8 | const IMProfileSettingsScreen = (props) => {
9 | const appStyles = props.route.params.appStyles;
10 | const colorScheme = useColorScheme();
11 | const currentTheme = appStyles.navThemeConstants[colorScheme];
12 | const navigation = props.navigation;
13 | const appConfig = props.route.params.appConfig;
14 | const lastScreenTitle = props.route.params?.lastScreenTitle
15 | ? props.route.params?.lastScreenTitle
16 | : 'Profile';
17 |
18 | const currentUser = useSelector((state) => state.auth.user);
19 |
20 | const dispatch = useDispatch();
21 |
22 | useLayoutEffect(() => {
23 | navigation.setOptions({
24 | headerTitle: IMLocalized('Settings'),
25 | headerStyle: {
26 | backgroundColor: currentTheme.backgroundColor,
27 | borderBottomColor: currentTheme.hairlineColor,
28 | },
29 | headerTintColor: currentTheme.fontColor,
30 | });
31 | }, []);
32 |
33 | const onLogout = () => {
34 | dispatch(logout());
35 | };
36 |
37 | return (
38 |
46 | );
47 | };
48 |
49 | export default IMProfileSettingsScreen;
50 |
--------------------------------------------------------------------------------
/src/components/swipe/no_more_card.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import PropTypes from 'prop-types';
3 | import { StyleSheet, View, Text } from 'react-native';
4 | import FastImage from 'react-native-fast-image';
5 | import { size } from '../../helpers/devices';
6 | import { IMLocalized } from '../../Core/localization/IMLocalization';
7 |
8 | const NoMoreCard = (props) => {
9 | return (
10 |
11 | {props.profilePictureURL && (
12 |
16 | )}
17 |
18 | {props.profilePictureURL ? (
19 |
20 | {IMLocalized("There's no one new around you.")}
21 |
22 | ) : (
23 |
24 |
25 | {IMLocalized(
26 | 'Please complete your dating profile to view recommendations.',
27 | )}
28 |
29 |
30 | )}
31 |
32 | );
33 | };
34 |
35 | NoMoreCard.propTypes = {
36 | isProfileComplete: PropTypes.bool,
37 | profilePictureURL: PropTypes.string,
38 | url: PropTypes.string,
39 | };
40 |
41 | const styles = StyleSheet.create({
42 | container: {
43 | flex: 1,
44 | justifyContent: 'center',
45 | alignItems: 'center',
46 | },
47 | user_pic_style: {
48 | width: size(90),
49 | height: size(90),
50 | borderRadius: size(45),
51 | marginBottom: size(15),
52 | },
53 | empty_state_text_style: {
54 | fontSize: size(14),
55 | color: '#777777',
56 | textAlign: 'center',
57 | },
58 | });
59 |
60 | export default NoMoreCard;
61 |
--------------------------------------------------------------------------------
/src/Core/profile/ui/components/IMUserProfileComponent/styles.js:
--------------------------------------------------------------------------------
1 | import { Dimensions } from 'react-native';
2 | import { StyleSheet } from 'react-native';
3 |
4 | const { height } = Dimensions.get('window');
5 | const imageSize = height * 0.14;
6 |
7 | const dynamicStyles = (appStyles, colorScheme) => {
8 | return StyleSheet.create({
9 | container: {
10 | flex: 1,
11 | alignItems: 'center',
12 | backgroundColor: appStyles.colorSet[colorScheme].mainThemeBackgroundColor,
13 | },
14 | buttonContainer: {
15 | height: 53,
16 | width: '98%',
17 | backgroundColor: 'transparent',
18 | justifyContent: 'center',
19 | alignItems: 'center',
20 | },
21 | imageContainer: {
22 | height: imageSize,
23 | width: imageSize,
24 | marginTop: 50,
25 | },
26 | closeButton: {
27 | alignSelf: 'flex-end',
28 | alignItems: 'center',
29 | justifyContent: 'center',
30 | marginTop: 20,
31 | marginRight: 15,
32 | backgroundColor: appStyles.colorSet[colorScheme].grey0,
33 | width: 28,
34 | height: 28,
35 | borderRadius: 20,
36 | overflow: 'hidden',
37 | },
38 | closeIcon: {
39 | width: 27,
40 | height: 27,
41 | },
42 | userName: {
43 | marginTop: 5,
44 | color: appStyles.colorSet[colorScheme].mainTextColor,
45 | fontSize: 17,
46 | marginBottom: 40,
47 | },
48 | logout: {
49 | width: '90%',
50 | borderWidth: 1,
51 | color: appStyles.colorSet[colorScheme].mainTextColor,
52 | fontSize: 15,
53 | paddingVertical: 10,
54 | borderColor: appStyles.colorSet[colorScheme].grey3,
55 | borderRadius: 5,
56 | textAlign: 'center',
57 | },
58 | });
59 | };
60 |
61 | export default dynamicStyles;
62 |
--------------------------------------------------------------------------------
/src/Core/onboarding/ResetPasswordScreen/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet, Dimensions } from 'react-native';
2 | import { I18nManager } from 'react-native';
3 | import { modedColor } from '../../helpers/colors';
4 | import TNColor from '../../truly-native/TNColor';
5 |
6 | const dynamicStyles = (appStyles, colorScheme) => {
7 | return StyleSheet.create({
8 | container: {
9 | flex: 1,
10 | alignItems: 'center',
11 | justifyContent: 'center',
12 | backgroundColor: appStyles.colorSet[colorScheme].mainThemeBackgroundColor,
13 | },
14 | title: {
15 | fontSize: 30,
16 | fontWeight: 'bold',
17 | color: appStyles.colorSet[colorScheme].mainThemeForegroundColor,
18 | marginTop: 25,
19 | marginBottom: 50,
20 | alignSelf: 'stretch',
21 | textAlign: 'left',
22 | marginLeft: 35,
23 | },
24 | sendContainer: {
25 | width: '70%',
26 | backgroundColor: appStyles.colorSet[colorScheme].mainThemeForegroundColor,
27 | borderRadius: 30,
28 | padding: 20,
29 | marginTop: 30,
30 | alignSelf: 'center',
31 | },
32 | sendText: {
33 | fontWeight: 'bold',
34 | color: '#ffffff',
35 | },
36 | InputContainer: {
37 | height: 42,
38 | borderWidth: 0,
39 | borderBottomWidth: 1,
40 | borderColor: appStyles.colorSet[colorScheme].grey3,
41 | backgroundColor: modedColor(
42 | appStyles.colorSet[colorScheme].mainThemeBackgroundColor,
43 | TNColor('#e0e0e0'),
44 | ),
45 | paddingLeft: 10,
46 | color: appStyles.colorSet[colorScheme].mainTextColor,
47 | width: '80%',
48 | alignSelf: 'center',
49 | marginTop: 20,
50 | alignItems: 'center',
51 | borderRadius: 0,
52 | },
53 | });
54 | };
55 |
56 | export default dynamicStyles;
57 |
--------------------------------------------------------------------------------
/src/Core/chat/IMConversationListView/IMConversationListView.js:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import React, {
3 | useEffect,
4 | useLayoutEffect,
5 | useContext,
6 | useState,
7 | useRef,
8 | } from 'react';
9 | import { useSelector, ReactReduxContext } from 'react-redux';
10 | import IMConversationList from '../IMConversationList';
11 | import { ChannelsTracker } from '../api';
12 |
13 | const IMConversationListView = (props) => {
14 | const appStyles =
15 | (props.navigation &&
16 | props.route &&
17 | props.route.params &&
18 | props.route.params.appStyles) ||
19 | props.appStyles;
20 | const currentUser = useSelector((state) => state.auth.user);
21 | const channels = useSelector((state) => state.chat.channels);
22 | const { store } = useContext(ReactReduxContext);
23 | const channelsTracker = useRef(null);
24 |
25 | useEffect(() => {
26 | const userId = currentUser.id || currentUser.userID;
27 | if (!userId) {
28 | return;
29 | }
30 | channelsTracker.current = new ChannelsTracker(store, userId);
31 | channelsTracker.current.subscribeIfNeeded();
32 | }, [currentUser?.id]);
33 |
34 | useEffect(() => {
35 | return () => {
36 | channelsTracker.current?.unsubscribe();
37 | };
38 | }, []);
39 |
40 | const onConversationPress = (channel) => {
41 | props.navigation.navigate('PersonalChat', {
42 | channel: { ...channel, name: channel.title },
43 | appStyles: appStyles,
44 | });
45 | };
46 |
47 | return (
48 |
56 | );
57 | };
58 |
59 | export default IMConversationListView;
60 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNTouchableIcon/TNTouchableIcon.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { TouchableOpacity, Image, Text } from 'react-native';
3 | import PropTypes from 'prop-types';
4 | import dynamicStyles from './styles';
5 | import { useColorScheme } from 'react-native-appearance';
6 |
7 | function TNTouchableIcon(props) {
8 | const {
9 | onPress,
10 | containerStyle,
11 | iconSource,
12 | imageStyle,
13 | title,
14 | titleStyle,
15 | renderTitle,
16 | onLongPress,
17 | onPressOut,
18 | onPressIn,
19 | iconRef,
20 | onLayout,
21 | appStyles,
22 | } = props;
23 | const colorScheme = useColorScheme();
24 | const styles = dynamicStyles(appStyles, colorScheme);
25 |
26 | return (
27 |
35 |
36 | {renderTitle && {title}}
37 |
38 | );
39 | }
40 |
41 | TNTouchableIcon.propTypes = {
42 | onPress: PropTypes.func,
43 | onPressIn: PropTypes.func,
44 | onPressOut: PropTypes.func,
45 | onLongPress: PropTypes.func,
46 | imageStyle: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
47 | containerStyle: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
48 | titleStyle: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
49 | iconSource: Image.propTypes.source,
50 | title: PropTypes.oneOfType([PropTypes.style, PropTypes.number]),
51 | renderTitle: PropTypes.bool,
52 | iconRef: PropTypes.any,
53 | onLayout: PropTypes.func,
54 | };
55 |
56 | export default TNTouchableIcon;
57 |
--------------------------------------------------------------------------------
/src/Core/truly-native/TNProfilePictureSelector/styles.js:
--------------------------------------------------------------------------------
1 | import { Dimensions } from 'react-native';
2 | import { StyleSheet } from 'react-native';
3 |
4 | const { height } = Dimensions.get('window');
5 | const imageSize = height * 0.3;
6 | const photoIconSize = imageSize * 0.27;
7 |
8 | const dynamicStyles = (appStyles, colorScheme) => {
9 | return StyleSheet.create({
10 | image: {
11 | width: '100%',
12 | height: '100%',
13 | },
14 | imageBlock: {
15 | flex: 2,
16 | flexDirection: 'row',
17 | width: '100%',
18 | justifyContent: 'center',
19 | alignItems: 'center',
20 | marginBottom: 20,
21 | },
22 | imageContainer: {
23 | height: imageSize,
24 | width: '100%',
25 | // borderRadius: imageSize,
26 | borderRadius: 0,
27 | shadowColor: '#006',
28 | shadowOffset: {
29 | width: 0,
30 | height: 2,
31 | },
32 | shadowOpacity: 0.1,
33 | overflow: 'hidden',
34 | },
35 |
36 | addButton: {
37 | alignItems: 'center',
38 | justifyContent: 'center',
39 | backgroundColor: '#d6d6d6',
40 | opacity: 0.8,
41 | zIndex: 2,
42 | marginTop: imageSize * 0.73,
43 | marginLeft: -imageSize * 0.27,
44 | width: photoIconSize,
45 | height: photoIconSize,
46 | // borderRadius: photoIconSize,
47 | borderRadius: 0,
48 | },
49 | closeButton: {
50 | alignSelf: 'flex-end',
51 | alignItems: 'center',
52 | justifyContent: 'center',
53 | marginTop: 40,
54 | marginRight: 15,
55 | backgroundColor: appStyles.colorSet[colorScheme].grey6,
56 | width: 28,
57 | height: 28,
58 | borderRadius: 20,
59 | overflow: 'hidden',
60 | },
61 | closeIcon: {
62 | width: 27,
63 | height: 27,
64 | },
65 | });
66 | };
67 |
68 | export default dynamicStyles;
69 |
--------------------------------------------------------------------------------
/src/Core/notifications/Notification/styles.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet } from 'react-native';
2 |
3 | const imageSize = 40;
4 |
5 | const dynamicStyles = (appStyles, colorScheme) => {
6 | return StyleSheet.create({
7 | container: {
8 | flex: 1,
9 | flexDirection: 'row',
10 | backgroundColor: appStyles.colorSet[colorScheme].mainThemeBackgroundColor,
11 | },
12 | userImageMainContainer: {
13 | flex: 1,
14 | margin: 0,
15 | justifyContent: 'center',
16 | alignItems: 'center',
17 | marginBottom: 7,
18 | },
19 | userImageContainer: {
20 | width: imageSize,
21 | height: imageSize,
22 | borderWidth: 0,
23 | alignItems: 'flex-end',
24 | },
25 | userImage: {
26 | width: imageSize,
27 | height: imageSize,
28 | },
29 | notificationItemBackground: {
30 | flex: 1,
31 | },
32 | notificationItemContainer: {
33 | flexDirection: 'row',
34 | width: '95%',
35 | height: 82,
36 | alignSelf: 'center',
37 | borderBottomColor: appStyles.colorSet[colorScheme].hairlineColor,
38 | borderBottomWidth: 0.3,
39 | },
40 | notificationLabelContainer: {
41 | flex: 5.4,
42 | justifyContent: 'center',
43 | },
44 | description: {
45 | color: appStyles.colorSet[colorScheme].mainTextColor,
46 | fontSize: 12,
47 | paddingVertical: 6,
48 | },
49 | name: {
50 | fontWeight: '700',
51 | },
52 | moment: {
53 | fontSize: 10,
54 | },
55 | seenNotificationBackground: {
56 | backgroundColor: appStyles.colorSet[colorScheme].mainThemeBackgroundColor,
57 | },
58 | unseenNotificationBackground: {
59 | backgroundColor: appStyles.colorSet[colorScheme].mainButtonColor,
60 | },
61 | emptyStateView: {
62 | marginTop: 120,
63 | },
64 | });
65 | };
66 |
67 | export default dynamicStyles;
68 |
--------------------------------------------------------------------------------
/src/components/ActivityModal.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { StyleSheet, View, Text, Modal, ActivityIndicator } from 'react-native';
3 | import PropTypes from 'prop-types';
4 |
5 | const ActivityModal = ({
6 | loading = false,
7 | activityColor,
8 | activityWrapperStyle,
9 | size,
10 | opacity = 0.4,
11 | title = '',
12 | titleColor,
13 | }) => {
14 | return (
15 |
16 |
21 |
22 |
27 |
28 | {title}
29 |
30 |
31 |
32 |
33 | );
34 | };
35 |
36 | ActivityModal.propTypes = {
37 | loading: PropTypes.bool.isRequired,
38 | activityColor: PropTypes.string,
39 | size: PropTypes.string,
40 | opacity: (props, propName) => {
41 | if (props[propName] < 0 || props[propName] > 1) {
42 | return new Error('Opacity prop value out of range');
43 | }
44 | },
45 | title: PropTypes.string,
46 | titleColor: PropTypes.string,
47 | activityWrapperStyle: PropTypes.any,
48 | };
49 |
50 | const styles = StyleSheet.create({
51 | modalBackground: {
52 | flex: 1,
53 | alignItems: 'center',
54 | justifyContent: 'center',
55 | },
56 | activityIndicatorWrapper: {
57 | height: 100,
58 | width: 100,
59 | borderRadius: 10,
60 | alignItems: 'center',
61 | justifyContent: 'center',
62 | },
63 | title: {
64 | paddingTop: 8,
65 | },
66 | });
67 |
68 | export default ActivityModal;
69 |
--------------------------------------------------------------------------------
/src/components/AvatorView.js:
--------------------------------------------------------------------------------
1 | import React, { useState, useRef, useEffect } from 'react';
2 | import PropTypes from 'prop-types';
3 | import { StyleSheet, View } from 'react-native';
4 | import { firebase } from '../Core/api/firebase/config';
5 | import AppStyles from '../AppStyles';
6 | import FastImage from 'react-native-fast-image';
7 |
8 | const AvatorView = (props) => {
9 | const [profilePictureURL, setProfilePictureURL] = useState('');
10 | const usersUnsubscribe = useRef(null);
11 |
12 | const usersRef = firebase.firestore().collection('users');
13 | const userRef = usersRef.doc(props.user.userID);
14 |
15 | useEffect(() => {
16 | usersUnsubscribe.current = userRef.onSnapshot((user) => {
17 | if (user.exists) {
18 | setProfilePictureURL(user.data().profilePictureURL);
19 | }
20 | });
21 |
22 | return () => {
23 | usersUnsubscribe.current && usersUnsubscribe.current();
24 | };
25 | }, []);
26 |
27 | return (
28 |
29 |
33 |
43 |
44 | );
45 | };
46 |
47 | AvatorView.propTypes = {
48 | user: PropTypes.object,
49 | style: PropTypes.any,
50 | };
51 |
52 | const styles = StyleSheet.create({
53 | container: {},
54 | profileIcon: {
55 | height: 60,
56 | width: 60,
57 | borderRadius: 30,
58 | },
59 | onlineView: {
60 | position: 'absolute',
61 | right: 0,
62 | bottom: 0,
63 | width: 16,
64 | height: 16,
65 | borderRadius: 8,
66 | borderWidth: 3,
67 | borderColor: 'white',
68 | },
69 | });
70 |
71 | export default AvatorView;
72 |
--------------------------------------------------------------------------------