MM-26817 Upgrade to RN 0.63 (#4566)
* Upgrade to RN 0.63 * Bump to RN 0.63.1 * Fix RN patch * Use JSC Intl version * Update android/app/build.gradle Co-authored-by: Miguel Alatzar <migbot@users.noreply.github.com> * Fix Android external storage permission * Fix emoji imageUrl when no server url is present * Patch react-native-image-picker * Allow to post attachment only messages Co-authored-by: Miguel Alatzar <migbot@users.noreply.github.com>
This commit is contained in:
parent
26fa5a5e8f
commit
a99e938e9c
69 changed files with 5015 additions and 2502 deletions
|
|
@ -26,12 +26,13 @@
|
|||
"no-undefined": 0,
|
||||
"react/display-name": [2, { "ignoreTranspilerName": false }],
|
||||
"react/jsx-filename-extension": 0,
|
||||
"@typescript-eslint/camelcase": [
|
||||
2,
|
||||
"camelcase": [
|
||||
0,
|
||||
{
|
||||
"properties": "never"
|
||||
}
|
||||
],
|
||||
"@typescript-eslint/ban-types": 0,
|
||||
"@typescript-eslint/no-non-null-assertion": 0,
|
||||
"@typescript-eslint/no-unused-vars": [
|
||||
2,
|
||||
|
|
|
|||
|
|
@ -71,4 +71,4 @@ untyped-import
|
|||
untyped-type-import
|
||||
|
||||
[version]
|
||||
^0.113.0
|
||||
^0.122.0
|
||||
|
|
|
|||
35
NOTICE.txt
35
NOTICE.txt
|
|
@ -1918,41 +1918,6 @@ SOFTWARE.
|
|||
|
||||
---
|
||||
|
||||
## react-native-keyboard-aware-scroll-view
|
||||
|
||||
This product contains 'react-native-keyboard-aware-scroll-view' by Alvaro Medina Ballester.
|
||||
|
||||
A React Native ScrollView component that resizes when the keyboard appears.
|
||||
|
||||
* HOMEPAGE:
|
||||
* https://github.com/APSL/react-native-keyboard-aware-scroll-view#readme
|
||||
|
||||
* LICENSE: MIT
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 APSL
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## react-native-keyboard-tracking-view
|
||||
|
||||
This product contains a modified version of 'react-native-keyboard-tracking-view' by Artal Druk.
|
||||
|
|
|
|||
|
|
@ -108,8 +108,7 @@ def enableSeparateBuildPerCPUArchitecture = false
|
|||
*/
|
||||
def enableProguardInReleaseBuilds = false
|
||||
|
||||
// Add v8-android - prebuilt libv8android.so into APK
|
||||
def jscFlavor = 'org.chromium:v8-android:+'
|
||||
def jscFlavor = 'org.webkit:android-jsc-intl:+'
|
||||
|
||||
/**
|
||||
* Whether to enable the Hermes VM.
|
||||
|
|
@ -194,14 +193,6 @@ android {
|
|||
targetCompatibility 1.8
|
||||
}
|
||||
|
||||
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"
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
android:theme="@style/AppTheme"
|
||||
android:installLocation="auto"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:requestLegacyExternalStorage="true"
|
||||
>
|
||||
<meta-data android:name="firebase_analytics_collection_deactivated" android:value="true" />
|
||||
<meta-data android:name="android.content.APP_RESTRICTIONS"
|
||||
|
|
|
|||
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
buildscript {
|
||||
ext {
|
||||
buildToolsVersion = "28.0.3"
|
||||
buildToolsVersion = "29.0.2"
|
||||
minSdkVersion = 24
|
||||
compileSdkVersion = 28
|
||||
targetSdkVersion = 28
|
||||
compileSdkVersion = 29
|
||||
targetSdkVersion = 29
|
||||
supportLibVersion = "28.0.0"
|
||||
kotlinVersion = "1.3.61"
|
||||
RNNKotlinVersion = kotlinVersion
|
||||
|
|
@ -18,7 +18,7 @@ buildscript {
|
|||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.5.2'
|
||||
classpath 'com.android.tools.build:gradle:3.5.3'
|
||||
classpath 'com.google.gms:google-services:4.2.0'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
|
||||
|
||||
|
|
@ -48,17 +48,17 @@ allprojects {
|
|||
jcenter()
|
||||
maven {
|
||||
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
|
||||
// url "$rootDir/../node_modules/react-native/android"
|
||||
url("$rootDir/../node_modules/react-native/android")
|
||||
|
||||
// Replace AAR from original RN with AAR from react-native-v8
|
||||
url("$rootDir/../node_modules/react-native-v8/dist")
|
||||
// url("$rootDir/../node_modules/react-native-v8/dist")
|
||||
}
|
||||
maven {
|
||||
// Local Maven repo containing AARs with JSC library built for Android
|
||||
// url "$rootDir/../node_modules/jsc-android/dist"
|
||||
url("$rootDir/../node_modules/jsc-android/dist")
|
||||
|
||||
// prebuilt libv8android.so
|
||||
url("$rootDir/../node_modules/v8-android/dist")
|
||||
// url("$rootDir/../node_modules/v8-android/dist")
|
||||
}
|
||||
maven {
|
||||
url "https://www.jitpack.io"
|
||||
|
|
|
|||
|
|
@ -30,4 +30,4 @@ android.useAndroidX=true
|
|||
android.enableJetifier=true
|
||||
|
||||
# Version of flipper SDK to use with React Native
|
||||
FLIPPER_VERSION=0.33.1
|
||||
FLIPPER_VERSION=0.37.0
|
||||
|
|
|
|||
BIN
android/gradle/wrapper/gradle-wrapper.jar
vendored
BIN
android/gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
|
|
@ -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-6.0.1-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-all.zip
|
||||
|
|
|
|||
29
android/gradlew
vendored
29
android/gradlew
vendored
|
|
@ -154,19 +154,19 @@ if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
|||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=$((i+1))
|
||||
i=`expr $i + 1`
|
||||
done
|
||||
case $i in
|
||||
(0) set -- ;;
|
||||
(1) set -- "$args0" ;;
|
||||
(2) set -- "$args0" "$args1" ;;
|
||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
0) set -- ;;
|
||||
1) set -- "$args0" ;;
|
||||
2) set -- "$args0" "$args1" ;;
|
||||
3) set -- "$args0" "$args1" "$args2" ;;
|
||||
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
|
|
@ -175,14 +175,9 @@ save () {
|
|||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
}
|
||||
APP_ARGS=$(save "$@")
|
||||
APP_ARGS=`save "$@"`
|
||||
|
||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||
|
||||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
|
||||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
||||
cd "$(dirname "$0")"
|
||||
fi
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
27
android/gradlew.bat
vendored
27
android/gradlew.bat
vendored
|
|
@ -13,64 +13,91 @@
|
|||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "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
|
||||
|
|
@ -54,7 +54,6 @@ const mockRolesRequest = (rolesToLoad = []) => {
|
|||
|
||||
const mockTeamMemberRequest = (tm = []) => {
|
||||
nock(Client4.getUserRoute('me')).
|
||||
log(console.log).
|
||||
get('/teams/members').
|
||||
reply(200, tm);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,26 +1,3 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`FormattedTime should render correctly 1`] = `
|
||||
<View
|
||||
pointerEvents="box-none"
|
||||
style={
|
||||
Object {
|
||||
"flex": 1,
|
||||
}
|
||||
}
|
||||
>
|
||||
<View
|
||||
collapsable={true}
|
||||
pointerEvents="box-none"
|
||||
style={
|
||||
Object {
|
||||
"flex": 1,
|
||||
}
|
||||
}
|
||||
>
|
||||
<Text>
|
||||
7:02 PM
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
`;
|
||||
exports[`FormattedTime should render correctly 1`] = `undefined`;
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ exports[`AnnouncementBanner should match snapshot 1`] = `
|
|||
]
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Array [
|
||||
|
|
@ -57,7 +57,7 @@ exports[`AnnouncementBanner should match snapshot 1`] = `
|
|||
name="info"
|
||||
size={16}
|
||||
/>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
`;
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@
|
|||
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import {Clipboard, Text} from 'react-native';
|
||||
import {Text} from 'react-native';
|
||||
import Clipboard from '@react-native-community/clipboard';
|
||||
import {intlShape} from 'react-intl';
|
||||
import MaterialIcon from 'react-native-vector-icons/MaterialIcons';
|
||||
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ export default class AtMention extends PureComponent {
|
|||
|
||||
// Not invoked, render nothing.
|
||||
if (matchTerm === null) {
|
||||
this.props.onResultCountChange(0);
|
||||
this.setState({
|
||||
mentionComplete: false,
|
||||
sections: [],
|
||||
|
|
|
|||
|
|
@ -12,10 +12,6 @@ describe('ChannelLoader', () => {
|
|||
const baseProps = {
|
||||
channelIsLoading: true,
|
||||
theme: Preferences.THEMES.default,
|
||||
actions: {
|
||||
handleSelectChannel: jest.fn(),
|
||||
setChannelLoading: jest.fn(),
|
||||
},
|
||||
isLandscape: false,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -5,20 +5,18 @@ exports[`EditChannelInfo should match snapshot 1`] = `
|
|||
<Connect(StatusBar) />
|
||||
<KeyboardAwareScrollView
|
||||
enableAutomaticScroll={true}
|
||||
enableOnAndroid={false}
|
||||
enableResetScrollToCoords={true}
|
||||
extraHeight={75}
|
||||
extraScrollHeight={0}
|
||||
keyboardOpeningTime={250}
|
||||
getTextInputRefs={[Function]}
|
||||
keyboardShouldPersistTaps="always"
|
||||
onKeyboardDidHide={[Function]}
|
||||
onKeyboardDidShow={[Function]}
|
||||
scrollToBottomOnKBShow={false}
|
||||
scrollToInputAdditionalOffset={75}
|
||||
startScrolledToBottom={false}
|
||||
style={
|
||||
Object {
|
||||
"flex": 1,
|
||||
}
|
||||
}
|
||||
viewIsInsideTabBar={false}
|
||||
>
|
||||
<TouchableWithoutFeedback
|
||||
onPress={[Function]}
|
||||
|
|
@ -283,14 +281,6 @@ exports[`EditChannelInfo should match snapshot 1`] = `
|
|||
value="header"
|
||||
/>
|
||||
</View>
|
||||
<Connect(Autocomplete)
|
||||
cursorPosition={6}
|
||||
expandDown={true}
|
||||
maxHeight={200}
|
||||
nestedScrollEnabled={true}
|
||||
onChangeText={[Function]}
|
||||
value="header"
|
||||
/>
|
||||
<View
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -319,5 +309,20 @@ exports[`EditChannelInfo should match snapshot 1`] = `
|
|||
</View>
|
||||
</TouchableWithoutFeedback>
|
||||
</KeyboardAwareScrollView>
|
||||
<KeyboardTrackingView
|
||||
style={
|
||||
Object {
|
||||
"justifyContent": "flex-end",
|
||||
}
|
||||
}
|
||||
>
|
||||
<Connect(Autocomplete)
|
||||
cursorPosition={6}
|
||||
maxHeight={200}
|
||||
nestedScrollEnabled={true}
|
||||
onChangeText={[Function]}
|
||||
value="header"
|
||||
/>
|
||||
</KeyboardTrackingView>
|
||||
</React.Fragment>
|
||||
`;
|
||||
|
|
|
|||
|
|
@ -8,7 +8,8 @@ import {
|
|||
TouchableWithoutFeedback,
|
||||
View,
|
||||
} from 'react-native';
|
||||
import {KeyboardAwareScrollView} from 'react-native-keyboard-aware-scroll-view';
|
||||
import {KeyboardAwareScrollView} from 'react-native-keyboard-aware-scrollview';
|
||||
import {KeyboardTrackingView} from 'react-native-keyboard-tracking-view';
|
||||
|
||||
import {General} from '@mm-redux/constants';
|
||||
|
||||
|
|
@ -91,7 +92,7 @@ export default class EditChannelInfo extends PureComponent {
|
|||
}
|
||||
|
||||
if (this.scroll?.current) {
|
||||
this.scroll.current.scrollToPosition(0, 0, true);
|
||||
this.scroll.current.scrollTo({x: 0, y: 0, animated: true});
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -183,7 +184,7 @@ export default class EditChannelInfo extends PureComponent {
|
|||
|
||||
scrollHeaderToTop = () => {
|
||||
if (this.scroll.current) {
|
||||
this.scroll.current.scrollToPosition(0, this.state.headerPosition);
|
||||
this.scroll.current.scrollTo({x: 0, y: this.state.headerPosition});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -343,14 +344,6 @@ export default class EditChannelInfo extends PureComponent {
|
|||
keyboardAppearance={getKeyboardAppearanceFromTheme(theme)}
|
||||
/>
|
||||
</View>
|
||||
<Autocomplete
|
||||
cursorPosition={header.length}
|
||||
maxHeight={200}
|
||||
onChangeText={this.onHeaderChangeText}
|
||||
value={header}
|
||||
nestedScrollEnabled={true}
|
||||
expandDown={true}
|
||||
/>
|
||||
<View style={style.headerHelpText}>
|
||||
<FormattedText
|
||||
style={[style.helpText, padding(isLandscape)]}
|
||||
|
|
@ -361,6 +354,15 @@ export default class EditChannelInfo extends PureComponent {
|
|||
</View>
|
||||
</TouchableWithoutFeedback>
|
||||
</KeyboardAwareScrollView>
|
||||
<KeyboardTrackingView style={style.autocompleteContainer}>
|
||||
<Autocomplete
|
||||
cursorPosition={header.length}
|
||||
maxHeight={200}
|
||||
onChangeText={this.onHeaderChangeText}
|
||||
value={header}
|
||||
nestedScrollEnabled={true}
|
||||
/>
|
||||
</KeyboardTrackingView>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
|
|
@ -368,6 +370,9 @@ export default class EditChannelInfo extends PureComponent {
|
|||
|
||||
const getStyleSheet = makeStyleSheetFromTheme((theme) => {
|
||||
return {
|
||||
autocompleteContainer: {
|
||||
justifyContent: 'flex-end',
|
||||
},
|
||||
container: {
|
||||
flex: 1,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ function mapStateToProps(state, ownProps) {
|
|||
const config = getConfig(state);
|
||||
const emojiName = ownProps.emojiName;
|
||||
const customEmojis = getCustomEmojisByName(state);
|
||||
const serverUrl = Client4.getUrl();
|
||||
|
||||
let imageUrl = '';
|
||||
let unicode;
|
||||
|
|
@ -26,9 +27,13 @@ function mapStateToProps(state, ownProps) {
|
|||
const emoji = Emojis[EmojiIndicesByAlias.get(emojiName)];
|
||||
unicode = emoji.filename;
|
||||
if (BuiltInEmojis.includes(emojiName)) {
|
||||
imageUrl = Client4.getSystemEmojiImageUrl(emoji.filename);
|
||||
if (serverUrl) {
|
||||
imageUrl = Client4.getSystemEmojiImageUrl(emoji.filename);
|
||||
} else {
|
||||
displayTextOnly = true;
|
||||
}
|
||||
}
|
||||
} else if (customEmojis.has(emojiName)) {
|
||||
} else if (customEmojis.has(emojiName) && serverUrl) {
|
||||
const emoji = customEmojis.get(emojiName);
|
||||
imageUrl = Client4.getCustomEmojiImageUrl(emoji.id);
|
||||
isCustomEmoji = true;
|
||||
|
|
|
|||
|
|
@ -9997,7 +9997,7 @@ exports[`components/emoji_picker/emoji_picker.ios should match snapshot 1`] = `
|
|||
}
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -10023,8 +10023,8 @@ exports[`components/emoji_picker/emoji_picker.ios should match snapshot 1`] = `
|
|||
]
|
||||
}
|
||||
/>
|
||||
</Component>
|
||||
<Component
|
||||
</ForwardRef>
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -10048,8 +10048,8 @@ exports[`components/emoji_picker/emoji_picker.ios should match snapshot 1`] = `
|
|||
]
|
||||
}
|
||||
/>
|
||||
</Component>
|
||||
<Component
|
||||
</ForwardRef>
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -10073,8 +10073,8 @@ exports[`components/emoji_picker/emoji_picker.ios should match snapshot 1`] = `
|
|||
]
|
||||
}
|
||||
/>
|
||||
</Component>
|
||||
<Component
|
||||
</ForwardRef>
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -10098,8 +10098,8 @@ exports[`components/emoji_picker/emoji_picker.ios should match snapshot 1`] = `
|
|||
]
|
||||
}
|
||||
/>
|
||||
</Component>
|
||||
<Component
|
||||
</ForwardRef>
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -10123,8 +10123,8 @@ exports[`components/emoji_picker/emoji_picker.ios should match snapshot 1`] = `
|
|||
]
|
||||
}
|
||||
/>
|
||||
</Component>
|
||||
<Component
|
||||
</ForwardRef>
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -10148,8 +10148,8 @@ exports[`components/emoji_picker/emoji_picker.ios should match snapshot 1`] = `
|
|||
]
|
||||
}
|
||||
/>
|
||||
</Component>
|
||||
<Component
|
||||
</ForwardRef>
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -10173,8 +10173,8 @@ exports[`components/emoji_picker/emoji_picker.ios should match snapshot 1`] = `
|
|||
]
|
||||
}
|
||||
/>
|
||||
</Component>
|
||||
<Component
|
||||
</ForwardRef>
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -10198,8 +10198,8 @@ exports[`components/emoji_picker/emoji_picker.ios should match snapshot 1`] = `
|
|||
]
|
||||
}
|
||||
/>
|
||||
</Component>
|
||||
<Component
|
||||
</ForwardRef>
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -10223,7 +10223,7 @@ exports[`components/emoji_picker/emoji_picker.ios should match snapshot 1`] = `
|
|||
]
|
||||
}
|
||||
/>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
</View>
|
||||
</KeyboardTrackingView>
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
// See LICENSE.txt for license information.
|
||||
|
||||
import React from 'react';
|
||||
import {render} from '@testing-library/react-native';
|
||||
import TestRenderer from 'react-test-renderer';
|
||||
import {IntlProvider} from 'react-intl';
|
||||
import moment from 'moment-timezone';
|
||||
|
||||
|
|
@ -21,9 +21,10 @@ describe('FormattedTime', () => {
|
|||
let wrapper = renderWithIntl(
|
||||
<FormattedTime {...baseProps}/>,
|
||||
);
|
||||
let element = wrapper.root.find((el) => el.type === 'Text' && el.children && el.children[0] === '7:02 PM');
|
||||
|
||||
expect(wrapper.baseElement).toMatchSnapshot();
|
||||
expect(wrapper.getByText('7:02 PM')).toBeTruthy();
|
||||
expect(element).toBeTruthy();
|
||||
|
||||
wrapper = renderWithIntl(
|
||||
<FormattedTime
|
||||
|
|
@ -32,7 +33,8 @@ describe('FormattedTime', () => {
|
|||
/>,
|
||||
);
|
||||
|
||||
expect(wrapper.getByText('19:02')).toBeTruthy();
|
||||
element = wrapper.root.find((el) => el.type === 'Text' && el.children && el.children[0] === '19:02');
|
||||
expect(element).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should support localization', () => {
|
||||
|
|
@ -42,7 +44,8 @@ describe('FormattedTime', () => {
|
|||
'es',
|
||||
);
|
||||
|
||||
expect(wrapper.getByText('7:02 PM')).toBeTruthy();
|
||||
let element = wrapper.root.find((el) => el.type === 'Text' && el.children && el.children[0] === '7:02 PM');
|
||||
expect(element).toBeTruthy();
|
||||
|
||||
moment.locale('ko');
|
||||
wrapper = renderWithIntl(
|
||||
|
|
@ -50,7 +53,8 @@ describe('FormattedTime', () => {
|
|||
'ko',
|
||||
);
|
||||
|
||||
expect(wrapper.getByText('오후 7:02')).toBeTruthy();
|
||||
element = wrapper.root.find((el) => el.type === 'Text' && el.children && el.children[0] === '오후 7:02');
|
||||
expect(element).toBeTruthy();
|
||||
|
||||
wrapper = renderWithIntl(
|
||||
<FormattedTime
|
||||
|
|
@ -60,7 +64,8 @@ describe('FormattedTime', () => {
|
|||
'ko',
|
||||
);
|
||||
|
||||
expect(wrapper.getByText('19:02')).toBeTruthy();
|
||||
element = wrapper.root.find((el) => el.type === 'Text' && el.children && el.children[0] === '19:02');
|
||||
expect(element).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should fallback to default short format for unsupported locale of react-intl ', () => {
|
||||
|
|
@ -73,7 +78,8 @@ describe('FormattedTime', () => {
|
|||
'es',
|
||||
);
|
||||
|
||||
expect(wrapper.getByText('8:47 AM')).toBeTruthy();
|
||||
let element = wrapper.root.find((el) => el.type === 'Text' && el.children && el.children[0] === '8:47 AM');
|
||||
expect(element).toBeTruthy();
|
||||
|
||||
wrapper = renderWithIntl(
|
||||
<FormattedTime
|
||||
|
|
@ -84,10 +90,11 @@ describe('FormattedTime', () => {
|
|||
'es',
|
||||
);
|
||||
|
||||
expect(wrapper.getByText('8:47')).toBeTruthy();
|
||||
element = wrapper.root.find((el) => el.type === 'Text' && el.children && el.children[0] === '8:47');
|
||||
expect(element).toBeTruthy();
|
||||
});
|
||||
});
|
||||
|
||||
function renderWithIntl(component, locale = 'en') {
|
||||
return render(<IntlProvider locale={locale}>{component}</IntlProvider>);
|
||||
return TestRenderer.create(<IntlProvider locale={locale}>{component}</IntlProvider>);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@ import {PropTypes} from 'prop-types';
|
|||
import React from 'react';
|
||||
import {intlShape} from 'react-intl';
|
||||
import {
|
||||
Clipboard,
|
||||
Keyboard,
|
||||
StyleSheet,
|
||||
Text,
|
||||
View,
|
||||
} from 'react-native';
|
||||
import Clipboard from '@react-native-community/clipboard';
|
||||
|
||||
import CustomPropTypes from 'app/constants/custom_prop_types';
|
||||
import FormattedText from 'app/components/formatted_text';
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import PropTypes from 'prop-types';
|
|||
import React from 'react';
|
||||
import {intlShape} from 'react-intl';
|
||||
import {
|
||||
Clipboard,
|
||||
Linking,
|
||||
Platform,
|
||||
StyleSheet,
|
||||
|
|
@ -13,6 +12,7 @@ import {
|
|||
View,
|
||||
} from 'react-native';
|
||||
import FastImage from 'react-native-fast-image';
|
||||
import Clipboard from '@react-native-community/clipboard';
|
||||
|
||||
import brokenImageIcon from '@assets/images/icons/brokenimage.png';
|
||||
import ImageViewPort from '@components/image_viewport';
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@
|
|||
|
||||
import React, {Children, PureComponent} from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import {Alert, Clipboard, Linking, Text} from 'react-native';
|
||||
import {Alert, Linking, Text} from 'react-native';
|
||||
import Clipboard from '@react-native-community/clipboard';
|
||||
import urlParse from 'url-parse';
|
||||
import {intlShape} from 'react-intl';
|
||||
|
||||
|
|
|
|||
|
|
@ -3055,7 +3055,7 @@ function nodeToString(node) {
|
|||
}
|
||||
|
||||
const ignoredKeys = {_sourcepos: true, _lastLineBlank: true, _open: true, _string_content: true, _info: true, _isFenced: true, _fenceChar: true, _fenceLength: true, _fenceOffset: true, _onEnter: true, _onExit: true};
|
||||
function astToJson(node, visited = [], indent = '') { // eslint-disable-line @typescript-eslint/no-unused-vars
|
||||
function astToJson(node, visited = [], indent = '') {
|
||||
let out = '{';
|
||||
|
||||
const myVisited = [...visited];
|
||||
|
|
@ -3081,7 +3081,7 @@ function astToJson(node, visited = [], indent = '') { // eslint-disable-line @ty
|
|||
} else if (typeof value === 'boolean') {
|
||||
out += String(value);
|
||||
} else if (typeof value === 'object') {
|
||||
out += astToJson(value, myVisited, indent + ' ');
|
||||
out += astToJson(value, myVisited, indent + ' '); // eslint-disable-line @typescript-eslint/no-unused-vars
|
||||
}
|
||||
|
||||
if (i !== keys.length - 1) {
|
||||
|
|
|
|||
|
|
@ -11,12 +11,14 @@ import {ViewTypes} from '@constants';
|
|||
|
||||
import NetworkIndicator from './network_indicator';
|
||||
|
||||
jest.useFakeTimers();
|
||||
|
||||
describe('AttachmentFooter', () => {
|
||||
Animated.sequence = jest.fn(() => ({
|
||||
start: jest.fn((cb) => cb()),
|
||||
}));
|
||||
Animated.timing = jest.fn(() => ({
|
||||
start: jest.fn(),
|
||||
start: jest.fn((cb) => cb()),
|
||||
}));
|
||||
|
||||
const baseProps = {
|
||||
|
|
@ -43,7 +45,7 @@ describe('AttachmentFooter', () => {
|
|||
const wrapper = shallow(<NetworkIndicator {...baseProps}/>);
|
||||
const instance = wrapper.instance();
|
||||
|
||||
it('emits INDICATOR_BAR_VISIBLE with true only if not already visible', () => {
|
||||
it('emits INDICATOR_BAR_VISIBLE with true only if not already visible', async () => {
|
||||
instance.visible = true;
|
||||
instance.show();
|
||||
expect(EventEmitter.emit).not.toHaveBeenCalled();
|
||||
|
|
@ -52,6 +54,7 @@ describe('AttachmentFooter', () => {
|
|||
instance.show();
|
||||
expect(EventEmitter.emit).toHaveBeenCalledWith(ViewTypes.INDICATOR_BAR_VISIBLE, true);
|
||||
expect(instance.visible).toBe(true);
|
||||
expect(wrapper.state('opacity')).toBe(1);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -60,7 +63,7 @@ describe('AttachmentFooter', () => {
|
|||
const wrapper = shallow(<NetworkIndicator {...baseProps}/>);
|
||||
const instance = wrapper.instance();
|
||||
|
||||
it('emits INDICATOR_BAR_VISIBLE with false only if visible', () => {
|
||||
it('emits INDICATOR_BAR_VISIBLE with false only if visible', async () => {
|
||||
instance.visible = false;
|
||||
instance.connected();
|
||||
expect(EventEmitter.emit).not.toHaveBeenCalled();
|
||||
|
|
@ -69,6 +72,7 @@ describe('AttachmentFooter', () => {
|
|||
instance.connected();
|
||||
expect(EventEmitter.emit).toHaveBeenCalledWith(ViewTypes.INDICATOR_BAR_VISIBLE, false);
|
||||
expect(instance.visible).toBe(false);
|
||||
expect(wrapper.state('opacity')).toBe(0);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`PasteableTextInput should render pasteable text input 1`] = `
|
||||
<TextInput
|
||||
<Component
|
||||
allowFontScaling={true}
|
||||
onPaste={[Function]}
|
||||
rejectResponderTermination={true}
|
||||
underlineColorAndroid="transparent"
|
||||
>
|
||||
My Text
|
||||
</TextInput>
|
||||
</Component>
|
||||
`;
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ exports[`PostList setting channel deep link 1`] = `
|
|||
onScrollToIndexFailed={[Function]}
|
||||
onViewableItemsChanged={null}
|
||||
refreshControl={
|
||||
<RefreshControl
|
||||
<RefreshControlMock
|
||||
colors={
|
||||
Array [
|
||||
"#3d3c40",
|
||||
|
|
@ -123,7 +123,7 @@ exports[`PostList setting permalink deep link 1`] = `
|
|||
onScrollToIndexFailed={[Function]}
|
||||
onViewableItemsChanged={null}
|
||||
refreshControl={
|
||||
<RefreshControl
|
||||
<RefreshControlMock
|
||||
colors={
|
||||
Array [
|
||||
"#3d3c40",
|
||||
|
|
@ -200,7 +200,7 @@ exports[`PostList should match snapshot 1`] = `
|
|||
onScrollToIndexFailed={[Function]}
|
||||
onViewableItemsChanged={null}
|
||||
refreshControl={
|
||||
<RefreshControl
|
||||
<RefreshControlMock
|
||||
colors={
|
||||
Array [
|
||||
"#3d3c40",
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ export default class ProgressiveImage extends PureComponent {
|
|||
|
||||
static defaultProps = {
|
||||
style: {},
|
||||
defaultSource: undefined,
|
||||
resizeMode: 'contain',
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ describe('ProgressiveImage', () => {
|
|||
resizeMode: 'contain',
|
||||
theme: Preferences.THEMES.default,
|
||||
tintDefaultSource: false,
|
||||
defaultSource: null,
|
||||
};
|
||||
|
||||
const wrapper = shallow(<ProgressiveImage {...baseProps}/>);
|
||||
|
|
@ -50,6 +51,7 @@ describe('ProgressiveImage', () => {
|
|||
resizeMode: 'contain',
|
||||
theme: Preferences.THEMES.default,
|
||||
tintDefaultSource: false,
|
||||
defaultSource: null,
|
||||
};
|
||||
|
||||
const wrapper = shallow(<ProgressiveImage {...baseProps}/>);
|
||||
|
|
|
|||
|
|
@ -10,10 +10,12 @@ import Preferences from '@mm-redux/constants/preferences';
|
|||
|
||||
describe('Reactions', () => {
|
||||
const baseProps = {
|
||||
theme: Preferences.THEMES.default,
|
||||
recentEmojis: [],
|
||||
addReaction: jest.fn(),
|
||||
deviceWidth: undefined,
|
||||
isLandscape: false,
|
||||
openReactionScreen: jest.fn(),
|
||||
recentEmojis: [],
|
||||
theme: Preferences.THEMES.default,
|
||||
};
|
||||
|
||||
test('Should match snapshot with default emojis', () => {
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ describe('SafeAreaIos', () => {
|
|||
expect(wrapper.state().safeAreaInsets).not.toEqual(TEST_INSETS_1.safeAreaInsets);
|
||||
});
|
||||
|
||||
test('should set safe area insets on change if mounted and DeviceTypes.IS_IPHONE_WITH_INSETS is true', () => {
|
||||
test('should set safe area insets on change if mounted and DeviceTypes.IS_IPHONE_WITH_INSETS is true', async () => {
|
||||
DeviceTypes.IS_IPHONE_WITH_INSETS = true;
|
||||
mattermostManaged.hasSafeAreaInsets = false;
|
||||
|
||||
|
|
@ -140,7 +140,7 @@ describe('SafeAreaIos', () => {
|
|||
expect(wrapper.state().safeAreaInsets).toEqual(TEST_INSETS_2.safeAreaInsets);
|
||||
});
|
||||
|
||||
test('should set safe area insets on change if mounted and mattermostManaged.hasSafeAreaInsets is true', () => {
|
||||
test('should set safe area insets on change if mounted and mattermostManaged.hasSafeAreaInsets is true', async () => {
|
||||
DeviceTypes.IS_IPHONE_WITH_INSETS = false;
|
||||
mattermostManaged.hasSafeAreaInsets = true;
|
||||
|
||||
|
|
@ -155,7 +155,7 @@ describe('SafeAreaIos', () => {
|
|||
expect(wrapper.state().safeAreaInsets).toEqual(TEST_INSETS_2.safeAreaInsets);
|
||||
});
|
||||
|
||||
test('should not set safe area insets on change if mounted and neither DeviceTypes.IS_IPHONE_WITH_INSETS nor mattermostManaged.hasSafeAreaInsets is true', () => {
|
||||
test('should not set safe area insets on change if mounted and neither DeviceTypes.IS_IPHONE_WITH_INSETS nor mattermostManaged.hasSafeAreaInsets is true', async () => {
|
||||
DeviceTypes.IS_IPHONE_WITH_INSETS = false;
|
||||
mattermostManaged.hasSafeAreaInsets = false;
|
||||
|
||||
|
|
@ -170,7 +170,7 @@ describe('SafeAreaIos', () => {
|
|||
expect(wrapper.state().safeAreaInsets).not.toEqual(TEST_INSETS_2.safeAreaInsets);
|
||||
});
|
||||
|
||||
test('should set safe area insets on change not mounted', () => {
|
||||
test('should set safe area insets on change not mounted', async () => {
|
||||
DeviceTypes.IS_IPHONE_WITH_INSETS = true;
|
||||
mattermostManaged.hasSafeAreaInsets = true;
|
||||
|
||||
|
|
@ -186,7 +186,7 @@ describe('SafeAreaIos', () => {
|
|||
expect(wrapper.state().safeAreaInsets).not.toEqual(TEST_INSETS_2.safeAreaInsets);
|
||||
});
|
||||
|
||||
test('should set portrait safe area insets', () => {
|
||||
test('should set portrait safe area insets', async () => {
|
||||
const wrapper = shallow(
|
||||
<SafeAreaIos {...baseProps}/>,
|
||||
);
|
||||
|
|
@ -203,7 +203,7 @@ describe('SafeAreaIos', () => {
|
|||
expect(EphemeralStore.safeAreaInsets[LANDSCAPE]).toEqual(null);
|
||||
});
|
||||
|
||||
test('should set portrait safe area insets from EphemeralStore', () => {
|
||||
test('should set portrait safe area insets from EphemeralStore', async () => {
|
||||
const wrapper = shallow(
|
||||
<SafeAreaIos {...baseProps}/>,
|
||||
);
|
||||
|
|
@ -236,7 +236,7 @@ describe('SafeAreaIos', () => {
|
|||
expect(EphemeralStore.safeAreaInsets[PORTRAIT]).toEqual(null);
|
||||
});
|
||||
|
||||
test('should set landscape safe area insets from EphemeralStore', () => {
|
||||
test('should set landscape safe area insets from EphemeralStore', async () => {
|
||||
const wrapper = shallow(
|
||||
<SafeAreaIos {...baseProps}/>,
|
||||
);
|
||||
|
|
@ -252,7 +252,7 @@ describe('SafeAreaIos', () => {
|
|||
expect(EphemeralStore.safeAreaInsets[PORTRAIT]).toEqual(null);
|
||||
});
|
||||
|
||||
test('should add safeAreaInsetsForRootViewDidChange listener when EphemeralStore values are not set', () => {
|
||||
test('should add safeAreaInsetsForRootViewDidChange listener when EphemeralStore values are not set', async () => {
|
||||
const addEventListener = jest.spyOn(SafeArea, 'addEventListener');
|
||||
|
||||
expect(EphemeralStore.safeAreaInsets[PORTRAIT]).toEqual(null);
|
||||
|
|
@ -281,7 +281,7 @@ describe('SafeAreaIos', () => {
|
|||
expect(addEventListener).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test('should remove safeAreaInsetsForRootViewDidChange listener when EphemeralStore values are set', () => {
|
||||
test('should remove safeAreaInsetsForRootViewDidChange listener when EphemeralStore values are set', async () => {
|
||||
const removeEventListener = jest.spyOn(SafeArea, 'removeEventListener');
|
||||
|
||||
const wrapper = shallow(
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`ChannelItem should match snapshot 1`] = `
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
underlayColor="rgba(69,120,191,0.5)"
|
||||
>
|
||||
|
|
@ -99,11 +99,11 @@ exports[`ChannelItem should match snapshot 1`] = `
|
|||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
`;
|
||||
|
||||
exports[`ChannelItem should match snapshot for current user i.e currentUser (you) 1`] = `
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
underlayColor="rgba(69,120,191,0.5)"
|
||||
>
|
||||
|
|
@ -211,11 +211,11 @@ exports[`ChannelItem should match snapshot for current user i.e currentUser (you
|
|||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
`;
|
||||
|
||||
exports[`ChannelItem should match snapshot for current user i.e currentUser (you) when isSearchResult 1`] = `
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
underlayColor="rgba(69,120,191,0.5)"
|
||||
>
|
||||
|
|
@ -323,11 +323,11 @@ exports[`ChannelItem should match snapshot for current user i.e currentUser (you
|
|||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
`;
|
||||
|
||||
exports[`ChannelItem should match snapshot for deactivated user and is currentChannel 1`] = `
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
underlayColor="rgba(69,120,191,0.5)"
|
||||
>
|
||||
|
|
@ -435,11 +435,11 @@ exports[`ChannelItem should match snapshot for deactivated user and is currentCh
|
|||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
`;
|
||||
|
||||
exports[`ChannelItem should match snapshot for deactivated user and is searchResult 1`] = `
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
underlayColor="rgba(69,120,191,0.5)"
|
||||
>
|
||||
|
|
@ -537,11 +537,11 @@ exports[`ChannelItem should match snapshot for deactivated user and is searchRes
|
|||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
`;
|
||||
|
||||
exports[`ChannelItem should match snapshot for deactivated user and not searchResults or currentChannel 1`] = `
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
underlayColor="rgba(69,120,191,0.5)"
|
||||
>
|
||||
|
|
@ -639,11 +639,11 @@ exports[`ChannelItem should match snapshot for deactivated user and not searchRe
|
|||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
`;
|
||||
|
||||
exports[`ChannelItem should match snapshot for isManualUnread 1`] = `
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
underlayColor="rgba(69,120,191,0.5)"
|
||||
>
|
||||
|
|
@ -741,7 +741,7 @@ exports[`ChannelItem should match snapshot for isManualUnread 1`] = `
|
|||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
`;
|
||||
|
||||
exports[`ChannelItem should match snapshot for no displayName 1`] = `null`;
|
||||
|
|
@ -749,7 +749,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`] = `
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
underlayColor="rgba(69,120,191,0.5)"
|
||||
>
|
||||
|
|
@ -847,11 +847,11 @@ exports[`ChannelItem should match snapshot with draft 1`] = `
|
|||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
`;
|
||||
|
||||
exports[`ChannelItem should match snapshot with mentions and muted 1`] = `
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
underlayColor="rgba(69,120,191,0.5)"
|
||||
>
|
||||
|
|
@ -982,5 +982,5 @@ exports[`ChannelItem should match snapshot with mentions and muted 1`] = `
|
|||
/>
|
||||
</View>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
`;
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ exports[`components/widgets/settings/RadioSetting should match snapshot when err
|
|||
]
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
>
|
||||
<View
|
||||
|
|
@ -87,8 +87,8 @@ exports[`components/widgets/settings/RadioSetting should match snapshot when err
|
|||
}
|
||||
}
|
||||
/>
|
||||
</Component>
|
||||
<Component
|
||||
</ForwardRef>
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
>
|
||||
<View
|
||||
|
|
@ -128,8 +128,8 @@ exports[`components/widgets/settings/RadioSetting should match snapshot when err
|
|||
}
|
||||
}
|
||||
/>
|
||||
</Component>
|
||||
<Component
|
||||
</ForwardRef>
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
>
|
||||
<View
|
||||
|
|
@ -164,7 +164,7 @@ exports[`components/widgets/settings/RadioSetting should match snapshot when err
|
|||
width={12}
|
||||
/>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
<View
|
||||
style={null}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`ChannelDrawerButton should match, full snapshot 1`] = `
|
||||
<Component
|
||||
<ForwardRef
|
||||
accessibilityHint="Opens the channels and teams drawer"
|
||||
accessibilityLabel="Channels and teams"
|
||||
accessibilityRole="button"
|
||||
|
|
@ -36,11 +36,11 @@ exports[`ChannelDrawerButton should match, full snapshot 1`] = `
|
|||
/>
|
||||
</View>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
`;
|
||||
|
||||
exports[`ChannelDrawerButton should match, full snapshot 2`] = `
|
||||
<Component
|
||||
<ForwardRef
|
||||
accessibilityHint="Opens the channels and teams drawer"
|
||||
accessibilityLabel="Channels and teams"
|
||||
accessibilityRole="button"
|
||||
|
|
@ -104,5 +104,5 @@ exports[`ChannelDrawerButton should match, full snapshot 2`] = `
|
|||
/>
|
||||
</View>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
`;
|
||||
|
|
|
|||
|
|
@ -62,11 +62,14 @@ export default class ChannelNavBar extends PureComponent {
|
|||
}
|
||||
};
|
||||
|
||||
handlePermanentSidebar = () => {
|
||||
handlePermanentSidebar = async () => {
|
||||
if (DeviceTypes.IS_TABLET && this.mounted) {
|
||||
AsyncStorage.getItem(DeviceTypes.PERMANENT_SIDEBAR_SETTINGS).then((enabled) => {
|
||||
try {
|
||||
const enabled = await AsyncStorage.getItem(DeviceTypes.PERMANENT_SIDEBAR_SETTINGS);
|
||||
this.setState({permanentSidebar: enabled === 'true'});
|
||||
});
|
||||
} catch {
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -33,12 +33,12 @@ describe('ChannelNavBar', () => {
|
|||
expect(wrapper.getElement()).toMatchSnapshot();
|
||||
});
|
||||
|
||||
test('should not set the permanentSidebar state if not Tablet', () => {
|
||||
test('should not set the permanentSidebar state if not Tablet', async () => {
|
||||
const wrapper = shallow(
|
||||
<ChannelNavBar {...baseProps}/>,
|
||||
);
|
||||
|
||||
wrapper.instance().handlePermanentSidebar();
|
||||
await wrapper.instance().handlePermanentSidebar();
|
||||
expect(wrapper.state('permanentSidebar')).toBeUndefined();
|
||||
});
|
||||
|
||||
|
|
@ -50,11 +50,10 @@ describe('ChannelNavBar', () => {
|
|||
DeviceTypes.IS_TABLET = true;
|
||||
|
||||
await wrapper.instance().handlePermanentSidebar();
|
||||
|
||||
expect(wrapper.state('permanentSidebar')).toBeDefined();
|
||||
});
|
||||
|
||||
test('drawerButtonVisible appears for android tablets', () => {
|
||||
test('drawerButtonVisible appears for android tablets', async () => {
|
||||
const wrapper = shallow(
|
||||
<ChannelNavBar {...baseProps}/>,
|
||||
);
|
||||
|
|
@ -65,7 +64,7 @@ describe('ChannelNavBar', () => {
|
|||
expect(wrapper.instance().drawerButtonVisible()).toBe(true);
|
||||
});
|
||||
|
||||
test('drawerButtonVisible appears for android phones', () => {
|
||||
test('drawerButtonVisible appears for android phones', async () => {
|
||||
const wrapper = shallow(
|
||||
<ChannelNavBar {...baseProps}/>,
|
||||
);
|
||||
|
|
@ -76,7 +75,7 @@ describe('ChannelNavBar', () => {
|
|||
expect(wrapper.instance().drawerButtonVisible()).toBe(true);
|
||||
});
|
||||
|
||||
test('drawerButtonVisible appears for iOS phones', () => {
|
||||
test('drawerButtonVisible appears for iOS phones', async () => {
|
||||
const wrapper = shallow(
|
||||
<ChannelNavBar {...baseProps}/>,
|
||||
);
|
||||
|
|
@ -87,7 +86,7 @@ describe('ChannelNavBar', () => {
|
|||
expect(wrapper.instance().drawerButtonVisible()).toBe(true);
|
||||
});
|
||||
|
||||
test('drawerButtonVisible appears for iOS tablets with PermanentSidebar at default false, and not in splitview', () => {
|
||||
test('drawerButtonVisible appears for iOS tablets with PermanentSidebar at default false, and not in splitview', async () => {
|
||||
const wrapper = shallow(
|
||||
<ChannelNavBar {...baseProps}/>,
|
||||
);
|
||||
|
|
@ -100,7 +99,7 @@ describe('ChannelNavBar', () => {
|
|||
expect(wrapper.instance().drawerButtonVisible()).toBe(true);
|
||||
});
|
||||
|
||||
test('drawerButtonVisible does not appear for iOS tablets with permanentSidebar enabled', () => {
|
||||
test('drawerButtonVisible does not appear for iOS tablets with permanentSidebar enabled', async () => {
|
||||
const wrapper = shallow(
|
||||
<ChannelNavBar {...baseProps}/>,
|
||||
);
|
||||
|
|
@ -113,7 +112,7 @@ describe('ChannelNavBar', () => {
|
|||
expect(wrapper.instance().drawerButtonVisible()).toBe(false);
|
||||
});
|
||||
|
||||
test('drawerButtonVisible appears for iOS tablets with splitview enabled', () => {
|
||||
test('drawerButtonVisible appears for iOS tablets with splitview enabled', async () => {
|
||||
const wrapper = shallow(
|
||||
<ChannelNavBar {...baseProps}/>,
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`ChannelTitle should match snapshot 1`] = `
|
||||
<Component
|
||||
<ForwardRef
|
||||
style={
|
||||
Object {
|
||||
"flex": 1,
|
||||
|
|
@ -47,11 +47,11 @@ exports[`ChannelTitle should match snapshot 1`] = `
|
|||
}
|
||||
/>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
`;
|
||||
|
||||
exports[`ChannelTitle should match snapshot when is DM and has guests and the teammate is the guest (when can show subtitles) 1`] = `
|
||||
<Component
|
||||
<ForwardRef
|
||||
style={
|
||||
Object {
|
||||
"flex": 1,
|
||||
|
|
@ -122,11 +122,11 @@ exports[`ChannelTitle should match snapshot when is DM and has guests and the te
|
|||
}
|
||||
/>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
`;
|
||||
|
||||
exports[`ChannelTitle should match snapshot when is DM and has guests but the teammate is not the guest (when can show subtitles) 1`] = `
|
||||
<Component
|
||||
<ForwardRef
|
||||
style={
|
||||
Object {
|
||||
"flex": 1,
|
||||
|
|
@ -172,11 +172,11 @@ exports[`ChannelTitle should match snapshot when is DM and has guests but the te
|
|||
}
|
||||
/>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
`;
|
||||
|
||||
exports[`ChannelTitle should match snapshot when isSelfDMChannel is true 1`] = `
|
||||
<Component
|
||||
<ForwardRef
|
||||
style={
|
||||
Object {
|
||||
"flex": 1,
|
||||
|
|
@ -230,5 +230,5 @@ exports[`ChannelTitle should match snapshot when isSelfDMChannel is true 1`] = `
|
|||
}
|
||||
/>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
`;
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ exports[`channel_info_header should match snapshot 1`] = `
|
|||
]
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onLongPress={[Function]}
|
||||
>
|
||||
<View
|
||||
|
|
@ -126,7 +126,7 @@ exports[`channel_info_header should match snapshot 1`] = `
|
|||
Purpose string
|
||||
</Text>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -138,7 +138,7 @@ exports[`channel_info_header should match snapshot 1`] = `
|
|||
]
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onLongPress={[Function]}
|
||||
>
|
||||
<View
|
||||
|
|
@ -275,7 +275,7 @@ exports[`channel_info_header should match snapshot 1`] = `
|
|||
value="Header string"
|
||||
/>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
<Text
|
||||
style={
|
||||
|
|
@ -431,7 +431,7 @@ exports[`channel_info_header should match snapshot when DM and hasGuests and is
|
|||
]
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onLongPress={[Function]}
|
||||
>
|
||||
<View
|
||||
|
|
@ -465,7 +465,7 @@ exports[`channel_info_header should match snapshot when DM and hasGuests and is
|
|||
Purpose string
|
||||
</Text>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -477,7 +477,7 @@ exports[`channel_info_header should match snapshot when DM and hasGuests and is
|
|||
]
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onLongPress={[Function]}
|
||||
>
|
||||
<View
|
||||
|
|
@ -614,7 +614,7 @@ exports[`channel_info_header should match snapshot when DM and hasGuests and is
|
|||
value="Header string"
|
||||
/>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
<Text
|
||||
style={
|
||||
|
|
@ -742,7 +742,7 @@ exports[`channel_info_header should match snapshot when DM and hasGuests but its
|
|||
]
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onLongPress={[Function]}
|
||||
>
|
||||
<View
|
||||
|
|
@ -776,7 +776,7 @@ exports[`channel_info_header should match snapshot when DM and hasGuests but its
|
|||
Purpose string
|
||||
</Text>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -788,7 +788,7 @@ exports[`channel_info_header should match snapshot when DM and hasGuests but its
|
|||
]
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onLongPress={[Function]}
|
||||
>
|
||||
<View
|
||||
|
|
@ -925,7 +925,7 @@ exports[`channel_info_header should match snapshot when DM and hasGuests but its
|
|||
value="Header string"
|
||||
/>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
<Text
|
||||
style={
|
||||
|
|
@ -1081,7 +1081,7 @@ exports[`channel_info_header should match snapshot when GM and hasGuests 1`] = `
|
|||
]
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onLongPress={[Function]}
|
||||
>
|
||||
<View
|
||||
|
|
@ -1115,7 +1115,7 @@ exports[`channel_info_header should match snapshot when GM and hasGuests 1`] = `
|
|||
Purpose string
|
||||
</Text>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -1127,7 +1127,7 @@ exports[`channel_info_header should match snapshot when GM and hasGuests 1`] = `
|
|||
]
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onLongPress={[Function]}
|
||||
>
|
||||
<View
|
||||
|
|
@ -1264,7 +1264,7 @@ exports[`channel_info_header should match snapshot when GM and hasGuests 1`] = `
|
|||
value="Header string"
|
||||
/>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
<Text
|
||||
style={
|
||||
|
|
@ -1392,7 +1392,7 @@ exports[`channel_info_header should match snapshot when is group constrained 1`]
|
|||
]
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onLongPress={[Function]}
|
||||
>
|
||||
<View
|
||||
|
|
@ -1426,7 +1426,7 @@ exports[`channel_info_header should match snapshot when is group constrained 1`]
|
|||
Purpose string
|
||||
</Text>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -1438,7 +1438,7 @@ exports[`channel_info_header should match snapshot when is group constrained 1`]
|
|||
]
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onLongPress={[Function]}
|
||||
>
|
||||
<View
|
||||
|
|
@ -1575,7 +1575,7 @@ exports[`channel_info_header should match snapshot when is group constrained 1`]
|
|||
value="Header string"
|
||||
/>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
<Text
|
||||
style={
|
||||
|
|
@ -1753,7 +1753,7 @@ exports[`channel_info_header should match snapshot when public channel and hasGu
|
|||
]
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onLongPress={[Function]}
|
||||
>
|
||||
<View
|
||||
|
|
@ -1787,7 +1787,7 @@ exports[`channel_info_header should match snapshot when public channel and hasGu
|
|||
Purpose string
|
||||
</Text>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -1799,7 +1799,7 @@ exports[`channel_info_header should match snapshot when public channel and hasGu
|
|||
]
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onLongPress={[Function]}
|
||||
>
|
||||
<View
|
||||
|
|
@ -1936,7 +1936,7 @@ exports[`channel_info_header should match snapshot when public channel and hasGu
|
|||
value="Header string"
|
||||
/>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
<Text
|
||||
style={
|
||||
|
|
|
|||
|
|
@ -4,13 +4,13 @@
|
|||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import {
|
||||
Clipboard,
|
||||
Platform,
|
||||
Text,
|
||||
TouchableHighlight,
|
||||
View,
|
||||
} from 'react-native';
|
||||
import {intlShape} from 'react-intl';
|
||||
import Clipboard from '@react-native-community/clipboard';
|
||||
|
||||
import {General} from '@mm-redux/constants';
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import PropTypes from 'prop-types';
|
|||
import {intlShape} from 'react-intl';
|
||||
import {Alert, View} from 'react-native';
|
||||
import RNFetchBlob from 'rn-fetch-blob';
|
||||
import {KeyboardAwareScrollView} from 'react-native-keyboard-aware-scroll-view';
|
||||
import {KeyboardAwareScrollView} from 'react-native-keyboard-aware-scrollview';
|
||||
import DocumentPicker from 'react-native-document-picker';
|
||||
import {Navigation} from 'react-native-navigation';
|
||||
|
||||
|
|
@ -200,7 +200,7 @@ export default class EditProfile extends PureComponent {
|
|||
this.setState({error, updating: false});
|
||||
this.emitCanUpdateAccount(true);
|
||||
if (this.scrollView) {
|
||||
this.scrollView.props.scrollToPosition(0, 0);
|
||||
this.scrollView.props.scrollTo({x: 0, y: 0});
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ exports[`ForgotPassword should match snapshot 1`] = `
|
|||
]
|
||||
}
|
||||
/>
|
||||
<TextInput
|
||||
<Component
|
||||
allowFontScaling={true}
|
||||
autoCapitalize="none"
|
||||
autoCorrect={false}
|
||||
|
|
@ -244,7 +244,7 @@ exports[`ForgotPassword snapshot for error on failure of email regex 1`] = `
|
|||
]
|
||||
}
|
||||
/>
|
||||
<TextInput
|
||||
<Component
|
||||
allowFontScaling={true}
|
||||
autoCapitalize="none"
|
||||
autoCorrect={false}
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ exports[`ImagePreview should match snapshot 1`] = `
|
|||
}
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -111,7 +111,7 @@ exports[`ImagePreview should match snapshot 1`] = `
|
|||
name="md-close"
|
||||
size={26}
|
||||
/>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
<Text
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -125,7 +125,7 @@ exports[`ImagePreview should match snapshot 1`] = `
|
|||
>
|
||||
1/2
|
||||
</Text>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -142,7 +142,7 @@ exports[`ImagePreview should match snapshot 1`] = `
|
|||
name="ios-download"
|
||||
size={26}
|
||||
/>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
</View>
|
||||
</ForwardRef(AnimatedComponentWrapper)>
|
||||
|
|
@ -234,7 +234,7 @@ exports[`ImagePreview should match snapshot 1`] = `
|
|||
exports[`ImagePreview should match snapshot and not renderDownloadButton for local files 1`] = `null`;
|
||||
|
||||
exports[`ImagePreview should match snapshot, renderDownloadButton 1`] = `
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -251,5 +251,5 @@ exports[`ImagePreview should match snapshot, renderDownloadButton 1`] = `
|
|||
name="ios-download"
|
||||
size={26}
|
||||
/>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
`;
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ import {
|
|||
View,
|
||||
} from 'react-native';
|
||||
import Button from 'react-native-button';
|
||||
import {KeyboardAwareScrollView} from 'react-native-keyboard-aware-scroll-view';
|
||||
import {KeyboardAwareScrollView} from 'react-native-keyboard-aware-scrollview';
|
||||
|
||||
import {resetToChannel, goToScreen} from '@actions/navigation';
|
||||
import ErrorText from '@components/error_text';
|
||||
|
|
@ -55,6 +55,7 @@ export default class Login extends PureComponent {
|
|||
|
||||
this.loginRef = React.createRef();
|
||||
this.passwordRef = React.createRef();
|
||||
this.scroll = React.createRef();
|
||||
this.loginId = '';
|
||||
this.password = '';
|
||||
|
||||
|
|
@ -213,7 +214,9 @@ export default class Login extends PureComponent {
|
|||
};
|
||||
|
||||
orientationDidChange = () => {
|
||||
this.scroll.scrollToPosition(0, 0, true);
|
||||
if (this.scroll.current) {
|
||||
this.scroll.current.scrollTo({x: 0, y: 0, animated: true});
|
||||
}
|
||||
};
|
||||
|
||||
passwordFocus = () => {
|
||||
|
|
@ -290,10 +293,6 @@ export default class Login extends PureComponent {
|
|||
actions.scheduleExpiredNotification(intl);
|
||||
};
|
||||
|
||||
scrollRef = (ref) => {
|
||||
this.scroll = ref;
|
||||
};
|
||||
|
||||
setEmmUsernameIfAvailable = async () => {
|
||||
const managedConfig = await mattermostManaged.getConfig();
|
||||
if (managedConfig?.username && this.loginRef.current) {
|
||||
|
|
|
|||
|
|
@ -270,7 +270,7 @@ LongPost {
|
|||
}
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -287,7 +287,7 @@ LongPost {
|
|||
name="close"
|
||||
size={20}
|
||||
/>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
<View
|
||||
style={
|
||||
Object {
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ exports[`OptionModalList should match snapshot for Android 1`] = `
|
|||
}
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -64,7 +64,7 @@ exports[`OptionModalList should match snapshot for Android 1`] = `
|
|||
}
|
||||
}
|
||||
/>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -74,7 +74,7 @@ exports[`OptionModalList should match snapshot for Android 1`] = `
|
|||
}
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -110,9 +110,9 @@ exports[`OptionModalList should match snapshot for Android 1`] = `
|
|||
}
|
||||
}
|
||||
/>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -135,7 +135,7 @@ exports[`OptionModalList should match snapshot for Android 1`] = `
|
|||
}
|
||||
}
|
||||
/>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
</View>
|
||||
`;
|
||||
|
|
@ -203,7 +203,7 @@ exports[`OptionModalList should match snapshot for iOS 1`] = `
|
|||
]
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -240,7 +240,7 @@ exports[`OptionModalList should match snapshot for iOS 1`] = `
|
|||
}
|
||||
}
|
||||
/>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -249,7 +249,7 @@ exports[`OptionModalList should match snapshot for iOS 1`] = `
|
|||
]
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -286,7 +286,7 @@ exports[`OptionModalList should match snapshot for iOS 1`] = `
|
|||
}
|
||||
}
|
||||
/>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
</View>
|
||||
<View
|
||||
|
|
@ -300,7 +300,7 @@ exports[`OptionModalList should match snapshot for iOS 1`] = `
|
|||
}
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -324,7 +324,7 @@ exports[`OptionModalList should match snapshot for iOS 1`] = `
|
|||
}
|
||||
}
|
||||
/>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
</View>
|
||||
`;
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ exports[`Permalink should match snapshot 1`] = `
|
|||
}
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Object {
|
||||
|
|
@ -69,7 +69,7 @@ exports[`Permalink should match snapshot 1`] = `
|
|||
name="close"
|
||||
size={20}
|
||||
/>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
<View
|
||||
style={
|
||||
Object {
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ describe('PinnedPosts', () => {
|
|||
expect(wrapper.getElement()).toMatchSnapshot();
|
||||
});
|
||||
|
||||
test('should match snapshot when component waiting for response', () => {
|
||||
test('should match snapshot when component waiting for response', async () => {
|
||||
const error = new Error('foo');
|
||||
|
||||
const newProps = {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@
|
|||
|
||||
import React, {PureComponent} from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import {Alert, Clipboard, StyleSheet, View} from 'react-native';
|
||||
import {Alert, StyleSheet, View} from 'react-native';
|
||||
import Clipboard from '@react-native-community/clipboard';
|
||||
import {intlShape} from 'react-intl';
|
||||
import MaterialIcon from 'react-native-vector-icons/MaterialIcons';
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`ReactionHeaderItem should match snapshot 1`] = `
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={
|
||||
Array [
|
||||
|
|
@ -41,7 +41,7 @@ exports[`ReactionHeaderItem should match snapshot 1`] = `
|
|||
3
|
||||
</Text>
|
||||
</React.Fragment>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
`;
|
||||
|
||||
exports[`ReactionHeaderItem should match snapshot, renderContent 1`] = `
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ exports[`ReactionRow should match snapshot, renderContent 1`] = `
|
|||
]
|
||||
}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
>
|
||||
<View
|
||||
|
|
@ -39,7 +39,7 @@ exports[`ReactionRow should match snapshot, renderContent 1`] = `
|
|||
userId="user_id"
|
||||
/>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
<Text
|
||||
ellipsizeMode="tail"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`Search RecentItem should match snapshot and respond to events 1`] = `
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
underlayColor="rgba(69,120,191,0.5)"
|
||||
>
|
||||
|
|
@ -79,5 +79,5 @@ exports[`Search RecentItem should match snapshot and respond to events 1`] = `
|
|||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
`;
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ exports[`NotificationSettingsEmailAndroid should match snapshot 1`] = `
|
|||
`;
|
||||
|
||||
exports[`NotificationSettingsEmailAndroid should match snapshot 2`] = `
|
||||
<Modal
|
||||
<Component
|
||||
animationType="slide"
|
||||
hardwareAccelerated={false}
|
||||
onRequestClose={[Function]}
|
||||
|
|
@ -105,7 +105,7 @@ exports[`NotificationSettingsEmailAndroid should match snapshot 2`] = `
|
|||
<View
|
||||
style={Object {}}
|
||||
>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={Object {}}
|
||||
>
|
||||
|
|
@ -114,7 +114,7 @@ exports[`NotificationSettingsEmailAndroid should match snapshot 2`] = `
|
|||
id="mobile.notification_settings.modal_cancel"
|
||||
style={Object {}}
|
||||
/>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
<View>
|
||||
<View
|
||||
style={
|
||||
|
|
@ -123,7 +123,7 @@ exports[`NotificationSettingsEmailAndroid should match snapshot 2`] = `
|
|||
}
|
||||
}
|
||||
/>
|
||||
<Component
|
||||
<ForwardRef
|
||||
onPress={[Function]}
|
||||
style={Object {}}
|
||||
>
|
||||
|
|
@ -132,11 +132,11 @@ exports[`NotificationSettingsEmailAndroid should match snapshot 2`] = `
|
|||
id="mobile.notification_settings.modal_save"
|
||||
style={Object {}}
|
||||
/>
|
||||
</Component>
|
||||
</ForwardRef>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
</Modal>
|
||||
</Component>
|
||||
`;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16097" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
||||
<device id="retina6_5" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="EHf-IW-A2E">
|
||||
<objects>
|
||||
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
||||
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="splash.png" translatesAutoresizingMaskIntoConstraints="NO" id="UpL-W2-INZ">
|
||||
<rect key="frame" x="87" y="328" width="240" height="240"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="240" id="WUO-wG-itC"/>
|
||||
<constraint firstAttribute="width" constant="240" id="Ys9-fh-wVA"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="UpL-W2-INZ" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="eka-4s-Xin"/>
|
||||
<constraint firstItem="UpL-W2-INZ" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="lI4-YK-lDO"/>
|
||||
</constraints>
|
||||
<viewLayoutGuide key="safeArea" id="Bcu-3y-fUS"/>
|
||||
</view>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="52" y="374.66266866566718"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="splash.png" width="720" height="720"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="11762" systemVersion="16D32" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES">
|
||||
<device id="retina4_7" orientation="portrait">
|
||||
<adaptation id="fullscreen"/>
|
||||
</device>
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11757"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<view contentMode="scaleToFill" id="iN0-l3-epB">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="splash.png" translatesAutoresizingMaskIntoConstraints="NO" id="ZkI-RL-69Z">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
|
||||
</imageView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="ZkI-RL-69Z" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="7dE-9J-TdO"/>
|
||||
<constraint firstAttribute="trailing" secondItem="ZkI-RL-69Z" secondAttribute="trailing" id="KFm-od-sbN"/>
|
||||
<constraint firstAttribute="bottom" secondItem="ZkI-RL-69Z" secondAttribute="bottom" id="afY-hI-KgI"/>
|
||||
<constraint firstItem="ZkI-RL-69Z" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="eMX-qT-GeJ"/>
|
||||
</constraints>
|
||||
<nil key="simulatedStatusBarMetrics"/>
|
||||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
||||
<point key="canvasLocation" x="548" y="455"/>
|
||||
</view>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="splash.png" width="720" height="1280"/>
|
||||
</resources>
|
||||
</document>
|
||||
6
index.js
6
index.js
|
|
@ -14,15 +14,17 @@ if (Platform.OS === 'android') {
|
|||
}
|
||||
|
||||
if (__DEV__) {
|
||||
const YellowBox = require('react-native/Libraries/YellowBox/YellowBox');
|
||||
YellowBox.ignoreWarnings([
|
||||
const LogBox = require('react-native/Libraries/LogBox/LogBox');
|
||||
LogBox.ignoreLogs([
|
||||
'Warning: componentWillReceiveProps',
|
||||
'Warning: componentWillMount',
|
||||
'Warning: StatusBarIOS',
|
||||
'`-[RCTRootView cancelTouches]`',
|
||||
'Animated',
|
||||
|
||||
// Hide warnings caused by React Native (https://github.com/facebook/react-native/issues/20841)
|
||||
'Require cycle: node_modules/react-native/Libraries/Network/fetch.js',
|
||||
'Warning: Cannot update a component from inside the function body of a different component',
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
69AC753E496743BABB7A7124 /* OpenSans-SemiboldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0E617BF0F36D4E738F51D169 /* OpenSans-SemiboldItalic.ttf */; };
|
||||
6C9B1EFD6561083917AF06CF /* libPods-Mattermost.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DEEFB3ED6175724A2653247 /* libPods-Mattermost.a */; };
|
||||
71F30A436B5847DF9D319D15 /* Roboto-BlackItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7F54ABFAE6CE4A6DB11D1ED7 /* Roboto-BlackItalic.ttf */; };
|
||||
7F0F4B0A24BA173900E14C60 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7F0F4B0924BA173900E14C60 /* LaunchScreen.storyboard */; };
|
||||
7F151D3E221B062700FAD8F3 /* RuntimeUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F151D3D221B062700FAD8F3 /* RuntimeUtils.swift */; };
|
||||
7F151D41221B069200FAD8F3 /* 0155-keys.png in Resources */ = {isa = PBXBuildFile; fileRef = 7F151D40221B069200FAD8F3 /* 0155-keys.png */; };
|
||||
7F240A1C220D3A2300637665 /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F240A1B220D3A2300637665 /* ShareViewController.swift */; };
|
||||
|
|
@ -39,7 +40,6 @@
|
|||
7F240ADB220E089300637665 /* Item.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F240ADA220E089300637665 /* Item.swift */; };
|
||||
7F240ADD220E094A00637665 /* TeamsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F240ADC220E094A00637665 /* TeamsViewController.swift */; };
|
||||
7F292A711E8AB73400A450A3 /* SplashScreenResource in Resources */ = {isa = PBXBuildFile; fileRef = 7F292A701E8AB73400A450A3 /* SplashScreenResource */; };
|
||||
7F292AA61E8ABB1100A450A3 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7F292AA41E8ABB1100A450A3 /* LaunchScreen.xib */; };
|
||||
7F292AA71E8ABB1100A450A3 /* splash.png in Resources */ = {isa = PBXBuildFile; fileRef = 7F292AA51E8ABB1100A450A3 /* splash.png */; };
|
||||
7F581D35221ED5C60099E66B /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F581D34221ED5C60099E66B /* NotificationService.swift */; };
|
||||
7F581D39221ED5C60099E66B /* NotificationService.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 7F581D32221ED5C60099E66B /* NotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
|
|
@ -187,6 +187,7 @@
|
|||
71E626D4980A4560B26F0E1C /* Roboto-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Bold.ttf"; path = "../assets/fonts/Roboto-Bold.ttf"; sourceTree = "<group>"; };
|
||||
75387D8184A144939E9E7561 /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = "<group>"; };
|
||||
7CA9B66DCC1F47AF86A50CDA /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = "<group>"; };
|
||||
7F0F4B0924BA173900E14C60 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = SplashScreenResource/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||
7F151D3D221B062700FAD8F3 /* RuntimeUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RuntimeUtils.swift; path = Mattermost/RuntimeUtils.swift; sourceTree = "<group>"; };
|
||||
7F151D40221B069200FAD8F3 /* 0155-keys.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "0155-keys.png"; path = "Mattermost/0155-keys.png"; sourceTree = "<group>"; };
|
||||
7F151D42221B07F700FAD8F3 /* MattermostShare-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MattermostShare-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||
|
|
@ -203,7 +204,6 @@
|
|||
7F240ADA220E089300637665 /* Item.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Item.swift; sourceTree = "<group>"; };
|
||||
7F240ADC220E094A00637665 /* TeamsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TeamsViewController.swift; sourceTree = "<group>"; };
|
||||
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>"; };
|
||||
|
|
@ -372,7 +372,6 @@
|
|||
7F151D3D221B062700FAD8F3 /* RuntimeUtils.swift */,
|
||||
13B07FB51A68108700A75B9A /* Images.xcassets */,
|
||||
13B07FB61A68108700A75B9A /* Info.plist */,
|
||||
7F292AA41E8ABB1100A450A3 /* LaunchScreen.xib */,
|
||||
7FF2AF8A2086483E00FFBDF4 /* KeyShareConsumer.storyboard */,
|
||||
13B07FB71A68108700A75B9A /* main.m */,
|
||||
7F63D2C21E6DD98A001FAE12 /* Mattermost.entitlements */,
|
||||
|
|
@ -387,6 +386,7 @@
|
|||
7F292AA51E8ABB1100A450A3 /* splash.png */,
|
||||
7F5BA34522B99B7B005B05D3 /* Mattermost+RCTUITextView.h */,
|
||||
7F5BA34622B99B7B005B05D3 /* Mattermost+RCTUITextView.m */,
|
||||
7F0F4B0924BA173900E14C60 /* LaunchScreen.storyboard */,
|
||||
);
|
||||
name = Mattermost;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -689,9 +689,9 @@
|
|||
499F7AF1235511FD00E7AF6E /* Mattermost-Regular.otf in Resources */,
|
||||
7F151D41221B069200FAD8F3 /* 0155-keys.png in Resources */,
|
||||
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
|
||||
7F0F4B0A24BA173900E14C60 /* LaunchScreen.storyboard in Resources */,
|
||||
7F292AA71E8ABB1100A450A3 /* splash.png in Resources */,
|
||||
7FF2AF8B2086483E00FFBDF4 /* KeyShareConsumer.storyboard in Resources */,
|
||||
7F292AA61E8ABB1100A450A3 /* LaunchScreen.xib in Resources */,
|
||||
7F292A711E8AB73400A450A3 /* SplashScreenResource in Resources */,
|
||||
9358B95F95184EE0A4DCE629 /* OpenSans-Bold.ttf in Resources */,
|
||||
55C6561DDBBA45929D88B6D1 /* OpenSans-BoldItalic.ttf in Resources */,
|
||||
|
|
@ -811,6 +811,7 @@
|
|||
"${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_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle",
|
||||
"${PODS_ROOT}/YoutubePlayer-in-WKWebView/WKYTPlayerView/WKYTPlayerView.bundle",
|
||||
);
|
||||
name = "[CP] Copy Pods Resources";
|
||||
|
|
@ -831,6 +832,7 @@
|
|||
"${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}/AccessibilityResources.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/WKYTPlayerView.bundle",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
|
|
|
|||
|
|
@ -64,6 +64,8 @@
|
|||
<string>Share contacts in your Mattermost instance</string>
|
||||
<key>NSCameraUsageDescription</key>
|
||||
<string>Take a Photo or Video and upload it to your Mattermost instance</string>
|
||||
<key>NSFaceIDUsageDescription</key>
|
||||
<string>Mattermost uses Face ID to restrict unauthorized users from accessing the app.</string>
|
||||
<key>NSLocationAlwaysUsageDescription</key>
|
||||
<string>Send your current location to your Mattermost instance</string>
|
||||
<key>NSLocationWhenInUseUsageDescription</key>
|
||||
|
|
@ -72,14 +74,12 @@
|
|||
<string>Capture audio when recording a video to share to your Mattermost instance</string>
|
||||
<key>NSMotionUsageDescription</key>
|
||||
<string>Share your route in your Mattermost instance</string>
|
||||
<key>NSPhotoLibraryUsageDescription</key>
|
||||
<string>Upload Photos and Videos from your device to your Mattermost instance</string>
|
||||
<key>NSPhotoLibraryAddUsageDescription</key>
|
||||
<string>Save downloaded Photos and Videos from your Mattermost instance to your device</string>
|
||||
<key>NSPhotoLibraryUsageDescription</key>
|
||||
<string>Upload Photos and Videos from your device to your Mattermost instance</string>
|
||||
<key>NSSpeechRecognitionUsageDescription</key>
|
||||
<string>Send voice messages to your Mattermost instance</string>
|
||||
<key>NSFaceIDUsageDescription</key>
|
||||
<string>Mattermost uses Face ID to restrict unauthorized users from accessing the app.</string>
|
||||
<key>UIAppFonts</key>
|
||||
<array>
|
||||
<string>Entypo.ttf</string>
|
||||
|
|
|
|||
47
ios/Podfile
47
ios/Podfile
|
|
@ -1,38 +1,12 @@
|
|||
platform :ios, '9.0'
|
||||
require_relative '../node_modules/react-native/scripts/react_native_pods'
|
||||
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
|
||||
|
||||
platform :ios, '10.0'
|
||||
|
||||
target 'Mattermost' do
|
||||
# Pods for Mattermost
|
||||
pod 'FBLazyVector', :path => "../node_modules/react-native/Libraries/FBLazyVector"
|
||||
pod 'FBReactNativeSpec', :path => "../node_modules/react-native/Libraries/FBReactNativeSpec"
|
||||
pod 'RCTRequired', :path => "../node_modules/react-native/Libraries/RCTRequired"
|
||||
pod 'RCTTypeSafety', :path => "../node_modules/react-native/Libraries/TypeSafety"
|
||||
pod 'React', :path => '../node_modules/react-native/'
|
||||
pod 'React-Core', :path => '../node_modules/react-native/'
|
||||
pod 'React-CoreModules', :path => '../node_modules/react-native/React/CoreModules'
|
||||
pod 'React-Core/DevSupport', :path => '../node_modules/react-native/'
|
||||
pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS'
|
||||
pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation'
|
||||
pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob'
|
||||
pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image'
|
||||
pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS'
|
||||
pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network'
|
||||
pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings'
|
||||
pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text'
|
||||
pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration'
|
||||
pod 'React-Core/RCTWebSocket', :path => '../node_modules/react-native/'
|
||||
|
||||
pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact'
|
||||
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/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', :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'
|
||||
pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
|
||||
config = use_native_modules!
|
||||
use_react_native!(:path => config["reactNativePath"])
|
||||
|
||||
permissions_path = '../node_modules/react-native-permissions/ios'
|
||||
pod 'Permission-Camera', :path => "#{permissions_path}/Camera.podspec"
|
||||
|
|
@ -40,6 +14,13 @@ target 'Mattermost' do
|
|||
|
||||
pod 'XCDYouTubeKit', '2.8.2'
|
||||
pod 'Swime', '3.0.6'
|
||||
|
||||
use_native_modules!
|
||||
end
|
||||
|
||||
# Enables Flipper.
|
||||
#
|
||||
# Note that if you have use_frameworks! enabled, Flipper will not work and
|
||||
# you should disable these next few lines.
|
||||
# use_flipper!
|
||||
# post_install do |installer|
|
||||
# flipper_post_install(installer)
|
||||
# end
|
||||
|
|
|
|||
431
ios/Podfile.lock
431
ios/Podfile.lock
|
|
@ -3,20 +3,20 @@ PODS:
|
|||
- BVLinearGradient (2.5.6):
|
||||
- React
|
||||
- DoubleConversion (1.1.6)
|
||||
- FBLazyVector (0.62.2)
|
||||
- FBReactNativeSpec (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- RCTRequired (= 0.62.2)
|
||||
- RCTTypeSafety (= 0.62.2)
|
||||
- React-Core (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- ReactCommon/turbomodule/core (= 0.62.2)
|
||||
- Folly (2018.10.22.00):
|
||||
- FBLazyVector (0.63.1)
|
||||
- FBReactNativeSpec (0.63.1):
|
||||
- Folly (= 2020.01.13.00)
|
||||
- RCTRequired (= 0.63.1)
|
||||
- RCTTypeSafety (= 0.63.1)
|
||||
- React-Core (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- ReactCommon/turbomodule/core (= 0.63.1)
|
||||
- Folly (2020.01.13.00):
|
||||
- boost-for-react-native
|
||||
- DoubleConversion
|
||||
- Folly/Default (= 2018.10.22.00)
|
||||
- Folly/Default (= 2020.01.13.00)
|
||||
- glog
|
||||
- Folly/Default (2018.10.22.00):
|
||||
- Folly/Default (2020.01.13.00):
|
||||
- boost-for-react-native
|
||||
- DoubleConversion
|
||||
- glog
|
||||
|
|
@ -39,172 +39,175 @@ PODS:
|
|||
- RNPermissions
|
||||
- Permission-PhotoLibrary (2.1.4):
|
||||
- RNPermissions
|
||||
- RCTRequired (0.62.2)
|
||||
- RCTTypeSafety (0.62.2):
|
||||
- FBLazyVector (= 0.62.2)
|
||||
- Folly (= 2018.10.22.00)
|
||||
- RCTRequired (= 0.62.2)
|
||||
- React-Core (= 0.62.2)
|
||||
- RCTRequired (0.63.1)
|
||||
- RCTTypeSafety (0.63.1):
|
||||
- FBLazyVector (= 0.63.1)
|
||||
- Folly (= 2020.01.13.00)
|
||||
- RCTRequired (= 0.63.1)
|
||||
- React-Core (= 0.63.1)
|
||||
- RCTYouTube (2.0.1):
|
||||
- React
|
||||
- YoutubePlayer-in-WKWebView (~> 0.3.1)
|
||||
- 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)
|
||||
- React (0.63.1):
|
||||
- React-Core (= 0.63.1)
|
||||
- React-Core/DevSupport (= 0.63.1)
|
||||
- React-Core/RCTWebSocket (= 0.63.1)
|
||||
- React-RCTActionSheet (= 0.63.1)
|
||||
- React-RCTAnimation (= 0.63.1)
|
||||
- React-RCTBlob (= 0.63.1)
|
||||
- React-RCTImage (= 0.63.1)
|
||||
- React-RCTLinking (= 0.63.1)
|
||||
- React-RCTNetwork (= 0.63.1)
|
||||
- React-RCTSettings (= 0.63.1)
|
||||
- React-RCTText (= 0.63.1)
|
||||
- React-RCTVibration (= 0.63.1)
|
||||
- React-callinvoker (0.63.1)
|
||||
- React-Core (0.63.1):
|
||||
- Folly (= 2020.01.13.00)
|
||||
- glog
|
||||
- React-Core/Default (= 0.62.2)
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- React-Core/Default (= 0.63.1)
|
||||
- React-cxxreact (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- React-jsiexecutor (= 0.63.1)
|
||||
- Yoga
|
||||
- React-Core/CoreModulesHeaders (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- React-Core/CoreModulesHeaders (0.63.1):
|
||||
- Folly (= 2020.01.13.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- React-cxxreact (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- React-jsiexecutor (= 0.63.1)
|
||||
- Yoga
|
||||
- React-Core/Default (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- React-Core/Default (0.63.1):
|
||||
- Folly (= 2020.01.13.00)
|
||||
- glog
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- React-cxxreact (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- React-jsiexecutor (= 0.63.1)
|
||||
- Yoga
|
||||
- React-Core/DevSupport (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- React-Core/DevSupport (0.63.1):
|
||||
- Folly (= 2020.01.13.00)
|
||||
- glog
|
||||
- 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)
|
||||
- React-Core/Default (= 0.63.1)
|
||||
- React-Core/RCTWebSocket (= 0.63.1)
|
||||
- React-cxxreact (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- React-jsiexecutor (= 0.63.1)
|
||||
- React-jsinspector (= 0.63.1)
|
||||
- Yoga
|
||||
- React-Core/RCTActionSheetHeaders (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- React-Core/RCTActionSheetHeaders (0.63.1):
|
||||
- Folly (= 2020.01.13.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- React-cxxreact (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- React-jsiexecutor (= 0.63.1)
|
||||
- Yoga
|
||||
- React-Core/RCTAnimationHeaders (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- React-Core/RCTAnimationHeaders (0.63.1):
|
||||
- Folly (= 2020.01.13.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- React-cxxreact (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- React-jsiexecutor (= 0.63.1)
|
||||
- Yoga
|
||||
- React-Core/RCTBlobHeaders (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- React-Core/RCTBlobHeaders (0.63.1):
|
||||
- Folly (= 2020.01.13.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- React-cxxreact (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- React-jsiexecutor (= 0.63.1)
|
||||
- Yoga
|
||||
- React-Core/RCTImageHeaders (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- React-Core/RCTImageHeaders (0.63.1):
|
||||
- Folly (= 2020.01.13.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- React-cxxreact (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- React-jsiexecutor (= 0.63.1)
|
||||
- Yoga
|
||||
- React-Core/RCTLinkingHeaders (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- React-Core/RCTLinkingHeaders (0.63.1):
|
||||
- Folly (= 2020.01.13.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- React-cxxreact (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- React-jsiexecutor (= 0.63.1)
|
||||
- Yoga
|
||||
- React-Core/RCTNetworkHeaders (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- React-Core/RCTNetworkHeaders (0.63.1):
|
||||
- Folly (= 2020.01.13.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- React-cxxreact (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- React-jsiexecutor (= 0.63.1)
|
||||
- Yoga
|
||||
- React-Core/RCTSettingsHeaders (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- React-Core/RCTSettingsHeaders (0.63.1):
|
||||
- Folly (= 2020.01.13.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- React-cxxreact (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- React-jsiexecutor (= 0.63.1)
|
||||
- Yoga
|
||||
- React-Core/RCTTextHeaders (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- React-Core/RCTTextHeaders (0.63.1):
|
||||
- Folly (= 2020.01.13.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- React-cxxreact (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- React-jsiexecutor (= 0.63.1)
|
||||
- Yoga
|
||||
- React-Core/RCTVibrationHeaders (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- React-Core/RCTVibrationHeaders (0.63.1):
|
||||
- Folly (= 2020.01.13.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- React-cxxreact (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- React-jsiexecutor (= 0.63.1)
|
||||
- Yoga
|
||||
- React-Core/RCTWebSocket (0.62.2):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- React-Core/RCTWebSocket (0.63.1):
|
||||
- Folly (= 2020.01.13.00)
|
||||
- glog
|
||||
- React-Core/Default (= 0.62.2)
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsiexecutor (= 0.62.2)
|
||||
- React-Core/Default (= 0.63.1)
|
||||
- React-cxxreact (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- React-jsiexecutor (= 0.63.1)
|
||||
- Yoga
|
||||
- React-CoreModules (0.62.2):
|
||||
- FBReactNativeSpec (= 0.62.2)
|
||||
- Folly (= 2018.10.22.00)
|
||||
- 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):
|
||||
- React-CoreModules (0.63.1):
|
||||
- FBReactNativeSpec (= 0.63.1)
|
||||
- Folly (= 2020.01.13.00)
|
||||
- RCTTypeSafety (= 0.63.1)
|
||||
- React-Core/CoreModulesHeaders (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- React-RCTImage (= 0.63.1)
|
||||
- ReactCommon/turbomodule/core (= 0.63.1)
|
||||
- React-cxxreact (0.63.1):
|
||||
- boost-for-react-native (= 1.63.0)
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- Folly (= 2020.01.13.00)
|
||||
- glog
|
||||
- React-jsinspector (= 0.62.2)
|
||||
- React-jsi (0.62.2):
|
||||
- React-callinvoker (= 0.63.1)
|
||||
- React-jsinspector (= 0.63.1)
|
||||
- React-jsi (0.63.1):
|
||||
- boost-for-react-native (= 1.63.0)
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- Folly (= 2020.01.13.00)
|
||||
- glog
|
||||
- React-jsi/Default (= 0.62.2)
|
||||
- React-jsi/Default (0.62.2):
|
||||
- React-jsi/Default (= 0.63.1)
|
||||
- React-jsi/Default (0.63.1):
|
||||
- boost-for-react-native (= 1.63.0)
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- Folly (= 2020.01.13.00)
|
||||
- glog
|
||||
- React-jsiexecutor (0.62.2):
|
||||
- React-jsiexecutor (0.63.1):
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- Folly (= 2020.01.13.00)
|
||||
- glog
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- React-jsinspector (0.62.2)
|
||||
- React-cxxreact (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- React-jsinspector (0.63.1)
|
||||
- react-native-cameraroll (1.6.2):
|
||||
- React
|
||||
- react-native-cookies (3.2.0):
|
||||
|
|
@ -237,65 +240,66 @@ PODS:
|
|||
- React
|
||||
- react-native-webview (7.0.1):
|
||||
- React
|
||||
- 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):
|
||||
- React-RCTActionSheet (0.63.1):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.63.1)
|
||||
- React-RCTAnimation (0.63.1):
|
||||
- FBReactNativeSpec (= 0.63.1)
|
||||
- Folly (= 2020.01.13.00)
|
||||
- RCTTypeSafety (= 0.63.1)
|
||||
- React-Core/RCTAnimationHeaders (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- ReactCommon/turbomodule/core (= 0.63.1)
|
||||
- React-RCTBlob (0.63.1):
|
||||
- FBReactNativeSpec (= 0.63.1)
|
||||
- Folly (= 2020.01.13.00)
|
||||
- React-Core/RCTBlobHeaders (= 0.63.1)
|
||||
- React-Core/RCTWebSocket (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- React-RCTNetwork (= 0.63.1)
|
||||
- ReactCommon/turbomodule/core (= 0.63.1)
|
||||
- React-RCTImage (0.63.1):
|
||||
- FBReactNativeSpec (= 0.63.1)
|
||||
- Folly (= 2020.01.13.00)
|
||||
- RCTTypeSafety (= 0.63.1)
|
||||
- React-Core/RCTImageHeaders (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- React-RCTNetwork (= 0.63.1)
|
||||
- ReactCommon/turbomodule/core (= 0.63.1)
|
||||
- React-RCTLinking (0.63.1):
|
||||
- FBReactNativeSpec (= 0.63.1)
|
||||
- React-Core/RCTLinkingHeaders (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- ReactCommon/turbomodule/core (= 0.63.1)
|
||||
- React-RCTNetwork (0.63.1):
|
||||
- FBReactNativeSpec (= 0.63.1)
|
||||
- Folly (= 2020.01.13.00)
|
||||
- RCTTypeSafety (= 0.63.1)
|
||||
- React-Core/RCTNetworkHeaders (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- ReactCommon/turbomodule/core (= 0.63.1)
|
||||
- React-RCTSettings (0.63.1):
|
||||
- FBReactNativeSpec (= 0.63.1)
|
||||
- Folly (= 2020.01.13.00)
|
||||
- RCTTypeSafety (= 0.63.1)
|
||||
- React-Core/RCTSettingsHeaders (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- ReactCommon/turbomodule/core (= 0.63.1)
|
||||
- React-RCTText (0.63.1):
|
||||
- React-Core/RCTTextHeaders (= 0.63.1)
|
||||
- React-RCTVibration (0.63.1):
|
||||
- FBReactNativeSpec (= 0.63.1)
|
||||
- Folly (= 2020.01.13.00)
|
||||
- React-Core/RCTVibrationHeaders (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- ReactCommon/turbomodule/core (= 0.63.1)
|
||||
- ReactCommon/turbomodule/core (0.63.1):
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- Folly (= 2020.01.13.00)
|
||||
- glog
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- ReactCommon/turbomodule/core (0.62.2):
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core (= 0.62.2)
|
||||
- React-cxxreact (= 0.62.2)
|
||||
- React-jsi (= 0.62.2)
|
||||
- ReactCommon/callinvoker (= 0.62.2)
|
||||
- React-callinvoker (= 0.63.1)
|
||||
- React-Core (= 0.63.1)
|
||||
- React-cxxreact (= 0.63.1)
|
||||
- React-jsi (= 0.63.1)
|
||||
- ReactNativeExceptionHandler (2.10.8):
|
||||
- React
|
||||
- ReactNativeKeyboardTrackingView (5.7.0):
|
||||
|
|
@ -308,6 +312,8 @@ PODS:
|
|||
- React-Core
|
||||
- RNCAsyncStorage (1.10.1):
|
||||
- React
|
||||
- RNCClipboard (1.2.3):
|
||||
- React
|
||||
- RNCMaskedView (0.1.10):
|
||||
- React
|
||||
- RNDeviceInfo (5.5.7):
|
||||
|
|
@ -371,6 +377,7 @@ DEPENDENCIES:
|
|||
- RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
|
||||
- RCTYouTube (from `../node_modules/react-native-youtube`)
|
||||
- React (from `../node_modules/react-native/`)
|
||||
- React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
|
||||
- React-Core (from `../node_modules/react-native/`)
|
||||
- React-Core/DevSupport (from `../node_modules/react-native/`)
|
||||
- React-Core/RCTWebSocket (from `../node_modules/react-native/`)
|
||||
|
|
@ -402,13 +409,13 @@ 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/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`)
|
||||
- ReactNativeNavigation (from `../node_modules/react-native-navigation`)
|
||||
- rn-fetch-blob (from `../node_modules/rn-fetch-blob`)
|
||||
- "RNCAsyncStorage (from `../node_modules/@react-native-community/async-storage`)"
|
||||
- "RNCClipboard (from `../node_modules/@react-native-community/clipboard`)"
|
||||
- "RNCMaskedView (from `../node_modules/@react-native-community/masked-view`)"
|
||||
- RNDeviceInfo (from `../node_modules/react-native-device-info`)
|
||||
- RNFastImage (from `../node_modules/react-native-fast-image`)
|
||||
|
|
@ -469,6 +476,8 @@ EXTERNAL SOURCES:
|
|||
:path: "../node_modules/react-native-youtube"
|
||||
React:
|
||||
:path: "../node_modules/react-native/"
|
||||
React-callinvoker:
|
||||
:path: "../node_modules/react-native/ReactCommon/callinvoker"
|
||||
React-Core:
|
||||
:path: "../node_modules/react-native/"
|
||||
React-CoreModules:
|
||||
|
|
@ -539,6 +548,8 @@ EXTERNAL SOURCES:
|
|||
:path: "../node_modules/rn-fetch-blob"
|
||||
RNCAsyncStorage:
|
||||
:path: "../node_modules/@react-native-community/async-storage"
|
||||
RNCClipboard:
|
||||
:path: "../node_modules/@react-native-community/clipboard"
|
||||
RNCMaskedView:
|
||||
:path: "../node_modules/@react-native-community/masked-view"
|
||||
RNDeviceInfo:
|
||||
|
|
@ -575,27 +586,28 @@ EXTERNAL SOURCES:
|
|||
SPEC CHECKSUMS:
|
||||
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
|
||||
BVLinearGradient: e3aad03778a456d77928f594a649e96995f1c872
|
||||
DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2
|
||||
FBLazyVector: 4aab18c93cd9546e4bfed752b4084585eca8b245
|
||||
FBReactNativeSpec: 5465d51ccfeecb7faa12f9ae0024f2044ce4044e
|
||||
Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51
|
||||
glog: 1f3da668190260b06b429bb211bfbee5cd790c28
|
||||
DoubleConversion: cde416483dac037923206447da6e1454df403714
|
||||
FBLazyVector: a50434c875bd42f2b1c99c712bda892a1dc659c7
|
||||
FBReactNativeSpec: 393853a536428e05a9da00b6290042f09809b15b
|
||||
Folly: b73c3869541e86821df3c387eb0af5f65addfab4
|
||||
glog: 40a13f7840415b9a77023fbcae0f1e6f43192af3
|
||||
jail-monkey: d7c5048b2336f22ee9c9e0efa145f1f917338ea9
|
||||
libwebp: 946cb3063cea9236285f7e9a8505d806d30e07f3
|
||||
MMKV: 5eb44526fcf38152328ebfeff5ec585972ace00d
|
||||
MMKVCore: 2748bf702287a814a6c514d054033e41e07f5c0f
|
||||
Permission-Camera: 3ed116545ee8806cd706bca0e1a9a2c3cd36c6bd
|
||||
Permission-PhotoLibrary: 56e71522b008d9abca150680c1f8050f267cdffb
|
||||
RCTRequired: cec6a34b3ac8a9915c37e7e4ad3aa74726ce4035
|
||||
RCTTypeSafety: 93006131180074cffa227a1075802c89a49dd4ce
|
||||
RCTRequired: d9b1a9e6fa097744ca3ede59f86a35096df7202b
|
||||
RCTTypeSafety: c227cd061983e9e964115afbc4e8730d6a6f1395
|
||||
RCTYouTube: 7ff7d42f5ed42d185198681e967fd2c2b661375d
|
||||
React: 29a8b1a02bd764fb7644ef04019270849b9a7ac3
|
||||
React-Core: b12bffb3f567fdf99510acb716ef1abd426e0e05
|
||||
React-CoreModules: 4a9b87bbe669d6c3173c0132c3328e3b000783d0
|
||||
React-cxxreact: e65f9c2ba0ac5be946f53548c1aaaee5873a8103
|
||||
React-jsi: b6dc94a6a12ff98e8877287a0b7620d365201161
|
||||
React-jsiexecutor: 1540d1c01bb493ae3124ed83351b1b6a155db7da
|
||||
React-jsinspector: 512e560d0e985d0e8c479a54a4e5c147a9c83493
|
||||
React: 86e972a20967ee4137aa19dc48319405927c2e94
|
||||
React-callinvoker: 87ee376c25277d74e164ff036b27084e343f3e69
|
||||
React-Core: f5ec03baf7ed58d9f3ee04a8f84e4c97ee8bf4c9
|
||||
React-CoreModules: 958898aa8c069280e866e35a2f29480a81fcf335
|
||||
React-cxxreact: 90de76b9b51575668ad7fd4e33a5a8c143beecc2
|
||||
React-jsi: b32a31da32e030f30bbf9a8d3a9c8325df9e793f
|
||||
React-jsiexecutor: 7ab9cdcdd18d57652fb041f8a147fe9658d4e00a
|
||||
React-jsinspector: 2e28bb487e42dda6c94dbfa0c648d1343767a0fb
|
||||
react-native-cameraroll: 94bec91c68b94ac946c61b497b594bb38692c41b
|
||||
react-native-cookies: 854d59c4135c70b92a02ca4930e68e4e2eb58150
|
||||
react-native-document-picker: d694111879537cec2c258a1dcd2243d9df746824
|
||||
|
|
@ -610,21 +622,22 @@ SPEC CHECKSUMS:
|
|||
react-native-safe-area-context: 5f3e081f937ab7c44c179d551f332fa494cfcf8f
|
||||
react-native-video: 961749da457e73bf0b5565edfbaffc25abfb8974
|
||||
react-native-webview: 0d1c2b4e7ffb0543a74fa0512f2f8dc5fb0e49e2
|
||||
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
|
||||
React-RCTActionSheet: 1702a1a85e550b5c36e2e03cb2bd3adea053de95
|
||||
React-RCTAnimation: ddda576010a878865a4eab83a78acd92176ef6a1
|
||||
React-RCTBlob: 34334384284c81577409d5205bd2b9ff594d8ab6
|
||||
React-RCTImage: e2a661266dca295cffb33909cc64675a2efedb26
|
||||
React-RCTLinking: cd39b9b5e9cbb9e827854e30dfa92d7db074cea8
|
||||
React-RCTNetwork: 16939b7e4058d6f662b304a1f61689e249a2bfcc
|
||||
React-RCTSettings: 24726a62de0c326f9ebfc3838898a501b87ce711
|
||||
React-RCTText: 4f95d322b7e6da72817284abf8a2cdcec18b9cd8
|
||||
React-RCTVibration: f3a9123c244f35c40d3c9f3ec3f0b9e5717bb292
|
||||
ReactCommon: 2905859f84a94a381bb0d8dd3921ccb1a0047cb8
|
||||
ReactNativeExceptionHandler: 8025d98049c25f186835a3af732dd7c9974d6dce
|
||||
ReactNativeKeyboardTrackingView: 02137fac3b2ebd330d74fa54ead48b14750a2306
|
||||
ReactNativeNavigation: 667586f6924fbd09512e2933fe70497db914b758
|
||||
rn-fetch-blob: 17961aec08caae68bb8fc0e5b40f93b3acfa6932
|
||||
RNCAsyncStorage: f640ddf9266df777c38e112ea5881ead7188b59c
|
||||
RNCClipboard: 5f3218dcdc28405aa2ae72b78e388f150b826dd3
|
||||
RNCMaskedView: f5c7d14d6847b7b44853f7acb6284c1da30a3459
|
||||
RNDeviceInfo: 498ccbf8b1361fe858581e3c1193ecee1a031e62
|
||||
RNFastImage: 35ae972d6727c84ee3f5c6897e07f84d0a3445e9
|
||||
|
|
@ -646,9 +659,9 @@ SPEC CHECKSUMS:
|
|||
Sentry: 14bdd673870e8cf64932b149fad5bbbf39a9b390
|
||||
Swime: d7b2c277503b6cea317774aedc2dce05613f8b0b
|
||||
XCDYouTubeKit: 79baadb0560673a67c771eba45f83e353fd12c1f
|
||||
Yoga: 3ebccbdd559724312790e7742142d062476b698e
|
||||
Yoga: d5bd05a2b6b94c52323745c2c2b64557c8c66f64
|
||||
YoutubePlayer-in-WKWebView: af2f5929fc78882d94bfdfeea999b661b78d9717
|
||||
|
||||
PODFILE CHECKSUM: b702b8a61a954eeed0648fa4ec502da4ea8b6748
|
||||
PODFILE CHECKSUM: 1aabd16b6a9ed2037b4d7443027d222817790468
|
||||
|
||||
COCOAPODS: 1.7.5
|
||||
|
|
|
|||
43
ios/SplashScreenResource/LaunchScreen.storyboard
Normal file
43
ios/SplashScreenResource/LaunchScreen.storyboard
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16097" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
||||
<device id="retina6_5" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="EHf-IW-A2E">
|
||||
<objects>
|
||||
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
||||
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="splash.png" translatesAutoresizingMaskIntoConstraints="NO" id="UpL-W2-INZ">
|
||||
<rect key="frame" x="0.0" y="241" width="414" height="414"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="414" id="S4P-Ok-V6e"/>
|
||||
<constraint firstAttribute="height" constant="414" id="Xu2-0Q-1av"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="UpL-W2-INZ" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="eka-4s-Xin"/>
|
||||
<constraint firstItem="UpL-W2-INZ" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="lI4-YK-lDO"/>
|
||||
</constraints>
|
||||
<viewLayoutGuide key="safeArea" id="Bcu-3y-fUS"/>
|
||||
</view>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="50.724637681159422" y="374.33035714285711"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="splash.png" width="720" height="720"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="11762" systemVersion="16D32" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES">
|
||||
<device id="retina4_7" orientation="portrait">
|
||||
<adaptation id="fullscreen"/>
|
||||
</device>
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11757"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<view contentMode="scaleToFill" id="iN0-l3-epB">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="splash.png" translatesAutoresizingMaskIntoConstraints="NO" id="ZkI-RL-69Z">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
|
||||
</imageView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="ZkI-RL-69Z" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="7dE-9J-TdO"/>
|
||||
<constraint firstAttribute="trailing" secondItem="ZkI-RL-69Z" secondAttribute="trailing" id="KFm-od-sbN"/>
|
||||
<constraint firstAttribute="bottom" secondItem="ZkI-RL-69Z" secondAttribute="bottom" id="afY-hI-KgI"/>
|
||||
<constraint firstItem="ZkI-RL-69Z" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="eMX-qT-GeJ"/>
|
||||
</constraints>
|
||||
<nil key="simulatedStatusBarMetrics"/>
|
||||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
||||
<point key="canvasLocation" x="548" y="455"/>
|
||||
</view>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="splash.png" width="720" height="1280"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
// See LICENSE.txt for license information.
|
||||
|
||||
module.exports = {
|
||||
preset: '@testing-library/react-native',
|
||||
preset: 'react-native',
|
||||
verbose: true,
|
||||
globals: {
|
||||
'ts-jest': {
|
||||
|
|
|
|||
6011
package-lock.json
generated
6011
package-lock.json
generated
File diff suppressed because it is too large
Load diff
59
package.json
59
package.json
|
|
@ -7,9 +7,10 @@
|
|||
"license": "Apache 2.0",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@babel/runtime": "7.9.6",
|
||||
"@babel/runtime": "7.10.4",
|
||||
"@react-native-community/async-storage": "1.10.1",
|
||||
"@react-native-community/cameraroll": "1.6.2",
|
||||
"@react-native-community/clipboard": "1.2.3",
|
||||
"@react-native-community/masked-view": "0.1.10",
|
||||
"@react-native-community/netinfo": "5.8.1",
|
||||
"@react-navigation/native": "5.3.2",
|
||||
|
|
@ -32,7 +33,7 @@
|
|||
"prop-types": "15.7.2",
|
||||
"react": "16.13.1",
|
||||
"react-intl": "2.8.0",
|
||||
"react-native": "0.62.2",
|
||||
"react-native": "0.63.1",
|
||||
"react-native-android-open-settings": "1.3.0",
|
||||
"react-native-animatable": "1.3.3",
|
||||
"react-native-button": "3.0.1",
|
||||
|
|
@ -50,7 +51,7 @@
|
|||
"react-native-hw-keyboard-event": "0.0.4",
|
||||
"react-native-image-gallery": "github:mattermost/react-native-image-gallery#c1a9f7118e90cc87d47620bc0584c9cac4b0cf38",
|
||||
"react-native-image-picker": "2.3.1",
|
||||
"react-native-keyboard-aware-scroll-view": "0.9.1",
|
||||
"react-native-keyboard-aware-scrollview": "2.1.0",
|
||||
"react-native-keyboard-tracking-view": "5.7.0",
|
||||
"react-native-keychain": "4.0.5",
|
||||
"react-native-linear-gradient": "2.5.6",
|
||||
|
|
@ -91,57 +92,57 @@
|
|||
"url-parse": "1.4.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/cli": "7.8.4",
|
||||
"@babel/core": "7.9.6",
|
||||
"@babel/plugin-transform-runtime": "7.9.6",
|
||||
"@babel/preset-env": "7.9.6",
|
||||
"@babel/register": "7.9.0",
|
||||
"@testing-library/react-native": "5.0.3",
|
||||
"@babel/cli": "7.10.4",
|
||||
"@babel/core": "7.10.4",
|
||||
"@babel/plugin-transform-runtime": "7.10.4",
|
||||
"@babel/preset-env": "7.10.4",
|
||||
"@babel/register": "7.10.4",
|
||||
"@react-native-community/eslint-config": "1.1.0",
|
||||
"@types/enzyme": "3.10.5",
|
||||
"@types/enzyme-adapter-react-16": "1.0.6",
|
||||
"@types/jest": "25.2.2",
|
||||
"@types/jest": "26.0.4",
|
||||
"@types/moment-timezone": "0.5.13",
|
||||
"@types/react": "16.9.35",
|
||||
"@types/react-native": "0.62.10",
|
||||
"@types/react": "16.9.43",
|
||||
"@types/react-native": "0.62.18",
|
||||
"@types/react-test-renderer": "16.9.2",
|
||||
"@types/shallow-equals": "1.0.0",
|
||||
"@typescript-eslint/eslint-plugin": "2.33.0",
|
||||
"@typescript-eslint/parser": "2.33.0",
|
||||
"@typescript-eslint/eslint-plugin": "3.6.0",
|
||||
"@typescript-eslint/parser": "3.6.0",
|
||||
"babel-eslint": "10.1.0",
|
||||
"babel-jest": "26.0.1",
|
||||
"babel-jest": "26.1.0",
|
||||
"babel-plugin-module-resolver": "4.0.0",
|
||||
"babel-plugin-transform-remove-console": "6.9.4",
|
||||
"deep-freeze": "0.0.1",
|
||||
"enzyme": "3.11.0",
|
||||
"enzyme-adapter-react-16": "1.15.2",
|
||||
"enzyme-to-json": "3.4.4",
|
||||
"eslint": "7.0.0",
|
||||
"enzyme-to-json": "3.5.0",
|
||||
"eslint": "7.4.0",
|
||||
"eslint-plugin-header": "3.0.0",
|
||||
"eslint-plugin-jest": "23.13.0",
|
||||
"eslint-plugin-jest": "23.18.0",
|
||||
"eslint-plugin-mattermost": "github:mattermost/eslint-plugin-mattermost#070ce792d105482ffb2b27cfc0b7e78b3d20acee",
|
||||
"eslint-plugin-react": "7.20.0",
|
||||
"eslint-plugin-react": "7.20.3",
|
||||
"harmony-reflect": "1.6.1",
|
||||
"husky": "4.2.5",
|
||||
"isomorphic-fetch": "2.2.1",
|
||||
"jest": "26.0.1",
|
||||
"jest-cli": "26.0.1",
|
||||
"jest": "26.1.0",
|
||||
"jest-cli": "26.1.0",
|
||||
"jest-enzyme": "7.1.2",
|
||||
"jetifier": "1.6.5",
|
||||
"jetifier": "1.6.6",
|
||||
"jsdom-global": "3.0.2",
|
||||
"metro-react-native-babel-preset": "0.59.0",
|
||||
"metro-react-native-babel-preset": "0.60.0",
|
||||
"mmjstool": "github:mattermost/mattermost-utilities#086f4ffdca4e31a0be22f6bcdfa093ed83fb29e",
|
||||
"mock-async-storage": "2.2.0",
|
||||
"mock-socket": "9.0.3",
|
||||
"nock": "12.0.3",
|
||||
"nyc": "15.0.1",
|
||||
"nock": "13.0.2",
|
||||
"nyc": "15.1.0",
|
||||
"patch-package": "6.2.2",
|
||||
"react-dom": "16.13.1",
|
||||
"react-test-renderer": "16.13.1",
|
||||
"redux-mock-store": "1.5.4",
|
||||
"redux-persist-node-storage": "2.0.0",
|
||||
"socketcluster": "16.0.1",
|
||||
"ts-jest": "26.0.0",
|
||||
"typescript": "3.9.2",
|
||||
"ts-jest": "26.1.1",
|
||||
"typescript": "3.9.6",
|
||||
"underscore": "1.10.2",
|
||||
"util": "0.12.3"
|
||||
},
|
||||
|
|
@ -156,8 +157,8 @@
|
|||
"fix": "eslint --ignore-path .gitignore --ignore-pattern node_modules --quiet . --fix",
|
||||
"postinstall": "make post-install",
|
||||
"tsc": "NODE_OPTIONS=--max_old_space_size=12000 tsc --noEmit",
|
||||
"test": "jest --forceExit --detectOpenHandles",
|
||||
"test:watch": "jest --watch",
|
||||
"test": "jest --forceExit --runInBand --detectOpenHandles",
|
||||
"test:watch": "jest --watch --runInBand --detectOpenHandles",
|
||||
"test:coverage": "jest --coverage",
|
||||
"updatesnapshot": "jest --updateSnapshot",
|
||||
"mmjstool": "mmjstool"
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
- react-native-video
|
||||
- react-native/Libraries/Core/Devtools
|
||||
- react-native/Libraries/Utilities/deepFreezeAndThrowOnMutationInDev
|
||||
- react-native/Libraries/YellowBox
|
||||
- react-native/Libraries/LogBox
|
||||
- redux-devtools-instrument
|
||||
- remove-redux-devtools
|
||||
- remotedev-utils
|
||||
|
|
|
|||
|
|
@ -1,21 +1,21 @@
|
|||
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
|
||||
index e8598a6..62bcf45 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>({
|
||||
});
|
||||
@@ -560,7 +560,7 @@ if (global.RN$Bridgeless) {
|
||||
AndroidTextInputNativeComponent = 'AndroidTextInput';
|
||||
} else {
|
||||
AndroidTextInputNativeComponent = requireNativeComponent<NativeProps>(
|
||||
- 'AndroidTextInput',
|
||||
+ 'PasteableTextInputAndroid',
|
||||
);
|
||||
}
|
||||
|
||||
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
|
||||
index 2da6323..1f64ffe 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 {
|
||||
@@ -2796,6 +2796,7 @@ namespace JS {
|
||||
namespace NativeWebSocketModule {
|
||||
struct SpecConnectOptions {
|
||||
id<NSObject> _Nullable headers() const;
|
||||
|
|
@ -23,17 +23,18 @@ index bb1c8d2..a0ea89f 100644
|
|||
|
||||
SpecConnectOptions(NSDictionary *const v) : _v(v) {}
|
||||
private:
|
||||
@@ -3870,3 +3871,8 @@ inline id<NSObject> _Nullable JS::NativeWebSocketModule::SpecConnectOptions::hea
|
||||
@@ -3862,3 +3863,9 @@ 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 5ef712c..d6f9082 100644
|
||||
index 9ec105f..18f7bf6 100644
|
||||
--- a/node_modules/react-native/Libraries/Lists/VirtualizedList.js
|
||||
+++ b/node_modules/react-native/Libraries/Lists/VirtualizedList.js
|
||||
@@ -20,6 +20,7 @@ const ScrollView = require('../Components/ScrollView/ScrollView');
|
||||
|
|
@ -44,7 +45,7 @@ index 5ef712c..d6f9082 100644
|
|||
|
||||
const flattenStyle = require('../StyleSheet/flattenStyle');
|
||||
const infoLog = require('../Utilities/infoLog');
|
||||
@@ -2100,7 +2101,7 @@ class VirtualizedCellWrapper extends React.Component<{
|
||||
@@ -2186,7 +2187,7 @@ function describeNestedLists(childList: {
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
verticallyInverted: {
|
||||
|
|
@ -84,7 +85,7 @@ index 1b17cff..70a59b6 100644
|
|||
|
||||
#pragma mark - RCTSRWebSocketDelegate
|
||||
diff --git a/node_modules/react-native/Libraries/WebSocket/RCTSRWebSocket.m b/node_modules/react-native/Libraries/WebSocket/RCTSRWebSocket.m
|
||||
index b967c14..e24e926 100644
|
||||
index b967c14..1a38e00 100644
|
||||
--- a/node_modules/react-native/Libraries/WebSocket/RCTSRWebSocket.m
|
||||
+++ b/node_modules/react-native/Libraries/WebSocket/RCTSRWebSocket.m
|
||||
@@ -228,7 +228,7 @@ @implementation RCTSRWebSocket
|
||||
|
|
@ -125,14 +126,14 @@ index b967c14..e24e926 100644
|
|||
}
|
||||
|
||||
- (void)_RCTSR_commonInit
|
||||
@@ -344,6 +348,37 @@ - (void)setReadyState:(RCTSRReadyState)aReadyState
|
||||
@@ -344,6 +348,36 @@ - (void)setReadyState:(RCTSRReadyState)aReadyState
|
||||
|
||||
#endif
|
||||
|
||||
+- (SecIdentityRef) GetIdentityByName:(NSString *)name
|
||||
+{
|
||||
+ NSMutableDictionary * query = [[NSMutableDictionary alloc] init];
|
||||
+
|
||||
+
|
||||
+ //Set up the invariant pieces of the query
|
||||
+ [query setObject:(id)kSecMatchLimitAll forKey:(id)kSecMatchLimit];
|
||||
+ [query setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnRef];
|
||||
|
|
@ -140,7 +141,7 @@ index b967c14..e24e926 100644
|
|||
+ [query setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnAttributes];
|
||||
+ [query setObject:(id)kSecClassIdentity forKey:(id)kSecClass];
|
||||
+ [query setObject:name forKey:(id)kSecAttrLabel];
|
||||
+
|
||||
+
|
||||
+ OSStatus resultCode = noErr;
|
||||
+ CFTypeRef result = nil;
|
||||
+ //Execute the query saving the results in items.
|
||||
|
|
@ -153,17 +154,16 @@ index b967c14..e24e926 100644
|
|||
+ {
|
||||
+ identity = (SecIdentityRef)value;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ return identity;
|
||||
+ }
|
||||
+ return nil;
|
||||
+}
|
||||
+
|
||||
+
|
||||
- (void)open
|
||||
{
|
||||
assert(_url);
|
||||
@@ -515,6 +550,24 @@ - (void)_initializeStreams
|
||||
@@ -515,6 +549,24 @@ - (void)_initializeStreams
|
||||
RCTLogInfo(@"SocketRocket: In debug mode. Allowing connection to any root cert");
|
||||
#endif
|
||||
|
||||
|
|
@ -189,10 +189,10 @@ index b967c14..e24e926 100644
|
|||
forKey:(__bridge id)kCFStreamPropertySSLSettings];
|
||||
}
|
||||
diff --git a/node_modules/react-native/Libraries/WebSocket/WebSocket.js b/node_modules/react-native/Libraries/WebSocket/WebSocket.js
|
||||
index a1679bd..9445e3e 100644
|
||||
index 0b051c4..d5bbf3f 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) {
|
||||
@@ -91,7 +91,7 @@ class WebSocket extends (EventTarget(...WEBSOCKET_EVENTS): any) {
|
||||
protocols = [protocols];
|
||||
}
|
||||
|
||||
|
|
@ -201,7 +201,7 @@ index a1679bd..9445e3e 100644
|
|||
|
||||
// Preserve deprecated backwards compatibility for the 'origin' option
|
||||
/* $FlowFixMe(>=0.68.0 site=react_native_fb) This comment suppresses an
|
||||
@@ -129,7 +129,7 @@ class WebSocket extends (EventTarget(...WEBSOCKET_EVENTS): any) {
|
||||
@@ -128,7 +128,7 @@ class WebSocket extends (EventTarget(...WEBSOCKET_EVENTS): any) {
|
||||
this._eventEmitter = new NativeEventEmitter(NativeWebSocketModule);
|
||||
this._socketId = nextWebSocketId++;
|
||||
this._registerEvents();
|
||||
|
|
@ -211,7 +211,7 @@ index a1679bd..9445e3e 100644
|
|||
|
||||
get binaryType(): ?BinaryType {
|
||||
diff --git a/node_modules/react-native/React/CoreModules/RCTWebSocketModule.mm b/node_modules/react-native/React/CoreModules/RCTWebSocketModule.mm
|
||||
index 06734d3..6d1d5ed 100644
|
||||
index 9648b18..3594b43 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
|
||||
|
|
@ -219,24 +219,24 @@ index 06734d3..6d1d5ed 100644
|
|||
}
|
||||
|
||||
- RCTSRWebSocket *webSocket = [[RCTSRWebSocket alloc] initWithURLRequest:request protocols:protocols];
|
||||
+ RCTSRWebSocket *webSocket = [[RCTSRWebSocket alloc] initWithURLRequest:request protocols:protocols certificate:options.certificate()];
|
||||
+ 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 d886a9b..8febb59 100644
|
||||
index 6441d93..4a0cd01 100644
|
||||
--- a/node_modules/react-native/react.gradle
|
||||
+++ b/node_modules/react-native/react.gradle
|
||||
@@ -143,7 +143,7 @@ afterEvaluate {
|
||||
@@ -157,7 +157,7 @@ afterEvaluate {
|
||||
|
||||
// Set up dev mode
|
||||
def devEnabled = !(config."devDisabledIn${targetName}"
|
||||
- || targetName.toLowerCase().contains("release"))
|
||||
+ || targetName.toLowerCase().contains("release") || targetName.toLowerCase().contains("unsigned"))
|
||||
|
||||
def extraArgs = extraPackagerArgs;
|
||||
def extraArgs = config.extraPackagerArgs ?: [];
|
||||
|
||||
@@ -163,7 +163,7 @@ afterEvaluate {
|
||||
@@ -177,7 +177,7 @@ afterEvaluate {
|
||||
def hermesFlags;
|
||||
def hbcTempFile = file("${jsBundleFile}.hbc")
|
||||
exec {
|
||||
|
|
@ -245,7 +245,7 @@ index d886a9b..8febb59 100644
|
|||
// Can't use ?: since that will also substitute valid empty lists
|
||||
hermesFlags = config.hermesFlagsRelease
|
||||
if (hermesFlags == null) hermesFlags = ["-O", "-output-source-map"]
|
||||
@@ -207,7 +207,7 @@ afterEvaluate {
|
||||
@@ -221,7 +221,7 @@ afterEvaluate {
|
||||
? config."bundleIn${targetName}"
|
||||
: config."bundleIn${variant.buildType.name.capitalize()}" != null
|
||||
? config."bundleIn${variant.buildType.name.capitalize()}"
|
||||
|
|
@ -254,7 +254,7 @@ index d886a9b..8febb59 100644
|
|||
}
|
||||
|
||||
// Expose a minimal interface on the application variant and the task itself:
|
||||
@@ -299,7 +299,7 @@ afterEvaluate {
|
||||
@@ -313,7 +313,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.
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
diff --git a/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/ImagePickerModule.java b/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/ImagePickerModule.java
|
||||
index 48fb5c1..3def244 100644
|
||||
index 48fb5c1..3872d91 100644
|
||||
--- a/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/ImagePickerModule.java
|
||||
+++ b/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/ImagePickerModule.java
|
||||
@@ -3,6 +3,7 @@ package com.imagepicker;
|
||||
|
|
@ -233,7 +233,7 @@ index 48fb5c1..3def244 100644
|
|||
if (imageConfig.resized == null)
|
||||
{
|
||||
removeUselessFiles(requestCode, imageConfig);
|
||||
@@ -523,6 +508,63 @@ public class ImagePickerModule extends ReactContextBaseJavaModule
|
||||
@@ -523,6 +508,64 @@ public class ImagePickerModule extends ReactContextBaseJavaModule
|
||||
this.options = null;
|
||||
}
|
||||
|
||||
|
|
@ -284,7 +284,8 @@ index 48fb5c1..3def244 100644
|
|||
+ extractImageFromResult(activity, cameraCaptureURI, requestCode);
|
||||
+ } else {
|
||||
+ Uri selectedMediaUri = data.getData();
|
||||
+ if (selectedMediaUri.toString().contains("image")) {
|
||||
+ String mime = getMimeType(activity, selectedMediaUri);
|
||||
+ if (mime.contains("image")) {
|
||||
+ extractImageFromResult(activity, selectedMediaUri, requestCode);
|
||||
+ } else {
|
||||
+ extractVideoFromResult(selectedMediaUri);
|
||||
|
|
@ -297,7 +298,7 @@ index 48fb5c1..3def244 100644
|
|||
public void invokeCustomButton(@NonNull final String action)
|
||||
{
|
||||
responseHelper.invokeCustomButton(this.callback, action);
|
||||
@@ -551,7 +593,8 @@ public class ImagePickerModule extends ReactContextBaseJavaModule
|
||||
@@ -551,7 +594,8 @@ public class ImagePickerModule extends ReactContextBaseJavaModule
|
||||
{
|
||||
return callback == null || (cameraCaptureURI == null && requestCode == REQUEST_LAUNCH_IMAGE_CAPTURE)
|
||||
|| (requestCode != REQUEST_LAUNCH_IMAGE_CAPTURE && requestCode != REQUEST_LAUNCH_IMAGE_LIBRARY
|
||||
|
|
@ -307,7 +308,7 @@ index 48fb5c1..3def244 100644
|
|||
}
|
||||
|
||||
private void updatedResultResponse(@Nullable final Uri uri,
|
||||
@@ -571,22 +614,23 @@ public class ImagePickerModule extends ReactContextBaseJavaModule
|
||||
@@ -571,22 +615,23 @@ public class ImagePickerModule extends ReactContextBaseJavaModule
|
||||
@NonNull final Callback callback,
|
||||
@NonNull final int requestCode)
|
||||
{
|
||||
|
|
@ -340,7 +341,7 @@ index 48fb5c1..3def244 100644
|
|||
if (!permissionsGranted)
|
||||
{
|
||||
final Boolean dontAskAgain = ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) && ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.CAMERA);
|
||||
@@ -787,4 +831,22 @@ public class ImagePickerModule extends ReactContextBaseJavaModule
|
||||
@@ -787,4 +832,22 @@ public class ImagePickerModule extends ReactContextBaseJavaModule
|
||||
videoDurationLimit = options.getInt("durationLimit");
|
||||
}
|
||||
}
|
||||
|
|
@ -363,3 +364,113 @@ index 48fb5c1..3def244 100644
|
|||
+ cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, cameraCaptureURI);
|
||||
+ }
|
||||
}
|
||||
diff --git a/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/utils/RealPathUtil.java b/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/utils/RealPathUtil.java
|
||||
index cc90dce..c1cc74d 100644
|
||||
--- a/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/utils/RealPathUtil.java
|
||||
+++ b/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/utils/RealPathUtil.java
|
||||
@@ -7,16 +7,22 @@ import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.provider.DocumentsContract;
|
||||
import android.provider.MediaStore;
|
||||
+import android.provider.OpenableColumns;
|
||||
import android.content.ContentUris;
|
||||
import android.os.Environment;
|
||||
+import android.os.ParcelFileDescriptor;
|
||||
+import android.webkit.MimeTypeMap;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.content.FileProvider;
|
||||
|
||||
-import java.io.File;
|
||||
+import java.io.*;
|
||||
+import java.nio.channels.FileChannel;
|
||||
|
||||
public class RealPathUtil {
|
||||
|
||||
+ public static final String CACHE_DIR_NAME = "mmShare";
|
||||
+
|
||||
public static @Nullable Uri compatUriFromFile(@NonNull final Context context,
|
||||
@NonNull final File file) {
|
||||
Uri result = null;
|
||||
@@ -58,12 +64,7 @@ public class RealPathUtil {
|
||||
}
|
||||
// DownloadsProvider
|
||||
else if (isDownloadsDocument(uri)) {
|
||||
-
|
||||
- final String id = DocumentsContract.getDocumentId(uri);
|
||||
- final Uri contentUri = ContentUris.withAppendedId(
|
||||
- Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
|
||||
-
|
||||
- return getDataColumn(context, contentUri, null, null);
|
||||
+ return getPathFromSavingTempFile(context, uri);
|
||||
}
|
||||
// MediaProvider
|
||||
else if (isMediaDocument(uri)) {
|
||||
@@ -89,7 +90,7 @@ public class RealPathUtil {
|
||||
}
|
||||
}
|
||||
// MediaStore (and general)
|
||||
- else if ("content".equalsIgnoreCase(uri.getScheme())) {
|
||||
+ if ("content".equalsIgnoreCase(uri.getScheme())) {
|
||||
|
||||
// Return the remote address
|
||||
if (isGooglePhotosUri(uri))
|
||||
@@ -98,7 +99,7 @@ public class RealPathUtil {
|
||||
if (isFileProviderUri(context, uri))
|
||||
return getFileProviderPath(context, uri);
|
||||
|
||||
- return getDataColumn(context, uri, null, null);
|
||||
+ return getPathFromSavingTempFile(context, uri);
|
||||
}
|
||||
// File
|
||||
else if ("file".equalsIgnoreCase(uri.getScheme())) {
|
||||
@@ -108,6 +109,49 @@ public class RealPathUtil {
|
||||
return null;
|
||||
}
|
||||
|
||||
+
|
||||
+ public static String getPathFromSavingTempFile(Context context, final Uri uri) {
|
||||
+ File tmpFile;
|
||||
+ String fileName = null;
|
||||
+
|
||||
+ // Try and get the filename from the Uri
|
||||
+ try {
|
||||
+ Cursor returnCursor =
|
||||
+ context.getContentResolver().query(uri, null, null, null, null);
|
||||
+ int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
|
||||
+ returnCursor.moveToFirst();
|
||||
+ fileName = returnCursor.getString(nameIndex);
|
||||
+ } catch (Exception e) {
|
||||
+ // just continue to get the filename with the last segment of the path
|
||||
+ }
|
||||
+
|
||||
+ try {
|
||||
+ if (fileName == null) {
|
||||
+ fileName = uri.getLastPathSegment().toString().trim();
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ File cacheDir = new File(context.getCacheDir(), CACHE_DIR_NAME);
|
||||
+ if (!cacheDir.exists()) {
|
||||
+ cacheDir.mkdirs();
|
||||
+ }
|
||||
+
|
||||
+ tmpFile = new File(cacheDir, fileName);
|
||||
+ tmpFile.createNewFile();
|
||||
+
|
||||
+ ParcelFileDescriptor pfd = context.getContentResolver().openFileDescriptor(uri, "r");
|
||||
+
|
||||
+ FileChannel src = new FileInputStream(pfd.getFileDescriptor()).getChannel();
|
||||
+ FileChannel dst = new FileOutputStream(tmpFile).getChannel();
|
||||
+ dst.transferFrom(src, 0, src.size());
|
||||
+ src.close();
|
||||
+ dst.close();
|
||||
+ } catch (IOException ex) {
|
||||
+ return null;
|
||||
+ }
|
||||
+ return tmpFile.getAbsolutePath();
|
||||
+ }
|
||||
+
|
||||
/**
|
||||
* Get the value of the data column for this Uri. This is useful for
|
||||
* MediaStore Uris, and other file-based ContentProviders.
|
||||
|
|
|
|||
Loading…
Reference in a new issue