0) {
- println "android.packagingOptions.$prop += $options ($options.length)"
- // Ex: android.packagingOptions.pickFirsts += '**/SCCS/**'
- options.each {
- android.packagingOptions[prop] += it
- }
- }
-}
-
-dependencies {
- // The version of react-native is set by the React Native Gradle Plugin
- implementation("com.facebook.react:react-android")
-
- def isGifEnabled = (findProperty('expo.gif.enabled') ?: "") == "true";
- def isWebpEnabled = (findProperty('expo.webp.enabled') ?: "") == "true";
- def isWebpAnimatedEnabled = (findProperty('expo.webp.animated') ?: "") == "true";
- def frescoVersion = rootProject.ext.frescoVersion
-
- // If your app supports Android versions before Ice Cream Sandwich (API level 14)
- if (isGifEnabled || isWebpEnabled) {
- implementation("com.facebook.fresco:fresco:${frescoVersion}")
- implementation("com.facebook.fresco:imagepipeline-okhttp3:${frescoVersion}")
- }
-
- if (isGifEnabled) {
- // For animated gif support
- implementation("com.facebook.fresco:animated-gif:${frescoVersion}")
- }
-
- if (isWebpEnabled) {
- // For webp support
- implementation("com.facebook.fresco:webpsupport:${frescoVersion}")
- if (isWebpAnimatedEnabled) {
- // Animated webp support
- implementation("com.facebook.fresco:animated-webp:${frescoVersion}")
- }
- }
-
- debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}")
- debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
- exclude group:'com.squareup.okhttp3', module:'okhttp'
- }
- debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}")
-
- if (hermesEnabled.toBoolean()) {
- implementation("com.facebook.react:hermes-android")
- } else {
- implementation jscFlavor
- }
-
- implementation project(':react-native-vision-camera')
-}
-
-apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json')"].execute(null, rootDir).text.trim(), "../native_modules.gradle");
-applyNativeModulesAppBuildGradle(project)
-
-apply plugin: 'com.google.gms.google-services'
diff --git a/android/app/debug.keystore b/android/app/debug.keystore
deleted file mode 100644
index 364e105..0000000
Binary files a/android/app/debug.keystore and /dev/null differ
diff --git a/android/app/google-services.json b/android/app/google-services.json
deleted file mode 100644
index d12e130..0000000
--- a/android/app/google-services.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "project_info": {
- "project_number": "735905563616",
- "project_id": "railbird-infra",
- "storage_bucket": "railbird-infra.appspot.com"
- },
- "client": [
- {
- "client_info": {
- "mobilesdk_app_id": "1:735905563616:android:7eefd99f68d2f7db702185",
- "android_client_info": {
- "package_name": "android.railbird.app"
- }
- },
- "oauth_client": [
- {
- "client_id": "735905563616-v12rcdm7pkm1r2t5v09th5bs9j3ah1e4.apps.googleusercontent.com",
- "client_type": 3
- }
- ],
- "api_key": [
- {
- "current_key": "AIzaSyA5o4LpiDFl8Q8AaA2eGjbgdS7tMfupCWg"
- }
- ],
- "services": {
- "appinvite_service": {
- "other_platform_oauth_client": [
- {
- "client_id": "735905563616-v12rcdm7pkm1r2t5v09th5bs9j3ah1e4.apps.googleusercontent.com",
- "client_type": 3
- },
- {
- "client_id": "735905563616-ncd8794ocn2f25qmnaascn88upfgokp0.apps.googleusercontent.com",
- "client_type": 2,
- "ios_info": {
- "bundle_id": "ai.railbird.railbird",
- "app_store_id": "6469274937"
- }
- }
- ]
- }
- }
- }
- ],
- "configuration_version": "1"
-}
\ No newline at end of file
diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro
deleted file mode 100644
index 551eb41..0000000
--- a/android/app/proguard-rules.pro
+++ /dev/null
@@ -1,14 +0,0 @@
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the proguardFiles
-# directive in build.gradle.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# react-native-reanimated
--keep class com.swmansion.reanimated.** { *; }
--keep class com.facebook.react.turbomodule.** { *; }
-
-# Add any project specific keep options here:
diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml
deleted file mode 100644
index 3ec2507..0000000
--- a/android/app/src/debug/AndroidManifest.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
diff --git a/android/app/src/debug/java/android/railbird/app/ReactNativeFlipper.java b/android/app/src/debug/java/android/railbird/app/ReactNativeFlipper.java
deleted file mode 100644
index 2e952df..0000000
--- a/android/app/src/debug/java/android/railbird/app/ReactNativeFlipper.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the LICENSE file in the root
- * directory of this source tree.
- */
-package android.railbird.app;
-
-import android.content.Context;
-import com.facebook.flipper.android.AndroidFlipperClient;
-import com.facebook.flipper.android.utils.FlipperUtils;
-import com.facebook.flipper.core.FlipperClient;
-import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin;
-import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin;
-import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin;
-import com.facebook.flipper.plugins.inspector.DescriptorMapping;
-import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;
-import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;
-import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
-import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
-import com.facebook.react.ReactInstanceEventListener;
-import com.facebook.react.ReactInstanceManager;
-import com.facebook.react.bridge.ReactContext;
-import com.facebook.react.modules.network.NetworkingModule;
-import okhttp3.OkHttpClient;
-
-/**
- * Class responsible of loading Flipper inside your React Native application. This is the debug
- * flavor of it. Here you can add your own plugins and customize the Flipper setup.
- */
-public class ReactNativeFlipper {
- public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
- if (FlipperUtils.shouldEnableFlipper(context)) {
- final FlipperClient client = AndroidFlipperClient.getInstance(context);
-
- client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
- client.addPlugin(new DatabasesFlipperPlugin(context));
- client.addPlugin(new SharedPreferencesFlipperPlugin(context));
- client.addPlugin(CrashReporterPlugin.getInstance());
-
- NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
- NetworkingModule.setCustomClientBuilder(
- new NetworkingModule.CustomClientBuilder() {
- @Override
- public void apply(OkHttpClient.Builder builder) {
- builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
- }
- });
- client.addPlugin(networkFlipperPlugin);
- client.start();
-
- // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
- // Hence we run if after all native modules have been initialized
- ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
- if (reactContext == null) {
- reactInstanceManager.addReactInstanceEventListener(
- new ReactInstanceEventListener() {
- @Override
- public void onReactContextInitialized(ReactContext reactContext) {
- reactInstanceManager.removeReactInstanceEventListener(this);
- reactContext.runOnNativeModulesQueueThread(
- new Runnable() {
- @Override
- public void run() {
- client.addPlugin(new FrescoFlipperPlugin());
- }
- });
- }
- });
- } else {
- client.addPlugin(new FrescoFlipperPlugin());
- }
- }
- }
-}
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
deleted file mode 100644
index 2a7abf2..0000000
--- a/android/app/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/android/app/src/main/java/android/railbird/app/MainActivity.java b/android/app/src/main/java/android/railbird/app/MainActivity.java
deleted file mode 100644
index 082ee15..0000000
--- a/android/app/src/main/java/android/railbird/app/MainActivity.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package android.railbird.app;
-
-import android.os.Build;
-import android.os.Bundle;
-
-import com.facebook.react.ReactActivity;
-import com.facebook.react.ReactActivityDelegate;
-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
-import com.facebook.react.defaults.DefaultReactActivityDelegate;
-
-import expo.modules.ReactActivityDelegateWrapper;
-
-public class MainActivity extends ReactActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // Set the theme to AppTheme BEFORE onCreate to support
- // coloring the background, status bar, and navigation bar.
- // This is required for expo-splash-screen.
- setTheme(R.style.AppTheme);
- super.onCreate(null);
- }
-
- /**
- * Returns the name of the main component registered from JavaScript.
- * This is used to schedule rendering of the component.
- */
- @Override
- protected String getMainComponentName() {
- return "main";
- }
-
- /**
- * Returns the instance of the {@link ReactActivityDelegate}. Here we use a util class {@link
- * DefaultReactActivityDelegate} which allows you to easily enable Fabric and Concurrent React
- * (aka React 18) with two boolean flags.
- */
- @Override
- protected ReactActivityDelegate createReactActivityDelegate() {
- return new ReactActivityDelegateWrapper(this, BuildConfig.IS_NEW_ARCHITECTURE_ENABLED, new DefaultReactActivityDelegate(
- this,
- getMainComponentName(),
- // If you opted-in for the New Architecture, we enable the Fabric Renderer.
- DefaultNewArchitectureEntryPoint.getFabricEnabled()));
- }
-
- /**
- * Align the back button behavior with Android S
- * where moving root activities to background instead of finishing activities.
- * @see onBackPressed
- */
- @Override
- public void invokeDefaultOnBackPressed() {
- if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) {
- if (!moveTaskToBack(false)) {
- // For non-root activities, use the default implementation to finish them.
- super.invokeDefaultOnBackPressed();
- }
- return;
- }
-
- // Use the default back button implementation on Android S
- // because it's doing more than {@link Activity#moveTaskToBack} in fact.
- super.invokeDefaultOnBackPressed();
- }
-}
diff --git a/android/app/src/main/java/android/railbird/app/MainApplication.java b/android/app/src/main/java/android/railbird/app/MainApplication.java
deleted file mode 100644
index 7388170..0000000
--- a/android/app/src/main/java/android/railbird/app/MainApplication.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package android.railbird.app;
-
-import android.app.Application;
-import android.content.res.Configuration;
-import androidx.annotation.NonNull;
-
-import com.facebook.react.PackageList;
-import com.facebook.react.ReactApplication;
-import com.facebook.react.ReactNativeHost;
-import com.facebook.react.ReactPackage;
-import com.facebook.react.config.ReactFeatureFlags;
-import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
-import com.facebook.react.defaults.DefaultReactNativeHost;
-import com.facebook.soloader.SoLoader;
-
-import expo.modules.ApplicationLifecycleDispatcher;
-import expo.modules.ReactNativeHostWrapper;
-import com.mrousavy.camera.CameraPackage;
-
-import java.util.List;
-
-public class MainApplication extends Application implements ReactApplication {
-
- private final ReactNativeHost mReactNativeHost =
- new ReactNativeHostWrapper(this, new DefaultReactNativeHost(this) {
- @Override
- public boolean getUseDeveloperSupport() {
- return BuildConfig.DEBUG;
- }
-
- @Override
- protected List getPackages() {
- @SuppressWarnings("UnnecessaryLocalVariable")
- List packages = new PackageList(this).getPackages();
- // Packages that cannot be autolinked yet can be added manually here, for example:
- // packages.add(new MyReactNativePackage());
- packages.add(new CameraPackage());
- return packages;
- }
-
- @Override
- protected String getJSMainModuleName() {
- return ".expo/.virtual-metro-entry";
- }
-
- @Override
- protected boolean isNewArchEnabled() {
- return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
- }
-
- @Override
- protected Boolean isHermesEnabled() {
- return BuildConfig.IS_HERMES_ENABLED;
- }
- });
-
- @Override
- public ReactNativeHost getReactNativeHost() {
- return mReactNativeHost;
- }
-
- @Override
- public void onCreate() {
- super.onCreate();
- SoLoader.init(this, /* native exopackage */ false);
- if (!BuildConfig.REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS) {
- ReactFeatureFlags.unstable_useRuntimeSchedulerAlways = false;
- }
- if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
- // If you opted-in for the New Architecture, we load the native entry point for this app.
- DefaultNewArchitectureEntryPoint.load();
- }
- ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
- ApplicationLifecycleDispatcher.onApplicationCreate(this);
- }
-
- @Override
- public void onConfigurationChanged(@NonNull Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig);
- }
-}
diff --git a/android/app/src/main/res/drawable-hdpi/splashscreen_image.png b/android/app/src/main/res/drawable-hdpi/splashscreen_image.png
deleted file mode 100644
index c52c2c6..0000000
Binary files a/android/app/src/main/res/drawable-hdpi/splashscreen_image.png and /dev/null differ
diff --git a/android/app/src/main/res/drawable-mdpi/splashscreen_image.png b/android/app/src/main/res/drawable-mdpi/splashscreen_image.png
deleted file mode 100644
index c52c2c6..0000000
Binary files a/android/app/src/main/res/drawable-mdpi/splashscreen_image.png and /dev/null differ
diff --git a/android/app/src/main/res/drawable-xhdpi/splashscreen_image.png b/android/app/src/main/res/drawable-xhdpi/splashscreen_image.png
deleted file mode 100644
index c52c2c6..0000000
Binary files a/android/app/src/main/res/drawable-xhdpi/splashscreen_image.png and /dev/null differ
diff --git a/android/app/src/main/res/drawable-xxhdpi/splashscreen_image.png b/android/app/src/main/res/drawable-xxhdpi/splashscreen_image.png
deleted file mode 100644
index c52c2c6..0000000
Binary files a/android/app/src/main/res/drawable-xxhdpi/splashscreen_image.png and /dev/null differ
diff --git a/android/app/src/main/res/drawable-xxxhdpi/splashscreen_image.png b/android/app/src/main/res/drawable-xxxhdpi/splashscreen_image.png
deleted file mode 100644
index c52c2c6..0000000
Binary files a/android/app/src/main/res/drawable-xxxhdpi/splashscreen_image.png and /dev/null differ
diff --git a/android/app/src/main/res/drawable/rn_edit_text_material.xml b/android/app/src/main/res/drawable/rn_edit_text_material.xml
deleted file mode 100644
index 73b37e4..0000000
--- a/android/app/src/main/res/drawable/rn_edit_text_material.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/android/app/src/main/res/drawable/splashscreen.xml b/android/app/src/main/res/drawable/splashscreen.xml
deleted file mode 100644
index c8568e1..0000000
--- a/android/app/src/main/res/drawable/splashscreen.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
deleted file mode 100644
index 3941bea..0000000
--- a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
deleted file mode 100644
index 3941bea..0000000
--- a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index 0a61c1b..0000000
Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
deleted file mode 100644
index ac03dbf..0000000
Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
deleted file mode 100644
index 26deb97..0000000
Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ
diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index fd1a2c7..0000000
Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
deleted file mode 100644
index e1173a9..0000000
Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
deleted file mode 100644
index 4d3ac7a..0000000
Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ
diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index d57caa3..0000000
Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
deleted file mode 100644
index ff086fd..0000000
Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
deleted file mode 100644
index 95ac582..0000000
Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 0a07e73..0000000
Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
deleted file mode 100644
index f7f1d06..0000000
Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
deleted file mode 100644
index 6508f74..0000000
Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 499e372..0000000
Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
deleted file mode 100644
index 49a464e..0000000
Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
deleted file mode 100644
index d54716b..0000000
Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/android/app/src/main/res/values-night/colors.xml b/android/app/src/main/res/values-night/colors.xml
deleted file mode 100644
index 3c05de5..0000000
--- a/android/app/src/main/res/values-night/colors.xml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/main/res/values/colors.xml
deleted file mode 100644
index f387b90..0000000
--- a/android/app/src/main/res/values/colors.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
- #ffffff
- #ffffff
- #023c69
- #ffffff
-
\ No newline at end of file
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
deleted file mode 100644
index 9b4c8b3..0000000
--- a/android/app/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
- Railbird
- contain
- false
-
\ No newline at end of file
diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml
deleted file mode 100644
index f03e23f..0000000
--- a/android/app/src/main/res/values/styles.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/android/app/src/release/java/android/railbird/app/ReactNativeFlipper.java b/android/app/src/release/java/android/railbird/app/ReactNativeFlipper.java
deleted file mode 100644
index bdb758c..0000000
--- a/android/app/src/release/java/android/railbird/app/ReactNativeFlipper.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the LICENSE file in the root
- * directory of this source tree.
- */
-package android.railbird.app;
-
-import android.content.Context;
-import com.facebook.react.ReactInstanceManager;
-
-/**
- * Class responsible of loading Flipper inside your React Native application. This is the release
- * flavor of it so it's empty as we don't want to load Flipper.
- */
-public class ReactNativeFlipper {
- public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
- // Do nothing as we don't want to initialize Flipper on Release.
- }
-}
diff --git a/android/build.gradle b/android/build.gradle
deleted file mode 100644
index b6f57d7..0000000
--- a/android/build.gradle
+++ /dev/null
@@ -1,42 +0,0 @@
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
-
-buildscript {
- ext {
- buildToolsVersion = findProperty('android.buildToolsVersion') ?: '33.0.0'
- minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '21')
- compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '33')
- targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '33')
- kotlinVersion = findProperty('android.kotlinVersion') ?: '1.8.10'
- frescoVersion = findProperty('expo.frescoVersion') ?: '2.5.0'
-
- // We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP.
- ndkVersion = "23.1.7779620"
- }
- repositories {
- google()
- mavenCentral()
- }
- dependencies {
- classpath 'com.google.gms:google-services:4.3.3'
- classpath('com.android.tools.build:gradle:7.4.2')
- classpath('com.facebook.react:react-native-gradle-plugin')
- classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.22")
- }
-}
-
-allprojects {
- repositories {
- maven {
- // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
- url(new File(['node', '--print', "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), '../android'))
- }
- maven {
- // Android JSC is installed from npm
- url(new File(['node', '--print', "require.resolve('jsc-android/package.json')"].execute(null, rootDir).text.trim(), '../dist'))
- }
-
- google()
- mavenCentral()
- maven { url 'https://www.jitpack.io' }
- }
-}
diff --git a/android/gradle.properties b/android/gradle.properties
deleted file mode 100644
index 987607f..0000000
--- a/android/gradle.properties
+++ /dev/null
@@ -1,57 +0,0 @@
-# Project-wide Gradle settings.
-
-# IDE (e.g. Android Studio) users:
-# Gradle settings configured through the IDE *will override*
-# any settings specified in this file.
-
-# For more details on how to configure your build environment visit
-# http://www.gradle.org/docs/current/userguide/build_environment.html
-
-# Specifies the JVM arguments used for the daemon process.
-# The setting is particularly useful for tweaking memory settings.
-# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
-org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
-
-# When configured, Gradle will run in incubating parallel mode.
-# This option should only be used with decoupled projects. More details, visit
-# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
-# org.gradle.parallel=true
-
-# AndroidX package structure to make it clearer which packages are bundled with the
-# Android operating system, and which are packaged with your app's APK
-# https://developer.android.com/topic/libraries/support-library/androidx-rn
-android.useAndroidX=true
-
-# Automatically convert third-party libraries to use AndroidX
-android.enableJetifier=true
-
-# Version of flipper SDK to use with React Native
-FLIPPER_VERSION=0.182.0
-
-# Use this property to specify which architecture you want to build.
-# You can also override it from the CLI using
-# ./gradlew -PreactNativeArchitectures=x86_64
-reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
-
-# Use this property to enable support to the new architecture.
-# This will allow you to use TurboModules and the Fabric render in
-# your application. You should enable this flag either if you want
-# to write custom TurboModules/Fabric components OR use libraries that
-# are providing them.
-newArchEnabled=false
-
-# Use this property to enable or disable the Hermes JS engine.
-# If set to false, you will be using JSC instead.
-hermesEnabled=true
-
-# Enable GIF support in React Native images (~200 B increase)
-expo.gif.enabled=true
-# Enable webp support in React Native images (~85 KB increase)
-expo.webp.enabled=true
-# Enable animated webp support (~3.4 MB increase)
-# Disabled by default because iOS doesn't support animated webp
-expo.webp.animated=false
-
-# Enable network inspector
-EX_DEV_CLIENT_NETWORK_INSPECTOR=true
-android.aapt2FromMavenOverride=/nix/store/6nrdbhdcmrig3vr80sc7qf9lna5cs1gb-android-sdk-env/share/android-sdk/build-tools/33.0.0/aapt2
\ No newline at end of file
diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 249e583..0000000
Binary files a/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 6ec1567..0000000
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.1-all.zip
-networkTimeout=10000
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
diff --git a/android/gradlew b/android/gradlew
deleted file mode 100755
index a69d9cb..0000000
--- a/android/gradlew
+++ /dev/null
@@ -1,240 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright © 2015-2021 the original authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##############################################################################
-#
-# Gradle start up script for POSIX generated by Gradle.
-#
-# Important for running:
-#
-# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
-# noncompliant, but you have some other compliant shell such as ksh or
-# bash, then to run this script, type that shell name before the whole
-# command line, like:
-#
-# ksh Gradle
-#
-# Busybox and similar reduced shells will NOT work, because this script
-# requires all of these POSIX shell features:
-# * functions;
-# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
-# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
-# * compound commands having a testable exit status, especially «case»;
-# * various built-in commands including «command», «set», and «ulimit».
-#
-# Important for patching:
-#
-# (2) This script targets any POSIX shell, so it avoids extensions provided
-# by Bash, Ksh, etc; in particular arrays are avoided.
-#
-# The "traditional" practice of packing multiple parameters into a
-# space-separated string is a well documented source of bugs and security
-# problems, so this is (mostly) avoided, by progressively accumulating
-# options in "$@", and eventually passing that to Java.
-#
-# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
-# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
-# see the in-line comments for details.
-#
-# There are tweaks for specific operating systems such as AIX, CygWin,
-# Darwin, MinGW, and NonStop.
-#
-# (3) This script is generated from the Groovy template
-# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
-# within the Gradle project.
-#
-# You can find Gradle at https://github.com/gradle/gradle/.
-#
-##############################################################################
-
-# Attempt to set APP_HOME
-
-# Resolve links: $0 may be a link
-app_path=$0
-
-# Need this for daisy-chained symlinks.
-while
- APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
- [ -h "$app_path" ]
-do
- ls=$( ls -ld "$app_path" )
- link=${ls#*' -> '}
- case $link in #(
- /*) app_path=$link ;; #(
- *) app_path=$APP_HOME$link ;;
- esac
-done
-
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-APP_NAME="Gradle"
-APP_BASE_NAME=${0##*/}
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD=maximum
-
-warn () {
- echo "$*"
-} >&2
-
-die () {
- echo
- echo "$*"
- echo
- exit 1
-} >&2
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "$( uname )" in #(
- CYGWIN* ) cygwin=true ;; #(
- Darwin* ) darwin=true ;; #(
- MSYS* | MINGW* ) msys=true ;; #(
- NONSTOP* ) nonstop=true ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD=$JAVA_HOME/jre/sh/java
- else
- JAVACMD=$JAVA_HOME/bin/java
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD=java
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
- case $MAX_FD in #(
- max*)
- MAX_FD=$( ulimit -H -n ) ||
- warn "Could not query maximum file descriptor limit"
- esac
- case $MAX_FD in #(
- '' | soft) :;; #(
- *)
- ulimit -n "$MAX_FD" ||
- warn "Could not set maximum file descriptor limit to $MAX_FD"
- esac
-fi
-
-# Collect all arguments for the java command, stacking in reverse order:
-# * args from the command line
-# * the main class name
-# * -classpath
-# * -D...appname settings
-# * --module-path (only if needed)
-# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if "$cygwin" || "$msys" ; then
- APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
- CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
-
- JAVACMD=$( cygpath --unix "$JAVACMD" )
-
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- for arg do
- if
- case $arg in #(
- -*) false ;; # don't mess with options #(
- /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
- [ -e "$t" ] ;; #(
- *) false ;;
- esac
- then
- arg=$( cygpath --path --ignore --mixed "$arg" )
- fi
- # Roll the args list around exactly as many times as the number of
- # args, so each arg winds up back in the position where it started, but
- # possibly modified.
- #
- # NB: a `for` loop captures its iteration list before it begins, so
- # changing the positional parameters here affects neither the number of
- # iterations, nor the values presented in `arg`.
- shift # remove old arg
- set -- "$@" "$arg" # push replacement arg
- done
-fi
-
-# Collect all arguments for the java command;
-# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
-# shell script including quotes and variable substitutions, so put them in
-# double quotes to make sure that they get re-expanded; and
-# * put everything else in single quotes, so that it's not re-expanded.
-
-set -- \
- "-Dorg.gradle.appname=$APP_BASE_NAME" \
- -classpath "$CLASSPATH" \
- org.gradle.wrapper.GradleWrapperMain \
- "$@"
-
-# Stop when "xargs" is not available.
-if ! command -v xargs >/dev/null 2>&1
-then
- die "xargs is not available"
-fi
-
-# Use "xargs" to parse quoted args.
-#
-# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
-#
-# In Bash we could simply go:
-#
-# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
-# set -- "${ARGS[@]}" "$@"
-#
-# but POSIX shell has neither arrays nor command substitution, so instead we
-# post-process each arg (as a line of input to sed) to backslash-escape any
-# character that might be a shell metacharacter, then use eval to reverse
-# that process (while maintaining the separation between arguments), and wrap
-# the whole thing up as a single "set" statement.
-#
-# This will of course break if any of these variables contains a newline or
-# an unmatched quote.
-#
-
-eval "set -- $(
- printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
- xargs -n1 |
- sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
- tr '\n' ' '
- )" '"$@"'
-
-exec "$JAVACMD" "$@"
diff --git a/android/gradlew.bat b/android/gradlew.bat
deleted file mode 100644
index 53a6b23..0000000
--- a/android/gradlew.bat
+++ /dev/null
@@ -1,91 +0,0 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%"=="" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%"=="" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if %ERRORLEVEL% equ 0 goto execute
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto execute
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
-
-:end
-@rem End local scope for the variables with windows NT shell
-if %ERRORLEVEL% equ 0 goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-set EXIT_CODE=%ERRORLEVEL%
-if %EXIT_CODE% equ 0 set EXIT_CODE=1
-if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
-exit /b %EXIT_CODE%
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/android/settings.gradle b/android/settings.gradle
deleted file mode 100644
index eb532f8..0000000
--- a/android/settings.gradle
+++ /dev/null
@@ -1,17 +0,0 @@
-rootProject.name = 'Railbird'
-
-apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle");
-
-apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle");
-
-useExpoModules()
-
-apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json')"].execute(null, rootDir).text.trim(), "../native_modules.gradle");
-
-applyNativeModulesSettingsGradle(settings)
-
-include ':react-native-vision-camera'
-project(':react-native-vision-camera').projectDir = new File(rootProject.projectDir, '../react-native-vision-camera/package/android')
-
-include ':app'
-includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json')"].execute(null, rootDir).text.trim()).getParentFile())
diff --git a/app.json b/app.json
deleted file mode 100644
index e68d44e..0000000
--- a/app.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
- "expo": {
- "name": "Railbird",
- "slug": "railbird-rn",
- "version": "1.0.0",
- "orientation": "portrait",
- "icon": "./src/assets/icon.png",
- "userInterfaceStyle": "light",
- "splash": {
- "image": "./src/assets/splash.png",
- "resizeMode": "contain",
- "backgroundColor": "#ffffff"
- },
- "assetBundlePatterns": ["**/*"],
- "plugins": [
- "@react-native-firebase/app",
- "@react-native-firebase/auth",
- [
- "expo-build-properties",
- {
- "ios": {
- "useFrameworks": "static"
- }
- }
- ]
- ],
- "ios": {
- "supportsTablet": true,
- "bundleIdentifier": "ai.railbird.railbird",
- "googleServicesFile": "./GoogleService-Info.plist"
- },
- "android": {
- "adaptiveIcon": {
- "foregroundImage": "./src/assets/adaptive-icon.png",
- "backgroundColor": "#ffffff"
- },
- "package": "android.railbird.app",
- "googleServicesFile": "./google-services.json"
- },
- "web": {
- "favicon": "./src/assets/icons/favicon.png"
- }
- }
-}
diff --git a/babel.config.js b/babel.config.js
deleted file mode 100644
index 2f02724..0000000
--- a/babel.config.js
+++ /dev/null
@@ -1,34 +0,0 @@
-const path = require("path");
-const pak = require("./react-native-vision-camera/package/package.json");
-
-module.exports = function (api) {
- api.cache(true);
- return {
- presets: ["babel-preset-expo"],
- plugins: [
- [
- "module:react-native-dotenv",
- {
- moduleName: "@env",
- path: ".env",
- safe: false,
- allowUndefined: true,
- verbose: false,
- },
- ],
- "react-native-reanimated/plugin",
- [
- "module-resolver",
- {
- alias: {
- [pak.name]: path.join(
- __dirname,
- "./react-native-vision-camera/package",
- pak.source,
- ),
- },
- },
- ],
- ],
- };
-};
diff --git a/bin/assert-no-changes-wrapper.sh b/bin/assert-no-changes-wrapper.sh
new file mode 100755
index 0000000..a9ee515
--- /dev/null
+++ b/bin/assert-no-changes-wrapper.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+GQL_DIR=$(dirname $(dirname "$(realpath "$BASH_SOURCE")"))
+
+cd $GQL_DIR
+
+nix develop --impure --command bash "$GQL_DIR/bin/assert-no-changes.sh"
diff --git a/bin/assert-no-changes.sh b/bin/assert-no-changes.sh
new file mode 100755
index 0000000..e19f366
--- /dev/null
+++ b/bin/assert-no-changes.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+git ls-files | xargs md5sum > before.txt
+
+yarn install
+yarn graphql-codegen
+
+git ls-files | xargs md5sum > after.txt
+
+
+diff before.txt after.txt
diff --git a/codegen.yml b/codegen.yml
new file mode 100644
index 0000000..34dbb6b
--- /dev/null
+++ b/codegen.yml
@@ -0,0 +1,13 @@
+overwrite: true
+schema: "src/schema.gql"
+documents: "src/**/*.gql"
+generates:
+ src/index.tsx:
+ plugins:
+ - "typescript"
+ - "typescript-operations"
+ - "typescript-react-apollo"
+ config:
+ withHooks: true
+ withHOC: false
+ withComponent: false
diff --git a/env.d.tsx b/env.d.tsx
deleted file mode 100644
index e534b18..0000000
--- a/env.d.tsx
+++ /dev/null
@@ -1,4 +0,0 @@
-declare module "@env" {
- export const API_URI: string;
- export const DEV_USER_ID: string;
-}
diff --git a/flake.lock b/flake.lock
index 5d3fb4e..988b051 100644
--- a/flake.lock
+++ b/flake.lock
@@ -1,75 +1,15 @@
{
"nodes": {
- "android-nixpkgs": {
+ "flake-utils": {
"inputs": {
- "devshell": "devshell",
- "flake-utils": "flake-utils",
- "nixpkgs": "nixpkgs"
- },
- "locked": {
- "lastModified": 1701980274,
- "narHash": "sha256-uKJIFvsahbWw52TsIht7g2iosXBgJDRMSMoCE1fvEAk=",
- "owner": "tadfisher",
- "repo": "android-nixpkgs",
- "rev": "bce9d437ed54ee1425b66442a12814fee4cdbd51",
- "type": "github"
- },
- "original": {
- "owner": "tadfisher",
- "repo": "android-nixpkgs",
- "type": "github"
- }
- },
- "devshell": {
- "inputs": {
- "nixpkgs": [
- "android-nixpkgs",
- "nixpkgs"
- ],
"systems": "systems"
},
"locked": {
- "lastModified": 1701787589,
- "narHash": "sha256-ce+oQR4Zq9VOsLoh9bZT8Ip9PaMLcjjBUHVPzW5d7Cw=",
- "owner": "numtide",
- "repo": "devshell",
- "rev": "44ddedcbcfc2d52a76b64fb6122f209881bd3e1e",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "devshell",
- "type": "github"
- }
- },
- "flake-utils": {
- "inputs": {
- "systems": "systems_2"
- },
- "locked": {
- "lastModified": 1701680307,
- "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
+ "lastModified": 1705309234,
+ "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
"owner": "numtide",
"repo": "flake-utils",
- "rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "flake-utils",
- "type": "github"
- }
- },
- "flake-utils_2": {
- "inputs": {
- "systems": "systems_3"
- },
- "locked": {
- "lastModified": 1701680307,
- "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
- "owner": "numtide",
- "repo": "flake-utils",
- "rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
+ "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
"type": "github"
},
"original": {
@@ -85,11 +25,11 @@
]
},
"locked": {
- "lastModified": 1694102001,
- "narHash": "sha256-vky6VPK1n1od6vXbqzOXnekrQpTL4hbPAwUhT5J9c9E=",
+ "lastModified": 1703887061,
+ "narHash": "sha256-gGPa9qWNc6eCXT/+Z5/zMkyYOuRZqeFZBDbopNZQkuY=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
- "rev": "9e21c80adf67ebcb077d75bd5e7d724d21eeafd6",
+ "rev": "43e1aa1308018f37118e34d3a9cb4f5e75dc11d5",
"type": "github"
},
"original": {
@@ -100,27 +40,11 @@
},
"nixpkgs": {
"locked": {
- "lastModified": 1701718080,
- "narHash": "sha256-6ovz0pG76dE0P170pmmZex1wWcQoeiomUZGggfH9XPs=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "2c7f3c0fb7c08a0814627611d9d7d45ab6d75335",
- "type": "github"
- },
- "original": {
- "owner": "NixOS",
- "ref": "nixos-unstable",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "nixpkgs_2": {
- "locked": {
- "lastModified": 1702312524,
- "narHash": "sha256-gkZJRDBUCpTPBvQk25G0B7vfbpEYM5s5OZqghkjZsnE=",
+ "lastModified": 1706732774,
+ "narHash": "sha256-hqJlyJk4MRpcItGYMF+3uHe8HvxNETWvlGtLuVpqLU0=",
"owner": "nixos",
"repo": "nixpkgs",
- "rev": "a9bf124c46ef298113270b1f84a164865987a91c",
+ "rev": "b8b232ae7b8b144397fdb12d20f592e5e7c1a64d",
"type": "github"
},
"original": {
@@ -132,10 +56,9 @@
},
"root": {
"inputs": {
- "android-nixpkgs": "android-nixpkgs",
- "flake-utils": "flake-utils_2",
+ "flake-utils": "flake-utils",
"gitignore": "gitignore",
- "nixpkgs": "nixpkgs_2"
+ "nixpkgs": "nixpkgs"
}
},
"systems": {
@@ -152,36 +75,6 @@
"repo": "default",
"type": "github"
}
- },
- "systems_2": {
- "locked": {
- "lastModified": 1681028828,
- "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
- "owner": "nix-systems",
- "repo": "default",
- "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
- "type": "github"
- },
- "original": {
- "owner": "nix-systems",
- "repo": "default",
- "type": "github"
- }
- },
- "systems_3": {
- "locked": {
- "lastModified": 1681028828,
- "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
- "owner": "nix-systems",
- "repo": "default",
- "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
- "type": "github"
- },
- "original": {
- "owner": "nix-systems",
- "repo": "default",
- "type": "github"
- }
}
},
"root": "root",
diff --git a/flake.nix b/flake.nix
index 02f08f1..abe5978 100644
--- a/flake.nix
+++ b/flake.nix
@@ -7,68 +7,21 @@
url = "github:hercules-ci/gitignore.nix";
inputs.nixpkgs.follows = "nixpkgs";
};
- android-nixpkgs = {
- url = "github:tadfisher/android-nixpkgs";
- };
};
outputs = {
self,
nixpkgs,
flake-utils,
gitignore,
- android-nixpkgs,
...
}:
flake-utils.lib.eachDefaultSystem (system: let
pkgs = import nixpkgs {inherit system;};
nodejs = pkgs.nodejs-18_x;
- # NOTE: this does not work
- appBuild = pkgs.stdenv.mkDerivation {
- name = "example-ts-node";
- version = "0.1.0";
- src = gitignore.lib.gitignoreSource ./.; # uses the gitignore in the repo to only copy files git would see
- buildInputs = [nodejs];
- # https://nixos.org/manual/nixpkgs/stable/#sec-stdenv-phases
- buildPhase = ''
- # each phase has pre/postHooks. When you make your own phase be sure to still call the hooks
- runHook preBuild
- npm ci
- npm run build
- runHook postBuild
- '';
- installPhase = ''
- runHook preInstall
- cp -r node_modules $out/node_modules
- cp package.json $out/package.json
- cp -r dist $out/dist
- runHook postInstall
- '';
- };
- android-sdk = android-nixpkgs.sdk.${system} (sdkPkgs:
- with sdkPkgs; [
- cmdline-tools-latest
- build-tools-30-0-3
- build-tools-33-0-0
- platform-tools
- platforms-android-33
- emulator
- ndk-23-1-7779620
- cmake-3-22-1
- system-images-android-33-google-apis-x86-64
- system-images-android-34-google-apis-x86-64
- ]);
in
with pkgs; {
- defaultPackage = appBuild;
devShell = mkShell {
- buildInputs = [nodejs yarn watchman gradle_7 alejandra nodePackages.prettier typescript cmake];
- ANDROID_SDK_BIN = android-sdk;
- shellHook = ''
- export JAVA_HOME=${pkgs.jdk17.home}
- source ${android-sdk.out}/nix-support/setup-hook
- export PATH=${android-sdk}/bin:${android-sdk}/share/android-sdk/build-tools/33.0.0/:$PATH
- ORG_GRADLE_PROJECT_ANDROID_HOME="$ANDROID_HOME"
- '';
+ buildInputs = [nodejs yarn watchman alejandra nodePackages.prettier];
};
});
}
diff --git a/google-services.json b/google-services.json
deleted file mode 100644
index f3cd1a2..0000000
--- a/google-services.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "project_info": {
- "project_number": "735905563616",
- "project_id": "railbird-infra",
- "storage_bucket": "railbird-infra.appspot.com"
- },
- "client": [
- {
- "client_info": {
- "mobilesdk_app_id": "1:735905563616:android:7eefd99f68d2f7db702185",
- "android_client_info": {
- "package_name": "android.railbird.app"
- }
- },
- "oauth_client": [
- {
- "client_id": "735905563616-v12rcdm7pkm1r2t5v09th5bs9j3ah1e4.apps.googleusercontent.com",
- "client_type": 3
- }
- ],
- "api_key": [
- {
- "current_key": "AIzaSyA5o4LpiDFl8Q8AaA2eGjbgdS7tMfupCWg"
- }
- ],
- "services": {
- "appinvite_service": {
- "other_platform_oauth_client": [
- {
- "client_id": "735905563616-v12rcdm7pkm1r2t5v09th5bs9j3ah1e4.apps.googleusercontent.com",
- "client_type": 3
- },
- {
- "client_id": "735905563616-ncd8794ocn2f25qmnaascn88upfgokp0.apps.googleusercontent.com",
- "client_type": 2,
- "ios_info": {
- "bundle_id": "ai.railbird.railbird",
- "app_store_id": "6469274937"
- }
- }
- ]
- }
- }
- }
- ],
- "configuration_version": "1"
-}
diff --git a/index.js b/index.js
deleted file mode 100644
index fc82eb1..0000000
--- a/index.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { registerRootComponent } from "expo";
-
-import App from "./src/App";
-
-// registerRootComponent calls AppRegistry.registerComponent('main', () => App);
-// It also ensures that whether you load the app in Expo Go or in a native build,
-// the environment is set up appropriately
-registerRootComponent(App);
diff --git a/ios/.gitignore b/ios/.gitignore
deleted file mode 100644
index 8beb344..0000000
--- a/ios/.gitignore
+++ /dev/null
@@ -1,30 +0,0 @@
-# OSX
-#
-.DS_Store
-
-# Xcode
-#
-build/
-*.pbxuser
-!default.pbxuser
-*.mode1v3
-!default.mode1v3
-*.mode2v3
-!default.mode2v3
-*.perspectivev3
-!default.perspectivev3
-xcuserdata
-*.xccheckout
-*.moved-aside
-DerivedData
-*.hmap
-*.ipa
-*.xcuserstate
-project.xcworkspace
-.xcode.env.local
-
-# Bundle artifacts
-*.jsbundle
-
-# CocoaPods
-/Pods/
diff --git a/ios/.xcode.env b/ios/.xcode.env
deleted file mode 100644
index 3d5782c..0000000
--- a/ios/.xcode.env
+++ /dev/null
@@ -1,11 +0,0 @@
-# This `.xcode.env` file is versioned and is used to source the environment
-# used when running script phases inside Xcode.
-# To customize your local environment, you can create an `.xcode.env.local`
-# file that is not versioned.
-
-# NODE_BINARY variable contains the PATH to the node executable.
-#
-# Customize the NODE_BINARY variable here.
-# For example, to use nvm with brew, add the following line
-# . "$(brew --prefix nvm)/nvm.sh" --no-use
-export NODE_BINARY=$(command -v node)
diff --git a/ios/Podfile b/ios/Podfile
deleted file mode 100644
index 7234f9b..0000000
--- a/ios/Podfile
+++ /dev/null
@@ -1,90 +0,0 @@
-require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking")
-require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods")
-
-require 'json'
-podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}
-
-ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'
-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']
-
-platform :ios, podfile_properties['ios.deploymentTarget'] || '13.0'
-install! 'cocoapods',
- :deterministic_uuids => false
-
-prepare_react_native_project!
-
-# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.
-# because `react-native-flipper` depends on (FlipperKit,...), which will be excluded. To fix this,
-# you can also exclude `react-native-flipper` in `react-native.config.js`
-#
-# ```js
-# module.exports = {
-# dependencies: {
-# ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}),
-# }
-# }
-# ```
-flipper_config = FlipperConfiguration.disabled
-if ENV['NO_FLIPPER'] == '1' then
- # Explicitly disabled through environment variables
- flipper_config = FlipperConfiguration.disabled
-elsif podfile_properties.key?('ios.flipper') then
- # Configure Flipper in Podfile.properties.json
- if podfile_properties['ios.flipper'] == 'true' then
- flipper_config = FlipperConfiguration.enabled(["Debug", "Release"])
- elsif podfile_properties['ios.flipper'] != 'false' then
- flipper_config = FlipperConfiguration.enabled(["Debug", "Release"], { 'Flipper' => podfile_properties['ios.flipper'] })
- end
-end
-
-target 'Railbird' do
- use_expo_modules!
- # Local pod specification for submodule
- pod 'VisionCamera', :path => '../react-native-vision-camera/package'
-
- config = use_native_modules!
-
- use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']
- use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']
-
- # Flags change depending on the env values.
- flags = get_default_flags()
-
- use_react_native!(
- :path => config[:reactNativePath],
- :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes',
- :fabric_enabled => flags[:fabric_enabled],
- # An absolute path to your application root.
- :app_path => "#{Pod::Config.instance.installation_root}/..",
- # Note that if you have use_frameworks! enabled, Flipper will not work if enabled
- :flipper_configuration => flipper_config
- )
-
- post_install do |installer|
- react_native_post_install(
- installer,
- config[:reactNativePath],
- :mac_catalyst_enabled => false
- )
- __apply_Xcode_12_5_M1_post_install_workaround(installer)
-
- # This is necessary for Xcode 14, because it signs resource bundles by default
- # when building for devices.
- installer.target_installation_results.pod_target_installation_results
- .each do |pod_name, target_installation_result|
- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|
- resource_bundle_target.build_configurations.each do |config|
- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
- end
- end
- end
- end
-
- post_integrate do |installer|
- begin
- expo_patch_react_imports!(installer)
- rescue => e
- Pod::UI.warn e
- end
- end
-end
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
deleted file mode 100644
index da82e1b..0000000
--- a/ios/Podfile.lock
+++ /dev/null
@@ -1,779 +0,0 @@
-PODS:
- - boost (1.76.0)
- - DoubleConversion (1.1.6)
- - EXApplication (5.3.1):
- - ExpoModulesCore
- - EXConstants (14.4.2):
- - ExpoModulesCore
- - EXFileSystem (15.4.5):
- - ExpoModulesCore
- - EXFont (11.4.0):
- - ExpoModulesCore
- - Expo (49.0.21):
- - ExpoModulesCore
- - ExpoKeepAwake (12.3.0):
- - ExpoModulesCore
- - ExpoModulesCore (1.5.12):
- - RCT-Folly (= 2021.07.22.00)
- - React-Core
- - React-NativeModulesApple
- - React-RCTAppDelegate
- - ReactCommon/turbomodule/core
- - EXSplashScreen (0.20.5):
- - ExpoModulesCore
- - RCT-Folly (= 2021.07.22.00)
- - React-Core
- - FBLazyVector (0.72.6)
- - FBReactNativeSpec (0.72.6):
- - RCT-Folly (= 2021.07.22.00)
- - RCTRequired (= 0.72.6)
- - RCTTypeSafety (= 0.72.6)
- - React-Core (= 0.72.6)
- - React-jsi (= 0.72.6)
- - ReactCommon/turbomodule/core (= 0.72.6)
- - Firebase/Auth (10.20.0):
- - Firebase/CoreOnly
- - FirebaseAuth (~> 10.20.0)
- - Firebase/CoreOnly (10.20.0):
- - FirebaseCore (= 10.20.0)
- - FirebaseAppCheckInterop (10.20.0)
- - FirebaseAuth (10.20.0):
- - FirebaseAppCheckInterop (~> 10.17)
- - FirebaseCore (~> 10.0)
- - GoogleUtilities/AppDelegateSwizzler (~> 7.8)
- - GoogleUtilities/Environment (~> 7.8)
- - GTMSessionFetcher/Core (< 4.0, >= 2.1)
- - RecaptchaInterop (~> 100.0)
- - FirebaseCore (10.20.0):
- - FirebaseCoreInternal (~> 10.0)
- - GoogleUtilities/Environment (~> 7.12)
- - GoogleUtilities/Logger (~> 7.12)
- - FirebaseCoreInternal (10.20.0):
- - "GoogleUtilities/NSData+zlib (~> 7.8)"
- - fmt (6.2.1)
- - glog (0.3.5)
- - GoogleUtilities/AppDelegateSwizzler (7.12.0):
- - GoogleUtilities/Environment
- - GoogleUtilities/Logger
- - GoogleUtilities/Network
- - GoogleUtilities/Environment (7.12.0):
- - PromisesObjC (< 3.0, >= 1.2)
- - GoogleUtilities/Logger (7.12.0):
- - GoogleUtilities/Environment
- - GoogleUtilities/Network (7.12.0):
- - GoogleUtilities/Logger
- - "GoogleUtilities/NSData+zlib"
- - GoogleUtilities/Reachability
- - "GoogleUtilities/NSData+zlib (7.12.0)"
- - GoogleUtilities/Reachability (7.12.0):
- - GoogleUtilities/Logger
- - GTMSessionFetcher/Core (3.2.0)
- - hermes-engine (0.72.6):
- - hermes-engine/Pre-built (= 0.72.6)
- - hermes-engine/Pre-built (0.72.6)
- - libevent (2.1.12)
- - PromisesObjC (2.3.1)
- - RCT-Folly (2021.07.22.00):
- - boost
- - DoubleConversion
- - fmt (~> 6.2.1)
- - glog
- - RCT-Folly/Default (= 2021.07.22.00)
- - RCT-Folly/Default (2021.07.22.00):
- - boost
- - DoubleConversion
- - fmt (~> 6.2.1)
- - glog
- - RCT-Folly/Futures (2021.07.22.00):
- - boost
- - DoubleConversion
- - fmt (~> 6.2.1)
- - glog
- - libevent
- - RCTRequired (0.72.6)
- - RCTTypeSafety (0.72.6):
- - FBLazyVector (= 0.72.6)
- - RCTRequired (= 0.72.6)
- - React-Core (= 0.72.6)
- - React (0.72.6):
- - React-Core (= 0.72.6)
- - React-Core/DevSupport (= 0.72.6)
- - React-Core/RCTWebSocket (= 0.72.6)
- - React-RCTActionSheet (= 0.72.6)
- - React-RCTAnimation (= 0.72.6)
- - React-RCTBlob (= 0.72.6)
- - React-RCTImage (= 0.72.6)
- - React-RCTLinking (= 0.72.6)
- - React-RCTNetwork (= 0.72.6)
- - React-RCTSettings (= 0.72.6)
- - React-RCTText (= 0.72.6)
- - React-RCTVibration (= 0.72.6)
- - React-callinvoker (0.72.6)
- - React-Codegen (0.72.6):
- - DoubleConversion
- - FBReactNativeSpec
- - glog
- - hermes-engine
- - RCT-Folly
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-jsi
- - React-jsiexecutor
- - React-NativeModulesApple
- - React-rncore
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - React-Core (0.72.6):
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default (= 0.72.6)
- - React-cxxreact
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-perflogger
- - React-runtimeexecutor
- - React-utils
- - SocketRocket (= 0.6.1)
- - Yoga
- - React-Core/CoreModulesHeaders (0.72.6):
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default
- - React-cxxreact
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-perflogger
- - React-runtimeexecutor
- - React-utils
- - SocketRocket (= 0.6.1)
- - Yoga
- - React-Core/Default (0.72.6):
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-cxxreact
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-perflogger
- - React-runtimeexecutor
- - React-utils
- - SocketRocket (= 0.6.1)
- - Yoga
- - React-Core/DevSupport (0.72.6):
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default (= 0.72.6)
- - React-Core/RCTWebSocket (= 0.72.6)
- - React-cxxreact
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-jsinspector (= 0.72.6)
- - React-perflogger
- - React-runtimeexecutor
- - React-utils
- - SocketRocket (= 0.6.1)
- - Yoga
- - React-Core/RCTActionSheetHeaders (0.72.6):
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default
- - React-cxxreact
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-perflogger
- - React-runtimeexecutor
- - React-utils
- - SocketRocket (= 0.6.1)
- - Yoga
- - React-Core/RCTAnimationHeaders (0.72.6):
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default
- - React-cxxreact
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-perflogger
- - React-runtimeexecutor
- - React-utils
- - SocketRocket (= 0.6.1)
- - Yoga
- - React-Core/RCTBlobHeaders (0.72.6):
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default
- - React-cxxreact
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-perflogger
- - React-runtimeexecutor
- - React-utils
- - SocketRocket (= 0.6.1)
- - Yoga
- - React-Core/RCTImageHeaders (0.72.6):
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default
- - React-cxxreact
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-perflogger
- - React-runtimeexecutor
- - React-utils
- - SocketRocket (= 0.6.1)
- - Yoga
- - React-Core/RCTLinkingHeaders (0.72.6):
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default
- - React-cxxreact
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-perflogger
- - React-runtimeexecutor
- - React-utils
- - SocketRocket (= 0.6.1)
- - Yoga
- - React-Core/RCTNetworkHeaders (0.72.6):
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default
- - React-cxxreact
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-perflogger
- - React-runtimeexecutor
- - React-utils
- - SocketRocket (= 0.6.1)
- - Yoga
- - React-Core/RCTSettingsHeaders (0.72.6):
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default
- - React-cxxreact
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-perflogger
- - React-runtimeexecutor
- - React-utils
- - SocketRocket (= 0.6.1)
- - Yoga
- - React-Core/RCTTextHeaders (0.72.6):
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default
- - React-cxxreact
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-perflogger
- - React-runtimeexecutor
- - React-utils
- - SocketRocket (= 0.6.1)
- - Yoga
- - React-Core/RCTVibrationHeaders (0.72.6):
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default
- - React-cxxreact
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-perflogger
- - React-runtimeexecutor
- - React-utils
- - SocketRocket (= 0.6.1)
- - Yoga
- - React-Core/RCTWebSocket (0.72.6):
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-Core/Default (= 0.72.6)
- - React-cxxreact
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-perflogger
- - React-runtimeexecutor
- - React-utils
- - SocketRocket (= 0.6.1)
- - Yoga
- - React-CoreModules (0.72.6):
- - RCT-Folly (= 2021.07.22.00)
- - RCTTypeSafety (= 0.72.6)
- - React-Codegen (= 0.72.6)
- - React-Core/CoreModulesHeaders (= 0.72.6)
- - React-jsi (= 0.72.6)
- - React-RCTBlob
- - React-RCTImage (= 0.72.6)
- - ReactCommon/turbomodule/core (= 0.72.6)
- - SocketRocket (= 0.6.1)
- - React-cxxreact (0.72.6):
- - boost (= 1.76.0)
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-callinvoker (= 0.72.6)
- - React-debug (= 0.72.6)
- - React-jsi (= 0.72.6)
- - React-jsinspector (= 0.72.6)
- - React-logger (= 0.72.6)
- - React-perflogger (= 0.72.6)
- - React-runtimeexecutor (= 0.72.6)
- - React-debug (0.72.6)
- - React-hermes (0.72.6):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - RCT-Folly/Futures (= 2021.07.22.00)
- - React-cxxreact (= 0.72.6)
- - React-jsi
- - React-jsiexecutor (= 0.72.6)
- - React-jsinspector (= 0.72.6)
- - React-perflogger (= 0.72.6)
- - React-jsi (0.72.6):
- - boost (= 1.76.0)
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-jsiexecutor (0.72.6):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-cxxreact (= 0.72.6)
- - React-jsi (= 0.72.6)
- - React-perflogger (= 0.72.6)
- - React-jsinspector (0.72.6)
- - React-logger (0.72.6):
- - glog
- - react-native-cameraroll (7.4.0):
- - RCT-Folly (= 2021.07.22.00)
- - React-Core
- - react-native-safe-area-context (4.8.2):
- - React-Core
- - React-NativeModulesApple (0.72.6):
- - hermes-engine
- - React-callinvoker
- - React-Core
- - React-cxxreact
- - React-jsi
- - React-runtimeexecutor
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - React-perflogger (0.72.6)
- - React-RCTActionSheet (0.72.6):
- - React-Core/RCTActionSheetHeaders (= 0.72.6)
- - React-RCTAnimation (0.72.6):
- - RCT-Folly (= 2021.07.22.00)
- - RCTTypeSafety (= 0.72.6)
- - React-Codegen (= 0.72.6)
- - React-Core/RCTAnimationHeaders (= 0.72.6)
- - React-jsi (= 0.72.6)
- - ReactCommon/turbomodule/core (= 0.72.6)
- - React-RCTAppDelegate (0.72.6):
- - RCT-Folly
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-CoreModules
- - React-hermes
- - React-NativeModulesApple
- - React-RCTImage
- - React-RCTNetwork
- - React-runtimescheduler
- - ReactCommon/turbomodule/core
- - React-RCTBlob (0.72.6):
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-Codegen (= 0.72.6)
- - React-Core/RCTBlobHeaders (= 0.72.6)
- - React-Core/RCTWebSocket (= 0.72.6)
- - React-jsi (= 0.72.6)
- - React-RCTNetwork (= 0.72.6)
- - ReactCommon/turbomodule/core (= 0.72.6)
- - React-RCTImage (0.72.6):
- - RCT-Folly (= 2021.07.22.00)
- - RCTTypeSafety (= 0.72.6)
- - React-Codegen (= 0.72.6)
- - React-Core/RCTImageHeaders (= 0.72.6)
- - React-jsi (= 0.72.6)
- - React-RCTNetwork (= 0.72.6)
- - ReactCommon/turbomodule/core (= 0.72.6)
- - React-RCTLinking (0.72.6):
- - React-Codegen (= 0.72.6)
- - React-Core/RCTLinkingHeaders (= 0.72.6)
- - React-jsi (= 0.72.6)
- - ReactCommon/turbomodule/core (= 0.72.6)
- - React-RCTNetwork (0.72.6):
- - RCT-Folly (= 2021.07.22.00)
- - RCTTypeSafety (= 0.72.6)
- - React-Codegen (= 0.72.6)
- - React-Core/RCTNetworkHeaders (= 0.72.6)
- - React-jsi (= 0.72.6)
- - ReactCommon/turbomodule/core (= 0.72.6)
- - React-RCTSettings (0.72.6):
- - RCT-Folly (= 2021.07.22.00)
- - RCTTypeSafety (= 0.72.6)
- - React-Codegen (= 0.72.6)
- - React-Core/RCTSettingsHeaders (= 0.72.6)
- - React-jsi (= 0.72.6)
- - ReactCommon/turbomodule/core (= 0.72.6)
- - React-RCTText (0.72.6):
- - React-Core/RCTTextHeaders (= 0.72.6)
- - React-RCTVibration (0.72.6):
- - RCT-Folly (= 2021.07.22.00)
- - React-Codegen (= 0.72.6)
- - React-Core/RCTVibrationHeaders (= 0.72.6)
- - React-jsi (= 0.72.6)
- - ReactCommon/turbomodule/core (= 0.72.6)
- - React-rncore (0.72.6)
- - React-runtimeexecutor (0.72.6):
- - React-jsi (= 0.72.6)
- - React-runtimescheduler (0.72.6):
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-callinvoker
- - React-debug
- - React-jsi
- - React-runtimeexecutor
- - React-utils (0.72.6):
- - glog
- - RCT-Folly (= 2021.07.22.00)
- - React-debug
- - ReactCommon/turbomodule/bridging (0.72.6):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-callinvoker (= 0.72.6)
- - React-cxxreact (= 0.72.6)
- - React-jsi (= 0.72.6)
- - React-logger (= 0.72.6)
- - React-perflogger (= 0.72.6)
- - ReactCommon/turbomodule/core (0.72.6):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2021.07.22.00)
- - React-callinvoker (= 0.72.6)
- - React-cxxreact (= 0.72.6)
- - React-jsi (= 0.72.6)
- - React-logger (= 0.72.6)
- - React-perflogger (= 0.72.6)
- - RecaptchaInterop (100.0.0)
- - RNFBApp (18.8.0):
- - Firebase/CoreOnly (= 10.20.0)
- - React-Core
- - RNFBAuth (18.8.0):
- - Firebase/Auth (= 10.20.0)
- - React-Core
- - RNFBApp
- - RNReanimated (3.6.2):
- - RCT-Folly (= 2021.07.22.00)
- - React-Core
- - ReactCommon/turbomodule/core
- - RNScreens (3.22.1):
- - React-Core
- - React-RCTImage
- - RNStaticSafeAreaInsets (2.2.0):
- - React-Core
- - RNSVG (13.9.0):
- - React-Core
- - SocketRocket (0.6.1)
- - VisionCamera (3.8.2):
- - React
- - React-callinvoker
- - React-Core
- - Yoga (1.14.0)
-
-DEPENDENCIES:
- - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
- - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
- - EXApplication (from `../node_modules/expo-application/ios`)
- - EXConstants (from `../node_modules/expo-constants/ios`)
- - EXFileSystem (from `../node_modules/expo-file-system/ios`)
- - EXFont (from `../node_modules/expo-font/ios`)
- - Expo (from `../node_modules/expo`)
- - ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`)
- - ExpoModulesCore (from `../node_modules/expo-modules-core`)
- - EXSplashScreen (from `../node_modules/expo-splash-screen/ios`)
- - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
- - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
- - libevent (~> 2.1.12)
- - 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`)
- - React (from `../node_modules/react-native/`)
- - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
- - React-Codegen (from `build/generated/ios`)
- - React-Core (from `../node_modules/react-native/`)
- - React-Core/RCTWebSocket (from `../node_modules/react-native/`)
- - React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
- - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
- - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`)
- - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`)
- - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
- - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
- - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
- - React-logger (from `../node_modules/react-native/ReactCommon/logger`)
- - "react-native-cameraroll (from `../node_modules/@react-native-camera-roll/camera-roll`)"
- - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
- - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
- - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
- - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
- - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`)
- - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
- - React-RCTImage (from `../node_modules/react-native/Libraries/Image`)
- - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`)
- - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`)
- - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
- - React-RCTText (from `../node_modules/react-native/Libraries/Text`)
- - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
- - React-rncore (from `../node_modules/react-native/ReactCommon`)
- - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`)
- - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`)
- - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`)
- - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
- - "RNFBApp (from `../node_modules/@react-native-firebase/app`)"
- - "RNFBAuth (from `../node_modules/@react-native-firebase/auth`)"
- - RNReanimated (from `../node_modules/react-native-reanimated`)
- - RNScreens (from `../node_modules/react-native-screens`)
- - RNStaticSafeAreaInsets (from `../node_modules/react-native-static-safe-area-insets`)
- - RNSVG (from `../node_modules/react-native-svg`)
- - VisionCamera (from `../react-native-vision-camera/package`)
- - Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
-
-SPEC REPOS:
- trunk:
- - Firebase
- - FirebaseAppCheckInterop
- - FirebaseAuth
- - FirebaseCore
- - FirebaseCoreInternal
- - fmt
- - GoogleUtilities
- - GTMSessionFetcher
- - libevent
- - PromisesObjC
- - RecaptchaInterop
- - SocketRocket
-
-EXTERNAL SOURCES:
- boost:
- :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec"
- DoubleConversion:
- :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
- EXApplication:
- :path: "../node_modules/expo-application/ios"
- EXConstants:
- :path: "../node_modules/expo-constants/ios"
- EXFileSystem:
- :path: "../node_modules/expo-file-system/ios"
- EXFont:
- :path: "../node_modules/expo-font/ios"
- Expo:
- :path: "../node_modules/expo"
- ExpoKeepAwake:
- :path: "../node_modules/expo-keep-awake/ios"
- ExpoModulesCore:
- :path: "../node_modules/expo-modules-core"
- EXSplashScreen:
- :path: "../node_modules/expo-splash-screen/ios"
- FBLazyVector:
- :path: "../node_modules/react-native/Libraries/FBLazyVector"
- FBReactNativeSpec:
- :path: "../node_modules/react-native/React/FBReactNativeSpec"
- glog:
- :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
- hermes-engine:
- :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec"
- :tag: hermes-2023-08-07-RNv0.72.4-813b2def12bc9df02654b3e3653ae4a68d0572e0
- RCT-Folly:
- :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec"
- RCTRequired:
- :path: "../node_modules/react-native/Libraries/RCTRequired"
- RCTTypeSafety:
- :path: "../node_modules/react-native/Libraries/TypeSafety"
- React:
- :path: "../node_modules/react-native/"
- React-callinvoker:
- :path: "../node_modules/react-native/ReactCommon/callinvoker"
- React-Codegen:
- :path: build/generated/ios
- React-Core:
- :path: "../node_modules/react-native/"
- React-CoreModules:
- :path: "../node_modules/react-native/React/CoreModules"
- React-cxxreact:
- :path: "../node_modules/react-native/ReactCommon/cxxreact"
- React-debug:
- :path: "../node_modules/react-native/ReactCommon/react/debug"
- React-hermes:
- :path: "../node_modules/react-native/ReactCommon/hermes"
- React-jsi:
- :path: "../node_modules/react-native/ReactCommon/jsi"
- React-jsiexecutor:
- :path: "../node_modules/react-native/ReactCommon/jsiexecutor"
- React-jsinspector:
- :path: "../node_modules/react-native/ReactCommon/jsinspector"
- React-logger:
- :path: "../node_modules/react-native/ReactCommon/logger"
- react-native-cameraroll:
- :path: "../node_modules/@react-native-camera-roll/camera-roll"
- react-native-safe-area-context:
- :path: "../node_modules/react-native-safe-area-context"
- React-NativeModulesApple:
- :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios"
- React-perflogger:
- :path: "../node_modules/react-native/ReactCommon/reactperflogger"
- React-RCTActionSheet:
- :path: "../node_modules/react-native/Libraries/ActionSheetIOS"
- React-RCTAnimation:
- :path: "../node_modules/react-native/Libraries/NativeAnimation"
- React-RCTAppDelegate:
- :path: "../node_modules/react-native/Libraries/AppDelegate"
- React-RCTBlob:
- :path: "../node_modules/react-native/Libraries/Blob"
- React-RCTImage:
- :path: "../node_modules/react-native/Libraries/Image"
- React-RCTLinking:
- :path: "../node_modules/react-native/Libraries/LinkingIOS"
- React-RCTNetwork:
- :path: "../node_modules/react-native/Libraries/Network"
- React-RCTSettings:
- :path: "../node_modules/react-native/Libraries/Settings"
- React-RCTText:
- :path: "../node_modules/react-native/Libraries/Text"
- React-RCTVibration:
- :path: "../node_modules/react-native/Libraries/Vibration"
- React-rncore:
- :path: "../node_modules/react-native/ReactCommon"
- React-runtimeexecutor:
- :path: "../node_modules/react-native/ReactCommon/runtimeexecutor"
- React-runtimescheduler:
- :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler"
- React-utils:
- :path: "../node_modules/react-native/ReactCommon/react/utils"
- ReactCommon:
- :path: "../node_modules/react-native/ReactCommon"
- RNFBApp:
- :path: "../node_modules/@react-native-firebase/app"
- RNFBAuth:
- :path: "../node_modules/@react-native-firebase/auth"
- RNReanimated:
- :path: "../node_modules/react-native-reanimated"
- RNScreens:
- :path: "../node_modules/react-native-screens"
- RNStaticSafeAreaInsets:
- :path: "../node_modules/react-native-static-safe-area-insets"
- RNSVG:
- :path: "../node_modules/react-native-svg"
- VisionCamera:
- :path: "../react-native-vision-camera/package"
- Yoga:
- :path: "../node_modules/react-native/ReactCommon/yoga"
-
-SPEC CHECKSUMS:
- boost: 57d2868c099736d80fcd648bf211b4431e51a558
- DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
- EXApplication: 042aa2e3f05258a16962ea1a9914bf288db9c9a1
- EXConstants: ce5bbea779da8031ac818c36bea41b10e14d04e1
- EXFileSystem: f8b838a880254de42a5a7da20ed5ce12e2697c1b
- EXFont: 738c44c390953ebcbab075a4848bfbef025fd9ee
- Expo: 61a8e1aa94311557c137c0a4dfd4fe78281cfbb4
- ExpoKeepAwake: be4cbd52d9b177cde0fd66daa1913afa3161fc1d
- ExpoModulesCore: e5b041c20cee64b4f2d8c49b0bcdd757d152109f
- EXSplashScreen: 2c80621e4bc952f5bea328304c2436f5fe21c2a0
- FBLazyVector: 748c0ef74f2bf4b36cfcccf37916806940a64c32
- FBReactNativeSpec: 966f29e4e697de53a3b366355e8f57375c856ad9
- Firebase: 10c8cb12fb7ad2ae0c09ffc86cd9c1ab392a0031
- FirebaseAppCheckInterop: e81bdb1cdb82f8e0cef353ba5018a8402682032c
- FirebaseAuth: 9c5c400d2c3055d8ae3a0284944c86fa95d48dac
- FirebaseCore: 28045c1560a2600d284b9c45a904fe322dc890b6
- FirebaseCoreInternal: efeeb171ac02d623bdaefe121539939821e10811
- fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
- glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
- GoogleUtilities: 0759d1a57ebb953965c2dfe0ba4c82e95ccc2e34
- GTMSessionFetcher: 41b9ef0b4c08a6db4b7eb51a21ae5183ec99a2c8
- hermes-engine: 8057e75cfc1437b178ac86c8654b24e7fead7f60
- libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
- PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4
- RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1
- RCTRequired: 28469809442eb4eb5528462705f7d852948c8a74
- RCTTypeSafety: e9c6c409fca2cc584e5b086862d562540cb38d29
- React: 769f469909b18edfe934f0539fffb319c4c61043
- React-callinvoker: e48ce12c83706401251921896576710d81e54763
- React-Codegen: 8cb364505beec45713ac224bcbb6bb41c3fc1a85
- React-Core: 56221b0ea21a0934aa1fbc4aef924e9007d60f26
- React-CoreModules: 9748a6fe4404323a3280ad3c5311d28d6f4f813b
- React-cxxreact: 44a3560510ead6633b6e02f9fbbdd1772fb40f92
- React-debug: 0a068b2ff5e6d2575d64303b37b554573d758e76
- React-hermes: 46e66dc854124d7645c20bfec0a6be9542826ecd
- React-jsi: fbdaf4166bae60524b591b18c851b530c8cdb90c
- React-jsiexecutor: 3bf18ff7cb03cd8dfdce08fbbc0d15058c1d71ae
- React-jsinspector: 194e32c6aab382d88713ad3dd0025c5f5c4ee072
- React-logger: cebf22b6cf43434e471dc561e5911b40ac01d289
- react-native-cameraroll: 4fb78aee9d718d2a3e1d07670262011a88bff160
- react-native-safe-area-context: 0ee144a6170530ccc37a0fd9388e28d06f516a89
- React-NativeModulesApple: 1802a680a4cd891d2ab97780771bcb2ff11fdc0b
- React-perflogger: e3596db7e753f51766bceadc061936ef1472edc3
- React-RCTActionSheet: 17ab132c748b4471012abbcdcf5befe860660485
- React-RCTAnimation: 3fe720d2c172de51de8dc19ba091c559d22ebd9b
- React-RCTAppDelegate: c64ab148e0c8139be28c76d4f159acd87560359d
- React-RCTBlob: fd752f54ae335c93a36650be8129b352b852185f
- React-RCTImage: a99cc31f93f72fe17d0448fd45d7a812fd50388e
- React-RCTLinking: c56c6c36b85cebf1f4fa61a3493c9f01551afaab
- React-RCTNetwork: 01167794715ec8ae4854caca36d4009b5e257257
- React-RCTSettings: 52790fef45f5a0655cad22ab9b9a87e675d84d8c
- React-RCTText: adde32164a243103aaba0b1dc7b0a2599733873e
- React-RCTVibration: 1c047e1d9b21992f91c21f221f360640a4a288ec
- React-rncore: 87d117a5b3854f0c9c3b08d46fa83fa98a7b9f1c
- React-runtimeexecutor: 57d85d942862b08f6d15441a0badff2542fd233c
- React-runtimescheduler: 76eb364c37e6c20845cfe0cb049f883021bdfccf
- React-utils: 1dc03e6e55f56388b6fdde3768a66c885bacb627
- ReactCommon: cfe086d2e2ec9f2907c66666c856082608fba822
- RecaptchaInterop: 7d1a4a01a6b2cb1610a47ef3f85f0c411434cb21
- RNFBApp: 5810d39f89d38272f29d9908cb19ef641922c081
- RNFBAuth: 22be3e62ac7efaeff8edddd4de93d288382ecdc7
- RNReanimated: 6cbeb21f7def739dd4eabc2bae634a2ff2539802
- RNScreens: 50ffe2fa2342eabb2d0afbe19f7c1af286bc7fb3
- RNStaticSafeAreaInsets: 055ddbf5e476321720457cdaeec0ff2ba40ec1b8
- RNSVG: 53c661b76829783cdaf9b7a57258f3d3b4c28315
- SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
- VisionCamera: 4b98b273902ac18491bb68481b6601f1f0da0f2d
- Yoga: b76f1acfda8212aa16b7e26bcce3983230c82603
-
-PODFILE CHECKSUM: b6f983e27dc9836c280903b75ab16080aab25b0b
-
-COCOAPODS: 1.14.3
diff --git a/ios/Podfile.properties.json b/ios/Podfile.properties.json
deleted file mode 100644
index 0d64a63..0000000
--- a/ios/Podfile.properties.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "expo.jsEngine": "hermes",
- "EX_DEV_CLIENT_NETWORK_INSPECTOR": "true",
- "ios.useFrameworks": "static"
-}
diff --git a/ios/Railbird.xcodeproj/project.pbxproj b/ios/Railbird.xcodeproj/project.pbxproj
deleted file mode 100644
index 48d621a..0000000
--- a/ios/Railbird.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,605 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 54;
- objects = {
-
-/* Begin PBXBuildFile section */
- 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
- 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
- 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
- 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };
- 5EA6FB8605FF4C68A904CCF2 /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2CA28C34ACE4214B13C5C6D /* noop-file.swift */; };
- A5A02A4705E041DE78F5D7DE /* Pods_Railbird.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C8A4A0B4D962697036ED5DD /* Pods_Railbird.framework */; };
- B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };
- B6EAE3092E2C4CF7A0CBEF32 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = DC392C3D22484A91957B59E5 /* GoogleService-Info.plist */; };
- BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXFileReference section */
- 13B07F961A680F5B00A75B9A /* Railbird.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Railbird.app; sourceTree = BUILT_PRODUCTS_DIR; };
- 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Railbird/AppDelegate.h; sourceTree = ""; };
- 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = Railbird/AppDelegate.mm; sourceTree = ""; };
- 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Railbird/Images.xcassets; sourceTree = ""; };
- 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Railbird/Info.plist; sourceTree = ""; };
- 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Railbird/main.m; sourceTree = ""; };
- 1661DEDE73604EAD9C1F237C /* Railbird-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "Railbird-Bridging-Header.h"; path = "Railbird/Railbird-Bridging-Header.h"; sourceTree = ""; };
- 6C2E3173556A471DD304B334 /* Pods-Railbird.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Railbird.debug.xcconfig"; path = "Target Support Files/Pods-Railbird/Pods-Railbird.debug.xcconfig"; sourceTree = ""; };
- 7A4D352CD337FB3A3BF06240 /* Pods-Railbird.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Railbird.release.xcconfig"; path = "Target Support Files/Pods-Railbird/Pods-Railbird.release.xcconfig"; sourceTree = ""; };
- 8C8A4A0B4D962697036ED5DD /* Pods_Railbird.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Railbird.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- A2CA28C34ACE4214B13C5C6D /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "Railbird/noop-file.swift"; sourceTree = ""; };
- AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = Railbird/SplashScreen.storyboard; sourceTree = ""; };
- BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; };
- DC392C3D22484A91957B59E5 /* GoogleService-Info.plist */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Railbird/GoogleService-Info.plist"; sourceTree = ""; };
- ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
- FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-Railbird/ExpoModulesProvider.swift"; sourceTree = ""; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- 13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- A5A02A4705E041DE78F5D7DE /* Pods_Railbird.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 13B07FAE1A68108700A75B9A /* Railbird */ = {
- isa = PBXGroup;
- children = (
- BB2F792B24A3F905000567C9 /* Supporting */,
- 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
- 13B07FB01A68108700A75B9A /* AppDelegate.mm */,
- 13B07FB51A68108700A75B9A /* Images.xcassets */,
- 13B07FB61A68108700A75B9A /* Info.plist */,
- 13B07FB71A68108700A75B9A /* main.m */,
- AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,
- A2CA28C34ACE4214B13C5C6D /* noop-file.swift */,
- 1661DEDE73604EAD9C1F237C /* Railbird-Bridging-Header.h */,
- DC392C3D22484A91957B59E5 /* GoogleService-Info.plist */,
- );
- name = Railbird;
- sourceTree = "";
- };
- 2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
- 8C8A4A0B4D962697036ED5DD /* Pods_Railbird.framework */,
- );
- name = Frameworks;
- sourceTree = "";
- };
- 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
- isa = PBXGroup;
- children = (
- );
- name = Libraries;
- sourceTree = "";
- };
- 83CBB9F61A601CBA00E9B192 = {
- isa = PBXGroup;
- children = (
- 13B07FAE1A68108700A75B9A /* Railbird */,
- 832341AE1AAA6A7D00B99B32 /* Libraries */,
- 83CBBA001A601CBA00E9B192 /* Products */,
- 2D16E6871FA4F8E400B85C8A /* Frameworks */,
- D65327D7A22EEC0BE12398D9 /* Pods */,
- D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,
- );
- indentWidth = 2;
- sourceTree = "";
- tabWidth = 2;
- usesTabs = 0;
- };
- 83CBBA001A601CBA00E9B192 /* Products */ = {
- isa = PBXGroup;
- children = (
- 13B07F961A680F5B00A75B9A /* Railbird.app */,
- );
- name = Products;
- sourceTree = "";
- };
- 92DBD88DE9BF7D494EA9DA96 /* Railbird */ = {
- isa = PBXGroup;
- children = (
- FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,
- );
- name = Railbird;
- sourceTree = "";
- };
- BB2F792B24A3F905000567C9 /* Supporting */ = {
- isa = PBXGroup;
- children = (
- BB2F792C24A3F905000567C9 /* Expo.plist */,
- );
- name = Supporting;
- path = Railbird/Supporting;
- sourceTree = "";
- };
- D65327D7A22EEC0BE12398D9 /* Pods */ = {
- isa = PBXGroup;
- children = (
- 6C2E3173556A471DD304B334 /* Pods-Railbird.debug.xcconfig */,
- 7A4D352CD337FB3A3BF06240 /* Pods-Railbird.release.xcconfig */,
- );
- path = Pods;
- sourceTree = "";
- };
- D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {
- isa = PBXGroup;
- children = (
- 92DBD88DE9BF7D494EA9DA96 /* Railbird */,
- );
- name = ExpoModulesProviders;
- sourceTree = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
- 13B07F861A680F5B00A75B9A /* Railbird */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Railbird" */;
- buildPhases = (
- 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */,
- FD10A7F022414F080027D42C /* Start Packager */,
- 68942E2ED6F48D8E1754381D /* [Expo] Configure project */,
- 13B07F871A680F5B00A75B9A /* Sources */,
- 13B07F8C1A680F5B00A75B9A /* Frameworks */,
- 13B07F8E1A680F5B00A75B9A /* Resources */,
- 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
- 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */,
- B0E38A3C2BAC323EB9CC48FE /* [CP] Embed Pods Frameworks */,
- 4B8DADEBE997605BF4C0D2E5 /* [CP-User] [RNFB] Core Configuration */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = Railbird;
- productName = Railbird;
- productReference = 13B07F961A680F5B00A75B9A /* Railbird.app */;
- productType = "com.apple.product-type.application";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- 83CBB9F71A601CBA00E9B192 /* Project object */ = {
- isa = PBXProject;
- attributes = {
- LastUpgradeCheck = 1130;
- TargetAttributes = {
- 13B07F861A680F5B00A75B9A = {
- LastSwiftMigration = 1250;
- };
- };
- };
- buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Railbird" */;
- compatibilityVersion = "Xcode 3.2";
- developmentRegion = en;
- hasScannedForEncodings = 0;
- knownRegions = (
- en,
- Base,
- );
- mainGroup = 83CBB9F61A601CBA00E9B192;
- productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- 13B07F861A680F5B00A75B9A /* Railbird */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- 13B07F8E1A680F5B00A75B9A /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- BB2F792D24A3F905000567C9 /* Expo.plist in Resources */,
- 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
- 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */,
- B6EAE3092E2C4CF7A0CBEF32 /* GoogleService-Info.plist in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
- 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = "Bundle React Native code and images";
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n # Set the entry JS file using the bundler's entry resolution.\n export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" \"$PROJECT_ROOT\" ios relative | tail -n 1)\"\nfi\n\nif [[ -z \"$CLI_PATH\" ]]; then\n # Use Expo CLI\n export CLI_PATH=\"$(\"$NODE_BINARY\" --print \"require.resolve('@expo/cli')\")\"\nfi\nif [[ -z \"$BUNDLE_COMMAND\" ]]; then\n # Default Expo CLI command for bundling\n export BUNDLE_COMMAND=\"export:embed\"\nfi\n\n`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n\n";
- };
- 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- );
- inputPaths = (
- "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
- "${PODS_ROOT}/Manifest.lock",
- );
- name = "[CP] Check Pods Manifest.lock";
- outputFileListPaths = (
- );
- outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-Railbird-checkManifestLockResult.txt",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- 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;
- };
- 4B8DADEBE997605BF4C0D2E5 /* [CP-User] [RNFB] Core Configuration */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)",
- );
- name = "[CP-User] [RNFB] Core 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\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 -Ku -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 -Ku -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.analytics_registration_with_ad_network_enabled\n _ANALYTICS_REGISTRATION_WITH_AD_NETWORK=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_registration_with_ad_network_enabled\")\n if [[ $_ANALYTICS_REGISTRATION_WITH_AD_NETWORK ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_REGISTRATION_WITH_AD_NETWORK_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_REGISTRATION_WITH_AD_NETWORK\")\")\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";
- };
- 68942E2ED6F48D8E1754381D /* [Expo] Configure project */ = {
- isa = PBXShellScriptBuildPhase;
- alwaysOutOfDate = 1;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- );
- inputPaths = (
- );
- name = "[Expo] Configure project";
- outputFileListPaths = (
- );
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-Railbird/expo-configure-project.sh\"\n";
- };
- 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Railbird/Pods-Railbird-resources.sh",
- "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle",
- );
- name = "[CP] Copy Pods Resources";
- outputPaths = (
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Railbird/Pods-Railbird-resources.sh\"\n";
- showEnvVarsInLog = 0;
- };
- B0E38A3C2BAC323EB9CC48FE /* [CP] Embed Pods Frameworks */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Railbird/Pods-Railbird-frameworks.sh",
- "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes",
- );
- name = "[CP] Embed Pods Frameworks";
- outputPaths = (
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Railbird/Pods-Railbird-frameworks.sh\"\n";
- showEnvVarsInLog = 0;
- };
- FD10A7F022414F080027D42C /* Start Packager */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- );
- inputPaths = (
- );
- name = "Start Packager";
- outputFileListPaths = (
- );
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\nexport RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > `$NODE_BINARY --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/.packager.env'\"`\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open `$NODE_BINARY --print \"require('path').dirname(require.resolve('expo/package.json')) + '/scripts/launchPackager.command'\"` || echo \"Can't start packager automatically\"\n fi\nfi\n";
- showEnvVarsInLog = 0;
- };
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- 13B07F871A680F5B00A75B9A /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
- 13B07FC11A68108700A75B9A /* main.m in Sources */,
- B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,
- 5EA6FB8605FF4C68A904CCF2 /* noop-file.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin XCBuildConfiguration section */
- 13B07F941A680F5B00A75B9A /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-Railbird.debug.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CLANG_ENABLE_MODULES = YES;
- CODE_SIGN_ENTITLEMENTS = Railbird/Railbird.entitlements;
- CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = K86D8LK4W6;
- ENABLE_BITCODE = NO;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "$(inherited)",
- "FB_SONARKIT_ENABLED=1",
- );
- INFOPLIST_FILE = Railbird/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 13.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- MARKETING_VERSION = 1.0;
- OTHER_LDFLAGS = (
- "$(inherited)",
- "-ObjC",
- "-lc++",
- );
- OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
- PRODUCT_BUNDLE_IDENTIFIER = ai.railbird.railbird;
- PRODUCT_NAME = Railbird;
- PROVISIONING_PROFILE_SPECIFIER = "";
- SWIFT_OBJC_BRIDGING_HEADER = "Railbird/Railbird-Bridging-Header.h";
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- VERSIONING_SYSTEM = "apple-generic";
- };
- name = Debug;
- };
- 13B07F951A680F5B00A75B9A /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-Railbird.release.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CLANG_ENABLE_MODULES = YES;
- CODE_SIGN_ENTITLEMENTS = Railbird/Railbird.entitlements;
- CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = K86D8LK4W6;
- INFOPLIST_FILE = Railbird/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 13.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- MARKETING_VERSION = 1.0;
- OTHER_LDFLAGS = (
- "$(inherited)",
- "-ObjC",
- "-lc++",
- );
- OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
- PRODUCT_BUNDLE_IDENTIFIER = ai.railbird.railbird;
- PRODUCT_NAME = Railbird;
- PROVISIONING_PROFILE_SPECIFIER = "";
- SWIFT_OBJC_BRIDGING_HEADER = "Railbird/Railbird-Bridging-Header.h";
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- VERSIONING_SYSTEM = "apple-generic";
- };
- name = Release;
- };
- 83CBBA201A601CBA00E9B192 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_CXX_LANGUAGE_STANDARD = "c++17";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- _LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION,
- );
- GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- HEADER_SEARCH_PATHS = (
- "$(inherited)",
- "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers",
- "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core",
- "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers/platform/ios",
- "${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers",
- "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios",
- );
- IPHONEOS_DEPLOYMENT_TARGET = 13.0;
- LD_RUNPATH_SEARCH_PATHS = (
- /usr/lib/swift,
- "$(inherited)",
- );
- LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\"";
- MTL_ENABLE_DEBUG_INFO = YES;
- ONLY_ACTIVE_ARCH = YES;
- OTHER_CFLAGS = "$(inherited)";
- OTHER_CPLUSPLUSFLAGS = "$(inherited)";
- OTHER_LDFLAGS = (
- "$(inherited)",
- "-Wl",
- "-ld_classic",
- );
- REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
- SDKROOT = iphoneos;
- };
- name = Debug;
- };
- 83CBBA211A601CBA00E9B192 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_CXX_LANGUAGE_STANDARD = "c++17";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- COPY_PHASE_STRIP = YES;
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "$(inherited)",
- _LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION,
- );
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- HEADER_SEARCH_PATHS = (
- "$(inherited)",
- "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers",
- "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core",
- "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers/platform/ios",
- "${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers",
- "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios",
- );
- IPHONEOS_DEPLOYMENT_TARGET = 13.0;
- LD_RUNPATH_SEARCH_PATHS = (
- /usr/lib/swift,
- "$(inherited)",
- );
- LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\"";
- MTL_ENABLE_DEBUG_INFO = NO;
- OTHER_CFLAGS = "$(inherited)";
- OTHER_CPLUSPLUSFLAGS = "$(inherited)";
- OTHER_LDFLAGS = (
- "$(inherited)",
- "-Wl",
- "-ld_classic",
- );
- REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
- SDKROOT = iphoneos;
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Railbird" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 13B07F941A680F5B00A75B9A /* Debug */,
- 13B07F951A680F5B00A75B9A /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Railbird" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 83CBBA201A601CBA00E9B192 /* Debug */,
- 83CBBA211A601CBA00E9B192 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
- };
- rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
-}
diff --git a/ios/Railbird.xcodeproj/xcshareddata/xcschemes/Railbird.xcscheme b/ios/Railbird.xcodeproj/xcshareddata/xcschemes/Railbird.xcscheme
deleted file mode 100644
index d4396c3..0000000
--- a/ios/Railbird.xcodeproj/xcshareddata/xcschemes/Railbird.xcscheme
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ios/Railbird.xcworkspace/contents.xcworkspacedata b/ios/Railbird.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 32a4553..0000000
--- a/ios/Railbird.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
diff --git a/ios/Railbird.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Railbird.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
deleted file mode 100644
index 18d9810..0000000
--- a/ios/Railbird.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- IDEDidComputeMac32BitWarning
-
-
-
diff --git a/ios/Railbird/AppDelegate.h b/ios/Railbird/AppDelegate.h
deleted file mode 100644
index 1658a43..0000000
--- a/ios/Railbird/AppDelegate.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#import
-#import
-#import
-
-@interface AppDelegate : EXAppDelegateWrapper
-
-@end
diff --git a/ios/Railbird/AppDelegate.mm b/ios/Railbird/AppDelegate.mm
deleted file mode 100644
index 4f0acc9..0000000
--- a/ios/Railbird/AppDelegate.mm
+++ /dev/null
@@ -1,61 +0,0 @@
-#import "AppDelegate.h"
-#import
-
-#import
-#import
-
-@implementation AppDelegate
-
-- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
-{
-// @generated begin @react-native-firebase/app-didFinishLaunchingWithOptions - expo prebuild (DO NOT MODIFY) sync-ecd111c37e49fdd1ed6354203cd6b1e2a38cccda
-[FIRApp configure];
-// @generated end @react-native-firebase/app-didFinishLaunchingWithOptions
- self.moduleName = @"main";
-
- // You can add your custom initial props in the dictionary below.
- // They will be passed down to the ViewController used by React Native.
- self.initialProps = @{};
-
- return [super application:application didFinishLaunchingWithOptions:launchOptions];
-}
-
-- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
-{
-#if DEBUG
- return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@".expo/.virtual-metro-entry"];
-#else
- return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
-#endif
-}
-
-// Linking API
-- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options {
- return [super application:application openURL:url options:options] || [RCTLinkingManager application:application openURL:url options:options];
-}
-
-// Universal Links
-- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray> * _Nullable))restorationHandler {
- BOOL result = [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
- return [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler] || result;
-}
-
-// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
-- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
-{
- return [super application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
-}
-
-// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
-- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
-{
- return [super application:application didFailToRegisterForRemoteNotificationsWithError:error];
-}
-
-// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
-- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
-{
- return [super application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
-}
-
-@end
diff --git a/ios/Railbird/GoogleService-Info.plist b/ios/Railbird/GoogleService-Info.plist
deleted file mode 100644
index acd5cc1..0000000
--- a/ios/Railbird/GoogleService-Info.plist
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
- CLIENT_ID
- 735905563616-ncd8794ocn2f25qmnaascn88upfgokp0.apps.googleusercontent.com
- REVERSED_CLIENT_ID
- com.googleusercontent.apps.735905563616-ncd8794ocn2f25qmnaascn88upfgokp0
- API_KEY
- AIzaSyCaLY9PMvTCIAVOdxRVfe0IheHt2OQBWMo
- GCM_SENDER_ID
- 735905563616
- PLIST_VERSION
- 1
- BUNDLE_ID
- ai.railbird.railbird
- PROJECT_ID
- railbird-infra
- STORAGE_BUCKET
- railbird-infra.appspot.com
- IS_ADS_ENABLED
-
- IS_ANALYTICS_ENABLED
-
- IS_APPINVITE_ENABLED
-
- IS_GCM_ENABLED
-
- IS_SIGNIN_ENABLED
-
- GOOGLE_APP_ID
- 1:735905563616:ios:446a9a672875a91c702185
-
-
\ No newline at end of file
diff --git a/ios/Railbird/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png b/ios/Railbird/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png
deleted file mode 100644
index 2732229..0000000
Binary files a/ios/Railbird/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png and /dev/null differ
diff --git a/ios/Railbird/Images.xcassets/AppIcon.appiconset/Contents.json b/ios/Railbird/Images.xcassets/AppIcon.appiconset/Contents.json
deleted file mode 100644
index 90d8d4c..0000000
--- a/ios/Railbird/Images.xcassets/AppIcon.appiconset/Contents.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "images": [
- {
- "filename": "App-Icon-1024x1024@1x.png",
- "idiom": "universal",
- "platform": "ios",
- "size": "1024x1024"
- }
- ],
- "info": {
- "version": 1,
- "author": "expo"
- }
-}
\ No newline at end of file
diff --git a/ios/Railbird/Images.xcassets/Contents.json b/ios/Railbird/Images.xcassets/Contents.json
deleted file mode 100644
index ed285c2..0000000
--- a/ios/Railbird/Images.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info" : {
- "version" : 1,
- "author" : "expo"
- }
-}
diff --git a/ios/Railbird/Images.xcassets/SplashScreen.imageset/Contents.json b/ios/Railbird/Images.xcassets/SplashScreen.imageset/Contents.json
deleted file mode 100644
index 3cf8489..0000000
--- a/ios/Railbird/Images.xcassets/SplashScreen.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images": [
- {
- "idiom": "universal",
- "filename": "image.png",
- "scale": "1x"
- },
- {
- "idiom": "universal",
- "scale": "2x"
- },
- {
- "idiom": "universal",
- "scale": "3x"
- }
- ],
- "info": {
- "version": 1,
- "author": "expo"
- }
-}
\ No newline at end of file
diff --git a/ios/Railbird/Images.xcassets/SplashScreen.imageset/image.png b/ios/Railbird/Images.xcassets/SplashScreen.imageset/image.png
deleted file mode 100644
index c52c2c6..0000000
Binary files a/ios/Railbird/Images.xcassets/SplashScreen.imageset/image.png and /dev/null differ
diff --git a/ios/Railbird/Images.xcassets/SplashScreenBackground.imageset/Contents.json b/ios/Railbird/Images.xcassets/SplashScreenBackground.imageset/Contents.json
deleted file mode 100644
index 3cf8489..0000000
--- a/ios/Railbird/Images.xcassets/SplashScreenBackground.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images": [
- {
- "idiom": "universal",
- "filename": "image.png",
- "scale": "1x"
- },
- {
- "idiom": "universal",
- "scale": "2x"
- },
- {
- "idiom": "universal",
- "scale": "3x"
- }
- ],
- "info": {
- "version": 1,
- "author": "expo"
- }
-}
\ No newline at end of file
diff --git a/ios/Railbird/Images.xcassets/SplashScreenBackground.imageset/image.png b/ios/Railbird/Images.xcassets/SplashScreenBackground.imageset/image.png
deleted file mode 100644
index 33ddf20..0000000
Binary files a/ios/Railbird/Images.xcassets/SplashScreenBackground.imageset/image.png and /dev/null differ
diff --git a/ios/Railbird/Info.plist b/ios/Railbird/Info.plist
deleted file mode 100644
index 9e2405b..0000000
--- a/ios/Railbird/Info.plist
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
-
- CADisableMinimumFrameDurationOnPhone
-
- CFBundleDevelopmentRegion
- $(DEVELOPMENT_LANGUAGE)
- CFBundleDisplayName
- Railbird
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- $(PRODUCT_BUNDLE_PACKAGE_TYPE)
- CFBundleShortVersionString
- 1.0.0
- CFBundleSignature
- ????
- CFBundleURLTypes
-
-
- CFBundleURLSchemes
-
- ai.railbird.railbird
-
-
-
- CFBundleURLSchemes
-
- com.googleusercontent.apps.735905563616-ncd8794ocn2f25qmnaascn88upfgokp0
-
-
-
- CFBundleVersion
- 1
- LSRequiresIPhoneOS
-
- NSCameraUsageDescription
- $(PRODUCT_NAME) needs access to your Camera.
- NSAppTransportSecurity
-
- NSAllowsArbitraryLoads
-
- NSExceptionDomains
-
- localhost
-
- NSExceptionAllowsInsecureHTTPLoads
-
-
-
-
- UILaunchStoryboardName
- SplashScreen
- UIRequiredDeviceCapabilities
-
- armv7
-
- UIRequiresFullScreen
-
- UIStatusBarStyle
- UIStatusBarStyleDefault
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
-
- UISupportedInterfaceOrientations~ipad
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UIUserInterfaceStyle
- Light
- UIViewControllerBasedStatusBarAppearance
-
-
-
\ No newline at end of file
diff --git a/ios/Railbird/Railbird-Bridging-Header.h b/ios/Railbird/Railbird-Bridging-Header.h
deleted file mode 100644
index e11d920..0000000
--- a/ios/Railbird/Railbird-Bridging-Header.h
+++ /dev/null
@@ -1,3 +0,0 @@
-//
-// Use this file to import your target's public headers that you would like to expose to Swift.
-//
diff --git a/ios/Railbird/Railbird.entitlements b/ios/Railbird/Railbird.entitlements
deleted file mode 100644
index 018a6e2..0000000
--- a/ios/Railbird/Railbird.entitlements
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- aps-environment
- development
-
-
\ No newline at end of file
diff --git a/ios/Railbird/SplashScreen.storyboard b/ios/Railbird/SplashScreen.storyboard
deleted file mode 100644
index ed03a52..0000000
--- a/ios/Railbird/SplashScreen.storyboard
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/ios/Railbird/Supporting/Expo.plist b/ios/Railbird/Supporting/Expo.plist
deleted file mode 100644
index 64eaffa..0000000
--- a/ios/Railbird/Supporting/Expo.plist
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
- EXUpdatesCheckOnLaunch
- ALWAYS
- EXUpdatesEnabled
-
- EXUpdatesLaunchWaitMs
- 0
- EXUpdatesSDKVersion
- 49.0.0
-
-
\ No newline at end of file
diff --git a/ios/Railbird/main.m b/ios/Railbird/main.m
deleted file mode 100644
index 25181b6..0000000
--- a/ios/Railbird/main.m
+++ /dev/null
@@ -1,10 +0,0 @@
-#import
-
-#import "AppDelegate.h"
-
-int main(int argc, char * argv[]) {
- @autoreleasepool {
- return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
- }
-}
-
diff --git a/ios/Railbird/noop-file.swift b/ios/Railbird/noop-file.swift
deleted file mode 100644
index b2ffafb..0000000
--- a/ios/Railbird/noop-file.swift
+++ /dev/null
@@ -1,4 +0,0 @@
-//
-// @generated
-// A blank Swift file must be created for native modules with Swift files to work correctly.
-//
diff --git a/metro.config.js b/metro.config.js
deleted file mode 100644
index 13cc4fe..0000000
--- a/metro.config.js
+++ /dev/null
@@ -1,66 +0,0 @@
-const { getDefaultConfig } = require("expo/metro-config");
-const { mergeConfig } = require("@react-native/metro-config");
-const path = require("path");
-const escape = require("escape-string-regexp");
-const exclusionList = require("metro-config/src/defaults/exclusionList");
-const pak = require("./react-native-vision-camera/package/package.json");
-
-const root = path.resolve(__dirname, "./react-native-vision-camera/package");
-const modules = Object.keys({ ...pak.peerDependencies });
-const localPackagePath = path.resolve(
- __dirname,
- "./react-native-vision-camera/package/src/index",
-);
-
-/**
- * Metro configuration
- * https://facebook.github.io/metro/docs/configuration
- *
- * @type {import('metro-config').MetroConfig}
- */
-const originalConfig = {
- watchFolders: [root],
-
- // We need to make sure that only one version is loaded for peerDependencies
- // So we block them at the root, and alias them to the versions in example's node_modules
- resolver: {
- blacklistRE: exclusionList(
- modules.map(
- (m) =>
- new RegExp(`^${escape(path.join(root, "node_modules", m))}\\/.*$`),
- ),
- ),
-
- extraNodeModules: modules.reduce(
- (acc, name) => {
- acc[name] = path.join(__dirname, "node_modules", name);
- return acc;
- },
- { "react-native-vision-camera": localPackagePath },
- ),
- assetExts: undefined,
- sourceExts: undefined,
- },
-
- transformer: {
- getTransformOptions: async () => ({
- transform: {
- experimentalImportSupport: false,
- inlineRequires: true,
- },
- }),
- babelTransformerPath: require.resolve("react-native-svg-transformer"),
- },
-};
-
-const defaultConfig = getDefaultConfig(__dirname);
-
-originalConfig.resolver.assetExts = defaultConfig.resolver.assetExts.filter(
- (ext) => ext !== "svg",
-);
-originalConfig.resolver.sourceExts = [
- ...defaultConfig.resolver.sourceExts,
- "svg",
-];
-
-module.exports = mergeConfig(defaultConfig, originalConfig);
diff --git a/package.json b/package.json
index e8991b5..9313d7b 100644
--- a/package.json
+++ b/package.json
@@ -1,94 +1,25 @@
{
- "name": "railbird-rn",
- "version": "1.0.0",
- "scripts": {
- "start": "NODE_ENV=development && expo start",
- "start:android": "expo start --android",
- "start:ios": "expo start --ios",
- "android": "expo run:android",
- "android:dev": "node ./start.js development",
- "android:test": "node ./start.js test",
- "ios": "expo run:ios",
- "ios:dev": "NODE_ENV=development expo run:ios",
- "ios:prod": "NODE_ENV=test expo run:ios",
- "web": "expo start --web",
- "lint": "eslint . --ext .js,.ts,.tsx",
- "lint:fix": "eslint . --ext .ts,.tsx --fix",
- "test": "jest --forceExit"
- },
- "jest": {
- "preset": "jest-expo",
- "transformIgnorePatterns": [
- "node_modules/(?!((jest-)?react-native|@react-native(-community)?|expo(nent)?|@expo(nent)?/.*|@expo-google-fonts/.*|react-navigation|@react-navigation/.*|@unimodules/.*|unimodules|sentry-expo|native-base|react-native-svg|react-native-svg-charts|d3-path|expo-constants|expo-modules-core)/)"
- ]
- },
- "dependencies": {
- "@apollo/client": "^3.8.8",
- "@react-native-camera-roll/camera-roll": "^7.4.0",
- "@react-native-firebase/app": "^18.8.0",
- "@react-native-firebase/auth": "^18.8.0",
- "@react-navigation/bottom-tabs": "^6.5.11",
- "@react-navigation/native": "^6.1.9",
- "@react-navigation/native-stack": "^6.9.17",
- "@react-navigation/stack": "^6.3.21",
- "@types/react": "~18.2.14",
- "@typescript-eslint/eslint-plugin": "^6.17.0",
- "@typescript-eslint/parser": "^6.17.0",
- "apollo-link-timeout": "^4.0.0",
- "babel-plugin-inline-dotenv": "^1.7.0",
- "backoff": "^2.5.0",
- "d3-path": "^3.1.0",
- "d3-scale": "^1.0.6",
- "eslint": "^8.56.0",
- "eslint-plugin-react": "^7.33.2",
- "eslint-plugin-react-hooks": "^4.6.0",
- "eslint-plugin-react-native": "^4.1.0",
- "expo": "~49.0.15",
- "expo-build-properties": "^0.11.0",
- "expo-constants": "~14.4.2",
- "expo-splash-screen": "~0.20.5",
- "expo-status-bar": "~1.6.0",
- "graphql": "^16.8.1",
- "jest": "^29.2.1",
- "jest-expo": "~49.0.0",
- "railbird-gql": "git+https://dev.railbird.ai/railbird/railbird-gql.git#master",
- "react": "18.2.0",
- "react-native": "0.72.6",
- "react-native-dotenv": "^3.4.9",
- "react-native-dropdown-picker": "^5.4.6",
- "react-native-fs": "^2.20.0",
- "react-native-modal": "^13.0.1",
- "react-native-reanimated": "^3.6.2",
- "react-native-safe-area-context": "^4.8.2",
- "react-native-screens": "~3.22.0",
- "react-native-static-safe-area-insets": "^2.2.0",
- "react-native-svg": "13.9.0",
- "react-native-svg-charts": "^5.4.0",
- "typescript": "^5.3.3"
- },
- "devDependencies": {
- "@babel/core": "^7.20.0",
- "@react-native/metro-config": "^0.72.9",
- "@testing-library/jest-native": "^5.4.3",
- "@testing-library/react-native": "^12.4.3",
- "@types/d3-path": "^3.0.2",
- "@types/jest": "^29.5.11",
- "@types/react-native-svg-charts": "^5.0.16",
- "eslint-config-prettier": "^9.1.0",
- "metro-react-native-babel-preset": "^0.77.0",
- "prettier": "^3.2.5",
- "prettier-plugin-organize-imports": "^3.2.4",
- "react-native-svg-transformer": "^1.3.0",
- "typescript": "^5.3.3"
- },
- "private": true,
- "prettier": {
- "plugins": [
- "prettier-plugin-organize-imports"
- ]
- },
- "resolutions": {
- "@babel/core": "^7.20.2",
- "babel-loader": "^8.3.0"
- }
+ "name": "railbird-gql",
+ "version": "1.0.0",
+ "main": "dist/index.js",
+ "types": "dist/index.d.ts",
+ "scripts": {
+ "build": "tsc",
+ "prepublishOnly": "npm run build",
+ "postinstall": "tsc"
+ },
+ "repository": "ssh://gitea@dev.railbird.ai:1123/railbird/railbird-gql.git",
+ "author": "Ivan Malison ",
+ "license": "MIT",
+ "dependencies": {
+ "@apollo/client": "^3.9.2",
+ "@graphql-codegen/cli": "^5.0.0",
+ "@graphql-codegen/typescript": "^4.0.1",
+ "@graphql-codegen/typescript-operations": "^4.0.1",
+ "@graphql-codegen/typescript-react-apollo": "^4.2.0",
+ "graphql": "^16.8.1"
+ },
+ "devDependencies": {
+ "typescript": "^4.x"
+ }
}
diff --git a/react-native-vision-camera b/react-native-vision-camera
deleted file mode 160000
index 19bf300..0000000
--- a/react-native-vision-camera
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 19bf300bbefbe9c8244be3b1c8fbb7a9453ff8e2
diff --git a/src/App.tsx b/src/App.tsx
deleted file mode 100644
index 90c3150..0000000
--- a/src/App.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import React from "react";
-import { AuthProvider } from "./context";
-import { ClientProvider } from "./graphql/client";
-import AppNavigator from "./navigation/app-navigator";
-
-const App: React.FC = () => {
- return (
-
-
-
-
-
- );
-};
-
-export default function Root() {
- return (
-
-
-
- );
-}
diff --git a/src/assets/adaptive-icon.png b/src/assets/adaptive-icon.png
deleted file mode 100644
index 03d6f6b..0000000
Binary files a/src/assets/adaptive-icon.png and /dev/null differ
diff --git a/src/assets/icon.png b/src/assets/icon.png
deleted file mode 100644
index a0b1526..0000000
Binary files a/src/assets/icon.png and /dev/null differ
diff --git a/src/assets/icons/favicon.png b/src/assets/icons/favicon.png
deleted file mode 100644
index e75f697..0000000
Binary files a/src/assets/icons/favicon.png and /dev/null differ
diff --git a/src/assets/icons/location_pin.svg b/src/assets/icons/location_pin.svg
deleted file mode 100644
index 671dbe5..0000000
--- a/src/assets/icons/location_pin.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/src/assets/sample_session.png b/src/assets/sample_session.png
deleted file mode 100644
index 0f61e30..0000000
Binary files a/src/assets/sample_session.png and /dev/null differ
diff --git a/src/assets/splash.png b/src/assets/splash.png
deleted file mode 100644
index 0e89705..0000000
Binary files a/src/assets/splash.png and /dev/null differ
diff --git a/src/auth/firebase-auth.tsx b/src/auth/firebase-auth.tsx
deleted file mode 100644
index 1c1cb09..0000000
--- a/src/auth/firebase-auth.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-import auth, { FirebaseAuthTypes } from "@react-native-firebase/auth";
-import { Alert } from "react-native";
-
-export const handleSignInWithPhoneNumber = async (
- phoneNumber: string,
-): Promise => {
- if (!phoneNumber) {
- Alert.alert("Please enter a valid phone number with a country code");
- return;
- }
- try {
- const confirmation = await auth().signInWithPhoneNumber(phoneNumber);
- return confirmation;
- } catch (err) {
- console.warn(err);
- Alert.alert(
- "There was an error. Make sure you are using a country code (ex: +1 for US)",
- );
- }
-};
-
-export const confirmCode = async (
- confirm: FirebaseAuthTypes.ConfirmationResult,
- code: string,
-): Promise => {
- try {
- await confirm.confirm(code);
- } catch {
- Alert.alert("Invalid code, please try again.");
- }
-};
-
-export const createOrSignInUser = async (
- email: string,
- password: string,
- isSignUp: boolean,
-) => {
- try {
- if (isSignUp) {
- await auth().createUserWithEmailAndPassword(email, password);
- } else {
- await auth().signInWithEmailAndPassword(email, password);
- }
- } catch (err) {
- console.log(err);
- // TODO: #107 -- Correct error handling
- Alert.alert("There was an issue.", err.message);
- }
-};
-
-export const onAuthStateChanged = (
- // TODO: eslint not detecting ts?
- // eslint-disable-next-line no-unused-vars
- callback: (user: FirebaseAuthTypes.User | null) => void,
-) => {
- return auth().onAuthStateChanged(callback);
-};
-
-export const handleSignOut = (): Promise => {
- return auth().signOut();
-};
diff --git a/src/auth/index.ts b/src/auth/index.ts
deleted file mode 100644
index deee33a..0000000
--- a/src/auth/index.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import {
- confirmCode,
- handleSignInWithPhoneNumber,
- handleSignOut,
- onAuthStateChanged,
-} from "./firebase-auth";
-
-export {
- confirmCode,
- handleSignInWithPhoneNumber,
- handleSignOut,
- onAuthStateChanged,
-};
diff --git a/src/component/buttons/sign-out.tsx b/src/component/buttons/sign-out.tsx
deleted file mode 100644
index ea4e2b7..0000000
--- a/src/component/buttons/sign-out.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import React from "react";
-import { Button } from "react-native";
-import { useAuth } from "../../context";
-import { useAuthHeader } from "../../graphql/client";
-
-export default function SignOutButton(): React.JSX.Element {
- const { logOut } = useAuth();
- const { setAuthHeader } = useAuthHeader();
-
- const handleSignOut = async () => {
- await logOut();
- setAuthHeader({ key: "Authorization", value: "" });
- };
-
- return ;
-}
diff --git a/src/component/charts/bar-graph/bar-graph.tsx b/src/component/charts/bar-graph/bar-graph.tsx
deleted file mode 100644
index deffe93..0000000
--- a/src/component/charts/bar-graph/bar-graph.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-import React from "react";
-import { BarChart } from "react-native-svg-charts";
-
-import { CommonProps, withChartType } from "../graph-types";
-
-import { graphStyles } from "../chart-styles";
-import { CustomBars } from "../custom-bars";
-import { CustomGrid } from "../custom-grid";
-
-// TODO: #43 #31 separate PR will update useGraphData to take into account useCommonScale
-// eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
-const BarGraphBase: React.FC = ({ ...chartComponentProps }) => {
- const {
- yData,
- xValues,
- min,
- contentInset,
- numberOfTicks,
- spacingInner,
- spacingOuter,
- barColors,
- } = chartComponentProps;
-
- return (
- <>
- (item as unknown as { value: number }).value}
- contentInset={contentInset}
- spacingInner={spacingInner}
- spacingOuter={spacingOuter}
- >
-
-
-
- >
- );
-};
-
-const BarGraph = withChartType(BarGraphBase, "bar");
-
-export default BarGraph;
diff --git a/src/component/charts/bar.tsx b/src/component/charts/bar.tsx
deleted file mode 100644
index 0bf286a..0000000
--- a/src/component/charts/bar.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import React from "react";
-import { Path } from "react-native-svg";
-
-import { calculateBarOrigin, drawBarPath } from "./custom-bar-utils";
-import { ScaleBandType, ScaleLinearType } from "./graph-types";
-
-interface BarProps {
- scaleX: ScaleBandType;
- scaleY: ScaleLinearType;
- data: { value: number };
- barNumber: number;
- index: number;
- fill: string;
- barWidth: number;
- gap: number;
- roundedRadius: number;
-}
-
-export const Bar: React.FC = ({
- scaleX,
- scaleY,
- data,
- barNumber,
- index,
- fill,
- barWidth,
- gap,
- roundedRadius,
-}) => {
- const { xOrigin, yOrigin, height } = calculateBarOrigin({
- scaleX,
- scaleY,
- index,
- data,
- barNumber,
- barWidth,
- gap,
- });
-
- return (
-
- );
-};
diff --git a/src/component/charts/chart-label/chart-label.tsx b/src/component/charts/chart-label/chart-label.tsx
deleted file mode 100644
index f2518cf..0000000
--- a/src/component/charts/chart-label/chart-label.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-import React from "react";
-import { Text, View } from "react-native";
-
-import { chartLabel } from "../chart-styles";
-
-type Axis = "RIGHT" | "LEFT";
-
-interface YLabel {
- axis: Axis;
- displayName: string;
- color: string;
-}
-
-type ChartLabelProps = {
- title: string;
- yLabels: Array;
-};
-
-const renderLabels = (yLabels: Array) => {
- return yLabels.map((label) => (
-
-
-
- {label.displayName}
-
-
- ));
-};
-
-export default function ChartLabel({ title, yLabels }: ChartLabelProps) {
- return (
-
-
- {title}
-
- {renderLabels(yLabels)}
-
- );
-}
diff --git a/src/component/charts/chart-styles.ts b/src/component/charts/chart-styles.ts
deleted file mode 100644
index f26a9ac..0000000
--- a/src/component/charts/chart-styles.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-import { StyleSheet } from "react-native";
-
-import { colors, shadows } from "../../styles";
-
-export const graphStyles = StyleSheet.create({
- container: {
- backgroundColor: colors.panelWhite,
- borderColor: "black",
- borderRadius: 5,
- marginVertical: 10,
- marginHorizontal: 15,
- paddingTop: 15,
- paddingHorizontal: 15,
- ...shadows.standard,
- },
- rowContainer: { flexDirection: "row", padding: 10 },
- flex: { flex: 1 },
- yAxisLeftPadding: { paddingRight: 3 },
- yAxisRightPadding: { paddingLeft: 3 },
- yAxisFontStyle: { fontSize: 10, fill: "grey" },
- xAxisFontStyle: { fontSize: 12, fill: "black" },
- xAxisMarginTop: { marginTop: -15 },
- horizontalInset: { right: 10, left: 10 },
-});
-
-export const chartLabel = StyleSheet.create({
- titleRow: {
- flexDirection: "row",
- marginHorizontal: 10,
- },
- titleText: { fontWeight: "500" },
- labelOuterRow: {
- flexDirection: "row",
- flexWrap: "wrap",
- marginHorizontal: 10,
- },
- labelInnerRow: { flexDirection: "row", alignItems: "center", marginTop: 5 },
- labelColorBox: {
- height: 15,
- width: 15,
- borderRadius: 4,
- marginRight: 2,
- },
- labelTextMargin: { marginRight: 15 },
- labelText: { fontSize: 12 },
-});
diff --git a/src/component/charts/chart-view.tsx b/src/component/charts/chart-view.tsx
deleted file mode 100644
index 6fd53da..0000000
--- a/src/component/charts/chart-view.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import React from "react";
-import { StyleProp, View, ViewStyle } from "react-native";
-
-import { graphStyles } from "./chart-styles";
-
-interface ChartViewProps {
- style?: StyleProp;
- children: React.ReactNode;
- testID?: string;
-}
-
-const ChartView: React.FC = ({ children, style, testID }) => {
- return (
-
- {children}
-
- );
-};
-
-export default ChartView;
diff --git a/src/component/charts/container/chart-container.tsx b/src/component/charts/container/chart-container.tsx
deleted file mode 100644
index e1f5174..0000000
--- a/src/component/charts/container/chart-container.tsx
+++ /dev/null
@@ -1,102 +0,0 @@
-import * as scale from "d3-scale";
-import React from "react";
-import { View } from "react-native";
-import { XAxis, YAxis } from "react-native-svg-charts";
-import { graphStyles } from "../chart-styles";
-import ChartView from "../chart-view";
-import { chartDefaults } from "../graph-config";
-import { ChartContainerProps } from "../graph-types";
-import { computeYAxisConfig, useGraphData } from "../use-graph-data";
-computeYAxisConfig;
-
-// TODO: #43 #31 separate PR will update useGraphData to take into account useCommonScale
-// eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
-const ChartContainer: React.FC = ({
- ChartComponent,
- data,
- useCommonScale = false,
- testID,
- ...props
-}) => {
- if (!data || typeof data !== "object") {
- return null;
- } // TODO:#38
- const yAxisProps = computeYAxisConfig(data, props.yAxisProps || {});
-
- const {
- xValues,
- yData,
- yAxisLeftLabels,
- yAxisRightLabels,
- // Proper error/loading handling from useQueryHandler can work with this rule #38
- // eslint-disable-next-line react-hooks/rules-of-hooks
- } = useGraphData(data, yAxisProps, {
- includeColors: ChartComponent.chartType === "bar" ? false : true,
- ...props,
- });
-
- // TODO: #31 This could be done by the hook since it already handles spreading props.
- // Depiending on if we want a context pr}}ovider for Charts, that could be another way to handle it
- const chartComponentProps = {
- yData,
- xValues,
- lineStrokeWidth: chartDefaults.lineStrokeWidth,
- min: chartDefaults.min,
- contentInset: chartDefaults.contentInset,
- numberOfTicks: chartDefaults.numberOfTicks,
- spacingInner: chartDefaults.spacingInner,
- spacingOuter: chartDefaults.spacingOuter,
- barColors: chartDefaults.barColors,
- };
-
- return (
-
-
-
-
-
- index)} // TODO: #31 update when useGraphHook returns explicit display values
- formatLabel={(_, index) => xValues[index]}
- style={[graphStyles.xAxisMarginTop]}
- svg={graphStyles.xAxisFontStyle}
- {...(ChartComponent.chartType === "bar" && {
- scale: scale.scaleBand,
- })}
- {...(ChartComponent.chartType === "line" && {
- numberOfTicks: chartDefaults.numberOfTicks,
- contentInset: graphStyles.horizontalInset,
- })}
- />
-
-
-
-
- );
-};
-
-export default ChartContainer;
diff --git a/src/component/charts/custom-bar-utils.ts b/src/component/charts/custom-bar-utils.ts
deleted file mode 100644
index 8c6041c..0000000
--- a/src/component/charts/custom-bar-utils.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-import { path as d3 } from "d3-path";
-
-import { ScaleBandType, ScaleLinearType } from "./graph-types";
-
-type BarCalculationProps = {
- scaleX: ScaleBandType;
- scaleY: ScaleLinearType;
- data: { value: number };
- barNumber: number;
- index: number;
- barWidth: number;
- gap: number;
-};
-
-export function calculateBarOrigin({
- scaleX,
- scaleY,
- barWidth,
- data,
- index,
- barNumber,
- gap,
-}: BarCalculationProps): { xOrigin: number; yOrigin: number; height: number } {
- const firstBar = barNumber === 0;
- const xOrigin =
- scaleX(index) + (firstBar ? 0 : barWidth * barNumber + gap * barNumber);
- const yOrigin = scaleY(data.value);
- const height = scaleY(0) - yOrigin;
-
- return { xOrigin, yOrigin, height };
-}
-
-export function drawBarPath(
- xOrigin: number,
- yOrigin: number,
- barWidth: number,
- height: number,
- roundedRadius: number,
-): string {
- const path = d3();
- path.moveTo(xOrigin, yOrigin + height);
- path.lineTo(xOrigin, yOrigin + roundedRadius);
- path.arcTo(xOrigin, yOrigin, xOrigin + roundedRadius, yOrigin, roundedRadius);
- path.lineTo(xOrigin + barWidth - roundedRadius, yOrigin);
- path.arcTo(
- xOrigin + barWidth,
- yOrigin,
- xOrigin + barWidth,
- yOrigin + roundedRadius,
- roundedRadius,
- );
- path.lineTo(xOrigin + barWidth, yOrigin + height);
- path.lineTo(xOrigin, yOrigin + height);
- path.closePath();
-
- return path.toString();
-}
-
-export const calculateBarWidth = (
- bandwidth: number,
- combinedDataLength: number,
- gap: number,
-) => (bandwidth - gap * (combinedDataLength - 1)) / combinedDataLength;
diff --git a/src/component/charts/custom-bars.tsx b/src/component/charts/custom-bars.tsx
deleted file mode 100644
index ba3dd73..0000000
--- a/src/component/charts/custom-bars.tsx
+++ /dev/null
@@ -1,53 +0,0 @@
-import { Svg } from "react-native-svg";
-
-import { Bar } from "./bar";
-import { calculateBarWidth } from "./custom-bar-utils";
-import { ScaleBandType, ScaleLinearType } from "./graph-types";
-
-export interface CombinedData {
- data: { value: number }[];
- svg: { fill: string };
-}
-
-interface CustomBarsProps {
- x: ScaleBandType;
- y: ScaleLinearType;
- bandwidth: number;
- barColors: string[];
- xValues: unknown[]; // TODO: update this value when this data type is defined
- barData: CombinedData[];
- gap: number;
- roundedRadius: number;
-}
-
-export const CustomBars: React.FC> = ({
- x: scaleX,
- y: scaleY,
- bandwidth,
- barData,
- xValues,
- barColors,
- gap = 2,
- roundedRadius = 4,
-}) => {
- const barWidth = calculateBarWidth(bandwidth, barData.length, gap);
-
- return xValues.map((_, index) => (
-
- ));
-};
diff --git a/src/component/charts/custom-grid.tsx b/src/component/charts/custom-grid.tsx
deleted file mode 100644
index e513dc3..0000000
--- a/src/component/charts/custom-grid.tsx
+++ /dev/null
@@ -1,107 +0,0 @@
-import React from "react";
-import { G, Line } from "react-native-svg";
-import { colors } from "../../styles";
-import { ScaleBandType, ScaleLinearType } from "./graph-types";
-
-interface CustomGridProps {
- x: ScaleBandType;
- y: ScaleLinearType;
- ticks: Array;
- includeVertical?: boolean;
- xTicks?: Array;
-}
-/**
- * CustomGrid Component
- *
- * This component is used within a react-native-svg-chart component to render grid lines.
- *
- * @param {ScaleBandType} x - X-axis scale function, received from the parent chart component.
- * @param {ScaleLinearType} y - Y-axis scale function, received from the parent chart component.
- * @param {Array} ticks - Y-axis tick values for horizontal lines, received from the parent.
- * @param {boolean} [includeVertical=false] - Enables experimental vertical grid lines.
- * @param {Array} [xTicks] - X-axis tick values for vertical lines, necessary if `includeVertical` is true.
- *
- * Behavior:
- * - Renders horizontal grid lines based on the `ticks` & scale functions provided by the parent chart component.
- * - Vertical grid lines are experimental and can be enabled with `includeVertical` set to true.
- * However, their scaling and positioning may not be accurate relative to XAxis component (if used).
- *
- * Usage:
- *
- *
- *
- *
- * Note: Use `includeVertical` cautiously; vertical lines are not fully developed.
- */
-export const CustomGrid: React.FC> = ({
- x,
- y,
- ticks,
- xTicks,
- includeVertical = false,
-}) => {
- const [firstTick, ...remainingTicks] = ticks;
- const dashArray = [1, 3];
- const strokeSolidWidth = 0.2;
- const strokeSolidColor = colors.bgBlack;
- const strokeDashWidth = 1;
- const strokeDashColor = colors.lightGrey;
-
- const renderHorizontalLine = (
- tick: number,
- stroke: string,
- strokeWidth: number,
- dashArray?: number[],
- ) => (
-
- );
-
- const topY = y(Math.max(...ticks));
- const bottomY = y(Math.min(...ticks));
- const renderVerticalLine = (
- tick: number,
- stroke: string,
- strokeWidth: number,
- dashArray?: number[],
- ) => {
- return (
-
- );
- };
-
- return (
-
- {renderHorizontalLine(firstTick, strokeSolidColor, strokeSolidWidth)}
- {remainingTicks.map((tick) =>
- renderHorizontalLine(tick, strokeDashColor, strokeDashWidth, dashArray),
- )}
- {includeVertical &&
- xTicks.map((_, index) =>
- renderVerticalLine(
- index,
- strokeDashColor,
- strokeDashWidth,
- dashArray,
- ),
- )}
-
- );
-};
diff --git a/src/component/charts/graph-config.ts b/src/component/charts/graph-config.ts
deleted file mode 100644
index 7d3643f..0000000
--- a/src/component/charts/graph-config.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-// TODO: Style values should be moved to styles
-// non-style config can live here as chartDefaults
-export const chartDefaults = {
- height: 300,
- spacingInner: 0.3,
- spacingOuter: 0.2,
- contentInset: { top: 30, bottom: 30 },
- numberOfTicks: 6,
- min: 0,
- barColors: ["#598EBB", "#F2D4BC", "#DB7878"],
- includeColors: true,
- lineStrokeWidth: 2,
-};
diff --git a/src/component/charts/graph-types.ts b/src/component/charts/graph-types.ts
deleted file mode 100644
index 80b7571..0000000
--- a/src/component/charts/graph-types.ts
+++ /dev/null
@@ -1,117 +0,0 @@
-import { ScaleBand, ScaleLinear } from "d3-scale";
-
-export type ScaleLinearType = ScaleLinear;
-export type ScaleBandType = ScaleBand;
-
-export interface YAxisData {
- key: string; // string value for ChartLabel and useGraphData
- values: Array;
- // including this code only for review --
- // do we prefer the idea of passing label formatting from the data or in the component?
- // generic function type, specific usage of value varies
- // eslint-disable-next-line no-unused-vars
- formatLabel?: (value: number) => string;
-}
-
-export type XValue = string | number;
-
-export interface XYValues {
- xValues: Array;
- yValues: Array;
-}
-
-export interface YAxisProps {
- maxLeftYAxisValue?: number;
- maxRightYAxisValue?: number;
- selectedLeftYAxisLabel?: string;
- selectedRightYAxisLabel?: string;
- // generic function type, specific usage of value varies
- // eslint-disable-next-line no-unused-vars
- formatRightYAxisLabel?: (value: string) => string;
- // generic function type, specific usage of value varies
- // eslint-disable-next-line no-unused-vars
- formatLeftYAxisLabel?: (value: string) => string;
-}
-
-export interface ScaledAndStyledYDataItem {
- data: { value: number }[];
- svg: { fill: string; stroke: string };
-}
-export type ScaledAndStyledYData = ScaledAndStyledYDataItem[];
-
-export interface GraphProps {
- data: XYValues;
- includeColors?: boolean;
- height?: number;
- spacingInner?: number;
- spacingOuter?: number;
- contentInset?: { top: number; bottom: number };
- min?: number;
- numberOfTicks?: number;
- barColors?: Array;
- lineStrokeWidth?: number;
- useCommonScale?: boolean;
- yAxisProps?: YAxisProps;
-}
-/**
- * Common properties for graph render components.
- *
- * @interface CommonProps
- * @property {GraphData} data - The primary data source for the graph.
- * @property {number} [height] - Optional. The height of the graph.
- * @property {number} [spacingInner] - Optional. The inner spacing between elements in the graph.
- * @property {number} [spacingOuter] - Optional. The outer spacing of the elements in the graph.
- * @property {{ top: number; bottom: number }} [contentInset] - Optional. Insets for the content of the graph.
- * @property {number} [min] - Optional. The minimum value represented on the graph.
- * @property {number} [numberOfTicks] - Optional. The number of tick marks along the axis.
- * @property {Array} [barColors] - Optional. Colors used for bars in the graph.
- * @property {boolean} [useCommonScale] - Optional. Flag to use a common scale across multiple components.
- * @property {YAxisProps} [yAxisProps] - Optional. Properties for the Y-axis of the graph.
- * @property {string} [testID] - Optional. Identifier for testing purposes.
- */
-export interface CommonProps {
- height?: number;
- spacingInner?: number;
- spacingOuter?: number;
- contentInset?: { top: number; bottom: number };
- min?: number;
- numberOfTicks?: number;
- barColors?: Array;
- lineStrokeWidth?: number;
- useCommonScale?: boolean;
- yAxisProps?: YAxisProps;
- testID?: string;
- yData?: { data: { value: number }[]; svg: { fill: string } }[];
- xValues?: XValue[];
-}
-
-type ChartComponentWithStatic = React.ComponentType & {
- chartType?: string;
-};
-
-/**
- * Common properties for graph render components.
- *
- * @interface ChartContainerProps
- * @property {React.ComponentType} ChartComponent - The graph component to render
- */
-export interface ChartContainerProps extends CommonProps {
- ChartComponent: ChartComponentWithStatic;
- data: XYValues;
-}
-
-/**
- * Enhances a component with a `chartType` property.
- *
- * @param Component - The component to enhance.
- * @param chartType - The type of chart.
- * @returns The enhanced component.
- */
-export function withChartType>(
- Component: T,
- chartType: string,
-): T {
- (Component as React.ComponentType & { chartType?: string }).chartType =
- chartType;
- return Component;
-}
diff --git a/src/component/charts/graph-utils.tsx b/src/component/charts/graph-utils.tsx
deleted file mode 100644
index 411ea99..0000000
--- a/src/component/charts/graph-utils.tsx
+++ /dev/null
@@ -1,115 +0,0 @@
-import {
- ScaledAndStyledYData,
- XValue,
- XYValues,
- YAxisData,
- YAxisProps,
-} from "./graph-types";
-
-interface PrepareGraphDataReturn {
- yData: ScaledAndStyledYData;
- yAxisLeftLabels: YAxisData;
- yAxisRightLabels: YAxisData;
- xValues: XValue[];
-}
-
-export const prepareGraphData = (
- xyData: XYValues,
- yAxisProps: YAxisProps,
- includeColors: boolean,
- barColors: string[],
-): PrepareGraphDataReturn => {
- const { leftAxisIndex, rightAxisIndex } = findAxisIndices(
- xyData.yValues,
- yAxisProps.selectedLeftYAxisLabel,
- yAxisProps.selectedRightYAxisLabel,
- );
-
- const yData = createYData(
- xyData.yValues,
- rightAxisIndex,
- yAxisProps.maxRightYAxisValue,
- yAxisProps.maxLeftYAxisValue,
- includeColors,
- barColors,
- );
-
- // Ensure yAxisLeftLabels and yAxisRightLabels are correctly defined
- const yAxisLeftLabels =
- leftAxisIndex >= 0
- ? xyData.yValues[leftAxisIndex]
- : { key: "", values: [] };
- const yAxisRightLabels =
- rightAxisIndex >= 0
- ? xyData.yValues[rightAxisIndex]
- : { key: "", values: [] };
-
- return {
- yData,
- yAxisLeftLabels,
- yAxisRightLabels,
- xValues: xyData.xValues,
- };
-};
-
-const scaleValues = (
- yAxis,
- index,
- rightAxisIndex,
- maxRightYAxisValue,
- maxLeftYAxisValue,
-) => {
- const maxValue =
- index === rightAxisIndex ? maxRightYAxisValue : maxLeftYAxisValue;
- return yAxis.values.map((value) => (value / maxValue) * 100);
-};
-
-const getStrokeColor = (index, includeColors, barColors) =>
- includeColors ? barColors[index % barColors.length] : "transparent";
-
-/**
- * Finds the indices of the datasets in `yValues` that match the specified left and right Y-axis labels.
- *
- * Iterates through the `yValues` , searching for objects whose `key` matches
- * `selectedLeftYAxisLabel` and `selectedRightYAxisLabel`. It's used to identify which datasets
- * should be plotted against the left and right Y-axes in a graph. If a match is not found for a label,
- * the corresponding axis index is set to `-1`.
- */
-const findAxisIndices = (
- yValues: Array<{ key: string; values: Array }>,
- selectedLeftYAxisLabel?: string,
- selectedRightYAxisLabel?: string,
-): { leftAxisIndex: number; rightAxisIndex: number } => ({
- leftAxisIndex: yValues.findIndex((y) => y.key === selectedLeftYAxisLabel),
- rightAxisIndex: yValues.findIndex((y) => y.key === selectedRightYAxisLabel),
-});
-
-/**
- * Transforms Y-axis data by scaling values and applying stroke colors for visualization.
- *
- * This function takes an array of Y-axis data objects, each with a key and an array of numeric values.
- * It scales these values relative to specified maximum values for the left and right Y-axes and
- * applies coloring based on the includeColors flag and the provided barColors array.
- */
-const createYData = (
- yValues: YAxisData[],
- rightAxisIndex: number,
- maxRightYAxisValue: number,
- maxLeftYAxisValue: number,
- includeColors: boolean,
- barColors: string[],
-): ScaledAndStyledYData =>
- yValues.map((yAxis, index) => {
- const scaledValues = scaleValues(
- yAxis,
- index,
- rightAxisIndex,
- maxRightYAxisValue,
- maxLeftYAxisValue,
- );
- const strokeColor = getStrokeColor(index, includeColors, barColors);
- return {
- data: scaledValues.map((value) => ({ value })),
- svg: { fill: "transparent", stroke: strokeColor },
- };
- });
diff --git a/src/component/charts/line-graph/line-graph.tsx b/src/component/charts/line-graph/line-graph.tsx
deleted file mode 100644
index 44f7e58..0000000
--- a/src/component/charts/line-graph/line-graph.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import * as shape from "d3-shape";
-import React from "react";
-import { LineChart } from "react-native-svg-charts";
-import { graphStyles } from "../chart-styles";
-import { CustomGrid } from "../custom-grid";
-import { CommonProps, withChartType } from "../graph-types";
-
-// TODO: #43 #31 separate PR will update useGraphData to take into account useCommonScale
-// eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
-const LineGraphBase: React.FC = ({ ...chartComponentProps }) => {
- const { yData, xValues, lineStrokeWidth, min, contentInset, numberOfTicks } =
- chartComponentProps;
- return (
- <>
- (item as unknown as { value: number }).value}
- xAccessor={({ index }) => xValues[index] as number}
- gridMin={min}
- contentInset={contentInset}
- numberOfTicks={numberOfTicks}
- >
-
-
- >
- );
-};
-
-const LineGraph = withChartType(LineGraphBase, "line");
-
-export default LineGraph;
diff --git a/src/component/charts/use-graph-data.ts b/src/component/charts/use-graph-data.ts
deleted file mode 100644
index cdb5e25..0000000
--- a/src/component/charts/use-graph-data.ts
+++ /dev/null
@@ -1,89 +0,0 @@
-import { useMemo } from "react";
-
-import { chartDefaults } from "./graph-config";
-import {
- GraphProps,
- ScaledAndStyledYData,
- XValue,
- XYValues,
- YAxisData,
- YAxisProps,
-} from "./graph-types";
-import { prepareGraphData } from "./graph-utils";
-
-export interface UseGraphDataReturn {
- xValues: Array;
- yData: ScaledAndStyledYData;
- yAxisLeftLabels: YAxisData;
- yAxisRightLabels: YAxisData;
-}
-
-export const useGraphData = (
- xyData: XYValues,
- yAxisProps: YAxisProps,
- props: Partial,
-): UseGraphDataReturn => {
- const { yData, yAxisLeftLabels, yAxisRightLabels, xValues } = useMemo(() => {
- return prepareGraphData(
- xyData,
- yAxisProps,
- chartDefaults.includeColors,
- chartDefaults.barColors,
- );
- }, [xyData]);
- return {
- xValues,
- yData,
- yAxisLeftLabels,
- yAxisRightLabels,
- };
-};
-
-function computeAxisMaxValues(xyData: XYValues): {
- maxLeft: number;
- maxRight: number | undefined;
-} {
- const maxLeft = Math.max(...(xyData.yValues[0]?.values ?? [0]));
- const maxRight =
- xyData.yValues.length > 1
- ? Math.max(...(xyData.yValues[1]?.values ?? []))
- : undefined;
- return { maxLeft, maxRight };
-}
-
-function selectAxisLabels(xyData: XYValues): {
- leftLabel: string;
- rightLabel: string | undefined;
-} {
- const leftLabel = xyData.yValues[0]?.key;
- const rightLabel =
- xyData.yValues.length > 1 ? xyData.yValues[1]?.key : undefined;
- return { leftLabel, rightLabel };
-}
-
-function applyDefaultYAxisProps(
- defaultProps: Partial,
-): Partial {
- return {
- formatRightYAxisLabel: defaultProps.formatRightYAxisLabel,
- formatLeftYAxisLabel: defaultProps.formatLeftYAxisLabel,
- };
-}
-
-export function computeYAxisConfig(
- xyData: XYValues,
- yAxisPropsDefault: Partial,
-): YAxisProps {
- const { maxLeft, maxRight } = computeAxisMaxValues(xyData);
- const { leftLabel, rightLabel } = selectAxisLabels(xyData);
- const defaultYAxisProps = applyDefaultYAxisProps(yAxisPropsDefault);
-
- return {
- maxLeftYAxisValue: maxLeft,
- maxRightYAxisValue: maxRight,
- selectedLeftYAxisLabel: leftLabel,
- selectedRightYAxisLabel: rightLabel,
- ...defaultYAxisProps,
- ...yAxisPropsDefault,
- };
-}
diff --git a/src/component/display-shot.tsx b/src/component/display-shot.tsx
deleted file mode 100644
index 5c4d1e6..0000000
--- a/src/component/display-shot.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import { Text, View } from "react-native";
-
-function DisplayShots({ data }) {
- const renderShots = (shots) => {
- return shots.map((shot) => (
-
- {shot.id}
-
- ));
- };
- return renderShots(data);
-}
-
-export default DisplayShots;
diff --git a/src/component/headers/back-header.tsx b/src/component/headers/back-header.tsx
deleted file mode 100644
index 22b0cd8..0000000
--- a/src/component/headers/back-header.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-import { NavigationProp } from "@react-navigation/native";
-import React from "react";
-import { StyleSheet, Text, TouchableOpacity, View } from "react-native";
-import { shadows } from "../../styles";
-
-type BackHeaderProps = {
- navigation: NavigationProp; // TODO: #135 should use a RootStackParamList
- title: string;
-};
-
-const BackHeader: React.FC = ({ navigation, title }) => {
- return (
-
- navigation.goBack()}
- accessibilityLabel="Go back"
- accessibilityRole="button"
- >
- {`< ${title}`}
-
-
- );
-};
-
-const styles = StyleSheet.create({
- container: {
- backgroundColor: "white",
- zIndex: 100,
- ...shadows.standard,
- },
- button: {
- padding: 10,
- },
- text: {
- fontSize: 16,
- fontWeight: "500",
- color: "black",
- },
-});
-
-export default BackHeader;
diff --git a/src/component/image/image-with-fallback.tsx b/src/component/image/image-with-fallback.tsx
deleted file mode 100644
index 57aac20..0000000
--- a/src/component/image/image-with-fallback.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import React, { memo, useState } from "react";
-import { Image, ImageStyle, StyleProp } from "react-native";
-
-type ImageWithFallbackProps = {
- source: { uri: string };
- fallbackSource: { uri: string };
- style?: StyleProp;
-};
-/**
- * A React component that displays an image with a fallback option.
- * If the primary image fails to load, it will display a fallback image instead.
- *
- * @param {Object} source - The source of the primary image.
- * @param {Object} fallbackSource - The source of the fallback image. Should be an asset rather than loaded from an endpoint.
- * @param {StyleProp} style - Optional. The style to apply to the image. It can be any valid React Native style object.
- * @returns {React.ReactElement} A React element representing the image with fallback.
- */
-const ImageWithFallback: React.FC = memo(
- ({ source, fallbackSource, style }) => {
- const [imageSource, setImageSource] = useState(source);
-
- const handleError = () => {
- if (fallbackSource) {
- setImageSource(fallbackSource);
- }
- };
-
- return ;
- },
-);
-
-ImageWithFallback.displayName = "ImageWithFallback";
-
-export default ImageWithFallback;
diff --git a/src/component/recording/camera.tsx b/src/component/recording/camera.tsx
deleted file mode 100644
index eca3a42..0000000
--- a/src/component/recording/camera.tsx
+++ /dev/null
@@ -1,295 +0,0 @@
-import { ApolloClient, useApolloClient } from "@apollo/client";
-import { useIsFocused } from "@react-navigation/native";
-import * as gql from "railbird-gql";
-import React, { useCallback, useEffect, useRef, useState } from "react";
-import { Button, StyleSheet, Text, View } from "react-native";
-import * as RNFS from "react-native-fs";
-import {
- Camera,
- CameraRuntimeError,
- Orientation,
- PhotoFile,
- VideoFile,
- useCameraDevice,
- useCameraFormat,
- useCameraPermission,
-} from "react-native-vision-camera";
-import { RecordingButton } from "./capture-button";
-import { useIsForeground } from "./is-foreground";
-
-type Dictionary = {
- // eslint-disable-next-line no-unused-vars
- [key in KeyType]: ValueType;
-};
-
-class StreamUploadManager {
- client: ApolloClient;
- videoId: number;
- nextUploadIdToRequest: number = 0;
- highestUploadLinkObtained: number = -1;
- prefetchedUploadLinks: Dictionary = {};
- uploadQueue: Array<() => Promise> = [];
- isUploading: boolean = false;
-
- constructor(client: ApolloClient, videoId: number) {
- this.client = client;
- this.videoId = videoId;
- }
-
- enqueueUploadTask(task: () => Promise) {
- this.uploadQueue.push(task);
- this.processUploadQueue();
- }
-
- async processUploadQueue() {
- if (this.isUploading || this.uploadQueue.length === 0) {
- return;
- }
- this.isUploading = true;
- const task = this.uploadQueue.shift();
- try {
- if (task) {
- await task();
- }
- } catch (error) {
- console.error("Error processing upload task", error);
- } finally {
- this.isUploading = false;
- this.processUploadQueue();
- }
- }
-
- async uploadChunk({ filepath, index }: { filepath: string; index: number }) {
- this.enqueueUploadTask(async () => {
- const uploadUrl = await this.getUploadLink(index);
- const uploadRequest = RNFS.uploadFiles({
- toUrl: uploadUrl,
- // @ts-ignore
- files: [{ filepath: filepath }],
- method: "PUT",
- binaryStreamOnly: true,
- headers: {
- "Content-Type": "application/octet-stream",
- },
- begin: (res) => {
- console.log("Start upload", res);
- },
- progress: (res) => {
- console.log("Uploading", res);
- },
- });
- console.log(JSON.stringify(uploadRequest));
- const result = await uploadRequest.promise;
- if (result.statusCode === 200) {
- console.log(`${filepath} Uploaded`);
- } else {
- console.error("SERVER ERROR");
- }
- });
- }
-
- async getUploadLink(chunkId: number): Promise {
- if (this.prefetchedUploadLinks[chunkId]) {
- return this.prefetchedUploadLinks[chunkId];
- }
- return this.requestUploadLink(chunkId);
- }
-
- async requestUploadLink(chunkId: number): Promise {
- console.log(`Requesting upload link for chunk ${chunkId}`);
- const result = await this.client.mutate({
- mutation: gql.GetUploadLinkDocument,
- variables: { videoId: this.videoId, segmentIndex: chunkId },
- });
- this.prefetchedUploadLinks[chunkId] = result.data.getUploadLink.uploadUrl;
- return result.data.getUploadLink.uploadUrl;
- }
-}
-
-export default function CameraScreen({
- route,
- navigation,
-}): React.ReactElement {
- const apolloClient = useApolloClient();
- const { params } = route;
- const [createUpload, { data, loading, error }] =
- gql.useCreateUploadStreamMutation();
-
- const [uploadManager, setUploadManager] = useState(null);
-
- useEffect(() => {
- if (
- data &&
- data.createUploadStream &&
- data.createUploadStream.videoId &&
- !uploadManager
- ) {
- const newVideoId = data.createUploadStream.videoId;
- console.log(`VideoId: ${newVideoId}`);
- setUploadManager(new StreamUploadManager(apolloClient, newVideoId));
- }
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [data, uploadManager]);
-
- const camera = useRef(null);
- const { hasPermission } = useCameraPermission();
- const [isCameraInitialized, setIsCameraInitialized] =
- useState(false);
-
- const isForeground = useIsForeground();
- const isFocused = useIsFocused();
- const isActive = isForeground && isFocused;
-
- const onError = useCallback((error: CameraRuntimeError) => {
- console.error(error);
- }, []);
-
- const onInitialized = useCallback(() => {
- setIsCameraInitialized(true);
- createUpload({
- variables: { videoName: params?.sessionName ?? "New session" },
- });
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, []);
-
- const onMediaCaptured = useCallback(
- (media: PhotoFile | VideoFile) => {
- console.log(`Media captured! ${JSON.stringify(media)}`);
- navigation.push("SaveRecording", {
- videoId: uploadManager?.videoId,
- ...params,
- });
- },
- // eslint-disable-next-line react-hooks/exhaustive-deps
- [uploadManager, navigation, params],
- );
-
- const onVideoChunkReady = useCallback(
- (event) => {
- console.log(
- `Chunk ready in react-native ${JSON.stringify(event.nativeEvent)}`,
- );
- uploadManager.uploadChunk(event.nativeEvent);
- },
- [uploadManager],
- );
-
- const device = useCameraDevice("back");
- const format = useCameraFormat(device, [
- { videoResolution: { width: 1920, height: 1080 } },
- { fps: 30 },
- ]);
-
- // TODO(#60): setOrientation should be called when changes are detected
- const [orientation, setOrientation] = useState("portrait");
-
- const toggleOrientation = () => {
- setOrientation((currentOrientation) =>
- currentOrientation === "landscape-left" ? "portrait" : "landscape-left",
- );
- };
-
- // Replace with error handling
- if (device === null) {
- // hasPermission redundant here - user should not be able to launch camera without permissions
- return (
-
- Camera not available. Does user have permissions: {hasPermission}
-
- );
- }
- return (
- hasPermission && (
-
-
-
-
-
-
-
-
-
- )
- );
-}
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- backgroundColor: "black",
- },
- captureButton: {
- position: "absolute",
- alignSelf: "center",
- },
- button: {
- position: "absolute",
- alignSelf: "center",
- },
- togglePortrait: {
- bottom: 110, // needs refined
- },
- toggleLandscape: {
- transform: [{ rotate: "90deg" }],
- bottom: "43%", // Should come from SafeAreaProvider, hardcoded right now, should roughly appear above the button
- left: 50, // needs refined
- },
- portrait: {
- bottom: 20, // needs refined
- },
- landscape: {
- bottom: "40%", // Should come from SafeAreaProvider
- left: 20, // needs refined
- },
- goBackPortrait: {
- position: "absolute",
- top: 20, // or wherever you want the button to be positioned in portrait
- left: 20, // or wherever you want the button to be positioned in portrait
- },
- goBackLandscape: {
- position: "absolute",
- top: 40,
- right: 20,
- transform: [{ rotate: "90deg" }],
- },
-});
diff --git a/src/component/recording/capture-button.tsx b/src/component/recording/capture-button.tsx
deleted file mode 100644
index 2acf471..0000000
--- a/src/component/recording/capture-button.tsx
+++ /dev/null
@@ -1,127 +0,0 @@
-import React, { useCallback, useRef, useState } from "react";
-import {
- StyleProp,
- StyleSheet,
- TouchableOpacity,
- View,
- ViewStyle,
-} from "react-native";
-// @ts-ignore
-import { Camera } from "react-native-vision-camera/lib/typescript/Camera";
-// @ts-ignore
-import { VideoFile } from "react-native-vision-camera/lib/typescript/VideoFile";
-
-interface RecordingButtonProps {
- style: StyleProp;
- camera: React.RefObject;
- // eslint-disable-next-line no-unused-vars
- onMediaCaptured: (media: VideoFile, mediaType: string) => void;
- enabled: boolean;
- orientation: string;
-}
-
-export const RecordingButton: React.FC = ({
- style,
- camera,
- onMediaCaptured,
- enabled,
- orientation,
-}) => {
- const isRecording = useRef(false);
- // UseRef won't trigger a re-render
- const [, setRecordingState] = useState(false);
-
- const onStoppedRecording = useCallback(() => {
- isRecording.current = false;
- setRecordingState(false);
- console.log("stopped recording video!");
- }, []);
-
- const stopRecording = useCallback(async () => {
- try {
- if (camera.current === null) {
- throw new Error("Camera ref is null!"); // Error handling could be more graceful
- }
- console.log("calling stopRecording()...");
- await camera.current.stopRecording();
- console.log("called stopRecording()!");
- } catch (e) {
- console.error("failed to stop recording!", e);
- }
- }, [camera]);
-
- const startRecording = useCallback(() => {
- try {
- if (camera.current === null) {
- throw new Error("Camera ref is null!"); // Error handling could be more graceful
- }
- console.log("calling startRecording()...");
- console.log(`with ${orientation}`);
- camera.current.startRecording({
- onRecordingError: (error) => {
- console.error("Recording failed!", error);
- onStoppedRecording();
- },
- onRecordingFinished: async (video) => {
- onMediaCaptured(video, "video");
- onStoppedRecording();
- },
- orientation: orientation,
- });
- console.log("called startRecording()!");
- isRecording.current = true;
- setRecordingState(true);
- } catch (e) {
- console.error("failed to start recording!", e, "camera");
- }
- }, [camera, onMediaCaptured, onStoppedRecording, orientation]);
-
- const handlePress = () => {
- if (isRecording.current) {
- stopRecording();
- } else {
- startRecording();
- }
- };
-
- return (
-
-
-
- );
-};
-
-const styles = StyleSheet.create({
- captureButton: {
- height: 80,
- width: 80,
- borderRadius: 40,
- borderWidth: 3,
- borderColor: "white",
- backgroundColor: "transparent",
- justifyContent: "center",
- alignItems: "center",
- },
- innerCircle: {
- height: 70,
- width: 70,
- borderRadius: 35,
- backgroundColor: "#FF3B30",
- },
- recordingSquare: {
- height: 40,
- width: 40,
- borderRadius: 10,
- backgroundColor: "#FF3B30",
- },
-});
-
-export default RecordingButton;
diff --git a/src/component/recording/constants.ts b/src/component/recording/constants.ts
deleted file mode 100644
index 815593a..0000000
--- a/src/component/recording/constants.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { Dimensions, Platform } from "react-native";
-import StaticSafeAreaInsets from "react-native-static-safe-area-insets";
-
-export const CONTENT_SPACING = 15;
-
-const SAFE_BOTTOM =
- Platform.select({
- ios: StaticSafeAreaInsets.safeAreaInsetsBottom,
- }) ?? 0;
-
-export const SAFE_AREA_PADDING = {
- paddingLeft: StaticSafeAreaInsets.safeAreaInsetsLeft + CONTENT_SPACING,
- paddingTop: StaticSafeAreaInsets.safeAreaInsetsTop + CONTENT_SPACING,
- paddingRight: StaticSafeAreaInsets.safeAreaInsetsRight + CONTENT_SPACING,
- paddingBottom: SAFE_BOTTOM + CONTENT_SPACING,
-};
-
-// The maximum zoom _factor_ you should be able to zoom in
-export const MAX_ZOOM_FACTOR = 10;
-
-export const SCREEN_WIDTH = Dimensions.get("window").width;
-export const SCREEN_HEIGHT = Platform.select({
- android:
- Dimensions.get("screen").height - StaticSafeAreaInsets.safeAreaInsetsBottom,
- ios: Dimensions.get("window").height,
-}) as number;
-
-// Capture Button
-export const CAPTURE_BUTTON_SIZE = 78;
-
-// Control Button like Flash
-export const CONTROL_BUTTON_SIZE = 40;
diff --git a/src/component/recording/is-foreground.tsx b/src/component/recording/is-foreground.tsx
deleted file mode 100644
index 5e28ce0..0000000
--- a/src/component/recording/is-foreground.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { useEffect, useState } from "react";
-import { AppState, AppStateStatus } from "react-native";
-
-export const useIsForeground = (): boolean => {
- const [isForeground, setIsForeground] = useState(true);
-
- useEffect(() => {
- const onChange = (state: AppStateStatus): void => {
- setIsForeground(state === "active");
- };
- const listener = AppState.addEventListener("change", onChange);
- return () => listener.remove();
- }, [setIsForeground]);
-
- return isForeground;
-};
diff --git a/src/component/recording/use-recording-details.tsx b/src/component/recording/use-recording-details.tsx
deleted file mode 100644
index d7f9d07..0000000
--- a/src/component/recording/use-recording-details.tsx
+++ /dev/null
@@ -1,154 +0,0 @@
-import * as gql from "railbird-gql";
-import { useCallback, useState } from "react";
-// @ts-ignore
-import { useCameraPermission } from "react-native-vision-camera";
-import { showAlert } from "../../lib/alert-messages";
-
-// TODO: #122 should decide on what values/labels go here.
-enum GameType {
- FreePlay = "freePlay",
- StraightPool = "straightPool",
- NineBall = "nineBall",
-}
-// TODO: #122 should be int -- inch value of table size.
-enum TableSize {
- NineFoot = "nineFoot",
- EightFoot = "eightFoot",
- SevenFoot = "sevenFoot",
-}
-
-interface VideoUserInputMeta {
- sessionName: string;
- gameType: GameType | null;
- tableSize: TableSize | null;
-}
-
-interface VideoFlowInputParams extends VideoUserInputMeta {
- videoId?: number;
-}
-
-function useDropdown(
- initialValue: T | null,
- options: Array<{ label: string; value: T }>,
- closeOthers: () => void,
-) {
- const [isDropdownOpen, setIsDropdownOpen] = useState(false);
- const [value, setValue] = useState(initialValue);
- const [optionsList, setOptionsList] = useState(options);
-
- const toggleOpen = useCallback(() => {
- if (!isDropdownOpen) {
- closeOthers();
- }
- setIsDropdownOpen(!isDropdownOpen);
- }, [isDropdownOpen, closeOthers]);
-
- return {
- isDropdownOpen,
- toggleOpen,
- value,
- setValue,
- optionsList,
- setOptionsList,
- setIsDropdownOpen,
- };
-}
-
-export const useRecordingDetails = ({
- params: {
- mode,
- videoId,
- sessionName: initialSessionName,
- gameType: initialGameType,
- tableSize: initialTableSize,
- },
- navigation,
-}) => {
- const initialState = {
- sessionName: initialSessionName || "",
- gameType: initialGameType || null,
- tableSize: initialTableSize || null,
- };
- const { hasPermission, requestPermission } = useCameraPermission();
-
- const [sessionName, setSessionName] = useState(
- initialState.sessionName,
- );
-
- const closeAllDropdowns = useCallback(() => {
- gameType.setIsDropdownOpen(false);
- tableSize.setIsDropdownOpen(false);
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, []);
-
- const gameType = useDropdown(
- initialState.gameType,
- [
- { label: "Free Play", value: GameType.FreePlay },
- { label: "Straight Pool", value: GameType.StraightPool },
- { label: "Nine Ball", value: GameType.NineBall },
- ],
- closeAllDropdowns,
- );
-
- const tableSize = useDropdown(
- initialState.tableSize,
- [
- { label: `9'`, value: TableSize.NineFoot },
- { label: `8'`, value: TableSize.EightFoot },
- { label: `7'`, value: TableSize.SevenFoot },
- ],
- closeAllDropdowns,
- );
-
- const [terminateUploadStream, { loading, error }] =
- gql.useTerminateUploadStreamMutation();
-
- const handleSubmit = async () => {
- // Check permissions
- if (!hasPermission) {
- try {
- const permissionResult = await requestPermission();
- if (permissionResult.status !== "granted") {
- return showAlert("camera");
- }
- } catch (err) {
- return showAlert("permissionError");
- }
- }
-
- // Navigate if starting flow, terminateUploadStream if completing flow
- if (mode === "start-recording") {
- const params: VideoFlowInputParams = {
- sessionName,
- gameType: gameType.value,
- tableSize: tableSize.value,
- };
- navigation.push("Camera", params);
- } else {
- try {
- await terminateUploadStream({
- variables: {
- videoId,
- videoName: sessionName,
- tableSize: tableSize.value,
- gameType: gameType.value,
- },
- });
- navigation.push("Tabs");
- } catch (err) {
- showAlert("terminateUpload");
- }
- }
- };
-
- return {
- sessionName,
- setSessionName,
- gameType,
- tableSize,
- handleSubmit,
- loading,
- error,
- };
-};
diff --git a/src/component/shot.tsx b/src/component/shot.tsx
deleted file mode 100644
index 5a7ca85..0000000
--- a/src/component/shot.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { GET_SHOTS } from "../graphql/query";
-import DisplayShots from "./display-shot";
-import withQueryHandling from "./with-query-handling";
-
-const ShotsContainer = withQueryHandling({
- WrappedComponent: DisplayShots,
- query: GET_SHOTS,
- dataKey: "getShots",
- queryOptions: {
- variables: {
- includeCueObjectAngle: true,
- },
- },
-});
-
-export default ShotsContainer;
diff --git a/src/component/video-card/video-card-footer.tsx b/src/component/video-card/video-card-footer.tsx
deleted file mode 100644
index f1863eb..0000000
--- a/src/component/video-card/video-card-footer.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-import React from "react";
-import { StyleSheet, Text, View } from "react-native";
-
-const VideoCardFooter = ({ videoName, lastPlayed }) => {
- return (
-
- {videoName}
- {lastPlayed}
-
- );
-};
-
-const styles = StyleSheet.create({
- videoName: {
- fontSize: 18,
- paddingTop: 5,
- marginHorizontal: 16,
- },
- videoDatetime: {
- fontSize: 10,
- color: "#A3A3A3",
- marginHorizontal: 16,
- },
-});
-
-export default VideoCardFooter;
diff --git a/src/component/video-card/video-card-header.tsx b/src/component/video-card/video-card-header.tsx
deleted file mode 100644
index 179e9f0..0000000
--- a/src/component/video-card/video-card-header.tsx
+++ /dev/null
@@ -1,68 +0,0 @@
-import React from "react";
-import { Image, StyleSheet, Text, View } from "react-native";
-
-const VideoCardHeader = ({
- playerName,
- location,
- gameType,
- locationIconURL,
- profileImageURL,
-}) => {
- return (
-
-
-
- {playerName}
-
-
- {location}
-
- {gameType}
-
-
- );
-};
-
-const styles = StyleSheet.create({
- headerContainer: {
- flexDirection: "row",
- alignItems: "center",
- marginHorizontal: 16,
- },
-
- headerProfileImage: {
- width: 60,
- height: 60,
- resizeMode: "contain",
- },
-
- headerText: {
- flexDirection: "column",
- padding: 10,
- },
- playerName: {
- fontSize: 24,
- fontWeight: "bold",
- },
- locationContainer: {
- flexDirection: "row",
- alignItems: "center",
- },
- locationText: {
- fontSize: 13,
- },
- gameType: {
- fontSize: 13,
- },
- icon: {
- width: 18,
- height: 18,
- resizeMode: "contain",
- },
-});
-
-export default VideoCardHeader;
diff --git a/src/component/video-card/video-card-stat.tsx b/src/component/video-card/video-card-stat.tsx
deleted file mode 100644
index 380853f..0000000
--- a/src/component/video-card/video-card-stat.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from "react";
-import { StyleSheet, Text, View } from "react-native";
-
-const VideoCardStat = ({ videoStat, displayName }) => {
- return (
-
- {displayName}
- {videoStat}
-
- );
-};
-
-const styles = StyleSheet.create({
- statItem: {
- fontSize: 10,
- textAlign: "center",
- color: "#666",
- },
- statValue: {
- fontSize: 22,
- fontWeight: "400",
- },
-});
-
-export default VideoCardStat;
diff --git a/src/component/video-card/video-card-stats-row-container.tsx b/src/component/video-card/video-card-stats-row-container.tsx
deleted file mode 100644
index fcd2ea5..0000000
--- a/src/component/video-card/video-card-stats-row-container.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import React from "react";
-import { StyleSheet, View } from "react-native";
-import VideoCardStat from "./video-card-stat";
-
-const VideoCardStatsRowContainer = ({
- makePercent,
- medianRun,
- duration,
- shotPacing,
-}) => {
- const stats = [
- { displayName: "Make Percent", videoStat: makePercent },
- { displayName: "Median Run", videoStat: medianRun },
- { displayName: "Time Played", videoStat: duration },
- { displayName: "Shot Pacing", videoStat: shotPacing },
- ];
-
- return (
-
- {stats.map((stat, index) => (
-
-
- {index < stats.length - 1 && }
-
- ))}
-
- );
-};
-
-const styles = StyleSheet.create({
- statsContainer: {
- flexDirection: "row",
- justifyContent: "space-between",
- alignItems: "center",
- margin: 16,
- },
- verticalSpacer: {
- width: 1,
- backgroundColor: "#A3A3A3",
- height: "100%",
- marginHorizontal: 12,
- },
-});
-
-export default VideoCardStatsRowContainer;
diff --git a/src/component/video-card/video-card.tsx b/src/component/video-card/video-card.tsx
deleted file mode 100644
index 331b182..0000000
--- a/src/component/video-card/video-card.tsx
+++ /dev/null
@@ -1,65 +0,0 @@
-import React from "react";
-import { Image, StyleSheet, View } from "react-native";
-import VideoCardFooter from "./video-card-footer";
-import VideoCardHeader from "./video-card-header";
-import VideoCardStatsRowContainer from "./video-card-stats-row-container";
-
-const VideoCard = ({
- playerName,
- location,
- gameType,
- makePercent,
- medianRun,
- duration,
- shotPacing,
- videoName,
- lastPlayed,
- imageURL,
- profileImageURL,
- locationIconURL,
-}) => {
- return (
-
-
-
-
-
-
- );
-};
-
-const styles = StyleSheet.create({
- card: {
- backgroundColor: "white",
- borderRadius: 8,
- borderWidth: 1,
- borderColor: "#ddd",
- shadowColor: "#000",
- shadowOffset: {
- width: 0,
- height: 2,
- },
- shadowOpacity: 0.25,
- shadowRadius: 3.84,
- elevation: 5,
- margin: 10,
- overflow: "hidden",
- },
- image: {
- width: "100%",
- height: "50%",
- },
-});
-
-export default VideoCard;
diff --git a/src/component/video-details/video-details-header.tsx b/src/component/video-details/video-details-header.tsx
deleted file mode 100644
index 2ec9720..0000000
--- a/src/component/video-details/video-details-header.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import React from "react";
-import { StyleSheet, Text, View } from "react-native";
-
-// Type assumes preformatted date
-type SessionHeaderProps = {
- sessionTitle: string;
- date: string;
-};
-
-const SessionHeader: React.FC = ({
- sessionTitle,
- date,
-}) => {
- return (
-
- {sessionTitle}
- {date}
-
- );
-};
-
-const styles = StyleSheet.create({
- headerSection: {
- paddingHorizontal: 38,
- paddingTop: 17,
- paddingBottom: 14,
- },
- header: {
- fontSize: 24,
- fontWeight: "bold",
- },
-});
-
-export default SessionHeader;
diff --git a/src/component/video-details/video-stat-list.tsx b/src/component/video-details/video-stat-list.tsx
deleted file mode 100644
index d7d1df2..0000000
--- a/src/component/video-details/video-stat-list.tsx
+++ /dev/null
@@ -1,49 +0,0 @@
-import React from "react";
-import { StyleProp, StyleSheet, Text, View, ViewStyle } from "react-native";
-import { borders } from "../../styles";
-
-type StatItem = {
- title: string;
- value: string;
-};
-
-type StatListProps = {
- items: StatItem[];
- style?: StyleProp;
-};
-
-const StatList: React.FC = ({ items, style }) => {
- return (
-
- {items.map((item, index) => (
-
- {item.title}
- {item.value}
-
- ))}
-
- );
-};
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- padding: 5,
- },
- item: {
- marginBottom: 10,
- ...borders.dottedLeftBorder,
- },
- title: {
- fontSize: 15,
- color: "grey",
- textAlign: "center",
- },
- value: {
- fontSize: 28,
- fontWeight: "bold",
- textAlign: "center",
- },
-});
-
-export default StatList;
diff --git a/src/component/with-query-handling.tsx b/src/component/with-query-handling.tsx
deleted file mode 100644
index c724317..0000000
--- a/src/component/with-query-handling.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-import { DocumentNode, OperationVariables, useQuery } from "@apollo/client";
-import React from "react";
-import { Text } from "react-native";
-/**
- * A higher-order component that provides loading and error handling for GraphQL queries.
- * @param {React.ComponentType} WrappedComponent - The component to wrap.
- * @param {DocumentNode} query - The GraphQL query to execute.
- * @param {string} dataKey - The key in the data object to pass to the wrapped component.
- * @param {Object} queryOptions - Optional. Additional options for the Apollo query.
- * @returns {React.ComponentType} A component that renders the WrappedComponent with loading and error handling.
- */
-/* eslint-disable react/display-name */
-type WithQueryHandlingProps = {
- WrappedComponent: React.ComponentType;
- query: DocumentNode;
- dataKey: string;
- queryOptions?: OperationVariables;
-};
-
-function withQueryHandling({
- WrappedComponent,
- query,
- dataKey,
- queryOptions = {},
-}: WithQueryHandlingProps) {
- return function (props: any) {
- // You can replace 'any' with specific props type if known
- const { loading, error, data } = useQuery(query, queryOptions);
-
- if (loading) {
- return Loading...;
- }
- if (error) {
- return Error: {error.message};
- }
-
- const specificData = data[dataKey];
- return ;
- };
-}
-
-export default withQueryHandling;
diff --git a/src/context/OrientationContext.tsx b/src/context/OrientationContext.tsx
deleted file mode 100644
index 88ddb39..0000000
--- a/src/context/OrientationContext.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import React, { createContext, useContext, useEffect, useState } from "react";
-import { Dimensions } from "react-native";
-
-const OrientationContext = createContext(null);
-
-export const useOrientation = (): string | null =>
- useContext(OrientationContext);
-
-export const OrientationProvider = ({ children }) => {
- const [orientation, setOrientation] = useState(getOrientation());
-
- function getOrientation() {
- const { width, height } = Dimensions.get("window");
- return width < height ? "portrait" : "landscape";
- }
-
- useEffect(() => {
- const updateOrientation = () => {
- setOrientation(getOrientation());
- };
-
- const subscription = Dimensions.addEventListener(
- "change",
- updateOrientation,
- );
-
- return () => subscription.remove();
- }, []);
-
- return (
-
- {children}
-
- );
-};
diff --git a/src/context/auth-context.tsx b/src/context/auth-context.tsx
deleted file mode 100644
index e86fa79..0000000
--- a/src/context/auth-context.tsx
+++ /dev/null
@@ -1,99 +0,0 @@
-import { DEV_USER_ID } from "@env";
-import { FirebaseAuthTypes } from "@react-native-firebase/auth";
-import React, {
- createContext,
- useCallback,
- useContext,
- useEffect,
- useState,
-} from "react";
-import { handleSignOut, onAuthStateChanged } from "../auth";
-import { useAuthHeader } from "../graphql/client";
-
-interface AuthContextType {
- isLoggedIn: boolean;
- isLoading: boolean;
- user: FirebaseAuthTypes.User | null;
- logOut: () => Promise;
-}
-
-const AuthContext = createContext(undefined);
-
-export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({
- children,
-}) => {
- const { setAuthHeader } = useAuthHeader();
-
- const [contextUser, setContextUser] = useState(
- null,
- );
- const [isLoggedIn, setIsLoggedIn] = useState(false);
- const [isLoading, setIsLoading] = useState(true); // this is for a LoadingContext (auth, app reloads, foreground etc)
-
- const _completeAuthentication = useCallback(
- (
- user: FirebaseAuthTypes.User,
- token: string,
- isLoggedIn: boolean,
- tokenType: "user_id" | "Authorization" = "Authorization",
- ) => {
- setAuthHeader({ key: tokenType, value: token });
- setContextUser(user);
- setIsLoggedIn(isLoggedIn);
- setIsLoading(false);
- },
- [setAuthHeader],
- );
-
- const authStateChangeCallback = async (user: FirebaseAuthTypes.User) => {
- if (user) {
- const token = await user.getIdToken();
- _completeAuthentication(user, token, true);
- } else {
- _completeAuthentication(undefined, undefined, false);
- }
- };
-
- useEffect(() => {
- let unsubscribe = () => {
- console.log("Dev Mode");
- };
-
- if (!DEV_USER_ID) {
- unsubscribe = onAuthStateChanged(authStateChangeCallback);
- }
-
- return unsubscribe;
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, []);
-
- useEffect(() => {
- const setAuthAsync = async () => {
- if (DEV_USER_ID) {
- console.log("Setting fake authorization user to: ", DEV_USER_ID);
- _completeAuthentication(null, DEV_USER_ID, true, "user_id");
- }
- };
- setAuthAsync();
- }, [_completeAuthentication]);
-
- const logOut = async () => {
- await handleSignOut();
- };
-
- return (
-
- {children}
-
- );
-};
-
-export const useAuth = () => {
- const context = useContext(AuthContext);
- if (context === undefined) {
- throw new Error("useAuth must be used within an AuthProvider");
- }
- return context;
-};
diff --git a/src/context/index.ts b/src/context/index.ts
deleted file mode 100644
index 8d228eb..0000000
--- a/src/context/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import { AuthProvider, useAuth } from "./auth-context";
-
-export { AuthProvider, useAuth };
diff --git a/src/graphql/client.tsx b/src/graphql/client.tsx
deleted file mode 100644
index dcda82d..0000000
--- a/src/graphql/client.tsx
+++ /dev/null
@@ -1,82 +0,0 @@
-import {
- ApolloClient,
- ApolloLink,
- ApolloProvider,
- HttpLink,
- InMemoryCache,
- from,
-} from "@apollo/client";
-
-import ApolloLinkTimeout from "apollo-link-timeout";
-
-import React, {
- ReactNode,
- createContext,
- useContext,
- useMemo,
- useState,
-} from "react";
-
-import { API_URI } from "@env";
-
-type Props = {
- children: ReactNode;
-};
-
-export const AuthHeaderContext = createContext<
- | {
- authHeader: { key: string; value: string };
- setAuthHeader: React.Dispatch<
- React.SetStateAction<{ key: string; value: string }>
- >;
- }
- | undefined
->(undefined);
-
-// Hook to use the auth header context
-export const useAuthHeader = () => {
- const context = useContext(AuthHeaderContext);
- if (!context) {
- throw new Error("useAuthHeader must be used within a ClientProvider");
- }
- return context;
-};
-
-export const ClientProvider: React.FC = ({ children }) => {
- const [authHeader, setAuthHeader] = useState({ key: "", value: "" });
- console.log(`The api uri is ${API_URI}`);
- const httpLink = new HttpLink({
- uri: API_URI,
- });
- const cache = new InMemoryCache({});
-
- const authMiddleware = new ApolloLink((operation, forward) => {
- const { key, value } = authHeader;
- if (key && value) {
- operation.setContext({
- headers: {
- [key]: value,
- },
- });
- }
-
- return forward(operation);
- });
-
- var timeoutLink = new ApolloLinkTimeout(4000);
-
- const client = useMemo(
- () =>
- new ApolloClient({
- link: from([authMiddleware, timeoutLink]).concat(httpLink),
- cache: new InMemoryCache(),
- }),
- [authHeader], // Assuming authHeader is used within authMiddleware
- );
-
- return (
-
- {children}
-
- );
-};
diff --git a/src/graphql/filter.ts b/src/graphql/filter.ts
deleted file mode 100644
index 41f74e8..0000000
--- a/src/graphql/filter.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-type BaseFilter = {
- createVars: () => { [key: string]: any };
-};
-
-function createBaseFilter(key: string, content: any): BaseFilter {
- return {
- createVars: () => ({ [key]: content }),
- };
-}
-
-export function createAndFilter(filters: Array): BaseFilter {
- const filterVars = filters.map((filter) => filter.createVars());
- return createBaseFilter("andFilters", { filters: filterVars });
-}
-
-export function createCategoryFilter(
- feature: string,
- value: string,
-): BaseFilter {
- const content = { [feature]: { value } };
- return createBaseFilter(feature, content);
-}
-
-export function createRangeFilter(
- feature: string,
- greaterThanEqualTo: number,
- lessThan: number,
-): BaseFilter {
- const content = { greaterThanEqualTo, lessThan };
- return createBaseFilter(feature, content);
-}
diff --git a/src/graphql/query.ts b/src/graphql/query.ts
deleted file mode 100644
index 17dedef..0000000
--- a/src/graphql/query.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { gql } from "@apollo/client";
-
-export const GET_SHOTS = gql`
- query GetShots(
- $filterInput: FilterInput
- $includeCueObjectDistance: Boolean! = false
- $includeCueObjectAngle: Boolean! = false
- $includeCueBallSpeed: Boolean! = false
- $includeShotDirection: Boolean! = false
- $includeTargetPocketDistance: Boolean! = false
- $includeMake: Boolean! = false
- $includeIntendedPocketType: Boolean! = false
- ) {
- getShots(filterInput: $filterInput) {
- id
- videoId
- startFrame
- endFrame
- createdAt
- updatedAt
- cueObjectFeatures {
- cueObjectDistance @include(if: $includeCueObjectDistance)
- cueObjectAngle @include(if: $includeCueObjectAngle)
- cueBallSpeed @include(if: $includeCueBallSpeed)
- shotDirection @include(if: $includeShotDirection)
- }
- pocketingIntentionFeatures {
- targetPocketDistance @include(if: $includeTargetPocketDistance)
- make @include(if: $includeMake)
- intendedPocketType @include(if: $includeIntendedPocketType)
- }
- }
- }
-`;
diff --git a/src/index.tsx b/src/index.tsx
new file mode 100644
index 0000000..da4374f
--- /dev/null
+++ b/src/index.tsx
@@ -0,0 +1,1004 @@
+import * as Apollo from "@apollo/client";
+import { gql } from "@apollo/client";
+export type Maybe = T | null;
+export type InputMaybe = Maybe;
+export type Exact = {
+ [K in keyof T]: T[K];
+};
+export type MakeOptional = Omit & {
+ [SubKey in K]?: Maybe;
+};
+export type MakeMaybe = Omit & {
+ [SubKey in K]: Maybe;
+};
+export type MakeEmpty<
+ T extends { [key: string]: unknown },
+ K extends keyof T,
+> = { [_ in K]?: never };
+export type Incremental =
+ | T
+ | {
+ [P in keyof T]?: P extends " $fragmentName" | "__typename" ? T[P] : never;
+ };
+const defaultOptions = {} as const;
+/** All built-in and custom scalars, mapped to their actual values */
+export type Scalars = {
+ ID: { input: string; output: string };
+ String: { input: string; output: string };
+ Boolean: { input: boolean; output: boolean };
+ Int: { input: number; output: number };
+ Float: { input: number; output: number };
+ /** Date with time (isoformat) */
+ DateTime: { input: any; output: any };
+ /** Decimal (fixed-point) */
+ Decimal: { input: any; output: any };
+};
+
+export type AggregateResultGql = {
+ __typename?: "AggregateResultGQL";
+ featureBuckets: Array;
+ targetMetrics: Array;
+};
+
+export type AndFilter = {
+ filters: Array;
+};
+
+export type BankFeaturesGql = {
+ __typename?: "BankFeaturesGQL";
+ bankAngle: Scalars["Float"]["output"];
+ distance: Scalars["Float"]["output"];
+ wallsHit: Array;
+};
+
+export type BucketGql = {
+ __typename?: "BucketGQL";
+ lowerBound: Scalars["Float"]["output"];
+ rangeKey: Scalars["String"]["output"];
+};
+
+export type BucketInputGql = {
+ lowerBound: Scalars["Float"]["input"];
+ rangeKey: Scalars["String"]["input"];
+};
+
+export type BucketSetGql = {
+ __typename?: "BucketSetGQL";
+ buckets: Array;
+ feature: Scalars["String"]["output"];
+ keyName: Scalars["String"]["output"];
+};
+
+export type BucketSetInputGql = {
+ buckets: Array;
+ feature: Scalars["String"]["input"];
+};
+
+export type CreateBucketSetInput = {
+ buckets: Array;
+ feature: Scalars["String"]["input"];
+ keyName: Scalars["String"]["input"];
+};
+
+export type CreateUploadStreamReturn = {
+ __typename?: "CreateUploadStreamReturn";
+ videoId: Scalars["Int"]["output"];
+};
+
+export type CueBallSpeedInput = {
+ value: RangeFilter;
+};
+
+export type CueObjectAngleInput = {
+ value: RangeFilter;
+};
+
+export type CueObjectDistanceInput = {
+ value: RangeFilter;
+};
+
+export type CueObjectFeaturesGql = {
+ __typename?: "CueObjectFeaturesGQL";
+ cueBallSpeed?: Maybe;
+ cueObjectAngle?: Maybe;
+ cueObjectDistance?: Maybe;
+ shotDirection?: Maybe;
+};
+
+export enum DeviceTypeEnum {
+ Android = "ANDROID",
+ Browser = "BROWSER",
+ Ios = "IOS",
+}
+
+export type EnumFilter = {
+ equals?: InputMaybe;
+};
+
+export type FilterInput = {
+ andFilters?: InputMaybe;
+ cueBallSpeed?: InputMaybe;
+ cueObjectAngle?: InputMaybe;
+ cueObjectDistance?: InputMaybe;
+ intendedPocketType?: InputMaybe;
+ orFilters?: InputMaybe;
+ shotDirection?: InputMaybe;
+ targetPocketDistance?: InputMaybe;
+};
+
+export type GetUploadLinkReturn = {
+ __typename?: "GetUploadLinkReturn";
+ uploadUrl: Scalars["String"]["output"];
+};
+
+export type IntendedPocketTypeInput = {
+ value: EnumFilter;
+};
+
+export type Mutation = {
+ __typename?: "Mutation";
+ createBucketSet: BucketSetGql;
+ createUploadStream: CreateUploadStreamReturn;
+ getUploadLink: GetUploadLinkReturn;
+ terminateUploadStream: Scalars["Boolean"]["output"];
+};
+
+export type MutationCreateBucketSetArgs = {
+ params: CreateBucketSetInput;
+};
+
+export type MutationCreateUploadStreamArgs = {
+ uploadMetadata?: InputMaybe;
+ videoName?: InputMaybe;
+};
+
+export type MutationGetUploadLinkArgs = {
+ segmentIndex: Scalars["Int"]["input"];
+ videoId: Scalars["Int"]["input"];
+};
+
+export type MutationTerminateUploadStreamArgs = {
+ gameType?: InputMaybe;
+ tableSize?: InputMaybe;
+ videoId: Scalars["Int"]["input"];
+ videoName?: InputMaybe;
+};
+
+export type OrFilter = {
+ filters: Array;
+};
+
+export type PageInfoGql = {
+ __typename?: "PageInfoGQL";
+ endCursor?: Maybe;
+ hasNextPage: Scalars["Boolean"]["output"];
+};
+
+export enum PocketEnum {
+ Corner = "CORNER",
+ Side = "SIDE",
+}
+
+export type PocketingIntentionFeaturesGql = {
+ __typename?: "PocketingIntentionFeaturesGQL";
+ intendedPocketType?: Maybe;
+ make?: Maybe;
+ targetPocketDistance?: Maybe;
+};
+
+export type Query = {
+ __typename?: "Query";
+ getAggregateShots: Array;
+ getBucketSet?: Maybe;
+ getLoggedInUser?: Maybe;
+ getShots: Array;
+ getUser?: Maybe;
+ getVideo: VideoGql;
+ getVideoFeedForUser: VideoFeedGql;
+};
+
+export type QueryGetAggregateShotsArgs = {
+ bucketSets: Array;
+};
+
+export type QueryGetBucketSetArgs = {
+ keyName: Scalars["String"]["input"];
+};
+
+export type QueryGetShotsArgs = {
+ filterInput?: InputMaybe;
+};
+
+export type QueryGetUserArgs = {
+ userId: Scalars["Int"]["input"];
+};
+
+export type QueryGetVideoArgs = {
+ videoId: Scalars["Int"]["input"];
+};
+
+export type QueryGetVideoFeedForUserArgs = {
+ after?: InputMaybe;
+ first?: Scalars["Int"]["input"];
+};
+
+export type RangeFilter = {
+ greaterThanEqualTo?: InputMaybe;
+ lessThan?: InputMaybe;
+};
+
+export enum ShotDirectionEnum {
+ Left = "LEFT",
+ Right = "RIGHT",
+ Straight = "STRAIGHT",
+}
+
+export type ShotDirectionInput = {
+ value: EnumFilter;
+};
+
+export type ShotFeaturesGql = {
+ __typename?: "ShotFeaturesGQL";
+ bank?: Maybe;
+ cueBallSpeed?: Maybe;
+ cueObjectAngle?: Maybe;
+ cueObjectDistance?: Maybe;
+ intendedPocket?: Maybe;
+ shotDirection?: Maybe;
+ targetPocketDistance?: Maybe;
+};
+
+export type ShotGql = {
+ __typename?: "ShotGQL";
+ createdAt?: Maybe;
+ cueObjectFeatures?: Maybe;
+ endFrame?: Maybe;
+ features?: Maybe;
+ id?: Maybe;
+ pocketingIntentionFeatures?: Maybe;
+ startFrame?: Maybe;
+ updatedAt?: Maybe;
+ videoId?: Maybe;
+};
+
+export type TargetFloatFeatureGql = {
+ __typename?: "TargetFloatFeatureGQL";
+ average?: Maybe;
+ featureName: Scalars["String"]["output"];
+ median?: Maybe;
+};
+
+export type TargetMetricGql = {
+ __typename?: "TargetMetricGQL";
+ count?: Maybe;
+ floatFeature?: Maybe;
+ makePercentage?: Maybe;
+};
+
+export type TargetPocketDistanceInput = {
+ value: RangeFilter;
+};
+
+export type UploadMetadataInput = {
+ appVersion?: InputMaybe;
+ browserName?: InputMaybe;
+ browserVersion?: InputMaybe;
+ deviceType?: InputMaybe;
+ ipAddress?: InputMaybe;
+ locale?: InputMaybe;
+ networkType?: InputMaybe;
+ osVersion?: InputMaybe;
+ timezone?: InputMaybe;
+};
+
+export type UploadStreamGql = {
+ __typename?: "UploadStreamGQL";
+ createdAt: Scalars["DateTime"]["output"];
+ id: Scalars["ID"]["output"];
+ isCompleted: Scalars["Boolean"]["output"];
+ linksRequested: Scalars["Int"]["output"];
+ updatedAt: Scalars["DateTime"]["output"];
+ uploadMetadata: UploadStreamMetadata;
+ uploadsCompleted: Scalars["Int"]["output"];
+};
+
+export type UploadStreamMetadata = {
+ __typename?: "UploadStreamMetadata";
+ appVersion?: Maybe;
+ browserName?: Maybe;
+ browserVersion?: Maybe;
+ deviceType?: Maybe;
+ ipAddress?: Maybe;
+ locale?: Maybe;
+ networkType?: Maybe;
+ osVersion?: Maybe;
+ timezone?: Maybe;
+};
+
+export type UserGql = {
+ __typename?: "UserGQL";
+ createdAt?: Maybe;
+ firebaseUid: Scalars["String"]["output"];
+ id: Scalars["Int"]["output"];
+ statistics: UserStatisticsGql;
+ updatedAt?: Maybe;
+ username: Scalars["String"]["output"];
+};
+
+export type UserStatisticsGql = {
+ __typename?: "UserStatisticsGQL";
+ averageTimeBetweenShots: Scalars["Decimal"]["output"];
+ makePercentage: Scalars["Decimal"]["output"];
+ medianRun?: Maybe;
+ timeSpentPlaying: Scalars["Decimal"]["output"];
+ totalShots: Scalars["Int"]["output"];
+ totalShotsMade: Scalars["Int"]["output"];
+};
+
+export type VideoFeedGql = {
+ __typename?: "VideoFeedGQL";
+ pageInfo: PageInfoGql;
+ videos: Array;
+};
+
+export type VideoGql = {
+ __typename?: "VideoGQL";
+ averageTimeBetweenShots?: Maybe;
+ createdAt?: Maybe;
+ elapsedTime?: Maybe;
+ endTime?: Maybe;
+ framesPerSecond: Scalars["Int"]["output"];
+ id: Scalars["Int"]["output"];
+ makePercentage: Scalars["Float"]["output"];
+ medianRun?: Maybe;
+ name?: Maybe;
+ shots: Array;
+ startTime?: Maybe;
+ stream?: Maybe;
+ totalShots: Scalars["Int"]["output"];
+ totalShotsMade: Scalars["Int"]["output"];
+ updatedAt?: Maybe;
+};
+
+export enum WallTypeEnum {
+ Long = "LONG",
+ Short = "SHORT",
+}
+
+export type GetAggregateShotsQueryVariables = Exact<{
+ bucketSets: Array | BucketSetInputGql;
+}>;
+
+export type GetAggregateShotsQuery = {
+ __typename?: "Query";
+ getAggregateShots: Array<{
+ __typename?: "AggregateResultGQL";
+ featureBuckets: Array<{
+ __typename?: "BucketGQL";
+ rangeKey: string;
+ lowerBound: number;
+ }>;
+ targetMetrics: Array<{
+ __typename?: "TargetMetricGQL";
+ count?: number | null;
+ makePercentage?: number | null;
+ floatFeature?: {
+ __typename?: "TargetFloatFeatureGQL";
+ featureName: string;
+ average?: number | null;
+ median?: number | null;
+ } | null;
+ }>;
+ }>;
+};
+
+export type GetFeedQueryVariables = Exact<{
+ first?: Scalars["Int"]["input"];
+ after?: InputMaybe;
+}>;
+
+export type GetFeedQuery = {
+ __typename?: "Query";
+ getVideoFeedForUser: {
+ __typename?: "VideoFeedGQL";
+ videos: Array<{
+ __typename?: "VideoGQL";
+ id: number;
+ name?: string | null;
+ totalShotsMade: number;
+ totalShots: number;
+ makePercentage: number;
+ medianRun?: number | null;
+ averageTimeBetweenShots?: number | null;
+ createdAt?: any | null;
+ updatedAt?: any | null;
+ startTime?: any | null;
+ endTime?: any | null;
+ elapsedTime?: number | null;
+ shots: Array<{
+ __typename?: "ShotGQL";
+ id?: number | null;
+ videoId?: number | null;
+ startFrame?: number | null;
+ endFrame?: number | null;
+ createdAt?: any | null;
+ updatedAt?: any | null;
+ }>;
+ stream?: {
+ __typename?: "UploadStreamGQL";
+ id: string;
+ linksRequested: number;
+ uploadsCompleted: number;
+ isCompleted: boolean;
+ createdAt: any;
+ updatedAt: any;
+ } | null;
+ }>;
+ pageInfo: {
+ __typename?: "PageInfoGQL";
+ hasNextPage: boolean;
+ endCursor?: string | null;
+ };
+ };
+};
+
+export type GetShotsQueryVariables = Exact<{
+ filterInput?: InputMaybe;
+ includeCueObjectDistance?: Scalars["Boolean"]["input"];
+ includeCueObjectAngle?: Scalars["Boolean"]["input"];
+ includeCueBallSpeed?: Scalars["Boolean"]["input"];
+ includeShotDirection?: Scalars["Boolean"]["input"];
+ includeTargetPocketDistance?: Scalars["Boolean"]["input"];
+ includeMake?: Scalars["Boolean"]["input"];
+ includeIntendedPocketType?: Scalars["Boolean"]["input"];
+}>;
+
+export type GetShotsQuery = {
+ __typename?: "Query";
+ getShots: Array<{
+ __typename?: "ShotGQL";
+ id?: number | null;
+ videoId?: number | null;
+ startFrame?: number | null;
+ endFrame?: number | null;
+ createdAt?: any | null;
+ updatedAt?: any | null;
+ cueObjectFeatures?: {
+ __typename?: "CueObjectFeaturesGQL";
+ cueObjectDistance?: number | null;
+ cueObjectAngle?: number | null;
+ cueBallSpeed?: number | null;
+ shotDirection?: ShotDirectionEnum | null;
+ } | null;
+ pocketingIntentionFeatures?: {
+ __typename?: "PocketingIntentionFeaturesGQL";
+ targetPocketDistance?: number | null;
+ make?: boolean | null;
+ intendedPocketType?: PocketEnum | null;
+ } | null;
+ }>;
+};
+
+export type CreateUploadStreamMutationVariables = Exact<{
+ videoName: Scalars["String"]["input"];
+ deviceType?: InputMaybe;
+ osVersion?: InputMaybe;
+ appVersion?: InputMaybe;
+ browserName?: InputMaybe;
+ browserVersion?: InputMaybe;
+ locale?: InputMaybe;
+ timezone?: InputMaybe;
+ networkType?: InputMaybe;
+ ipAddress?: InputMaybe;
+}>;
+
+export type CreateUploadStreamMutation = {
+ __typename?: "Mutation";
+ createUploadStream: {
+ __typename?: "CreateUploadStreamReturn";
+ videoId: number;
+ };
+};
+
+export type GetUploadLinkMutationVariables = Exact<{
+ videoId: Scalars["Int"]["input"];
+ segmentIndex: Scalars["Int"]["input"];
+}>;
+
+export type GetUploadLinkMutation = {
+ __typename?: "Mutation";
+ getUploadLink: { __typename?: "GetUploadLinkReturn"; uploadUrl: string };
+};
+
+export type TerminateUploadStreamMutationVariables = Exact<{
+ videoId: Scalars["Int"]["input"];
+ videoName?: InputMaybe;
+ gameType?: InputMaybe;
+ tableSize?: InputMaybe;
+}>;
+
+export type TerminateUploadStreamMutation = {
+ __typename?: "Mutation";
+ terminateUploadStream: boolean;
+};
+
+export const GetAggregateShotsDocument = gql`
+ query GetAggregateShots($bucketSets: [BucketSetInputGQL!]!) {
+ getAggregateShots(bucketSets: $bucketSets) {
+ featureBuckets {
+ rangeKey
+ lowerBound
+ }
+ targetMetrics {
+ count
+ makePercentage
+ floatFeature {
+ featureName
+ average
+ median
+ }
+ }
+ }
+ }
+`;
+
+/**
+ * __useGetAggregateShotsQuery__
+ *
+ * To run a query within a React component, call `useGetAggregateShotsQuery` and pass it any options that fit your needs.
+ * When your component renders, `useGetAggregateShotsQuery` returns an object from Apollo Client that contains loading, error, and data properties
+ * you can use to render your UI.
+ *
+ * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
+ *
+ * @example
+ * const { data, loading, error } = useGetAggregateShotsQuery({
+ * variables: {
+ * bucketSets: // value for 'bucketSets'
+ * },
+ * });
+ */
+export function useGetAggregateShotsQuery(
+ baseOptions: Apollo.QueryHookOptions<
+ GetAggregateShotsQuery,
+ GetAggregateShotsQueryVariables
+ >,
+) {
+ const options = { ...defaultOptions, ...baseOptions };
+ return Apollo.useQuery<
+ GetAggregateShotsQuery,
+ GetAggregateShotsQueryVariables
+ >(GetAggregateShotsDocument, options);
+}
+export function useGetAggregateShotsLazyQuery(
+ baseOptions?: Apollo.LazyQueryHookOptions<
+ GetAggregateShotsQuery,
+ GetAggregateShotsQueryVariables
+ >,
+) {
+ const options = { ...defaultOptions, ...baseOptions };
+ return Apollo.useLazyQuery<
+ GetAggregateShotsQuery,
+ GetAggregateShotsQueryVariables
+ >(GetAggregateShotsDocument, options);
+}
+export function useGetAggregateShotsSuspenseQuery(
+ baseOptions?: Apollo.SuspenseQueryHookOptions<
+ GetAggregateShotsQuery,
+ GetAggregateShotsQueryVariables
+ >,
+) {
+ const options = { ...defaultOptions, ...baseOptions };
+ return Apollo.useSuspenseQuery<
+ GetAggregateShotsQuery,
+ GetAggregateShotsQueryVariables
+ >(GetAggregateShotsDocument, options);
+}
+export type GetAggregateShotsQueryHookResult = ReturnType<
+ typeof useGetAggregateShotsQuery
+>;
+export type GetAggregateShotsLazyQueryHookResult = ReturnType<
+ typeof useGetAggregateShotsLazyQuery
+>;
+export type GetAggregateShotsSuspenseQueryHookResult = ReturnType<
+ typeof useGetAggregateShotsSuspenseQuery
+>;
+export type GetAggregateShotsQueryResult = Apollo.QueryResult<
+ GetAggregateShotsQuery,
+ GetAggregateShotsQueryVariables
+>;
+export const GetFeedDocument = gql`
+ query GetFeed($first: Int! = 5, $after: String = null) {
+ getVideoFeedForUser(first: $first, after: $after) {
+ videos {
+ id
+ name
+ totalShotsMade
+ totalShots
+ makePercentage
+ medianRun
+ averageTimeBetweenShots
+ createdAt
+ updatedAt
+ shots {
+ id
+ videoId
+ startFrame
+ endFrame
+ createdAt
+ updatedAt
+ }
+ startTime
+ endTime
+ elapsedTime
+ stream {
+ id
+ linksRequested
+ uploadsCompleted
+ isCompleted
+ createdAt
+ updatedAt
+ }
+ }
+ pageInfo {
+ hasNextPage
+ endCursor
+ }
+ }
+ }
+`;
+
+/**
+ * __useGetFeedQuery__
+ *
+ * To run a query within a React component, call `useGetFeedQuery` and pass it any options that fit your needs.
+ * When your component renders, `useGetFeedQuery` returns an object from Apollo Client that contains loading, error, and data properties
+ * you can use to render your UI.
+ *
+ * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
+ *
+ * @example
+ * const { data, loading, error } = useGetFeedQuery({
+ * variables: {
+ * first: // value for 'first'
+ * after: // value for 'after'
+ * },
+ * });
+ */
+export function useGetFeedQuery(
+ baseOptions?: Apollo.QueryHookOptions,
+) {
+ const options = { ...defaultOptions, ...baseOptions };
+ return Apollo.useQuery(
+ GetFeedDocument,
+ options,
+ );
+}
+export function useGetFeedLazyQuery(
+ baseOptions?: Apollo.LazyQueryHookOptions<
+ GetFeedQuery,
+ GetFeedQueryVariables
+ >,
+) {
+ const options = { ...defaultOptions, ...baseOptions };
+ return Apollo.useLazyQuery(
+ GetFeedDocument,
+ options,
+ );
+}
+export function useGetFeedSuspenseQuery(
+ baseOptions?: Apollo.SuspenseQueryHookOptions<
+ GetFeedQuery,
+ GetFeedQueryVariables
+ >,
+) {
+ const options = { ...defaultOptions, ...baseOptions };
+ return Apollo.useSuspenseQuery(
+ GetFeedDocument,
+ options,
+ );
+}
+export type GetFeedQueryHookResult = ReturnType;
+export type GetFeedLazyQueryHookResult = ReturnType;
+export type GetFeedSuspenseQueryHookResult = ReturnType<
+ typeof useGetFeedSuspenseQuery
+>;
+export type GetFeedQueryResult = Apollo.QueryResult<
+ GetFeedQuery,
+ GetFeedQueryVariables
+>;
+export const GetShotsDocument = gql`
+ query GetShots(
+ $filterInput: FilterInput
+ $includeCueObjectDistance: Boolean! = false
+ $includeCueObjectAngle: Boolean! = false
+ $includeCueBallSpeed: Boolean! = false
+ $includeShotDirection: Boolean! = false
+ $includeTargetPocketDistance: Boolean! = false
+ $includeMake: Boolean! = false
+ $includeIntendedPocketType: Boolean! = false
+ ) {
+ getShots(filterInput: $filterInput) {
+ id
+ videoId
+ startFrame
+ endFrame
+ createdAt
+ updatedAt
+ cueObjectFeatures {
+ cueObjectDistance @include(if: $includeCueObjectDistance)
+ cueObjectAngle @include(if: $includeCueObjectAngle)
+ cueBallSpeed @include(if: $includeCueBallSpeed)
+ shotDirection @include(if: $includeShotDirection)
+ }
+ pocketingIntentionFeatures {
+ targetPocketDistance @include(if: $includeTargetPocketDistance)
+ make @include(if: $includeMake)
+ intendedPocketType @include(if: $includeIntendedPocketType)
+ }
+ }
+ }
+`;
+
+/**
+ * __useGetShotsQuery__
+ *
+ * To run a query within a React component, call `useGetShotsQuery` and pass it any options that fit your needs.
+ * When your component renders, `useGetShotsQuery` returns an object from Apollo Client that contains loading, error, and data properties
+ * you can use to render your UI.
+ *
+ * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
+ *
+ * @example
+ * const { data, loading, error } = useGetShotsQuery({
+ * variables: {
+ * filterInput: // value for 'filterInput'
+ * includeCueObjectDistance: // value for 'includeCueObjectDistance'
+ * includeCueObjectAngle: // value for 'includeCueObjectAngle'
+ * includeCueBallSpeed: // value for 'includeCueBallSpeed'
+ * includeShotDirection: // value for 'includeShotDirection'
+ * includeTargetPocketDistance: // value for 'includeTargetPocketDistance'
+ * includeMake: // value for 'includeMake'
+ * includeIntendedPocketType: // value for 'includeIntendedPocketType'
+ * },
+ * });
+ */
+export function useGetShotsQuery(
+ baseOptions?: Apollo.QueryHookOptions,
+) {
+ const options = { ...defaultOptions, ...baseOptions };
+ return Apollo.useQuery(
+ GetShotsDocument,
+ options,
+ );
+}
+export function useGetShotsLazyQuery(
+ baseOptions?: Apollo.LazyQueryHookOptions<
+ GetShotsQuery,
+ GetShotsQueryVariables
+ >,
+) {
+ const options = { ...defaultOptions, ...baseOptions };
+ return Apollo.useLazyQuery(
+ GetShotsDocument,
+ options,
+ );
+}
+export function useGetShotsSuspenseQuery(
+ baseOptions?: Apollo.SuspenseQueryHookOptions<
+ GetShotsQuery,
+ GetShotsQueryVariables
+ >,
+) {
+ const options = { ...defaultOptions, ...baseOptions };
+ return Apollo.useSuspenseQuery(
+ GetShotsDocument,
+ options,
+ );
+}
+export type GetShotsQueryHookResult = ReturnType;
+export type GetShotsLazyQueryHookResult = ReturnType<
+ typeof useGetShotsLazyQuery
+>;
+export type GetShotsSuspenseQueryHookResult = ReturnType<
+ typeof useGetShotsSuspenseQuery
+>;
+export type GetShotsQueryResult = Apollo.QueryResult<
+ GetShotsQuery,
+ GetShotsQueryVariables
+>;
+export const CreateUploadStreamDocument = gql`
+ mutation CreateUploadStream(
+ $videoName: String!
+ $deviceType: DeviceTypeEnum
+ $osVersion: String
+ $appVersion: String
+ $browserName: String
+ $browserVersion: String
+ $locale: String
+ $timezone: String
+ $networkType: String
+ $ipAddress: String
+ ) {
+ createUploadStream(
+ videoName: $videoName
+ uploadMetadata: {
+ deviceType: $deviceType
+ osVersion: $osVersion
+ appVersion: $appVersion
+ browserName: $browserName
+ browserVersion: $browserVersion
+ locale: $locale
+ timezone: $timezone
+ networkType: $networkType
+ ipAddress: $ipAddress
+ }
+ ) {
+ videoId
+ }
+ }
+`;
+export type CreateUploadStreamMutationFn = Apollo.MutationFunction<
+ CreateUploadStreamMutation,
+ CreateUploadStreamMutationVariables
+>;
+
+/**
+ * __useCreateUploadStreamMutation__
+ *
+ * To run a mutation, you first call `useCreateUploadStreamMutation` within a React component and pass it any options that fit your needs.
+ * When your component renders, `useCreateUploadStreamMutation` returns a tuple that includes:
+ * - A mutate function that you can call at any time to execute the mutation
+ * - An object with fields that represent the current status of the mutation's execution
+ *
+ * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;
+ *
+ * @example
+ * const [createUploadStreamMutation, { data, loading, error }] = useCreateUploadStreamMutation({
+ * variables: {
+ * videoName: // value for 'videoName'
+ * deviceType: // value for 'deviceType'
+ * osVersion: // value for 'osVersion'
+ * appVersion: // value for 'appVersion'
+ * browserName: // value for 'browserName'
+ * browserVersion: // value for 'browserVersion'
+ * locale: // value for 'locale'
+ * timezone: // value for 'timezone'
+ * networkType: // value for 'networkType'
+ * ipAddress: // value for 'ipAddress'
+ * },
+ * });
+ */
+export function useCreateUploadStreamMutation(
+ baseOptions?: Apollo.MutationHookOptions<
+ CreateUploadStreamMutation,
+ CreateUploadStreamMutationVariables
+ >,
+) {
+ const options = { ...defaultOptions, ...baseOptions };
+ return Apollo.useMutation<
+ CreateUploadStreamMutation,
+ CreateUploadStreamMutationVariables
+ >(CreateUploadStreamDocument, options);
+}
+export type CreateUploadStreamMutationHookResult = ReturnType<
+ typeof useCreateUploadStreamMutation
+>;
+export type CreateUploadStreamMutationResult =
+ Apollo.MutationResult;
+export type CreateUploadStreamMutationOptions = Apollo.BaseMutationOptions<
+ CreateUploadStreamMutation,
+ CreateUploadStreamMutationVariables
+>;
+export const GetUploadLinkDocument = gql`
+ mutation GetUploadLink($videoId: Int!, $segmentIndex: Int!) {
+ getUploadLink(videoId: $videoId, segmentIndex: $segmentIndex) {
+ uploadUrl
+ }
+ }
+`;
+export type GetUploadLinkMutationFn = Apollo.MutationFunction<
+ GetUploadLinkMutation,
+ GetUploadLinkMutationVariables
+>;
+
+/**
+ * __useGetUploadLinkMutation__
+ *
+ * To run a mutation, you first call `useGetUploadLinkMutation` within a React component and pass it any options that fit your needs.
+ * When your component renders, `useGetUploadLinkMutation` returns a tuple that includes:
+ * - A mutate function that you can call at any time to execute the mutation
+ * - An object with fields that represent the current status of the mutation's execution
+ *
+ * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;
+ *
+ * @example
+ * const [getUploadLinkMutation, { data, loading, error }] = useGetUploadLinkMutation({
+ * variables: {
+ * videoId: // value for 'videoId'
+ * segmentIndex: // value for 'segmentIndex'
+ * },
+ * });
+ */
+export function useGetUploadLinkMutation(
+ baseOptions?: Apollo.MutationHookOptions<
+ GetUploadLinkMutation,
+ GetUploadLinkMutationVariables
+ >,
+) {
+ const options = { ...defaultOptions, ...baseOptions };
+ return Apollo.useMutation<
+ GetUploadLinkMutation,
+ GetUploadLinkMutationVariables
+ >(GetUploadLinkDocument, options);
+}
+export type GetUploadLinkMutationHookResult = ReturnType<
+ typeof useGetUploadLinkMutation
+>;
+export type GetUploadLinkMutationResult =
+ Apollo.MutationResult;
+export type GetUploadLinkMutationOptions = Apollo.BaseMutationOptions<
+ GetUploadLinkMutation,
+ GetUploadLinkMutationVariables
+>;
+export const TerminateUploadStreamDocument = gql`
+ mutation TerminateUploadStream(
+ $videoId: Int!
+ $videoName: String
+ $gameType: String
+ $tableSize: String
+ ) {
+ terminateUploadStream(
+ videoId: $videoId
+ videoName: $videoName
+ gameType: $gameType
+ tableSize: $tableSize
+ )
+ }
+`;
+export type TerminateUploadStreamMutationFn = Apollo.MutationFunction<
+ TerminateUploadStreamMutation,
+ TerminateUploadStreamMutationVariables
+>;
+
+/**
+ * __useTerminateUploadStreamMutation__
+ *
+ * To run a mutation, you first call `useTerminateUploadStreamMutation` within a React component and pass it any options that fit your needs.
+ * When your component renders, `useTerminateUploadStreamMutation` returns a tuple that includes:
+ * - A mutate function that you can call at any time to execute the mutation
+ * - An object with fields that represent the current status of the mutation's execution
+ *
+ * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;
+ *
+ * @example
+ * const [terminateUploadStreamMutation, { data, loading, error }] = useTerminateUploadStreamMutation({
+ * variables: {
+ * videoId: // value for 'videoId'
+ * videoName: // value for 'videoName'
+ * gameType: // value for 'gameType'
+ * tableSize: // value for 'tableSize'
+ * },
+ * });
+ */
+export function useTerminateUploadStreamMutation(
+ baseOptions?: Apollo.MutationHookOptions<
+ TerminateUploadStreamMutation,
+ TerminateUploadStreamMutationVariables
+ >,
+) {
+ const options = { ...defaultOptions, ...baseOptions };
+ return Apollo.useMutation<
+ TerminateUploadStreamMutation,
+ TerminateUploadStreamMutationVariables
+ >(TerminateUploadStreamDocument, options);
+}
+export type TerminateUploadStreamMutationHookResult = ReturnType<
+ typeof useTerminateUploadStreamMutation
+>;
+export type TerminateUploadStreamMutationResult =
+ Apollo.MutationResult;
+export type TerminateUploadStreamMutationOptions = Apollo.BaseMutationOptions<
+ TerminateUploadStreamMutation,
+ TerminateUploadStreamMutationVariables
+>;
diff --git a/src/lib/alert-messages/constants.ts b/src/lib/alert-messages/constants.ts
deleted file mode 100644
index 4f1895f..0000000
--- a/src/lib/alert-messages/constants.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-interface PermissionMessage {
- android: {
- title: string;
- message: string;
- };
- ios: {
- title: string;
- message: string;
- };
-}
-interface ApiError {
- title: string;
- message: string;
-}
-
-export const CAMERA_PERMISSION_DENIED: PermissionMessage = {
- android: {
- title: "In order to use the camera, you need to grant app permissions.",
- message: "Please go to Railbird > App Info and grant permissions. ",
- },
- ios: {
- title: "In order to use the camera, you need to grant app permissions.",
- message: "Please go to Settings > Railbird > Camera and grant permissions.",
- },
-};
-
-export const PERMISSION_ERROR: ApiError = {
- title: "There was an issue accessing permissions. ",
- message: "Please check you settings and try again",
-};
-
-export const TERMINATE_UPLOAD_ERROR: ApiError = {
- title: "There was an issue.",
- message: "Please try again",
-};
diff --git a/src/lib/alert-messages/index.ts b/src/lib/alert-messages/index.ts
deleted file mode 100644
index b71bebe..0000000
--- a/src/lib/alert-messages/index.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import { Alert, Platform } from "react-native";
-import {
- CAMERA_PERMISSION_DENIED,
- PERMISSION_ERROR,
- TERMINATE_UPLOAD_ERROR,
-} from "./constants";
-
-const ALERT_TYPE = {
- camera: CAMERA_PERMISSION_DENIED,
- permissionError: PERMISSION_ERROR,
- terminateUpload: TERMINATE_UPLOAD_ERROR,
-};
-
-export const showAlert = (alertType: string) => {
- const alert = ALERT_TYPE[alertType];
- const { title, message } = alert[Platform.OS] ?? alert;
- Alert.alert(title, message);
-};
diff --git a/src/navigation/app-navigator.tsx b/src/navigation/app-navigator.tsx
deleted file mode 100644
index 9ad9c2e..0000000
--- a/src/navigation/app-navigator.tsx
+++ /dev/null
@@ -1,51 +0,0 @@
-import {
- DarkTheme,
- DefaultTheme,
- NavigationContainer,
-} from "@react-navigation/native";
-import { createNativeStackNavigator } from "@react-navigation/native-stack";
-import { useColorScheme } from "react-native";
-
-import { useAuth } from "../context";
-import Login from "../screens/login";
-import Tabs from "./tab-navigator";
-
-const Stack = createNativeStackNavigator();
-
-const AppStack = () => (
-
-
-
-);
-/**
- * Functional component for app navigation. Configures a navigation container with a stack navigator.
- * Dynamically selects between dark and light themes based on the device's color scheme.
- * The stack navigator is configured to manage various app screens.
- *
- * @returns {React.ComponentType} A NavigationContainer wrapping a Stack.Navigator for app screens.
- */
-export default function AppNavigator(): React.JSX.Element {
- // useColorScheme get's the theme from device settings
- const scheme = useColorScheme();
- const { isLoggedIn } = useAuth();
-
- return (
-
-
- {isLoggedIn ? (
-
- ) : (
-
- )}
-
-
- );
-}
diff --git a/src/navigation/tab-navigator.tsx b/src/navigation/tab-navigator.tsx
deleted file mode 100644
index 83b4636..0000000
--- a/src/navigation/tab-navigator.tsx
+++ /dev/null
@@ -1,87 +0,0 @@
-import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
-import { createNativeStackNavigator } from "@react-navigation/native-stack";
-import { Image } from "react-native";
-import CameraScreen from "../component/recording/camera";
-import Profile from "../screens/profile";
-import RecordingDetails from "../screens/recording-stack/recording-details";
-import Video from "../screens/video-stack/video-details";
-import VideoFeed from "../screens/video-stack/video-feed";
-import { tabIconColors } from "../styles";
-
-import Icon from "../assets/icons/favicon.png";
-
-const Tab = createBottomTabNavigator();
-const RecordStack = createNativeStackNavigator();
-
-// tabBarIcon configuration should live on separate file and contain all logic/icons/rendering for the Tabs
-const tabIcons = {
- VideoStack: ,
- RecordingStack: ,
- Profile: ,
-};
-
-function RecordingTabStack() {
- return (
-
-
-
-
-
- );
-}
-
-function VideoTabStack() {
- return (
-
-
-
-
- );
-}
-
-/**
- * Functional component creating a tab navigator with called
- * Uses React Navigation's Tab.Navigator. Customizes tab bar appearance and icons.
- * Import screens and call them on component of Tab.Screen.
- *
- * @returns {React.ComponentType} A Tab.Navigator component with bottom tabs with screens.
- */
-
-export default function Tabs(): React.JSX.Element {
- return (
- ({
- headerShown: false,
- tabBarActiveTintColor: tabIconColors.selected,
- tabBarInactiveTintColor: tabIconColors.default,
- tabBarIcon: () => {
- return tabIcons[route.name];
- },
- })}
- >
-
-
-
-
- );
-}
diff --git a/src/operations/bucketed_metrics.gql b/src/operations/bucketed_metrics.gql
new file mode 100644
index 0000000..5d23209
--- /dev/null
+++ b/src/operations/bucketed_metrics.gql
@@ -0,0 +1,17 @@
+query GetAggregateShots($bucketSets: [BucketSetInputGQL!]!) {
+ getAggregateShots(bucketSets: $bucketSets) {
+ featureBuckets {
+ rangeKey
+ lowerBound
+ }
+ targetMetrics {
+ count
+ makePercentage
+ floatFeature {
+ featureName
+ average
+ median
+ }
+ }
+ }
+}
diff --git a/src/operations/feed.gql b/src/operations/feed.gql
new file mode 100644
index 0000000..dcfb3ad
--- /dev/null
+++ b/src/operations/feed.gql
@@ -0,0 +1,38 @@
+query GetFeed($first: Int! = 5, $after: String = null) {
+ getVideoFeedForUser(first: $first, after: $after) {
+ videos {
+ id
+ name
+ totalShotsMade
+ totalShots
+ makePercentage
+ medianRun
+ averageTimeBetweenShots
+ createdAt
+ updatedAt
+ shots {
+ id
+ videoId
+ startFrame
+ endFrame
+ createdAt
+ updatedAt
+ }
+ startTime
+ endTime
+ elapsedTime
+ stream {
+ id
+ linksRequested
+ uploadsCompleted
+ isCompleted
+ createdAt
+ updatedAt
+ }
+ }
+ pageInfo {
+ hasNextPage
+ endCursor
+ }
+ }
+}
diff --git a/src/operations/shots.gql b/src/operations/shots.gql
new file mode 100644
index 0000000..8113685
--- /dev/null
+++ b/src/operations/shots.gql
@@ -0,0 +1,30 @@
+query GetShots(
+ $filterInput: FilterInput
+ $includeCueObjectDistance: Boolean! = false
+ $includeCueObjectAngle: Boolean! = false
+ $includeCueBallSpeed: Boolean! = false
+ $includeShotDirection: Boolean! = false
+ $includeTargetPocketDistance: Boolean! = false
+ $includeMake: Boolean! = false
+ $includeIntendedPocketType: Boolean! = false
+) {
+ getShots(filterInput: $filterInput) {
+ id
+ videoId
+ startFrame
+ endFrame
+ createdAt
+ updatedAt
+ cueObjectFeatures {
+ cueObjectDistance @include(if: $includeCueObjectDistance)
+ cueObjectAngle @include(if: $includeCueObjectAngle)
+ cueBallSpeed @include(if: $includeCueBallSpeed)
+ shotDirection @include(if: $includeShotDirection)
+ }
+ pocketingIntentionFeatures {
+ targetPocketDistance @include(if: $includeTargetPocketDistance)
+ make @include(if: $includeMake)
+ intendedPocketType @include(if: $includeIntendedPocketType)
+ }
+ }
+}
diff --git a/src/operations/video_upload.gql b/src/operations/video_upload.gql
new file mode 100644
index 0000000..ada2c41
--- /dev/null
+++ b/src/operations/video_upload.gql
@@ -0,0 +1,49 @@
+mutation CreateUploadStream(
+ $videoName: String!
+ $deviceType: DeviceTypeEnum
+ $osVersion: String
+ $appVersion: String
+ $browserName: String
+ $browserVersion: String
+ $locale: String
+ $timezone: String
+ $networkType: String
+ $ipAddress: String
+) {
+ createUploadStream(
+ videoName: $videoName
+ uploadMetadata: {
+ deviceType: $deviceType
+ osVersion: $osVersion
+ appVersion: $appVersion
+ browserName: $browserName
+ browserVersion: $browserVersion
+ locale: $locale
+ timezone: $timezone
+ networkType: $networkType
+ ipAddress: $ipAddress
+ }
+ ) {
+ videoId
+ }
+}
+
+mutation GetUploadLink($videoId: Int!, $segmentIndex: Int!) {
+ getUploadLink(videoId: $videoId, segmentIndex: $segmentIndex) {
+ uploadUrl
+ }
+}
+
+mutation TerminateUploadStream(
+ $videoId: Int!
+ $videoName: String
+ $gameType: String
+ $tableSize: String
+) {
+ terminateUploadStream(
+ videoId: $videoId
+ videoName: $videoName
+ gameType: $gameType
+ tableSize: $tableSize
+ )
+}
diff --git a/src/schema.gql b/src/schema.gql
new file mode 100644
index 0000000..c7deb81
--- /dev/null
+++ b/src/schema.gql
@@ -0,0 +1,281 @@
+type Query {
+ getAggregateShots(bucketSets: [BucketSetInputGQL!]!): [AggregateResultGQL!]!
+ getUser(userId: Int!): UserGQL
+ getLoggedInUser: UserGQL
+ getVideo(videoId: Int!): VideoGQL!
+ getShots(filterInput: FilterInput = null): [ShotGQL!]!
+ getBucketSet(keyName: String!): BucketSetGQL
+ getVideoFeedForUser(first: Int! = 5, after: String = null): VideoFeedGQL!
+}
+
+type AggregateResultGQL {
+ featureBuckets: [BucketGQL!]!
+ targetMetrics: [TargetMetricGQL!]!
+}
+
+type BucketGQL {
+ rangeKey: String!
+ lowerBound: Float!
+}
+
+type TargetMetricGQL {
+ count: Int
+ makePercentage: Float
+ floatFeature: TargetFloatFeatureGQL
+}
+
+type TargetFloatFeatureGQL {
+ featureName: String!
+ average: Float
+ median: Float
+}
+
+input BucketSetInputGQL {
+ feature: String!
+ buckets: [BucketInputGQL!]!
+}
+
+input BucketInputGQL {
+ rangeKey: String!
+ lowerBound: Float!
+}
+
+type UserGQL {
+ id: Int!
+ firebaseUid: String!
+ username: String!
+ createdAt: DateTime
+ updatedAt: DateTime
+ statistics: UserStatisticsGQL!
+}
+
+"""
+Date with time (isoformat)
+"""
+scalar DateTime
+
+type UserStatisticsGQL {
+ totalShots: Int!
+ totalShotsMade: Int!
+ makePercentage: Decimal!
+ averageTimeBetweenShots: Decimal!
+ timeSpentPlaying: Decimal!
+ medianRun: Decimal
+}
+
+"""
+Decimal (fixed-point)
+"""
+scalar Decimal
+
+type VideoGQL {
+ id: Int!
+ name: String
+ totalShotsMade: Int!
+ totalShots: Int!
+ makePercentage: Float!
+ medianRun: Float
+ averageTimeBetweenShots: Float
+ createdAt: DateTime
+ updatedAt: DateTime
+ shots: [ShotGQL!]!
+ startTime: DateTime
+ endTime: DateTime
+ elapsedTime: Float
+ framesPerSecond: Int!
+ stream: UploadStreamGQL
+}
+
+type ShotGQL {
+ id: Int
+ videoId: Int
+ startFrame: Int
+ endFrame: Int
+ createdAt: DateTime
+ updatedAt: DateTime
+ features: ShotFeaturesGQL
+ cueObjectFeatures: CueObjectFeaturesGQL
+ pocketingIntentionFeatures: PocketingIntentionFeaturesGQL
+}
+
+type ShotFeaturesGQL {
+ cueObjectAngle: Float
+ cueObjectDistance: Float
+ targetPocketDistance: Float
+ intendedPocket: PocketEnum
+ cueBallSpeed: Float
+ shotDirection: ShotDirectionEnum
+ bank: BankFeaturesGQL
+}
+
+enum PocketEnum {
+ CORNER
+ SIDE
+}
+
+enum ShotDirectionEnum {
+ LEFT
+ RIGHT
+ STRAIGHT
+}
+
+type BankFeaturesGQL {
+ wallsHit: [WallTypeEnum!]!
+ bankAngle: Float!
+ distance: Float!
+}
+
+enum WallTypeEnum {
+ LONG
+ SHORT
+}
+
+type CueObjectFeaturesGQL {
+ cueObjectDistance: Float
+ cueObjectAngle: Float
+ cueBallSpeed: Float
+ shotDirection: ShotDirectionEnum
+}
+
+type PocketingIntentionFeaturesGQL {
+ targetPocketDistance: Float
+ make: Boolean
+ intendedPocketType: PocketEnum
+}
+
+type UploadStreamGQL {
+ id: ID!
+ linksRequested: Int!
+ uploadsCompleted: Int!
+ isCompleted: Boolean!
+ uploadMetadata: UploadStreamMetadata!
+ createdAt: DateTime!
+ updatedAt: DateTime!
+}
+
+type UploadStreamMetadata {
+ deviceType: DeviceTypeEnum
+ osVersion: String
+ appVersion: String
+ browserName: String
+ browserVersion: String
+ locale: String
+ timezone: String
+ networkType: String
+ ipAddress: String
+}
+
+enum DeviceTypeEnum {
+ IOS
+ ANDROID
+ BROWSER
+}
+
+input FilterInput {
+ andFilters: AndFilter = null
+ orFilters: OrFilter = null
+ cueObjectDistance: CueObjectDistanceInput = null
+ targetPocketDistance: TargetPocketDistanceInput = null
+ cueObjectAngle: CueObjectAngleInput = null
+ cueBallSpeed: CueBallSpeedInput = null
+ intendedPocketType: IntendedPocketTypeInput = null
+ shotDirection: ShotDirectionInput = null
+}
+
+input AndFilter {
+ filters: [FilterInput!]!
+}
+
+input OrFilter {
+ filters: [FilterInput!]!
+}
+
+input CueObjectDistanceInput {
+ value: RangeFilter!
+}
+
+input RangeFilter {
+ lessThan: Float = null
+ greaterThanEqualTo: Float = null
+}
+
+input TargetPocketDistanceInput {
+ value: RangeFilter!
+}
+
+input CueObjectAngleInput {
+ value: RangeFilter!
+}
+
+input CueBallSpeedInput {
+ value: RangeFilter!
+}
+
+input IntendedPocketTypeInput {
+ value: EnumFilter!
+}
+
+input EnumFilter {
+ equals: String = null
+}
+
+input ShotDirectionInput {
+ value: EnumFilter!
+}
+
+type BucketSetGQL {
+ keyName: String!
+ feature: String!
+ buckets: [BucketGQL!]!
+}
+
+type VideoFeedGQL {
+ videos: [VideoGQL!]!
+ pageInfo: PageInfoGQL!
+}
+
+type PageInfoGQL {
+ hasNextPage: Boolean!
+ endCursor: String
+}
+
+type Mutation {
+ createBucketSet(params: CreateBucketSetInput!): BucketSetGQL!
+ createUploadStream(
+ uploadMetadata: UploadMetadataInput
+ videoName: String = null
+ ): CreateUploadStreamReturn!
+ getUploadLink(videoId: Int!, segmentIndex: Int!): GetUploadLinkReturn!
+ terminateUploadStream(
+ videoId: Int!
+ videoName: String = null
+ gameType: String = null
+ tableSize: String = null
+ ): Boolean!
+}
+
+input CreateBucketSetInput {
+ keyName: String!
+ feature: String!
+ buckets: [BucketInputGQL!]!
+}
+
+type CreateUploadStreamReturn {
+ videoId: Int!
+}
+
+input UploadMetadataInput {
+ deviceType: DeviceTypeEnum = null
+ osVersion: String = null
+ appVersion: String = null
+ browserName: String = null
+ browserVersion: String = null
+ locale: String = null
+ timezone: String = null
+ networkType: String = null
+ ipAddress: String = null
+}
+
+type GetUploadLinkReturn {
+ uploadUrl: String!
+}
diff --git a/src/screens/login.tsx b/src/screens/login.tsx
deleted file mode 100644
index fdfffcb..0000000
--- a/src/screens/login.tsx
+++ /dev/null
@@ -1,155 +0,0 @@
-import { FirebaseAuthTypes } from "@react-native-firebase/auth";
-import React, { useState } from "react";
-import {
- Button,
- Keyboard,
- StyleSheet,
- Switch,
- Text,
- TextInput,
- TouchableOpacity,
- TouchableWithoutFeedback,
- View,
-} from "react-native";
-import { confirmCode, handleSignInWithPhoneNumber } from "../auth";
-import { createOrSignInUser } from "../auth/firebase-auth";
-import { colors } from "../styles";
-
-export default function Login() {
- const [isEmailLogin, setIsEmailLogin] = useState(false);
- const toggleSwitch = () => setIsEmailLogin((previousState) => !previousState);
-
- // Phone number
- const [phoneNumber, setPhoneNumber] = useState("");
- const [code, setCode] = useState("");
- const [confirm, setConfirm] =
- useState(null);
-
- // Email
- const [isSignUp, setIsSignUp] = useState(false);
- const [email, setEmail] = useState("");
- const [password, setPassword] = useState("");
- const toggleSignUp = () => setIsSignUp(!isSignUp);
-
- return (
- Keyboard.dismiss()}>
-
-
- Use email
-
-
-
- {!isEmailLogin ? (
- <>
-
- {confirm && (
-
- )}
-
-
-
- >
- ) : (
- <>
-
-
-
-
- {isSignUp
- ? "Already have an account? Sign In"
- : "Don't have an account? Sign Up"}
-
-
-
-
-
- >
- )}
-
-
- );
-}
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- alignItems: "center",
- justifyContent: "center",
- backgroundColor: "#fff",
- },
- input: {
- width: "80%",
- height: 50,
- borderWidth: 1,
- borderColor: "black",
- borderRadius: 25,
- marginBottom: 20,
- padding: 15,
- fontSize: 18,
- },
- toggleRow: {
- flexDirection: "row",
- alignItems: "center",
- marginBottom: 20,
- },
- toggleText: { marginRight: 20, fontSize: 16 },
- linkText: {
- fontSize: 16,
- color: "#007AFF",
- paddingVertical: 10,
- textAlign: "center",
- },
- buttonContainer: {
- width: "80%",
- borderRadius: 25,
- },
-});
diff --git a/src/screens/profile.tsx b/src/screens/profile.tsx
deleted file mode 100644
index eaad16f..0000000
--- a/src/screens/profile.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import React from "react";
-import { StyleSheet, Text, View } from "react-native";
-import SignOutButton from "../component/buttons/sign-out";
-import { useAuth } from "../context";
-
-// Profile Mock - can be used for session summary screen using a query handler component
-// Sign out button only functional when NOT using dev env
-export default function ProfileScreen() {
- const { user } = useAuth();
-
- return (
-
- {user && (
- <>
-
- Display name: {user?.displayName ?? "No username set"}
- Phone number/Email: {user?.phoneNumber ?? user?.email}
-
-
-
-
- >
- )}
-
- );
-}
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- justifyContent: "space-between",
- },
- userInfo: {
- marginTop: 10,
- paddingHorizontal: 10,
- },
- signOutButton: {
- paddingBottom: "5%",
- paddingHorizontal: "25%",
- },
-});
diff --git a/src/screens/recording-stack/recording-details.tsx b/src/screens/recording-stack/recording-details.tsx
deleted file mode 100644
index e9cb28b..0000000
--- a/src/screens/recording-stack/recording-details.tsx
+++ /dev/null
@@ -1,94 +0,0 @@
-import React from "react";
-import {
- ActivityIndicator,
- Keyboard,
- Text,
- TextInput,
- TouchableOpacity,
- TouchableWithoutFeedback,
- View,
-} from "react-native";
-import DropDownPicker from "react-native-dropdown-picker";
-import { useRecordingDetails } from "../../component/recording/use-recording-details";
-import { globalInputStyles } from "../../styles";
-import { recordStyles as styles } from "./styles";
-
-export default function VideoDetails({ navigation, route }): React.JSX.Element {
- const { mode } = route.params;
- const {
- sessionName,
- setSessionName,
- gameType,
- tableSize,
- handleSubmit,
- loading,
- } = useRecordingDetails({ params: route.params, navigation });
-
- const dropDownStyles = {
- style: globalInputStyles.dropdownStyle,
- };
-
- return (
- Keyboard.dismiss()}>
-
-
- {mode === "start-recording" ? "Record Session" : "Save Session"}
-
-
- Session Name
-
- Game Type
-
- Table Size
-
-
-
-
- {mode === "start-recording" && (
- navigation.goBack()}
- >
-