diff --git a/.github/workflows/CODEOWNERS b/.github/workflows/CODEOWNERS new file mode 100644 index 000000000..1c87da9b3 --- /dev/null +++ b/.github/workflows/CODEOWNERS @@ -0,0 +1,9 @@ +# Code owners file. +# This file controls who is tagged for review for any given pull request. +# +# For syntax help see: +# https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners#codeowners-syntax + +* @Autofleet/code-reviewers +/examples/client/Locomotion/package.json @Autofleet/code-reviewers +/examples/client/Locomotion/ @Autofleet/dev-team diff --git a/.github/workflows/app_test.yml b/.github/workflows/app_test.yml index 7216ee0e3..658391771 100644 --- a/.github/workflows/app_test.yml +++ b/.github/workflows/app_test.yml @@ -28,4 +28,4 @@ jobs: - run: npm run linter - - run: npm run ts \ No newline at end of file + - run: npm run ts || echo "Warning! npm run ts failed." \ No newline at end of file diff --git a/.gitignore b/.gitignore index 45891773e..138eb6fed 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ examples/client/Locomotion/android/app/*.json examples/client/Locomotion/fastlane/report.xml examples/client/Locomotion/fastlane/README.md examples/client/Locomotion/bucket +.vscode/ \ No newline at end of file diff --git a/examples/client/Locomotion/.env.sample b/examples/client/Locomotion/.env.sample index 74fd6088a..fd43c47d0 100644 --- a/examples/client/Locomotion/.env.sample +++ b/examples/client/Locomotion/.env.sample @@ -10,3 +10,4 @@ DEFAULT_LONGITUDE= STRIPE_PUBLISHER_KEY= DONT_USE_STATIONS= OPERATION_ID= +LANGUAGE_FILES_STORAGE= diff --git a/examples/client/Locomotion/.gitignore b/examples/client/Locomotion/.gitignore index b1fbccbc5..faeafdf41 100644 --- a/examples/client/Locomotion/.gitignore +++ b/examples/client/Locomotion/.gitignore @@ -127,4 +127,7 @@ typings/ watchmanScript.sh -*.tsbuildinfo \ No newline at end of file +*.tsbuildinfo + +# vscode +**/.vscode \ No newline at end of file diff --git a/examples/client/Locomotion/.ruby-version b/examples/client/Locomotion/.ruby-version index a4dd9dba4..be94e6f53 100644 --- a/examples/client/Locomotion/.ruby-version +++ b/examples/client/Locomotion/.ruby-version @@ -1 +1 @@ -2.7.4 +3.2.2 diff --git a/examples/client/Locomotion/Gemfile b/examples/client/Locomotion/Gemfile index 2c3edcf4b..4e8fb5faa 100644 --- a/examples/client/Locomotion/Gemfile +++ b/examples/client/Locomotion/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version -ruby '2.7.4' +ruby File.read(File.join(__dir__, ".ruby-version")).strip gem 'cocoapods', '~> 1.11', '>= 1.11.2' diff --git a/examples/client/Locomotion/Gemfile.lock b/examples/client/Locomotion/Gemfile.lock index 562835193..6bee76a46 100644 --- a/examples/client/Locomotion/Gemfile.lock +++ b/examples/client/Locomotion/Gemfile.lock @@ -1,30 +1,29 @@ GEM remote: https://rubygems.org/ specs: - CFPropertyList (3.0.5) + CFPropertyList (3.0.6) rexml - activesupport (6.1.5) + activesupport (7.0.7) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) tzinfo (~> 2.0) - zeitwerk (~> 2.3) - addressable (2.8.0) - public_suffix (>= 2.0.2, < 5.0) + addressable (2.8.5) + public_suffix (>= 2.0.2, < 6.0) algoliasearch (1.27.5) httpclient (~> 2.8, >= 2.8.3) json (>= 1.5.1) atomos (0.1.3) claide (1.1.0) - cocoapods (1.11.3) + cocoapods (1.12.1) addressable (~> 2.8) claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.11.3) + cocoapods-core (= 1.12.1) cocoapods-deintegrate (>= 1.0.3, < 2.0) - cocoapods-downloader (>= 1.4.0, < 2.0) + cocoapods-downloader (>= 1.6.0, < 2.0) cocoapods-plugins (>= 1.0.0, < 2.0) cocoapods-search (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.4.0, < 2.0) + cocoapods-trunk (>= 1.6.0, < 2.0) cocoapods-try (>= 1.1.0, < 2.0) colored2 (~> 3.1) escape (~> 0.0.4) @@ -32,10 +31,10 @@ GEM gh_inspector (~> 1.0) molinillo (~> 0.8.0) nap (~> 1.0) - ruby-macho (>= 1.0, < 3.0) + ruby-macho (>= 2.3.0, < 3.0) xcodeproj (>= 1.21.0, < 2.0) - cocoapods-core (1.11.3) - activesupport (>= 5.0, < 7) + cocoapods-core (1.12.1) + activesupport (>= 5.0, < 8) addressable (~> 2.8) algoliasearch (~> 1.0) concurrent-ruby (~> 1.1) @@ -54,38 +53,37 @@ GEM netrc (~> 0.11) cocoapods-try (1.2.0) colored2 (3.1.2) - concurrent-ruby (1.1.10) + concurrent-ruby (1.2.2) escape (0.0.4) - ethon (0.15.0) + ethon (0.16.0) ffi (>= 1.15.0) ffi (1.15.5) fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) httpclient (2.8.3) - i18n (1.10.0) + i18n (1.14.1) concurrent-ruby (~> 1.0) - json (2.6.1) - minitest (5.15.0) + json (2.6.3) + minitest (5.19.0) molinillo (0.8.0) nanaimo (0.3.0) nap (1.1.0) netrc (0.11.0) public_suffix (4.0.7) - rexml (3.2.5) + rexml (3.2.6) ruby-macho (2.5.1) typhoeus (1.4.0) ethon (>= 0.9.0) - tzinfo (2.0.4) + tzinfo (2.0.6) concurrent-ruby (~> 1.0) - xcodeproj (1.21.0) + xcodeproj (1.22.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) nanaimo (~> 0.3.0) rexml (~> 3.2.4) - zeitwerk (2.5.4) PLATFORMS ruby @@ -94,7 +92,7 @@ DEPENDENCIES cocoapods (~> 1.11, >= 1.11.2) RUBY VERSION - ruby 2.7.4p191 + ruby 3.2.2p53 BUNDLED WITH 2.2.27 diff --git a/examples/client/Locomotion/android/app/build.gradle b/examples/client/Locomotion/android/app/build.gradle index 6e0a2b688..7ca77516d 100644 --- a/examples/client/Locomotion/android/app/build.gradle +++ b/examples/client/Locomotion/android/app/build.gradle @@ -274,12 +274,19 @@ android { dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) - + implementation platform('com.google.firebase:firebase-bom:30.2.0') // When using the BoM, you don't specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-crashlytics' - implementation 'com.google.firebase:firebase-analytics' + // implementation 'com.google.firebase:firebase-analytics' + implementation ("com.google.firebase:firebase-analytics") { + exclude module: "play-services-ads-identifier" + exclude module: "play-services-ads" + exclude module: "play-services-ads-lite" + exclude module: "play-services-measurement" + exclude module: "play-services-measurement-sdk" + } //noinspection GradleDynamicVersion implementation "com.facebook.react:react-native:+" // From node_modules @@ -301,7 +308,6 @@ dependencies { implementation project(':react-native-linear-gradient') implementation 'com.google.android.material:material:1.6.0' - implementation project(':react-native-mixpanel') if (enableHermes) { def hermesPath = "../../node_modules/hermes-engine/android/"; debugImplementation files(hermesPath + "hermes-debug.aar") diff --git a/examples/client/Locomotion/android/app/src/main/AndroidManifest.xml b/examples/client/Locomotion/android/app/src/main/AndroidManifest.xml index dc410e4b6..2e1fa954b 100644 --- a/examples/client/Locomotion/android/app/src/main/AndroidManifest.xml +++ b/examples/client/Locomotion/android/app/src/main/AndroidManifest.xml @@ -1,10 +1,11 @@ - - + + + + diff --git a/examples/client/Locomotion/android/app/src/main/java/com/locomotion/MainApplication.java b/examples/client/Locomotion/android/app/src/main/java/com/locomotion/MainApplication.java index 90deb5e33..3fd180cfd 100644 --- a/examples/client/Locomotion/android/app/src/main/java/com/locomotion/MainApplication.java +++ b/examples/client/Locomotion/android/app/src/main/java/com/locomotion/MainApplication.java @@ -4,6 +4,7 @@ import android.content.Context; import com.facebook.react.PackageList; import com.facebook.react.ReactApplication; +import com.reactnativecommunity.netinfo.NetInfoPackage; import com.github.wumke.RNExitApp.RNExitAppPackage; import com.reactnativerestart.RestartPackage; import com.ocetnik.timer.BackgroundTimerPackage; @@ -17,7 +18,6 @@ import java.lang.reflect.InvocationTargetException; import java.util.List; import com.BV.LinearGradient.LinearGradientPackage; -import com.kevinejohn.RNMixpanel.*; import com.facebook.react.bridge.JSIModulePackage; import com.swmansion.reanimated.ReanimatedJSIModulePackage; import com.facebook.react.modules.i18nmanager.I18nUtil; diff --git a/examples/client/Locomotion/android/build.gradle b/examples/client/Locomotion/android/build.gradle index 51ae6fdb8..45d500dfe 100644 --- a/examples/client/Locomotion/android/build.gradle +++ b/examples/client/Locomotion/android/build.gradle @@ -6,9 +6,10 @@ buildscript { ext { buildToolsVersion = "31.0.0" minSdkVersion = 21 - compileSdkVersion = 31 - targetSdkVersion = 31 + compileSdkVersion = 33 + targetSdkVersion = 33 supportLibVersion = "31.0.0" + kotlinVersion = "1.6.0" if (System.properties['os.arch'] == "aarch64") { // For M1 Users we need to use the NDK 24 which added support for aarch64 diff --git a/examples/client/Locomotion/android/settings.gradle b/examples/client/Locomotion/android/settings.gradle index 5484cfa1c..fbe22f56f 100644 --- a/examples/client/Locomotion/android/settings.gradle +++ b/examples/client/Locomotion/android/settings.gradle @@ -1,4 +1,6 @@ rootProject.name = 'Locomotion' +include ':@react-native-community_netinfo' +project(':@react-native-community_netinfo').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/netinfo/android') include ':react-native-exit-app' project(':react-native-exit-app').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-exit-app/android') include ':react-native-restart' @@ -18,6 +20,3 @@ if (settings.hasProperty("newArchEnabled") && settings.newArchEnabled == "true") include ':react-native-linear-gradient' project(':react-native-linear-gradient').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-linear-gradient/android') - -include ':react-native-mixpanel', ':app' -project(':react-native-mixpanel').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-mixpanel/android') \ No newline at end of file diff --git a/examples/client/Locomotion/ios/Locomotion.xcodeproj/project.pbxproj b/examples/client/Locomotion/ios/Locomotion.xcodeproj/project.pbxproj index 4dc2e23e8..8f98bebeb 100644 --- a/examples/client/Locomotion/ios/Locomotion.xcodeproj/project.pbxproj +++ b/examples/client/Locomotion/ios/Locomotion.xcodeproj/project.pbxproj @@ -16,16 +16,30 @@ 16BBDB3C31154102967F3375 /* Inter-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2CBB77652F6242089BA7AD06 /* Inter-Medium.ttf */; }; 16D1A3AED5F34B3BBEB91D5B /* Inter-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 33155F0564184E3F830B1871 /* Inter-Light.ttf */; }; 458E87999E824EE4850D24B2 /* Inter-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 936414E5AF3B438FA30BDB03 /* Inter-Bold.ttf */; }; + 4AA1454B64E06F656E3394AF /* libPods-Locomotion-LocomotionTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E55217FCF08152EEAFE98402 /* libPods-Locomotion-LocomotionTests.a */; }; 5D77025723914A4C9E60C5D9 /* Inter-Thin.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3C0F833735144539A1D00D4A /* Inter-Thin.ttf */; }; - 61F154951A1C04991C8364B7 /* libPods-Locomotion-LocomotionTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FCCFD2CEB1BB53A08ED2B6FB /* libPods-Locomotion-LocomotionTests.a */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; 894D1331FCCD4214AFD3D980 /* Inter-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8087226EC6CC4AF6B51586D6 /* Inter-SemiBold.ttf */; }; 9B0EE2FECDB545A6822CBDC0 /* Inter-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 51F3E3192AF84FCDAFF55B1A /* Inter-Black.ttf */; }; - B1CA200D12DF97E4831657DD /* libPods-Locomotion.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 24211AE3E57C256B5D3886D1 /* libPods-Locomotion.a */; }; + A121119BA9DA2858DF7518AC /* libPods-Locomotion.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E28DA5B02A673BCB379C0328 /* libPods-Locomotion.a */; }; EC8EB4A02811511C005D40A9 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = EC8EB49F2811511C005D40A9 /* GoogleService-Info.plist */; }; F11C81E70E42438F9DCCC7ED /* Inter-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ABC57D5443BA4AB7AE7EA145 /* Inter-ExtraBold.ttf */; }; /* End PBXBuildFile section */ +/* Begin PBXBuildRule section */ + 8DA78A922A956907009C16B8 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + fileType = pattern.proxy; + inputFiles = ( + ); + isEditable = 1; + outputFiles = ( + ); + script = "# Type a script or drag a script file from your workspace to insert its path.\n"; + }; +/* End PBXBuildRule section */ + /* Begin PBXContainerItemProxy section */ 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -47,17 +61,17 @@ 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Locomotion/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Locomotion/main.m; sourceTree = ""; }; 15293EEA882640B5AC14874F /* Inter-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-Regular.ttf"; path = "../src/assets/fonts/Inter-Regular.ttf"; sourceTree = ""; }; - 16BF541F6AE878BD41319442 /* Pods-Locomotion-LocomotionTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Locomotion-LocomotionTests.release.xcconfig"; path = "Target Support Files/Pods-Locomotion-LocomotionTests/Pods-Locomotion-LocomotionTests.release.xcconfig"; sourceTree = ""; }; - 24211AE3E57C256B5D3886D1 /* libPods-Locomotion.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Locomotion.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 2CBB77652F6242089BA7AD06 /* Inter-Medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-Medium.ttf"; path = "../src/assets/fonts/Inter-Medium.ttf"; sourceTree = ""; }; + 2D3CA5025A228913F55711B7 /* Pods-Locomotion.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Locomotion.debug.xcconfig"; path = "Target Support Files/Pods-Locomotion/Pods-Locomotion.debug.xcconfig"; sourceTree = ""; }; 33155F0564184E3F830B1871 /* Inter-Light.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-Light.ttf"; path = "../src/assets/fonts/Inter-Light.ttf"; sourceTree = ""; }; 3B665E249BD04D6E96D7A11D /* Inter-ExtraLight.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-ExtraLight.ttf"; path = "../src/assets/fonts/Inter-ExtraLight.ttf"; sourceTree = ""; }; 3C0F833735144539A1D00D4A /* Inter-Thin.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-Thin.ttf"; path = "../src/assets/fonts/Inter-Thin.ttf"; sourceTree = ""; }; 51F3E3192AF84FCDAFF55B1A /* Inter-Black.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-Black.ttf"; path = "../src/assets/fonts/Inter-Black.ttf"; sourceTree = ""; }; - 55610BD25FC1E81B65311466 /* Pods-Locomotion.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Locomotion.release.xcconfig"; path = "Target Support Files/Pods-Locomotion/Pods-Locomotion.release.xcconfig"; sourceTree = ""; }; - 696204FB26E0B163288A662A /* Pods-Locomotion.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Locomotion.debug.xcconfig"; path = "Target Support Files/Pods-Locomotion/Pods-Locomotion.debug.xcconfig"; sourceTree = ""; }; + 7D403366CAC018BE868607DE /* Pods-Locomotion-LocomotionTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Locomotion-LocomotionTests.release.xcconfig"; path = "Target Support Files/Pods-Locomotion-LocomotionTests/Pods-Locomotion-LocomotionTests.release.xcconfig"; sourceTree = ""; }; + 7E9F570E955100233FAF553E /* Pods-Locomotion.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Locomotion.release.xcconfig"; path = "Target Support Files/Pods-Locomotion/Pods-Locomotion.release.xcconfig"; sourceTree = ""; }; 8087226EC6CC4AF6B51586D6 /* Inter-SemiBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-SemiBold.ttf"; path = "../src/assets/fonts/Inter-SemiBold.ttf"; sourceTree = ""; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = Locomotion/LaunchScreen.storyboard; sourceTree = ""; }; + 87C313D9C5B40E7945FAE36B /* Pods-Locomotion-LocomotionTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Locomotion-LocomotionTests.debug.xcconfig"; path = "Target Support Files/Pods-Locomotion-LocomotionTests/Pods-Locomotion-LocomotionTests.debug.xcconfig"; sourceTree = ""; }; 936414E5AF3B438FA30BDB03 /* Inter-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-Bold.ttf"; path = "../src/assets/fonts/Inter-Bold.ttf"; sourceTree = ""; }; 9E257F1C285767AC000F4EB2 /* Inter-Black.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Inter-Black.ttf"; path = "../../../../locomotion-sdk/src/assets/fonts/Inter-Black.ttf"; sourceTree = ""; }; 9E257F1D285767AC000F4EB2 /* Inter-Light.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Inter-Light.ttf"; path = "../../../../locomotion-sdk/src/assets/fonts/Inter-Light.ttf"; sourceTree = ""; }; @@ -68,14 +82,14 @@ 9E257F22285767AD000F4EB2 /* Inter-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Inter-Regular.ttf"; path = "../../../../locomotion-sdk/src/assets/fonts/Inter-Regular.ttf"; sourceTree = ""; }; 9E257F23285767AD000F4EB2 /* Inter-Thin.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Inter-Thin.ttf"; path = "../../../../locomotion-sdk/src/assets/fonts/Inter-Thin.ttf"; sourceTree = ""; }; 9E257F24285767AD000F4EB2 /* Inter-ExtraBold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Inter-ExtraBold.ttf"; path = "../../../../locomotion-sdk/src/assets/fonts/Inter-ExtraBold.ttf"; sourceTree = ""; }; - A12E7D08EC6BD0E74F98FE02 /* Pods-Locomotion-LocomotionTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Locomotion-LocomotionTests.debug.xcconfig"; path = "Target Support Files/Pods-Locomotion-LocomotionTests/Pods-Locomotion-LocomotionTests.debug.xcconfig"; sourceTree = ""; }; ABC57D5443BA4AB7AE7EA145 /* Inter-ExtraBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-ExtraBold.ttf"; path = "../src/assets/fonts/Inter-ExtraBold.ttf"; sourceTree = ""; }; AE4C4563282D04BF007CCCE7 /* Locomotion-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Locomotion-Bridging-Header.h"; sourceTree = ""; }; + E28DA5B02A673BCB379C0328 /* libPods-Locomotion.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Locomotion.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + E55217FCF08152EEAFE98402 /* libPods-Locomotion-LocomotionTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Locomotion-LocomotionTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; EC5ACF6D2871CBBE00B2D6D7 /* Locomotion.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = Locomotion.entitlements; path = Locomotion/Locomotion.entitlements; sourceTree = ""; }; EC8EB49F2811511C005D40A9 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; - F95C9198287C4D81008094F5 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "../../../../../../Downloads/GoogleService-Info.plist"; sourceTree = ""; }; - FCCFD2CEB1BB53A08ED2B6FB /* libPods-Locomotion-LocomotionTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Locomotion-LocomotionTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + F95C9198287C4D81008094F5 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -83,7 +97,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 61F154951A1C04991C8364B7 /* libPods-Locomotion-LocomotionTests.a in Frameworks */, + 4AA1454B64E06F656E3394AF /* libPods-Locomotion-LocomotionTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -91,7 +105,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B1CA200D12DF97E4831657DD /* libPods-Locomotion.a in Frameworks */, + A121119BA9DA2858DF7518AC /* libPods-Locomotion.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -152,8 +166,8 @@ isa = PBXGroup; children = ( ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - 24211AE3E57C256B5D3886D1 /* libPods-Locomotion.a */, - FCCFD2CEB1BB53A08ED2B6FB /* libPods-Locomotion-LocomotionTests.a */, + E28DA5B02A673BCB379C0328 /* libPods-Locomotion.a */, + E55217FCF08152EEAFE98402 /* libPods-Locomotion-LocomotionTests.a */, ); name = Frameworks; sourceTree = ""; @@ -202,10 +216,10 @@ BBD78D7AC51CEA395F1C20DB /* Pods */ = { isa = PBXGroup; children = ( - 696204FB26E0B163288A662A /* Pods-Locomotion.debug.xcconfig */, - 55610BD25FC1E81B65311466 /* Pods-Locomotion.release.xcconfig */, - A12E7D08EC6BD0E74F98FE02 /* Pods-Locomotion-LocomotionTests.debug.xcconfig */, - 16BF541F6AE878BD41319442 /* Pods-Locomotion-LocomotionTests.release.xcconfig */, + 2D3CA5025A228913F55711B7 /* Pods-Locomotion.debug.xcconfig */, + 7E9F570E955100233FAF553E /* Pods-Locomotion.release.xcconfig */, + 87C313D9C5B40E7945FAE36B /* Pods-Locomotion-LocomotionTests.debug.xcconfig */, + 7D403366CAC018BE868607DE /* Pods-Locomotion-LocomotionTests.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -217,12 +231,12 @@ isa = PBXNativeTarget; buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "LocomotionTests" */; buildPhases = ( - 68D96169EA10F3471C9058D3 /* [CP] Check Pods Manifest.lock */, + 6516BB1223B40495C68427A2 /* [CP] Check Pods Manifest.lock */, 00E356EA1AD99517003FC87E /* Sources */, 00E356EB1AD99517003FC87E /* Frameworks */, 00E356EC1AD99517003FC87E /* Resources */, - CECA72E4BEA261A979050661 /* [CP] Embed Pods Frameworks */, - 25BD4CAD1E880027AE519730 /* [CP] Copy Pods Resources */, + 0561D487DEF627D14758C5D4 /* [CP] Embed Pods Frameworks */, + D4588F5A56B4F05CDC322004 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -238,18 +252,19 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Locomotion" */; buildPhases = ( - EFC0421612226FDA6E87EA59 /* [CP] Check Pods Manifest.lock */, + E9DE9155B728EEC659249BCA /* [CP] Check Pods Manifest.lock */, FD10A7F022414F080027D42C /* Start Packager */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 7304E93E597C2F11320866A2 /* [CP] Embed Pods Frameworks */, - EA79D3EE6C0EA8289E52E715 /* [CP] Copy Pods Resources */, - 248991A6E44B6716F6E858C6 /* [CP-User] [RNFB] Core Configuration */, - 544AA48D46A2C437A6DA0BDE /* [CP-User] [RNFB] Crashlytics Configuration */, + 9CD65BFA5409F4EC56363803 /* [CP] Embed Pods Frameworks */, + 45AFB4140BA940DA34C5689F /* [CP] Copy Pods Resources */, + 01C722022B01CF8F986352A1 /* [CP-User] [RNFB] Core Configuration */, + 714434B24BCF347A6DCA8656 /* [CP-User] [RNFB] Crashlytics Configuration */, ); buildRules = ( + 8DA78A922A956907009C16B8 /* PBXBuildRule */, ); dependencies = ( ); @@ -338,7 +353,7 @@ shellPath = /bin/sh; shellScript = "set -e\n\nexport NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; }; - 248991A6E44B6716F6E858C6 /* [CP-User] [RNFB] Core Configuration */ = { + 01C722022B01CF8F986352A1 /* [CP-User] [RNFB] Core Configuration */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -351,38 +366,41 @@ shellPath = /bin/sh; shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n if ! python3 --version >/dev/null 2>&1; then echo \"python3 not found, firebase.json file processing error.\" && exit 1; fi\n _JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys,base64;print(base64.b64encode(bytes(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"', '\"'rb'\"').read())['${_JSON_ROOT}']), '\"'utf-8'\"')).decode())' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.google_analytics_automatic_screen_reporting_enabled\n _ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_automatic_screen_reporting_enabled\")\n if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAutomaticScreenReportingEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_SCREEN_REPORTING\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n"; }; - 25BD4CAD1E880027AE519730 /* [CP] Copy Pods Resources */ = { + 0561D487DEF627D14758C5D4 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Locomotion-LocomotionTests/Pods-Locomotion-LocomotionTests-resources-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Locomotion-LocomotionTests/Pods-Locomotion-LocomotionTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Locomotion-LocomotionTests/Pods-Locomotion-LocomotionTests-resources-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Locomotion-LocomotionTests/Pods-Locomotion-LocomotionTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Locomotion-LocomotionTests/Pods-Locomotion-LocomotionTests-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Locomotion-LocomotionTests/Pods-Locomotion-LocomotionTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 544AA48D46A2C437A6DA0BDE /* [CP-User] [RNFB] Crashlytics Configuration */ = { + 45AFB4140BA940DA34C5689F /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}", - "$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Locomotion/Pods-Locomotion-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Locomotion/Pods-Locomotion-resources-${CONFIGURATION}-output-files.xcfilelist", ); - name = "[CP-User] [RNFB] Crashlytics Configuration"; runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\nif [[ ${PODS_ROOT} ]]; then\n echo \"info: Exec FirebaseCrashlytics Run from Pods\"\n \"${PODS_ROOT}/FirebaseCrashlytics/run\"\nelse\n echo \"info: Exec FirebaseCrashlytics Run from framework\"\n \"${PROJECT_DIR}/FirebaseCrashlytics.framework/run\"\nfi\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Locomotion/Pods-Locomotion-resources.sh\"\n"; + showEnvVarsInLog = 0; }; - 68D96169EA10F3471C9058D3 /* [CP] Check Pods Manifest.lock */ = { + 6516BB1223B40495C68427A2 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -404,58 +422,55 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 7304E93E597C2F11320866A2 /* [CP] Embed Pods Frameworks */ = { + 714434B24BCF347A6DCA8656 /* [CP-User] [RNFB] Crashlytics Configuration */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Locomotion/Pods-Locomotion-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Locomotion/Pods-Locomotion-frameworks-${CONFIGURATION}-output-files.xcfilelist", + inputPaths = ( + "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}", + "$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", ); + name = "[CP-User] [RNFB] Crashlytics Configuration"; runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Locomotion/Pods-Locomotion-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\nif [[ ${PODS_ROOT} ]]; then\n echo \"info: Exec FirebaseCrashlytics Run from Pods\"\n \"${PODS_ROOT}/FirebaseCrashlytics/run\"\nelse\n echo \"info: Exec FirebaseCrashlytics Run from framework\"\n \"${PROJECT_DIR}/FirebaseCrashlytics.framework/run\"\nfi\n"; }; - CECA72E4BEA261A979050661 /* [CP] Embed Pods Frameworks */ = { + 9CD65BFA5409F4EC56363803 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Locomotion-LocomotionTests/Pods-Locomotion-LocomotionTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Locomotion/Pods-Locomotion-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Locomotion-LocomotionTests/Pods-Locomotion-LocomotionTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Locomotion/Pods-Locomotion-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Locomotion-LocomotionTests/Pods-Locomotion-LocomotionTests-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Locomotion/Pods-Locomotion-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - EA79D3EE6C0EA8289E52E715 /* [CP] Copy Pods Resources */ = { + D4588F5A56B4F05CDC322004 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Locomotion/Pods-Locomotion-resources-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Locomotion-LocomotionTests/Pods-Locomotion-LocomotionTests-resources-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Locomotion/Pods-Locomotion-resources-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-Locomotion-LocomotionTests/Pods-Locomotion-LocomotionTests-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Locomotion/Pods-Locomotion-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Locomotion-LocomotionTests/Pods-Locomotion-LocomotionTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; - EFC0421612226FDA6E87EA59 /* [CP] Check Pods Manifest.lock */ = { + E9DE9155B728EEC659249BCA /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -529,7 +544,7 @@ /* Begin XCBuildConfiguration section */ 00E356F61AD99517003FC87E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A12E7D08EC6BD0E74F98FE02 /* Pods-Locomotion-LocomotionTests.debug.xcconfig */; + baseConfigurationReference = 87C313D9C5B40E7945FAE36B /* Pods-Locomotion-LocomotionTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; GCC_PREPROCESSOR_DEFINITIONS = ( @@ -556,7 +571,7 @@ }; 00E356F71AD99517003FC87E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 16BF541F6AE878BD41319442 /* Pods-Locomotion-LocomotionTests.release.xcconfig */; + baseConfigurationReference = 7D403366CAC018BE868607DE /* Pods-Locomotion-LocomotionTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COPY_PHASE_STRIP = NO; @@ -580,8 +595,9 @@ }; 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 696204FB26E0B163288A662A /* Pods-Locomotion.debug.xcconfig */; + baseConfigurationReference = 2D3CA5025A228913F55711B7 /* Pods-Locomotion.debug.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Locomotion/Locomotion.entitlements; @@ -589,6 +605,7 @@ DEVELOPMENT_TEAM = 7K92DGCAEB; ENABLE_BITCODE = NO; INFOPLIST_FILE = Locomotion/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -610,19 +627,22 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 55610BD25FC1E81B65311466 /* Pods-Locomotion.release.xcconfig */; + baseConfigurationReference = 7E9F570E955100233FAF553E /* Pods-Locomotion.release.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Locomotion/Locomotion.entitlements; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 7K92DGCAEB; INFOPLIST_FILE = Locomotion/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); MARKETING_VERSION = 3.0.32; + ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -669,6 +689,8 @@ COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + EXCLUDED_ARCHS = ""; + "EXCLUDED_ARCHS[sdk=*]" = ""; "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; @@ -760,6 +782,7 @@ "\"$(inherited)\"", ); MTL_ENABLE_DEBUG_INFO = NO; + ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-DFOLLY_NO_CONFIG", diff --git a/examples/client/Locomotion/ios/Locomotion/main.m b/examples/client/Locomotion/ios/Locomotion/main.m index d645c7246..909d63e80 100644 --- a/examples/client/Locomotion/ios/Locomotion/main.m +++ b/examples/client/Locomotion/ios/Locomotion/main.m @@ -8,3 +8,4 @@ int main(int argc, char *argv[]) return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } + diff --git a/examples/client/Locomotion/ios/Podfile b/examples/client/Locomotion/ios/Podfile index 7a6661ba1..b328d1c14 100644 --- a/examples/client/Locomotion/ios/Podfile +++ b/examples/client/Locomotion/ios/Podfile @@ -2,7 +2,7 @@ require_relative '../node_modules/react-native/scripts/react_native_pods' require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' # $RNFirebaseAsStaticFramework = true -platform :ios, '12.0' +platform :ios, '13.0' install! 'cocoapods', :deterministic_uuids => false target 'Locomotion' do @@ -46,5 +46,12 @@ target 'Locomotion' do post_install do |installer| react_native_post_install(installer) __apply_Xcode_12_5_M1_post_install_workaround(installer) + installer.pods_project.targets.each do |target| + if target.respond_to?(:product_type) and target.product_type == "com.apple.product-type.bundle" + target.build_configurations.each do |config| + config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO' + end + end + end end end diff --git a/examples/client/Locomotion/ios/Podfile.lock b/examples/client/Locomotion/ios/Podfile.lock index 214d7b296..abe752b0e 100644 --- a/examples/client/Locomotion/ios/Podfile.lock +++ b/examples/client/Locomotion/ios/Podfile.lock @@ -1,16 +1,16 @@ PODS: - boost (1.76.0) - - BVLinearGradient (2.5.6): - - React + - BVLinearGradient (2.6.2): + - React-Core - DoubleConversion (1.1.6) - - FBLazyVector (0.68.1) - - FBReactNativeSpec (0.68.1): + - FBLazyVector (0.68.5) + - FBReactNativeSpec (0.68.5): - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.1) - - RCTTypeSafety (= 0.68.1) - - React-Core (= 0.68.1) - - React-jsi (= 0.68.1) - - ReactCommon/turbomodule/core (= 0.68.1) + - RCTRequired (= 0.68.5) + - RCTTypeSafety (= 0.68.5) + - React-Core (= 0.68.5) + - React-jsi (= 0.68.5) + - ReactCommon/turbomodule/core (= 0.68.5) - Firebase/CoreOnly (8.15.0): - FirebaseCore (= 8.15.0) - Firebase/Crashlytics (8.15.0): @@ -58,35 +58,43 @@ PODS: - GoogleMaps - Google-Maps-iOS-Utils/QuadTree (4.1.0): - GoogleMaps - - GoogleDataTransport (9.1.4): + - GoogleDataTransport (9.2.5): - GoogleUtilities/Environment (~> 7.7) - nanopb (< 2.30910.0, >= 2.30908.0) - PromisesObjC (< 3.0, >= 1.2) - - GoogleMaps (6.1.1): - - GoogleMaps/Maps (= 6.1.1) - - GoogleMaps/Base (6.1.1) - - GoogleMaps/Maps (6.1.1): + - GoogleMaps (7.3.0): + - GoogleMaps/Maps (= 7.3.0) + - GoogleMaps/Base (7.3.0) + - GoogleMaps/Maps (7.3.0): - GoogleMaps/Base - - GoogleUtilities/Environment (7.7.0): + - GoogleUtilities/Environment (7.11.5): - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/Logger (7.7.0): + - GoogleUtilities/Logger (7.11.5): - GoogleUtilities/Environment - - GoogleUtilities/UserDefaults (7.7.0): + - GoogleUtilities/UserDefaults (7.11.5): - GoogleUtilities/Logger - - libwebp (1.2.1): - - libwebp/demux (= 1.2.1) - - libwebp/mux (= 1.2.1) - - libwebp/webp (= 1.2.1) - - libwebp/demux (1.2.1): + - libwebp (1.3.1): + - libwebp/demux (= 1.3.1) + - libwebp/mux (= 1.3.1) + - libwebp/sharpyuv (= 1.3.1) + - libwebp/webp (= 1.3.1) + - libwebp/demux (1.3.1): - libwebp/webp - - libwebp/mux (1.2.1): + - libwebp/mux (1.3.1): - libwebp/demux - - libwebp/webp (1.2.1) - - lottie-ios (3.2.3) - - lottie-react-native (5.1.3): - - lottie-ios (~> 3.2.3) + - libwebp/sharpyuv (1.3.1) + - libwebp/webp (1.3.1): + - libwebp/sharpyuv + - lottie-ios (3.4.0) + - lottie-react-native (5.1.4): + - lottie-ios (~> 3.4.0) + - React-Core + - Mixpanel-swift (4.1.0): + - Mixpanel-swift/Complete (= 4.1.0) + - Mixpanel-swift/Complete (4.1.0) + - MixpanelReactNative (2.2.1): + - Mixpanel-swift (= 4.1.0) - React-Core - - Mixpanel (3.6.5) - nanopb (2.30908.0): - nanopb/decode (= 2.30908.0) - nanopb/encode (= 2.30908.0) @@ -102,7 +110,7 @@ PODS: - OneSignalXCFramework/OneSignalOutcomes - OneSignalXCFramework/OneSignalOutcomes (3.11.2): - OneSignalXCFramework/OneSignalCore - - PromisesObjC (2.1.1) + - PromisesObjC (2.3.1) - RCT-Folly (2021.06.28.00-v2): - boost - DoubleConversion @@ -114,333 +122,336 @@ PODS: - DoubleConversion - fmt (~> 6.2.1) - glog - - RCTRequired (0.68.1) - - RCTTypeSafety (0.68.1): - - FBLazyVector (= 0.68.1) + - RCTRequired (0.68.5) + - RCTTypeSafety (0.68.5): + - FBLazyVector (= 0.68.5) - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.1) - - React-Core (= 0.68.1) - - React (0.68.1): - - React-Core (= 0.68.1) - - React-Core/DevSupport (= 0.68.1) - - React-Core/RCTWebSocket (= 0.68.1) - - React-RCTActionSheet (= 0.68.1) - - React-RCTAnimation (= 0.68.1) - - React-RCTBlob (= 0.68.1) - - React-RCTImage (= 0.68.1) - - React-RCTLinking (= 0.68.1) - - React-RCTNetwork (= 0.68.1) - - React-RCTSettings (= 0.68.1) - - React-RCTText (= 0.68.1) - - React-RCTVibration (= 0.68.1) - - React-callinvoker (0.68.1) - - React-Codegen (0.68.1): - - FBReactNativeSpec (= 0.68.1) + - RCTRequired (= 0.68.5) + - React-Core (= 0.68.5) + - React (0.68.5): + - React-Core (= 0.68.5) + - React-Core/DevSupport (= 0.68.5) + - React-Core/RCTWebSocket (= 0.68.5) + - React-RCTActionSheet (= 0.68.5) + - React-RCTAnimation (= 0.68.5) + - React-RCTBlob (= 0.68.5) + - React-RCTImage (= 0.68.5) + - React-RCTLinking (= 0.68.5) + - React-RCTNetwork (= 0.68.5) + - React-RCTSettings (= 0.68.5) + - React-RCTText (= 0.68.5) + - React-RCTVibration (= 0.68.5) + - React-callinvoker (0.68.5) + - React-Codegen (0.68.5): + - FBReactNativeSpec (= 0.68.5) - RCT-Folly (= 2021.06.28.00-v2) - - RCTRequired (= 0.68.1) - - RCTTypeSafety (= 0.68.1) - - React-Core (= 0.68.1) - - React-jsi (= 0.68.1) - - React-jsiexecutor (= 0.68.1) - - ReactCommon/turbomodule/core (= 0.68.1) - - React-Core (0.68.1): + - RCTRequired (= 0.68.5) + - RCTTypeSafety (= 0.68.5) + - React-Core (= 0.68.5) + - React-jsi (= 0.68.5) + - React-jsiexecutor (= 0.68.5) + - ReactCommon/turbomodule/core (= 0.68.5) + - React-Core (0.68.5): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.68.1) - - React-cxxreact (= 0.68.1) - - React-jsi (= 0.68.1) - - React-jsiexecutor (= 0.68.1) - - React-perflogger (= 0.68.1) + - React-Core/Default (= 0.68.5) + - React-cxxreact (= 0.68.5) + - React-jsi (= 0.68.5) + - React-jsiexecutor (= 0.68.5) + - React-perflogger (= 0.68.5) - Yoga - - React-Core/CoreModulesHeaders (0.68.1): + - React-Core/CoreModulesHeaders (0.68.5): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.1) - - React-jsi (= 0.68.1) - - React-jsiexecutor (= 0.68.1) - - React-perflogger (= 0.68.1) + - React-cxxreact (= 0.68.5) + - React-jsi (= 0.68.5) + - React-jsiexecutor (= 0.68.5) + - React-perflogger (= 0.68.5) - Yoga - - React-Core/Default (0.68.1): + - React-Core/Default (0.68.5): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-cxxreact (= 0.68.1) - - React-jsi (= 0.68.1) - - React-jsiexecutor (= 0.68.1) - - React-perflogger (= 0.68.1) + - React-cxxreact (= 0.68.5) + - React-jsi (= 0.68.5) + - React-jsiexecutor (= 0.68.5) + - React-perflogger (= 0.68.5) - Yoga - - React-Core/DevSupport (0.68.1): + - React-Core/DevSupport (0.68.5): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.68.1) - - React-Core/RCTWebSocket (= 0.68.1) - - React-cxxreact (= 0.68.1) - - React-jsi (= 0.68.1) - - React-jsiexecutor (= 0.68.1) - - React-jsinspector (= 0.68.1) - - React-perflogger (= 0.68.1) + - React-Core/Default (= 0.68.5) + - React-Core/RCTWebSocket (= 0.68.5) + - React-cxxreact (= 0.68.5) + - React-jsi (= 0.68.5) + - React-jsiexecutor (= 0.68.5) + - React-jsinspector (= 0.68.5) + - React-perflogger (= 0.68.5) - Yoga - - React-Core/RCTActionSheetHeaders (0.68.1): + - React-Core/RCTActionSheetHeaders (0.68.5): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.1) - - React-jsi (= 0.68.1) - - React-jsiexecutor (= 0.68.1) - - React-perflogger (= 0.68.1) + - React-cxxreact (= 0.68.5) + - React-jsi (= 0.68.5) + - React-jsiexecutor (= 0.68.5) + - React-perflogger (= 0.68.5) - Yoga - - React-Core/RCTAnimationHeaders (0.68.1): + - React-Core/RCTAnimationHeaders (0.68.5): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.1) - - React-jsi (= 0.68.1) - - React-jsiexecutor (= 0.68.1) - - React-perflogger (= 0.68.1) + - React-cxxreact (= 0.68.5) + - React-jsi (= 0.68.5) + - React-jsiexecutor (= 0.68.5) + - React-perflogger (= 0.68.5) - Yoga - - React-Core/RCTBlobHeaders (0.68.1): + - React-Core/RCTBlobHeaders (0.68.5): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.1) - - React-jsi (= 0.68.1) - - React-jsiexecutor (= 0.68.1) - - React-perflogger (= 0.68.1) + - React-cxxreact (= 0.68.5) + - React-jsi (= 0.68.5) + - React-jsiexecutor (= 0.68.5) + - React-perflogger (= 0.68.5) - Yoga - - React-Core/RCTImageHeaders (0.68.1): + - React-Core/RCTImageHeaders (0.68.5): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.1) - - React-jsi (= 0.68.1) - - React-jsiexecutor (= 0.68.1) - - React-perflogger (= 0.68.1) + - React-cxxreact (= 0.68.5) + - React-jsi (= 0.68.5) + - React-jsiexecutor (= 0.68.5) + - React-perflogger (= 0.68.5) - Yoga - - React-Core/RCTLinkingHeaders (0.68.1): + - React-Core/RCTLinkingHeaders (0.68.5): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.1) - - React-jsi (= 0.68.1) - - React-jsiexecutor (= 0.68.1) - - React-perflogger (= 0.68.1) + - React-cxxreact (= 0.68.5) + - React-jsi (= 0.68.5) + - React-jsiexecutor (= 0.68.5) + - React-perflogger (= 0.68.5) - Yoga - - React-Core/RCTNetworkHeaders (0.68.1): + - React-Core/RCTNetworkHeaders (0.68.5): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.1) - - React-jsi (= 0.68.1) - - React-jsiexecutor (= 0.68.1) - - React-perflogger (= 0.68.1) + - React-cxxreact (= 0.68.5) + - React-jsi (= 0.68.5) + - React-jsiexecutor (= 0.68.5) + - React-perflogger (= 0.68.5) - Yoga - - React-Core/RCTSettingsHeaders (0.68.1): + - React-Core/RCTSettingsHeaders (0.68.5): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.1) - - React-jsi (= 0.68.1) - - React-jsiexecutor (= 0.68.1) - - React-perflogger (= 0.68.1) + - React-cxxreact (= 0.68.5) + - React-jsi (= 0.68.5) + - React-jsiexecutor (= 0.68.5) + - React-perflogger (= 0.68.5) - Yoga - - React-Core/RCTTextHeaders (0.68.1): + - React-Core/RCTTextHeaders (0.68.5): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.1) - - React-jsi (= 0.68.1) - - React-jsiexecutor (= 0.68.1) - - React-perflogger (= 0.68.1) + - React-cxxreact (= 0.68.5) + - React-jsi (= 0.68.5) + - React-jsiexecutor (= 0.68.5) + - React-perflogger (= 0.68.5) - Yoga - - React-Core/RCTVibrationHeaders (0.68.1): + - React-Core/RCTVibrationHeaders (0.68.5): - glog - RCT-Folly (= 2021.06.28.00-v2) - React-Core/Default - - React-cxxreact (= 0.68.1) - - React-jsi (= 0.68.1) - - React-jsiexecutor (= 0.68.1) - - React-perflogger (= 0.68.1) + - React-cxxreact (= 0.68.5) + - React-jsi (= 0.68.5) + - React-jsiexecutor (= 0.68.5) + - React-perflogger (= 0.68.5) - Yoga - - React-Core/RCTWebSocket (0.68.1): + - React-Core/RCTWebSocket (0.68.5): - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-Core/Default (= 0.68.1) - - React-cxxreact (= 0.68.1) - - React-jsi (= 0.68.1) - - React-jsiexecutor (= 0.68.1) - - React-perflogger (= 0.68.1) + - React-Core/Default (= 0.68.5) + - React-cxxreact (= 0.68.5) + - React-jsi (= 0.68.5) + - React-jsiexecutor (= 0.68.5) + - React-perflogger (= 0.68.5) - Yoga - - React-CoreModules (0.68.1): + - React-CoreModules (0.68.5): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.1) - - React-Codegen (= 0.68.1) - - React-Core/CoreModulesHeaders (= 0.68.1) - - React-jsi (= 0.68.1) - - React-RCTImage (= 0.68.1) - - ReactCommon/turbomodule/core (= 0.68.1) - - React-cxxreact (0.68.1): + - RCTTypeSafety (= 0.68.5) + - React-Codegen (= 0.68.5) + - React-Core/CoreModulesHeaders (= 0.68.5) + - React-jsi (= 0.68.5) + - React-RCTImage (= 0.68.5) + - ReactCommon/turbomodule/core (= 0.68.5) + - React-cxxreact (0.68.5): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-callinvoker (= 0.68.1) - - React-jsi (= 0.68.1) - - React-jsinspector (= 0.68.1) - - React-logger (= 0.68.1) - - React-perflogger (= 0.68.1) - - React-runtimeexecutor (= 0.68.1) - - React-jsi (0.68.1): + - React-callinvoker (= 0.68.5) + - React-jsi (= 0.68.5) + - React-jsinspector (= 0.68.5) + - React-logger (= 0.68.5) + - React-perflogger (= 0.68.5) + - React-runtimeexecutor (= 0.68.5) + - React-jsi (0.68.5): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-jsi/Default (= 0.68.1) - - React-jsi/Default (0.68.1): + - React-jsi/Default (= 0.68.5) + - React-jsi/Default (0.68.5): - boost (= 1.76.0) - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-jsiexecutor (0.68.1): + - React-jsiexecutor (0.68.5): - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-cxxreact (= 0.68.1) - - React-jsi (= 0.68.1) - - React-perflogger (= 0.68.1) - - React-jsinspector (0.68.1) - - React-logger (0.68.1): + - React-cxxreact (= 0.68.5) + - React-jsi (= 0.68.5) + - React-perflogger (= 0.68.5) + - React-jsinspector (0.68.5) + - React-logger (0.68.5): - glog - react-native-background-timer (2.4.1): - React-Core - react-native-carrier-info (1.1.2): - React - - react-native-config (1.4.6): - - react-native-config/App (= 1.4.6) - - react-native-config/App (1.4.6): + - react-native-config (1.4.11): + - react-native-config/App (= 1.4.11) + - react-native-config/App (1.4.11): - React-Core - - react-native-date-picker (4.2.2): + - react-native-date-picker (4.2.6): - React-Core - react-native-geolocation (2.1.0): - React-Core - - react-native-google-maps (0.31.1): + - react-native-geolocation-service (5.3.1): + - React + - react-native-google-maps (1.4.0): - Google-Maps-iOS-Utils (= 4.1.0) - - GoogleMaps (= 6.1.1) + - GoogleMaps (= 7.3.0) - React-Core - - react-native-image-picker (4.8.4): + - react-native-image-picker (4.10.0): - React-Core - react-native-image-resizer (1.4.5): - React-Core - react-native-location (2.5.0): - React - - react-native-maps (0.31.1): + - react-native-maps (1.4.0): - React-Core - - react-native-mixpanel (1.2.5): - - Mixpanel (~> 3.6.0) - - React - - react-native-onesignal (4.3.11): + - react-native-netinfo (9.3.7): + - React-Core + - react-native-onesignal (4.4.1): - OneSignalXCFramework (= 3.11.2) - React (< 1.0.0, >= 0.13.0) - react-native-restart (0.0.24): - React-Core - - react-native-safe-area-context (4.3.1): + - react-native-safe-area-context (4.6.3): - RCT-Folly - RCTRequired - RCTTypeSafety - - React + - React-Core - ReactCommon/turbomodule/core - react-native-version-check (3.4.3): - React - - react-native-webview (11.22.3): + - react-native-webview (11.23.1): - React-Core - - React-perflogger (0.68.1) - - React-RCTActionSheet (0.68.1): - - React-Core/RCTActionSheetHeaders (= 0.68.1) - - React-RCTAnimation (0.68.1): + - React-perflogger (0.68.5) + - React-RCTActionSheet (0.68.5): + - React-Core/RCTActionSheetHeaders (= 0.68.5) + - React-RCTAnimation (0.68.5): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.1) - - React-Codegen (= 0.68.1) - - React-Core/RCTAnimationHeaders (= 0.68.1) - - React-jsi (= 0.68.1) - - ReactCommon/turbomodule/core (= 0.68.1) - - React-RCTBlob (0.68.1): + - RCTTypeSafety (= 0.68.5) + - React-Codegen (= 0.68.5) + - React-Core/RCTAnimationHeaders (= 0.68.5) + - React-jsi (= 0.68.5) + - ReactCommon/turbomodule/core (= 0.68.5) + - React-RCTBlob (0.68.5): - RCT-Folly (= 2021.06.28.00-v2) - - React-Codegen (= 0.68.1) - - React-Core/RCTBlobHeaders (= 0.68.1) - - React-Core/RCTWebSocket (= 0.68.1) - - React-jsi (= 0.68.1) - - React-RCTNetwork (= 0.68.1) - - ReactCommon/turbomodule/core (= 0.68.1) - - React-RCTImage (0.68.1): + - React-Codegen (= 0.68.5) + - React-Core/RCTBlobHeaders (= 0.68.5) + - React-Core/RCTWebSocket (= 0.68.5) + - React-jsi (= 0.68.5) + - React-RCTNetwork (= 0.68.5) + - ReactCommon/turbomodule/core (= 0.68.5) + - React-RCTImage (0.68.5): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.1) - - React-Codegen (= 0.68.1) - - React-Core/RCTImageHeaders (= 0.68.1) - - React-jsi (= 0.68.1) - - React-RCTNetwork (= 0.68.1) - - ReactCommon/turbomodule/core (= 0.68.1) - - React-RCTLinking (0.68.1): - - React-Codegen (= 0.68.1) - - React-Core/RCTLinkingHeaders (= 0.68.1) - - React-jsi (= 0.68.1) - - ReactCommon/turbomodule/core (= 0.68.1) - - React-RCTNetwork (0.68.1): + - RCTTypeSafety (= 0.68.5) + - React-Codegen (= 0.68.5) + - React-Core/RCTImageHeaders (= 0.68.5) + - React-jsi (= 0.68.5) + - React-RCTNetwork (= 0.68.5) + - ReactCommon/turbomodule/core (= 0.68.5) + - React-RCTLinking (0.68.5): + - React-Codegen (= 0.68.5) + - React-Core/RCTLinkingHeaders (= 0.68.5) + - React-jsi (= 0.68.5) + - ReactCommon/turbomodule/core (= 0.68.5) + - React-RCTNetwork (0.68.5): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.1) - - React-Codegen (= 0.68.1) - - React-Core/RCTNetworkHeaders (= 0.68.1) - - React-jsi (= 0.68.1) - - ReactCommon/turbomodule/core (= 0.68.1) - - React-RCTSettings (0.68.1): + - RCTTypeSafety (= 0.68.5) + - React-Codegen (= 0.68.5) + - React-Core/RCTNetworkHeaders (= 0.68.5) + - React-jsi (= 0.68.5) + - ReactCommon/turbomodule/core (= 0.68.5) + - React-RCTSettings (0.68.5): - RCT-Folly (= 2021.06.28.00-v2) - - RCTTypeSafety (= 0.68.1) - - React-Codegen (= 0.68.1) - - React-Core/RCTSettingsHeaders (= 0.68.1) - - React-jsi (= 0.68.1) - - ReactCommon/turbomodule/core (= 0.68.1) - - React-RCTText (0.68.1): - - React-Core/RCTTextHeaders (= 0.68.1) - - React-RCTVibration (0.68.1): + - RCTTypeSafety (= 0.68.5) + - React-Codegen (= 0.68.5) + - React-Core/RCTSettingsHeaders (= 0.68.5) + - React-jsi (= 0.68.5) + - ReactCommon/turbomodule/core (= 0.68.5) + - React-RCTText (0.68.5): + - React-Core/RCTTextHeaders (= 0.68.5) + - React-RCTVibration (0.68.5): - RCT-Folly (= 2021.06.28.00-v2) - - React-Codegen (= 0.68.1) - - React-Core/RCTVibrationHeaders (= 0.68.1) - - React-jsi (= 0.68.1) - - ReactCommon/turbomodule/core (= 0.68.1) - - React-runtimeexecutor (0.68.1): - - React-jsi (= 0.68.1) - - ReactCommon/turbomodule/core (0.68.1): + - React-Codegen (= 0.68.5) + - React-Core/RCTVibrationHeaders (= 0.68.5) + - React-jsi (= 0.68.5) + - ReactCommon/turbomodule/core (= 0.68.5) + - React-runtimeexecutor (0.68.5): + - React-jsi (= 0.68.5) + - ReactCommon/turbomodule/core (0.68.5): - DoubleConversion - glog - RCT-Folly (= 2021.06.28.00-v2) - - React-callinvoker (= 0.68.1) - - React-Core (= 0.68.1) - - React-cxxreact (= 0.68.1) - - React-jsi (= 0.68.1) - - React-logger (= 0.68.1) - - React-perflogger (= 0.68.1) - - RNCAsyncStorage (1.17.6): + - React-callinvoker (= 0.68.5) + - React-Core (= 0.68.5) + - React-cxxreact (= 0.68.5) + - React-jsi (= 0.68.5) + - React-logger (= 0.68.5) + - React-perflogger (= 0.68.5) + - RNCAsyncStorage (1.17.10): - React-Core - RNCClipboard (1.5.1): - React-Core - - RNCPicker (2.4.2): + - RNCPicker (2.4.8): - React-Core - RNDeviceInfo (8.7.1): - React-Core - RNExitApp (1.1.0): - React - - RNFastImage (8.5.11): + - RNFastImage (8.6.1): - React-Core - SDWebImage (~> 5.11.1) - SDWebImageWebPCoder (~> 0.8.4) - - RNFBApp (14.11.1): + - RNFBApp (14.12.0): - Firebase/CoreOnly (= 8.15.0) - React-Core - - RNFBCrashlytics (14.11.1): + - RNFBCrashlytics (14.12.0): - Firebase/Crashlytics (= 8.15.0) - React-Core - RNFBApp - - RNGestureHandler (2.4.2): + - RNGestureHandler (2.12.1): + - React-Core + - RNLocalize (2.2.4): - React-Core - - RNReanimated (2.8.0): + - RNReanimated (2.17.0): - DoubleConversion - FBLazyVector - FBReactNativeSpec @@ -467,10 +478,10 @@ PODS: - React-RCTText - ReactCommon/turbomodule/core - Yoga - - RNScreens (3.13.1): + - RNScreens (3.18.2): - React-Core - React-RCTImage - - RNSVG (12.3.0): + - RNSVG (12.4.4): - React-Core - SDWebImage (5.11.1): - SDWebImage/Core (= 5.11.1) @@ -478,27 +489,27 @@ PODS: - SDWebImageWebPCoder (0.8.5): - libwebp (~> 1.0) - SDWebImage/Core (~> 5.10) - - Stripe (22.4.0): - - Stripe/Stripe3DS2 (= 22.4.0) - - StripeApplePay (= 22.4.0) - - StripeCore (= 22.4.0) - - StripeUICore (= 22.4.0) - - stripe-react-native (0.13.1): + - Stripe (22.5.1): + - Stripe/Stripe3DS2 (= 22.5.1) + - StripeApplePay (= 22.5.1) + - StripeCore (= 22.5.1) + - StripeUICore (= 22.5.1) + - stripe-react-native (0.14.0): - React-Core - - Stripe (~> 22.4.0) - - StripeFinancialConnections (~> 22.4.0) - - Stripe/Stripe3DS2 (22.4.0): - - StripeApplePay (= 22.4.0) - - StripeCore (= 22.4.0) - - StripeUICore (= 22.4.0) - - StripeApplePay (22.4.0): - - StripeCore (= 22.4.0) - - StripeCore (22.4.0) - - StripeFinancialConnections (22.4.0): - - StripeCore (= 22.4.0) - - StripeUICore (= 22.4.0) - - StripeUICore (22.4.0): - - StripeCore (= 22.4.0) + - Stripe (~> 22.5.1) + - StripeFinancialConnections (~> 22.5.1) + - Stripe/Stripe3DS2 (22.5.1): + - StripeApplePay (= 22.5.1) + - StripeCore (= 22.5.1) + - StripeUICore (= 22.5.1) + - StripeApplePay (22.5.1): + - StripeCore (= 22.5.1) + - StripeCore (22.5.1) + - StripeFinancialConnections (22.5.1): + - StripeCore (= 22.5.1) + - StripeUICore (= 22.5.1) + - StripeUICore (22.5.1): + - StripeCore (= 22.5.1) - Yoga (1.14.0) DEPENDENCIES: @@ -510,6 +521,7 @@ DEPENDENCIES: - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - lottie-ios (from `../node_modules/lottie-ios`) - lottie-react-native (from `../node_modules/lottie-react-native`) + - MixpanelReactNative (from `../node_modules/mixpanel-react-native`) - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) @@ -530,12 +542,13 @@ DEPENDENCIES: - react-native-config (from `../node_modules/react-native-config`) - react-native-date-picker (from `../node_modules/react-native-date-picker`) - "react-native-geolocation (from `../node_modules/@react-native-community/geolocation`)" + - react-native-geolocation-service (from `../node_modules/react-native-geolocation-service`) - react-native-google-maps (from `../node_modules/react-native-maps`) - react-native-image-picker (from `../node_modules/react-native-image-picker`) - react-native-image-resizer (from `../node_modules/react-native-image-resizer`) - react-native-location (from `../node_modules/react-native-location`) - react-native-maps (from `../node_modules/react-native-maps`) - - react-native-mixpanel (from `../node_modules/react-native-mixpanel`) + - "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)" - react-native-onesignal (from `../node_modules/react-native-onesignal`) - react-native-restart (from `../node_modules/react-native-restart`) - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) @@ -562,6 +575,7 @@ DEPENDENCIES: - "RNFBApp (from `../node_modules/@react-native-firebase/app`)" - "RNFBCrashlytics (from `../node_modules/@react-native-firebase/crashlytics`)" - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) + - RNLocalize (from `../node_modules/react-native-localize`) - RNReanimated (from `../node_modules/react-native-reanimated`) - RNScreens (from `../node_modules/react-native-screens`) - RNSVG (from `../node_modules/react-native-svg`) @@ -581,7 +595,7 @@ SPEC REPOS: - GoogleMaps - GoogleUtilities - libwebp - - Mixpanel + - Mixpanel-swift - nanopb - OneSignalXCFramework - PromisesObjC @@ -610,6 +624,8 @@ EXTERNAL SOURCES: :path: "../node_modules/lottie-ios" lottie-react-native: :path: "../node_modules/lottie-react-native" + MixpanelReactNative: + :path: "../node_modules/mixpanel-react-native" RCT-Folly: :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTRequired: @@ -646,6 +662,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-date-picker" react-native-geolocation: :path: "../node_modules/@react-native-community/geolocation" + react-native-geolocation-service: + :path: "../node_modules/react-native-geolocation-service" react-native-google-maps: :path: "../node_modules/react-native-maps" react-native-image-picker: @@ -656,8 +674,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-location" react-native-maps: :path: "../node_modules/react-native-maps" - react-native-mixpanel: - :path: "../node_modules/react-native-mixpanel" + react-native-netinfo: + :path: "../node_modules/@react-native-community/netinfo" react-native-onesignal: :path: "../node_modules/react-native-onesignal" react-native-restart: @@ -710,6 +728,8 @@ EXTERNAL SOURCES: :path: "../node_modules/@react-native-firebase/crashlytics" RNGestureHandler: :path: "../node_modules/react-native-gesture-handler" + RNLocalize: + :path: "../node_modules/react-native-localize" RNReanimated: :path: "../node_modules/react-native-reanimated" RNScreens: @@ -723,10 +743,10 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost: a7c83b31436843459a1961bfd74b96033dc77234 - BVLinearGradient: e3aad03778a456d77928f594a649e96995f1c872 + BVLinearGradient: 34a999fda29036898a09c6a6b728b0b4189e1a44 DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662 - FBLazyVector: 2c76493a346ef8cacf1f442926a39f805fffec1f - FBReactNativeSpec: 371350f24afa87b6aba606972ec959dcd4a95c9a + FBLazyVector: 2b47ff52037bd9ae07cc9b051c9975797814b736 + FBReactNativeSpec: 0e0d384ef17a33b385f13f0c7f97702c7cd17858 Firebase: 5f8193dff4b5b7c5d5ef72ae54bb76c08e2b841d FirebaseCore: 5743c5785c074a794d35f2fff7ecc254a91e08b1 FirebaseCoreDiagnostics: 92e07a649aeb66352b319d43bdd2ee3942af84cb @@ -735,79 +755,82 @@ SPEC CHECKSUMS: fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 glog: 476ee3e89abb49e07f822b48323c51c57124b572 Google-Maps-iOS-Utils: 3343332b18dfd5be8f1f44edd7d481ace3da4d9a - GoogleDataTransport: 5fffe35792f8b96ec8d6775f5eccd83c998d5a3b - GoogleMaps: 94e6e0851beece6678af9f508f4918b7a7c61722 - GoogleUtilities: e0913149f6b0625b553d70dae12b49fc62914fd1 - libwebp: 98a37e597e40bfdb4c911fc98f2c53d0b12d05fc - lottie-ios: c058aeafa76daa4cf64d773554bccc8385d0150e - lottie-react-native: a501112fa980529ccb80b9f3ee117a7f98c6af3a - Mixpanel: de8296d8568806ab17bfced0f823c908b808e1e0 + GoogleDataTransport: 54dee9d48d14580407f8f5fbf2f496e92437a2f2 + GoogleMaps: a146f275ee429d14822178c7a841c03366ec92a1 + GoogleUtilities: 13e2c67ede716b8741c7989e26893d151b2b2084 + libwebp: 33dc822fbbf4503668d09f7885bbfedc76c45e96 + lottie-ios: 69495122151a378fdc7d1bb4c5930347e37baf1f + lottie-react-native: b702fab740cdb952a8e2354713d3beda63ff97b0 + Mixpanel-swift: 7b46c63259dec8398a7df9f8a1298fd00b6b3cb3 + MixpanelReactNative: 52edfa25071042f12fca18c9854e01b2c917396a nanopb: a0ba3315591a9ae0a16a309ee504766e90db0c96 OneSignalXCFramework: 81ceac017a290f23793443323090cfbe888f74ea - PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb + PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4 RCT-Folly: 4d8508a426467c48885f1151029bc15fa5d7b3b8 - RCTRequired: 00581111c53531e39e3c6346ef0d2c0cf52a5a37 - RCTTypeSafety: 07e03ee7800e7dd65cba8e52ad0c2edb06c96604 - React: e61f4bf3c573d0c61c56b53dc3eb1d9daf0768a0 - React-callinvoker: 047d47230bb6fd66827f8cb0bea4e944ffd1309b - React-Codegen: bb0403cde7374af091530e84e492589485aab480 - React-Core: a4a3a8e10d004b08e013c3d0438259dd89a3894c - React-CoreModules: bb9f8bc36f1ae6d780b856927fa9d4aa01ccccc0 - React-cxxreact: 7dd472aefb8629d6080cbb859240bafccd902704 - React-jsi: b25808afe821b607d51c779bdd1717be8393b7ec - React-jsiexecutor: 4a4bae5671b064a2248a690cf75957669489d08c - React-jsinspector: 218a2503198ff28a085f8e16622a8d8f507c8019 - React-logger: f79dd3cc0f9b44f5611c6c7862badd891a862cf8 + RCTRequired: 0f06b6068f530932d10e1a01a5352fad4eaacb74 + RCTTypeSafety: b0ee81f10ef1b7d977605a2b266823dabd565e65 + React: 3becd12bd51ea8a43bdde7e09d0f40fba7820e03 + React-callinvoker: 11abfff50e6bf7a55b3a90b4dc2187f71f224593 + React-Codegen: f8946ce0768fb8e92e092e30944489c4b2955b2d + React-Core: 203cdb6ee2657b198d97d41031c249161060e6ca + React-CoreModules: 6eb0c06a4a223fde2cb6a8d0f44f58b67e808942 + React-cxxreact: afb0c6c07d19adbd850747fedeac20c6832d40b9 + React-jsi: 14d37a6db2af2c1a49f6f5c2e4ee667c364ae45c + React-jsiexecutor: 45c0496ca8cef6b02d9fa0274c25cf458fe91a56 + React-jsinspector: eb202e43b3879aba9a14f3f65788aec85d4e1ea9 + React-logger: 98f663b292a60967ebbc6d803ae96c1381183b6d react-native-background-timer: 117fffdc9b0d6f144444bb49029f94275a45fdb5 react-native-carrier-info: 1e6299256bd7ceaa36f851b30e071b2b4fc406ad - react-native-config: 7cd105e71d903104e8919261480858940a6b9c0e - react-native-date-picker: 9088350e06918f7d842a34c171acadc66583cb94 + react-native-config: bcafda5b4c51491ee1b0e1d0c4e3905bc7b56c1b + react-native-date-picker: 93e43b3084cea595b4d68b1405d6d99849663bd6 react-native-geolocation: 205c5f619aea7bd54067b7b51e0781cae2f37151 - react-native-google-maps: 8231ffa015bf8b222c2e2661fa9163cdb609a224 - react-native-image-picker: 9f9eb160a4f4fc0702f9d0a60fa453b413258ef8 + react-native-geolocation-service: 608e1da71a1ac31b4de64d9ef2815f697978c55b + react-native-google-maps: 247de10063a5b102523d3b883ea2f5bd1830f0ff + react-native-image-picker: 35834940bc572ba914707c39b60e043a06f88178 react-native-image-resizer: 506412a2bdd70dde64a61e13505ce10f61a04369 react-native-location: 9c53c0957756f7d70e8fdc76b1c7ed85867c8d0b - react-native-maps: 8b8bfada2c86205a7f5a07dd1f92f29b33ea83aa - react-native-mixpanel: 3e21f895f4e439f680cee7e236711db273cb273d - react-native-onesignal: ba9632b0065917f9efa7bba0179859fc8f728849 + react-native-maps: 3556d0fd5f559805f11777c1f59fc01eeb9f6405 + react-native-netinfo: 85f4311a8272324a2bf56583248f0a0bba5315a8 + react-native-onesignal: a4a08bf22290f739df33acf1f45f7a7f9850273b react-native-restart: 8af4579c94638f38bd9074ec477ebf087de87dc5 - react-native-safe-area-context: d768fdafd416b4c0bdc7bef4240c9ee53909baf3 + react-native-safe-area-context: 5496bfc1fb0f0e096eeb740377d6a3d62597abe2 react-native-version-check: ecc2bfeb57459db83351020610af16cd1d3abcbd - react-native-webview: af3da2648aad4d2eabdac457ebeeb6e4158ea82f - React-perflogger: 30ab8d6db10e175626069e742eead3ebe8f24fd5 - React-RCTActionSheet: 4b45da334a175b24dabe75f856b98fed3dfd6201 - React-RCTAnimation: d6237386cb04500889877845b3e9e9291146bc2e - React-RCTBlob: bc9e2cd738c43bd2948e862e371402ef9584730a - React-RCTImage: 9f8cac465c6e5837007f59ade2a0a741016dd6a3 - React-RCTLinking: 5073abb7d30cc0824b2172bd4582fc15bfc40510 - React-RCTNetwork: 28ff94aa7d8fc117fc800b87dd80869a00d2bef3 - React-RCTSettings: f27aa036f7270fe6ca43f8cdd1819e821fa429a0 - React-RCTText: 7cb6f86fa7bc86f22f16333ad243b158e63b2a68 - React-RCTVibration: 9e344c840176b0af9c84d5019eb4fed8b3c105a1 - React-runtimeexecutor: 7285b499d0339104b2813a1f58ad1ada4adbd6c0 - ReactCommon: bf2888a826ceedf54b99ad1b6182d1bc4a8a3984 - RNCAsyncStorage: 86050d31a1cdc564876f68d8e342688b29f9b186 + react-native-webview: a192040320142d8f10d652a745c46e4f43e37f8c + React-perflogger: 0458a87ea9a7342079e7a31b0d32b3734fb8415f + React-RCTActionSheet: 22538001ea2926dea001111dd2846c13a0730bc9 + React-RCTAnimation: 732ce66878d4aa151d56a0d142b1105aa12fd313 + React-RCTBlob: 9cb9e3e9a41d27be34aaf89b0e0f52c7ca415d57 + React-RCTImage: 6bd16627eb9c4bb79903c4cdec7c551266ee1a5b + React-RCTLinking: e9edfc8919c8fa9a3f3c7b34362811f58a2ebba4 + React-RCTNetwork: 880eccd21bbe2660a0b63da5ccba75c46eceeaa6 + React-RCTSettings: 8c85d8188c97d6c6bd470af6631a6c4555b79bb3 + React-RCTText: bbd275ee287730c5acbab1aadc0db39c25c5c64e + React-RCTVibration: 9819a3bf6230e4b2a99877c21268b0b2416157a1 + React-runtimeexecutor: b1f1995089b90696dbc2a7ffe0059a80db5c8eb1 + ReactCommon: 149e2c0acab9bac61378da0db5b2880a1b5ff59b + RNCAsyncStorage: 73b194e58ded504eee17b9a3c125651e2507ddde RNCClipboard: 5e299c6df8e0c98f3d7416b86ae563d3a9f768a3 - RNCPicker: 0250e95ad170569a96f5b0555cdd5e65b9084dca + RNCPicker: 0bf8ef8f7800524f32d2bb2a8bcadd53eda0ecd1 RNDeviceInfo: af47a7d1a09d64c8cbb8b0c883db9bca422a9813 RNExitApp: 7d81855142a4d11eb75f4f06fdebf5a950d7aef2 - RNFastImage: 1f2cab428712a4baaf78d6169eaec7f622556dd7 - RNFBApp: 9646e09d041ea159b84584865212e4cf33acd179 - RNFBCrashlytics: f2b5e456c4969bdec60482e83d973d873ff17f1d - RNGestureHandler: 61628a2c859172551aa2100d3e73d1e57878392f - RNReanimated: 64573e25e078ae6bec03b891586d50b9ec284393 - RNScreens: 40a2cb40a02a609938137a1e0acfbf8fc9eebf19 - RNSVG: 302bfc9905bd8122f08966dc2ce2d07b7b52b9f8 + RNFastImage: 3207b9eb17c2425d574ca40db35185db6e324f4e + RNFBApp: e4439717c23252458da2b41b81b4b475c86f90c4 + RNFBCrashlytics: 94e1f78e2a9aa9e02edbfb0d3f1f0921ce00094b + RNGestureHandler: c0d04458598fcb26052494ae23dda8f8f5162b13 + RNLocalize: ea02d6ee626a9239c9efe0b2b3f8a4660dff6df6 + RNReanimated: 1f117be601c59177816351a965bc57320b766c15 + RNScreens: 34cc502acf1b916c582c60003dc3089fa01dc66d + RNSVG: ecd661f380a07ba690c9c5929c475a44f432d674 SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d - Stripe: a925dfa9a7e51aa8f782f428abc10cb828b45a85 - stripe-react-native: 7d782b49006b5ff2c61b805ac3b07facb5918f3d - StripeApplePay: 369857bafe8baf02e31b47478db1574febd2a2f3 - StripeCore: a94d2823817c97c79fce60884ab9027a2da798c1 - StripeFinancialConnections: 269658b79f639c2d6b7d513235d469418b04c2dd - StripeUICore: a8e24a6c91a5c99075c7a490d45695fb912876e8 - Yoga: 17cd9a50243093b547c1e539c749928dd68152da + Stripe: 2b2decd03146e08a350960966d41f3028c2eac29 + stripe-react-native: aeaf2e77b0fe520f6765024394f5534786f33b89 + StripeApplePay: b14f06ac6fc24b56704c1e598149ed0cc45e166f + StripeCore: 4833738f2ca4336712f279f3c2867a0a7eb67c93 + StripeFinancialConnections: 982115b82af429968d8aa78d329a42ed7ba3feab + StripeUICore: 08c1efbd7e3c54ee7fa74334a37a1d4c08ba944d + Yoga: c4d61225a466f250c35c1ee78d2d0b3d41fe661c -PODFILE CHECKSUM: 20746e5676acd267e1502c6978f80a405c23ff05 +PODFILE CHECKSUM: 42909390370d7a65830c84fab99e66e070f1b4f9 -COCOAPODS: 1.11.3 +COCOAPODS: 1.12.1 diff --git a/examples/client/Locomotion/package-lock.json b/examples/client/Locomotion/package-lock.json index ab963f27e..6cfec6e09 100644 --- a/examples/client/Locomotion/package-lock.json +++ b/examples/client/Locomotion/package-lock.json @@ -13,34 +13,39 @@ "@jridgewell/trace-mapping": "^0.3.9" } }, + "@autofleet/i18next-remote-backend-with-locals": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@autofleet/i18next-remote-backend-with-locals/-/i18next-remote-backend-with-locals-1.0.0.tgz", + "integrity": "sha512-JqTGvfU/3acLil/8NqHybAepSM0xfpr5eREouu3bimhwxymelWhQ7VYREBUNPvRn+3xMSGHhaNKqxGYgGf6Ydw==" + }, "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "requires": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.18.6" } }, "@babel/compat-data": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", - "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==" + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", + "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==" }, "@babel/core": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz", - "integrity": "sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", + "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", "requires": { "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-compilation-targets": "^7.18.2", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helpers": "^7.18.2", - "@babel/parser": "^7.18.5", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.5", - "@babel/types": "^7.18.4", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.6", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helpers": "^7.19.4", + "@babel/parser": "^7.19.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -61,21 +66,21 @@ } }, "@babel/generator": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", - "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz", + "integrity": "sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==", "requires": { - "@babel/types": "^7.18.2", - "@jridgewell/gen-mapping": "^0.3.0", + "@babel/types": "^7.19.4", + "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, "dependencies": { "@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "requires": { - "@jridgewell/set-array": "^1.0.0", + "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" } @@ -83,30 +88,30 @@ } }, "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "requires": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" } }, "@babel/helper-compilation-targets": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", - "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", + "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", + "@babel/compat-data": "^7.19.3", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", "semver": "^6.3.0" }, "dependencies": { @@ -118,37 +123,35 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", - "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", + "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz", - "integrity": "sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", + "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^5.0.1" + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" } }, "@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", @@ -163,226 +166,232 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", - "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==" + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" }, "@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", "requires": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" } }, "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", - "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", "requires": { - "@babel/types": "^7.17.0" + "@babel/types": "^7.18.9" } }, "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-module-transforms": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", - "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", + "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.19.4", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4" } }, "@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==" }, "@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" } }, "@babel/helper-replace-supers": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz", - "integrity": "sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", "requires": { - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" } }, "@babel/helper-simple-access": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", - "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", "requires": { - "@babel/types": "^7.18.2" + "@babel/types": "^7.19.4" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", + "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.18.9" } }, "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + }, "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" }, "@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", + "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", "requires": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" } }, "@babel/helpers": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", - "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", + "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.4", + "@babel/types": "^7.19.4" } }, "@babel/highlight": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", - "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", - "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==" + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz", + "integrity": "sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==" }, "@babel/plugin-proposal-class-properties": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", - "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-proposal-export-default-from": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.17.12.tgz", - "integrity": "sha512-LpsTRw725eBAXXKUOnJJct+SEaOzwR78zahcLuripD2+dKc2Sj+8Q2DzA+GC/jOpOu/KlDXuxrzG214o1zTauQ==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.18.10.tgz", + "integrity": "sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-export-default-from": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-default-from": "^7.18.6" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", - "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz", - "integrity": "sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz", + "integrity": "sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==", "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.17.12" + "@babel/plugin-transform-parameters": "^7.18.8" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", - "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, @@ -421,19 +430,19 @@ } }, "@babel/plugin-syntax-export-default-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.16.7.tgz", - "integrity": "sha512-4C3E4NsrLOgftKaTYTULhHsuQrGv3FHrBzOMDiS7UYKIpgGBkAdawg4h+EI8zPeK9M0fiIIh72hIwsI24K7MbA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.18.6.tgz", + "integrity": "sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-syntax-flow": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.17.12.tgz", - "integrity": "sha512-B8QIgBvkIG6G2jgsOHQUist7Sm0EBLDCx8sen072IwqNuzMegZNXrYnSv77cYzA8mLDZAfQYqsLIhimiP1s2HQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", + "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-syntax-import-meta": { @@ -455,11 +464,11 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz", - "integrity": "sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -522,229 +531,229 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", - "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz", - "integrity": "sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz", - "integrity": "sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-remap-async-to-generator": "^7.16.8" + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz", - "integrity": "sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz", + "integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/plugin-transform-classes": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz", - "integrity": "sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-replace-supers": "^7.18.2", - "@babel/helper-split-export-declaration": "^7.16.7", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", + "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.19.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz", - "integrity": "sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-destructuring": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz", - "integrity": "sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz", + "integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-flow-strip-types": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.17.12.tgz", - "integrity": "sha512-g8cSNt+cHCpG/uunPQELdq/TeV3eg1OLJYwxypwHtAWo9+nErH3lQx9CSO2uI9lF74A0mR0t4KoMjs1snSgnTw==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", + "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-flow": "^7.17.12" + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-flow": "^7.18.6" } }, "@babel/plugin-transform-for-of": { - "version": "7.18.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz", - "integrity": "sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", - "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", "requires": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-literals": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz", - "integrity": "sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", - "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", - "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", "requires": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-simple-access": "^7.18.2", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-simple-access": "^7.19.4" } }, "@babel/plugin-transform-object-assign": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.16.7.tgz", - "integrity": "sha512-R8mawvm3x0COTJtveuoqZIjNypn2FjfvXZr4pSQ8VhEFBuQGBz4XhHasZtHXjgXU4XptZ4HtGof3NoYc93ZH9Q==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.18.6.tgz", + "integrity": "sha512-mQisZ3JfqWh2gVXvfqYCAAyRs6+7oev+myBsTwW5RnPhYXOTuCEw2oe3YgxlXMViXUS53lG8koulI7mJ+8JE+A==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" } }, "@babel/plugin-transform-parameters": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz", - "integrity": "sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", + "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-react-display-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", - "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz", - "integrity": "sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-jsx": "^7.17.12", - "@babel/types": "^7.17.12" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.19.0" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.17.12.tgz", - "integrity": "sha512-7S9G2B44EnYOx74mue02t1uD8ckWZ/ee6Uz/qfdzc35uWHX5NgRy9i+iJSb2LFRgMd+QV9zNcStQaazzzZ3n3Q==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", + "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz", - "integrity": "sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", + "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/plugin-transform-regenerator": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz", - "integrity": "sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-plugin-utils": "^7.18.6", "regenerator-transform": "^0.15.0" } }, "@babel/plugin-transform-runtime": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.5.tgz", - "integrity": "sha512-Q17hHxXr2fplrE+5BSC1j1Fo5cOA8YeP8XW3/1paI8MzF/faZGh0MaH1KC4jLAvqLPamQWHB5/B7KqSLY1kuHA==", - "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", "semver": "^6.3.0" }, "dependencies": { @@ -756,81 +765,81 @@ } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-spread": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz", - "integrity": "sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-template-literals": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz", - "integrity": "sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-typescript": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz", - "integrity": "sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.3.tgz", + "integrity": "sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-typescript": "^7.17.12" + "@babel/helper-create-class-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-typescript": "^7.18.6" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/preset-flow": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.17.12.tgz", - "integrity": "sha512-7QDz7k4uiaBdu7N89VKjUn807pJRXmdirQu0KyR9LXnQrr5Jt41eIMKTS7ljej+H29erwmMrwq9Io9mJHLI3Lw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz", + "integrity": "sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-flow-strip-types": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-flow-strip-types": "^7.18.6" } }, "@babel/preset-typescript": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.17.12.tgz", - "integrity": "sha512-S1ViF8W2QwAKUGJXxP9NAfNaqGDdEBJKpYkxHf5Yy2C4NPPzXGeR3Lhk7G8xJaaLcFTRfNjVbtbVtm8Gb0mqvg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-typescript": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" } }, "@babel/register": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.17.7.tgz", - "integrity": "sha512-fg56SwvXRifootQEDQAu1mKdjh5uthPzdO0N6t358FktfL4XjAVXuH58ULoiW8mesxiOgNIrxiImqEwv0+hRRA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz", + "integrity": "sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==", "requires": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", @@ -860,56 +869,57 @@ } }, "@babel/runtime": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", - "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz", + "integrity": "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.3.tgz", - "integrity": "sha512-l4ddFwrc9rnR+EJsHsh+TJ4A35YqQz/UqcjtlX2ov53hlJYG5CxtQmNZxyajwDVmCxwy++rtvGU5HazCK4W41Q==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.6.tgz", + "integrity": "sha512-oWNn1ZlGde7b4i/3tnixpH9qI0bOAACiUs+KEES4UUCnsPjVWFlWdLV/iwJuPC2qp3EowbAqsm+0XqNwnwYhxA==", "dev": true, "requires": { - "core-js-pure": "^3.20.2", + "core-js-pure": "^3.25.1", "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" } }, "@babel/traverse": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", - "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.18.5", - "@babel/types": "^7.18.4", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz", + "integrity": "sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.6", + "@babel/types": "^7.19.4", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", - "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", + "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" } }, @@ -948,17 +958,17 @@ } }, "@emotion/is-prop-valid": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.1.3.tgz", - "integrity": "sha512-RFg04p6C+1uO19uG8N+vqanzKqiM9eeV1LDOG3bmkYmuOj7NbKNlFC/4EZq5gnwAIlcC/jOT24f8Td0iax2SXA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", + "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", "requires": { - "@emotion/memoize": "^0.7.4" + "@emotion/memoize": "^0.8.0" } }, "@emotion/memoize": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz", - "integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==" + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", + "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" }, "@emotion/stylis": { "version": "0.8.5", @@ -971,14 +981,14 @@ "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", + "espree": "^9.4.0", "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -994,9 +1004,9 @@ "dev": true }, "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -1126,9 +1136,9 @@ } }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "requires": { "lru-cache": "^6.0.0" } @@ -1184,24 +1194,12 @@ "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==" }, "@gorhom/bottom-sheet": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@gorhom/bottom-sheet/-/bottom-sheet-4.3.2.tgz", - "integrity": "sha512-kOnxKz3TuxbwagxhHvAyo2b1fgUCzw/Xs3OQD2lTE7vjGEdibsYnRaBxdpKKLV25VOQA6zVFmZq9apICj9foPw==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@gorhom/bottom-sheet/-/bottom-sheet-4.4.5.tgz", + "integrity": "sha512-Z5Z20wshLUB8lIdtMKoJaRnjd64wBR/q8EeVPThrg+skrcBwBPHfUwZJ2srB0rEszA/01ejSJy/ixyd7Ra7vUA==", "requires": { - "@gorhom/portal": "1.0.13", - "invariant": "^2.2.4", - "nanoid": "^3.3.3", - "react-native-redash": "^16.1.1" - }, - "dependencies": { - "@gorhom/portal": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/@gorhom/portal/-/portal-1.0.13.tgz", - "integrity": "sha512-ViClKPkyGnj8HVMW45OGQSnGbWBVh8i3tgMOkGqpm6Cv0WVcDfUL7SER6zyGQy8Wdoj3GUDpAJFMqVOxpmRpzw==", - "requires": { - "nanoid": "^3.3.1" - } - } + "@gorhom/portal": "1.0.14", + "invariant": "^2.2.4" } }, "@gorhom/portal": { @@ -1226,9 +1224,9 @@ } }, "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.6.tgz", + "integrity": "sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -1236,6 +1234,12 @@ "minimatch": "^3.0.4" } }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -2488,27 +2492,27 @@ } }, "@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" }, "@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" }, "@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "@mapbox/polyline": { @@ -2546,13 +2550,101 @@ } }, "@react-native-async-storage/async-storage": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.17.6.tgz", - "integrity": "sha512-XXnoheQI3vQTQmjphdXNLTmtiKZeRqvI8kPQ25X5Eae7nZjdYEEGN+0z8N2qyelbUIQwKgmW0aagJk56q7DyNg==", + "version": "1.17.10", + "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.17.10.tgz", + "integrity": "sha512-KrR021BmBLsA0TT1AAsfH16bHYy0MSbhdAeBAqpriak3GS1T2alFcdTUvn13p0ZW6FKRD6Bd3ryU2zhU/IYYJQ==", "requires": { "merge-options": "^3.0.4" } }, + "@react-native-community/cli": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-7.0.4.tgz", + "integrity": "sha512-W9nACtHWaLJZIP48cQmhQOnl5/7maoWE1Aji67MrLeIoB+ScNTJxaHfV4fMcklD6B6XEhaKokPACRZWm36zAog==", + "requires": { + "@react-native-community/cli-debugger-ui": "^7.0.3", + "@react-native-community/cli-hermes": "^6.3.1", + "@react-native-community/cli-plugin-metro": "^7.0.4", + "@react-native-community/cli-server-api": "^7.0.4", + "@react-native-community/cli-tools": "^6.2.1", + "@react-native-community/cli-types": "^6.0.0", + "appdirsjs": "^1.2.4", + "chalk": "^4.1.2", + "command-exists": "^1.2.8", + "commander": "^2.19.0", + "cosmiconfig": "^5.1.0", + "deepmerge": "^3.2.0", + "envinfo": "^7.7.2", + "execa": "^1.0.0", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.3", + "graceful-fs": "^4.1.3", + "joi": "^17.2.1", + "leven": "^3.1.0", + "lodash": "^4.17.15", + "minimist": "^1.2.0", + "node-stream-zip": "^1.9.1", + "ora": "^3.4.0", + "pretty-format": "^26.6.2", + "prompts": "^2.4.0", + "semver": "^6.3.0", + "serve-static": "^1.13.1", + "strip-ansi": "^5.2.0", + "sudo-prompt": "^9.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "@react-native-community/cli-debugger-ui": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-7.0.3.tgz", @@ -2562,23 +2654,23 @@ } }, "@react-native-community/cli-hermes": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-6.3.0.tgz", - "integrity": "sha512-Uhbm9bubyZLZ12vFCIfWbE/Qi3SBTbYIN/TC08EudTLhv/KbPomCQnmFsnJ7AXQFuOZJs73mBxoEAYSbRbwyVA==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-6.3.1.tgz", + "integrity": "sha512-+tMJsEsVX0WyylnoFE7uPoMu1aTAChaA62Y32dwWgAa1Fx6YrpPkC9d6wvYSBe9md/4mTtRher+ooBcuov6JHw==", "requires": { - "@react-native-community/cli-platform-android": "^6.3.0", - "@react-native-community/cli-tools": "^6.2.0", + "@react-native-community/cli-platform-android": "^6.3.1", + "@react-native-community/cli-tools": "^6.2.1", "chalk": "^4.1.2", "hermes-profile-transformer": "^0.0.6", "ip": "^1.1.5" }, "dependencies": { "@react-native-community/cli-platform-android": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-6.3.0.tgz", - "integrity": "sha512-d5ufyYcvrZoHznYm5bjBXaiHIJv552t5gYtQpnUsxBhHSQ8QlaNmlLUyeSPRDfOw4ND9b0tPHqs4ufwx6vp/fQ==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-6.3.1.tgz", + "integrity": "sha512-n5A64RI1ty4ScZCel/3JYY9Anl857dPsUZ86Dwc1GxrbflSB5/+hcCMg5DCNcnJRa4Hdv95SAR5pMmtAjOXApA==", "requires": { - "@react-native-community/cli-tools": "^6.2.0", + "@react-native-community/cli-tools": "^6.2.1", "chalk": "^4.1.2", "execa": "^1.0.0", "fs-extra": "^8.1.0", @@ -2783,11 +2875,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, - "shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -2943,11 +3030,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, - "shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -2967,12 +3049,12 @@ } }, "@react-native-community/cli-plugin-metro": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-7.0.3.tgz", - "integrity": "sha512-HJrEkFbxv9DNixsGwO+Q0zCcZMghDltyzeB9yQ//D5ZR4ZUEuAIPrRDdEp9xVw0WkBxAIZs6KXLux2/yPMwLhA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-7.0.4.tgz", + "integrity": "sha512-DEV9WwJ6mB8zWFvNe/Z/eGmtmQmsZcu9VIqjxT7e9xZr2csB9ZlOZiweAMFO5cuVWZZgfL+NYIaQiFi0E0DFXw==", "requires": { - "@react-native-community/cli-server-api": "^7.0.3", - "@react-native-community/cli-tools": "^6.2.0", + "@react-native-community/cli-server-api": "^7.0.4", + "@react-native-community/cli-tools": "^6.2.1", "chalk": "^4.1.2", "metro": "^0.67.0", "metro-config": "^0.67.0", @@ -3029,12 +3111,12 @@ } }, "@react-native-community/cli-server-api": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-7.0.3.tgz", - "integrity": "sha512-JDrLsrkBgNxbG2u3fouoVGL9tKrXUrTsaNwr+oCV+3XyMwbVe42r/OaQ681/iW/7mHXjuVkDnMcp7BMg7e2yJg==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-7.0.4.tgz", + "integrity": "sha512-NzwLKgshx1aFJad5b972rFowEx8ueHRFFXQFnBbvEuE3KsivDOTIwO0zn7cAO1zpxlFRxUFfcI1Pe4Aymi3xZw==", "requires": { "@react-native-community/cli-debugger-ui": "^7.0.3", - "@react-native-community/cli-tools": "^6.2.0", + "@react-native-community/cli-tools": "^6.2.1", "compression": "^1.7.1", "connect": "^3.6.5", "errorhandler": "^1.5.0", @@ -3045,16 +3127,16 @@ }, "dependencies": { "ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==" + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" } } }, "@react-native-community/cli-tools": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-6.2.0.tgz", - "integrity": "sha512-08ssz4GMEnRxC/1FgTTN/Ud7mExQi5xMphItPjfHiTxpZPhrFn+IMx6mya0ncFEhhxQ207wYlJMRLPRRdBZ8oA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-6.2.1.tgz", + "integrity": "sha512-7RbOkZLT/3YG8CAYYM70ajRKIOgVxK/b4t9KNsPq+2uen99MGezfeglC8s1cs3vBNVVxCo0a2JbXg18bUd8eqA==", "requires": { "appdirsjs": "^1.2.4", "chalk": "^4.1.2", @@ -3063,7 +3145,7 @@ "node-fetch": "^2.6.0", "open": "^6.2.0", "semver": "^6.3.0", - "shell-quote": "1.6.1" + "shell-quote": "^1.7.3" }, "dependencies": { "ansi-styles": { @@ -3183,9 +3265,9 @@ } }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -3204,10 +3286,15 @@ "resolved": "https://registry.npmjs.org/@react-native-community/geolocation/-/geolocation-2.1.0.tgz", "integrity": "sha512-xDAl5S85cRVGeUxpjX/+5lyVFNHHArXN18NQnfzCLxxiVxtC2sKENuLE4J0kjAlD5lEp+IXVqfd3iGQfo99tkA==" }, + "@react-native-community/netinfo": { + "version": "9.3.7", + "resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-9.3.7.tgz", + "integrity": "sha512-+taWmE5WpBp0uS6kf+bouCx/sn89G9EpR4s2M/ReLvctVIFL2Qh8WnWfBxqK9qwgmFha/uqjSr2Gq03OOtiDcw==" + }, "@react-native-firebase/app": { - "version": "14.11.1", - "resolved": "https://registry.npmjs.org/@react-native-firebase/app/-/app-14.11.1.tgz", - "integrity": "sha512-fkvOK8c7e8MxIbfb2076kO3GtGUc3ZXNEkPyfamRKBnPgANpmnjQaTVIraXpeuIIOfjj5uDK4uw32znWiDusGA==", + "version": "14.12.0", + "resolved": "https://registry.npmjs.org/@react-native-firebase/app/-/app-14.12.0.tgz", + "integrity": "sha512-r/4eP96U3StUs9t3QSlNwCIjjZpEAzI0u8GF8VlNNgrFxUKQXmwe63dRXQXVrI03MxnHgg87OpoWgIxhRlC9Rg==", "requires": { "@expo/config-plugins": "^4.1.5", "opencollective-postinstall": "^2.0.1", @@ -3215,18 +3302,18 @@ } }, "@react-native-firebase/crashlytics": { - "version": "14.11.1", - "resolved": "https://registry.npmjs.org/@react-native-firebase/crashlytics/-/crashlytics-14.11.1.tgz", - "integrity": "sha512-GayAXUZdtTOJli78nYqOhH6eVMgj1KxTGiL8vdp6CGknLRano3Y06VkOee4/BfQEKmXjbZhBqPQ5Q6IQaFXukA==", + "version": "14.12.0", + "resolved": "https://registry.npmjs.org/@react-native-firebase/crashlytics/-/crashlytics-14.12.0.tgz", + "integrity": "sha512-Qhcu8fYi9YjpBSwht/jTCW2aSyQzKhwc2PRqdp8frdVLsdgikOeGRElJ6DqUA8RgPtvsebAB1+v93lRfs6FTeQ==", "requires": { "@expo/config-plugins": "^4.1.5", "stacktrace-js": "^2.0.0" } }, "@react-native-picker/picker": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@react-native-picker/picker/-/picker-2.4.2.tgz", - "integrity": "sha512-0nY8638h1J3wKz6P3IJMpOoxJDdOj7Dk/K2hP/xpqP3KnIY0lmoqYlhyNihuyVPocDGajf6SA7LFFsFepQ56ag==" + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/@react-native-picker/picker/-/picker-2.4.8.tgz", + "integrity": "sha512-5NQ5XPo1B03YNqKFrV6h9L3CQaHlB80wd4ETHUEABRP2iLh7FHLVObX2GfziD+K/VJb8G4KZcZ23NFBFP1f7bg==" }, "@react-native/assets": { "version": "1.0.0", @@ -3244,15 +3331,16 @@ "integrity": "sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==" }, "@react-navigation/core": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.2.1.tgz", - "integrity": "sha512-3mjS6ujwGnPA/BC11DN9c2c42gFld6B6dQBgDedxP2djceXESpY2kVTTwISDHuqFnF7WjvRjsrDu3cKBX+JosA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.0.tgz", + "integrity": "sha512-tpc0Ak/DiHfU3LlYaRmIY7vI4sM/Ru0xCet6runLUh9aABf4wiLgxyFJ5BtoWq6xFF8ymYEA/KWtDhetQ24YiA==", "requires": { - "@react-navigation/routers": "^6.1.0", + "@react-navigation/routers": "^6.1.3", "escape-string-regexp": "^4.0.0", "nanoid": "^3.1.23", "query-string": "^7.0.0", - "react-is": "^16.13.0" + "react-is": "^16.13.0", + "use-latest-callback": "^0.1.5" }, "dependencies": { "escape-string-regexp": { @@ -3263,26 +3351,26 @@ } }, "@react-navigation/drawer": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@react-navigation/drawer/-/drawer-6.4.1.tgz", - "integrity": "sha512-CTVkiyhytUr4hUvWH8mEEGZ2BLcbFfWCHhanKisMBdq6qXMOIXoMX7AzOvjP8ojI1pvJZenvs8fopembGwUNUA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@react-navigation/drawer/-/drawer-6.5.0.tgz", + "integrity": "sha512-ma3qPjAfbwF07xd1w1gaWdcvYWmT4F+Z098q2J7XGbHw8yTGQYiNTnD1NMKerXwxM24vui2tMuFHA54F1rIvHQ==", "requires": { - "@react-navigation/elements": "^1.3.3", - "color": "^3.1.3", + "@react-navigation/elements": "^1.3.6", + "color": "^4.2.3", "warn-once": "^0.1.0" } }, "@react-navigation/elements": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.3.tgz", - "integrity": "sha512-Lv2lR7si5gNME8dRsqz57d54m4FJtrwHRjNQLOyQO546ZxO+g864cSvoLC6hQedQU0+IJnPTsZiEI2hHqfpEpw==" + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.6.tgz", + "integrity": "sha512-pNJ8R9JMga6SXOw6wGVN0tjmE6vegwPmJBL45SEMX2fqTfAk2ykDnlJHodRpHpAgsv0DaI8qX76z3A+aqKSU0w==" }, "@react-navigation/native": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.0.10.tgz", - "integrity": "sha512-H6QhLeiieGxNcAJismIDXIPZgf1myr7Og8v116tezIGmincJTOcWavTd7lPHGnMMXaZg94LlVtbaBRIx9cexqw==", + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.0.13.tgz", + "integrity": "sha512-CwaJcAGbhv3p3ECablxBkw8QBCGDWXqVRwQ4QbelajNW623m3sNTC9dOF6kjp8au6Rg9B5e0KmeuY0xWbPk79A==", "requires": { - "@react-navigation/core": "^6.2.1", + "@react-navigation/core": "^6.4.0", "escape-string-regexp": "^4.0.0", "fast-deep-equal": "^3.1.3", "nanoid": "^3.1.23" @@ -3296,18 +3384,18 @@ } }, "@react-navigation/native-stack": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.6.2.tgz", - "integrity": "sha512-pFMuzhxbPml5MBvJVAzHWoaUkQaefAOKpuUnAs/AxNQuHQwwnxRmDit1PQLuIPo7g7DlfwFXagDHE1R0tbnS8Q==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.1.tgz", + "integrity": "sha512-aOuJP97ge6NRz8wH6sDKfLTfdygGmraYh0apKrrVbGvMnflbPX4kpjQiAQcUPUpMeas0betH/Su8QubNL8HEkg==", "requires": { - "@react-navigation/elements": "^1.3.3", + "@react-navigation/elements": "^1.3.6", "warn-once": "^0.1.0" } }, "@react-navigation/routers": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.0.tgz", - "integrity": "sha512-8xJL+djIzpFdRW/sGlKojQ06fWgFk1c5jER9501HYJ12LF5DIJFr/tqBI2TJ6bk+y+QFu0nbNyeRC80OjRlmkA==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.3.tgz", + "integrity": "sha512-idJotMEzHc3haWsCh7EvnnZMKxvaS4YF/x2UyFBkNFiEFUaEo/1ioQU6qqmVLspdEv4bI/dLm97hQo7qD8Yl7Q==", "requires": { "nanoid": "^3.1.23" } @@ -3321,9 +3409,9 @@ } }, "@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" }, "@sideway/pinpoint": { "version": "2.0.0", @@ -3349,74 +3437,76 @@ } }, "@stripe/stripe-react-native": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/@stripe/stripe-react-native/-/stripe-react-native-0.13.1.tgz", - "integrity": "sha512-Y0Op6/ACJF+iKd121qObFnU1oTW2ZIhIs4E0d141oSTW4KMgIY4Mq1mRExt9ZNnp7ZgMOQ7BIRaInoF52xJIgQ==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@stripe/stripe-react-native/-/stripe-react-native-0.14.0.tgz", + "integrity": "sha512-6/QdRz39PG5RhuWWsSKgjDmi6/HqUjCnLequqKXtPN1hpxcyCIixYwYyJn7jshZnffV+o0WAR5KFB8SuI9r2hw==", "requires": { "@expo/config-plugins": "^4.1.4" } }, "@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.0.0.tgz", - "integrity": "sha512-MdPdhdWLtQsjd29Wa4pABdhWbaRMACdM1h31BY+c6FghTZqNGT7pEYdBoaGeKtdTOBC/XNFQaKVj+r/Ei2ryWA==" + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.0.tgz", + "integrity": "sha512-Cp1JR1IPrQNvPRbkfcPmax52iunBC+eQDyBce8feOIIbVH6ZpVhErYoJtPWRBj2rKi4Wi9HvCm1+L1UD6QlBmg==" }, "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.0.0.tgz", - "integrity": "sha512-aVdtfx9jlaaxc3unA6l+M9YRnKIZjOhQPthLKqmTXC8UVkBLDRGwPKo+r8n3VZN8B34+yVajzPTZ+ptTSuZZCw==" + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", + "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==" }, "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.0.0.tgz", - "integrity": "sha512-Ccj42ApsePD451AZJJf1QzTD1B/BOU392URJTeXFxSK709i0KUsGtbwyiqsKu7vsYxpTM0IA5clAKDyf9RCZyA==" + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", + "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==" }, "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.0.0.tgz", - "integrity": "sha512-88V26WGyt1Sfd1emBYmBJRWMmgarrExpKNVmI9vVozha4kqs6FzQJ/Kp5+EYli1apgX44518/0+t9+NU36lThQ==" + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.0.tgz", + "integrity": "sha512-XWm64/rSPUCQ+MFyA9lhMO+w8bOZvkTvovRIU1lpIy63ysPaVAFtxjQiZj+S7QaLaLGUXkSkf8WZsaN+QPo/gA==" }, "@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.0.0.tgz", - "integrity": "sha512-F7YXNLfGze+xv0KMQxrl2vkNbI9kzT9oDK55/kUuymh1ACyXkMV+VZWX1zEhSTfEKh7VkHVZGmVtHg8eTZ6PRg==" + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.0.tgz", + "integrity": "sha512-JIF2D2ltiWFGlTw2fJ9jJg1fNT9rWjOD2Cf0/xzeW6Z2LIRQTHcRHxpZq359+SRWtEPsCXEWV2Xmd+DMBj6dBw==" }, "@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.0.0.tgz", - "integrity": "sha512-+rghFXxdIqJNLQK08kwPBD3Z22/0b2tEZ9lKiL/yTfuyj1wW8HUXu4bo/XkogATIYuXSghVQOOCwURXzHGKyZA==" + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.0.tgz", + "integrity": "sha512-uuo0FfLP4Nu2zncOcoUFDzZdXWma2bxkTGk0etRThs4/PghvPIGaW8cPhCg6yJ8zpaauWcKV0wZtzKlJRCtVzg==" }, "@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.0.0.tgz", - "integrity": "sha512-VaphyHZ+xIKv5v0K0HCzyfAaLhPGJXSk2HkpYfXIOKb7DjLBv0soHDxNv6X0vr2titsxE7klb++u7iOf7TSrFQ==" + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.0.tgz", + "integrity": "sha512-VMRWyOmrV+DaEFPgP3hZMsFgs2g87ojs3txw0Rx8iz6Nf/E3UoHUwTqpkSCWd3Hsnc9gMOY9+wl6+/Ycleh1sw==" }, "@svgr/babel-plugin-transform-svg-component": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.2.0.tgz", - "integrity": "sha512-bhYIpsORb++wpsp91fymbFkf09Z/YEKR0DnFjxvN+8JHeCUD2unnh18jIMKnDJTWtvpTaGYPXELVe4OOzFI0xg==" + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.0.tgz", + "integrity": "sha512-b67Ul3SelaqvGEEG/1B3VJ03KUtGFgRQjRLCCjdttMQLcYa9l/izQFEclNFx53pNqhijUMNKHPhGMY/CWGVKig==" }, "@svgr/babel-preset": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.2.0.tgz", - "integrity": "sha512-4WQNY0J71JIaL03DRn0vLiz87JXx0b9dYm2aA8XHlQJQoixMl4r/soYHm8dsaJZ3jWtkCiOYy48dp9izvXhDkQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.0.tgz", + "integrity": "sha512-UWM98PKVuMqw2UZo8YO3erI6nF1n7/XBYTXBqR0QhZP7HTjYK6QxFNvPfIshddy1hBdzhVpkf148Vg8xiVOtyg==", "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.0.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^6.0.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.0.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.0.0", - "@svgr/babel-plugin-svg-dynamic-title": "^6.0.0", - "@svgr/babel-plugin-svg-em-dimensions": "^6.0.0", - "@svgr/babel-plugin-transform-react-native-svg": "^6.0.0", - "@svgr/babel-plugin-transform-svg-component": "^6.2.0" + "@svgr/babel-plugin-add-jsx-attribute": "^6.5.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^6.5.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.5.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.0", + "@svgr/babel-plugin-svg-dynamic-title": "^6.5.0", + "@svgr/babel-plugin-svg-em-dimensions": "^6.5.0", + "@svgr/babel-plugin-transform-react-native-svg": "^6.5.0", + "@svgr/babel-plugin-transform-svg-component": "^6.5.0" } }, "@svgr/core": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.2.1.tgz", - "integrity": "sha512-NWufjGI2WUyrg46mKuySfviEJ6IxHUOm/8a3Ph38VCWSp+83HBraCQrpEM3F3dB6LBs5x8OElS8h3C0oOJaJAA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.0.tgz", + "integrity": "sha512-jIbu36GMjfK8HCCQitkfVVeQ2vSXGfq0ef0GO9HUxZGjal6Kvpkk4PwpkFP+OyCzF+skQFT9aWrUqekT3pKF8w==", "requires": { - "@svgr/plugin-jsx": "^6.2.1", + "@babel/core": "^7.18.5", + "@svgr/babel-preset": "^6.5.0", + "@svgr/plugin-jsx": "^6.5.0", "camelcase": "^6.2.0", "cosmiconfig": "^7.0.1" }, @@ -3455,40 +3545,40 @@ } }, "@svgr/hast-util-to-babel-ast": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.2.1.tgz", - "integrity": "sha512-pt7MMkQFDlWJVy9ULJ1h+hZBDGFfSCwlBNW1HkLnVi7jUhyEXUaGYWi1x6bM2IXuAR9l265khBT4Av4lPmaNLQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.0.tgz", + "integrity": "sha512-PPy94U/EiPQ2dY0b4jEqj4QOdDRq6DG7aTHjpGaL8HlKSHkpU1DpjfywCXTJqtOdCo2FywjWvg0U2FhqMeUJaA==", "requires": { - "@babel/types": "^7.15.6", - "entities": "^3.0.1" + "@babel/types": "^7.18.4", + "entities": "^4.3.0" }, "dependencies": { "entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" } } }, "@svgr/plugin-jsx": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.2.1.tgz", - "integrity": "sha512-u+MpjTsLaKo6r3pHeeSVsh9hmGRag2L7VzApWIaS8imNguqoUwDq/u6U/NDmYs/KAsrmtBjOEaAAPbwNGXXp1g==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.0.tgz", + "integrity": "sha512-1CHMqOBKoNk/ZPU+iGXKcQPC6q9zaD7UOI99J+BaGY5bdCztcf5bZyi0QZSDRJtCQpdofeVv7XfBYov2mtl0Pw==", "requires": { - "@babel/core": "^7.15.5", - "@svgr/babel-preset": "^6.2.0", - "@svgr/hast-util-to-babel-ast": "^6.2.1", - "svg-parser": "^2.0.2" + "@babel/core": "^7.18.5", + "@svgr/babel-preset": "^6.5.0", + "@svgr/hast-util-to-babel-ast": "^6.5.0", + "svg-parser": "^2.0.4" } }, "@svgr/plugin-svgo": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.2.0.tgz", - "integrity": "sha512-oDdMQONKOJEbuKwuy4Np6VdV6qoaLLvoY86hjvQEgU82Vx1MSWRyYms6Sl0f+NtqxLI/rDVufATbP/ev996k3Q==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.0.tgz", + "integrity": "sha512-8Zv1Yyv6I7HlIqrqGFM0sDKQrhjbfNZJawR8UjIaVWSb0tKZP1Ra6ymhqIFu6FT6kDRD0Ct5NlQZ10VUujSspw==", "requires": { "cosmiconfig": "^7.0.1", "deepmerge": "^4.2.2", - "svgo": "^2.5.0" + "svgo": "^2.8.0" }, "dependencies": { "cosmiconfig": { @@ -4841,18 +4931,18 @@ } }, "@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz", + "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==", "dev": true, "requires": { "@babel/types": "^7.3.0" } }, "@types/bluebird": { - "version": "3.5.36", - "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.36.tgz", - "integrity": "sha512-HBNx4lhkxN7bx6P0++W8E289foSu8kO8GCk2unhuVggO+cE7rh9DhZUyPhUxNRG9m+5B5BTKxZQ5ZP92x/mx9Q==", + "version": "3.5.37", + "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.37.tgz", + "integrity": "sha512-g2qEd+zkfkTEudA2SrMAeAvY7CrFqtbsLILm2dT2VIeKTqMqVzcdfURlvu6FU3srRgbmXN1Srm94pg34EIehww==", "dev": true }, "@types/eslint-visitor-keys": { @@ -4893,11 +4983,6 @@ "hoist-non-react-statics": "^3.3.0" } }, - "@types/invariant": { - "version": "2.2.35", - "resolved": "https://registry.npmjs.org/@types/invariant/-/invariant-2.2.35.tgz", - "integrity": "sha512-DxX1V9P8zdJPYQat1gHyY0xj3efl8gnMVjiM9iCY6y27lj+PoQWkgjt8jDqmovPqULkKVpKRg8J36iQiA+EtEg==" - }, "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -4973,9 +5058,9 @@ "dev": true }, "@types/lodash": { - "version": "4.14.182", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz", - "integrity": "sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==", + "version": "4.14.186", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.186.tgz", + "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==", "dev": true }, "@types/mapbox__polyline": { @@ -4993,9 +5078,9 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" }, "@types/node": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", - "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" + "version": "18.11.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.4.tgz", + "integrity": "sha512-BxcJpBu8D3kv/GZkx/gSMz6VnTJREBj/4lbzYOQueUOELkt8WrO6zAcSPmp9uRPEW/d+lUO8QK0W2xnS1hEU0A==" }, "@types/node-fetch": { "version": "2.6.2", @@ -5031,9 +5116,9 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "@types/prettier": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", - "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", "dev": true }, "@types/prop-types": { @@ -5042,9 +5127,9 @@ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "@types/react": { - "version": "18.0.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.14.tgz", - "integrity": "sha512-x4gGuASSiWmo0xjDLpm5mPb52syZHJx02VKbqUKdLmKtAwIh63XClGsiTI1K6DO5q7ox4xAsQrU+Gl3+gGXF9Q==", + "version": "18.0.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.21.tgz", + "integrity": "sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -5052,12 +5137,25 @@ } }, "@types/react-native": { - "version": "0.67.11", - "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.67.11.tgz", - "integrity": "sha512-+cw8/0jf+sAFOTmyfzIsXTcjjkqF7hCZZT8sGZNxLFZ4/pzAFyd8IipKUwhu4PJ7hLS60A4SAQQt+Ehl1a6diw==", + "version": "0.67.16", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.67.16.tgz", + "integrity": "sha512-hY0Tn+wU3zMT7aqeowjSb/3G/toRq8HIUK5L43BaN6t5YzSUMpHa5Yj1Nx6b/pd75rIa2UwWfICjT0dIiyFTgg==", "dev": true, "requires": { - "@types/react": "*" + "@types/react": "^17" + }, + "dependencies": { + "@types/react": { + "version": "17.0.50", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.50.tgz", + "integrity": "sha512-ZCBHzpDb5skMnc1zFXAXnL3l1FAdi+xZvwxK+PkglMmBrwjpp9nKaWuEvrGnSifCJmBFGxZOOFuwC6KH/s0NuA==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + } } }, "@types/react-native-version-check": { @@ -5083,6 +5181,12 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, + "@types/semver": { + "version": "7.3.12", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.12.tgz", + "integrity": "sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A==", + "dev": true + }, "@types/shortid": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/shortid/-/shortid-0.0.29.tgz", @@ -5096,9 +5200,9 @@ "dev": true }, "@types/styled-components": { - "version": "5.1.25", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.25.tgz", - "integrity": "sha512-fgwl+0Pa8pdkwXRoVPP9JbqF0Ivo9llnmsm+7TCI330kbPIFd9qv1Lrhr37shf4tnxCOSu+/IgqM7uJXLWZZNQ==", + "version": "5.1.26", + "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.26.tgz", + "integrity": "sha512-KuKJ9Z6xb93uJiIyxo/+ksS7yLjS1KzG6iv5i78dhVg/X3u5t1H7juRWqVmodIdz6wGVaIApo1u01kmFRdJHVw==", "dev": true, "requires": { "@types/hoist-non-react-statics": "*", @@ -5120,16 +5224,15 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "@typescript-eslint/eslint-plugin": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz", - "integrity": "sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.40.1.tgz", + "integrity": "sha512-FsWboKkWdytGiXT5O1/R9j37YgcjO8MKHSUmWnIEjVaz0krHkplPnYi7mwdb+5+cs0toFNQb0HIrN7zONdIEWg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.29.0", - "@typescript-eslint/type-utils": "5.29.0", - "@typescript-eslint/utils": "5.29.0", + "@typescript-eslint/scope-manager": "5.40.1", + "@typescript-eslint/type-utils": "5.40.1", + "@typescript-eslint/utils": "5.40.1", "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", "regexpp": "^3.2.0", "semver": "^7.3.7", @@ -5137,9 +5240,9 @@ }, "dependencies": { "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -5161,31 +5264,31 @@ } }, "@typescript-eslint/parser": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.29.0.tgz", - "integrity": "sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.40.1.tgz", + "integrity": "sha512-IK6x55va5w4YvXd4b3VrXQPldV9vQTxi5ov+g4pMANsXPTXOcfjx08CRR1Dfrcc51syPtXHF5bgLlMHYFrvQtg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.29.0", - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/typescript-estree": "5.29.0", + "@typescript-eslint/scope-manager": "5.40.1", + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/typescript-estree": "5.40.1", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/types": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz", - "integrity": "sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.1.tgz", + "integrity": "sha512-Icg9kiuVJSwdzSQvtdGspOlWNjVDnF3qVIKXdJ103o36yRprdl3Ge5cABQx+csx960nuMF21v8qvO31v9t3OHw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz", - "integrity": "sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.1.tgz", + "integrity": "sha512-5QTP/nW5+60jBcEPfXy/EZL01qrl9GZtbgDZtDPlfW5zj/zjNrdI2B5zMUHmOsfvOr2cWqwVdWjobCiHcedmQA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/visitor-keys": "5.29.0", + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/visitor-keys": "5.40.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -5194,12 +5297,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz", - "integrity": "sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.1.tgz", + "integrity": "sha512-A2DGmeZ+FMja0geX5rww+DpvILpwo1OsiQs0M+joPWJYsiEFBLsH0y1oFymPNul6Z5okSmHpP4ivkc2N0Cgfkw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/types": "5.40.1", "eslint-visitor-keys": "^3.3.0" } }, @@ -5210,9 +5313,9 @@ "dev": true }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -5221,28 +5324,28 @@ } }, "@typescript-eslint/scope-manager": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz", - "integrity": "sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.40.1.tgz", + "integrity": "sha512-jkn4xsJiUQucI16OLCXrLRXDZ3afKhOIqXs4R3O+M00hdQLKR58WuyXPZZjhKLFCEP2g+TXdBRtLQ33UfAdRUg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/visitor-keys": "5.29.0" + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/visitor-keys": "5.40.1" }, "dependencies": { "@typescript-eslint/types": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz", - "integrity": "sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.1.tgz", + "integrity": "sha512-Icg9kiuVJSwdzSQvtdGspOlWNjVDnF3qVIKXdJ103o36yRprdl3Ge5cABQx+csx960nuMF21v8qvO31v9t3OHw==", "dev": true }, "@typescript-eslint/visitor-keys": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz", - "integrity": "sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.1.tgz", + "integrity": "sha512-A2DGmeZ+FMja0geX5rww+DpvILpwo1OsiQs0M+joPWJYsiEFBLsH0y1oFymPNul6Z5okSmHpP4ivkc2N0Cgfkw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/types": "5.40.1", "eslint-visitor-keys": "^3.3.0" } }, @@ -5255,14 +5358,63 @@ } }, "@typescript-eslint/type-utils": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz", - "integrity": "sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.40.1.tgz", + "integrity": "sha512-DLAs+AHQOe6n5LRraXiv27IYPhleF0ldEmx6yBqBgBLaNRKTkffhV1RPsjoJBhVup2zHxfaRtan8/YRBgYhU9Q==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.29.0", + "@typescript-eslint/typescript-estree": "5.40.1", + "@typescript-eslint/utils": "5.40.1", "debug": "^4.3.4", "tsutils": "^3.21.0" + }, + "dependencies": { + "@typescript-eslint/types": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.1.tgz", + "integrity": "sha512-Icg9kiuVJSwdzSQvtdGspOlWNjVDnF3qVIKXdJ103o36yRprdl3Ge5cABQx+csx960nuMF21v8qvO31v9t3OHw==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.1.tgz", + "integrity": "sha512-5QTP/nW5+60jBcEPfXy/EZL01qrl9GZtbgDZtDPlfW5zj/zjNrdI2B5zMUHmOsfvOr2cWqwVdWjobCiHcedmQA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/visitor-keys": "5.40.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.1.tgz", + "integrity": "sha512-A2DGmeZ+FMja0geX5rww+DpvILpwo1OsiQs0M+joPWJYsiEFBLsH0y1oFymPNul6Z5okSmHpP4ivkc2N0Cgfkw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.40.1", + "eslint-visitor-keys": "^3.3.0" + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } } }, "@typescript-eslint/types": { @@ -5288,9 +5440,9 @@ }, "dependencies": { "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -5299,33 +5451,35 @@ } }, "@typescript-eslint/utils": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.29.0.tgz", - "integrity": "sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.40.1.tgz", + "integrity": "sha512-a2TAVScoX9fjryNrW6BZRnreDUszxqm9eQ9Esv8n5nXApMW0zeANUYlwh/DED04SC/ifuBvXgZpIK5xeJHQ3aw==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.29.0", - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/typescript-estree": "5.29.0", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.40.1", + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/typescript-estree": "5.40.1", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" }, "dependencies": { "@typescript-eslint/types": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz", - "integrity": "sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.1.tgz", + "integrity": "sha512-Icg9kiuVJSwdzSQvtdGspOlWNjVDnF3qVIKXdJ103o36yRprdl3Ge5cABQx+csx960nuMF21v8qvO31v9t3OHw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz", - "integrity": "sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.1.tgz", + "integrity": "sha512-5QTP/nW5+60jBcEPfXy/EZL01qrl9GZtbgDZtDPlfW5zj/zjNrdI2B5zMUHmOsfvOr2cWqwVdWjobCiHcedmQA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.29.0", - "@typescript-eslint/visitor-keys": "5.29.0", + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/visitor-keys": "5.40.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -5334,12 +5488,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz", - "integrity": "sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.1.tgz", + "integrity": "sha512-A2DGmeZ+FMja0geX5rww+DpvILpwo1OsiQs0M+joPWJYsiEFBLsH0y1oFymPNul6Z5okSmHpP4ivkc2N0Cgfkw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/types": "5.40.1", "eslint-visitor-keys": "^3.3.0" } }, @@ -5367,9 +5521,9 @@ "dev": true }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -5387,9 +5541,15 @@ } }, "@xmldom/xmldom": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.5.tgz", - "integrity": "sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A==" + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.6.tgz", + "integrity": "sha512-HHXP9hskkFQHy8QxxUXkS7946FFIhYVfGqsk0WLwllmexN9x/+R4UBLvurHEuyXRfVEObVR8APuQehykLviwSQ==" + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true }, "abab": { "version": "2.0.6", @@ -5425,9 +5585,9 @@ } }, "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", "dev": true }, "acorn-globals": { @@ -5536,9 +5696,9 @@ } }, "appdirsjs": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.6.tgz", - "integrity": "sha512-D8wJNkqMCeQs3kLasatELsddox/Xqkhp+J07iXGyL54fVN7oc+nmNfYzGuCs1IEP6uBw+TfpuO3JKwc+lECy4w==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", + "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==" }, "argparse": { "version": "1.0.10", @@ -5573,11 +5733,6 @@ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==" }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha512-VW0FpCIhjZdarWjIz8Vpva7U95fl2Jn+b+mmFFMLn8PIVscOQcAgEznwUzTEuUHuqZqIxwzRlcaN/urTFFQoiw==" - }, "array-includes": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", @@ -5591,16 +5746,6 @@ "is-string": "^1.0.7" } }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha512-123XMszMB01QKVptpDQ7x1m1pP5NmJIG1kbl0JSPPRezvwQChxAN0Gvzo7rvR1IZ2tOL2tmiy7kY/KKgnpVVpg==" - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha512-8jR+StqaC636u7h3ye1co3lQRefgVVUQUhuAmRbDqIMeR2yuXzRvkCNQiQ5J/wbREmoBLNtp13dhaaVpZQDRUw==" - }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -5694,15 +5839,21 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "axe-core": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.2.tgz", - "integrity": "sha512-LVAaGp/wkkgYJcjmHsoKx4juT1aQvJyPcW09MLCjVTh3V2cc6PnyempiLMNH5iMdfIX/zdbjUx2KDjMLCTdPeA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz", + "integrity": "sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==", "dev": true }, "axios": { @@ -5828,14 +5979,6 @@ } } }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, "babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -5871,12 +6014,12 @@ } }, "babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", "semver": "^6.1.1" }, "dependencies": { @@ -5888,20 +6031,20 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" } }, "babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1" + "@babel/helper-define-polyfill-provider": "^0.3.3" } }, "babel-plugin-styled-components": { @@ -6180,14 +6323,14 @@ "dev": true }, "browserslist": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz", - "integrity": "sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "requires": { - "caniuse-lite": "^1.0.30001358", - "electron-to-chromium": "^1.4.164", - "node-releases": "^2.0.5", - "update-browserslist-db": "^1.0.0" + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" } }, "bser": { @@ -6279,14 +6422,14 @@ } }, "camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==" }, "caniuse-lite": { - "version": "1.0.30001358", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001358.tgz", - "integrity": "sha512-hvp8PSRymk85R20bsDra7ZTCpSVGN/PAz9pSAjPSjKC+rNmnUk5vCRgJwiTT/O4feQ/yu/drvZYpKxxhbFuChw==" + "version": "1.0.30001423", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001423.tgz", + "integrity": "sha512-09iwWGOlifvE1XuHokFMP7eR38a0JnajoyL3/i87c8ZjRWRrdKo1fqjNfugfBD0UDBIOz0U+jtNhJ0EPm1VleQ==" }, "capture-exit": { "version": "2.0.0", @@ -6537,9 +6680,9 @@ } }, "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==" }, "cliui": { "version": "6.0.0", @@ -6604,12 +6747,27 @@ } }, "color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "dependencies": { + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } } }, "color-convert": { @@ -6753,12 +6911,9 @@ } }, "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "requires": { - "safe-buffer": "~5.1.1" - } + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "copy-descriptor": { "version": "0.1.1", @@ -6772,25 +6927,17 @@ "dev": true }, "core-js-compat": { - "version": "3.23.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.2.tgz", - "integrity": "sha512-lrgZvxFwbQp9v7E8mX0rJ+JX7Bvh4eGULZXA1IAyjlsnWvCdw6TF8Tg6xtaSUSJMrSrMaLdpmk+V54LM1dvfOA==", + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.0.tgz", + "integrity": "sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==", "requires": { - "browserslist": "^4.20.4", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } + "browserslist": "^4.21.4" } }, "core-js-pure": { - "version": "3.23.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.2.tgz", - "integrity": "sha512-t6u7H4Ff/yZNk+zqTr74UjCcZ3k8ApBryeLLV4rYQd9aF3gqmjjGjjR44ENfeBMH8VVvSynIjAJ0mUuFhzQtrA==", + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.0.tgz", + "integrity": "sha512-LiN6fylpVBVwT8twhhluD9TzXmZQQsr2I2eIKtWNbZI1XMfBT7CV18itaN6RA7EtQd/SDdRx/wzvAShX2HvhQA==", "dev": true }, "core-util-is": { @@ -6820,6 +6967,14 @@ } } }, + "cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "requires": { + "node-fetch": "2.6.7" + } + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -6838,17 +6993,52 @@ "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==" }, "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "requires": { "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", "nth-check": "^2.0.1" - } - }, + }, + "dependencies": { + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + } + }, + "entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" + } + } + }, "css-to-react-native": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", @@ -6912,9 +7102,9 @@ } }, "csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, "d3-array": { "version": "1.2.4", @@ -6980,9 +7170,9 @@ } }, "dayjs": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz", - "integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A==" + "version": "1.11.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", + "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==" }, "debug": { "version": "4.3.4", @@ -7000,7 +7190,7 @@ "decamelize-keys": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "requires": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" @@ -7009,20 +7199,20 @@ "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==" + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" } } }, "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz", + "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==", "dev": true }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==" + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, "dedent": { "version": "0.6.0", @@ -7054,9 +7244,9 @@ "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==" }, "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "requires": { "clone": "^1.0.2" } @@ -7223,9 +7413,9 @@ } }, "earcut": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.3.tgz", - "integrity": "sha512-iRDI1QeCQIhMCZk48DRDMVgQSSBDmbzzNhnxIo+pwx3swkfjMh6vh0nWLq1NdvGHLKH6wIrAM3vQWeTj6qeoug==" + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" }, "ee-first": { "version": "1.1.1", @@ -7233,9 +7423,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "electron-to-chromium": { - "version": "1.4.167", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.167.tgz", - "integrity": "sha512-lPHuHXBwpkr4RcfaZBKm6TKOWG/1N9mVggUpP4fY3l1JIUU2x4fkM8928smYdZ5lF+6KCTAxo1aK9JmqT+X71Q==" + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" }, "emittery": { "version": "0.7.2", @@ -7297,31 +7487,32 @@ } }, "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", + "get-intrinsic": "^1.1.3", "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", + "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", + "object-inspect": "^1.12.2", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", + "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", "string.prototype.trimend": "^1.0.5", "string.prototype.trimstart": "^1.0.5", "unbox-primitive": "^1.0.2" @@ -7430,13 +7621,15 @@ } }, "eslint": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", - "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", + "version": "8.26.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.26.0.tgz", + "integrity": "sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -7446,18 +7639,21 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -7468,8 +7664,7 @@ "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "dependencies": { "ansi-regex": { @@ -7583,6 +7778,16 @@ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, "glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -7593,9 +7798,9 @@ } }, "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -7626,6 +7831,33 @@ "argparse": "^2.0.1" } }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -7741,13 +7973,12 @@ } }, "eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", "dev": true, "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0" + "debug": "^3.2.7" }, "dependencies": { "debug": { @@ -7758,55 +7989,6 @@ "requires": { "ms": "^2.1.1" } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true } } }, @@ -7874,23 +8056,24 @@ "dev": true }, "eslint-plugin-jsx-a11y": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", - "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", + "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", "dev": true, "requires": { - "@babel/runtime": "^7.16.3", + "@babel/runtime": "^7.18.9", "aria-query": "^4.2.2", - "array-includes": "^3.1.4", + "array-includes": "^3.1.5", "ast-types-flow": "^0.0.7", - "axe-core": "^4.3.5", + "axe-core": "^4.4.3", "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.7", + "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "has": "^1.0.3", - "jsx-ast-utils": "^3.2.1", + "jsx-ast-utils": "^3.3.2", "language-tags": "^1.0.5", - "minimatch": "^3.0.4" + "minimatch": "^3.1.2", + "semver": "^6.3.0" }, "dependencies": { "emoji-regex": { @@ -7898,6 +8081,12 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -7911,9 +8100,9 @@ } }, "eslint-plugin-react": { - "version": "7.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.0.tgz", - "integrity": "sha512-RgwH7hjW48BleKsYyHK5vUAvxtE9SMPDKmcPRQgtRCYaZA0XQPt5FSkrU3nhz5ifzMZcA8opwmRJ2cmOO8tr5A==", + "version": "7.31.10", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", + "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", "dev": true, "requires": { "array-includes": "^3.1.5", @@ -8090,12 +8279,12 @@ } }, "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", "dev": true, "requires": { - "acorn": "^8.7.1", + "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" }, @@ -8236,7 +8425,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -8453,9 +8642,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -8487,9 +8676,9 @@ } }, "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "requires": { "bser": "2.1.1" } @@ -8584,6 +8773,15 @@ "path-exists": "^4.0.0" } }, + "find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "requires": { + "micromatch": "^4.0.2" + } + }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -8606,9 +8804,9 @@ } }, "flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, "flow-parser": { @@ -8622,9 +8820,9 @@ "integrity": "sha512-eNMNr5exLoavuAMhIUVsOKF79SWd/zG104ef6sxBTSw+cZc6BXdQXDvYcGvp0VbxVVSp1XDUNoz7mg1xMtSznA==" }, "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" }, "for-in": { "version": "1.0.2", @@ -8747,9 +8945,9 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -8838,15 +9036,21 @@ } }, "google-libphonenumber": { - "version": "3.2.29", - "resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.29.tgz", - "integrity": "sha512-eRVj4HIcRR+MGPDlrt1n8/nORoUMhEj3Wns5f61uDaSrLeFdXdKjBhoEOkiMe2pnmOY+UzI1j8O8umjhzPYs1A==" + "version": "3.2.31", + "resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.31.tgz", + "integrity": "sha512-l3bzAkfN4ITICKvuqEiY7JN06RxDAviOoKMtD2KfGYjGK3btPO8Xav7k0fgmf1Ud/pEm523yBh1/s/xDtKEvnw==" }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", @@ -9004,7 +9208,8 @@ "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true }, "html-parse-stringify": { "version": "3.0.1", @@ -9061,6 +9266,14 @@ "@babel/runtime": "^7.12.0" } }, + "i18next-http-backend": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.1.1.tgz", + "integrity": "sha512-jByfUCDVgQ8+/Wens7queQhYYvMcGTW/lR4IJJNEDDXnmqjLrwi8ubXKpmp76/JIWEZHffNdWqnxFJcTVGeaOw==", + "requires": { + "cross-fetch": "3.1.5" + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -9237,9 +9450,9 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, "is-ci": { @@ -9252,9 +9465,9 @@ } }, "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "requires": { "has": "^1.0.3" } @@ -9311,8 +9524,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "optional": true + "dev": true }, "is-extendable": { "version": "0.1.1", @@ -9370,6 +9582,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -9482,9 +9700,9 @@ "dev": true }, "istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "requires": { "@babel/core": "^7.12.3", @@ -9565,9 +9783,9 @@ } }, "istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -11588,9 +11806,9 @@ } }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -11638,9 +11856,9 @@ } }, "ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==" + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz", + "integrity": "sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog==" }, "color-convert": { "version": "2.0.1", @@ -11887,9 +12105,9 @@ "dev": true }, "joi": { - "version": "17.6.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", - "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz", + "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==", "requires": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", @@ -11898,6 +12116,12 @@ "@sideway/pinpoint": "^2.0.0" } }, + "js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -12172,9 +12396,9 @@ } }, "ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true } } @@ -12222,19 +12446,14 @@ "graceful-fs": "^4.1.6" } }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==" - }, "jsx-ast-utils": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.1.tgz", - "integrity": "sha512-pxrjmNpeRw5wwVeWyEAk7QJu2GnBO3uzPFmHCKJJFPKK2Cy0cWL23krGtLdnMmbIi6/FjlrQpPyfQI19ByPOhQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", "dev": true, "requires": { "array-includes": "^3.1.5", - "object.assign": "^4.1.2" + "object.assign": "^4.1.3" } }, "jwt-decode": { @@ -12261,15 +12480,24 @@ "graceful-fs": "^4.1.9" } }, + "klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11" + } + }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" }, "language-subtag-registry": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", - "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", "dev": true }, "language-tags": { @@ -12297,15 +12525,23 @@ } }, "libphonenumber-js": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.7.tgz", - "integrity": "sha512-jZXLCCWMe1b/HXkjiLeYt2JsytZMcqH26jLFIdzFDFF0xvSUWrYKyvPlyPG+XJzEyKUFbcZxLdWGMwQsWaHDxQ==" + "version": "1.10.14", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.14.tgz", + "integrity": "sha512-McGS7GV/WjJ2KjfOGhJU1oJn29RYeo7Q+RpANRbUNMQ9gj5XArpbjurSuyYPTejFwbaUojstQ4XyWCrAzGOUXw==" }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "requires": { + "uc.micro": "^1.0.1" + } + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -12392,14 +12628,14 @@ } }, "lottie-ios": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/lottie-ios/-/lottie-ios-3.2.3.tgz", - "integrity": "sha512-mubYMN6+1HXa8z3EJKBvNBkl4UoVM4McjESeB2PgvRMSngmJtC5yUMRdhbbrIAn5Liu3hFGao/14s5hQIgtkRQ==" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/lottie-ios/-/lottie-ios-3.4.0.tgz", + "integrity": "sha512-qnV8UrawwnBRf5V0no2yxlPUE69vzfFqpxEEXGTZhb1/WX1xewqVNYvtbguqwQkdu9IT9D5WC1U9CHZ1KbkGDw==" }, "lottie-react-native": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-5.1.3.tgz", - "integrity": "sha512-Ho+oM+D3if85I2EBn8c17tcg7pc880Sp/DOeNW5aWiNtlCJKX/kmlhoM19NLqjzkHEm96fTkTcTy82ZwYU3Kbg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-5.1.4.tgz", + "integrity": "sha512-Lu6mSG92Wck+vXEX6gfj/9ciqqoz0tJQZqgX0SumGvX/oZu4MbKO/oLApyHdy2V9Rb7qvwF9whOtitADxTswPA==", "requires": { "invariant": "^2.2.2", "react-native-safe-modules": "^1.0.3" @@ -12448,16 +12684,40 @@ "object-visit": "^1.0.0" } }, + "markdown-it": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", + "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "requires": { + "argparse": "^1.0.7", + "entities": "~2.0.0", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "entities": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" + } + } + }, "mcc-mnc-list": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/mcc-mnc-list/-/mcc-mnc-list-1.1.8.tgz", - "integrity": "sha512-+I8YA4iTnEP/qqGPfW7bf0byViPugeX/CyYGxprjr9kiXot0j1i5zPri8kAp0aNAwHXGj8Nam2OfRc5L5E6EbA==" + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/mcc-mnc-list/-/mcc-mnc-list-1.1.9.tgz", + "integrity": "sha512-hJO7H58sc6h4KnekWqs/N2K3SH3DhvScq3oOUkoQL6yernP9mOGQGl/kb+cR//69jxXECtE48D90njB2yEYbRA==" }, "mdn-data": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, "meow": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/meow/-/meow-6.1.1.tgz", @@ -12648,9 +12908,9 @@ } }, "ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==" + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" } } }, @@ -12733,9 +12993,9 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==" + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" } } }, @@ -12927,9 +13187,9 @@ } }, "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" }, "minimist-options": { "version": "4.1.0", @@ -12976,6 +13236,11 @@ } } }, + "mixpanel-react-native": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/mixpanel-react-native/-/mixpanel-react-native-2.2.1.tgz", + "integrity": "sha512-WdirYiagtxZLA06PxdT1Q5C1/J3q6FybarATwPWPI9HF4jzhykZgL0IpvoOD8OFnWffglw+FjIy0VZFW7VEX5w==" + }, "mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -12993,9 +13258,9 @@ } }, "moment": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", - "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==" + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" }, "moment-timezone": { "version": "0.5.37", @@ -13011,9 +13276,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", "dev": true, "optional": true }, @@ -13121,9 +13386,9 @@ } }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "optional": true, "requires": { @@ -13150,9 +13415,9 @@ } }, "node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, "node-stream-zip": { "version": "1.15.0", @@ -13205,9 +13470,9 @@ "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" }, "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", + "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", "dev": true }, "ob1": { @@ -13277,13 +13542,14 @@ } }, "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" } }, @@ -13491,6 +13757,185 @@ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==" }, + "patch-package": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-7.0.0.tgz", + "integrity": "sha512-eYunHbnnB2ghjTNc5iL1Uo7TsGMuXk0vibX3RFcE/CdVdXzmdbMsG/4K4IgoSuIkLTI5oHrMQk4+NkFqSed0BQ==", + "dev": true, + "requires": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "ci-info": "^3.7.0", + "cross-spawn": "^7.0.3", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^9.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33", + "yaml": "^2.2.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "yaml": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "dev": true + } + } + }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", @@ -13582,18 +14027,18 @@ } }, "plist": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz", - "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz", + "integrity": "sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA==", "requires": { "base64-js": "^1.5.1", - "xmlbuilder": "^9.0.7" + "xmlbuilder": "^15.1.1" }, "dependencies": { "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==" + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==" } } }, @@ -13733,9 +14178,9 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "promise": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", - "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", "requires": { "asap": "~2.0.6" } @@ -13765,9 +14210,9 @@ "integrity": "sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==" }, "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, "pump": { @@ -13796,6 +14241,12 @@ "strict-uri-encode": "^2.0.0" } }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -13840,33 +14291,32 @@ "integrity": "sha512-YWBB2feVQF79t5u2raMPHlZ8975Jds+guCvkWVC4kRLDlSCouLsYpQm4DGSqPeHvoHYVVcDfqNayLZAXQmnxnw==" }, "react-devtools-core": { - "version": "4.24.7", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.24.7.tgz", - "integrity": "sha512-OFB1cp8bsh5Kc6oOJ3ZzH++zMBtydwD53yBYa50FKEGyOOdgdbJ4VsCsZhN/6F5T4gJfrZraU6EKda8P+tMLtg==", + "version": "4.27.1", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.27.1.tgz", + "integrity": "sha512-qXhcxxDWiFmFAOq48jts9YQYe1+wVoUXzJTlY4jbaATzyio6dd6CUGu3dXBhREeVgpZ+y4kg6vFJzIOZh6vY2w==", "requires": { "shell-quote": "^1.6.1", "ws": "^7" }, "dependencies": { "ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==" + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" } } }, "react-freeze": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.0.tgz", - "integrity": "sha512-yQaiOqDmoKqks56LN9MTgY06O0qQHgV4FUrikH357DydArSZHQhl0BJFqGKIZoTqi8JizF9Dxhuk1FIZD6qCaw==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.3.tgz", + "integrity": "sha512-ZnXwLQnGzrDpHBHiC56TXFXvmolPeMjTn1UOm610M4EXGzbEDR7oOIyS2ZiItgbs6eZc4oU/a0hpk8PrcKvv5g==" }, "react-i18next": { - "version": "11.17.2", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.17.2.tgz", - "integrity": "sha512-/HG4XSResWDY450cFmoUqLgCYDu8VYMFISGcMnZlxRSV05naj3+F7DoebwnPu6z/akA3Wd0Xe7KGTYdywL9z9g==", + "version": "11.18.6", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.18.6.tgz", + "integrity": "sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA==", "requires": { "@babel/runtime": "^7.14.5", - "html-escaper": "^2.0.2", "html-parse-stringify": "^3.0.1" } }, @@ -13876,9 +14326,9 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "react-native": { - "version": "0.68.1", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.68.1.tgz", - "integrity": "sha512-5gfvslo5NO2Ece2k/q41eVOK3ca4u1QAOf+qM+auvOiUA4/QR5Yr0WfSGbRpUr2GaFgv7qP11F4+elCravg7uQ==", + "version": "0.68.5", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.68.5.tgz", + "integrity": "sha512-t3kiQ/gumFV+0r/NRSIGtYxanjY4da0utFqHgkMcRPJVwXFWC0Fr8YiOeRGYO1dp8EfrSsOjtfWic/inqVYlbQ==", "requires": { "@jest/create-cache-key-function": "^27.0.1", "@react-native-community/cli": "^7.0.3", @@ -13900,9 +14350,9 @@ "metro-source-map": "0.67.0", "nullthrows": "^1.1.1", "pretty-format": "^26.5.2", - "promise": "^8.0.3", + "promise": "^8.2.0", "react-devtools-core": "^4.23.0", - "react-native-codegen": "^0.0.13", + "react-native-codegen": "^0.0.18", "react-native-gradle-plugin": "^0.0.6", "react-refresh": "^0.4.0", "react-shallow-renderer": "16.14.1", @@ -13915,15 +14365,15 @@ }, "dependencies": { "@react-native-community/cli": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-7.0.3.tgz", - "integrity": "sha512-WyJOA829KAhU1pw2MDQt0YhOS9kyR2KqyqgJyTuQhzFVCBPX4F5aDEkZYYn4jdldaDHCPrLJ3ho3gxYTXy+x7w==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-7.0.4.tgz", + "integrity": "sha512-W9nACtHWaLJZIP48cQmhQOnl5/7maoWE1Aji67MrLeIoB+ScNTJxaHfV4fMcklD6B6XEhaKokPACRZWm36zAog==", "requires": { "@react-native-community/cli-debugger-ui": "^7.0.3", - "@react-native-community/cli-hermes": "^6.3.0", - "@react-native-community/cli-plugin-metro": "^7.0.3", - "@react-native-community/cli-server-api": "^7.0.3", - "@react-native-community/cli-tools": "^6.2.0", + "@react-native-community/cli-hermes": "^6.3.1", + "@react-native-community/cli-plugin-metro": "^7.0.4", + "@react-native-community/cli-server-api": "^7.0.4", + "@react-native-community/cli-tools": "^6.2.1", "@react-native-community/cli-types": "^6.0.0", "appdirsjs": "^1.2.4", "chalk": "^4.1.2", @@ -14021,9 +14471,9 @@ "integrity": "sha512-MnE0cUUDXBqp6MVB4jcF7OnzYNNUsmVJ+b3or9DiqLLGNW4Qfdx7+sGUgHhLbPVeIz55ZuU/uEpZO33CMy5uug==" }, "react-native-codegen": { - "version": "0.0.13", - "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.0.13.tgz", - "integrity": "sha512-rCh1P+s0Q4N6vNgS97ckafbhJRztz22+0l0VZoyQC06F07J98kI5cUByH0ATypPRIdpkMbAZc59DoPdDFc01bg==", + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.0.18.tgz", + "integrity": "sha512-XPI9aVsFy3dvgDZvyGWrFnknNiyb22kg5nHgxa0vjWTH9ENLBgVRZt9A64xHZ8BYihH+gl0p/1JNOCIEUzRPBg==", "requires": { "@babel/parser": "^7.14.0", "flow-parser": "^0.121.0", @@ -14032,9 +14482,9 @@ } }, "react-native-config": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/react-native-config/-/react-native-config-1.4.6.tgz", - "integrity": "sha512-cSLdOfva2IPCxh6HjHN1IDVW9ratAvNnnAUx6ar2Byvr8KQU7++ysdFYPaoNVuJURuYoAKgvjab8ZcnwGZIO6Q==" + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/react-native-config/-/react-native-config-1.4.11.tgz", + "integrity": "sha512-PdBFnfR3pljUNrJu4B2wiJ9TbAiz1J1WcG5KP8AFBqZi8ve5MV/CTCDnANaGrqhOxkBDJV73D/SrMENHe7TKBg==" }, "react-native-country-picker-modal": { "version": "2.0.0", @@ -14062,29 +14512,50 @@ } }, "react-native-date-picker": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/react-native-date-picker/-/react-native-date-picker-4.2.2.tgz", - "integrity": "sha512-x0jxWbJXKDXivRDwsUx58tKOxe719XoVqqq6UzMSYSsTiPL2i13r7PyDxop3f3et/62qbcMgeswl+/CLdX6+Eg==" + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/react-native-date-picker/-/react-native-date-picker-4.2.6.tgz", + "integrity": "sha512-qnSLefvCInFp1etQ27AsDzpCJgvi0Q0eIYRtIzjBp5WC5hzINIY7WWeQESAA/QUPbwFJU7Vk06ouQc51dC1Qaw==", + "requires": { + "prop-types": "^15.8.1" + } }, "react-native-device-info": { "version": "8.7.1", "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-8.7.1.tgz", "integrity": "sha512-cVMZztFa2Qn6qpQa601W61CtUwZQ1KXfqCOeltejAWEXmgIWivC692WGSdtGudj4upSi1UgMSaGcvKjfcpdGjg==" }, + "react-native-draglist": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/react-native-draglist/-/react-native-draglist-3.5.1.tgz", + "integrity": "sha512-Xe5ZIJfLMdwVbvKg3ji4gndj4++eQjpdqKAXPztFyR5CM6ZAF593G40XLdTGQpuVOKVwY7d0NxrTdG2Z+xpewQ==" + }, "react-native-exit-app": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/react-native-exit-app/-/react-native-exit-app-1.1.0.tgz", "integrity": "sha512-Spne19zfMfJvnUTX909EHUqWMk69rATtLJq9XMBGpNSHhx0M7v5yetx2Z87egBhLOqQm+CWfD/oxWzDG8rbIQA==" }, "react-native-fast-image": { - "version": "8.5.11", - "resolved": "https://registry.npmjs.org/react-native-fast-image/-/react-native-fast-image-8.5.11.tgz", - "integrity": "sha512-cNW4bIJg3nvKaheG8vGMfqCt5LMWX9MS5+wMudgKIHbGO51spRr4sgnlhVgwHLcZ5aeNOVJ8CPRxDIWKRq/0QA==" + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/react-native-fast-image/-/react-native-fast-image-8.6.1.tgz", + "integrity": "sha512-ILuP7EuakqHNzTr8ZbumhuxG4tE/wGQ66z4nEEuzc0FlqY6rYaPsnq/UD2ahoyFj6QP1WvA2RIK3odib+VcqWg==" + }, + "react-native-fit-image": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/react-native-fit-image/-/react-native-fit-image-1.5.5.tgz", + "integrity": "sha512-Wl3Vq2DQzxgsWKuW4USfck9zS7YzhvLNPpkwUUCF90bL32e1a0zOVQ3WsJILJOwzmPdHfzZmWasiiAUNBkhNkg==", + "requires": { + "prop-types": "^15.5.10" + } + }, + "react-native-geolocation-service": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/react-native-geolocation-service/-/react-native-geolocation-service-5.3.1.tgz", + "integrity": "sha512-LTXPtPNmrdhx+yeWG47sAaCgQc3nG1z+HLLHlhK/5YfOgfLcAb9HAkhREPjQKPZOUx8pKZMIpdGFUGfJYtimXQ==" }, "react-native-gesture-handler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.4.2.tgz", - "integrity": "sha512-K3oMiQV7NOVB5RvNlxkyJxU1Gn6m1cYu53MoFA542FVDSTR491d1eQkWDdqy4lW52rfF7IK7eE1LCi+kTJx7jw==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.12.1.tgz", + "integrity": "sha512-deqh36bw82CFUV9EC4tTo2PP1i9HfCOORGS3Zmv71UYhEZEHkzZv18IZNPB+2Awzj45vLIidZxGYGFxHlDSQ5A==", "requires": { "@egjs/hammerjs": "^2.0.17", "hoist-non-react-statics": "^3.3.0", @@ -14099,9 +14570,9 @@ "integrity": "sha512-eIlgtsmDp1jLC24dRn43hB3kEcZVqx6DUQbR0N1ABXGnMEafm9I3V3dUUeD1vh+Dy5WqijSoEwLNUPLgu5zDMg==" }, "react-native-image-picker": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/react-native-image-picker/-/react-native-image-picker-4.8.4.tgz", - "integrity": "sha512-Mjh2j/sddyolb16EpmprWzbtyeFvW8Xgzr/8WNi9d6bR2FC/kL78cY/a+7Yzujg5ZDtT1MWys+eWw/qtfwgGiw==" + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/react-native-image-picker/-/react-native-image-picker-4.10.0.tgz", + "integrity": "sha512-QNK4ZnFLD+BdiM1QL1jh9GUALhRXm3MV97crhnTCSMv50H6E4tq3ozgfyxF5uKz0cECbNkWswg4sjgqZKEJtww==" }, "react-native-image-resizer": { "version": "1.4.5", @@ -14123,9 +14594,14 @@ } }, "react-native-linear-gradient": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/react-native-linear-gradient/-/react-native-linear-gradient-2.5.6.tgz", - "integrity": "sha512-HDwEaXcQIuXXCV70O+bK1rizFong3wj+5Q/jSyifKFLg0VWF95xh8XQgfzXwtq0NggL9vNjPKXa016KuFu+VFg==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/react-native-linear-gradient/-/react-native-linear-gradient-2.6.2.tgz", + "integrity": "sha512-Z8Xxvupsex+9BBFoSYS87bilNPWcRfRsGC0cpJk72Nxb5p2nEkGSBv73xZbEHnW2mUFvP+huYxrVvjZkr/gRjQ==" + }, + "react-native-localize": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/react-native-localize/-/react-native-localize-2.2.4.tgz", + "integrity": "sha512-gVmbyAEQQnBQ8vKlAQchFfIISeId3qT6Lc7LHmKF39nsYWX9KN4PHuG6Hk+7gduMI6IHKeZGKcLsOdh6wvN6cg==" }, "react-native-location": { "version": "2.5.0", @@ -14133,18 +14609,23 @@ "integrity": "sha512-myT54tZuFmN6d5RruMVfoa8eY+voJWkSd73xUVhjzJDnQr5uu5MFoH7hMg3trHF1CAkaY/2gIneOspUdGxv59Q==" }, "react-native-maps": { - "version": "0.31.1", - "resolved": "https://registry.npmjs.org/react-native-maps/-/react-native-maps-0.31.1.tgz", - "integrity": "sha512-vipeOPykqLRMCLcLUCZEB+cTdNSlq88NLb0jChY4UGTY5fgOS7GYWkfswy6bW1ayTRLxJS3zpMGFDUY59/ZrXA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/react-native-maps/-/react-native-maps-1.4.0.tgz", + "integrity": "sha512-asP6oVx9uF4E9U22j40q0AcSJ4v3hPBPCg1kPdlbckGXGj+z8dwwdPkQi3hUpl94odlR//v60Sw6PAEYv8zSxw==", "requires": { - "@types/geojson": "^7946.0.7", - "deprecated-react-native-prop-types": "^2.3.0" + "@types/geojson": "^7946.0.8" } }, - "react-native-mixpanel": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/react-native-mixpanel/-/react-native-mixpanel-1.2.5.tgz", - "integrity": "sha512-Xbpcj99Wo4NJa/Idp/nLY5m9r/H+v7szRWfQGxZGxDFiqz3VPs87c7hTMQP9OpgId6BFycxWGbkJOptiDSKqQQ==" + "react-native-markdown-display": { + "version": "7.0.0-alpha.2", + "resolved": "https://registry.npmjs.org/react-native-markdown-display/-/react-native-markdown-display-7.0.0-alpha.2.tgz", + "integrity": "sha512-Od1a4wJEcVGwO1bh02sHivsEkKKpu99+ew/OtmVTPRmfT8V3B0aTut7k7ICV0Vej9F4ZjylRHvm28/maYUBeGw==", + "requires": { + "css-to-react-native": "^3.0.0", + "markdown-it": "^10.0.0", + "prop-types": "^15.7.2", + "react-native-fit-image": "^1.5.5" + } }, "react-native-modal": { "version": "13.0.1", @@ -14156,9 +14637,9 @@ } }, "react-native-onesignal": { - "version": "4.3.11", - "resolved": "https://registry.npmjs.org/react-native-onesignal/-/react-native-onesignal-4.3.11.tgz", - "integrity": "sha512-sBIFu6/+I/fXeH+GAOP1zUYUy2eJmchPOPj7RRDsArURTGcSR5jcGgoFjo9b6BT2tHkIeo39GkeojQD7pIvPzA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/react-native-onesignal/-/react-native-onesignal-4.4.1.tgz", + "integrity": "sha512-vbS0E2TO5KljT0l1nAce04aOZF6FLv9oUaliffhFQR92oTHAbwNmwwMpxZF6CIcNANDDKkYtKPw5h7baUxmQdw==", "requires": { "invariant": "^2.2.2" } @@ -14194,19 +14675,23 @@ } }, "react-native-reanimated": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-2.8.0.tgz", - "integrity": "sha512-kJvf/UWLBMaGCs9X66MKq5zdFMgwx8D0nHnolbHR7s8ZnbLdb7TlQ/yuzIXqn/9wABfnwtNRI3CyaP1aHWMmZg==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-2.17.0.tgz", + "integrity": "sha512-bVy+FUEaHXq4i+aPPqzGeor1rG4scgVNBbBz21ohvC7iMpB9IIgvGsmy1FAoodZhZ5sa3EPF67Rcec76F1PXlQ==", "requires": { "@babel/plugin-transform-object-assign": "^7.16.7", "@babel/preset-typescript": "^7.16.7", - "@types/invariant": "^2.2.35", "invariant": "^2.2.4", "lodash.isequal": "^4.5.0", "setimmediate": "^1.0.5", "string-hash-64": "^1.0.3" } }, + "react-native-recaptcha-that-works": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/react-native-recaptcha-that-works/-/react-native-recaptcha-that-works-1.3.2.tgz", + "integrity": "sha512-UmvgbMXteiHsFCg7UOLtiHSUNfm8Xr89SV9fSmv52LPz+hj/PAJRvPJvTkRwEy500xuFXQA9TzSuF+TPNwd/fQ==" + }, "react-native-redash": { "version": "16.3.0", "resolved": "https://registry.npmjs.org/react-native-redash/-/react-native-redash-16.3.0.tgz", @@ -14223,9 +14708,9 @@ "integrity": "sha512-pvJNU3NwQk6bCG2gOWcQpZ4IxhtELB0K9gzmtixfsaTFbW1UXXHkJNjk1kHazcbH5hrD7QbUkR63fsAVh8X4VQ==" }, "react-native-safe-area-context": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.3.1.tgz", - "integrity": "sha512-cEr7fknJCToTrSyDCVNg0GRdRMhyLeQa2NZwVCuzEQcWedOw/59ExomjmzCE4rxrKXs6OJbyfNtFRNyewDaHuA==" + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.6.3.tgz", + "integrity": "sha512-3CeZM9HFXkuqiU9HqhOQp1yxhXw6q99axPWrT+VJkITd67gnPSU03+U27Xk2/cr9XrLUnakM07kj7H0hdPnFiQ==" }, "react-native-safe-modules": { "version": "1.0.3", @@ -14236,14 +14721,19 @@ } }, "react-native-screens": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.13.1.tgz", - "integrity": "sha512-xcrnuUs0qUrGpc2gOTDY4VgHHADQwp80mwR1prU/Q0JqbZN5W3koLhuOsT6FkSRKjR5t40l+4LcjhHdpqRB2HA==", + "version": "3.18.2", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.18.2.tgz", + "integrity": "sha512-ANUEuvMUlsYJ1QKukEhzhfrvOUO9BVH9Nzg+6eWxpn3cfD/O83yPBOF8Mx6x5H/2+sMy+VS5x/chWOOo/U7QJw==", "requires": { "react-freeze": "^1.0.0", "warn-once": "^0.1.0" } }, + "react-native-select-dropdown": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/react-native-select-dropdown/-/react-native-select-dropdown-3.0.3.tgz", + "integrity": "sha512-WjR3udyYHo+7O6DvQfC0CCrqxZiKZ7L9RiZ1K5q06Hy7mGpm8SlWyec27bRyPoVv/7+tgrBnOXLMwAhmZCbGTg==" + }, "react-native-skeleton-content-nonexpo": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/react-native-skeleton-content-nonexpo/-/react-native-skeleton-content-nonexpo-1.0.13.tgz", @@ -14262,12 +14752,12 @@ } }, "react-native-svg": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-12.3.0.tgz", - "integrity": "sha512-ESG1g1j7/WLD7X3XRFTQHVv0r6DpbHNNcdusngAODIxG88wpTWUZkhcM3A2HJTb+BbXTFDamHv7FwtRKWQ/ALg==", + "version": "12.4.4", + "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-12.4.4.tgz", + "integrity": "sha512-LpcNlEVCURexqPAvQ9ne8KrPVfYz0wIDygwud8VMRmXLezysXzyQN/DTsjm1BO9lIfYp55WQsr3u3yW/vk6iiA==", "requires": { - "css-select": "^4.2.1", - "css-tree": "^1.0.0-alpha.39" + "css-select": "^5.1.0", + "css-tree": "^1.1.3" } }, "react-native-svg-transformer": { @@ -14285,6 +14775,11 @@ "resolved": "https://registry.npmjs.org/react-native-table-component/-/react-native-table-component-1.2.2.tgz", "integrity": "sha512-7bbsi5431iWcjj3toASh8lFHGi6AG/+MTd4M7GuksXKxx/CFs/Qwv1Ys7D2wgyuYKe3hxWNfSVrteFj0tOYXYw==" }, + "react-native-toast-message": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/react-native-toast-message/-/react-native-toast-message-2.1.5.tgz", + "integrity": "sha512-mk3rELtBEhrhWBCN6CTaw0gypgL9ZNauX3xx1LUs4uee9vc0pVsghrKxO57vroUCcNL2hDeZSLJWdQNMCkGeaQ==" + }, "react-native-version-check": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/react-native-version-check/-/react-native-version-check-3.4.3.tgz", @@ -14304,9 +14799,9 @@ } }, "react-native-webview": { - "version": "11.22.3", - "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-11.22.3.tgz", - "integrity": "sha512-+JUgOZUN1l8PTbuOXv+wl+PN/YkGwj3qPCqVt5ucmck1PTSNKWvFUBDU7Rh5wmqy+grcyGgEB+8/+RIRJG0FIA==", + "version": "11.23.1", + "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-11.23.1.tgz", + "integrity": "sha512-bmqsdg4RYOUYD37R9XTrQALm7eD62KbLNPRfgvpLGd1SjaurvAjjsLrLN4mt6yOtKOMKeZvlcAl3x6De6cCQsA==", "requires": { "escape-string-regexp": "2.0.0", "invariant": "2.2.4" @@ -14556,17 +15051,17 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "requires": { "regenerate": "^1.4.2" } }, "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", + "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" }, "regenerator-transform": { "version": "0.15.0", @@ -14602,27 +15097,27 @@ "dev": true }, "regexpu-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", - "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", + "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", "requires": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.0.0" } }, "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" }, "regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "requires": { "jsesc": "~0.5.0" }, @@ -14660,6 +15155,12 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, "resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -14750,6 +15251,17 @@ "ret": "~0.1.10" } }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -15055,15 +15567,9 @@ "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" }, "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha512-V0iQEZ/uoem3NmD91rD8XiuozJnq9/ZJnbHVXHnWqP1ucAhS3yJ7sLIIzEi57wFFcK3oi3kFUC46uSyWr35mxg==", - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", + "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==" }, "shellwords": { "version": "0.1.1", @@ -15195,7 +15701,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -15325,9 +15831,9 @@ } }, "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==" + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" }, "splaytree": { "version": "3.1.1", @@ -15603,9 +16109,9 @@ "dev": true }, "styled-components": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.5.tgz", - "integrity": "sha512-ndETJ9RKaaL6q41B69WudeqLzOpY1A/ET/glXkNZ2T7dPjPqpPCXXQjDFYZWwNnE5co0wX+gTCqx9mfxTmSIPg==", + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.6.tgz", + "integrity": "sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/traverse": "^7.4.5", @@ -15642,9 +16148,9 @@ } }, "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dev": true, "requires": { "has-flag": "^4.0.0", @@ -15701,6 +16207,18 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } } } }, @@ -15711,9 +16229,9 @@ "dev": true }, "synchronous-promise": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.15.tgz", - "integrity": "sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg==" + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.16.tgz", + "integrity": "sha512-qImOD23aDfnIDNqlG1NOehdB9IYsn1V9oByPjKY1nakv2MQYCEMyX033/q+aEtYCpmYK1cv2+NTmlH+ra6GA5A==" }, "temp": { "version": "0.8.3", @@ -15777,6 +16295,15 @@ "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -15851,14 +16378,23 @@ "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" }, "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", + "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", "dev": true, "requires": { "psl": "^1.1.33", "punycode": "^2.1.1", - "universalify": "^0.1.2" + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "dependencies": { + "universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true + } } }, "tr46": { @@ -15884,9 +16420,9 @@ } }, "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, "tsutils": { "version": "3.21.0", @@ -15940,11 +16476,16 @@ } }, "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", "dev": true }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, "uglify-es": { "version": "3.3.9", "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", @@ -15998,9 +16539,9 @@ "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" }, "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" }, "unicons": { "version": "0.0.3", @@ -16077,9 +16618,9 @@ "dev": true }, "update-browserslist-db": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.3.tgz", - "integrity": "sha512-ufSazemeh9Gty0qiWtoRpJ9F5Q5W3xdIPm1UZQqYQv/q0Nyb9EMHUB2lu+O9x1re9WsorpMAUu4Y6Lxcs5n+XQ==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -16099,11 +16640,26 @@ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==" }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, + "use-latest-callback": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.5.tgz", + "integrity": "sha512-HtHatS2U4/h32NlkhupDsPlrbiD27gSH5swBdtXbCAlc6pfOFzaj0FehW/FO12rx8j2Vy4/lJScCiJyM01E+bQ==" + }, "use-subscription": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz", @@ -16127,12 +16683,6 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==" }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "v8-to-istanbul": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", @@ -16203,9 +16753,9 @@ } }, "warn-once": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/warn-once/-/warn-once-0.1.0.tgz", - "integrity": "sha512-recZTSvuaH/On5ZU5ywq66y99lImWqzP93+AiUo9LUwG8gXHW+LJjhOd6REJHm7qb0niYqrEQJvbHSQfuJtTqA==" + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/warn-once/-/warn-once-0.1.1.tgz", + "integrity": "sha512-VkQZJbO8zVImzYFteBXvBOZEl1qL175WH8VmZcxF2fZAoudNhNDvHi+doCaAEdU2l2vtcIwa2zn0QK5+I1HQ3Q==" }, "warning": { "version": "4.0.3", @@ -16281,7 +16831,7 @@ "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, "word-wrap": { "version": "1.2.3", @@ -16401,9 +16951,9 @@ "dev": true }, "xmldoc": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.1.3.tgz", - "integrity": "sha512-xLbV1OMj8ysWK5Z4xt+qGUm0J/A5hRpXisZGYeOvFElqgMzDVqy8Ma2VoV+6QIDVb9UmdpABVhPL/04VnmBcXQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.2.0.tgz", + "integrity": "sha512-2eN8QhjBsMW2uVj7JHLHkMytpvGHLHxKXBy4J3fAT/HujsEtM6yU84iGjpESYGHg6XwK0Vu4l+KgqQ2dv2cCqg==", "requires": { "sax": "^1.2.4" } diff --git a/examples/client/Locomotion/package.json b/examples/client/Locomotion/package.json index c7f0a1f81..7fa9978a6 100644 --- a/examples/client/Locomotion/package.json +++ b/examples/client/Locomotion/package.json @@ -11,23 +11,30 @@ "linter": "eslint 'src/**/*.{js,jsx,ts,tsx}'", "build-android": "cd android && ./gradlew app:assembleRelease && cd .. && today=`date '+%Y_%m_%d(%H_%M_%S)'`; mv ./android/app/build/outputs/apk/release/app-release.apk ./locomotion-release-RN-$today.apk", "clean-android": "cd android && ./gradlew clean", - "postinstall": "npx jetify", - "dev": "npx nodemon --exec 'npm run symlink' --watch ../../../locomotion-sdk/src -e js,ts,tsx,jsx --delay 2.5" + "clean-ios-build": "cd ios && xcodebuild clean", + "clean-ios-pods": "cd ios && rm -rf ~/Library/Caches/CocoaPods && rm -rf Pods && rm -rf ~/Library/Developer/Xcode/DerivedData/* && pod cache clean --all && pod deintegrate && cd ..", + "install-ios": "cd ios && bundle exec pod setup && bundle exec pod install --verbose && cd ..", + "postinstall": "patch-package && npx jetify", + "dev": "npx nodemon --exec 'npm run symlink' --watch ../../../locomotion-sdk/src -e js,ts,tsx,jsx --delay 2.5", + "patch-package": "patch-package" }, "dependencies": { + "@autofleet/i18next-remote-backend-with-locals": "^1.0.0", "@gorhom/bottom-sheet": "^4.3.1", "@gorhom/portal": "^1.0.14", "@mapbox/polyline": "^1.1.0", "@react-native-async-storage/async-storage": "^1.17.3", + "@react-native-community/cli": "^7.0.4", "@react-native-community/clipboard": "^1.5.1", "@react-native-community/geolocation": "^2.0.2", + "@react-native-community/netinfo": "^9.3.7", "@react-native-firebase/app": "^14.11.1", "@react-native-firebase/crashlytics": "^14.11.1", "@react-native-picker/picker": "^2.4.1", "@react-navigation/drawer": "^6.4.1", "@react-navigation/native": "^6.0.10", "@react-navigation/native-stack": "^6.6.2", - "@stripe/stripe-react-native": "^0.13.0", + "@stripe/stripe-react-native": "^0.14.0", "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/turf": "^6.5.0", "@types/googlemaps": "^3.43.3", @@ -35,47 +42,55 @@ "bluebird": "^3.7.2", "cheap-ruler": "^3.0.2", "i18next": "^19.7.0", + "i18next-http-backend": "^2.1.1", "jwt-decode": "^3.1.2", "libphonenumber-js": "^1.10.6", "lodash": "^4.17.21", - "lottie-ios": "^3.2.3", + "lottie-ios": "^3.4.0", "lottie-react-native": "^5.0.1", "mcc-mnc-list": "^1.1.8", + "mixpanel-react-native": "^2.2.1", "moment": "^2.29.3", "moment-timezone": "^0.5.37", "prop-types": "^15.8.1", "react": "17.0.2", "react-i18next": "^11.7.2", - "react-native": "0.68.1", + "react-native": "^0.68.5", "react-native-background-timer": "^2.4.1", "react-native-carrier-info": "^1.1.2", "react-native-config": "^1.4.5", - "react-native-date-picker": "^4.2.2", + "react-native-date-picker": "^4.2.6", "react-native-device-info": "^8.7.1", + "react-native-draglist": "^3.5.1", "react-native-exit-app": "^1.1.0", "react-native-fast-image": "^8.5.11", - "react-native-gesture-handler": "^2.4.2", + "react-native-geolocation-service": "^5.3.1", + "react-native-gesture-handler": "^2.12.1", "react-native-image-picker": "^4.8.2", "react-native-image-resizer": "^1.4.5", "react-native-keyboard-aware-scroll-view": "^0.9.5", "react-native-linear-gradient": "^2.5.6", + "react-native-localize": "^2.2.4", "react-native-location": "^2.5.0", - "react-native-maps": "^0.31.1", - "react-native-mixpanel": "^1.2.5", + "react-native-maps": "^1.4.0", + "react-native-markdown-display": "^7.0.0-alpha.2", "react-native-modal": "^13.0.1", "react-native-onesignal": "^4.3.9", "react-native-payment-icons": "^1.0.11", "react-native-phone-number-input": "^2.1.0", "react-native-picker-select": "^8.0.4", - "react-native-reanimated": "^2.8.0", + "react-native-reanimated": "^2.17.0", + "react-native-recaptcha-that-works": "^1.3.2", "react-native-restart": "0.0.24", - "react-native-safe-area-context": "^4.2.5", + "react-native-safe-area-context": "^4.6.3", "react-native-screens": "^3.13.1", + "react-native-select-dropdown": "^3.0.3", "react-native-skeleton-content-nonexpo": "^1.0.13", "react-native-smooth-pincode-input": "^1.0.9", "react-native-svg": "^12.3.0", "react-native-svg-transformer": "^1.0.0", "react-native-table-component": "^1.2.2", + "react-native-toast-message": "^2.1.5", "react-native-version-check": "^3.4.3", "react-native-webview": "^11.18.2", "shortid": "^2.2.16", @@ -112,6 +127,7 @@ "jest": "^26.6.3", "jetifier": "^2.0.0", "metro-react-native-babel-preset": "^0.67.0", + "patch-package": "^7.0.0", "react-test-renderer": "17.0.2", "typescript": "^4.6.4" }, diff --git a/examples/client/Locomotion/patches/react-native+0.68.5.patch b/examples/client/Locomotion/patches/react-native+0.68.5.patch new file mode 100644 index 000000000..03b678d7a --- /dev/null +++ b/examples/client/Locomotion/patches/react-native+0.68.5.patch @@ -0,0 +1,41 @@ +diff --git a/node_modules/react-native/ReactCommon/yoga/yoga/Yoga.cpp b/node_modules/react-native/ReactCommon/yoga/yoga/Yoga.cpp +index 9986279..20389d4 100644 +--- a/node_modules/react-native/ReactCommon/yoga/yoga/Yoga.cpp ++++ b/node_modules/react-native/ReactCommon/yoga/yoga/Yoga.cpp +@@ -2229,7 +2229,7 @@ static float YGDistributeFreeSpaceSecondPass( + depth, + generationCount); + node->setLayoutHadOverflow( +- node->getLayout().hadOverflow() | ++ node->getLayout().hadOverflow() || + currentRelativeChild->getLayout().hadOverflow()); + } + return deltaFreeSpace; +diff --git a/node_modules/react-native/scripts/react-native-xcode.sh b/node_modules/react-native/scripts/react-native-xcode.sh +index ad31b9c..4521b7f 100755 +--- a/node_modules/react-native/scripts/react-native-xcode.sh ++++ b/node_modules/react-native/scripts/react-native-xcode.sh +@@ -79,9 +79,7 @@ if [[ $DEV != true && ! -f "$ENTRY_FILE" ]]; then + exit 2 + fi + +-# Find path to Node +-# shellcheck source=/dev/null +-source "$REACT_NATIVE_DIR/scripts/find-node.sh" ++NODE_BINARY="$(command -v node)" + + # check and assign NODE_BINARY env + # shellcheck source=/dev/null +diff --git a/node_modules/react-native/scripts/react_native_pods_utils/script_phases.sh b/node_modules/react-native/scripts/react_native_pods_utils/script_phases.sh +index 9ae04f0..7f26218 100755 +--- a/node_modules/react-native/scripts/react_native_pods_utils/script_phases.sh ++++ b/node_modules/react-native/scripts/react_native_pods_utils/script_phases.sh +@@ -33,8 +33,6 @@ else + fi + + find_node () { +- # shellcheck disable=SC1091 +- source "$RCT_SCRIPT_RN_DIR/scripts/find-node.sh" + + NODE_BINARY="${NODE_BINARY:-$(command -v node || true)}" + if [ -z "$NODE_BINARY" ]; then \ No newline at end of file diff --git a/examples/client/Locomotion/src/Components/AvailabilityVehicle/index.tsx b/examples/client/Locomotion/src/Components/AvailabilityVehicle/index.tsx index 476ed3be9..525b4b100 100644 --- a/examples/client/Locomotion/src/Components/AvailabilityVehicle/index.tsx +++ b/examples/client/Locomotion/src/Components/AvailabilityVehicle/index.tsx @@ -1,12 +1,13 @@ import React, { - useContext, useEffect, useState, useRef, + useContext, useEffect, useState, useRef, useCallback, } from 'react'; -import { Platform, View } from 'react-native'; -import styled from 'styled-components'; +import { + Platform, +} from 'react-native'; import { MarkerAnimated, AnimatedRegion } from 'react-native-maps'; import { Context as ThemeContext } from '../../context/theme'; import SvgIcon from '../SvgIcon'; -import carIcon from '../../assets/map/car.svg'; +import carIcon from '../../assets/map/Autofleet_Car_Icon.svg'; interface Location { lat: number; @@ -19,13 +20,12 @@ interface AvailabilityVehicleProps { id: string; } -const AvailabilityVehicleContainer = styled(View)` -z-index: 100; -`; - const DURATION = 5000; -const areEqual = (prev: AvailabilityVehicleProps, next: AvailabilityVehicleProps) => prev.id === next.id +const areEqual = ( + prev: AvailabilityVehicleProps, + next: AvailabilityVehicleProps, +) => prev.id === next.id && prev.location.lat === next.location.lat && prev.location.lng === next.location.lng && prev.location.bearing === next.location.bearing; @@ -40,8 +40,8 @@ const AvailabilityVehicle = ({ location, id, }: AvailabilityVehicleProps) => { - const { primaryColor } = useContext(ThemeContext); - + const { useVehicleColor } = useContext(ThemeContext); + const { vehicleColor } = useVehicleColor(); const markerRef = useRef(null); const [locationAnimated] = useState(new AnimatedRegion({ latitude: insureNumberType(location.lat), @@ -70,15 +70,37 @@ const AvailabilityVehicle = ({ } }, [location]); + const onPressWorkaround = useCallback(() => { + try { + markerRef?.current?.hideCallout(); + } catch (e) { + console.log('error', e); + } + }, [markerRef]); + + const svgStyle : any = { color: vehicleColor }; + if (location?.bearing) { + svgStyle.transform = [{ rotate: `${location.bearing}deg` }]; + } return ( - + + ); }; diff --git a/examples/client/Locomotion/src/Components/BottomSheet/index.tsx b/examples/client/Locomotion/src/Components/BottomSheet/index.tsx index c84492103..529e0649c 100644 --- a/examples/client/Locomotion/src/Components/BottomSheet/index.tsx +++ b/examples/client/Locomotion/src/Components/BottomSheet/index.tsx @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ // @ts-nocheck import React, { - useCallback, useContext, forwardRef, useEffect, + useCallback, useContext, forwardRef, } from 'react'; import BottomSheet, { BottomSheetFooter, @@ -9,13 +9,13 @@ import BottomSheet, { } from '@gorhom/bottom-sheet'; import styled from 'styled-components'; import { Text, View } from 'react-native'; -import { UserContext } from '../../context/user'; +import { Trans } from 'react-i18next'; // eslint-disable-next-line import/no-unresolved import SafeView from '../SafeView'; import { BottomSheetContext } from '../../context/bottomSheetContext'; -const BottomSheetTopInfo = styled(View)` -background-color: #989898; +const BottomSheetTopInfo = styled(View)<{backgroundColor: string}>` +background-color: ${props => props.backgroundColor || '#989898'}; /* position: absolute; height: 38px; top: -38px; */ @@ -49,7 +49,7 @@ const BottomSheetComponent = forwardRef(({ setIsExpanded, snapPoints, footerComponent, - topBarText, + topBarProps, } = useContext(BottomSheetContext); const onAnimate = useCallback((from: any, to: any) => { if (!closeable && from !== -1) { @@ -77,10 +77,10 @@ const BottomSheetComponent = forwardRef(({ const getTopBar = () => ( <> - {!!topBarText && ( - + {!!topBarProps.text && ( + - {topBarText} + )} diff --git a/examples/client/Locomotion/src/Components/BsPages/ActiveRide/index.tsx b/examples/client/Locomotion/src/Components/BsPages/ActiveRide/index.tsx index 4b2f3c10b..c1b0f4bf9 100644 --- a/examples/client/Locomotion/src/Components/BsPages/ActiveRide/index.tsx +++ b/examples/client/Locomotion/src/Components/BsPages/ActiveRide/index.tsx @@ -1,6 +1,6 @@ -import React, { useContext, useEffect, useState } from 'react'; +import React, { useContext, useState } from 'react'; import moment from 'moment'; -import { Share } from 'react-native'; +import { CancellationReasonsContext } from '../../../context/cancellation-reasons'; import RidePaymentDetails from '../../RidePaymentDetails'; import { BS_PAGES } from '../../../context/ridePageStateContext/utils'; import { RidePageContext } from '../../../context/newRideContext'; @@ -19,7 +19,6 @@ import StopPointsVerticalView from '../../StopPointsVerticalView'; import GenericRideButton from '../../GenericRideButton'; import plus from '../../../assets/bottomSheet/plus.svg'; import editNote from '../../../assets/bottomSheet/edit_note.svg'; -import share from '../../../assets/bottomSheet/share.svg'; import cancel from '../../../assets/bottomSheet/cancel.svg'; import RideNotes from '../../../popups/RideNotes'; import ServiceTypeDetails from '../../ServiceTypeDetails'; @@ -32,6 +31,9 @@ const DEFAULT_VEHICLE_IMAGE = 'https://res.cloudinary.com/autofleet/image/upload const ActiveRideContent = () => { const { ride, loadRide, updateRide } = useContext(RidePageContext); const { changeBsPage, setGenericErrorPopup } = useContext(RideStateContextContext); + const { + getCancellationReasons, + } = useContext(CancellationReasonsContext); const [popupToShow, setPopupToShow] = useState(null); const { @@ -59,9 +61,11 @@ const ActiveRideContent = () => { const renderRideNotes = () => { const rideHasNotes = pickupSp?.notes; return ( - { - setPopupToShow('notes'); - }} + { + setPopupToShow('notes'); + }} > { ? ( { + onPress={async () => { if (ride.cancelable) { + await getCancellationReasons(ride?.id); changeBsPage(BS_PAGES.CANCEL_RIDE); } }} @@ -118,7 +123,7 @@ const ActiveRideContent = () => { - {(vehicle?.licensePlate) || ''} + {(vehicle?.licensePlate) || ''} @@ -138,18 +143,23 @@ const ActiveRideContent = () => { : null} - - { - setGenericErrorPopup({}); - }} - /> - {renderRideNotes()} - - - {renderCancelRide()} - {renderShareRide()} - + {firstSpNotCompleted?.type === 'pickup' ? ( + <> + + { setGenericErrorPopup({}); }} /> + {renderRideNotes()} + + + {renderCancelRide()} + {renderShareRide()} + + + ) : ( + + { setGenericErrorPopup({}); }} /> + {renderShareRide()} + + )} { onPress={() => { onShare(); }} - style={{ width: ride.cancelable ? HALF_WIDTH : '100%' }} > { isLoading diff --git a/examples/client/Locomotion/src/Components/BsPages/index.tsx b/examples/client/Locomotion/src/Components/BsPages/index.tsx index 18737310f..37717341c 100644 --- a/examples/client/Locomotion/src/Components/BsPages/index.tsx +++ b/examples/client/Locomotion/src/Components/BsPages/index.tsx @@ -1,4 +1,6 @@ -import React, { useContext, useEffect, useState } from 'react'; +import React, { + useCallback, useContext, useEffect, useMemo, useState, +} from 'react'; import { Linking, Platform, Text, View, } from 'react-native'; @@ -7,12 +9,14 @@ import styled, { ThemeContext } from 'styled-components'; import { useBottomSheet } from '@gorhom/bottom-sheet'; import { SafeAreaView } from 'react-native-safe-area-context'; import moment from 'moment'; -import DatePicker from 'react-native-date-picker'; +import SkeletonContent from 'react-native-skeleton-content-nonexpo'; +import CancellationReasonsProvider, { CancellationReasonsContext } from '../../context/cancellation-reasons'; +import objDefault from '../../lib/objDefault'; import Mixpanel from '../../services/Mixpanel'; import GenericErrorPopup from '../../popups/GenericError'; import TextRowWithIcon from '../../Components/TextRowWithIcon'; import { FutureRidesContext } from '../../context/futureRides'; -import { STOP_POINT_TYPES } from '../../lib/commonTypes'; +import { RIDE_STATES, STOP_POINT_TYPES } from '../../lib/commonTypes'; import SvgIcon from '../SvgIcon'; import { RidePageContext } from '../../context/newRideContext'; import SettingContext from '../../context/settings'; @@ -35,10 +39,13 @@ import locationIcon from '../../assets/location_pin.svg'; import Loader from '../Loader'; import { MewRidePageContext } from '../..'; import timeIcon from '../../assets/calendar.svg'; +import clockIcon from '../../assets/bottomSheet/clock.svg'; import ActiveRideContent from './ActiveRide'; import RoundedButton from '../RoundedButton'; -import { getFutureRideMaxDate, getFutureRideMinDate } from '../../context/newRideContext/utils'; +import { getFutureRideMaxDate, getFutureRideMinDate, RIDE_POPUPS } from '../../context/newRideContext/utils'; import { PAYMENT_METHODS } from '../../pages/Payments/consts'; +import DatePickerPoppup from '../../popups/DatePickerPoppup'; +import { VirtualStationsContext } from '../../context/virtualStationsContext'; const OtherButton = styled(Button)` background-color: ${({ warning, theme }) => (warning ? ERROR_COLOR : theme.primaryColor)}; @@ -113,7 +120,7 @@ const AddressInput = styled(Text)` `; const LoaderContainer = styled(View)` - height: 25px; + height: 20px; width: 100%; margin: auto 0; margin-top: 25px; @@ -142,8 +149,31 @@ const Footer = styled(View)` const AddressContainer = styled(View)` flex-direction: row; align-items: center; + display: flex; +`; + +const PickerTitle = styled(Text)` + ${FONT_SIZES.H1}; + ${FONT_WEIGHTS.SEMI_BOLD}; + margin-bottom: 25px; +`; + +const PickerDate = styled(Text)` + ${FONT_SIZES.H3}; + ${FONT_WEIGHTS.LIGHT}; + margin-bottom: 7px; `; +const PickerTimeRange = styled(Text)` + ${FONT_SIZES.H1}; +`; + +const RIDE_STATES_TO_BS_PAGES = objDefault({ + [RIDE_STATES.PENDING]: BS_PAGES.CONFIRMING_RIDE, + [RIDE_STATES.MATCHING]: BS_PAGES.CONFIRMING_RIDE, + defaultValue: BS_PAGES.ACTIVE_RIDE, +}); + const BsPage = ({ onSecondaryButtonPress, onButtonPress, @@ -158,6 +188,7 @@ const BsPage = ({ buttonDisabled, warning, fullWidthButtons, + subtitleTestId, }: { onSecondaryButtonPress?: any, onButtonPress: any, @@ -172,6 +203,7 @@ const BsPage = ({ buttonDisabled?: boolean; warning?: boolean fullWidthButtons?: boolean; + subtitleTestId: string }) => { const buttonWidth = fullWidthButtons ? '100%' : '48%'; return ( @@ -185,7 +217,7 @@ const BsPage = ({ {titleIcon && } {TitleText} - {SubTitleText} + {SubTitleText} {Image ? ( @@ -247,23 +279,52 @@ export const ConfirmPickupTime = (props: any) => { unconfirmedPickupTime, updateRidePayload, setUnconfirmedPickupTime, - tryServiceEstimations, setServiceEstimations, ride, + chosenService, + defaultService, + setChosenService, + loadFutureBookingDays, + futureBookingDays, } = useContext(MewRidePageContext); const { changeBsPage, } = useContext(RideStateContextContext); const date = moment(unconfirmedPickupTime).format('ddd, MMM Do'); - const time = moment(unconfirmedPickupTime).format('h:mm A'); + const isDateToday = moment(unconfirmedPickupTime).isSame(moment(), 'day'); + const afterTime = moment(unconfirmedPickupTime).format('h:mm A'); + const windowSize = (chosenService || defaultService)?.futurePickupWindowSizeInMinutes; + const beforeTime = (windowSize && moment(unconfirmedPickupTime).add(windowSize, 'minutes').format('h:mm A')) || i18n.t('general.noTimeWindow'); + const startDate = moment(unconfirmedPickupTime).add(unconfirmedPickupTime ? 0 : (minMinutesBeforeFutureRide || 0) + 1, 'minutes').toDate(); + const [tempSelectedDate, setTempSelectedDate] = useState(startDate); const checkMinutesBeforeFutureRideSetting = async () => { const minutes = await getSettingByKey(SETTINGS_KEYS.MIN_MINUTES_BEFORE_FUTURE_RIDE); setMinMinutesBeforeFutureRide(minutes); }; + useEffect(() => { checkMinutesBeforeFutureRideSetting(); + loadFutureBookingDays(); }, []); + + useEffect(() => { + setTempSelectedDate(startDate); + }, [minMinutesBeforeFutureRide]); + + const afterTimeTitle = moment(tempSelectedDate).format('h:mm A'); + const pickupWindowTime = (chosenService || defaultService)?.futurePickupWindowSizeInMinutes; + const beforeTimeTitle = (pickupWindowTime + && moment(tempSelectedDate).add(pickupWindowTime, 'minutes').format('h:mm A')) + || i18n.t('general.noTimeWindow'); + const renderDatePickerTitle = () => ( + <> + {i18n.t('bottomSheetContent.ride.chosePickupTime')} + {moment(tempSelectedDate).format('dddd, MMM Do')} + {`${afterTimeTitle} - ${beforeTimeTitle}`} + + + ); return ( { if (ride?.scheduledTo !== unconfirmedPickupTime) { updateRidePayload({ scheduledTo: unconfirmedPickupTime }); setServiceEstimations(null); + setChosenService(null); } changeBsPage(BS_PAGES.SERVICE_ESTIMATIONS); }} {...props} > + minMinutesBeforeFutureRide && setIsDatePickerOpen(true)} + hollow + icon={clockIcon} + style={{ + borderColor: '#f1f2f6', + marginBottom: 20, + }} + > + {i18n.t('bottomSheetContent.confirmPickupTime.pickupTextTime', { afterTime, beforeTime })} + minMinutesBeforeFutureRide && setIsDatePickerOpen(true)} hollow @@ -286,23 +359,25 @@ export const ConfirmPickupTime = (props: any) => { borderColor: '#f1f2f6', }} > - {i18n.t('bottomSheetContent.confirmPickupTime.pickupText', { date, time })} + {i18n.t(`bottomSheetContent.confirmPickupTime.${isDateToday ? 'pickupTextToday' : 'pickupTextDay'}`, { date })} - setIsDatePickerOpen(false)} onConfirm={(newDate: Date) => { setUnconfirmedPickupTime(newDate.getTime()); setIsDatePickerOpen(false); }} - modal + onChange={(newDate: Date) => setTempSelectedDate(newDate)} /> ); @@ -312,6 +387,7 @@ export const GenericError = (props: any) => { const { genericErrorDetails } = useContext(BottomSheetContext); return ( ( export const CancelRide = (props: any) => { const [isLoading, setIsLoading] = useState(false); const [showError, setShowError] = useState(false); - const { cancelRide } = useContext(RidePageContext); + const { cancelRide, ride, setRidePopup } = useContext(RidePageContext); const { changeBsPage } = useContext(RideStateContextContext); return ( @@ -354,13 +430,17 @@ export const CancelRide = (props: any) => { setIsLoading(true); Mixpanel.setEvent('Trying to cancel ride'); await cancelRide(); + setRidePopup(RIDE_POPUPS.CANCELLATION_REASON); + changeBsPage(BS_PAGES.ADDRESS_SELECTOR); } catch (e: any) { setShowError(true); setIsLoading(false); Mixpanel.setEvent('failed to cancel ride', { status: e?.response?.status }); } }} - onSecondaryButtonPress={() => changeBsPage(BS_PAGES.ACTIVE_RIDE)} + onSecondaryButtonPress={() => changeBsPage( + RIDE_STATES_TO_BS_PAGES[ride.state || RIDE_STATES.ACTIVE], + )} warning buttonDisabled={isLoading} {...props} @@ -375,13 +455,25 @@ export const CancelRide = (props: any) => { export const ConfirmFutureRide = (props: any) => { const { newFutureRide } = useContext(FutureRidesContext); + const { chosenService } = useContext(MewRidePageContext); + + const getTimeDisplay = () => { + const afterTime = moment.parseZone(newFutureRide?.scheduledTo).format('h:mm A'); + const windowSize = chosenService?.futurePickupWindowSizeInMinutes; + const beforeTime = (windowSize && moment.parseZone(newFutureRide?.scheduledTo).add(windowSize, 'minutes').format('h:mm A')) || i18n.t('general.noTimeWindow'); + + const timeText = i18n.t('bottomSheetContent.confirmPickupTime.pickupTextTime', { afterTime, beforeTime }); + return ; + }; const getDateDisplay = () => { const date = moment.parseZone(newFutureRide?.scheduledTo).format('ddd, MMM Do'); - const time = moment.parseZone(newFutureRide?.scheduledTo).format('h:mm A'); - const dateText = i18n.t('bottomSheetContent.confirmPickupTime.pickupText', { date, time }); + const isDateToday = moment.parseZone(newFutureRide?.scheduledTo).isSame(moment(), 'day'); + + const dateText = i18n.t(`bottomSheetContent.confirmPickupTime.${isDateToday ? 'pickupTextToday' : 'pickupTextDay'}`, { date }); return ; }; + const getPickupDisplay = () => { const pickup = (newFutureRide?.stopPoints || []) .find(sp => sp.type === STOP_POINT_TYPES.STOP_POINT_PICKUP); @@ -401,6 +493,7 @@ export const ConfirmFutureRide = (props: any) => { fullWidthButtons {...props} > + {getTimeDisplay()} {getDateDisplay()} {getPickupDisplay()} {getDropOffDisplay()} @@ -438,10 +531,11 @@ export const ConfirmPickup = (props: any) => { setSelectedInputIndex, rideRequestLoading, } = useContext(RidePageContext); - + const { isDraggingLocationPin } = useContext(RideStateContextContext); const { setSnapPointsState } = useContext(BottomSheetContext); - const { collapse } = useBottomSheet(); + const { isStationsEnabled } = useContext(VirtualStationsContext); + const { collapse } = useBottomSheet(); const setInitialLocation = async () => { if (props.initialLocation) { saveSelectedLocation(props.initialLocation); @@ -460,11 +554,39 @@ export const ConfirmPickup = (props: any) => { const titleText = props.isConfirmPickup ? 'confirmPickupTitle' : 'confirmLocationTitle'; + const renderSkeleton = useCallback(() => ( + + ), []); + + const renderAddressContainer = useCallback(() => ( + + + {isDraggingLocationPin ? renderSkeleton() + : {lastSelectedLocation?.streetAddress || i18n.t('bottomSheetContent.confirmPickup.noAddress')}} + + ), [isDraggingLocationPin, lastSelectedLocation?.streetAddress]); + return ( { props.onButtonPress(lastSelectedLocation); } }} - buttonDisabled={!lastSelectedLocation?.streetAddress} + buttonDisabled={isDraggingLocationPin || !lastSelectedLocation?.streetAddress} > - - - {lastSelectedLocation?.streetAddress || i18n.t('bottomSheetContent.confirmPickup.noAddress')} - + {renderAddressContainer()} ); }; @@ -540,7 +659,10 @@ export const Loading = (props: any) => ( export const ConfirmingRide = (props: any) => { const { setSnapPointsState } = useContext(BottomSheetContext); const { changeBsPage } = useContext(RideStateContextContext); - const { ride } = useContext(RidePageContext); + const { ride, chosenService } = useContext(RidePageContext); + const { + getCancellationReasons, + } = useContext(CancellationReasonsContext); useEffect(() => { setSnapPointsState(SNAP_POINT_STATES.CONFIRMING_RIDE); }, []); @@ -549,16 +671,21 @@ export const ConfirmingRide = (props: any) => { ? i18n.t('bottomSheetContent.confirmingFutureRide.titleText') : i18n.t('bottomSheetContent.confirmingRide.titleText'); + const windowSize = chosenService?.futurePickupWindowSizeInMinutes; + const beforeTime = windowSize ? moment(ride.scheduledTo).add(windowSize, 'minutes').format('h:mm A') : i18n.t('general.noTimeWindow'); const SubTitleText = ride?.scheduledTo ? i18n.t('bottomSheetContent.confirmingFutureRide.subTitleText', - { date: moment(ride.scheduledTo).format('MMM D, h:mm A') }) + { date: moment(ride.scheduledTo).format('MMM D, h:mm A'), beforeTime }) : null; return ( changeBsPage(BS_PAGES.CANCEL_RIDE)} + onSecondaryButtonPress={() => { + getCancellationReasons(ride?.id); + changeBsPage(BS_PAGES.CANCEL_RIDE); + }} SubTitleText={SubTitleText} fullWidthButtons {...props} diff --git a/examples/client/Locomotion/src/Components/Button/index.js b/examples/client/Locomotion/src/Components/Button/index.js index 08e50bf17..e36080f96 100644 --- a/examples/client/Locomotion/src/Components/Button/index.js +++ b/examples/client/Locomotion/src/Components/Button/index.js @@ -24,7 +24,7 @@ const Button = (props) => { if (!props.disabled) { if (props.onPress) { setIsLoadingInternal(true); - Mixpanel.trackElementClick(props); + Mixpanel.trackElementClick(props, props.pressCount ? { count: props.pressCount } : {}); await props.onPress(e); setIsLoadingInternal(false); } diff --git a/examples/client/Locomotion/src/Components/CardRow/index.tsx b/examples/client/Locomotion/src/Components/CardRow/index.tsx index 457062d54..65aaab089 100644 --- a/examples/client/Locomotion/src/Components/CardRow/index.tsx +++ b/examples/client/Locomotion/src/Components/CardRow/index.tsx @@ -5,39 +5,38 @@ import { View, Text } from 'react-native'; import moment from 'moment'; import styled, { ThemeContext } from 'styled-components'; import { PaymentIcon } from 'react-native-payment-icons'; -import { PaymentMethodInterface } from 'context/payments/interface'; +import { PAYMENT_METHODS, paymentMethodToIconMap } from '../../pages/Payments/consts'; import Button from '../Button'; import { capitalizeFirstLetter, getLastFourForamttedShort } from '../../pages/Payments/cardDetailUtils'; import i18n from '../../I18n'; import SvgIcon from '../SvgIcon'; import selected from '../../assets/selected-v.svg'; import { Start, StartCapital } from '../../lib/text-direction'; -import cashIcon from '../../assets/cash.svg'; import chevronIcon from '../../assets/chevron.svg'; import { isCashPaymentMethod } from '../../lib/ride/utils'; - +import paymentContext from '../../context/payments'; type ContainerProps = { children: React.ReactNode, selected: boolean, + chooseMethodPage: boolean }; -const InnerContainer = styled(View)<{chooseMethodPage: boolean}>` +const InnerContainer = styled(View)` flex-direction: row; justify-content: flex-start; width: 100%; align-items: center; - padding: ${({ chooseMethodPage }) => (chooseMethodPage ? '0 15px' : '0px')}; `; const Container = styled(View) < ContainerProps >` background-color: ${(props: any) => (props.selected ? '#rgba(36, 170, 242, 0.2)' : '#fff')}; min-height: 50px; - flex-direction: row; - justify-content: flex-start; + flex-direction: column; + justify-content: center; width: 100%; - align-items: center; - + opacity: ${(props: any) => (props.disabled ? 0.3 : 1)}; + padding: ${({ chooseMethodPage }) => (chooseMethodPage ? '0 15px' : '0px')}; `; const ImageContainer = styled(View)` @@ -91,9 +90,15 @@ const style = { [StartCapital()]: 28, }; + const CardRow = (paymentMethod: any) => { const { primaryColor } = useContext(ThemeContext); + const { offlinePaymentText, loadOfflinePaymentText } = paymentContext.useContainer(); const [isCardExpired, setIsCardExpired] = useState(false); + + useEffect(() => { + loadOfflinePaymentText(); + }, []); useEffect(() => { let isExpired = false; setTimeout(() => { @@ -101,79 +106,108 @@ const CardRow = (paymentMethod: any) => { setIsCardExpired(isExpired); }, 100); }, [paymentMethod]); + const testID = paymentMethod.addNew + ? `${paymentMethod.testIdPrefix || ''}AddPaymentMethod` + : (`${paymentMethod.testIdPrefix || ''}ChoosePaymentMethod${paymentMethod.id === PAYMENT_METHODS.OFFLINE || paymentMethod.id === PAYMENT_METHODS.CASH ? `_${paymentMethod.id}` : ''}`); + + const getPaymentMethodIcon = () => { + const { brand, id, lastFour } = paymentMethod; + const isCard = lastFour; + if (isCard) { + return ; + } + return ( + + ); + }; + return ( - + + + {paymentMethod.addNew + ? ( + <> + {i18n.t('payments.addNewCreditCard').toString()} + + ) + : ( + <> + {!paymentMethod.lastFour + ? ( + + {isCashPaymentMethod(paymentMethod) ? i18n.t('payments.cash') : offlinePaymentText } + + ) + : ( + + {capitalizeFirstLetter(paymentMethod.name)} + + )} + {paymentMethod.lastFour + ? {getLastFourForamttedShort(paymentMethod.lastFour)} + : null} + {paymentMethod && paymentMethod.expiresAt && !!paymentMethod.lastFour && isCardExpired ? {i18n.t('payments.expired').toString()} : null} + {paymentMethod && !!paymentMethod.lastFour && paymentMethod.hasOutstandingBalance ? {i18n.t('payments.hasOutstandingBalance').toString()} : null} + + )} + + {paymentMethod.showArrow && } + + {paymentMethod.disabledReason && ( + + {paymentMethod.disabledReason} + + )} + + + ); }; diff --git a/examples/client/Locomotion/src/Components/DriverCard/index.tsx b/examples/client/Locomotion/src/Components/DriverCard/index.tsx index 9ae9a5e0a..76b006b7b 100644 --- a/examples/client/Locomotion/src/Components/DriverCard/index.tsx +++ b/examples/client/Locomotion/src/Components/DriverCard/index.tsx @@ -3,6 +3,7 @@ import moment from 'moment'; import TextButton from '../TextButton'; import CardsTitle from '../CardsTitle'; import { RideInterface } from '../../context/newRideContext'; +import { didUserRate } from '../../context/newRideContext/utils'; import i18n from '../../I18n'; import Stars, { StarIcon } from '../Stars'; import { @@ -38,7 +39,7 @@ const DriverCard = ({ noPaddingLeft, }: DriverCardProps) => { const getRatingSection = () => { - if (ride.rating) { + if (didUserRate(ride.rating, ride.rideFeedbacks)) { return ( @@ -55,7 +56,7 @@ const DriverCard = ({ ); } return ( - { NavigationService.navigate(MAIN_ROUTES.POST_RIDE, { rideId: ride.id, priceCalculationId: ride.priceCalculationId }); }} text={i18n.t('rideHistory.rideCard.rateRide')} /> + { NavigationService.navigate(MAIN_ROUTES.POST_RIDE, { rideId: ride.id, priceCalculationId: ride.priceCalculationId, fromHistory: true }); }} text={i18n.t('rideHistory.rideCard.rateRide')} /> ); }; return ( diff --git a/examples/client/Locomotion/src/Components/Header/index.js b/examples/client/Locomotion/src/Components/Header/index.js index 51d944319..835c00d7e 100644 --- a/examples/client/Locomotion/src/Components/Header/index.js +++ b/examples/client/Locomotion/src/Components/Header/index.js @@ -7,18 +7,16 @@ import SafeView from '../SafeView'; const Header = ({ children, onPressIcon, icon, testID, }) => ( - - - - {children} - - + + + {children} + ); export default Header; diff --git a/examples/client/Locomotion/src/Components/LinkText/index.tsx b/examples/client/Locomotion/src/Components/LinkText/index.tsx new file mode 100644 index 000000000..7b96ea0ab --- /dev/null +++ b/examples/client/Locomotion/src/Components/LinkText/index.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import propsTypes from 'prop-types'; +import { + LinkText, Container, StyledIcon, TouchableContainer, +} from './styled'; + +interface LinkTextProps { + children: React.ReactNode; + icon?: string; + iconSide?: 'left' | 'right'; + onPress: () => void; +} + + +const LinkTextComponent = ({ + children, icon, iconSide = 'left', onPress = () => null, +}: LinkTextProps) => ( + + + {icon ? : null} + + {children} + + + +); + +LinkTextComponent.defaultProps = { + icon: null, + iconSide: 'left', +}; +export default LinkTextComponent; diff --git a/examples/client/Locomotion/src/Components/LinkText/styled.ts b/examples/client/Locomotion/src/Components/LinkText/styled.ts new file mode 100644 index 000000000..3c347e074 --- /dev/null +++ b/examples/client/Locomotion/src/Components/LinkText/styled.ts @@ -0,0 +1,51 @@ +import { TextInput, Text } from 'react-native'; +import styled from 'styled-components/native'; +import { + FONT_SIZES, FONT_SIZES_VALUES, FONT_WEIGHTS, convertHextToRgba, LINK_BLUE_COLOR, +} from '../../context/theme'; + +import SvgIcon from '../SvgIcon'; + +interface MarkerProps { + theme?: any; + width?: number; + height?: number; + icon: any; + iconSide: 'left' | 'right'; +} + +const isLeft = side => side === 'left'; +export const Container = styled.View` + display: flex; + flex-direction: ${({ iconSide }) => (isLeft(iconSide) ? 'row' : 'row-reverse')}; + justify-content: ${({ iconSide }) => (isLeft(iconSide) ? 'flex-start' : 'flex-end')}; + align-items: center; + +`; + +export const LinkText = styled(Text)` + ${FONT_SIZES.LARGE}; + ${FONT_WEIGHTS.SEMI_REGULAR}; + color: ${LINK_BLUE_COLOR}; +`; + +export const TouchableContainer = styled.TouchableOpacity` + flex: 1; +`; + +export const StyledIcon = styled(SvgIcon).attrs(({ + theme, + icon, + width = 24, + height = 24, + iconSide, +}:MarkerProps) => ({ + Svg: icon, + width, + height, + fill: LINK_BLUE_COLOR, +}))` + ${({ iconSide }) => (isLeft(iconSide) ? 'margin-right: 5px' : 'margin-left: 5px')}; + width: ${({ width }) => width}px; + height: ${({ height }) => height}px; +`; diff --git a/examples/client/Locomotion/src/Components/Marker/index.js b/examples/client/Locomotion/src/Components/Marker/index.js index 235f9ffbe..f1c7dc70c 100644 --- a/examples/client/Locomotion/src/Components/Marker/index.js +++ b/examples/client/Locomotion/src/Components/Marker/index.js @@ -14,9 +14,10 @@ import { } from './styled'; import i18n from '../../I18n'; import SvgIcon from '../SvgIcon'; -import { STOP_POINT_TYPES, STOP_POINT_STATES } from '../../lib/commonTypes'; +import { STOP_POINT_TYPES, formatUiDisplaySpType } from '../../lib/commonTypes'; import Loader from '../Loader'; import pulse from '../../assets/marker-pulse.json'; +import VirtualStationComponent from '../VirtualStationComponent'; const StopPointMarker = ({ stopPoint, @@ -24,9 +25,13 @@ const StopPointMarker = ({ isNext, etaText, isFutureRide, + isStationsEnabled = false, + index, }) => { const { lat, lng } = stopPoint; const theme = useContext(ThemeContext); + const stationIcon = type => ; + const typeDetails = { [STOP_POINT_TYPES.STOP_POINT_PICKUP]: { Icon: , + stationIcon: stationIcon(STOP_POINT_TYPES.STOP_POINT_PICKUP), displayName: i18n.t('rideDetails.type.pickup'), }, [STOP_POINT_TYPES.STOP_POINT_DROPOFF]: { @@ -44,8 +50,19 @@ const StopPointMarker = ({ height={50} style={{ top: Platform.OS === 'ios' ? -45 : 0 }} />, + stationIcon: stationIcon(STOP_POINT_TYPES.STOP_POINT_DROPOFF), displayName: i18n.t('rideDetails.type.dropoff'), }, + [STOP_POINT_TYPES.STOP_POINT_MULTI]: { + Icon: , + stationIcon: stationIcon(STOP_POINT_TYPES.STOP_POINT_MULTI), + displayName: i18n.t('rideDetails.type.multi'), + }, }; const getMarkerIcon = () => { @@ -82,7 +99,7 @@ const StopPointMarker = ({ - {typeDetails[stopPoint.type].displayName} + {typeDetails[formatUiDisplaySpType(stopPoint, index)].displayName} @@ -93,7 +110,7 @@ const StopPointMarker = ({ - {typeDetails[stopPoint.type].Icon} + {typeDetails[stopPoint.type][isStationsEnabled ? 'stationIcon' : 'Icon']} ); diff --git a/examples/client/Locomotion/src/Components/Menu/bottom.js b/examples/client/Locomotion/src/Components/Menu/bottom.js index 8917d9173..64b9915fc 100644 --- a/examples/client/Locomotion/src/Components/Menu/bottom.js +++ b/examples/client/Locomotion/src/Components/Menu/bottom.js @@ -1,7 +1,10 @@ -import React from 'react'; +import React, { Fragment } from 'react'; +import Config from 'react-native-config'; import styled from 'styled-components'; import { FONT_SIZES, FONT_WEIGHTS } from '../../context/theme'; import { getVersion } from '../../services/device'; +import i18n from '../../I18n'; + export const BottomContainer = styled.View` position: absolute; @@ -32,12 +35,20 @@ export const BottomTextBold = styled.Text` const appVersion = getVersion(); +const shouldHideAutofleet = Config.HIDE_AUTOFLEET && Config.HIDE_AUTOFLEET === 'true'; + export default () => ( + - powered by - Autofleet + {!shouldHideAutofleet + && ( + + {i18n.t('menu.poweredBy')} + Autofleet + + )} {`v. ${appVersion}`} diff --git a/examples/client/Locomotion/src/Components/Menu/index.js b/examples/client/Locomotion/src/Components/Menu/index.js index 410d56e91..76e91b8c3 100644 --- a/examples/client/Locomotion/src/Components/Menu/index.js +++ b/examples/client/Locomotion/src/Components/Menu/index.js @@ -1,4 +1,6 @@ +/* eslint-disable import/prefer-default-export */ import React, { useContext, useEffect, useState } from 'react'; +import { MessagesContext } from '../../context/messages'; import Bottom from './bottom'; import { MAIN_ROUTES } from '../../pages/routes'; import Thumbnail from '../Thumbnail'; @@ -12,12 +14,15 @@ import { Header, HeaderLink, DrawerLabelsContainer, + UpdatesText, + Updates, } from './styled'; import { UserContext } from '../../context/user'; import CalendarIcon from '../../assets/calendar.svg'; import History from '../../assets/history.svg'; import HelpIconSource from '../../assets/help.svg'; import CreditCardIconSource from '../../assets/credit-card.svg'; +import MessagesIcon from '../../assets/email.svg'; import SvgIcon from '../SvgIcon'; import settings from '../../context/settings'; import SETTINGS_KEYS from '../../context/settings/keys'; @@ -47,17 +52,26 @@ const DrawerHeader = ({ navigateTo }) => { }; const DrawerLabel = ({ - onPress, focused, tintColor, title, icon, lastItem, iconFill, testID, + onPress, focused, tintColor, title, icon, lastItem, iconFill, testID, numberOfUpdates, }) => ( {title} + {!!numberOfUpdates + && ( + + + {numberOfUpdates} + + + )} ); export const DrawerContentComponent = ({ navigation, state }) => { const route = state.routes[state.index].name; const { getSettingByKey } = settings.useContainer(); + const { userMessages } = useContext(MessagesContext); const [futureRidesEnabled, setFutureRidesEnabled] = useState(false); const navigateTo = (page) => { @@ -80,6 +94,16 @@ export const DrawerContentComponent = ({ navigation, state }) => { navigateTo(p)} /> navigateTo(MAIN_ROUTES.MESSAGES)} + iconFill="#333" + focused={route === MAIN_ROUTES.MESSAGES} + numberOfUpdates={(userMessages || []).filter(m => !m.readAt).length} + /> + navigateTo(MAIN_ROUTES.RIDE_HISTORY)} @@ -96,12 +120,14 @@ export const DrawerContentComponent = ({ navigation, state }) => { /> )} navigateTo(MAIN_ROUTES.PAYMENT)} focused={route === MAIN_ROUTES.PAYMENT} /> navigateTo(MAIN_ROUTES.CONTACT_US)} diff --git a/examples/client/Locomotion/src/Components/Menu/styled.js b/examples/client/Locomotion/src/Components/Menu/styled.js index 91ea56a0b..6e2f43d49 100644 --- a/examples/client/Locomotion/src/Components/Menu/styled.js +++ b/examples/client/Locomotion/src/Components/Menu/styled.js @@ -3,8 +3,21 @@ import styled from 'styled-components'; import Button from '../Button'; import { FONT_SIZES, FONT_WEIGHTS } from '../../context/theme'; +export const Updates = styled.View` +background-color: ${({ theme }) => theme.primaryColor}; +border-radius: 10px; +width: 30px; +align-items: center; +`; + +export const UpdatesText = styled.Text` +color: #ffffff; +${FONT_SIZES.LARGE} +`; + export const LabelText = styled.Text` color: ${({ theme }) => theme.textColor}; + flex-grow: 1; ${FONT_SIZES.H2} ${({ focused }) => (focused ? FONT_WEIGHTS.SEMI_BOLD : FONT_WEIGHTS.REGULAR)}; `; diff --git a/examples/client/Locomotion/src/Components/PageGenericMessage/index.js b/examples/client/Locomotion/src/Components/PageGenericMessage/index.js new file mode 100644 index 000000000..0dc12370a --- /dev/null +++ b/examples/client/Locomotion/src/Components/PageGenericMessage/index.js @@ -0,0 +1,71 @@ +import React, { useContext } from 'react'; +import styled, { ThemeContext } from 'styled-components'; +import { FONT_SIZES, FONT_WEIGHTS } from '../../context/theme'; +import noMessages from '../../assets/no_messages.svg'; +import SvgIcon from '../SvgIcon'; + +export const NoRidesImageContainer = styled.View` + align-self: center; +`; + +export const RideViewContainer = styled.View` + padding: 15px 5px; + flex-direction: row; + justify-content: space-between; +`; + +export const RideViewTextContainer = styled.View` + flex: 3; +`; + +export const CenterContainer = styled.View` + margin-top: ${({ addTop }) => (addTop ? '50%' : '0')}; + align-self: center; + align-content: center; +`; + +export const BaseText = styled.Text` + padding-top: 5px; +`; + +export const NoRidesListContainer = styled(BaseText)` + padding-top: 45px; + text-align: center; + ${FONT_SIZES.H2} + ${FONT_WEIGHTS.SEMI_BOLD} +`; +export const SubNoRidesListContainer = styled(BaseText)` + padding-top: 15px; + text-align: center; + font-size: 16px; +`; + +export const PageGenericMessage = ({ + title, text, svg = null, addTop = true, +}) => { + const { primaryColor } = useContext(ThemeContext); + return ( + + + + + + {title} + + + {text} + + + ); +}; + +export const DayTitleText = styled(BaseText)` + font-size: 16px; + text-transform: capitalize; +`; + +export const RidesViewContainer = styled.View` +`; + + +export default PageGenericMessage; diff --git a/examples/client/Locomotion/src/Components/PhoneNumberInput/index.tsx b/examples/client/Locomotion/src/Components/PhoneNumberInput/index.tsx index 9c6fca688..b9e950486 100644 --- a/examples/client/Locomotion/src/Components/PhoneNumberInput/index.tsx +++ b/examples/client/Locomotion/src/Components/PhoneNumberInput/index.tsx @@ -31,7 +31,9 @@ const PhoneNumberInput = ({ const setIsoCode = async () => { const mobileIso = await getInputIsoCode(); - setDefaultCode(Config.OVERWRITE_COUNTRY_CODE || mobileIso); + setTimeout(() => { + setDefaultCode(Config.OVERWRITE_COUNTRY_CODE || mobileIso); + }, 50); }; const cleanNumber = (number: string) => { @@ -57,6 +59,7 @@ const PhoneNumberInput = ({ defaultCode={defaultCode} onChangeFormattedText={onChangeText} textInputProps={{ + returnKeyType: 'done', placeholderTextColor: theme.disabledColor, testID: 'phoneNumber', accessible: true, diff --git a/examples/client/Locomotion/src/Components/PriceBreakdown/index.tsx b/examples/client/Locomotion/src/Components/PriceBreakdown/index.tsx index 7f6ec0f15..fa8552f50 100644 --- a/examples/client/Locomotion/src/Components/PriceBreakdown/index.tsx +++ b/examples/client/Locomotion/src/Components/PriceBreakdown/index.tsx @@ -14,8 +14,10 @@ import { CenteredItemText, Line, InnerContainer, + PriceText, } from './styled'; import { COUPON_TYPE } from '../../lib/commonTypes'; +import settingsContext from '../../context/settings'; const NoBreakdownComponent = ({ didRequestFail, @@ -58,9 +60,11 @@ const PriceBreakdown = ({ didRequestFail, retryGetPriceBreakdown, }: PriceBreakdownProps) => { + const { showPrice, loadShowPrice } = settingsContext.useContainer(); const isDebuggingEnabled = typeof atob !== 'undefined'; const [priceCalculationItems, setPriceCalculationItems] = useState(); const [total, setTotal] = useState(null); + const getPriceWithCurrency = (amount: number) => `${getCurrencySymbol(priceCalculation.currency)}${amount.toFixed(2)}`; const calculationTypeToUnit: any = { @@ -82,7 +86,8 @@ const PriceBreakdown = ({ totalPrice += item.price; let name; if (item.pricingRule) { - const calculationTypeToUnitInstance = calculationTypeToUnit[item.pricingRule.calculationType]; + const calculationTypeToUnitInstance = calculationTypeToUnit[ + item.pricingRule.calculationType]; name = `${i18n.t('ridePriceBreakdown.priceItem', { name: item.pricingRule.name, })} ${calculationTypeToUnitInstance ? calculationTypeToUnitInstance( @@ -116,6 +121,10 @@ const PriceBreakdown = ({ } }, [priceCalculation]); + useEffect(() => { + loadShowPrice(); + }, []); + return ( <> @@ -124,7 +133,7 @@ const PriceBreakdown = ({ priceCalculationItems.map(item => ( {item.name} - {item.price} + {item.price} )) ) : ( @@ -141,8 +150,8 @@ const PriceBreakdown = ({ {`${i18n.t('ridePriceBreakdown.total')}`} - {priceCalculationItems ? ( - {total} + {priceCalculationItems && showPrice ? ( + {total} ) : ( { const isCash = PAYMENT_METHODS.CASH === paymentMethod.id; const isOffline = PAYMENT_METHODS.OFFLINE === paymentMethod.id; + const { offlinePaymentText, loadOfflinePaymentText } = PaymentContext.useContainer(); + + useEffect(() => { + loadOfflinePaymentText(); + }, []); const getText = () => { if (isCash) { return i18n.t('payments.cash'); } if (isOffline) { - return i18n.t('payments.offline'); + return offlinePaymentText; } return paymentMethod.name; }; @@ -48,7 +52,7 @@ const CardComponent = ({ paymentMethod }: CardComponentProps) => { }; return ( !isCash && !isOffline && } icon={getIcon()} style={{ marginTop: 10, marginBottom: 10 }} @@ -61,13 +65,14 @@ const CardComponent = ({ paymentMethod }: CardComponentProps) => { interface RideCardProps { ride: RideInterface; onPress: (ride: RideInterface) => void; - serviceName: string; + serviceName: string | undefined; paymentMethod: any; scheduledTo: string | number; + pickupWindowTime: number; } const RideCard = ({ - ride, onPress, serviceName, paymentMethod, scheduledTo, + ride, onPress, serviceName, paymentMethod, scheduledTo, pickupWindowTime, }: RideCardProps) => { const [ridePriceCalculation, setRidePriceCalculation] = useState(); const [timezonedScheduledTo, setTimezonedScheduledTo] = useState(null); @@ -75,6 +80,7 @@ const RideCard = ({ const { getRidePriceCalculation, } = useContext(RidePageContext); + const { showPrice, loadShowPrice } = SettingsContext.useContainer(); const addPriceCalculation = async () => { const price = await getRidePriceCalculation(ride.id, ride.priceCalculationId); @@ -87,6 +93,10 @@ const RideCard = ({ } }, [ride]); + useEffect(() => { + loadShowPrice(); + }, []); + const formatScheludedTo = async (time: any) => { try { const { stopPoints = [] } = ride; @@ -98,8 +108,11 @@ const RideCard = ({ false, ); - const newScheduledTo = moment.parseZone(convertedTime.time).format('MMMM DD, YYYY, h:mm A'); - setTimezonedScheduledTo(newScheduledTo); + const newScheduledTo = moment.parseZone(convertedTime.time).format('MMM DD, YYYY [at] h:mm A'); + const scheduledBeforeTime = pickupWindowTime + ? moment.parseZone(convertedTime.time).add(pickupWindowTime, 'minutes').format('h:mm A') + : i18n.t('general.noTimeWindow'); + setTimezonedScheduledTo(`${newScheduledTo} - ${scheduledBeforeTime}`); setDisplayTimezone(null); } catch (e) { const newScheduledTo = moment(time).format('MMMM DD, YYYY, h:mm A'); @@ -109,7 +122,7 @@ const RideCard = ({ }; useEffect(() => { formatScheludedTo(scheduledTo); - }, [scheduledTo]); + }, [scheduledTo, pickupWindowTime]); return ( @@ -137,7 +150,8 @@ const RideCard = ({ {serviceName} - + { showPrice && ( + {getFormattedPrice(ride.priceCurrency, ride.priceAmount)} @@ -150,6 +164,7 @@ const RideCard = ({ : null} {displayTimezone ? : null} + )} diff --git a/examples/client/Locomotion/src/Components/RideCard/styled.ts b/examples/client/Locomotion/src/Components/RideCard/styled.ts index 933842808..d7bc485c6 100644 --- a/examples/client/Locomotion/src/Components/RideCard/styled.ts +++ b/examples/client/Locomotion/src/Components/RideCard/styled.ts @@ -41,10 +41,10 @@ ${FONT_WEIGHTS.LIGHT} export const TopTextsContainer = styled(View)` flex-direction: column; -max-width: 70%; +max-width: 75%; `; export const TopPriceContainer = styled(View)` flex-direction: column; -max-width: 30%; +max-width: 25%; `; diff --git a/examples/client/Locomotion/src/Components/RidePaymentDetails/index.tsx b/examples/client/Locomotion/src/Components/RidePaymentDetails/index.tsx index e5f96b41c..887ce9f17 100644 --- a/examples/client/Locomotion/src/Components/RidePaymentDetails/index.tsx +++ b/examples/client/Locomotion/src/Components/RidePaymentDetails/index.tsx @@ -11,7 +11,7 @@ import { PaymentRow, RidePriceDetails, PriceText, ViewDetails, CardRowContainer, } from './styled'; import { PaymentMethodInterface } from '../../context/payments/interface'; -import PaymentContext from '../../context/payments'; +import SettingsContext from '../../context/settings'; import * as navigationService from '../../services/navigation'; import Button from '../Button'; @@ -33,6 +33,8 @@ const RidePaymentDetails = ({ getRidePriceCalculation, } = useContext(RidePageContext); + const { showPrice, loadShowPrice } = SettingsContext.useContainer(); + const updatePriceCalculation = async () => { const calculation = await getRidePriceCalculation(rideId); setPriceCalculation(calculation); @@ -43,6 +45,7 @@ const RidePaymentDetails = ({ useEffect(() => { updatePriceCalculation(); + loadShowPrice(); }, []); return (paymentMethod ? ( @@ -54,16 +57,19 @@ const RidePaymentDetails = ({ - {!rideHistory ? (totalAmount === 0 + {!rideHistory && (totalAmount === 0 ? {`${i18n.t('rideDetails.noCharge')}`} - : ( - + : (showPrice + && ( + {getFormattedPrice(priceCalculation?.currency, totalAmount)} + ) ) - ) : null} + )} + {showPrice && ( + )} diff --git a/examples/client/Locomotion/src/Components/SelectModal/index.tsx b/examples/client/Locomotion/src/Components/SelectModal/index.tsx new file mode 100644 index 000000000..eab0c6bd7 --- /dev/null +++ b/examples/client/Locomotion/src/Components/SelectModal/index.tsx @@ -0,0 +1,135 @@ +import React, { useEffect, useState } from 'react'; +import { Text, View } from 'react-native'; +import styled from 'styled-components'; +import SelectDropdown from 'react-native-select-dropdown'; +import SvgIcon from '../SvgIcon'; +import person from '../../assets/person.svg'; +import { + FONT_SIZES, FONT_SIZES_VALUES, FONT_WEIGHTS, convertHextToRgba, +} from '../../context/theme'; + +const ERROR_COLOR = '#f35657'; +const StyledPop = styled(SelectDropdown).attrs(({ theme, icon = person, error }) => ({ + buttonStyle: { + borderRadius: 8, + flex: 1, + marginRight: 8, + backgroundColor: '#ffffff', + borderWidth: 1, + borderColor: !error ? '#f1f2f6' : ERROR_COLOR, + }, + buttonTextStyle: { + fontSize: FONT_SIZES_VALUES.H3, + color: theme.textColor, + }, + renderDropdownIcon: () => ( + + ), + rowStyle: { + height: 40, + }, +}))``; + + +const StyledRow = styled(View)` + height: 40; + display: flex; + justify-content: space-between; + flex-direction: row; + align-items: center; + padding-horizontal: 8; + background-color: ${({ theme, selected }) => (selected ? `rgba(${convertHextToRgba(theme.primaryColor, 0.1)})` : '#ffffff')}; + border-width: 1; + border-color: #f1f2f6; +`; + +const StyledText = styled(Text)` + ${FONT_SIZES.H3}; + text-align: center; + flex: 1; + margin-horizontal: 8; + color: ${({ theme }) => theme.textColor}; + ${({ selected }) => selected && `${FONT_WEIGHTS.BOLD}`} +`; + +const StyledIcon = styled(SvgIcon).attrs(({ + theme, fillColor, width, height, selected, +}) => ({ + fill: fillColor || (selected ? theme.primaryColor : theme.textColor), + width: width || 16, + height: height || 16, +}))``; + + +const StyledSelectRow = ({ item, theme, selected }) => ( + + + {item.label} + + +); + +interface Item { + value: any; + label: string; +} + +interface SelectModalProps { + data: Item[]; + onSelect: (item: Item) => void; + onError: (error: boolean) => void; +} + +const SelectModal = ({ data, onSelect, onError }: SelectModalProps) => { + const [selectedItem, setSelectedItem] = useState(null); + const [error, setError] = useState(false); + + useEffect(() => { + if (data?.length) { + if (!selectedItem) { + setSelectedItem(data[0]); + } else { + setError(!(data.find(item => item.value === selectedItem.value))); + } + } + }, [data, selectedItem]); + + useEffect(() => { + onError(error); + }, [error]); + + useEffect(() => { + onSelect(selectedItem); + }, [selectedItem]); + + return ( + { + setSelectedItem(item); + }} + dropdownIconPosition="left" + dropdownOverlayColor="transparent" + buttonTextAfterSelection={(item, index) => item.value} + renderCustomizedRowChild={(item, index) => ( + + )} + /> + ); +}; + +export default SelectModal; diff --git a/examples/client/Locomotion/src/Components/Stars/index.js b/examples/client/Locomotion/src/Components/Stars/index.js index 07769492d..5c09930bb 100644 --- a/examples/client/Locomotion/src/Components/Stars/index.js +++ b/examples/client/Locomotion/src/Components/Stars/index.js @@ -29,11 +29,11 @@ export const StarIcon = styled(StarSvg).attrs((({ const NUM_OF_STARS = [1, 2, 3, 4, 5]; const Star = ({ - onPress, isOn, size, num = 1, + onPress, isOn, size, }) => ( @@ -173,7 +202,7 @@ const AccountContent = () => { onSubmit={async () => { try { await deleteUser(); - navigationService.navigate(MAIN_ROUTES.LOGOUT); + await Auth.logout(); } catch (e) { console.log(e); setIsDeleteUserVisible(false); @@ -182,6 +211,19 @@ const AccountContent = () => { }} onClose={() => setIsDeleteUserVisible(false)} /> + setLanguagePickerVisible(false)} + onSubmit={(id) => { + setChosenLanguageIndex(id); + updateLanguage(languageItems[id].value, () => { + setHeaderTitle(i18n.t('onboarding.pageTitle')); + }); + }} + selected={chosenLanguageIndex} + title={i18n.t('popups.chooseLanguage.title')} + /> { ); }; -export default ({ navigation, menuSide }) => ( - - navigationService.navigate(MAIN_ROUTES.HOME)} - iconSide={menuSide} - /> - - - - - -); +export default ({ navigation, menuSide }) => { + const [headerTitle, setHeaderTitle] = useState(i18n.t('onboarding.pageTitle')); + return ( + + navigationService.navigate(MAIN_ROUTES.HOME)} + iconSide={menuSide} + /> + + + + + + ); +}; diff --git a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/AddressSelector/AddressLine.js b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/AddressSelector/AddressLine.js index fd88c374f..cccbfe023 100644 --- a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/AddressSelector/AddressLine.js +++ b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/AddressSelector/AddressLine.js @@ -15,11 +15,10 @@ const ICONS = { }; const Row = styled(Button)` - width: 100%; min-height: 50px; - flex-direction: row; - justify-content: flex-start; - align-items: center; + flex-direction: column; + flex-grow: 1; + max-height: 70px; padding: 10px 0px; ${({ border }) => border && ` border-bottom-color: #f1f2f6; @@ -27,22 +26,29 @@ const Row = styled(Button)` `} `; +const SubRow = styled.View` + flex-direction: row; + justify-content: flex-start; + align-self: center; + flex: 1; + +`; const IconContainer = styled.View` margin-right: 15px; + align-self: center; `; -const Icon = styled(SvgIcon).attrs(({ actionButton, theme }) => ({ - stroke: actionButton ? theme.primaryColor : theme.textColor, - fill: actionButton ? theme.primaryColor : theme.textColor, -}))``; - const AddressContainer = styled.View` flex-direction: column; justify-content: space-between; flex: 1; + align-self: center; `; -const AddressText = styled.Text` + +const AddressText = styled.Text.attrs({ + numberOfLines: 1, +})` color: ${({ subtext, actionButton, theme }) => (!subtext ? (actionButton ? theme.primaryColor : theme.textColor) : '#666666')}; font-weight: 500; font-size: 14px; @@ -56,6 +62,19 @@ const ActionText = styled.Text` line-height: 20px; `; +const Label = styled.Text` + color: #666666; + font-weight: 500; + font-size: 12px; + line-height: 20px; +`; + +const Icon = styled(SvgIcon).attrs(({ actionButton, theme }) => ({ + stroke: actionButton ? theme.primaryColor : theme.textColor, + fill: actionButton ? theme.primaryColor : theme.textColor, +}))``; + + const AddressRow = ({ text, subText, @@ -65,6 +84,8 @@ const AddressRow = ({ isLoading = false, isHistory, testID, + label, + distance, }) => { const finalIcon = ICONS[icon] || (isHistory && HistoryIcon); const isDebuggingEnabled = (typeof atob !== 'undefined'); @@ -75,35 +96,41 @@ const AddressRow = ({ onPress={onPress} noBackground > - - {finalIcon - ? ( - + + {finalIcon + ? ( + + ) + : null} + + + {isLoading && !isDebuggingEnabled ? ( + - ) - : null} - - - {isLoading && !isDebuggingEnabled ? ( - - ) : ( - <> - {actionButton ? {text} : {text}} - {subText ? {subText} : null} - - )} - + ) : ( + <> + {label ? : null} + {actionButton ? {text} : {text}} + {subText ? {subText} : null} + + )} + + + {distance} + + ); }; diff --git a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/AddressSelector/SearchBar.js b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/AddressSelector/SearchBar.js index c727c49cc..ce9210c3c 100644 --- a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/AddressSelector/SearchBar.js +++ b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/AddressSelector/SearchBar.js @@ -1,18 +1,24 @@ import React, { useCallback, useContext, useEffect, useRef, useState, } from 'react'; -import { Animated, View } from 'react-native'; +import { + Animated, View, +} from 'react-native'; import styled from 'styled-components'; import { debounce } from 'lodash'; +import shortid from 'shortid'; +import DraggableFlatList from 'react-native-draglist'; +import { STOP_POINT_TYPES } from '../../../../lib/commonTypes'; +import { UserContext } from '../../../../context/user'; +import settings from '../../../../context/settings'; import Mixpanel from '../../../../services/Mixpanel'; import BottomSheetInput from '../../../../Components/TextInput/BottomSheetInput'; import i18n from '../../../../I18n'; import { RidePageContext } from '../../../../context/newRideContext'; - import backImage from '../../../../assets/arrow-back.png'; -import { UserContext } from '../../../../context/user'; - +import SETTINGS_KEYS from '../../../../context/settings/keys'; +const { STOP_POINT_DROPOFF, STOP_POINT_PICKUP } = STOP_POINT_TYPES; const SearchContainer = styled.View` flex: 1; padding-bottom: 12px; @@ -35,7 +41,7 @@ const Row = styled(Animated.View)` ${({ isExpanded }) => isExpanded === false && ` display: none; `} - + `; @@ -50,27 +56,24 @@ const BackButtonContainer = styled.TouchableOpacity` `; + const ArrowImage = styled.Image.attrs({ source: backImage })` width: 25px; height: 25px; `; + const BackButton = ({ isExpanded, onBack }) => { if (!isExpanded) { return null; } return ( - + ); }; -/* if (Platform.OS === 'android' && UIManager.setLayoutAnimationEnabledExperimental -) { - UIManager.setLayoutAnimationEnabledExperimental(true); -} */ - const SearchBar = ({ isExpanded, onFocus = () => null, @@ -84,41 +87,52 @@ const SearchBar = ({ setSelectedInputTarget, requestStopPoints, updateRequestSp, + setRequestStopPoints, initSps, fillLoadSkeleton, + addNewEmptyRequestSp, + removeRequestSp, } = useContext(RidePageContext); - + const { getSettingByKey } = settings.useContainer(); const { locationGranted, } = useContext(UserContext); - + const SP_AMOUNT_WITHOUT_MULTI = 2; const [searchTerm, setSearchTerm] = useState(''); - - const debouncedSearch = React.useRef( - debounce(async (text, i) => { - onSearch(text); - }, 300), - ).current; - - - const getSpPlaceholder = (sp) => { - if (!isExpanded || !sp.useDefaultLocation) { - return 'addressView.whereTo'; + const [multiSpAmount, setMultiSpAmount] = useState(0); + const debouncedSearch = useCallback(debounce(async text => onSearch(text), 300), [locationGranted]); + const isMultiSpEnabled = multiSpAmount > 0 && isExpanded; + const amountOfEnteredSp = requestStopPoints.length; + const canAddMoreMultiSp = isMultiSpEnabled + && amountOfEnteredSp < multiSpAmount + SP_AMOUNT_WITHOUT_MULTI; + const hasEnteredMultiSp = amountOfEnteredSp > SP_AMOUNT_WITHOUT_MULTI; + const isSpIndexMulti = i => hasEnteredMultiSp && i > 0 && i < amountOfEnteredSp - 1; + const getSpPlaceholder = (sp, index) => { + if (isSpIndexMulti(index)) { + return 'addressView.multiStopPlaceholder'; } - - if (locationGranted) { + if (index === 0) { return 'addressView.enterAddress'; } - - return ''; + return 'addressView.whereTo'; }; + const onInputFocus = (target, index) => { setSelectedInputTarget(target); setSelectedInputIndex(index); onFocus(); }; + const loadMultiSpSetting = async () => { + const multiSpSetting = await getSettingByKey(SETTINGS_KEYS.MULTI_SP); + if (multiSpSetting && multiSpSetting.enabled) { + setMultiSpAmount(multiSpSetting.amount); + } + }; + useEffect(() => { + loadMultiSpSetting(); + }, []); useEffect(() => { fillLoadSkeleton(); debouncedSearch(searchTerm); @@ -131,44 +145,69 @@ const SearchBar = ({ inputRef.current.focus(); } }, [selectedIndex, isExpanded]); - - const buildSps = () => requestStopPoints.map((s, i) => { - const { type, description } = requestStopPoints[i]; - const placeholder = getSpPlaceholder(s); - const rowProps = i === 0 ? { isExpanded } : { setMargin: true }; - const autoFocus = isExpanded && i === selectedIndex; + const formatMovedMultiSps = (sps) => { + const newSps = [...sps]; + return newSps.map((sp, index) => { + const type = index === newSps.length - 1 ? STOP_POINT_DROPOFF : STOP_POINT_PICKUP; + return { + ...sp, + type, + }; + }); + }; + const renderDraggableItem = ({ + onStartDrag, item, onEndDrag, + }) => { + const index = requestStopPoints.indexOf(item); + const sp = requestStopPoints[index]; + const { type, description } = sp; + const placeholder = getSpPlaceholder(sp, index); + const rowProps = index === 0 ? { isExpanded } : { setMargin: true }; + const autoFocus = isExpanded && index === selectedIndex; return ( + + + { updateRequestSp({ description: text, lat: null, lng: null, - }, i); + externalId: null, + }, index); setSearchTerm(text); }} fullBorder value={description || ''} placeholderTextColor={isExpanded ? '#929395' : '#333333'} onFocus={(e) => { - Mixpanel.setEvent(`${type} address input focused`); - onInputFocus(e.target, i); + Mixpanel.setEvent('address input focused', { index, type }); + onInputFocus(e.target, index); }} - key={`input_${s.id}`} + isMultiSpEnabled={isMultiSpEnabled} + hasEnteredMultiSp={hasEnteredMultiSp} + onPressIn={e => e.currentTarget?.setSelection((description?.length || 0), (description?.length || 0))} + key={`input_${sp.id}`} autoCorrect={false} clear={() => { + Mixpanel.setEvent('address input cleared', { index, type }); updateRequestSp({ description: null, lat: null, lng: null, - }, i); + externalId: null, + id: shortid.generate(), + }, index); setSearchTerm(null); }} ref={(ref) => { @@ -176,10 +215,52 @@ const SearchBar = ({ inputRef.current = ref; } }} + remove={isSpIndexMulti(index) ? () => { + removeRequestSp(index); + Mixpanel.setEvent('sp removed by trash can click', { index, type }); + } : null} + add={canAddMoreMultiSp + && index === amountOfEnteredSp - 1 ? () => { + addNewEmptyRequestSp(); + Mixpanel.setEvent('sp added by plus click', { index, type }); + } + : null} + onLayout={(e) => { + if (e.currentTarget?.setSelection) { + e.currentTarget?.setSelection(1, 1); + } + } + } + onBlur={(e) => { + if (e.currentTarget?.setSelection) { + e.currentTarget?.setSelection(1, 1); + } + }} /> + + ); - }); + }; + const buildSps = () => ( + item.id} + keyboardShouldPersistTaps="always" + onReordered={(fromIndex, toIndex) => { + const newSps = [...requestStopPoints]; + const removed = newSps.splice(fromIndex, 1); + newSps.splice(toIndex, 0, removed[0]); + const formattedMovedStopPoints = formatMovedMultiSps(newSps); + setRequestStopPoints(formattedMovedStopPoints); + Mixpanel.setEvent('finished drag multi sps', { formattedMovedStopPoints }); + } + } + /> + ); + const onBackPress = useCallback(() => { initSps(); diff --git a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/AddressSelector/index.js b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/AddressSelector/index.js index e6cf97eac..776c9f149 100644 --- a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/AddressSelector/index.js +++ b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/AddressSelector/index.js @@ -1,7 +1,6 @@ import React, { useEffect, useContext, } from 'react'; - import { useBottomSheet, BottomSheetScrollView, @@ -9,16 +8,18 @@ import { import styled, { ThemeContext } from 'styled-components'; import SvgIcon from '../../../../Components/SvgIcon'; -import { RIDE_POPUPS } from '../../../../context/newRideContext/utils'; +import { RIDE_POPUPS, formatDistanceByMeasurement } from '../../../../context/newRideContext/utils'; import GenericErrorPopup from '../../../../popups/GenericError'; import i18n from '../../../../I18n'; import AddressRow from './AddressLine'; import SearchBar from './SearchBar'; import { RidePageContext } from '../../../../context/newRideContext'; + import { BottomSheetContext, SNAP_POINT_STATES } from '../../../../context/bottomSheetContext'; import { BS_PAGES } from '../../../../context/ridePageStateContext/utils'; import { RideStateContextContext } from '../../../../context/ridePageStateContext'; import { UserContext } from '../../../../context/user'; +import { VirtualStationsContext } from '../../../../context/virtualStationsContext'; import { FONT_SIZES, FONT_WEIGHTS } from '../../../../context/theme'; import noHistoryIcon from '../../../../assets/bottomSheet/better_eta.svg'; @@ -59,7 +60,7 @@ const ContentContainer = styled.View` align-items: center; flex-direction: column; padding: 0px 30px 40px 30px; - width: 100%; + flex: 1; `; @@ -71,9 +72,12 @@ const WelcomeText = styled.Text` `; const AddressSelectorBottomSheet = ({ addressSelectorFocusIndex }) => { const userContext = useContext(RidePageContext); + const { selectedInputIndex } = userContext; const { locationGranted, user } = useContext(UserContext); + const { stationsList, isStationsEnabled } = useContext(VirtualStationsContext); const { changeBsPage, + searchResults, } = useContext(RideStateContextContext); const { @@ -91,6 +95,7 @@ const AddressSelectorBottomSheet = ({ addressSelectorFocusIndex }) => { const onSearchFocus = () => { if (!isExpanded) { + userContext.initSps(); setSnapPointsState(SNAP_POINT_STATES.ADDRESS_SELECTOR); setIsExpanded(true); expand(); @@ -113,17 +118,31 @@ const AddressSelectorBottomSheet = ({ addressSelectorFocusIndex }) => { changeBsPage(BS_PAGES.SET_LOCATION_ON_MAP); collapse(); }; - + const getRecentLocationInputIndex = () => (isExpanded ? selectedInputIndex : 1); const getHistoryRows = () => { - if (userContext.historyResults.length) { - return userContext.historyResults.map((h, i) => ( + if (isStationsEnabled && stationsList.length) { + return userContext.formatStationsList(stationsList).map((h, i) => ( { + userContext.onAddressSelected(h, false, getRecentLocationInputIndex()); + }} + /> + )); + } + + if (userContext.historyResults.length && !isStationsEnabled) { + return userContext.historyResults.map((h, i) => ( + { - userContext.onAddressSelected(h, false, 1); + userContext.onAddressSelected(h, false, getRecentLocationInputIndex(), !isExpanded); }} /> )); @@ -132,6 +151,7 @@ const AddressSelectorBottomSheet = ({ addressSelectorFocusIndex }) => { ); }; + return ( {!isExpanded ? ( @@ -152,28 +172,42 @@ const AddressSelectorBottomSheet = ({ addressSelectorFocusIndex }) => { {isExpanded ? ( <> - {locationGranted ? ( + {locationGranted && userContext.addressSearchLabel && userContext.addressSearchLabel !== '' ? ( - ) : null} - {locationGranted ? ( - null} + label={i18n.t('virtualStations.search.title')} /> ) : null} + {locationGranted && !isStationsEnabled ? ( + + ) : null} + {locationGranted && !isStationsEnabled ? ( + + ) : null} + { - userContext.searchResults ? userContext.searchResults.map((h, i) => userContext.onAddressSelected(h)} />) - : userContext.historyResults.map((h, i) => userContext.onAddressSelected(h)} />) + userContext.searchResults && userContext.searchResults.length > 0 + ? userContext.searchResults.map((h, i) => userContext.onAddressSelected(h)} />) + : getHistoryRows() } diff --git a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/FutureBookingButton/index.tsx b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/FutureBookingButton/index.tsx index ab460df5b..84e98c694 100644 --- a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/FutureBookingButton/index.tsx +++ b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/FutureBookingButton/index.tsx @@ -17,15 +17,17 @@ const TimeText = styled(Text)` `; const FutureBookingButton = () => { - const { ride } = useContext(RidePageContext); + const { chosenService, ride } = useContext(RidePageContext); const nowText = i18n.t('bottomSheetContent.ride.now'); const { primaryColor } = useContext(ThemeContext); const isFutureRide = ride?.scheduledTo; const chosenTime = isFutureRide && moment(ride.scheduledTo).format('MMM D, h:mm A'); + const windowSize = chosenService?.futurePickupWindowSizeInMinutes; + const chosenBeforeTime = windowSize ? moment(ride.scheduledTo).add(windowSize, 'minutes').format('MMM D, h:mm A') : i18n.t('general.noTimeWindow'); return ( <> - {isFutureRide ? chosenTime : nowText} + {isFutureRide ? `${chosenTime} - ${chosenBeforeTime}` : nowText} ); diff --git a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/PassengersCounter/index.tsx b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/PassengersCounter/index.tsx new file mode 100644 index 000000000..b66b20840 --- /dev/null +++ b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/PassengersCounter/index.tsx @@ -0,0 +1,32 @@ +import React, { useState, useEffect } from 'react'; + + +import SelectModal from '../../../../../../Components/SelectModal'; + + +const PassengersCounter = ({ service, onSelect, onError = () => null }) => { + useEffect(() => { + if (service?.availableSeats) { + const array = []; + for (let i = 1; i <= service.availableSeats; i += 1) { + array.push({ label: i, value: i }); + } + setPassengersOptions(array); + } + }, [service]); + + const [passengersOptions, setPassengersOptions] = useState([]); + + const onItemSelect = (item) => { + onSelect(item?.value); + }; + return ( + + ); +}; + +export default PassengersCounter; diff --git a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/PaymentButton/index.tsx b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/PaymentButton/index.tsx index 3e2051559..1d277df1f 100644 --- a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/PaymentButton/index.tsx +++ b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/PaymentButton/index.tsx @@ -1,24 +1,23 @@ import React, { - useCallback, useContext, useEffect, useState, + useCallback, useContext, } from 'react'; import { Text, View } from 'react-native'; import { PaymentIcon } from 'react-native-payment-icons'; import styled, { ThemeContext } from 'styled-components'; import { useFocusEffect } from '@react-navigation/native'; import SkeletonContent from 'react-native-skeleton-content-nonexpo'; -import { getFormattedPrice } from '../../../../../../context/newRideContext/utils'; +import { isCardPaymentMethod, isCashPaymentMethod, isOfflinePaymentMethod } from '../../../../../../lib/ride/utils'; +import { getCouponText } from '../../../../../../context/newRideContext/utils'; import { MAIN_ROUTES } from '../../../../../routes'; import SvgIcon from '../../../../../../Components/SvgIcon'; import { FONT_SIZES, FONT_WEIGHTS, GREEN_COLOR } from '../../../../../../context/theme'; import { Brand } from '../../../../../../context/payments/interface'; -import cashIcon from '../../../../../../assets/cash.svg'; import plus from '../../../../../../assets/bottomSheet/plus.svg'; import i18n from '../../../../../../I18n'; import Button from '../../../../../../Components/Button'; import * as navigationService from '../../../../../../services/navigation'; import { UserContext } from '../../../../../../context/user'; import selected from '../../../../../../assets/selected-v.svg'; -import { PAYMENT_METHODS } from '../../../../../../pages/Payments/consts'; const TimeText = styled(Text)` ${FONT_SIZES.LARGE} @@ -42,7 +41,21 @@ const CardNameContainer = styled(View)` justify-content: flex-start; flex-direction: row; align-items: center; - max-width: 60%; + width: 55%; +`; + +const PromoButtonContainer = styled(View)` + display: flex; + justify-content: flex-end; + flex-direction: row; + align-items: center; + flex: 1; +`; + +const PromoCodeTextContainer = styled(View)` + display: flex; + flex-direction: row; + align-items: center; `; const PromoButton = styled(Button)` @@ -62,6 +75,7 @@ interface PaymentButtonProps { title: string; brand?: Brand; id?: string; + invalid?: boolean; } @@ -70,29 +84,18 @@ const PaymentButton = ({ title, brand, id, + invalid, }: PaymentButtonProps) => { const { primaryColor } = useContext(ThemeContext); - const [coupon, setCoupon] = useState(null); - const { getCoupon } = useContext(UserContext); + const { getCoupon, coupon, setCoupon } = useContext(UserContext); const isDebuggingEnabled = (typeof atob !== 'undefined'); const noCoupon = coupon && coupon.status === 'error'; - const loadPromoText = () => { - if (coupon && !noCoupon) { - let amount; - if (coupon.amount_off) { - amount = getFormattedPrice(coupon.currency, coupon.amount_off); - } else if (coupon.percent_off) { - amount = `${coupon.percent_off}%`; - } - - return i18n.t('home.promoCode.amountOff', { amount }); - } - return i18n.t('bottomSheetContent.ride.promoText'); - }; + const loadPromoText = () => (coupon && !noCoupon ? i18n.t('home.promoCode.amountOff', { amount: getCouponText(coupon) }) + : i18n.t('bottomSheetContent.ride.promoText')); const loadPromoButton = () => { - if (id === PAYMENT_METHODS.CASH) { + if (isCashPaymentMethod({ id }) || isOfflinePaymentMethod({ id })) { return null; } if (!isDebuggingEnabled && coupon === null) { @@ -120,18 +123,23 @@ const PaymentButton = ({ height={15} width={15} /> - - {loadPromoText()} - + + + {loadPromoText()} + + ); } + return (null); }; const checkCoupon = async () => { try { const res = await getCoupon(); - console.log('here'); setCoupon(res); } catch (e) { setCoupon({ status: 'error' }); @@ -141,19 +149,27 @@ const PaymentButton = ({ useFocusEffect( useCallback(() => { checkCoupon(); + return () => setCoupon(null); }, []), ); - + const IconColor = invalid ? '#F83743' : primaryColor; return ( - {id ? (id !== PAYMENT_METHODS.CASH - ? - : ) - : } + {isCardPaymentMethod({ id }) ? + : ( + + )} {title} - {loadPromoButton()} + + {loadPromoButton()} + ); }; @@ -163,4 +179,5 @@ export default PaymentButton; PaymentButton.defaultProps = { brand: null, id: null, + invalid: false, }; diff --git a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/index.tsx b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/index.tsx index 576a1483e..208f2af3f 100644 --- a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/index.tsx +++ b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/index.tsx @@ -1,17 +1,22 @@ -import React, { useContext, useState, useEffect } from 'react'; +import React, { + useContext, useState, useEffect, useCallback, +} from 'react'; import DatePicker from 'react-native-date-picker'; import moment from 'moment'; import { ThemeContext } from 'styled-components'; +import { Animated } from 'react-native'; +import { isCashPaymentMethod, isOfflinePaymentMethod } from '../../../../../lib/ride/utils'; +import DatePickerPoppup from '../../../../../popups/DatePickerPoppup'; import FutureBookingButton from './FutureBookingButton'; import { Container, RowContainer, ButtonContainer, ButtonText, StyledButton, HALF_WIDTH, + PickerDate, PickerTimeRange, PickerTitle, ErrorText, ButtonContainerWithError, ButtonWithError, } from './styled'; import { RidePageContext } from '../../../../../context/newRideContext'; import NoteButton from '../../../../../Components/GenericRideButton'; import i18n from '../../../../../I18n'; import plus from '../../../../../assets/bottomSheet/plus.svg'; import editNote from '../../../../../assets/bottomSheet/edit_note.svg'; -import creditCardIcon from '../../../../../assets/bottomSheet/credit_card_icon.svg'; import PaymentButton from './PaymentButton'; import PaymentsContext from '../../../../../context/payments'; import { PaymentMethodInterface } from '../../../../../context/payments/interface'; @@ -19,12 +24,22 @@ import { RideStateContextContext } from '../../../../../context/ridePageStateCon import { popupNames } from '../utils'; import { BS_PAGES } from '../../../../../context/ridePageStateContext/utils'; import cashPaymentMethod from '../../../../../pages/Payments/cashPaymentMethod'; +import offlinePaymentMethod from '../../../../../pages/Payments/offlinePaymentMethod'; import { getFutureRideMaxDate, getFutureRideMinDate } from '../../../../../context/newRideContext/utils'; import settings from '../../../../../context/settings'; import SETTINGS_KEYS from '../../../../../context/settings/keys'; -import { getTextColorForTheme } from '../../../../../context/theme'; -import { PAYMENT_METHODS } from '../../../../../pages/Payments/consts'; +import { PAYMENT_METHODS, paymentMethodToIconMap } from '../../../../../pages/Payments/consts'; +import PassengersCounter from './PassengersCounter'; +import ErrorPopup from '../../../../../popups/TwoButtonPopup'; +import { capitalizeFirstLetter, getPaymentMethod } from '../../../../../pages/Payments/cardDetailUtils'; +const POOLING_TYPES = { + NO: 'no', + ACTIVE: 'active', + PASSIVE: 'passive', +}; + +const TIME_WINDOW_CHANGE_HIGHLIGHT_TIME_MS = 500; interface RideButtonsProps { displayPassenger: boolean; setPopupName: (popupName: popupNames) => void; @@ -40,10 +55,19 @@ const RideButtons = ({ chosenService, setUnconfirmedPickupTime, unconfirmedPickupTime, + setNumberOfPassengers, + defaultService, + loadFutureBookingDays, + futureBookingDays, } = useContext(RidePageContext); + + const { changeBsPage, } = useContext(RideStateContextContext); + const [pickupTimeWindow, setPickupTimeWindow] = useState(0); + const [pickupTimeWindowChangedHighlight, setPickupTimeWindowChangedHighlight] = useState(false); + const [highEtaPopupVisible, setHighEtaPopupVisible] = useState(false); const { getSettingByKey } = settings.useContainer(); const { paymentMethods, @@ -56,6 +80,12 @@ const RideButtons = ({ const [isDatePickerOpen, setIsDatePickerOpen] = useState(false); const [isFutureRidesEnabled, setIsFutureRidesEnabled] = useState(true); const [minMinutesBeforeFutureRide, setMinMinutesBeforeFutureRide] = useState(null); + const [passengersCounterError, setPassengersCounterError] = useState(false); + const firstDate = () => moment(ride?.scheduledTo || undefined).add(ride?.scheduledTo ? 0 : (minMinutesBeforeFutureRide || 0) + 1, 'minutes').toDate(); + const [tempSelectedDate, setTempSelectedDate] = useState(firstDate()); + + const paymentMethodNotAllowedOnService = chosenService && ride?.paymentMethodId + && !chosenService.allowedPaymentMethods.includes(getPaymentMethod(ride.paymentMethodId)); const checkFutureRidesSetting = async () => { const futureRidesEnabled = await getSettingByKey( @@ -69,38 +99,101 @@ const RideButtons = ({ setMinMinutesBeforeFutureRide(minutes); }; + useEffect(() => { + setTempSelectedDate(firstDate()); + }, [minMinutesBeforeFutureRide]); + useEffect(() => { checkFutureRidesSetting(); checkMinutesBeforeFutureRideSetting(); + loadFutureBookingDays(); }, []); + + const [animatedOpacity] = useState(new Animated.Value(0)); + + const animatedStyle = { + height: '100%', + width: HALF_WIDTH, + backgroundColor: '#d3eefc', + borderRadius: 8, + opacity: animatedOpacity, + }; + + const animateShowBg = (toValue: number, duration: number) => { + Animated.timing(animatedOpacity, { + toValue: ride?.scheduledTo ? toValue : 0, + duration, + useNativeDriver: false, + }).start(); + }; + + useEffect(() => { + if (chosenService && pickupTimeWindow !== chosenService.futurePickupWindowSizeInMinutes) { + setPickupTimeWindow(chosenService.futurePickupWindowSizeInMinutes); + setPickupTimeWindowChangedHighlight(true); + animateShowBg(1, 0); + setTimeout(() => { + setPickupTimeWindowChangedHighlight(false); + animateShowBg(0, 250); + }, TIME_WINDOW_CHANGE_HIGHLIGHT_TIME_MS); + } + }, [chosenService]); + const renderFutureBooking = () => { const close = () => { setIsDatePickerOpen(false); + setTempSelectedDate(firstDate); }; + const afterTimeTitle = moment(tempSelectedDate).format('h:mm A'); + const pickupWindow = (chosenService || defaultService)?.futurePickupWindowSizeInMinutes; + const beforeTimeTitle = (pickupWindow + && moment(tempSelectedDate).add(pickupWindow, 'minutes').format('h:mm A')) + || i18n.t('general.noTimeWindow'); + + const renderDatePickerTitle = () => ( + <> + {i18n.t('bottomSheetContent.ride.chosePickupTime')} + {moment(tempSelectedDate).format('dddd, MMM Do')} + {`${afterTimeTitle} - ${beforeTimeTitle}`} + + + ); + return ( - minMinutesBeforeFutureRide && setIsDatePickerOpen(true)}> - - + + minMinutesBeforeFutureRide && setIsDatePickerOpen(true)} + style={{ position: 'absolute' }} + > + + + + { if (unconfirmedPickupTime !== date.getTime()) { setUnconfirmedPickupTime(date.getTime()); changeBsPage(BS_PAGES.CONFIRM_PICKUP_TIME); - close(); } + close(); }} - modal + onChange={date => setTempSelectedDate(date)} /> - + + ); }; @@ -124,15 +217,34 @@ const RideButtons = ({ ); }; + const paymentMethodIdToDataMap = { + [PAYMENT_METHODS.CASH]: cashPaymentMethod, + [PAYMENT_METHODS.OFFLINE]: offlinePaymentMethod, + }; const renderPaymentButton = () => { - const ridePaymentMethod = ride?.paymentMethodId; + const { offlinePaymentText, loadOfflinePaymentText } = PaymentsContext.useContainer(); + useEffect(() => { + loadOfflinePaymentText(); + }, []); + const ridePaymentMethodId = ride?.paymentMethodId || ''; const selectedPaymentMethod: - PaymentMethodInterface | undefined = ridePaymentMethod === PAYMENT_METHODS.CASH - ? cashPaymentMethod - : paymentMethods.find(pm => pm.id === ridePaymentMethod); + PaymentMethodInterface | undefined = paymentMethodIdToDataMap[ridePaymentMethodId] + || paymentMethods.find(pm => pm.id === ridePaymentMethodId); - return ( + const getSelectedPaymentMethodTitle = () : string => { + if (isCashPaymentMethod(selectedPaymentMethod)) { + return i18n.t('payments.cash'); + } + if (isOfflinePaymentMethod(selectedPaymentMethod)) { + return offlinePaymentText; + } + + return selectedPaymentMethod?.name || i18n.t('bottomSheetContent.ride.addPayment'); + }; + const pureButton = () => ( { setPopupName('payment'); @@ -141,38 +253,115 @@ const RideButtons = ({ > ); + + const ridePaymentMethod = ride?.paymentMethodId ? getPaymentMethod(ride.paymentMethodId) : ''; + const getTypeText = () => { + if (isOfflinePaymentMethod(selectedPaymentMethod)) { + return i18n.t('bottomSheetContent.ride.defaultPaymentMethodNotAllowedText'); + } + return capitalizeFirstLetter(ridePaymentMethod); + }; + return ( + <> + {paymentMethodNotAllowedOnService + ? ( + + {pureButton()} + + ) + : pureButton() } + + ); + }; + + + useEffect(() => { + if (!chosenService || chosenService?.pooling === POOLING_TYPES.NO) { + setNumberOfPassengers(null); + setPassengersCounterError(false); + } + }, [chosenService]); + + const allowRideOrderIfNoMatchedVehicles = chosenService?.allowRideOrderIfNoVehiclesMatched; + + const isSelectButtonDisabled = () => ( + !chosenService || !(chosenService?.isHighEtaAsapRide ? allowRideOrderIfNoMatchedVehicles : chosenService) + || !!getClientOutstandingBalanceCard() || passengersCounterError || paymentMethodNotAllowedOnService + ); + + const selectButtonText = () => { + if (chosenService?.isHighEtaAsapRide) { + return i18n.t(allowRideOrderIfNoMatchedVehicles ? 'bottomSheetContent.ride.highEtaButton.enabled' : 'bottomSheetContent.ride.highEtaButton.disabled'); + } + return i18n.t('general.select'); }; return ( - - - <> + <> + + {isFutureRidesEnabled && renderFutureBooking()} {displayPassenger ? <> : renderRideNotes()} - - - - <> + + + + {displayPassenger && renderRideNotes()} {renderPaymentButton()} - - - { + + + + + {chosenService && chosenService?.pooling !== POOLING_TYPES.NO + ? ( + + ) : null} + + { + if (chosenService?.isHighEtaAsapRide) { + setHighEtaPopupVisible(true); + } else { + changeBsPage(BS_PAGES.CONFIRM_PICKUP); + } + }} + > + + {selectButtonText().toString()} + + + + + setHighEtaPopupVisible(false)} + onDefaultPress={() => { + setHighEtaPopupVisible(false); changeBsPage(BS_PAGES.CONFIRM_PICKUP); }} - > - {i18n.t('general.select').toString()} - - + /> + ); }; diff --git a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/styled.ts b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/styled.ts deleted file mode 100644 index 2fa5a3007..000000000 --- a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/styled.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { Text, View, TouchableOpacity } from 'react-native'; -import styled from 'styled-components'; -import { FONT_SIZES, FONT_WEIGHTS } from '../../../../../context/theme'; -import Button from '../../../../../Components/Button'; - -export const HALF_WIDTH = '48%'; - -export const Container = styled(View)` - padding: 0 20px; - padding-bottom: 48px; - display: flex; - height: 198px; - background-color: white; -`; - -export const RowContainer = styled(View)` - flex-direction: row; -width: 100%; -height: 30%; -margin-bottom: 2%; -justify-content: space-between; -`; - -export const ButtonContainer = styled(Button).attrs({ - noBackground: true, -})` - flex-direction: row; - border: 1px solid #f1f2f6; - border-radius: 8px; - align-items: center; - height: 100%; - display: flex; - width: ${HALF_WIDTH}; - padding: 0 15px; -`; - -export const ButtonText = styled(Text)` - margin: auto; - color: ${({ theme }) => theme.primaryButtonTextColor}; - ${FONT_SIZES.H3}; - ${FONT_WEIGHTS.REGULAR}; -`; - -export const StyledButton = styled(Button)` -width: 100%; -height: 50px; -background-color: ${({ disabled, theme }) => (disabled ? '#bcbcbc' : theme.primaryColor)}; -border-radius: 8px; -`; diff --git a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/styled.tsx b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/styled.tsx new file mode 100644 index 000000000..1eaa59a00 --- /dev/null +++ b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/RideButtons/styled.tsx @@ -0,0 +1,99 @@ +import React from 'react'; +import { Text, View, TouchableOpacity } from 'react-native'; +import styled from 'styled-components'; +import { FONT_SIZES, FONT_WEIGHTS } from '../../../../../context/theme'; +import Button from '../../../../../Components/Button'; + +export const HALF_WIDTH = '48%'; + +export const Container = styled(View)` + padding: 0 20px; + padding-bottom: 48px; + display: flex; + height: 198px; + background-color: white; +`; + +export const RowContainer = styled(View)` + flex-direction: row; + width: 100%; + height: 30%; + margin-bottom: 2%; + justify-content: space-between; + display: flex; + row-gap: 10; +`; + +export const ButtonContainer = styled(Button).attrs({ + noBackground: true, +})` + flex-direction: row; + border: ${({ error }) => (error ? '1px solid #F83743' : '1px solid #f1f2f6')}; + border-radius: 8px; + align-items: center; + height: 100%; + display: flex; + width: ${HALF_WIDTH}; + padding: ${(({ padding }) => (padding || '0 15px'))}; +`; + +export const ButtonText = styled(Text)` + margin: auto; + color: ${({ theme }) => theme.primaryButtonTextColor}; + ${FONT_SIZES.H3}; + ${FONT_WEIGHTS.REGULAR}; +`; + +export const StyledButton = styled(Button)` +flex: 5; +height: 50px; +background-color: ${({ disabled, theme }) => (disabled ? '#bcbcbc' : theme.primaryColor)}; +border-radius: 8px; +`; + +export const PickerTitle = styled(Text)` + ${FONT_SIZES.H1}; + ${FONT_WEIGHTS.SEMI_BOLD}; + margin-bottom: 25px; +`; + +export const PickerDate = styled(Text)` + ${FONT_SIZES.H3}; + ${FONT_WEIGHTS.LIGHT}; + margin-bottom: 7px; +`; + +export const PickerTimeRange = styled(Text)` + ${FONT_SIZES.H1}; +`; + +export const ButtonContainerWithError = styled(View)` +display: flex; +flex-direction: column; +height: 100%; +`; + +export const ButtonContainerInError = styled(View)` +display: flex; +flex-direction: column; +height: 80%; +`; + +export const ErrorText = styled(Text)` + ${FONT_SIZES.MEDIUM}; + color: #F83743; +`; + +export const ButtonWithError = ({ children, errorText }) => ( + + + {children} + + {errorText + && ( + + {errorText} + + )} + +); diff --git a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/ServiceOptions/ServiceCard/index.js b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/ServiceOptions/ServiceCard/index.js index 62124979c..e3e49d6e8 100644 --- a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/ServiceOptions/ServiceCard/index.js +++ b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/ServiceOptions/ServiceCard/index.js @@ -1,5 +1,5 @@ import moment from 'moment'; -import React, { useContext, useState } from 'react'; +import React, { useContext, useEffect, useState } from 'react'; import propsTypes from 'prop-types'; import { View } from 'react-native'; import SvgIcon from '../../../../../../Components/SvgIcon'; @@ -15,11 +15,12 @@ import { ServiceDetails, TimeDetails, Title, Description, CarContainer, TitleContainer, - EstimatedText, WrapRow, + EstimatedText, WrapRow, HighEta, } from './styled'; import Tag from '../../../../../../Components/Tag'; import { RidePageContext } from '../../../../../../context/newRideContext'; import FareBreakdownPopup from '../../../../../../popups/FareBreakdownPopup'; +import SettingsContext from '../../../../../../context/settings'; const FARE_POPUP = 'farePopup'; @@ -28,11 +29,11 @@ const ServiceCard = ({ service, withBorder }) => { const { setChosenService, chosenService, serviceEstimations, ride, } = useContext(RidePageContext); + const { showPrice, loadShowPrice } = SettingsContext.useContainer(); const [popup, setPopup] = useState(null); const isFutureRide = ride.scheduledTo; - const unavailable = !service.currency; - const unavailableText = i18n.t('rideDetails.unavailable'); - const serviceDisplayPrice = getFormattedPrice(service.currency, service.price); + const unavailable = !((ride.scheduledTo && service.priceCalculationId) + || (service.eta || service.isHighEtaAsapRide)); const isSelected = chosenService && chosenService.id === service.id; const sharedTagContainerStyles = { borderWidth: 1, @@ -63,12 +64,49 @@ const ServiceCard = ({ service, withBorder }) => { : i18n.t('rideDetails.toolTipEta', { minutes: minutesUntilPickup }); }; + const etaTimeDetails = () => { + if (service.isHighEtaAsapRide) { + return ( + + {i18n.t('rideDetails.highEta')} + + ); + } + return ( + + + {moment(service.eta).format('h:mm A')} + + + + {getEta()} + + + ); + }; + const getDescription = forFutureRidesView => ( {(service.description || '')} ); + const getUnavailableText = () => { + if (unavailable) { + if (service.outOfTerritory) { + return i18n.t('rideDetails.outOfTerritory'); + } + + return i18n.t('rideDetails.unavailable'); + } + + return showPrice ? getFormattedPrice(service.currency, service.price) : null; + }; + + useEffect(() => { + loadShowPrice(); + }, []); + return ( <> { : } - {!unavailable ? serviceDisplayPrice : unavailableText} + {getUnavailableText()} @@ -121,19 +159,11 @@ const ServiceCard = ({ service, withBorder }) => { {!isFutureRide ? ( - - - {moment(service.eta).format('h:mm A')} - - - - {getEta()} - - + etaTimeDetails() ) : getDescription(isFutureRide)} - {service.isPriceEstimated ? ( + {service.isPriceEstimated && showPrice ? ( {i18n.t('rideDetails.estimatedFare')} @@ -151,7 +181,7 @@ const ServiceCard = ({ service, withBorder }) => { {!isFutureRide && ( {getDescription()} - {service.isPriceEstimated ? ( + {service.isPriceEstimated && showPrice ? ( {service.availableSeats} diff --git a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/ServiceOptions/ServiceCard/styled.js b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/ServiceOptions/ServiceCard/styled.js index 0625b489d..6e2444d26 100644 --- a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/ServiceOptions/ServiceCard/styled.js +++ b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/ServiceOptions/ServiceCard/styled.js @@ -1,4 +1,3 @@ -import { Platform } from 'react-native'; import styled from 'styled-components'; import Button from '../../../../../../Components/Button'; import { FONT_SIZES, FONT_WEIGHTS } from '../../../../../../context/theme'; @@ -71,6 +70,12 @@ justify-content: space-between; align-items: center; `; +export const HighEta = styled.Text` +color: ${({ theme }) => theme.primaryColor}; +font-weight: bold; +${FONT_SIZES.LARGE} +`; + export const Eta = styled.Text` opacity: .5; ${FONT_SIZES.LARGE} diff --git a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/ServiceOptions/index.js b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/ServiceOptions/index.js index 81da07ed5..5dc3be9e5 100644 --- a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/ServiceOptions/index.js +++ b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/ServiceOptions/index.js @@ -1,27 +1,63 @@ import React, { useContext, useEffect } from 'react'; import SkeletonContent from 'react-native-skeleton-content-nonexpo'; +import { Text } from 'react-native'; +import { getCouponText } from '../../../../../context/newRideContext/utils'; import { RidePageContext } from '../../../../../context/newRideContext'; +import { UserContext } from '../../../../../context/user'; +import SettingsContext from '../../../../../context/settings'; import ServiceCard from './ServiceCard'; import { ServiceOptionsContainer } from './styles'; import { serviceCardSkeleton } from './ServiceCard/skeleton'; -import { BottomSheetContext } from '../../../../../context/bottomSheetContext'; +import { BottomSheetContext, INITIAL_TOP_BAR_PROPS } from '../../../../../context/bottomSheetContext'; import i18n from '../../../../../I18n'; +const SUCCESS_COLOR = '#25B861'; + const ServiceOptions = () => { const { serviceEstimations, stopRequestInterval } = useContext(RidePageContext); + const { showPrice, loadShowPrice } = SettingsContext.useContainer(); + + const { coupon } = useContext(UserContext); const isDebuggingEnabled = (typeof atob !== 'undefined'); - const { - setTopBarText, - } = useContext(BottomSheetContext); + const { setTopBarProps } = useContext(BottomSheetContext); + useEffect(() => () => stopRequestInterval(), []); + useEffect(() => { + loadShowPrice(); + }, []); + + const clearTopBar = () => { + setTopBarProps(INITIAL_TOP_BAR_PROPS); + }; + + const setCouponTopBar = () => { + setTopBarProps({ + text: i18n.t('rideDetails.couponDiscountMessage', { couponDiscount: getCouponText(coupon) }), + backgroundColor: SUCCESS_COLOR, + htmlTags: [], + }); + }; + + const setEstimateFareTopBar = () => { + setTopBarProps({ + text: i18n.t('rideDetails.estimatedFareMessage'), + backgroundColor: null, + htmlTags: [], + }); + }; useEffect(() => { - if ((serviceEstimations || []).some(estimation => estimation.isPriceEstimated)) { - setTopBarText(i18n.t('rideDetails.estimatedFareMessage')); + if (coupon && coupon.status !== 'error') { + setCouponTopBar(); + } else if (showPrice + && (serviceEstimations || []).some(estimation => estimation.isPriceEstimated)) { + setEstimateFareTopBar(); } - return () => setTopBarText(''); - }, [serviceEstimations]); + return () => { + clearTopBar(); + }; + }, [serviceEstimations, coupon]); return ( diff --git a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/index.tsx b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/index.tsx index d280bfd8c..6bbe38ce0 100644 --- a/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/index.tsx +++ b/examples/client/Locomotion/src/pages/ActiveRide/RideDrawer/RideOptions/index.tsx @@ -17,22 +17,23 @@ import { PaymentMethodInterface } from '../../../../context/payments/interface'; import { RideStateContextContext } from '../../../../context/ridePageStateContext'; import { BS_PAGES } from '../../../../context/ridePageStateContext/utils'; import * as navigationService from '../../../../services/navigation'; +import { PAYMENT_METHODS } from '../../../../lib/commonTypes'; const RideOptions = () => { const usePayments = payments.useContainer(); const [defaultPaymentMethod, setDefaultPaymentMethod] = useState(undefined); const [popupToShow, setPopupToShow] = useState(null); - const { updateRidePayload, ride, ridePopup, stopRequestInterval, + serviceEstimations, + chosenService, } = useContext(RidePageContext); const { setFooterComponent, - setTopBarText, } = useContext(BottomSheetContext); const { @@ -46,12 +47,17 @@ const RideOptions = () => { const clearPopup = () => { setPopupToShow(null); }; + const allServicesPaymentMethods = new Set(serviceEstimations + ?.map((se: any) => se.allowedPaymentMethods).flat()); + const showCash = allServicesPaymentMethods.has(PAYMENT_METHODS.CASH); + const showOffline = allServicesPaymentMethods.has(PAYMENT_METHODS.OFFLINE); useEffect(() => { const updateDefaultPaymentMethod = async () => { - const paymentMethod: PaymentMethodInterface | - undefined = await usePayments.getClientDefaultMethod(); - if (paymentMethod) { + const paymentMethod: any = usePayments.getClientDefaultMethod( + chosenService?.allowedPaymentMethods.includes(PAYMENT_METHODS.CASH), + ); + if (paymentMethod && paymentMethod?.id) { updateRidePayload({ paymentMethodId: paymentMethod.id, }); @@ -61,7 +67,7 @@ const RideOptions = () => { if (!ride.paymentMethodId) { updateDefaultPaymentMethod(); } - }, [usePayments.paymentMethods]); + }, [usePayments.paymentMethods, showCash]); useEffect(() => { @@ -110,6 +116,8 @@ const RideOptions = () => { navigationService.navigate(MAIN_ROUTES.PAYMENT, { showAdd: true, rideFlow: true }); }, 500); }} + showCash={showCash} + showOffline={showOffline} selected={ride?.paymentMethodId && usePayments.paymentMethods.find((pm: any) => ride.paymentMethodId === pm.id) ? ride.paymentMethodId : defaultPaymentMethod?.id} diff --git a/examples/client/Locomotion/src/pages/ActiveRide/TopMessage/index.tsx b/examples/client/Locomotion/src/pages/ActiveRide/TopMessage/index.tsx index 1c3ab8b1d..c9b932790 100644 --- a/examples/client/Locomotion/src/pages/ActiveRide/TopMessage/index.tsx +++ b/examples/client/Locomotion/src/pages/ActiveRide/TopMessage/index.tsx @@ -1,18 +1,48 @@ import React from 'react'; -import { BodyText, Container } from './styled'; +import { Text } from 'react-native'; +import Button from '../../../Components/Button'; +import SvgIcon from '../../../Components/SvgIcon'; +import SafeView from '../../../Components/SafeView'; +import { + BodyText, Container, Title, TitleText, ButtonContainer, ButtonText, +} from './styled'; const TopMessage = ({ - text, + text, title, icon, button, onPress, }: { - text: string + title: any, + text: string, + button: any, + icon: any, + onPress: any, }) => ( text ? ( - - - {text} - - + + + {title && ( + + {icon && <SvgIcon Svg={icon} height={20} width={20} style={{ marginRight: 10 }} />} + <TitleText>{title}</TitleText> + + )} + + {text} + + {button && onPress && ( + + + + )} + + ) : null ); diff --git a/examples/client/Locomotion/src/pages/ActiveRide/TopMessage/styled.ts b/examples/client/Locomotion/src/pages/ActiveRide/TopMessage/styled.ts index 134bf678d..9aa14e879 100644 --- a/examples/client/Locomotion/src/pages/ActiveRide/TopMessage/styled.ts +++ b/examples/client/Locomotion/src/pages/ActiveRide/TopMessage/styled.ts @@ -17,3 +17,27 @@ export const BodyText = styled(Text)` ${FONT_SIZES.MEDIUM}; ${FONT_WEIGHTS.REGULAR}; `; + +export const Title = styled(View)` + flex-direction: row; + padding-bottom: 5px; + align-items: center; +`; + +export const TitleText = styled(Text)` + ${FONT_SIZES.LARGE}; + ${FONT_WEIGHTS.BOLD}; +`; + +export const ButtonContainer = styled(View)` + align-items: flex-end; + margin-top: 10px; + height: 15px; +`; + +export const ButtonText = styled(Text)` + color: #24aaf2 + ${FONT_SIZES.LARGE}; + ${FONT_WEIGHTS.SEMI_BOLD}; + margin-bottom: -10px; +`; diff --git a/examples/client/Locomotion/src/pages/ActiveRide/index.js b/examples/client/Locomotion/src/pages/ActiveRide/index.js index d3c5049d9..558577eba 100644 --- a/examples/client/Locomotion/src/pages/ActiveRide/index.js +++ b/examples/client/Locomotion/src/pages/ActiveRide/index.js @@ -1,18 +1,25 @@ import React, { useContext, useEffect, useRef, useState, } from 'react'; +import Toast from 'react-native-toast-message'; import { useIsFocused, useFocusEffect } from '@react-navigation/native'; import { - AppState, BackHandler, Platform, View, + AppState, BackHandler, Platform, View, Dimensions, } from 'react-native'; import { Portal } from '@gorhom/portal'; import Config from 'react-native-config'; +import { distance, point } from '@turf/turf'; +import { isCardPaymentMethod } from '../../lib/ride/utils'; +import networkInfo from '../../services/networkInfo'; +import AFToast from '../../Components/Toast'; import * as navigationService from '../../services/navigation'; import { MAIN_ROUTES } from '../routes'; import { getPolylineList } from '../../lib/polyline/utils'; import { FutureRidesContext } from '../../context/futureRides'; import FutureRidesButton from '../../Components/FutureRidesButton'; -import { RIDE_STATES, STOP_POINT_STATES, STOP_POINT_TYPES } from '../../lib/commonTypes'; +import { + PAYMENT_STATES, RIDE_STATES, STOP_POINT_STATES, STOP_POINT_TYPES, +} from '../../lib/commonTypes'; import { RIDE_POPUPS } from '../../context/newRideContext/utils'; import { UserContext } from '../../context/user'; import { @@ -30,10 +37,11 @@ import { Loading, } from '../../Components/BsPages'; import { RideStateContextContext, RideStateContextContextProvider } from '../../context'; -import NewRidePageContextProvider, { RidePageContext } from '../../context/newRideContext'; +import { RidePageContext } from '../../context/newRideContext'; +import { fetchRides } from '../../context/newRideContext/api'; import BottomSheetContextProvider, { BottomSheetContext, SNAP_POINT_STATES } from '../../context/bottomSheetContext'; import { - PageContainer, MapOverlayButtons, + PageContainer, MapOverlayButtons, LocationMarkerContainer, PickupTextContainer, PickupText, LocationMarker, } from './styled'; import Header from '../../Components/Header'; import MainMap, { ACTIVE_RIDE_MAP_PADDING } from './newMap'; @@ -57,7 +65,13 @@ import TopMessage from './TopMessage'; import i18n from '../../I18n'; import BlackOverlay from '../../Components/BlackOverlay'; import { PAYMENT_METHODS } from '../Payments/consts'; - +import { MessagesContext } from '../../context/messages'; +import alertIcon from '../../assets/warning.svg'; +import { rideHistoryContext } from '../../context/rideHistory'; +import SafeView from '../../Components/SafeView'; +import CancellationReasonsPopup from '../../popups/CancellationReasonsPopup'; +import VirtualStationsProvider, { VirtualStationsContext } from '../../context/virtualStationsContext'; +import Mixpanel from '../../services/Mixpanel'; const BLACK_OVERLAY_SCREENS = [BS_PAGES.CANCEL_RIDE]; @@ -65,13 +79,22 @@ const RidePage = ({ mapSettings, navigation }) => { const { locationGranted, setLocationGranted, } = useContext(UserContext); - const [addressSelectorFocusIndex, setAddressSelectorFocusIndex] = useState(1); + + const [pickupChanged, setPickupChanged] = useState(false); + const [topMessage, setTopMessage] = useState(null); const { getSettingByKey } = settings.useContainer(); + const mapRef = useRef(); const bottomSheetRef = useRef(null); + const { - currentBsPage, changeBsPage, + currentBsPage, changeBsPage, setIsDraggingLocationPin, isDraggingLocationPin, } = useContext(RideStateContextContext); + const isChooseLocationOnMap = [BS_PAGES.CONFIRM_PICKUP, BS_PAGES.SET_LOCATION_ON_MAP] + .includes(currentBsPage) && !isStationsEnabled; + const { checkMessagesForToast } = useContext(MessagesContext); + const { isStationsEnabled } = useContext(VirtualStationsContext); + const { serviceEstimations, setServiceEstimations, @@ -87,28 +110,50 @@ const RidePage = ({ mapSettings, navigation }) => { setRequestStopPoints, tryServiceEstimations, selectedInputIndex, + setSelectedInputIndex, cleanRideState, + updateRide, + clearRequestSp, + setUnconfirmedPickupTime, + lastSelectedLocation, + saveSelectedLocation, + reverseLocationGeocode, } = useContext(RidePageContext); const { - setIsExpanded, snapPoints, isExpanded, topBarText, + setIsExpanded, snapPoints, isExpanded, topBarProps, } = useContext(BottomSheetContext); const { clientHasValidPaymentMethods, getClientOutstandingBalanceCard, + loadOutstandingBalanceRide, + loadCustomer, + hasOutstandingPayment, } = payments.useContainer(); const { futureRides, } = useContext(FutureRidesContext); - + const isSpInputEmpty = sp => !sp?.lat || !sp?.lng; + const prevRequestStopPoints = useRef(requestStopPoints.length); useEffect(() => { - setAddressSelectorFocusIndex(requestStopPoints.findIndex(sp => !sp.lat)); + if (requestStopPoints.length > prevRequestStopPoints.current.length) { + setSelectedInputIndex(requestStopPoints.length - 1); + } else { + const newFocusedSp = requestStopPoints[selectedInputIndex]; + if (!isSpInputEmpty(newFocusedSp)) { + setSelectedInputIndex(requestStopPoints.findIndex(sp => isSpInputEmpty(sp))); + } + } + prevRequestStopPoints.current = requestStopPoints; }, [requestStopPoints]); const resetStateToAddressSelector = (selectedIndex = null) => { setServiceEstimations(null); setChosenService(null); setRide({}); changeBsPage(BS_PAGES.ADDRESS_SELECTOR); - setAddressSelectorFocusIndex(selectedIndex); + setSelectedInputIndex(selectedIndex); + if (isStationsEnabled) { + clearRequestSp(selectedIndex); + } }; const goBackToAddress = (selectedIndex, expand = true) => { @@ -133,8 +178,6 @@ const RidePage = ({ mapSettings, navigation }) => { } else if (serviceEstimations || currentBsPage === BS_PAGES.CONFIRM_PICKUP_TIME) { changeBsPage(BS_PAGES.SERVICE_ESTIMATIONS); } else { - // sorry - setAddressSelectorFocusIndex(selectedInputIndex); setTimeout(() => { setIsExpanded(true); }, 100); @@ -149,7 +192,10 @@ const RidePage = ({ mapSettings, navigation }) => { ), [BS_PAGES.CONFIRM_FUTURE_RIDE]: () => ( { + setUnconfirmedPickupTime(null); + backToMap(); + }} /> ), [BS_PAGES.CANCEL_RIDE]: () => ( @@ -158,6 +204,7 @@ const RidePage = ({ mapSettings, navigation }) => { [BS_PAGES.SERVICE_ESTIMATIONS]: () => ( ), + [BS_PAGES.CONFIRM_PICKUP_TIME]: () => ( ), @@ -189,14 +236,15 @@ const RidePage = ({ mapSettings, navigation }) => { /> ), [BS_PAGES.ADDRESS_SELECTOR]: () => ( - + ), [BS_PAGES.CONFIRM_PICKUP]: () => ( { - if (clientHasValidPaymentMethods() || ride.paymentMethodId === PAYMENT_METHODS.CASH) { + const { paymentMethodId } = ride; + if (clientHasValidPaymentMethods() || !isCardPaymentMethod({ id: paymentMethodId })) { requestRide(pickupLocation); } else { changeBsPage(BS_PAGES.NO_PAYMENT); @@ -206,7 +254,7 @@ const RidePage = ({ mapSettings, navigation }) => { ), [BS_PAGES.SET_LOCATION_ON_MAP]: () => ( { - updateRequestSp(sp); + updateRequestSp(sp, selectedInputIndex); }} /> ), @@ -230,27 +278,55 @@ const RidePage = ({ mapSettings, navigation }) => { ), [BS_PAGES.ACTIVE_RIDE]: () => , }; + const updateLocationOnMapData = async (lat, lng) => { + const spData = await reverseLocationGeocode(lat, lng); + if (spData) { + saveSelectedLocation(spData); + setPickupChanged(true); + Mixpanel.setEvent('Change stop point location', { + gesture_type: 'drag_map', + screen: currentBsPage, + ...spData, + lat, + lng, + }); + } + }; const focusCurrentLocation = async () => { + let coords; if ([RIDE_STATES.ACTIVE, RIDE_STATES.DISPATCHED].includes(ride.state)) { - const currentStopPoint = (ride.stopPoints || []).find(sp => sp.state === STOP_POINT_STATES.PENDING); + const currentStopPoint = (ride.stopPoints || []) + .find(sp => sp.state === STOP_POINT_STATES.PENDING); if (currentStopPoint) { - const coords = getPolylineList(currentStopPoint, ride); + coords = getPolylineList(currentStopPoint, ride); mapRef.current.fitToCoordinates(coords, { animated: true, edgePadding: ACTIVE_RIDE_MAP_PADDING, }); } } else { - const location = await getPosition(); - const { coords } = (location || DEFAULT_COORDS); - mapRef.current.animateToRegion({ - // I really don't know why this is needed, but it works - latitude: coords.latitude - parseFloat(50) / 10000, - longitude: coords.longitude, + let deltas = { latitudeDelta: 0.015, longitudeDelta: 0.015, - }, 1000); + }; + if (currentBsPage === BS_PAGES.CONFIRM_PICKUP) { + deltas = { + latitudeDelta: 0.001, + longitudeDelta: 0.001, + }; + } + setIsDraggingLocationPin(true); + const location = await getPosition(); + ({ coords } = (location || DEFAULT_COORDS)); + const animateTime = 1000; + mapRef.current.animateToRegion({ + latitude: parseFloat(coords.latitude), + longitude: parseFloat(coords.longitude), + ...deltas, + }, animateTime); + await updateLocationOnMapData(coords.latitude, coords.longitude); } + return coords; }; const checkLocationPermission = async () => { @@ -272,6 +348,10 @@ const RidePage = ({ mapSettings, navigation }) => { } }, [locationGranted]); + useEffect(() => { + loadCustomer(); + }, []); + useFocusEffect( React.useCallback(() => { const onBackPress = () => { @@ -282,7 +362,10 @@ const RidePage = ({ mapSettings, navigation }) => { return false; }; const backHandler = BackHandler.addEventListener('hardwareBackPress', onBackPress); - focusCurrentLocation(); + + if (!currentBsPage === BS_PAGES.SERVICE_ESTIMATIONS) { + focusCurrentLocation(); + } return () => backHandler.remove(); }, [serviceEstimations]), @@ -296,9 +379,11 @@ const RidePage = ({ mapSettings, navigation }) => { await checkVersionAndForceUpdateIfNeeded(minAppVersion); }; + const initChecks = async () => { await versionCheck(); await checkLocationPermission(); + await checkMessagesForToast(); }; @@ -343,61 +428,136 @@ const RidePage = ({ mapSettings, navigation }) => { } } }, [isExpanded]); + useEffect(() => { + if (currentBsPage === BS_PAGES.CONFIRM_PICKUP) { + setPickupChanged(false); + } + }, [currentBsPage]); - const MESSAGE_MAP = { - OUTSTANDING_BALANCE: { - text: () => { - const creditCard = getClientOutstandingBalanceCard(); - return i18n.t('activeRide.topMessage.outstandBalanceCreditCard', { - name: creditCard.name, - }); + useEffect(() => { + prepareTopMessage(); + }, [hasOutstandingPayment, ride?.stopPoints && ride?.stopPoints[0]?.precedingStops?.length]); + + const prepareTopMessage = async () => { + const MESSAGE_MAP = { + OUTSTANDING_BALANCE: { + text: () => i18n.t('activeRide.topMessage.outstandBalanceCreditCard'), + condition: () => hasOutstandingPayment, + title: i18n.t('activeRide.topMessage.outstandBalanceTitle'), + titleIcon: alertIcon, + buttonText: i18n.t('activeRide.topMessage.outstandBalanceButton'), + onClick: async () => { + const rejectedRide = await loadOutstandingBalanceRide(); + navigationService.navigate(MAIN_ROUTES.COMPLETED_RIDE_OVERVIEW_PAGE, { + rideId: rejectedRide.rideId, + }); + }, }, - condition: () => { - const creditCard = getClientOutstandingBalanceCard(); - return creditCard && currentBsPage === BS_PAGES.SERVICE_ESTIMATIONS; + PRECEDING_STOPS: { + condition: () => ride?.stopPoints && ride?.stopPoints[0]?.precedingStops?.length, + text: () => i18n.t('activeRide.topMessage.precedingStops'), }, - }, - PRECEDING_STOPS: { - condition: () => ride?.stopPoints && ride?.stopPoints[0]?.precedingStops?.length, - text: () => i18n.t('activeRide.topMessage.precedingStops'), - }, + }; + + const topMessageKey = Object.keys(MESSAGE_MAP).find(key => MESSAGE_MAP[key].condition()); + setTopMessage(MESSAGE_MAP[topMessageKey]); }; - const topMessageKey = Object.keys(MESSAGE_MAP).find(key => MESSAGE_MAP[key].condition()); - const topMessage = MESSAGE_MAP[topMessageKey]; + const onCancellationReasonsAction = () => { + setRidePopup(null); + cleanRideState(); + }; + const onPressTargetIcon = async () => { + const coords = await focusCurrentLocation(); + const lat = coords?.latitude; + const lng = coords?.longitude; + Mixpanel.clickEvent('Target Icon', + { currentPage: currentBsPage, lat, lng }); + }; + + + const onRegionChangeComplete = async (event) => { + if (isChooseLocationOnMap) { + const { latitude, longitude } = event; + const lat = latitude.toFixed(6); + const lng = longitude.toFixed(6); + const [pickup] = requestStopPoints; + const finalStopPoint = lastSelectedLocation || pickup; + const sourcePoint = point([finalStopPoint.lng, finalStopPoint.lat]); + const destinationPoint = point([lng, lat]); + const changeDistance = distance(sourcePoint, destinationPoint, { units: 'meters' }); + if (changeDistance < 5 && networkInfo.isConnectionAvailable()) { + setIsDraggingLocationPin(false); + return; + } + await updateLocationOnMapData(lat, lng); + } + }; return ( + {isChooseLocationOnMap && ( + + + + {pickupChanged ? i18n.t('map.pickupChanged') : i18n.t('map.pickupHere')} + + + + )} {serviceEstimations || currentBsPage === BS_PAGES.SET_LOCATION_ON_MAP ? ( - <> +
- - + {currentBsPage !== BS_PAGES.CONFIRM_PICKUP + ? + : <>}
- {topMessage ? : null} - + {topMessage ? ( + + ) : null} +
) : ( - <> +
- {topMessage ? : null} - + {topMessage ? ( + + ) : null} + )} @@ -408,7 +568,7 @@ const RidePage = ({ mapSettings, navigation }) => { {!isExpanded && locationGranted && ( @@ -442,7 +602,21 @@ BS_PAGE_TO_COMP[currentBsPage] ? BS_PAGE_TO_COMP[currentBsPage]() : null } } /> + + ( + + ), + }} + /> ); }; diff --git a/examples/client/Locomotion/src/pages/ActiveRide/newMap.js b/examples/client/Locomotion/src/pages/ActiveRide/newMap.js index 3e6a22a0a..db2775ff0 100644 --- a/examples/client/Locomotion/src/pages/ActiveRide/newMap.js +++ b/examples/client/Locomotion/src/pages/ActiveRide/newMap.js @@ -1,18 +1,22 @@ import React, { useContext, useEffect, useState, } from 'react'; -import { StyleSheet } from 'react-native'; +import { Dimensions } from 'react-native'; import MapView, { Polygon, Polyline } from 'react-native-maps'; import Config from 'react-native-config'; import moment from 'moment'; import { - point, featureCollection, nearestPoint, booleanPointInPolygon, polygon, + point, featureCollection, nearestPoint, booleanPointInPolygon, polygon, distance, } from '@turf/turf'; +import { debounce } from 'lodash'; +import Mixpanel from '../../services/Mixpanel'; import { FutureRidesContext } from '../../context/futureRides'; import { RidePageContext } from '../../context/newRideContext'; import { RideStateContextContext } from '../../context'; import { DEFAULT_COORDS, getPosition } from '../../services/geo'; -import { LocationMarker, LocationMarkerContainer } from './styled'; +import { + LocationMarker, LocationMarkerContainer, PickupTextContainer, PickupText, +} from './styled'; import mapDarkMode from '../../assets/mapDarkMode.json'; import { Context as ThemeContext, THEME_MOD } from '../../context/theme'; import { AvailabilityContext } from '../../context/availability'; @@ -23,19 +27,21 @@ import { RIDE_STATES, STOP_POINT_STATES } from '../../lib/commonTypes'; import PrecedingStopPointMarker from '../../Components/PrecedingStopPointMarker'; import { decodePolyline, getPolylineList, getVehicleLocation } from '../../lib/polyline/utils'; import { BottomSheetContext } from '../../context/bottomSheetContext'; +import { VirtualStationsContext } from '../../context/virtualStationsContext'; + import i18n from '../../I18n'; export const MAP_EDGE_PADDING = { - top: 140, + top: 180, right: 100, - bottom: 400, + bottom: 50, left: 100, }; export const ACTIVE_RIDE_MAP_PADDING = { top: 100, right: 70, - bottom: 300, + bottom: 50, left: 70, }; @@ -62,11 +68,22 @@ const PAGES_TO_SHOW_MY_LOCATION = [ BS_PAGES.CONFIRM_PICKUP, ]; +const PAGES_TO_SHOW_STATIONS_MARKERS = [ + BS_PAGES.ADDRESS_SELECTOR, + BS_PAGES.NO_PAYMENT, + BS_PAGES.NOT_IN_TERRITORY, + BS_PAGES.PICKUP_NOT_IN_TERRITORY, + BS_PAGES.NO_AVAILABLE_VEHICLES, + BS_PAGES.CONFIRM_PICKUP, + BS_PAGES.LOCATION_REQUEST, +]; + const getFirstPendingStopPoint = sps => (sps || []).find(sp => sp.state === STOP_POINT_STATES.PENDING); export default React.forwardRef(({ mapSettings, + onRegionChangeComplete, }, ref) => { const { isDarkMode, primaryColor } = useContext(ThemeContext); const { @@ -76,6 +93,8 @@ export default React.forwardRef(({ const { isUserLocationFocused, setIsUserLocationFocused, + setIsDraggingLocationPin, + isDraggingLocationPin, territory, currentBsPage, initGeoService, @@ -83,11 +102,14 @@ export default React.forwardRef(({ const { snapPoints, } = useContext(BottomSheetContext); + + const { StationMarkers, isStationsEnabled } = useContext(VirtualStationsContext); + const isMainPage = currentBsPage === BS_PAGES.ADDRESS_SELECTOR; - const isChooseLocationOnMap = [BS_PAGES.CONFIRM_PICKUP, BS_PAGES.SET_LOCATION_ON_MAP] - .includes(currentBsPage); + const { - requestStopPoints, saveSelectedLocation, reverseLocationGeocode, ride, + lastSelectedLocation, + requestStopPoints, ride, chosenService, } = useContext(RidePageContext); const { @@ -173,11 +195,11 @@ export default React.forwardRef(({ const [pickupStopPoint] = requestStopPoints; if (pickupStopPoint) { ref.current.animateToRegion({ - latitude: pickupStopPoint.lat, - longitude: pickupStopPoint.lng, + latitude: parseFloat(pickupStopPoint.lat), + longitude: parseFloat(pickupStopPoint.lng), latitudeDelta: 0.001, longitudeDelta: 0.001, - }, 1); + }, 0); } } if (currentBsPage === BS_PAGES.CONFIRM_FUTURE_RIDE) { @@ -191,11 +213,11 @@ export default React.forwardRef(({ const location = await getPosition(); const { coords } = (location || DEFAULT_COORDS); ref.current.animateToRegion({ - latitude: coords.latitude, - longitude: coords.longitude, + latitude: parseFloat(coords.latitude), + longitude: parseFloat(coords.longitude), latitudeDelta: 0.015, longitudeDelta: 0.015, - }, 1); + }, 0); }; focusCurrentLocation(); } @@ -236,6 +258,7 @@ export default React.forwardRef(({ const { stopPoints } = ride; + const currentStopPoint = getFirstPendingStopPoint(stopPoints); const precedingStopPoints = (currentStopPoint || {}).precedingStops || []; @@ -272,31 +295,40 @@ export default React.forwardRef(({ return stopPoint.streetAddress || stopPoint.description; }; + useEffect(() => { + setIsDraggingLocationPin(false); + }, [lastSelectedLocation]); + + const hightRatioOfBottomSheet = typeof snapPoints[0] === 'number' + ? `${snapPoints[0] / Dimensions.get('window').height}%` + : snapPoints[0]; + + const mapPositionStyles = { + width: '100%', + height: `${100 - (hightRatioOfBottomSheet.split('%')[0] * 100)}%`, + position: 'absolute', + }; + return ( <> { - if (isChooseLocationOnMap) { - const { latitude, longitude } = event; - const lat = latitude.toFixed(6); - const lng = longitude.toFixed(6); - const spData = await reverseLocationGeocode(lat, lng); - saveSelectedLocation(spData); + onPanDrag={() => { + setIsDraggingLocationPin(true); + if (!isUserLocationFocused === false) { + setIsUserLocationFocused(false); } }} - onPanDrag={() => ( - !isUserLocationFocused === false ? setIsUserLocationFocused(false) : null - )} ref={ref} userInterfaceStyle={isDarkMode ? THEME_MOD.DARK : undefined} customMapStyle={isDarkMode ? mapDarkMode : undefined} @@ -305,11 +337,15 @@ export default React.forwardRef(({ > {ride.vehicle && ride.vehicle.location && currentStopPoint && ( )} + {finalStopPoints && !!precedingStopPoints.length && precedingStopPoints.map(sp => ) } @@ -324,37 +360,38 @@ export default React.forwardRef(({ && finalStopPoints.filter(sp => !!sp.lat).length > 1 ? finalStopPoints .filter(sp => !!sp.lat) - .map((sp) => { + .map((sp, index) => { const isNext = firstSpNotCompleted.id === sp.id; return ( ); }) : null} - {[BS_PAGES.NOT_IN_TERRITORY, BS_PAGES.PICKUP_NOT_IN_TERRITORY].includes(currentBsPage) && territory && territory.length ? territory - .map(t => t.polygon.coordinates.map(poly => ( - ( - { latitude: parseFloat(p[1]), longitude: parseFloat(p[0]) } - ))} - /> - ))) : null} + {[BS_PAGES.NOT_IN_TERRITORY, BS_PAGES.PICKUP_NOT_IN_TERRITORY].includes(currentBsPage) + && territory && territory.length ? territory + .map(t => t.polygon.coordinates.map(poly => ( + ( + { latitude: parseFloat(p[1]), longitude: parseFloat(p[0]) } + ))} + /> + ))) : null} {buildAvailabilityVehicles()} + {isStationsEnabled && PAGES_TO_SHOW_STATIONS_MARKERS.includes(currentBsPage) + ? : null} - {isChooseLocationOnMap && ( - - - - )} + ); }); diff --git a/examples/client/Locomotion/src/pages/ActiveRide/styled.js b/examples/client/Locomotion/src/pages/ActiveRide/styled.js index 6f2021f2a..dce411103 100644 --- a/examples/client/Locomotion/src/pages/ActiveRide/styled.js +++ b/examples/client/Locomotion/src/pages/ActiveRide/styled.js @@ -1,8 +1,15 @@ import React from 'react'; -import { StyleSheet, Dimensions } from 'react-native'; +import { StyleSheet, Dimensions, Platform } from 'react-native'; import styled from 'styled-components'; +import { STATIC_SNAP_POINTS } from '../../context/bottomSheetContext'; import vehicleIcon from '../../assets/car-icon.png'; import Icon from '../../assets/location_pin.svg'; +import { FONT_SIZES, FONT_WEIGHTS } from '../../context/theme'; + +const MARKER_SIZE = { + height: 39, + width: 30, +}; export const PageContainer = styled.View({ ...StyleSheet.absoluteFillObject, @@ -40,28 +47,44 @@ export const VehicleDot = ({ source }) => ( ); -export const MapButtonsContainer = styled.View` - `; +export const MapButtonsContainer = styled.View``; export const LocationMarkerContainer = styled.View` - position: absolute; - align-items: center; - justify-content: center; background-color: transparent; - top: 0; - bottom: 45; - left: 0; - right: 0; + position: absolute; + top: ${(((Dimensions.get('window').height - STATIC_SNAP_POINTS) * 0.5) - MARKER_SIZE.height) - (Platform.OS === 'android' ? 35 : 0)}; + left: ${(Dimensions.get('window').width - MARKER_SIZE.width) * 0.5}; +`; + +export const PickupTextContainer = styled.View` +background-color: #212229; +padding: 6px 8px; +border-radius: 6px; +justify-content: center; +flex-direction: row; +width: 140; +right: ${(140 - MARKER_SIZE.width) * 0.5}; +top: -2; + +${({ hide }) => hide && ` + opacity: 0; + `} +`; + +export const PickupText = styled.Text` +color: white; +${FONT_SIZES.LARGE} +${FONT_WEIGHTS.REGULAR} `; export const LocationMarker = styled(Icon).attrs(({ theme }) => ({ - height: '80px', + height: MARKER_SIZE.height, fill: theme.primaryColor, stroke: theme.pageBackgroundColor, - width: '40px', - viewBox: '-1 0 13 10', + width: MARKER_SIZE.width, }))``; + export const MapOverlayButtons = styled.View` position: absolute; width: 100%; diff --git a/examples/client/Locomotion/src/pages/AuthScreens/AuthLoadingScreen.js b/examples/client/Locomotion/src/pages/AuthScreens/AuthLoadingScreen.js index f86de6870..b178ba537 100644 --- a/examples/client/Locomotion/src/pages/AuthScreens/AuthLoadingScreen.js +++ b/examples/client/Locomotion/src/pages/AuthScreens/AuthLoadingScreen.js @@ -1,20 +1,23 @@ -import React, { useContext, useEffect } from 'react'; +import React, { useContext, useEffect, useState } from 'react'; import { initStripe } from '@stripe/stripe-react-native'; -import Config from 'react-native-config'; import moment from 'moment'; import { Platform } from 'react-native'; +import AppSettings from '../../services/app-settings'; import { APP_ROUTES, MAIN_ROUTES } from '../routes'; -import Auth from '../../services/auth'; +import { logout } from '../../services/logout'; import { getUserDetails } from '../../context/user/api'; import { OnboardingContext } from '../../context/onboarding'; import PaymentsContext from '../../context/payments'; import { UserContext } from '../../context/user'; import settings from '../../context/settings'; -import SETTINGS_KEYS from '../../context/settings/keys'; import { StorageService } from '../../services'; import FullPageLoader from '../../Components/FullPageLoader'; -import { checkVersionAndForceUpdateIfNeeded } from '../../services/VersionCheck'; import * as navigationService from '../../services/navigation'; +import networkInfo from '../../services/networkInfo'; +import GenericErrorPopup from '../../popups/GenericError'; +import i18n from '../../I18n'; +import Mixpanel from '../../services/Mixpanel'; +import DeviceService from '../../services/device'; export const INITIAL_USER_STATE = { phoneNumber: '', @@ -28,6 +31,7 @@ export const INITIAL_USER_STATE = { }; const AuthLoadingScreen = () => { + const [isConnected, setIsConnected] = useState(true); const { setUser, user, updateUser } = useContext(UserContext); const { navigateBasedOnUser } = useContext(OnboardingContext); const { getSettingByKey, getAppSettings } = settings.useContainer(); @@ -39,6 +43,7 @@ const AuthLoadingScreen = () => { return StorageService.save({ clientProfile }); }; + const init = async () => { async function getFromStorage() { const clientProfile = await StorageService.get('clientProfile'); @@ -47,10 +52,10 @@ const AuthLoadingScreen = () => { try { response = await getUserDetails(); if (!response) { - Auth.logout(); + logout(); } } catch (e) { - Auth.logout(); + logout(); } const userData = response; @@ -60,12 +65,13 @@ const AuthLoadingScreen = () => { updateUser({ lastLogin: moment().toDate(), deviceType: Platform.OS, + appVersion: DeviceService.getVersion(), }), ]); - + const publishableKey = await AppSettings.getStripeKey(); initStripe({ - publishableKey: Config.STRIPE_PUBLISHER_KEY, + publishableKey, merchantIdentifier: 'merchant.identifier', stripeAccountId: paymentAccount.stripeId, }); @@ -79,12 +85,20 @@ const AuthLoadingScreen = () => { return navigateBasedOnUser(userData); } - return navigationService.replace(APP_ROUTES.MAIN_APP); + const nav = navigationService.getNavigator(); + const currentRoute = nav.getCurrentRoute(); + + if (currentRoute.name === APP_ROUTES.AUTH_LOADING) { + return navigationService.replace(APP_ROUTES.MAIN_APP); + } + + return true; } setUser(INITIAL_USER_STATE); navigationService.replace(MAIN_ROUTES.START); } + await networkInfo.fetchData(); await getAppSettings(); if (!user) { // Load app state getFromStorage(); @@ -92,10 +106,35 @@ const AuthLoadingScreen = () => { }; useEffect(() => { init(); + let unsubscribeFunction; + setTimeout(() => { + unsubscribeFunction = networkInfo.addEventListener((listener) => { + setIsConnected(listener.isConnected); + if (!(listener.isConnected)) { + Mixpanel.setEvent('No connection popup showed'); + } + }); + }, 3000); + + return () => { + if (unsubscribeFunction) { + unsubscribeFunction(); + } + }; }, []); return ( <> + { + Mixpanel.clickEvent('No connection popup clicked'); + setIsConnected(true); + }} + /> ); }; diff --git a/examples/client/Locomotion/src/pages/ContactUs/index.js b/examples/client/Locomotion/src/pages/ContactUs/index.js index f1825cbea..46fb4a4c6 100644 --- a/examples/client/Locomotion/src/pages/ContactUs/index.js +++ b/examples/client/Locomotion/src/pages/ContactUs/index.js @@ -132,35 +132,41 @@ export default ({ menuSide }) => { - - - { - if (settings.contactEmail) { - Linking.openURL(`mailto:${settings.contactEmail}`); - } - }} - title={i18n.t('onboarding.emailPlaceholder')} - > - {settings.contactEmail} - - {settings.contactPhone ? ( - (settings.contactPhone ? ActionMenu(e, settings.contactPhone) : undefined)} - title={i18n.t('onboarding.phonePlaceholder')} - > - {settings.contactPhone} - - ) : null} - openContactUs()}> - openContactUs()}> - {i18n.t('contactUs.learnMore')} - - - - + {settings.contactEmail || settings.contactPhone || settings.contactUsUrl ? ( + + + {settings.contactEmail ? ( + { + if (settings.contactEmail) { + Linking.openURL(`mailto:${settings.contactEmail}`); + } + }} + title={i18n.t('onboarding.emailPlaceholder')} + > + {settings.contactEmail} + + ) : null} + {settings.contactPhone ? ( + (settings.contactPhone ? ActionMenu(e, settings.contactPhone) : undefined)} + title={i18n.t('onboarding.phonePlaceholder')} + > + {settings.contactPhone} + + ) : null} + {settings.contactUsUrl ? ( + openContactUs()}> + openContactUs()}> + {i18n.t('contactUs.learnMore')} + + + + ) : null} + + ) : null} openPrivacy()}> diff --git a/examples/client/Locomotion/src/pages/DevPage/index.tsx b/examples/client/Locomotion/src/pages/DevPage/index.tsx new file mode 100644 index 000000000..63d4c08df --- /dev/null +++ b/examples/client/Locomotion/src/pages/DevPage/index.tsx @@ -0,0 +1,70 @@ +import React, { useState } from 'react'; +import { ScrollView } from 'react-native-gesture-handler'; +import Config from 'react-native-config'; +import TextInput from '../../Components/TextInput'; +import { NavButton, ButtonText } from '../Profile/SaveButton/styles'; +import AppSettings from '../../services/app-settings'; +import { PageContainer } from '../styles'; +import PageHeader from '../../Components/PageHeader'; + +import * as navigationService from '../../services/navigation'; +import { InputContainer, Label } from './styles'; + + +const DevSettingPage = () => { + const [operationId, setOperationId] = useState(Config.OPERATION_ID); + const [serverUrl, setServerUrl] = useState(Config.SERVER_HOST); + const [stripeKey, setStripeKey] = useState(Config.STRIPE_PUBLISHER_KEY); + return ( + + navigationService.goBack()} + /> + + + { + setOperationId(newOperationId); + }} + value={operationId} + /> + + + { + setServerUrl(newServerUrl); + }} + value={serverUrl} + /> + + { + setStripeKey(newStripeKey); + }} + value={stripeKey} + /> + { + AppSettings.setSettings({ serverUrl, operationId, stripeKey }); + navigationService.goBack(); + }} + > + Save + + + + + + ); +}; + +export default DevSettingPage; diff --git a/examples/client/Locomotion/src/pages/DevPage/styles.js b/examples/client/Locomotion/src/pages/DevPage/styles.js new file mode 100644 index 000000000..226366a60 --- /dev/null +++ b/examples/client/Locomotion/src/pages/DevPage/styles.js @@ -0,0 +1,13 @@ +import styled from 'styled-components'; + + +export const Label = styled.Text` + color: #666666; + font-weight: 500; + font-size: 18px; + line-height: 20px; +`; +export const InputContainer = styled.View` + margin: 10px auto; + width: 100% +`; diff --git a/examples/client/Locomotion/src/pages/FutureRidesView/index.tsx b/examples/client/Locomotion/src/pages/FutureRidesView/index.tsx index 84e6489ba..23c448a5e 100644 --- a/examples/client/Locomotion/src/pages/FutureRidesView/index.tsx +++ b/examples/client/Locomotion/src/pages/FutureRidesView/index.tsx @@ -2,7 +2,7 @@ import React, { useContext, useRef, useState, useEffect, } from 'react'; import bottomSheet from '@gorhom/bottom-sheet/lib/typescript/components/bottomSheet'; -import moment from 'moment'; +import CancellationReasonsPopup from '../../popups/CancellationReasonsPopup'; import { FutureRidesContext } from '../../context/futureRides'; import { PageContainer } from '../styles'; import { ContentContainer } from './styled'; @@ -14,13 +14,14 @@ import RideCard from '../../Components/RideCard'; import BottomSheetComponent from '../../Components/BottomSheet'; import { CancelRide } from '../../Components/BsPages'; import { RideStateContextContext } from '../..'; -import { RideInterface, RidePageContext } from '../../context/newRideContext'; +import { RidePageContext } from '../../context/newRideContext'; import { BS_PAGES } from '../../context/ridePageStateContext/utils'; import BlackOverlay from '../../Components/BlackOverlay'; import GenericErrorPopup from '../../popups/GenericError'; import { NoRidesInList } from '../RideHistory/RidesList/styled'; import Mixpanel from '../../services/Mixpanel'; +import CancellationReasonsProvider, { CancellationReasonsContext } from '../../context/cancellation-reasons'; interface FutureRidesViewProps { menuSide: 'right' | 'left'; @@ -29,6 +30,7 @@ const FutureRidesView = ({ menuSide }: FutureRidesViewProps) => { const [rideToCancel, setRideToCancel] = useState(undefined); const [showError, setShowError] = useState(false); const [services, setServices] = useState([]); + const [showCancellationReasonPopup, setShowCancellationReasonPopup] = useState(false); const bottomSheetRef = useRef(null); const { @@ -36,7 +38,9 @@ const FutureRidesView = ({ menuSide }: FutureRidesViewProps) => { } = useContext(FutureRidesContext); const { changeBsPage, currentBsPage } = useContext(RideStateContextContext); const { cancelRide, getServices, ride } = useContext(RidePageContext); + const { getCancellationReasons } = useContext(CancellationReasonsContext); const onPressCancel = (id?: string) => { + getCancellationReasons(id); setRideToCancel(id); changeBsPage(BS_PAGES.CANCEL_RIDE); }; @@ -60,6 +64,13 @@ const FutureRidesView = ({ menuSide }: FutureRidesViewProps) => { loadServices(); }, []); + const onCancellationReasonSubmit = () => { + setShowCancellationReasonPopup(false); + if (futureRides.length === 0) { + NavigationService.navigate(MAIN_ROUTES.HOME); + } + }; + return ( { serviceName={service?.displayName} paymentMethod={fRide?.payment?.paymentMethod} scheduledTo={fRide?.scheduledTo || ''} + pickupWindowTime={service?.futurePickupWindowSizeInMinutesWithFallback} /> ); })} @@ -110,9 +122,7 @@ const FutureRidesView = ({ menuSide }: FutureRidesViewProps) => { await cancelRide(rideToCancel); await loadFutureRides(); changeBsPage(ride.id ? BS_PAGES.ACTIVE_RIDE : BS_PAGES.ADDRESS_SELECTOR); - if (futureRides.length === 1) { - NavigationService.navigate(MAIN_ROUTES.HOME); - } + setShowCancellationReasonPopup(true); } catch (e: any) { setShowError(true); Mixpanel.setEvent('failed to cancel ride', { status: e?.response?.status }); @@ -123,6 +133,12 @@ const FutureRidesView = ({ menuSide }: FutureRidesViewProps) => { }} /> + setShowError(false)} diff --git a/examples/client/Locomotion/src/pages/Lock/index.js b/examples/client/Locomotion/src/pages/Lock/index.js index c3dfffa00..593906e3e 100644 --- a/examples/client/Locomotion/src/pages/Lock/index.js +++ b/examples/client/Locomotion/src/pages/Lock/index.js @@ -1,7 +1,7 @@ import React, { useEffect, useRef } from 'react'; import Config from 'react-native-config'; import { MAIN_ROUTES } from '../routes'; -import Auth from '../../services/auth'; +import { logout } from '../../services/logout'; import SubmitButton from '../../Components/RoundedButton'; import { @@ -35,7 +35,7 @@ export default () => { useInterval(async () => { const userData = await UserService.getUser(); if (userData === null) { - Auth.logout(); + logout(); } if (userData.active === true) { @@ -44,7 +44,7 @@ export default () => { }, 5000); const submit = async () => { - Auth.logout(); + logout(); }; return ( diff --git a/examples/client/Locomotion/src/pages/Logout/index.js b/examples/client/Locomotion/src/pages/Logout/index.js index 78ed896a2..326e42500 100644 --- a/examples/client/Locomotion/src/pages/Logout/index.js +++ b/examples/client/Locomotion/src/pages/Logout/index.js @@ -1,11 +1,11 @@ import React, { useEffect } from 'react'; import propTypes from 'prop-types'; -import Auth from '../../services/auth'; +import { logout } from '../../services/logout'; import FullPageLoader from '../../Components/FullPageLoader'; const Logout = ({ navigation }) => { useEffect(() => { - Auth.logout(navigation); + logout(navigation); }, []); return ( diff --git a/examples/client/Locomotion/src/pages/Main.js b/examples/client/Locomotion/src/pages/Main.js index d4d096f8b..fe8a49837 100644 --- a/examples/client/Locomotion/src/pages/Main.js +++ b/examples/client/Locomotion/src/pages/Main.js @@ -82,6 +82,14 @@ const Main = () => ( name={MAIN_ROUTES.CARD_DETAILS} component={ROUTES_COMPS[MAIN_ROUTES.CARD_DETAILS]} /> + + { + const { + getMessage, markReadMessages, toastMessageId, closeToast, + } = useContext(MessagesContext); + const [message, setMessage] = useState(null); + + const loadMessage = async (messageId: string) => { + const fetchedMessage = await getMessage(messageId); + if (fetchedMessage) { + setMessage(fetchedMessage); + } else { + NavigationService.navigate(MAIN_ROUTES.MESSAGES, {}, APP_ROUTES.MAIN_APP); + } + }; + + useEffect(() => { + const { messageId } = route.params; + if (messageId) { + loadMessage(messageId); + } + }, [route]); + + useEffect(() => { + if (message?.id === toastMessageId) { + closeToast(); + } + + if ( + message + && message.userMessages + && message.userMessages.length + && !message.userMessages[0].readAt + ) { + markReadMessages([message.userMessages[0].id]); + } + }, [message]); + + return ( + + { + NavigationService.navigate(MAIN_ROUTES.MESSAGES, {}, APP_ROUTES.MAIN_APP); + }} + iconSide={menuSide} + /> + {message ? ( + + + {message.title} + + + {message.subTitle} + + + {getFormattedMessageDate(message)} + + {message.content + && ( + + + {message.content} + + + )} + {!!message.link + && ( + message.link && Linking.openURL(message.link)}> + + {message.linkText || message.link} + + + + ) + } + + ) : ( + + + + )} + + ); +}; + + +export default MessageView; diff --git a/examples/client/Locomotion/src/pages/MessagesList/MessageCard/index.tsx b/examples/client/Locomotion/src/pages/MessagesList/MessageCard/index.tsx new file mode 100644 index 000000000..d02b5bfa7 --- /dev/null +++ b/examples/client/Locomotion/src/pages/MessagesList/MessageCard/index.tsx @@ -0,0 +1,58 @@ +import React, { useContext, useEffect } from 'react'; +import moment from 'moment'; +import { MAIN_ROUTES } from '../../routes'; +import i18n from '../../../I18n'; +import * as NavigationService from '../../../services/navigation'; +import { messageProps, MessagesContext } from '../../../context/messages'; +import { + CardContainer, + MessageDate, + MessageFooter, + MessageText, + MessageTitle, + ReadMoreText, + ReadSymbol, + ReadSymbolContainer, + TextContainer, +} from './styled'; +import { getFormattedMessageDate } from '../../../context/messages/utils'; + +interface MessageCardProps { + message: messageProps; + readAt: Date | null; + dismissedAt: Date | null; +} + +const MessageCard = ({ message, readAt, dismissedAt }: MessageCardProps) => ( + { + NavigationService.navigate(MAIN_ROUTES.MESSAGE_VIEW, { messageId: message.id }); + }} + isRead={readAt} + > + + {!readAt && } + + + + {message.title} + + + {message.subTitle} + + + + {getFormattedMessageDate(message)} + + + {i18n.t('messages.readMore')} + + + + +); + + +export default MessageCard; diff --git a/examples/client/Locomotion/src/pages/MessagesList/MessageCard/styled.ts b/examples/client/Locomotion/src/pages/MessagesList/MessageCard/styled.ts new file mode 100644 index 000000000..ea03ba309 --- /dev/null +++ b/examples/client/Locomotion/src/pages/MessagesList/MessageCard/styled.ts @@ -0,0 +1,81 @@ +import { Text, View } from 'react-native'; +import styled from 'styled-components'; +import Button from '../../../Components/Button'; +import { + FONT_SIZES, FONT_WEIGHTS, LINK_BLUE_COLOR, FONT_SIZES_VALUES, +} from '../../../context/theme'; + +type CardContainerProps = { + isRead: boolean +} +export const CardContainer = styled(Button)` +max-height: 200px; +width: 100%; +padding: 20px; +display: flex; +flex-direction: row; +align-items: flex-start; +background-color: ${({ isRead }) => (isRead ? '#f9f9f9' : '#ffffff')}; +border-width: 1px; +border-color: #e2e2e2; +`; + +export const MessageTitle = styled(Text)` +${FONT_SIZES.H1} +${FONT_WEIGHTS.SEMI_BOLD} +`; + +export const MessageText = styled(Text)` +${FONT_SIZES.H3} +${FONT_WEIGHTS.REGULAR} +opacity: .8; +margin: 4px 0; +`; + +export const MessageFooter = styled(View)` +display: flex; +flex-direction: row; +justify-content: space-between; +align-items: center; +`; + +export const MessageDate = styled(Text)` +${FONT_SIZES.MEDIUM} +${FONT_WEIGHTS.REGULAR} +opacity: .5; + +`; + +export const ReadMore = styled(Text)` + +`; + +export const ReadMoreText = styled(Text)` +${FONT_SIZES.LARGE} +${FONT_WEIGHTS.BOLD} +color: ${LINK_BLUE_COLOR}; +`; + +export const TextContainer = styled(View)` +width: 90%; +padding-right: 20px; +`; + +export const ReadSymbolContainer = styled(View)` +width: 10%; +margin-top: 10px; +align-items: flex-start; +`; + +export const ReadSymbol = styled(View)` +height: 10px; +width: 10px; +background-color: ${LINK_BLUE_COLOR}; +border-radius: 100px; +`; + + +export const MARKDOWN_TEXT_STYLE = { + fontSize: FONT_SIZES_VALUES.H3, + opacity: 0.8, +}; diff --git a/examples/client/Locomotion/src/pages/MessagesList/index.tsx b/examples/client/Locomotion/src/pages/MessagesList/index.tsx new file mode 100644 index 000000000..5ed42c469 --- /dev/null +++ b/examples/client/Locomotion/src/pages/MessagesList/index.tsx @@ -0,0 +1,111 @@ +import React, { + useContext, useEffect, useState, useCallback, +} from 'react'; +import styled from 'styled-components'; +import { ScrollView } from 'react-native-gesture-handler'; +import { useFocusEffect } from '@react-navigation/native'; +import { View } from 'react-native'; +import { MAIN_ROUTES } from '../routes'; +import PageHeader from '../../Components/PageHeader'; +import { PageContainer } from '../styles'; +import { RideStateContextContext } from '../..'; +import { RidePageContext } from '../../context/newRideContext'; +import i18n from '../../I18n'; +import { BS_PAGES } from '../../context/ridePageStateContext/utils'; +import * as NavigationService from '../../services/navigation'; +import { MessagesContext } from '../../context/messages'; +import MessageCard from './MessageCard'; +import Loader from '../../Components/Loader'; +import { NoRidesInList } from './styled'; +import { PageGenericMessage } from '../../Components/PageGenericMessage'; + +const ScrollContainer = styled(ScrollView)` +`; +const LoaderContainer = styled(View)` +height: 80%; +justify-content: center; +`; +interface FutureRidesViewProps { + menuSide: 'right' | 'left'; + route: any; + } + +const Messages = ({ menuSide, route }: FutureRidesViewProps) => { + const { changeBsPage } = useContext(RideStateContextContext); + const { + userMessages, loadUserMessages, isLoading, markReadMessages, + } = useContext(MessagesContext); + const { ride } = useContext(RidePageContext); + + const markMessagesAsRead = async () => { + if (userMessages && userMessages.length) { + const unreadMessages = userMessages.filter(message => !message.readAt).map(message => message.id); + if (unreadMessages.length) { + await markReadMessages(unreadMessages); + } + } + }; + + const initPage = async () => { + await loadUserMessages(); + }; + + const exitPageActions = async () => { + await markMessagesAsRead(); + await loadUserMessages(); + }; + + useFocusEffect( + useCallback(() => { + initPage(); + }, []), + ); + + return ( + + { + exitPageActions(); + NavigationService.navigate(MAIN_ROUTES.HOME); + }} + iconSide={menuSide} + /> + {isLoading + ? ( + + + + ) + : ( + + {userMessages && userMessages.length + ? (userMessages || []).map(m => ( + + )) + : ( + + ) + } + + ) + } + + + + ); +}; + + +export default Messages; diff --git a/examples/client/Locomotion/src/pages/MessagesList/styled.js b/examples/client/Locomotion/src/pages/MessagesList/styled.js new file mode 100644 index 000000000..6908e1497 --- /dev/null +++ b/examples/client/Locomotion/src/pages/MessagesList/styled.js @@ -0,0 +1,66 @@ +import React, { useContext } from 'react'; +import styled, { ThemeContext } from 'styled-components'; +import { FONT_SIZES, FONT_WEIGHTS } from '../../context/theme'; +import noRides from '../../assets/no_rides.svg'; +import SvgIcon from '../../Components/SvgIcon'; + +export const NoRidesImageContainer = styled.View` + align-self: center; +`; + +export const RideViewContainer = styled.View` + padding: 15px 5px; + flex-direction: row; + justify-content: space-between; +`; + +export const RideViewTextContainer = styled.View` + flex: 3; +`; + +export const CenterContainer = styled.View` + margin-top: ${({ addTop }) => (addTop ? '50%' : '0')}; + align-self: center; + align-content: center; +`; + +export const BaseText = styled.Text` + padding-top: 5px; +`; + +export const NoRidesListContainer = styled(BaseText)` + padding-top: 45px; + text-align: center; + ${FONT_SIZES.H2} + ${FONT_WEIGHTS.SEMI_BOLD} +`; +export const SubNoRidesListContainer = styled(BaseText)` + padding-top: 15px; + text-align: center; + font-size: 16px; +`; + +export const NoRidesInList = ({ title, text }) => { + const { primaryColor } = useContext(ThemeContext); + return ( + + + + + + {title} + + + {text} + + + ); +}; + +export const DayTitleText = styled(BaseText)` + font-size: 16px; + text-transform: capitalize; +`; + +export const RidesViewContainer = styled.View` +`; diff --git a/examples/client/Locomotion/src/pages/Payments/cardDetailUtils.ts b/examples/client/Locomotion/src/pages/Payments/cardDetailUtils.ts index 628b48caa..a195e4146 100644 --- a/examples/client/Locomotion/src/pages/Payments/cardDetailUtils.ts +++ b/examples/client/Locomotion/src/pages/Payments/cardDetailUtils.ts @@ -1,3 +1,13 @@ +import { isCardPaymentMethod } from '../../lib/ride/utils'; +import { PAYMENT_METHODS } from '../../lib/commonTypes'; + export const capitalizeFirstLetter = (string: string) => string?.charAt(0).toUpperCase() + string?.slice(1); export const getLastFourForamttedShort = (lastFour: string) => `**** ${capitalizeFirstLetter(lastFour)}`; export const getLastFourForamttedLong = (lastFour: string) => `**** **** **** ${capitalizeFirstLetter(lastFour)}`; + +export const getPaymentMethod = (paymentMethodId: string) => { + if (!isCardPaymentMethod({ id: paymentMethodId })) { + return paymentMethodId; + } + return PAYMENT_METHODS.CARD; +}; diff --git a/examples/client/Locomotion/src/pages/Payments/consts.ts b/examples/client/Locomotion/src/pages/Payments/consts.ts index 3745b5a83..78cfbdef7 100644 --- a/examples/client/Locomotion/src/pages/Payments/consts.ts +++ b/examples/client/Locomotion/src/pages/Payments/consts.ts @@ -1,5 +1,13 @@ +import cashIcon from '../../assets/cash.svg'; +import offlineIcon from '../../assets/offline.svg'; + export const PAYMENT_METHODS = { CASH: 'cash', OFFLINE: 'offline', CARD: 'card', }; + +export const paymentMethodToIconMap = { + [PAYMENT_METHODS.CASH]: cashIcon, + [PAYMENT_METHODS.OFFLINE]: offlineIcon, +}; diff --git a/examples/client/Locomotion/src/pages/Payments/offlinePaymentMethod.ts b/examples/client/Locomotion/src/pages/Payments/offlinePaymentMethod.ts new file mode 100644 index 000000000..bb850f5f8 --- /dev/null +++ b/examples/client/Locomotion/src/pages/Payments/offlinePaymentMethod.ts @@ -0,0 +1,22 @@ +import i18n from '../../I18n'; +import { PaymentMethodInterface } from '../../context/payments/interface'; +import { PAYMENT_METHODS } from './consts'; + +const offlinePaymentMethod : PaymentMethodInterface = { + brand: 'generic', + createdAt: new Date(), + customerId: '', + expiresAt: new Date(2100, 9, 9), + hasOutstandingBalance: false, + id: PAYMENT_METHODS.OFFLINE, + isDefault: false, + isExpired: false, + lastFour: '', + name: i18n.t('payments.offline'), + stripeId: '', + updatedAt: new Date(), + deletedAt: null, + outstandingBalance: { amount: 0, currency: 'USD' }, +}; + +export default offlinePaymentMethod; diff --git a/examples/client/Locomotion/src/pages/Payments/paymentMethodSection.js b/examples/client/Locomotion/src/pages/Payments/paymentMethodSection.js index 3d60d7cbe..9dbf4caad 100644 --- a/examples/client/Locomotion/src/pages/Payments/paymentMethodSection.js +++ b/examples/client/Locomotion/src/pages/Payments/paymentMethodSection.js @@ -31,7 +31,9 @@ const Section = ({ {showChangeButton ? ( - + {i18n.t('payments.changeDefault')} ) diff --git a/examples/client/Locomotion/src/pages/PostRide/Feedback/index.tsx b/examples/client/Locomotion/src/pages/PostRide/Feedback/index.tsx new file mode 100644 index 000000000..e4c7c31b1 --- /dev/null +++ b/examples/client/Locomotion/src/pages/PostRide/Feedback/index.tsx @@ -0,0 +1,103 @@ +import React, { + useContext, useEffect, useRef, useState, +} from 'react'; +import { ThemeContext } from 'styled-components'; +import { TouchableOpacity } from 'react-native'; +import i18n from '../../../I18n'; +import { + ActiveLabelContainer, + ActiveWriteCommentLabel, + WriteCommentContainer, + LabelComment, + StyledTextArea, + Container, + Counter, + TextAreaTopBar, +} from './styled'; +import SvgIcon from '../../../Components/SvgIcon'; +import addCommentIcon from '../../../assets/add_comment.svg'; +import settings from '../../../context/settings'; +import settingsKeys from '../../../context/settings/keys'; + +interface RideFeedbackProps { + onTextChange: (text: string) => void; +} + +const MAX_LENGTH = 150; + +const RideFeedback = ({ + onTextChange, +}: RideFeedbackProps) => { + const [isActive, setIsActive] = useState(false); + const [shouldShowPage, setShouldShowPage] = useState(false); + const [currentText, updateText] = useState(''); + const inputRef = useRef(); + const theme = useContext(ThemeContext); + + const onChange = (text: string) => { + updateText(text); + onTextChange(text); + }; + + const { primaryColor } = useContext(ThemeContext); + const { getSettingByKey } = settings.useContainer(); + + const onLabelClick = () => { + setIsActive(true); + }; + + const updateShouldShowPage = async () => { + setShouldShowPage(await getSettingByKey(settingsKeys.SHOW_POST_RIDE_FEEDBACK)); + }; + + useEffect(() => { + updateShouldShowPage(); + }, []); + + const writeCommentText: string = i18n.t('postRide.writeComment.title'); + + return ( + shouldShowPage + && ( + + {!isActive ? ( + + + + {writeCommentText} + + + ) + : ( + + + {writeCommentText} + {`${currentText.length}/${MAX_LENGTH}`} + + + + ) + } + + ) + ); +}; + +export default RideFeedback; diff --git a/examples/client/Locomotion/src/pages/PostRide/Feedback/styled.ts b/examples/client/Locomotion/src/pages/PostRide/Feedback/styled.ts new file mode 100644 index 000000000..0f1d3dbee --- /dev/null +++ b/examples/client/Locomotion/src/pages/PostRide/Feedback/styled.ts @@ -0,0 +1,42 @@ +import { Text, View } from 'react-native'; +import styled from 'styled-components'; +import { TextArea } from '../../../Components/TextArea'; +import { FONT_SIZES, FONT_WEIGHTS } from '../../../context/theme'; +import { End } from '../../../lib/text-direction'; + +export const ActiveLabelContainer = styled(View)` + flex-direction: row; + align-items: center; +`; +export const ActiveWriteCommentLabel = styled(Text)` + color: ${({ theme }) => theme.primaryColor}; + margin-left: 6px; + ${FONT_SIZES.H3}; + ${FONT_WEIGHTS.REGULAR}; +`; +export const WriteCommentContainer = styled(View)``; +export const LabelComment = styled(Text)` + color: #989A9B; + ${FONT_SIZES.LARGE}; + ${FONT_WEIGHTS.REGULAR}; +`; +export const StyledTextArea = styled(TextArea)` + padding: 8px; + color: #333333; +`; +export const Container = styled(View)` + padding: 0px 30px; +`; + +export const Counter = styled(Text)` + font-size: 16px; + color: #1a303b56; + text-align: ${End}; + flex: 1; +`; + +export const TextAreaTopBar = styled(View)` + flex-direction: row; + margin-bottom: 5px; + margin-top: 10px; +`; diff --git a/examples/client/Locomotion/src/pages/PostRide/Tips/index.js b/examples/client/Locomotion/src/pages/PostRide/Tips/index.js index 8b47e18aa..b78443741 100644 --- a/examples/client/Locomotion/src/pages/PostRide/Tips/index.js +++ b/examples/client/Locomotion/src/pages/PostRide/Tips/index.js @@ -16,6 +16,7 @@ import BottomSheet from '../../../Components/BottomSheet'; import BottomSheetContextProvider, { BottomSheetContext, SNAP_POINT_STATES } from '../../../context/bottomSheetContext'; import CustomTip from './CustomTip'; import { getFormattedPrice, getCurrencySymbol } from '../../../context/newRideContext/utils'; +import SettingsContext from '../../../context/settings'; const TipSectionContainer = styled.View` width: 100%; @@ -106,12 +107,13 @@ const Tips = ({ }) => { const [selectedTip, setSelectedTip] = useState(null); const [customTip, setCustomTip] = useState(null); + const { showPrice, loadShowPrice } = SettingsContext.useContainer(); const isPercentage = ridePrice >= tipSettings.percentageThreshold; const buttons = isPercentage ? tipSettings.percentage : tipSettings.fixedPrice; const serviceDisplayPrice = getFormattedPrice(priceCurrency, ridePrice); - const tipSuffix = getCurrencySymbol(priceCurrency); + const tipSuffix = isPercentage ? '%' : getCurrencySymbol(priceCurrency); const bottomSheetRef = useRef(null); const { @@ -121,6 +123,7 @@ const Tips = ({ useEffect(() => { setSnapPointsState(SNAP_POINT_STATES.CUSTOM_TIP); + loadShowPrice(); }, []); @@ -147,6 +150,10 @@ const Tips = ({ calculatedTip = customTip || selectedTip; + if (isPercentage) { + calculatedTip = ridePrice * (calculatedTip) / 100; + } + return calculatedTip.toFixed(2); }; @@ -166,12 +173,14 @@ const Tips = ({ - + <Title testID="tipPageTitle"> {`${i18n.t('postRide.tip.title')} ${driver.firstName}`} - + {showPrice && ( + {`${i18n.t('postRide.tip.subTitle')} ${serviceDisplayPrice}`} + )} @@ -192,7 +201,7 @@ const Tips = ({ selected={!!customTip} onPress={() => bottomSheetRef.current.snapToIndex(0)} label={i18n.t('postRide.tip.customTip.title')} - value={customTip ? getFormattedPrice(priceCurrency, customTip) : null} + value={customTip ? formatCurrency(customTip) : null} > {!customTip ? i18n.t('postRide.tip.setCustomTip') : null} diff --git a/examples/client/Locomotion/src/pages/PostRide/index.js b/examples/client/Locomotion/src/pages/PostRide/index.js index 46ce8b9db..adde86616 100644 --- a/examples/client/Locomotion/src/pages/PostRide/index.js +++ b/examples/client/Locomotion/src/pages/PostRide/index.js @@ -23,18 +23,21 @@ import Button from '../../Components/RoundedButton'; import settings from '../../context/settings'; import SETTINGS_KEYS from '../../context/settings/keys'; import NewRidePageContextProvider, { RidePageContext } from '../../context/newRideContext'; +import { didUserRate } from '../../context/newRideContext/utils'; import closeIcon from '../../assets/x.png'; import BottomSheetContextProvider, { BottomSheetContext } from '../../context/bottomSheetContext'; import { RideStateContextContext } from '../..'; import { BS_PAGES } from '../../context/ridePageStateContext/utils'; import * as navigationService from '../../services/navigation'; +import RideFeedback from './Feedback'; const PostRidePage = ({ menuSide, route }) => { - const { rideId, priceCalculationId } = route?.params; + const { rideId, priceCalculationId, fromHistory } = route?.params; const [rating, setRating] = useState(null); const [ride, setRide] = useState(null); const [tipFromDb, setTipFromDb] = useState(); const [rideTip, setRideTip] = useState(null); + const [rideFeedbackText, setRideFeedbackText] = useState(null); const [tipSettings, setTipSettings] = useState({ percentageThreshold: 30, percentage: [10, 15, 20], @@ -44,6 +47,7 @@ const PostRidePage = ({ menuSide, route }) => { postRideSubmit, getRideFromApi, cleanRideState, + setLastAcknowledgedRideCompletionTimestampToNow, } = useContext(RidePageContext); const { changeBsPage } = useContext(RideStateContextContext); const { @@ -83,10 +87,11 @@ const PostRidePage = ({ menuSide, route }) => { useEffect(() => { initSettings(); loadRide(); + setLastAcknowledgedRideCompletionTimestampToNow(); }, []); const nextPage = () => { - if (priceCalculationId) { + if (fromHistory) { const [formattedRide] = formatRides([ride]); const newRidesHistory = pastRides.map(pr => (pr.id === ride.id ? formattedRide : pr)); setPastRides(newRidesHistory); @@ -101,7 +106,8 @@ const PostRidePage = ({ menuSide, route }) => { await postRideSubmit(ride.id, { rating, tip: rideTip, - priceCalculationId: ride.priceCalculationId, + priceCalculationId, + rideFeedbackText, }); nextPage(); return true; @@ -115,12 +121,7 @@ const PostRidePage = ({ menuSide, route }) => { isExpanded, } = useContext(BottomSheetContext); - const getButtonText = () => { - if (priceCalculationId) { - return i18n.t('postRide.submitForPast'); - } - return i18n.t('postRide.submit'); - }; + const getButtonText = () => i18n.t('postRide.submit'); return ( <> @@ -132,15 +133,18 @@ const PostRidePage = ({ menuSide, route }) => { iconSide={menuSide} icon={closeIcon} /> - - {!ride.rating && ( - - {i18n.t('postRide.ratingHeadline')} - - + + {!didUserRate(ride.rating, ride.rideFeedbacks) && ( + + {i18n.t('postRide.ratingHeadline')} + + <> + setRideFeedbackText(text)} /> + + )} - {isCardPaymentMethod(ride?.payment?.paymentMethod) && !(priceCalculationId && tipFromDb) && ( + {isCardPaymentMethod(ride?.payment?.paymentMethod) && !tipFromDb && ( {ride?.priceCurrency && (ride?.priceAmount || ride?.priceAmount === 0) ? ( @@ -155,7 +159,7 @@ const PostRidePage = ({ menuSide, route }) => { )} - + diff --git a/examples/client/Locomotion/src/pages/PostRide/styled.js b/examples/client/Locomotion/src/pages/PostRide/styled.js index 053749845..b6ecc19c8 100644 --- a/examples/client/Locomotion/src/pages/PostRide/styled.js +++ b/examples/client/Locomotion/src/pages/PostRide/styled.js @@ -1,4 +1,4 @@ -import { View } from 'react-native'; +import { ScrollView, View } from 'react-native'; import styled from 'styled-components'; @@ -31,7 +31,7 @@ export const StarIcon = styled.Image(({ isOn, theme }) => ` `} `); -export const PageContent = styled(View)` +export const PageContent = styled(ScrollView)` width: 100%; height: 100%; padding: 0px; diff --git a/examples/client/Locomotion/src/pages/Profile/Code.js b/examples/client/Locomotion/src/pages/Profile/Code.js index b8dc91679..82e791339 100644 --- a/examples/client/Locomotion/src/pages/Profile/Code.js +++ b/examples/client/Locomotion/src/pages/Profile/Code.js @@ -1,3 +1,4 @@ +/* eslint-disable no-nested-ternary */ import React, { useCallback, useContext, useEffect, useState, } from 'react'; @@ -7,7 +8,8 @@ import PinCode from '../../Components/PinCode'; import SaveButton from './SaveButton'; import { OnboardingContext } from '../../context/onboarding'; import { - ErrorText, ResendButton, ResendContainer, ResendText, SafeView, Line, + ErrorText, ResendButton, ResendContainer, ResendText, SafeView, + Line, ResendButtonText, } from './styles'; import i18n from '../../I18n'; import Header from './Header'; @@ -16,17 +18,20 @@ import { MAIN_ROUTES } from '../routes'; import { UserContext } from '../../context/user'; import { PageContainer, ContentContainer } from '../styles'; import useInterval from '../../lib/useInterval'; -import * as navigationService from '../../services/navigation'; const CODE_LENGTH = 4; const RESEND_SECONDS = 60; +const RESEND_ATTEMPTS = 2; const Code = () => { const { verifyCode } = useContext(OnboardingContext); - const { user } = useContext(UserContext); + const { user, onLogin } = useContext(UserContext); const [showErrorText, setShowErrorText] = useState(false); const [loading, setLoading] = useState(false); const [timer, setTimer] = useState(RESEND_SECONDS); + const [resendCounter, setResendCounter] = useState(0); + const [callCounter, setCallCounter] = useState(0); + const [isCalling, setIsCalling] = useState(false); const onVertCodeChange = (value) => { setShowErrorText(false); @@ -58,6 +63,54 @@ const Code = () => { setLoading(false); }, [showErrorText]), ); + + useFocusEffect( + useCallback(() => { + setResendCounter(0); + setCallCounter(0); + setTimer(RESEND_SECONDS); + setIsCalling(false); + }, []), + ); + + const onLoginInternal = async (channel) => { + try { + await onLogin(user.phoneNumber, channel); + } catch (e) { + console.log('Bad login with response', e); + const status = e && e.response && e.response.status; + if (status === 429) { + setShowErrorText(i18n.t('login.tooManyRequestError')); + } + } + }; + + const onResendPress = async () => { + await onLoginInternal(); + setResendCounter(currentValue => currentValue + 1); + setTimer(RESEND_SECONDS); + }; + + const onCallPress = async () => { + await onLoginInternal('call'); + setCallCounter(currentValue => currentValue + 1); + setIsCalling(true); + }; + + useEffect(() => { + if (isCalling) { + const callingTimeout = setTimeout(() => { + setIsCalling(false); + }, 10 * 1000); + + return () => { + if (callingTimeout) { + clearTimeout(callingTimeout); + } + }; + } + }, [isCalling]); + return (
@@ -73,21 +126,46 @@ const Code = () => { /> {showErrorText && {i18n.t('login.vertError')}} - - - {i18n.t('onboarding.pages.code.resendCodeText')} - - + {isCalling + ? ( + + + {i18n.t('onboarding.pages.code.calling')} + + + ) + : (resendCounter >= RESEND_ATTEMPTS ? ( + + + {i18n.t('onboarding.pages.code.resendCodeText')} + + { + onCallPress(); + }} + > + + {i18n.t('onboarding.pages.code.call')} + + + + ) : null)} 0} onPress={() => { if (timer === 0) { - navigationService.navigate('Phone'); + onResendPress(); } }} > - {i18n.t('onboarding.pages.code.resendCodeButton')} + + {i18n.t('onboarding.pages.code.resendCodeButton')} + {timer > 0 ? ( diff --git a/examples/client/Locomotion/src/pages/Profile/EmailCode.js b/examples/client/Locomotion/src/pages/Profile/EmailCode.js index 17bb4704c..52463cac5 100644 --- a/examples/client/Locomotion/src/pages/Profile/EmailCode.js +++ b/examples/client/Locomotion/src/pages/Profile/EmailCode.js @@ -1,10 +1,10 @@ -import React, { useContext, useState } from 'react'; -import { useRoute } from '@react-navigation/native'; +import React, { useCallback, useContext, useState } from 'react'; +import { useFocusEffect, useRoute } from '@react-navigation/native'; import PinCode from '../../Components/PinCode'; import SaveButton from './SaveButton'; import { OnboardingContext } from '../../context/onboarding'; import { - ErrorText, ResendButton, ResendContainer, ResendText, Line, + ErrorText, ResendButton, ResendContainer, ResendText, Line, ResendButtonText, } from './styles'; import i18n from '../../I18n'; import Header from './Header'; @@ -21,12 +21,20 @@ const RESEND_SECONDS = 60; const Code = () => { const route = useRoute(); const { nextScreen } = useContext(OnboardingContext); - const { user, onEmailVert, updateUserFromServer } = useContext(UserContext); + const { + user, onEmailVert, updateUserFromServer, verifyEmail, + } = useContext(UserContext); const [code, setCode] = useState(''); const [showErrorText, setShowErrorText] = useState(false); const [loading, setLoading] = useState(false); const [timer, setTimer] = useState(RESEND_SECONDS); + useFocusEffect( + useCallback(() => { + setTimer(RESEND_SECONDS); + }, []), + ); + const onVertCodeChange = (value) => { setShowErrorText(false); if (value.length === CODE_LENGTH) { @@ -84,17 +92,18 @@ const Code = () => { 0} onPress={() => { if (timer === 0) { - navigationService.navigate(MAIN_ROUTES.EMAIL, { - editAccount: route.params && route.params.editAccount, - email: user.email, - }); + verifyEmail(); + setTimer(RESEND_SECONDS); } }} > - {i18n.t('onboarding.pages.emailCode.resendCodeButton')} + + {i18n.t('onboarding.pages.emailCode.resendCodeButton')} + {timer > 0 ? ( diff --git a/examples/client/Locomotion/src/pages/Profile/Phone.js b/examples/client/Locomotion/src/pages/Profile/Phone.js index f8df37bd5..252d764f5 100644 --- a/examples/client/Locomotion/src/pages/Profile/Phone.js +++ b/examples/client/Locomotion/src/pages/Profile/Phone.js @@ -1,6 +1,13 @@ -import React, { useContext, useState } from 'react'; +import React, { + useCallback, + useContext, useEffect, useRef, useState, +} from 'react'; import { useIsFocused } from '@react-navigation/native'; import Config from 'react-native-config'; +import { ScrollView } from 'react-native'; +import Recaptcha from 'react-native-recaptcha-that-works'; +import settings from '../../context/settings'; +import Mixpanel from '../../services/Mixpanel'; import i18n from '../../I18n'; import SaveButton from './SaveButton'; import { OnboardingContext } from '../../context/onboarding'; @@ -12,20 +19,50 @@ import PhoneNumberInput from '../../Components/PhoneNumberInput'; import { MAIN_ROUTES } from '../routes'; import { UserContext } from '../../context/user'; import AppSettings from '../../services/app-settings'; +import * as NavigationService from '../../services/navigation'; import { PageContainer, ContentContainer } from '../styles'; +import Auth from '../../services/auth'; +import { getAppSettings } from '../../context/settings/api'; +import SETTINGS_KEYS from '../../context/settings/keys'; + const Phone = ({ navigation }) => { const { nextScreen } = useContext(OnboardingContext); - const { updateState, user } = useContext(UserContext); + const { updateState, user, onLogin } = useContext(UserContext); const [showErrorText, setShowErrorText] = useState(false); const [renderId, setRenderId] = useState(0); const [isInvalid, setIsInvalid] = useState(true); + const recaptchaRef = useRef(null); + const [captchaToken, setCaptchaToken] = useState(null); + const [isLoadingSaveButton, setIsLoadingSaveButton] = useState(false); + const [shouldHideCaptcha, setShouldHideCaptcha] = useState(false); + const { getSettingByKey } = settings.useContainer(); + const fetchHideCaptchaSetting = async () => { + const hideCaptchaSetting = await getSettingByKey( + SETTINGS_KEYS.DISABLE_CAPTCHA_UI, + ); + Mixpanel.setEvent('Fetched hide captcha setting', { hideCaptchaSetting }); + setShouldHideCaptcha(hideCaptchaSetting); + }; + useEffect(() => { + fetchHideCaptchaSetting(); + }, []); + + + const onVerifyCaptcha = async (token) => { + Mixpanel.setEvent('Captcha Verified successfully', { token }); + setCaptchaToken(token); + await Auth.updateCaptchaToken(token); + }; + const onPhoneNumberChange = (phoneNumber, isValid) => { setShowErrorText(false); setIsInvalid(!isValid); updateState({ phoneNumber }); }; + const isDevSettingOn = () => Config.DEV_SETTINGS && Config.DEV_SETTINGS === 'true'; + const isDebugPhoneNumber = () => user.phoneNumber === Config.DEV_PAGE_PHONE_NUMBER && isDevSettingOn(); const ERROR_RESPONSES = { 429: () => setShowErrorText(i18n.t('login.tooManyRequestError')), @@ -33,16 +70,22 @@ const Phone = ({ navigation }) => { 403: () => setShowErrorText(i18n.t('login.clientIsBanned', { appName: Config.OPERATION_NAME })), }; - const onSubmitPhoneNumber = async () => { + const submitPhoneNumber = async () => { try { - await AppSettings.destroy(); - await loginApi({ - phoneNumber: user.phoneNumber, - demandSourceId: Config.OPERATION_ID, - }); + if (isDebugPhoneNumber()) { + NavigationService.navigate(MAIN_ROUTES.DEV_SETTINGS_PAGE); + setIsLoadingSaveButton(false); + return; + } + if (!isDevSettingOn()) { + await AppSettings.destroy(); + } + await onLogin(user.phoneNumber); updateState({ phoneNumber: user.phoneNumber }); nextScreen(MAIN_ROUTES.PHONE); + setIsLoadingSaveButton(false); } catch (e) { + setIsLoadingSaveButton(false); console.log('Bad login with response', e); const status = e && e.response && e.response.status; if (ERROR_RESPONSES[status]) { @@ -51,6 +94,25 @@ const Phone = ({ navigation }) => { setShowErrorText(i18n.t('login.invalidPhoneNumberError')); } }; + useEffect(() => { + if (isLoadingSaveButton) { + if (!shouldHideCaptcha && Config.CAPTCHA_KEY && recaptchaRef.current) { + recaptchaRef.current.open(); + } else { + Mixpanel.setEvent('Submit phone number, without captcha , (Config.CAPTCHA_KEY is not defined)'); + submitPhoneNumber(); + } + } + }, [isLoadingSaveButton]); + + + useEffect(() => { + if (captchaToken) { + Mixpanel.setEvent('Submit phone number, after captcha'); + submitPhoneNumber(); + } + }, [captchaToken]); + // Force render the component when the focus changes useState(() => { @@ -69,30 +131,58 @@ const Phone = ({ navigation }) => { return ( -
- - - +
- {showErrorText && {showErrorText}} - setShowErrorText(i18n.t('login.invalidPhoneNumberError')) - } - /> - + + + + {showErrorText && {showErrorText}} + setIsLoadingSaveButton(true)} + onFail={() => setShowErrorText(i18n.t('login.invalidPhoneNumberError')) + } + /> + { Config.CAPTCHA_KEY + && ( + { + setIsLoadingSaveButton(false); + Mixpanel.setEvent('Captcha closed', { captchaToken }); + } + } + onError={(e) => { + Mixpanel.setEvent('Captcha error', e); + setIsLoadingSaveButton(false); + // try without captcha on api key issues + submitPhoneNumber(); + }} + style={{ backgroundColor: 'transparent' }} + + /> + ) + } + + ); }; diff --git a/examples/client/Locomotion/src/pages/Profile/styles.js b/examples/client/Locomotion/src/pages/Profile/styles.js index df315f698..6173b3777 100644 --- a/examples/client/Locomotion/src/pages/Profile/styles.js +++ b/examples/client/Locomotion/src/pages/Profile/styles.js @@ -36,13 +36,19 @@ ${FONT_SIZES.LARGE}; ${FONT_WEIGHTS.REGULAR} `; -export const ResendButton = styled(BaseText)` - text-decoration: underline; +export const ResendButtonText = styled(ResendText)` +text-decoration: underline; +${({ theme }) => ` + text-decoration-color: ${theme.primaryColor}; + `} +`; + +export const ResendButton = styled(Button).attrs({ + noBackground: true, +})` ${FONT_SIZES.LARGE}; ${FONT_WEIGHTS.REGULAR}; - ${({ theme, disabled }) => ` - text-decoration-color: ${theme.primaryColor}; - color: ${theme.primaryColor}; + ${({ disabled }) => ` ${disabled ? 'opacity: 0.3;' : '1'} `} `; @@ -67,4 +73,5 @@ export const InputContainer = styled.View` export const Line = styled.View` flex-direction: row; +margin-bottom: 10px; `; diff --git a/examples/client/Locomotion/src/pages/RideHistory/RangeDateTimePicker.js b/examples/client/Locomotion/src/pages/RideHistory/RangeDateTimePicker.js index c4e572036..b9ccf996b 100644 --- a/examples/client/Locomotion/src/pages/RideHistory/RangeDateTimePicker.js +++ b/examples/client/Locomotion/src/pages/RideHistory/RangeDateTimePicker.js @@ -1,7 +1,7 @@ import React, { useState } from 'react'; import DatePicker from 'react-native-date-picker'; import { getTextColorForTheme } from '../../context/theme'; -import i18n from '../../I18n'; +import i18n, { getUserLanguageCode } from '../../I18n'; export default ({ onCancel, onConfirm, @@ -23,6 +23,7 @@ export default ({ ( +const SpMarker = ({ sp, disableMarkers }) => ( - - {`${ordinalDesc !== 0 ? getOrdinal(ordinalDesc + 1) : ''} ${ - i18n.t(`stopPointsTypes.${type}`) - }`} + + {getSpTextWithNumberPrefix(sp)} - {type === STOP_POINT_TYPES.STOP_POINT_PICKUP ? : undefined} - {type === STOP_POINT_TYPES.STOP_POINT_DROPOFF ? : undefined} + {sp.type === STOP_POINT_TYPES.STOP_POINT_PICKUP ? : undefined} + {sp.type === STOP_POINT_TYPES.STOP_POINT_DROPOFF ? : undefined} ); @@ -89,14 +85,10 @@ const Map = forwardRef(({ showMyLocation={false} followMyLocation={false} > - {stopPoints && stopPoints.map(({ - lat, lng, type, ordinalDesc, - }) => (lat && lng ? ( + {stopPoints && stopPoints.map(sp => (sp.lat && sp.lng ? ( ) : (<>)))} diff --git a/examples/client/Locomotion/src/pages/RideHistory/RideCard/index.js b/examples/client/Locomotion/src/pages/RideHistory/RideCard/index.js index 009a86c15..ffdfcaf21 100644 --- a/examples/client/Locomotion/src/pages/RideHistory/RideCard/index.js +++ b/examples/client/Locomotion/src/pages/RideHistory/RideCard/index.js @@ -4,11 +4,13 @@ import React, { import moment from 'moment'; import { useFocusEffect } from '@react-navigation/native'; import SkeletonContent from 'react-native-skeleton-content-nonexpo'; +import GenericPopup from '../../../popups/GenericPopup'; +import GenericErrorPopup from '../../../popups/GenericError'; import { isCardPaymentMethod } from '../../../lib/ride/utils'; -import { PAYMENT_METHODS } from '../../../pages/Payments/consts'; -import FullPageLoader from '../../../Components/FullPageLoader'; import { getPriceCalculation } from '../../../context/futureRides/api'; import RidePaymentDetails from '../../../Components/RidePaymentDetails'; +import PaymentContext from '../../../context/payments'; +import SettingsContext from '../../../context/settings'; import { DaySecTitleSubText, DaySecTitleText, @@ -22,7 +24,6 @@ import { RideDrillDownContainer, BlankContainer, MapRideViewContainer, - RideViewTitleContainer, RideViewContainer, RideViewSecTextContainer, MainRideViewSectionContainer, @@ -30,6 +31,8 @@ import { DriverCardContainer, StopPointsVerticalViewContainer, RideStateText, + RetryPaymentButtonContainer, + OutstandBalanceText, } from './styled'; import StopPointsVerticalView from '../../../Components/StopPointsVerticalView'; import Map from './Map'; @@ -37,18 +40,25 @@ import i18n from '../../../I18n'; import { MMMM_DD_YYYY } from '../consts'; import DriverCard from '../../../Components/DriverCard'; import { getFormattedPrice } from '../../../context/newRideContext/utils'; -import { RidePageContext, PriceCalculation } from '../../../context/newRideContext'; -import { RIDE_STATES } from '../../../lib/commonTypes'; +import { PAYMENT_STATES, RIDE_STATES } from '../../../lib/commonTypes'; import TextButton from '../../../Components/TextButton'; import * as NavigationService from '../../../services/navigation'; import { MAIN_ROUTES } from '../../routes'; import ServiceTypeDetails from '../../../Components/ServiceTypeDetails'; -import { CASH_KEY } from '../../../pages/Payments/cashPaymentMethod'; +import RoundedButton from '../../../Components/RoundedButton'; +import contactUsIcon from '../../../assets/headset.svg'; +import sucessIcon from '../../../assets/checkmark.svg'; const RideTitleCard = ({ - ride, page, showTip, tip, + ride, page, showTip, tip, isPaymentRejected, }) => { const isDebuggingEnabled = (typeof atob !== 'undefined'); + const { showPrice, loadShowPrice } = SettingsContext.useContainer(); + + useEffect(() => { + loadShowPrice(); + }, []); + const getTipButton = () => { if (!isDebuggingEnabled && tip === null) { return ( @@ -64,7 +74,7 @@ const RideTitleCard = ({ const price = getFormattedPrice(ride.priceCurrency, tip); const priceText = i18n.t('rideHistory.rideCard.tip', { price }); return ( - + {priceText} ); @@ -74,11 +84,29 @@ const RideTitleCard = ({ if (ride.state === RIDE_STATES.COMPLETED && isLessThenFiveDaysSince && isCard) { - return { NavigationService.navigate(MAIN_ROUTES.POST_RIDE, { rideId: ride.id, priceCalculationId: ride.priceCalculationId }); }} text={i18n.t('rideHistory.rideCard.addTip')} />; + return { NavigationService.navigate(MAIN_ROUTES.POST_RIDE, { rideId: ride.id, priceCalculationId: ride.priceCalculationId, fromHistory: true }); }} text={i18n.t('rideHistory.rideCard.addTip')} />; } return null; }; + const getPriceSubtitle = () => { + if (isPaymentRejected) { + return ( + + {i18n.t('rideHistory.unpaidRide')} + + ); + } if (showTip) { + return getTipButton(); + } + return ( + + {(ride.plannedDistance / 1000).toFixed(1)} + {' '} + KM + + ); + }; return ( <> @@ -94,19 +122,12 @@ const RideTitleCard = ({ ) : {i18n.t(`rideHistory.ride.states.${ride.state}`)}} - + {showPrice && ( + {getFormattedPrice(ride.priceCurrency, ride.priceAmount)} - {showTip - ? getTipButton() - : ( - - {(ride.plannedDistance / 1000).toFixed(1)} - {' '} - KM - - ) - } + )} + {getPriceSubtitle()} @@ -114,12 +135,13 @@ const RideTitleCard = ({ }; export const RideListView = ({ - ride, showSpacer, onPress, + ride, showSpacer, onPress, testID, }) => ( <> - + @@ -130,7 +152,16 @@ export const RideListView = ({ ); const RideView = ({ ride }) => { + const isRidePaymentRejected = ride.payment?.state === PAYMENT_STATES.REJECTED; const [tip, setTip] = useState(null); + const [isPaymentSettled, setPaymentSettled] = useState(false); + const [isUnableToProcessPopupVisible, setIsUnablToProcessPopupVisible] = useState(false); + const [isPaymentSuccessPopupVisible, setIsPaymentSuccessPopupVisible] = useState(false); + const [outstandingBalance, setOutstandingBalance] = useState(null); + const isPaymentRejected = !isPaymentSettled && isRidePaymentRejected; + + const usePayments = PaymentContext.useContainer(); + const map = createRef(); const getTip = async () => { const priceCalculation = await getPriceCalculation(ride.priceCalculationId); @@ -138,54 +169,134 @@ const RideView = ({ ride }) => { setTip((tipObj || {}).amount); }; + const getOutstandingBalance = async () => { + const { + amount, + currency, + } = await + usePayments.loadOutstandingBalance(ride.payment?.paymentMethod?.id); + setOutstandingBalance({ + amount, + currency, + }); + }; + useFocusEffect(() => { if (ride.priceCalculationId) { getTip(); } - }); + + if (isRidePaymentRejected) { + getOutstandingBalance(); + } + }, []); + + const retryPayment = async () => { + const paymentId = ride.payment?.id; + const success = await usePayments.retryPayment(paymentId).catch((err) => { + setIsUnablToProcessPopupVisible(true); + }); + if (success) { + setIsPaymentSuccessPopupVisible(true); + setPaymentSettled(true); + await usePayments.loadCustomer(); + } else { + setIsUnablToProcessPopupVisible(true); + } + }; + + const contactUsButton = ( + { + setIsUnablToProcessPopupVisible(false); + NavigationService.navigate(MAIN_ROUTES.CONTACT_US); + }} + > + {i18n.t('rideHistory.rideCard.paymentRetry.retryFailedButton')} + + ); return ( - - - - - - - - - - - + + + - - - + + + + + + {isPaymentRejected + ? ( + + {outstandingBalance + ? ( + + {i18n.t('rideHistory.rideCard.paymentRetry.text', + { + price: + getFormattedPrice(outstandingBalance.currency, outstandingBalance.amount), + })} + + ) : null} + + {i18n.t('rideHistory.rideCard.paymentRetry.retryPaymentButton')} + + + ) : null + } + + + + + + + + {ride.driver && ride.state === RIDE_STATES.COMPLETED && ( + + )} + + - - - {ride.driver && ride.state === RIDE_STATES.COMPLETED && ( - - )} - - - - + + + setIsUnablToProcessPopupVisible(false)} + /> + { setIsPaymentSuccessPopupVisible(false); }} + icon={sucessIcon} + buttonText={i18n.t('rideHistory.rideCard.paymentRetry.retrySuccessButton')} + /> + ); }; diff --git a/examples/client/Locomotion/src/pages/RideHistory/RideCard/styled.js b/examples/client/Locomotion/src/pages/RideHistory/RideCard/styled.js index edb8d8283..4d025c48f 100644 --- a/examples/client/Locomotion/src/pages/RideHistory/RideCard/styled.js +++ b/examples/client/Locomotion/src/pages/RideHistory/RideCard/styled.js @@ -3,7 +3,7 @@ import styled from 'styled-components'; import i18n from '../../../I18n'; import blackRightArrow from '../../../assets/arrowright.png'; import noRides from '../../../assets/no_rides.svg'; -import { FONT_SIZES, FONT_WEIGHTS } from '../../../context/theme'; +import { ERROR_COLOR, FONT_SIZES, FONT_WEIGHTS } from '../../../context/theme'; export const RideDrillDownIcon = styled.Image.attrs({ source: blackRightArrow, @@ -54,7 +54,6 @@ export const RideViewContainer = styled.ScrollView.attrs(({ paddingBottom: 60, }, }))` - `; export const MapRideViewContainer = styled(BaseRideViewContainer)` @@ -99,12 +98,10 @@ export const BlankContainer = styled.View` `; export const RideViewTextContainer = styled.View` -width: 65%; `; export const RideViewSecTextContainer = styled.View` align-items: flex-end; -width: 35%; `; export const CenterContainer = styled.View` @@ -113,6 +110,7 @@ export const CenterContainer = styled.View` `; export const BaseText = styled.Text` + color: ${({ markError }) => (markError ? ERROR_COLOR : '')}; padding-top: 5px; `; @@ -139,8 +137,8 @@ export const MarkerTitleContainer = styled.View` `; export const MarkerTitleText = styled.Text` - ${FONT_SIZES.MEDIUM} - ${FONT_WEIGHTS.LIGHT} + ${FONT_SIZES.MEDIUM}; + ${FONT_WEIGHTS.LIGHT}; `; export const MarkerTitle = React.memo(({ children }) => ( @@ -155,24 +153,24 @@ export const MarkerTitle = React.memo(({ children }) => ( export const DayTitleText = styled(BaseText)` text-transform: capitalize; - ${FONT_SIZES.H3} - ${FONT_WEIGHTS.SEMI_BOLD} + ${FONT_SIZES.H3}; + ${FONT_WEIGHTS.SEMI_BOLD}; `; export const RideViewSectionTitleText = styled(BaseText)` text-transform: capitalize; - ${FONT_SIZES.LARGE} - ${FONT_WEIGHTS.MEDIUM} + ${FONT_SIZES.LARGE}; + ${FONT_WEIGHTS.MEDIUM}; `; export const DayTitleSubText = styled(BaseText)` - ${({ noCap }) => (noCap ? '' : 'text-transform: capitalize;')} + ${({ noCap }) => (noCap ? '' : 'text-transform: capitalize;')}; `; export const DaySecTitleText = styled(BaseText)` text-align: right; - ${FONT_SIZES.H3} - ${FONT_WEIGHTS.MEDIUM} + ${FONT_SIZES.H3}; + ${FONT_WEIGHTS.MEDIUM}; `; export const DaySecTitleSubText = styled(BaseText)` @@ -202,3 +200,15 @@ ${FONT_WEIGHTS.REGULAR}; export const DetailsContainer = styled.View` padding: 20px; `; + +export const RetryPaymentButtonContainer = styled.View` +padding-top: 20px; +`; + +export const OutstandBalanceText = styled.Text` + color: ${ERROR_COLOR}; + ${FONT_SIZES.LARGE}; + ${FONT_WEIGHTS.LIGHT}; + text-align: center; + margin-bottom: 10px; +`; diff --git a/examples/client/Locomotion/src/pages/RideHistory/RidesList/index.js b/examples/client/Locomotion/src/pages/RideHistory/RidesList/index.js index b737d3ebe..74b2f81f9 100644 --- a/examples/client/Locomotion/src/pages/RideHistory/RidesList/index.js +++ b/examples/client/Locomotion/src/pages/RideHistory/RidesList/index.js @@ -26,6 +26,7 @@ const RideCardInList = ({ navigationService.navigate(MAIN_ROUTES.COMPLETED_RIDE_OVERVIEW_PAGE, { rideId: ride.id, })} diff --git a/examples/client/Locomotion/src/pages/RideHistory/filters.js b/examples/client/Locomotion/src/pages/RideHistory/filters.js index 1a7ec7924..4ebfc634e 100644 --- a/examples/client/Locomotion/src/pages/RideHistory/filters.js +++ b/examples/client/Locomotion/src/pages/RideHistory/filters.js @@ -4,7 +4,7 @@ import { startOfDayTime, YYYY_MM_DD, toDate } from './consts'; export const formatDateBeforeSend = date => moment(date).toDate(); -export const FILTERS = { +export const FILTERS = () => ({ // quarter: { // id: 'quarter', // title: i18n.t('activityPage.filters.titles.quarter', 'Quarter'), @@ -23,7 +23,7 @@ export const FILTERS = { // }, today: { id: 'today', - title: i18n.t('rideHistory.filters.titles.today', 'Today'), + title: i18n.t('rideHistory.filters.titles.today'), getParams: () => ({ fromDate: formatDateBeforeSend(`${moment().format(YYYY_MM_DD)} ${startOfDayTime}`), toDate: formatDateBeforeSend(toDate), @@ -31,7 +31,7 @@ export const FILTERS = { }, yesterday: { id: 'yesterday', - title: i18n.t('rideHistory.filters.titles.yesterday', 'Yesterday'), + title: i18n.t('rideHistory.filters.titles.yesterday'), getParams: () => ({ fromDate: formatDateBeforeSend(`${moment().subtract(1, 'day').format(YYYY_MM_DD)} ${startOfDayTime}`), toDate: formatDateBeforeSend(`${moment().format(YYYY_MM_DD)} ${startOfDayTime}`), @@ -39,7 +39,7 @@ export const FILTERS = { }, thisWeek: { id: 'thisWeek', - title: i18n.t('rideHistory.filters.titles.thisWeek', 'This week'), + title: i18n.t('rideHistory.filters.titles.thisWeek'), getParams: () => ({ fromDate: formatDateBeforeSend(`${moment().subtract(1, 'week').format(YYYY_MM_DD)} ${startOfDayTime}`), toDate: formatDateBeforeSend(toDate), @@ -47,10 +47,10 @@ export const FILTERS = { }, lastWeek: { id: 'lastWeek', - title: i18n.t('rideHistory.filters.titles.lastWeek', 'Last week'), + title: i18n.t('rideHistory.filters.titles.lastWeek'), getParams: () => ({ fromDate: formatDateBeforeSend(`${moment().subtract(2, 'week').format(YYYY_MM_DD)} ${startOfDayTime}`), toDate: formatDateBeforeSend(`${moment().subtract(1, 'week').format(YYYY_MM_DD)} ${startOfDayTime}`), }), }, -}; +}); diff --git a/examples/client/Locomotion/src/pages/RideHistory/index.js b/examples/client/Locomotion/src/pages/RideHistory/index.js index 1e07555f8..43d844349 100644 --- a/examples/client/Locomotion/src/pages/RideHistory/index.js +++ b/examples/client/Locomotion/src/pages/RideHistory/index.js @@ -2,7 +2,6 @@ import moment from 'moment'; import React, { useContext, useEffect, useState } from 'react'; import { View } from 'react-native'; import GenericErrorPopup from '../../popups/GenericError'; -import { FILTERS, formatDateBeforeSend } from './filters'; import { HeaderIconContainer } from '../../Components/PageHeader/styled'; import { CenterContainer } from './RideCard/styled'; import RidesList from './RidesList'; @@ -10,6 +9,7 @@ import Loader from '../../Components/Loader'; import FilterBar from './FilterBar'; import { MAIN_ROUTES } from '../routes'; import i18n from '../../I18n'; +import { FILTERS, formatDateBeforeSend } from './filters'; import PageHeader from '../../Components/PageHeader'; import { CalendarSvgIcon, @@ -35,8 +35,8 @@ const Page = ({ menuSide }) => { const { rides, loadRides, initRides, savedParams, } = useContext(rideHistoryContext); - const [filter, setFilter] = useState(savedParams ? savedParams.filterId : FILTERS.today.id); - const [customFilter, setCustomFilter] = useState(savedParams && !FILTERS[savedParams.filterId] + const [filter, setFilter] = useState(savedParams ? savedParams.filterId : FILTERS().today.id); + const [customFilter, setCustomFilter] = useState(savedParams && !FILTERS()[savedParams.filterId] ? getCustomFilter(savedParams.filterId) : {}); const [showLoader, setLoader] = useState(!rides); const [showRangeDateTimePicker, setShowRangeDateTimePicker] = useState(false); @@ -50,7 +50,7 @@ const Page = ({ menuSide }) => { }; const onPageLoaded = async () => { - const { today } = FILTERS; + const { today } = FILTERS(); await getRidesWithErrorHandler(async () => initRides({ initFilterId: today.id, ...(today.getParams()), @@ -65,7 +65,7 @@ const Page = ({ menuSide }) => { const onFilterClicked = async (filterId) => { setCustomFilter({}); setLoader(true); - const filterClicked = FILTERS[filterId]; + const filterClicked = FILTERS()[filterId]; setFilter(filterId); await getRidesWithErrorHandler(async () => loadRides({ filterId: filterClicked.id, @@ -120,7 +120,7 @@ const Page = ({ menuSide }) => { activeFilter={filter} filters={{ ...customFilter, - ...FILTERS, + ...FILTERS(), }} /> diff --git a/examples/client/Locomotion/src/pages/RidePriceBreakdown/index.tsx b/examples/client/Locomotion/src/pages/RidePriceBreakdown/index.tsx index ba4db2bd2..a1393ec33 100644 --- a/examples/client/Locomotion/src/pages/RidePriceBreakdown/index.tsx +++ b/examples/client/Locomotion/src/pages/RidePriceBreakdown/index.tsx @@ -19,6 +19,7 @@ import { import { PaymentMethodInterface } from '../../context/payments/interface'; import * as navigationService from '../../services/navigation'; import PriceBreakdown from '../../Components/PriceBreakdown'; +import SettingsContext from '../../context/settings'; type RidePriceBreakdownParams = { rideId: string, @@ -38,6 +39,8 @@ const RidePriceBreakDown = () => { getRidePriceCalculation, getRideFromApi, } = useContext(RidePageContext); + const { showPrice, loadShowPrice } = SettingsContext.useContainer(); + const updatePriceCalculation = async () => { try { @@ -75,6 +78,9 @@ const RidePriceBreakDown = () => { useEffect(() => { updateRideFromApi(); }, []); + useEffect(() => { + loadShowPrice(); + }, []); return ( @@ -97,7 +103,8 @@ const RidePriceBreakDown = () => { { (priceCalculation && isPriceEstimated(priceCalculation.calculationBasis) - && !RIDE_FINAL_STATES.includes(localRide?.state || '')) + && !RIDE_FINAL_STATES.includes(localRide?.state || '') + && showPrice) ? ( {i18n.t('ridePriceBreakdown.estimatedText')} diff --git a/examples/client/Locomotion/src/pages/index.tsx b/examples/client/Locomotion/src/pages/index.tsx index bf80524c4..c1d64b964 100644 --- a/examples/client/Locomotion/src/pages/index.tsx +++ b/examples/client/Locomotion/src/pages/index.tsx @@ -32,9 +32,11 @@ const MainRouter = () => ( + + diff --git a/examples/client/Locomotion/src/pages/routeConsts.js b/examples/client/Locomotion/src/pages/routeConsts.js index 75576dd89..ce12d7499 100644 --- a/examples/client/Locomotion/src/pages/routeConsts.js +++ b/examples/client/Locomotion/src/pages/routeConsts.js @@ -24,6 +24,9 @@ import EditCardName from './Payments/editNickename'; import FutureRidesView from './FutureRidesView'; import RidePriceBreakDown from './RidePriceBreakdown'; import PromoCode from './PromoCode'; +import Messages from './MessagesList'; +import MessageView from './MessageView'; +import DevSettingPage from './DevPage'; export const ROUTES_COMPS = { [MAIN_ROUTES.HOME]: ActiveRide, @@ -50,6 +53,9 @@ export const ROUTES_COMPS = { [MAIN_ROUTES.FUTURE_RIDES]: FutureRidesView, [MAIN_ROUTES.RIDE_PRICE_BREAKDOWN]: RidePriceBreakDown, [MAIN_ROUTES.PROMO_CODE]: PromoCode, + [MAIN_ROUTES.MESSAGES]: Messages, + [MAIN_ROUTES.MESSAGE_VIEW]: MessageView, + [MAIN_ROUTES.DEV_SETTINGS_PAGE]: DevSettingPage, }; export const profileStack = ({ stack: Stack }) => ( diff --git a/examples/client/Locomotion/src/pages/routes.js b/examples/client/Locomotion/src/pages/routes.js index d5b4c090f..bc89cb1d3 100644 --- a/examples/client/Locomotion/src/pages/routes.js +++ b/examples/client/Locomotion/src/pages/routes.js @@ -30,4 +30,7 @@ export const MAIN_ROUTES = { FUTURE_RIDES: 'FutureRides', RIDE_PRICE_BREAKDOWN: 'RidePriceBreakdown', PROMO_CODE: 'PromoCode', + MESSAGES: 'messages', + MESSAGE_VIEW: 'messageView', + DEV_SETTINGS_PAGE: 'DevSettingPage', }; diff --git a/examples/client/Locomotion/src/popups/CancellationReasonsPopup/index.tsx b/examples/client/Locomotion/src/popups/CancellationReasonsPopup/index.tsx new file mode 100644 index 000000000..36af2b361 --- /dev/null +++ b/examples/client/Locomotion/src/popups/CancellationReasonsPopup/index.tsx @@ -0,0 +1,118 @@ +import React, { useContext, useEffect, useState } from 'react'; +import Modal from 'react-native-modal'; +import CloseButton from '../../Components/CloseButton'; +import CancellationReasonsProvider, { CancellationReasonsContext } from '../../context/cancellation-reasons'; +import RoundedButton from '../../Components/RoundedButton'; +import { SubTitle, Title } from '../styled'; +import i18n from '../../I18n'; +import { + Container, + LoaderContainer, + BodyContainer, + CancellationReasonCard, + CancellationReasonText, + CloseButtonContainer, + ClickableContainer, + SubTitleContainer, +} from './styled'; +import { RidePageContext } from '../../context/newRideContext'; +import Loader from '../../Components/Loader'; +import Mixpanel from '../../services/Mixpanel'; + +interface CancellationReasonsProps { + isVisible: boolean; + onCancel: any; + onSubmit: any; + rideId: string; +} + +const CancellationReasonsPopup = ({ + isVisible, + onCancel, + onSubmit, + rideId, +}: CancellationReasonsProps) => { + const { cancellationReasons, clearCancellationReasons } = useContext(CancellationReasonsContext); + const { updateRide, ride } = useContext(RidePageContext); + const [isLoading, setIsLoading] = useState(false); + + const rideIdToUse = rideId || ride?.id; + useEffect(() => { + if (isVisible) { + if (!cancellationReasons + || cancellationReasons.length === 0) { + onCancel(); + Mixpanel.setEvent('No cancellation reasons in the popup', { + state: ride?.state, + rideId: rideIdToUse, + }); + } else { + Mixpanel.setEvent('Cancellation reasons popup showed', { + state: ride?.state, + rideId: rideIdToUse, + cancellationReasonIds: cancellationReasons.map(cr => cr.id), + }); + } + } else { + setIsLoading(false); + clearCancellationReasons(); + } + }, [isVisible]); + + const onCancellationReasonClick = async (id: string) => { + setIsLoading(true); + Mixpanel.clickEvent('Cancellation reasons clicked', { + cancellationReasonId: id, + state: ride?.state, + rideId: rideIdToUse, + }); + await updateRide(rideIdToUse, { + cancellationReasonId: id, + }); + onSubmit(); + }; + + return ( + cancellationReasons?.length > 0 ? ( + + + + + + {i18n.t('popups.cancellationReasons.title')} + + {i18n.t('popups.cancellationReasons.subTitle')} + + + {isLoading + ? ( + + + + ) + : cancellationReasons.map(cr => ( + onCancellationReasonClick(cr.id)} + testID={`cancellationReason-${cr.category}`} + > + + + {i18n.t(`cancellationReasons.${cr.value}`, cr.value)} + + + + ))} + + + + ) : null + ); +}; + +export default CancellationReasonsPopup; diff --git a/examples/client/Locomotion/src/popups/CancellationReasonsPopup/styled.ts b/examples/client/Locomotion/src/popups/CancellationReasonsPopup/styled.ts new file mode 100644 index 000000000..2f383335b --- /dev/null +++ b/examples/client/Locomotion/src/popups/CancellationReasonsPopup/styled.ts @@ -0,0 +1,53 @@ +import { Text, View, TouchableOpacity } from 'react-native'; +import styled from 'styled-components'; +import { FONT_SIZES, FONT_WEIGHTS } from '../../context/theme'; + +export const Container = styled(View)` +background-color: #ffffff; +border-radius: 8px; +padding: 25px; +align-items: center; +`; + +export const BodyContainer = styled(View)` +display: flex; +flex-direction: column; +width: 100%; +margin-top: 15px; +`; + +export const CancellationReasonCard = styled(View)` +border-bottom-width: 1px; +border-color: #f1f2f6; +padding: 16px 3px; + +&:last-child { + border-bottom-width: 0px; +} +`; + +export const CancellationReasonText = styled(Text)` + color: #333333; + ${FONT_SIZES.H3}; + ${FONT_WEIGHTS.REGULAR}; +`; + +export const LoaderContainer = styled(View)` + height: 20px; + width: 100%; + margin: auto 0; + margin-top: 25px; +`; + +export const CloseButtonContainer = styled(View)` + flex-direction: row; + position: absolute; + right: 10; + top: 10; +`; + +export const ClickableContainer = styled(TouchableOpacity)``; + +export const SubTitleContainer = styled(View)` +margin-top: 15px; +`; diff --git a/examples/client/Locomotion/src/popups/ChoosePaymentMethod/index.tsx b/examples/client/Locomotion/src/popups/ChoosePaymentMethod/index.tsx index 715440786..9575622a3 100644 --- a/examples/client/Locomotion/src/popups/ChoosePaymentMethod/index.tsx +++ b/examples/client/Locomotion/src/popups/ChoosePaymentMethod/index.tsx @@ -1,9 +1,10 @@ /* eslint-disable no-unused-expressions */ -import React, { useEffect, useState } from 'react'; +import React, { useContext, useEffect, useState } from 'react'; import { View } from 'react-native'; import PropTypes from 'prop-types'; import Modal from 'react-native-modal'; import { useNavigation } from '@react-navigation/native'; +import { getPaymentMethod } from '../../pages/Payments/cardDetailUtils'; import CloseButton from '../../Components/CloseButton'; import i18n from '../../I18n'; import { MAIN_ROUTES } from '../../pages/routes'; @@ -20,7 +21,9 @@ import { FlexCont } from '../../Components/Flex'; import PaymentMethod from '../../Components/CardRow'; import PaymentsContext from '../../context/payments'; import cashPaymentMethod from '../../pages/Payments/cashPaymentMethod'; +import offlinePaymentMethod from '../../pages/Payments/offlinePaymentMethod'; import * as navigationService from '../../services/navigation'; +import { MewRidePageContext } from '../../context'; interface PaymentMethodPopupProps { isVisible: boolean; @@ -30,19 +33,37 @@ interface PaymentMethodPopupProps { rideFlow: boolean; selected: any; onAddNewMethod: () => void; + showOffline: boolean; } const PaymentMethodPopup = ({ - isVisible, onCancel, onSubmit, showCash, rideFlow, selected, onAddNewMethod, + isVisible, + onCancel, + onSubmit, + showCash, + rideFlow, + selected, + onAddNewMethod, + showOffline, }: PaymentMethodPopupProps) => { - const usePayments = PaymentsContext.useContainer(); + const usePayments: any = PaymentsContext.useContainer(); + const { chosenService } = useContext(MewRidePageContext); const [selectedPaymentId, setSelectedPaymentId] = useState(selected); + const getDisabledReason = (paymentMethod: any) => { + if ( + chosenService + && !chosenService.allowedPaymentMethods.includes(getPaymentMethod(paymentMethod.id)) + ) { + return i18n.t('popups.choosePaymentMethod.unavailable'); + } + return null; + }; + useEffect(() => { usePayments.getOrFetchCustomer(); }, []); - useEffect(() => { const updateDefaultPaymentMethod = async () => { if (selected) { @@ -55,25 +76,13 @@ const PaymentMethodPopup = ({ updateDefaultPaymentMethod(); - }, [usePayments.paymentMethods, selected]); + }, [usePayments.paymentMethods, selected, chosenService]); - const onSave = () => { - onSubmit(selectedPaymentId); + const onSave = (id?: string) => { + onSubmit(id || selectedPaymentId); onCancel(); }; - const [isCashEnabled, setIsCashEnabled] = useState(false); - - useEffect(() => { - const getIsCashEnabled = async () => { - const result = await usePayments.isCashPaymentEnabled(); - - setIsCashEnabled(result); - }; - - getIsCashEnabled(); - }, [usePayments.paymentMethods]); - return ( - {(isCashEnabled && showCash - ? [...usePayments.paymentMethods, cashPaymentMethod] - : usePayments.paymentMethods).map((paymentMethod: any, i) => ( - { - setSelectedPaymentId(paymentMethod.id); - }} - /> - ))} + { + [ + ...usePayments.paymentMethods, + ...(showCash ? [cashPaymentMethod] : []), + ...(showOffline ? [offlinePaymentMethod] : []), + ].map((paymentMethod: any) => { + const reason = getDisabledReason(paymentMethod); + return ( + { + setSelectedPaymentId(paymentMethod.id); + }} + /> + ); + })} { @@ -120,6 +138,7 @@ const PaymentMethodPopup = ({