Resolve "64-bit apk for play store"
3
.babelrc
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
"presets": ["module:metro-react-native-babel-preset"]
|
||||
}
|
||||
|
|
@ -24,7 +24,6 @@
|
|||
[libs]
|
||||
node_modules/react-native/Libraries/react-native/react-native-interface.js
|
||||
node_modules/react-native/flow/
|
||||
node_modules/react-native/flow-github/
|
||||
|
||||
[options]
|
||||
emoji=true
|
||||
|
|
@ -67,4 +66,4 @@ suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy
|
|||
suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError
|
||||
|
||||
[version]
|
||||
^0.78.0
|
||||
^0.92.0
|
||||
|
|
|
|||
1
.gitignore
vendored
|
|
@ -57,3 +57,4 @@ buck-out/
|
|||
# Bundle artifact
|
||||
*.jsbundle
|
||||
ios/Pods/*
|
||||
android/app/src/main/assets/index.android.bundle
|
||||
11
App-test.js
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
/**
|
||||
* @format
|
||||
*/
|
||||
import 'react-native';
|
||||
import React from 'react';
|
||||
import App from '../App';
|
||||
// Note: test renderer must be required after react-native.
|
||||
import renderer from 'react-test-renderer';
|
||||
it('renders correctly', () => {
|
||||
renderer.create(<App />);
|
||||
});
|
||||
|
|
@ -8,23 +8,13 @@
|
|||
# - `buck install -r android/app` - compile, install and run application
|
||||
#
|
||||
|
||||
load(":build_defs.bzl", "create_aar_targets", "create_jar_targets")
|
||||
|
||||
lib_deps = []
|
||||
|
||||
for jarfile in glob(['libs/*.jar']):
|
||||
name = 'jars__' + jarfile[jarfile.rindex('/') + 1: jarfile.rindex('.jar')]
|
||||
lib_deps.append(':' + name)
|
||||
prebuilt_jar(
|
||||
name = name,
|
||||
binary_jar = jarfile,
|
||||
)
|
||||
create_aar_targets(glob(["libs/*.aar"]))
|
||||
|
||||
for aarfile in glob(['libs/*.aar']):
|
||||
name = 'aars__' + aarfile[aarfile.rindex('/') + 1: aarfile.rindex('.aar')]
|
||||
lib_deps.append(':' + name)
|
||||
android_prebuilt_aar(
|
||||
name = name,
|
||||
aar = aarfile,
|
||||
)
|
||||
create_jar_targets(glob(["libs/*.jar"]))
|
||||
|
||||
android_library(
|
||||
name = "all-libs",
|
||||
|
|
@ -1,6 +1,4 @@
|
|||
apply plugin: "com.android.application"
|
||||
apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"
|
||||
apply plugin: "io.fabric"
|
||||
|
||||
import com.android.build.OutputFile
|
||||
|
||||
|
|
@ -20,6 +18,9 @@ import com.android.build.OutputFile
|
|||
* // the entry file for bundle generation
|
||||
* entryFile: "index.android.js",
|
||||
*
|
||||
* // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format
|
||||
* bundleCommand: "ram-bundle",
|
||||
*
|
||||
* // whether to bundle JS and assets in debug mode
|
||||
* bundleInDebug: false,
|
||||
*
|
||||
|
|
@ -35,6 +36,13 @@ import com.android.build.OutputFile
|
|||
* // bundleInPaidRelease: true,
|
||||
* // bundleInBeta: true,
|
||||
*
|
||||
* // whether to disable dev mode in custom build variants (by default only disabled in release)
|
||||
* // for example: to disable dev mode in the staging build type (if configured)
|
||||
* devDisabledInStaging: true,
|
||||
* // The configuration property can be in the following formats
|
||||
* // 'devDisabledIn${productFlavor}${buildType}'
|
||||
* // 'devDisabledIn${buildType}'
|
||||
*
|
||||
* // the root of your project, i.e. where "package.json" lives
|
||||
* root: "../../",
|
||||
*
|
||||
|
|
@ -60,13 +68,18 @@ import com.android.build.OutputFile
|
|||
* inputExcludes: ["android/**", "ios/**"],
|
||||
*
|
||||
* // override which node gets called and with what additional arguments
|
||||
* nodeExecutableAndArgs: ["node"]
|
||||
* nodeExecutableAndArgs: ["node"],
|
||||
*
|
||||
* // supply additional arguments to the packager
|
||||
* extraPackagerArgs: []
|
||||
* ]
|
||||
*/
|
||||
|
||||
project.ext.react = [
|
||||
entryFile: "index.js",
|
||||
enableHermes: false, // clean and rebuild if changing
|
||||
]
|
||||
|
||||
apply from: "../../node_modules/react-native/react.gradle"
|
||||
|
||||
/**
|
||||
|
|
@ -77,36 +90,65 @@ apply from: "../../node_modules/react-native/react.gradle"
|
|||
* Upload all the APKs to the Play Store and people will download
|
||||
* the correct one based on the CPU architecture of their device.
|
||||
*/
|
||||
def enableSeparateBuildPerCPUArchitecture = true
|
||||
def enableSeparateBuildPerCPUArchitecture = false
|
||||
|
||||
/**
|
||||
* Run Proguard to shrink the Java bytecode in release builds.
|
||||
*/
|
||||
def enableProguardInReleaseBuilds = false
|
||||
|
||||
/**
|
||||
* The preferred build flavor of JavaScriptCore.
|
||||
*
|
||||
* For example, to use the international variant, you can use:
|
||||
* `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
|
||||
*
|
||||
* The international variant includes ICU i18n library and necessary data
|
||||
* allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
|
||||
* give correct results when using with locales other than en-US. Note that
|
||||
* this variant is about 6MiB larger per architecture than default.
|
||||
*/
|
||||
def jscFlavor = 'org.webkit:android-jsc:+'
|
||||
|
||||
/**
|
||||
* Whether to enable the Hermes VM.
|
||||
*
|
||||
* This should be set on project.ext.react and mirrored here. If it is not set
|
||||
* on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
|
||||
* and the benefits of using Hermes will therefore be sharply reduced.
|
||||
*/
|
||||
def enableHermes = project.ext.react.get("enableHermes", false);
|
||||
|
||||
android {
|
||||
compileSdkVersion rootProject.ext.compileSdkVersion
|
||||
buildToolsVersion rootProject.ext.buildToolsVersion
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.aretherecookies"
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 61
|
||||
versionCode 101
|
||||
versionName "1.0"
|
||||
ndk {
|
||||
abiFilters "armeabi-v7a", "x86"
|
||||
}
|
||||
}
|
||||
splits {
|
||||
abi {
|
||||
reset()
|
||||
enable enableSeparateBuildPerCPUArchitecture
|
||||
universalApk false // If true, also generate a universal APK
|
||||
// include "armeabi-v7a", "x86"
|
||||
include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
|
||||
}
|
||||
}
|
||||
signingConfigs {
|
||||
debug {
|
||||
storeFile file('debug.keystore')
|
||||
storePassword 'android'
|
||||
keyAlias 'androiddebugkey'
|
||||
keyPassword 'android'
|
||||
}
|
||||
release {
|
||||
storeFile file(MYAPP_RELEASE_STORE_FILE)
|
||||
storePassword MYAPP_RELEASE_STORE_PASSWORD
|
||||
|
|
@ -115,56 +157,51 @@ android {
|
|||
}
|
||||
}
|
||||
buildTypes {
|
||||
debug {
|
||||
signingConfig signingConfigs.debug
|
||||
}
|
||||
release {
|
||||
signingConfig signingConfigs.release
|
||||
minifyEnabled enableProguardInReleaseBuilds
|
||||
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
|
||||
signingConfig signingConfigs.release
|
||||
}
|
||||
debug {
|
||||
signingConfig signingConfigs.release
|
||||
}
|
||||
}
|
||||
// applicationVariants are e.g. debug, release
|
||||
applicationVariants.all { variant ->
|
||||
variant.outputs.each { output ->
|
||||
// For each separate APK per architecture, set a unique version code as described here:
|
||||
// http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
|
||||
def versionCodes = ["armeabi-v7a":1, "x86":2]
|
||||
// https://developer.android.com/studio/build/configure-apk-splits.html
|
||||
def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
|
||||
def abi = output.getFilter(OutputFile.ABI)
|
||||
if (abi != null) { // null for the universal-debug, universal-release variants
|
||||
output.versionCodeOverride =
|
||||
versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility 1.8
|
||||
targetCompatibility 1.8
|
||||
packagingOptions {
|
||||
pickFirst '**/armeabi-v7a/libc++_shared.so'
|
||||
pickFirst '**/x86/libc++_shared.so'
|
||||
pickFirst '**/arm64-v8a/libc++_shared.so'
|
||||
pickFirst '**/x86_64/libc++_shared.so'
|
||||
pickFirst '**/x86/libjsc.so'
|
||||
pickFirst '**/armeabi-v7a/libjsc.so'
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
api project(':react-native-google-places')
|
||||
api project(':react-native-snackbar')
|
||||
api project(':react-native-google-places')
|
||||
api project(':react-native-auth0')
|
||||
api project(':react-native-maps')
|
||||
api project(':react-native-vector-icons')
|
||||
api project(':react-native-image-picker')
|
||||
|
||||
// implementation 'com.google.firebase:firebase-core:16.0.1'
|
||||
// implementation('com.crashlytics.sdk.android:crashlytics:2.9.5@aar') {
|
||||
// transitive = true
|
||||
// }
|
||||
|
||||
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
|
||||
|
||||
implementation fileTree(dir: "libs", include: ["*.jar"])
|
||||
implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
|
||||
// implementation "com.android.support:appcompat-v7:26.0.0"
|
||||
implementation "com.android.support:design:${rootProject.ext.supportLibVersion}"
|
||||
implementation "com.facebook.react:react-native:+" // From node_modules
|
||||
|
||||
if (enableHermes) {
|
||||
def hermesPath = "../../node_modules/hermesvm/android/";
|
||||
debugImplementation files(hermesPath + "hermes-debug.aar")
|
||||
releaseImplementation files(hermesPath + "hermes-release.aar")
|
||||
} else {
|
||||
implementation jscFlavor
|
||||
}
|
||||
}
|
||||
|
||||
// Run this once to be able to run the application with BUCK
|
||||
|
|
@ -173,3 +210,5 @@ task copyDownloadableDepsToLibs(type: Copy) {
|
|||
from configurations.compile
|
||||
into 'libs'
|
||||
}
|
||||
|
||||
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
|
||||
|
|
|
|||
19
android/app/build_defs.bzl
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
"""Helper definitions to glob .aar and .jar targets"""
|
||||
|
||||
def create_aar_targets(aarfiles):
|
||||
for aarfile in aarfiles:
|
||||
name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")]
|
||||
lib_deps.append(":" + name)
|
||||
android_prebuilt_aar(
|
||||
name = name,
|
||||
aar = aarfile,
|
||||
)
|
||||
|
||||
def create_jar_targets(jarfiles):
|
||||
for jarfile in jarfiles:
|
||||
name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")]
|
||||
lib_deps.append(":" + name)
|
||||
prebuilt_jar(
|
||||
name = name,
|
||||
binary_jar = jarfile,
|
||||
)
|
||||
7
android/app/proguard-rules.pro
vendored
|
|
@ -8,10 +8,3 @@
|
|||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# Add any project specific keep options here:
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
|
|
|
|||
8
android/app/src/debug/AndroidManifest.xml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
|
||||
|
||||
<application android:usesCleartextTraffic="true" tools:targetApi="28" tools:ignore="GoogleAppIndexingWarning" />
|
||||
</manifest>
|
||||
|
|
@ -5,64 +5,29 @@
|
|||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> -->
|
||||
|
||||
<application
|
||||
android:name=".MainApplication"
|
||||
android:label="@string/app_name"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:allowBackup="false"
|
||||
android:theme="@style/AppTheme">
|
||||
|
||||
<meta-data
|
||||
android:name="io.fabric.ApiKey"
|
||||
android:value="d0a6755e645f5a118014ae56f140d916d6d8d0e8"
|
||||
/>
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:label="@string/app_name"
|
||||
android:launchMode="singleTask"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data
|
||||
android:host="aretherecookies.auth0.com"
|
||||
android:pathPrefix="/android/${applicationId}/callback"
|
||||
android:scheme="${applicationId}" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
|
||||
|
||||
<!-- <activity tools:replace="android:theme"
|
||||
android:name="com.facebook.FacebookActivity"
|
||||
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@android:style/Theme.Translucent.NoTitleBar"/> -->
|
||||
|
||||
<activity
|
||||
android:name="com.facebook.CustomTabActivity"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<!-- <data android:scheme="@string/fb_login_protocol_scheme" /> -->
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
|
||||
<meta-data
|
||||
android:name="com.google.android.geo.API_KEY"
|
||||
android:value="AIzaSyBfMm1y6JayCbXrQmgAG1R3ka4ZOJno_5E"/>
|
||||
<!-- <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/fb_app_id"/> -->
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
|
|
|
|||
|
|
@ -10,6 +10,6 @@ public class MainActivity extends ReactActivity {
|
|||
*/
|
||||
@Override
|
||||
protected String getMainComponentName() {
|
||||
return "AreThereCookies";
|
||||
return "aretherecookies";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,20 +1,16 @@
|
|||
package com.aretherecookies;
|
||||
|
||||
import android.app.Application;
|
||||
import android.util.Log;
|
||||
|
||||
import com.facebook.react.PackageList;
|
||||
import com.facebook.hermes.reactexecutor.HermesExecutorFactory;
|
||||
import com.facebook.react.bridge.JavaScriptExecutorFactory;
|
||||
import com.facebook.react.ReactApplication;
|
||||
import com.oblador.vectoricons.VectorIconsPackage;
|
||||
import com.azendoo.reactnativesnackbar.SnackbarPackage;
|
||||
import com.airbnb.android.react.maps.MapsPackage;
|
||||
import com.imagepicker.ImagePickerPackage;
|
||||
import com.arttitude360.reactnative.rngoogleplaces.RNGooglePlacesPackage;
|
||||
import com.auth0.react.A0Auth0Package;
|
||||
import com.facebook.react.ReactNativeHost;
|
||||
import com.facebook.react.ReactPackage;
|
||||
import com.facebook.react.shell.MainReactPackage;
|
||||
import com.facebook.soloader.SoLoader;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class MainApplication extends Application implements ReactApplication {
|
||||
|
|
@ -27,14 +23,16 @@ public class MainApplication extends Application implements ReactApplication {
|
|||
|
||||
@Override
|
||||
protected List<ReactPackage> getPackages() {
|
||||
return Arrays.<ReactPackage>asList(
|
||||
new MainReactPackage(),
|
||||
new RNGooglePlacesPackage(),
|
||||
new SnackbarPackage(),
|
||||
new A0Auth0Package(),
|
||||
new MapsPackage(),
|
||||
new ImagePickerPackage()
|
||||
);
|
||||
@SuppressWarnings("UnnecessaryLocalVariable")
|
||||
List<ReactPackage> packages = new PackageList(this).getPackages();
|
||||
// Packages that cannot be autolinked yet can be added manually here, for example:
|
||||
// packages.add(new MyReactNativePackage());
|
||||
return packages;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getJSMainModuleName() {
|
||||
return "index";
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1,19 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".MainActivity">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Hello World!"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
0
android/app/src/main/res/mipmap-hdpi/ic_launcher.png
Executable file → Normal file
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
0
android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
Executable file → Normal file
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
0
android/app/src/main/res/mipmap-mdpi/ic_launcher.png
Executable file → Normal file
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
0
android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
Executable file → Normal file
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
0
android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
Executable file → Normal file
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
0
android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
Executable file → Normal file
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
0
android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
Executable file → Normal file
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
0
android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
Executable file → Normal file
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
0
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Executable file → Normal file
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |
0
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
Executable file → Normal file
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="colorPrimary">#008577</color>
|
||||
<color name="colorPrimaryDark">#00574B</color>
|
||||
<color name="colorAccent">#D81B60</color>
|
||||
<color name="colorPrimary">#6d5354</color>
|
||||
<color name="colorPrimaryDark">#412A2B</color>
|
||||
<color name="colorAccent">#0E6E9E</color>
|
||||
</resources>
|
||||
|
|
|
|||
2
android/app/src/main/res/values/strings.xml
Executable file → Normal file
|
|
@ -1,3 +1,3 @@
|
|||
<resources>
|
||||
<string name="app_name">My Application</string>
|
||||
<string name="app_name">Aretherecookies?</string>
|
||||
</resources>
|
||||
|
|
|
|||
6
android/app/src/main/res/values/styles.xml
Executable file → Normal file
|
|
@ -1,11 +1,9 @@
|
|||
<resources>
|
||||
|
||||
<!-- Base application theme. -->
|
||||
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
|
||||
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="colorPrimary">@color/colorPrimary</item>
|
||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||
<item name="colorAccent">@color/colorAccent</item>
|
||||
<item name="android:textColor">#000000</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -3,36 +3,36 @@
|
|||
buildscript {
|
||||
ext {
|
||||
buildToolsVersion = "28.0.3"
|
||||
minSdkVersion = 23
|
||||
compileSdkVersion = 27
|
||||
targetSdkVersion = 27
|
||||
supportLibVersion = "27.1.1"
|
||||
googlePlayServicesVersion = "15.0.1"
|
||||
androidMapsUtilsVersion = "0.5+"
|
||||
minSdkVersion = 16
|
||||
compileSdkVersion = 28
|
||||
targetSdkVersion = 28
|
||||
supportLibVersion = "28.0.0"
|
||||
}
|
||||
repositories {
|
||||
google()
|
||||
mavenLocal()
|
||||
jcenter()
|
||||
maven {
|
||||
url 'https://maven.fabric.io/public'
|
||||
}
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.4.1'
|
||||
classpath 'com.google.gms:google-services:4.0.1'
|
||||
classpath 'io.fabric.tools:gradle:1.25.4'
|
||||
classpath("com.android.tools.build:gradle:3.4.1")
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
google()
|
||||
mavenLocal()
|
||||
jcenter()
|
||||
maven {
|
||||
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
|
||||
url "$rootDir/../node_modules/react-native/android"
|
||||
url("$rootDir/../node_modules/react-native/android")
|
||||
}
|
||||
maven {
|
||||
// Android JSC is installed from npm
|
||||
url("$rootDir/../node_modules/jsc-android/dist")
|
||||
}
|
||||
|
||||
google()
|
||||
jcenter()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
BIN
android/bundletool-0.10.2.jar
Normal file
|
|
@ -12,15 +12,15 @@
|
|||
# Default value: -Xmx10248m -XX:MaxPermSize=256m
|
||||
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
|
||||
|
||||
# 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
|
||||
|
||||
MYAPP_RELEASE_STORE_FILE=atc-release-key.keystore
|
||||
MYAPP_RELEASE_KEY_ALIAS=atc-key-alias
|
||||
MYAPP_RELEASE_STORE_PASSWORD=bigjohncookies
|
||||
MYAPP_RELEASE_KEY_PASSWORD=bigjohncookies
|
||||
|
||||
# android.useDeprecatedNdk=true
|
||||
# org.gradle.configureondemand=true
|
||||
# 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
|
||||
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
|
|
|
|||
BIN
android/gradle/gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
5
android/gradle/gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
BIN
android/gradle/wrapper/gradle-wrapper.jar
vendored
|
|
@ -1,6 +1,5 @@
|
|||
#Sat Jul 06 09:44:44 CDT 2019
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
|
||||
|
|
|
|||
18
android/gradlew
vendored
|
|
@ -1,5 +1,21 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
#
|
||||
# Copyright 2015 the original author or 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
|
||||
#
|
||||
# http://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 UN*X
|
||||
|
|
@ -28,7 +44,7 @@ APP_NAME="Gradle"
|
|||
APP_BASE_NAME=`basename "$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=""
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
|
|
|||
18
android/gradlew.bat
vendored
|
|
@ -1,3 +1,19 @@
|
|||
@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 http://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
|
||||
|
|
@ -14,7 +30,7 @@ set APP_BASE_NAME=%~n0
|
|||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@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=
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
|
|
|||
|
|
@ -1,17 +1,3 @@
|
|||
rootProject.name = 'AreThereCookies'
|
||||
include ':react-native-google-places'
|
||||
project(':react-native-google-places').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-google-places/android')
|
||||
include ':react-native-snackbar'
|
||||
project(':react-native-snackbar').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-snackbar/android')
|
||||
include ':react-native-google-places'
|
||||
project(':react-native-google-places').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-google-places/android')
|
||||
include ':react-native-auth0'
|
||||
project(':react-native-auth0').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-auth0/android')
|
||||
include ':react-native-maps'
|
||||
project(':react-native-maps').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-maps/lib/android')
|
||||
include ':react-native-vector-icons'
|
||||
project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android')
|
||||
include ':react-native-image-picker'
|
||||
project(':react-native-image-picker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-image-picker/android')
|
||||
|
||||
rootProject.name = 'aretherecookies'
|
||||
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
|
||||
include ':app'
|
||||
|
|
|
|||
2
app.json
|
|
@ -1,4 +1,4 @@
|
|||
{
|
||||
"name": "aretherecookies",
|
||||
"displayName": "aretherecookies"
|
||||
"displayName": "Aretherecookies?"
|
||||
}
|
||||
3
babel.config.js
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
module.exports = {
|
||||
presets: ['module:metro-react-native-babel-preset'],
|
||||
};
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
/**
|
||||
* Sample React Native App
|
||||
* https://github.com/facebook/react-native
|
||||
* @flow
|
||||
*/
|
||||
|
||||
import { AppRegistry, UIManager } from 'react-native';
|
||||
import App from './js/App';
|
||||
|
||||
UIManager.setLayoutAnimationEnabledExperimental && UIManager.setLayoutAnimationEnabledExperimental(true);
|
||||
|
||||
AppRegistry.registerComponent('AreThereCookies', () => App);
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
import React, { Component } from 'react';
|
||||
import { AppRegistry, UIManager, Text, View } from 'react-native';
|
||||
import App from './js/App';
|
||||
|
||||
UIManager.setLayoutAnimationEnabledExperimental && UIManager.setLayoutAnimationEnabledExperimental(true);
|
||||
|
||||
AppRegistry.registerComponent('AreThereCookies', () => App);
|
||||
9
index.js
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
/**
|
||||
* @format
|
||||
*/
|
||||
|
||||
import {AppRegistry} from 'react-native';
|
||||
import {name as appName} from './app.json';
|
||||
import App from './js/App';
|
||||
|
||||
AppRegistry.registerComponent(appName, () => App);
|
||||
65
ios/Podfile
|
|
@ -3,18 +3,63 @@
|
|||
|
||||
source 'https://github.com/CocoaPods/Specs.git'
|
||||
|
||||
# target 'AreThereCookies' do
|
||||
# # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
|
||||
# # use_frameworks!
|
||||
|
||||
# # Pods for AreThereCookies
|
||||
# pod 'GooglePlaces', '~> 3.0'
|
||||
# pod 'GoogleMaps', '~> 3.0'
|
||||
# pod 'GooglePlacePicker', '~> 3.0'
|
||||
|
||||
# target 'AreThereCookiesTests' do
|
||||
# inherit! :search_paths
|
||||
# # Pods for testing
|
||||
# end
|
||||
|
||||
# end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
target 'AreThereCookies' do
|
||||
# Uncomment the next line if you're using Swift or would like to use dynamic frameworks
|
||||
# use_frameworks!
|
||||
|
||||
# Pods for AreThereCookies
|
||||
pod 'GooglePlaces', '~> 2.7'
|
||||
pod 'GoogleMaps', '~> 2.7'
|
||||
pod 'GooglePlacePicker', '~> 2.7'
|
||||
# Pods for _YOUR_PROJECT_TARGET_
|
||||
pod 'React', :path => '../node_modules/react-native', :subspecs => [
|
||||
'Core',
|
||||
'CxxBridge',
|
||||
'DevSupport',
|
||||
'RCTText',
|
||||
'RCTImage',
|
||||
'RCTNetwork',
|
||||
'RCTWebSocket',
|
||||
'RCTSettings',
|
||||
'RCTAnimation',
|
||||
'RCTLinkingIOS',
|
||||
# Add any other subspecs you want to use in your project
|
||||
# Remove any subspecs you don't want to use in your project
|
||||
]
|
||||
|
||||
target 'AreThereCookiesTests' do
|
||||
inherit! :search_paths
|
||||
# Pods for testing
|
||||
end
|
||||
pod "yoga", :path => "../node_modules/react-native/ReactCommon/yoga"
|
||||
pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
|
||||
pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
|
||||
pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
|
||||
# This should already be auto-added for you, if not add the line below
|
||||
pod 'react-native-google-places', :path => '../node_modules/react-native-google-places'
|
||||
|
||||
end
|
||||
|
||||
post_install do |installer|
|
||||
installer.pods_project.targets.each do |target|
|
||||
if target.name == 'react-native-google-places'
|
||||
target.build_configurations.each do |config|
|
||||
config.build_settings['CLANG_ENABLE_MODULES'] = 'No'
|
||||
end
|
||||
end
|
||||
if target.name == "React"
|
||||
target.remove_from_project
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
126
ios/Podfile.lock
|
|
@ -1,31 +1,121 @@
|
|||
PODS:
|
||||
- GoogleMaps (2.7.0):
|
||||
- GoogleMaps/Maps (= 2.7.0)
|
||||
- GoogleMaps/Base (2.7.0)
|
||||
- GoogleMaps/Maps (2.7.0):
|
||||
- boost-for-react-native (1.63.0)
|
||||
- DoubleConversion (1.1.6)
|
||||
- Folly (2018.10.22.00):
|
||||
- boost-for-react-native
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- glog (0.3.5)
|
||||
- GoogleMaps (3.1.0):
|
||||
- GoogleMaps/Maps (= 3.1.0)
|
||||
- GoogleMaps/Base (3.1.0)
|
||||
- GoogleMaps/Maps (3.1.0):
|
||||
- GoogleMaps/Base
|
||||
- GooglePlacePicker (2.7.0):
|
||||
- GoogleMaps (= 2.7.0)
|
||||
- GooglePlaces (= 2.7.0)
|
||||
- GooglePlaces (2.7.0):
|
||||
- GoogleMaps/Base (= 2.7.0)
|
||||
- GooglePlaces (3.1.0):
|
||||
- GoogleMaps/Base (= 3.1.0)
|
||||
- React (0.59.10):
|
||||
- React/Core (= 0.59.10)
|
||||
- react-native-google-places (3.1.1):
|
||||
- GoogleMaps (~> 3.1.0)
|
||||
- GooglePlaces (~> 3.1.0)
|
||||
- React
|
||||
- React/Core (0.59.10):
|
||||
- yoga (= 0.59.10.React)
|
||||
- React/CxxBridge (0.59.10):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- React/Core
|
||||
- React/cxxreact
|
||||
- React/jsiexecutor
|
||||
- React/cxxreact (0.59.10):
|
||||
- boost-for-react-native (= 1.63.0)
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React/jsinspector
|
||||
- React/DevSupport (0.59.10):
|
||||
- React/Core
|
||||
- React/RCTWebSocket
|
||||
- React/fishhook (0.59.10)
|
||||
- React/jsi (0.59.10):
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React/jsiexecutor (0.59.10):
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React/cxxreact
|
||||
- React/jsi
|
||||
- React/jsinspector (0.59.10)
|
||||
- React/RCTAnimation (0.59.10):
|
||||
- React/Core
|
||||
- React/RCTBlob (0.59.10):
|
||||
- React/Core
|
||||
- React/RCTImage (0.59.10):
|
||||
- React/Core
|
||||
- React/RCTNetwork
|
||||
- React/RCTLinkingIOS (0.59.10):
|
||||
- React/Core
|
||||
- React/RCTNetwork (0.59.10):
|
||||
- React/Core
|
||||
- React/RCTSettings (0.59.10):
|
||||
- React/Core
|
||||
- React/RCTText (0.59.10):
|
||||
- React/Core
|
||||
- React/RCTWebSocket (0.59.10):
|
||||
- React/Core
|
||||
- React/fishhook
|
||||
- React/RCTBlob
|
||||
- yoga (0.59.10.React)
|
||||
|
||||
DEPENDENCIES:
|
||||
- GoogleMaps (~> 2.7)
|
||||
- GooglePlacePicker (~> 2.7)
|
||||
- GooglePlaces (~> 2.7)
|
||||
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
|
||||
- Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`)
|
||||
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
|
||||
- react-native-google-places (from `../node_modules/react-native-google-places`)
|
||||
- React/Core (from `../node_modules/react-native`)
|
||||
- React/CxxBridge (from `../node_modules/react-native`)
|
||||
- React/DevSupport (from `../node_modules/react-native`)
|
||||
- React/RCTAnimation (from `../node_modules/react-native`)
|
||||
- React/RCTImage (from `../node_modules/react-native`)
|
||||
- React/RCTLinkingIOS (from `../node_modules/react-native`)
|
||||
- React/RCTNetwork (from `../node_modules/react-native`)
|
||||
- React/RCTSettings (from `../node_modules/react-native`)
|
||||
- React/RCTText (from `../node_modules/react-native`)
|
||||
- React/RCTWebSocket (from `../node_modules/react-native`)
|
||||
- yoga (from `../node_modules/react-native/ReactCommon/yoga`)
|
||||
|
||||
SPEC REPOS:
|
||||
https://github.com/cocoapods/specs.git:
|
||||
- boost-for-react-native
|
||||
- GoogleMaps
|
||||
- GooglePlacePicker
|
||||
- GooglePlaces
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
GoogleMaps: f79af95cb24d869457b1f961c93d3ce8b2f3b848
|
||||
GooglePlacePicker: 59ea44db173c58486ad6123993e81feefcbce9c3
|
||||
GooglePlaces: 3d06e6c99654545b4738ce49648745779c25f2ef
|
||||
EXTERNAL SOURCES:
|
||||
DoubleConversion:
|
||||
:podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
|
||||
Folly:
|
||||
:podspec: "../node_modules/react-native/third-party-podspecs/Folly.podspec"
|
||||
glog:
|
||||
:podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
|
||||
React:
|
||||
:path: "../node_modules/react-native"
|
||||
react-native-google-places:
|
||||
:path: "../node_modules/react-native-google-places"
|
||||
yoga:
|
||||
:path: "../node_modules/react-native/ReactCommon/yoga"
|
||||
|
||||
PODFILE CHECKSUM: cfd1de49b9cdf4af5bee4d0d1efbe8acf784251b
|
||||
SPEC CHECKSUMS:
|
||||
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
|
||||
DoubleConversion: bb338842f62ab1d708ceb63ec3d999f0f3d98ecd
|
||||
Folly: de497beb10f102453a1afa9edbf8cf8a251890de
|
||||
glog: aefd1eb5dda2ab95ba0938556f34b98e2da3a60d
|
||||
GoogleMaps: 5c13302e6fe6bb6e686b267196586b91cd594225
|
||||
GooglePlaces: e874db179f2675c4f3eeda0b686b540273a578b0
|
||||
React: 36d0768f9e93be2473b37e7fa64f92c1d5341eef
|
||||
react-native-google-places: d09138fdb5d77c071981a4c6170823c8538d2e20
|
||||
yoga: 684513b14b03201579ba3cee20218c9d1298b0cc
|
||||
|
||||
PODFILE CHECKSUM: 5a81856c7abbc2cb4729e6fcb84c67c8f6428613
|
||||
|
||||
COCOAPODS: 1.6.1
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; };
|
||||
00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; };
|
||||
|
|
@ -24,6 +25,9 @@
|
|||
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
|
||||
140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
|
||||
146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
|
||||
1BA919979FB9491D9A9FD5B2 /* FontAwesome5_Brands.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9C594C7BB4CB41A186372233 /* FontAwesome5_Brands.ttf */; };
|
||||
1D81FF2A34F541A29A1BBC89 /* FontAwesome5_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 214A46B0158E452CA1009197 /* FontAwesome5_Solid.ttf */; };
|
||||
21A5DFC9CE404E0FB5AE2738 /* Roboto-BlackItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1A1081C5AC6A4355A7934EDE /* Roboto-BlackItalic.ttf */; };
|
||||
2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
|
||||
2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
|
||||
2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
|
||||
|
|
@ -39,9 +43,12 @@
|
|||
2DCD954D1E0B4F2C00145EB5 /* AreThereCookiesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* AreThereCookiesTests.m */; };
|
||||
2DF0FFEE2056DD460020B375 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3EA31DF850E9000B6D8A /* libReact.a */; };
|
||||
36B20041268B4878A62CE84C /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FF328AF2E4504AAD81574332 /* FontAwesome.ttf */; };
|
||||
41336C05F4C3070C3BFEB48E /* libPods-AreThereCookiesTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55ABFF2364564CD64DBF6BB5 /* libPods-AreThereCookiesTests.a */; };
|
||||
3C37B2B1682543FD95F340B4 /* Roboto-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C93FAF8572F54F189A859FAC /* Roboto-Bold.ttf */; };
|
||||
417D040493BD1950B68C01DD /* libPods-AreThereCookies.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D47EBABC8CF468100A3AE407 /* libPods-AreThereCookies.a */; };
|
||||
42F9AC2255DF4556AC6D7967 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 39E5D242E4F44F41AB357CFE /* Ionicons.ttf */; };
|
||||
48E301A6DF864C6FA3068DA2 /* Roboto-ThinItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7EADFEEDB73A42B9B934DD48 /* Roboto-ThinItalic.ttf */; };
|
||||
4BCAF68147A24F79A4905DC5 /* Roboto-Thin.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5FF3D276AFF64A23A2B5E680 /* Roboto-Thin.ttf */; };
|
||||
50D90B6D80A04AC8ABAD6829 /* Roboto-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9D44E016C6284FE5AA672A79 /* Roboto-Regular.ttf */; };
|
||||
55FDEE79293C4EFA86063F22 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4D75338FE719450A97754019 /* Entypo.ttf */; };
|
||||
58AA5BD96D1F473CAF1D0297 /* libAirMaps.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 484774914A724BB18F8CBAC7 /* libAirMaps.a */; };
|
||||
5AAA204F998B478B8817CB33 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E8312BB21594022857FE94F /* libz.tbd */; };
|
||||
|
|
@ -51,6 +58,8 @@
|
|||
761A158B50BE4290B39D8637 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 28807711BA664F9EB49B3B76 /* SimpleLineIcons.ttf */; };
|
||||
7D83C54E807D47FCBF127E23 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 53F298ED1335413584C3533A /* EvilIcons.ttf */; };
|
||||
832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
|
||||
840DA421AD5C4037A8396890 /* Roboto-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2AEFED41912C4269B1A34B8D /* Roboto-LightItalic.ttf */; };
|
||||
859F0E069073420E9D810864 /* Roboto-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D015CCB188D0418A8C94D524 /* Roboto-Italic.ttf */; };
|
||||
861EFBF42274B81B005A103F /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 861EFBE52274B81B005A103F /* Octicons.ttf */; };
|
||||
861EFBF52274B81B005A103F /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 861EFBE62274B81B005A103F /* Feather.ttf */; };
|
||||
861EFBF62274B81B005A103F /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 861EFBE72274B81B005A103F /* Entypo.ttf */; };
|
||||
|
|
@ -66,30 +75,22 @@
|
|||
861EFC002274B81B005A103F /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 861EFBF12274B81B005A103F /* EvilIcons.ttf */; };
|
||||
861EFC012274B81B005A103F /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 861EFBF22274B81B005A103F /* SimpleLineIcons.ttf */; };
|
||||
861EFC022274B81B005A103F /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 861EFBF32274B81B005A103F /* MaterialIcons.ttf */; };
|
||||
8FB7992CBE064AF4A7A5A812 /* Roboto-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 63417ECCAEBD4001932D07CF /* Roboto-BoldItalic.ttf */; };
|
||||
9EC2D5A4B51B408C897B1BD3 /* libRNSnackbar.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E1417884DC3F4C11A7738305 /* libRNSnackbar.a */; };
|
||||
A0722B1992204F5B94FD38A6 /* FontAwesome5_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8FB8920840B04753AE5E450E /* FontAwesome5_Regular.ttf */; };
|
||||
A1CC54A87DDF4FADB9557E40 /* Roboto-MediumItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D32EFBE8AB52428E896D1650 /* Roboto-MediumItalic.ttf */; };
|
||||
A1CF0A85A34940CDA949E850 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 840A8631BCFC4F9E8370035F /* SystemConfiguration.framework */; };
|
||||
B861BE92B155457990C8500E /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D53B3F694EB44AC8B196FE53 /* Zocial.ttf */; };
|
||||
BC10DD5B7CA14D9D9C7C8041 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 452874387CAA42D7B120E03E /* MaterialCommunityIcons.ttf */; };
|
||||
C45F4C3259C643E7A69C05D8 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C547107D34794AD7B535271C /* MaterialIcons.ttf */; };
|
||||
E1F8FA2ADF4A4EC396C4AFE1 /* libRNGooglePlaces.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A7AD62EB06284B498A5E9460 /* libRNGooglePlaces.a */; };
|
||||
EA087CEA76394C3DB637FCA4 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84A166D2AEF7429D9D52FF2D /* SafariServices.framework */; };
|
||||
F1553D38922A40629C3CE271 /* AntDesign.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1F5ACA76D45A42F7B97E5907 /* AntDesign.ttf */; };
|
||||
E1379B5F683347CBB4906496 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 92DB919838DA4ED997CD48E4 /* Feather.ttf */; };
|
||||
1BA919979FB9491D9A9FD5B2 /* FontAwesome5_Brands.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9C594C7BB4CB41A186372233 /* FontAwesome5_Brands.ttf */; };
|
||||
A0722B1992204F5B94FD38A6 /* FontAwesome5_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8FB8920840B04753AE5E450E /* FontAwesome5_Regular.ttf */; };
|
||||
1D81FF2A34F541A29A1BBC89 /* FontAwesome5_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 214A46B0158E452CA1009197 /* FontAwesome5_Solid.ttf */; };
|
||||
D2C2690538484953B1A2F79A /* Roboto-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 89AC73049079482DBCBB2CD9 /* Roboto-Black.ttf */; };
|
||||
21A5DFC9CE404E0FB5AE2738 /* Roboto-BlackItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1A1081C5AC6A4355A7934EDE /* Roboto-BlackItalic.ttf */; };
|
||||
3C37B2B1682543FD95F340B4 /* Roboto-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C93FAF8572F54F189A859FAC /* Roboto-Bold.ttf */; };
|
||||
8FB7992CBE064AF4A7A5A812 /* Roboto-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 63417ECCAEBD4001932D07CF /* Roboto-BoldItalic.ttf */; };
|
||||
859F0E069073420E9D810864 /* Roboto-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D015CCB188D0418A8C94D524 /* Roboto-Italic.ttf */; };
|
||||
E1379B5F683347CBB4906496 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 92DB919838DA4ED997CD48E4 /* Feather.ttf */; };
|
||||
EA087CEA76394C3DB637FCA4 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84A166D2AEF7429D9D52FF2D /* SafariServices.framework */; };
|
||||
ED297163215061F000B7C4FE /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED297162215061F000B7C4FE /* JavaScriptCore.framework */; };
|
||||
ED2971652150620600B7C4FE /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED2971642150620600B7C4FE /* JavaScriptCore.framework */; };
|
||||
F1553D38922A40629C3CE271 /* AntDesign.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1F5ACA76D45A42F7B97E5907 /* AntDesign.ttf */; };
|
||||
F2620B0961574CA9A84954D6 /* Roboto-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 962B2A8EF37D4811AA86ED44 /* Roboto-Light.ttf */; };
|
||||
840DA421AD5C4037A8396890 /* Roboto-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2AEFED41912C4269B1A34B8D /* Roboto-LightItalic.ttf */; };
|
||||
F9EB2CC891AE4139A1329A52 /* Roboto-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 389FDF9FC3DF4163B2578E88 /* Roboto-Medium.ttf */; };
|
||||
A1CC54A87DDF4FADB9557E40 /* Roboto-MediumItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D32EFBE8AB52428E896D1650 /* Roboto-MediumItalic.ttf */; };
|
||||
50D90B6D80A04AC8ABAD6829 /* Roboto-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9D44E016C6284FE5AA672A79 /* Roboto-Regular.ttf */; };
|
||||
4BCAF68147A24F79A4905DC5 /* Roboto-Thin.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5FF3D276AFF64A23A2B5E680 /* Roboto-Thin.ttf */; };
|
||||
48E301A6DF864C6FA3068DA2 /* Roboto-ThinItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7EADFEEDB73A42B9B934DD48 /* Roboto-ThinItalic.ttf */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
|
|
@ -219,20 +220,6 @@
|
|||
remoteGlobalIDString = 3D383D621EBD27B9005632C8;
|
||||
remoteInfo = "double-conversion-tvOS";
|
||||
};
|
||||
2DF0FFEA2056DD460020B375 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 9936F3131F5F2E4B0010BF04;
|
||||
remoteInfo = privatedata;
|
||||
};
|
||||
2DF0FFEC2056DD460020B375 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 9936F32F1F5F2E5B0010BF04;
|
||||
remoteInfo = "privatedata-tvOS";
|
||||
};
|
||||
3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
|
||||
|
|
@ -310,20 +297,6 @@
|
|||
remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4;
|
||||
remoteInfo = "cxxreact-tvOS";
|
||||
};
|
||||
3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 3D3CD90B1DE5FBD600167DC4;
|
||||
remoteInfo = jschelpers;
|
||||
};
|
||||
3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4;
|
||||
remoteInfo = "jschelpers-tvOS";
|
||||
};
|
||||
5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
|
||||
|
|
@ -366,13 +339,6 @@
|
|||
remoteGlobalIDString = 11FA5C511C4A1296003AC2EE;
|
||||
remoteInfo = AirMaps;
|
||||
};
|
||||
8626C5A62258FE3B00664303 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 6A1C7332790C45828F29BB89 /* RNGooglePlaces.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 134814201AA4EA6300B7C361;
|
||||
remoteInfo = RNGooglePlaces;
|
||||
};
|
||||
8626C5AC2258FE3B00664303 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 1CDCCD20971D43E3A647B5AA /* RNImagePicker.xcodeproj */;
|
||||
|
|
@ -401,10 +367,37 @@
|
|||
remoteGlobalIDString = A39873CE1EA65EE60051E01A;
|
||||
remoteInfo = "RNVectorIcons-tvOS";
|
||||
};
|
||||
86DE46CB22D1044700B70CBA /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = EDEBC6D6214B3E7000DD5AC8;
|
||||
remoteInfo = jsi;
|
||||
};
|
||||
86DE46CD22D1044700B70CBA /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = EDEBC73B214B45A300DD5AC8;
|
||||
remoteInfo = jsiexecutor;
|
||||
};
|
||||
86DE46CF22D1044700B70CBA /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = ED296FB6214C9A0900B7C4FE;
|
||||
remoteInfo = "jsi-tvOS";
|
||||
};
|
||||
86DE46D122D1044700B70CBA /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = ED296FEE214C9CF800B7C4FE;
|
||||
remoteInfo = "jsiexecutor-tvOS";
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = "<group>"; };
|
||||
00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = "<group>"; };
|
||||
00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = "<group>"; };
|
||||
00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = "<group>"; };
|
||||
|
|
@ -423,13 +416,17 @@
|
|||
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = AreThereCookies/Info.plist; sourceTree = "<group>"; };
|
||||
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = AreThereCookies/main.m; sourceTree = "<group>"; };
|
||||
146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = "<group>"; };
|
||||
1A1081C5AC6A4355A7934EDE /* Roboto-BlackItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-BlackItalic.ttf"; path = "../static/fonts/Roboto-BlackItalic.ttf"; sourceTree = "<group>"; };
|
||||
1CDCCD20971D43E3A647B5AA /* RNImagePicker.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNImagePicker.xcodeproj; path = "../node_modules/react-native-image-picker/ios/RNImagePicker.xcodeproj"; sourceTree = "<group>"; };
|
||||
1E8312BB21594022857FE94F /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
|
||||
1F5ACA76D45A42F7B97E5907 /* AntDesign.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = AntDesign.ttf; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = "<group>"; };
|
||||
214A46B0158E452CA1009197 /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Solid.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf"; sourceTree = "<group>"; };
|
||||
28807711BA664F9EB49B3B76 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = "<group>"; };
|
||||
2AEFED41912C4269B1A34B8D /* Roboto-LightItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-LightItalic.ttf"; path = "../static/fonts/Roboto-LightItalic.ttf"; sourceTree = "<group>"; };
|
||||
2D02E47B1E0B4A5D006451C7 /* aretherecookies-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; name = "aretherecookies-tvOS.app"; path = "AreThereCookies-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
2D02E4901E0B4A5D006451C7 /* aretherecookies-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "aretherecookies-tvOSTests.xctest"; path = "AreThereCookies-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
2D16E6891FA4F8E400B85C8A /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
321F99EEE9DC7515AB9BBEF9 /* Pods-AreThereCookiesTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AreThereCookiesTests.release.xcconfig"; path = "Target Support Files/Pods-AreThereCookiesTests/Pods-AreThereCookiesTests.release.xcconfig"; sourceTree = "<group>"; };
|
||||
389FDF9FC3DF4163B2578E88 /* Roboto-Medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Medium.ttf"; path = "../static/fonts/Roboto-Medium.ttf"; sourceTree = "<group>"; };
|
||||
39E5D242E4F44F41AB357CFE /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = "<group>"; };
|
||||
3BA6445F50EA4148970391C2 /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = "<group>"; };
|
||||
40366698AD0243C08C474E18 /* A0Auth0.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = A0Auth0.xcodeproj; path = "../node_modules/react-native-auth0/ios/A0Auth0.xcodeproj"; sourceTree = "<group>"; };
|
||||
|
|
@ -439,15 +436,15 @@
|
|||
4B39ECE2FC3546CDBD026A5B /* libRNImagePicker.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNImagePicker.a; sourceTree = "<group>"; };
|
||||
4D75338FE719450A97754019 /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = "<group>"; };
|
||||
53F298ED1335413584C3533A /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = "<group>"; };
|
||||
55ABFF2364564CD64DBF6BB5 /* libPods-AreThereCookiesTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-AreThereCookiesTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
55BE16B9C73846718D1F0095 /* libA0Auth0.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libA0Auth0.a; sourceTree = "<group>"; };
|
||||
58F3E8D932CA42CCBE826FCC /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = "<group>"; };
|
||||
5BFB7419F05149A0AA3B5196 /* libRNVectorIcons.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNVectorIcons.a; sourceTree = "<group>"; };
|
||||
5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = "<group>"; };
|
||||
6A1C7332790C45828F29BB89 /* RNGooglePlaces.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNGooglePlaces.xcodeproj; path = "../node_modules/react-native-google-places/ios/RNGooglePlaces.xcodeproj"; sourceTree = "<group>"; };
|
||||
5FF3D276AFF64A23A2B5E680 /* Roboto-Thin.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Thin.ttf"; path = "../static/fonts/Roboto-Thin.ttf"; sourceTree = "<group>"; };
|
||||
63417ECCAEBD4001932D07CF /* Roboto-BoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-BoldItalic.ttf"; path = "../static/fonts/Roboto-BoldItalic.ttf"; sourceTree = "<group>"; };
|
||||
7164AF7E77DB51BBE253F0CE /* Pods-AreThereCookies.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AreThereCookies.release.xcconfig"; path = "Target Support Files/Pods-AreThereCookies/Pods-AreThereCookies.release.xcconfig"; sourceTree = "<group>"; };
|
||||
71F6040C4B33CB1CF7754D52 /* Pods-AreThereCookiesTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AreThereCookiesTests.debug.xcconfig"; path = "Target Support Files/Pods-AreThereCookiesTests/Pods-AreThereCookiesTests.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = "<group>"; };
|
||||
7EADFEEDB73A42B9B934DD48 /* Roboto-ThinItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-ThinItalic.ttf"; path = "../static/fonts/Roboto-ThinItalic.ttf"; sourceTree = "<group>"; };
|
||||
832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = "<group>"; };
|
||||
840A8631BCFC4F9E8370035F /* SystemConfiguration.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
|
||||
84A166D2AEF7429D9D52FF2D /* SafariServices.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = SafariServices.framework; path = System/Library/Frameworks/SafariServices.framework; sourceTree = SDKROOT; };
|
||||
|
|
@ -466,33 +463,26 @@
|
|||
861EFBF12274B81B005A103F /* EvilIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = EvilIcons.ttf; sourceTree = "<group>"; };
|
||||
861EFBF22274B81B005A103F /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = SimpleLineIcons.ttf; sourceTree = "<group>"; };
|
||||
861EFBF32274B81B005A103F /* MaterialIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = MaterialIcons.ttf; sourceTree = "<group>"; };
|
||||
A7AD62EB06284B498A5E9460 /* libRNGooglePlaces.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNGooglePlaces.a; sourceTree = "<group>"; };
|
||||
89AC73049079482DBCBB2CD9 /* Roboto-Black.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Black.ttf"; path = "../static/fonts/Roboto-Black.ttf"; sourceTree = "<group>"; };
|
||||
8FB8920840B04753AE5E450E /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Regular.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf"; sourceTree = "<group>"; };
|
||||
92DB919838DA4ED997CD48E4 /* Feather.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Feather.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = "<group>"; };
|
||||
962B2A8EF37D4811AA86ED44 /* Roboto-Light.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Light.ttf"; path = "../static/fonts/Roboto-Light.ttf"; sourceTree = "<group>"; };
|
||||
9C594C7BB4CB41A186372233 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Brands.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = "<group>"; };
|
||||
9D44E016C6284FE5AA672A79 /* Roboto-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Regular.ttf"; path = "../static/fonts/Roboto-Regular.ttf"; sourceTree = "<group>"; };
|
||||
ABBDD4481F9A4A879DC2DA9B /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNVectorIcons.xcodeproj; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = "<group>"; };
|
||||
C547107D34794AD7B535271C /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = "<group>"; };
|
||||
C68D60C5A4D14EB1B5FCF548 /* RNSnackbar.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNSnackbar.xcodeproj; path = "../node_modules/react-native-snackbar/ios/RNSnackbar.xcodeproj"; sourceTree = "<group>"; };
|
||||
C93FAF8572F54F189A859FAC /* Roboto-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Bold.ttf"; path = "../static/fonts/Roboto-Bold.ttf"; sourceTree = "<group>"; };
|
||||
CA8120963AF94E0FB384289D /* AirMaps.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = AirMaps.xcodeproj; path = "../node_modules/react-native-maps/lib/ios/AirMaps.xcodeproj"; sourceTree = "<group>"; };
|
||||
D015CCB188D0418A8C94D524 /* Roboto-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Italic.ttf"; path = "../static/fonts/Roboto-Italic.ttf"; sourceTree = "<group>"; };
|
||||
D32EFBE8AB52428E896D1650 /* Roboto-MediumItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-MediumItalic.ttf"; path = "../static/fonts/Roboto-MediumItalic.ttf"; sourceTree = "<group>"; };
|
||||
D47EBABC8CF468100A3AE407 /* libPods-AreThereCookies.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-AreThereCookies.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
D53B3F694EB44AC8B196FE53 /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = "<group>"; };
|
||||
E1417884DC3F4C11A7738305 /* libRNSnackbar.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNSnackbar.a; sourceTree = "<group>"; };
|
||||
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
|
||||
ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; };
|
||||
F8F9368F722A4808842C3802 /* AddressBook.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = AddressBook.framework; path = System/Library/Frameworks/AddressBook.framework; sourceTree = SDKROOT; };
|
||||
FF328AF2E4504AAD81574332 /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = "<group>"; };
|
||||
1F5ACA76D45A42F7B97E5907 /* AntDesign.ttf */ = {isa = PBXFileReference; name = "AntDesign.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
||||
92DB919838DA4ED997CD48E4 /* Feather.ttf */ = {isa = PBXFileReference; name = "Feather.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
||||
9C594C7BB4CB41A186372233 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; name = "FontAwesome5_Brands.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
||||
8FB8920840B04753AE5E450E /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; name = "FontAwesome5_Regular.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
||||
214A46B0158E452CA1009197 /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; name = "FontAwesome5_Solid.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
||||
89AC73049079482DBCBB2CD9 /* Roboto-Black.ttf */ = {isa = PBXFileReference; name = "Roboto-Black.ttf"; path = "../static/fonts/Roboto-Black.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
||||
1A1081C5AC6A4355A7934EDE /* Roboto-BlackItalic.ttf */ = {isa = PBXFileReference; name = "Roboto-BlackItalic.ttf"; path = "../static/fonts/Roboto-BlackItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
||||
C93FAF8572F54F189A859FAC /* Roboto-Bold.ttf */ = {isa = PBXFileReference; name = "Roboto-Bold.ttf"; path = "../static/fonts/Roboto-Bold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
||||
63417ECCAEBD4001932D07CF /* Roboto-BoldItalic.ttf */ = {isa = PBXFileReference; name = "Roboto-BoldItalic.ttf"; path = "../static/fonts/Roboto-BoldItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
||||
D015CCB188D0418A8C94D524 /* Roboto-Italic.ttf */ = {isa = PBXFileReference; name = "Roboto-Italic.ttf"; path = "../static/fonts/Roboto-Italic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
||||
962B2A8EF37D4811AA86ED44 /* Roboto-Light.ttf */ = {isa = PBXFileReference; name = "Roboto-Light.ttf"; path = "../static/fonts/Roboto-Light.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
||||
2AEFED41912C4269B1A34B8D /* Roboto-LightItalic.ttf */ = {isa = PBXFileReference; name = "Roboto-LightItalic.ttf"; path = "../static/fonts/Roboto-LightItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
||||
389FDF9FC3DF4163B2578E88 /* Roboto-Medium.ttf */ = {isa = PBXFileReference; name = "Roboto-Medium.ttf"; path = "../static/fonts/Roboto-Medium.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
||||
D32EFBE8AB52428E896D1650 /* Roboto-MediumItalic.ttf */ = {isa = PBXFileReference; name = "Roboto-MediumItalic.ttf"; path = "../static/fonts/Roboto-MediumItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
||||
9D44E016C6284FE5AA672A79 /* Roboto-Regular.ttf */ = {isa = PBXFileReference; name = "Roboto-Regular.ttf"; path = "../static/fonts/Roboto-Regular.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
||||
5FF3D276AFF64A23A2B5E680 /* Roboto-Thin.ttf */ = {isa = PBXFileReference; name = "Roboto-Thin.ttf"; path = "../static/fonts/Roboto-Thin.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
||||
7EADFEEDB73A42B9B934DD48 /* Roboto-ThinItalic.ttf */ = {isa = PBXFileReference; name = "Roboto-ThinItalic.ttf"; path = "../static/fonts/Roboto-ThinItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
|
|
@ -500,8 +490,8 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
ED297163215061F000B7C4FE /* JavaScriptCore.framework in Frameworks */,
|
||||
140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */,
|
||||
41336C05F4C3070C3BFEB48E /* libPods-AreThereCookiesTests.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -509,6 +499,7 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
ED2971652150620600B7C4FE /* JavaScriptCore.framework in Frameworks */,
|
||||
11D1A2F320CAFA9E000508D9 /* libRCTAnimation.a in Frameworks */,
|
||||
146834051AC3E58100842450 /* libReact.a in Frameworks */,
|
||||
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */,
|
||||
|
|
@ -528,7 +519,6 @@
|
|||
A1CF0A85A34940CDA949E850 /* SystemConfiguration.framework in Frameworks */,
|
||||
029B651D0B0E4AE3837F4281 /* AddressBook.framework in Frameworks */,
|
||||
5F2AA8F2235A4CD68207EAB7 /* libA0Auth0.a in Frameworks */,
|
||||
E1F8FA2ADF4A4EC396C4AFE1 /* libRNGooglePlaces.a in Frameworks */,
|
||||
9EC2D5A4B51B408C897B1BD3 /* libRNSnackbar.a in Frameworks */,
|
||||
417D040493BD1950B68C01DD /* libPods-AreThereCookies.a in Frameworks */,
|
||||
);
|
||||
|
|
@ -643,7 +633,6 @@
|
|||
isa = PBXGroup;
|
||||
children = (
|
||||
861EFBE42274B81B005A103F /* Fonts */,
|
||||
008F07F21AC5B25A0029DE68 /* main.jsbundle */,
|
||||
13B07FAF1A68108700A75B9A /* AppDelegate.h */,
|
||||
13B07FB01A68108700A75B9A /* AppDelegate.m */,
|
||||
13B07FB51A68108700A75B9A /* Images.xcassets */,
|
||||
|
|
@ -663,16 +652,16 @@
|
|||
3DAD3EA71DF850E9000B6D8A /* libyoga.a */,
|
||||
3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */,
|
||||
3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */,
|
||||
3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */,
|
||||
3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */,
|
||||
2DF0FFDF2056DD460020B375 /* libjsinspector.a */,
|
||||
2DF0FFE12056DD460020B375 /* libjsinspector-tvOS.a */,
|
||||
2DF0FFE32056DD460020B375 /* libthird-party.a */,
|
||||
2DF0FFE52056DD460020B375 /* libthird-party.a */,
|
||||
2DF0FFE72056DD460020B375 /* libdouble-conversion.a */,
|
||||
2DF0FFE92056DD460020B375 /* libdouble-conversion.a */,
|
||||
2DF0FFEB2056DD460020B375 /* libprivatedata.a */,
|
||||
2DF0FFED2056DD460020B375 /* libprivatedata-tvOS.a */,
|
||||
86DE46CC22D1044700B70CBA /* libjsi.a */,
|
||||
86DE46CE22D1044700B70CBA /* libjsiexecutor.a */,
|
||||
86DE46D022D1044700B70CBA /* libjsi-tvOS.a */,
|
||||
86DE46D222D1044700B70CBA /* libjsiexecutor-tvOS.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -682,7 +671,6 @@
|
|||
children = (
|
||||
2D16E6891FA4F8E400B85C8A /* libReact.a */,
|
||||
D47EBABC8CF468100A3AE407 /* libPods-AreThereCookies.a */,
|
||||
55ABFF2364564CD64DBF6BB5 /* libPods-AreThereCookiesTests.a */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -696,6 +684,30 @@
|
|||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
7080528B7A4F4FBA89B50416 /* Resources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1F5ACA76D45A42F7B97E5907 /* AntDesign.ttf */,
|
||||
92DB919838DA4ED997CD48E4 /* Feather.ttf */,
|
||||
9C594C7BB4CB41A186372233 /* FontAwesome5_Brands.ttf */,
|
||||
8FB8920840B04753AE5E450E /* FontAwesome5_Regular.ttf */,
|
||||
214A46B0158E452CA1009197 /* FontAwesome5_Solid.ttf */,
|
||||
89AC73049079482DBCBB2CD9 /* Roboto-Black.ttf */,
|
||||
1A1081C5AC6A4355A7934EDE /* Roboto-BlackItalic.ttf */,
|
||||
C93FAF8572F54F189A859FAC /* Roboto-Bold.ttf */,
|
||||
63417ECCAEBD4001932D07CF /* Roboto-BoldItalic.ttf */,
|
||||
D015CCB188D0418A8C94D524 /* Roboto-Italic.ttf */,
|
||||
962B2A8EF37D4811AA86ED44 /* Roboto-Light.ttf */,
|
||||
2AEFED41912C4269B1A34B8D /* Roboto-LightItalic.ttf */,
|
||||
389FDF9FC3DF4163B2578E88 /* Roboto-Medium.ttf */,
|
||||
D32EFBE8AB52428E896D1650 /* Roboto-MediumItalic.ttf */,
|
||||
9D44E016C6284FE5AA672A79 /* Roboto-Regular.ttf */,
|
||||
5FF3D276AFF64A23A2B5E680 /* Roboto-Thin.ttf */,
|
||||
7EADFEEDB73A42B9B934DD48 /* Roboto-ThinItalic.ttf */,
|
||||
);
|
||||
name = Resources;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
78C398B11ACF4ADC00677621 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
|
@ -723,7 +735,6 @@
|
|||
ABBDD4481F9A4A879DC2DA9B /* RNVectorIcons.xcodeproj */,
|
||||
CA8120963AF94E0FB384289D /* AirMaps.xcodeproj */,
|
||||
40366698AD0243C08C474E18 /* A0Auth0.xcodeproj */,
|
||||
6A1C7332790C45828F29BB89 /* RNGooglePlaces.xcodeproj */,
|
||||
C68D60C5A4D14EB1B5FCF548 /* RNSnackbar.xcodeproj */,
|
||||
);
|
||||
name = Libraries;
|
||||
|
|
@ -799,7 +810,6 @@
|
|||
840A8631BCFC4F9E8370035F /* SystemConfiguration.framework */,
|
||||
F8F9368F722A4808842C3802 /* AddressBook.framework */,
|
||||
55BE16B9C73846718D1F0095 /* libA0Auth0.a */,
|
||||
A7AD62EB06284B498A5E9460 /* libRNGooglePlaces.a */,
|
||||
E1417884DC3F4C11A7738305 /* libRNSnackbar.a */,
|
||||
4D75338FE719450A97754019 /* Entypo.ttf */,
|
||||
53F298ED1335413584C3533A /* EvilIcons.ttf */,
|
||||
|
|
@ -811,6 +821,8 @@
|
|||
58F3E8D932CA42CCBE826FCC /* Octicons.ttf */,
|
||||
28807711BA664F9EB49B3B76 /* SimpleLineIcons.ttf */,
|
||||
D53B3F694EB44AC8B196FE53 /* Zocial.ttf */,
|
||||
ED2971642150620600B7C4FE /* JavaScriptCore.framework */,
|
||||
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
|
||||
);
|
||||
name = "Recovered References";
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -831,14 +843,6 @@
|
|||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
8626C5902258FE3B00664303 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8626C5A72258FE3B00664303 /* libRNGooglePlaces.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
8626C5942258FE3B00664303 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
|
@ -869,37 +873,10 @@
|
|||
children = (
|
||||
44FFE9EC7CB7E38CB33D7533 /* Pods-AreThereCookies.debug.xcconfig */,
|
||||
7164AF7E77DB51BBE253F0CE /* Pods-AreThereCookies.release.xcconfig */,
|
||||
71F6040C4B33CB1CF7754D52 /* Pods-AreThereCookiesTests.debug.xcconfig */,
|
||||
321F99EEE9DC7515AB9BBEF9 /* Pods-AreThereCookiesTests.release.xcconfig */,
|
||||
);
|
||||
path = Pods;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
7080528B7A4F4FBA89B50416 /* Resources */ = {
|
||||
isa = "PBXGroup";
|
||||
children = (
|
||||
1F5ACA76D45A42F7B97E5907 /* AntDesign.ttf */,
|
||||
92DB919838DA4ED997CD48E4 /* Feather.ttf */,
|
||||
9C594C7BB4CB41A186372233 /* FontAwesome5_Brands.ttf */,
|
||||
8FB8920840B04753AE5E450E /* FontAwesome5_Regular.ttf */,
|
||||
214A46B0158E452CA1009197 /* FontAwesome5_Solid.ttf */,
|
||||
89AC73049079482DBCBB2CD9 /* Roboto-Black.ttf */,
|
||||
1A1081C5AC6A4355A7934EDE /* Roboto-BlackItalic.ttf */,
|
||||
C93FAF8572F54F189A859FAC /* Roboto-Bold.ttf */,
|
||||
63417ECCAEBD4001932D07CF /* Roboto-BoldItalic.ttf */,
|
||||
D015CCB188D0418A8C94D524 /* Roboto-Italic.ttf */,
|
||||
962B2A8EF37D4811AA86ED44 /* Roboto-Light.ttf */,
|
||||
2AEFED41912C4269B1A34B8D /* Roboto-LightItalic.ttf */,
|
||||
389FDF9FC3DF4163B2578E88 /* Roboto-Medium.ttf */,
|
||||
D32EFBE8AB52428E896D1650 /* Roboto-MediumItalic.ttf */,
|
||||
9D44E016C6284FE5AA672A79 /* Roboto-Regular.ttf */,
|
||||
5FF3D276AFF64A23A2B5E680 /* Roboto-Thin.ttf */,
|
||||
7EADFEEDB73A42B9B934DD48 /* Roboto-ThinItalic.ttf */,
|
||||
);
|
||||
name = Resources;
|
||||
sourceTree = "<group>";
|
||||
path = "";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
|
|
@ -907,7 +884,6 @@
|
|||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "AreThereCookiesTests" */;
|
||||
buildPhases = (
|
||||
6AD6EC0CC61071A66DB649AC /* [CP] Check Pods Manifest.lock */,
|
||||
00E356EA1AD99517003FC87E /* Sources */,
|
||||
00E356EB1AD99517003FC87E /* Frameworks */,
|
||||
00E356EC1AD99517003FC87E /* Resources */,
|
||||
|
|
@ -1066,10 +1042,6 @@
|
|||
ProductGroup = 146834001AC3E56700842450 /* Products */;
|
||||
ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 8626C5902258FE3B00664303 /* Products */;
|
||||
ProjectRef = 6A1C7332790C45828F29BB89 /* RNGooglePlaces.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 8626C5982258FE3B00664303 /* Products */;
|
||||
ProjectRef = 1CDCCD20971D43E3A647B5AA /* RNImagePicker.xcodeproj */;
|
||||
|
|
@ -1206,20 +1178,6 @@
|
|||
remoteRef = 2DF0FFE82056DD460020B375 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
2DF0FFEB2056DD460020B375 /* libprivatedata.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libprivatedata.a;
|
||||
remoteRef = 2DF0FFEA2056DD460020B375 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
2DF0FFED2056DD460020B375 /* libprivatedata-tvOS.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = "libprivatedata-tvOS.a";
|
||||
remoteRef = 2DF0FFEC2056DD460020B375 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
|
|
@ -1297,20 +1255,6 @@
|
|||
remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libjschelpers.a;
|
||||
remoteRef = 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libjschelpers.a;
|
||||
remoteRef = 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
|
|
@ -1353,13 +1297,6 @@
|
|||
remoteRef = 8626C5A02258FE3B00664303 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
8626C5A72258FE3B00664303 /* libRNGooglePlaces.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libRNGooglePlaces.a;
|
||||
remoteRef = 8626C5A62258FE3B00664303 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
8626C5AD2258FE3B00664303 /* libRNImagePicker.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
|
|
@ -1388,6 +1325,34 @@
|
|||
remoteRef = 8626C5B52258FE3B00664303 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
86DE46CC22D1044700B70CBA /* libjsi.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libjsi.a;
|
||||
remoteRef = 86DE46CB22D1044700B70CBA /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
86DE46CE22D1044700B70CBA /* libjsiexecutor.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libjsiexecutor.a;
|
||||
remoteRef = 86DE46CD22D1044700B70CBA /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
86DE46D022D1044700B70CBA /* libjsi-tvOS.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = "libjsi-tvOS.a";
|
||||
remoteRef = 86DE46CF22D1044700B70CBA /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
86DE46D222D1044700B70CBA /* libjsiexecutor-tvOS.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = "libjsiexecutor-tvOS.a";
|
||||
remoteRef = 86DE46D122D1044700B70CBA /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
/* End PBXReferenceProxy section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
|
|
@ -1505,7 +1470,6 @@
|
|||
inputPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-AreThereCookies/Pods-AreThereCookies-resources.sh",
|
||||
"${PODS_ROOT}/GoogleMaps/Maps/Frameworks/GoogleMaps.framework/Resources/GoogleMaps.bundle",
|
||||
"${PODS_ROOT}/GooglePlacePicker/Frameworks/GooglePlacePicker.framework/Resources/GooglePlacePicker.bundle",
|
||||
"${PODS_ROOT}/GooglePlaces/Frameworks/GooglePlaces.framework/Resources/GooglePlaces.bundle",
|
||||
);
|
||||
name = "[CP] Copy Pods Resources";
|
||||
|
|
@ -1513,7 +1477,6 @@
|
|||
);
|
||||
outputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleMaps.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GooglePlacePicker.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GooglePlaces.bundle",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
|
|
@ -1521,28 +1484,6 @@
|
|||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AreThereCookies/Pods-AreThereCookies-resources.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
6AD6EC0CC61071A66DB649AC /* [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-AreThereCookiesTests-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;
|
||||
};
|
||||
E06654CADD25E198C33CC7BD /* [CP] Check Pods Manifest.lock */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
|
|
@ -1632,7 +1573,6 @@
|
|||
/* Begin XCBuildConfiguration section */
|
||||
00E356F61AD99517003FC87E /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 71F6040C4B33CB1CF7754D52 /* Pods-AreThereCookiesTests.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
|
|
@ -1668,7 +1608,6 @@
|
|||
};
|
||||
00E356F71AD99517003FC87E /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 321F99EEE9DC7515AB9BBEF9 /* Pods-AreThereCookiesTests.release.xcconfig */;
|
||||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
|
|
|
|||
|
|
@ -6,8 +6,11 @@
|
|||
*/
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <React/RCTBridgeDelegate.h>
|
||||
|
||||
@interface AppDelegate : UIResponder <UIApplicationDelegate>
|
||||
//@interface AppDelegate : UIResponder <UIApplicationDelegate>
|
||||
|
||||
@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate>
|
||||
|
||||
@property (nonatomic, strong) UIWindow *window;
|
||||
|
||||
|
|
|
|||
|
|
@ -9,22 +9,18 @@
|
|||
|
||||
#import <React/RCTBundleURLProvider.h>
|
||||
#import <React/RCTRootView.h>
|
||||
#import <React/RCTBridge.h>
|
||||
|
||||
@import GooglePlaces;
|
||||
@import GoogleMaps;
|
||||
@import GooglePlaces;
|
||||
@import GoogleMaps;
|
||||
|
||||
@implementation AppDelegate
|
||||
|
||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
||||
{
|
||||
NSURL *jsCodeLocation;
|
||||
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
|
||||
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge moduleName:@"AreThereCookies" initialProperties:nil];
|
||||
|
||||
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
|
||||
|
||||
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
|
||||
moduleName:@"AreThereCookies"
|
||||
initialProperties:nil
|
||||
launchOptions:launchOptions];
|
||||
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
|
||||
|
||||
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
|
||||
|
|
@ -39,4 +35,13 @@
|
|||
return YES;
|
||||
}
|
||||
|
||||
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
|
||||
{
|
||||
#if DEBUG
|
||||
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
|
||||
#else
|
||||
return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
|
||||
#endif
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
|||
40
js/App.js
|
|
@ -1,32 +1,32 @@
|
|||
//@flow
|
||||
import React, { Component } from 'react';
|
||||
import { StatusBar } from 'react-native';
|
||||
import { ThemeProvider } from 'react-native-material-ui';
|
||||
import rxjsconfig from 'recompose/rxjsObservableConfig';
|
||||
import setObservableConfig from 'recompose/setObservableConfig';
|
||||
import { NativeRouter, Route, Redirect, AndroidBackButton, Switch } from 'react-router-native';
|
||||
import Nav from './pages/Nav';
|
||||
import FoodItemDetail from './pages/FoodItemDetail';
|
||||
import PlaceDetail from './pages/PlaceDetail';
|
||||
import CreateFoodItem from './pages/CreateFoodItem';
|
||||
import AuthManager from './AuthManager';
|
||||
import LoginPage from './pages/LoginPage';
|
||||
import LandingPage from './pages/LandingPage';
|
||||
import ZipcodePage from './pages/ZipcodePage';
|
||||
import { AppContainer } from './components/AppContainer';
|
||||
import React, { Component } from "react";
|
||||
import { StatusBar } from "react-native";
|
||||
import { ThemeContext, getTheme } from "react-native-material-ui";
|
||||
import rxjsconfig from "recompose/rxjsObservableConfig";
|
||||
import setObservableConfig from "recompose/setObservableConfig";
|
||||
import { NativeRouter, Route, Redirect, AndroidBackButton, Switch } from "react-router-native";
|
||||
import Nav from "./pages/Nav";
|
||||
import FoodItemDetail from "./pages/FoodItemDetail";
|
||||
import PlaceDetail from "./pages/PlaceDetail";
|
||||
import CreateFoodItem from "./pages/CreateFoodItem";
|
||||
import AuthManager from "./AuthManager";
|
||||
import LoginPage from "./pages/LoginPage";
|
||||
import LandingPage from "./pages/LandingPage";
|
||||
import ZipcodePage from "./pages/ZipcodePage";
|
||||
import { AppContainer } from "./components/AppContainer";
|
||||
|
||||
import theme from './ui-theme';
|
||||
import theme from "./ui-theme";
|
||||
|
||||
setObservableConfig(rxjsconfig);
|
||||
|
||||
export default class App extends Component {
|
||||
static displayName = 'App';
|
||||
static displayName = "App";
|
||||
|
||||
render() {
|
||||
return (
|
||||
<NativeRouter>
|
||||
<AndroidBackButton>
|
||||
<ThemeProvider uiTheme={theme}>
|
||||
<ThemeContext.Provider value={getTheme(theme)}>
|
||||
<AppContainer>
|
||||
<StatusBar backgroundColor={theme.statusBarColor} />
|
||||
<Redirect from="/" to="/landing" />
|
||||
|
|
@ -42,7 +42,7 @@ export default class App extends Component {
|
|||
path="/createFoodItem"
|
||||
render={props => {
|
||||
if (!AuthManager.isLoggedIn()) {
|
||||
const search = props.location.search + '&' || '?';
|
||||
const search = props.location.search + "&" || "?";
|
||||
return <Redirect to={`/login${search}`} push />;
|
||||
}
|
||||
return <CreateFoodItem />;
|
||||
|
|
@ -50,7 +50,7 @@ export default class App extends Component {
|
|||
/>
|
||||
</Switch>
|
||||
</AppContainer>
|
||||
</ThemeProvider>
|
||||
</ThemeContext.Provider>
|
||||
</AndroidBackButton>
|
||||
</NativeRouter>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,26 +1,26 @@
|
|||
// @flow
|
||||
import { BASE_URL } from '../constants/AppConstants';
|
||||
import AuthManager from '../AuthManager';
|
||||
import { BASE_URL } from "../constants/AppConstants";
|
||||
import AuthManager from "../AuthManager";
|
||||
|
||||
export const fetchRequest = async ({
|
||||
endpoint,
|
||||
method,
|
||||
headers = {},
|
||||
body,
|
||||
body
|
||||
}: {
|
||||
endpoint: string,
|
||||
method: string,
|
||||
headers?: Object,
|
||||
body?: Object,
|
||||
body?: Object
|
||||
}) => {
|
||||
const res = await fetch(`http://${BASE_URL}${endpoint}`, {
|
||||
const res = await fetch(`https://${BASE_URL}${endpoint}`, {
|
||||
method,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
"Content-Type": "application/json",
|
||||
...AuthManager.getAuthHeader(),
|
||||
...headers,
|
||||
...headers
|
||||
},
|
||||
...(body ? { body: JSON.stringify(body) } : {}),
|
||||
...(body ? { body: JSON.stringify(body) } : {})
|
||||
});
|
||||
|
||||
if (res.status === 401) {
|
||||
|
|
@ -36,10 +36,10 @@ export const fetchRequest = async ({
|
|||
|
||||
export const fetchRequestBinary = async ({ endpoint, body }: { endpoint: string, body: any }) => {
|
||||
return fetch(`http://${BASE_URL}${endpoint}`, {
|
||||
method: 'POST',
|
||||
method: "POST",
|
||||
headers: {
|
||||
...AuthManager.getAuthHeader(),
|
||||
...AuthManager.getAuthHeader()
|
||||
},
|
||||
body,
|
||||
body
|
||||
});
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
// @flow
|
||||
import { memoize } from 'ramda';
|
||||
import FilterRecord from '../records/FilterRecord';
|
||||
import FoodItemRecord from '../records/FoodItemRecord';
|
||||
import AuthManager from '../AuthManager';
|
||||
import { map, path, nth } from 'ramda';
|
||||
import { addImage } from './ImagesApi';
|
||||
import { fetchRequest } from './FetchApi';
|
||||
import { memoizeWith, identity } from "ramda";
|
||||
import FilterRecord from "../records/FilterRecord";
|
||||
import FoodItemRecord from "../records/FoodItemRecord";
|
||||
import AuthManager from "../AuthManager";
|
||||
import { map, path, nth } from "ramda";
|
||||
import { addImage } from "./ImagesApi";
|
||||
import { fetchRequest } from "./FetchApi";
|
||||
|
||||
export type FoodItemsFilter = {
|
||||
radius?: number,
|
||||
radius?: number
|
||||
};
|
||||
|
||||
export type RawFoodItem = {
|
||||
|
|
@ -21,32 +21,27 @@ export type RawFoodItem = {
|
|||
latitude: number,
|
||||
longitude: number,
|
||||
distance: number,
|
||||
lastupdated: number,
|
||||
lastupdated: number
|
||||
};
|
||||
|
||||
export type FoodItemsForLocation = {
|
||||
orderby: string,
|
||||
filter: FoodItemsFilter,
|
||||
fooditems: ?Array<RawFoodItem>,
|
||||
fooditems: ?Array<RawFoodItem>
|
||||
};
|
||||
|
||||
export const getFoodItems = memoize(
|
||||
async ({
|
||||
loc,
|
||||
filter,
|
||||
}: {
|
||||
loc: Position,
|
||||
filter: FilterRecord,
|
||||
}): Promise<FoodItemsForLocation> => {
|
||||
export const getFoodItems = memoizeWith(
|
||||
identity,
|
||||
async ({ loc, filter }: { loc: Position, filter: FilterRecord }): Promise<FoodItemsForLocation> => {
|
||||
const {
|
||||
coords: { latitude: lat, longitude: lng },
|
||||
coords: { latitude: lat, longitude: lng }
|
||||
} = loc;
|
||||
const { orderby, categories, radius, search } = filter;
|
||||
|
||||
try {
|
||||
return fetchRequest({
|
||||
endpoint: '/fooditems',
|
||||
method: 'POST',
|
||||
endpoint: "/fooditems",
|
||||
method: "POST",
|
||||
body: {
|
||||
lat,
|
||||
lng,
|
||||
|
|
@ -54,22 +49,22 @@ export const getFoodItems = memoize(
|
|||
filter: {
|
||||
...(categories ? { categories } : {}),
|
||||
radius,
|
||||
search,
|
||||
},
|
||||
},
|
||||
search
|
||||
}
|
||||
}
|
||||
}).then(json => ({
|
||||
...json,
|
||||
loading: false,
|
||||
error: null,
|
||||
error: null
|
||||
}));
|
||||
} catch (error) {
|
||||
console.log(error); // eslint-disable-line no-console
|
||||
console.error(error); // eslint-disable-line no-console
|
||||
return {
|
||||
orderby: 'distance',
|
||||
orderby: "distance",
|
||||
filter: {},
|
||||
fooditems: [],
|
||||
loading: false,
|
||||
error: error,
|
||||
error: error
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -77,24 +72,24 @@ export const getFoodItems = memoize(
|
|||
|
||||
export const createFoodItem = async (foodItem: FoodItemRecord) => {
|
||||
if (!AuthManager.user) {
|
||||
throw new Error('You must be logged in to create food items');
|
||||
throw new Error("You must be logged in to create food items");
|
||||
}
|
||||
|
||||
const username = AuthManager.user.name;
|
||||
|
||||
const res = await fetchRequest({
|
||||
endpoint: '/addfooditem',
|
||||
method: 'POST',
|
||||
body: foodItem,
|
||||
endpoint: "/addfooditem",
|
||||
method: "POST",
|
||||
body: foodItem
|
||||
});
|
||||
|
||||
const addImageUri = (imageUri: string) => addImage({ foodItemId: res.id, imageUri, username });
|
||||
|
||||
const images = map(path(['url']), await Promise.all(map(addImageUri, foodItem.images.toArray())));
|
||||
const images = map(path(["url"]), await Promise.all(map(addImageUri, foodItem.images.toArray())));
|
||||
|
||||
return {
|
||||
...res,
|
||||
images,
|
||||
thumbimage: nth(0, images),
|
||||
thumbimage: nth(0, images)
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,18 +1,18 @@
|
|||
// @flow
|
||||
import { GoogleAPIKey } from '../constants/AppConstants';
|
||||
import { path } from 'ramda';
|
||||
import { GoogleAPIKey } from "../constants/AppConstants";
|
||||
import { path } from "ramda";
|
||||
|
||||
const url = 'https://maps.googleapis.com/maps/api/geocode/json';
|
||||
const url = "https://maps.googleapis.com/maps/api/geocode/json";
|
||||
|
||||
type Location = {
|
||||
lat: number,
|
||||
lng: number,
|
||||
lng: number
|
||||
};
|
||||
|
||||
type AddressComponent = {
|
||||
long_name: string,
|
||||
short_name: string,
|
||||
types: Array<string>,
|
||||
types: Array<string>
|
||||
};
|
||||
|
||||
type GeocodeResult = {
|
||||
|
|
@ -20,16 +20,14 @@ type GeocodeResult = {
|
|||
address_components: Array<AddressComponent>,
|
||||
formatted_address: string,
|
||||
geometry: {
|
||||
location: Location,
|
||||
location: Location
|
||||
},
|
||||
place_id: string,
|
||||
types: Array<string>,
|
||||
}>,
|
||||
types: Array<string>
|
||||
}>
|
||||
};
|
||||
|
||||
export const getCoordsFromZip = async (zip: string): Promise<Location> => {
|
||||
const res: GeocodeResult = await (await fetch(
|
||||
`${url}?key=${GoogleAPIKey}&address=${zip}`
|
||||
)).json();
|
||||
return path(['results', 0, 'geometry', 'location'], res) || { lat: 0, lng: 0 };
|
||||
const res: GeocodeResult = await (await fetch(`${url}?key=${GoogleAPIKey}&address=${zip}`)).json();
|
||||
return path(["results", 0, "geometry", "location"], res) || { lat: 0, lng: 0 };
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
// @flow
|
||||
import { type GooglePlaceObj } from '../records/PlaceRecord';
|
||||
import { GoogleAPIKey } from '../constants/AppConstants';
|
||||
import { memoize } from 'ramda';
|
||||
import { type GooglePlaceObj } from "../records/PlaceRecord";
|
||||
import { GoogleAPIKey } from "../constants/AppConstants";
|
||||
import { memoizeWith, identity } from "ramda";
|
||||
|
||||
const placesDetailUrl = `https://maps.googleapis.com/maps/api/place/details/json?key=${GoogleAPIKey}`;
|
||||
const photosUrl = `https://maps.googleapis.com/maps/api/place/photo?key=${GoogleAPIKey}`;
|
||||
|
|
@ -11,7 +11,7 @@ type GooglePlaceDetailsResponse = { error_message: ?string, result: GooglePlaceO
|
|||
type GoogleFindPlaceResponse = {
|
||||
status: string,
|
||||
results: Array<GooglePlaceObj>,
|
||||
next_page_token?: string,
|
||||
next_page_token?: string
|
||||
};
|
||||
|
||||
const milesToMeters = miles => Math.ceil(miles > 0 ? miles / 0.00062137 : 0);
|
||||
|
|
@ -20,23 +20,17 @@ const milesToMeters = miles => Math.ceil(miles > 0 ? miles / 0.00062137 : 0);
|
|||
* always return a promise and swallow exceptions so as not to break the stream
|
||||
*/
|
||||
const safeWrapAjax = ajaxFn =>
|
||||
memoize((...args) => {
|
||||
memoizeWith(identity, (...args) => {
|
||||
return ajaxFn(...args).catch(error => {
|
||||
console.log('ERROR: ', error); //eslint-disable-line no-console
|
||||
console.log("ERROR: ", error); //eslint-disable-line no-console
|
||||
return null;
|
||||
});
|
||||
});
|
||||
|
||||
export const getPlaceDetails = safeWrapAjax(
|
||||
async ({
|
||||
distance,
|
||||
placeId,
|
||||
}: {
|
||||
distance: number,
|
||||
placeId: ?string,
|
||||
}): Promise<GooglePlaceObj> => {
|
||||
if (!placeId || typeof placeId !== 'string') {
|
||||
throw new Error('placeid looks wrong');
|
||||
async ({ distance, placeId }: { distance: number, placeId: ?string }): Promise<GooglePlaceObj> => {
|
||||
if (!placeId || typeof placeId !== "string") {
|
||||
throw new Error("placeid looks wrong");
|
||||
}
|
||||
|
||||
const res = await fetch(`${placesDetailUrl}&placeid=${placeId}`);
|
||||
|
|
@ -55,13 +49,13 @@ export const getURLForPhotoReference = (opts?: { maxheight?: number, maxwidth?:
|
|||
photoReference: string
|
||||
) => {
|
||||
if (!photoReference) {
|
||||
return '';
|
||||
return "";
|
||||
}
|
||||
|
||||
const { maxheight, maxwidth } = opts;
|
||||
|
||||
const maxHeight = `&maxheight=${maxheight || 600}`;
|
||||
const maxWidth = maxwidth ? `&maxwidth=${maxwidth}` : '';
|
||||
const maxWidth = maxwidth ? `&maxwidth=${maxwidth}` : "";
|
||||
const photoref = `&photoreference=${photoReference}`;
|
||||
|
||||
return `${photosUrl}${photoref}${maxHeight}${maxWidth}`;
|
||||
|
|
@ -76,21 +70,21 @@ export const findNearbyPlaces = safeWrapAjax(
|
|||
async ({
|
||||
location,
|
||||
search,
|
||||
radius,
|
||||
radius
|
||||
}: {
|
||||
location?: Position,
|
||||
search?: string,
|
||||
radius: number,
|
||||
radius: number
|
||||
}): Promise<any> => {
|
||||
if (!location) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const {
|
||||
coords: { latitude, longitude },
|
||||
coords: { latitude, longitude }
|
||||
} = location;
|
||||
|
||||
const keyword = search ? `keyword=${encodeURIComponent(search)}` : '';
|
||||
const keyword = search ? `keyword=${encodeURIComponent(search)}` : "";
|
||||
const loc = `location=${latitude},${longitude}`;
|
||||
const rad = `radius=${milesToMeters(radius)}`;
|
||||
const reqUrl = `${placesFromTextUrl}&${keyword}&${loc}&${rad}&type=restaurant`;
|
||||
|
|
@ -105,19 +99,19 @@ export const findNearbyPlaces = safeWrapAjax(
|
|||
// return concat(response.results, page.results);
|
||||
// }
|
||||
|
||||
if (response.status !== 'OK') {
|
||||
throw new Error('google find places request failed');
|
||||
if (response.status !== "OK") {
|
||||
throw new Error("google find places request failed");
|
||||
}
|
||||
|
||||
places = response.results;
|
||||
} catch (err) {
|
||||
console.log(error); // eslint-disable-line no-console
|
||||
console.error(error); // eslint-disable-line no-console
|
||||
error = err;
|
||||
}
|
||||
return {
|
||||
error,
|
||||
location,
|
||||
places,
|
||||
places
|
||||
};
|
||||
}
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,37 +1,37 @@
|
|||
// @flow
|
||||
import type { ImageRaw } from '../records/ImageRecord';
|
||||
import { fetchRequest, fetchRequestBinary } from './FetchApi';
|
||||
import type { ImageRaw } from "../records/ImageRecord";
|
||||
import { fetchRequest, fetchRequestBinary } from "./FetchApi";
|
||||
|
||||
export const getImages = (foodItemId: string): Promise<Array<ImageRaw>> => {
|
||||
return fetchRequest({
|
||||
endpoint: `/images/${foodItemId}`,
|
||||
method: 'GET',
|
||||
method: "GET"
|
||||
});
|
||||
};
|
||||
|
||||
export const addImage = async ({
|
||||
foodItemId,
|
||||
username,
|
||||
imageUri,
|
||||
imageUri
|
||||
}: {
|
||||
foodItemId: string,
|
||||
username: string,
|
||||
imageUri: string,
|
||||
imageUri: string
|
||||
}) => {
|
||||
const body = new FormData();
|
||||
|
||||
// $FlowFixMe - react-native does different stuff with FormData
|
||||
body.append('photo', {
|
||||
body.append("photo", {
|
||||
uri: imageUri,
|
||||
type: 'image/jpeg',
|
||||
name: 'photo.jpg',
|
||||
type: "image/jpeg",
|
||||
name: "photo.jpg"
|
||||
});
|
||||
|
||||
body.append('username', username);
|
||||
body.append("username", username);
|
||||
|
||||
const res = await fetchRequestBinary({
|
||||
endpoint: `/images/${foodItemId}`,
|
||||
body,
|
||||
body
|
||||
});
|
||||
|
||||
if (!res.ok) {
|
||||
|
|
|
|||
|
|
@ -1,23 +1,24 @@
|
|||
// @flow
|
||||
import { emitter } from '../streams/LocationStream';
|
||||
import { getCoordsFromZip } from './GoogleMapsApi';
|
||||
import { AsyncStorage, PermissionsAndroid, Platform } from 'react-native';
|
||||
import { emitter } from "../streams/LocationStream";
|
||||
import { getCoordsFromZip } from "./GoogleMapsApi";
|
||||
import { AsyncStorage, PermissionsAndroid, Platform } from "react-native";
|
||||
import Geolocation from "react-native-geolocation-service";
|
||||
|
||||
const {
|
||||
PERMISSIONS: { ACCESS_FINE_LOCATION },
|
||||
RESULTS,
|
||||
request: requestPermission,
|
||||
request: requestPermission
|
||||
} = PermissionsAndroid;
|
||||
|
||||
let locationPermissionResponse = false;
|
||||
|
||||
const askLocationPermission = async () => {
|
||||
if (Platform.OS === 'ios') {
|
||||
if (Platform.OS === "ios") {
|
||||
locationPermissionResponse = RESULTS.GRANTED;
|
||||
} else if (locationPermissionResponse !== RESULTS.GRANTED) {
|
||||
locationPermissionResponse = await requestPermission(ACCESS_FINE_LOCATION, {
|
||||
title: 'Aretherecookies? Location Permission',
|
||||
message: 'Aretherecookies? would like to use your location to find some cookies. Is that OK?',
|
||||
title: "Aretherecookies? Location Permission",
|
||||
message: "Aretherecookies? would like to use your location to find some cookies. Is that OK?"
|
||||
});
|
||||
}
|
||||
return locationPermissionResponse === RESULTS.GRANTED;
|
||||
|
|
@ -27,9 +28,9 @@ export const getCurrentPosition = () => {
|
|||
return new Promise((resolve, reject) => {
|
||||
askLocationPermission().then(granted => {
|
||||
if (!granted) {
|
||||
return reject('Permission was not given for location');
|
||||
return reject("Permission was not given for location");
|
||||
}
|
||||
navigator.geolocation.getCurrentPosition(
|
||||
Geolocation.getCurrentPosition(
|
||||
(pos: Position) => {
|
||||
emitter(pos), resolve(pos);
|
||||
return pos;
|
||||
|
|
@ -39,7 +40,7 @@ export const getCurrentPosition = () => {
|
|||
},
|
||||
{
|
||||
enableHighAccuracy: true,
|
||||
timeout: 5000,
|
||||
timeout: 5000
|
||||
}
|
||||
);
|
||||
});
|
||||
|
|
@ -52,8 +53,8 @@ export const getPositionFromZip = async (zip: string) => {
|
|||
const pos: any = {
|
||||
coords: {
|
||||
latitude,
|
||||
longitude,
|
||||
},
|
||||
longitude
|
||||
}
|
||||
};
|
||||
|
||||
emitter(pos);
|
||||
|
|
@ -62,14 +63,14 @@ export const getPositionFromZip = async (zip: string) => {
|
|||
};
|
||||
|
||||
export const getLocation: () => Promise<Position> = async () => {
|
||||
const currentZip = await AsyncStorage.getItem('zipcode');
|
||||
const currentZip = await AsyncStorage.getItem("zipcode");
|
||||
|
||||
if (currentZip && currentZip !== 'usegps') {
|
||||
if (currentZip && currentZip !== "usegps") {
|
||||
return getPositionFromZip(currentZip);
|
||||
} else {
|
||||
AsyncStorage.setItem('zipcode', 'usegps');
|
||||
AsyncStorage.setItem("zipcode", "usegps");
|
||||
return getCurrentPosition().catch(error => {
|
||||
AsyncStorage.removeItem('zipcode');
|
||||
AsyncStorage.removeItem("zipcode");
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
// @flow
|
||||
import { withProps } from 'recompose';
|
||||
import { emit } from '../streams/ImagesStream';
|
||||
import { addImage, getImages } from '../apis/ImagesApi';
|
||||
import AuthManager from '../AuthManager';
|
||||
import { map } from 'ramda';
|
||||
import { withProps } from "recompose";
|
||||
import { emit } from "../streams/ImagesStream";
|
||||
import { addImage, getImages } from "../apis/ImagesApi";
|
||||
import AuthManager from "../AuthManager";
|
||||
import { map } from "ramda";
|
||||
|
||||
export const withImages = withProps({
|
||||
addImage: async ({ foodItemId, imageUri }) => {
|
||||
try {
|
||||
if (!AuthManager.user) {
|
||||
throw new Error('You need to be logged in to add images');
|
||||
throw new Error("You need to be logged in to add images");
|
||||
}
|
||||
|
||||
const username = AuthManager.user.name;
|
||||
|
|
@ -20,11 +20,11 @@ export const withImages = withProps({
|
|||
url,
|
||||
username,
|
||||
date,
|
||||
food_item_id: foodItemId,
|
||||
food_item_id: foodItemId
|
||||
});
|
||||
} catch (error) {
|
||||
// TODO error handling in the UI
|
||||
console.log(error); // eslint-disable-line
|
||||
console.error(error); // eslint-disable-line
|
||||
}
|
||||
},
|
||||
getImages: async ({ foodItemId }) => {
|
||||
|
|
@ -33,7 +33,7 @@ export const withImages = withProps({
|
|||
map(emit, images);
|
||||
} catch (error) {
|
||||
// TODO error handling in the UI
|
||||
console.log(error); // eslint-disable-line
|
||||
console.error(error); // eslint-disable-line
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,26 +1,20 @@
|
|||
// @flow
|
||||
import withProps from 'recompose/withProps';
|
||||
import mapPropsStream from 'recompose/mapPropsStream';
|
||||
import compose from 'recompose/compose';
|
||||
import Places$, { emitter as emitPlace } from '../streams/PlacesStream';
|
||||
import FoodItems$ from '../streams/FoodItemsStream';
|
||||
import { path } from 'ramda';
|
||||
import { List } from 'immutable';
|
||||
import { buildPlaceRecord } from '../records/PlaceRecord';
|
||||
import { getPlaceDetails } from '../apis/GooglePlacesApi';
|
||||
import { getSearch } from '../helpers/RouteHelpers';
|
||||
import { withRouterContext } from './routeEnhancers';
|
||||
import withProps from "recompose/withProps";
|
||||
import mapPropsStream from "recompose/mapPropsStream";
|
||||
import compose from "recompose/compose";
|
||||
import Places$, { emitter as emitPlace } from "../streams/PlacesStream";
|
||||
import FoodItems$ from "../streams/FoodItemsStream";
|
||||
import { path } from "ramda";
|
||||
import { List } from "immutable";
|
||||
import { buildPlaceRecord } from "../records/PlaceRecord";
|
||||
import { getPlaceDetails } from "../apis/GooglePlacesApi";
|
||||
import { getSearch } from "../helpers/RouteHelpers";
|
||||
import { withRouterContext } from "./routeEnhancers";
|
||||
|
||||
export const fetchPlaceDetails = async ({
|
||||
distance,
|
||||
placeId,
|
||||
}: {
|
||||
distance: number,
|
||||
placeId: ?string,
|
||||
}) => {
|
||||
export const fetchPlaceDetails = async ({ distance, placeId }: { distance: number, placeId: ?string }) => {
|
||||
const place = await getPlaceDetails({
|
||||
distance,
|
||||
placeId,
|
||||
placeId
|
||||
});
|
||||
emitPlace(buildPlaceRecord(place));
|
||||
};
|
||||
|
|
@ -29,13 +23,13 @@ export const withPlaces = mapPropsStream(props$ =>
|
|||
props$.combineLatest(Places$, (props, places) => {
|
||||
return {
|
||||
...props,
|
||||
places,
|
||||
places
|
||||
};
|
||||
})
|
||||
);
|
||||
|
||||
export const withPlaceIdFromRoute = withProps((props: { match: { params: { id: string } } }) => {
|
||||
const placeId = path(['match', 'params', 'id'], props);
|
||||
const placeId = path(["match", "params", "id"], props);
|
||||
return { placeId };
|
||||
});
|
||||
|
||||
|
|
@ -51,7 +45,7 @@ export const withPlaceId = compose(
|
|||
export const withPlaceActions = withProps(() => {
|
||||
return {
|
||||
emitPlace,
|
||||
fetchPlaceDetails,
|
||||
fetchPlaceDetails
|
||||
};
|
||||
});
|
||||
|
||||
|
|
@ -62,12 +56,12 @@ export const withPlace = compose(
|
|||
if (!placeId) {
|
||||
return {
|
||||
place: null,
|
||||
fetchPlaceDetails,
|
||||
fetchPlaceDetails
|
||||
};
|
||||
}
|
||||
return {
|
||||
place: places && places.get(placeId),
|
||||
fetchPlaceDetails,
|
||||
fetchPlaceDetails
|
||||
};
|
||||
})
|
||||
);
|
||||
|
|
@ -79,7 +73,7 @@ export const withPlaceForFoodItem = compose(
|
|||
return { place: null };
|
||||
}
|
||||
return {
|
||||
place: places.get(foodItem.placeId),
|
||||
place: places && places.get(foodItem.placeId)
|
||||
};
|
||||
})
|
||||
);
|
||||
|
|
@ -92,7 +86,7 @@ export const withFoodItemsForPlace = mapPropsStream(props$ =>
|
|||
: List();
|
||||
return {
|
||||
...props,
|
||||
foodItems,
|
||||
foodItems
|
||||
};
|
||||
})
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
//@flow
|
||||
import { withProps } from 'recompose';
|
||||
import { setQuantity } from '../apis/QuantityApi';
|
||||
import { emit as emitQuantity } from '../streams/QuantityStream';
|
||||
import type { Quantity, QuantityResponse } from '../constants/QuantityConstants';
|
||||
import { nth } from 'ramda';
|
||||
import { withProps } from "recompose";
|
||||
import { setQuantity } from "../apis/QuantityApi";
|
||||
import { emit as emitQuantity } from "../streams/QuantityStream";
|
||||
import type { Quantity, QuantityResponse } from "../constants/QuantityConstants";
|
||||
import { nth } from "ramda";
|
||||
|
||||
export const withUpdateQuantity = withProps({
|
||||
updateQuantity: async ({ foodItemId, quantity }: { foodItemId: string, quantity: Quantity }) => {
|
||||
|
|
@ -12,7 +12,7 @@ export const withUpdateQuantity = withProps({
|
|||
emitQuantity(newQuantity);
|
||||
} catch (error) {
|
||||
// todo - error states in food item detail page
|
||||
console.log(error); // eslint-disable-line
|
||||
console.error(error); // eslint-disable-line
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,32 +1,28 @@
|
|||
import { memoize } from 'ramda';
|
||||
import { memoizeWith, identity } from "ramda";
|
||||
|
||||
export const getZoomBox = memoize((foodItemsMap, coords) =>
|
||||
export const getZoomBox = memoizeWith(identity, (foodItemsMap, coords) =>
|
||||
foodItemsMap.reduce(
|
||||
(prev, foodItem) => {
|
||||
const minLat =
|
||||
!prev.minLat || prev.minLat > foodItem.latitude ? foodItem.latitude : prev.minLat;
|
||||
const minLat = !prev.minLat || prev.minLat > foodItem.latitude ? foodItem.latitude : prev.minLat;
|
||||
|
||||
const maxLat =
|
||||
!prev.maxLat || prev.maxLat < foodItem.latitude ? foodItem.latitude : prev.maxLat;
|
||||
const maxLat = !prev.maxLat || prev.maxLat < foodItem.latitude ? foodItem.latitude : prev.maxLat;
|
||||
|
||||
const minLng =
|
||||
!prev.minLng || prev.minLng > foodItem.longitude ? foodItem.longitude : prev.minLng;
|
||||
const minLng = !prev.minLng || prev.minLng > foodItem.longitude ? foodItem.longitude : prev.minLng;
|
||||
|
||||
const maxLng =
|
||||
!prev.maxLng || prev.maxLng < foodItem.longitude ? foodItem.longitude : prev.maxLng;
|
||||
const maxLng = !prev.maxLng || prev.maxLng < foodItem.longitude ? foodItem.longitude : prev.maxLng;
|
||||
|
||||
return {
|
||||
minLat,
|
||||
maxLat,
|
||||
minLng,
|
||||
maxLng,
|
||||
maxLng
|
||||
};
|
||||
},
|
||||
{
|
||||
minLat: coords.latitude,
|
||||
maxLat: coords.latitude,
|
||||
minLng: coords.longitude,
|
||||
maxLng: coords.longitude,
|
||||
maxLng: coords.longitude
|
||||
}
|
||||
)
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,22 +1,22 @@
|
|||
// @flow
|
||||
import React from 'react';
|
||||
import { View, Text, ScrollView, RefreshControl } from 'react-native';
|
||||
import FoodItemTile from '../components/FoodItemTile';
|
||||
import FoodItemList from '../components/FoodItemList';
|
||||
import typeof FoodItemRecord from '../records/FoodItemRecord';
|
||||
import { withFoodItemsAsSeq } from '../enhancers/foodItemEnhancers';
|
||||
import { type SetSeq } from 'immutable';
|
||||
import { compose, pure, withState, withHandlers, lifecycle } from 'recompose';
|
||||
import { withFilter } from '../enhancers/filterEnhancers';
|
||||
import { withRouterContext } from '../enhancers/routeEnhancers';
|
||||
import FullScreenMessage from '../components/FullScreenMessage';
|
||||
import React from "react";
|
||||
import { View, Text, ScrollView, RefreshControl } from "react-native";
|
||||
import FoodItemTile from "../components/FoodItemTile";
|
||||
import FoodItemList from "../components/FoodItemList";
|
||||
import typeof FoodItemRecord from "../records/FoodItemRecord";
|
||||
import { withFoodItemsAsSeq } from "../enhancers/foodItemEnhancers";
|
||||
import { type SetSeq } from "immutable";
|
||||
import { compose, pure, withState, withHandlers, lifecycle } from "recompose";
|
||||
import { withFilter } from "../enhancers/filterEnhancers";
|
||||
import { withRouterContext } from "../enhancers/routeEnhancers";
|
||||
import FullScreenMessage from "../components/FullScreenMessage";
|
||||
|
||||
type Props = {
|
||||
foodItemsSeq: SetSeq<FoodItemRecord>,
|
||||
isRefreshing: boolean,
|
||||
onRefresh: () => Promise<any>,
|
||||
onPulldown: () => {},
|
||||
isFilterDirty: boolean,
|
||||
isFilterDirty: boolean
|
||||
};
|
||||
|
||||
const FoodList = (props: Props) => {
|
||||
|
|
@ -36,7 +36,8 @@ const FoodList = (props: Props) => {
|
|||
{!showNoResults && (
|
||||
<ScrollView
|
||||
style={{ flex: 1 }}
|
||||
refreshControl={<RefreshControl refreshing={refreshing} onRefresh={onPulldown} />}>
|
||||
refreshControl={<RefreshControl refreshing={refreshing} onRefresh={onPulldown} />}
|
||||
>
|
||||
<FoodItemList foodItemsSeq={foodItemsSeq}>
|
||||
{(foodItem: FoodItemRecord) => <FoodItemTile key={foodItem.id} foodItem={foodItem} />}
|
||||
</FoodItemList>
|
||||
|
|
@ -51,23 +52,23 @@ export default compose(
|
|||
withRouterContext,
|
||||
withFoodItemsAsSeq,
|
||||
withFilter,
|
||||
withState('isRefreshing', 'setRefreshing', false),
|
||||
withState("isRefreshing", "setRefreshing", false),
|
||||
withHandlers({
|
||||
onPulldown: ({ setRefreshing, onRefresh, router }) => async () => {
|
||||
try {
|
||||
setRefreshing(true);
|
||||
await onRefresh();
|
||||
} catch (error) {
|
||||
console.log(error); // eslint-disable-line no-console
|
||||
router.history.push('/zipcode');
|
||||
console.error(error); // eslint-disable-line no-console
|
||||
router.history.push("/zipcode");
|
||||
} finally {
|
||||
setTimeout(() => setRefreshing(false), 1000);
|
||||
}
|
||||
},
|
||||
}
|
||||
}),
|
||||
lifecycle({
|
||||
componentDidMount() {
|
||||
this.props.onPulldown();
|
||||
},
|
||||
}
|
||||
})
|
||||
)(FoodList);
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
// @flow
|
||||
import React from 'react';
|
||||
import { View, Text, AsyncStorage } from 'react-native';
|
||||
import React from "react";
|
||||
import { View, Text, AsyncStorage } from "react-native";
|
||||
// import atcCookieImage from '../imgs/atc-cookie-logo.png';
|
||||
import { Link } from 'react-router-native';
|
||||
import RouterButton from 'react-router-native-button';
|
||||
import { compose, withHandlers, withState } from 'recompose';
|
||||
import { withRouterContext } from '../enhancers/routeEnhancers';
|
||||
import { Link } from "react-router-native";
|
||||
import RouterButton from "react-router-native-button";
|
||||
import { compose, withHandlers, withState } from "recompose";
|
||||
import { withRouterContext } from "../enhancers/routeEnhancers";
|
||||
|
||||
import theme from '../ui-theme';
|
||||
import theme from "../ui-theme";
|
||||
|
||||
type Props = {
|
||||
skipIfAlreadyChosen: () => void,
|
||||
|
|
@ -15,9 +15,9 @@ type Props = {
|
|||
loading: boolean,
|
||||
router: {
|
||||
history: {
|
||||
replace: (route: string) => void,
|
||||
},
|
||||
},
|
||||
replace: (route: string) => void
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const LandingPage = ({ skipIfAlreadyChosen, loading }: Props) => {
|
||||
|
|
@ -29,18 +29,19 @@ const LandingPage = ({ skipIfAlreadyChosen, loading }: Props) => {
|
|||
return (
|
||||
<View
|
||||
style={{
|
||||
flexDirection: 'column',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
flexDirection: "column",
|
||||
alignItems: "center",
|
||||
justifyContent: "center",
|
||||
flex: 1,
|
||||
height: '100%',
|
||||
}}>
|
||||
height: "100%"
|
||||
}}
|
||||
>
|
||||
{/* <Image
|
||||
source={atcCookieImage}
|
||||
style={{ height: 320, marginBottom: 10 }}
|
||||
resizeMode="contain"
|
||||
/> */}
|
||||
<Text style={{ fontSize: 24, marginBottom: 30, textAlign: 'center', width: 330 }}>
|
||||
<Text style={{ fontSize: 24, marginBottom: 30, textAlign: "center", width: 330 }}>
|
||||
We need to use your location to bring you the best experience possible.
|
||||
</Text>
|
||||
<View style={{ width: 275, marginBottom: 30 }}>
|
||||
|
|
@ -57,15 +58,15 @@ const LandingPage = ({ skipIfAlreadyChosen, loading }: Props) => {
|
|||
|
||||
export default compose(
|
||||
withRouterContext,
|
||||
withState('loading', 'setLoading', true),
|
||||
withState("loading", "setLoading", true),
|
||||
withHandlers({
|
||||
skipIfAlreadyChosen: (props: Props) => async () => {
|
||||
const zipcode = await AsyncStorage.getItem('zipcode');
|
||||
const zipcode = await AsyncStorage.getItem("zipcode");
|
||||
if (zipcode) {
|
||||
props.router.history.replace('/list/food');
|
||||
props.router.history.replace("/list/food");
|
||||
} else {
|
||||
props.setLoading(false);
|
||||
}
|
||||
},
|
||||
}
|
||||
})
|
||||
)(LandingPage);
|
||||
|
|
|
|||
|
|
@ -1,33 +1,29 @@
|
|||
// @flow
|
||||
import React from 'react';
|
||||
import { View, Text, Image, ScrollView } from 'react-native';
|
||||
import theme, { palette } from '../ui-theme';
|
||||
import { compose, pure, withState, withHandlers, lifecycle } from 'recompose';
|
||||
import typeof PlaceRecord from '../records/PlaceRecord';
|
||||
import {
|
||||
withPlace,
|
||||
withPlaceIdFromRoute,
|
||||
withFoodItemsForPlace,
|
||||
} from '../enhancers/placeEnhancers';
|
||||
import Carousel from 'react-native-looped-carousel';
|
||||
import CountBadge from '../components/CountBadge';
|
||||
import { StrongText } from '../components/ItemTile';
|
||||
import IconButton from '../components/IconButton';
|
||||
import { type List } from 'immutable';
|
||||
import typeof FoodItemRecord from '../records/FoodItemRecord';
|
||||
import FoodItemTile from '../components/FoodItemTile';
|
||||
import { openUrl } from '../helpers/linkHelpers';
|
||||
import { routeWithQuery } from '../helpers/RouteHelpers';
|
||||
import { Link } from 'react-router-native';
|
||||
import React from "react";
|
||||
import { View, Text, Image, ScrollView } from "react-native";
|
||||
import theme, { palette } from "../ui-theme";
|
||||
import { compose, pure, withState, withHandlers, lifecycle } from "recompose";
|
||||
import typeof PlaceRecord from "../records/PlaceRecord";
|
||||
import { withPlace, withPlaceIdFromRoute, withFoodItemsForPlace } from "../enhancers/placeEnhancers";
|
||||
import Carousel from "react-native-looped-carousel";
|
||||
import CountBadge from "../components/CountBadge";
|
||||
import { StrongText } from "../components/ItemTile";
|
||||
import IconButton from "../components/IconButton";
|
||||
import { type List } from "immutable";
|
||||
import typeof FoodItemRecord from "../records/FoodItemRecord";
|
||||
import FoodItemTile from "../components/FoodItemTile";
|
||||
import { openUrl } from "../helpers/linkHelpers";
|
||||
import { routeWithQuery } from "../helpers/RouteHelpers";
|
||||
import { Link } from "react-router-native";
|
||||
|
||||
const { placeDetails: style } = theme;
|
||||
|
||||
const stretchedStyle = { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0 };
|
||||
const stretchedStyle = { position: "absolute", top: 0, left: 0, right: 0, bottom: 0 };
|
||||
|
||||
const contentTileStyle = {
|
||||
backgroundColor: 'white',
|
||||
backgroundColor: "white",
|
||||
paddingLeft: 20,
|
||||
paddingRight: 20,
|
||||
paddingRight: 20
|
||||
};
|
||||
|
||||
type Props = {
|
||||
|
|
@ -37,7 +33,7 @@ type Props = {
|
|||
setCurrentImage: (idx: number) => void,
|
||||
viewOnMap: () => void,
|
||||
fetchPlaceDetails: (arg: { distance: number, placeId: string }) => Promise<void>,
|
||||
phoneCall: () => Promise<any>,
|
||||
phoneCall: () => Promise<any>
|
||||
};
|
||||
|
||||
const PlaceDetail = (props: Props) => {
|
||||
|
|
@ -57,7 +53,7 @@ const PlaceDetail = (props: Props) => {
|
|||
{photos.size > 1 && (
|
||||
<Carousel autoplay={false} onAnimateNextPage={setCurrentImage} style={stretchedStyle}>
|
||||
{photos.map(uri => (
|
||||
<Image key={uri} style={{ flex: 1, resizeMode: 'stretch' }} source={{ uri }} />
|
||||
<Image key={uri} style={{ flex: 1, resizeMode: "stretch" }} source={{ uri }} />
|
||||
))}
|
||||
</Carousel>
|
||||
)}
|
||||
|
|
@ -74,40 +70,36 @@ const PlaceDetail = (props: Props) => {
|
|||
</View>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: 'column',
|
||||
flexDirection: "column",
|
||||
...contentTileStyle,
|
||||
marginBottom: 10,
|
||||
paddingTop: 5,
|
||||
paddingBottom: 10,
|
||||
}}>
|
||||
<IconButton
|
||||
glyph="favorite"
|
||||
text="Add to Faves"
|
||||
onPress={() => {}}
|
||||
color={style.actionIconColor}
|
||||
/>
|
||||
paddingBottom: 10
|
||||
}}
|
||||
>
|
||||
<IconButton glyph="favorite" text="Add to Faves" onPress={() => {}} color={style.actionIconColor} />
|
||||
<IconButton glyph="phone" text="Call" onPress={phoneCall} color={style.actionIconColor} />
|
||||
</View>
|
||||
<View style={{ padding: 15, ...contentTileStyle }}>
|
||||
<StrongText>Products</StrongText>
|
||||
{!!foodItems &&
|
||||
foodItems.map(foodItem => (
|
||||
<FoodItemTile key={foodItem.id} foodItem={foodItem} place={place} />
|
||||
))}
|
||||
foodItems.map(foodItem => <FoodItemTile key={foodItem.id} foodItem={foodItem} place={place} />)}
|
||||
{!foodItems ||
|
||||
(!foodItems.size && (
|
||||
<Link
|
||||
to={routeWithQuery('/createFoodItem', {
|
||||
routeTitle: 'Add a Food Item',
|
||||
placeId: place.id,
|
||||
})}>
|
||||
to={routeWithQuery("/createFoodItem", {
|
||||
routeTitle: "Add a Food Item",
|
||||
placeId: place.id
|
||||
})}
|
||||
>
|
||||
<Text
|
||||
style={{
|
||||
marginTop: 15,
|
||||
marginBottom: 15,
|
||||
fontSize: 16,
|
||||
color: palette.accentColor,
|
||||
}}>
|
||||
color: palette.accentColor
|
||||
}}
|
||||
>
|
||||
No products yet, add a new one.
|
||||
</Text>
|
||||
</Link>
|
||||
|
|
@ -123,7 +115,7 @@ export default compose(
|
|||
withPlaceIdFromRoute,
|
||||
withPlace,
|
||||
withFoodItemsForPlace,
|
||||
withState('currentImage', 'setCurrentImage', 0),
|
||||
withState("currentImage", "setCurrentImage", 0),
|
||||
withHandlers({
|
||||
viewOnMap: (props: Props) => () => {
|
||||
const { place } = props;
|
||||
|
|
@ -140,14 +132,14 @@ export default compose(
|
|||
return;
|
||||
}
|
||||
openUrl(`tel:${props.place.phoneNumber}`);
|
||||
},
|
||||
}
|
||||
}),
|
||||
lifecycle({
|
||||
componentDidMount() {
|
||||
this.props.fetchPlaceDetails({
|
||||
distance: this.props.place.distance,
|
||||
placeId: this.props.place.id,
|
||||
placeId: this.props.place.id
|
||||
});
|
||||
},
|
||||
}
|
||||
})
|
||||
)(PlaceDetail);
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
// @flow
|
||||
import React from 'react';
|
||||
import { View, ScrollView, RefreshControl } from 'react-native';
|
||||
import PlaceTile from '../components/PlaceTile';
|
||||
import { compose, pure, withState, withHandlers, lifecycle } from 'recompose';
|
||||
import { withFoodItemsGroupedByPlace } from '../enhancers/foodItemEnhancers';
|
||||
import { withPlaces } from '../enhancers/placeEnhancers';
|
||||
import { Map, List } from 'immutable';
|
||||
import typeof FoodItemRecord from '../records/FoodItemRecord';
|
||||
import typeof PlaceRecord from '../records/PlaceRecord';
|
||||
import { withRouterContext } from '../enhancers/routeEnhancers';
|
||||
import React from "react";
|
||||
import { View, ScrollView, RefreshControl } from "react-native";
|
||||
import PlaceTile from "../components/PlaceTile";
|
||||
import { compose, pure, withState, withHandlers, lifecycle } from "recompose";
|
||||
import { withFoodItemsGroupedByPlace } from "../enhancers/foodItemEnhancers";
|
||||
import { withPlaces } from "../enhancers/placeEnhancers";
|
||||
import { Map, List } from "immutable";
|
||||
import typeof FoodItemRecord from "../records/FoodItemRecord";
|
||||
import typeof PlaceRecord from "../records/PlaceRecord";
|
||||
import { withRouterContext } from "../enhancers/routeEnhancers";
|
||||
|
||||
type Props = {
|
||||
foodItemsByPlace: Map<string, Map<string, FoodItemRecord>>,
|
||||
|
|
@ -16,7 +16,7 @@ type Props = {
|
|||
onRefresh: () => Promise<any>,
|
||||
onPulldown: () => {},
|
||||
isRefreshing: boolean,
|
||||
viewMode: string,
|
||||
viewMode: string
|
||||
};
|
||||
|
||||
const byDistance = (left: PlaceRecord, right: PlaceRecord) => left.distance - right.distance;
|
||||
|
|
@ -25,8 +25,7 @@ const PlacesList = ({ foodItemsByPlace = Map(), places, isRefreshing, onPulldown
|
|||
const refreshing = isRefreshing || !places;
|
||||
return (
|
||||
<View>
|
||||
<ScrollView
|
||||
refreshControl={<RefreshControl refreshing={refreshing} onRefresh={onPulldown} />}>
|
||||
<ScrollView refreshControl={<RefreshControl refreshing={refreshing} onRefresh={onPulldown} />}>
|
||||
{places &&
|
||||
places
|
||||
.sort(byDistance)
|
||||
|
|
@ -45,23 +44,23 @@ export default compose(
|
|||
withFoodItemsGroupedByPlace,
|
||||
withPlaces,
|
||||
withRouterContext,
|
||||
withState('isRefreshing', 'setRefreshing', false),
|
||||
withState("isRefreshing", "setRefreshing", false),
|
||||
withHandlers({
|
||||
onPulldown: ({ setRefreshing, onRefresh, router }) => async () => {
|
||||
try {
|
||||
setRefreshing(true);
|
||||
await onRefresh();
|
||||
} catch (error) {
|
||||
console.log(error); // eslint-disable-line no-console
|
||||
router.history.push('/zipcode');
|
||||
console.error(error); // eslint-disable-line no-console
|
||||
router.history.push("/zipcode");
|
||||
} finally {
|
||||
setTimeout(() => setRefreshing(false), 1000);
|
||||
}
|
||||
},
|
||||
}
|
||||
}),
|
||||
lifecycle({
|
||||
componentDidMount() {
|
||||
this.props.onPulldown();
|
||||
},
|
||||
}
|
||||
})
|
||||
)(PlacesList);
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
// @flow
|
||||
import React from 'react';
|
||||
import { View, Text, Switch, TextInput, AsyncStorage } from 'react-native';
|
||||
import IconButton from '../components/IconButton';
|
||||
import { palette } from '../ui-theme';
|
||||
import { compose, withState, withHandlers, lifecycle } from 'recompose';
|
||||
import { withRouterContext } from '../enhancers/routeEnhancers';
|
||||
import { getLocation } from '../apis/PositionApi';
|
||||
import Snackbar from 'react-native-snackbar';
|
||||
import React from "react";
|
||||
import { View, Text, Switch, TextInput, AsyncStorage } from "react-native";
|
||||
import IconButton from "../components/IconButton";
|
||||
import { palette } from "../ui-theme";
|
||||
import { compose, withState, withHandlers, lifecycle } from "recompose";
|
||||
import { withRouterContext } from "../enhancers/routeEnhancers";
|
||||
import { getLocation } from "../apis/PositionApi";
|
||||
import Snackbar from "react-native-snackbar";
|
||||
|
||||
type Props = {
|
||||
zipcode: ?string,
|
||||
|
|
@ -19,10 +19,10 @@ type Props = {
|
|||
toggleGPS: (a: boolean) => Promise<void>,
|
||||
router: {
|
||||
history: {
|
||||
replace: (route: string) => void,
|
||||
replace: (route: string) => void
|
||||
}
|
||||
},
|
||||
},
|
||||
isLoggedIn: boolean,
|
||||
isLoggedIn: boolean
|
||||
};
|
||||
|
||||
export const ProfilePage = (props: Props) => {
|
||||
|
|
@ -34,25 +34,26 @@ export const ProfilePage = (props: Props) => {
|
|||
error,
|
||||
toggleGPS,
|
||||
router: { history },
|
||||
isLoggedIn,
|
||||
isLoggedIn
|
||||
} = props;
|
||||
const usingGPS = zipcode === 'usegps';
|
||||
const usingGPS = zipcode === "usegps";
|
||||
return (
|
||||
<View style={{ flex: 1, flexDirection: 'column', padding: 15 }}>
|
||||
<Text style={{ fontSize: 32, marginBottom: 20, color: '#555555' }}>Profile</Text>
|
||||
<View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
|
||||
<View style={{ flex: 1, flexDirection: "column", padding: 15 }}>
|
||||
<Text style={{ fontSize: 32, marginBottom: 20, color: "#555555" }}>Profile</Text>
|
||||
<View style={{ flexDirection: "row", justifyContent: "space-between" }}>
|
||||
<Text style={{ fontSize: 18 }}>Use My Location</Text>
|
||||
<Switch value={usingGPS} onValueChange={toggleGPS} />
|
||||
</View>
|
||||
{!usingGPS && (
|
||||
<View style={{ flexDirection: 'row' }}>
|
||||
<View style={{ flexDirection: "row" }}>
|
||||
<View
|
||||
style={{
|
||||
flex: 1,
|
||||
flexDirection: 'column',
|
||||
justifyContent: 'flex-end',
|
||||
height: 60,
|
||||
}}>
|
||||
flexDirection: "column",
|
||||
justifyContent: "flex-end",
|
||||
height: 60
|
||||
}}
|
||||
>
|
||||
<TextInput
|
||||
editable={!loading}
|
||||
value={zipcode}
|
||||
|
|
@ -61,19 +62,19 @@ export const ProfilePage = (props: Props) => {
|
|||
onEndEditing={saveZip}
|
||||
keyboardType="numeric"
|
||||
style={{
|
||||
fontSize: 18,
|
||||
fontSize: 18
|
||||
}}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
)}
|
||||
{!!error && <Text style={{ fontSize: 16, color: 'red' }}>{error}</Text>}
|
||||
{!!error && <Text style={{ fontSize: 16, color: "red" }}>{error}</Text>}
|
||||
<View style={{ marginTop: 20 }}>
|
||||
{isLoggedIn && (
|
||||
<IconButton
|
||||
glyph="exit-to-app"
|
||||
text="Logout"
|
||||
onPress={() => history.push('/logout')}
|
||||
onPress={() => history.push("/logout")}
|
||||
color={palette.accentColor}
|
||||
textStyle={{ color: palette.accentColor }}
|
||||
/>
|
||||
|
|
@ -82,7 +83,7 @@ export const ProfilePage = (props: Props) => {
|
|||
<IconButton
|
||||
glyph="exit-to-app"
|
||||
text="Login"
|
||||
onPress={() => history.push('/login')}
|
||||
onPress={() => history.push("/login")}
|
||||
color={palette.accentColor}
|
||||
textStyle={{ color: palette.accentColor }}
|
||||
/>
|
||||
|
|
@ -94,32 +95,32 @@ export const ProfilePage = (props: Props) => {
|
|||
|
||||
export default compose(
|
||||
withRouterContext,
|
||||
withState('loading', 'setLoading', false),
|
||||
withState('zipcode', 'setZip', null),
|
||||
withState('error', 'setError', ''),
|
||||
withState("loading", "setLoading", false),
|
||||
withState("zipcode", "setZip", null),
|
||||
withState("error", "setError", ""),
|
||||
withHandlers({
|
||||
saveZip: (props: Props) => async () => {
|
||||
props.setError('');
|
||||
props.setError("");
|
||||
if (!props.zipcode || props.zipcode.length !== 5) {
|
||||
props.setError('Zipcode must be five digits');
|
||||
props.setError("Zipcode must be five digits");
|
||||
return;
|
||||
}
|
||||
props.setLoading(true);
|
||||
await AsyncStorage.setItem('zipcode', props.zipcode);
|
||||
await AsyncStorage.setItem("zipcode", props.zipcode);
|
||||
props.setLoading(false);
|
||||
getLocation();
|
||||
Snackbar.show({ title: 'Zipcode updated.' });
|
||||
},
|
||||
Snackbar.show({ title: "Zipcode updated." });
|
||||
}
|
||||
}),
|
||||
withHandlers({
|
||||
toggleGPS: (props: Props) => async (useGPS: boolean) => {
|
||||
try {
|
||||
props.setLoading(true);
|
||||
props.setZip(useGPS ? 'usegps' : '');
|
||||
await AsyncStorage.setItem('zipcode', 'usegps');
|
||||
props.setZip(useGPS ? "usegps" : "");
|
||||
await AsyncStorage.setItem("zipcode", "usegps");
|
||||
} catch (error) {
|
||||
console.log(error); //eslint-disable-line no-console
|
||||
props.setZip(props.zipcode || '');
|
||||
console.error(error); //eslint-disable-line no-console
|
||||
props.setZip(props.zipcode || "");
|
||||
} finally {
|
||||
props.setLoading(false);
|
||||
}
|
||||
|
|
@ -127,17 +128,17 @@ export default compose(
|
|||
getZipcode: ({ setLoading, setZip }) => async () => {
|
||||
setLoading(true);
|
||||
try {
|
||||
setZip(await AsyncStorage.getItem('zipcode'));
|
||||
setZip(await AsyncStorage.getItem("zipcode"));
|
||||
} catch (error) {
|
||||
console.log(error); //eslint-disable-line no-console
|
||||
console.error(error); //eslint-disable-line no-console
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
},
|
||||
}
|
||||
}),
|
||||
lifecycle({
|
||||
componentDidMount() {
|
||||
this.props.getZipcode();
|
||||
},
|
||||
}
|
||||
})
|
||||
)(ProfilePage);
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
//@flow
|
||||
import { ReplaySubject, Observable } from 'rxjs';
|
||||
import FoodItemRecord, { createFoodItem } from '../records/FoodItemRecord';
|
||||
import { setById } from '../helpers/ImmutableHelpers';
|
||||
import { Map } from 'immutable';
|
||||
import location$ from './LocationStream';
|
||||
import { getFoodItems, type FoodItemsForLocation } from '../apis/FoodItemsApi';
|
||||
import Filter$ from './FilterStream';
|
||||
import Quantity$ from './QuantityStream';
|
||||
import type { QuantityFragment } from '../constants/QuantityConstants';
|
||||
import { type ImageFragment } from '../records/ImageRecord';
|
||||
import Image$ from './ImagesStream';
|
||||
import { ReplaySubject, Observable } from "rxjs";
|
||||
import FoodItemRecord, { createFoodItem } from "../records/FoodItemRecord";
|
||||
import { setById } from "../helpers/ImmutableHelpers";
|
||||
import { Map } from "immutable";
|
||||
import location$ from "./LocationStream";
|
||||
import { getFoodItems, type FoodItemsForLocation } from "../apis/FoodItemsApi";
|
||||
import Filter$ from "./FilterStream";
|
||||
import Quantity$ from "./QuantityStream";
|
||||
import type { QuantityFragment } from "../constants/QuantityConstants";
|
||||
import { type ImageFragment } from "../records/ImageRecord";
|
||||
import Image$ from "./ImagesStream";
|
||||
|
||||
const foodItemSubject: ReplaySubject<FoodItemRecord> = new ReplaySubject();
|
||||
|
||||
|
|
@ -49,10 +49,7 @@ export default fetchedFoodItems$
|
|||
})
|
||||
.combineLatest(
|
||||
Quantity$,
|
||||
(
|
||||
foodItems: ?Map<string, FoodItemRecord>,
|
||||
quantitiesFromStream: Map<string, QuantityFragment>
|
||||
) => {
|
||||
(foodItems: ?Map<string, FoodItemRecord>, quantitiesFromStream: Map<string, QuantityFragment>) => {
|
||||
if (foodItems) {
|
||||
return foodItems.mergeDeepWith(
|
||||
(foodItem, foodItemQuantities) => foodItem.merge(foodItemQuantities),
|
||||
|
|
@ -68,7 +65,7 @@ export default fetchedFoodItems$
|
|||
return foodItems.mergeDeepWith(
|
||||
// $FlowFixMe
|
||||
(foodItem: FoodItemRecord, imageFragment: ImageFragment) => {
|
||||
return foodItem.set('images', imageFragment.images);
|
||||
return foodItem.set("images", imageFragment.images);
|
||||
},
|
||||
latestFromImages$
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,17 +1,17 @@
|
|||
// @flow
|
||||
import { ReplaySubject, Observable } from 'rxjs';
|
||||
import { buildPlaceRecord } from '../records/PlaceRecord';
|
||||
import { Map } from 'immutable';
|
||||
import { findNearbyPlaces, getPlaceDetails } from '../apis/GooglePlacesApi';
|
||||
import { path } from 'ramda';
|
||||
import { type GooglePlaceObj } from '../records/PlaceRecord';
|
||||
import { setById } from '../helpers/ImmutableHelpers';
|
||||
import location$ from './LocationStream';
|
||||
import filter$ from './FilterStream';
|
||||
import FilterRecord from '../records/FilterRecord';
|
||||
import foodItems$ from './FoodItemsStream';
|
||||
import PlaceRecord from '../records/PlaceRecord';
|
||||
import geodist from 'geodist';
|
||||
import { ReplaySubject, Observable } from "rxjs";
|
||||
import { buildPlaceRecord } from "../records/PlaceRecord";
|
||||
import { Map } from "immutable";
|
||||
import { findNearbyPlaces, getPlaceDetails } from "../apis/GooglePlacesApi";
|
||||
import { path } from "ramda";
|
||||
import { type GooglePlaceObj } from "../records/PlaceRecord";
|
||||
import { setById } from "../helpers/ImmutableHelpers";
|
||||
import location$ from "./LocationStream";
|
||||
import filter$ from "./FilterStream";
|
||||
import FilterRecord from "../records/FilterRecord";
|
||||
import foodItems$ from "./FoodItemsStream";
|
||||
import PlaceRecord from "../records/PlaceRecord";
|
||||
import geodist from "geodist";
|
||||
|
||||
const getGeoDist = begin => end => geodist(begin, end, { exact: true });
|
||||
|
||||
|
|
@ -25,7 +25,7 @@ filter$.subscribe(() => emitter(null));
|
|||
|
||||
foodItems$
|
||||
.mergeMap((foodItems = Map()) => Observable.from(foodItems.toArray()))
|
||||
.mergeMap(getPlaceDetails)
|
||||
.mergeMap(([foodItemId, foodItem]) => getPlaceDetails(foodItem))
|
||||
.map(buildPlaceRecord)
|
||||
.subscribe(emitter);
|
||||
|
||||
|
|
@ -36,7 +36,7 @@ location$
|
|||
return findNearbyPlaces({
|
||||
location,
|
||||
radius: filter.radius,
|
||||
search: filter.search,
|
||||
search: filter.search
|
||||
});
|
||||
})
|
||||
.map((val: { location: ?Position, places: ?Array<GooglePlaceObj> }) => {
|
||||
|
|
@ -44,13 +44,13 @@ location$
|
|||
return;
|
||||
}
|
||||
const { places } = val;
|
||||
const coords = path(['location', 'coords'], val) || {};
|
||||
const coords = path(["location", "coords"], val) || {};
|
||||
const getDist = getGeoDist({ lat: coords.latitude, lon: coords.longitude });
|
||||
|
||||
return (places || []).map((place: GooglePlaceObj) =>
|
||||
buildPlaceRecord({
|
||||
...place,
|
||||
distance: getDist({ lat: place.geometry.location.lat, lon: place.geometry.location.lng }),
|
||||
distance: getDist({ lat: place.geometry.location.lat, lon: place.geometry.location.lng })
|
||||
})
|
||||
);
|
||||
})
|
||||
|
|
|
|||
17
metro.config.js
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
/**
|
||||
* Metro configuration for React Native
|
||||
* https://github.com/facebook/react-native
|
||||
*
|
||||
* @format
|
||||
*/
|
||||
|
||||
module.exports = {
|
||||
transformer: {
|
||||
getTransformOptions: async () => ({
|
||||
transform: {
|
||||
experimentalImportSupport: false,
|
||||
inlineRequires: false,
|
||||
},
|
||||
}),
|
||||
},
|
||||
};
|
||||
65
package.json
|
|
@ -6,48 +6,51 @@
|
|||
"start": "node node_modules/react-native/local-cli/cli.js start",
|
||||
"test": "jest",
|
||||
"lint": "flow && eslint js",
|
||||
"android:dev": "react-native run-android && react-native start",
|
||||
"android:release": "cd android && ./gradlew assembleRelease"
|
||||
},
|
||||
"rnpm": {
|
||||
"assets": [
|
||||
"static/fonts"
|
||||
]
|
||||
"android:bundle": "react-native bundle --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle",
|
||||
"android:release": "yarn android:bundle && cd android && ./gradlew bundleRelease",
|
||||
"android:bundle-release": "yarn android:bundle && yarn android:release",
|
||||
"android:bundletool": "java -jar ./android/bundletool-0.10.2.jar",
|
||||
"android:build-apks": "yarn android:bundletool build-apks --bundle=android/app/build/outputs/bundle/release/app.aab --ks=android/app/atc-release-key.keystore --ks-key-alias=atc-key-alias --ks-pass=pass:bigjohncookies --output=/tmp/app.apks",
|
||||
"android:install-apks": "yarn android:bundletool install-apks --apks=/tmp/app.apks"
|
||||
},
|
||||
"dependencies": {
|
||||
"babel-preset-es2015": "^6.24.0",
|
||||
"geodist": "^0.2.1",
|
||||
"immutable": "^3.8.1",
|
||||
"moment": "^2.19.2",
|
||||
"query-string": "^5.0.1",
|
||||
"ramda": "^0.24.1",
|
||||
"react": "16.6.1",
|
||||
"react-native": "0.57.5",
|
||||
"react-native-auth0": "^1.3.0",
|
||||
"react-native-google-places": "3.1.1",
|
||||
"react-native-image-picker": "^0.27",
|
||||
"react-native-loading-spinner-overlay": "^0.5.2",
|
||||
"react-native-looped-carousel": "^0.1.5",
|
||||
"react-native-maps": "^0.24",
|
||||
"react-native-material-ui": "1.22.0",
|
||||
"react-native-snackbar": "^0.5.3",
|
||||
"react-native-vector-icons": "6.0.2",
|
||||
"react-router-native": "^4.3.0",
|
||||
"immutable": "^4.0.0-rc.12",
|
||||
"moment": "^2.24.0",
|
||||
"query-string": "^6.8.3",
|
||||
"ramda": "^0.26.1",
|
||||
"react": "16.8.6",
|
||||
"react-native": "0.60.5",
|
||||
"react-native-auth0": "^1.5.0",
|
||||
"react-native-geolocation-service": "^3.1.0",
|
||||
"react-native-google-places": "^3.1.2",
|
||||
"react-native-image-picker": "^1.1.0",
|
||||
"react-native-loading-spinner-overlay": "^1.0.1",
|
||||
"react-native-looped-carousel": "^0.1.13",
|
||||
"react-native-maps": "^0.25.0",
|
||||
"react-native-material-ui": "^1.30.1",
|
||||
"react-native-snackbar": "^2.0.2",
|
||||
"react-native-vector-icons": "^6.6.0",
|
||||
"react-router-native": "^4",
|
||||
"react-router-native-button": "^1.2.0",
|
||||
"recompose": "0.30.0",
|
||||
"rxjs": "^5.4.2"
|
||||
"recompose": "^0.30.0",
|
||||
"rxjs": "^5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.5.0",
|
||||
"@babel/runtime": "^7.5.0",
|
||||
"@react-native-community/eslint-config": "^0.0.3",
|
||||
"babel-jest": "^24.1.0",
|
||||
"jest": "^24.1.0",
|
||||
"metro-react-native-babel-preset": "0.54.1",
|
||||
"react-test-renderer": "16.8.6",
|
||||
"babel-eslint": "^8.1.1",
|
||||
"babel-jest": "18.0.0",
|
||||
"babel-preset-react-native": "1.9.1",
|
||||
"eslint": "^5",
|
||||
"eslint-plugin-react": "^7",
|
||||
"eslint-plugin-react-native": "^2.2.1",
|
||||
"flow-bin": "0.38",
|
||||
"jest": "18.1.0",
|
||||
"jshint": "^2.9.4",
|
||||
"react-test-renderer": "15.4.2"
|
||||
"flow-bin": "^0.92.0",
|
||||
"jshint": "^2.9.4"
|
||||
},
|
||||
"jest": {
|
||||
"preset": "react-native"
|
||||
|
|
|
|||