Update dependencies

This commit is contained in:
Elias Nahum
2022-03-25 19:59:14 -03:00
parent 86ae1fc9cc
commit 527bd04170
64 changed files with 1729 additions and 2220 deletions

View File

@@ -43,41 +43,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
---
## @react-native-async-storage/async-storage
This product contains 'async-storage' by Facebook.
Asynchronous, persistent, key-value storage system for React Native.
* HOMEPAGE:
* https://github.com/react-native-async-storage/async-storage/
* LICENSE: MIT
MIT License
Copyright (c) 2015-present, Facebook, Inc.
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-community/cameraroll
This product contains 'cameraroll' by Bartol Karuza.
@@ -148,19 +113,6 @@ SOFTWARE.
---
## @react-native-community/masked-view
This product contains '@react-native-community/masked-view' by React Native Community.
React Native Masked View Library
* HOMEPAGE:
* https://github.com/react-native-community/react-native-masked-view
* LICENSE: MIT
---
## @react-native-community/netinfo
This product contains 'netinfo' by Matt Oakes.
@@ -2406,41 +2358,6 @@ limitations under the License.
---
## react-native-slider
This product contains 'react-native-slider' by Jean Regisser.
A pure JavaScript <Slider /> component for react-native
* HOMEPAGE:
* https://github.com/jeanregisser/react-native-slider#readme
* LICENSE: MIT
MIT License
Copyright (c) 2015-present Jean Regisser
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-svg
This product contains 'react-native-svg' by React Native Community.

View File

@@ -1,93 +0,0 @@
package com.mattermost.helpers;
import android.content.Context;
import android.database.Cursor;
import android.text.TextUtils;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.modules.storage.ReactDatabaseSupplier;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
/**
* AsyncStorage: Class that accesses React Native AsyncStorage Database synchronously
*/
public class AsyncStorage {
// Static variables from: com.facebook.react.modules.storage.ReactDatabaseSupplier
static final String TABLE_CATALYST = "catalystLocalStorage";
static final String KEY_COLUMN = "key";
static final String VALUE_COLUMN = "value";
private static final int MAX_SQL_KEYS = 999;
Context mReactContext = null;
public AsyncStorage(Context mReactContext) {
this.mReactContext = mReactContext;
}
public HashMap<String, String> multiGet(ReadableArray keys) {
HashMap<String, String> results = new HashMap<>(keys.size());
HashSet<String> keysRemaining = new HashSet<>();
String[] columns = {KEY_COLUMN, VALUE_COLUMN};
ReactDatabaseSupplier reactDatabaseSupplier = ReactDatabaseSupplier.getInstance(this.mReactContext);
for (int keyStart = 0; keyStart < keys.size(); keyStart += MAX_SQL_KEYS) {
int keyCount = Math.min(keys.size() - keyStart, MAX_SQL_KEYS);
Cursor cursor = reactDatabaseSupplier.get().query(
TABLE_CATALYST,
columns,
buildKeySelection(keyCount),
buildKeySelectionArgs(keys, keyStart, keyCount),
null,
null,
null);
keysRemaining.clear();
try {
if (cursor.getCount() != keys.size()) {
// some keys have not been found - insert them with null into the final array
for (int keyIndex = keyStart; keyIndex < keyStart + keyCount; keyIndex++) {
keysRemaining.add(keys.getString(keyIndex));
}
}
if (cursor.moveToFirst()) {
do {
results.put(cursor.getString(0), cursor.getString(1));
keysRemaining.remove(cursor.getString(0));
} while (cursor.moveToNext());
}
} catch (Exception e) {
return new HashMap<>(1);
} finally {
cursor.close();
}
for (String key : keysRemaining) {
results.put(key, null);
}
keysRemaining.clear();
}
return results;
}
private static String buildKeySelection(int selectionCount) {
String[] list = new String[selectionCount];
Arrays.fill(list, "?");
return KEY_COLUMN + " IN (" + TextUtils.join(", ", list) + ")";
}
private static String[] buildKeySelectionArgs(ReadableArray keys, int start, int count) {
String[] selectionArgs = new String[count];
for (int keyIndex = 0; keyIndex < count; keyIndex++) {
selectionArgs[keyIndex] = keys.getString(start + keyIndex);
}
return selectionArgs;
}
}

View File

