Upgrade to RN 0.62.2 (#4093)
* Upgrade to RN 0.62.0 * Update packager module paths * Fix Android PasteableInput * Fix regression on Android share extension credentials needed * Update android/app/src/main/java/com/mattermost/rnbeta/RNPasteableEditTextOnPasteListener.java * Reject commit if TSC check fails and Fix small eslint issues automatically * Use super.getExportedCustomBubblingEventTypeConstants in RNPasteableTextInputManager * Update to rn 0.62.2 Co-authored-by: Miguel Alatzar <migbot@users.noreply.github.com>
This commit is contained in:
parent
795091983c
commit
aaa571db32
95 changed files with 3749 additions and 3853 deletions
|
|
@ -26,6 +26,7 @@
|
|||
"react/display-name": [2, { "ignoreTranspilerName": false }],
|
||||
"react/jsx-filename-extension": [2, {"extensions": [".js"]}],
|
||||
"no-undefined": 0,
|
||||
"no-nested-ternary": 0,
|
||||
"@typescript-eslint/camelcase": 0,
|
||||
"@typescript-eslint/no-undefined": 0,
|
||||
"@typescript-eslint/no-non-null-assertion": 0,
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ node_modules/warning/.*
|
|||
[include]
|
||||
|
||||
[libs]
|
||||
node_modules/react-native/Libraries/react-native/react-native-interface.js
|
||||
node_modules/react-native/interface.js
|
||||
node_modules/react-native/flow/
|
||||
|
||||
[options]
|
||||
|
|
@ -36,9 +36,8 @@ module.file_ext=.ios.js
|
|||
|
||||
munge_underscores=true
|
||||
|
||||
module.name_mapper='^react-native$' -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/react-native/react-native-implementation'
|
||||
module.name_mapper='^react-native/\(.*\)$' -> '<PROJECT_ROOT>/node_modules/react-native/\1'
|
||||
module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/Image/RelativeImageStub'
|
||||
module.name_mapper='^@?[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/Image/RelativeImageStub'
|
||||
|
||||
suppress_type=$FlowIssue
|
||||
suppress_type=$FlowFixMe
|
||||
|
|
@ -72,4 +71,4 @@ untyped-import
|
|||
untyped-type-import
|
||||
|
||||
[version]
|
||||
^0.105.0
|
||||
^0.113.0
|
||||
|
|
|
|||
3
.gitattributes
vendored
3
.gitattributes
vendored
|
|
@ -1 +1,4 @@
|
|||
*.pbxproj -text
|
||||
|
||||
# specific for windows script files
|
||||
*.bat text eol=crlf
|
||||
|
|
|
|||
|
|
@ -15,7 +15,9 @@ import com.android.build.OutputFile
|
|||
* // the name of the generated asset file containing your JS bundle
|
||||
* bundleAssetName: "index.android.bundle",
|
||||
*
|
||||
* // the entry file for bundle generation
|
||||
* // the entry file for bundle generation. If none specified and
|
||||
* // "index.android.js" exists, it will be used. Otherwise "index.js" is
|
||||
* // default. Can be overridden with ENTRY_FILE environment variable.
|
||||
* entryFile: "index.android.js",
|
||||
*
|
||||
* // whether to bundle JS and assets in debug mode
|
||||
|
|
@ -130,6 +132,7 @@ android {
|
|||
applicationId "com.mattermost.rnbeta"
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
missingDimensionStrategy "RNNotifications.reactNativeVersion", "reactNative60"
|
||||
versionCode 282
|
||||
versionName "1.30.0"
|
||||
multiDexEnabled = true
|
||||
|
|
@ -194,6 +197,10 @@ android {
|
|||
packagingOptions {
|
||||
// Make sure libjsc.so does not packed in APK
|
||||
exclude "**/libjsc.so"
|
||||
pickFirst "lib/armeabi-v7a/libc++_shared.so"
|
||||
pickFirst "lib/arm64-v8a/libc++_shared.so"
|
||||
pickFirst "lib/x86/libc++_shared.so"
|
||||
pickFirst "lib/x86_64/libc++_shared.so"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -223,6 +230,23 @@ configurations.all {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(dir: "libs", include: ["*.jar"])
|
||||
|
||||
//noinspection GradleDynamicVersio
|
||||
implementation "com.facebook.react:react-native:+" // From node_modules
|
||||
|
||||
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
|
||||
debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
|
||||
exclude group:'com.facebook.fbjni'
|
||||
}
|
||||
debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
|
||||
exclude group:'com.facebook.flipper'
|
||||
}
|
||||
debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") {
|
||||
exclude group:'com.facebook.flipper'
|
||||
}
|
||||
|
||||
|
||||
if (enableHermes) {
|
||||
def hermesPath = "../../node_modules/hermes-engine/android/";
|
||||
debugImplementation files(hermesPath + "hermes-debug.aar")
|
||||
|
|
@ -232,14 +256,12 @@ dependencies {
|
|||
implementation jscFlavor
|
||||
}
|
||||
|
||||
implementation fileTree(dir: "libs", include: ["*.jar"])
|
||||
implementation "com.facebook.react:react-native:+" // From node_modules
|
||||
|
||||
implementation 'androidx.appcompat:appcompat:1.0.0'
|
||||
implementation 'com.google.android.material:material:1.0.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
||||
implementation 'com.google.firebase:firebase-messaging:17.3.4'
|
||||
|
||||
implementation project(':reactnativenotifications')
|
||||
implementation 'com.google.firebase:firebase-messaging:17.3.4'
|
||||
|
||||
// For animated GIF support
|
||||
implementation 'com.facebook.fresco:fresco:2.0.0'
|
||||
|
|
|
|||
68
android/app/src/debug/java/com/rn/ReactNativeFlipper.java
Normal file
68
android/app/src/debug/java/com/rn/ReactNativeFlipper.java
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* <p>This source code is licensed under the MIT license found in the LICENSE file in the root
|
||||
* directory of this source tree.
|
||||
*/
|
||||
package com.rn;
|
||||
|
||||
import android.content.Context;
|
||||
import com.facebook.flipper.android.AndroidFlipperClient;
|
||||
import com.facebook.flipper.android.utils.FlipperUtils;
|
||||
import com.facebook.flipper.core.FlipperClient;
|
||||
import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin;
|
||||
import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin;
|
||||
import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin;
|
||||
import com.facebook.flipper.plugins.inspector.DescriptorMapping;
|
||||
import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;
|
||||
import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;
|
||||
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
|
||||
import com.facebook.flipper.plugins.react.ReactFlipperPlugin;
|
||||
import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
|
||||
import com.facebook.react.ReactInstanceManager;
|
||||
import com.facebook.react.bridge.ReactContext;
|
||||
import com.facebook.react.modules.network.NetworkingModule;
|
||||
import okhttp3.OkHttpClient;
|
||||
public class ReactNativeFlipper {
|
||||
public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
|
||||
if (FlipperUtils.shouldEnableFlipper(context)) {
|
||||
final FlipperClient client = AndroidFlipperClient.getInstance(context);
|
||||
client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
|
||||
client.addPlugin(new ReactFlipperPlugin());
|
||||
client.addPlugin(new DatabasesFlipperPlugin(context));
|
||||
client.addPlugin(new SharedPreferencesFlipperPlugin(context));
|
||||
client.addPlugin(CrashReporterPlugin.getInstance());
|
||||
NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
|
||||
NetworkingModule.setCustomClientBuilder(
|
||||
new NetworkingModule.CustomClientBuilder() {
|
||||
@Override
|
||||
public void apply(OkHttpClient.Builder builder) {
|
||||
builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
|
||||
}
|
||||
});
|
||||
client.addPlugin(networkFlipperPlugin);
|
||||
client.start();
|
||||
// Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
|
||||
// Hence we run if after all native modules have been initialized
|
||||
ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
|
||||
if (reactContext == null) {
|
||||
reactInstanceManager.addReactInstanceEventListener(
|
||||
new ReactInstanceManager.ReactInstanceEventListener() {
|
||||
@Override
|
||||
public void onReactContextInitialized(ReactContext reactContext) {
|
||||
reactInstanceManager.removeReactInstanceEventListener(this);
|
||||
reactContext.runOnNativeModulesQueueThread(
|
||||
new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
client.addPlugin(new FrescoFlipperPlugin());
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
client.addPlugin(new FrescoFlipperPlugin());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -28,7 +28,7 @@
|
|||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:label="@string/app_name"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
|
||||
android:windowSoftInputMode="adjustResize"
|
||||
android:launchMode="singleTask">
|
||||
<intent-filter>
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import android.content.Context;
|
|||
import android.content.RestrictionsManager;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
|
@ -24,6 +25,7 @@ import com.wix.reactnativenotifications.core.AppLifecycleFacade;
|
|||
import com.wix.reactnativenotifications.core.JsIOHelper;
|
||||
|
||||
import com.facebook.react.PackageList;
|
||||
import com.facebook.react.ReactInstanceManager;
|
||||
import com.facebook.react.ReactPackage;
|
||||
import com.facebook.react.ReactNativeHost;
|
||||
import com.facebook.react.TurboReactPackage;
|
||||
|
|
@ -129,6 +131,7 @@ private final ReactNativeHost mReactNativeHost =
|
|||
Log.i("ReactNative", "Cleaning temp cache " + tempFolder.getAbsolutePath());
|
||||
|
||||
SoLoader.init(this, /* native exopackage */ false);
|
||||
initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
|
||||
|
||||
// Uncomment to listen to react markers for build that has telemetry enabled
|
||||
// addReactMarkerListener();
|
||||
|
|
@ -223,4 +226,35 @@ private final ReactNativeHost mReactNativeHost =
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads Flipper in React Native templates. Call this in the onCreate method with something like
|
||||
* initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
|
||||
*
|
||||
* @param context
|
||||
* @param reactInstanceManager
|
||||
*/
|
||||
private static void initializeFlipper(
|
||||
Context context, ReactInstanceManager reactInstanceManager) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
try {
|
||||
/*
|
||||
We use reflection here to pick up the class that initializes Flipper,
|
||||
since Flipper library is not available in release mode
|
||||
*/
|
||||
Class<?> aClass = Class.forName("com.rndiffapp.ReactNativeFlipper");
|
||||
aClass
|
||||
.getMethod("initializeFlipper", Context.class, ReactInstanceManager.class)
|
||||
.invoke(null, context, reactInstanceManager);
|
||||
} catch (ClassNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
} catch (NoSuchMethodException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
} catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import com.mattermost.share.ShareModule;
|
|||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.File;
|
||||
import java.nio.file.FileAlreadyExistsException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.regex.Matcher;
|
||||
|
|
@ -138,13 +139,14 @@ public class RNPasteableEditTextOnPasteListener implements RNEditTextOnPasteList
|
|||
String dest = cacheFolder + fileName;
|
||||
File folder = new File(cacheFolder);
|
||||
|
||||
|
||||
try {
|
||||
if (!folder.exists()) {
|
||||
folder.mkdirs();
|
||||
}
|
||||
|
||||
Files.move(Paths.get(src), Paths.get(dest));
|
||||
} catch (FileAlreadyExistsException fileError) {
|
||||
// Do nothing and return dest path
|
||||
} catch (Exception err) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,8 +71,12 @@ public class RNPasteableTextInputManager extends ReactTextInputManager {
|
|||
@Nullable
|
||||
@Override
|
||||
public Map<String, Object> getExportedCustomBubblingEventTypeConstants() {
|
||||
Map map = super.getExportedViewConstants();
|
||||
map.put("onPaste", MapBuilder.of("phasedRegistrationNames", MapBuilder.of("bubbled", "onPaste")));
|
||||
Map<String, Object> map = super.getExportedCustomBubblingEventTypeConstants();
|
||||
map.put(
|
||||
"onPaste",
|
||||
MapBuilder.of(
|
||||
"phasedRegistrationNames",
|
||||
MapBuilder.of("bubbled", "onPaste")));
|
||||
return map;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ buildscript {
|
|||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.4.2'
|
||||
classpath 'com.android.tools.build:gradle:3.5.2'
|
||||
classpath 'com.google.gms:google-services:4.2.0'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
|
||||
|
||||
|
|
@ -61,7 +61,7 @@ allprojects {
|
|||
url("$rootDir/../node_modules/v8-android/dist")
|
||||
}
|
||||
maven {
|
||||
url "https://jitpack.io"
|
||||
url "https://www.jitpack.io"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,5 +21,13 @@ org.gradle.jvmargs=-Xmx2048M
|
|||
#android.enableAapt2=false
|
||||
#android.useDeprecatedNdk=true
|
||||
|
||||
# AndroidX package structure to make it clearer which packages are bundled with the
|
||||
# Android operating system, and which are packaged with your app's APK
|
||||
# https://developer.android.com/topic/libraries/support-library/androidx-rn
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
|
||||
# Automatically convert third-party libraries to use AndroidX
|
||||
android.enableJetifier=true
|
||||
|
||||
# Version of flipper SDK to use with React Native
|
||||
FLIPPER_VERSION=0.33.1
|
||||
|
|
|
|||
|
|
@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
|
|||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.5-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip
|
||||
|
|
|
|||
24
android/gradlew
vendored
24
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
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for 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"
|
||||
|
|
@ -109,8 +125,8 @@ if $darwin; then
|
|||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin, switch paths to Windows format before running java
|
||||
if $cygwin ; then
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
|
@ -169,4 +185,4 @@ if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
|||
cd "$(dirname "$0")"
|
||||
fi
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
exec "$JAVACMD" "$@"
|
||||
160
android/gradlew.bat
vendored
160
android/gradlew.bat
vendored
|
|
@ -1,84 +1,76 @@
|
|||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem 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=
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windows variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
@rem
|
||||
@rem Copyright 2015 the original author or authors.
|
||||
@rem
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@rem you may not use this file except in compliance with the License.
|
||||
@rem You may obtain a copy of the License at
|
||||
@rem
|
||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||
@rem
|
||||
@rem Unless required by applicable law or agreed to in writing, software
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
goto fail
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
goto fail
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windows variants
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
set CMD_LINE_ARGS=%*
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
:omega
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`Fade should render {opacity: 0} 1`] = `
|
||||
<AnimatedComponent
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
pointerEvents="box-none"
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -17,11 +17,11 @@ exports[`Fade should render {opacity: 0} 1`] = `
|
|||
<Text>
|
||||
text
|
||||
</Text>
|
||||
</AnimatedComponent>
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
`;
|
||||
|
||||
exports[`Fade should render {opacity: 1} 1`] = `
|
||||
<AnimatedComponent
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
pointerEvents="box-none"
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -37,5 +37,5 @@ exports[`Fade should render {opacity: 1} 1`] = `
|
|||
<Text>
|
||||
text
|
||||
</Text>
|
||||
</AnimatedComponent>
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
`;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`AnnouncementBanner should match snapshot 1`] = `
|
||||
<AnimatedComponent
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
|
|
@ -18,8 +18,7 @@ exports[`AnnouncementBanner should match snapshot 1`] = `
|
|||
]
|
||||
}
|
||||
>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Array [
|
||||
|
|
@ -58,8 +57,8 @@ exports[`AnnouncementBanner should match snapshot 1`] = `
|
|||
name="info"
|
||||
size={16}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
</AnimatedComponent>
|
||||
</Component>
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
`;
|
||||
|
||||
exports[`AnnouncementBanner should match snapshot 2`] = `null`;
|
||||
|
|
|
|||
|
|
@ -70,6 +70,7 @@ export default class AnnouncementBanner extends PureComponent {
|
|||
Animated.timing(this.state.bannerHeight, {
|
||||
toValue: value,
|
||||
duration: 350,
|
||||
useNativeDriver: false,
|
||||
}).start();
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ exports[`ChannelLoader should match snapshot 1`] = `
|
|||
]
|
||||
}
|
||||
>
|
||||
<AnimatedComponent
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
|
|
@ -47,8 +47,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
|
|||
size={32}
|
||||
textSize={14}
|
||||
/>
|
||||
</AnimatedComponent>
|
||||
<AnimatedComponent
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
|
|
@ -78,8 +78,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
|
|||
size={32}
|
||||
textSize={14}
|
||||
/>
|
||||
</AnimatedComponent>
|
||||
<AnimatedComponent
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
|
|
@ -109,8 +109,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
|
|||
size={32}
|
||||
textSize={14}
|
||||
/>
|
||||
</AnimatedComponent>
|
||||
<AnimatedComponent
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
|
|
@ -140,8 +140,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
|
|||
size={32}
|
||||
textSize={14}
|
||||
/>
|
||||
</AnimatedComponent>
|
||||
<AnimatedComponent
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
|
|
@ -171,8 +171,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
|
|||
size={32}
|
||||
textSize={14}
|
||||
/>
|
||||
</AnimatedComponent>
|
||||
<AnimatedComponent
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
|
|
@ -202,8 +202,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
|
|||
size={32}
|
||||
textSize={14}
|
||||
/>
|
||||
</AnimatedComponent>
|
||||
<AnimatedComponent
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
|
|
@ -233,8 +233,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
|
|||
size={32}
|
||||
textSize={14}
|
||||
/>
|
||||
</AnimatedComponent>
|
||||
<AnimatedComponent
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
|
|
@ -264,8 +264,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
|
|||
size={32}
|
||||
textSize={14}
|
||||
/>
|
||||
</AnimatedComponent>
|
||||
<AnimatedComponent
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
|
|
@ -295,8 +295,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
|
|||
size={32}
|
||||
textSize={14}
|
||||
/>
|
||||
</AnimatedComponent>
|
||||
<AnimatedComponent
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
|
|
@ -326,8 +326,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
|
|||
size={32}
|
||||
textSize={14}
|
||||
/>
|
||||
</AnimatedComponent>
|
||||
<AnimatedComponent
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
|
|
@ -357,8 +357,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
|
|||
size={32}
|
||||
textSize={14}
|
||||
/>
|
||||
</AnimatedComponent>
|
||||
<AnimatedComponent
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
|
|
@ -388,8 +388,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
|
|||
size={32}
|
||||
textSize={14}
|
||||
/>
|
||||
</AnimatedComponent>
|
||||
<AnimatedComponent
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
|
|
@ -419,6 +419,6 @@ exports[`ChannelLoader should match snapshot 1`] = `
|
|||
size={32}
|
||||
textSize={14}
|
||||
/>
|
||||
</AnimatedComponent>
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
</View>
|
||||
`;
|
||||
|
|
|
|||
|
|
@ -174,6 +174,7 @@ export default class NetworkIndicator extends PureComponent {
|
|||
this.backgroundColor, {
|
||||
toValue: 1,
|
||||
duration: 100,
|
||||
useNativeDriver: false,
|
||||
},
|
||||
),
|
||||
Animated.timing(
|
||||
|
|
@ -181,6 +182,7 @@ export default class NetworkIndicator extends PureComponent {
|
|||
toValue: (this.getNavBarHeight() - HEIGHT),
|
||||
duration: 300,
|
||||
delay: 500,
|
||||
useNativeDriver: false,
|
||||
},
|
||||
),
|
||||
]).start(() => {
|
||||
|
|
@ -339,6 +341,7 @@ export default class NetworkIndicator extends PureComponent {
|
|||
this.top, {
|
||||
toValue: this.getNavBarHeight(),
|
||||
duration: 300,
|
||||
useNativeDriver: false,
|
||||
},
|
||||
).start(() => {
|
||||
this.props.actions.setCurrentUserStatusOffline();
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`CustomTextInput should render custom text input 1`] = `
|
||||
<TextInput
|
||||
allowFontScaling={true}
|
||||
onPaste={[MockFunction]}
|
||||
rejectResponderTermination={true}
|
||||
underlineColorAndroid="transparent"
|
||||
>
|
||||
My Text
|
||||
</TextInput>
|
||||
`;
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
exports[`PasteableTextInput should render pasteable text input 1`] = `
|
||||
<TextInput
|
||||
allowFontScaling={true}
|
||||
onPaste={[MockFunction]}
|
||||
onPaste={[Function]}
|
||||
rejectResponderTermination={true}
|
||||
underlineColorAndroid="transparent"
|
||||
>
|
||||
|
|
|
|||
|
|
@ -1,90 +0,0 @@
|
|||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
/* eslint-disable no-underscore-dangle */
|
||||
|
||||
import React from 'react';
|
||||
import {
|
||||
TextInput,
|
||||
Text,
|
||||
TouchableWithoutFeedback,
|
||||
UIManager,
|
||||
requireNativeComponent,
|
||||
} from 'react-native';
|
||||
import invariant from 'invariant';
|
||||
|
||||
const AndroidTextInput = requireNativeComponent('PasteableTextInputAndroid');
|
||||
|
||||
// This class is copied from React Native's TextInput
|
||||
// All credit goes to React Native team
|
||||
// Source: https://github.com/facebook/react-native/blob/master/Libraries/Components/TextInput/TextInput.js#L1056
|
||||
class CustomTextInput extends TextInput {
|
||||
// Override React Native's TextInput render for Android
|
||||
_renderAndroid = () => {
|
||||
const props = Object.assign({}, this.props);
|
||||
props.style = [this.props.style];
|
||||
props.autoCapitalize = UIManager.getViewManagerConfig(
|
||||
'AndroidTextInput',
|
||||
).Constants.AutoCapitalizationType[props.autoCapitalize || 'sentences'];
|
||||
let children = this.props.children;
|
||||
let childCount = 0;
|
||||
React.Children.forEach(children, () => ++childCount);
|
||||
invariant(
|
||||
!(this.props.value && childCount),
|
||||
'Cannot specify both value and children.',
|
||||
);
|
||||
if (childCount > 1) {
|
||||
children = <Text>{children}</Text>;
|
||||
}
|
||||
|
||||
if (props.selection && props.selection.end == null) {
|
||||
props.selection = {
|
||||
start: props.selection.start,
|
||||
end: props.selection.start,
|
||||
};
|
||||
}
|
||||
|
||||
const textContainer = (
|
||||
<AndroidTextInput
|
||||
ref={this._setNativeRef}
|
||||
{...props}
|
||||
mostRecentEventCount={0}
|
||||
onFocus={this._onFocus}
|
||||
onBlur={this._onBlur}
|
||||
onChange={this._onChange}
|
||||
onSelectionChange={this._onSelectionChange}
|
||||
onTextInput={this._onTextInput}
|
||||
text={this._getText()}
|
||||
// eslint-disable-next-line react/no-children-prop
|
||||
children={children}
|
||||
disableFullscreenUI={this.props.disableFullscreenUI}
|
||||
textBreakStrategy={this.props.textBreakStrategy}
|
||||
onScroll={this._onScroll}
|
||||
onPaste={this._onPaste}
|
||||
/>
|
||||
);
|
||||
|
||||
return (
|
||||
<TouchableWithoutFeedback
|
||||
onLayout={props.onLayout}
|
||||
onPress={this._onPress}
|
||||
accessible={this.props.accessible}
|
||||
accessibilityLabel={this.props.accessibilityLabel}
|
||||
accessibilityRole={this.props.accessibilityRole}
|
||||
accessibilityStates={this.props.accessibilityStates}
|
||||
nativeID={this.props.nativeID}
|
||||
testID={this.props.testID}
|
||||
>
|
||||
{textContainer}
|
||||
</TouchableWithoutFeedback>
|
||||
);
|
||||
};
|
||||
|
||||
_onPaste = (event) => {
|
||||
const {nativeEvent} = event;
|
||||
const {onPaste} = this.props;
|
||||
return onPaste?.(nativeEvent.error, nativeEvent.data);
|
||||
}
|
||||
}
|
||||
|
||||
export default CustomTextInput;
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
import React from 'react';
|
||||
import {shallow} from 'enzyme';
|
||||
|
||||
import CustomTextInput from './custom_text_input';
|
||||
|
||||
describe('CustomTextInput', () => {
|
||||
test('should render custom text input', () => {
|
||||
const onPaste = jest.fn();
|
||||
const text = 'My Text';
|
||||
const component = shallow(
|
||||
<CustomTextInput onPaste={onPaste}>{text}</CustomTextInput>,
|
||||
);
|
||||
expect(component).toMatchSnapshot();
|
||||
});
|
||||
});
|
||||
|
|
@ -3,8 +3,7 @@
|
|||
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import {TextInput, NativeEventEmitter, NativeModules} from 'react-native';
|
||||
import CustomTextInput from './custom_text_input';
|
||||
import {NativeEventEmitter, NativeModules, Platform, TextInput} from 'react-native';
|
||||
|
||||
const {OnPasteEventManager} = NativeModules;
|
||||
const OnPasteEventEmitter = new NativeEventEmitter(OnPasteEventManager);
|
||||
|
|
@ -28,15 +27,27 @@ export class PasteableTextInput extends React.PureComponent {
|
|||
|
||||
onPaste = (event) => {
|
||||
const {onPaste} = this.props;
|
||||
return onPaste?.(null, event);
|
||||
let data = null;
|
||||
let error = null;
|
||||
|
||||
if (Platform.OS === 'android') {
|
||||
const {nativeEvent} = event;
|
||||
data = nativeEvent.data;
|
||||
error = nativeEvent.error;
|
||||
} else {
|
||||
data = event;
|
||||
}
|
||||
|
||||
return onPaste?.(error, data);
|
||||
}
|
||||
|
||||
render() {
|
||||
const {forwardRef, ...props} = this.props;
|
||||
|
||||
return (
|
||||
<CustomTextInput
|
||||
<TextInput
|
||||
{...props}
|
||||
onPaste={this.onPaste}
|
||||
ref={forwardRef}
|
||||
/>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -97,8 +97,7 @@ exports[`PostTextBox should match, full snapshot 1`] = `
|
|||
}
|
||||
}
|
||||
>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
disabled={false}
|
||||
onPress={[Function]}
|
||||
style={
|
||||
|
|
@ -115,9 +114,8 @@ exports[`PostTextBox should match, full snapshot 1`] = `
|
|||
name="at"
|
||||
size={24}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
</Component>
|
||||
<Component
|
||||
disabled={false}
|
||||
onPress={[Function]}
|
||||
style={
|
||||
|
|
@ -145,7 +143,7 @@ exports[`PostTextBox should match, full snapshot 1`] = `
|
|||
]
|
||||
}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
<FileUploadButton
|
||||
blurTextBox={[Function]}
|
||||
browseFileTypes="public.item"
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ export default class Typing extends PureComponent {
|
|||
Animated.timing(this.state.typingHeight, {
|
||||
toValue: height,
|
||||
duration,
|
||||
useNativeDriver: false,
|
||||
}).start();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ exports[`ProgressiveImage should match snapshot 1`] = `
|
|||
<View
|
||||
style={Object {}}
|
||||
>
|
||||
<AnimatedComponent
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
blurRadius={5}
|
||||
onError={[MockFunction]}
|
||||
onLoadEnd={[Function]}
|
||||
|
|
@ -28,7 +28,7 @@ exports[`ProgressiveImage should match snapshot 1`] = `
|
|||
]
|
||||
}
|
||||
/>
|
||||
<AnimatedComponent
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ export default class RetryBarIndicator extends PureComponent {
|
|||
Animated.timing(this.state.retryMessageHeight, {
|
||||
toValue: value,
|
||||
duration: 350,
|
||||
useNativeDriver: false,
|
||||
}).start();
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`ChannelItem should match snapshot 1`] = `
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
underlayColor="rgba(69,120,191,0.5)"
|
||||
>
|
||||
|
|
@ -101,13 +99,11 @@ exports[`ChannelItem should match snapshot 1`] = `
|
|||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
`;
|
||||
|
||||
exports[`ChannelItem should match snapshot for current user i.e currentUser (you) 1`] = `
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
underlayColor="rgba(69,120,191,0.5)"
|
||||
>
|
||||
|
|
@ -215,13 +211,11 @@ exports[`ChannelItem should match snapshot for current user i.e currentUser (you
|
|||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
`;
|
||||
|
||||
exports[`ChannelItem should match snapshot for current user i.e currentUser (you) when isSearchResult 1`] = `
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
underlayColor="rgba(69,120,191,0.5)"
|
||||
>
|
||||
|
|
@ -329,13 +323,11 @@ exports[`ChannelItem should match snapshot for current user i.e currentUser (you
|
|||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
`;
|
||||
|
||||
exports[`ChannelItem should match snapshot for deactivated user and is currentChannel 1`] = `
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
underlayColor="rgba(69,120,191,0.5)"
|
||||
>
|
||||
|
|
@ -443,13 +435,11 @@ exports[`ChannelItem should match snapshot for deactivated user and is currentCh
|
|||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
`;
|
||||
|
||||
exports[`ChannelItem should match snapshot for deactivated user and is searchResult 1`] = `
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
underlayColor="rgba(69,120,191,0.5)"
|
||||
>
|
||||
|
|
@ -547,13 +537,11 @@ exports[`ChannelItem should match snapshot for deactivated user and is searchRes
|
|||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
`;
|
||||
|
||||
exports[`ChannelItem should match snapshot for deactivated user and not searchResults or currentChannel 1`] = `
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
underlayColor="rgba(69,120,191,0.5)"
|
||||
>
|
||||
|
|
@ -651,7 +639,7 @@ exports[`ChannelItem should match snapshot for deactivated user and not searchRe
|
|||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
`;
|
||||
|
||||
exports[`ChannelItem should match snapshot for no displayName 1`] = `null`;
|
||||
|
|
@ -659,9 +647,7 @@ exports[`ChannelItem should match snapshot for no displayName 1`] = `null`;
|
|||
exports[`ChannelItem should match snapshot for showUnreadForMsgs 1`] = `null`;
|
||||
|
||||
exports[`ChannelItem should match snapshot with draft 1`] = `
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
underlayColor="rgba(69,120,191,0.5)"
|
||||
>
|
||||
|
|
@ -759,13 +745,11 @@ exports[`ChannelItem should match snapshot with draft 1`] = `
|
|||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
`;
|
||||
|
||||
exports[`ChannelItem should match snapshot with mentions and muted 1`] = `
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
underlayColor="rgba(69,120,191,0.5)"
|
||||
>
|
||||
|
|
@ -896,5 +880,5 @@ exports[`ChannelItem should match snapshot with mentions and muted 1`] = `
|
|||
/>
|
||||
</View>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
`;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`SlideUpPanelIndicator should match snapshot 1`] = `
|
||||
<AnimatedComponent
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Object {
|
||||
"alignItems": "center",
|
||||
|
|
@ -21,5 +21,5 @@ exports[`SlideUpPanelIndicator should match snapshot 1`] = `
|
|||
}
|
||||
}
|
||||
/>
|
||||
</AnimatedComponent>
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
`;
|
||||
|
|
|
|||
|
|
@ -47,8 +47,7 @@ exports[`components/widgets/settings/RadioSetting should match snapshot when err
|
|||
]
|
||||
}
|
||||
>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
>
|
||||
<View
|
||||
|
|
@ -88,9 +87,8 @@ exports[`components/widgets/settings/RadioSetting should match snapshot when err
|
|||
}
|
||||
}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
</Component>
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
>
|
||||
<View
|
||||
|
|
@ -130,9 +128,8 @@ exports[`components/widgets/settings/RadioSetting should match snapshot when err
|
|||
}
|
||||
}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
</Component>
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
>
|
||||
<View
|
||||
|
|
@ -167,7 +164,7 @@ exports[`components/widgets/settings/RadioSetting should match snapshot when err
|
|||
width={12}
|
||||
/>
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
</View>
|
||||
<View
|
||||
style={null}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
254
app/mm-redux/client/websocket_client.ts
Normal file
254
app/mm-redux/client/websocket_client.ts
Normal file
|
|
@ -0,0 +1,254 @@
|
|||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
const MAX_WEBSOCKET_FAILS = 7;
|
||||
const MIN_WEBSOCKET_RETRY_TIME = 3000; // 3 sec
|
||||
|
||||
const MAX_WEBSOCKET_RETRY_TIME = 300000; // 5 mins
|
||||
|
||||
let Socket: any;
|
||||
|
||||
class WebSocketClient {
|
||||
conn?: WebSocket;
|
||||
connectionUrl: null;
|
||||
token: string|null;
|
||||
sequence: number;
|
||||
connectFailCount: number;
|
||||
eventCallback?: Function;
|
||||
firstConnectCallback?: Function;
|
||||
reconnectCallback?: Function;
|
||||
errorCallback?: Function;
|
||||
closeCallback?: Function;
|
||||
connectingCallback?: Function;
|
||||
stop: boolean;
|
||||
platform: string;
|
||||
connectionTimeout: any;
|
||||
|
||||
constructor() {
|
||||
this.connectionUrl = null;
|
||||
this.token = null;
|
||||
this.sequence = 1;
|
||||
this.connectFailCount = 0;
|
||||
this.stop = false;
|
||||
this.platform = '';
|
||||
}
|
||||
|
||||
initialize(token: string|null, opts: any) {
|
||||
const defaults = {
|
||||
forceConnection: true,
|
||||
connectionUrl: this.connectionUrl,
|
||||
webSocketConnector: WebSocket,
|
||||
};
|
||||
|
||||
const {connectionUrl, forceConnection, webSocketConnector, platform, ...additionalOptions} = Object.assign({}, defaults, opts);
|
||||
|
||||
if (platform) {
|
||||
this.platform = platform;
|
||||
}
|
||||
|
||||
if (forceConnection) {
|
||||
this.stop = false;
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
if (this.conn) {
|
||||
resolve();
|
||||
return;
|
||||
}
|
||||
|
||||
if (connectionUrl == null) {
|
||||
console.log('websocket must have connection url'); //eslint-disable-line no-console
|
||||
reject(new Error('websocket must have connection url'));
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.connectFailCount === 0) {
|
||||
console.log('websocket connecting to ' + connectionUrl); //eslint-disable-line no-console
|
||||
}
|
||||
|
||||
Socket = webSocketConnector;
|
||||
if (this.connectingCallback) {
|
||||
this.connectingCallback();
|
||||
}
|
||||
|
||||
const regex = /^(?:https?|wss?):(?:\/\/)?[^/]*/;
|
||||
const captured = (regex).exec(connectionUrl);
|
||||
|
||||
let origin;
|
||||
if (captured) {
|
||||
origin = captured[0];
|
||||
|
||||
if (platform === 'android') {
|
||||
// this is done cause for android having the port 80 or 443 will fail the connection
|
||||
// the websocket will append them
|
||||
const split = origin.split(':');
|
||||
const port = split[2];
|
||||
if (port === '80' || port === '443') {
|
||||
origin = `${split[0]}:${split[1]}`;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// If we're unable to set the origin header, the websocket won't connect, but the URL is likely malformed anyway
|
||||
const errorMessage = 'websocket failed to parse origin from ' + connectionUrl;
|
||||
console.warn(errorMessage); // eslint-disable-line no-console
|
||||
reject(new Error(errorMessage));
|
||||
return;
|
||||
}
|
||||
|
||||
this.conn = new Socket(connectionUrl, [], {headers: {origin}, ...(additionalOptions || {})});
|
||||
this.connectionUrl = connectionUrl;
|
||||
this.token = token;
|
||||
|
||||
this.conn!.onopen = () => {
|
||||
if (token) {
|
||||
// we check for the platform as a workaround until we fix on the server that further authentications
|
||||
// are ignored
|
||||
this.sendMessage('authentication_challenge', {token});
|
||||
}
|
||||
|
||||
if (this.connectFailCount > 0) {
|
||||
console.log('websocket re-established connection'); //eslint-disable-line no-console
|
||||
if (this.reconnectCallback) {
|
||||
this.reconnectCallback();
|
||||
}
|
||||
} else if (this.firstConnectCallback) {
|
||||
this.firstConnectCallback();
|
||||
}
|
||||
|
||||
this.connectFailCount = 0;
|
||||
resolve();
|
||||
};
|
||||
|
||||
this.conn!.onclose = () => {
|
||||
this.conn = undefined;
|
||||
this.sequence = 1;
|
||||
|
||||
if (this.connectFailCount === 0) {
|
||||
console.log('websocket closed'); //eslint-disable-line no-console
|
||||
}
|
||||
|
||||
this.connectFailCount++;
|
||||
|
||||
if (this.closeCallback) {
|
||||
this.closeCallback(this.connectFailCount);
|
||||
}
|
||||
|
||||
let retryTime = MIN_WEBSOCKET_RETRY_TIME;
|
||||
|
||||
// If we've failed a bunch of connections then start backing off
|
||||
if (this.connectFailCount > MAX_WEBSOCKET_FAILS) {
|
||||
retryTime = MIN_WEBSOCKET_RETRY_TIME * this.connectFailCount;
|
||||
if (retryTime > MAX_WEBSOCKET_RETRY_TIME) {
|
||||
retryTime = MAX_WEBSOCKET_RETRY_TIME;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.connectionTimeout) {
|
||||
clearTimeout(this.connectionTimeout);
|
||||
}
|
||||
|
||||
this.connectionTimeout = setTimeout(
|
||||
() => {
|
||||
if (this.stop) {
|
||||
clearTimeout(this.connectionTimeout);
|
||||
return;
|
||||
}
|
||||
this.initialize(token, opts);
|
||||
},
|
||||
retryTime,
|
||||
);
|
||||
};
|
||||
|
||||
this.conn!.onerror = (evt) => {
|
||||
if (this.connectFailCount <= 1) {
|
||||
console.log('websocket error'); //eslint-disable-line no-console
|
||||
console.log(evt); //eslint-disable-line no-console
|
||||
}
|
||||
|
||||
if (this.errorCallback) {
|
||||
this.errorCallback(evt);
|
||||
}
|
||||
};
|
||||
|
||||
this.conn!.onmessage = (evt) => {
|
||||
const msg = JSON.parse(evt.data);
|
||||
if (msg.seq_reply) {
|
||||
if (msg.error) {
|
||||
console.warn(msg); //eslint-disable-line no-console
|
||||
}
|
||||
} else if (this.eventCallback) {
|
||||
this.eventCallback(msg);
|
||||
}
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
setConnectingCallback(callback: Function) {
|
||||
this.connectingCallback = callback;
|
||||
}
|
||||
|
||||
setEventCallback(callback: Function) {
|
||||
this.eventCallback = callback;
|
||||
}
|
||||
|
||||
setFirstConnectCallback(callback: Function) {
|
||||
this.firstConnectCallback = callback;
|
||||
}
|
||||
|
||||
setReconnectCallback(callback: Function) {
|
||||
this.reconnectCallback = callback;
|
||||
}
|
||||
|
||||
setErrorCallback(callback: Function) {
|
||||
this.errorCallback = callback;
|
||||
}
|
||||
|
||||
setCloseCallback(callback: Function) {
|
||||
this.closeCallback = callback;
|
||||
}
|
||||
|
||||
close(stop = false) {
|
||||
this.stop = stop;
|
||||
this.connectFailCount = 0;
|
||||
this.sequence = 1;
|
||||
if (this.conn && this.conn.readyState === Socket.OPEN) {
|
||||
this.conn.onclose = () => {}; //eslint-disable-line @typescript-eslint/no-empty-function
|
||||
this.conn.close();
|
||||
this.conn = undefined;
|
||||
console.log('websocket closed'); //eslint-disable-line no-console
|
||||
}
|
||||
}
|
||||
|
||||
sendMessage(action: string, data: any) {
|
||||
const msg = {
|
||||
action,
|
||||
seq: this.sequence++,
|
||||
data,
|
||||
};
|
||||
|
||||
if (this.conn && this.conn.readyState === Socket.OPEN) {
|
||||
this.conn.send(JSON.stringify(msg));
|
||||
} else if (!this.conn || this.conn.readyState === Socket.CLOSED) {
|
||||
this.conn = undefined;
|
||||
this.initialize(this.token, {platform: this.platform});
|
||||
}
|
||||
}
|
||||
|
||||
userTyping(channelId: string, parentId: string) {
|
||||
this.sendMessage('user_typing', {
|
||||
channel_id: channelId,
|
||||
parent_id: parentId,
|
||||
});
|
||||
}
|
||||
|
||||
getStatuses() {
|
||||
this.sendMessage('get_statuses', null);
|
||||
}
|
||||
|
||||
getStatusesByIds(userIds: string[]) {
|
||||
this.sendMessage('get_statuses_by_ids', {
|
||||
user_ids: userIds,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default new WebSocketClient();
|
||||
|
|
@ -14,7 +14,7 @@ function myChannels(state: RequestStatusType = initialRequestState(), action: Ge
|
|||
ChannelTypes.CHANNELS_SUCCESS,
|
||||
ChannelTypes.CHANNELS_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -24,7 +24,7 @@ function createChannel(state: RequestStatusType = initialRequestState(), action:
|
|||
ChannelTypes.CREATE_CHANNEL_SUCCESS,
|
||||
ChannelTypes.CREATE_CHANNEL_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -34,7 +34,7 @@ function updateChannel(state: RequestStatusType = initialRequestState(), action:
|
|||
ChannelTypes.UPDATE_CHANNEL_SUCCESS,
|
||||
ChannelTypes.UPDATE_CHANNEL_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -44,7 +44,7 @@ function getChannels(state: RequestStatusType = initialRequestState(), action: G
|
|||
ChannelTypes.GET_CHANNELS_SUCCESS,
|
||||
ChannelTypes.GET_CHANNELS_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -54,7 +54,7 @@ function getAllChannels(state: RequestStatusType = initialRequestState(), action
|
|||
ChannelTypes.GET_ALL_CHANNELS_SUCCESS,
|
||||
ChannelTypes.GET_ALL_CHANNELS_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ export function handleUploadFilesRequest(
|
|||
FAILURE: string,
|
||||
CANCEL: string,
|
||||
state: RequestStatusType,
|
||||
action: GenericAction
|
||||
action: GenericAction,
|
||||
): RequestStatusType {
|
||||
switch (action.type) {
|
||||
case REQUEST:
|
||||
|
|
@ -60,7 +60,7 @@ function uploadFiles(state: RequestStatusType = initialRequestState(), action: G
|
|||
FileTypes.UPLOAD_FILES_FAILURE,
|
||||
FileTypes.UPLOAD_FILES_CANCEL,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ function websocket(state: RequestStatusType = initialRequestState(), action: Gen
|
|||
GeneralTypes.WEBSOCKET_SUCCESS,
|
||||
GeneralTypes.WEBSOCKET_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ export function handleRequest(
|
|||
SUCCESS: string,
|
||||
FAILURE: string,
|
||||
state: RequestStatusType,
|
||||
action: GenericAction
|
||||
action: GenericAction,
|
||||
): RequestStatusType {
|
||||
switch (action.type) {
|
||||
case REQUEST:
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ function createJob(state: RequestStatusType = initialRequestState(), action: Gen
|
|||
JobTypes.CREATE_JOB_SUCCESS,
|
||||
JobTypes.CREATE_JOB_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -24,7 +24,7 @@ function getJob(state: RequestStatusType = initialRequestState(), action: Generi
|
|||
JobTypes.GET_JOB_SUCCESS,
|
||||
JobTypes.GET_JOB_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -34,7 +34,7 @@ function getJobs(state: RequestStatusType = initialRequestState(), action: Gener
|
|||
JobTypes.GET_JOBS_SUCCESS,
|
||||
JobTypes.GET_JOBS_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -44,7 +44,7 @@ function cancelJob(state: RequestStatusType = initialRequestState(), action: Gen
|
|||
JobTypes.CANCEL_JOB_SUCCESS,
|
||||
JobTypes.CANCEL_JOB_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ function createPost(state: RequestStatusType = initialRequestState(), action: Ge
|
|||
PostTypes.CREATE_POST_SUCCESS,
|
||||
PostTypes.CREATE_POST_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -26,7 +26,7 @@ function editPost(state: RequestStatusType = initialRequestState(), action: Gene
|
|||
PostTypes.EDIT_POST_SUCCESS,
|
||||
PostTypes.EDIT_POST_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -36,7 +36,7 @@ function getPostThread(state: RequestStatusType = initialRequestState(), action:
|
|||
PostTypes.GET_POST_THREAD_SUCCESS,
|
||||
PostTypes.GET_POST_THREAD_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ function getRolesByNames(state: RequestStatusType = initialRequestState(), actio
|
|||
RoleTypes.ROLES_BY_NAMES_SUCCESS,
|
||||
RoleTypes.ROLES_BY_NAMES_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -24,7 +24,7 @@ function getRoleByName(state: RequestStatusType = initialRequestState(), action:
|
|||
RoleTypes.ROLE_BY_NAME_SUCCESS,
|
||||
RoleTypes.ROLE_BY_NAME_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -34,7 +34,7 @@ function getRole(state: RequestStatusType = initialRequestState(), action: Gener
|
|||
RoleTypes.ROLE_BY_ID_SUCCESS,
|
||||
RoleTypes.ROLE_BY_ID_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -44,7 +44,7 @@ function editRole(state: RequestStatusType = initialRequestState(), action: Gene
|
|||
RoleTypes.EDIT_ROLE_SUCCESS,
|
||||
RoleTypes.EDIT_ROLE_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ function flaggedPosts(state: RequestStatusType = initialRequestState(), action:
|
|||
SearchTypes.SEARCH_FLAGGED_POSTS_SUCCESS,
|
||||
SearchTypes.SEARCH_FLAGGED_POSTS_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -32,7 +32,7 @@ function pinnedPosts(state: RequestStatusType = initialRequestState(), action: G
|
|||
SearchTypes.SEARCH_PINNED_POSTS_SUCCESS,
|
||||
SearchTypes.SEARCH_PINNED_POSTS_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ function getMyTeams(state: RequestStatusType = initialRequestState(), action: Ge
|
|||
TeamTypes.MY_TEAMS_SUCCESS,
|
||||
TeamTypes.MY_TEAMS_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -24,7 +24,7 @@ function getTeams(state: RequestStatusType = initialRequestState(), action: Gene
|
|||
TeamTypes.GET_TEAMS_SUCCESS,
|
||||
TeamTypes.GET_TEAMS_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -34,7 +34,7 @@ function joinTeam(state: RequestStatusType = initialRequestState(), action: Gene
|
|||
TeamTypes.JOIN_TEAM_SUCCESS,
|
||||
TeamTypes.JOIN_TEAM_FAILURE,
|
||||
state,
|
||||
action
|
||||
action,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ export function makeGetCategoriesForTeam(): (state: GlobalState, teamId: string)
|
|||
}
|
||||
|
||||
return categoryIds.map((id) => categoriesById[id]);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -51,7 +51,7 @@ export function makeGetUnsortedUnfilteredChannels(): (state: GlobalState, teamId
|
|||
filter((channel) => channel.delete_at === 0).
|
||||
filter((channel) => channel.team_id === teamId || channel.team_id === '').
|
||||
filter((channel) => myMembers.hasOwnProperty(channel.id));
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -70,7 +70,7 @@ export function makeFilterChannelsByFavorites(): (state: GlobalState, channels:
|
|||
});
|
||||
|
||||
return filtered.length === channels.length ? channels : filtered;
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -93,12 +93,12 @@ export function makeFilterChannelsByType(): (state: GlobalState, channels: Chann
|
|||
});
|
||||
|
||||
return filtered.length === channels.length ? channels : filtered;
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
function getDefaultAutocloseCutoff() {
|
||||
return Date.now() - 7 * 24 * 60 * 60 * 1000;
|
||||
return Date.now() - (7 * 24 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
export function makeFilterAutoclosedDMs(getAutocloseCutoff = getDefaultAutocloseCutoff): (state: GlobalState, channels: Channel[], categoryType: string) => Channel[] {
|
||||
|
|
@ -181,7 +181,7 @@ export function makeFilterAutoclosedDMs(getAutocloseCutoff = getDefaultAutoclose
|
|||
});
|
||||
|
||||
return filtered.length === channels.length ? channels : filtered;
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -211,7 +211,7 @@ export function makeFilterManuallyClosedDMs(): (state: GlobalState, channels: Ch
|
|||
|
||||
// Only return a new array if anything was removed
|
||||
return filtered.length === channels.length ? channels : filtered;
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -223,7 +223,7 @@ export function makeSortChannelsByName(): (state: GlobalState, channels: Channel
|
|||
const sorted = [...channels];
|
||||
sorted.sort((a, b) => a.display_name.localeCompare(b.display_name, locale, {numeric: true}));
|
||||
return sorted;
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -281,7 +281,7 @@ export function makeSortChannelsByNameWithDMs(): (state: GlobalState, channels:
|
|||
const sorted = [...channels];
|
||||
sorted.sort((a, b) => getDisplayName(a).localeCompare(getDisplayName(b), locale, {numeric: true}));
|
||||
return sorted;
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ export function getChannelsInTeam(state: GlobalState): RelationOneToMany<Team, C
|
|||
}
|
||||
|
||||
export const getDirectChannelsSet: (a: GlobalState) => Set<string> = createSelector(getChannelsInTeam, (channelsInTeam: RelationOneToMany<Team, Channel>): Set<string> => {
|
||||
return channelsInTeam && new Set(channelsInTeam['']) || new Set();
|
||||
return channelsInTeam ? new Set(channelsInTeam['']) : new Set();
|
||||
});
|
||||
export function getChannelMembersInChannels(state: GlobalState): RelationOneToOne<Channel, UserIDMappedObjects<ChannelMembership>> {
|
||||
return state.entities.channels.membersInChannel;
|
||||
|
|
@ -55,7 +55,7 @@ export const getKnownUsers: (a: GlobalState) => Set<string> = createSelector(
|
|||
}
|
||||
}
|
||||
return knownUsers;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
function sortChannelsByRecencyOrAlpha(locale: string, lastPosts: RelationOneToOne<Channel, Post>, sorting: SortingType, a: Channel, b: Channel) {
|
||||
|
|
@ -200,7 +200,7 @@ export function getChannelByName(state: GlobalState, channelName: string): Chann
|
|||
}
|
||||
|
||||
export const getChannelSetInCurrentTeam: (a: GlobalState) => Array<string> = createSelector(getCurrentTeamId, getChannelsInTeam, (currentTeamId: string, channelsInTeam: RelationOneToMany<Team, Channel>): Array<string> => {
|
||||
return channelsInTeam && channelsInTeam[currentTeamId] || [];
|
||||
return channelsInTeam ? channelsInTeam[currentTeamId] : [];
|
||||
});
|
||||
|
||||
function sortAndInjectChannels(channels: IDMappedObjects<Channel>, channelSet: Array<string>, locale: string): Array<Channel> {
|
||||
|
|
@ -228,7 +228,7 @@ export const getChannelsInCurrentTeam: (a: GlobalState) => Array<Channel> = crea
|
|||
}
|
||||
|
||||
return sortAndInjectChannels(channels, currentTeamChannelSet, locale);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getChannelsNameMapInTeam: (b: GlobalState, a: string) => NameMappedObjects<Channel> = createSelector(getAllChannels, getChannelsInTeam, (state: GlobalState, teamId: string): string => teamId, (channels: IDMappedObjects<Channel>, channelsInTeams: RelationOneToMany<Team, Channel>, teamId: string): NameMappedObjects<Channel> => {
|
||||
|
|
@ -278,7 +278,7 @@ export const getMyChannels: (a: GlobalState) => Array<Channel> = createSelector(
|
|||
getMyChannelMemberships,
|
||||
(channels: Array<Channel>, directChannels: Array<Channel>, myMembers: RelationOneToOne<Channel, ChannelMembership>): Array<Channel> => {
|
||||
return [...channels, ...directChannels].filter((c) => myMembers.hasOwnProperty(c.id));
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getOtherChannels: (b: GlobalState, a?: boolean | null) => Array<Channel> = createSelector(getChannelsInCurrentTeam, getMyChannelMemberships, (state: GlobalState, archived: boolean | undefined | null = true) => archived, (channels: Array<Channel>, myMembers: RelationOneToOne<Channel, ChannelMembership>, archived?: boolean | null): Array<Channel> => {
|
||||
|
|
@ -314,7 +314,7 @@ export const getChannelsWithUnreadSection: (a: GlobalState) => {
|
|||
},
|
||||
teammateNameDisplay: string,
|
||||
usersState: UsersState,
|
||||
lastPosts: RelationOneToOne<Channel, Post>
|
||||
lastPosts: RelationOneToOne<Channel, Post>,
|
||||
) => {
|
||||
const allChannels = channels.map((c) => {
|
||||
const channel = {...c,
|
||||
|
|
@ -323,7 +323,7 @@ export const getChannelsWithUnreadSection: (a: GlobalState) => {
|
|||
return channel;
|
||||
});
|
||||
return buildDisplayableChannelListWithUnreadSection(usersState, allChannels, myMembers, config, myPreferences, teammateNameDisplay, lastPosts);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getDefaultChannel: (a: GlobalState) => Channel | undefined | null = createSelector(getAllChannels, getCurrentTeamId, (channels: IDMappedObjects<Channel>, teamId: string): Channel | undefined | null => {
|
||||
|
|
@ -408,7 +408,7 @@ export const getUnreads: (a: GlobalState) => {
|
|||
messageCount: messageCountForCurrentTeam + otherTeamsUnreadCountForChannels.messageCount,
|
||||
mentionCount: mentionCountForCurrentTeam + otherTeamsUnreadCountForChannels.mentionCount,
|
||||
};
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getUnreadsInCurrentTeam: (a: GlobalState) => {
|
||||
|
|
@ -529,7 +529,7 @@ export const getUnreadChannelIds: (b: GlobalState, a?: Channel | null) => Array<
|
|||
const chHasUnread = c.total_msg_count - m.msg_count > 0;
|
||||
const chHasMention = m.mention_count > 0;
|
||||
|
||||
if (m.notify_props && m.notify_props.mark_unread !== 'mention' && chHasUnread || chHasMention) {
|
||||
if ((m.notify_props && m.notify_props.mark_unread !== 'mention' && chHasUnread) || chHasMention) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -638,7 +638,7 @@ export const getPublicChannels: (a: GlobalState) => Array<Channel> = createSelec
|
|||
return teamChannelIds.includes(id) && channel.type === General.OPEN_CHANNEL;
|
||||
}).map((id) => channels[id]);
|
||||
return publicChannels;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getPublicChannelIds: (e: GlobalState, d: Channel, c: boolean, b: boolean, a: SortingType) => Array<string> = createIdsSelector(
|
||||
|
|
@ -647,7 +647,7 @@ export const getPublicChannelIds: (e: GlobalState, d: Channel, c: boolean, b: bo
|
|||
getMyChannelMemberships,
|
||||
getLastPostPerChannel,
|
||||
(state: GlobalState, lastUnreadChannel: Channel, unreadsAtTop: boolean, favoritesAtTop: boolean, sorting: SortingType = 'alpha') => sorting,
|
||||
mapAndSortChannelIds
|
||||
mapAndSortChannelIds,
|
||||
);
|
||||
|
||||
export const getSortedPublicChannelIds: (e: GlobalState, d: Channel | null, c: boolean, b: boolean, a: SortingType) => Array<string> = createIdsSelector(
|
||||
|
|
@ -656,7 +656,7 @@ export const getSortedPublicChannelIds: (e: GlobalState, d: Channel | null, c: b
|
|||
(state: GlobalState, lastUnreadChannel: Channel, unreadsAtTop: boolean, favoritesAtTop: boolean, sorting: SortingType = 'alpha') => getPublicChannelIds(state, lastUnreadChannel, unreadsAtTop, favoritesAtTop, sorting),
|
||||
(state, lastUnreadChannel, unreadsAtTop = true) => unreadsAtTop,
|
||||
(state, lastUnreadChannel, unreadsAtTop, favoritesAtTop = true) => favoritesAtTop,
|
||||
filterChannels
|
||||
filterChannels,
|
||||
);
|
||||
|
||||
// Private Channels
|
||||
|
|
@ -929,7 +929,7 @@ export const getRedirectChannelNameForTeam = (state: GlobalState, teamId: string
|
|||
return General.DEFAULT_CHANNEL;
|
||||
}
|
||||
|
||||
return myFirstChannelForTeam && myFirstChannelForTeam.name || General.DEFAULT_CHANNEL;
|
||||
return myFirstChannelForTeam ? myFirstChannelForTeam.name : General.DEFAULT_CHANNEL;
|
||||
};
|
||||
|
||||
// isManually unread looks into state if the provided channelId is marked as unread by the user.
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ export const getCustomEmojisAsMap: (state: GlobalState) => Map<string, CustomEmo
|
|||
map.set(key, emojis[key]);
|
||||
});
|
||||
return map;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getCustomEmojisByName: (state: GlobalState) => Map<string, CustomEmoji> = createSelector(
|
||||
|
|
@ -34,14 +34,14 @@ export const getCustomEmojisByName: (state: GlobalState) => Map<string, CustomEm
|
|||
});
|
||||
|
||||
return map;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getCustomEmojiIdsSortedByName: (state: GlobalState) => Array<string> = createIdsSelector(
|
||||
(state) => state.entities.emojis.customEmoji,
|
||||
(emojis: IDMappedObjects<CustomEmoji>): Array<string> => {
|
||||
return Object.keys(emojis).sort(
|
||||
(a: string, b: string): number => emojis[a].name.localeCompare(emojis[b].name)
|
||||
(a: string, b: string): number => emojis[a].name.localeCompare(emojis[b].name),
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
|
|
|||
|
|
@ -33,6 +33,6 @@ export function makeGetFilesForPost() {
|
|||
const fileInfos = fileIdsForPost.map((id) => allFiles[id]).filter((id) => Boolean(id));
|
||||
|
||||
return sortFileInfos(fileInfos, locale);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ export const canUploadFilesOnMobile: (a: GlobalState) => boolean = createSelecto
|
|||
// Defaults to true if either setting doesn't exist
|
||||
return config.EnableFileAttachments !== 'false' &&
|
||||
(license.IsLicensed === 'false' || license.Compliance === 'false' || config.EnableMobileFileUpload !== 'false');
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const canDownloadFilesOnMobile: (a: GlobalState) => boolean = createSelector(
|
||||
|
|
@ -54,7 +54,7 @@ export const canDownloadFilesOnMobile: (a: GlobalState) => boolean = createSelec
|
|||
(config: Config, license: any): boolean => {
|
||||
// Defaults to true if the setting doesn't exist
|
||||
return license.IsLicensed === 'false' || license.Compliance === 'false' || config.EnableMobileFileDownload !== 'false';
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getAutolinkedUrlSchemes: (a: GlobalState) => string[] = createSelector(
|
||||
|
|
@ -68,7 +68,7 @@ export const getAutolinkedUrlSchemes: (a: GlobalState) => string[] = createSelec
|
|||
...General.DEFAULT_AUTOLINKED_URL_SCHEMES,
|
||||
...config.CustomUrlSchemes.split(','),
|
||||
];
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getServerVersion = (state: GlobalState): string => {
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ export const getGroupsNotAssociatedToTeam = reselect.createSelector(
|
|||
(state: GlobalState, teamID: string) => getTeamGroupIDSet(state, teamID),
|
||||
(allGroups, teamGroupIDSet) => {
|
||||
return Object.entries(allGroups).filter(([groupID]) => !teamGroupIDSet.has(groupID)).map((entry) => entry[1]);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getGroupsAssociatedToTeam = reselect.createSelector(
|
||||
|
|
@ -72,7 +72,7 @@ export const getGroupsAssociatedToTeam = reselect.createSelector(
|
|||
(state: GlobalState, teamID: string) => getTeamGroupIDSet(state, teamID),
|
||||
(allGroups, teamGroupIDSet) => {
|
||||
return Object.entries(allGroups).filter(([groupID]) => teamGroupIDSet.has(groupID)).map((entry) => entry[1]);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getGroupsNotAssociatedToChannel = reselect.createSelector(
|
||||
|
|
@ -80,7 +80,7 @@ export const getGroupsNotAssociatedToChannel = reselect.createSelector(
|
|||
(state: GlobalState, channelID: string) => getChannelGroupIDSet(state, channelID),
|
||||
(allGroups, channelGroupIDSet) => {
|
||||
return Object.entries(allGroups).filter(([groupID]) => !channelGroupIDSet.has(groupID)).map((entry) => entry[1]);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getGroupsAssociatedToChannel = reselect.createSelector(
|
||||
|
|
@ -88,5 +88,5 @@ export const getGroupsAssociatedToChannel = reselect.createSelector(
|
|||
(state: GlobalState, channelID: string) => getChannelGroupIDSet(state, channelID),
|
||||
(allGroups, channelGroupIDSet) => {
|
||||
return Object.entries(allGroups).filter(([groupID]) => channelGroupIDSet.has(groupID)).map((entry) => entry[1]);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ export const getOutgoingHooksInCurrentTeam = reselect.createSelector(
|
|||
getOutgoingHooks,
|
||||
(teamId, hooks) => {
|
||||
return Object.values(hooks).filter((o) => o.team_id === teamId);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getAllCommands = reselect.createSelector(
|
||||
|
|
@ -45,7 +45,7 @@ export const getAllCommands = reselect.createSelector(
|
|||
...commands,
|
||||
...systemCommands,
|
||||
};
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getAutocompleteCommandsList = reselect.createSelector(
|
||||
|
|
@ -55,5 +55,5 @@ export const getAutocompleteCommandsList = reselect.createSelector(
|
|||
return Object.values(commands).filter((command) => {
|
||||
return command && (!command.team_id || command.team_id === currentTeamId) && command.auto_complete;
|
||||
}).sort((a, b) => a.display_name.localeCompare(b.display_name));
|
||||
}
|
||||
},
|
||||
);
|
||||
|
|
|
|||
|
|
@ -17,6 +17,6 @@ export function makeGetJobsByType(type: JobType): (state: GlobalState) => Array<
|
|||
getJobsByType,
|
||||
(jobsByType) => {
|
||||
return jobsByType[type] || [];
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ export function makeGetPostIdsForThread(): (b: GlobalState, a: $ID<Post>) => Arr
|
|||
thread.sort(comparePosts);
|
||||
|
||||
return thread.map((post) => post.id);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -114,7 +114,7 @@ export function makeGetPostsChunkAroundPost(): (c: GlobalState, b: $ID<Post>, a:
|
|||
}
|
||||
|
||||
return postChunk;
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -141,7 +141,7 @@ export function makeGetPostIdsAroundPost(): (d: GlobalState, c: $ID<Post>, b: $I
|
|||
const maxPostIndex = postsBeforeCount === -1 ? postIds.length : Math.min(index + postsBeforeCount + 1, postIds.length); // Needs the extra 1 to include the focused post
|
||||
|
||||
return postIds.slice(minPostIndex, maxPostIndex);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -265,7 +265,7 @@ export function makeGetPostsInChannel(): (c: GlobalState, b: $ID<Channel>, a: nu
|
|||
}
|
||||
|
||||
return posts;
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -306,7 +306,7 @@ export function makeGetPostsAroundPost(): (c: GlobalState, b: $ID<Post>, a: $ID<
|
|||
}
|
||||
|
||||
return posts;
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -360,7 +360,7 @@ export function makeGetCommentCountForPost(): (b: GlobalState, a: {
|
|||
}
|
||||
});
|
||||
return count;
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -373,7 +373,7 @@ export const getSearchResults: (a: GlobalState) => Array<Post> = createSelector(
|
|||
}
|
||||
|
||||
return postIds.map((id) => posts[id]);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
// Returns the matched text from the search results, if the server has provided them.
|
||||
|
|
@ -396,7 +396,7 @@ export function makeGetMessageInHistoryItem(type: 'post'|'comment'): (a: GlobalS
|
|||
return messages[idx];
|
||||
}
|
||||
return '';
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -410,7 +410,7 @@ export function makeGetPostsForIds(): (b: GlobalState, a: Array<$ID<Post>>) => A
|
|||
}
|
||||
|
||||
return postIds.map((id) => allPosts[id]);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -433,7 +433,7 @@ export const getLastPostPerChannel: (a: GlobalState) => RelationOneToOne<Channel
|
|||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
},
|
||||
);
|
||||
export const getMostRecentPostIdInChannel: (b: GlobalState, a: $ID<Channel>) => $ID<Post> | undefined | null = createSelector(getAllPosts, (state: GlobalState, channelId: string) => getPostIdsInChannel(state, channelId), getMyPreferences, (posts, postIdsInChannel, preferences) => {
|
||||
if (!postIdsInChannel) {
|
||||
|
|
@ -457,7 +457,7 @@ export const getMostRecentPostIdInChannel: (b: GlobalState, a: $ID<Channel>) =>
|
|||
|
||||
// return the most recent message in the channel
|
||||
return postIdsInChannel[0];
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getLatestReplyablePostId: (a: GlobalState) => $ID<Post> = createSelector(
|
||||
|
|
@ -473,7 +473,7 @@ export const getLatestReplyablePostId: (a: GlobalState) => $ID<Post> = createSel
|
|||
}
|
||||
|
||||
return latestReplyablePost.id;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getCurrentUsersLatestPost: (b: GlobalState, a: $ID<Post>) => PostWithFormatData | undefined | null = createSelector(getPostsInCurrentChannel, getCurrentUser, (_: any, rootId: string) => rootId, (posts, currentUser, rootId) => {
|
||||
|
|
@ -483,7 +483,7 @@ export const getCurrentUsersLatestPost: (b: GlobalState, a: $ID<Post>) => PostWi
|
|||
|
||||
const lastPost = posts.find((post) => {
|
||||
// don't edit webhook posts, deleted posts, or system messages
|
||||
if (post.user_id !== currentUser.id || post.props && post.props.from_webhook || post.state === Posts.POST_DELETED || isSystemMessage(post) || isPostEphemeral(post) || isPostPendingOrFailed(post)) {
|
||||
if (post.user_id !== currentUser.id || post.props?.from_webhook || post.state === Posts.POST_DELETED || isSystemMessage(post) || isPostEphemeral(post) || isPostPendingOrFailed(post)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -638,7 +638,7 @@ export const makeIsPostCommentMention = (): ((b: GlobalState, a: $ID<Post>) => b
|
|||
}
|
||||
|
||||
return isCommentMention;
|
||||
}
|
||||
},
|
||||
);
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ export function makeGetCategory() {
|
|||
}
|
||||
|
||||
return prefsInCategory;
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -77,14 +77,14 @@ export const getVisibleTeammate = reselect.createSelector(
|
|||
getDirectShowPreferences,
|
||||
(direct) => {
|
||||
return direct.filter((dm) => dm.value === 'true' && dm.name).map((dm) => dm.name);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getVisibleGroupIds = reselect.createSelector(
|
||||
getGroupShowPreferences,
|
||||
(groups) => {
|
||||
return groups.filter((dm) => dm.value === 'true' && dm.name).map((dm) => dm.name);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getTeammateNameDisplaySetting = reselect.createSelector(
|
||||
|
|
@ -100,7 +100,7 @@ export const getTeammateNameDisplaySetting = reselect.createSelector(
|
|||
return config.TeammateNameDisplay;
|
||||
}
|
||||
return General.TEAMMATE_NAME_DISPLAY.SHOW_USERNAME;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const getThemePreference = reselect.createSelector(
|
||||
|
|
@ -119,7 +119,7 @@ const getThemePreference = reselect.createSelector(
|
|||
}
|
||||
|
||||
return themePreference;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const getDefaultTheme = reselect.createSelector(getConfig, (config) => {
|
||||
|
|
@ -177,7 +177,7 @@ export const getTheme = createShallowSelector(
|
|||
}
|
||||
|
||||
return Object.assign({}, defaultTheme, theme);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export function makeGetStyleFromTheme() {
|
||||
|
|
@ -186,7 +186,7 @@ export function makeGetStyleFromTheme() {
|
|||
(state: GlobalState, getStyleFromTheme: Function) => getStyleFromTheme,
|
||||
(theme, getStyleFromTheme) => {
|
||||
return getStyleFromTheme(theme);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -204,7 +204,7 @@ export const getSidebarPreferences = reselect.createSelector(
|
|||
state,
|
||||
Preferences.CATEGORY_SIDEBAR_SETTINGS,
|
||||
'show_unread_section',
|
||||
config.ExperimentalGroupUnreadChannels === General.DEFAULT_ON
|
||||
config.ExperimentalGroupUnreadChannels === General.DEFAULT_ON,
|
||||
);
|
||||
},
|
||||
(state) => {
|
||||
|
|
@ -212,7 +212,7 @@ export const getSidebarPreferences = reselect.createSelector(
|
|||
state,
|
||||
Preferences.CATEGORY_SIDEBAR_SETTINGS,
|
||||
'',
|
||||
null
|
||||
null,
|
||||
);
|
||||
},
|
||||
(showUnreadSection, sidebarPreference) => {
|
||||
|
|
@ -226,7 +226,7 @@ export const getSidebarPreferences = reselect.createSelector(
|
|||
}
|
||||
|
||||
return sidebarPrefs;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getNewSidebarPreference = reselect.createSelector(
|
||||
|
|
@ -239,7 +239,7 @@ export const getNewSidebarPreference = reselect.createSelector(
|
|||
state,
|
||||
Preferences.CATEGORY_SIDEBAR_SETTINGS,
|
||||
Preferences.CHANNEL_SIDEBAR_ORGANIZATION,
|
||||
null
|
||||
null,
|
||||
);
|
||||
},
|
||||
(globalSetting, userSetting) => {
|
||||
|
|
@ -253,7 +253,7 @@ export const getNewSidebarPreference = reselect.createSelector(
|
|||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export function shouldAutocloseDMs(state: GlobalState) {
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ export const getMyTeamRoles = reselect.createSelector(
|
|||
}
|
||||
}
|
||||
return roles;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getMyChannelRoles = reselect.createSelector(
|
||||
|
|
@ -40,7 +40,7 @@ export const getMyChannelRoles = reselect.createSelector(
|
|||
}
|
||||
}
|
||||
return roles;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getMyRoles = reselect.createSelector(
|
||||
|
|
@ -53,7 +53,7 @@ export const getMyRoles = reselect.createSelector(
|
|||
team: teamRoles,
|
||||
channel: channelRoles,
|
||||
};
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getRolesById = reselect.createSelector(
|
||||
|
|
@ -64,7 +64,7 @@ export const getRolesById = reselect.createSelector(
|
|||
rolesById[role.id] = role;
|
||||
}
|
||||
return rolesById;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getMyCurrentTeamPermissions = reselect.createSelector(
|
||||
|
|
@ -87,7 +87,7 @@ export const getMyCurrentTeamPermissions = reselect.createSelector(
|
|||
permissions.add(permission);
|
||||
}
|
||||
return permissions;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getMyCurrentChannelPermissions = reselect.createSelector(
|
||||
|
|
@ -110,7 +110,7 @@ export const getMyCurrentChannelPermissions = reselect.createSelector(
|
|||
permissions.add(permission);
|
||||
}
|
||||
return permissions;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getMyTeamPermissions = reselect.createSelector(
|
||||
|
|
@ -133,7 +133,7 @@ export const getMyTeamPermissions = reselect.createSelector(
|
|||
permissions.add(permission);
|
||||
}
|
||||
return permissions;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getMyChannelPermissions = reselect.createSelector(
|
||||
|
|
@ -156,7 +156,7 @@ export const getMyChannelPermissions = reselect.createSelector(
|
|||
permissions.add(permission);
|
||||
}
|
||||
return permissions;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const haveISystemPermission = reselect.createSelector(
|
||||
|
|
@ -164,7 +164,7 @@ export const haveISystemPermission = reselect.createSelector(
|
|||
(state: GlobalState, options: PermissionsOptions) => options.permission,
|
||||
(permissions, permission) => {
|
||||
return permissions.has(permission);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const haveITeamPermission = reselect.createSelector(
|
||||
|
|
@ -172,7 +172,7 @@ export const haveITeamPermission = reselect.createSelector(
|
|||
(state, options) => options.permission,
|
||||
(permissions, permission) => {
|
||||
return permissions.has(permission);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const haveIChannelPermission = reselect.createSelector(
|
||||
|
|
@ -180,7 +180,7 @@ export const haveIChannelPermission = reselect.createSelector(
|
|||
(state, options) => options.permission,
|
||||
(permissions, permission) => {
|
||||
return permissions.has(permission);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const haveICurrentTeamPermission = reselect.createSelector(
|
||||
|
|
@ -188,7 +188,7 @@ export const haveICurrentTeamPermission = reselect.createSelector(
|
|||
(state: GlobalState, options: PermissionsOptions) => options.permission,
|
||||
(permissions, permission) => {
|
||||
return permissions.has(permission);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const haveICurrentChannelPermission = reselect.createSelector(
|
||||
|
|
@ -196,5 +196,5 @@ export const haveICurrentChannelPermission = reselect.createSelector(
|
|||
(state: GlobalState, options: PermissionsOptions) => options.permission,
|
||||
(permissions, permission) => {
|
||||
return permissions.has(permission);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
|
|
|||
|
|
@ -12,5 +12,5 @@ export const getCurrentSearchForCurrentTeam = reselect.createSelector(
|
|||
getCurrentTeamId,
|
||||
(current, teamId) => {
|
||||
return current[teamId];
|
||||
}
|
||||
},
|
||||
);
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ export const getTeamsList = reselect.createSelector(
|
|||
getTeams,
|
||||
(teams) => {
|
||||
return Object.values(teams);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getCurrentTeam = reselect.createSelector(
|
||||
|
|
@ -46,7 +46,7 @@ export const getCurrentTeam = reselect.createSelector(
|
|||
getCurrentTeamId,
|
||||
(teams, currentTeamId) => {
|
||||
return teams[currentTeamId];
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export function getTeam(state: GlobalState, id: string): Team {
|
||||
|
|
@ -59,7 +59,7 @@ export const getCurrentTeamMembership = reselect.createSelector(
|
|||
getTeamMemberships,
|
||||
(currentTeamId: string, teamMemberships: {[x: string]: TeamMembership}): TeamMembership => {
|
||||
return teamMemberships[currentTeamId];
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const isCurrentUserCurrentTeamAdmin = reselect.createSelector(
|
||||
|
|
@ -70,7 +70,7 @@ export const isCurrentUserCurrentTeamAdmin = reselect.createSelector(
|
|||
return isTeamAdmin(roles);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getCurrentTeamUrl = reselect.createSelector(
|
||||
|
|
@ -84,7 +84,7 @@ export const getCurrentTeamUrl = reselect.createSelector(
|
|||
}
|
||||
|
||||
return `${rootURL}/${currentTeam.name}`;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getCurrentRelativeTeamUrl = reselect.createSelector(
|
||||
|
|
@ -94,7 +94,7 @@ export const getCurrentRelativeTeamUrl = reselect.createSelector(
|
|||
return '/';
|
||||
}
|
||||
return `/${currentTeam.name}`;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getCurrentTeamStats = reselect.createSelector(
|
||||
|
|
@ -102,7 +102,7 @@ export const getCurrentTeamStats = reselect.createSelector(
|
|||
getTeamStats,
|
||||
(currentTeamId, teamStats) => {
|
||||
return teamStats[currentTeamId];
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getMyTeams = reselect.createSelector(
|
||||
|
|
@ -110,7 +110,7 @@ export const getMyTeams = reselect.createSelector(
|
|||
getTeamMemberships,
|
||||
(teams, members) => {
|
||||
return Object.values(teams).filter((t) => members[t.id] && t.delete_at === 0);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getMyTeamMember = reselect.createSelector(
|
||||
|
|
@ -118,7 +118,7 @@ export const getMyTeamMember = reselect.createSelector(
|
|||
(state: GlobalState, teamId: string) => teamId,
|
||||
(teamMemberships, teamId) => {
|
||||
return teamMemberships[teamId] || {};
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getMembersInCurrentTeam = reselect.createSelector(
|
||||
|
|
@ -126,7 +126,7 @@ export const getMembersInCurrentTeam = reselect.createSelector(
|
|||
getMembersInTeams,
|
||||
(currentTeamId, teamMembers) => {
|
||||
return teamMembers[currentTeamId];
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export function getTeamMember(state: GlobalState, teamId: string, userId: string) {
|
||||
|
|
@ -154,7 +154,7 @@ export const getListableTeamIds = createIdsSelector(
|
|||
}
|
||||
return team.delete_at === 0 && canList && !member;
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getListableTeams = reselect.createSelector(
|
||||
|
|
@ -162,7 +162,7 @@ export const getListableTeams = reselect.createSelector(
|
|||
getListableTeamIds,
|
||||
(teams, listableTeamIds) => {
|
||||
return listableTeamIds.map((id) => teams[id]);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getSortedListableTeams = reselect.createSelector(
|
||||
|
|
@ -177,7 +177,7 @@ export const getSortedListableTeams = reselect.createSelector(
|
|||
}
|
||||
|
||||
return Object.values(listableTeams).sort(sortTeamsWithLocale(locale));
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getJoinableTeamIds = createIdsSelector(
|
||||
|
|
@ -196,7 +196,7 @@ export const getJoinableTeamIds = createIdsSelector(
|
|||
}
|
||||
return team.delete_at === 0 && canJoin && !member;
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getJoinableTeams = reselect.createSelector(
|
||||
|
|
@ -204,7 +204,7 @@ export const getJoinableTeams = reselect.createSelector(
|
|||
getJoinableTeamIds,
|
||||
(teams, joinableTeamIds) => {
|
||||
return joinableTeamIds.map((id) => teams[id]);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getSortedJoinableTeams = reselect.createSelector(
|
||||
|
|
@ -219,7 +219,7 @@ export const getSortedJoinableTeams = reselect.createSelector(
|
|||
}
|
||||
|
||||
return Object.values(joinableTeams).sort(sortTeamsWithLocale(locale));
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getMySortedTeamIds = createIdsSelector(
|
||||
|
|
@ -227,14 +227,14 @@ export const getMySortedTeamIds = createIdsSelector(
|
|||
(state: GlobalState, locale: string) => locale,
|
||||
(teams, locale) => {
|
||||
return teams.sort(sortTeamsWithLocale(locale)).map((t) => t.id);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getMyTeamsCount = reselect.createSelector(
|
||||
getMyTeams,
|
||||
(teams) => {
|
||||
return teams.length;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
// returns the badge number to show (excluding the current team)
|
||||
|
|
@ -262,7 +262,7 @@ export const getChannelDrawerBadgeCount = reselect.createSelector(
|
|||
}
|
||||
|
||||
return badgeCount;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
// returns the badge for a team
|
||||
|
|
@ -286,6 +286,6 @@ export function makeGetBadgeCountForTeamId() {
|
|||
}
|
||||
|
||||
return badgeCount;
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ export const getUsersByUsername: (a: GlobalState) => UsernameMappedObjects<UserP
|
|||
}
|
||||
|
||||
return usersByUsername;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export function getUserByUsername(state: GlobalState, username: $Username<UserProfile>): UserProfile {
|
||||
|
|
@ -82,7 +82,7 @@ export const getUsersByEmail: (a: GlobalState) => EmailMappedObjects<UserProfile
|
|||
}
|
||||
|
||||
return usersByEmail;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export function getUserByEmail(state: GlobalState, email: $Email<UserProfile>): UserProfile {
|
||||
|
|
@ -94,7 +94,7 @@ export const isCurrentUserSystemAdmin: (a: GlobalState) => boolean = createSelec
|
|||
(user) => {
|
||||
const roles = user.roles || '';
|
||||
return isSystemAdmin(roles);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getCurrentUserRoles: (a: GlobalState) => UserProfile['roles'] = createSelector(getMyCurrentChannelMembership, (state) => state.entities.teams.myMembers[state.entities.teams.currentTeamId], getCurrentUser, (currentChannelMembership, currentTeamMembership, currentUser) => {
|
||||
|
|
@ -111,7 +111,7 @@ export const getCurrentUserRoles: (a: GlobalState) => UserProfile['roles'] = cre
|
|||
roles += currentUser.roles;
|
||||
}
|
||||
return roles.trim();
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export type UserMentionKey= {
|
||||
|
|
@ -148,7 +148,7 @@ export const getCurrentUserMentionKeys: (a: GlobalState) => Array<UserMentionKey
|
|||
}
|
||||
|
||||
return keys;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getProfileSetInCurrentChannel: (a: GlobalState) => Array<$ID<UserProfile>> = createSelector(
|
||||
|
|
@ -156,7 +156,7 @@ export const getProfileSetInCurrentChannel: (a: GlobalState) => Array<$ID<UserPr
|
|||
getUserIdsInChannels,
|
||||
(currentChannel, channelProfiles) => {
|
||||
return channelProfiles[currentChannel];
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getProfileSetNotInCurrentChannel: (a: GlobalState) => Array<$ID<UserProfile>> = createSelector(
|
||||
|
|
@ -164,7 +164,7 @@ export const getProfileSetNotInCurrentChannel: (a: GlobalState) => Array<$ID<Use
|
|||
getUserIdsNotInChannels,
|
||||
(currentChannel, channelProfiles) => {
|
||||
return channelProfiles[currentChannel];
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getProfileSetInCurrentTeam: (a: GlobalState) => Array<$ID<UserProfile>> = createSelector(
|
||||
|
|
@ -172,7 +172,7 @@ export const getProfileSetInCurrentTeam: (a: GlobalState) => Array<$ID<UserProfi
|
|||
getUserIdsInTeams,
|
||||
(currentTeam, teamProfiles) => {
|
||||
return teamProfiles[currentTeam];
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getProfileSetNotInCurrentTeam: (a: GlobalState) => Array<$ID<UserProfile>> = createSelector(
|
||||
|
|
@ -180,7 +180,7 @@ export const getProfileSetNotInCurrentTeam: (a: GlobalState) => Array<$ID<UserPr
|
|||
getUserIdsNotInTeams,
|
||||
(currentTeam, teamProfiles) => {
|
||||
return teamProfiles[currentTeam];
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const PROFILE_SET_ALL = 'all';
|
||||
|
|
@ -209,7 +209,7 @@ export const getProfiles: (a: GlobalState, b: Filters) => Array<UserProfile> = c
|
|||
(state: GlobalState, filters: Filters) => filters,
|
||||
(profiles, filters) => {
|
||||
return sortAndInjectProfiles(filterProfiles(profiles, filters), PROFILE_SET_ALL);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
function filterProfiles(profiles: IDMappedObjects<UserProfile>, filters?: Filters): IDMappedObjects<UserProfile> {
|
||||
|
|
@ -242,7 +242,7 @@ export const getProfilesInCurrentChannel: (a: GlobalState) => Array<UserProfile>
|
|||
getProfileSetInCurrentChannel,
|
||||
(profiles, currentChannelProfileSet) => {
|
||||
return sortAndInjectProfiles(profiles, currentChannelProfileSet);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getProfilesNotInCurrentChannel: (a: GlobalState) => Array<UserProfile> = createSelector(
|
||||
|
|
@ -250,7 +250,7 @@ export const getProfilesNotInCurrentChannel: (a: GlobalState) => Array<UserProfi
|
|||
getProfileSetNotInCurrentChannel,
|
||||
(profiles, notInCurrentChannelProfileSet) => {
|
||||
return sortAndInjectProfiles(profiles, notInCurrentChannelProfileSet);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getProfilesInCurrentTeam: (a: GlobalState) => Array<UserProfile> = createSelector(
|
||||
|
|
@ -258,7 +258,7 @@ export const getProfilesInCurrentTeam: (a: GlobalState) => Array<UserProfile> =
|
|||
getProfileSetInCurrentTeam,
|
||||
(profiles, currentTeamProfileSet) => {
|
||||
return sortAndInjectProfiles(profiles, currentTeamProfileSet);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getProfilesInTeam: (a: GlobalState, b: $ID<Team>) => Array<UserProfile> = createSelector(
|
||||
|
|
@ -268,7 +268,7 @@ export const getProfilesInTeam: (a: GlobalState, b: $ID<Team>) => Array<UserProf
|
|||
(state: GlobalState, teamId, filters) => filters,
|
||||
(profiles, usersInTeams, teamId, filters) => {
|
||||
return sortAndInjectProfiles(filterProfiles(profiles, filters), usersInTeams[teamId] || new Set());
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getProfilesNotInCurrentTeam: (a: GlobalState) => Array<UserProfile> = createSelector(
|
||||
|
|
@ -276,7 +276,7 @@ export const getProfilesNotInCurrentTeam: (a: GlobalState) => Array<UserProfile>
|
|||
getProfileSetNotInCurrentTeam,
|
||||
(profiles, notInCurrentTeamProfileSet) => {
|
||||
return sortAndInjectProfiles(profiles, notInCurrentTeamProfileSet);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getProfilesWithoutTeam: (a: GlobalState, filters?: Filters) => Array<UserProfile> = createSelector(
|
||||
|
|
@ -285,7 +285,7 @@ export const getProfilesWithoutTeam: (a: GlobalState, filters?: Filters) => Arra
|
|||
(state: GlobalState, filters: Filters) => filters,
|
||||
(profiles, withoutTeamProfileSet, filters) => {
|
||||
return sortAndInjectProfiles(filterProfiles(profiles, filters), withoutTeamProfileSet);
|
||||
}
|
||||
},
|
||||
);
|
||||
export function getStatusForUserId(state: GlobalState, userId: $ID<UserProfile>): string {
|
||||
return getUserStatuses(state)[userId];
|
||||
|
|
@ -385,7 +385,7 @@ export const shouldShowTermsOfService: (a: GlobalState) => boolean = createSelec
|
|||
const reacceptanceTime = parseInt(config.CustomTermsOfServiceReAcceptancePeriod!, 10) * 1000 * 60 * 60 * 24;
|
||||
const timeElapsed = new Date().getTime() - acceptedAt;
|
||||
return Boolean(user && featureEnabled && (config.CustomTermsOfServiceId !== acceptedTermsId || timeElapsed > reacceptanceTime));
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export const getUsersInVisibleDMs: (a: GlobalState) => Array<UserProfile> = createSelector(
|
||||
|
|
@ -399,7 +399,7 @@ export const getUsersInVisibleDMs: (a: GlobalState) => Array<UserProfile> = crea
|
|||
}
|
||||
});
|
||||
return dmUsers;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
export function makeGetProfilesForReactions(): (a: GlobalState, b: Array<Reaction>) => Array<UserProfile> {
|
||||
|
|
@ -414,7 +414,7 @@ export function makeGetProfilesForReactions(): (a: GlobalState, b: Array<Reactio
|
|||
}
|
||||
});
|
||||
return profiles;
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -432,7 +432,7 @@ export function makeGetProfilesInChannel(): (a: GlobalState, b: $ID<Channel>, c:
|
|||
}
|
||||
|
||||
return sortAndInjectProfiles(users, userIdsInChannel, skipInactive);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -450,7 +450,7 @@ export function makeGetProfilesNotInChannel(): (a: GlobalState, b: $ID<Channel>,
|
|||
}
|
||||
|
||||
return sortAndInjectProfiles(users, userIdsInChannel, skipInactive);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -484,7 +484,7 @@ export function makeGetProfilesByIdsAndUsernames(): (a: GlobalState, b: {allUser
|
|||
}
|
||||
|
||||
return userProfiles;
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -495,6 +495,6 @@ export function makeGetDisplayName(): (a: GlobalState, b: $ID<UserProfile>, c: b
|
|||
(state, _, useFallbackUsername = true) => useFallbackUsername,
|
||||
(user, teammateNameDisplaySetting, useFallbackUsername) => {
|
||||
return displayUsername(user, teammateNameDisplaySetting!, useFallbackUsername);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ function throwOnImmutableMutation(key: string, value: any) {
|
|||
throw Error(
|
||||
'You attempted to set the key `' + key + '` with the value `' +
|
||||
JSON.stringify(value) + '` on an object that is meant to be immutable ' +
|
||||
'and has been frozen.'
|
||||
'and has been frozen.',
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -77,22 +77,22 @@ export function blendColors(background: string, foreground: string, opacity: num
|
|||
const red = Math.floor(blendComponent(
|
||||
backgroundComponents.red,
|
||||
foregroundComponents.red,
|
||||
opacity
|
||||
opacity,
|
||||
));
|
||||
const green = Math.floor(blendComponent(
|
||||
backgroundComponents.green,
|
||||
foregroundComponents.green,
|
||||
opacity
|
||||
opacity,
|
||||
));
|
||||
const blue = Math.floor(blendComponent(
|
||||
backgroundComponents.blue,
|
||||
foregroundComponents.blue,
|
||||
opacity
|
||||
opacity,
|
||||
));
|
||||
const alpha = blendComponent(
|
||||
backgroundComponents.alpha,
|
||||
foregroundComponents.alpha,
|
||||
opacity
|
||||
opacity,
|
||||
);
|
||||
|
||||
return `rgba(${red},${green},${blue},${alpha})`;
|
||||
|
|
|
|||
|
|
@ -1,12 +1,11 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`ChannelDrawerButton should match, full snapshot 1`] = `
|
||||
<TouchableOpacity
|
||||
<Component
|
||||
accessibilityHint="Opens the channels and teams drawer"
|
||||
accessibilityLabel="Channels and teams"
|
||||
accessibilityRole="button"
|
||||
accessible={true}
|
||||
activeOpacity={0.2}
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -37,16 +36,15 @@ exports[`ChannelDrawerButton should match, full snapshot 1`] = `
|
|||
/>
|
||||
</View>
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
`;
|
||||
|
||||
exports[`ChannelDrawerButton should match, full snapshot 2`] = `
|
||||
<TouchableOpacity
|
||||
<Component
|
||||
accessibilityHint="Opens the channels and teams drawer"
|
||||
accessibilityLabel="Channels and teams"
|
||||
accessibilityRole="button"
|
||||
accessible={true}
|
||||
activeOpacity={0.2}
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -106,5 +104,5 @@ exports[`ChannelDrawerButton should match, full snapshot 2`] = `
|
|||
/>
|
||||
</View>
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
`;
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`ChannelTitle should match snapshot 1`] = `
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
style={
|
||||
Object {
|
||||
"flex": 1,
|
||||
|
|
@ -48,12 +47,11 @@ exports[`ChannelTitle should match snapshot 1`] = `
|
|||
}
|
||||
/>
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
`;
|
||||
|
||||
exports[`ChannelTitle should match snapshot when is DM and has guests and the teammate is the guest (when can show subtitles) 1`] = `
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
style={
|
||||
Object {
|
||||
"flex": 1,
|
||||
|
|
@ -124,12 +122,11 @@ exports[`ChannelTitle should match snapshot when is DM and has guests and the te
|
|||
}
|
||||
/>
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
`;
|
||||
|
||||
exports[`ChannelTitle should match snapshot when is DM and has guests but the teammate is not the guest (when can show subtitles) 1`] = `
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
style={
|
||||
Object {
|
||||
"flex": 1,
|
||||
|
|
@ -175,12 +172,11 @@ exports[`ChannelTitle should match snapshot when is DM and has guests but the te
|
|||
}
|
||||
/>
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
`;
|
||||
|
||||
exports[`ChannelTitle should match snapshot when isSelfDMChannel is true 1`] = `
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
style={
|
||||
Object {
|
||||
"flex": 1,
|
||||
|
|
@ -234,5 +230,5 @@ exports[`ChannelTitle should match snapshot when isSelfDMChannel is true 1`] = `
|
|||
}
|
||||
/>
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
`;
|
||||
|
|
|
|||
|
|
@ -92,11 +92,8 @@ exports[`channel_info_header should match snapshot 1`] = `
|
|||
]
|
||||
}
|
||||
>
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onLongPress={[Function]}
|
||||
underlayColor="black"
|
||||
>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -129,7 +126,7 @@ exports[`channel_info_header should match snapshot 1`] = `
|
|||
Purpose string
|
||||
</Text>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -141,11 +138,8 @@ exports[`channel_info_header should match snapshot 1`] = `
|
|||
]
|
||||
}
|
||||
>
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onLongPress={[Function]}
|
||||
underlayColor="black"
|
||||
>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -281,7 +275,7 @@ exports[`channel_info_header should match snapshot 1`] = `
|
|||
value="Header string"
|
||||
/>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
</View>
|
||||
<Text
|
||||
style={
|
||||
|
|
@ -437,11 +431,8 @@ exports[`channel_info_header should match snapshot when DM and hasGuests and is
|
|||
]
|
||||
}
|
||||
>
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onLongPress={[Function]}
|
||||
underlayColor="black"
|
||||
>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -474,7 +465,7 @@ exports[`channel_info_header should match snapshot when DM and hasGuests and is
|
|||
Purpose string
|
||||
</Text>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -486,11 +477,8 @@ exports[`channel_info_header should match snapshot when DM and hasGuests and is
|
|||
]
|
||||
}
|
||||
>
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onLongPress={[Function]}
|
||||
underlayColor="black"
|
||||
>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -626,7 +614,7 @@ exports[`channel_info_header should match snapshot when DM and hasGuests and is
|
|||
value="Header string"
|
||||
/>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
</View>
|
||||
<Text
|
||||
style={
|
||||
|
|
@ -754,11 +742,8 @@ exports[`channel_info_header should match snapshot when DM and hasGuests but its
|
|||
]
|
||||
}
|
||||
>
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onLongPress={[Function]}
|
||||
underlayColor="black"
|
||||
>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -791,7 +776,7 @@ exports[`channel_info_header should match snapshot when DM and hasGuests but its
|
|||
Purpose string
|
||||
</Text>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -803,11 +788,8 @@ exports[`channel_info_header should match snapshot when DM and hasGuests but its
|
|||
]
|
||||
}
|
||||
>
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onLongPress={[Function]}
|
||||
underlayColor="black"
|
||||
>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -943,7 +925,7 @@ exports[`channel_info_header should match snapshot when DM and hasGuests but its
|
|||
value="Header string"
|
||||
/>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
</View>
|
||||
<Text
|
||||
style={
|
||||
|
|
@ -1099,11 +1081,8 @@ exports[`channel_info_header should match snapshot when GM and hasGuests 1`] = `
|
|||
]
|
||||
}
|
||||
>
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onLongPress={[Function]}
|
||||
underlayColor="black"
|
||||
>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -1136,7 +1115,7 @@ exports[`channel_info_header should match snapshot when GM and hasGuests 1`] = `
|
|||
Purpose string
|
||||
</Text>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -1148,11 +1127,8 @@ exports[`channel_info_header should match snapshot when GM and hasGuests 1`] = `
|
|||
]
|
||||
}
|
||||
>
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onLongPress={[Function]}
|
||||
underlayColor="black"
|
||||
>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -1288,7 +1264,7 @@ exports[`channel_info_header should match snapshot when GM and hasGuests 1`] = `
|
|||
value="Header string"
|
||||
/>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
</View>
|
||||
<Text
|
||||
style={
|
||||
|
|
@ -1416,11 +1392,8 @@ exports[`channel_info_header should match snapshot when is group constrained 1`]
|
|||
]
|
||||
}
|
||||
>
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onLongPress={[Function]}
|
||||
underlayColor="black"
|
||||
>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -1453,7 +1426,7 @@ exports[`channel_info_header should match snapshot when is group constrained 1`]
|
|||
Purpose string
|
||||
</Text>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -1465,11 +1438,8 @@ exports[`channel_info_header should match snapshot when is group constrained 1`]
|
|||
]
|
||||
}
|
||||
>
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onLongPress={[Function]}
|
||||
underlayColor="black"
|
||||
>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -1605,7 +1575,7 @@ exports[`channel_info_header should match snapshot when is group constrained 1`]
|
|||
value="Header string"
|
||||
/>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
</View>
|
||||
<Text
|
||||
style={
|
||||
|
|
@ -1783,11 +1753,8 @@ exports[`channel_info_header should match snapshot when public channel and hasGu
|
|||
]
|
||||
}
|
||||
>
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onLongPress={[Function]}
|
||||
underlayColor="black"
|
||||
>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -1820,7 +1787,7 @@ exports[`channel_info_header should match snapshot when public channel and hasGu
|
|||
Purpose string
|
||||
</Text>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -1832,11 +1799,8 @@ exports[`channel_info_header should match snapshot when public channel and hasGu
|
|||
]
|
||||
}
|
||||
>
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onLongPress={[Function]}
|
||||
underlayColor="black"
|
||||
>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -1972,7 +1936,7 @@ exports[`channel_info_header should match snapshot when public channel and hasGu
|
|||
value="Header string"
|
||||
/>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
</View>
|
||||
<Text
|
||||
style={
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`ImagePreview should match snapshot 1`] = `
|
||||
<AnimatedComponent
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
|
|
@ -14,7 +14,7 @@ exports[`ImagePreview should match snapshot 1`] = `
|
|||
]
|
||||
}
|
||||
>
|
||||
<AnimatedComponent
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Object {
|
||||
"backgroundColor": "#000",
|
||||
|
|
@ -57,7 +57,7 @@ exports[`ImagePreview should match snapshot 1`] = `
|
|||
}
|
||||
}
|
||||
/>
|
||||
<AnimatedComponent
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
|
|
@ -94,8 +94,7 @@ exports[`ImagePreview should match snapshot 1`] = `
|
|||
}
|
||||
}
|
||||
>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -112,7 +111,7 @@ exports[`ImagePreview should match snapshot 1`] = `
|
|||
name="md-close"
|
||||
size={26}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
<Text
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -126,8 +125,7 @@ exports[`ImagePreview should match snapshot 1`] = `
|
|||
>
|
||||
1/2
|
||||
</Text>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -144,11 +142,11 @@ exports[`ImagePreview should match snapshot 1`] = `
|
|||
name="ios-download"
|
||||
size={26}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
</View>
|
||||
</View>
|
||||
</AnimatedComponent>
|
||||
<AnimatedComponent
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
|
|
@ -210,8 +208,8 @@ exports[`ImagePreview should match snapshot 1`] = `
|
|||
Caption 1
|
||||
</Text>
|
||||
</LinearGradient>
|
||||
</AnimatedComponent>
|
||||
</AnimatedComponent>
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
<Downloader
|
||||
deviceHeight={400}
|
||||
deviceWidth={300}
|
||||
|
|
@ -231,14 +229,13 @@ exports[`ImagePreview should match snapshot 1`] = `
|
|||
saveToCameraRoll={true}
|
||||
show={false}
|
||||
/>
|
||||
</AnimatedComponent>
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
`;
|
||||
|
||||
exports[`ImagePreview should match snapshot and not renderDownloadButton for local files 1`] = `null`;
|
||||
|
||||
exports[`ImagePreview should match snapshot, renderDownloadButton 1`] = `
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -255,5 +252,5 @@ exports[`ImagePreview should match snapshot, renderDownloadButton 1`] = `
|
|||
name="ios-download"
|
||||
size={26}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
`;
|
||||
|
|
|
|||
|
|
@ -55,6 +55,11 @@ export default class Login extends PureComponent {
|
|||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.loginRef = React.createRef();
|
||||
this.passwordRef = React.createRef();
|
||||
this.loginId = '';
|
||||
this.password = '';
|
||||
|
||||
this.state = {
|
||||
error: null,
|
||||
isLoading: false,
|
||||
|
|
@ -86,15 +91,21 @@ export default class Login extends PureComponent {
|
|||
const {intl} = this.context;
|
||||
const screen = 'MFA';
|
||||
const title = intl.formatMessage({id: 'mobile.routes.mfa', defaultMessage: 'Multi-factor Authentication'});
|
||||
const loginId = this.loginId?._lastNativeText; //eslint-disable-line no-underscore-dangle
|
||||
const password = this.passwd?._lastNativeText; //eslint-disable-line no-underscore-dangle
|
||||
const loginId = this.loginId;
|
||||
const password = this.password;
|
||||
|
||||
goToScreen(screen, title, {onMfaComplete: this.checkLoginResponse, loginId, password});
|
||||
};
|
||||
|
||||
blur = () => {
|
||||
this.loginId.blur();
|
||||
this.passwd.blur();
|
||||
if (this.loginRef.current) {
|
||||
this.loginRef.current.blur();
|
||||
}
|
||||
|
||||
if (this.passwordRef.current) {
|
||||
this.passwordRef.current.blur();
|
||||
}
|
||||
|
||||
Keyboard.dismiss();
|
||||
};
|
||||
|
||||
|
|
@ -201,28 +212,29 @@ export default class Login extends PureComponent {
|
|||
return error.message;
|
||||
};
|
||||
|
||||
loginRef = (ref) => {
|
||||
this.loginId = ref;
|
||||
handleLoginChange = (text) => {
|
||||
this.loginId = text;
|
||||
};
|
||||
|
||||
handlePasswordChange = (text) => {
|
||||
this.password = text;
|
||||
};
|
||||
|
||||
orientationDidChange = () => {
|
||||
this.scroll.scrollToPosition(0, 0, true);
|
||||
};
|
||||
|
||||
passwordRef = (ref) => {
|
||||
this.passwd = ref;
|
||||
};
|
||||
|
||||
passwordFocus = () => {
|
||||
this.passwd.focus();
|
||||
if (this.passwordRef.current) {
|
||||
this.passwordRef.current.focus();
|
||||
}
|
||||
};
|
||||
|
||||
preSignIn = preventDoubleTap(() => {
|
||||
this.setState({error: null, isLoading: true});
|
||||
Keyboard.dismiss();
|
||||
InteractionManager.runAfterInteractions(async () => {
|
||||
const loginId = this.loginId?._lastNativeText; //eslint-disable-line no-underscore-dangle
|
||||
if (!loginId) {
|
||||
if (!this.loginId) {
|
||||
t('login.noEmail');
|
||||
t('login.noEmailLdapUsername');
|
||||
t('login.noEmailUsername');
|
||||
|
|
@ -262,8 +274,7 @@ export default class Login extends PureComponent {
|
|||
return;
|
||||
}
|
||||
|
||||
const password = this.passwd?._lastNativeText; //eslint-disable-line no-underscore-dangle
|
||||
if (!password) {
|
||||
if (!this.password) {
|
||||
this.setState({
|
||||
isLoading: false,
|
||||
error: {
|
||||
|
|
@ -293,18 +304,16 @@ export default class Login extends PureComponent {
|
|||
|
||||
setEmmUsernameIfAvailable = async () => {
|
||||
const managedConfig = await mattermostManaged.getConfig();
|
||||
if (managedConfig?.username && this.loginId) {
|
||||
this.loginId.setNativeProps({text: 'sample'});
|
||||
if (managedConfig?.username && this.loginRef.current) {
|
||||
this.loginRef.current.setNativeProps({text: managedConfig?.username});
|
||||
}
|
||||
}
|
||||
|
||||
signIn = () => {
|
||||
const loginId = this.loginId?._lastNativeText; //eslint-disable-line no-underscore-dangle
|
||||
const password = this.passwd?._lastNativeText; //eslint-disable-line no-underscore-dangle
|
||||
const {actions} = this.props;
|
||||
const {isLoading} = this.state;
|
||||
if (isLoading) {
|
||||
actions.login(loginId.toLowerCase(), password).
|
||||
actions.login(this.loginId.toLowerCase(), this.password).
|
||||
then(this.checkLoginResponse);
|
||||
}
|
||||
};
|
||||
|
|
@ -393,31 +402,33 @@ export default class Login extends PureComponent {
|
|||
</View>
|
||||
<ErrorText error={this.state.error}/>
|
||||
<TextInput
|
||||
ref={this.loginRef}
|
||||
style={GlobalStyles.inputBox}
|
||||
placeholder={this.createLoginPlaceholder()}
|
||||
placeholderTextColor={changeOpacity('#000', 0.5)}
|
||||
autoCorrect={false}
|
||||
autoCapitalize='none'
|
||||
keyboardType='email-address'
|
||||
returnKeyType='next'
|
||||
underlineColorAndroid='transparent'
|
||||
onSubmitEditing={this.passwordFocus}
|
||||
autoCorrect={false}
|
||||
blurOnSubmit={false}
|
||||
disableFullscreenUI={true}
|
||||
keyboardType='email-address'
|
||||
onChangeText={this.handleLoginChange}
|
||||
onSubmitEditing={this.passwordFocus}
|
||||
placeholder={this.createLoginPlaceholder()}
|
||||
placeholderTextColor={changeOpacity('#000', 0.5)}
|
||||
ref={this.loginRef}
|
||||
returnKeyType='next'
|
||||
style={GlobalStyles.inputBox}
|
||||
underlineColorAndroid='transparent'
|
||||
/>
|
||||
<TextInput
|
||||
ref={this.passwordRef}
|
||||
autoCapitalize='none'
|
||||
autoCorrect={false}
|
||||
disableFullscreenUI={true}
|
||||
onChangeText={this.handlePasswordChange}
|
||||
onSubmitEditing={this.preSignIn}
|
||||
style={GlobalStyles.inputBox}
|
||||
placeholder={this.context.intl.formatMessage({id: 'login.password', defaultMessage: 'Password'})}
|
||||
placeholderTextColor={changeOpacity('#000', 0.5)}
|
||||
secureTextEntry={true}
|
||||
autoCorrect={false}
|
||||
autoCapitalize='none'
|
||||
underlineColorAndroid='transparent'
|
||||
ref={this.passwordRef}
|
||||
returnKeyType='go'
|
||||
onSubmitEditing={this.preSignIn}
|
||||
disableFullscreenUI={true}
|
||||
secureTextEntry={true}
|
||||
underlineColorAndroid='transparent'
|
||||
/>
|
||||
{proceed}
|
||||
{forgotPassword}
|
||||
|
|
|
|||
|
|
@ -83,13 +83,21 @@ describe('Login', () => {
|
|||
};
|
||||
|
||||
const wrapper = shallowWithIntl(<Login {...baseProps}/>);
|
||||
const loginId = 'user';
|
||||
const password = 'password';
|
||||
wrapper.instance().loginId = loginId;
|
||||
wrapper.instance().password = password;
|
||||
wrapper.instance().checkLoginResponse(mfaError);
|
||||
|
||||
expect(goToScreen).
|
||||
toHaveBeenCalledWith(
|
||||
'MFA',
|
||||
'Multi-factor Authentication',
|
||||
{onMfaComplete: wrapper.instance().checkLoginResponse},
|
||||
{
|
||||
onMfaComplete: wrapper.instance().checkLoginResponse,
|
||||
loginId,
|
||||
password,
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -271,8 +271,7 @@ LongPost {
|
|||
}
|
||||
}
|
||||
>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -289,7 +288,7 @@ LongPost {
|
|||
name="close"
|
||||
size={20}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
<View
|
||||
style={
|
||||
Object {
|
||||
|
|
|
|||
|
|
@ -138,6 +138,11 @@ export default class MoreDirectMessages extends PureComponent {
|
|||
handleSelectProfile = (id) => {
|
||||
const {currentUserId} = this.props;
|
||||
|
||||
if (this.state.selectedIds[id]) {
|
||||
this.handleRemoveProfile(id);
|
||||
return;
|
||||
}
|
||||
|
||||
if (id === currentUserId) {
|
||||
const selectedId = {};
|
||||
selectedId[currentUserId] = true;
|
||||
|
|
@ -471,13 +476,13 @@ export default class MoreDirectMessages extends PureComponent {
|
|||
keyboardAppearance={getKeyboardAppearanceFromTheme(theme)}
|
||||
value={term}
|
||||
/>
|
||||
<SelectedUsers
|
||||
selectedIds={this.state.selectedIds}
|
||||
warnCount={5}
|
||||
maxCount={7}
|
||||
onRemove={this.handleRemoveProfile}
|
||||
/>
|
||||
</View>
|
||||
<SelectedUsers
|
||||
selectedIds={this.state.selectedIds}
|
||||
warnCount={5}
|
||||
maxCount={7}
|
||||
onRemove={this.handleRemoveProfile}
|
||||
/>
|
||||
<CustomList
|
||||
data={data}
|
||||
extraData={selectedIds}
|
||||
|
|
|
|||
|
|
@ -73,9 +73,8 @@ const getStyleFromTheme = makeStyleSheetFromTheme((theme) => {
|
|||
height: 27,
|
||||
borderRadius: 3,
|
||||
backgroundColor: changeOpacity(theme.centerChannelColor, 0.2),
|
||||
marginBottom: 2,
|
||||
marginBottom: 4,
|
||||
marginRight: 10,
|
||||
marginTop: 10,
|
||||
paddingLeft: 10,
|
||||
},
|
||||
remove: {
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@ exports[`OptionModalList should match snapshot for Android 1`] = `
|
|||
}
|
||||
}
|
||||
>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -65,7 +64,7 @@ exports[`OptionModalList should match snapshot for Android 1`] = `
|
|||
}
|
||||
}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -75,8 +74,7 @@ exports[`OptionModalList should match snapshot for Android 1`] = `
|
|||
}
|
||||
}
|
||||
>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -112,10 +110,9 @@ exports[`OptionModalList should match snapshot for Android 1`] = `
|
|||
}
|
||||
}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
</View>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -138,7 +135,7 @@ exports[`OptionModalList should match snapshot for Android 1`] = `
|
|||
}
|
||||
}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
</View>
|
||||
</View>
|
||||
`;
|
||||
|
|
@ -206,8 +203,7 @@ exports[`OptionModalList should match snapshot for iOS 1`] = `
|
|||
]
|
||||
}
|
||||
>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -244,7 +240,7 @@ exports[`OptionModalList should match snapshot for iOS 1`] = `
|
|||
}
|
||||
}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -253,8 +249,7 @@ exports[`OptionModalList should match snapshot for iOS 1`] = `
|
|||
]
|
||||
}
|
||||
>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -291,7 +286,7 @@ exports[`OptionModalList should match snapshot for iOS 1`] = `
|
|||
}
|
||||
}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
</View>
|
||||
</View>
|
||||
<View
|
||||
|
|
@ -305,8 +300,7 @@ exports[`OptionModalList should match snapshot for iOS 1`] = `
|
|||
}
|
||||
}
|
||||
>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -330,7 +324,7 @@ exports[`OptionModalList should match snapshot for iOS 1`] = `
|
|||
}
|
||||
}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
</View>
|
||||
</View>
|
||||
`;
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ export default class OptionsModal extends PureComponent {
|
|||
Animated.timing(this.state.top, {
|
||||
toValue: 0,
|
||||
duration: DURATION,
|
||||
useNativeDriver: false,
|
||||
}).start();
|
||||
}
|
||||
|
||||
|
|
@ -68,6 +69,7 @@ export default class OptionsModal extends PureComponent {
|
|||
Animated.timing(this.state.top, {
|
||||
toValue: this.props.deviceHeight,
|
||||
duration: DURATION,
|
||||
useNativeDriver: false,
|
||||
}).start(() => {
|
||||
dismissModal();
|
||||
});
|
||||
|
|
|
|||
|
|
@ -53,8 +53,7 @@ exports[`Permalink should match snapshot 1`] = `
|
|||
}
|
||||
}
|
||||
>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -71,7 +70,7 @@ exports[`Permalink should match snapshot 1`] = `
|
|||
name="close"
|
||||
size={20}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
<View
|
||||
style={
|
||||
Object {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
exports[`ReactionHeader should match snapshot 1`] = `
|
||||
<NativeViewGestureHandler>
|
||||
<AnimatedComponent
|
||||
<ForwardRef(AnimatedComponentWrapper)
|
||||
style={
|
||||
Object {
|
||||
"backgroundColor": "#ffffff",
|
||||
|
|
@ -90,7 +90,7 @@ exports[`ReactionHeader should match snapshot 1`] = `
|
|||
}
|
||||
/>
|
||||
</ScrollView>
|
||||
</AnimatedComponent>
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
</NativeViewGestureHandler>
|
||||
`;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`ReactionHeaderItem should match snapshot 1`] = `
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Array [
|
||||
|
|
@ -42,7 +41,7 @@ exports[`ReactionHeaderItem should match snapshot 1`] = `
|
|||
3
|
||||
</Text>
|
||||
</React.Fragment>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
`;
|
||||
|
||||
exports[`ReactionHeaderItem should match snapshot, renderContent 1`] = `
|
||||
|
|
|
|||
|
|
@ -23,8 +23,7 @@ exports[`ReactionRow should match snapshot, renderContent 1`] = `
|
|||
]
|
||||
}
|
||||
>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
>
|
||||
<View
|
||||
|
|
@ -40,7 +39,7 @@ exports[`ReactionRow should match snapshot, renderContent 1`] = `
|
|||
userId="user_id"
|
||||
/>
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
</View>
|
||||
<Text
|
||||
ellipsizeMode="tail"
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`Search RecentItem should match snapshot and respond to events 1`] = `
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
underlayColor="rgba(69,120,191,0.5)"
|
||||
>
|
||||
|
|
@ -81,5 +79,5 @@ exports[`Search RecentItem should match snapshot and respond to events 1`] = `
|
|||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</Component>
|
||||
`;
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`Search RecentItem should match snapshot and respond to events 1`] = `
|
||||
<TouchableHighlight
|
||||
activeOpacity={0.85}
|
||||
delayPressOut={100}
|
||||
<ForwardRef
|
||||
key="test"
|
||||
onPress={[Function]}
|
||||
underlayColor="rgba(69,120,191,0.5)"
|
||||
>
|
||||
|
|
@ -33,8 +32,7 @@ exports[`Search RecentItem should match snapshot and respond to events 1`] = `
|
|||
>
|
||||
test
|
||||
</Text>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -51,7 +49,7 @@ exports[`Search RecentItem should match snapshot and respond to events 1`] = `
|
|||
name="ios-close-circle-outline"
|
||||
size={20}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
</TouchableHighlight>
|
||||
</ForwardRef>
|
||||
`;
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ describe('Search RecentItem', () => {
|
|||
);
|
||||
|
||||
expect(wrapper.getElement()).toMatchSnapshot();
|
||||
wrapper.find('TouchableHighlight').first().props().onPress();
|
||||
wrapper.find('ForwardRef').first().props().onPress();
|
||||
expect(baseProps.setModifierValue).toHaveBeenCalledTimes(1);
|
||||
expect(baseProps.setModifierValue).toHaveBeenCalledWith(item.value);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -25,11 +25,11 @@ describe('Search RecentItem', () => {
|
|||
<RecentItem {...baseProps}/>,
|
||||
);
|
||||
|
||||
expect(wrapper.getElement()).toMatchSnapshot();
|
||||
wrapper.find('TouchableHighlight').first().props().onPress();
|
||||
expect(wrapper).toMatchSnapshot();
|
||||
wrapper.find('ForwardRef').first().props().onPress();
|
||||
expect(baseProps.setRecentValue).toHaveBeenCalledTimes(1);
|
||||
expect(baseProps.setRecentValue).toHaveBeenCalledWith(item);
|
||||
wrapper.find('TouchableOpacity').first().props().onPress();
|
||||
wrapper.find('ForwardRef').at(1).props().onPress();
|
||||
expect(baseProps.setRecentValue).toHaveBeenCalledTimes(1);
|
||||
expect(baseProps.setRecentValue).toHaveBeenCalledWith(item);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
/* eslint-disable no-underscore-dangle */
|
||||
|
||||
import React, {PureComponent} from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import {intlShape} from 'react-intl';
|
||||
|
|
@ -141,7 +143,7 @@ export default class Search extends PureComponent {
|
|||
|
||||
Keyboard.dismiss();
|
||||
if (this.listRef?._wrapperListRef) {
|
||||
this.listRef._wrapperListRef.getListRef().scrollToOffset({ //eslint-disable-line no-underscore-dangle
|
||||
this.listRef._wrapperListRef.getListRef().scrollToOffset({
|
||||
animated: true,
|
||||
offset,
|
||||
});
|
||||
|
|
@ -483,7 +485,7 @@ export default class Search extends PureComponent {
|
|||
|
||||
scrollToTop = () => {
|
||||
if (this.listRef?._wrapperListRef) {
|
||||
this.listRef._wrapperListRef.getListRef().scrollToOffset({ //eslint-disable-line no-underscore-dangle
|
||||
this.listRef._wrapperListRef.getListRef().scrollToOffset({
|
||||
animated: false,
|
||||
offset: 0,
|
||||
});
|
||||
|
|
|
|||
|
|
@ -105,8 +105,7 @@ exports[`NotificationSettingsEmailAndroid should match snapshot 2`] = `
|
|||
<View
|
||||
style={Object {}}
|
||||
>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
style={Object {}}
|
||||
>
|
||||
|
|
@ -115,7 +114,7 @@ exports[`NotificationSettingsEmailAndroid should match snapshot 2`] = `
|
|||
id="mobile.notification_settings.modal_cancel"
|
||||
style={Object {}}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
<View>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -124,8 +123,7 @@ exports[`NotificationSettingsEmailAndroid should match snapshot 2`] = `
|
|||
}
|
||||
}
|
||||
/>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.2}
|
||||
<Component
|
||||
onPress={[Function]}
|
||||
style={Object {}}
|
||||
>
|
||||
|
|
@ -134,7 +132,7 @@ exports[`NotificationSettingsEmailAndroid should match snapshot 2`] = `
|
|||
id="mobile.notification_settings.modal_save"
|
||||
style={Object {}}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
</Component>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@
|
|||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
00E356F31AD99517003FC87E /* MattermostTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* MattermostTests.m */; };
|
||||
0111A42B7F264BCF8CBDE3ED /* OpenSans-ExtraBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FBBEC29EE2D3418D9AC33BD5 /* OpenSans-ExtraBoldItalic.ttf */; };
|
||||
0C0D24F53F254F75869E5951 /* OpenSans-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 41F3AFE83AAF4B74878AB78A /* OpenSans-Italic.ttf */; };
|
||||
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
|
||||
|
|
@ -61,7 +60,6 @@
|
|||
A08D512E7ADC40CCAD055A9E /* OpenSans-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BC977883E2624E05975CA65B /* OpenSans-Regular.ttf */; };
|
||||
AA9605CFDA8E4E7CB8A041BF /* Roboto-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C5BD64DE829E455A997DCAD5 /* Roboto-Regular.ttf */; };
|
||||
ABF5F93B1D0A47BAACEAC376 /* Roboto-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 34B20A903038487E8D7DEA1E /* Roboto-Light.ttf */; };
|
||||
B9899621C7F80C4B5C51BB8B /* libPods-MattermostTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5BB993883BB9CFFBD2BEB9FC /* libPods-MattermostTests.a */; };
|
||||
C99BB3F4E4564F01A531FBEA /* Roboto-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 09FA716C56874BDDA30FE8C4 /* Roboto-Medium.ttf */; };
|
||||
D719A67137964F08BE47A5FC /* OpenSans-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3647DF63D6764CF093375861 /* OpenSans-ExtraBold.ttf */; };
|
||||
DDE492F7425D451884DAA088 /* Roboto-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6EFF13DD24CE4E26953E598A /* Roboto-Black.ttf */; };
|
||||
|
|
@ -72,13 +70,6 @@
|
|||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
|
||||
remoteInfo = Mattermost;
|
||||
};
|
||||
7F240A21220D3A2300637665 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
|
||||
|
|
@ -149,7 +140,6 @@
|
|||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
00E356EE1AD99517003FC87E /* MattermostTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MattermostTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
00E356F21AD99517003FC87E /* MattermostTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MattermostTests.m; sourceTree = "<group>"; };
|
||||
031EF04FB2D14EEFAACBAA1A /* Roboto-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Italic.ttf"; path = "../assets/fonts/Roboto-Italic.ttf"; sourceTree = "<group>"; };
|
||||
|
|
@ -163,6 +153,7 @@
|
|||
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Mattermost/Images.xcassets; sourceTree = "<group>"; };
|
||||
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Mattermost/Info.plist; sourceTree = "<group>"; };
|
||||
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Mattermost/main.m; sourceTree = "<group>"; };
|
||||
182D203F539AF68F1647EFAF /* Pods-Mattermost-MattermostTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mattermost-MattermostTests.release.xcconfig"; path = "Target Support Files/Pods-Mattermost-MattermostTests/Pods-Mattermost-MattermostTests.release.xcconfig"; sourceTree = "<group>"; };
|
||||
25BF2BACE89201DE6E585B7E /* Pods-Mattermost.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mattermost.release.xcconfig"; path = "Target Support Files/Pods-Mattermost/Pods-Mattermost.release.xcconfig"; sourceTree = "<group>"; };
|
||||
263D389521BE459684618177 /* 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>"; };
|
||||
297AAFCCF0BD99FC109DA2BC /* Pods-MattermostTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MattermostTests.release.xcconfig"; path = "Target Support Files/Pods-MattermostTests/Pods-MattermostTests.release.xcconfig"; sourceTree = "<group>"; };
|
||||
|
|
@ -190,7 +181,6 @@
|
|||
536CC6C223E79287002C478C /* RNNotificationEventHandler+HandleReplyAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "RNNotificationEventHandler+HandleReplyAction.h"; path = "Mattermost/RNNotificationEventHandler+HandleReplyAction.h"; sourceTree = "<group>"; };
|
||||
563B800AC53A447FA18F47D3 /* 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>"; };
|
||||
57CB4735B7E57B50D0B50E16 /* Pods-MattermostTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MattermostTests.debug.xcconfig"; path = "Target Support Files/Pods-MattermostTests/Pods-MattermostTests.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
5BB993883BB9CFFBD2BEB9FC /* libPods-MattermostTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MattermostTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
6561AEAC21CC40B8A72ABB93 /* OpenSans-Light.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-Light.ttf"; path = "../assets/fonts/OpenSans-Light.ttf"; sourceTree = "<group>"; };
|
||||
6BAF8296411D4657B5A0E8F8 /* libRNReactNativeDocViewer.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNReactNativeDocViewer.a; sourceTree = "<group>"; };
|
||||
6EFF13DD24CE4E26953E598A /* Roboto-Black.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Black.ttf"; path = "../assets/fonts/Roboto-Black.ttf"; sourceTree = "<group>"; };
|
||||
|
|
@ -215,6 +205,7 @@
|
|||
7F292A701E8AB73400A450A3 /* SplashScreenResource */ = {isa = PBXFileReference; lastKnownFileType = folder; path = SplashScreenResource; sourceTree = "<group>"; };
|
||||
7F292AA41E8ABB1100A450A3 /* LaunchScreen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = LaunchScreen.xib; path = SplashScreenResource/LaunchScreen.xib; sourceTree = "<group>"; };
|
||||
7F292AA51E8ABB1100A450A3 /* splash.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = splash.png; path = SplashScreenResource/splash.png; sourceTree = "<group>"; };
|
||||
7F325D6DAAF1047EB948EFF7 /* Pods-Mattermost-MattermostTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mattermost-MattermostTests.debug.xcconfig"; path = "Target Support Files/Pods-Mattermost-MattermostTests/Pods-Mattermost-MattermostTests.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
7F43D6051F6BF9EB001FC614 /* libPods-Mattermost.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libPods-Mattermost.a"; path = "../../../../../../../Library/Developer/Xcode/DerivedData/Mattermost-czlinsdviifujheezzjvmisotjrm/Build/Products/Debug-iphonesimulator/libPods-Mattermost.a"; sourceTree = "<group>"; };
|
||||
7F54ABFAE6CE4A6DB11D1ED7 /* Roboto-BlackItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-BlackItalic.ttf"; path = "../assets/fonts/Roboto-BlackItalic.ttf"; sourceTree = "<group>"; };
|
||||
7F581D32221ED5C60099E66B /* NotificationService.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = NotificationService.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
|
|
@ -268,18 +259,11 @@
|
|||
D2A2E7723B364D62A9C5054D /* 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>"; };
|
||||
D4B1B363C2414DA19C1AC521 /* OpenSans-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-Bold.ttf"; path = "../assets/fonts/OpenSans-Bold.ttf"; sourceTree = "<group>"; };
|
||||
EB4F0DF36537B0B21BE962FB /* Pods-Mattermost.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mattermost.debug.xcconfig"; path = "Target Support Files/Pods-Mattermost/Pods-Mattermost.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
F41672974C2907F74BB59B16 /* libPods-Mattermost-MattermostTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Mattermost-MattermostTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
FBBEC29EE2D3418D9AC33BD5 /* OpenSans-ExtraBoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-ExtraBoldItalic.ttf"; path = "../assets/fonts/OpenSans-ExtraBoldItalic.ttf"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
00E356EB1AD99517003FC87E /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
B9899621C7F80C4B5C51BB8B /* libPods-MattermostTests.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
|
|
@ -414,6 +398,8 @@
|
|||
25BF2BACE89201DE6E585B7E /* Pods-Mattermost.release.xcconfig */,
|
||||
57CB4735B7E57B50D0B50E16 /* Pods-MattermostTests.debug.xcconfig */,
|
||||
297AAFCCF0BD99FC109DA2BC /* Pods-MattermostTests.release.xcconfig */,
|
||||
7F325D6DAAF1047EB948EFF7 /* Pods-Mattermost-MattermostTests.debug.xcconfig */,
|
||||
182D203F539AF68F1647EFAF /* Pods-Mattermost-MattermostTests.release.xcconfig */,
|
||||
);
|
||||
path = Pods;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -448,7 +434,7 @@
|
|||
7F43D6051F6BF9EB001FC614 /* libPods-Mattermost.a */,
|
||||
81061F4CBB31484A94D5A8EE /* libz.tbd */,
|
||||
8DEEFB3ED6175724A2653247 /* libPods-Mattermost.a */,
|
||||
5BB993883BB9CFFBD2BEB9FC /* libPods-MattermostTests.a */,
|
||||
F41672974C2907F74BB59B16 /* libPods-Mattermost-MattermostTests.a */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -533,7 +519,6 @@
|
|||
isa = PBXGroup;
|
||||
children = (
|
||||
13B07F961A680F5B00A75B9A /* Mattermost.app */,
|
||||
00E356EE1AD99517003FC87E /* MattermostTests.xctest */,
|
||||
7F240A19220D3A2300637665 /* MattermostShare.appex */,
|
||||
7F581D32221ED5C60099E66B /* NotificationService.appex */,
|
||||
);
|
||||
|
|
@ -543,25 +528,6 @@
|
|||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
00E356ED1AD99517003FC87E /* MattermostTests */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "MattermostTests" */;
|
||||
buildPhases = (
|
||||
C540C9BFE580D99F0700EC9D /* [CP] Check Pods Manifest.lock */,
|
||||
00E356EA1AD99517003FC87E /* Sources */,
|
||||
00E356EB1AD99517003FC87E /* Frameworks */,
|
||||
00E356EC1AD99517003FC87E /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
00E356F51AD99517003FC87E /* PBXTargetDependency */,
|
||||
);
|
||||
name = MattermostTests;
|
||||
productName = MattermostTests;
|
||||
productReference = 00E356EE1AD99517003FC87E /* MattermostTests.xctest */;
|
||||
productType = "com.apple.product-type.bundle.unit-test";
|
||||
};
|
||||
13B07F861A680F5B00A75B9A /* Mattermost */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Mattermost" */;
|
||||
|
|
@ -634,10 +600,6 @@
|
|||
LastUpgradeCheck = 820;
|
||||
ORGANIZATIONNAME = Facebook;
|
||||
TargetAttributes = {
|
||||
00E356ED1AD99517003FC87E = {
|
||||
CreatedOnToolsVersion = 6.2;
|
||||
TestTargetID = 13B07F861A680F5B00A75B9A;
|
||||
};
|
||||
13B07F861A680F5B00A75B9A = {
|
||||
DevelopmentTeam = UQ8HT4Q2XM;
|
||||
LastSwiftMigration = 1010;
|
||||
|
|
@ -703,7 +665,6 @@
|
|||
projectRoot = "";
|
||||
targets = (
|
||||
13B07F861A680F5B00A75B9A /* Mattermost */,
|
||||
00E356ED1AD99517003FC87E /* MattermostTests */,
|
||||
7F240A18220D3A2300637665 /* MattermostShare */,
|
||||
7F581D31221ED5C60099E66B /* NotificationService */,
|
||||
);
|
||||
|
|
@ -721,13 +682,6 @@
|
|||
/* End PBXReferenceProxy section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
00E356EC1AD99517003FC87E /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
13B07F8E1A680F5B00A75B9A /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
|
|
@ -820,58 +774,6 @@
|
|||
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;
|
||||
};
|
||||
1D22DC6FC0A37F7F657B8274 /* [CP] Copy Pods Resources */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${SRCROOT}/Pods/Target Support Files/Pods-Mattermost/Pods-Mattermost-resources.sh",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-youtube/assets/YTPlayerView-iframe-player.html",
|
||||
);
|
||||
name = "[CP] Copy Pods Resources";
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/YTPlayerView-iframe-player.html",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Mattermost/Pods-Mattermost-resources.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
AE4769B235D14E6C9C64EA78 /* Upload Debug Symbols to Sentry */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
|
|
@ -886,28 +788,6 @@
|
|||
shellPath = /bin/sh;
|
||||
shellScript = "./uploadDebugSymbols.sh\n";
|
||||
};
|
||||
C540C9BFE580D99F0700EC9D /* [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-MattermostTests-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;
|
||||
};
|
||||
ED4C644925C525E30315E09E /* [CP] Copy Pods Resources */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
|
|
@ -961,14 +841,6 @@
|
|||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
00E356EA1AD99517003FC87E /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
00E356F31AD99517003FC87E /* MattermostTests.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
13B07F871A680F5B00A75B9A /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
|
|
@ -1015,11 +887,6 @@
|
|||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 13B07F861A680F5B00A75B9A /* Mattermost */;
|
||||
targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
|
||||
};
|
||||
7F240A22220D3A2300637665 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 7F240A18220D3A2300637665 /* MattermostShare */;
|
||||
|
|
@ -1059,55 +926,6 @@
|
|||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
00E356F61AD99517003FC87E /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 57CB4735B7E57B50D0B50E16 /* Pods-MattermostTests.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
HEADER_SEARCH_PATHS = "$(inherited)";
|
||||
INFOPLIST_FILE = MattermostTests/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
"-lc++",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.mattermost.rnbeta;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Mattermost.app/Mattermost";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
00E356F71AD99517003FC87E /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 297AAFCCF0BD99FC109DA2BC /* Pods-MattermostTests.release.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
HEADER_SEARCH_PATHS = "$(inherited)";
|
||||
INFOPLIST_FILE = MattermostTests/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
"-lc++",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.mattermost.rnbeta;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Mattermost.app/Mattermost";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
13B07F941A680F5B00A75B9A /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = EB4F0DF36537B0B21BE962FB /* Pods-Mattermost.debug.xcconfig */;
|
||||
|
|
@ -1129,6 +947,10 @@
|
|||
INFOPLIST_FILE = Mattermost/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 10.3;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
OTHER_CFLAGS = (
|
||||
"$(inherited)",
|
||||
"-DFB_SONARKIT_ENABLED=1",
|
||||
);
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
|
|
@ -1167,6 +989,10 @@
|
|||
INFOPLIST_FILE = Mattermost/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 10.3;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
OTHER_CFLAGS = (
|
||||
"$(inherited)",
|
||||
"-DFB_SONARKIT_ENABLED=1",
|
||||
);
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
|
|
@ -1213,6 +1039,10 @@
|
|||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
OTHER_CFLAGS = (
|
||||
"$(inherited)",
|
||||
"-DFB_SONARKIT_ENABLED=1",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.mattermost.rnbeta.MattermostShare;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
|
|
@ -1254,6 +1084,10 @@
|
|||
IPHONEOS_DEPLOYMENT_TARGET = 10.3;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
MTL_FAST_MATH = YES;
|
||||
OTHER_CFLAGS = (
|
||||
"$(inherited)",
|
||||
"-DFB_SONARKIT_ENABLED=1",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.mattermost.rnbeta.MattermostShare;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
|
|
@ -1293,6 +1127,10 @@
|
|||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
OTHER_CFLAGS = (
|
||||
"$(inherited)",
|
||||
"-DFB_SONARKIT_ENABLED=1",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.mattermost.rnbeta.NotificationService;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
|
|
@ -1332,6 +1170,10 @@
|
|||
IPHONEOS_DEPLOYMENT_TARGET = 10.3;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
MTL_FAST_MATH = YES;
|
||||
OTHER_CFLAGS = (
|
||||
"$(inherited)",
|
||||
"-DFB_SONARKIT_ENABLED=1",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.mattermost.rnbeta.NotificationService;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
|
|
@ -1428,15 +1270,6 @@
|
|||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "MattermostTests" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
00E356F61AD99517003FC87E /* Debug */,
|
||||
00E356F71AD99517003FC87E /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Mattermost" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
|
|
|
|||
|
|
@ -1,12 +1,3 @@
|
|||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@interface AppDelegate : UIResponder <UIApplicationDelegate>
|
||||
|
|
|
|||
|
|
@ -1,12 +1,3 @@
|
|||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
|
||||
#import "AppDelegate.h"
|
||||
#import <AVFoundation/AVFoundation.h>
|
||||
#import <React/RCTBundleURLProvider.h>
|
||||
|
|
@ -20,6 +11,24 @@
|
|||
#import <os/log.h>
|
||||
#import <RNHWKeyboardEvent.h>
|
||||
|
||||
#if DEBUG
|
||||
#import <FlipperKit/FlipperClient.h>
|
||||
#import <FlipperKitLayoutPlugin/FlipperKitLayoutPlugin.h>
|
||||
#import <FlipperKitUserDefaultsPlugin/FKUserDefaultsPlugin.h>
|
||||
#import <FlipperKitNetworkPlugin/FlipperKitNetworkPlugin.h>
|
||||
#import <SKIOSNetworkPlugin/SKIOSNetworkAdapter.h>
|
||||
#import <FlipperKitReactPlugin/FlipperKitReactPlugin.h>
|
||||
static void InitializeFlipper(UIApplication *application) {
|
||||
FlipperClient *client = [FlipperClient sharedClient];
|
||||
SKDescriptorMapper *layoutDescriptorMapper = [[SKDescriptorMapper alloc] initWithDefaults];
|
||||
[client addPlugin:[[FlipperKitLayoutPlugin alloc] initWithRootNode:application withDescriptorMapper:layoutDescriptorMapper]];
|
||||
[client addPlugin:[[FKUserDefaultsPlugin alloc] initWithSuiteName:nil]];
|
||||
[client addPlugin:[FlipperKitReactPlugin new]];
|
||||
[client addPlugin:[[FlipperKitNetworkPlugin alloc] initWithNetworkAdapter:[SKIOSNetworkAdapter new]]];
|
||||
[client start];
|
||||
}
|
||||
#endif
|
||||
|
||||
@implementation AppDelegate
|
||||
|
||||
NSString* const NOTIFICATION_MESSAGE_ACTION = @"message";
|
||||
|
|
@ -34,6 +43,10 @@ NSString* const NOTIFICATION_UPDATE_BADGE_ACTION = @"update_badge";
|
|||
|
||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
||||
{
|
||||
#if DEBUG
|
||||
InitializeFlipper(application);
|
||||
#endif
|
||||
|
||||
// Clear keychain on first run in case of reinstallation
|
||||
if (![[NSUserDefaults standardUserDefaults] objectForKey:@"FirstRun"]) {
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +1,3 @@
|
|||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
#import "AppDelegate.h"
|
||||
|
|
|
|||
|
|
@ -1,70 +0,0 @@
|
|||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <XCTest/XCTest.h>
|
||||
|
||||
#import <React/RCTLog.h>
|
||||
#import <React/RCTRootView.h>
|
||||
|
||||
#define TIMEOUT_SECONDS 600
|
||||
#define TEXT_TO_LOOK_FOR @"Welcome to React Native!"
|
||||
|
||||
@interface MattermostTests : XCTestCase
|
||||
|
||||
@end
|
||||
|
||||
@implementation MattermostTests
|
||||
|
||||
- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test
|
||||
{
|
||||
if (test(view)) {
|
||||
return YES;
|
||||
}
|
||||
for (UIView *subview in [view subviews]) {
|
||||
if ([self findSubviewInView:subview matching:test]) {
|
||||
return YES;
|
||||
}
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (void)testRendersWelcomeScreen
|
||||
{
|
||||
UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
|
||||
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];
|
||||
BOOL foundElement = NO;
|
||||
|
||||
__block NSString *redboxError = nil;
|
||||
RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
|
||||
if (level >= RCTLogLevelError) {
|
||||
redboxError = message;
|
||||
}
|
||||
});
|
||||
|
||||
while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
|
||||
[[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
|
||||
[[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
|
||||
|
||||
foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) {
|
||||
if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
}];
|
||||
}
|
||||
|
||||
RCTSetLogFunction(RCTDefaultLogFunction);
|
||||
|
||||
XCTAssertNil(redboxError, @"RedBox error: %@", redboxError);
|
||||
XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
55
ios/Podfile
55
ios/Podfile
|
|
@ -1,7 +1,40 @@
|
|||
# Uncomment the next line to define a global platform for your project
|
||||
# platform :ios, '9.0'
|
||||
platform :ios, '9.0'
|
||||
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
|
||||
|
||||
def add_flipper_pods!
|
||||
version = '~> 0.33.1'
|
||||
pod 'FlipperKit', version, :configuration => 'Debug'
|
||||
pod 'FlipperKit/FlipperKitLayoutPlugin', version, :configuration => 'Debug'
|
||||
pod 'FlipperKit/SKIOSNetworkPlugin', version, :configuration => 'Debug'
|
||||
pod 'FlipperKit/FlipperKitUserDefaultsPlugin', version, :configuration => 'Debug'
|
||||
pod 'FlipperKit/FlipperKitReactPlugin', version, :configuration => 'Debug'
|
||||
end
|
||||
|
||||
# Post Install processing for Flipper
|
||||
def flipper_post_install(installer)
|
||||
installer.pods_project.targets.each do |target|
|
||||
if target.name == 'YogaKit'
|
||||
target.build_configurations.each do |config|
|
||||
config.build_settings['SWIFT_VERSION'] = '4.1'
|
||||
end
|
||||
end
|
||||
end
|
||||
file_name = Dir.glob("*.xcodeproj")[0]
|
||||
app_project = Xcodeproj::Project.open(file_name)
|
||||
app_project.native_targets.each do |target|
|
||||
target.build_configurations.each do |config|
|
||||
cflags = config.build_settings['OTHER_CFLAGS'] || '$(inherited) '
|
||||
unless cflags.include? '-DFB_SONARKIT_ENABLED=1'
|
||||
puts 'Adding -DFB_SONARKIT_ENABLED=1 in OTHER_CFLAGS...'
|
||||
cflags << '-DFB_SONARKIT_ENABLED=1'
|
||||
end
|
||||
config.build_settings['OTHER_CFLAGS'] = cflags
|
||||
end
|
||||
app_project.save
|
||||
end
|
||||
installer.pods_project.save
|
||||
end
|
||||
|
||||
target 'Mattermost' do
|
||||
# Pods for Mattermost
|
||||
pod 'FBLazyVector', :path => "../node_modules/react-native/Libraries/FBLazyVector"
|
||||
|
|
@ -27,9 +60,9 @@ target 'Mattermost' do
|
|||
pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi'
|
||||
pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor'
|
||||
pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector'
|
||||
pod 'ReactCommon/jscallinvoker', :path => "../node_modules/react-native/ReactCommon"
|
||||
pod 'ReactCommon/callinvoker', :path => "../node_modules/react-native/ReactCommon"
|
||||
pod 'ReactCommon/turbomodule/core', :path => "../node_modules/react-native/ReactCommon"
|
||||
pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
|
||||
pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga', :modular_headers => true
|
||||
|
||||
pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
|
||||
pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
|
||||
|
|
@ -42,10 +75,14 @@ target 'Mattermost' do
|
|||
pod 'XCDYouTubeKit', '2.8.2'
|
||||
pod 'Swime', '3.0.6'
|
||||
|
||||
target 'MattermostTests' do
|
||||
inherit! :search_paths
|
||||
# Pods for testing
|
||||
end
|
||||
|
||||
use_native_modules!
|
||||
|
||||
# Enables Flipper.
|
||||
#
|
||||
# Note that if you have use_frameworks! enabled, Flipper will not work and
|
||||
# you should disable these next few lines.
|
||||
add_flipper_pods!
|
||||
post_install do |installer|
|
||||
flipper_post_install(installer)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
436
ios/Podfile.lock
436
ios/Podfile.lock
|
|
@ -2,15 +2,63 @@ PODS:
|
|||
- boost-for-react-native (1.63.0)
|
||||
- BVLinearGradient (2.5.6):
|
||||
- React
|
||||
- CocoaAsyncSocket (7.6.4)
|
||||
- CocoaLibEvent (1.0.0)
|
||||
- DoubleConversion (1.1.6)
|
||||
- FBLazyVector (0.61.5)
|
||||
- FBReactNativeSpec (0.61.5):
|
||||
- FBLazyVector (0.62.2)
|
||||
- FBReactNativeSpec (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- RCTRequired (= 0.61.5)
|
||||
- RCTTypeSafety (= 0.61.5)
|
||||
- React-Core (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- ReactCommon/turbomodule/core (= 0.61.5)
|
||||
- RCTRequired (= 0.62.2)
|
||||
- RCTTypeSafety (= 0.62.2)
|
||||
- React-Core (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- ReactCommon/turbomodule/core (= 0.62.2)
|
||||
- Flipper (0.33.1):
|
||||
- Flipper-Folly (~> 2.1)
|
||||
- Flipper-RSocket (~> 1.0)
|
||||
- Flipper-DoubleConversion (1.1.7)
|
||||
- Flipper-Folly (2.1.1):
|
||||
- boost-for-react-native
|
||||
- CocoaLibEvent (~> 1.0)
|
||||
- Flipper-DoubleConversion
|
||||
- Flipper-Glog
|
||||
- OpenSSL-Universal (= 1.0.2.19)
|
||||
- Flipper-Glog (0.3.6)
|
||||
- Flipper-PeerTalk (0.0.4)
|
||||
- Flipper-RSocket (1.0.0):
|
||||
- Flipper-Folly (~> 2.0)
|
||||
- FlipperKit (0.33.1):
|
||||
- FlipperKit/Core (= 0.33.1)
|
||||
- FlipperKit/Core (0.33.1):
|
||||
- Flipper (~> 0.33.1)
|
||||
- FlipperKit/CppBridge
|
||||
- FlipperKit/FBCxxFollyDynamicConvert
|
||||
- FlipperKit/FBDefines
|
||||
- FlipperKit/FKPortForwarding
|
||||
- FlipperKit/CppBridge (0.33.1):
|
||||
- Flipper (~> 0.33.1)
|
||||
- FlipperKit/FBCxxFollyDynamicConvert (0.33.1):
|
||||
- Flipper-Folly (~> 2.1)
|
||||
- FlipperKit/FBDefines (0.33.1)
|
||||
- FlipperKit/FKPortForwarding (0.33.1):
|
||||
- CocoaAsyncSocket (~> 7.6)
|
||||
- Flipper-PeerTalk (~> 0.0.4)
|
||||
- FlipperKit/FlipperKitHighlightOverlay (0.33.1)
|
||||
- FlipperKit/FlipperKitLayoutPlugin (0.33.1):
|
||||
- FlipperKit/Core
|
||||
- FlipperKit/FlipperKitHighlightOverlay
|
||||
- FlipperKit/FlipperKitLayoutTextSearchable
|
||||
- YogaKit (~> 1.18)
|
||||
- FlipperKit/FlipperKitLayoutTextSearchable (0.33.1)
|
||||
- FlipperKit/FlipperKitNetworkPlugin (0.33.1):
|
||||
- FlipperKit/Core
|
||||
- FlipperKit/FlipperKitReactPlugin (0.33.1):
|
||||
- FlipperKit/Core
|
||||
- FlipperKit/FlipperKitUserDefaultsPlugin (0.33.1):
|
||||
- FlipperKit/Core
|
||||
- FlipperKit/SKIOSNetworkPlugin (0.33.1):
|
||||
- FlipperKit/Core
|
||||
- FlipperKit/FlipperKitNetworkPlugin
|
||||
- Folly (2018.10.22.00):
|
||||
- boost-for-react-native
|
||||
- DoubleConversion
|
||||
|
|
@ -33,181 +81,184 @@ PODS:
|
|||
- libwebp/demux
|
||||
- libwebp/webp (1.1.0)
|
||||
- MMKV (1.0.24)
|
||||
- OpenSSL-Universal (1.0.2.19):
|
||||
- OpenSSL-Universal/Static (= 1.0.2.19)
|
||||
- OpenSSL-Universal/Static (1.0.2.19)
|
||||
- Permission-Camera (2.0.10):
|
||||
- RNPermissions
|
||||
- Permission-PhotoLibrary (2.0.10):
|
||||
- RNPermissions
|
||||
- RCTRequired (0.61.5)
|
||||
- RCTTypeSafety (0.61.5):
|
||||
- FBLazyVector (= 0.61.5)
|
||||
- RCTRequired (0.62.2)
|
||||
- RCTTypeSafety (0.62.2):
|
||||
- FBLazyVector (= 0.62.2)
|
||||
- Folly (= 2018.10.22.00)
|
||||
- RCTRequired (= 0.61.5)
|
||||
- React-Core (= 0.61.5)
|
||||
- RCTRequired (= 0.62.2)
|
||||
- React-Core (= 0.62.2)
|
||||
- RCTYouTube (2.0.0):
|
||||
- React
|
||||
- YoutubePlayer-in-WKWebView (~> 0.3.1)
|
||||
- React (0.61.5):
|
||||
- React-Core (= 0.61.5)
|
||||
- React-Core/DevSupport (= 0.61.5)
|
||||
- React-Core/RCTWebSocket (= 0.61.5)
|
||||
- React-RCTActionSheet (= 0.61.5)
|
||||
- React-RCTAnimation (= 0.61.5)
|
||||
- React-RCTBlob (= 0.61.5)
|
||||
- React-RCTImage (= 0.61.5)
|
||||
- React-RCTLinking (= 0.61.5)
|
||||
- React-RCTNetwork (= 0.61.5)
|
||||
- React-RCTSettings (= 0.61.5)
|
||||
- React-RCTText (= 0.61.5)
|
||||
- React-RCTVibration (= 0.61.5)
|
||||
- React-Core (0.61.5):
|
||||
- React (0.62.2):
|
||||
- React-Core (= 0.62.2)
|
||||
- React-Core/DevSupport (= 0.62.2)
|
||||
- React-Core/RCTWebSocket (= 0.62.2)
|
||||
- React-RCTActionSheet (= 0.62.2)
|
||||
- React-RCTAnimation (= 0.62.2)
|
||||
- React-RCTBlob (= 0.62.2)
|
||||
- React-RCTImage (= 0.62.2)
|
||||
- React-RCTLinking (= 0.62.2)
|
||||
- React-RCTNetwork (= 0.62.2)
|
||||
- React-RCTSettings (= 0.62.2)
|
||||
- React-RCTText (= 0.62.2)
|
||||
- React-RCTVibration (= 0.62.2)
|
||||
- React-Core (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-Core/Default (= 0.62.2)
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- Yoga
|
||||
- React-Core/CoreModulesHeaders (0.61.5):
|
||||
- React-Core/CoreModulesHeaders (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- Yoga
|
||||
- React-Core/Default (0.61.5):
|
||||
- React-Core/Default (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- Yoga
|
||||
- React-Core/DevSupport (0.61.5):
|
||||
- React-Core/DevSupport (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default (= 0.61.5)
|
||||
- React-Core/RCTWebSocket (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-jsinspector (= 0.61.5)
|
||||
- React-Core/Default (= 0.62.2)
|
||||
- React-Core/RCTWebSocket (= 0.62.2)
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- React-jsinspector (= 0.62.2)
|
||||
- Yoga
|
||||
- React-Core/RCTActionSheetHeaders (0.61.5):
|
||||
- React-Core/RCTActionSheetHeaders (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- Yoga
|
||||
- React-Core/RCTAnimationHeaders (0.61.5):
|
||||
- React-Core/RCTAnimationHeaders (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- Yoga
|
||||
- React-Core/RCTBlobHeaders (0.61.5):
|
||||
- React-Core/RCTBlobHeaders (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- Yoga
|
||||
- React-Core/RCTImageHeaders (0.61.5):
|
||||
- React-Core/RCTImageHeaders (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- Yoga
|
||||
- React-Core/RCTLinkingHeaders (0.61.5):
|
||||
- React-Core/RCTLinkingHeaders (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- Yoga
|
||||
- React-Core/RCTNetworkHeaders (0.61.5):
|
||||
- React-Core/RCTNetworkHeaders (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- Yoga
|
||||
- React-Core/RCTSettingsHeaders (0.61.5):
|
||||
- React-Core/RCTSettingsHeaders (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- Yoga
|
||||
- React-Core/RCTTextHeaders (0.61.5):
|
||||
- React-Core/RCTTextHeaders (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- Yoga
|
||||
- React-Core/RCTVibrationHeaders (0.61.5):
|
||||
- React-Core/RCTVibrationHeaders (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- Yoga
|
||||
- React-Core/RCTWebSocket (0.61.5):
|
||||
- React-Core/RCTWebSocket (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-Core/Default (= 0.62.2)
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- Yoga
|
||||
- React-CoreModules (0.61.5):
|
||||
- FBReactNativeSpec (= 0.61.5)
|
||||
- React-CoreModules (0.62.2):
|
||||
- FBReactNativeSpec (= 0.62.2)
|
||||
- Folly (= 2018.10.22.00)
|
||||
- RCTTypeSafety (= 0.61.5)
|
||||
- React-Core/CoreModulesHeaders (= 0.61.5)
|
||||
- React-RCTImage (= 0.61.5)
|
||||
- ReactCommon/turbomodule/core (= 0.61.5)
|
||||
- React-cxxreact (0.61.5):
|
||||
- RCTTypeSafety (= 0.62.2)
|
||||
- React-Core/CoreModulesHeaders (= 0.62.2)
|
||||
- React-RCTImage (= 0.62.2)
|
||||
- ReactCommon/turbomodule/core (= 0.62.2)
|
||||
- React-cxxreact (0.62.2):
|
||||
- boost-for-react-native (= 1.63.0)
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-jsinspector (= 0.61.5)
|
||||
- React-jsi (0.61.5):
|
||||
- React-jsinspector (= 0.62.2)
|
||||
- React-jsi (0.62.2):
|
||||
- boost-for-react-native (= 1.63.0)
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-jsi/Default (= 0.61.5)
|
||||
- React-jsi/Default (0.61.5):
|
||||
- React-jsi/Default (= 0.62.2)
|
||||
- React-jsi/Default (0.62.2):
|
||||
- boost-for-react-native (= 1.63.0)
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-jsiexecutor (0.61.5):
|
||||
- React-jsiexecutor (0.62.2):
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsinspector (0.61.5)
|
||||
- react-native-cameraroll (1.4.1):
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsinspector (0.62.2)
|
||||
- react-native-cameraroll (1.5.2):
|
||||
- React
|
||||
- react-native-cookies (3.2.0):
|
||||
- React
|
||||
- react-native-document-picker (3.3.0):
|
||||
- react-native-document-picker (3.3.2):
|
||||
- React
|
||||
- react-native-hw-keyboard-event (0.0.4):
|
||||
- React
|
||||
|
|
@ -218,7 +269,7 @@ PODS:
|
|||
- React
|
||||
- react-native-netinfo (4.4.0):
|
||||
- React
|
||||
- react-native-notifications (2.0.6):
|
||||
- react-native-notifications (2.1.7):
|
||||
- React
|
||||
- react-native-passcode-status (1.1.2):
|
||||
- React
|
||||
|
|
@ -231,46 +282,70 @@ PODS:
|
|||
- React
|
||||
- react-native-webview (7.0.1):
|
||||
- React
|
||||
- React-RCTActionSheet (0.61.5):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.61.5)
|
||||
- React-RCTAnimation (0.61.5):
|
||||
- React-Core/RCTAnimationHeaders (= 0.61.5)
|
||||
- React-RCTBlob (0.61.5):
|
||||
- React-Core/RCTBlobHeaders (= 0.61.5)
|
||||
- React-Core/RCTWebSocket (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-RCTNetwork (= 0.61.5)
|
||||
- React-RCTImage (0.61.5):
|
||||
- React-Core/RCTImageHeaders (= 0.61.5)
|
||||
- React-RCTNetwork (= 0.61.5)
|
||||
- React-RCTLinking (0.61.5):
|
||||
- React-Core/RCTLinkingHeaders (= 0.61.5)
|
||||
- React-RCTNetwork (0.61.5):
|
||||
- React-Core/RCTNetworkHeaders (= 0.61.5)
|
||||
- React-RCTSettings (0.61.5):
|
||||
- React-Core/RCTSettingsHeaders (= 0.61.5)
|
||||
- React-RCTText (0.61.5):
|
||||
- React-Core/RCTTextHeaders (= 0.61.5)
|
||||
- React-RCTVibration (0.61.5):
|
||||
- React-Core/RCTVibrationHeaders (= 0.61.5)
|
||||
- ReactCommon/jscallinvoker (0.61.5):
|
||||
- React-RCTActionSheet (0.62.2):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.62.2)
|
||||
- React-RCTAnimation (0.62.2):
|
||||
- FBReactNativeSpec (= 0.62.2)
|
||||
- Folly (= 2018.10.22.00)
|
||||
- RCTTypeSafety (= 0.62.2)
|
||||
- React-Core/RCTAnimationHeaders (= 0.62.2)
|
||||
- ReactCommon/turbomodule/core (= 0.62.2)
|
||||
- React-RCTBlob (0.62.2):
|
||||
- FBReactNativeSpec (= 0.62.2)
|
||||
- Folly (= 2018.10.22.00)
|
||||
- React-Core/RCTBlobHeaders (= 0.62.2)
|
||||
- React-Core/RCTWebSocket (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-RCTNetwork (= 0.62.2)
|
||||
- ReactCommon/turbomodule/core (= 0.62.2)
|
||||
- React-RCTImage (0.62.2):
|
||||
- FBReactNativeSpec (= 0.62.2)
|
||||
- Folly (= 2018.10.22.00)
|
||||
- RCTTypeSafety (= 0.62.2)
|
||||
- React-Core/RCTImageHeaders (= 0.62.2)
|
||||
- React-RCTNetwork (= 0.62.2)
|
||||
- ReactCommon/turbomodule/core (= 0.62.2)
|
||||
- React-RCTLinking (0.62.2):
|
||||
- FBReactNativeSpec (= 0.62.2)
|
||||
- React-Core/RCTLinkingHeaders (= 0.62.2)
|
||||
- ReactCommon/turbomodule/core (= 0.62.2)
|
||||
- React-RCTNetwork (0.62.2):
|
||||
- FBReactNativeSpec (= 0.62.2)
|
||||
- Folly (= 2018.10.22.00)
|
||||
- RCTTypeSafety (= 0.62.2)
|
||||
- React-Core/RCTNetworkHeaders (= 0.62.2)
|
||||
- ReactCommon/turbomodule/core (= 0.62.2)
|
||||
- React-RCTSettings (0.62.2):
|
||||
- FBReactNativeSpec (= 0.62.2)
|
||||
- Folly (= 2018.10.22.00)
|
||||
- RCTTypeSafety (= 0.62.2)
|
||||
- React-Core/RCTSettingsHeaders (= 0.62.2)
|
||||
- ReactCommon/turbomodule/core (= 0.62.2)
|
||||
- React-RCTText (0.62.2):
|
||||
- React-Core/RCTTextHeaders (= 0.62.2)
|
||||
- React-RCTVibration (0.62.2):
|
||||
- FBReactNativeSpec (= 0.62.2)
|
||||
- Folly (= 2018.10.22.00)
|
||||
- React-Core/RCTVibrationHeaders (= 0.62.2)
|
||||
- ReactCommon/turbomodule/core (= 0.62.2)
|
||||
- ReactCommon/callinvoker (0.62.2):
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- ReactCommon/turbomodule/core (0.61.5):
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- ReactCommon/turbomodule/core (0.62.2):
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- ReactCommon/jscallinvoker (= 0.61.5)
|
||||
- React-Core (= 0.62.2)
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- ReactCommon/callinvoker (= 0.62.2)
|
||||
- ReactNativeExceptionHandler (2.10.8):
|
||||
- React
|
||||
- ReactNativeKeyboardTrackingView (5.6.1):
|
||||
- React
|
||||
- ReactNativeNavigation (6.3.0):
|
||||
- ReactNativeNavigation (6.4.0):
|
||||
- React
|
||||
- React-RCTImage
|
||||
- React-RCTText
|
||||
|
|
@ -284,7 +359,7 @@ PODS:
|
|||
- React
|
||||
- SDWebImage (~> 5.0)
|
||||
- SDWebImageWebPCoder (~> 0.4.1)
|
||||
- RNGestureHandler (1.6.0):
|
||||
- RNGestureHandler (1.6.1):
|
||||
- React
|
||||
- RNKeychain (4.0.5):
|
||||
- React
|
||||
|
|
@ -294,7 +369,7 @@ PODS:
|
|||
- React
|
||||
- RNReactNativeHapticFeedback (1.9.0):
|
||||
- React
|
||||
- RNSentry (1.3.3):
|
||||
- RNSentry (1.3.6):
|
||||
- React
|
||||
- Sentry (~> 4.4.0)
|
||||
- RNSVG (12.0.3):
|
||||
|
|
@ -313,6 +388,8 @@ PODS:
|
|||
- Swime (3.0.6)
|
||||
- XCDYouTubeKit (2.8.2)
|
||||
- Yoga (1.14.0)
|
||||
- YogaKit (1.18.1):
|
||||
- Yoga (~> 1.14)
|
||||
- YoutubePlayer-in-WKWebView (0.3.4)
|
||||
|
||||
DEPENDENCIES:
|
||||
|
|
@ -320,6 +397,11 @@ DEPENDENCIES:
|
|||
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
|
||||
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
|
||||
- FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`)
|
||||
- FlipperKit (~> 0.33.1)
|
||||
- FlipperKit/FlipperKitLayoutPlugin (~> 0.33.1)
|
||||
- FlipperKit/FlipperKitReactPlugin (~> 0.33.1)
|
||||
- FlipperKit/FlipperKitUserDefaultsPlugin (~> 0.33.1)
|
||||
- FlipperKit/SKIOSNetworkPlugin (~> 0.33.1)
|
||||
- Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`)
|
||||
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
|
||||
- jail-monkey (from `../node_modules/jail-monkey`)
|
||||
|
|
@ -358,7 +440,7 @@ DEPENDENCIES:
|
|||
- React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
|
||||
- React-RCTText (from `../node_modules/react-native/Libraries/Text`)
|
||||
- React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
|
||||
- ReactCommon/jscallinvoker (from `../node_modules/react-native/ReactCommon`)
|
||||
- ReactCommon/callinvoker (from `../node_modules/react-native/ReactCommon`)
|
||||
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
|
||||
- ReactNativeExceptionHandler (from `../node_modules/react-native-exception-handler`)
|
||||
- ReactNativeKeyboardTrackingView (from `../node_modules/react-native-keyboard-tracking-view`)
|
||||
|
|
@ -382,13 +464,24 @@ DEPENDENCIES:
|
|||
SPEC REPOS:
|
||||
https://github.com/cocoapods/specs.git:
|
||||
- boost-for-react-native
|
||||
- CocoaAsyncSocket
|
||||
- CocoaLibEvent
|
||||
- Flipper
|
||||
- Flipper-DoubleConversion
|
||||
- Flipper-Folly
|
||||
- Flipper-Glog
|
||||
- Flipper-PeerTalk
|
||||
- Flipper-RSocket
|
||||
- FlipperKit
|
||||
- libwebp
|
||||
- MMKV
|
||||
- OpenSSL-Universal
|
||||
- SDWebImage
|
||||
- SDWebImageWebPCoder
|
||||
- Sentry
|
||||
- Swime
|
||||
- XCDYouTubeKit
|
||||
- YogaKit
|
||||
- YoutubePlayer-in-WKWebView
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
|
|
@ -510,61 +603,71 @@ EXTERNAL SOURCES:
|
|||
SPEC CHECKSUMS:
|
||||
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
|
||||
BVLinearGradient: e3aad03778a456d77928f594a649e96995f1c872
|
||||
CocoaAsyncSocket: 694058e7c0ed05a9e217d1b3c7ded962f4180845
|
||||
CocoaLibEvent: 2fab71b8bd46dd33ddb959f7928ec5909f838e3f
|
||||
DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2
|
||||
FBLazyVector: aaeaf388755e4f29cd74acbc9e3b8da6d807c37f
|
||||
FBReactNativeSpec: 118d0d177724c2d67f08a59136eb29ef5943ec75
|
||||
FBLazyVector: 4aab18c93cd9546e4bfed752b4084585eca8b245
|
||||
FBReactNativeSpec: 5465d51ccfeecb7faa12f9ae0024f2044ce4044e
|
||||
Flipper: 6c1f484f9a88d30ab3e272800d53688439e50f69
|
||||
Flipper-DoubleConversion: 38631e41ef4f9b12861c67d17cb5518d06badc41
|
||||
Flipper-Folly: 2de3d03e0acc7064d5e4ed9f730e2f217486f162
|
||||
Flipper-Glog: 1dfd6abf1e922806c52ceb8701a3599a79a200a6
|
||||
Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9
|
||||
Flipper-RSocket: 1260a31c05c238eabfa9bb8a64e3983049048371
|
||||
FlipperKit: 6dc9b8f4ef60d9e5ded7f0264db299c91f18832e
|
||||
Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51
|
||||
glog: 1f3da668190260b06b429bb211bfbee5cd790c28
|
||||
jail-monkey: d7c5048b2336f22ee9c9e0efa145f1f917338ea9
|
||||
libwebp: 946cb3063cea9236285f7e9a8505d806d30e07f3
|
||||
MMKV: 758b2edee46b08bdd958db4169191afb9a6d4ebd
|
||||
OpenSSL-Universal: 8b48cc0d10c1b2923617dfe5c178aa9ed2689355
|
||||
Permission-Camera: 8f0e5decca5f28f70f28a8dc31f012c9bad40ad8
|
||||
Permission-PhotoLibrary: b209bf23b784c9e1409a57d81c6d11ab1d3079c1
|
||||
RCTRequired: b153add4da6e7dbc44aebf93f3cf4fcae392ddf1
|
||||
RCTTypeSafety: 9aa1b91d7f9310fc6eadc3cf95126ffe818af320
|
||||
RCTRequired: cec6a34b3ac8a9915c37e7e4ad3aa74726ce4035
|
||||
RCTTypeSafety: 93006131180074cffa227a1075802c89a49dd4ce
|
||||
RCTYouTube: 5e94bfa005371c41d307f3f93c51b3e8eabfb0c8
|
||||
React: b6a59ef847b2b40bb6e0180a97d0ca716969ac78
|
||||
React-Core: 688b451f7d616cc1134ac95295b593d1b5158a04
|
||||
React-CoreModules: d04f8494c1a328b69ec11db9d1137d667f916dcb
|
||||
React-cxxreact: d0f7bcafa196ae410e5300736b424455e7fb7ba7
|
||||
React-jsi: cb2cd74d7ccf4cffb071a46833613edc79cdf8f7
|
||||
React-jsiexecutor: d5525f9ed5f782fdbacb64b9b01a43a9323d2386
|
||||
React-jsinspector: fa0ecc501688c3c4c34f28834a76302233e29dc0
|
||||
react-native-cameraroll: 035c425c733acd3333e6c673db5ab66a559ca2e0
|
||||
React: 29a8b1a02bd764fb7644ef04019270849b9a7ac3
|
||||
React-Core: b12bffb3f567fdf99510acb716ef1abd426e0e05
|
||||
React-CoreModules: 4a9b87bbe669d6c3173c0132c3328e3b000783d0
|
||||
React-cxxreact: e65f9c2ba0ac5be946f53548c1aaaee5873a8103
|
||||
React-jsi: b6dc94a6a12ff98e8877287a0b7620d365201161
|
||||
React-jsiexecutor: 1540d1c01bb493ae3124ed83351b1b6a155db7da
|
||||
React-jsinspector: 512e560d0e985d0e8c479a54a4e5c147a9c83493
|
||||
react-native-cameraroll: 81c6c271b5b853da398ccecc7ad6a5f765fd3001
|
||||
react-native-cookies: 854d59c4135c70b92a02ca4930e68e4e2eb58150
|
||||
react-native-document-picker: 0573c02d742d4bef38a5d16b5f039754cfa69888
|
||||
react-native-document-picker: 6acd41af22988cf349848678fdaa294d4448478e
|
||||
react-native-hw-keyboard-event: b517cefb8d5c659a38049c582de85ff43337dc53
|
||||
react-native-image-picker: 668e72d0277dc8c12ae90e835507c1eddd2e4f85
|
||||
react-native-mmkv-storage: 84162ebe353ecf7476d235c47becade29789ae2c
|
||||
react-native-netinfo: 892a5130be97ff8bb69c523739c424a2ffc296d1
|
||||
react-native-notifications: d5cb54ef8bf3004dcb56c887650dea08ecbddee7
|
||||
react-native-notifications: 24706907104a0f00c35c4bde7e0ca76a50f730e1
|
||||
react-native-passcode-status: 88c4f6e074328bc278bd127646b6c694ad5a530a
|
||||
react-native-safe-area: e8230b0017d76c00de6b01e2412dcf86b127c6a3
|
||||
react-native-video: 961749da457e73bf0b5565edfbaffc25abfb8974
|
||||
react-native-webview: 0d1c2b4e7ffb0543a74fa0512f2f8dc5fb0e49e2
|
||||
React-RCTActionSheet: 600b4d10e3aea0913b5a92256d2719c0cdd26d76
|
||||
React-RCTAnimation: 791a87558389c80908ed06cc5dfc5e7920dfa360
|
||||
React-RCTBlob: d89293cc0236d9cb0933d85e430b0bbe81ad1d72
|
||||
React-RCTImage: 6b8e8df449eb7c814c99a92d6b52de6fe39dea4e
|
||||
React-RCTLinking: 121bb231c7503cf9094f4d8461b96a130fabf4a5
|
||||
React-RCTNetwork: fb353640aafcee84ca8b78957297bd395f065c9a
|
||||
React-RCTSettings: 8db258ea2a5efee381fcf7a6d5044e2f8b68b640
|
||||
React-RCTText: 9ccc88273e9a3aacff5094d2175a605efa854dbe
|
||||
React-RCTVibration: a49a1f42bf8f5acf1c3e297097517c6b3af377ad
|
||||
ReactCommon: 198c7c8d3591f975e5431bec1b0b3b581aa1c5dd
|
||||
React-RCTActionSheet: f41ea8a811aac770e0cc6e0ad6b270c644ea8b7c
|
||||
React-RCTAnimation: 49ab98b1c1ff4445148b72a3d61554138565bad0
|
||||
React-RCTBlob: a332773f0ebc413a0ce85942a55b064471587a71
|
||||
React-RCTImage: e70be9b9c74fe4e42d0005f42cace7981c994ac3
|
||||
React-RCTLinking: c1b9739a88d56ecbec23b7f63650e44672ab2ad2
|
||||
React-RCTNetwork: 73138b6f45e5a2768ad93f3d57873c2a18d14b44
|
||||
React-RCTSettings: 6e3738a87e21b39a8cb08d627e68c44acf1e325a
|
||||
React-RCTText: fae545b10cfdb3d247c36c56f61a94cfd6dba41d
|
||||
React-RCTVibration: 4356114dbcba4ce66991096e51a66e61eda51256
|
||||
ReactCommon: ed4e11d27609d571e7eee8b65548efc191116eb3
|
||||
ReactNativeExceptionHandler: 8025d98049c25f186835a3af732dd7c9974d6dce
|
||||
ReactNativeKeyboardTrackingView: a240a6a0dba852bb107109a7ec7e98b884055977
|
||||
ReactNativeNavigation: 4f06df65c965c1e96f29c5cc907f22a186ead8e3
|
||||
ReactNativeNavigation: 667586f6924fbd09512e2933fe70497db914b758
|
||||
rn-fetch-blob: 17961aec08caae68bb8fc0e5b40f93b3acfa6932
|
||||
RNCAsyncStorage: 00bdf63f7f1e0f11d3323533dba4f222e58bf092
|
||||
RNDeviceInfo: fd8296de6fca8b743cdc499b896f48e8a9f1faf5
|
||||
RNFastImage: 35ae972d6727c84ee3f5c6897e07f84d0a3445e9
|
||||
RNGestureHandler: dde546180bf24af0b5f737c8ad04b6f3fa51609a
|
||||
RNGestureHandler: 8f09cd560f8d533eb36da5a6c5a843af9f056b38
|
||||
RNKeychain: 840f8e6f13be0576202aefcdffd26a4f54bfe7b5
|
||||
RNPermissions: 8afd37dbc1be65748363c6a90caffd1806567651
|
||||
RNReactNativeDocViewer: 571c6ac38483531b8fb521d02a6ba54652ed10a7
|
||||
RNReactNativeHapticFeedback: 2566b468cc8d0e7bb2f84b23adc0f4614594d071
|
||||
RNSentry: 86baf0c87120cd5eb491d073989f8cbc1a2174c6
|
||||
RNSentry: d892cbdee165cc6159d71e2a7954efdb8a361918
|
||||
RNSVG: 7e16ddfc6e00d5aa69c9eb83e699bcce5dcb85d4
|
||||
RNVectorIcons: 0bb4def82230be1333ddaeee9fcba45f0b288ed4
|
||||
SDWebImage: 7edb9c3ea661e77a66661f7f044de8c1b55d1120
|
||||
|
|
@ -572,9 +675,10 @@ SPEC CHECKSUMS:
|
|||
Sentry: 14bdd673870e8cf64932b149fad5bbbf39a9b390
|
||||
Swime: d7b2c277503b6cea317774aedc2dce05613f8b0b
|
||||
XCDYouTubeKit: 79baadb0560673a67c771eba45f83e353fd12c1f
|
||||
Yoga: f2a7cd4280bfe2cca5a7aed98ba0eb3d1310f18b
|
||||
Yoga: 3ebccbdd559724312790e7742142d062476b698e
|
||||
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
|
||||
YoutubePlayer-in-WKWebView: af2f5929fc78882d94bfdfeea999b661b78d9717
|
||||
|
||||
PODFILE CHECKSUM: 8199a7b8e5d4cc8c741ea6292c067c33ad835da9
|
||||
PODFILE CHECKSUM: bc348868369c4079cbe32240a0dfc0f985e21f5d
|
||||
|
||||
COCOAPODS: 1.7.5
|
||||
|
|
|
|||
4159
package-lock.json
generated
4159
package-lock.json
generated
File diff suppressed because it is too large
Load diff
40
package.json
40
package.json
|
|
@ -7,11 +7,11 @@
|
|||
"license": "Apache 2.0",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@babel/runtime": "7.8.7",
|
||||
"@babel/runtime": "7.9.2",
|
||||
"@react-native-community/async-storage": "1.8.1",
|
||||
"@react-native-community/cameraroll": "1.4.1",
|
||||
"@react-native-community/cameraroll": "1.5.2",
|
||||
"@react-native-community/netinfo": "4.4.0",
|
||||
"@sentry/react-native": "1.3.3",
|
||||
"@sentry/react-native": "1.3.6",
|
||||
"analytics-react-native": "1.2.0",
|
||||
"commonmark": "github:mattermost/commonmark.js#f6ab98dede6ce4b4e7adea140ac77249bfb2d6ce",
|
||||
"commonmark-react-renderer": "github:mattermost/commonmark-react-renderer#3a2ac19cab725ad28b170fdc1d397dddedcf87eb",
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
"deepmerge": "4.2.2",
|
||||
"emoji-regex": "8.0.0",
|
||||
"form-data": "3.0.0",
|
||||
"fuse.js": "3.6.1",
|
||||
"fuse.js": "5.0.10-beta",
|
||||
"intl": "1.2.5",
|
||||
"jail-monkey": "2.3.2",
|
||||
"mime-db": "1.43.0",
|
||||
|
|
@ -28,7 +28,7 @@
|
|||
"prop-types": "15.7.2",
|
||||
"react": "16.13.0",
|
||||
"react-intl": "2.8.0",
|
||||
"react-native": "0.61.5",
|
||||
"react-native": "0.62.2",
|
||||
"react-native-android-open-settings": "1.3.0",
|
||||
"react-native-animatable": "1.3.3",
|
||||
"react-native-button": "2.4.0",
|
||||
|
|
@ -37,11 +37,11 @@
|
|||
"react-native-cookies": "github:mattermost/react-native-cookies#b35bafc388ae09c83bd875e887daf6a0755e0b40",
|
||||
"react-native-device-info": "github:mattermost/react-native-device-info#f7175f10822d8f66b9806206e3313eaf2f4aabc6",
|
||||
"react-native-doc-viewer": "github:mattermost/react-native-doc-viewer#c913e54ec8e4a60753bc7dd39256fa4be8229d19",
|
||||
"react-native-document-picker": "3.3.0",
|
||||
"react-native-document-picker": "3.3.2",
|
||||
"react-native-elements": "1.2.7",
|
||||
"react-native-exception-handler": "2.10.8",
|
||||
"react-native-fast-image": "8.1.5",
|
||||
"react-native-gesture-handler": "1.6.0",
|
||||
"react-native-gesture-handler": "1.6.1",
|
||||
"react-native-haptic-feedback": "1.9.0",
|
||||
"react-native-hw-keyboard-event": "0.0.4",
|
||||
"react-native-image-gallery": "github:mattermost/react-native-image-gallery#c1a9f7118e90cc87d47620bc0584c9cac4b0cf38",
|
||||
|
|
@ -52,8 +52,8 @@
|
|||
"react-native-linear-gradient": "2.5.6",
|
||||
"react-native-local-auth": "1.6.0",
|
||||
"react-native-mmkv-storage": "0.2.2",
|
||||
"react-native-navigation": "6.3.0",
|
||||
"react-native-notifications": "2.0.6",
|
||||
"react-native-navigation": "6.4.0",
|
||||
"react-native-notifications": "2.1.7",
|
||||
"react-native-passcode-status": "1.1.2",
|
||||
"react-native-permissions": "2.0.10",
|
||||
"react-native-safe-area": "0.5.1",
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
"react-native-slider": "0.11.0",
|
||||
"react-native-status-bar-size": "0.3.3",
|
||||
"react-native-svg": "12.0.3",
|
||||
"react-native-v8": "0.61.5-patch.3",
|
||||
"react-native-v8": "0.62.2-patch.1",
|
||||
"react-native-vector-icons": "6.6.0",
|
||||
"react-native-video": "5.0.2",
|
||||
"react-native-webview": "github:mattermost/react-native-webview#b5e22940a613869d3999feac9451ee65352f4fbe",
|
||||
|
|
@ -87,23 +87,23 @@
|
|||
},
|
||||
"devDependencies": {
|
||||
"@babel/cli": "7.8.4",
|
||||
"@babel/core": "7.8.7",
|
||||
"@babel/plugin-transform-runtime": "7.8.3",
|
||||
"@babel/preset-env": "7.8.7",
|
||||
"@babel/register": "7.8.6",
|
||||
"@babel/core": "7.9.0",
|
||||
"@babel/plugin-transform-runtime": "7.9.0",
|
||||
"@babel/preset-env": "7.9.0",
|
||||
"@babel/register": "7.9.0",
|
||||
"@testing-library/react-native": "5.0.3",
|
||||
"@types/enzyme": "3.10.5",
|
||||
"@types/enzyme-adapter-react-16": "1.0.6",
|
||||
"@types/jest": "25.1.4",
|
||||
"@types/moment-timezone": "0.5.13",
|
||||
"@types/react": "16.9.23",
|
||||
"@types/react-native": "0.61.23",
|
||||
"@types/react": "16.9.27",
|
||||
"@types/react-native": "0.62.0",
|
||||
"@types/react-test-renderer": "16.9.2",
|
||||
"@types/shallow-equals": "1.0.0",
|
||||
"@typescript-eslint/eslint-plugin": "2.25.0",
|
||||
"@typescript-eslint/parser": "2.25.0",
|
||||
"babel-eslint": "10.1.0",
|
||||
"babel-jest": "25.1.0",
|
||||
"babel-jest": "25.2.3",
|
||||
"babel-plugin-module-resolver": "4.0.0",
|
||||
"babel-plugin-transform-remove-console": "6.9.4",
|
||||
"deep-freeze": "0.0.1",
|
||||
|
|
@ -118,12 +118,12 @@
|
|||
"harmony-reflect": "1.6.1",
|
||||
"isomorphic-fetch": "2.2.1",
|
||||
"husky": "4.2.3",
|
||||
"jest": "25.1.0",
|
||||
"jest-cli": "25.1.0",
|
||||
"jest": "25.2.3",
|
||||
"jest-cli": "25.2.3",
|
||||
"jest-enzyme": "7.1.2",
|
||||
"jetifier": "1.6.5",
|
||||
"jsdom-global": "3.0.2",
|
||||
"metro-react-native-babel-preset": "0.58.0",
|
||||
"metro-react-native-babel-preset": "0.59.0",
|
||||
"mmjstool": "github:mattermost/mattermost-utilities#086f4ffdca4e31a0be22f6bcdfa093ed83fb29e",
|
||||
"mock-async-storage": "2.2.0",
|
||||
"mock-socket": "9.0.3",
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ module.exports = [
|
|||
'app/constants/list.js',
|
||||
'app/constants/navigation.js',
|
||||
'app/constants/post_textbox.js',
|
||||
'app/constants/types.js',
|
||||
'app/constants/view.js',
|
||||
'app/constants/websocket.ts',
|
||||
'app/i18n/index.js',
|
||||
|
|
@ -196,6 +197,7 @@ module.exports = [
|
|||
'dist/assets/config.json',
|
||||
'dist/assets/i18n/en.json',
|
||||
'index.js',
|
||||
'node_modules/@babel/runtime/helpers/arrayLikeToArray.js',
|
||||
'node_modules/@babel/runtime/helpers/arrayWithHoles.js',
|
||||
'node_modules/@babel/runtime/helpers/arrayWithoutHoles.js',
|
||||
'node_modules/@babel/runtime/helpers/assertThisInitialized.js',
|
||||
|
|
@ -210,6 +212,7 @@ module.exports = [
|
|||
'node_modules/@babel/runtime/helpers/interopRequireDefault.js',
|
||||
'node_modules/@babel/runtime/helpers/interopRequireWildcard.js',
|
||||
'node_modules/@babel/runtime/helpers/isNativeFunction.js',
|
||||
'node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js',
|
||||
'node_modules/@babel/runtime/helpers/iterableToArray.js',
|
||||
'node_modules/@babel/runtime/helpers/iterableToArrayLimit.js',
|
||||
'node_modules/@babel/runtime/helpers/nonIterableRest.js',
|
||||
|
|
@ -222,6 +225,7 @@ module.exports = [
|
|||
'node_modules/@babel/runtime/helpers/superPropBase.js',
|
||||
'node_modules/@babel/runtime/helpers/toConsumableArray.js',
|
||||
'node_modules/@babel/runtime/helpers/typeof.js',
|
||||
'node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js',
|
||||
'node_modules/@babel/runtime/helpers/wrapNativeSuper.js',
|
||||
'node_modules/@babel/runtime/regenerator/index.js',
|
||||
'node_modules/@react-native-community/async-storage/lib/AsyncStorage.js',
|
||||
|
|
@ -236,17 +240,18 @@ module.exports = [
|
|||
'node_modules/@react-native-community/netinfo/src/internal/state.ts',
|
||||
'node_modules/@react-native-community/netinfo/src/internal/types.ts',
|
||||
'node_modules/@react-native-community/netinfo/src/internal/utils.ts',
|
||||
'node_modules/anser/lib/index.js',
|
||||
'node_modules/base-64/base64.js',
|
||||
'node_modules/base64-js/index.js',
|
||||
'node_modules/buffer/index.js',
|
||||
'node_modules/clone/clone.js',
|
||||
'node_modules/color-convert/conversions.js',
|
||||
'node_modules/color-convert/index.js',
|
||||
'node_modules/color-convert/route.js',
|
||||
'node_modules/color-name/index.js',
|
||||
'node_modules/color-string/index.js',
|
||||
'node_modules/color/index.js',
|
||||
'node_modules/component-emitter/index.js',
|
||||
'node_modules/create-react-class/factory.js',
|
||||
'node_modules/create-react-class/index.js',
|
||||
'node_modules/create-react-class/node_modules/fbjs/lib/emptyFunction.js',
|
||||
'node_modules/create-react-class/node_modules/fbjs/lib/emptyObject.js',
|
||||
'node_modules/create-react-class/node_modules/fbjs/lib/invariant.js',
|
||||
'node_modules/create-react-class/node_modules/fbjs/lib/warning.js',
|
||||
'node_modules/deepmerge/dist/cjs.js',
|
||||
'node_modules/event-target-shim/dist/event-target-shim.js',
|
||||
'node_modules/eventemitter3/index.js',
|
||||
|
|
@ -360,9 +365,12 @@ module.exports = [
|
|||
'node_modules/lodash/_baseMatchesProperty.js',
|
||||
'node_modules/lodash/_baseMerge.js',
|
||||
'node_modules/lodash/_baseMergeDeep.js',
|
||||
'node_modules/lodash/_basePick.js',
|
||||
'node_modules/lodash/_basePickBy.js',
|
||||
'node_modules/lodash/_baseProperty.js',
|
||||
'node_modules/lodash/_basePropertyDeep.js',
|
||||
'node_modules/lodash/_baseRest.js',
|
||||
'node_modules/lodash/_baseSet.js',
|
||||
'node_modules/lodash/_baseSetToString.js',
|
||||
'node_modules/lodash/_baseSlice.js',
|
||||
'node_modules/lodash/_baseTimes.js',
|
||||
|
|
@ -388,10 +396,12 @@ module.exports = [
|
|||
'node_modules/lodash/_createBaseEach.js',
|
||||
'node_modules/lodash/_createBaseFor.js',
|
||||
'node_modules/lodash/_createSet.js',
|
||||
'node_modules/lodash/_customOmitClone.js',
|
||||
'node_modules/lodash/_defineProperty.js',
|
||||
'node_modules/lodash/_equalArrays.js',
|
||||
'node_modules/lodash/_equalByTag.js',
|
||||
'node_modules/lodash/_equalObjects.js',
|
||||
'node_modules/lodash/_flatRest.js',
|
||||
'node_modules/lodash/_freeGlobal.js',
|
||||
'node_modules/lodash/_getAllKeys.js',
|
||||
'node_modules/lodash/_getAllKeysIn.js',
|
||||
|
|
@ -464,6 +474,7 @@ module.exports = [
|
|||
'node_modules/lodash/difference.js',
|
||||
'node_modules/lodash/endsWith.js',
|
||||
'node_modules/lodash/eq.js',
|
||||
'node_modules/lodash/flatten.js',
|
||||
'node_modules/lodash/forEach.js',
|
||||
'node_modules/lodash/get.js',
|
||||
'node_modules/lodash/hasIn.js',
|
||||
|
|
@ -494,9 +505,12 @@ module.exports = [
|
|||
'node_modules/lodash/memoize.js',
|
||||
'node_modules/lodash/merge.js',
|
||||
'node_modules/lodash/noop.js',
|
||||
'node_modules/lodash/omit.js',
|
||||
'node_modules/lodash/pick.js',
|
||||
'node_modules/lodash/property.js',
|
||||
'node_modules/lodash/stubArray.js',
|
||||
'node_modules/lodash/stubFalse.js',
|
||||
'node_modules/lodash/times.js',
|
||||
'node_modules/lodash/toFinite.js',
|
||||
'node_modules/lodash/toInteger.js',
|
||||
'node_modules/lodash/toNumber.js',
|
||||
|
|
@ -506,8 +520,6 @@ module.exports = [
|
|||
'node_modules/lodash/uniqueId.js',
|
||||
'node_modules/lodash/unset.js',
|
||||
'node_modules/metro/src/lib/bundle-modules/HMRClient.js',
|
||||
'node_modules/metro/src/lib/bundle-modules/WebSocketHMRClient.js',
|
||||
'node_modules/metro/src/lib/bundle-modules/injectUpdate.js',
|
||||
'node_modules/moment-timezone/data/packed/latest.json',
|
||||
'node_modules/moment-timezone/index.js',
|
||||
'node_modules/moment-timezone/moment-timezone.js',
|
||||
|
|
@ -628,7 +640,6 @@ module.exports = [
|
|||
'node_modules/react-native/Libraries/Blob/NativeBlobModule.js',
|
||||
'node_modules/react-native/Libraries/BugReporting/BugReporting.js',
|
||||
'node_modules/react-native/Libraries/BugReporting/NativeBugReporting.js',
|
||||
'node_modules/react-native/Libraries/Color/normalizeColor.js',
|
||||
'node_modules/react-native/Libraries/Components/AppleTV/NativeTVNavigationEventEmitter.js',
|
||||
'node_modules/react-native/Libraries/Components/AppleTV/TVEventHandler.js',
|
||||
'node_modules/react-native/Libraries/Components/Keyboard/Keyboard.js',
|
||||
|
|
@ -638,20 +649,29 @@ module.exports = [
|
|||
'node_modules/react-native/Libraries/Components/RefreshControl/RefreshControl.js',
|
||||
'node_modules/react-native/Libraries/Components/SafeAreaView/SafeAreaView.js',
|
||||
'node_modules/react-native/Libraries/Components/ScrollResponder.js',
|
||||
'node_modules/react-native/Libraries/Components/ScrollView/AndroidHorizontalScrollContentViewNativeComponent.js',
|
||||
'node_modules/react-native/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js',
|
||||
'node_modules/react-native/Libraries/Components/ScrollView/ScrollContentViewNativeComponent.js',
|
||||
'node_modules/react-native/Libraries/Components/ScrollView/ScrollView.js',
|
||||
'node_modules/react-native/Libraries/Components/ScrollView/ScrollViewCommands.js',
|
||||
'node_modules/react-native/Libraries/Components/ScrollView/ScrollViewNativeComponent.js',
|
||||
'node_modules/react-native/Libraries/Components/ScrollView/ScrollViewStickyHeader.js',
|
||||
'node_modules/react-native/Libraries/Components/ScrollView/ScrollViewViewConfig.js',
|
||||
'node_modules/react-native/Libraries/Components/ScrollView/processDecelerationRate.js',
|
||||
'node_modules/react-native/Libraries/Components/Sound/NativeSoundManager.js',
|
||||
'node_modules/react-native/Libraries/Components/Sound/SoundManager.js',
|
||||
'node_modules/react-native/Libraries/Components/StatusBar/NativeStatusBarManagerAndroid.js',
|
||||
'node_modules/react-native/Libraries/Components/StatusBar/NativeStatusBarManagerIOS.js',
|
||||
'node_modules/react-native/Libraries/Components/StatusBar/StatusBar.js',
|
||||
'node_modules/react-native/Libraries/Components/TextInput/TextInputState.js',
|
||||
'node_modules/react-native/Libraries/Components/Touchable/BoundingDimensions.js',
|
||||
'node_modules/react-native/Libraries/Components/Touchable/PooledClass.js',
|
||||
'node_modules/react-native/Libraries/Components/Touchable/Position.js',
|
||||
'node_modules/react-native/Libraries/Components/Touchable/Touchable.js',
|
||||
'node_modules/react-native/Libraries/Components/Touchable/TouchableHighlight.js',
|
||||
'node_modules/react-native/Libraries/Components/Touchable/TouchableNativeFeedback.android.js',
|
||||
'node_modules/react-native/Libraries/Components/Touchable/TouchableNativeFeedback.js',
|
||||
'node_modules/react-native/Libraries/Components/Touchable/TouchableOpacity.js',
|
||||
'node_modules/react-native/Libraries/Components/Touchable/TouchableWithoutFeedback.js',
|
||||
'node_modules/react-native/Libraries/Components/Touchable/ensurePositiveDelayProps.js',
|
||||
'node_modules/react-native/Libraries/Components/View/PlatformViewPropTypes.android.js',
|
||||
'node_modules/react-native/Libraries/Components/View/ReactNativeStyleAttributes.js',
|
||||
'node_modules/react-native/Libraries/Components/View/ReactNativeViewAttributes.js',
|
||||
'node_modules/react-native/Libraries/Components/View/ReactNativeViewViewConfig.js',
|
||||
|
|
@ -673,7 +693,6 @@ module.exports = [
|
|||
'node_modules/react-native/Libraries/Core/setUpErrorHandling.js',
|
||||
'node_modules/react-native/Libraries/Core/setUpGlobals.js',
|
||||
'node_modules/react-native/Libraries/Core/setUpNavigator.js',
|
||||
'node_modules/react-native/Libraries/Core/setUpReactRefresh.js',
|
||||
'node_modules/react-native/Libraries/Core/setUpRegeneratorRuntime.js',
|
||||
'node_modules/react-native/Libraries/Core/setUpSegmentFetcher.js',
|
||||
'node_modules/react-native/Libraries/Core/setUpSystrace.js',
|
||||
|
|
@ -695,11 +714,13 @@ module.exports = [
|
|||
'node_modules/react-native/Libraries/EventEmitter/NativeEventEmitter.js',
|
||||
'node_modules/react-native/Libraries/EventEmitter/RCTDeviceEventEmitter.js',
|
||||
'node_modules/react-native/Libraries/EventEmitter/RCTEventEmitter.js',
|
||||
'node_modules/react-native/Libraries/EventEmitter/RCTNativeAppEventEmitter.js',
|
||||
'node_modules/react-native/Libraries/Image/AssetRegistry.js',
|
||||
'node_modules/react-native/Libraries/Image/AssetSourceResolver.js',
|
||||
'node_modules/react-native/Libraries/Image/Image.android.js',
|
||||
'node_modules/react-native/Libraries/Image/ImageBackground.js',
|
||||
'node_modules/react-native/Libraries/Image/ImageViewNativeComponent.js',
|
||||
'node_modules/react-native/Libraries/Image/NativeImageLoaderAndroid.js',
|
||||
'node_modules/react-native/Libraries/Image/TextInlineImageNativeComponent.js',
|
||||
'node_modules/react-native/Libraries/Image/assetPathUtils.js',
|
||||
'node_modules/react-native/Libraries/Image/resolveAssetSource.js',
|
||||
|
|
@ -721,7 +742,6 @@ module.exports = [
|
|||
'node_modules/react-native/Libraries/Lists/VirtualizedList.js',
|
||||
'node_modules/react-native/Libraries/NativeModules/specs/NativeDevSettings.js',
|
||||
'node_modules/react-native/Libraries/NativeModules/specs/NativeDeviceEventManager.js',
|
||||
'node_modules/react-native/Libraries/NativeModules/specs/NativeRedBox.js',
|
||||
'node_modules/react-native/Libraries/NativeModules/specs/NativeSourceCode.js',
|
||||
'node_modules/react-native/Libraries/Network/FormData.js',
|
||||
'node_modules/react-native/Libraries/Network/NativeNetworkingAndroid.js',
|
||||
|
|
@ -729,6 +749,9 @@ module.exports = [
|
|||
'node_modules/react-native/Libraries/Network/XMLHttpRequest.js',
|
||||
'node_modules/react-native/Libraries/Network/convertRequestBody.js',
|
||||
'node_modules/react-native/Libraries/Performance/Systrace.js',
|
||||
'node_modules/react-native/Libraries/Pressability/HoverState.js',
|
||||
'node_modules/react-native/Libraries/Pressability/Pressability.js',
|
||||
'node_modules/react-native/Libraries/Pressability/PressabilityDebug.js',
|
||||
'node_modules/react-native/Libraries/Promise.js',
|
||||
'node_modules/react-native/Libraries/ReactNative/AppContainer.js',
|
||||
'node_modules/react-native/Libraries/ReactNative/AppRegistry.js',
|
||||
|
|
@ -738,7 +761,6 @@ module.exports = [
|
|||
'node_modules/react-native/Libraries/ReactNative/NativeI18nManager.js',
|
||||
'node_modules/react-native/Libraries/ReactNative/NativeUIManager.js',
|
||||
'node_modules/react-native/Libraries/ReactNative/PaperUIManager.js',
|
||||
'node_modules/react-native/Libraries/ReactNative/ReactFabricIndicator.js',
|
||||
'node_modules/react-native/Libraries/ReactNative/RootTagContext.js',
|
||||
'node_modules/react-native/Libraries/ReactNative/UIManager.js',
|
||||
'node_modules/react-native/Libraries/ReactNative/UIManagerProperties.js',
|
||||
|
|
@ -755,6 +777,7 @@ module.exports = [
|
|||
'node_modules/react-native/Libraries/StyleSheet/StyleSheet.js',
|
||||
'node_modules/react-native/Libraries/StyleSheet/StyleSheetValidation.js',
|
||||
'node_modules/react-native/Libraries/StyleSheet/flattenStyle.js',
|
||||
'node_modules/react-native/Libraries/StyleSheet/normalizeColor.js',
|
||||
'node_modules/react-native/Libraries/StyleSheet/processColor.js',
|
||||
'node_modules/react-native/Libraries/StyleSheet/processColorArray.js',
|
||||
'node_modules/react-native/Libraries/StyleSheet/processTransform.js',
|
||||
|
|
@ -777,6 +800,7 @@ module.exports = [
|
|||
'node_modules/react-native/Libraries/Utilities/RCTLog.js',
|
||||
'node_modules/react-native/Libraries/Utilities/SceneTracker.js',
|
||||
'node_modules/react-native/Libraries/Utilities/binaryToBase64.js',
|
||||
'node_modules/react-native/Libraries/Utilities/codegenNativeCommands.js',
|
||||
'node_modules/react-native/Libraries/Utilities/codegenNativeComponent.js',
|
||||
'node_modules/react-native/Libraries/Utilities/createPerformanceLogger.js',
|
||||
'node_modules/react-native/Libraries/Utilities/defineLazyObjectProperty.js',
|
||||
|
|
@ -790,21 +814,19 @@ module.exports = [
|
|||
'node_modules/react-native/Libraries/Utilities/infoLog.js',
|
||||
'node_modules/react-native/Libraries/Utilities/logError.js',
|
||||
'node_modules/react-native/Libraries/Utilities/registerGeneratedViewConfig.js',
|
||||
'node_modules/react-native/Libraries/Utilities/setAndForwardRef.js',
|
||||
'node_modules/react-native/Libraries/Utilities/stringifySafe.js',
|
||||
'node_modules/react-native/Libraries/Utilities/verifyComponentAttributeEquivalence.js',
|
||||
'node_modules/react-native/Libraries/Utilities/warnOnce.js',
|
||||
'node_modules/react-native/Libraries/WebSocket/NativeWebSocketModule.js',
|
||||
'node_modules/react-native/Libraries/WebSocket/WebSocket.js',
|
||||
'node_modules/react-native/Libraries/WebSocket/WebSocketEvent.js',
|
||||
'node_modules/react-native/Libraries/react-native/react-native-implementation.js',
|
||||
'node_modules/react-native/Libraries/vendor/core/ErrorUtils.js',
|
||||
'node_modules/react-native/Libraries/vendor/core/merge.js',
|
||||
'node_modules/react-native/Libraries/vendor/core/mergeHelpers.js',
|
||||
'node_modules/react-native/Libraries/vendor/core/mergeInto.js',
|
||||
'node_modules/react-native/Libraries/vendor/emitter/EmitterSubscription.js',
|
||||
'node_modules/react-native/Libraries/vendor/emitter/EventEmitter.js',
|
||||
'node_modules/react-native/Libraries/vendor/emitter/EventSubscription.js',
|
||||
'node_modules/react-native/Libraries/vendor/emitter/EventSubscriptionVendor.js',
|
||||
'node_modules/react-native/index.js',
|
||||
'node_modules/react-redux/lib/components/Context.js',
|
||||
'node_modules/react-redux/lib/components/Provider.js',
|
||||
'node_modules/react-redux/lib/components/connectAdvanced.js',
|
||||
|
|
@ -911,6 +933,7 @@ module.exports = [
|
|||
'node_modules/semver/ranges/valid.js',
|
||||
'node_modules/serialize-error/index.js',
|
||||
'node_modules/shallow-equals/index.js',
|
||||
'node_modules/simple-swizzle/index.js',
|
||||
'node_modules/stacktrace-parser/dist/stack-trace-parser.cjs.js',
|
||||
'node_modules/symbol-observable/lib/index.js',
|
||||
'node_modules/symbol-observable/lib/ponyfill.js',
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ module.exports = [
|
|||
'./node_modules/app/constants/list.js',
|
||||
'./node_modules/app/constants/navigation.js',
|
||||
'./node_modules/app/constants/post_textbox.js',
|
||||
'./node_modules/app/constants/types.js',
|
||||
'./node_modules/app/constants/view.js',
|
||||
'./node_modules/app/constants/websocket.ts',
|
||||
'./node_modules/app/i18n/index.js',
|
||||
|
|
@ -193,6 +194,7 @@ module.exports = [
|
|||
'./node_modules/app/utils/time_tracker.js',
|
||||
'./node_modules/app/utils/timezone.js',
|
||||
'./node_modules/index.js',
|
||||
'./node_modules/node_modules/@babel/runtime/helpers/arrayLikeToArray.js',
|
||||
'./node_modules/node_modules/@babel/runtime/helpers/arrayWithHoles.js',
|
||||
'./node_modules/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js',
|
||||
'./node_modules/node_modules/@babel/runtime/helpers/assertThisInitialized.js',
|
||||
|
|
@ -207,6 +209,7 @@ module.exports = [
|
|||
'./node_modules/node_modules/@babel/runtime/helpers/interopRequireDefault.js',
|
||||
'./node_modules/node_modules/@babel/runtime/helpers/interopRequireWildcard.js',
|
||||
'./node_modules/node_modules/@babel/runtime/helpers/isNativeFunction.js',
|
||||
'./node_modules/node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js',
|
||||
'./node_modules/node_modules/@babel/runtime/helpers/iterableToArray.js',
|
||||
'./node_modules/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js',
|
||||
'./node_modules/node_modules/@babel/runtime/helpers/nonIterableRest.js',
|
||||
|
|
@ -219,6 +222,7 @@ module.exports = [
|
|||
'./node_modules/node_modules/@babel/runtime/helpers/superPropBase.js',
|
||||
'./node_modules/node_modules/@babel/runtime/helpers/toConsumableArray.js',
|
||||
'./node_modules/node_modules/@babel/runtime/helpers/typeof.js',
|
||||
'./node_modules/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js',
|
||||
'./node_modules/node_modules/@babel/runtime/helpers/wrapNativeSuper.js',
|
||||
'./node_modules/node_modules/@babel/runtime/regenerator/index.js',
|
||||
'./node_modules/node_modules/@react-native-community/async-storage/lib/AsyncStorage.js',
|
||||
|
|
@ -237,13 +241,13 @@ module.exports = [
|
|||
'./node_modules/node_modules/base64-js/index.js',
|
||||
'./node_modules/node_modules/buffer/index.js',
|
||||
'./node_modules/node_modules/clone/clone.js',
|
||||
'./node_modules/node_modules/color-convert/conversions.js',
|
||||
'./node_modules/node_modules/color-convert/index.js',
|
||||
'./node_modules/node_modules/color-convert/route.js',
|
||||
'./node_modules/node_modules/color-name/index.js',
|
||||
'./node_modules/node_modules/color-string/index.js',
|
||||
'./node_modules/node_modules/color/index.js',
|
||||
'./node_modules/node_modules/component-emitter/index.js',
|
||||
'./node_modules/node_modules/create-react-class/factory.js',
|
||||
'./node_modules/node_modules/create-react-class/index.js',
|
||||
'./node_modules/node_modules/create-react-class/node_modules/fbjs/lib/emptyFunction.js',
|
||||
'./node_modules/node_modules/create-react-class/node_modules/fbjs/lib/emptyObject.js',
|
||||
'./node_modules/node_modules/create-react-class/node_modules/fbjs/lib/invariant.js',
|
||||
'./node_modules/node_modules/create-react-class/node_modules/fbjs/lib/warning.js',
|
||||
'./node_modules/node_modules/deepmerge/dist/cjs.js',
|
||||
'./node_modules/node_modules/event-target-shim/dist/event-target-shim.js',
|
||||
'./node_modules/node_modules/eventemitter3/index.js',
|
||||
|
|
@ -357,9 +361,12 @@ module.exports = [
|
|||
'./node_modules/node_modules/lodash/_baseMatchesProperty.js',
|
||||
'./node_modules/node_modules/lodash/_baseMerge.js',
|
||||
'./node_modules/node_modules/lodash/_baseMergeDeep.js',
|
||||
'./node_modules/node_modules/lodash/_basePick.js',
|
||||
'./node_modules/node_modules/lodash/_basePickBy.js',
|
||||
'./node_modules/node_modules/lodash/_baseProperty.js',
|
||||
'./node_modules/node_modules/lodash/_basePropertyDeep.js',
|
||||
'./node_modules/node_modules/lodash/_baseRest.js',
|
||||
'./node_modules/node_modules/lodash/_baseSet.js',
|
||||
'./node_modules/node_modules/lodash/_baseSetToString.js',
|
||||
'./node_modules/node_modules/lodash/_baseSlice.js',
|
||||
'./node_modules/node_modules/lodash/_baseTimes.js',
|
||||
|
|
@ -385,10 +392,12 @@ module.exports = [
|
|||
'./node_modules/node_modules/lodash/_createBaseEach.js',
|
||||
'./node_modules/node_modules/lodash/_createBaseFor.js',
|
||||
'./node_modules/node_modules/lodash/_createSet.js',
|
||||
'./node_modules/node_modules/lodash/_customOmitClone.js',
|
||||
'./node_modules/node_modules/lodash/_defineProperty.js',
|
||||
'./node_modules/node_modules/lodash/_equalArrays.js',
|
||||
'./node_modules/node_modules/lodash/_equalByTag.js',
|
||||
'./node_modules/node_modules/lodash/_equalObjects.js',
|
||||
'./node_modules/node_modules/lodash/_flatRest.js',
|
||||
'./node_modules/node_modules/lodash/_freeGlobal.js',
|
||||
'./node_modules/node_modules/lodash/_getAllKeys.js',
|
||||
'./node_modules/node_modules/lodash/_getAllKeysIn.js',
|
||||
|
|
@ -461,6 +470,7 @@ module.exports = [
|
|||
'./node_modules/node_modules/lodash/difference.js',
|
||||
'./node_modules/node_modules/lodash/endsWith.js',
|
||||
'./node_modules/node_modules/lodash/eq.js',
|
||||
'./node_modules/node_modules/lodash/flatten.js',
|
||||
'./node_modules/node_modules/lodash/forEach.js',
|
||||
'./node_modules/node_modules/lodash/get.js',
|
||||
'./node_modules/node_modules/lodash/hasIn.js',
|
||||
|
|
@ -491,9 +501,12 @@ module.exports = [
|
|||
'./node_modules/node_modules/lodash/memoize.js',
|
||||
'./node_modules/node_modules/lodash/merge.js',
|
||||
'./node_modules/node_modules/lodash/noop.js',
|
||||
'./node_modules/node_modules/lodash/omit.js',
|
||||
'./node_modules/node_modules/lodash/pick.js',
|
||||
'./node_modules/node_modules/lodash/property.js',
|
||||
'./node_modules/node_modules/lodash/stubArray.js',
|
||||
'./node_modules/node_modules/lodash/stubFalse.js',
|
||||
'./node_modules/node_modules/lodash/times.js',
|
||||
'./node_modules/node_modules/lodash/toFinite.js',
|
||||
'./node_modules/node_modules/lodash/toInteger.js',
|
||||
'./node_modules/node_modules/lodash/toNumber.js',
|
||||
|
|
@ -503,8 +516,6 @@ module.exports = [
|
|||
'./node_modules/node_modules/lodash/uniqueId.js',
|
||||
'./node_modules/node_modules/lodash/unset.js',
|
||||
'./node_modules/node_modules/metro/src/lib/bundle-modules/HMRClient.js',
|
||||
'./node_modules/node_modules/metro/src/lib/bundle-modules/WebSocketHMRClient.js',
|
||||
'./node_modules/node_modules/metro/src/lib/bundle-modules/injectUpdate.js',
|
||||
'./node_modules/node_modules/moment-timezone/index.js',
|
||||
'./node_modules/node_modules/moment-timezone/moment-timezone.js',
|
||||
'./node_modules/node_modules/moment/moment.js',
|
||||
|
|
@ -624,7 +635,6 @@ module.exports = [
|
|||
'./node_modules/node_modules/react-native/Libraries/Blob/NativeBlobModule.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/BugReporting/BugReporting.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/BugReporting/NativeBugReporting.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Color/normalizeColor.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/AppleTV/NativeTVNavigationEventEmitter.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/AppleTV/TVEventHandler.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/Keyboard/Keyboard.js',
|
||||
|
|
@ -634,20 +644,29 @@ module.exports = [
|
|||
'./node_modules/node_modules/react-native/Libraries/Components/RefreshControl/RefreshControl.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/SafeAreaView/SafeAreaView.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/ScrollResponder.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/ScrollView/AndroidHorizontalScrollContentViewNativeComponent.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/ScrollView/ScrollContentViewNativeComponent.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/ScrollView/ScrollView.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/ScrollView/ScrollViewCommands.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/ScrollView/ScrollViewNativeComponent.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/ScrollView/ScrollViewStickyHeader.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/ScrollView/ScrollViewViewConfig.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/ScrollView/processDecelerationRate.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/Sound/NativeSoundManager.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/Sound/SoundManager.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/StatusBar/NativeStatusBarManagerAndroid.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/StatusBar/NativeStatusBarManagerIOS.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/StatusBar/StatusBar.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/TextInput/TextInputState.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/Touchable/BoundingDimensions.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/Touchable/PooledClass.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/Touchable/Position.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/Touchable/Touchable.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/Touchable/TouchableHighlight.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/Touchable/TouchableNativeFeedback.android.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/Touchable/TouchableNativeFeedback.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/Touchable/TouchableOpacity.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/Touchable/TouchableWithoutFeedback.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/Touchable/ensurePositiveDelayProps.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/View/PlatformViewPropTypes.android.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/View/ReactNativeStyleAttributes.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/View/ReactNativeViewAttributes.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Components/View/ReactNativeViewViewConfig.js',
|
||||
|
|
@ -669,7 +688,6 @@ module.exports = [
|
|||
'./node_modules/node_modules/react-native/Libraries/Core/setUpErrorHandling.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Core/setUpGlobals.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Core/setUpNavigator.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Core/setUpReactRefresh.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Core/setUpRegeneratorRuntime.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Core/setUpSegmentFetcher.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Core/setUpSystrace.js',
|
||||
|
|
@ -691,10 +709,13 @@ module.exports = [
|
|||
'./node_modules/node_modules/react-native/Libraries/EventEmitter/NativeEventEmitter.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/EventEmitter/RCTDeviceEventEmitter.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/EventEmitter/RCTEventEmitter.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/EventEmitter/RCTNativeAppEventEmitter.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Image/AssetRegistry.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Image/AssetSourceResolver.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Image/Image.android.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Image/ImageBackground.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Image/ImageViewNativeComponent.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Image/NativeImageLoaderAndroid.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Image/TextInlineImageNativeComponent.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Image/assetPathUtils.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Image/resolveAssetSource.js',
|
||||
|
|
@ -716,7 +737,6 @@ module.exports = [
|
|||
'./node_modules/node_modules/react-native/Libraries/Lists/VirtualizedList.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/NativeModules/specs/NativeDevSettings.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/NativeModules/specs/NativeDeviceEventManager.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/NativeModules/specs/NativeRedBox.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/NativeModules/specs/NativeSourceCode.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Network/FormData.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Network/NativeNetworkingAndroid.js',
|
||||
|
|
@ -724,6 +744,9 @@ module.exports = [
|
|||
'./node_modules/node_modules/react-native/Libraries/Network/XMLHttpRequest.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Network/convertRequestBody.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Performance/Systrace.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Pressability/HoverState.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Pressability/Pressability.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Pressability/PressabilityDebug.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Promise.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/ReactNative/AppContainer.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/ReactNative/AppRegistry.js',
|
||||
|
|
@ -733,7 +756,6 @@ module.exports = [
|
|||
'./node_modules/node_modules/react-native/Libraries/ReactNative/NativeI18nManager.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/ReactNative/NativeUIManager.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/ReactNative/PaperUIManager.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/ReactNative/ReactFabricIndicator.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/ReactNative/RootTagContext.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/ReactNative/UIManager.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/ReactNative/UIManagerProperties.js',
|
||||
|
|
@ -749,6 +771,7 @@ module.exports = [
|
|||
'./node_modules/node_modules/react-native/Libraries/StyleSheet/StyleSheet.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/StyleSheet/StyleSheetValidation.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/StyleSheet/flattenStyle.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/StyleSheet/normalizeColor.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/StyleSheet/processColor.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/StyleSheet/processColorArray.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/StyleSheet/processTransform.js',
|
||||
|
|
@ -771,6 +794,7 @@ module.exports = [
|
|||
'./node_modules/node_modules/react-native/Libraries/Utilities/RCTLog.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Utilities/SceneTracker.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Utilities/binaryToBase64.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Utilities/codegenNativeCommands.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Utilities/codegenNativeComponent.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Utilities/createPerformanceLogger.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Utilities/defineLazyObjectProperty.js',
|
||||
|
|
@ -784,21 +808,19 @@ module.exports = [
|
|||
'./node_modules/node_modules/react-native/Libraries/Utilities/infoLog.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Utilities/logError.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Utilities/registerGeneratedViewConfig.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Utilities/setAndForwardRef.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Utilities/stringifySafe.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Utilities/verifyComponentAttributeEquivalence.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/Utilities/warnOnce.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/WebSocket/NativeWebSocketModule.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/WebSocket/WebSocket.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/WebSocket/WebSocketEvent.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/react-native/react-native-implementation.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/vendor/core/ErrorUtils.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/vendor/core/merge.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/vendor/core/mergeHelpers.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/vendor/core/mergeInto.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/vendor/emitter/EmitterSubscription.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/vendor/emitter/EventEmitter.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/vendor/emitter/EventSubscription.js',
|
||||
'./node_modules/node_modules/react-native/Libraries/vendor/emitter/EventSubscriptionVendor.js',
|
||||
'./node_modules/node_modules/react-native/index.js',
|
||||
'./node_modules/node_modules/react-redux/lib/components/Context.js',
|
||||
'./node_modules/node_modules/react-redux/lib/components/Provider.js',
|
||||
'./node_modules/node_modules/react-redux/lib/components/connectAdvanced.js',
|
||||
|
|
@ -905,6 +927,7 @@ module.exports = [
|
|||
'./node_modules/node_modules/semver/ranges/valid.js',
|
||||
'./node_modules/node_modules/serialize-error/index.js',
|
||||
'./node_modules/node_modules/shallow-equals/index.js',
|
||||
'./node_modules/node_modules/simple-swizzle/index.js',
|
||||
'./node_modules/node_modules/stacktrace-parser/dist/stack-trace-parser.cjs.js',
|
||||
'./node_modules/node_modules/symbol-observable/lib/index.js',
|
||||
'./node_modules/node_modules/symbol-observable/lib/ponyfill.js',
|
||||
|
|
|
|||
|
|
@ -1,16 +1,50 @@
|
|||
diff --git a/node_modules/react-native/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js b/node_modules/react-native/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js
|
||||
index c14b13e..8ea534f 100644
|
||||
--- a/node_modules/react-native/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js
|
||||
+++ b/node_modules/react-native/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js
|
||||
@@ -564,7 +564,7 @@ export const Commands: NativeCommands = codegenNativeCommands<NativeCommands>({
|
||||
});
|
||||
|
||||
const AndroidTextInputNativeComponent: HostComponent<NativeProps> = requireNativeComponent<NativeProps>(
|
||||
- 'AndroidTextInput',
|
||||
+ 'PasteableTextInputAndroid',
|
||||
);
|
||||
|
||||
export default AndroidTextInputNativeComponent;
|
||||
diff --git a/node_modules/react-native/Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec.h b/node_modules/react-native/Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec.h
|
||||
index bb1c8d2..a0ea89f 100644
|
||||
--- a/node_modules/react-native/Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec.h
|
||||
+++ b/node_modules/react-native/Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec.h
|
||||
@@ -2809,6 +2809,7 @@ namespace JS {
|
||||
namespace NativeWebSocketModule {
|
||||
struct SpecConnectOptions {
|
||||
id<NSObject> _Nullable headers() const;
|
||||
+ NSString *certificate() const;
|
||||
|
||||
SpecConnectOptions(NSDictionary *const v) : _v(v) {}
|
||||
private:
|
||||
@@ -3870,3 +3871,8 @@ inline id<NSObject> _Nullable JS::NativeWebSocketModule::SpecConnectOptions::hea
|
||||
id const p = _v[@"headers"];
|
||||
return p;
|
||||
}
|
||||
+inline NSString *JS::NativeWebSocketModule::SpecConnectOptions::certificate() const
|
||||
+{
|
||||
+ id const p = _v[@"certificate"];
|
||||
+ return p;
|
||||
+}
|
||||
diff --git a/node_modules/react-native/Libraries/Lists/VirtualizedList.js b/node_modules/react-native/Libraries/Lists/VirtualizedList.js
|
||||
index 7dffc17..548e7bb 100644
|
||||
index 5ef712c..d6f9082 100644
|
||||
--- a/node_modules/react-native/Libraries/Lists/VirtualizedList.js
|
||||
+++ b/node_modules/react-native/Libraries/Lists/VirtualizedList.js
|
||||
@@ -8,6 +8,7 @@
|
||||
* @format
|
||||
*/
|
||||
'use strict';
|
||||
@@ -20,6 +20,7 @@ const ScrollView = require('../Components/ScrollView/ScrollView');
|
||||
const StyleSheet = require('../StyleSheet/StyleSheet');
|
||||
const View = require('../Components/View/View');
|
||||
const ViewabilityHelper = require('./ViewabilityHelper');
|
||||
+const Platform = require('../Utilities/Platform');
|
||||
|
||||
const Batchinator = require('../Interaction/Batchinator');
|
||||
const FillRateHelper = require('./FillRateHelper');
|
||||
@@ -1965,7 +1966,7 @@ class VirtualizedCellWrapper extends React.Component<{
|
||||
const flattenStyle = require('../StyleSheet/flattenStyle');
|
||||
const infoLog = require('../Utilities/infoLog');
|
||||
@@ -2100,7 +2101,7 @@ class VirtualizedCellWrapper extends React.Component<{
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
verticallyInverted: {
|
||||
|
|
@ -20,7 +54,7 @@ index 7dffc17..548e7bb 100644
|
|||
horizontallyInverted: {
|
||||
transform: [{scaleX: -1}],
|
||||
diff --git a/node_modules/react-native/Libraries/WebSocket/RCTSRWebSocket.h b/node_modules/react-native/Libraries/WebSocket/RCTSRWebSocket.h
|
||||
index 1b17cff..9efa98e 100644
|
||||
index 1b17cff..70a59b6 100644
|
||||
--- a/node_modules/react-native/Libraries/WebSocket/RCTSRWebSocket.h
|
||||
+++ b/node_modules/react-native/Libraries/WebSocket/RCTSRWebSocket.h
|
||||
@@ -54,13 +54,14 @@ extern NSString *const RCTSRHTTPResponseErrorKey;
|
||||
|
|
@ -39,20 +73,21 @@ index 1b17cff..9efa98e 100644
|
|||
- (instancetype)initWithURLRequest:(NSURLRequest *)request;
|
||||
|
||||
// Some helper constructors.
|
||||
@@ -88,6 +89,8 @@ extern NSString *const RCTSRHTTPResponseErrorKey;
|
||||
@@ -88,6 +89,9 @@ extern NSString *const RCTSRHTTPResponseErrorKey;
|
||||
// Send Data (can be nil) in a ping message.
|
||||
- (void)sendPing:(NSData *)data;
|
||||
|
||||
+// Get the certificate identity from the keyChain by name
|
||||
+- (SecIdentityRef) GetIdentityByName:(NSString *)name;
|
||||
+
|
||||
@end
|
||||
|
||||
#pragma mark - RCTSRWebSocketDelegate
|
||||
diff --git a/node_modules/react-native/Libraries/WebSocket/RCTSRWebSocket.m b/node_modules/react-native/Libraries/WebSocket/RCTSRWebSocket.m
|
||||
index a134d2e..e1d9988 100644
|
||||
index b967c14..e24e926 100644
|
||||
--- a/node_modules/react-native/Libraries/WebSocket/RCTSRWebSocket.m
|
||||
+++ b/node_modules/react-native/Libraries/WebSocket/RCTSRWebSocket.m
|
||||
@@ -231,7 +231,7 @@ @implementation RCTSRWebSocket
|
||||
@@ -228,7 +228,7 @@ @implementation RCTSRWebSocket
|
||||
RCTSRIOConsumerPool *_consumerPool;
|
||||
}
|
||||
|
||||
|
|
@ -61,7 +96,7 @@ index a134d2e..e1d9988 100644
|
|||
{
|
||||
RCTAssertParam(request);
|
||||
|
||||
@@ -241,6 +241,10 @@ - (instancetype)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray<NS
|
||||
@@ -238,6 +238,10 @@ - (instancetype)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray<NS
|
||||
|
||||
_requestedProtocols = [protocols copy];
|
||||
|
||||
|
|
@ -72,16 +107,16 @@ index a134d2e..e1d9988 100644
|
|||
[self _RCTSR_commonInit];
|
||||
}
|
||||
return self;
|
||||
@@ -250,7 +254,7 @@ - (instancetype)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray<NS
|
||||
@@ -247,7 +251,7 @@ - (instancetype)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray<NS
|
||||
|
||||
- (instancetype)initWithURLRequest:(NSURLRequest *)request;
|
||||
- (instancetype)initWithURLRequest:(NSURLRequest *)request
|
||||
{
|
||||
- return [self initWithURLRequest:request protocols:nil];
|
||||
+ return [self initWithURLRequest:request protocols:nil certificate:self.certificate];
|
||||
}
|
||||
|
||||
- (instancetype)initWithURL:(NSURL *)URL;
|
||||
@@ -277,7 +281,7 @@ - (instancetype)initWithURL:(NSURL *)URL protocols:(NSArray<NSString *> *)protoc
|
||||
- (instancetype)initWithURL:(NSURL *)URL
|
||||
@@ -274,7 +278,7 @@ - (instancetype)initWithURL:(NSURL *)URL protocols:(NSArray<NSString *> *)protoc
|
||||
NSArray<NSHTTPCookie *> *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:components.URL];
|
||||
[request setAllHTTPHeaderFields:[NSHTTPCookie requestHeaderFieldsWithCookies:cookies]];
|
||||
}
|
||||
|
|
@ -89,8 +124,8 @@ index a134d2e..e1d9988 100644
|
|||
+ return [self initWithURLRequest:request protocols:protocols certificate:self.certificate];
|
||||
}
|
||||
|
||||
- (void)_RCTSR_commonInit;
|
||||
@@ -347,6 +351,36 @@ - (void)setReadyState:(RCTSRReadyState)aReadyState;
|
||||
- (void)_RCTSR_commonInit
|
||||
@@ -344,6 +348,37 @@ - (void)setReadyState:(RCTSRReadyState)aReadyState
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -124,49 +159,37 @@ index a134d2e..e1d9988 100644
|
|||
+ return nil;
|
||||
+}
|
||||
+
|
||||
- (void)open;
|
||||
+
|
||||
- (void)open
|
||||
{
|
||||
assert(_url);
|
||||
@@ -518,6 +552,24 @@ - (void)_initializeStreams;
|
||||
@@ -515,6 +550,24 @@ - (void)_initializeStreams
|
||||
RCTLogInfo(@"SocketRocket: In debug mode. Allowing connection to any root cert");
|
||||
#endif
|
||||
|
||||
+ if (_certificate) {
|
||||
+ SecIdentityRef identity = [self GetIdentityByName:_certificate];
|
||||
+ if (identity != nil) {
|
||||
+ SecCertificateRef certificate = NULL;
|
||||
+ OSStatus status = SecIdentityCopyCertificate(identity, &certificate);
|
||||
+ if (!status) {
|
||||
+ NSArray *myCerts = [[NSArray alloc] initWithObjects:(__bridge id)identity, (__bridge id)certificate, nil];
|
||||
+ SecIdentityRef identity = [self GetIdentityByName:_certificate];
|
||||
+ if (identity != nil) {
|
||||
+ SecCertificateRef certificate = NULL;
|
||||
+ OSStatus status = SecIdentityCopyCertificate(identity, &certificate);
|
||||
+ if (!status) {
|
||||
+ NSArray *myCerts = [[NSArray alloc] initWithObjects:(__bridge id)identity, (__bridge id)certificate, nil];
|
||||
+
|
||||
+ [SSLOptions setObject:[NSNumber numberWithBool:NO] forKey:(NSString *)kCFStreamSSLValidatesCertificateChain];
|
||||
+ [SSLOptions setObject:[NSString stringWithFormat:@"%@:%d", host, port] forKey:(NSString *)kCFStreamSSLPeerName];
|
||||
+ [SSLOptions setObject:(NSString *)kCFStreamSocketSecurityLevelNegotiatedSSL forKey:(NSString*)kCFStreamSSLLevel];
|
||||
+ [SSLOptions setObject:(NSString *)kCFStreamSocketSecurityLevelNegotiatedSSL forKey:(NSString*)kCFStreamPropertySocketSecurityLevel];
|
||||
+ [SSLOptions setObject:myCerts forKey:(NSString *)kCFStreamSSLCertificates];
|
||||
+ [SSLOptions setObject:[NSNumber numberWithBool:NO] forKey:(NSString *)kCFStreamSSLIsServer];
|
||||
+ }
|
||||
+ [SSLOptions setObject:[NSNumber numberWithBool:NO] forKey:(NSString *)kCFStreamSSLValidatesCertificateChain];
|
||||
+ [SSLOptions setObject:[NSString stringWithFormat:@"%@:%d", host, port] forKey:(NSString *)kCFStreamSSLPeerName];
|
||||
+ [SSLOptions setObject:(NSString *)kCFStreamSocketSecurityLevelNegotiatedSSL forKey:(NSString*)kCFStreamSSLLevel];
|
||||
+ [SSLOptions setObject:(NSString *)kCFStreamSocketSecurityLevelNegotiatedSSL forKey:(NSString*)kCFStreamPropertySocketSecurityLevel];
|
||||
+ [SSLOptions setObject:myCerts forKey:(NSString *)kCFStreamSSLCertificates];
|
||||
+ [SSLOptions setObject:[NSNumber numberWithBool:NO] forKey:(NSString *)kCFStreamSSLIsServer];
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
[_outputStream setProperty:SSLOptions
|
||||
forKey:(__bridge id)kCFStreamPropertySSLSettings];
|
||||
}
|
||||
diff --git a/node_modules/react-native/Libraries/WebSocket/RCTWebSocketModule.m b/node_modules/react-native/Libraries/WebSocket/RCTWebSocketModule.m
|
||||
index d9387c4..93481be 100644
|
||||
--- a/node_modules/react-native/Libraries/WebSocket/RCTWebSocketModule.m
|
||||
+++ b/node_modules/react-native/Libraries/WebSocket/RCTWebSocketModule.m
|
||||
@@ -81,7 +81,7 @@ - (void)invalidate
|
||||
[request addValue:[RCTConvert NSString:value] forHTTPHeaderField:key];
|
||||
}];
|
||||
|
||||
- RCTSRWebSocket *webSocket = [[RCTSRWebSocket alloc] initWithURLRequest:request protocols:protocols];
|
||||
+ RCTSRWebSocket *webSocket = [[RCTSRWebSocket alloc] initWithURLRequest:request protocols:protocols certificate:options[@"certificate"]];
|
||||
[webSocket setDelegateDispatchQueue:_methodQueue];
|
||||
webSocket.delegate = self;
|
||||
webSocket.reactTag = socketID;
|
||||
diff --git a/node_modules/react-native/Libraries/WebSocket/WebSocket.js b/node_modules/react-native/Libraries/WebSocket/WebSocket.js
|
||||
index 35f0757..a0205fc 100644
|
||||
index a1679bd..9445e3e 100644
|
||||
--- a/node_modules/react-native/Libraries/WebSocket/WebSocket.js
|
||||
+++ b/node_modules/react-native/Libraries/WebSocket/WebSocket.js
|
||||
@@ -92,7 +92,7 @@ class WebSocket extends (EventTarget(...WEBSOCKET_EVENTS): any) {
|
||||
|
|
@ -187,63 +210,24 @@ index 35f0757..a0205fc 100644
|
|||
}
|
||||
|
||||
get binaryType(): ?BinaryType {
|
||||
diff --git a/node_modules/react-native/React/Views/ScrollView/RCTScrollView.h b/node_modules/react-native/React/Views/ScrollView/RCTScrollView.h
|
||||
index 55b5e3a..04f45a2 100644
|
||||
--- a/node_modules/react-native/React/Views/ScrollView/RCTScrollView.h
|
||||
+++ b/node_modules/react-native/React/Views/ScrollView/RCTScrollView.h
|
||||
@@ -51,6 +51,7 @@
|
||||
@property (nonatomic, assign) BOOL snapToStart;
|
||||
@property (nonatomic, assign) BOOL snapToEnd;
|
||||
@property (nonatomic, copy) NSString *snapToAlignment;
|
||||
+@property (nonatomic, assign) BOOL inverted;
|
||||
|
||||
// NOTE: currently these event props are only declared so we can export the
|
||||
// event names to JS - we don't call the blocks directly because scroll events
|
||||
diff --git a/node_modules/react-native/React/Views/ScrollView/RCTScrollView.m b/node_modules/react-native/React/Views/ScrollView/RCTScrollView.m
|
||||
index b028f02..93812f8 100644
|
||||
--- a/node_modules/react-native/React/Views/ScrollView/RCTScrollView.m
|
||||
+++ b/node_modules/react-native/React/Views/ScrollView/RCTScrollView.m
|
||||
@@ -953,6 +953,10 @@ - (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
|
||||
return NO;
|
||||
}
|
||||
diff --git a/node_modules/react-native/React/CoreModules/RCTWebSocketModule.mm b/node_modules/react-native/React/CoreModules/RCTWebSocketModule.mm
|
||||
index 06734d3..6d1d5ed 100644
|
||||
--- a/node_modules/react-native/React/CoreModules/RCTWebSocketModule.mm
|
||||
+++ b/node_modules/react-native/React/CoreModules/RCTWebSocketModule.mm
|
||||
@@ -88,7 +88,7 @@ - (void)invalidate
|
||||
}];
|
||||
}
|
||||
+ if(self.inverted) {
|
||||
+ [self scrollToEnd:YES];
|
||||
+ return NO;
|
||||
+ }
|
||||
return YES;
|
||||
}
|
||||
|
||||
diff --git a/node_modules/react-native/React/Views/ScrollView/RCTScrollViewManager.m b/node_modules/react-native/React/Views/ScrollView/RCTScrollViewManager.m
|
||||
index bed6d84..2721fb0 100644
|
||||
--- a/node_modules/react-native/React/Views/ScrollView/RCTScrollViewManager.m
|
||||
+++ b/node_modules/react-native/React/Views/ScrollView/RCTScrollViewManager.m
|
||||
@@ -97,6 +97,7 @@ - (UIView *)view
|
||||
RCT_EXPORT_VIEW_PROPERTY(onScrollEndDrag, RCTDirectEventBlock)
|
||||
RCT_EXPORT_VIEW_PROPERTY(onMomentumScrollBegin, RCTDirectEventBlock)
|
||||
RCT_EXPORT_VIEW_PROPERTY(onMomentumScrollEnd, RCTDirectEventBlock)
|
||||
+RCT_EXPORT_VIEW_PROPERTY(inverted, BOOL)
|
||||
RCT_EXPORT_VIEW_PROPERTY(DEPRECATED_sendUpdatedChildFrames, BOOL)
|
||||
#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000 /* __IPHONE_11_0 */
|
||||
RCT_EXPORT_VIEW_PROPERTY(contentInsetAdjustmentBehavior, UIScrollViewContentInsetAdjustmentBehavior)
|
||||
diff --git a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/AndroidInfoModule.java b/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/AndroidInfoModule.java
|
||||
index ef2ae93..2795802 100644
|
||||
--- a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/AndroidInfoModule.java
|
||||
+++ b/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/AndroidInfoModule.java
|
||||
@@ -92,7 +92,7 @@ public class AndroidInfoModule extends ReactContextBaseJavaModule implements Tur
|
||||
|
||||
private Boolean isRunningScreenshotTest() {
|
||||
try {
|
||||
- Class.forName("android.support.test.rule.ActivityTestRule");
|
||||
+ Class.forName("androidx.test.rule.ActivityTestRule");
|
||||
return true;
|
||||
} catch (ClassNotFoundException ignored) {
|
||||
return false;
|
||||
- RCTSRWebSocket *webSocket = [[RCTSRWebSocket alloc] initWithURLRequest:request protocols:protocols];
|
||||
+ RCTSRWebSocket *webSocket = [[RCTSRWebSocket alloc] initWithURLRequest:request protocols:protocols certificate:options.certificate()];
|
||||
[webSocket setDelegateDispatchQueue:[self methodQueue]];
|
||||
webSocket.delegate = self;
|
||||
webSocket.reactTag = @(socketID);
|
||||
diff --git a/node_modules/react-native/react.gradle b/node_modules/react-native/react.gradle
|
||||
index 14f0746..054f652 100644
|
||||
index d886a9b..8febb59 100644
|
||||
--- a/node_modules/react-native/react.gradle
|
||||
+++ b/node_modules/react-native/react.gradle
|
||||
@@ -116,7 +116,7 @@ afterEvaluate {
|
||||
@@ -143,7 +143,7 @@ afterEvaluate {
|
||||
|
||||
// Set up dev mode
|
||||
def devEnabled = !(config."devDisabledIn${targetName}"
|
||||
|
|
@ -252,7 +236,7 @@ index 14f0746..054f652 100644
|
|||
|
||||
def extraArgs = extraPackagerArgs;
|
||||
|
||||
@@ -141,7 +141,7 @@ afterEvaluate {
|
||||
@@ -163,7 +163,7 @@ afterEvaluate {
|
||||
def hermesFlags;
|
||||
def hbcTempFile = file("${jsBundleFile}.hbc")
|
||||
exec {
|
||||
|
|
@ -261,7 +245,7 @@ index 14f0746..054f652 100644
|
|||
// Can't use ?: since that will also substitute valid empty lists
|
||||
hermesFlags = config.hermesFlagsRelease
|
||||
if (hermesFlags == null) hermesFlags = ["-O", "-output-source-map"]
|
||||
@@ -180,7 +180,7 @@ afterEvaluate {
|
||||
@@ -207,7 +207,7 @@ afterEvaluate {
|
||||
? config."bundleIn${targetName}"
|
||||
: config."bundleIn${variant.buildType.name.capitalize()}" != null
|
||||
? config."bundleIn${variant.buildType.name.capitalize()}"
|
||||
|
|
@ -270,7 +254,7 @@ index 14f0746..054f652 100644
|
|||
}
|
||||
|
||||
// Expose a minimal interface on the application variant and the task itself:
|
||||
@@ -272,7 +272,7 @@ afterEvaluate {
|
||||
@@ -299,7 +299,7 @@ afterEvaluate {
|
||||
// This should really be done by packaging all Hermes releated libs into
|
||||
// two separate HermesDebug and HermesRelease AARs, but until then we'll
|
||||
// kludge it by deleting the .so files out of the /transforms/ directory.
|
||||
|
|
@ -29,18 +29,6 @@ index 260ed81..52b53d8 100644
|
|||
}
|
||||
});
|
||||
}
|
||||
diff --git a/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalStack.java b/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalStack.java
|
||||
index f60119e..4c46e8c 100644
|
||||
--- a/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalStack.java
|
||||
+++ b/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalStack.java
|
||||
@@ -84,6 +84,7 @@ public class ModalStack {
|
||||
|
||||
public void dismissAllModals(ViewController root, Options mergeOptions, CommandListener listener) {
|
||||
if (modals.isEmpty()) {
|
||||
+ listener.onSuccess("");
|
||||
return;
|
||||
}
|
||||
String topModalId = peek().getId();
|
||||
diff --git a/node_modules/react-native-navigation/lib/ios/RNNCommandsHandler.m b/node_modules/react-native-navigation/lib/ios/RNNCommandsHandler.m
|
||||
index ae8be52..8a8dec5 100644
|
||||
--- a/node_modules/react-native-navigation/lib/ios/RNNCommandsHandler.m
|
||||
|
|
@ -1,23 +1,20 @@
|
|||
diff --git a/node_modules/react-native-notifications/android/app/src/main/AndroidManifest.xml b/node_modules/react-native-notifications/android/app/src/main/AndroidManifest.xml
|
||||
index ffef75f..feabe20 100644
|
||||
index 7053040..2a97b04 100644
|
||||
--- a/node_modules/react-native-notifications/android/app/src/main/AndroidManifest.xml
|
||||
+++ b/node_modules/react-native-notifications/android/app/src/main/AndroidManifest.xml
|
||||
@@ -31,7 +31,10 @@
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
<service
|
||||
android:name=".gcm.FcmInstanceIdRefreshHandlerService"
|
||||
android:name=".fcm.FcmInstanceIdRefreshHandlerService"
|
||||
+ android:permission="android.permission.BIND_JOB_SERVICE"
|
||||
android:exported="false" />
|
||||
+
|
||||
+ <receiver android:name="com.wix.reactnativenotifications.core.notification.PushNotificationPublisher" />
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
diff --git a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java
|
||||
index 8fb5f01..d3a1e7a 100644
|
||||
index 7b47aed..200cca8 100644
|
||||
--- a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java
|
||||
+++ b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java
|
||||
@@ -103,12 +103,26 @@ public class RNNotificationsModule extends ReactContextBaseJavaModule implements
|
||||
@@ -99,12 +99,26 @@ public class RNNotificationsModule extends ReactContextBaseJavaModule implements
|
||||
pushNotification.onPostRequest(notificationId);
|
||||
}
|
||||
|
||||
|
|
@ -42,9 +39,9 @@ index 8fb5f01..d3a1e7a 100644
|
|||
+ }
|
||||
+
|
||||
@ReactMethod
|
||||
public void isRegisteredForRemoteNotifications(Promise promise) {
|
||||
boolean hasPermission = NotificationManagerCompat.from(getReactApplicationContext()).areNotificationsEnabled();
|
||||
@@ -119,6 +133,6 @@ public class RNNotificationsModule extends ReactContextBaseJavaModule implements
|
||||
public void cancelDeliveredNotification(String tag, int notificationId) {
|
||||
IPushNotificationsDrawer notificationsDrawer = PushNotificationsDrawer.get(getReactApplicationContext().getApplicationContext());
|
||||
@@ -126,6 +140,6 @@ public class RNNotificationsModule extends ReactContextBaseJavaModule implements
|
||||
final Context appContext = getReactApplicationContext().getApplicationContext();
|
||||
final Intent tokenFetchIntent = new Intent(appContext, FcmInstanceIdRefreshHandlerService.class);
|
||||
tokenFetchIntent.putExtra(extraFlag, true);
|
||||
|
|
@ -175,7 +172,7 @@ index 0d70024..47b962e 100644
|
|||
PushNotificationProps asProps();
|
||||
}
|
||||
diff --git a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java
|
||||
index 5e4e3d2..ec37f87 100644
|
||||
index 524ff07..a9f28e0 100644
|
||||
--- a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java
|
||||
+++ b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java
|
||||
@@ -1,5 +1,6 @@
|
||||
|
|
@ -185,7 +182,7 @@ index 5e4e3d2..ec37f87 100644
|
|||
import android.app.Notification;
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
@@ -20,18 +21,20 @@ import com.wix.reactnativenotifications.core.InitialNotificationHolder;
|
||||
@@ -20,7 +21,9 @@ import com.wix.reactnativenotifications.core.InitialNotificationHolder;
|
||||
import com.wix.reactnativenotifications.core.JsIOHelper;
|
||||
import com.wix.reactnativenotifications.core.NotificationIntentAdapter;
|
||||
import com.wix.reactnativenotifications.core.ProxyService;
|
||||
|
|
@ -195,15 +192,12 @@ index 5e4e3d2..ec37f87 100644
|
|||
import static com.wix.reactnativenotifications.Defs.NOTIFICATION_OPENED_EVENT_NAME;
|
||||
import static com.wix.reactnativenotifications.Defs.NOTIFICATION_RECEIVED_EVENT_NAME;
|
||||
import static com.wix.reactnativenotifications.Defs.NOTIFICATION_RECEIVED_FOREGROUND_EVENT_NAME;
|
||||
|
||||
public class PushNotification implements IPushNotification {
|
||||
|
||||
+ protected PushNotificationProps mNotificationProps;
|
||||
final protected Context mContext;
|
||||
@@ -31,7 +34,7 @@ public class PushNotification implements IPushNotification {
|
||||
final protected AppLifecycleFacade mAppLifecycleFacade;
|
||||
final protected AppLaunchHelper mAppLaunchHelper;
|
||||
final protected JsIOHelper mJsIOHelper;
|
||||
- final protected PushNotificationProps mNotificationProps;
|
||||
+ protected PushNotificationProps mNotificationProps;
|
||||
final protected AppVisibilityListener mAppVisibilityListener = new AppVisibilityListener() {
|
||||
@Override
|
||||
public void onAppVisible() {
|
||||
|
|
@ -249,7 +243,7 @@ index 5e4e3d2..ec37f87 100644
|
|||
@Override
|
||||
public PushNotificationProps asProps() {
|
||||
return mNotificationProps.copy();
|
||||
@@ -140,11 +178,12 @@ public class PushNotification implements IPushNotification {
|
||||
@@ -140,7 +178,9 @@ public class PushNotification implements IPushNotification {
|
||||
}
|
||||
|
||||
protected Notification buildNotification(PendingIntent intent) {
|
||||
|
|
@ -260,13 +254,9 @@ index 5e4e3d2..ec37f87 100644
|
|||
}
|
||||
|
||||
protected Notification.Builder getNotificationBuilder(PendingIntent intent) {
|
||||
-
|
||||
String CHANNEL_ID = "channel_01";
|
||||
String CHANNEL_NAME = "Channel Name";
|
||||
|
||||
diff --git a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotificationPublisher.java b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotificationPublisher.java
|
||||
new file mode 100644
|
||||
index 0000000..5b64593
|
||||
index 0000000..58ff887
|
||||
--- /dev/null
|
||||
+++ b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotificationPublisher.java
|
||||
@@ -0,0 +1,27 @@
|
||||
|
|
@ -297,19 +287,18 @@ index 0000000..5b64593
|
|||
+ pushNotification.onPostScheduledRequest(notificationId);
|
||||
+ }
|
||||
+}
|
||||
\ No newline at end of file
|
||||
diff --git a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/IPushNotificationsDrawer.java b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/IPushNotificationsDrawer.java
|
||||
index 3be3dc1..7027958 100644
|
||||
index e22cd62..48aa1cd 100644
|
||||
--- a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/IPushNotificationsDrawer.java
|
||||
+++ b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/IPushNotificationsDrawer.java
|
||||
@@ -9,4 +9,5 @@ public interface IPushNotificationsDrawer {
|
||||
|
||||
void onNotificationOpened();
|
||||
@@ -11,4 +11,5 @@ public interface IPushNotificationsDrawer {
|
||||
void onNotificationClearRequest(int id);
|
||||
void onNotificationClearRequest(String tag, int id);
|
||||
void onAllNotificationsClearRequest();
|
||||
+ void onCancelAllLocalNotifications();
|
||||
}
|
||||
diff --git a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawer.java b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawer.java
|
||||
index 7b320e1..d95535b 100644
|
||||
index dea6958..2c0f1c7 100644
|
||||
--- a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawer.java
|
||||
+++ b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawer.java
|
||||
@@ -2,10 +2,16 @@ package com.wix.reactnativenotifications.core.notificationdrawer;
|
||||
|
|
@ -329,8 +318,8 @@ index 7b320e1..d95535b 100644
|
|||
|
||||
public class PushNotificationsDrawer implements IPushNotificationsDrawer {
|
||||
|
||||
@@ -60,8 +66,41 @@ public class PushNotificationsDrawer implements IPushNotificationsDrawer {
|
||||
notificationManager.cancel(id);
|
||||
@@ -72,8 +78,41 @@ public class PushNotificationsDrawer implements IPushNotificationsDrawer {
|
||||
notificationManager.cancelAll();
|
||||
}
|
||||
|
||||
+ @Override
|
||||
|
|
@ -371,12 +360,12 @@ index 7b320e1..d95535b 100644
|
|||
+ notificationManager.cancel(Integer.parseInt(notificationId));
|
||||
+ }
|
||||
}
|
||||
diff --git a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/gcm/FcmInstanceIdRefreshHandlerService.java b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/gcm/FcmInstanceIdRefreshHandlerService.java
|
||||
index 8270ad6..3674814 100644
|
||||
--- a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/gcm/FcmInstanceIdRefreshHandlerService.java
|
||||
+++ b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/gcm/FcmInstanceIdRefreshHandlerService.java
|
||||
@@ -1,19 +1,23 @@
|
||||
package com.wix.reactnativenotifications.gcm;
|
||||
diff --git a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/fcm/FcmInstanceIdRefreshHandlerService.java b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/fcm/FcmInstanceIdRefreshHandlerService.java
|
||||
index dd2cc9a..f1ef15a 100644
|
||||
--- a/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/fcm/FcmInstanceIdRefreshHandlerService.java
|
||||
+++ b/node_modules/react-native-notifications/android/app/src/main/java/com/wix/reactnativenotifications/fcm/FcmInstanceIdRefreshHandlerService.java
|
||||
@@ -1,19 +1,22 @@
|
||||
package com.wix.reactnativenotifications.fcm;
|
||||
|
||||
-import android.app.IntentService;
|
||||
+import android.support.annotation.NonNull;
|
||||
|
|
@ -397,18 +386,17 @@ index 8270ad6..3674814 100644
|
|||
+ enqueueWork(context, FcmInstanceIdRefreshHandlerService.class, JOB_ID, work);
|
||||
}
|
||||
|
||||
+
|
||||
@Override
|
||||
- protected void onHandleIntent(Intent intent) {
|
||||
+ protected void onHandleWork(@NonNull Intent intent) {
|
||||
IFcmToken gcmToken = FcmToken.get(this);
|
||||
if (gcmToken == null) {
|
||||
IFcmToken fcmToken = FcmToken.get(this);
|
||||
if (fcmToken == null) {
|
||||
return;
|
||||
diff --git a/node_modules/react-native-notifications/lib/src/index.android.js b/node_modules/react-native-notifications/lib/src/index.android.js
|
||||
index 51376bf..a5d9540 100644
|
||||
index ac2fe5c..18bee18 100644
|
||||
--- a/node_modules/react-native-notifications/lib/src/index.android.js
|
||||
+++ b/node_modules/react-native-notifications/lib/src/index.android.js
|
||||
@@ -67,9 +67,22 @@ export class NotificationsAndroid {
|
||||
@@ -67,10 +67,23 @@ export class NotificationsAndroid {
|
||||
return id;
|
||||
}
|
||||
|
||||
|
|
@ -424,10 +412,11 @@ index 51376bf..a5d9540 100644
|
|||
static cancelLocalNotification(id) {
|
||||
RNNotifications.cancelLocalNotification(id);
|
||||
}
|
||||
+
|
||||
|
||||
+ static cancelAllLocalNotifications() {
|
||||
+ RNNotifications.cancelAllLocalNotifications();
|
||||
+ }
|
||||
}
|
||||
|
||||
export class PendingNotifications {
|
||||
+
|
||||
static cancelDeliveredNotification(tag, id) {
|
||||
RNNotifications.cancelDeliveredNotification(tag, id);
|
||||
}
|
||||
|
|
@ -10,7 +10,7 @@ if [ -n "$jsfiles" ]; then
|
|||
echo "Checking lint for:"
|
||||
for js in $jsfiles; do
|
||||
echo "$js"
|
||||
e=$(node_modules/.bin/eslint --quiet $js)
|
||||
e=$(node_modules/.bin/eslint --quiet --fix $js)
|
||||
if [[ -n "$e" ]]; then
|
||||
echo "$e"
|
||||
echo "ERROR: Check eslint hints."
|
||||
|
|
@ -18,7 +18,12 @@ if [ -n "$jsfiles" ]; then
|
|||
fi
|
||||
done
|
||||
echo "Checking TypeScript"
|
||||
npm run tsc
|
||||
tsce=$(npm run tsc)
|
||||
if [[-n "$tsce"]]; then
|
||||
echo "$tsce"
|
||||
echo "ERROR: Check TSC hints."
|
||||
exit 1 # reject
|
||||
fi
|
||||
fi
|
||||
|
||||
exit 0
|
||||
|
|
|
|||
|
|
@ -620,7 +620,7 @@ export default class ExtensionPost extends PureComponent {
|
|||
return this.renderErrorMessage(error);
|
||||
}
|
||||
|
||||
if (!teamId) {
|
||||
if (!teamId && this.token) {
|
||||
const teamRequired = formatMessage({
|
||||
id: 'mobile.extension.team_required',
|
||||
defaultMessage: 'You must belong to a team before you can share files.',
|
||||
|
|
|
|||
Loading…
Reference in a new issue