diff --git a/.env.example b/.env.example index a16758f7..287b2210 100644 --- a/.env.example +++ b/.env.example @@ -155,3 +155,4 @@ REACT_NATIVE_TWITTER_LINK= REACT_NATIVE_DISCUSSION_LINK= REACT_NATIVE_GOOGLE_CLOUD_PROJECT_ID= +REACT_NATIVE_METADATA_CHECKING_RELEASE_DATE= diff --git a/.eslintrc.js b/.eslintrc.js index fe2cdd63..afc90a89 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -8,6 +8,7 @@ module.exports = { 'no-unused-vars': 'off', 'unused-imports/no-unused-imports': 'off', '@typescript-eslint/no-unused-vars': 'off', + 'react/react-in-jsx-scope': 'off', 'no-console': 0, 'unused-imports/no-unused-vars': [ 'warn', diff --git a/.gitignore b/.gitignore index bab28d0a..8b964660 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ web-build/ .idea/ .env + +/coverage/ diff --git a/App.tsx b/App.tsx deleted file mode 100644 index 9beee754..00000000 --- a/App.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import {StatusBar} from 'expo-status-bar'; -import {StyleSheet, Text, View} from 'react-native'; - -export default function App() { - return ( - - Open up App.js to start working on your app! - TYPESCRIPT - - - ); -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#fff', - alignItems: 'center', - justifyContent: 'center', - }, -}); diff --git a/android/app/build.gradle b/android/app/build.gradle index 2aae09d7..e5461734 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -120,7 +120,8 @@ android { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 - versionName "1.0.0" + versionName "2.0.0" + versionNameSuffix "-beta.2" } splits { diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index fa4d94a3..2d40f03c 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -28,13 +28,15 @@ - - - - + + + + + + diff --git a/android/app/src/main/assets/custom/README.md b/android/app/src/main/assets/custom/README.md new file mode 100644 index 00000000..12726dbf --- /dev/null +++ b/android/app/src/main/assets/custom/README.md @@ -0,0 +1,3 @@ +# Fonts + +> Fonts are in here diff --git a/android/app/src/main/java/com/treejer/ranger/MainActivity.java b/android/app/src/main/java/com/treejer/ranger/MainActivity.java index 4371a91b..4e23cba5 100644 --- a/android/app/src/main/java/com/treejer/ranger/MainActivity.java +++ b/android/app/src/main/java/com/treejer/ranger/MainActivity.java @@ -13,7 +13,7 @@ public class MainActivity extends ReactActivity { @Override protected void onCreate(Bundle savedInstanceState) { - // Set the theme to AppTheme BEFORE onCreate to support + // Set the theme to AppTheme BEFORE onCreate to support // coloring the background, status bar, and navigation bar. // This is required for expo-splash-screen. setTheme(R.style.AppTheme); diff --git a/android/build.gradle b/android/build.gradle index c10a92e9..20e7faf1 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -13,6 +13,7 @@ buildscript { // We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP. ndkVersion = "23.1.7779620" + androidXBrowser = "1.5.0" } repositories { google() diff --git a/android/link-assets-manifest.json b/android/link-assets-manifest.json new file mode 100644 index 00000000..272ba5af --- /dev/null +++ b/android/link-assets-manifest.json @@ -0,0 +1,81 @@ +{ + "migIndex": 1, + "data": [ + { + "path": "assets/fonts/Montserrat-Black.ttf", + "sha1": "96d03479269d1ba7a3e38f4b64ff87ead267c998" + }, + { + "path": "assets/fonts/Montserrat-BlackItalic.ttf", + "sha1": "6e84efcb6bf01c47102d6e9f0dbe5958e74c9f20" + }, + { + "path": "assets/fonts/Montserrat-Bold.ttf", + "sha1": "3a54407a2b26ff4718708a4726b10cb070d16534" + }, + { + "path": "assets/fonts/Montserrat-BoldItalic.ttf", + "sha1": "6acf078ad5e1b77e6d68b8ff0cde39d81b9f057c" + }, + { + "path": "assets/fonts/Montserrat-ExtraBold.ttf", + "sha1": "4b5c27dcf59df165606efa247190c0bfa3c02ff0" + }, + { + "path": "assets/fonts/Montserrat-ExtraBoldItalic.ttf", + "sha1": "28423e53b60316c09f468055ca8c1d27c06ab45b" + }, + { + "path": "assets/fonts/Montserrat-ExtraLight.ttf", + "sha1": "fe3c849af6231af6c5c43d1045f2011bf683f317" + }, + { + "path": "assets/fonts/Montserrat-ExtraLightItalic.ttf", + "sha1": "40d3231d668844dab24536fa0c380bdc2311a992" + }, + { + "path": "assets/fonts/Montserrat-Italic.ttf", + "sha1": "798c701450f6bc08217f73c1ac569100cddc2947" + }, + { + "path": "assets/fonts/Montserrat-Light.ttf", + "sha1": "83879cec4c934d446eca63aa5cfedcebfd60d610" + }, + { + "path": "assets/fonts/Montserrat-LightItalic.ttf", + "sha1": "659632ad8a33d96e6a00319d7b0c020e9cc6cc5b" + }, + { + "path": "assets/fonts/Montserrat-Medium.ttf", + "sha1": "65a98832079c4d2c67f3acc4f4ce2de630fe6cb0" + }, + { + "path": "assets/fonts/Montserrat-MediumItalic.ttf", + "sha1": "ceadac9926836d5fc0ee14f94567f0ea25979fa2" + }, + { + "path": "assets/fonts/Montserrat-Regular.ttf", + "sha1": "d25b35242deb1c6ff888b8162ca2aacc356d3899" + }, + { + "path": "assets/fonts/Montserrat-SemiBold.ttf", + "sha1": "f829de4c176fb2ccf5e33360920f48de6794434e" + }, + { + "path": "assets/fonts/Montserrat-SemiBoldItalic.ttf", + "sha1": "3c2759411b32ad6779aba08e4c09ed1b3c0bc4d4" + }, + { + "path": "assets/fonts/Montserrat-Thin.ttf", + "sha1": "1d00ff2f5bc9331aa6e75b5a82dd698976615dc4" + }, + { + "path": "assets/fonts/Montserrat-ThinItalic.ttf", + "sha1": "ae19fb168e043e6408692c4bc50dd0aab76fdc22" + }, + { + "path": "assets/fonts/README.md", + "sha1": "e40451f9fc81b083aec8b0df5d69f2c15c932a7e" + } + ] +} diff --git a/app.json b/app.json index df820961..8502dcc9 100644 --- a/app.json +++ b/app.json @@ -1,8 +1,9 @@ { "expo": { "name": "RangerTreejer", + "scheme": "ranger-treejer", "slug": "RangerTreejerV2", - "version": "1.0.0", + "version": "1.0.0-beta.2", "orientation": "portrait", "icon": "./assets/icon.png", "userInterfaceStyle": "light", diff --git a/babel.config.js b/babel.config.js index 2003437e..710a8469 100644 --- a/babel.config.js +++ b/babel.config.js @@ -26,12 +26,20 @@ module.exports = function (api) { navigation: './src/navigation', types: './src/types', 'ranger-redux': './src/redux', + 'ranger-testUtils': './src/testUtils', + webServices: './src/webServices', }, }, ], 'import-graphql', - '@babel/plugin-proposal-export-namespace-from', 'react-native-reanimated/plugin', + ...(process.env.NODE_ENV === 'test' + ? [ + '@babel/plugin-proposal-export-namespace-from', + '@babel/plugin-proposal-private-methods', + '@babel/plugin-proposal-class-properties', + ] + : []), ], }; }; diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 00000000..fe9f365d --- /dev/null +++ b/deploy.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +# ==> USERNAME and SERVER_IP env variables are needed!!! <== + +echo "Start to build web production ..." + +yarn web:build + +echo "web:prod is done" + +SERVER_SSH="$SERVER_USERNAME@$SERVER_IP" +TIME_FOLDER=$(date +'%m-%d-%Y-%H%M') +if + [[ "$PORT" -eq "" || "$PORT" -eq "4000" ]]; +then + PORT_LOCAL=4000; + SERVER_FOLDER="/home/deploy/projects/mobiledev-build" + PM2_NAME="dev"; +else + PORT_LOCAL=$PORT; + SERVER_FOLDER="/home/deploy/projects/mobile-build" + PM2_NAME="main"; +fi +BUILD_TAR_FILE="web-build-$TIME_FOLDER.tar.gz" + +echo "Start deploying ranger treejer web to $SERVER_IP on port $PORT_LOCAL" + +echo "$(TIME_FOLDER) => Folder for deploying" + +tar -zcvf "$BUILD_TAR_FILE" web-build + +echo "tar.gz file generated" + +scp "$BUILD_TAR_FILE" "$SERVER_SSH:$SERVER_FOLDER/$BUILD_TAR_FILE" + +echo "tar.gz successfully copied to server." + +rm -rf "$BUILD_TAR_FILE" + +SSH_COMMAND="ssh $SERVER_SSH 'cd $SERVER_FOLDER; pm2 delete $PM2_NAME; rm -rf web-build; tar -xvf $BUILD_TAR_FILE; pm2 serve web-build $PORT_LOCAL --name $PM2_NAME;'" +eval "${SSH_COMMAND}" diff --git a/index.css b/index.css new file mode 100644 index 00000000..546e7534 --- /dev/null +++ b/index.css @@ -0,0 +1,102 @@ +.slick-slider, +.slick-slider .slick-list, +.slick-slider .slick-list .slick-track, +.slick-slider .slick-list .slick-track .slick-slide, +.slick-slider .slick-list .slick-track .slick-slide > div, +.slick-slider .slick-list .slick-track .slick-slide > div > div { + height: 100%; +} + +body { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-color: #faf8f0; +} + +#root { + max-width: 768px; + margin: auto; + box-shadow: 0 0 40px 4px rgba(0, 0, 0, 0.1); + overflow: hidden; +} + +@media all and (min-width: 768px) { + #root { + border-radius: 12px; + } +} + +#ranger-web { + min-height: -webkit-fill-available; + min-height: -moz-fill-available; + min-width: -webkit-fill-available; + overflow: hidden; + display: flex; + background-color: #faf8f0; +} + +.mapboxgl-ctrl-top-right { + position: fixed !important; + top: auto !important; + right: 1rem !important; + bottom: 10vh !important; + width: 100px !important; + height: 100px !important; + display: none; +} + +#ptr-container > div { + height: 100% !important; +} + +@media all and (max-height: 677px) { + .mapboxgl-ctrl-top-right { + bottom: 13vh !important; + } +} + +.mapboxgl-ctrl-geolocate { + width: 45px !important; + height: 45px !important; + padding: 4px !important; +} + +.mapboxgl-ctrl-icon { + background-size: cover; +} + +.mapboxgl-ctrl, +.mapboxgl-ctrl-group { + border-radius: 50% !important; + overflow: hidden !important; +} + +.mapboxgl-ctrl-bottom-right { + display: none !important; +} + +.mapboxgl-ctrl-bottom-left { + display: none !important; +} + +input { + outline: none; +} + +.Toastify__toast-container--top-right { + top: env(safe-area-inset-top, 1em) !important; +} + +@media all and (min-width: 768px) { + .Toastify__toast-container--top-right { + right: calc(100vw - 768px - calc(50vw - 392px)); + } +} + + +#ptr-parent{ + width: 100% !important; +} diff --git a/ios/Podfile b/ios/Podfile index 274f39f2..dfe32e3b 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -10,7 +10,7 @@ podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0' -platform :ios, podfile_properties['ios.deploymentTarget'] || '13.0' +platform :ios, '13.0' install! 'cocoapods', :deterministic_uuids => false diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 1aba044d..9dc07726 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -27,19 +27,17 @@ PODS: - React-Core - React-RCTAppDelegate - ReactCommon/turbomodule/core - - ExpoWebBrowser (11.0.0): - - ExpoModulesCore - EXSplashScreen (0.18.1): - ExpoModulesCore - React-Core - - FBLazyVector (0.71.4) - - FBReactNativeSpec (0.71.4): + - FBLazyVector (0.71.8) + - FBReactNativeSpec (0.71.8): - RCT-Folly (= 2021.07.22.00) - - RCTRequired (= 0.71.4) - - RCTTypeSafety (= 0.71.4) - - React-Core (= 0.71.4) - - React-jsi (= 0.71.4) - - ReactCommon/turbomodule/core (= 0.71.4) + - RCTRequired (= 0.71.8) + - RCTTypeSafety (= 0.71.8) + - React-Core (= 0.71.8) + - React-jsi (= 0.71.8) + - ReactCommon/turbomodule/core (= 0.71.8) - Firebase/Analytics (10.6.0): - Firebase/Core - Firebase/Core (10.6.0): @@ -69,9 +67,9 @@ PODS: - FirebaseCoreInternal (~> 10.0) - GoogleUtilities/Environment (~> 7.8) - GoogleUtilities/Logger (~> 7.8) - - FirebaseCoreInternal (10.6.0): + - FirebaseCoreInternal (10.7.0): - "GoogleUtilities/NSData+zlib (~> 7.8)" - - FirebaseInstallations (10.6.0): + - FirebaseInstallations (10.7.0): - FirebaseCore (~> 10.0) - GoogleUtilities/Environment (~> 7.8) - GoogleUtilities/UserDefaults (~> 7.8) @@ -117,16 +115,16 @@ PODS: - GoogleUtilities/Logger - GoogleUtilities/UserDefaults (7.11.0): - GoogleUtilities/Logger - - hermes-engine (0.71.4): - - hermes-engine/Pre-built (= 0.71.4) - - hermes-engine/Pre-built (0.71.4) + - hermes-engine (0.71.6): + - hermes-engine/Pre-built (= 0.71.6) + - hermes-engine/Pre-built (0.71.6) - libevent (2.1.12) - - MapboxCommon (23.3.2) - - MapboxCoreMaps (10.11.1): - - MapboxCommon (~> 23.3) - - MapboxMaps (10.11.1): - - MapboxCommon (= 23.3.2) - - MapboxCoreMaps (= 10.11.1) + - MapboxCommon (23.2.3) + - MapboxCoreMaps (10.10.0): + - MapboxCommon (~> 23.2) + - MapboxMaps (10.10.2): + - MapboxCommon (= 23.2.3) + - MapboxCoreMaps (= 10.10.0) - MapboxMobileEvents (= 1.0.10) - Turf (~> 2.0) - MapboxMobileEvents (1.0.10) @@ -153,26 +151,26 @@ PODS: - fmt (~> 6.2.1) - glog - libevent - - RCTRequired (0.71.4) - - RCTTypeSafety (0.71.4): - - FBLazyVector (= 0.71.4) - - RCTRequired (= 0.71.4) - - React-Core (= 0.71.4) - - React (0.71.4): - - React-Core (= 0.71.4) - - React-Core/DevSupport (= 0.71.4) - - React-Core/RCTWebSocket (= 0.71.4) - - React-RCTActionSheet (= 0.71.4) - - React-RCTAnimation (= 0.71.4) - - React-RCTBlob (= 0.71.4) - - React-RCTImage (= 0.71.4) - - React-RCTLinking (= 0.71.4) - - React-RCTNetwork (= 0.71.4) - - React-RCTSettings (= 0.71.4) - - React-RCTText (= 0.71.4) - - React-RCTVibration (= 0.71.4) - - React-callinvoker (0.71.4) - - React-Codegen (0.71.4): + - RCTRequired (0.71.8) + - RCTTypeSafety (0.71.8): + - FBLazyVector (= 0.71.8) + - RCTRequired (= 0.71.8) + - React-Core (= 0.71.8) + - React (0.71.8): + - React-Core (= 0.71.8) + - React-Core/DevSupport (= 0.71.8) + - React-Core/RCTWebSocket (= 0.71.8) + - React-RCTActionSheet (= 0.71.8) + - React-RCTAnimation (= 0.71.8) + - React-RCTBlob (= 0.71.8) + - React-RCTImage (= 0.71.8) + - React-RCTLinking (= 0.71.8) + - React-RCTNetwork (= 0.71.8) + - React-RCTSettings (= 0.71.8) + - React-RCTText (= 0.71.8) + - React-RCTVibration (= 0.71.8) + - React-callinvoker (0.71.8) + - React-Codegen (0.71.8): - FBReactNativeSpec - hermes-engine - RCT-Folly @@ -183,209 +181,209 @@ PODS: - React-jsiexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-Core (0.71.4): + - React-Core (0.71.8): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.71.4) - - React-cxxreact (= 0.71.4) + - React-Core/Default (= 0.71.8) + - React-cxxreact (= 0.71.8) - React-hermes - - React-jsi (= 0.71.4) - - React-jsiexecutor (= 0.71.4) - - React-perflogger (= 0.71.4) + - React-jsi (= 0.71.8) + - React-jsiexecutor (= 0.71.8) + - React-perflogger (= 0.71.8) - Yoga - - React-Core/CoreModulesHeaders (0.71.4): + - React-Core/CoreModulesHeaders (0.71.8): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.71.4) + - React-cxxreact (= 0.71.8) - React-hermes - - React-jsi (= 0.71.4) - - React-jsiexecutor (= 0.71.4) - - React-perflogger (= 0.71.4) + - React-jsi (= 0.71.8) + - React-jsiexecutor (= 0.71.8) + - React-perflogger (= 0.71.8) - Yoga - - React-Core/Default (0.71.4): + - React-Core/Default (0.71.8): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-cxxreact (= 0.71.4) + - React-cxxreact (= 0.71.8) - React-hermes - - React-jsi (= 0.71.4) - - React-jsiexecutor (= 0.71.4) - - React-perflogger (= 0.71.4) + - React-jsi (= 0.71.8) + - React-jsiexecutor (= 0.71.8) + - React-perflogger (= 0.71.8) - Yoga - - React-Core/DevSupport (0.71.4): + - React-Core/DevSupport (0.71.8): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.71.4) - - React-Core/RCTWebSocket (= 0.71.4) - - React-cxxreact (= 0.71.4) + - React-Core/Default (= 0.71.8) + - React-Core/RCTWebSocket (= 0.71.8) + - React-cxxreact (= 0.71.8) - React-hermes - - React-jsi (= 0.71.4) - - React-jsiexecutor (= 0.71.4) - - React-jsinspector (= 0.71.4) - - React-perflogger (= 0.71.4) + - React-jsi (= 0.71.8) + - React-jsiexecutor (= 0.71.8) + - React-jsinspector (= 0.71.8) + - React-perflogger (= 0.71.8) - Yoga - - React-Core/RCTActionSheetHeaders (0.71.4): + - React-Core/RCTActionSheetHeaders (0.71.8): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.71.4) + - React-cxxreact (= 0.71.8) - React-hermes - - React-jsi (= 0.71.4) - - React-jsiexecutor (= 0.71.4) - - React-perflogger (= 0.71.4) + - React-jsi (= 0.71.8) + - React-jsiexecutor (= 0.71.8) + - React-perflogger (= 0.71.8) - Yoga - - React-Core/RCTAnimationHeaders (0.71.4): + - React-Core/RCTAnimationHeaders (0.71.8): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.71.4) + - React-cxxreact (= 0.71.8) - React-hermes - - React-jsi (= 0.71.4) - - React-jsiexecutor (= 0.71.4) - - React-perflogger (= 0.71.4) + - React-jsi (= 0.71.8) + - React-jsiexecutor (= 0.71.8) + - React-perflogger (= 0.71.8) - Yoga - - React-Core/RCTBlobHeaders (0.71.4): + - React-Core/RCTBlobHeaders (0.71.8): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.71.4) + - React-cxxreact (= 0.71.8) - React-hermes - - React-jsi (= 0.71.4) - - React-jsiexecutor (= 0.71.4) - - React-perflogger (= 0.71.4) + - React-jsi (= 0.71.8) + - React-jsiexecutor (= 0.71.8) + - React-perflogger (= 0.71.8) - Yoga - - React-Core/RCTImageHeaders (0.71.4): + - React-Core/RCTImageHeaders (0.71.8): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.71.4) + - React-cxxreact (= 0.71.8) - React-hermes - - React-jsi (= 0.71.4) - - React-jsiexecutor (= 0.71.4) - - React-perflogger (= 0.71.4) + - React-jsi (= 0.71.8) + - React-jsiexecutor (= 0.71.8) + - React-perflogger (= 0.71.8) - Yoga - - React-Core/RCTLinkingHeaders (0.71.4): + - React-Core/RCTLinkingHeaders (0.71.8): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.71.4) + - React-cxxreact (= 0.71.8) - React-hermes - - React-jsi (= 0.71.4) - - React-jsiexecutor (= 0.71.4) - - React-perflogger (= 0.71.4) + - React-jsi (= 0.71.8) + - React-jsiexecutor (= 0.71.8) + - React-perflogger (= 0.71.8) - Yoga - - React-Core/RCTNetworkHeaders (0.71.4): + - React-Core/RCTNetworkHeaders (0.71.8): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.71.4) + - React-cxxreact (= 0.71.8) - React-hermes - - React-jsi (= 0.71.4) - - React-jsiexecutor (= 0.71.4) - - React-perflogger (= 0.71.4) + - React-jsi (= 0.71.8) + - React-jsiexecutor (= 0.71.8) + - React-perflogger (= 0.71.8) - Yoga - - React-Core/RCTSettingsHeaders (0.71.4): + - React-Core/RCTSettingsHeaders (0.71.8): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.71.4) + - React-cxxreact (= 0.71.8) - React-hermes - - React-jsi (= 0.71.4) - - React-jsiexecutor (= 0.71.4) - - React-perflogger (= 0.71.4) + - React-jsi (= 0.71.8) + - React-jsiexecutor (= 0.71.8) + - React-perflogger (= 0.71.8) - Yoga - - React-Core/RCTTextHeaders (0.71.4): + - React-Core/RCTTextHeaders (0.71.8): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.71.4) + - React-cxxreact (= 0.71.8) - React-hermes - - React-jsi (= 0.71.4) - - React-jsiexecutor (= 0.71.4) - - React-perflogger (= 0.71.4) + - React-jsi (= 0.71.8) + - React-jsiexecutor (= 0.71.8) + - React-perflogger (= 0.71.8) - Yoga - - React-Core/RCTVibrationHeaders (0.71.4): + - React-Core/RCTVibrationHeaders (0.71.8): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - React-Core/Default - - React-cxxreact (= 0.71.4) + - React-cxxreact (= 0.71.8) - React-hermes - - React-jsi (= 0.71.4) - - React-jsiexecutor (= 0.71.4) - - React-perflogger (= 0.71.4) + - React-jsi (= 0.71.8) + - React-jsiexecutor (= 0.71.8) + - React-perflogger (= 0.71.8) - Yoga - - React-Core/RCTWebSocket (0.71.4): + - React-Core/RCTWebSocket (0.71.8): - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.71.4) - - React-cxxreact (= 0.71.4) + - React-Core/Default (= 0.71.8) + - React-cxxreact (= 0.71.8) - React-hermes - - React-jsi (= 0.71.4) - - React-jsiexecutor (= 0.71.4) - - React-perflogger (= 0.71.4) + - React-jsi (= 0.71.8) + - React-jsiexecutor (= 0.71.8) + - React-perflogger (= 0.71.8) - Yoga - - React-CoreModules (0.71.4): + - React-CoreModules (0.71.8): - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.4) - - React-Codegen (= 0.71.4) - - React-Core/CoreModulesHeaders (= 0.71.4) - - React-jsi (= 0.71.4) + - RCTTypeSafety (= 0.71.8) + - React-Codegen (= 0.71.8) + - React-Core/CoreModulesHeaders (= 0.71.8) + - React-jsi (= 0.71.8) - React-RCTBlob - - React-RCTImage (= 0.71.4) - - ReactCommon/turbomodule/core (= 0.71.4) - - React-cxxreact (0.71.4): + - React-RCTImage (= 0.71.8) + - ReactCommon/turbomodule/core (= 0.71.8) + - React-cxxreact (0.71.8): - boost (= 1.76.0) - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.71.4) - - React-jsi (= 0.71.4) - - React-jsinspector (= 0.71.4) - - React-logger (= 0.71.4) - - React-perflogger (= 0.71.4) - - React-runtimeexecutor (= 0.71.4) - - React-hermes (0.71.4): + - React-callinvoker (= 0.71.8) + - React-jsi (= 0.71.8) + - React-jsinspector (= 0.71.8) + - React-logger (= 0.71.8) + - React-perflogger (= 0.71.8) + - React-runtimeexecutor (= 0.71.8) + - React-hermes (0.71.8): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - RCT-Folly/Futures (= 2021.07.22.00) - - React-cxxreact (= 0.71.4) + - React-cxxreact (= 0.71.8) - React-jsi - - React-jsiexecutor (= 0.71.4) - - React-jsinspector (= 0.71.4) - - React-perflogger (= 0.71.4) - - React-jsi (0.71.4): + - React-jsiexecutor (= 0.71.8) + - React-jsinspector (= 0.71.8) + - React-perflogger (= 0.71.8) + - React-jsi (0.71.8): - boost (= 1.76.0) - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-jsiexecutor (0.71.4): + - React-jsiexecutor (0.71.8): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-cxxreact (= 0.71.4) - - React-jsi (= 0.71.4) - - React-perflogger (= 0.71.4) - - React-jsinspector (0.71.4) - - React-logger (0.71.4): + - React-cxxreact (= 0.71.8) + - React-jsi (= 0.71.8) + - React-perflogger (= 0.71.8) + - React-jsinspector (0.71.8) + - React-logger (0.71.8): - glog - react-native-geolocation-service (5.3.1): - React @@ -399,90 +397,90 @@ PODS: - ReactCommon/turbomodule/core - react-native-webview (11.26.1): - React-Core - - React-perflogger (0.71.4) - - React-RCTActionSheet (0.71.4): - - React-Core/RCTActionSheetHeaders (= 0.71.4) - - React-RCTAnimation (0.71.4): + - React-perflogger (0.71.8) + - React-RCTActionSheet (0.71.8): + - React-Core/RCTActionSheetHeaders (= 0.71.8) + - React-RCTAnimation (0.71.8): - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.4) - - React-Codegen (= 0.71.4) - - React-Core/RCTAnimationHeaders (= 0.71.4) - - React-jsi (= 0.71.4) - - ReactCommon/turbomodule/core (= 0.71.4) - - React-RCTAppDelegate (0.71.4): + - RCTTypeSafety (= 0.71.8) + - React-Codegen (= 0.71.8) + - React-Core/RCTAnimationHeaders (= 0.71.8) + - React-jsi (= 0.71.8) + - ReactCommon/turbomodule/core (= 0.71.8) + - React-RCTAppDelegate (0.71.8): - RCT-Folly - RCTRequired - RCTTypeSafety - React-Core - ReactCommon/turbomodule/core - - React-RCTBlob (0.71.4): + - React-RCTBlob (0.71.8): - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-Codegen (= 0.71.4) - - React-Core/RCTBlobHeaders (= 0.71.4) - - React-Core/RCTWebSocket (= 0.71.4) - - React-jsi (= 0.71.4) - - React-RCTNetwork (= 0.71.4) - - ReactCommon/turbomodule/core (= 0.71.4) - - React-RCTImage (0.71.4): + - React-Codegen (= 0.71.8) + - React-Core/RCTBlobHeaders (= 0.71.8) + - React-Core/RCTWebSocket (= 0.71.8) + - React-jsi (= 0.71.8) + - React-RCTNetwork (= 0.71.8) + - ReactCommon/turbomodule/core (= 0.71.8) + - React-RCTImage (0.71.8): - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.4) - - React-Codegen (= 0.71.4) - - React-Core/RCTImageHeaders (= 0.71.4) - - React-jsi (= 0.71.4) - - React-RCTNetwork (= 0.71.4) - - ReactCommon/turbomodule/core (= 0.71.4) - - React-RCTLinking (0.71.4): - - React-Codegen (= 0.71.4) - - React-Core/RCTLinkingHeaders (= 0.71.4) - - React-jsi (= 0.71.4) - - ReactCommon/turbomodule/core (= 0.71.4) - - React-RCTNetwork (0.71.4): + - RCTTypeSafety (= 0.71.8) + - React-Codegen (= 0.71.8) + - React-Core/RCTImageHeaders (= 0.71.8) + - React-jsi (= 0.71.8) + - React-RCTNetwork (= 0.71.8) + - ReactCommon/turbomodule/core (= 0.71.8) + - React-RCTLinking (0.71.8): + - React-Codegen (= 0.71.8) + - React-Core/RCTLinkingHeaders (= 0.71.8) + - React-jsi (= 0.71.8) + - ReactCommon/turbomodule/core (= 0.71.8) + - React-RCTNetwork (0.71.8): - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.4) - - React-Codegen (= 0.71.4) - - React-Core/RCTNetworkHeaders (= 0.71.4) - - React-jsi (= 0.71.4) - - ReactCommon/turbomodule/core (= 0.71.4) - - React-RCTSettings (0.71.4): + - RCTTypeSafety (= 0.71.8) + - React-Codegen (= 0.71.8) + - React-Core/RCTNetworkHeaders (= 0.71.8) + - React-jsi (= 0.71.8) + - ReactCommon/turbomodule/core (= 0.71.8) + - React-RCTSettings (0.71.8): - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.4) - - React-Codegen (= 0.71.4) - - React-Core/RCTSettingsHeaders (= 0.71.4) - - React-jsi (= 0.71.4) - - ReactCommon/turbomodule/core (= 0.71.4) - - React-RCTText (0.71.4): - - React-Core/RCTTextHeaders (= 0.71.4) - - React-RCTVibration (0.71.4): + - RCTTypeSafety (= 0.71.8) + - React-Codegen (= 0.71.8) + - React-Core/RCTSettingsHeaders (= 0.71.8) + - React-jsi (= 0.71.8) + - ReactCommon/turbomodule/core (= 0.71.8) + - React-RCTText (0.71.8): + - React-Core/RCTTextHeaders (= 0.71.8) + - React-RCTVibration (0.71.8): - RCT-Folly (= 2021.07.22.00) - - React-Codegen (= 0.71.4) - - React-Core/RCTVibrationHeaders (= 0.71.4) - - React-jsi (= 0.71.4) - - ReactCommon/turbomodule/core (= 0.71.4) - - React-runtimeexecutor (0.71.4): - - React-jsi (= 0.71.4) - - ReactCommon/turbomodule/bridging (0.71.4): + - React-Codegen (= 0.71.8) + - React-Core/RCTVibrationHeaders (= 0.71.8) + - React-jsi (= 0.71.8) + - ReactCommon/turbomodule/core (= 0.71.8) + - React-runtimeexecutor (0.71.8): + - React-jsi (= 0.71.8) + - ReactCommon/turbomodule/bridging (0.71.8): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.71.4) - - React-Core (= 0.71.4) - - React-cxxreact (= 0.71.4) - - React-jsi (= 0.71.4) - - React-logger (= 0.71.4) - - React-perflogger (= 0.71.4) - - ReactCommon/turbomodule/core (0.71.4): + - React-callinvoker (= 0.71.8) + - React-Core (= 0.71.8) + - React-cxxreact (= 0.71.8) + - React-jsi (= 0.71.8) + - React-logger (= 0.71.8) + - React-perflogger (= 0.71.8) + - ReactCommon/turbomodule/core (0.71.8): - DoubleConversion - glog - hermes-engine - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.71.4) - - React-Core (= 0.71.4) - - React-cxxreact (= 0.71.4) - - React-jsi (= 0.71.4) - - React-logger (= 0.71.4) - - React-perflogger (= 0.71.4) + - React-callinvoker (= 0.71.8) + - React-Core (= 0.71.8) + - React-cxxreact (= 0.71.8) + - React-jsi (= 0.71.8) + - React-logger (= 0.71.8) + - React-perflogger (= 0.71.8) - RNCAsyncStorage (1.17.11): - React-Core - RNCClipboard (1.11.2): @@ -498,11 +496,11 @@ PODS: - RNFBApp (17.3.2): - Firebase/CoreOnly (= 10.6.0) - React-Core - - RNFlashList (1.4.1): + - RNFlashList (1.4.3): - React-Core - RNFS (2.20.0): - React-Core - - RNGestureHandler (2.9.0): + - RNGestureHandler (2.12.1): - React-Core - RNImageCropPicker (0.39.0): - React-Core @@ -515,18 +513,18 @@ PODS: - TOCropViewController - RNInAppBrowser (3.7.0): - React-Core - - rnmapbox-maps (10.0.0-beta.76): - - MapboxMaps (~> 10.11.1) + - rnmapbox-maps (10.0.0-beta.64): + - MapboxMaps (~> 10.10.0) - React - React-Core - - rnmapbox-maps/DynamicLibrary (= 10.0.0-beta.76) + - rnmapbox-maps/DynamicLibrary (= 10.0.0-beta.64) - Turf - - rnmapbox-maps/DynamicLibrary (10.0.0-beta.76): - - MapboxMaps (~> 10.11.1) + - rnmapbox-maps/DynamicLibrary (10.0.0-beta.64): + - MapboxMaps (~> 10.10.0) - React - React-Core - Turf - - RNPermissions (3.7.3): + - RNPermissions (3.8.0): - React-Core - RNReanimated (3.0.2): - DoubleConversion @@ -584,7 +582,6 @@ DEPENDENCIES: - Expo (from `../node_modules/expo`) - ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`) - ExpoModulesCore (from `../node_modules/expo-modules-core`) - - ExpoWebBrowser (from `../node_modules/expo-web-browser/ios`) - EXSplashScreen (from `../node_modules/expo-splash-screen/ios`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`) @@ -688,8 +685,6 @@ EXTERNAL SOURCES: :path: "../node_modules/expo-keep-awake/ios" ExpoModulesCore: :path: "../node_modules/expo-modules-core" - ExpoWebBrowser: - :path: "../node_modules/expo-web-browser/ios" EXSplashScreen: :path: "../node_modules/expo-splash-screen/ios" FBLazyVector: @@ -812,80 +807,79 @@ SPEC CHECKSUMS: Expo: 04ba1ddde0be07aff4306ae636a1804810679145 ExpoKeepAwake: 69f5f627670d62318410392d03e0b5db0f85759a ExpoModulesCore: 1667335d4f4c9b7801990930e6f0eea42c916a21 - ExpoWebBrowser: d682f920a7f34b1e09c0087bf70be64f9755c8e3 EXSplashScreen: cd7fb052dff5ba8311d5c2455ecbebffe1b7a8ca - FBLazyVector: 446e84642979fff0ba57f3c804c2228a473aeac2 - FBReactNativeSpec: 241709e132e3bf1526c1c4f00bc5384dd39dfba9 + FBLazyVector: f637f31eacba90d4fdeff3fa41608b8f361c173b + FBReactNativeSpec: 0d9a4f4de7ab614c49e98c00aedfd3bfbda33d59 Firebase: f13680471b021937f2230ea8503c7809d8c29806 FirebaseAnalytics: 9f382605c5ee412b039212f054bf7a403d9850c1 FirebaseCore: fa80ad16a62d52f67274b5b88304c3a318bbf9a4 - FirebaseCoreInternal: c7cd505e2136811096b225ac388d6254a2622362 - FirebaseInstallations: 13dde135fa0524e15bddb133ccc8465c53a1b3f3 + FirebaseCoreInternal: 8845798510aae74703467480f71ac613788d0696 + FirebaseInstallations: 59c0e4c7a816a0f76710d83f77e5369b3e45eb96 fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b GoogleAppMeasurement: 686b48c3c895f3c55c70719041913d5d150b74f6 GoogleUtilities: c2bdc4cf2ce786c4d2e6b3bcfd599a25ca78f06f - hermes-engine: a1f157c49ea579c28b0296bda8530e980c45bdb3 + hermes-engine: b434cea529ad0152c56c7cb6486b0c4c0b23b5de libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 - MapboxCommon: c3a35f6884b80d898de9f11d88cb28c5caba584a - MapboxCoreMaps: 03e7214fabb54d496ff56314ff8159dd264b6093 - MapboxMaps: 85610575a8871b3f5e98be2a234f0229a33324a7 + MapboxCommon: e7948335faacbe6f8b9b115511fd0dd0354bf565 + MapboxCoreMaps: 4075a9e415b9b3ab6229d09623fef5f791826a5b + MapboxMaps: d8cf7d214d94ec18790c338f3a3fe59dd4048e97 MapboxMobileEvents: de50b3a4de180dd129c326e09cd12c8adaaa46d6 nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431 PromisesObjC: 09985d6d70fbe7878040aa746d78236e6946d2ef RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1 - RCTRequired: 5a024fdf458fa8c0d82fc262e76f982d4dcdecdd - RCTTypeSafety: b6c253064466411c6810b45f66bc1e43ce0c54ba - React: 715292db5bd46989419445a5547954b25d2090f0 - React-callinvoker: 105392d1179058585b564d35b4592fe1c46d6fba - React-Codegen: b75333b93d835afce84b73472927cccaef2c9f8c - React-Core: 88838ed1724c64905fc6c0811d752828a92e395b - React-CoreModules: cd238b4bb8dc8529ccc8b34ceae7267b04ce1882 - React-cxxreact: 291bfab79d8098dc5ebab98f62e6bdfe81b3955a - React-hermes: b1e67e9a81c71745704950516f40ee804349641c - React-jsi: c9d5b563a6af6bb57034a82c2b0d39d0a7483bdc - React-jsiexecutor: d6b7fa9260aa3cb40afee0507e3bc1d17ecaa6f2 - React-jsinspector: 1f51e775819199d3fe9410e69ee8d4c4161c7b06 - React-logger: 0d58569ec51d30d1792c5e86a8e3b78d24b582c6 + RCTRequired: 8af6a32dfc2b65ec82193c2dee6e1011ff22ac2a + RCTTypeSafety: bee9dd161c175896c680d47ef1d9eaacf2b587f4 + React: d850475db9ba8006a8b875d79e1e0d6ac8a0f8b6 + React-callinvoker: 6a0c75475ddc17c9ed54e4ff0478074a18fd7ab5 + React-Codegen: 786571642e87add634e7f4d299c85314ec6cc158 + React-Core: 1adfab153f59e4f56e09b97a153089f466d7b8aa + React-CoreModules: 958d236715415d4ccdd5fa35c516cf0356637393 + React-cxxreact: 2e7a6283807ce8755c3d501735acd400bec3b5cd + React-hermes: 8102c3112ba32207c3052619be8cfae14bf99d84 + React-jsi: dd29264f041a587e91f994e4be97e86c127742b2 + React-jsiexecutor: 747911ab5921641b4ed7e4900065896597142125 + React-jsinspector: c712f9e3bb9ba4122d6b82b4f906448b8a281580 + React-logger: 342f358b8decfbf8f272367f4eacf4b6154061be react-native-geolocation-service: 608e1da71a1ac31b4de64d9ef2815f697978c55b react-native-netinfo: 2517ad504b3d303e90d7a431b0fcaef76d207983 react-native-safe-area-context: 39c2d8be3328df5d437ac1700f4f3a4f75716acc react-native-webview: 9f111dfbcfc826084d6c507f569e5e03342ee1c1 - React-perflogger: 0bb0522a12e058f6eb69d888bc16f40c16c4b907 - React-RCTActionSheet: bfd675a10f06a18728ea15d82082d48f228a213a - React-RCTAnimation: 2fa220b2052ec75b733112aca39143d34546a941 - React-RCTAppDelegate: 8564f93c1d9274e95e3b0c746d08a87ff5a621b2 - React-RCTBlob: d0336111f46301ae8aba2e161817e451aad72dd6 - React-RCTImage: fec592c46edb7c12a9cde08780bdb4a688416c62 - React-RCTLinking: 14eccac5d2a3b34b89dbfa29e8ef6219a153fe2d - React-RCTNetwork: 1fbce92e772e39ca3687a2ebb854501ff6226dd7 - React-RCTSettings: 1abea36c9bb16d9979df6c4b42e2ea281b4bbcc5 - React-RCTText: 15355c41561a9f43dfd23616d0a0dd40ba05ed61 - React-RCTVibration: ad17efcfb2fa8f6bfd8ac0cf48d96668b8b28e0b - React-runtimeexecutor: 8fa50b38df6b992c76537993a2b0553d3b088004 - ReactCommon: 34f9369c376d5f335069dda29552b3e7351b9ec6 + React-perflogger: d21f182895de9d1b077f8a3cd00011095c8c9100 + React-RCTActionSheet: 0151f83ef92d2a7139bba7dfdbc8066632a6d47b + React-RCTAnimation: 5ec9c0705bb2297549c120fe6473aa3e4a01e215 + React-RCTAppDelegate: 9895fd1b6d1176d88c4b10ddc169b2e1300c91f0 + React-RCTBlob: f3634eb45b6e7480037655e1ca93d1136ac984dd + React-RCTImage: 3c12cb32dec49549ae62ed6cba4018db43841ffc + React-RCTLinking: 310e930ee335ef25481b4a173d9edb64b77895f9 + React-RCTNetwork: b6837841fe88303b0c04c1e3c01992b30f1f5498 + React-RCTSettings: 600d91fe25fa7c16b0ff891304082440f2904b89 + React-RCTText: a0a19f749088280c6def5397ed6211b811e7eef3 + React-RCTVibration: 43ffd976a25f6057a7cf95ea3648ba4e00287f89 + React-runtimeexecutor: 7c51ae9d4b3e9608a2366e39ccaa606aa551b9ed + ReactCommon: 9957c7530467adbdf4a4a1476d636bd00b2e4dd8 RNCAsyncStorage: 8616bd5a58af409453ea4e1b246521bb76578d60 RNCClipboard: 3f0451a8100393908bea5c5c5b16f96d45f30bfc RNCMaskedView: bc0170f389056201c82a55e242e5d90070e18e5a RNDeviceInfo: 749f2e049dcd79e2e44f134f66b73a06951b5066 RNFBAnalytics: 966d8734174a27dee0e84193f676aa3ffb8661bd RNFBApp: 3bf62629c41ef65d82e763c25aeb77cdfa63bfae - RNFlashList: 8ec7f7454721145fe84566bb9e88bcf58981c9fe + RNFlashList: ade81b4e928ebd585dd492014d40fb8d0e848aab RNFS: 4ac0f0ea233904cb798630b3c077808c06931688 - RNGestureHandler: 071d7a9ad81e8b83fe7663b303d132406a7d8f39 + RNGestureHandler: c0d04458598fcb26052494ae23dda8f8f5162b13 RNImageCropPicker: 14fe1c29298fb4018f3186f455c475ab107da332 RNInAppBrowser: e36d6935517101ccba0e875bac8ad7b0cb655364 - rnmapbox-maps: 288f46c37cf72119140bc9c39410ef7bce0af120 - RNPermissions: dde71861a8f9217a1de97533eb8d6f75d8b9c4ac + rnmapbox-maps: 80e50a60882744e9636d70fa3d3e91976b39e842 + RNPermissions: 8abfb750efc0f5de4200a80a961d904ce430ae31 RNReanimated: f0dd6b881808e635ef0673f89642937d6c141314 RNScreens: 218801c16a2782546d30bd2026bb625c0302d70f RNSVG: c1e76b81c76cdcd34b4e1188852892dc280eb902 RNVectorIcons: fcc2f6cb32f5735b586e66d14103a74ce6ad61f8 TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863 Turf: 469ce2c3d22e5e8e4818d5a3b254699a5c89efa4 - Yoga: 79dd7410de6f8ad73a77c868d3d368843f0c93e0 + Yoga: 065f0b74dba4832d6e328238de46eb72c5de9556 ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb -PODFILE CHECKSUM: d21f29793352f630dfa867e8acf9afb1dad01219 +PODFILE CHECKSUM: caa9d3822fe921dd05cbad4b5429c9bce7abf299 COCOAPODS: 1.11.3 diff --git a/ios/RangerTreejerV2.xcodeproj/project.pbxproj b/ios/RangerTreejerV2.xcodeproj/project.pbxproj index b92c9b9a..e591c17b 100644 --- a/ios/RangerTreejerV2.xcodeproj/project.pbxproj +++ b/ios/RangerTreejerV2.xcodeproj/project.pbxproj @@ -7,19 +7,39 @@ objects = { /* Begin PBXBuildFile section */ + 0082A060F21044738856DF9D /* Montserrat-ExtraLight.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BCE273E800204FEBAE424286 /* Montserrat-ExtraLight.ttf */; }; 0A8368BB2E3787E6D721CD27 /* Pods_RangerTreejerV2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D754DE6D24D7D074F1CD6A68 /* Pods_RangerTreejerV2.framework */; }; 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 1B15794069034A799BC1C8AD /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 40EBD94655B44878BF051DEE /* README.md */; }; + 2AE0A8E9BA2440EEB3D44CB5 /* Montserrat-ThinItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E76C73C35D77489B85206C8F /* Montserrat-ThinItalic.ttf */; }; + 3043BA42AC894D9A890AAF99 /* Montserrat-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4558C5B39D374063AA8A0A72 /* Montserrat-Bold.ttf */; }; + 31E90C6A3129438F90AF50AB /* Montserrat-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 01BC3A9DCF6942F9A61D49A9 /* Montserrat-Black.ttf */; }; 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; }; 653F78BF26F442D29C395F04 /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0807D28359464B2DA3406B11 /* noop-file.swift */; }; + 6EC2FE27CC1F4B949BDE1CEA /* Montserrat-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6C087CB598454C199C0204F7 /* Montserrat-LightItalic.ttf */; }; + 74B3A13029704D4FB1246A71 /* Montserrat-BlackItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 683CA12F042D460787654D96 /* Montserrat-BlackItalic.ttf */; }; + 768B12D31D38462D988ED025 /* Montserrat-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7AED6C7CBE6048E896528494 /* Montserrat-SemiBold.ttf */; }; + 7C8E38B9F752479D9C3B515C /* Montserrat-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 429B867D6838441792C0AE77 /* Montserrat-BoldItalic.ttf */; }; + 8F9446A07F064B74B1C97B72 /* Montserrat-MediumItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FA31E819FD8E416284DBE4CE /* Montserrat-MediumItalic.ttf */; }; + 9D942B32141E4016A84BC493 /* Montserrat-ExtraLightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A12EF525B91540158D3D7489 /* Montserrat-ExtraLightItalic.ttf */; }; B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; }; + B8BC3F7262C64AE98E16E2FC /* Montserrat-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4080A1B9CC9A49A3969B0EC6 /* Montserrat-Medium.ttf */; }; + BA6B05BF43E84E86A79A0510 /* Montserrat-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = DD1EFA37E0344136AC8F8632 /* Montserrat-Light.ttf */; }; BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; }; CE869ED929BFC68500FA25C0 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = CE869ED829BFC68400FA25C0 /* GoogleService-Info.plist */; }; + D23256E2B9B6464091DEF13B /* Montserrat-Thin.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 82BD9E6357C4495B8F3CF150 /* Montserrat-Thin.ttf */; }; + DB2770F60631479E9053E667 /* Montserrat-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 397B1DD4D7F74DCDA40F5731 /* Montserrat-Italic.ttf */; }; + DE1330DC14A445A8A667B695 /* Montserrat-SemiBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 61210969F5D24940AD2F91E0 /* Montserrat-SemiBoldItalic.ttf */; }; + DF6F7E956307407FA04F582C /* Montserrat-ExtraBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 31FA405151D149B294482E3C /* Montserrat-ExtraBoldItalic.ttf */; }; + F6A864684BF2472D974C2D51 /* Montserrat-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E54846D5EEED498EB70DA8EA /* Montserrat-Regular.ttf */; }; + FBD5D71593584632B0368825 /* Montserrat-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 21442F84E30249E3B2817EA6 /* Montserrat-ExtraBold.ttf */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; + 01BC3A9DCF6942F9A61D49A9 /* Montserrat-Black.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-Black.ttf"; path = "../assets/fonts/Montserrat-Black.ttf"; sourceTree = ""; }; 0807D28359464B2DA3406B11 /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "RangerTreejerV2/noop-file.swift"; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* RangerTreejerV2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RangerTreejerV2.app; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = RangerTreejerV2/AppDelegate.h; sourceTree = ""; }; @@ -27,13 +47,31 @@ 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = RangerTreejerV2/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = RangerTreejerV2/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = RangerTreejerV2/main.m; sourceTree = ""; }; + 21442F84E30249E3B2817EA6 /* Montserrat-ExtraBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-ExtraBold.ttf"; path = "../assets/fonts/Montserrat-ExtraBold.ttf"; sourceTree = ""; }; + 31FA405151D149B294482E3C /* Montserrat-ExtraBoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-ExtraBoldItalic.ttf"; path = "../assets/fonts/Montserrat-ExtraBoldItalic.ttf"; sourceTree = ""; }; + 397B1DD4D7F74DCDA40F5731 /* Montserrat-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-Italic.ttf"; path = "../assets/fonts/Montserrat-Italic.ttf"; sourceTree = ""; }; + 4080A1B9CC9A49A3969B0EC6 /* Montserrat-Medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-Medium.ttf"; path = "../assets/fonts/Montserrat-Medium.ttf"; sourceTree = ""; }; + 40EBD94655B44878BF051DEE /* README.md */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = README.md; path = ../assets/fonts/README.md; sourceTree = ""; }; + 429B867D6838441792C0AE77 /* Montserrat-BoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-BoldItalic.ttf"; path = "../assets/fonts/Montserrat-BoldItalic.ttf"; sourceTree = ""; }; + 4558C5B39D374063AA8A0A72 /* Montserrat-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-Bold.ttf"; path = "../assets/fonts/Montserrat-Bold.ttf"; sourceTree = ""; }; + 61210969F5D24940AD2F91E0 /* Montserrat-SemiBoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-SemiBoldItalic.ttf"; path = "../assets/fonts/Montserrat-SemiBoldItalic.ttf"; sourceTree = ""; }; + 683CA12F042D460787654D96 /* Montserrat-BlackItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-BlackItalic.ttf"; path = "../assets/fonts/Montserrat-BlackItalic.ttf"; sourceTree = ""; }; + 6C087CB598454C199C0204F7 /* Montserrat-LightItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-LightItalic.ttf"; path = "../assets/fonts/Montserrat-LightItalic.ttf"; sourceTree = ""; }; 6C2E3173556A471DD304B334 /* Pods-RangerTreejerV2.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RangerTreejerV2.debug.xcconfig"; path = "Target Support Files/Pods-RangerTreejerV2/Pods-RangerTreejerV2.debug.xcconfig"; sourceTree = ""; }; 7A4D352CD337FB3A3BF06240 /* Pods-RangerTreejerV2.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RangerTreejerV2.release.xcconfig"; path = "Target Support Files/Pods-RangerTreejerV2/Pods-RangerTreejerV2.release.xcconfig"; sourceTree = ""; }; + 7AED6C7CBE6048E896528494 /* Montserrat-SemiBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-SemiBold.ttf"; path = "../assets/fonts/Montserrat-SemiBold.ttf"; sourceTree = ""; }; + 82BD9E6357C4495B8F3CF150 /* Montserrat-Thin.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-Thin.ttf"; path = "../assets/fonts/Montserrat-Thin.ttf"; sourceTree = ""; }; + A12EF525B91540158D3D7489 /* Montserrat-ExtraLightItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-ExtraLightItalic.ttf"; path = "../assets/fonts/Montserrat-ExtraLightItalic.ttf"; sourceTree = ""; }; AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = RangerTreejerV2/SplashScreen.storyboard; sourceTree = ""; }; BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; }; + BCE273E800204FEBAE424286 /* Montserrat-ExtraLight.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-ExtraLight.ttf"; path = "../assets/fonts/Montserrat-ExtraLight.ttf"; sourceTree = ""; }; CE869ED829BFC68400FA25C0 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; D754DE6D24D7D074F1CD6A68 /* Pods_RangerTreejerV2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RangerTreejerV2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DD1EFA37E0344136AC8F8632 /* Montserrat-Light.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-Light.ttf"; path = "../assets/fonts/Montserrat-Light.ttf"; sourceTree = ""; }; + E54846D5EEED498EB70DA8EA /* Montserrat-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-Regular.ttf"; path = "../assets/fonts/Montserrat-Regular.ttf"; sourceTree = ""; }; + E76C73C35D77489B85206C8F /* Montserrat-ThinItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-ThinItalic.ttf"; path = "../assets/fonts/Montserrat-ThinItalic.ttf"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; + FA31E819FD8E416284DBE4CE /* Montserrat-MediumItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-MediumItalic.ttf"; path = "../assets/fonts/Montserrat-MediumItalic.ttf"; sourceTree = ""; }; FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-RangerTreejerV2/ExpoModulesProvider.swift"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -74,6 +112,33 @@ name = Frameworks; sourceTree = ""; }; + 344E1280B06E4EAC989BE1E9 /* Resources */ = { + isa = PBXGroup; + children = ( + 01BC3A9DCF6942F9A61D49A9 /* Montserrat-Black.ttf */, + 683CA12F042D460787654D96 /* Montserrat-BlackItalic.ttf */, + 4558C5B39D374063AA8A0A72 /* Montserrat-Bold.ttf */, + 429B867D6838441792C0AE77 /* Montserrat-BoldItalic.ttf */, + 21442F84E30249E3B2817EA6 /* Montserrat-ExtraBold.ttf */, + 31FA405151D149B294482E3C /* Montserrat-ExtraBoldItalic.ttf */, + BCE273E800204FEBAE424286 /* Montserrat-ExtraLight.ttf */, + A12EF525B91540158D3D7489 /* Montserrat-ExtraLightItalic.ttf */, + 397B1DD4D7F74DCDA40F5731 /* Montserrat-Italic.ttf */, + DD1EFA37E0344136AC8F8632 /* Montserrat-Light.ttf */, + 6C087CB598454C199C0204F7 /* Montserrat-LightItalic.ttf */, + 4080A1B9CC9A49A3969B0EC6 /* Montserrat-Medium.ttf */, + FA31E819FD8E416284DBE4CE /* Montserrat-MediumItalic.ttf */, + E54846D5EEED498EB70DA8EA /* Montserrat-Regular.ttf */, + 7AED6C7CBE6048E896528494 /* Montserrat-SemiBold.ttf */, + 61210969F5D24940AD2F91E0 /* Montserrat-SemiBoldItalic.ttf */, + 82BD9E6357C4495B8F3CF150 /* Montserrat-Thin.ttf */, + E76C73C35D77489B85206C8F /* Montserrat-ThinItalic.ttf */, + 40EBD94655B44878BF051DEE /* README.md */, + ); + name = Resources; + path = ""; + sourceTree = ""; + }; 832341AE1AAA6A7D00B99B32 /* Libraries */ = { isa = PBXGroup; children = ( @@ -91,6 +156,7 @@ 2D16E6871FA4F8E400B85C8A /* Frameworks */, D65327D7A22EEC0BE12398D9 /* Pods */, D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */, + 344E1280B06E4EAC989BE1E9 /* Resources */, ); indentWidth = 2; sourceTree = ""; @@ -205,6 +271,25 @@ CE869ED929BFC68500FA25C0 /* GoogleService-Info.plist in Resources */, 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */, + 31E90C6A3129438F90AF50AB /* Montserrat-Black.ttf in Resources */, + 74B3A13029704D4FB1246A71 /* Montserrat-BlackItalic.ttf in Resources */, + 3043BA42AC894D9A890AAF99 /* Montserrat-Bold.ttf in Resources */, + 7C8E38B9F752479D9C3B515C /* Montserrat-BoldItalic.ttf in Resources */, + FBD5D71593584632B0368825 /* Montserrat-ExtraBold.ttf in Resources */, + DF6F7E956307407FA04F582C /* Montserrat-ExtraBoldItalic.ttf in Resources */, + 0082A060F21044738856DF9D /* Montserrat-ExtraLight.ttf in Resources */, + 9D942B32141E4016A84BC493 /* Montserrat-ExtraLightItalic.ttf in Resources */, + DB2770F60631479E9053E667 /* Montserrat-Italic.ttf in Resources */, + BA6B05BF43E84E86A79A0510 /* Montserrat-Light.ttf in Resources */, + 6EC2FE27CC1F4B949BDE1CEA /* Montserrat-LightItalic.ttf in Resources */, + B8BC3F7262C64AE98E16E2FC /* Montserrat-Medium.ttf in Resources */, + 8F9446A07F064B74B1C97B72 /* Montserrat-MediumItalic.ttf in Resources */, + F6A864684BF2472D974C2D51 /* Montserrat-Regular.ttf in Resources */, + 768B12D31D38462D988ED025 /* Montserrat-SemiBold.ttf in Resources */, + DE1330DC14A445A8A667B695 /* Montserrat-SemiBoldItalic.ttf in Resources */, + D23256E2B9B6464091DEF13B /* Montserrat-Thin.ttf in Resources */, + 2AE0A8E9BA2440EEB3D44CB5 /* Montserrat-ThinItalic.ttf in Resources */, + 1B15794069034A799BC1C8AD /* README.md in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ios/RangerTreejerV2/Info.plist b/ios/RangerTreejerV2/Info.plist index 2eafe826..75726c5a 100644 --- a/ios/RangerTreejerV2/Info.plist +++ b/ios/RangerTreejerV2/Info.plist @@ -1,97 +1,110 @@ - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Treejer Ranger - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0.0 - CFBundleSignature - ???? - CFBundleURLTypes - - - CFBundleURLSchemes - - com.treejer.ranger - - - - CFBundleVersion - 1 - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - NSExceptionDomains - - localhost - - NSExceptionAllowsInsecureHTTPLoads - - - - - UILaunchStoryboardName - SplashScreen - UIRequiredDeviceCapabilities - - armv7 - - UIRequiresFullScreen - - UIStatusBarStyle - UIStatusBarStyleDefault - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIUserInterfaceStyle - Light - UIViewControllerBasedStatusBarAppearance - - UIAppFonts - - Montserrat-Black.ttf - Montserrat-BlackItalic.ttf - Montserrat-Bold.ttf - Montserrat-BoldItalic.ttf - Montserrat-ExtraBold.ttf - Montserrat-ExtraBoldItalic.ttf - Montserrat-ExtraLight.ttf - Montserrat-ExtraLightItalic.ttf - Montserrat-Italic.ttf - Montserrat-Light.ttf - Montserrat-LightItalic.ttf - Montserrat-Medium.ttf - Montserrat-MediumItalic.ttf - Montserrat-Regular.ttf - Montserrat-SemiBold.ttf - Montserrat-SemiBoldItalic.ttf - Montserrat-Thin.ttf - Montserrat-ThinItalic.ttf - - + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Treejer Ranger + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleURLTypes + + + CFBundleURLSchemes + + com.treejer.ranger + + + + CFBundleVersion + 1 + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSExceptionDomains + + localhost + + NSExceptionAllowsInsecureHTTPLoads + + + + + UIAppFonts + + Montserrat-Black.ttf + Montserrat-BlackItalic.ttf + Montserrat-Bold.ttf + Montserrat-BoldItalic.ttf + Montserrat-ExtraBold.ttf + Montserrat-ExtraBoldItalic.ttf + Montserrat-ExtraLight.ttf + Montserrat-ExtraLightItalic.ttf + Montserrat-Italic.ttf + Montserrat-Light.ttf + Montserrat-LightItalic.ttf + Montserrat-Medium.ttf + Montserrat-MediumItalic.ttf + Montserrat-Regular.ttf + Montserrat-SemiBold.ttf + Montserrat-SemiBoldItalic.ttf + Montserrat-Thin.ttf + Montserrat-ThinItalic.ttf + + UILaunchStoryboardName + SplashScreen + UIRequiredDeviceCapabilities + + armv7 + + UIRequiresFullScreen + + UIStatusBarStyle + UIStatusBarStyleDefault + UISupportedInterfaceOrientations + + UIInterfaceOrientationLandscapeRight + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + + UIUserInterfaceStyle + Light + UIViewControllerBasedStatusBarAppearance + + NSCameraUsageDescription + Treejer Ranger + NSLocationAlwaysAndWhenInUseUsageDescription + Treejer Ranger + NSLocationAlwaysUsageDescription + Treejer Ranger + NSLocationWhenInUseUsageDescription + Treejer Ranger + NSPhotoLibraryUsageDescription + Treejer Ranger + NSPhotoLibraryAddUsageDescription + Treejer Ranger + diff --git a/ios/link-assets-manifest.json b/ios/link-assets-manifest.json new file mode 100644 index 00000000..272ba5af --- /dev/null +++ b/ios/link-assets-manifest.json @@ -0,0 +1,81 @@ +{ + "migIndex": 1, + "data": [ + { + "path": "assets/fonts/Montserrat-Black.ttf", + "sha1": "96d03479269d1ba7a3e38f4b64ff87ead267c998" + }, + { + "path": "assets/fonts/Montserrat-BlackItalic.ttf", + "sha1": "6e84efcb6bf01c47102d6e9f0dbe5958e74c9f20" + }, + { + "path": "assets/fonts/Montserrat-Bold.ttf", + "sha1": "3a54407a2b26ff4718708a4726b10cb070d16534" + }, + { + "path": "assets/fonts/Montserrat-BoldItalic.ttf", + "sha1": "6acf078ad5e1b77e6d68b8ff0cde39d81b9f057c" + }, + { + "path": "assets/fonts/Montserrat-ExtraBold.ttf", + "sha1": "4b5c27dcf59df165606efa247190c0bfa3c02ff0" + }, + { + "path": "assets/fonts/Montserrat-ExtraBoldItalic.ttf", + "sha1": "28423e53b60316c09f468055ca8c1d27c06ab45b" + }, + { + "path": "assets/fonts/Montserrat-ExtraLight.ttf", + "sha1": "fe3c849af6231af6c5c43d1045f2011bf683f317" + }, + { + "path": "assets/fonts/Montserrat-ExtraLightItalic.ttf", + "sha1": "40d3231d668844dab24536fa0c380bdc2311a992" + }, + { + "path": "assets/fonts/Montserrat-Italic.ttf", + "sha1": "798c701450f6bc08217f73c1ac569100cddc2947" + }, + { + "path": "assets/fonts/Montserrat-Light.ttf", + "sha1": "83879cec4c934d446eca63aa5cfedcebfd60d610" + }, + { + "path": "assets/fonts/Montserrat-LightItalic.ttf", + "sha1": "659632ad8a33d96e6a00319d7b0c020e9cc6cc5b" + }, + { + "path": "assets/fonts/Montserrat-Medium.ttf", + "sha1": "65a98832079c4d2c67f3acc4f4ce2de630fe6cb0" + }, + { + "path": "assets/fonts/Montserrat-MediumItalic.ttf", + "sha1": "ceadac9926836d5fc0ee14f94567f0ea25979fa2" + }, + { + "path": "assets/fonts/Montserrat-Regular.ttf", + "sha1": "d25b35242deb1c6ff888b8162ca2aacc356d3899" + }, + { + "path": "assets/fonts/Montserrat-SemiBold.ttf", + "sha1": "f829de4c176fb2ccf5e33360920f48de6794434e" + }, + { + "path": "assets/fonts/Montserrat-SemiBoldItalic.ttf", + "sha1": "3c2759411b32ad6779aba08e4c09ed1b3c0bc4d4" + }, + { + "path": "assets/fonts/Montserrat-Thin.ttf", + "sha1": "1d00ff2f5bc9331aa6e75b5a82dd698976615dc4" + }, + { + "path": "assets/fonts/Montserrat-ThinItalic.ttf", + "sha1": "ae19fb168e043e6408692c4bc50dd0aab76fdc22" + }, + { + "path": "assets/fonts/README.md", + "sha1": "e40451f9fc81b083aec8b0df5d69f2c15c932a7e" + } + ] +} diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000..8ce30f82 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,15 @@ +module.exports = { + preset: 'jest-expo', + // setupFilesAfterEnv: ['@rnmapbox/maps/setup-jest'], + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], + setupFiles: ['./jest.setup.js'], + transformIgnorePatterns: [ + 'node_modules/(?!(jest-)?@?react-native|@react-native-community|@react-navigation)', + // 'node_modules/(?!(...|@rnmapbox))', + // 'node_modules/?!(@react-navigation)', + // 'node_modules/?!(react-native-gesture-handler)', + ], + testPathIgnorePatterns: ['node_modules/(?!(react-native|react-native-button)/)', './web-build/'], + extensionsToTreatAsEsm: [], + transform: {}, +}; diff --git a/jest.setup.js b/jest.setup.js index 5ab4ba5e..bdae4306 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -1,7 +1,259 @@ +import {Text, View} from 'react-native'; + import mockRNDeviceInfo from 'react-native-device-info/jest/react-native-device-info-mock'; +import 'react-native-gesture-handler/jestSetup'; jest.mock('react-native-device-info', () => mockRNDeviceInfo); +jest.mock('react-native-reanimated', () => { + const Reanimated = require('react-native-reanimated/mock'); + + // The mock for `call` immediately calls the callback which is incorrect + // So we override it with a no-op + Reanimated.default.call = () => {}; + + return Reanimated; +}); + +global.toast = { + show: jest.fn(), +}; + +jest.mock('react-native/Libraries/Animated/NativeAnimatedHelper'); jest.mock('@react-native-async-storage/async-storage', () => require('@react-native-async-storage/async-storage/jest/async-storage-mock'), ); + +// jest.mock('@react-navigation/native', () => { +// const actualNav = jest.requireActual('@react-navigation/native'); +// return { +// ...actualNav, +// useNavigation: () => ({ +// navigate: jest.fn(), +// dispatch: jest.fn(), +// }), +// }; +// }); + +// jest.mock('@react-navigation/stack', () => { +// return { +// createAppContainer: jest.fn().mockReturnValue(function NavigationContainer(props) { +// return null; +// }), +// createBottomTabNavigator: jest.fn(), +// createDrawerNavigator: jest.fn(), +// createMaterialTopTabNavigator: jest.fn(), +// createStackNavigator: jest.fn(), +// StackActions: { +// push: jest.fn().mockImplementation(x => ({...x, type: 'Navigation/PUSH'})), +// replace: jest.fn().mockImplementation(x => ({...x, type: 'Navigation/REPLACE'})), +// }, +// NavigationActions: { +// navigate: jest.fn().mockImplementation(x => x), +// }, +// }; +// }); + +jest.mock('@react-navigation/native/lib/commonjs/useLinking.native', () => ({ + default: () => ({getInitialState: {then: jest.fn()}}), + __esModule: true, +})); + +// jest.mock('react-native-gesture-handler', () => {}); + +jest.mock('react-native-permissions', () => { + return require('react-native-permissions/mock'); +}); + +jest.mock('react-native-geolocation-service', () => { + return { + watchPosition: jest.fn(), + clearWatch: jest.fn(), + getCurrentPosition: jest.fn(), + }; +}); + +jest.mock('@react-native-firebase/analytics', () => {}); + +const Icon = testProp => ; + +jest.mock('react-native-vector-icons/FontAwesome5', () => { + return Icon; +}); +jest.mock('react-native-vector-icons/FontAwesome', () => { + return Icon; +}); +jest.mock('react-native-vector-icons/Feather', () => { + return Icon; +}); +jest.mock('react-native-vector-icons/MaterialIcons', () => { + return Icon; +}); +jest.mock('react-native-vector-icons/Octicons', () => { + return Icon; +}); +jest.mock('react-native-vector-icons/Ionicons', () => { + return Icon; +}); +jest.mock('react-native-vector-icons/AntDesign', () => { + return Icon; +}); +jest.mock('react-native-vector-icons/MaterialCommunityIcons', () => { + return Icon; +}); +jest.mock('react-native-vector-icons/Entypo', () => { + return Icon; +}); + +jest.mock('@magic-sdk/react-native-bare', () => { + return { + Magic: jest.fn(), + }; +}); + +jest.mock('@magic-ext/react-native-bare-oauth', () => { + return { + OAuthExtension: jest.fn(), + }; +}); + +jest.mock('web3', () => { + return function notJestFn() { + return { + eth: { + Contract: jest.fn(), + }, + utils: { + fromWei: str => str, + }, + }; + }; +}); + +// jest.mock('@magic-ext/react-native-oauth', () => { +// return { +// OAuthExtension: jest.fn(), +// }; +// }); + +jest.mock('@react-native-community/netinfo', () => { + return { + fetch: () => + new Promise(resolve => { + resolve({ + isConnected: true, + isInternetReachable: true, + }); + }), + useNetInfo: () => ({ + isConnected: true, + isInternetReachable: true, + }), + }; +}); +jest.mock('react-native-image-crop-picker', () => { + return { + Image: jest.fn(), + Options: jest.fn(), + openPicker: jest.fn(), + openLibrary: jest.fn(), + }; +}); + +jest.mock('@rnmapbox/maps', () => { + return { + setAccessToken: jest.fn(), + setWellKnownTileServer: jest.fn(), + MapView: TransComponent, + Camera: TransComponent, + UserLocation: TransComponent, + offlineManager: {createPack: ({name, styleURl, minZoom, maxZoom, bounds}, fn, fn2) => {}}, + }; +}); +jest.mock('react-native-snap-carousel', () => {}); +jest.mock('@react-native-clipboard/clipboard', () => {}); + +jest.mock('expo-barcode-scanner', () => { + return { + BarCodeScanner: jest.fn(), + }; +}); + +const TransComponent = testProp => ; + +jest.mock('react-i18next', () => ({ + // this mock makes sure any components using the translate hook can use it without a warning being shown + useTranslation: () => { + return { + t: str => str, + }; + }, + Trans: TransComponent, +})); + +jest.mock('i18next', () => ({ + t: str => str, + use: jest.fn(() => { + return { + init: jest.fn(), + }; + }), +})); + +jest.mock('redux-persist', () => { + const real = jest.requireActual('redux-persist'); + return { + ...real, + persistReducer: jest.fn().mockImplementation((config, reducers) => reducers), + }; +}); + +jest.mock('./src/utilities/hooks/useTreeUpdateInterval', () => { + return { + useTreeUpdateInterval: () => 200, + }; +}); + +jest.mock('./src/utilities/helpers/IPFS', () => { + return { + upload: (url, uri) => + new Promise((resolve, reject) => { + resolve({Hash: 'https://www.file.com'}); + }), + getHttpDownloadUrl: () => 'https://www.file.com', + uploadContent: () => + new Promise((resolve, reject) => { + resolve({Hash: 'HASH'}); + }), + }; +}); + +jest.mock('./src/utilities/helpers/submitTree', () => { + const actualImports = jest.requireActual('./src/utilities/helpers/submitTree'); + return { + ...actualImports, + photoToUpload: file => { + return 'storage://file'; + }, + }; +}); + +jest.mock('./src/screens/GreenBlock/screens/TreeDetails/TreePhotos', () => { + return { + TreePhotos: Icon, + }; +}); + +jest.mock('./src/utilities/helpers/photoToBase64', () => { + return { + photoToBase64: () => 'base 64 generated', + }; +}); + +jest.mock('./src/utilities/helpers/cropImage', () => { + return () => 1; +}); + +jest.mock('./src/components/WebImagePickerCropper/WebImagePickerCropper', () => { + return () => ; +}); diff --git a/package.json b/package.json index 6021edad..b8aba870 100644 --- a/package.json +++ b/package.json @@ -1,22 +1,30 @@ { "name": "rangertreejerv2", - "version": "1.0.0", + "version": "2.0.0-beta.2", "main": "index", "scripts": { + "native:start": "npx react-native start", "start": "expo start --dev-client", "android": "expo run:android", + "android:clean": "cd android && ./gradlew clean && cd ..", + "android:release": "yarn android:clean && cd android && ./gradlew assembleRelease && cd ..", + "android:restart": "rm -rf node_modules yarn.lock && yarn && yarn android:clean && yarn android", "ios": "expo run:ios", - "web": "expo start --web" + "web": "REACT_APP_WEB=true expo start --web", + "web:build": "rm -rf ./web-build && REACT_APP_WEB=true npx expo-cli build:web", + "code-gen": "yarn run graphql-typescript-definitions --schema-path 'build/schema.json' --schema-types-path 'src/data/schema' --custom-scalars '{\"Web3Result\": {\"name\": \"Record\"}, \"Any\": {\"name\": \"any\"}}'", + "test": "jest --coverage", + "ios-permissions": "npx react-native setup-ios-permissions && cd ios && pod install && cd .." }, "dependencies": { "@apollo/client": "3.7.10", - "@babel/plugin-proposal-export-namespace-from": "7.18.9", "@biconomy/mexa": "2.0.38", "@expo/config-plugins": "6.0.1", "@expo/webpack-config": "18.0.1", "@hookform/resolvers": "2.9.7", - "@magic-ext/react-native-oauth": "7.0.0", - "@magic-sdk/react-native": "14.0.0", + "@magic-ext/oauth": "13.1.0", + "@magic-ext/react-native-bare-oauth": "14.1.0", + "@magic-sdk/react-native-bare": "20.1.0", "@react-native-async-storage/async-storage": "1.17.11", "@react-native-clipboard/clipboard": "1.11.2", "@react-native-community/netinfo": "9.3.7", @@ -27,8 +35,8 @@ "@react-navigation/native": "6.0.8", "@react-navigation/native-stack": "6.5.0", "@react-navigation/stack": "6.1.1", - "@rnmapbox/maps": "10.0.0-beta.76", - "@shopify/flash-list": "1.4.1", + "@rnmapbox/maps": "10.0.0-beta.64", + "@shopify/flash-list": "1.4.3", "apollo-link-ethereum": "0.1.3", "apollo-link-ethereum-resolver-web3js": "0.1.3", "apollo-link-rest": "0.9.0", @@ -40,9 +48,11 @@ "expo-status-bar": "1.4.4", "graphql": "16.6.0", "humanize-duration": "3.27.1", - "i18next": "21.6.11", + "i18next": "22.4.13", + "jest-expo": "^48.0.2", + "libphonenumber-js": "^1.10.34", "lodash": "4.17.21", - "magic-sdk": "13.6.0", + "magic-sdk": "19.1.0", "mapbox-gl": "2.7.0", "moment": "2.29.4", "node-libs-browser": "2.2.1", @@ -52,15 +62,16 @@ "react-dom": "18.2.0", "react-easy-crop": "4.1.4", "react-hook-form": "7.35.0", - "react-i18next": "11.15.4", - "react-js-pull-to-refresh": "1.2.3", + "react-i18next": "12.2.0", + "react-js-pull-to-refresh": "1.3.0", "react-loading-skeleton": "3.1.0", "react-mapbox-gl": "5.1.1", - "react-native": "0.71.4", + "react-native": "0.71.8", "react-native-big-list": "1.6.0", "react-native-country-picker-modal": "2.0.0", "react-native-crypto": "2.2.0", "react-native-device-info": "10.4.0", + "react-native-drop-shadow": "0.0.6", "react-native-fs": "2.20.0", "react-native-geolocation-service": "5.3.1", "react-native-gesture-handler": "^2.9.0", @@ -69,7 +80,8 @@ "react-native-keyboard-aware-scroll-view": "0.9.5", "react-native-level-fs": "3.0.1", "react-native-linear-gradient": "2.6.2", - "react-native-permissions": "3.7.3", + "react-native-modal": "^13.0.1", + "react-native-permissions": "3.8.0", "react-native-phone-number-input": "2.1.0", "react-native-reanimated": "3.0.2", "react-native-safe-area-context": "4.5.0", @@ -97,6 +109,7 @@ "web3-core": "1.8.2", "web3-eth-contract": "1.8.2", "webpack": "5.76.1", + "webpack-dev-server": "^4.13.2", "workbox-background-sync": "6.5.3", "workbox-broadcast-update": "6.5.3", "workbox-cacheable-response": "6.5.3", @@ -114,11 +127,16 @@ }, "devDependencies": { "@babel/core": "7.21.0", + "@babel/plugin-proposal-class-properties": "7.18.6", + "@babel/plugin-proposal-export-namespace-from": "7.18.9", + "@babel/plugin-proposal-private-methods": "7.18.6", "@babel/preset-env": "7.20.2", "@babel/preset-typescript": "7.21.0", "@babel/runtime": "7.20.0", "@react-native-community/eslint-config": "3.2.0", "@shopify/eslint-plugin": "40.5.0", + "@testing-library/react-hooks": "^8.0.1", + "@testing-library/react-native": "^12.0.1", "@tsconfig/react-native": "2.0.3", "@types/google-libphonenumber": "7.4.23", "@types/jest": "29.2.1", @@ -137,12 +155,12 @@ "babel-plugin-inline-dotenv": "1.6.0", "babel-plugin-module-resolver": "4.1.0", "babel-preset-expo": "9.3.0", - "eslint": "8.19.0", - "eslint-plugin-unused-imports": "1.1.5", + "eslint": "8.38.0", + "eslint-plugin-unused-imports": "2.0.0", "graphql-typescript-definitions": "0.24.2", "invariant": "2.2.4", "jest": "29.2.1", - "metro-react-native-babel-preset": "0.73.8", + "metro-react-native-babel-preset": "^0.76.0", "prettier": "2.8.4", "react-test-renderer": "18.2.0", "ts-invariant": "0.9.4", @@ -156,26 +174,6 @@ "@types/react-dom": "18", "graphql": "16" }, - "jest": { - "preset": "react-native", - "moduleFileExtensions": [ - "ts", - "tsx", - "js", - "jsx", - "json", - "node" - ], - "setupFiles": [ - "./jest.setup.js" - ], - "testPathIgnorePatterns": [ - "node_modules/(?!(react-native|react-native-button)/)", - "./web-build/" - ], - "extensionsToTreatAsEsm": [], - "transform": {} - }, "reactNativePermissionsIOS": [ "Camera", "LocationAccuracy", diff --git a/react-native.config.js b/react-native.config.js index 096ef3ac..a98caa94 100644 --- a/react-native.config.js +++ b/react-native.config.js @@ -5,6 +5,18 @@ module.exports = { }, assets: ['./assets/fonts/'], dependencies: { + 'react-js-pull-to-refresh': { + platforms: { + android: null, + ios: null, + }, + }, + '@magic-ext/oauth': { + platforms: { + android: null, + ios: null, + }, + }, 'magic-sdk': { platforms: { android: null, diff --git a/src/App.tsx b/src/App.tsx index 209d3f81..8f56fa0c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,18 +1,14 @@ -// @ts-ignore import React from 'react'; import {I18nextProvider} from 'react-i18next'; -import {useInitialDeepLinking} from 'utilities/hooks/useDeepLinking'; +import {GestureHandlerRootView} from 'react-native-gesture-handler'; import {Provider} from 'react-redux'; -import {persistor, store} from 'ranger-redux/store'; import {PersistGate} from 'redux-persist/integration/react'; -import {InitNavigation} from 'navigation/InitNavigation'; import {SafeAreaProvider} from 'react-native-safe-area-context'; -import MapboxGL from '@rnmapbox/maps'; -import {mapboxPrivateToken} from 'services/config'; -import {i18next} from './localization'; -import {GestureHandlerRootView} from 'react-native-gesture-handler'; -MapboxGL.setAccessToken(mapboxPrivateToken); +import {useInitialDeepLinking} from 'utilities/hooks/useDeepLinking'; +import {persistor, store} from 'ranger-redux/store'; +import {InitNavigation} from 'navigation/InitNavigation'; +import {i18next} from './localization'; export default function App() { useInitialDeepLinking(); @@ -21,7 +17,6 @@ export default function App() { - {/* @ts-ignore */} diff --git a/src/App.web.tsx b/src/App.web.tsx index 69d344c1..1be80c8c 100644 --- a/src/App.web.tsx +++ b/src/App.web.tsx @@ -1,14 +1,14 @@ -// @ts-ignore -import React, {useEffect} from 'react'; -import {i18next} from './src/localization'; -import {I18nextProvider} from 'react-i18next'; -import {useInitialDeepLinking} from './src/utilities/hooks/useDeepLinking'; +import React from 'react'; import {Provider} from 'react-redux'; -import {persistor, store} from './src/redux/store'; +import {I18nextProvider} from 'react-i18next'; import {PersistGate} from 'redux-persist/integration/react'; -import {InitNavigation} from './src/navigation/InitNavigation'; import {SafeAreaProvider} from 'react-native-safe-area-context'; +import {i18next} from './localization'; +import {persistor, store} from 'ranger-redux/store'; +import {InitNavigation} from 'navigation/InitNavigation'; +import {useInitialDeepLinking} from 'utilities/hooks/useDeepLinking'; + export default function App() { useInitialDeepLinking(); diff --git a/src/components/Activity/ActivityItem.tsx b/src/components/Activity/ActivityItem.tsx index 0a78cfc4..57db6ddc 100644 --- a/src/components/Activity/ActivityItem.tsx +++ b/src/components/Activity/ActivityItem.tsx @@ -1,16 +1,16 @@ import React, {useCallback, useEffect, useMemo, useState} from 'react'; -import {Image, Linking, StyleSheet, Text, TouchableOpacity, View} from 'react-native'; +import {Image, Linking, Modal, StyleSheet, Text, TouchableOpacity, View} from 'react-native'; import {TFunction, useTranslation} from 'react-i18next'; import FIcon from 'react-native-vector-icons/Feather'; import IIcon from 'react-native-vector-icons/Ionicons'; import Clipboard from '@react-native-clipboard/clipboard'; -import {useToast} from 'react-native-toast-notifications'; import {InAppBrowser} from 'react-native-inappbrowser-reborn'; import moment from 'moment'; import {Hr} from 'components/Common/Hr'; import Spacer from 'components/Spacer'; import {colors} from 'constants/values'; +import {RenderIf} from 'components/Common/RenderIf'; import globalStyles from 'constants/styles'; import {AlertMode} from 'utilities/helpers/alert'; import {wrapUpString} from 'utilities/helpers/shortenedString'; @@ -50,17 +50,20 @@ export enum ContractTypes { export type TActivityItemProps = { activity: GetUserActivitiesQueryPartialData.AddressHistories; isLast: boolean; + inModal?: boolean; + onClose?: () => void; }; export function ActivityItem(props: TActivityItemProps) { - const {activity, isLast} = props; + const {activity, isLast, inModal, onClose} = props; - const [isOpen, setIsOpen] = useState(false); + const [isOpen, setIsOpen] = useState(inModal || false); + const [openModal, setOpenModal] = useState(false); const {t} = useTranslation(); useEffect(() => { - setIsOpen(false); + setIsOpen(inModal || false); }, [props]); const AIcon = ActivityStatus.BalanceWithdrew === activity.event ? IIcon : FIcon; @@ -135,59 +138,72 @@ export function ActivityItem(props: TActivityItemProps) { }, [activity]); const handleOpenDetails = useCallback(() => { - setIsOpen(prevIsOpen => !prevIsOpen); + if (isWeb()) { + setOpenModal(prevOpenModal => !prevOpenModal); + } else { + setIsOpen(prevIsOpen => !prevIsOpen); + } }, []); return ( - - - - - {isRelatedToTree ? ( - - - - ) : ( - - - - )} - - - - {title} - - {date} + <> + + setOpenModal(false)}> + + setOpenModal(false)} /> + + + + + + + + {isRelatedToTree ? ( + + + + ) : ( + + + + )} + + + + {title} + + {date} + + + {t(`activities.${activity.event}`)} + + + - - {t(`activities.${activity.event}`)} - - - + {isOpen && ( + <> + +
+ + + + )}
- {isOpen && ( - <> - -
- - - - )} + + {!isOpen && !isLast &&
}
- - {!isOpen && !isLast &&
} -
+ ); } @@ -199,15 +215,13 @@ export type TMoreDetailProps = { export function MoreDetail(props: TMoreDetailProps) { const {t, txHash} = props; - const toast = useToast(); - const {explorerUrl} = useConfig(); const handleCopy = useCallback(() => { if (txHash) { Clipboard.setString(txHash); } - toast.show('myProfile.copied', {type: AlertMode.Success, translate: true}); + toast?.show('myProfile.copied', {type: AlertMode.Success, translate: true}); }, [toast, txHash]); const handleOpenInBrowser = useCallback(async () => { @@ -254,29 +268,30 @@ export function MoreDetail(props: TMoreDetailProps) { {t('activities.receipt')} - - {wrapUpString(`${explorerUrl}/tx/${txHash}`, 20, 3)} - + + + {wrapUpString(`${explorerUrl}/tx/${txHash}`, 20, 3)} + +
- {/**/} - {/* console.log('show more details pressed')}>*/} - {/* {t('activities.showMore')}*/} - {/**/}
); } const styles = StyleSheet.create({ - // open: { - // marginTop: -9, - // marginBottom: 24, - // }, container: { width: 358, padding: 8, backgroundColor: colors.khaki, borderRadius: 10, }, + modalContainer: { + position: 'relative', + flex: 1, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: colors.modalBg, + }, tree: { width: 25, height: 25, diff --git a/src/components/Activity/ActivityList.tsx b/src/components/Activity/ActivityList.tsx index c9799af7..2f924ada 100644 --- a/src/components/Activity/ActivityList.tsx +++ b/src/components/Activity/ActivityList.tsx @@ -1,5 +1,5 @@ -import React, {useCallback} from 'react'; -import {ActivityIndicator, StyleSheet, Text, View} from 'react-native'; +import React, {useCallback, forwardRef} from 'react'; +import {StyleSheet, Text, View} from 'react-native'; import Icon from 'react-native-vector-icons/AntDesign'; import {useTranslation} from 'react-i18next'; import {FlashList, ListRenderItemInfo} from '@shopify/flash-list'; @@ -9,21 +9,23 @@ import {colors} from 'constants/values'; import {GetUserActivitiesQueryPartialData} from 'screens/Profile/screens/Activity/graphQl/getUserActivites.graphql'; import Spacer from 'components/Spacer'; import {ActivityItem, ActivityStatus} from 'components/Activity/ActivityItem'; -import {isWeb} from 'utilities/helpers/web'; -import RefreshControl from 'components/RefreshControl/RefreshControl'; +import {OptimizedList} from 'components/OptimizedList/OptimizedList'; export type TActivityListProps = { - ref: React.RefObject>; wallet: string; filters: ActivityStatus[]; activities: GetUserActivitiesQueryPartialData.AddressHistories[] | null; refreshing: boolean; - onRefresh: () => void; + loading: boolean; + onRefresh: () => Promise; onLoadMore: () => void; }; -export function ActivityList(props: TActivityListProps) { - const {activities, refreshing, ref, onRefresh, onLoadMore} = props; +export const ActivityList = forwardRef< + FlashList, + TActivityListProps +>((props, ref) => { + const {activities, refreshing, loading, onRefresh, onLoadMore} = props; const {t} = useTranslation(); @@ -52,24 +54,23 @@ export function ActivityList(props: TActivityListProps) { }, [activities]); return ( - - + + ref={ref} - refreshing - onRefresh={onRefresh} + refetching={refreshing} + loading={loading} + onRefetch={onRefresh} data={activities} renderItem={renderItem} - estimatedItemSize={100} + estimatedItemSize={78} ListEmptyComponent={emptyList} - showsVerticalScrollIndicator={false} - refreshControl={isWeb() ? undefined : } - onEndReachedThreshold={0.1} onEndReached={onLoadMore} keyExtractor={item => (item.id as string).toString()} + separate={false} /> ); -} +}); const styles = StyleSheet.create({ container: { diff --git a/src/components/Button/Button.tsx b/src/components/Button/Button.tsx index 84abe383..096e2657 100644 --- a/src/components/Button/Button.tsx +++ b/src/components/Button/Button.tsx @@ -14,6 +14,7 @@ import { } from 'react-native'; export type TButtonProps = { + testID?: string; textAlign?: string; size?: 'sm' | 'lg'; iconPlace?: 'left' | 'right'; @@ -47,11 +48,13 @@ function Button({ textStyle = null, loading = false, onPress, + testID, ...props }: TButtonProps) { const Component = (disabled ? View : TouchableOpacity) as React.ComponentType; return ( {React.createElement(icon, { color: styles[`${variant}Text`].color ?? 'white', + testID: 'icon-left', })} )} {!round && Boolean(caption) ? ( {React.createElement(icon, { color: styles[`${variant}Text`].color ?? 'white', + testID: 'icon-right', })}
)} {loading && ( { + it('Button component should be defined', () => { + expect(Button).toBeDefined(); + expect(typeof Button).toBe('function'); + }); + + describe('elements/components should be defined', () => { + it('Button without icon', () => { + let getElementByTestId, queryElementByTestId; + const caption = 'Hello world'; + const element = render(