@@ -1,5 +1,6 @@
package com.mattermost.helpers;
import android.annotation.SuppressLint;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
@@ -16,10 +17,8 @@ import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
@@ -31,8 +30,6 @@ import androidx.core.graphics.drawable.IconCompat;
import com.facebook.react.bridge.ReactApplicationContext;
import com.mattermost.rnbeta.*;
import com.wix.reactnativenotifications.core.NotificationIntentAdapter;
import com.wix.reactnativenotifications.core.notification.PushNotificationProps;
import java.io.IOException;
import java.util.Date;
@@ -120,6 +117,7 @@ public class CustomPushNotificationHelper {
replyIntent.putExtra(NOTIFICATION_ID, notificationId);
replyIntent.putExtra(NOTIFICATION, bundle);
@SuppressLint("UnspecifiedImmutableFlag")
PendingIntent replyPendingIntent = PendingIntent.getBroadcast(
context,
notificationId,
@@ -148,16 +146,12 @@ public class CustomPushNotificationHelper {
String channelId = bundle.getString("channel_id");
String postId = bundle.getString("post_id");
int notificationId = postId != null ? postId.hashCode() : MESSAGE_NOTIFICATION_ID;
NotificationPreferences notificationPreferences = NotificationPreferences.getInstance(context);
addNotificationExtras(notification, bundle);
setNotificationIcons(context, notification, bundle);
setNotificationMessagingStyle(context, notification, bundle);
setNotificationGroup(notification, channelId, createSummary);
setNotificationBadgeType(notification);
setNotificationSound(notification, notificationPreferences);
setNotificationVibrate(notification, notificationPreferences);
setNotificationBlink(notification, notificationPreferences);
setNotificationChannel(notification, bundle);
setNotificationDeleteIntent(context, notification, bundle, notificationId);
@@ -337,13 +331,6 @@ public class CustomPushNotificationHelper {
}
}
private static void setNotificationBlink(NotificationCompat.Builder notification, NotificationPreferences notificationPreferences) {
boolean blink = notificationPreferences.getShouldBlink();
if (blink) {
notification.setLights(Color.CYAN, 500, 500);
}
}
private static void setNotificationChannel(NotificationCompat.Builder notification, Bundle bundle) {
// If Android Oreo or above we need to register a channel
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
@@ -369,10 +356,12 @@ public class CustomPushNotificationHelper {
private static void setNotificationDeleteIntent(Context context, NotificationCompat.Builder notification, Bundle bundle, int notificationId) {
// Let's add a delete intent when the notification is dismissed
final String PUSH_NOTIFICATION_EXTRA_NAME = "pushNotification";
Intent delIntent = new Intent(context, NotificationDismissService.class);
PushNotificationProps notificationProps = new PushNotificationProps(bundle);
delIntent.putExtra(NOTIFICATION_ID, notificationId);
PendingIntent deleteIntent = NotificationIntentAdapter.createPendingNotificationIntent(context, delIntent, notificationProps);
delIntent.putExtra(PUSH_NOTIFICATION_EXTRA_NAME, bundle);
@SuppressLint("UnspecifiedImmutableFlag")
PendingIntent deleteIntent = PendingIntent.getService(context, (int) System.currentTimeMillis(), delIntent, PendingIntent.FLAG_ONE_SHOT);
notification.setDeleteIntent(deleteIntent);
}
@@ -409,26 +398,6 @@ public class CustomPushNotificationHelper {
}
}
private static void setNotificationSound(NotificationCompat.Builder notification, NotificationPreferences notificationPreferences) {
String soundUri = notificationPreferences.getNotificationSound();
if (soundUri != null) {
if (!soundUri.equals("none")) {
notification.setSound(Uri.parse(soundUri));
}
} else {
Uri defaultUri = Settings.System.DEFAULT_NOTIFICATION_URI;
notification.setSound(defaultUri);
}
}
private static void setNotificationVibrate(NotificationCompat.Builder notification, NotificationPreferences notificationPreferences) {
boolean vibrate = notificationPreferences.getShouldVibrate();
if (vibrate) {
// Use the system default for vibration
notification.setDefaults(Notification.DEFAULT_VIBRATE);
}
}
private static Bitmap userAvatar(Context context, final String serverUrl, final String userId) throws IOException {
final ReactApplicationContext reactApplicationContext = new ReactApplicationContext(context);
final String token = Credentials.getCredentialsForServerSync(reactApplicationContext, serverUrl);

View File

@@ -29,6 +29,7 @@ import com.mattermost.helpers.DatabaseHelper;
import com.mattermost.helpers.Network;
import com.mattermost.helpers.PushNotificationDataHelper;
import com.mattermost.helpers.ResolvePromise;
import com.wix.reactnativenotifications.core.NotificationIntentAdapter;
import com.wix.reactnativenotifications.core.notification.PushNotification;
import com.wix.reactnativenotifications.core.AppLaunchHelper;
import com.wix.reactnativenotifications.core.AppLifecycleFacade;
@@ -238,14 +239,16 @@ public class CustomPushNotification extends PushNotification {
if (channelId != null) {
Map<String, List<Integer>> notificationsInChannel = loadNotificationsMap(mContext);
List<Integer> notifications = notificationsInChannel.get(channelId);
notifications.remove(notificationId);
if (notifications != null) {
notifications.remove(notificationId);
}
saveNotificationsMap(mContext, notificationsInChannel);
clearChannelNotifications(mContext, channelId);
}
}
private void buildNotification(Integer notificationId, boolean createSummary) {
final PendingIntent pendingIntent = super.getCTAPendingIntent();
final PendingIntent pendingIntent = NotificationIntentAdapter.createPendingNotificationIntent(mContext, mNotificationProps);
final Notification notification = buildNotification(pendingIntent);
if (createSummary) {
final Notification summary = getNotificationSummaryBuilder(pendingIntent).build();

View File

@@ -8,7 +8,6 @@ import android.os.Bundle;
import android.util.Log;
import java.io.File;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

View File

@@ -10,7 +10,6 @@ import com.mattermost.helpers.CustomPushNotificationHelper;
import com.wix.reactnativenotifications.core.NotificationIntentAdapter;
public class NotificationDismissService extends IntentService {
private Context mContext;
public NotificationDismissService() {
super("notificationDismissService");
}

View File

@@ -1,56 +0,0 @@
package com.mattermost.rnbeta;
import android.content.Context;
import android.content.SharedPreferences;
public class NotificationPreferences {
private static NotificationPreferences instance;
public final String SHARED_NAME = "NotificationPreferences";
public final String SOUND_PREF = "NotificationSound";
public final String VIBRATE_PREF = "NotificationVibrate";
public final String BLINK_PREF = "NotificationLights";
private final SharedPreferences mSharedPreferences;
private NotificationPreferences(Context context) {
mSharedPreferences = context.getSharedPreferences(SHARED_NAME, Context.MODE_PRIVATE);
}
public static NotificationPreferences getInstance(Context context) {
if (instance == null) {
instance = new NotificationPreferences(context);
}
return instance;
}
public String getNotificationSound() {
return mSharedPreferences.getString(SOUND_PREF, null);
}
public boolean getShouldVibrate() {
return mSharedPreferences.getBoolean(VIBRATE_PREF, true);
}
public boolean getShouldBlink() {
return mSharedPreferences.getBoolean(BLINK_PREF, false);
}
public void setNotificationSound(String soundUri) {
SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putString(SOUND_PREF, soundUri);
editor.apply();
}
public void setShouldVibrate(boolean vibrate) {
SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putBoolean(VIBRATE_PREF, vibrate);
editor.apply();
}
public void setShouldBlink(boolean blink) {
SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putBoolean(BLINK_PREF, blink);
editor.apply();
}
}

View File

@@ -3,11 +3,7 @@ package com.mattermost.rnbeta;
import android.app.Notification;
import android.app.NotificationManager;
import android.content.Context;
import android.database.Cursor;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.os.Bundle;
import android.net.Uri;
import android.service.notification.StatusBarNotification;
import com.facebook.react.bridge.Arguments;
@@ -21,13 +17,11 @@ import com.facebook.react.bridge.WritableMap;
public class NotificationPreferencesModule extends ReactContextBaseJavaModule {
private static NotificationPreferencesModule instance;
private final MainApplication mApplication;
private final NotificationPreferences mNotificationPreference;
private NotificationPreferencesModule(MainApplication application, ReactApplicationContext reactContext) {
super(reactContext);
mApplication = application;
Context context = mApplication.getApplicationContext();
mNotificationPreference = NotificationPreferences.getInstance(context);
}
public static NotificationPreferencesModule getInstance(MainApplication application, ReactApplicationContext reactContext) {
@@ -47,65 +41,6 @@ public class NotificationPreferencesModule extends ReactContextBaseJavaModule {
return "NotificationPreferences";
}
@ReactMethod
public void getPreferences(final Promise promise) {
try {
Context context = mApplication.getApplicationContext();
RingtoneManager manager = new RingtoneManager(context);
manager.setType(RingtoneManager.TYPE_NOTIFICATION);
Cursor cursor = manager.getCursor();
WritableMap result = Arguments.createMap();
WritableArray sounds = Arguments.createArray();
while (cursor.moveToNext()) {
String notificationTitle = cursor.getString(RingtoneManager.TITLE_COLUMN_INDEX);
String notificationId = cursor.getString(RingtoneManager.ID_COLUMN_INDEX);
String notificationUri = cursor.getString(RingtoneManager.URI_COLUMN_INDEX);
WritableMap map = Arguments.createMap();
map.putString("name", notificationTitle);
map.putString("uri", (notificationUri + "/" + notificationId));
sounds.pushMap(map);
}
Uri defaultUri = RingtoneManager.getActualDefaultRingtoneUri(context, RingtoneManager.TYPE_NOTIFICATION);
if (defaultUri != null) {
result.putString("defaultUri", Uri.decode(defaultUri.toString()));
}
result.putString("selectedUri", mNotificationPreference.getNotificationSound());
result.putBoolean("shouldVibrate", mNotificationPreference.getShouldVibrate());
result.putBoolean("shouldBlink", mNotificationPreference.getShouldBlink());
result.putArray("sounds", sounds);
promise.resolve(result);
} catch (Exception e) {
promise.reject("no notification sounds found", e);
}
}
@ReactMethod
public void previewSound(String url) {
Context context = mApplication.getApplicationContext();
Uri uri = Uri.parse(url);
Ringtone r = RingtoneManager.getRingtone(context, uri);
r.play();
}
@ReactMethod
public void setNotificationSound(String soundUri) {
mNotificationPreference.setNotificationSound(soundUri);
}
@ReactMethod
public void setShouldVibrate(boolean vibrate) {
mNotificationPreference.setShouldVibrate(vibrate);
}
@ReactMethod
public void setShouldBlink(boolean blink) {
mNotificationPreference.setShouldBlink(blink);
}
@ReactMethod
public void getDeliveredNotifications(final Promise promise) {
final Context context = mApplication.getApplicationContext();

View File

@@ -1,21 +1,21 @@
package com.mattermost.rnbeta;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.RemoteInput;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.core.app.NotificationCompat;
import androidx.core.app.Person;
import android.util.Log;
import java.io.IOException;
import java.util.Objects;
import okhttp3.Call;
import okhttp3.MediaType;
@@ -29,10 +29,8 @@ import org.json.JSONException;
import com.mattermost.helpers.*;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.WritableMap;
import com.wix.reactnativenotifications.core.NotificationIntentAdapter;
import com.wix.reactnativenotifications.core.ProxyService;
import com.wix.reactnativenotifications.core.notification.PushNotificationProps;
public class NotificationReplyBroadcastReceiver extends BroadcastReceiver {
@@ -42,25 +40,30 @@ public class NotificationReplyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
try {
final CharSequence message = getReplyMessage(intent);
if (message == null) {
return;
}
mContext = context;
bundle = NotificationIntentAdapter.extractPendingNotificationDataFromIntent(intent);
bundle = intent.getBundleExtra(CustomPushNotificationHelper.NOTIFICATION);
notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
final ReactApplicationContext reactApplicationContext = new ReactApplicationContext(context);
final int notificationId = intent.getIntExtra(CustomPushNotificationHelper.NOTIFICATION_ID, -1);
final Bundle notification = intent.getBundleExtra(CustomPushNotificationHelper.NOTIFICATION);
final String serverUrl = notification.getString("serverUrl");
final String token = Credentials.getCredentialsForServerSync(reactApplicationContext, serverUrl);
final String serverUrl = bundle.getString("server_url");
if (serverUrl != null) {
final ReactApplicationContext reactApplicationContext = new ReactApplicationContext(context);
final String token = Credentials.getCredentialsForServerSync(reactApplicationContext, serverUrl);
if (token != null) {
replyToMessage(serverUrl, token, notificationId, message);
if (token != null) {
replyToMessage(serverUrl, token, notificationId, message);
}
} else {
onReplyFailed(notificationId);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@@ -80,7 +83,7 @@ public class NotificationReplyBroadcastReceiver extends BroadcastReceiver {
final OkHttpClient client = new OkHttpClient();
final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
String json = buildReplyPost(channelId, rootId, message.toString());
RequestBody body = RequestBody.create(JSON, json);
RequestBody body = RequestBody.create(json, JSON);
String postsEndpoint = "/api/v4/posts?set_online=false";
String url = String.format("%s%s", serverUrl.replaceAll("/$", ""), postsEndpoint);
@@ -94,18 +97,23 @@ public class NotificationReplyBroadcastReceiver extends BroadcastReceiver {
client.newCall(request).enqueue(new okhttp3.Callback() {
@Override
public void onFailure(Call call, IOException e) {
public void onFailure(@NonNull Call call, @NonNull IOException e) {
Log.i("ReactNative", String.format("Reply FAILED exception %s", e.getMessage()));
onReplyFailed(notificationId);
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
public void onResponse(@NonNull Call call, @NonNull final Response response) throws IOException {
if (response.isSuccessful()) {
onReplySuccess(notificationId, message);
Log.i("ReactNative", "Reply SUCCESS");
} else {
Log.i("ReactNative", String.format("Reply FAILED status %s BODY %s", response.code(), response.body().string()));
Log.i("ReactNative",
String.format("Reply FAILED status %s BODY %s",
response.code(),
Objects.requireNonNull(response.body()).string()
)
);
onReplyFailed(notificationId);
}
}
@@ -133,9 +141,8 @@ public class NotificationReplyBroadcastReceiver extends BroadcastReceiver {
}
private void recreateNotification(int notificationId, final CharSequence message) {
final Intent cta = new Intent(mContext, ProxyService.class);
final PushNotificationProps notificationProps = new PushNotificationProps(bundle);
final PendingIntent pendingIntent = NotificationIntentAdapter.createPendingNotificationIntent(mContext, cta, notificationProps);
final PendingIntent pendingIntent = NotificationIntentAdapter.createPendingNotificationIntent(mContext, notificationProps);
NotificationCompat.Builder builder = CustomPushNotificationHelper.createNotificationBuilder(mContext, pendingIntent, bundle, false);
Notification notification = builder.build();
NotificationCompat.MessagingStyle messagingStyle = NotificationCompat.MessagingStyle.extractMessagingStyleFromNotification(notification);

View File

@@ -1,10 +1,10 @@
package com.mattermost.rnbeta;
import android.content.Context;
import androidx.annotation.Nullable;
import android.os.Bundle;
import android.util.Log;
import java.lang.System;
import java.util.Objects;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
@@ -17,12 +17,11 @@ import org.json.JSONObject;
import org.json.JSONException;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.WritableMap;
import com.mattermost.helpers.*;
public class ReceiptDelivery {
private static final int[] FIBONACCI_BACKOFFS = new int[] { 0, 1, 2, 3, 5, 8 };
private static final int[] FIBONACCI_BACKOFF = new int[] { 0, 1, 2, 3, 5, 8 };
public static void send(Context context, final String ackId, final String serverUrl, final String postId, final String type, final boolean isIdLoaded, ResolvePromise promise) {
final ReactApplicationContext reactApplicationContext = new ReactApplicationContext(context);
@@ -58,27 +57,30 @@ public class ReceiptDelivery {
return;
}
final HttpUrl url = HttpUrl.parse(
String.format("%s/api/v4/notifications/ack", serverUrl.replaceAll("/$", "")));
if (url != null) {
final OkHttpClient client = new OkHttpClient();
final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(JSON, json.toString());
Request request = new Request.Builder()
.header("Authorization", String.format("Bearer %s", token))
.header("Content-Type", "application/json")
.url(url)
.post(body)
.build();
final HttpUrl url;
if (serverUrl != null) {
url = HttpUrl.parse(
String.format("%s/api/v4/notifications/ack", serverUrl.replaceAll("/$", "")));
if (url != null) {
final OkHttpClient client = new OkHttpClient();
final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(json.toString(), JSON);
Request request = new Request.Builder()
.header("Authorization", String.format("Bearer %s", token))
.header("Content-Type", "application/json")
.url(url)
.post(body)
.build();
makeServerRequest(client, request, isIdLoaded, 0, promise);
makeServerRequest(client, request, isIdLoaded, 0, promise);
}
}
}
private static void makeServerRequest(OkHttpClient client, Request request, Boolean isIdLoaded, int reRequestCount, ResolvePromise promise) {
try {
Response response = client.newCall(request).execute();
String responseBody = response.body().string();
String responseBody = Objects.requireNonNull(response.body()).string();
if (response.code() != 200) {
switch (response.code()) {
case 302:
@@ -105,9 +107,8 @@ public class ReceiptDelivery {
JSONObject jsonResponse = new JSONObject(responseBody);
Bundle bundle = new Bundle();
String keys[] = new String[]{"post_id", "category", "message", "team_id", "channel_id", "channel_name", "type", "sender_id", "sender_name", "version"};
for (int i = 0; i < keys.length; i++) {
String key = keys[i];
String[] keys = new String[]{"post_id", "root_id", "category", "message", "team_id", "channel_id", "channel_name", "type", "sender_id", "sender_name", "version"};
for (String key : keys) {
if (jsonResponse.has(key)) {
bundle.putString(key, jsonResponse.getString(key));
}
@@ -118,12 +119,14 @@ public class ReceiptDelivery {
if (isIdLoaded) {
try {
reRequestCount++;
if (reRequestCount < FIBONACCI_BACKOFFS.length) {
Log.i("ReactNative", "Retry attempt " + reRequestCount + " with backoff delay: " + FIBONACCI_BACKOFFS[reRequestCount] + " seconds");
Thread.sleep(FIBONACCI_BACKOFFS[reRequestCount] * 1000);
makeServerRequest(client, request, isIdLoaded, reRequestCount, promise);
if (reRequestCount < FIBONACCI_BACKOFF.length) {
Log.i("ReactNative", "Retry attempt " + reRequestCount + " with backoff delay: " + FIBONACCI_BACKOFF[reRequestCount] + " seconds");
Thread.sleep(FIBONACCI_BACKOFF[reRequestCount] * 1000);
makeServerRequest(client, request, true, reRequestCount, promise);
}
} catch(InterruptedException ie) {}
} catch(InterruptedException ie) {
ie.printStackTrace();
}
}
promise.reject("Receipt delivery failure", e.toString());

View File

@@ -3,7 +3,7 @@
import base64 from 'base-64';
import React, {useCallback, useMemo} from 'react';
import {Image, Text, View} from 'react-native';
import {Text, View} from 'react-native';
import FastImage from 'react-native-fast-image';
import {useSafeAreaInsets} from 'react-native-safe-area-context';
import {SvgXml} from 'react-native-svg';
@@ -43,6 +43,10 @@ const getStyleFromTheme = makeStyleSheetFromTheme((theme: Theme) => {
paddingHorizontal: 16,
overflow: 'hidden',
},
slashIcon: {
height: 16,
width: 10,
},
suggestionContainer: {
flex: 1,
},
@@ -105,10 +109,8 @@ const SlashSuggestionItem = ({
}
let image = (
<Image
style={style.iconColor}
width={10}
height={16}
<FastImage
style={[style.iconColor, style.slashIcon]}
source={slashIcon}
/>
);
@@ -143,7 +145,7 @@ const SlashSuggestionItem = ({
}
} else {
image = (
<Image
<FastImage
source={iconAsSource}
style={style.uriIcon}
/>

View File

@@ -30,6 +30,8 @@ Object {
<RNGestureHandlerButton
collapsable={false}
exclusive={true}
handlerTag={1}
handlerType="NativeViewGestureHandler"
onGestureEvent={[Function]}
onGestureHandlerEvent={[Function]}
onGestureHandlerStateChange={[Function]}

View File

@@ -23,6 +23,8 @@ exports[`components/channel_list/categories/body/channel/item should match snaps
<RNGestureHandlerButton
collapsable={false}
exclusive={true}
handlerTag={1}
handlerType="NativeViewGestureHandler"
onGestureEvent={[Function]}
onGestureHandlerEvent={[Function]}
onGestureHandlerStateChange={[Function]}

View File

@@ -52,7 +52,7 @@ const AtMention = ({
users,
}: AtMentionProps) => {
const intl = useIntl();
const managedConfig = useManagedConfig();
const managedConfig = useManagedConfig<ManagedConfig>();
const theme = useTheme();
const user = useMemo(() => {
const usersByUsername = getUsersByUsername(users);

View File

@@ -88,7 +88,7 @@ const getStyleSheet = makeStyleSheetFromTheme((theme) => {
const MarkdownCodeBlock = ({language = '', content, textStyle}: MarkdownCodeBlockProps) => {
const intl = useIntl();
const managedConfig = useManagedConfig();
const managedConfig = useManagedConfig<ManagedConfig>();
const theme = useTheme();
const style = getStyleSheet(theme);

View File

@@ -71,7 +71,7 @@ const MarkdownImage = ({
const isTablet = useIsTablet();
const theme = useTheme();
const style = getStyleSheet(theme);
const managedConfig = useManagedConfig();
const managedConfig = useManagedConfig<ManagedConfig>();
const genericFileId = useRef(generateId('uid')).current;
const metadata = imagesMetadata?.[source] || Object.values(imagesMetadata || {})[0];
const [failed, setFailed] = useState(isGifTooLarge(metadata));

View File

@@ -36,7 +36,7 @@ const style = StyleSheet.create({
const MarkdownLink = ({children, experimentalNormalizeMarkdownLinks, href, siteURL}: MarkdownLinkProps) => {
const intl = useIntl();
const managedConfig = useManagedConfig();
const managedConfig = useManagedConfig<ManagedConfig>();
const serverUrl = useServerUrl();
const theme = useTheme();

View File

@@ -116,7 +116,7 @@ export default function PostInput({
const theme = useTheme();
const style = getStyleSheet(theme);
const serverUrl = useServerUrl();
const managedConfig = useManagedConfig();
const managedConfig = useManagedConfig<ManagedConfig>();
const lastTypingEventSent = useRef(0);
const input = useRef<PasteInputRef>();

View File

@@ -53,6 +53,8 @@ exports[`ThreadOverview should match snapshot when post is not saved and 0 repli
<RNGestureHandlerButton
collapsable={false}
exclusive={true}
handlerTag={1}
handlerType="NativeViewGestureHandler"
onGestureEvent={[Function]}
onGestureHandlerEvent={[Function]}
onGestureHandlerStateChange={[Function]}
@@ -80,6 +82,8 @@ exports[`ThreadOverview should match snapshot when post is not saved and 0 repli
<RNGestureHandlerButton
collapsable={false}
exclusive={true}
handlerTag={2}
handlerType="NativeViewGestureHandler"
onGestureEvent={[Function]}
onGestureHandlerEvent={[Function]}
onGestureHandlerStateChange={[Function]}
@@ -158,6 +162,8 @@ exports[`ThreadOverview should match snapshot when post is saved and has replies
<RNGestureHandlerButton
collapsable={false}
exclusive={true}
handlerTag={3}
handlerType="NativeViewGestureHandler"
onGestureEvent={[Function]}
onGestureHandlerEvent={[Function]}
onGestureHandlerStateChange={[Function]}
@@ -185,6 +191,8 @@ exports[`ThreadOverview should match snapshot when post is saved and has replies
<RNGestureHandlerButton
collapsable={false}
exclusive={true}
handlerTag={4}
handlerType="NativeViewGestureHandler"
onGestureEvent={[Function]}
onGestureHandlerEvent={[Function]}
onGestureHandlerStateChange={[Function]}

View File

@@ -16,7 +16,7 @@ const enhance = withObservables(['post'], ({post}: {post: PostModel}) => {
switchMap((chan) => (chan ? of$(chan.displayName) : '')),
),
teamName: channel.pipe(
switchMap((chan) => (chan ? chan.team.observe() : of$(null))),
switchMap((chan) => (chan && chan.teamId ? chan.team.observe() : of$(null))),
switchMap((team) => of$(team?.displayName || null)),
),
};

View File

@@ -13,7 +13,7 @@ export const TEAM_SIDEBAR_WIDTH = 72;
export const TABLET_HEADER_HEIGHT = 44;
export const TABLET_SIDEBAR_WIDTH = 320;
export const IOS_DEFAULT_HEADER_HEIGHT = 50;
export const IOS_DEFAULT_HEADER_HEIGHT = 44;
export const ANDROID_DEFAULT_HEADER_HEIGHT = 56;
export const LARGE_HEADER_TITLE = 60;
export const HEADER_WITH_SEARCH_HEIGHT = -16;

View File

@@ -167,8 +167,6 @@ export function useGalleryControls() {
const translateYConfig: WithTimingConfig = {
duration: 400,
// @ts-expect-error EasingFactoryFunction missing in type definition
easing: Easing.bezier(0.33, 0.01, 0, 1),
};

View File

@@ -1,7 +1,6 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import AsyncStorage from '@react-native-async-storage/async-storage';
import {Platform} from 'react-native';
import * as KeyChain from 'react-native-keychain';
@@ -11,8 +10,6 @@ import {getIOSAppGroupDetails} from '@utils/mattermost_managed';
import type {ServerCredential} from '@typings/credentials';
const ASYNC_STORAGE_CURRENT_SERVER_KEY = '@currentServerUrl';
export const getAllServerCredentials = async (): Promise<ServerCredential[]> => {
const serverCredentials: ServerCredential[] = [];
@@ -34,23 +31,18 @@ export const getAllServerCredentials = async (): Promise<ServerCredential[]> =>
return serverCredentials;
};
// TODO: This function is only necessary to support pre-Gekidou
// versions as the active server URL may be stored in AsyncStorage.
// At some point we can remove this function and rely solely on
// the database manager's `getActiveServerUrl`.
export const getActiveServerUrl = async () => {
let serverUrl = await DatabaseManager.getActiveServerUrl();
if (!serverUrl) {
// If upgrading from non-Gekidou, the server URL might be in
// AsyncStorage. If so, retrieve the server URL, create a DB for it,
// then delete the AsyncStorage item.
serverUrl = await AsyncStorage.getItem(ASYNC_STORAGE_CURRENT_SERVER_KEY);
if (serverUrl) {
DatabaseManager.setActiveServerDatabase(serverUrl);
AsyncStorage.removeItem(ASYNC_STORAGE_CURRENT_SERVER_KEY);
if (serverUrl) {
let serverUrls: string[];
if (Platform.OS === 'ios') {
serverUrls = await KeyChain.getAllInternetPasswordServers();
} else {
serverUrls = await KeyChain.getAllGenericPasswordServices();
}
}
serverUrl = serverUrls[0];
}
return serverUrl || undefined;
};
@@ -87,8 +79,6 @@ export const removeServerCredentials = async (serverUrl: string) => {
}
await KeyChain.resetInternetCredentials(serverUrl, options);
await AsyncStorage.removeItem(ASYNC_STORAGE_CURRENT_SERVER_KEY);
};
export const removeActiveServerCredentials = async () => {

View File

@@ -1,7 +1,7 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import Emm, {ManagedConfig} from '@mattermost/react-native-emm';
import Emm from '@mattermost/react-native-emm';
import JailMonkey from 'jail-monkey';
import {Alert, AlertButton, AppState, AppStateStatus, Platform} from 'react-native';
@@ -28,7 +28,7 @@ class ManagedApp {
}
init() {
Emm.getManagedConfig().then(this.processConfig);
this.processConfig(Emm.getManagedConfig<ManagedConfig>());
}
setIOSAppGroupIdentifier = () => {

View File

@@ -96,7 +96,7 @@ class NetworkManager {
};
if (ManagedApp.enabled) {
const managedConfig = await Emm.getManagedConfig();
const managedConfig = Emm.getManagedConfig<ManagedConfig>();
if (managedConfig?.useVPN === 'true') {
config.sessionConfiguration.waitsForConnectivity = true;
}

View File

@@ -28,8 +28,6 @@ import EphemeralStore from '@store/ephemeral_store';
import {isTablet} from '@utils/helpers';
import {convertToNotificationData} from '@utils/notification';
import {getActiveServerUrl} from './credentials';
const CATEGORY = 'CAN_REPLY';
const REPLY_ACTION = 'REPLY_ACTION';
const NOTIFICATION_TYPE = {
@@ -132,11 +130,10 @@ class PushNotifications {
const database = DatabaseManager.serverDatabases[serverUrl]?.database;
if (database) {
const isTabletDevice = await isTablet();
const activeServerUrl = await getActiveServerUrl();
const displayName = await queryServerName(DatabaseManager.appDatabase!.database, serverUrl);
const channelId = await getCurrentChannelId(database);
let serverName;
if (serverUrl !== activeServerUrl && Object.keys(DatabaseManager.serverDatabases).length > 1) {
if (Object.keys(DatabaseManager.serverDatabases).length > 1) {
serverName = displayName;
}

View File

@@ -3,7 +3,7 @@
import {withDatabase} from '@nozbe/watermelondb/DatabaseProvider';
import withObservables from '@nozbe/with-observables';
import DateTimePicker from '@react-native-community/datetimepicker';
import DateTimePicker, {DateTimePickerEvent} from '@react-native-community/datetimepicker';
import moment, {Moment} from 'moment-timezone';
import React, {useState} from 'react';
import {View, Button, Platform} from 'react-native';
@@ -54,7 +54,7 @@ const DateTimeSelector = ({timezone, handleChange, isMilitaryTime, theme}: Props
const [mode, setMode] = useState<AndroidMode>('date');
const [show, setShow] = useState<boolean>(false);
const onChange = (_: React.ChangeEvent<HTMLInputElement>, selectedDate: Date) => {
const onChange = (_: DateTimePickerEvent, selectedDate: Date) => {
const currentDate = selectedDate || date;
setShow(Platform.OS === 'ios');
if (moment(currentDate).isAfter(minimumDate)) {

View File

@@ -30,8 +30,8 @@ const Actions = ({
canDownloadFiles, disabled, enablePublicLinks, fileId,
onCopyPublicLink, onDownload, onShare,
}: Props) => {
const managedConfig = useManagedConfig();
const canCopyPublicLink = !fileId.startsWith('uid') && enablePublicLinks && managedConfig.copyPasteProtection !== 'true';
const managedConfig = useManagedConfig<ManagedConfig>();
const canCopyPublicLink = !fileId.startsWith('uid') && enablePublicLinks && managedConfig.copyAndPasteProtection !== 'true';
return (
<View style={styles.container}>

View File

@@ -9,7 +9,7 @@ import {
State, TapGestureHandler, TapGestureHandlerGestureEvent,
} from 'react-native-gesture-handler';
import Animated, {
cancelAnimation, Easing, useAnimatedReaction, useAnimatedStyle, useDerivedValue,
cancelAnimation, Easing, runOnJS, useAnimatedReaction, useAnimatedStyle, useDerivedValue,
useSharedValue,
withDecay, withSpring, WithSpringConfig, withTiming, WithTimingConfig,
} from 'react-native-reanimated';
@@ -47,8 +47,6 @@ const springConfig: WithSpringConfig = {
const timingConfig: WithTimingConfig = {
duration: 250,
// @ts-expect-error EasingFactoryFunction missing in type definition
easing: Easing.bezier(0.33, 0.01, 0, 1),
};
@@ -372,7 +370,7 @@ const ImageTransformer = (
// it alow us to scale into different point even then we pan the image
ctx.adjustFocal = vec.sub(focal, vec.add(CENTER, offset));
} else if (evt.state === State.ACTIVE && evt.numberOfPointers !== 2) {
disablePinch();
runOnJS(disablePinch)();
}
},

View File

@@ -58,8 +58,6 @@ const AnimatedImage = Animated.createAnimatedComponent(FastImage);
const timingConfig: WithTimingConfig = {
duration: 250,
// @ts-expect-error EasingFactoryFunction missing in type definition
easing: Easing.bezier(0.5002, 0.2902, 0.3214, 0.9962),
};

View File

@@ -28,8 +28,6 @@ interface VideoRendererProps extends ImageRendererProps {
const AnimatedVideo = Animated.createAnimatedComponent(Video);
const timingConfig: WithTimingConfig = {
duration: 250,
// @ts-expect-error EasingFactoryFunction missing in type definition
easing: Easing.bezier(0.33, 0.01, 0, 1),
};

View File

@@ -47,7 +47,7 @@ const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => ({
const ChannelListScreen = (props: ChannelProps) => {
const theme = useTheme();
const styles = getStyleSheet(theme);
const managedConfig = useManagedConfig();
const managedConfig = useManagedConfig<ManagedConfig>();
const isTablet = useIsTablet();
const route = useRoute();

View File

@@ -14,7 +14,7 @@ import {withServerDatabase} from '@database/components';
import {DEFAULT_LOCALE, getTranslations} from '@i18n';
const withGestures = (Screen: React.ComponentType, styles: StyleProp<ViewStyle>) => {
return function gestureHoc(props: any) {
return function gestureHoc(props: never) {
if (Platform.OS === 'android') {
return (
<GestureHandlerRootView style={[{flex: 1}, styles]}>
@@ -28,7 +28,7 @@ const withGestures = (Screen: React.ComponentType, styles: StyleProp<ViewStyle>)
};
const withIntl = (Screen: React.ComponentType) => {
return function IntlEnabledComponent(props: any) {
return function IntlEnabledComponent(props: never) {
return (
<IntlProvider
locale={DEFAULT_LOCALE}
@@ -41,7 +41,7 @@ const withIntl = (Screen: React.ComponentType) => {
};
const withSafeAreaInsets = (Screen: React.ComponentType) => {
return function SafeAreaInsets(props: any) {
return function SafeAreaInsets(props: never) {
return (
<SafeAreaProvider>
<Screen {...props}/>
@@ -145,13 +145,13 @@ Navigation.setLazyComponentRegistrator((screenName) => {
}
if (screen) {
Navigation.registerComponent(screenName, () => withGestures(withSafeAreaInsets(withManagedConfig(screen)), extraStyles));
Navigation.registerComponent(screenName, () => withGestures(withSafeAreaInsets(withManagedConfig<ManagedConfig>(screen)), extraStyles));
}
});
export function registerScreens() {
const homeScreen = require('@screens/home').default;
const serverScreen = require('@screens/server').default;
Navigation.registerComponent(Screens.SERVER, () => withGestures(withIntl(withManagedConfig(serverScreen)), undefined));
Navigation.registerComponent(Screens.HOME, () => withGestures(withSafeAreaInsets(withServerDatabase(withManagedConfig(homeScreen))), undefined));
Navigation.registerComponent(Screens.SERVER, () => withGestures(withIntl(withManagedConfig<ManagedConfig>(serverScreen)), undefined));
Navigation.registerComponent(Screens.HOME, () => withGestures(withSafeAreaInsets(withServerDatabase(withManagedConfig<ManagedConfig>(homeScreen))), undefined));
}

View File

@@ -81,7 +81,7 @@ const LoginForm = ({config, extra, keyboardAwareRef, numberSSOs, serverDisplayNa
const loginRef = useRef<TextInput>(null);
const passwordRef = useRef<TextInput>(null);
const intl = useIntl();
const managedConfig = useManagedConfig();
const managedConfig = useManagedConfig<ManagedConfig>();
const [isLoading, setIsLoading] = useState<boolean>(false);
const [error, setError] = useState<string | undefined>();
const [loginId, setLoginId] = useState<string>('');

View File

@@ -187,7 +187,7 @@ export function resetToHome(passProps: LaunchProps = {launchType: LaunchType.Nor
visible: false,
height: 0,
background: {
color: theme.sidebarHeaderBg,
color: theme.sidebarBg,
},
backButton: {
visible: false,
@@ -234,7 +234,7 @@ export function resetToSelectServer(passProps: LaunchProps) {
title: '',
},
background: {
color: theme.sidebarHeaderBg,
color: theme.sidebarBg,
},
visible: false,
height: 0,
@@ -276,7 +276,7 @@ export function resetToTeams(name: string, title: string, passProps = {}, option
title: '',
},
background: {
color: theme.sidebarHeaderBg,
color: theme.sidebarBg,
},
},
};
@@ -330,7 +330,7 @@ export function goToScreen(name: string, title: string, passProps = {}, options
testID: 'screen.back.button',
},
background: {
color: theme.sidebarHeaderBg,
color: theme.sidebarBg,
},
title: {
color: theme.sidebarHeaderTextColor,
@@ -430,7 +430,7 @@ export function showModal(name: string, title: string, passProps = {}, options =
title: '',
},
background: {
color: theme.sidebarHeaderBg,
color: theme.sidebarBg,
},
title: {
color: theme.sidebarHeaderTextColor,

View File

@@ -53,7 +53,7 @@ const PostOptions = ({
post,
thread,
}: PostOptionsProps) => {
const managedConfig = useManagedConfig();
const managedConfig = useManagedConfig<ManagedConfig>();
useEffect(() => {
const unsubscribe = Navigation.events().registerComponentListener({

View File

@@ -1,7 +1,7 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {useManagedConfig, ManagedConfig} from '@mattermost/react-native-emm';
import {useManagedConfig} from '@mattermost/react-native-emm';
import React, {useCallback, useEffect, useRef, useState} from 'react';
import {useIntl} from 'react-intl';
import {Alert, Platform, useWindowDimensions, View} from 'react-native';
@@ -70,8 +70,8 @@ const Server = ({
const {formatMessage} = intl;
useEffect(() => {
let serverName = defaultDisplayName || managedConfig?.serverName || LocalConfig.DefaultServerName;
let serverUrl = defaultServerUrl || managedConfig?.serverUrl || LocalConfig.DefaultServerUrl;
let serverName: string | undefined = defaultDisplayName || managedConfig?.serverName || LocalConfig.DefaultServerName;
let serverUrl: string | undefined = defaultServerUrl || managedConfig?.serverUrl || LocalConfig.DefaultServerUrl;
let autoconnect = managedConfig?.allowOtherServers === 'false' || LocalConfig.AutoSelectServerUrl;
if (launchType === LaunchType.DeepLink) {

View File

@@ -36,7 +36,7 @@ const styles = StyleSheet.create({
});
const SSO = ({config, extra, launchError, launchType, serverDisplayName, serverUrl, ssoType, theme}: SSOProps) => {
const managedConfig = useManagedConfig();
const managedConfig = useManagedConfig<ManagedConfig>();
const inAppSessionAuth = managedConfig?.inAppSessionAuth === 'true';
const dimensions = useWindowDimensions();
const translateX = useSharedValue(inAppSessionAuth ? 0 : dimensions.width);

View File

@@ -6,7 +6,7 @@ import Fuse from 'fuse.js';
import SystemModel from '@database/models/server/system';
import {Emojis, EmojiIndicesByAlias, EmojiIndicesByUnicode} from './';
import {Emojis, EmojiIndicesByAlias, EmojiIndicesByUnicode} from '.';
import type CustomEmojiModel from '@typings/database/models/servers/custom_emoji';

View File

@@ -33,7 +33,7 @@ export const skinCodes = {"1F3FB":"light_skin_tone","1F3FC":"medium_light_skin_t
export const EMOJI_DEFAULT_SKIN = 'default';
// Generate the list of indices that belong to each category by an specified skin
function genSkinnedCategories(skin) {
function genSkinnedCategories(skin: string) {
const result = new Map();
for (const cat of CategoryNames) {
const indices = [];

View File

@@ -86,7 +86,7 @@ export function setNavigatorStyles(componentId: string, theme: Theme, additional
color: theme.sidebarHeaderTextColor,
},
background: {
color: theme.sidebarHeaderBg,
color: theme.sidebarBg,
},
leftButtonColor: theme.sidebarHeaderTextColor,
rightButtonColor: theme.sidebarHeaderTextColor,

View File

@@ -8,23 +8,23 @@ GEM
artifactory (3.0.15)
atomos (0.1.3)
aws-eventstream (1.2.0)
aws-partitions (1.540.0)
aws-sdk-core (3.124.0)
aws-partitions (1.570.0)
aws-sdk-core (3.130.0)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.525.0)
aws-sigv4 (~> 1.1)
jmespath (~> 1.0)
aws-sdk-kms (1.52.0)
aws-sdk-core (~> 3, >= 3.122.0)
aws-sdk-kms (1.55.0)
aws-sdk-core (~> 3, >= 3.127.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.109.0)
aws-sdk-core (~> 3, >= 3.122.0)
aws-sdk-s3 (1.113.0)
aws-sdk-core (~> 3, >= 3.127.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.4)
aws-sigv4 (1.4.0)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
claide (1.0.3)
claide (1.1.0)
colored (1.2)
colored2 (3.1.2)
commander (4.6.0)
@@ -36,17 +36,18 @@ GEM
unf (>= 0.0.5, < 1.0.0)
dotenv (2.7.6)
emoji_regex (3.2.3)
excon (0.89.0)
faraday (1.8.0)
excon (0.92.1)
faraday (1.10.0)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
faraday-httpclient (~> 1.0.1)
faraday-httpclient (~> 1.0)
faraday-multipart (~> 1.0)
faraday-net_http (~> 1.0)
faraday-net_http_persistent (~> 1.1)
faraday-net_http_persistent (~> 1.0)
faraday-patron (~> 1.0)
faraday-rack (~> 1.0)
multipart-post (>= 1.2, < 3)
faraday-retry (~> 1.0)
ruby2_keywords (>= 0.0.4)
faraday-cookie_jar (0.0.7)
faraday (>= 0.8.0)
@@ -55,14 +56,17 @@ GEM
faraday-em_synchrony (1.0.0)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
faraday-multipart (1.0.3)
multipart-post (>= 1.2, < 3)
faraday-net_http (1.0.1)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
faraday-retry (1.0.3)
faraday_middleware (1.2.0)
faraday (~> 1.0)
fastimage (2.2.5)
fastlane (2.199.0)
fastimage (2.2.6)
fastlane (2.205.1)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
@@ -107,9 +111,9 @@ GEM
fastlane-plugin-find_replace_string (0.1.0)
fastlane-plugin-versioning_android (0.1.0)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.14.0)
google-apis-androidpublisher_v3 (0.16.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-core (0.4.1)
google-apis-core (0.4.2)
addressable (~> 2.5, >= 2.5.1)
googleauth (>= 0.16.2, < 2.a)
httpclient (>= 2.8.1, < 3.a)
@@ -118,19 +122,19 @@ GEM
retriable (>= 2.0, < 4.a)
rexml
webrick
google-apis-iamcredentials_v1 (0.8.0)
google-apis-iamcredentials_v1 (0.10.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-playcustomapp_v1 (0.6.0)
google-apis-playcustomapp_v1 (0.7.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-storage_v1 (0.10.0)
google-apis-storage_v1 (0.11.0)
google-apis-core (>= 0.4, < 2.a)
google-cloud-core (1.6.0)
google-cloud-env (~> 1.0)
google-cloud-errors (~> 1.0)
google-cloud-env (1.5.0)
faraday (>= 0.17.3, < 2.0)
google-cloud-env (1.6.0)
faraday (>= 0.17.3, < 3.0)
google-cloud-errors (1.2.0)
google-cloud-storage (1.35.0)
google-cloud-storage (1.36.1)
addressable (~> 2.8)
digest-crc (~> 0.4)
google-apis-iamcredentials_v1 (~> 0.1)
@@ -138,8 +142,8 @@ GEM
google-cloud-core (~> 1.6)
googleauth (>= 0.16.2, < 2.a)
mini_mime (~> 1.0)
googleauth (1.1.0)
faraday (>= 0.17.3, < 2.0)
googleauth (1.1.2)
faraday (>= 0.17.3, < 3.a)
jwt (>= 1.4, < 3.0)
memoist (~> 0.16)
multi_json (~> 1.11)
@@ -149,19 +153,19 @@ GEM
http-cookie (1.0.4)
domain_name (~> 0.5)
httpclient (2.8.3)
jmespath (1.4.0)
jmespath (1.6.1)
json (2.6.1)
jwt (2.3.0)
memoist (0.16.2)
mini_magick (4.11.0)
mini_mime (1.1.2)
mini_portile2 (2.6.1)
mini_portile2 (2.8.0)
multi_json (1.15.0)
multipart-post (2.0.0)
nanaimo (0.3.0)
naturally (2.2.1)
nokogiri (1.12.5)
mini_portile2 (~> 2.6.1)
nokogiri (1.13.3)
mini_portile2 (~> 2.8.0)
racc (~> 1.4)
optparse (0.1.1)
os (1.1.4)
@@ -179,9 +183,9 @@ GEM
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
security (0.1.3)
signet (0.16.0)
signet (0.16.1)
addressable (~> 2.8)
faraday (>= 0.17.3, < 2.0)
faraday (>= 0.17.5, < 3.0)
jwt (>= 1.5, < 3.0)
multi_json (~> 1.10)
simctl (1.6.8)
@@ -199,7 +203,7 @@ GEM
uber (0.1.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.8)
unf_ext (0.0.8.1)
unicode-display_width (1.8.0)
webrick (1.7.0)
word_wrap (1.0.0)

View File

@@ -1,3 +1,3 @@
source "https://rubygems.org"
gem "cocoapods", "1.11.2"
gem "cocoapods", "1.11.3"

View File

@@ -3,7 +3,7 @@ GEM
specs:
CFPropertyList (3.0.5)
rexml
activesupport (6.1.4.4)
activesupport (6.1.5)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
@@ -16,10 +16,10 @@ GEM
json (>= 1.5.1)
atomos (0.1.3)
claide (1.1.0)
cocoapods (1.11.2)
cocoapods (1.11.3)
addressable (~> 2.8)
claide (>= 1.0.2, < 2.0)
cocoapods-core (= 1.11.2)
cocoapods-core (= 1.11.3)
cocoapods-deintegrate (>= 1.0.3, < 2.0)
cocoapods-downloader (>= 1.4.0, < 2.0)
cocoapods-plugins (>= 1.0.0, < 2.0)
@@ -34,7 +34,7 @@ GEM
nap (~> 1.0)
ruby-macho (>= 1.0, < 3.0)
xcodeproj (>= 1.21.0, < 2.0)
cocoapods-core (1.11.2)
cocoapods-core (1.11.3)
activesupport (>= 5.0, < 7)
addressable (~> 2.8)
algoliasearch (~> 1.0)
@@ -45,7 +45,7 @@ GEM
public_suffix (~> 4.0)
typhoeus (~> 1.0)
cocoapods-deintegrate (1.0.5)
cocoapods-downloader (1.5.1)
cocoapods-downloader (1.6.1)
cocoapods-plugins (1.0.0)
nap
cocoapods-search (1.0.1)
@@ -54,7 +54,7 @@ GEM
netrc (~> 0.11)
cocoapods-try (1.2.0)
colored2 (3.1.2)
concurrent-ruby (1.1.9)
concurrent-ruby (1.1.10)
escape (0.0.4)
ethon (0.15.0)
ffi (>= 1.15.0)
@@ -63,7 +63,7 @@ GEM
fuzzy_match (2.0.4)
gh_inspector (1.1.3)
httpclient (2.8.3)
i18n (1.9.1)
i18n (1.10.0)
concurrent-ruby (~> 1.0)
json (2.6.1)
minitest (5.15.0)
@@ -91,7 +91,7 @@ PLATFORMS
ruby
DEPENDENCIES
cocoapods (= 1.11.2)
cocoapods (= 1.11.3)
BUNDLED WITH
2.1.4

View File

@@ -116,6 +116,56 @@ MattermostBucket* bucket = nil;
}
}
// Required for deeplinking
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
return [RCTLinkingManager application:application openURL:url options:options];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [RCTLinkingManager application:application openURL:url sourceApplication:sourceApplication annotation:annotation];
}
// Only if your app is using [Universal Links](https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html).
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> *restorableObjects))restorationHandler
{
return [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
}
-(void)applicationDidBecomeActive:(UIApplication *)application {
[bucket setPreference:@"ApplicationIsForeground" value:@"true"];
}
-(void)applicationWillResignActive:(UIApplication *)application {
[bucket setPreference:@"ApplicationIsForeground" value:@"false"];
}
-(void)applicationDidEnterBackground:(UIApplication *)application {
[bucket setPreference:@"ApplicationIsForeground" value:@"false"];
}
-(void)applicationWillTerminate:(UIApplication *)application {
[bucket setPreference:@"ApplicationIsForeground" value:@"false"];
}
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
if (_allowRotation == YES) {
return UIInterfaceOrientationMaskAllButUpsideDown;
}else{
return (UIInterfaceOrientationMaskPortrait);
}
}
- (NSArray<id<RCTBridgeModule>> *)extraModulesForBridge:(RCTBridge *)bridge
{
NSMutableArray<id<RCTBridgeModule>> *extraModules = [NSMutableArray new];
[extraModules addObjectsFromArray:[ReactNativeNavigation extraModulesForBridge:bridge]];
// You can inject any extra modules that you would like here, more information at:
// https://facebook.github.io/react-native/docs/native-modules-ios.html#dependency-injection
return extraModules;
}
-(void)cleanNotificationsFromChannel:(NSString *)channelId {
if ([UNUserNotificationCenter class]) {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
@@ -138,32 +188,6 @@ MattermostBucket* bucket = nil;
}
}
// Required for deeplinking
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
return [RCTLinkingManager application:application openURL:url options:options];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [RCTLinkingManager application:application openURL:url sourceApplication:sourceApplication annotation:annotation];
}
// Only if your app is using [Universal Links](https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html).
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> *restorableObjects))restorationHandler
{
return [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
}
- (NSArray<id<RCTBridgeModule>> *)extraModulesForBridge:(RCTBridge *)bridge
{
NSMutableArray<id<RCTBridgeModule>> *extraModules = [NSMutableArray new];
[extraModules addObjectsFromArray:[ReactNativeNavigation extraModulesForBridge:bridge]];
// You can inject any extra modules that you would like here, more information at:
// https://facebook.github.io/react-native/docs/native-modules-ios.html#dependency-injection
return extraModules;
}
/*
https://mattermost.atlassian.net/browse/MM-10601
Required by react-native-hw-keyboard-event
@@ -205,28 +229,4 @@ RNHWKeyboardEvent *hwKeyEvent = nil;
[hwKeyEvent sendHWKeyEvent:@"shift-enter"];
}
-(void)applicationDidBecomeActive:(UIApplication *)application {
[bucket setPreference:@"ApplicationIsForeground" value:@"true"];
}
-(void)applicationWillResignActive:(UIApplication *)application {
[bucket setPreference:@"ApplicationIsForeground" value:@"false"];
}
-(void)applicationDidEnterBackground:(UIApplication *)application {
[bucket setPreference:@"ApplicationIsForeground" value:@"false"];
}
-(void)applicationWillTerminate:(UIApplication *)application {
[bucket setPreference:@"ApplicationIsForeground" value:@"false"];
}
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
if (_allowRotation == YES) {
return UIInterfaceOrientationMaskAllButUpsideDown;
}else{
return (UIInterfaceOrientationMaskPortrait);
}
}
@end

View File

@@ -50,12 +50,7 @@ NSString *const ReplyActionID = @"REPLY_ACTION";
NSString *serverUrl = [parsedResponse valueForKeyPath:@"notification.server_url"];
if (serverUrl == nil) {
NSString* onlyServerUrl = [[Database default] getOnlyServerUrlObjc];
if ([onlyServerUrl length] > 0) {
serverUrl = onlyServerUrl;
} else {
[self handleReplyFailure:@"" completionHandler:notificationCompletionHandler];
}
}
NSString *sessionToken = [[Keychain default] getTokenObjcFor:serverUrl];

View File

@@ -13,14 +13,14 @@ PODS:
- ReactCommon/turbomodule/core
- EXVideoThumbnails (6.2.0):
- ExpoModulesCore
- FBLazyVector (0.67.3)
- FBReactNativeSpec (0.67.3):
- FBLazyVector (0.67.4)
- FBReactNativeSpec (0.67.4):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTRequired (= 0.67.3)
- RCTTypeSafety (= 0.67.3)
- React-Core (= 0.67.3)
- React-jsi (= 0.67.3)
- ReactCommon/turbomodule/core (= 0.67.3)
- RCTRequired (= 0.67.4)
- RCTTypeSafety (= 0.67.4)
- React-Core (= 0.67.4)
- React-jsi (= 0.67.4)
- ReactCommon/turbomodule/core (= 0.67.4)
- fmt (6.2.1)
- glog (0.3.5)
- hermes-engine (0.9.0)
@@ -41,9 +41,9 @@ PODS:
- lottie-react-native (5.0.1):
- lottie-ios (~> 3.2.3)
- React-Core
- Permission-Camera (3.3.0):
- Permission-Camera (3.3.1):
- RNPermissions
- Permission-PhotoLibrary (3.3.0):
- Permission-PhotoLibrary (3.3.1):
- RNPermissions
- RCT-Folly (2021.06.28.00-v2):
- boost
@@ -62,235 +62,239 @@ PODS:
- fmt (~> 6.2.1)
- glog
- libevent
- RCTRequired (0.67.3)
- RCTTypeSafety (0.67.3):
- FBLazyVector (= 0.67.3)
- RCTRequired (0.67.4)
- RCTTypeSafety (0.67.4):
- FBLazyVector (= 0.67.4)
- RCT-Folly (= 2021.06.28.00-v2)
- RCTRequired (= 0.67.3)
- React-Core (= 0.67.3)
- RCTRequired (= 0.67.4)
- React-Core (= 0.67.4)
- RCTYouTube (2.0.2):
- React
- YoutubePlayer-in-WKWebView (~> 0.3.1)
- React (0.67.3):
- React-Core (= 0.67.3)
- React-Core/DevSupport (= 0.67.3)
- React-Core/RCTWebSocket (= 0.67.3)
- React-RCTActionSheet (= 0.67.3)
- React-RCTAnimation (= 0.67.3)
- React-RCTBlob (= 0.67.3)
- React-RCTImage (= 0.67.3)
- React-RCTLinking (= 0.67.3)
- React-RCTNetwork (= 0.67.3)
- React-RCTSettings (= 0.67.3)
- React-RCTText (= 0.67.3)
- React-RCTVibration (= 0.67.3)
- React-callinvoker (0.67.3)
- React-Core (0.67.3):
- React (0.67.4):
- React-Core (= 0.67.4)
- React-Core/DevSupport (= 0.67.4)
- React-Core/RCTWebSocket (= 0.67.4)
- React-RCTActionSheet (= 0.67.4)
- React-RCTAnimation (= 0.67.4)
- React-RCTBlob (= 0.67.4)
- React-RCTImage (= 0.67.4)
- React-RCTLinking (= 0.67.4)
- React-RCTNetwork (= 0.67.4)
- React-RCTSettings (= 0.67.4)
- React-RCTText (= 0.67.4)
- React-RCTVibration (= 0.67.4)
- React-callinvoker (0.67.4)
- React-Core (0.67.4):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default (= 0.67.3)
- React-cxxreact (= 0.67.3)
- React-jsi (= 0.67.3)
- React-jsiexecutor (= 0.67.3)
- React-perflogger (= 0.67.3)
- React-Core/Default (= 0.67.4)
- React-cxxreact (= 0.67.4)
- React-jsi (= 0.67.4)
- React-jsiexecutor (= 0.67.4)
- React-perflogger (= 0.67.4)
- Yoga
- React-Core/CoreModulesHeaders (0.67.3):
- React-Core/CoreModulesHeaders (0.67.4):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.67.3)
- React-jsi (= 0.67.3)
- React-jsiexecutor (= 0.67.3)
- React-perflogger (= 0.67.3)
- React-cxxreact (= 0.67.4)
- React-jsi (= 0.67.4)
- React-jsiexecutor (= 0.67.4)
- React-perflogger (= 0.67.4)
- Yoga
- React-Core/Default (0.67.3):
- React-Core/Default (0.67.4):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-cxxreact (= 0.67.3)
- React-jsi (= 0.67.3)
- React-jsiexecutor (= 0.67.3)
- React-perflogger (= 0.67.3)
- React-cxxreact (= 0.67.4)
- React-jsi (= 0.67.4)
- React-jsiexecutor (= 0.67.4)
- React-perflogger (= 0.67.4)
- Yoga
- React-Core/DevSupport (0.67.3):
- React-Core/DevSupport (0.67.4):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default (= 0.67.3)
- React-Core/RCTWebSocket (= 0.67.3)
- React-cxxreact (= 0.67.3)
- React-jsi (= 0.67.3)
- React-jsiexecutor (= 0.67.3)
- React-jsinspector (= 0.67.3)
- React-perflogger (= 0.67.3)
- React-Core/Default (= 0.67.4)
- React-Core/RCTWebSocket (= 0.67.4)
- React-cxxreact (= 0.67.4)
- React-jsi (= 0.67.4)
- React-jsiexecutor (= 0.67.4)
- React-jsinspector (= 0.67.4)
- React-perflogger (= 0.67.4)
- Yoga
- React-Core/RCTActionSheetHeaders (0.67.3):
- React-Core/RCTActionSheetHeaders (0.67.4):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.67.3)
- React-jsi (= 0.67.3)
- React-jsiexecutor (= 0.67.3)
- React-perflogger (= 0.67.3)
- React-cxxreact (= 0.67.4)
- React-jsi (= 0.67.4)
- React-jsiexecutor (= 0.67.4)
- React-perflogger (= 0.67.4)
- Yoga
- React-Core/RCTAnimationHeaders (0.67.3):
- React-Core/RCTAnimationHeaders (0.67.4):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.67.3)
- React-jsi (= 0.67.3)
- React-jsiexecutor (= 0.67.3)
- React-perflogger (= 0.67.3)
- React-cxxreact (= 0.67.4)
- React-jsi (= 0.67.4)
- React-jsiexecutor (= 0.67.4)
- React-perflogger (= 0.67.4)
- Yoga
- React-Core/RCTBlobHeaders (0.67.3):
- React-Core/RCTBlobHeaders (0.67.4):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.67.3)
- React-jsi (= 0.67.3)
- React-jsiexecutor (= 0.67.3)
- React-perflogger (= 0.67.3)
- React-cxxreact (= 0.67.4)
- React-jsi (= 0.67.4)
- React-jsiexecutor (= 0.67.4)
- React-perflogger (= 0.67.4)
- Yoga
- React-Core/RCTImageHeaders (0.67.3):
- React-Core/RCTImageHeaders (0.67.4):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.67.3)
- React-jsi (= 0.67.3)
- React-jsiexecutor (= 0.67.3)
- React-perflogger (= 0.67.3)
- React-cxxreact (= 0.67.4)
- React-jsi (= 0.67.4)
- React-jsiexecutor (= 0.67.4)
- React-perflogger (= 0.67.4)
- Yoga
- React-Core/RCTLinkingHeaders (0.67.3):
- React-Core/RCTLinkingHeaders (0.67.4):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.67.3)
- React-jsi (= 0.67.3)
- React-jsiexecutor (= 0.67.3)
- React-perflogger (= 0.67.3)
- React-cxxreact (= 0.67.4)
- React-jsi (= 0.67.4)
- React-jsiexecutor (= 0.67.4)
- React-perflogger (= 0.67.4)
- Yoga
- React-Core/RCTNetworkHeaders (0.67.3):
- React-Core/RCTNetworkHeaders (0.67.4):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.67.3)
- React-jsi (= 0.67.3)
- React-jsiexecutor (= 0.67.3)
- React-perflogger (= 0.67.3)
- React-cxxreact (= 0.67.4)
- React-jsi (= 0.67.4)
- React-jsiexecutor (= 0.67.4)
- React-perflogger (= 0.67.4)
- Yoga
- React-Core/RCTSettingsHeaders (0.67.3):
- React-Core/RCTSettingsHeaders (0.67.4):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.67.3)
- React-jsi (= 0.67.3)
- React-jsiexecutor (= 0.67.3)
- React-perflogger (= 0.67.3)
- React-cxxreact (= 0.67.4)
- React-jsi (= 0.67.4)
- React-jsiexecutor (= 0.67.4)
- React-perflogger (= 0.67.4)
- Yoga
- React-Core/RCTTextHeaders (0.67.3):
- React-Core/RCTTextHeaders (0.67.4):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.67.3)
- React-jsi (= 0.67.3)
- React-jsiexecutor (= 0.67.3)
- React-perflogger (= 0.67.3)
- React-cxxreact (= 0.67.4)
- React-jsi (= 0.67.4)
- React-jsiexecutor (= 0.67.4)
- React-perflogger (= 0.67.4)
- Yoga
- React-Core/RCTVibrationHeaders (0.67.3):
- React-Core/RCTVibrationHeaders (0.67.4):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.67.3)
- React-jsi (= 0.67.3)
- React-jsiexecutor (= 0.67.3)
- React-perflogger (= 0.67.3)
- React-cxxreact (= 0.67.4)
- React-jsi (= 0.67.4)
- React-jsiexecutor (= 0.67.4)
- React-perflogger (= 0.67.4)
- Yoga
- React-Core/RCTWebSocket (0.67.3):
- React-Core/RCTWebSocket (0.67.4):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default (= 0.67.3)
- React-cxxreact (= 0.67.3)
- React-jsi (= 0.67.3)
- React-jsiexecutor (= 0.67.3)
- React-perflogger (= 0.67.3)
- React-Core/Default (= 0.67.4)
- React-cxxreact (= 0.67.4)
- React-jsi (= 0.67.4)
- React-jsiexecutor (= 0.67.4)
- React-perflogger (= 0.67.4)
- Yoga
- React-CoreModules (0.67.3):
- FBReactNativeSpec (= 0.67.3)
- React-CoreModules (0.67.4):
- FBReactNativeSpec (= 0.67.4)
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.67.3)
- React-Core/CoreModulesHeaders (= 0.67.3)
- React-jsi (= 0.67.3)
- React-RCTImage (= 0.67.3)
- ReactCommon/turbomodule/core (= 0.67.3)
- React-cxxreact (0.67.3):
- RCTTypeSafety (= 0.67.4)
- React-Core/CoreModulesHeaders (= 0.67.4)
- React-jsi (= 0.67.4)
- React-RCTImage (= 0.67.4)
- ReactCommon/turbomodule/core (= 0.67.4)
- React-cxxreact (0.67.4):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-callinvoker (= 0.67.3)
- React-jsi (= 0.67.3)
- React-jsinspector (= 0.67.3)
- React-logger (= 0.67.3)
- React-perflogger (= 0.67.3)
- React-runtimeexecutor (= 0.67.3)
- React-hermes (0.67.3):
- React-callinvoker (= 0.67.4)
- React-jsi (= 0.67.4)
- React-jsinspector (= 0.67.4)
- React-logger (= 0.67.4)
- React-perflogger (= 0.67.4)
- React-runtimeexecutor (= 0.67.4)
- React-hermes (0.67.4):
- DoubleConversion
- glog
- hermes-engine
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly/Futures (= 2021.06.28.00-v2)
- React-cxxreact (= 0.67.3)
- React-jsi (= 0.67.3)
- React-jsiexecutor (= 0.67.3)
- React-jsinspector (= 0.67.3)
- React-perflogger (= 0.67.3)
- React-jsi (0.67.3):
- React-cxxreact (= 0.67.4)
- React-jsi (= 0.67.4)
- React-jsiexecutor (= 0.67.4)
- React-jsinspector (= 0.67.4)
- React-perflogger (= 0.67.4)
- React-jsi (0.67.4):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-jsi/Default (= 0.67.3)
- React-jsi/Default (0.67.3):
- React-jsi/Default (= 0.67.4)
- React-jsi/Default (0.67.4):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-jsiexecutor (0.67.3):
- React-jsiexecutor (0.67.4):
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-cxxreact (= 0.67.3)
- React-jsi (= 0.67.3)
- React-perflogger (= 0.67.3)
- React-jsinspector (0.67.3)
- React-logger (0.67.3):
- React-cxxreact (= 0.67.4)
- React-jsi (= 0.67.4)
- React-perflogger (= 0.67.4)
- React-jsinspector (0.67.4)
- React-logger (0.67.4):
- glog
- react-native-background-timer (2.4.1):
- React-Core
- react-native-cameraroll (4.1.2):
- React-Core
- react-native-cookies (6.0.11):
- react-native-cookies (6.1.0):
- React-Core
- react-native-document-picker (8.0.0):
- React-Core
- react-native-emm (1.1.8):
- react-native-emm (1.2.0):
- React-Core
- react-native-hw-keyboard-event (0.0.4):
- React
- react-native-image-picker (4.7.3):
- React-Core
- react-native-netinfo (8.0.0):
- react-native-netinfo (8.2.0):
- React-Core
- react-native-network-client (0.1.0):
- Alamofire (~> 5.4)
- React-Core
- Starscream (~> 4.0.4)
- SwiftyJSON (~> 5.0)
- react-native-notifications (4.1.3):
- react-native-notifications (4.2.4):
- React-Core
- react-native-paste-input (0.3.7):
- react-native-paste-input (0.4.0):
- React-Core
- Swime (= 3.0.6)
- react-native-safe-area-context (3.4.1):
- React-Core
- react-native-safe-area-context (4.2.2):
- RCT-Folly
- RCTRequired
- RCTTypeSafety
- React
- ReactCommon/turbomodule/core
- react-native-video (5.2.0):
- React-Core
- react-native-video/Video (= 5.2.0)
@@ -298,97 +302,93 @@ PODS:
- React-Core
- react-native-webview (11.17.2):
- React-Core
- React-perflogger (0.67.3)
- React-RCTActionSheet (0.67.3):
- React-Core/RCTActionSheetHeaders (= 0.67.3)
- React-RCTAnimation (0.67.3):
- FBReactNativeSpec (= 0.67.3)
- React-perflogger (0.67.4)
- React-RCTActionSheet (0.67.4):
- React-Core/RCTActionSheetHeaders (= 0.67.4)
- React-RCTAnimation (0.67.4):
- FBReactNativeSpec (= 0.67.4)
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.67.3)
- React-Core/RCTAnimationHeaders (= 0.67.3)
- React-jsi (= 0.67.3)
- ReactCommon/turbomodule/core (= 0.67.3)
- React-RCTBlob (0.67.3):
- FBReactNativeSpec (= 0.67.3)
- RCTTypeSafety (= 0.67.4)
- React-Core/RCTAnimationHeaders (= 0.67.4)
- React-jsi (= 0.67.4)
- ReactCommon/turbomodule/core (= 0.67.4)
- React-RCTBlob (0.67.4):
- FBReactNativeSpec (= 0.67.4)
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/RCTBlobHeaders (= 0.67.3)
- React-Core/RCTWebSocket (= 0.67.3)
- React-jsi (= 0.67.3)
- React-RCTNetwork (= 0.67.3)
- ReactCommon/turbomodule/core (= 0.67.3)
- React-RCTImage (0.67.3):
- FBReactNativeSpec (= 0.67.3)
- React-Core/RCTBlobHeaders (= 0.67.4)
- React-Core/RCTWebSocket (= 0.67.4)
- React-jsi (= 0.67.4)
- React-RCTNetwork (= 0.67.4)
- ReactCommon/turbomodule/core (= 0.67.4)
- React-RCTImage (0.67.4):
- FBReactNativeSpec (= 0.67.4)
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.67.3)
- React-Core/RCTImageHeaders (= 0.67.3)
- React-jsi (= 0.67.3)
- React-RCTNetwork (= 0.67.3)
- ReactCommon/turbomodule/core (= 0.67.3)
- React-RCTLinking (0.67.3):
- FBReactNativeSpec (= 0.67.3)
- React-Core/RCTLinkingHeaders (= 0.67.3)
- React-jsi (= 0.67.3)
- ReactCommon/turbomodule/core (= 0.67.3)
- React-RCTNetwork (0.67.3):
- FBReactNativeSpec (= 0.67.3)
- RCTTypeSafety (= 0.67.4)
- React-Core/RCTImageHeaders (= 0.67.4)
- React-jsi (= 0.67.4)
- React-RCTNetwork (= 0.67.4)
- ReactCommon/turbomodule/core (= 0.67.4)
- React-RCTLinking (0.67.4):
- FBReactNativeSpec (= 0.67.4)
- React-Core/RCTLinkingHeaders (= 0.67.4)
- React-jsi (= 0.67.4)
- ReactCommon/turbomodule/core (= 0.67.4)
- React-RCTNetwork (0.67.4):
- FBReactNativeSpec (= 0.67.4)
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.67.3)
- React-Core/RCTNetworkHeaders (= 0.67.3)
- React-jsi (= 0.67.3)
- ReactCommon/turbomodule/core (= 0.67.3)
- React-RCTSettings (0.67.3):
- FBReactNativeSpec (= 0.67.3)
- RCTTypeSafety (= 0.67.4)
- React-Core/RCTNetworkHeaders (= 0.67.4)
- React-jsi (= 0.67.4)
- ReactCommon/turbomodule/core (= 0.67.4)
- React-RCTSettings (0.67.4):
- FBReactNativeSpec (= 0.67.4)
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.67.3)
- React-Core/RCTSettingsHeaders (= 0.67.3)
- React-jsi (= 0.67.3)
- ReactCommon/turbomodule/core (= 0.67.3)
- React-RCTText (0.67.3):
- React-Core/RCTTextHeaders (= 0.67.3)
- React-RCTVibration (0.67.3):
- FBReactNativeSpec (= 0.67.3)
- RCTTypeSafety (= 0.67.4)
- React-Core/RCTSettingsHeaders (= 0.67.4)
- React-jsi (= 0.67.4)
- ReactCommon/turbomodule/core (= 0.67.4)
- React-RCTText (0.67.4):
- React-Core/RCTTextHeaders (= 0.67.4)
- React-RCTVibration (0.67.4):
- FBReactNativeSpec (= 0.67.4)
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/RCTVibrationHeaders (= 0.67.3)
- React-jsi (= 0.67.3)
- ReactCommon/turbomodule/core (= 0.67.3)
- React-runtimeexecutor (0.67.3):
- React-jsi (= 0.67.3)
- ReactCommon/turbomodule/core (0.67.3):
- React-Core/RCTVibrationHeaders (= 0.67.4)
- React-jsi (= 0.67.4)
- ReactCommon/turbomodule/core (= 0.67.4)
- React-runtimeexecutor (0.67.4):
- React-jsi (= 0.67.4)
- ReactCommon/turbomodule/core (0.67.4):
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-callinvoker (= 0.67.3)
- React-Core (= 0.67.3)
- React-cxxreact (= 0.67.3)
- React-jsi (= 0.67.3)
- React-logger (= 0.67.3)
- React-perflogger (= 0.67.3)
- React-callinvoker (= 0.67.4)
- React-Core (= 0.67.4)
- React-cxxreact (= 0.67.4)
- React-jsi (= 0.67.4)
- React-logger (= 0.67.4)
- React-perflogger (= 0.67.4)
- ReactNativeART (1.2.0):
- React
- ReactNativeExceptionHandler (2.10.10):
- React-Core
- ReactNativeKeyboardTrackingView (5.7.0):
- React
- ReactNativeNavigation (7.25.4):
- ReactNativeNavigation (7.26.0):
- HMSegmentedControl
- React-Core
- React-RCTImage
- React-RCTText
- ReactNativeNavigation/Core (= 7.25.4)
- ReactNativeNavigation/Core (7.25.4):
- ReactNativeNavigation/Core (= 7.26.0)
- ReactNativeNavigation/Core (7.26.0):
- HMSegmentedControl
- React-Core
- React-RCTImage
- React-RCTText
- RNCAsyncStorage (1.16.1):
- React-Core
- RNCClipboard (1.5.1):
- React-Core
- RNCMaskedView (0.1.11):
- React
- RNDateTimePicker (5.1.0):
- RNDateTimePicker (6.1.0):
- React-Core
- RNDeviceInfo (8.4.9):
- RNDeviceInfo (8.5.1):
- React-Core
- RNFastImage (8.5.11):
- React-Core
@@ -396,17 +396,17 @@ PODS:
- SDWebImageWebPCoder (~> 0.8.4)
- RNFileViewer (2.1.5):
- React-Core
- RNGestureHandler (2.1.2):
- RNGestureHandler (2.3.2):
- React-Core
- RNKeychain (8.0.0):
- React-Core
- RNLocalize (2.2.0):
- RNLocalize (2.2.1):
- React-Core
- RNPermissions (3.3.0):
- RNPermissions (3.3.1):
- React-Core
- RNReactNativeHapticFeedback (1.13.0):
- RNReactNativeHapticFeedback (1.13.1):
- React-Core
- RNReanimated (2.4.1):
- RNReanimated (2.5.0):
- DoubleConversion
- FBLazyVector
- FBReactNativeSpec
@@ -437,16 +437,16 @@ PODS:
- RNRudderSdk (1.0.0):
- React
- Rudder (>= 1.2.1)
- RNScreens (3.13.0):
- RNScreens (3.13.1):
- React-Core
- React-RCTImage
- RNSentry (3.2.13):
- RNSentry (3.3.5):
- React-Core
- Sentry (= 7.9.0)
- RNShare (7.3.6):
- Sentry (= 7.11.0)
- RNShare (7.3.7):
- React-Core
- RNSVG (12.3.0):
- React-Core
- RNSVG (12.1.1):
- React
- RNVectorIcons (9.1.0):
- React-Core
- Rudder (1.5.0)
@@ -456,9 +456,9 @@ PODS:
- SDWebImageWebPCoder (0.8.4):
- libwebp (~> 1.0)
- SDWebImage/Core (~> 5.10)
- Sentry (7.9.0):
- Sentry/Core (= 7.9.0)
- Sentry/Core (7.9.0)
- Sentry (7.11.0):
- Sentry/Core (= 7.11.0)
- Sentry/Core (7.11.0)
- simdjson (1.0.0)
- Starscream (4.0.4)
- SwiftyJSON (5.0.1)
@@ -534,9 +534,7 @@ DEPENDENCIES:
- ReactNativeExceptionHandler (from `../node_modules/react-native-exception-handler`)
- ReactNativeKeyboardTrackingView (from `../node_modules/react-native-keyboard-tracking-view`)
- ReactNativeNavigation (from `../node_modules/react-native-navigation`)
- "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)"
- "RNCClipboard (from `../node_modules/@react-native-community/clipboard`)"
- "RNCMaskedView (from `../node_modules/@react-native-community/masked-view`)"
- "RNDateTimePicker (from `../node_modules/@react-native-community/datetimepicker`)"
- RNDeviceInfo (from `../node_modules/react-native-device-info`)
- RNFastImage (from `../node_modules/react-native-fast-image`)
@@ -696,12 +694,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native-keyboard-tracking-view"
ReactNativeNavigation:
:path: "../node_modules/react-native-navigation"
RNCAsyncStorage:
:path: "../node_modules/@react-native-async-storage/async-storage"
RNCClipboard:
:path: "../node_modules/@react-native-community/clipboard"
RNCMaskedView:
:path: "../node_modules/@react-native-community/masked-view"
RNDateTimePicker:
:path: "../node_modules/@react-native-community/datetimepicker"
RNDeviceInfo:
@@ -758,8 +752,8 @@ SPEC CHECKSUMS:
Expo: 534e51e607aba8229293297da5585f4b26f50fa1
ExpoModulesCore: 32c0ccb47f477d330ee93db72505380adf0de09a
EXVideoThumbnails: 847d648d6f4bc0c1afad05caa56a487dc543445e
FBLazyVector: 808f741ddb0896a20e5b98cc665f5b3413b072e2
FBReactNativeSpec: 94473205b8741b61402e8c51716dea34aa3f5b2f
FBLazyVector: f7b0632c6437e312acf6349288d9aa4cb6d59030
FBReactNativeSpec: 0f4e1f4cfeace095694436e7c7fcc5bf4b03a0ff
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
glog: 85ecdd10ee8d8ec362ef519a6a45ff9aa27b2e85
hermes-engine: bf7577d12ac6ccf53ab8b5af3c6ccf0dd8458c5c
@@ -769,84 +763,82 @@ SPEC CHECKSUMS:
libwebp: 98a37e597e40bfdb4c911fc98f2c53d0b12d05fc
lottie-ios: c058aeafa76daa4cf64d773554bccc8385d0150e
lottie-react-native: a029a86e1689c86a07169c520ae770e84348cd20
Permission-Camera: 597646618d1edcc055a3f660844c2ee6de8e0596
Permission-PhotoLibrary: 33911b5522ee5978fcabe25d604756135325d067
Permission-Camera: bae27a8503530770c35aadfecbb97ec71823382a
Permission-PhotoLibrary: ddb5a158725b29cb12e9e477e8a5f5151c66cc3c
RCT-Folly: 803a9cfd78114b2ec0f140cfa6fa2a6bafb2d685
RCTRequired: 3c77b683474faf23920fbefc71c4e13af21470c0
RCTTypeSafety: 720b1841260dac692444c2822b27403178da8b28
RCTRequired: 0aa6c1c27e1d65920df35ceea5341a5fe76bdb79
RCTTypeSafety: d76a59d00632891e11ed7522dba3fd1a995e573a
RCTYouTube: a8bb45705622a6fc9decf64be04128d3658ed411
React: 25970dd74abbdac449ca66dec4107652cacc606d
React-callinvoker: 2d158700bc27b3d49c3c95721d288ed6c1a489ef
React-Core: 306cfdc1393bcf9481cc5de9807608db7661817b
React-CoreModules: 2576a88d630899f3fcdf2cb79fcc0454d7b2a8bb
React-cxxreact: a492f0de07d875419dcb9f463c63c22fe51c433b
React-hermes: 4321bcd6fce09f8c6d1be355da31e1cdae7bfac6
React-jsi: bca092b0c38d5e3fd60bb491d4994ab4a8ac2ad3
React-jsiexecutor: 15ea57ead631a11fad57634ff69f78e797113a39
React-jsinspector: 1e1e03345cf6d47779e2061d679d0a87d9ae73d8
React-logger: 1e10789cb84f99288479ba5f20822ce43ced6ffe
React: ab8c09da2e7704f4b3ebad4baa6cfdfcc852dcb5
React-callinvoker: 216fb96b482da516b8aba4142b145938f6ea92f0
React-Core: af99b93aff83599485e0e0879879aafa35ceae32
React-CoreModules: 137a054ce8c547e81dc3502933b1bc0fd08df05d
React-cxxreact: ec5ee6b08664f5b8ac71d8ad912f54d540c4f817
React-hermes: 644e034cf9eb99c2f867c325c589c85b5c918ef7
React-jsi: 3e084c80fd364cee64668d5df46d40c39f7973e1
React-jsiexecutor: cbdf37cebdc4f5d8b3d0bf5ccaa6147fd9de9f3d
React-jsinspector: f4775ea9118cbe1f72b834f0f842baa7a99508d8
React-logger: a1f028f6d8639a3f364ef80419e5e862e1115250
react-native-background-timer: 17ea5e06803401a379ebf1f20505b793ac44d0fe
react-native-cameraroll: 2957f2bce63ae896a848fbe0d5352c1bd4d20866
react-native-cookies: cd92f3824ed1e32a20802e8185101e14bb5b76da
react-native-cookies: 7e14e823f32bd7c868134c7e207c89a46fa28f98
react-native-document-picker: 429972f7ece4463aa5bcdd789622b3a674a3c5d1
react-native-emm: a326f295d2bd3444178cf36a9e2d9307e0dc0dcc
react-native-emm: 547137d1ca5f7b73d64608b57cc3540734b78974
react-native-hw-keyboard-event: b517cefb8d5c659a38049c582de85ff43337dc53
react-native-image-picker: 4e6008ad8c2321622affa2c85432a5ebd02d480c
react-native-netinfo: ba4ea50d836c60580c59079233c400753fe5bcb6
react-native-netinfo: e922cb2e3eaf9ccdf16b8d4744a89657377aa4a1
react-native-network-client: 30ab97e7e6c8d6f2d2b10cc1ebad0cbf9c894c6e
react-native-notifications: 805108822ceff3440644d5701944f0cda35f5b4b
react-native-paste-input: 7d19610119115a3434c145867775723a06052362
react-native-safe-area-context: 9e40fb181dac02619414ba1294d6c2a807056ab9
react-native-notifications: 3de8ef9cd800e5db0225d9aa46b228d2b94ce51e
react-native-paste-input: fcfb6fd35df51c3d3f58e80ca3baf4ffe0c3e4fa
react-native-safe-area-context: da2d11bd7df9bf7779e9bdc85081c141cfa544f4
react-native-video: a4c2635d0802f983594b7057e1bce8f442f0ad28
react-native-webview: 380c1a03ec94b7ed764dac8db1e7c9952d08c93a
React-perflogger: 93d3f142d6d9a46e635f09ba0518027215a41098
React-RCTActionSheet: 87327c3722203cc79cf79d02fb83e7332aeedd18
React-RCTAnimation: 009c87c018d50e0b38692699405ebe631ff4872d
React-RCTBlob: 9e30308cc1b127af11c8f858514d2d8638ce36d7
React-RCTImage: b9460cb8e3acc51410735a234a9dffbf4964f540
React-RCTLinking: 73ecf0b87b515383a08ebbf07f558c48de1f0027
React-RCTNetwork: 8f63119f2da99a94515ad0e0d0a13f9b3f6fe89d
React-RCTSettings: b827282b1ac2bd98515c0c09f5cbc5062ebd83b0
React-RCTText: 6d09140f514e1f60aff255e0acdf16e3b486ba4c
React-RCTVibration: d0361f15ea978958fab7ffb6960f475b5063d83f
React-runtimeexecutor: af1946623656f9c5fd64ca6f36f3863516193446
ReactCommon: 650e33cde4fb7d36781cd3143f5276da0abb2f96
React-perflogger: 0afaf2f01a47fd0fc368a93bfbb5bd3b26db6e7f
React-RCTActionSheet: 59f35c4029e0b532fc42114241a06e170b7431a2
React-RCTAnimation: aae4f4bed122e78bdab72f7118d291d70a932ce2
React-RCTBlob: f6fb23394b4f28cd86fa7e9f5f6ae45c23669fda
React-RCTImage: 638815cf96124386dd296067246d91441932ae3f
React-RCTLinking: 254dd06283dd6fdb784285f95e7cec8053c3270f
React-RCTNetwork: 8a4c2d4f357268e520b060572d02bc69a9b991fb
React-RCTSettings: 35d44cbb9972ab933bd0a59ea3e6646dcb030ba3
React-RCTText: cc5315df8458cfa7b537e621271ef43273955a97
React-RCTVibration: 3b52a7dced19cdb025b4f88ab26ceb2d85f30ba2
React-runtimeexecutor: a9d3c82ddf7ffdad9fbe6a81c6d6f8c06385464d
ReactCommon: 07d0c460b9ba9af3eaf1b8f5abe7daaad28c9c4e
ReactNativeART: 78edc68dd4a1e675338cd0cd113319cf3a65f2ab
ReactNativeExceptionHandler: b11ff67c78802b2f62eed0e10e75cb1ef7947c60
ReactNativeKeyboardTrackingView: 02137fac3b2ebd330d74fa54ead48b14750a2306
ReactNativeNavigation: 146bec8f834564f05637b43f469b9ca6e1cbe94f
RNCAsyncStorage: b49b4e38a1548d03b74b30e558a1d18465b94be7
ReactNativeNavigation: b3344828dfe4a696425cbc00d61e05c4c0150f98
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
RNCMaskedView: 0e1bc4bfa8365eba5fbbb71e07fbdc0555249489
RNDateTimePicker: 1dd15d7ed1ab7d999056bc77879a42920d139c12
RNDeviceInfo: 4944cf8787b9c5bffaf301fda68cc1a2ec003341
RNDateTimePicker: 064f3a609fbebc6896f7e5a2f48dcee5d9a6fd51
RNDeviceInfo: 8d4177859b062334835962799460528869a487fb
RNFastImage: cced864a4a2eac27c5c10ac16bd5e8b9d2be4504
RNFileViewer: ce7ca3ac370e18554d35d6355cffd7c30437c592
RNGestureHandler: 392653c717564ab35d6b322d7b56b10a54d88dbd
RNGestureHandler: 6e757e487a4834e7280e98e9bac66d2d9c575e9c
RNKeychain: 4f63aada75ebafd26f4bc2c670199461eab85d94
RNLocalize: 6571ea792a7dcb6d217c98c14d9147e9417cef62
RNPermissions: bcd846e8f5a7f39e921cc7ca7172e2de0e698b6f
RNReactNativeHapticFeedback: b83bfb4b537bdd78eb4f6ffe63c6884f7b049ead
RNReanimated: 32c91e28f5780937b8efc07ddde1bab8d373fe0b
RNLocalize: cbcb55d0e19c78086ea4eea20e03fe8000bbbced
RNPermissions: 34d678157c800b25b22a488e4d8babb57456e796
RNReactNativeHapticFeedback: 4085973f5a38b40d3c6793a3ee5724773eae045e
RNReanimated: 190b6930d5d94832061278e1070bbe313e50c830
RNRudderSdk: 006efe311ea3d2dd2dcd200521d33715f7144d1e
RNScreens: aa12070b21c1d6011b3627a0b1d09b627232b070
RNSentry: 0aa1567f66c20390f3834637fc4f73380dcd0774
RNShare: b955e66f1af2849711f13c193debda72b94f8aa0
RNSVG: 551acb6562324b1d52a4e0758f7ca0ec234e278f
RNScreens: 40a2cb40a02a609938137a1e0acfbf8fc9eebf19
RNSentry: 3e7f2504006c19fa07027a7c4fbe83d88e69125a
RNShare: f116bbb04f310c665ca483d0bd1e88cf59b3b334
RNSVG: 302bfc9905bd8122f08966dc2ce2d07b7b52b9f8
RNVectorIcons: 7923e585eaeb139b9f4531d25a125a1500162a0b
Rudder: 95d023a3a4ec1e8d6bd15963e84f78707b13d9c3
SDWebImage: 53179a2dba77246efa8a9b85f5c5b21f8f43e38f
SDWebImageWebPCoder: f93010f3f6c031e2f8fb3081ca4ee6966c539815
Sentry: 2f7e91f247cfb05b05bd01e0b5d0692557a7687b
Sentry: 0c5cd63d714187b4a39c331c1f0eb04ba7868341
simdjson: c96317b3a50dff3468a42f586ab7ed22c6ab2fd9
Starscream: 5178aed56b316f13fa3bc55694e583d35dd414d9
SwiftyJSON: 2f33a42c6fbc52764d96f13368585094bfd8aa5e
Swime: d7b2c277503b6cea317774aedc2dce05613f8b0b
WatermelonDB: baec390a1039dcebeee959218900c978af3407c9
XCDYouTubeKit: 79baadb0560673a67c771eba45f83e353fd12c1f
Yoga: 90dcd029e45d8a7c1ff059e8b3c6612ff409061a
Yoga: d6b6a80659aa3e91aaba01d0012e7edcbedcbecd
YoutubePlayer-in-WKWebView: 4fca3b4f6f09940077bfbae7bddb771f2b43aacd
PODFILE CHECKSUM: c11894180554a703d353f142d957c9fc16670083
COCOAPODS: 1.11.2
COCOAPODS: 1.11.3

1961
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -7,37 +7,35 @@
"license": "Apache 2.0",
"private": true,
"dependencies": {
"@formatjs/intl-datetimeformat": "5.0.0",
"@formatjs/intl-getcanonicallocales": "1.9.0",
"@formatjs/intl-locale": "2.4.45",
"@formatjs/intl-numberformat": "7.4.2",
"@formatjs/intl-pluralrules": "4.3.2",
"@formatjs/intl-relativetimeformat": "10.0.0",
"@formatjs/intl-datetimeformat": "5.0.1",
"@formatjs/intl-getcanonicallocales": "1.9.2",
"@formatjs/intl-locale": "2.4.47",
"@formatjs/intl-numberformat": "7.4.3",
"@formatjs/intl-pluralrules": "4.3.3",
"@formatjs/intl-relativetimeformat": "10.0.1",
"@mattermost/compass-icons": "0.1.22",
"@mattermost/react-native-emm": "1.1.8",
"@mattermost/react-native-emm": "1.2.0",
"@mattermost/react-native-network-client": "github:mattermost/react-native-network-client",
"@mattermost/react-native-paste-input": "0.3.7",
"@mattermost/react-native-paste-input": "0.4.0",
"@nozbe/watermelondb": "0.24.0",
"@nozbe/with-observables": "1.4.0",
"@react-native-async-storage/async-storage": "1.16.1",
"@react-native-community/art": "1.2.0",
"@react-native-community/cameraroll": "4.1.2",
"@react-native-community/clipboard": "1.5.1",
"@react-native-community/datetimepicker": "5.1.0",
"@react-native-community/masked-view": "0.1.11",
"@react-native-community/netinfo": "8.0.0",
"@react-native-cookies/cookies": "6.0.11",
"@react-native-community/datetimepicker": "6.1.0",
"@react-native-community/netinfo": "8.2.0",
"@react-native-cookies/cookies": "6.1.0",
"@react-navigation/bottom-tabs": "6.2.0",
"@react-navigation/native": "6.0.8",
"@rudderstack/rudder-sdk-react-native": "1.2.1",
"@sentry/react-native": "3.2.13",
"@sentry/react-native": "3.3.5",
"@stream-io/flat-list-mvcp": "0.10.1",
"base-64": "1.0.0",
"commonmark": "github:mattermost/commonmark.js#90a62d97ed2dbd2d4711a5adda327128f5827983",
"commonmark-react-renderer": "github:mattermost/commonmark-react-renderer#4e52e1725c0ef5b1e2ecfe9883220ec36c2eb67d",
"deep-equal": "2.0.5",
"deepmerge": "4.2.2",
"emoji-regex": "10.0.0",
"emoji-regex": "10.0.1",
"expo": "44.0.6",
"expo-video-thumbnails": "6.2.0",
"fuse.js": "6.5.3",
@@ -48,39 +46,38 @@
"moment-timezone": "0.5.34",
"react": "17.0.2",
"react-freeze": "1.0.0",
"react-intl": "5.24.6",
"react-native": "0.67.3",
"react-intl": "5.24.8",
"react-native": "0.67.4",
"react-native-android-open-settings": "1.3.0",
"react-native-animated-numbers": "0.4.1",
"react-native-background-timer": "2.4.1",
"react-native-button": "3.0.1",
"react-native-calendars": "1.1278.0",
"react-native-device-info": "8.4.9",
"react-native-calendars": "1.1280.0",
"react-native-device-info": "8.5.1",
"react-native-document-picker": "8.0.0",
"react-native-elements": "3.4.2",
"react-native-exception-handler": "2.10.10",
"react-native-fast-image": "8.5.11",
"react-native-file-viewer": "2.1.5",
"react-native-gesture-handler": "2.1.2",
"react-native-haptic-feedback": "1.13.0",
"react-native-gesture-handler": "2.3.2",
"react-native-haptic-feedback": "1.13.1",
"react-native-hw-keyboard-event": "0.0.4",
"react-native-image-picker": "4.7.3",
"react-native-keyboard-aware-scroll-view": "0.9.5",
"react-native-keyboard-tracking-view": "5.7.0",
"react-native-keychain": "8.0.0",
"react-native-linear-gradient": "2.5.6",
"react-native-localize": "2.2.0",
"react-native-navigation": "7.25.4",
"react-native-localize": "2.2.1",
"react-native-navigation": "7.26.0",
"react-native-neomorph-shadows": "1.1.2",
"react-native-notifications": "4.1.3",
"react-native-permissions": "3.3.0",
"react-native-reanimated": "2.4.1",
"react-native-safe-area-context": "3.4.1",
"react-native-screens": "3.13.0",
"react-native-notifications": "4.2.4",
"react-native-permissions": "3.3.1",
"react-native-reanimated": "2.5.0",
"react-native-safe-area-context": "4.2.2",
"react-native-screens": "3.13.1",
"react-native-section-list-get-item-layout": "2.2.3",
"react-native-share": "7.3.6",
"react-native-slider": "0.11.0",
"react-native-svg": "12.1.1",
"react-native-share": "7.3.7",
"react-native-svg": "12.3.0",
"react-native-vector-icons": "9.1.0",
"react-native-video": "5.2.0",
"react-native-webview": "11.17.2",
@@ -88,34 +85,34 @@
"reanimated-bottom-sheet": "1.0.0-alpha.22",
"rn-placeholder": "3.0.3",
"semver": "7.3.5",
"serialize-error": "9.1.0",
"serialize-error": "9.1.1",
"shallow-equals": "1.0.0",
"tinycolor2": "1.4.2",
"url-parse": "1.5.10"
},
"devDependencies": {
"@babel/cli": "7.17.6",
"@babel/core": "7.17.5",
"@babel/core": "7.17.8",
"@babel/eslint-parser": "7.17.0",
"@babel/plugin-proposal-class-properties": "7.16.7",
"@babel/plugin-proposal-decorators": "7.17.2",
"@babel/plugin-proposal-decorators": "7.17.8",
"@babel/plugin-transform-flow-strip-types": "7.16.7",
"@babel/plugin-transform-runtime": "7.17.0",
"@babel/preset-env": "7.16.11",
"@babel/preset-typescript": "7.16.7",
"@babel/register": "7.17.0",
"@babel/runtime": "7.17.2",
"@babel/register": "7.17.7",
"@babel/runtime": "7.17.8",
"@react-native-community/eslint-config": "3.0.1",
"@testing-library/react-native": "9.0.0",
"@testing-library/react-native": "9.1.0",
"@types/base-64": "1.0.0",
"@types/commonmark": "0.27.5",
"@types/commonmark-react-renderer": "4.3.1",
"@types/deep-equal": "1.0.1",
"@types/jest": "27.4.1",
"@types/lodash": "4.14.179",
"@types/lodash": "4.14.180",
"@types/mime-db": "1.43.1",
"@types/react": "17.0.39",
"@types/react-native": "0.67.1",
"@types/react": "17.0.43",
"@types/react-native": "0.67.3",
"@types/react-native-background-timer": "2.0.0",
"@types/react-native-button": "3.0.1",
"@types/react-native-share": "3.3.3",
@@ -127,29 +124,29 @@
"@types/tough-cookie": "4.0.1",
"@types/url-parse": "1.4.8",
"@types/uuid": "8.3.4",
"@typescript-eslint/eslint-plugin": "5.13.0",
"@typescript-eslint/parser": "5.13.0",
"@typescript-eslint/eslint-plugin": "5.16.0",
"@typescript-eslint/parser": "5.16.0",
"axios": "0.26.1",
"axios-cookiejar-support": "2.0.4",
"babel-jest": "27.5.1",
"babel-loader": "8.2.3",
"babel-loader": "8.2.4",
"babel-plugin-module-resolver": "4.1.0",
"babel-plugin-transform-remove-console": "6.9.4",
"deep-freeze": "0.0.1",
"detox": "19.5.7",
"eslint": "8.10.0",
"eslint": "8.12.0",
"eslint-plugin-header": "3.1.1",
"eslint-plugin-import": "2.25.4",
"eslint-plugin-jest": "26.1.1",
"eslint-plugin-jest": "26.1.3",
"eslint-plugin-mattermost": "github:mattermost/eslint-plugin-mattermost#23abcf9988f7fa00d26929f11841aab7ccb16b2b",
"eslint-plugin-react": "7.29.2",
"eslint-plugin-react": "7.29.4",
"eslint-plugin-react-hooks": "4.3.0",
"husky": "7.0.4",
"isomorphic-fetch": "3.0.0",
"jest": "27.5.1",
"jest-cli": "27.5.1",
"jetifier": "2.0.0",
"metro-react-native-babel-preset": "0.69.0",
"metro-react-native-babel-preset": "0.69.1",
"mmjstool": "github:mattermost/mattermost-utilities#010f456ea8be5beebafdb8776177cba515c1969e",
"mock-async-storage": "2.2.0",
"nock": "13.2.4",
@@ -157,8 +154,8 @@
"react-native-svg-transformer": "1.0.0",
"react-test-renderer": "17.0.2",
"tough-cookie": "4.0.0",
"ts-jest": "27.1.3",
"typescript": "4.5.5",
"ts-jest": "27.1.4",
"typescript": "4.6.3",
"underscore": "1.13.2",
"util": "0.12.4",
"uuid": "8.3.2"
@@ -212,7 +209,12 @@
"expo-application",
"expo-assets",
"expo-error-recovery"
]
],
"android": {
"exclude": [
"react-native-reanimated"
]
}
}
}
}

View File

@@ -56,7 +56,7 @@ index d9e2714..bed8756 100644
def variant ->
def hermesFlags;
- if (variant.name.toLowerCase().contains("release")) {
+ if (variant.name.toLowerCase().contains("release") || variant.name..toLowerCase().contains("unsigned")) {
+ if (variant.name.toLowerCase().contains("release") || variant.name.toLowerCase().contains("unsigned")) {
// Can't use ?: since that will also substitute valid empty lists
hermesFlags = config.hermesFlagsRelease
if (hermesFlags == null) hermesFlags = ["-O", "-output-source-map"]

View File

@@ -1,22 +1,21 @@
diff --git a/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java b/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java
index 2e8acc0..71da101 100644
index a34598c..b035a76 100644
--- a/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java
+++ b/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java
@@ -59,20 +59,31 @@ public class NavigationModule extends ReactContextBaseJavaModule {
@@ -59,20 +59,30 @@ public class NavigationModule extends ReactContextBaseJavaModule {
@Override
public void onHostPause() {
super.onHostPause();
- navigator().onHostPause();
- UiUtils.runOnMainThread(() -> navigator().onHostPause());
+ Navigator navigator = navigator();
+ if (navigator != null) {
+ navigator.onHostPause();
+ UiUtils.runOnMainThread(() -> navigator.onHostPause());
+ }
}
@Override
public void onHostResume() {
+ try {
eventEmitter = new EventEmitter(reactContext);
- eventEmitter = new EventEmitter(reactContext);
- navigator().setEventEmitter(eventEmitter);
- layoutFactory.init(
- activity(),
@@ -24,39 +23,39 @@ index 2e8acc0..71da101 100644
- navigator().getChildRegistry(),
- ((NavigationApplication) activity().getApplication()).getExternalComponents()
- );
- navigator().onHostResume();
+ Navigator navigator = navigator();
+ if (navigator != null) {
+ navigator.setEventEmitter(eventEmitter);
+ layoutFactory.init(
+ activity(),
+ eventEmitter,
+ navigator().getChildRegistry(),
+ ((NavigationApplication) activity().getApplication()).getExternalComponents()
+ );
+ navigator.onHostResume();
+ }
- UiUtils.runOnMainThread(() -> navigator().onHostResume());
+ try {
+ eventEmitter = new EventEmitter(reactContext);
+ Navigator navigator = navigator();
+ if (navigator != null) {
+ navigator.setEventEmitter(eventEmitter);
+ layoutFactory.init(
+ activity(),
+ eventEmitter,
+ navigator.getChildRegistry(),
+ ((NavigationApplication) activity().getApplication()).getExternalComponents()
+ );
+ UiUtils.runOnMainThread(() -> navigator.onHostResume());
+ }
+ } catch (ClassCastException e) {
+ // The most current activity is not a NavigationActivity
+ }
+
}
});
}
@@ -210,7 +221,11 @@ public class NavigationModule extends ReactContextBaseJavaModule {
@@ -210,7 +220,10 @@ public class NavigationModule extends ReactContextBaseJavaModule {
}
private Navigator navigator() {
- return activity().getNavigator();
+ if (activity() instanceof NavigationActivity) {
+ NavigationActivity activity = (NavigationActivity) activity();
+ return activity.getNavigator();
+ return ((NavigationActivity)activity()).getNavigator();
+ }
+ return null;
+ return null;
}
private Options parse(@Nullable ReadableMap mergeOptions) {
@@ -221,21 +236,26 @@ public class NavigationModule extends ReactContextBaseJavaModule {
@@ -221,19 +234,23 @@ public class NavigationModule extends ReactContextBaseJavaModule {
protected void handle(Runnable task) {
UiThread.post(() -> {
@@ -81,15 +80,10 @@ index 2e8acc0..71da101 100644
@Override
public void onCatalystInstanceDestroy() {
- final NavigationActivity navigationActivity = activity();
- if (navigationActivity != null) {
- navigationActivity.onCatalystInstanceDestroy();
+ final Activity navigationActivity = activity();
+ if (navigationActivity != null && navigationActivity instanceof NavigationActivity) {
+ NavigationActivity activity = (NavigationActivity)navigationActivity;
+ activity.onCatalystInstanceDestroy();
+ final NavigationActivity navigationActivity = (NavigationActivity)activity();
if (navigationActivity != null) {
navigationActivity.onCatalystInstanceDestroy();
}
super.onCatalystInstanceDestroy();
}
diff --git a/node_modules/react-native-navigation/lib/ios/RNNOverlayWindow.m b/node_modules/react-native-navigation/lib/ios/RNNOverlayWindow.m
index 934e7e7..19169a3 100644
--- a/node_modules/react-native-navigation/lib/ios/RNNOverlayWindow.m

View File

@@ -1,5 +1,5 @@
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/AndroidManifest.xml b/node_modules/react-native-notifications/lib/android/app/src/main/AndroidManifest.xml
index abd988a..4ac4725 100644
index 24cd226..4bfacba 100644
--- a/node_modules/react-native-notifications/lib/android/app/src/main/AndroidManifest.xml
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
@@ -10,7 +10,7 @@ index abd988a..4ac4725 100644
<application>
<!--
@@ -22,6 +23,9 @@
@@ -23,6 +24,9 @@
android:name=".fcm.FcmInstanceIdRefreshHandlerService"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE" />
@@ -173,7 +173,7 @@ index 0d70024..b9e6c88 100644
PushNotificationProps asProps();
}
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java
index fe1fb94..c9e0301 100644
index b93f762..400e086 100644
--- a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java
@@ -8,6 +8,10 @@ import android.content.Context;
@@ -187,17 +187,17 @@ index fe1fb94..c9e0301 100644
import com.facebook.react.bridge.ReactContext;
import com.wix.reactnativenotifications.core.AppLaunchHelper;
@@ -18,7 +22,9 @@ import com.wix.reactnativenotifications.core.InitialNotificationHolder;
@@ -17,7 +21,9 @@ import com.wix.reactnativenotifications.core.AppLifecycleFacadeHolder;
import com.wix.reactnativenotifications.core.InitialNotificationHolder;
import com.wix.reactnativenotifications.core.JsIOHelper;
import com.wix.reactnativenotifications.core.NotificationIntentAdapter;
import com.wix.reactnativenotifications.core.ProxyService;
+import com.wix.reactnativenotifications.core.helpers.ScheduleNotificationHelper;
+import static com.wix.reactnativenotifications.Defs.LOGTAG;
import static com.wix.reactnativenotifications.Defs.NOTIFICATION_OPENED_EVENT_NAME;
import static com.wix.reactnativenotifications.Defs.NOTIFICATION_RECEIVED_EVENT_NAME;
import static com.wix.reactnativenotifications.Defs.NOTIFICATION_RECEIVED_BACKGROUND_EVENT_NAME;
@@ -29,7 +35,7 @@ public class PushNotification implements IPushNotification {
@@ -28,7 +34,7 @@ public class PushNotification implements IPushNotification {
final protected AppLifecycleFacade mAppLifecycleFacade;
final protected AppLaunchHelper mAppLaunchHelper;
final protected JsIOHelper mJsIOHelper;
@@ -206,7 +206,7 @@ index fe1fb94..c9e0301 100644
final protected AppVisibilityListener mAppVisibilityListener = new AppVisibilityListener() {
@Override
public void onAppVisible() {
@@ -62,7 +68,7 @@ public class PushNotification implements IPushNotification {
@@ -61,7 +67,7 @@ public class PushNotification implements IPushNotification {
}
@Override
@@ -215,8 +215,8 @@ index fe1fb94..c9e0301 100644
if (!mAppLifecycleFacade.isAppVisible()) {
postNotification(null);
notifyReceivedBackgroundToJS();
@@ -81,6 +87,41 @@ public class PushNotification implements IPushNotification {
return postNotification(notificationId);
@@ -70,6 +76,41 @@ public class PushNotification implements IPushNotification {
}
}
+ @Override
@@ -255,9 +255,9 @@ index fe1fb94..c9e0301 100644
+ }
+
@Override
public PushNotificationProps asProps() {
return mNotificationProps.copy();
@@ -143,15 +184,16 @@ public class PushNotification implements IPushNotification {
public void onOpened() {
digestNotification();
@@ -140,15 +181,16 @@ public class PushNotification implements IPushNotification {
}
protected Notification buildNotification(PendingIntent intent) {
@@ -278,7 +278,7 @@ index fe1fb94..c9e0301 100644
.setAutoCancel(true);
setUpIcon(notification);
@@ -166,7 +208,7 @@ public class PushNotification implements IPushNotification {
@@ -163,7 +205,7 @@ public class PushNotification implements IPushNotification {
return notification;
}
@@ -287,7 +287,7 @@ index fe1fb94..c9e0301 100644
int iconResId = getAppResourceId("notification_icon", "drawable");
if (iconResId != 0) {
notification.setSmallIcon(iconResId);
@@ -177,7 +219,7 @@ public class PushNotification implements IPushNotification {
@@ -174,7 +216,7 @@ public class PushNotification implements IPushNotification {
setUpIconColor(notification);
}
@@ -296,7 +296,7 @@ index fe1fb94..c9e0301 100644
int colorResID = getAppResourceId("colorAccent", "color");
if (colorResID != 0 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
int color = mContext.getResources().getColor(colorResID);
@@ -192,7 +234,7 @@ public class PushNotification implements IPushNotification {
@@ -189,7 +231,7 @@ public class PushNotification implements IPushNotification {
}
protected void postNotification(int id, Notification notification) {
@@ -307,7 +307,7 @@ index fe1fb94..c9e0301 100644
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotificationPublisher.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotificationPublisher.java
new file mode 100644
index 0000000..5b64593
index 0000000..58ff887
--- /dev/null
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotificationPublisher.java
@@ -0,0 +1,27 @@
@@ -338,7 +338,6 @@ index 0000000..5b64593
+ pushNotification.onPostScheduledRequest(notificationId);
+ }
+}
\ No newline at end of file
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/IPushNotificationsDrawer.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/IPushNotificationsDrawer.java
index e22cd62..48aa1cd 100644
--- a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/IPushNotificationsDrawer.java
@@ -461,19 +460,8 @@ index 44ab53f..8000701 100644
/**
* removeAllDeliveredNotifications
*/
diff --git a/node_modules/react-native-notifications/lib/dist/interfaces/NotificationCategory.d.ts b/node_modules/react-native-notifications/lib/dist/interfaces/NotificationCategory.d.ts
index 0e78cb5..ae90bd1 100644
--- a/node_modules/react-native-notifications/lib/dist/interfaces/NotificationCategory.d.ts
+++ b/node_modules/react-native-notifications/lib/dist/interfaces/NotificationCategory.d.ts
@@ -13,5 +13,5 @@ export declare class NotificationAction {
title: string;
authenticationRequired: boolean;
textInput?: NotificationTextInput;
- constructor(identifier: string, activationMode: 'foreground' | 'authenticationRequired' | 'destructive', title: string, authenticationRequired: boolean, textInput?: NotificationTextInput);
+ constructor(identifier: string, activationMode: 'background' | 'foreground' | 'authenticationRequired' | 'destructive', title: string, authenticationRequired: boolean, textInput?: NotificationTextInput);
}
diff --git a/node_modules/react-native-notifications/lib/ios/RNNotificationCenter.m b/node_modules/react-native-notifications/lib/ios/RNNotificationCenter.m
index 7452523..a093262 100644
index 4b33656..0f189d6 100644
--- a/node_modules/react-native-notifications/lib/ios/RNNotificationCenter.m
+++ b/node_modules/react-native-notifications/lib/ios/RNNotificationCenter.m
@@ -83,7 +83,7 @@

View File

@@ -0,0 +1,95 @@
diff --git a/node_modules/react-native-reanimated/lib/reanimated2/jestUtils.js b/node_modules/react-native-reanimated/lib/reanimated2/jestUtils.js
index 5ae42ec..aae478e 100644
--- a/node_modules/react-native-reanimated/lib/reanimated2/jestUtils.js
+++ b/node_modules/react-native-reanimated/lib/reanimated2/jestUtils.js
@@ -154,6 +154,9 @@ export const setUpTests = (userConfig = {}) => {
return compareStyle(received, expectedStyle, config);
},
});
+ global.ReanimatedDataMock = {
+ now: () => currentTimestamp,
+ };
};
export const getAnimatedStyle = (received) => {
return getCurrentStyle(received);
diff --git a/node_modules/react-native-reanimated/react-native-reanimated.d.ts b/node_modules/react-native-reanimated/react-native-reanimated.d.ts
index a3aafb2..141f0cd 100644
--- a/node_modules/react-native-reanimated/react-native-reanimated.d.ts
+++ b/node_modules/react-native-reanimated/react-native-reanimated.d.ts
@@ -7,8 +7,6 @@ declare module 'react-native-reanimated' {
ReactNode,
Component,
RefObject,
- ComponentType,
- ComponentProps,
FunctionComponent,
} from 'react';
import {
@@ -31,7 +29,6 @@ declare module 'react-native-reanimated' {
NativeScrollEvent,
NativeSyntheticEvent,
ColorValue,
- OpaqueColorValue,
EasingFunction,
} from 'react-native';
import {
@@ -39,24 +36,24 @@ declare module 'react-native-reanimated' {
PanGestureHandlerGestureEvent,
} from 'react-native-gesture-handler';
- import('./src/reanimated2/globals');
+ import('./lib/reanimated2/globals');
export type TimingAnimation =
- import('./src/reanimated2/animation/index').TimingAnimation;
+ import('./lib/reanimated2/animation/index').TimingAnimation;
export type SpringAnimation =
- import('./src/reanimated2/animation/index').SpringAnimation;
+ import('./lib/reanimated2/animation/index').SpringAnimation;
export type DecayAnimation =
- import('./src/reanimated2/animation/index').DecayAnimation;
+ import('./lib/reanimated2/animation/index').DecayAnimation;
export type DelayAnimation =
- import('./src/reanimated2/animation/commonTypes').DelayAnimation;
+ import('./lib/reanimated2/animation/commonTypes').DelayAnimation;
export type RepeatAnimation =
- import('./src/reanimated2/animation/index').RepeatAnimation;
+ import('./lib/reanimated2/animation/index').RepeatAnimation;
export type SequenceAnimation =
- import('./src/reanimated2/animation/index').SequenceAnimation;
+ import('./lib/reanimated2/animation/index').SequenceAnimation;
export type StyleLayoutAnimation =
- import('./src/reanimated2/animation/index').StyleLayoutAnimation;
+ import('./lib/reanimated2/animation/index').StyleLayoutAnimation;
export type Animation<T> =
- import('./src/reanimated2/commonTypes').Animation<T>;
+ import('./lib/reanimated2/commonTypes').Animation<T>;
namespace Animated {
type Nullable<T> = T | null | undefined;
diff --git a/node_modules/react-native-reanimated/src/createAnimatedComponent.tsx b/node_modules/react-native-reanimated/src/createAnimatedComponent.tsx
index 6bead55..1cf0c3f 100644
--- a/node_modules/react-native-reanimated/src/createAnimatedComponent.tsx
+++ b/node_modules/react-native-reanimated/src/createAnimatedComponent.tsx
@@ -161,7 +161,7 @@ interface ComponentRef extends Component {
getScrollableNode?: () => ComponentRef;
}
-interface InitialComponentProps extends Record<string, unknown> {
+export interface InitialComponentProps extends Record<string, unknown> {
ref?: Ref<Component>;
collapsable?: boolean;
}
diff --git a/node_modules/react-native-reanimated/src/reanimated2/component/FlatList.tsx b/node_modules/react-native-reanimated/src/reanimated2/component/FlatList.tsx
index f02fc16..32bf952 100644
--- a/node_modules/react-native-reanimated/src/reanimated2/component/FlatList.tsx
+++ b/node_modules/react-native-reanimated/src/reanimated2/component/FlatList.tsx
@@ -23,7 +23,7 @@ const createCellRenderer = (itemLayoutAnimation?: ILayoutAnimationBuilder) => {
return cellRenderer;
};
-interface ReanimatedFlatlistProps<ItemT> extends FlatListProps<ItemT> {
+export interface ReanimatedFlatlistProps<ItemT> extends FlatListProps<ItemT> {
itemLayoutAnimation?: ILayoutAnimationBuilder;
}

View File

@@ -3,7 +3,6 @@
/* eslint-disable react/no-multi-comp */
import MockAsyncStorage from 'mock-async-storage';
import * as ReactNative from 'react-native';
import mockSafeAreaContext from 'react-native-safe-area-context/jest/mock';
@@ -13,7 +12,6 @@ require('react-native-reanimated/lib/reanimated2/jestUtils').setUpTests();
require('isomorphic-fetch');
/* eslint-disable no-console */
jest.mock('@react-native-async-storage/async-storage', () => new MockAsyncStorage());
jest.mock('@database/manager');
jest.doMock('react-native', () => {
const {

View File

@@ -1,6 +1,8 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
/* eslint-disable max-lines */
import assert from 'assert';
import {random} from 'lodash';
@@ -12,13 +14,27 @@ import DatabaseManager from '@database/manager';
import {prepareCommonSystemValues} from '@queries/servers/system';
import {generateId} from '@utils/general';
import type {APIClientInterface} from '@mattermost/react-native-network-client';
const PASSWORD = 'password1';
const DEFAULT_LOCALE = 'en';
class TestHelper {
basicClient: Client | null;
basicUser: UserProfile | null;
basicTeam: Team | null;
basicTeamMember: TeamMembership | null;
basicCategory: Category | null;
basicCategoryChannel: CategoryChannel | null;
basicChannel: Channel | null;
basicChannelMember: ChannelMembership | null;
basicMyChannel: ChannelMembership | null;
basicMyChannelSettings: ChannelMembership | null;
basicPost: Post | null;
basicRoles: Record<string, Role> | null;
constructor() {
this.basicClient = null;
this.basicClient4 = null;
this.basicUser = null;
this.basicTeam = null;
@@ -31,7 +47,6 @@ class TestHelper {
this.basicMyChannelSettings = null;
this.basicPost = null;
this.basicRoles = null;
this.basicScheme = null;
}
setupServerDatabase = async () => {
@@ -43,51 +58,53 @@ class TestHelper {
// Add current user
await operator.handleUsers({
users: [this.basicUser],
users: [this.basicUser!],
prepareRecordsOnly: false,
});
// Add one team
await operator.handleTeam({
teams: [this.basicTeam],
teams: [this.basicTeam!],
prepareRecordsOnly: false,
});
await operator.handleMyTeam({
myTeams: [this.basicTeamMember],
myTeams: [{id: this.basicTeamMember!.id!, roles: this.basicTeamMember!.roles}],
prepareRecordsOnly: false,
});
// Add a category and associated channel entities
await operator.handleCategories({
categories: [this.basicCategory],
categories: [this.basicCategory!],
prepareRecordsOnly: false,
});
await operator.handleCategoryChannels({
categoryChannels: [this.basicCategoryChannel],
categoryChannels: [this.basicCategoryChannel!],
prepareRecordsOnly: false,
});
await operator.handleChannel({
channels: [this.basicChannel],
channels: [this.basicChannel!],
prepareRecordsOnly: false,
});
await operator.handleMyChannel({
prepareRecordsOnly: false,
channels: [this.basicChannel],
myChannels: [this.basicMyChannel],
channels: [this.basicChannel!],
myChannels: [this.basicMyChannel!],
});
await operator.handleMyChannelSettings({
prepareRecordsOnly: false,
settings: [this.basicMyChannelSettings],
settings: [this.basicMyChannelSettings!],
});
const systems = await prepareCommonSystemValues(operator, {
config: {},
license: {},
config: {} as ClientConfig,
license: {} as ClientLicense,
currentChannelId: '',
currentTeamId: this.basicTeam.id,
currentUserId: this.basicUser.id,
currentTeamId: this.basicTeam!.id,
currentUserId: this.basicUser!.id,
});
await operator.batchRecords(systems);
if (systems?.length) {
await operator.batchRecords(systems);
}
return {database, operator};
};
@@ -98,7 +115,7 @@ class TestHelper {
}
}
assertStatusOkay = (data) => {
assertStatusOkay = (data: {status: string}) => {
assert(data);
assert(data.status === 'OK');
};
@@ -108,7 +125,7 @@ class TestHelper {
};
createClient = () => {
const mockApiClient = {
const mockApiClient: APIClientInterface = {
baseUrl: 'https://community.mattermost.com',
delete: jest.fn(),
head: jest.fn(),
@@ -117,13 +134,27 @@ class TestHelper {
post: jest.fn(),
put: jest.fn(),
upload: jest.fn(),
config: {
headers: undefined,
sessionConfiguration: undefined,
retryPolicyConfiguration: undefined,
requestAdapterConfiguration: undefined,
clientP12Configuration: undefined,
},
onClientError: jest.fn(),
download: jest.fn(),
getHeaders: jest.fn(),
addHeaders: jest.fn(),
importClientP12: jest.fn(),
invalidate: jest.fn(),
};
return new Client(mockApiClient, mockApiClient.baseUrl);
};
fakeCategory = (teamId) => {
fakeCategory = (teamId: string): Category => {
return {
id: '',
display_name: 'Test Category',
type: 'custom',
sort_order: 0,
@@ -134,14 +165,14 @@ class TestHelper {
};
};
fakeCategoryWithId = (teamId) => {
fakeCategoryWithId = (teamId: string): Category => {
return {
...this.fakeCategory(teamId),
id: this.generateId(),
};
};
fakeCategoryChannel = (categoryId, channelId) => {
fakeCategoryChannel = (categoryId: string, channelId: string): CategoryChannel => {
return {
category_id: categoryId,
channel_id: channelId,
@@ -149,7 +180,7 @@ class TestHelper {
};
};
fakeCategoryChannelWithId = (teamId, categoryId, channelId) => {
fakeCategoryChannelWithId = (teamId: string, categoryId: string, channelId: string): CategoryChannel => {
return {
id: teamId + channelId,
category_id: categoryId,
@@ -158,7 +189,7 @@ class TestHelper {
};
};
fakeChannel = (teamId) => {
fakeChannel = (teamId: string): Channel => {
const name = this.generateId();
return {
@@ -169,24 +200,31 @@ class TestHelper {
// https://jestjs.io/docs/snapshot-testing#2-tests-should-be-deterministic
// display_name: `Unit Test ${name}`,
display_name: 'Channel',
type: 'O',
type: 'O' as ChannelType,
delete_at: 0,
total_msg_count: 0,
scheme_id: this.generateId(),
header: '',
purpose: '',
last_post_at: 0,
extra_update_at: 0,
creator_id: this.generateId(),
group_constrained: false,
shared: false,
create_at: 1507840900004,
update_at: 1507840900004,
id: '',
};
};
fakeChannelWithId = (teamId) => {
fakeChannelWithId = (teamId: string): Channel => {
return {
...this.fakeChannel(teamId),
id: this.generateId(),
create_at: 1507840900004,
update_at: 1507840900004,
delete_at: 0,
};
};
fakeDmChannel = (userId, otherUserId) => {
fakeDmChannel = (userId: string, otherUserId: string): Partial<Channel> => {
return {
name: userId > otherUserId ? otherUserId + '__' + userId : userId + '__' + otherUserId,
team_id: '',
@@ -199,7 +237,7 @@ class TestHelper {
};
};
fakeChannelMember = (userId, channelId) => {
fakeChannelMember = (userId: string, channelId: string): ChannelMembership => {
return {
id: channelId,
user_id: userId,
@@ -210,35 +248,38 @@ class TestHelper {
mention_count: 0,
scheme_user: false,
scheme_admin: false,
last_viewed_at: 0,
last_update_at: 0,
};
};
fakeMyChannel = (channelId) => {
fakeMyChannel = (userId: string, channelId: string): ChannelMembership => {
return {
id: channelId,
channel_id: channelId,
last_post_at: 0,
last_viewed_at: 0,
manually_unread: false,
mentions_count: 0,
message_count: 0,
mention_count: 0,
msg_count: 0,
is_unread: false,
roles: '',
viewed_at: 0,
user_id: userId,
notify_props: {},
last_update_at: 0,
};
};
fakeMyChannelSettings = (channelId) => {
fakeMyChannelSettings = (userId: string, channelId: string): ChannelMembership => {
return {
id: channelId,
channel_id: channelId,
notify_props: JSON.stringify({
...this.fakeMyChannel(userId, channelId),
notify_props: {
desktop: 'default',
email: 'default',
mark_unread: 'all',
push: 'default',
ignore_channel_mentions: 'default',
}),
},
};
};
@@ -246,7 +287,7 @@ class TestHelper {
return 'success' + this.generateId() + '@simulator.amazonses.com';
};
fakePost = (channelId) => {
fakePost = (channelId: string) => {
const time = Date.now();
return {
@@ -259,7 +300,7 @@ class TestHelper {
};
};
fakePostWithId = (channelId) => {
fakePostWithId = (channelId: string) => {
return {
...this.fakePost(channelId),
id: this.generateId(),
@@ -279,15 +320,20 @@ class TestHelper {
return {
name,
display_name: `Unit Test ${name}`,
type: 'O',
type: 'O' as TeamType,
email: this.fakeEmail(),
allowed_domains: '',
invite_id: inviteId,
scheme_id: this.generateId(),
company_name: '',
description: '',
allow_open_invite: true,
group_constrained: false,
last_team_icon_update: 0,
};
};
fakeTeamWithId = () => {
fakeTeamWithId = (): Team => {
return {
...this.fakeTeam(),
id: this.generateId(),
@@ -297,7 +343,7 @@ class TestHelper {
};
};
fakeTeamMember = (userId, teamId) => {
fakeTeamMember = (userId: string, teamId: string): TeamMembership => {
return {
id: teamId,
user_id: userId,
@@ -306,6 +352,8 @@ class TestHelper {
delete_at: 0,
scheme_user: false,
scheme_admin: false,
msg_count: 0,
mention_count: 0,
};
};
@@ -324,30 +372,47 @@ class TestHelper {
};
};
fakeUserWithId = (id = this.generateId()) => {
fakeUserWithId = (id = this.generateId()): UserProfile => {
return {
...this.fakeUser(),
id,
create_at: 1507840900004,
update_at: 1507840900004,
delete_at: 0,
auth_service: '',
nickname: '',
notify_props: {
desktop: 'default',
desktop_sound: 'true',
email: 'true',
mark_unread: 'all',
push: 'default',
push_status: 'away',
comments: 'any',
first_name: 'true',
channel: 'true',
mention_keys: '',
},
last_picture_update: 0,
position: '',
is_bot: false,
};
};
fakeOutgoingHook = (teamId) => {
fakeOutgoingHook = (teamId: string) => {
return {
team_id: teamId,
};
};
fakeOutgoingHookWithId = (teamId) => {
fakeOutgoingHookWithId = (teamId: string) => {
return {
...this.fakeOutgoingHook(teamId),
id: this.generateId(),
};
};
fakeFiles = (count) => {
fakeFiles = (count: number) => {
const files = [];
while (files.length < count) {
files.push({
@@ -390,25 +455,25 @@ class TestHelper {
};
mockLogin = () => {
nock(this.basicClient4.getBaseRoute()).
nock(this.basicClient?.getBaseRoute()).
post('/users/login').
reply(200, this.basicUser, {'X-Version-Id': 'Server Version'});
reply(200, this.basicUser!, {'X-Version-Id': 'Server Version'});
nock(this.basicClient4.getBaseRoute()).
nock(this.basicClient?.getBaseRoute()).
get('/users/me/teams/members').
reply(200, [this.basicTeamMember]);
nock(this.basicClient4.getBaseRoute()).
nock(this.basicClient?.getBaseRoute()).
get('/users/me/teams/unread').
reply(200, [{team_id: this.basicTeam.id, msg_count: 0, mention_count: 0}]);
reply(200, [{team_id: this.basicTeam!.id, msg_count: 0, mention_count: 0}]);
nock(this.basicClient4.getBaseRoute()).
nock(this.basicClient?.getBaseRoute()).
get('/users/me/teams').
reply(200, [this.basicTeam]);
nock(this.basicClient4.getBaseRoute()).
nock(this.basicClient?.getBaseRoute()).
get('/users/me/preferences').
reply(200, [{user_id: this.basicUser.id, category: 'tutorial_step', name: this.basicUser.id, value: '999'}]);
reply(200, [{user_id: this.basicUser!.id, category: 'tutorial_step', name: this.basicUser!.id, value: '999'}]);
};
initMockEntities = () => {
@@ -420,9 +485,9 @@ class TestHelper {
this.basicChannel = this.fakeChannelWithId(this.basicTeam.id);
this.basicCategoryChannel = this.fakeCategoryChannelWithId(this.basicTeam.id, this.basicCategory.id, this.basicChannel.id);
this.basicChannelMember = this.fakeChannelMember(this.basicUser.id, this.basicChannel.id);
this.basicMyChannel = this.fakeMyChannel(this.basicChannel.id);
this.basicMyChannelSettings = this.fakeMyChannelSettings(this.basicChannel.id);
this.basicPost = {...this.fakePostWithId(this.basicChannel.id), create_at: 1507841118796};
this.basicMyChannel = this.fakeMyChannel(this.basicUser.id, this.basicChannel.id);
this.basicMyChannelSettings = this.fakeMyChannelSettings(this.basicUser.id, this.basicChannel.id);
this.basicPost = {...this.fakePostWithId(this.basicChannel.id), create_at: 1507841118796} as Post;
this.basicRoles = {
system_admin: {
id: this.generateId(),
@@ -491,20 +556,17 @@ class TestHelper {
built_in: true,
},
};
this.basicScheme = this.mockSchemeWithId();
};
initBasic = async (client = this.createClient()) => {
client.setUrl(Config.TestServerUrl || Config.DefaultServerUrl);
this.basicClient = client;
this.basicClient4 = client;
this.initMockEntities();
this.activateMocking();
return {
client: this.basicClient,
client4: this.basicClient4,
user: this.basicUser,
team: this.basicTeam,
channel: this.basicChannel,
@@ -538,9 +600,9 @@ class TestHelper {
create_at: 1507840900004,
update_at: 1507840900004,
delete_at: 0,
user_id: this.basicUser.id,
channel_id: this.basicChannel.id,
team_id: this.basicTeam.id,
user_id: this.basicUser!.id,
channel_id: this.basicChannel!.id,
team_id: this.basicTeam!.id,
display_name: 'test',
description: 'test',
};
@@ -553,9 +615,9 @@ class TestHelper {
create_at: 1507841118796,
update_at: 1507841118796,
delete_at: 0,
creator_id: this.basicUser.id,
channel_id: this.basicChannel.id,
team_id: this.basicTeam.id,
creator_id: this.basicUser!.id,
channel_id: this.basicChannel!.id,
team_id: this.basicTeam!.id,
trigger_words: ['testword'],
trigger_when: 0,
callback_urls: ['http://localhost/notarealendpoint'],
@@ -565,14 +627,14 @@ class TestHelper {
};
};
testCommand = (teamId) => {
testCommand = (teamId: string) => {
return {
trigger: this.generateId(),
method: 'P',
create_at: 1507841118796,
update_at: 1507841118796,
delete_at: 0,
creator_id: this.basicUser.id,
creator_id: this.basicUser!.id,
team_id: teamId,
username: 'test',
icon_url: 'http://localhost/notarealendpoint',
@@ -589,7 +651,6 @@ class TestHelper {
nock.restore();
this.basicClient = null;
this.basicClient4 = null;
this.basicUser = null;
this.basicTeam = null;
this.basicTeamMember = null;
@@ -598,7 +659,7 @@ class TestHelper {
this.basicPost = null;
};
wait = (time) => new Promise((resolve) => setTimeout(resolve, time));
wait = (time: number) => new Promise((resolve) => setTimeout(resolve, time));
}
export default new TestHelper();

View File

@@ -5,7 +5,7 @@
"lib": [
"es6", "ES2019"
],
"allowJs": true,
"allowJs": false,
"skipLibCheck": true,
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
@@ -59,9 +59,6 @@
"@utils/*": ["app/utils/*"],
"@websocket": ["app/client/websocket"],
"*": ["./*", "node_modules/*"],
"react-native-redash/lib/module/v1": [
"./node_modules/react-native-redash/lib/typescript/v1/index.d.ts"
]
}
},
"include": ["app/**/*", "share_extensionn/**/*", "test/**/*", "types/**/*"],

View File

@@ -63,6 +63,7 @@ type ChannelMembership = {
scheme_admin?: boolean;
post_root_id?: string;
is_unread?: boolean;
manually_unread?: boolean;
};
type ChannelUnread = {
channel_id: string;

18
types/global/managed_config.d.ts vendored Normal file
View File

@@ -0,0 +1,18 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
type ManagedConfig = {
allowOtherServers?: string;
blurApplicationScreen?: string;
copyAndPasteProtection?: string;
inAppPinCode?: string;
inAppSessionAuth?: string;
jailbreakProtection?: string;
serverName?: string;
serverUrl?: string;
timeout?: string;
timeoutVPN?: string;
username?: string;
useVPN?: string;
vendor?: string;
}

View File

@@ -1,4 +0,0 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
declare module 'mock-async-storage';

View File

@@ -1,133 +0,0 @@
/* eslint-disable header/header */
declare module 'react-native-slider' {
import {ComponentClass} from 'react';
import {
ImageSourcePropType,
SpringAnimationConfig,
StyleProp,
TimingAnimationConfig,
ViewStyle,
} from 'react-native';
interface SliderProps {
/**
* Initial value of the slider. The value should be between minimumValue
* and maximumValue, which default to 0 and 1 respectively.
* Default value is 0.
*
* *This is not a controlled component*, e.g. if you don't update
* the value, the component won't be reset to its inital value.
*/
value?: number;
/**
* If true the user won't be able to move the slider.
* Default value is false.
*/
disabled?: boolean;
/**
* Initial minimum value of the slider. Default value is 0.
*/
minimumValue?: number;
/**
* Initial maximum value of the slider. Default value is 1.
*/
maximumValue?: number;
/**
* Step value of the slider. The value should be between 0 and
* (maximumValue - minimumValue). Default value is 0.
*/
step?: number;
/**
* The color used for the track to the left of the button. Overrides the
* default blue gradient image.
*/
minimumTrackTintColor?: string;
/**
* The color used for the track to the right of the button. Overrides the
* default blue gradient image.
*/
maximumTrackTintColor?: string;
/**
* The color used for the thumb.
*/
thumbTintColor?: string;
/**
* The size of the touch area that allows moving the thumb.
* The touch area has the same center has the visible thumb.
* This allows to have a visually small thumb while still allowing the user
* to move it easily.
* The default is {width: 40, height: 40}.
*/
thumbTouchSize?: { width: number; height: number };
/**
* Callback continuously called while the user is dragging the slider.
*/
onValueChange: (value: number) => void;
/**
* Callback called when the user starts changing the value (e.g. when
* the slider is pressed).
*/
onSlidingStart?: (value: number) => void;
/**
* Callback called when the user finishes changing the value (e.g. when
* the slider is released).
*/
onSlidingComplete?: (value: number) => void;
/**
* The style applied to the slider container.
*/
style?: StyleProp<ViewStyle>;
/**
* The style applied to the track.
*/
trackStyle?: StyleProp<ViewStyle>;
/**
* The style applied to the thumb.
*/
thumbStyle?: StyleProp<ViewStyle>;
/**
* Sets an image for the thumb.
*/
thumbImage?: ImageSourcePropType;
/**
* Set this to true to visually see the thumb touch rect in green.
*/
debugTouchArea?: boolean;
/**
* Set to true to animate values with default 'timing' animation type
*/
animateTransitions?: boolean;
/**
* Custom Animation type. 'spring' or 'timing'.
*/
animationType?: 'spring' | 'timing';
/**
* Used to configure the animation parameters. These are the same parameters in the Animated library.
*/
animationConfig?: SpringAnimationConfig | TimingAnimationConfig;
}
const Slider: ComponentClass<SliderProps>;
export default Slider;
}