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:
Elias Nahum 2020-04-14 16:39:51 -04:00 committed by GitHub
parent 795091983c
commit aaa571db32
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
95 changed files with 3749 additions and 3853 deletions

View file

@ -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,

View file

@ -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
View file

@ -1 +1,4 @@
*.pbxproj -text
# specific for windows script files
*.bat text eol=crlf

View file

@ -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'

View 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());
}
}
}
}

View file

@ -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>

View file

@ -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();
}
}
}
}

View file

@ -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;
}

View file

@ -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;
}
}

View file

@ -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"
}
}
}

View file

@ -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

View file

@ -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
View file

@ -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
View file

@ -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

View file

@ -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)>
`;

View file

@ -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`;

View file

@ -70,6 +70,7 @@ export default class AnnouncementBanner extends PureComponent {
Animated.timing(this.state.bannerHeight, {
toValue: value,
duration: 350,
useNativeDriver: false,
}).start();
};

View file

@ -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>
`;

View file

@ -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();

View file

@ -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>
`;

View file

@ -3,7 +3,7 @@
exports[`PasteableTextInput should render pasteable text input 1`] = `
<TextInput
allowFontScaling={true}
onPaste={[MockFunction]}
onPaste={[Function]}
rejectResponderTermination={true}
underlineColorAndroid="transparent"
>

View file

@ -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;

View file

@ -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();
});
});

View file

@ -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}
/>
);

View file

@ -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"

View file

@ -43,6 +43,7 @@ export default class Typing extends PureComponent {
Animated.timing(this.state.typingHeight, {
toValue: height,
duration,
useNativeDriver: false,
}).start();
}

View file

@ -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 {

View file

@ -30,6 +30,7 @@ export default class RetryBarIndicator extends PureComponent {
Animated.timing(this.state.retryMessageHeight, {
toValue: value,
duration: 350,
useNativeDriver: false,
}).start();
};

View file

@ -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>
`;

View file

@ -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)>
`;

View file

@ -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

View 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();

View file

@ -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,
);
}

View file

@ -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,
);
}

View file

@ -18,7 +18,7 @@ function websocket(state: RequestStatusType = initialRequestState(), action: Gen
GeneralTypes.WEBSOCKET_SUCCESS,
GeneralTypes.WEBSOCKET_FAILURE,
state,
action
action,
);
}

View file

@ -15,7 +15,7 @@ export function handleRequest(
SUCCESS: string,
FAILURE: string,
state: RequestStatusType,
action: GenericAction
action: GenericAction,
): RequestStatusType {
switch (action.type) {
case REQUEST:

View file

@ -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,
);
}

View file

@ -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,
);
}

View file

@ -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,
);
}

View file

@ -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,
);
}

View file

@ -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,
);
}

View file

@ -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;
}
},
);
}

View file

@ -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.

View file

@ -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),
);
}
},
);

View file

@ -33,6 +33,6 @@ export function makeGetFilesForPost() {
const fileInfos = fileIdsForPost.map((id) => allFiles[id]).filter((id) => Boolean(id));
return sortFileInfos(fileInfos, locale);
}
},
);
}

View file

@ -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 => {

View file

@ -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]);
}
},
);

View file

@ -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));
}
},
);

View file

@ -17,6 +17,6 @@ export function makeGetJobsByType(type: JobType): (state: GlobalState) => Array<
getJobsByType,
(jobsByType) => {
return jobsByType[type] || [];
}
},
);
}

View file

@ -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;
}
},
);
};

View file

@ -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) {

View file

@ -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);
}
},
);

View file

@ -12,5 +12,5 @@ export const getCurrentSearchForCurrentTeam = reselect.createSelector(
getCurrentTeamId,
(current, teamId) => {
return current[teamId];
}
},
);

View file

@ -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;
}
},
);
}

View file

@ -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);
}
},
);
}

View file

@ -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.',
);
}

View file

@ -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})`;

View file

@ -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>
`;

View file

@ -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>
`;

View file

@ -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={

View file

@ -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>
`;

View file

@ -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}

View file

@ -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,
},
);
});

View file

@ -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 {

View file

@ -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}

View file

@ -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: {

View file

@ -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>
`;

View file

@ -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();
});

View file

@ -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 {

View file

@ -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>
`;

View file

@ -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`] = `

View file

@ -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"

View file

@ -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>
`;

View file

@ -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>
`;

View file

@ -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);
});

View file

@ -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);
});

View file

@ -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,
});

View file

@ -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>

View file

@ -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 = (

View file

@ -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>

View file

@ -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"]) {

View file

@ -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"

View file

@ -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

View file

@ -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

View file

@ -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

File diff suppressed because it is too large Load diff

View file

@ -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",

View file

@ -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',

View file

@ -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',

View file

@ -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.

View file

@ -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

View file

@ -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);
}

View file

@ -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

View file

@ -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.',