forked from Ivasoft/mattermost-mobile
Update dependencies
This commit is contained in:
83
NOTICE.txt
83
NOTICE.txt
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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}
|
||||
/>
|
||||
|
||||
@@ -30,6 +30,8 @@ Object {
|
||||
<RNGestureHandlerButton
|
||||
collapsable={false}
|
||||
exclusive={true}
|
||||
handlerTag={1}
|
||||
handlerType="NativeViewGestureHandler"
|
||||
onGestureEvent={[Function]}
|
||||
onGestureHandlerEvent={[Function]}
|
||||
onGestureHandlerStateChange={[Function]}
|
||||
|
||||
@@ -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]}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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>();
|
||||
|
||||
@@ -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]}
|
||||
|
||||
@@ -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)),
|
||||
),
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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),
|
||||
};
|
||||
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -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 = () => {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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}>
|
||||
|
||||
@@ -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)();
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -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),
|
||||
};
|
||||
|
||||
|
||||
@@ -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),
|
||||
};
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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>('');
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -53,7 +53,7 @@ const PostOptions = ({
|
||||
post,
|
||||
thread,
|
||||
}: PostOptionsProps) => {
|
||||
const managedConfig = useManagedConfig();
|
||||
const managedConfig = useManagedConfig<ManagedConfig>();
|
||||
|
||||
useEffect(() => {
|
||||
const unsubscribe = Navigation.events().registerComponentListener({
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
@@ -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 = [];
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
gem "cocoapods", "1.11.2"
|
||||
gem "cocoapods", "1.11.3"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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];
|
||||
|
||||
542
ios/Podfile.lock
542
ios/Podfile.lock
@@ -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
1961
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
102
package.json
102
package.json
@@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"]
|
||||
@@ -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
|
||||
@@ -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 @@
|
||||
95
patches/react-native-reanimated+2.5.0.patch
Normal file
95
patches/react-native-reanimated+2.5.0.patch
Normal 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;
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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();
|
||||
@@ -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/**/*"],
|
||||
|
||||
1
types/api/channels.d.ts
vendored
1
types/api/channels.d.ts
vendored
@@ -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
18
types/global/managed_config.d.ts
vendored
Normal 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;
|
||||
}
|
||||
4
types/modules/mock-async-storage.d.ts
vendored
4
types/modules/mock-async-storage.d.ts
vendored
@@ -1,4 +0,0 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
declare module 'mock-async-storage';
|
||||
133
types/modules/react-native-slider.d.ts
vendored
133
types/modules/react-native-slider.d.ts
vendored
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user