├── android
├── app
│ ├── src
│ │ ├── main
│ │ │ ├── res
│ │ │ │ ├── values-night
│ │ │ │ │ └── colors.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── drawable-hdpi
│ │ │ │ │ └── splashscreen_image.png
│ │ │ │ ├── drawable-mdpi
│ │ │ │ │ └── splashscreen_image.png
│ │ │ │ ├── drawable-xhdpi
│ │ │ │ │ └── splashscreen_image.png
│ │ │ │ ├── drawable-xxhdpi
│ │ │ │ │ └── splashscreen_image.png
│ │ │ │ ├── drawable-xxxhdpi
│ │ │ │ │ └── splashscreen_image.png
│ │ │ │ ├── drawable
│ │ │ │ │ ├── splashscreen.xml
│ │ │ │ │ └── rn_edit_text_material.xml
│ │ │ │ ├── values
│ │ │ │ │ ├── colors.xml
│ │ │ │ │ ├── strings.xml
│ │ │ │ │ └── styles.xml
│ │ │ │ └── mipmap-anydpi-v26
│ │ │ │ │ ├── ic_launcher.xml
│ │ │ │ │ └── ic_launcher_round.xml
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── inx
│ │ │ │ │ └── inx
│ │ │ │ │ ├── MainApplication.kt
│ │ │ │ │ └── MainActivity.kt
│ │ │ └── AndroidManifest.xml
│ │ └── debug
│ │ │ └── AndroidManifest.xml
│ ├── debug.keystore
│ ├── proguard-rules.pro
│ └── build.gradle
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── .gitignore
├── react-settings-plugin
│ ├── src
│ │ └── main
│ │ │ └── kotlin
│ │ │ └── expo
│ │ │ └── plugins
│ │ │ └── ReactSettingsPlugin.kt
│ └── build.gradle.kts
├── build.gradle
├── gradle.properties
├── settings.gradle
├── gradlew.bat
└── gradlew
├── .gitattributes
├── assets
├── icon.png
├── splash.png
├── favicon.png
└── adaptive-icon.png
├── src
├── assets
│ ├── images
│ │ ├── splash.png
│ │ ├── header_2.svg
│ │ └── header.svg
│ ├── fonts
│ │ ├── Nunito
│ │ │ ├── Nunito-Black.ttf
│ │ │ ├── Nunito-Bold.ttf
│ │ │ ├── Nunito-Light.ttf
│ │ │ ├── Nunito-Italic.ttf
│ │ │ ├── Nunito-Medium.ttf
│ │ │ ├── Nunito-Regular.ttf
│ │ │ ├── Nunito-BoldItalic.ttf
│ │ │ ├── Nunito-ExtraBold.ttf
│ │ │ ├── Nunito-ExtraLight.ttf
│ │ │ ├── Nunito-SemiBold.ttf
│ │ │ ├── Nunito-BlackItalic.ttf
│ │ │ ├── Nunito-LightItalic.ttf
│ │ │ ├── Nunito-MediumItalic.ttf
│ │ │ ├── Nunito-ExtraBoldItalic.ttf
│ │ │ ├── Nunito-SemiBoldItalic.ttf
│ │ │ └── Nunito-ExtraLightItalic.ttf
│ │ └── Manrope
│ │ │ ├── Manrope-Bold.ttf
│ │ │ ├── Manrope-Light.ttf
│ │ │ ├── Manrope-Medium.ttf
│ │ │ ├── Manrope-Regular.ttf
│ │ │ ├── Manrope-SemiBold.ttf
│ │ │ ├── Manrope-ExtraBold.ttf
│ │ │ └── Manrope-ExtraLight.ttf
│ └── icons
│ │ ├── dot-green.svg
│ │ ├── back_2.svg
│ │ ├── back.svg
│ │ ├── down-gray.svg
│ │ ├── up-gray.svg
│ │ ├── up.svg
│ │ ├── forward-gray.svg
│ │ ├── forward.svg
│ │ ├── down.svg
│ │ ├── cross.svg
│ │ ├── plus.svg
│ │ ├── filter.svg
│ │ ├── menu.svg
│ │ ├── st-subscription.svg
│ │ ├── dot_on.svg
│ │ ├── apple.svg
│ │ ├── st-str.svg
│ │ ├── signal.svg
│ │ ├── chat_1.svg
│ │ ├── lock.svg
│ │ ├── chat_2.svg
│ │ ├── keepup_1.svg
│ │ ├── keepup_2.svg
│ │ ├── st-download.svg
│ │ ├── calendar-heart.svg
│ │ ├── st-chat.svg
│ │ ├── friend-except.svg
│ │ ├── add-friend.svg
│ │ ├── home_2.svg
│ │ ├── home_1.svg
│ │ ├── notifications_1.svg
│ │ ├── notifications_2.svg
│ │ ├── st-language.svg
│ │ ├── st-dark.svg
│ │ ├── friends.svg
│ │ ├── st-profile.svg
│ │ ├── search.svg
│ │ ├── wallet_1.svg
│ │ ├── google.svg
│ │ ├── wallet_2.svg
│ │ ├── st-guideline.svg
│ │ ├── edit_avatar.svg
│ │ ├── st-active.svg
│ │ ├── world.svg
│ │ ├── st-notifications.svg
│ │ ├── calendar.svg
│ │ ├── st-terms.svg
│ │ ├── st-location.svg
│ │ ├── st-wallet.svg
│ │ ├── edit.svg
│ │ ├── geoloc.svg
│ │ ├── st-sos.svg
│ │ ├── v-threedot.svg
│ │ ├── specific-friends.svg
│ │ ├── friend_1.svg
│ │ ├── msg-plus.svg
│ │ ├── st-privacy.svg
│ │ ├── pending-friend.svg
│ │ ├── st-how.svg
│ │ ├── friend_2.svg
│ │ ├── st-apps.svg
│ │ ├── st-publiccontent.svg
│ │ ├── st-blocked.svg
│ │ ├── h-threedot.svg
│ │ ├── heart-star.svg
│ │ ├── add-friend-rounded.svg
│ │ ├── default.svg
│ │ ├── st-ads.svg
│ │ ├── st-cookies.svg
│ │ ├── st-access.svg
│ │ ├── sad.svg
│ │ ├── settings_1.svg
│ │ ├── settings_2.svg
│ │ └── st-defaultsettings.svg
├── contexts
│ └── AuthContext.tsx
├── screens
│ ├── theme.ts
│ ├── HomeScreen.tsx
│ └── LoginScreen.tsx
└── navigation
│ ├── MainNavigator.tsx
│ └── RootLayout.tsx
├── babel.config.js
├── tsconfig.json
├── .gitignore
├── App.tsx
├── eas.json
├── app.json
├── LICENSE
└── package.json
/android/app/src/main/res/values-night/colors.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/assets/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/assets/icon.png
--------------------------------------------------------------------------------
/assets/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/assets/splash.png
--------------------------------------------------------------------------------
/assets/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/assets/favicon.png
--------------------------------------------------------------------------------
/assets/adaptive-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/assets/adaptive-icon.png
--------------------------------------------------------------------------------
/android/app/debug.keystore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/android/app/debug.keystore
--------------------------------------------------------------------------------
/src/assets/images/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/images/splash.png
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = function(api) {
2 | api.cache(true);
3 | return {
4 | presets: ['babel-preset-expo'],
5 | };
6 | };
7 |
--------------------------------------------------------------------------------
/src/assets/fonts/Nunito/Nunito-Black.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Nunito/Nunito-Black.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/Nunito/Nunito-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Nunito/Nunito-Bold.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/Nunito/Nunito-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Nunito/Nunito-Light.ttf
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/src/assets/fonts/Manrope/Manrope-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Manrope/Manrope-Bold.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/Manrope/Manrope-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Manrope/Manrope-Light.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/Nunito/Nunito-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Nunito/Nunito-Italic.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/Nunito/Nunito-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Nunito/Nunito-Medium.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/Nunito/Nunito-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Nunito/Nunito-Regular.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/Manrope/Manrope-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Manrope/Manrope-Medium.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/Manrope/Manrope-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Manrope/Manrope-Regular.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/Manrope/Manrope-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Manrope/Manrope-SemiBold.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/Nunito/Nunito-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Nunito/Nunito-BoldItalic.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/Nunito/Nunito-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Nunito/Nunito-ExtraBold.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/Nunito/Nunito-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Nunito/Nunito-ExtraLight.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/Nunito/Nunito-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Nunito/Nunito-SemiBold.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/Manrope/Manrope-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Manrope/Manrope-ExtraBold.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/Manrope/Manrope-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Manrope/Manrope-ExtraLight.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/Nunito/Nunito-BlackItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Nunito/Nunito-BlackItalic.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/Nunito/Nunito-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Nunito/Nunito-LightItalic.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/Nunito/Nunito-MediumItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Nunito/Nunito-MediumItalic.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/Nunito/Nunito-ExtraBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Nunito/Nunito-ExtraBoldItalic.ttf
--------------------------------------------------------------------------------
/src/assets/fonts/Nunito/Nunito-SemiBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Nunito/Nunito-SemiBoldItalic.ttf
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/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/NFTknight/ReactNative-Expo-OAuth/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/src/assets/fonts/Nunito/Nunito-ExtraLightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/src/assets/fonts/Nunito/Nunito-ExtraLightItalic.ttf
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/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/NFTknight/ReactNative-Expo-OAuth/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/NFTknight/ReactNative-Expo-OAuth/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/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/NFTknight/ReactNative-Expo-OAuth/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/NFTknight/ReactNative-Expo-OAuth/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/NFTknight/ReactNative-Expo-OAuth/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi/splashscreen_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/android/app/src/main/res/drawable-hdpi/splashscreen_image.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-mdpi/splashscreen_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/android/app/src/main/res/drawable-mdpi/splashscreen_image.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xhdpi/splashscreen_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/android/app/src/main/res/drawable-xhdpi/splashscreen_image.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxhdpi/splashscreen_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/android/app/src/main/res/drawable-xxhdpi/splashscreen_image.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxxhdpi/splashscreen_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/android/app/src/main/res/drawable-xxxhdpi/splashscreen_image.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/splashscreen.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NFTknight/ReactNative-Expo-OAuth/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/src/assets/icons/dot-green.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | # OSX
2 | #
3 | .DS_Store
4 |
5 | # Android/IntelliJ
6 | #
7 | build/
8 | .idea
9 | .gradle
10 | local.properties
11 | *.iml
12 | *.hprof
13 | .cxx/
14 |
15 | # Bundle artifacts
16 | *.jsbundle
17 |
--------------------------------------------------------------------------------
/src/assets/icons/back_2.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/assets/icons/back.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 | #ffffff
3 | #ffffff
4 | #023c69
5 | #ffffff
6 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | inx
3 | contain
4 | false
5 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-all.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/android/react-settings-plugin/src/main/kotlin/expo/plugins/ReactSettingsPlugin.kt:
--------------------------------------------------------------------------------
1 | package expo.plugins
2 |
3 | import org.gradle.api.Plugin
4 | import org.gradle.api.initialization.Settings
5 |
6 | class ReactSettingsPlugin : Plugin {
7 | override fun apply(settings: Settings) {
8 | // Do nothing, just register the plugin.
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "expo/tsconfig.base",
3 | "compilerOptions": {
4 | "strict": true,
5 | "baseUrl": "./",
6 | "paths": {
7 | "@components/*": ["src/components/*"],
8 | "@screens/*": ["src/screens/*"],
9 | "@assets/*": ["src/assets/*"],
10 | }
11 | },
12 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
13 | "exclude": ["node_modules"]
14 | }
15 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/assets/icons/down-gray.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/src/assets/icons/up-gray.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/src/assets/icons/up.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/src/assets/icons/forward-gray.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/src/assets/icons/forward.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/src/assets/icons/down.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/android/react-settings-plugin/build.gradle.kts:
--------------------------------------------------------------------------------
1 | import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
2 |
3 | plugins {
4 | kotlin("jvm") version "1.9.24"
5 | id("java-gradle-plugin")
6 | }
7 |
8 | repositories {
9 | mavenCentral()
10 | }
11 |
12 | gradlePlugin {
13 | plugins {
14 | create("reactSettingsPlugin") {
15 | id = "com.facebook.react.settings"
16 | implementationClass = "expo.plugins.ReactSettingsPlugin"
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/assets/icons/cross.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files
2 |
3 | # dependencies
4 | node_modules/
5 |
6 | # Expo
7 | .expo/
8 | dist/
9 | web-build/
10 |
11 | # Native
12 | *.orig.*
13 | *.jks
14 | *.p8
15 | *.p12
16 | *.key
17 | *.mobileprovision
18 |
19 | # Metro
20 | .metro-health-check*
21 |
22 | # debug
23 | npm-debug.*
24 | yarn-debug.*
25 | yarn-error.*
26 |
27 | # macOS
28 | .DS_Store
29 | *.pem
30 |
31 | # local env files
32 | .env*.local
33 |
34 | # typescript
35 | *.tsbuildinfo
36 |
--------------------------------------------------------------------------------
/src/assets/icons/plus.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/src/assets/icons/filter.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/src/assets/icons/menu.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/src/assets/icons/st-subscription.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/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 | # react-native-reanimated
11 | -keep class com.swmansion.reanimated.** { *; }
12 | -keep class com.facebook.react.turbomodule.** { *; }
13 |
14 | # Add any project specific keep options here:
15 |
--------------------------------------------------------------------------------
/src/assets/icons/dot_on.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/App.tsx:
--------------------------------------------------------------------------------
1 | import 'expo-dev-client';
2 | import { StatusBar } from 'expo-status-bar';
3 | import { SafeAreaView } from 'react-native-safe-area-context';
4 | import ErrorBoundary from 'react-native-error-boundary';
5 | import RootLayout from 'src/navigation/RootLayout';
6 |
7 | export default function App() {
8 |
9 | return (
10 | { console.log('ErrorBoundary: ', err) }}>
11 |
12 |
16 |
17 |
18 |
19 | );
20 | }
21 |
--------------------------------------------------------------------------------
/src/assets/icons/apple.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/assets/icons/st-str.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/eas.json:
--------------------------------------------------------------------------------
1 | {
2 | "cli": {
3 | "version": ">= 10.0.3"
4 | },
5 | "build": {
6 | "development": {
7 | "developmentClient": true,
8 | "distribution": "internal",
9 | "env": {
10 | "APP_VARIANT": "development"
11 | }
12 | },
13 | "preview": {
14 | "distribution": "internal",
15 | "android": {
16 | "buildType": "apk",
17 | "gradleCommand": ":app:assembleRelease"
18 | },
19 | "env": {
20 | "APP_VARIANT": "preview",
21 | "EXPO_PUBLIC_OAUTH_CLIENT_ID": "325383681920-7a07vdh9blosali2n0piknd3usqf1ain.apps.googleusercontent.com"
22 | }
23 | },
24 | "production": {}
25 | },
26 | "submit": {
27 | "production": {}
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/contexts/AuthContext.tsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 |
3 | interface AuthContextProps {
4 | loggedInUser: any;
5 | setLoggedInUser: (user: any) => void;
6 | }
7 |
8 | const AuthContext = React.createContext({
9 | loggedInUser: null,
10 | setLoggedInUser: () => { },
11 | });
12 |
13 | export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
14 | const [loggedInUser, setLoggedInUser] = useState(null);
15 |
16 | return (
17 |
21 | {children}
22 |
23 | );
24 | };
25 |
26 | export const useAuth = () => React.useContext(AuthContext);
27 |
28 | export default AuthContext;
--------------------------------------------------------------------------------
/src/assets/icons/signal.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "expo": {
3 | "name": "inx",
4 | "slug": "inxexpo",
5 | "version": "1.0.0",
6 | "orientation": "portrait",
7 | "icon": "./assets/icon.png",
8 | "userInterfaceStyle": "light",
9 | "splash": {
10 | "image": "./assets/splash.png",
11 | "resizeMode": "contain",
12 | "backgroundColor": "#ffffff"
13 | },
14 | "ios": {
15 | "supportsTablet": true
16 | },
17 | "android": {
18 | "adaptiveIcon": {
19 | "foregroundImage": "./assets/adaptive-icon.png",
20 | "backgroundColor": "#ffffff"
21 | },
22 | "package": "com.inx.inx"
23 | },
24 | "web": {
25 | "favicon": "./assets/favicon.png"
26 | },
27 | "extra": {
28 | "eas": {
29 | "projectId": "46b61cb7-3f1b-425c-bb50-bcd2ad768c93"
30 | }
31 | },
32 | "owner": "cryptoknight_888",
33 | "scheme": "inx"
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
14 |
17 |
--------------------------------------------------------------------------------
/src/assets/icons/chat_1.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/src/assets/icons/lock.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/src/assets/icons/chat_2.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/src/assets/icons/keepup_1.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/assets/icons/keepup_2.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/assets/icons/st-download.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/src/assets/icons/calendar-heart.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/assets/icons/st-chat.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/src/assets/icons/friend-except.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/src/assets/icons/add-friend.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/src/assets/icons/home_2.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 NFT Knight
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/assets/icons/home_1.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/src/assets/icons/notifications_1.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/src/assets/icons/notifications_2.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/src/assets/icons/st-language.svg:
--------------------------------------------------------------------------------
1 |
17 |
--------------------------------------------------------------------------------
/src/assets/icons/st-dark.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/src/assets/icons/friends.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/src/screens/theme.ts:
--------------------------------------------------------------------------------
1 | import type {DoobooTheme} from 'dooboo-ui';
2 |
3 | export const colors = {
4 | success: '#00BA90',
5 | darkGray: '#00000070',
6 | mediumGray: '#00000030',
7 | lightGray: '#CFCED0',
8 | };
9 |
10 | export type Colors = typeof colors;
11 |
12 | export const light = {
13 | background: '#FFFFFF',
14 | paper: '#EAEBF4',
15 | primary: '#393D7A',
16 | accent: '#B446BF',
17 | link: '#393D7A',
18 | heading: '#393D7A',
19 | titleText: '#000000',
20 | subText: '#404040',
21 | text: '#000000',
22 | textContrast: '#D3D8E8',
23 | disabled: colors.mediumGray,
24 | border: '#EDEDED',
25 | placeholder: '#999999',
26 | };
27 |
28 | export type CustomAppTheme = typeof light & DoobooTheme;
29 |
30 | export const dark = {
31 | background: '#232323',
32 | paper: '#2C2C2C',
33 | primary: '#8A96DC',
34 | accent: '#8A96DC',
35 | link: '#E0E0E0',
36 | heading: '#FFFFFF',
37 | titleText: '#8A96DC',
38 | subText: '#D3D8E8',
39 | text: '#D3D8E8',
40 | textContrast: '#000000',
41 | disabled: colors.mediumGray,
42 | border: '#333333',
43 | placeholder: '#444444',
44 | };
45 |
46 | export const theme = {
47 | light,
48 | dark,
49 | };
50 |
--------------------------------------------------------------------------------
/src/assets/icons/st-profile.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/src/assets/icons/search.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/src/assets/icons/wallet_1.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/src/assets/icons/google.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/src/assets/icons/wallet_2.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/src/assets/icons/st-guideline.svg:
--------------------------------------------------------------------------------
1 |
17 |
--------------------------------------------------------------------------------
/src/navigation/MainNavigator.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useState, useRef } from "react";
2 | import { Platform } from "react-native";
3 | import FontAwesome from "@expo/vector-icons/FontAwesome";
4 | import { useFonts } from 'expo-font';
5 | import AppLoading from 'expo-app-loading';
6 | import * as SplashScreen from "expo-splash-screen";
7 | import { NavigationContainer } from "@react-navigation/native";
8 | import { createNativeStackNavigator } from "@react-navigation/native-stack";
9 | import { useNavigation } from '@react-navigation/native';
10 | import HomeScreen from "@screens/HomeScreen";
11 | import LoginScreen from "@screens/LoginScreen";
12 |
13 | // Prevent the splash screen from auto-hiding before asset loading is complete.
14 | SplashScreen.preventAutoHideAsync();
15 | const Stack = createNativeStackNavigator();
16 |
17 | const MainNavigator = () => {
18 | const navigation = useNavigation();
19 |
20 | return (
21 |
24 |
29 |
34 |
35 | );
36 | }
37 |
38 | export default MainNavigator;
--------------------------------------------------------------------------------
/src/assets/icons/edit_avatar.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/src/assets/icons/st-active.svg:
--------------------------------------------------------------------------------
1 |
17 |
--------------------------------------------------------------------------------
/src/assets/icons/world.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/src/assets/icons/st-notifications.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/src/assets/icons/calendar.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/src/assets/icons/st-terms.svg:
--------------------------------------------------------------------------------
1 |
17 |
--------------------------------------------------------------------------------
/src/assets/icons/st-location.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/src/assets/icons/st-wallet.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/src/assets/icons/edit.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/src/assets/icons/geoloc.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/src/assets/icons/st-sos.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/src/assets/icons/v-threedot.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/src/assets/icons/specific-friends.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/src/assets/icons/friend_1.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/src/assets/icons/msg-plus.svg:
--------------------------------------------------------------------------------
1 |
20 |
--------------------------------------------------------------------------------
/src/assets/icons/st-privacy.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/src/assets/icons/pending-friend.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "inx",
3 | "version": "1.0.0",
4 | "main": "expo/AppEntry.js",
5 | "scripts": {
6 | "start": "expo start",
7 | "android": "expo run:android",
8 | "ios": "expo run:ios",
9 | "web": "expo start --web"
10 | },
11 | "dependencies": {
12 | "@emotion/native": "^11.11.0",
13 | "@expo/vector-icons": "^14.0.2",
14 | "@expo/webpack-config": "^0.12.52",
15 | "@react-native-async-storage/async-storage": "1.23.1",
16 | "@react-native-seoul/masonry-list": "^1.4.2",
17 | "@react-navigation/native": "^6.1.18",
18 | "@react-navigation/native-stack": "^6.11.0",
19 | "dooboo-ui": "^0.2.35",
20 | "expo": "~51.0.21",
21 | "expo-app-loading": "^1.1.2",
22 | "expo-auth-session": "~5.5.2",
23 | "expo-checkbox": "~3.0.0",
24 | "expo-crypto": "~13.0.2",
25 | "expo-dev-client": "~4.0.20",
26 | "expo-device": "~6.0.2",
27 | "expo-font": "~12.0.7",
28 | "expo-image": "~1.12.13",
29 | "expo-linear-gradient": "~13.0.2",
30 | "expo-splash-screen": "~0.27.5",
31 | "expo-status-bar": "~1.12.1",
32 | "expo-web-browser": "~13.0.3",
33 | "react": "18.2.0",
34 | "react-dom": "^18.2.0",
35 | "react-native": "0.74.5",
36 | "react-native-error-boundary": "^1.2.4",
37 | "react-native-loading-spinner-overlay": "^3.0.1",
38 | "react-native-safe-area-context": "4.10.5",
39 | "react-native-screens": "3.31.1",
40 | "react-native-web": "~0.19.10"
41 | },
42 | "devDependencies": {
43 | "@babel/core": "^7.20.0",
44 | "@types/react": "~18.2.45",
45 | "typescript": "^5.1.3"
46 | },
47 | "private": true
48 | }
49 |
--------------------------------------------------------------------------------
/src/assets/icons/st-how.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/src/assets/icons/friend_2.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/src/assets/icons/st-apps.svg:
--------------------------------------------------------------------------------
1 |
17 |
--------------------------------------------------------------------------------
/src/assets/icons/st-publiccontent.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/src/assets/icons/st-blocked.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/src/assets/icons/h-threedot.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/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 = findProperty('android.buildToolsVersion') ?: '34.0.0'
6 | minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '23')
7 | compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '34')
8 | targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')
9 | kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.23'
10 |
11 | ndkVersion = "26.1.10909125"
12 | }
13 | repositories {
14 | google()
15 | mavenCentral()
16 | }
17 | dependencies {
18 | classpath('com.android.tools.build:gradle')
19 | classpath('com.facebook.react:react-native-gradle-plugin')
20 | classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')
21 | }
22 | }
23 |
24 | apply plugin: "com.facebook.react.rootproject"
25 |
26 | allprojects {
27 | repositories {
28 | maven {
29 | // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
30 | url(new File(['node', '--print', "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), '../android'))
31 | }
32 | maven {
33 | // Android JSC is installed from npm
34 | url(new File(['node', '--print', "require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), '../dist'))
35 | }
36 |
37 | google()
38 | mavenCentral()
39 | maven { url 'https://www.jitpack.io' }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/navigation/RootLayout.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useState, useRef } from "react";
2 | import { Platform } from "react-native";
3 | import { AuthProvider, useAuth } from "../contexts/AuthContext";
4 | import FontAwesome from "@expo/vector-icons/FontAwesome";
5 | import { useFonts } from 'expo-font';
6 | import AppLoading from 'expo-app-loading';
7 | import * as SplashScreen from "expo-splash-screen";
8 | import { NavigationContainer } from "@react-navigation/native";
9 | import MainNavigator from "./MainNavigator";
10 |
11 | // Prevent the splash screen from auto-hiding before asset loading is complete.
12 | SplashScreen.preventAutoHideAsync();
13 |
14 | const RootLayout = () => {
15 | const [loaded, error] = useFonts({
16 | 'nunito': require('@assets/fonts/Nunito/Nunito-Regular.ttf'),
17 | 'nunito-md': require('@assets/fonts/Nunito/Nunito-Medium.ttf'),
18 | 'nunito-sb': require('@assets/fonts/Nunito/Nunito-SemiBold.ttf'),
19 | 'nunito-b': require('@assets/fonts/Nunito/Nunito-Bold.ttf'),
20 | 'manrope': require('@assets/fonts/Manrope/Manrope-Regular.ttf'),
21 | 'manrope-md': require('@assets/fonts/Manrope/Manrope-Medium.ttf'),
22 | 'manrope-sb': require('@assets/fonts/Manrope/Manrope-SemiBold.ttf'),
23 | 'manrope-b': require('@assets/fonts/Nunito/Nunito-Bold.ttf'),
24 | ...FontAwesome.font
25 | });
26 |
27 | // Expo Router uses Error Boundaries to catch errors in the navigation tree.
28 | useEffect(() => {
29 | if (error) throw error;
30 | }, [error]);
31 | useEffect(() => {
32 | if (loaded) {
33 | SplashScreen.hideAsync();
34 | }
35 | }, [loaded]);
36 | if (!loaded) return null;
37 |
38 | return (
39 |
40 |
41 |
42 |
43 |
44 | );
45 | }
46 |
47 | export default RootLayout;
--------------------------------------------------------------------------------
/src/assets/icons/heart-star.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/assets/icons/add-friend-rounded.svg:
--------------------------------------------------------------------------------
1 |
23 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/rn_edit_text_material.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
22 |
23 |
24 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/src/assets/icons/default.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/src/assets/icons/st-ads.svg:
--------------------------------------------------------------------------------
1 |
19 |
--------------------------------------------------------------------------------
/src/assets/icons/st-cookies.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/android/app/src/main/java/com/inx/inx/MainApplication.kt:
--------------------------------------------------------------------------------
1 | package com.inx.inx
2 |
3 | import android.app.Application
4 | import android.content.res.Configuration
5 |
6 | import com.facebook.react.PackageList
7 | import com.facebook.react.ReactApplication
8 | import com.facebook.react.ReactNativeHost
9 | import com.facebook.react.ReactPackage
10 | import com.facebook.react.ReactHost
11 | import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load
12 | import com.facebook.react.defaults.DefaultReactNativeHost
13 | import com.facebook.soloader.SoLoader
14 |
15 | import expo.modules.ApplicationLifecycleDispatcher
16 | import expo.modules.ReactNativeHostWrapper
17 |
18 | class MainApplication : Application(), ReactApplication {
19 |
20 | override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(
21 | this,
22 | object : DefaultReactNativeHost(this) {
23 | override fun getPackages(): List {
24 | // Packages that cannot be autolinked yet can be added manually here, for example:
25 | // packages.add(new MyReactNativePackage());
26 | return PackageList(this).packages
27 | }
28 |
29 | override fun getJSMainModuleName(): String = ".expo/.virtual-metro-entry"
30 |
31 | override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG
32 |
33 | override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
34 | override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
35 | }
36 | )
37 |
38 | override val reactHost: ReactHost
39 | get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)
40 |
41 | override fun onCreate() {
42 | super.onCreate()
43 | SoLoader.init(this, false)
44 | if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
45 | // If you opted-in for the New Architecture, we load the native entry point for this app.
46 | load()
47 | }
48 | ApplicationLifecycleDispatcher.onApplicationCreate(this)
49 | }
50 |
51 | override fun onConfigurationChanged(newConfig: Configuration) {
52 | super.onConfigurationChanged(newConfig)
53 | ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig)
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/src/assets/icons/st-access.svg:
--------------------------------------------------------------------------------
1 |
23 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/src/assets/icons/sad.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/android/app/src/main/java/com/inx/inx/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.inx.inx
2 |
3 | import android.os.Build
4 | import android.os.Bundle
5 |
6 | import com.facebook.react.ReactActivity
7 | import com.facebook.react.ReactActivityDelegate
8 | import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled
9 | import com.facebook.react.defaults.DefaultReactActivityDelegate
10 |
11 | import expo.modules.ReactActivityDelegateWrapper
12 |
13 | class MainActivity : ReactActivity() {
14 | override fun onCreate(savedInstanceState: Bundle?) {
15 | // Set the theme to AppTheme BEFORE onCreate to support
16 | // coloring the background, status bar, and navigation bar.
17 | // This is required for expo-splash-screen.
18 | setTheme(R.style.AppTheme);
19 | super.onCreate(null)
20 | }
21 |
22 | /**
23 | * Returns the name of the main component registered from JavaScript. This is used to schedule
24 | * rendering of the component.
25 | */
26 | override fun getMainComponentName(): String = "main"
27 |
28 | /**
29 | * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate]
30 | * which allows you to enable New Architecture with a single boolean flags [fabricEnabled]
31 | */
32 | override fun createReactActivityDelegate(): ReactActivityDelegate {
33 | return ReactActivityDelegateWrapper(
34 | this,
35 | BuildConfig.IS_NEW_ARCHITECTURE_ENABLED,
36 | object : DefaultReactActivityDelegate(
37 | this,
38 | mainComponentName,
39 | fabricEnabled
40 | ){})
41 | }
42 |
43 | /**
44 | * Align the back button behavior with Android S
45 | * where moving root activities to background instead of finishing activities.
46 | * @see onBackPressed
47 | */
48 | override fun invokeDefaultOnBackPressed() {
49 | if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) {
50 | if (!moveTaskToBack(false)) {
51 | // For non-root activities, use the default implementation to finish them.
52 | super.invokeDefaultOnBackPressed()
53 | }
54 | return
55 | }
56 |
57 | // Use the default back button implementation on Android S
58 | // because it's doing more than [Activity.moveTaskToBack] in fact.
59 | super.invokeDefaultOnBackPressed()
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/src/assets/icons/settings_1.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/src/assets/icons/settings_2.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/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: -Xmx512m -XX:MaxMetaspaceSize=256m
13 | org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
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 | # AndroidX package structure to make it clearer which packages are bundled with the
21 | # Android operating system, and which are packaged with your app's APK
22 | # https://developer.android.com/topic/libraries/support-library/androidx-rn
23 | android.useAndroidX=true
24 |
25 | # Automatically convert third-party libraries to use AndroidX
26 | android.enableJetifier=true
27 |
28 | # Enable AAPT2 PNG crunching
29 | android.enablePngCrunchInReleaseBuilds=true
30 |
31 | # Use this property to specify which architecture you want to build.
32 | # You can also override it from the CLI using
33 | # ./gradlew -PreactNativeArchitectures=x86_64
34 | reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
35 |
36 | # Use this property to enable support to the new architecture.
37 | # This will allow you to use TurboModules and the Fabric render in
38 | # your application. You should enable this flag either if you want
39 | # to write custom TurboModules/Fabric components OR use libraries that
40 | # are providing them.
41 | newArchEnabled=false
42 |
43 | # Use this property to enable or disable the Hermes JS engine.
44 | # If set to false, you will be using JSC instead.
45 | hermesEnabled=true
46 |
47 | # Enable GIF support in React Native images (~200 B increase)
48 | expo.gif.enabled=true
49 | # Enable webp support in React Native images (~85 KB increase)
50 | expo.webp.enabled=true
51 | # Enable animated webp support (~3.4 MB increase)
52 | # Disabled by default because iOS doesn't support animated webp
53 | expo.webp.animated=false
54 |
55 | # Enable network inspector
56 | EX_DEV_CLIENT_NETWORK_INSPECTOR=true
57 |
58 | # Use legacy packaging to compress native libraries in the resulting APK.
59 | expo.useLegacyPackaging=false
60 |
--------------------------------------------------------------------------------
/src/assets/icons/st-defaultsettings.svg:
--------------------------------------------------------------------------------
1 |
22 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | def version = providers.exec {
3 | commandLine("node", "-e", "console.log(require('react-native/package.json').version);")
4 | }.standardOutput.asText.get().trim()
5 | def (_, reactNativeMinor, reactNativePatch) = version.split("-")[0].tokenize('.').collect { it.toInteger() }
6 |
7 | includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json')"].execute(null, rootDir).text.trim()).getParentFile().toString())
8 | if(reactNativeMinor == 74 && reactNativePatch <= 3){
9 | includeBuild("react-settings-plugin")
10 | }
11 | }
12 |
13 | plugins { id("com.facebook.react.settings") }
14 |
15 | def getRNMinorVersion() {
16 | def version = providers.exec {
17 | commandLine("node", "-e", "console.log(require('react-native/package.json').version);")
18 | }.standardOutput.asText.get().trim()
19 |
20 | def coreVersion = version.split("-")[0]
21 | def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }
22 |
23 | return minor
24 | }
25 |
26 | if (getRNMinorVersion() >= 75) {
27 | extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->
28 | if (System.getenv('EXPO_UNSTABLE_CORE_AUTOLINKING') == '1') {
29 | println('\u001B[32mUsing expo-modules-autolinking as core autolinking source\u001B[0m')
30 | def command = [
31 | 'node',
32 | '--no-warnings',
33 | '--eval',
34 | 'require(require.resolve(\'expo-modules-autolinking\', { paths: [require.resolve(\'expo/package.json\')] }))(process.argv.slice(1))',
35 | 'react-native-config',
36 | '--json',
37 | '--platform',
38 | 'android'
39 | ].toList()
40 | ex.autolinkLibrariesFromCommand(command)
41 | } else {
42 | ex.autolinkLibrariesFromCommand()
43 | }
44 | }
45 | }
46 |
47 | rootProject.name = 'inx'
48 |
49 | dependencyResolutionManagement {
50 | versionCatalogs {
51 | reactAndroidLibs {
52 | from(files(new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), "../gradle/libs.versions.toml")))
53 | }
54 | }
55 | }
56 |
57 | apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle");
58 | useExpoModules()
59 |
60 | if (getRNMinorVersion() < 75) {
61 | apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), "../native_modules.gradle");
62 | applyNativeModulesSettingsGradle(settings)
63 | }
64 |
65 | include ':app'
66 | includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile())
67 |
--------------------------------------------------------------------------------
/android/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem https://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 |
17 | @if "%DEBUG%"=="" @echo off
18 | @rem ##########################################################################
19 | @rem
20 | @rem Gradle startup script for Windows
21 | @rem
22 | @rem ##########################################################################
23 |
24 | @rem Set local scope for the variables with windows NT shell
25 | if "%OS%"=="Windows_NT" setlocal
26 |
27 | set DIRNAME=%~dp0
28 | if "%DIRNAME%"=="" set DIRNAME=.
29 | @rem This is normally unused
30 | set APP_BASE_NAME=%~n0
31 | set APP_HOME=%DIRNAME%
32 |
33 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
34 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
35 |
36 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
37 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
38 |
39 | @rem Find java.exe
40 | if defined JAVA_HOME goto findJavaFromJavaHome
41 |
42 | set JAVA_EXE=java.exe
43 | %JAVA_EXE% -version >NUL 2>&1
44 | if %ERRORLEVEL% equ 0 goto execute
45 |
46 | echo. 1>&2
47 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
48 | echo. 1>&2
49 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2
50 | echo location of your Java installation. 1>&2
51 |
52 | goto fail
53 |
54 | :findJavaFromJavaHome
55 | set JAVA_HOME=%JAVA_HOME:"=%
56 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
57 |
58 | if exist "%JAVA_EXE%" goto execute
59 |
60 | echo. 1>&2
61 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
62 | echo. 1>&2
63 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2
64 | echo location of your Java installation. 1>&2
65 |
66 | goto fail
67 |
68 | :execute
69 | @rem Setup the command line
70 |
71 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
72 |
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if %ERRORLEVEL% equ 0 goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | set EXIT_CODE=%ERRORLEVEL%
85 | if %EXIT_CODE% equ 0 set EXIT_CODE=1
86 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
87 | exit /b %EXIT_CODE%
88 |
89 | :mainEnd
90 | if "%OS%"=="Windows_NT" endlocal
91 |
92 | :omega
93 |
--------------------------------------------------------------------------------
/src/assets/images/header_2.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/assets/images/header.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: "com.android.application"
2 | apply plugin: "org.jetbrains.kotlin.android"
3 | apply plugin: "com.facebook.react"
4 |
5 | def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()
6 |
7 | static def versionToNumber(major, minor, patch) {
8 | return patch * 100 + minor * 10000 + major * 1000000
9 | }
10 |
11 | def getRNVersion() {
12 | def version = providers.exec {
13 | workingDir(projectDir)
14 | commandLine("node", "-e", "console.log(require('react-native/package.json').version);")
15 | }.standardOutput.asText.get().trim()
16 |
17 | def coreVersion = version.split("-")[0]
18 | def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }
19 |
20 | return versionToNumber(
21 | major,
22 | minor,
23 | patch
24 | )
25 | }
26 | def rnVersion = getRNVersion()
27 |
28 | /**
29 | * This is the configuration block to customize your React Native Android app.
30 | * By default you don't need to apply any configuration, just uncomment the lines you need.
31 | */
32 | react {
33 | entryFile = file(["node", "-e", "require('expo/scripts/resolveAppEntry')", projectRoot, "android", "absolute"].execute(null, rootDir).text.trim())
34 | reactNativeDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()
35 | hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc"
36 | codegenDir = new File(["node", "--print", "require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()
37 |
38 | // Use Expo CLI to bundle the app, this ensures the Metro config
39 | // works correctly with Expo projects.
40 | cliFile = new File(["node", "--print", "require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })"].execute(null, rootDir).text.trim())
41 | bundleCommand = "export:embed"
42 |
43 | /* Folders */
44 | // The root of your project, i.e. where "package.json" lives. Default is '..'
45 | // root = file("../")
46 | // The folder where the react-native NPM package is. Default is ../node_modules/react-native
47 | // reactNativeDir = file("../node_modules/react-native")
48 | // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen
49 | // codegenDir = file("../node_modules/@react-native/codegen")
50 |
51 | /* Variants */
52 | // The list of variants to that are debuggable. For those we're going to
53 | // skip the bundling of the JS bundle and the assets. By default is just 'debug'.
54 | // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants.
55 | // debuggableVariants = ["liteDebug", "prodDebug"]
56 |
57 | /* Bundling */
58 | // A list containing the node command and its flags. Default is just 'node'.
59 | // nodeExecutableAndArgs = ["node"]
60 |
61 | //
62 | // The path to the CLI configuration file. Default is empty.
63 | // bundleConfig = file(../rn-cli.config.js)
64 | //
65 | // The name of the generated asset file containing your JS bundle
66 | // bundleAssetName = "MyApplication.android.bundle"
67 | //
68 | // The entry file for bundle generation. Default is 'index.android.js' or 'index.js'
69 | // entryFile = file("../js/MyApplication.android.js")
70 | //
71 | // A list of extra flags to pass to the 'bundle' commands.
72 | // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle
73 | // extraPackagerArgs = []
74 |
75 | /* Hermes Commands */
76 | // The hermes compiler command to run. By default it is 'hermesc'
77 | // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc"
78 | //
79 | // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
80 | // hermesFlags = ["-O", "-output-source-map"]
81 |
82 | if (rnVersion >= versionToNumber(0, 75, 0)) {
83 | /* Autolinking */
84 | autolinkLibrariesWithApp()
85 | }
86 | }
87 |
88 | /**
89 | * Set this to true to Run Proguard on Release builds to minify the Java bytecode.
90 | */
91 | def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()
92 |
93 | /**
94 | * The preferred build flavor of JavaScriptCore (JSC)
95 | *
96 | * For example, to use the international variant, you can use:
97 | * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
98 | *
99 | * The international variant includes ICU i18n library and necessary data
100 | * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
101 | * give correct results when using with locales other than en-US. Note that
102 | * this variant is about 6MiB larger per architecture than default.
103 | */
104 | def jscFlavor = 'org.webkit:android-jsc:+'
105 |
106 | android {
107 | ndkVersion rootProject.ext.ndkVersion
108 |
109 | buildToolsVersion rootProject.ext.buildToolsVersion
110 | compileSdk rootProject.ext.compileSdkVersion
111 |
112 | namespace 'com.inx.inx'
113 | defaultConfig {
114 | applicationId 'com.inx.inx'
115 | minSdkVersion rootProject.ext.minSdkVersion
116 | targetSdkVersion rootProject.ext.targetSdkVersion
117 | versionCode 1
118 | versionName "1.0.0"
119 | }
120 | signingConfigs {
121 | debug {
122 | storeFile file('debug.keystore')
123 | storePassword 'android'
124 | keyAlias 'androiddebugkey'
125 | keyPassword 'android'
126 | }
127 | }
128 | buildTypes {
129 | debug {
130 | signingConfig signingConfigs.debug
131 | }
132 | release {
133 | // Caution! In production, you need to generate your own keystore file.
134 | // see https://reactnative.dev/docs/signed-apk-android.
135 | signingConfig signingConfigs.debug
136 | shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)
137 | minifyEnabled enableProguardInReleaseBuilds
138 | proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
139 | crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)
140 | }
141 | }
142 | packagingOptions {
143 | jniLibs {
144 | useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)
145 | }
146 | }
147 | }
148 |
149 | // Apply static values from `gradle.properties` to the `android.packagingOptions`
150 | // Accepts values in comma delimited lists, example:
151 | // android.packagingOptions.pickFirsts=/LICENSE,**/picasa.ini
152 | ["pickFirsts", "excludes", "merges", "doNotStrip"].each { prop ->
153 | // Split option: 'foo,bar' -> ['foo', 'bar']
154 | def options = (findProperty("android.packagingOptions.$prop") ?: "").split(",");
155 | // Trim all elements in place.
156 | for (i in 0.. 0) {
161 | println "android.packagingOptions.$prop += $options ($options.length)"
162 | // Ex: android.packagingOptions.pickFirsts += '**/SCCS/**'
163 | options.each {
164 | android.packagingOptions[prop] += it
165 | }
166 | }
167 | }
168 |
169 | dependencies {
170 | // The version of react-native is set by the React Native Gradle Plugin
171 | implementation("com.facebook.react:react-android")
172 |
173 | def isGifEnabled = (findProperty('expo.gif.enabled') ?: "") == "true";
174 | def isWebpEnabled = (findProperty('expo.webp.enabled') ?: "") == "true";
175 | def isWebpAnimatedEnabled = (findProperty('expo.webp.animated') ?: "") == "true";
176 |
177 | if (isGifEnabled) {
178 | // For animated gif support
179 | implementation("com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}")
180 | }
181 |
182 | if (isWebpEnabled) {
183 | // For webp support
184 | implementation("com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}")
185 | if (isWebpAnimatedEnabled) {
186 | // Animated webp support
187 | implementation("com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}")
188 | }
189 | }
190 |
191 | if (hermesEnabled.toBoolean()) {
192 | implementation("com.facebook.react:hermes-android")
193 | } else {
194 | implementation jscFlavor
195 | }
196 | }
197 |
198 | if (rnVersion < versionToNumber(0, 75, 0)) {
199 | apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), "../native_modules.gradle");
200 | applyNativeModulesAppBuildGradle(project)
201 | }
202 |
--------------------------------------------------------------------------------
/android/gradlew:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | #
4 | # Copyright © 2015-2021 the original authors.
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # https://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 |
19 | ##############################################################################
20 | #
21 | # Gradle start up script for POSIX generated by Gradle.
22 | #
23 | # Important for running:
24 | #
25 | # (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
26 | # noncompliant, but you have some other compliant shell such as ksh or
27 | # bash, then to run this script, type that shell name before the whole
28 | # command line, like:
29 | #
30 | # ksh Gradle
31 | #
32 | # Busybox and similar reduced shells will NOT work, because this script
33 | # requires all of these POSIX shell features:
34 | # * functions;
35 | # * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
36 | # «${var#prefix}», «${var%suffix}», and «$( cmd )»;
37 | # * compound commands having a testable exit status, especially «case»;
38 | # * various built-in commands including «command», «set», and «ulimit».
39 | #
40 | # Important for patching:
41 | #
42 | # (2) This script targets any POSIX shell, so it avoids extensions provided
43 | # by Bash, Ksh, etc; in particular arrays are avoided.
44 | #
45 | # The "traditional" practice of packing multiple parameters into a
46 | # space-separated string is a well documented source of bugs and security
47 | # problems, so this is (mostly) avoided, by progressively accumulating
48 | # options in "$@", and eventually passing that to Java.
49 | #
50 | # Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
51 | # and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
52 | # see the in-line comments for details.
53 | #
54 | # There are tweaks for specific operating systems such as AIX, CygWin,
55 | # Darwin, MinGW, and NonStop.
56 | #
57 | # (3) This script is generated from the Groovy template
58 | # https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
59 | # within the Gradle project.
60 | #
61 | # You can find Gradle at https://github.com/gradle/gradle/.
62 | #
63 | ##############################################################################
64 |
65 | # Attempt to set APP_HOME
66 |
67 | # Resolve links: $0 may be a link
68 | app_path=$0
69 |
70 | # Need this for daisy-chained symlinks.
71 | while
72 | APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
73 | [ -h "$app_path" ]
74 | do
75 | ls=$( ls -ld "$app_path" )
76 | link=${ls#*' -> '}
77 | case $link in #(
78 | /*) app_path=$link ;; #(
79 | *) app_path=$APP_HOME$link ;;
80 | esac
81 | done
82 |
83 | # This is normally unused
84 | # shellcheck disable=SC2034
85 | APP_BASE_NAME=${0##*/}
86 | # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
87 | APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
88 |
89 | # Use the maximum available, or set MAX_FD != -1 to use that value.
90 | MAX_FD=maximum
91 |
92 | warn () {
93 | echo "$*"
94 | } >&2
95 |
96 | die () {
97 | echo
98 | echo "$*"
99 | echo
100 | exit 1
101 | } >&2
102 |
103 | # OS specific support (must be 'true' or 'false').
104 | cygwin=false
105 | msys=false
106 | darwin=false
107 | nonstop=false
108 | case "$( uname )" in #(
109 | CYGWIN* ) cygwin=true ;; #(
110 | Darwin* ) darwin=true ;; #(
111 | MSYS* | MINGW* ) msys=true ;; #(
112 | NONSTOP* ) nonstop=true ;;
113 | esac
114 |
115 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
116 |
117 |
118 | # Determine the Java command to use to start the JVM.
119 | if [ -n "$JAVA_HOME" ] ; then
120 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
121 | # IBM's JDK on AIX uses strange locations for the executables
122 | JAVACMD=$JAVA_HOME/jre/sh/java
123 | else
124 | JAVACMD=$JAVA_HOME/bin/java
125 | fi
126 | if [ ! -x "$JAVACMD" ] ; then
127 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
128 |
129 | Please set the JAVA_HOME variable in your environment to match the
130 | location of your Java installation."
131 | fi
132 | else
133 | JAVACMD=java
134 | if ! command -v java >/dev/null 2>&1
135 | then
136 | die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
137 |
138 | Please set the JAVA_HOME variable in your environment to match the
139 | location of your Java installation."
140 | fi
141 | fi
142 |
143 | # Increase the maximum file descriptors if we can.
144 | if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
145 | case $MAX_FD in #(
146 | max*)
147 | # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
148 | # shellcheck disable=SC2039,SC3045
149 | MAX_FD=$( ulimit -H -n ) ||
150 | warn "Could not query maximum file descriptor limit"
151 | esac
152 | case $MAX_FD in #(
153 | '' | soft) :;; #(
154 | *)
155 | # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
156 | # shellcheck disable=SC2039,SC3045
157 | ulimit -n "$MAX_FD" ||
158 | warn "Could not set maximum file descriptor limit to $MAX_FD"
159 | esac
160 | fi
161 |
162 | # Collect all arguments for the java command, stacking in reverse order:
163 | # * args from the command line
164 | # * the main class name
165 | # * -classpath
166 | # * -D...appname settings
167 | # * --module-path (only if needed)
168 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
169 |
170 | # For Cygwin or MSYS, switch paths to Windows format before running java
171 | if "$cygwin" || "$msys" ; then
172 | APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
173 | CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
174 |
175 | JAVACMD=$( cygpath --unix "$JAVACMD" )
176 |
177 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
178 | for arg do
179 | if
180 | case $arg in #(
181 | -*) false ;; # don't mess with options #(
182 | /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
183 | [ -e "$t" ] ;; #(
184 | *) false ;;
185 | esac
186 | then
187 | arg=$( cygpath --path --ignore --mixed "$arg" )
188 | fi
189 | # Roll the args list around exactly as many times as the number of
190 | # args, so each arg winds up back in the position where it started, but
191 | # possibly modified.
192 | #
193 | # NB: a `for` loop captures its iteration list before it begins, so
194 | # changing the positional parameters here affects neither the number of
195 | # iterations, nor the values presented in `arg`.
196 | shift # remove old arg
197 | set -- "$@" "$arg" # push replacement arg
198 | done
199 | fi
200 |
201 |
202 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
203 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
204 |
205 | # Collect all arguments for the java command:
206 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
207 | # and any embedded shellness will be escaped.
208 | # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
209 | # treated as '${Hostname}' itself on the command line.
210 |
211 | set -- \
212 | "-Dorg.gradle.appname=$APP_BASE_NAME" \
213 | -classpath "$CLASSPATH" \
214 | org.gradle.wrapper.GradleWrapperMain \
215 | "$@"
216 |
217 | # Stop when "xargs" is not available.
218 | if ! command -v xargs >/dev/null 2>&1
219 | then
220 | die "xargs is not available"
221 | fi
222 |
223 | # Use "xargs" to parse quoted args.
224 | #
225 | # With -n1 it outputs one arg per line, with the quotes and backslashes removed.
226 | #
227 | # In Bash we could simply go:
228 | #
229 | # readarray ARGS < <( xargs -n1 <<<"$var" ) &&
230 | # set -- "${ARGS[@]}" "$@"
231 | #
232 | # but POSIX shell has neither arrays nor command substitution, so instead we
233 | # post-process each arg (as a line of input to sed) to backslash-escape any
234 | # character that might be a shell metacharacter, then use eval to reverse
235 | # that process (while maintaining the separation between arguments), and wrap
236 | # the whole thing up as a single "set" statement.
237 | #
238 | # This will of course break if any of these variables contains a newline or
239 | # an unmatched quote.
240 | #
241 |
242 | eval "set -- $(
243 | printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
244 | xargs -n1 |
245 | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
246 | tr '\n' ' '
247 | )" '"$@"'
248 |
249 | exec "$JAVACMD" "$@"
250 |
--------------------------------------------------------------------------------
/src/screens/HomeScreen.tsx:
--------------------------------------------------------------------------------
1 | import React, { FC, useMemo, useState, ReactElement } from 'react';
2 | import {
3 | View,
4 | Text,
5 | Pressable,
6 | ActivityIndicator,
7 | StyleSheet,
8 | StyleProp,
9 | ViewStyle,
10 | Image,
11 | } from 'react-native';
12 | import { SafeAreaView } from 'react-native-safe-area-context';
13 | import AsyncStorage from "@react-native-async-storage/async-storage";
14 | import { useAuth } from 'src/contexts/AuthContext';
15 | import { LinearGradient } from 'expo-linear-gradient';
16 | import MasonryList from '@react-native-seoul/masonry-list';
17 | // import {useTheme} from 'dooboo-ui';
18 |
19 |
20 | interface Furniture {
21 | id: string;
22 | imgURL: string;
23 | text: string;
24 | }
25 |
26 | const data: Furniture[] = [
27 | {
28 | id: 'id123',
29 | imgURL:
30 | 'https://ii1.pepperfry.com/media/catalog/product/m/o/568x625/modern-chaise-lounger-in-grey-colour-by-dreamzz-furniture-modern-chaise-lounger-in-grey-colour-by-dr-tmnirx.jpg',
31 | text: 'Pioneer LHS Chaise Lounger in Grey Colour',
32 | },
33 | {
34 | id: 'id124',
35 | imgURL:
36 | 'https://www.precedent-furniture.com/sites/precedent-furniture.com/files/styles/header_slideshow/public/3360_SL%20CR.jpg?itok=3Ltk6red',
37 | text: 'Precedant Furniture',
38 | },
39 | {
40 | id: 'id125',
41 | imgURL:
42 | 'https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/leverette-fabric-queen-upholstered-platform-bed-1594829293.jpg',
43 | text: 'Leverette Upholstered Platform Bed',
44 | },
45 | {
46 | id: 'id126',
47 | imgURL:
48 | 'https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/briget-side-table-1582143245.jpg?crop=1.00xw:0.770xh;0,0.129xh&resize=768:*',
49 | text: 'Briget Accent Table',
50 | },
51 | {
52 | id: 'id127',
53 | imgURL:
54 | 'https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/rivet-emerly-media-console-1610578756.jpg?crop=1xw:1xh;center,top&resize=768:*',
55 | text: 'Rivet Emerly Media Console',
56 | },
57 | {
58 | id: 'id128',
59 | imgURL:
60 | 'https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/drew-barrymore-flower-home-petal-chair-1594829759.jpeg?crop=1xw:1xh;center,top&resize=768:*',
61 | text: 'Drew Barrymore Flower Home Accent Chair',
62 | },
63 | {
64 | id: 'id129',
65 | imgURL:
66 | 'https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/goodee-ecobirdy-charlie-chairs-1594834221.jpg?crop=1xw:1xh;center,top&resize=768:*',
67 | text: 'Ecobirdy Charlie Chair',
68 | },
69 | {
70 | id: 'id130',
71 | imgURL:
72 | 'https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/hailey-sofa-1571430947.jpg?crop=0.481xw:0.722xh;0.252xw,0.173xh&resize=768:*',
73 | text: 'Hailey Sofa',
74 | },
75 | {
76 | id: 'id131',
77 | imgURL:
78 | 'https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/archer-home-designs-dining-table-1594830125.jpg?crop=0.657xw:1.00xh;0.0986xw,0&resize=768:*',
79 | text: 'Farmhouse Dining Table',
80 | },
81 | {
82 | id: 'id132',
83 | imgURL:
84 | 'https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/evelyn-coffee-table-1610578857.jpeg?crop=1xw:1xh;center,top&resize=768:*',
85 | text: 'Evelyn Coffee Table',
86 | },
87 | {
88 | id: 'id133',
89 | imgURL:
90 | 'https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/burrow-nomad-sofa-1594837995.jpg?crop=1xw:1xh;center,top&resize=768:*',
91 | text: 'Slope Nomad Leather Sofa',
92 | },
93 | {
94 | id: 'id134',
95 | imgURL:
96 | 'https://apicms.thestar.com.my/uploads/images/2020/02/21/570850.jpg',
97 | text: 'Chair and Table',
98 | },
99 | {
100 | id: 'id223',
101 | imgURL:
102 | 'https://ii1.pepperfry.com/media/catalog/product/m/o/568x625/modern-chaise-lounger-in-grey-colour-by-dreamzz-furniture-modern-chaise-lounger-in-grey-colour-by-dr-tmnirx.jpg',
103 | text: 'Pioneer LHS Chaise Lounger in Grey Colour',
104 | },
105 | {
106 | id: 'id224',
107 | imgURL:
108 | 'https://www.precedent-furniture.com/sites/precedent-furniture.com/files/styles/header_slideshow/public/3360_SL%20CR.jpg?itok=3Ltk6red',
109 | text: 'Precedant Furniture',
110 | },
111 | {
112 | id: 'id225',
113 | imgURL:
114 | 'https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/leverette-fabric-queen-upholstered-platform-bed-1594829293.jpg',
115 | text: 'Leverette Upholstered Platform Bed',
116 | },
117 | {
118 | id: 'id226',
119 | imgURL:
120 | 'https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/briget-side-table-1582143245.jpg?crop=1.00xw:0.770xh;0,0.129xh&resize=768:*',
121 | text: 'Briget Accent Table',
122 | },
123 | {
124 | id: 'id227',
125 | imgURL:
126 | 'https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/rivet-emerly-media-console-1610578756.jpg?crop=1xw:1xh;center,top&resize=768:*',
127 | text: 'Rivet Emerly Media Console',
128 | },
129 | {
130 | id: 'id228',
131 | imgURL:
132 | 'https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/drew-barrymore-flower-home-petal-chair-1594829759.jpeg?crop=1xw:1xh;center,top&resize=768:*',
133 | text: 'Drew Barrymore Flower Home Accent Chair',
134 | },
135 | {
136 | id: 'id229',
137 | imgURL:
138 | 'https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/goodee-ecobirdy-charlie-chairs-1594834221.jpg?crop=1xw:1xh;center,top&resize=768:*',
139 | text: 'Ecobirdy Charlie Chair',
140 | },
141 | {
142 | id: 'id230',
143 | imgURL:
144 | 'https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/hailey-sofa-1571430947.jpg?crop=0.481xw:0.722xh;0.252xw,0.173xh&resize=768:*',
145 | text: 'Hailey Sofa',
146 | },
147 | {
148 | id: 'id231',
149 | imgURL:
150 | 'https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/archer-home-designs-dining-table-1594830125.jpg?crop=0.657xw:1.00xh;0.0986xw,0&resize=768:*',
151 | text: 'Farmhouse Dining Table',
152 | },
153 | {
154 | id: 'id232',
155 | imgURL:
156 | 'https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/evelyn-coffee-table-1610578857.jpeg?crop=1xw:1xh;center,top&resize=768:*',
157 | text: 'Evelyn Coffee Table',
158 | },
159 | {
160 | id: 'id233',
161 | imgURL:
162 | 'https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/burrow-nomad-sofa-1594837995.jpg?crop=1xw:1xh;center,top&resize=768:*',
163 | text: 'Slope Nomad Leather Sofa',
164 | },
165 | {
166 | id: 'id234',
167 | imgURL:
168 | 'https://apicms.thestar.com.my/uploads/images/2020/02/21/570850.jpg',
169 | text: 'Chair and Table',
170 | },
171 | ];
172 |
173 | const FurnitureCard: FC<{item: Furniture; style: StyleProp}> = ({
174 | item,
175 | style,
176 | }) => {
177 | const randomBool = useMemo(() => Math.random() > 0.5, []);
178 | // const {colors} = useTheme();
179 | const colors = { text: '#100' };
180 |
181 | return (
182 |
183 |
191 | {item.text}
192 |
193 | )
194 | }
195 |
196 | const HomeScreen = ({ navigation }: { navigation: any }) => {
197 | const {loggedInUser, setLoggedInUser} = useAuth();
198 | const [furnitureList, setFurnitureList] = useState(data.slice(0, 7));
199 | console.log('------ loggedInUser: ', loggedInUser);
200 | const [isLoading, setIsLoading] = useState(false);
201 |
202 | const handleLogout = async () => {
203 | try {
204 | setIsLoading(true);
205 | navigation.reset({
206 | index: 0,
207 | routes: [{ name: 'Login' }],
208 | });
209 | } catch (error) {
210 | console.log('error signing out', error);
211 | }
212 | setIsLoading(false);
213 | };
214 | const renderItem = ({item, i}: {item: any; i: number}): ReactElement => {
215 | return (
216 |
217 | );
218 | };
219 | const listEmptyComponent = () => {
220 | return (
221 | <>
222 |
223 | No Posts Found
224 |
225 | >
226 | );
227 | };
228 | const delay = (ms :number) => new Promise((resolve) => setTimeout(resolve, ms));
229 | return (
230 |
231 |
232 | Welcome {loggedInUser.name}
233 | item.id}
235 | ListHeaderComponent={}
236 | contentContainerStyle={{
237 | paddingHorizontal: 24,
238 | alignSelf: 'stretch',
239 | }}
240 | // loading={isLoading}
241 | // onEndReached={async() => {
242 | // setIsLoading(true);
243 | // await new Promise(
244 | // resolve => {
245 | // setTimeout(resolve, 1000);
246 | // setFurnitureList(prevList => [
247 | // ...prevList,
248 | // ...data.slice(prevList.length, prevList.length + 7),
249 | // ]);
250 | // }
251 | // );
252 | // setIsLoading(false);
253 | // }}
254 |
255 | onEndReached={async() => {
256 | setIsLoading(true);
257 | await delay(1000);
258 | setIsLoading(false);
259 | setFurnitureList(prevList => [
260 | ...prevList,
261 | ...data.slice(prevList.length, prevList.length + 6),
262 | ]);
263 | }}
264 | numColumns={2}
265 | data={furnitureList}
266 | renderItem={renderItem}
267 | ListEmptyComponent={listEmptyComponent}
268 | />
269 |
275 |
276 | {isLoading ? (
277 |
282 | ) : (
283 | Log Out
284 | )}
285 |
286 |
287 |
288 |
289 | );
290 | };
291 |
292 | const styles = StyleSheet.create({
293 | container: {
294 | flex: 1,
295 | justifyContent: 'space-evenly',
296 | padding: 10,
297 | },
298 | title: {
299 | alignSelf: 'flex-start',
300 | fontSize: 18,
301 | fontWeight: '500',
302 | marginBottom: 24,
303 | marginLeft: 24,
304 | },
305 | gradient: {
306 | borderRadius: 16,
307 | marginTop: 32,
308 | },
309 | button: {
310 | padding: 16,
311 | },
312 | loader: {
313 | alignSelf: 'center',
314 | },
315 | buttonText: {
316 | color: 'white',
317 | textAlign: 'center',
318 | fontSize: 14,
319 | fontFamily: 'Manrope-SemiBold',
320 | },
321 | });
322 |
323 | export default HomeScreen;
--------------------------------------------------------------------------------
/src/screens/LoginScreen.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useState, useCallback, useRef } from "react";
2 | import {
3 | View,
4 | Text,
5 | TextInput,
6 | Pressable,
7 | ActivityIndicator,
8 | KeyboardAvoidingView,
9 | ScrollView,
10 | Platform,
11 | Alert,
12 | StyleSheet,
13 | } from "react-native";
14 | import { Image } from "expo-image";
15 | import { SafeAreaView } from "react-native-safe-area-context";
16 | import Spinner from 'react-native-loading-spinner-overlay';
17 | import Checkbox from "expo-checkbox";
18 | import { Feather } from "@expo/vector-icons";
19 | import AsyncStorage from '@react-native-async-storage/async-storage';
20 | import { CommonActions, useFocusEffect } from "@react-navigation/native";
21 | import { LinearGradient } from 'expo-linear-gradient';
22 | import { useAuth } from "src/contexts/AuthContext";
23 |
24 | import * as WebBrowser from "expo-web-browser";
25 | WebBrowser.maybeCompleteAuthSession();
26 | import * as Google from "expo-auth-session/build/providers/Google";
27 |
28 | const LoginScreen = ({ navigation }: { navigation: any }) => {
29 | const { loggedInUser, setLoggedInUser } = useAuth();
30 | const [error, setError] = useState(null);
31 | const [email, setEmail] = React.useState("");
32 | const [password, setPassword] = React.useState("");
33 | const [hidePassword, setHidePassword] = React.useState(true);
34 |
35 | const [authError, setAuthError] = React.useState("");
36 | const [emailError, setEmailError] = useState("");
37 | const [passwordError, setPasswordError] = useState("");
38 | const [rememberMe, setRememberMe] = useState(false);
39 | const [checked, setChecked] = useState(false);
40 | const [isLoading, setIsLoading] = useState(false);
41 | const [googleLoading, setGoogleLoading] = useState(false);
42 |
43 | const [request, response, promptAsync] = Google.useAuthRequest({
44 | androidClientId: process.env.EXPO_PUBLIC_OAUTH_CLIENT_ID,
45 | })
46 |
47 | const getUserInfo = async (token: any) => {
48 | if (!token) return;
49 | try {
50 | setGoogleLoading(true);
51 | const response = await fetch(
52 | 'https://www.googleapis.com/oauth2/v3/userinfo',
53 | {
54 | headers: {
55 | Authorization: `Bearer ${token}`,
56 | },
57 | }
58 | );
59 | const user = await response.json();
60 | console.log('Google-SignedIn User info: ', user);
61 | if (user) {
62 | setGoogleLoading(true);
63 | const userInfo = { email: user.email, name: user.name, avatar: user.picture,authType: 'google' };
64 | setLoggedInUser(userInfo);
65 | setGoogleLoading(false);
66 | navigation.navigate('Home');
67 | }
68 | } catch (err) {
69 | console.error(err);
70 | setGoogleLoading(false);
71 | }
72 | }
73 |
74 | const handleSignInWithGoogle = async () => {
75 | try {
76 | setGoogleLoading(true);
77 | if (response?.type === 'success') {
78 | await getUserInfo(response.authentication?.accessToken);
79 | console.log("User info is saved:", response.authentication?.accessToken);
80 | }
81 | } catch (err) {
82 | console.log('error signing in with google', err);
83 | } finally {
84 | setGoogleLoading(false);
85 | }
86 | }
87 |
88 | useEffect(() => {
89 | handleSignInWithGoogle();
90 | }, [response]);
91 |
92 | const createErrorMsg = (error: any) => {
93 | let name = error.name;
94 | console.log('createErrorMsg- error.name: ', name);
95 | if (name === 'NotAuthorizedException') setAuthError('Incorrect username or password');
96 | if (name === 'UserNotFoundException') setAuthError('User not registered');
97 | };
98 |
99 | const handleCheckboxPress = async () => {
100 | setChecked(!checked);
101 | };
102 |
103 | return (
104 |
105 |
111 |
115 |
120 | INX
121 | Log in
122 | Enter your email and password to continue
123 |
124 | Email / User Name
125 | setEmail(email)}
133 | />
134 | {emailError && {emailError}}
135 |
136 |
137 | Password
138 |
139 | setPassword(text)}
146 | />
147 | setHidePassword(!hidePassword)}
149 | style={styles.eyeIcon}
150 | >
151 | {!hidePassword ? (
152 |
153 | ) : (
154 |
155 | )}
156 |
157 |
158 | {passwordError && {passwordError}}
159 | {!passwordError && authError && {authError}}
160 |
161 |
162 |
163 |
169 | Remember Me
170 |
171 | { }}>
172 | Forgot Password?
173 |
174 |
175 |
176 |
182 | { }} style={styles.continueButton} disabled={isLoading}>
183 | {isLoading ? (
184 |
189 | ) : Continue}
190 |
191 |
192 |
193 |
194 |
195 | Or
196 |
197 |
198 | promptAsync()} style={styles.googleButton} disabled={googleLoading}>
199 | {googleLoading ? (
200 |
205 | ) :
206 |
207 |
212 | Continue With Google
213 |
214 | }
215 |
216 | { }} style={styles.appleButton}>
217 |
222 | Continue With Apple
223 |
224 |
225 | You don't have an account yet?
226 | {}}>
227 | Sign Up
228 |
229 |
230 |
231 |
232 |
233 | );
234 | };
235 |
236 | const styles = StyleSheet.create({
237 | container: {
238 | flex: 1,
239 | flexDirection: 'column',
240 | backgroundColor: 'white',
241 | },
242 | scrollViewContent: {
243 | paddingTop: 32,
244 | paddingBottom: 32,
245 | paddingHorizontal: 30,
246 | },
247 | header: {
248 | alignSelf: 'center',
249 | fontSize: 48,
250 | color: '#1E1445',
251 | marginTop: 12,
252 | },
253 | loginTitle: {
254 | fontSize: 30,
255 | color: '#1E1445',
256 | marginTop: 36,
257 | },
258 | subTitle: {
259 | fontSize: 12,
260 | color: '#9B92BF',
261 | marginTop: 8,
262 | },
263 | inputWrapper: {
264 | flexDirection: 'column',
265 | marginTop: 32,
266 | },
267 | inputLabel: {
268 | fontSize: 12,
269 | color: '#1E1445',
270 | },
271 | textInput: {
272 | marginTop: 6,
273 | width: '100%',
274 | paddingHorizontal: 20,
275 | paddingVertical: 16,
276 | borderRadius: 32,
277 | backgroundColor: '#F7F1FE',
278 | fontSize: 12,
279 | color: '#1E1445',
280 | },
281 | errorText: {
282 | color: 'red',
283 | fontSize: 12,
284 | marginTop: 4,
285 | },
286 | textInputWrapper: {
287 | flexDirection: 'row',
288 | justifyContent: 'center',
289 | alignItems: 'center',
290 | marginTop: 6,
291 | },
292 | eyeIcon: {
293 | position: 'absolute',
294 | right: 20,
295 | top: 25,
296 | zIndex: 10,
297 | },
298 | checkboxWrapper: {
299 | flexDirection: 'row',
300 | justifyContent: 'space-between',
301 | alignItems: 'center',
302 | marginTop: 10,
303 | },
304 | rememberMeWrapper: {
305 | flexDirection: 'row',
306 | alignItems: 'center',
307 | },
308 | checkbox: {
309 | width: 16,
310 | height: 16,
311 | borderRadius: 4,
312 | },
313 | rememberMeText: {
314 | color: '#1E1445',
315 | fontSize: 12,
316 | marginLeft: 6,
317 | },
318 | forgotPasswordText: {
319 | fontSize: 12,
320 | color: '#1E1445',
321 | textDecorationLine: 'underline',
322 | },
323 | gradientButton: {
324 | borderRadius: 16,
325 | marginTop: 32,
326 | },
327 | continueButton: {
328 | padding: 16,
329 | },
330 | activityIndicator: {
331 | alignSelf: 'center',
332 | },
333 | continueButtonText: {
334 | color: 'white',
335 | textAlign: 'center',
336 | fontSize: 14,
337 | },
338 | orSection: {
339 | flexDirection: 'row',
340 | justifyContent: 'center',
341 | alignItems: 'center',
342 | marginTop: 32,
343 | marginBottom: 16,
344 | },
345 | line: {
346 | flex: 1,
347 | height: 1,
348 | backgroundColor: 'gray',
349 | marginHorizontal: 16,
350 | },
351 | orText: {
352 | fontSize: 12,
353 | color: '#1E1445',
354 | },
355 | googleButton: {
356 | flexDirection: 'row',
357 | justifyContent: 'center',
358 | alignItems: 'center',
359 | backgroundColor: 'white',
360 | borderRadius: 16,
361 | paddingVertical: 12,
362 | borderWidth: 1,
363 | borderColor: '#9B92BF',
364 | marginBottom: 8,
365 | },
366 | flexRow: {
367 | flexDirection: 'row'
368 | },
369 | googleIcon: {
370 | width: 20,
371 | height: 20,
372 | marginRight: 8
373 | },
374 | googleButtonText: {
375 | textAlign: 'center',
376 | fontSize: 12,
377 | color: '#1E1445',
378 | },
379 | appleButton: {
380 | flexDirection: 'row',
381 | justifyContent: 'center',
382 | alignItems: 'center',
383 | backgroundColor: 'white',
384 | borderRadius: 16,
385 | paddingVertical: 12,
386 | borderWidth: 1,
387 | borderColor: '#9B92BF',
388 | },
389 | appleIcon: {
390 | width: 20,
391 | height: 20,
392 | marginRight: 8,
393 | },
394 | appleButtonText: {
395 | textAlign: 'center',
396 | fontSize: 12,
397 | color: '#1E1445',
398 | },
399 | signUpWrapper: {
400 | flexDirection: 'row',
401 | justifyContent: 'center',
402 | alignItems: 'center',
403 | marginTop: 16
404 | },
405 | noAccountText: {
406 | fontSize: 12,
407 | color: '#1E1445',
408 | marginRight: 8
409 | },
410 | signUpText: {
411 | fontSize: 12,
412 | color: '#8839ED',
413 | }
414 | });
415 |
416 | export default LoginScreen;
--------------------------------------------------------------------------------