forked from Ivasoft/mattermost-mobile
Compare commits
57 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
11be4d2b28 | ||
|
|
90323ee4a0 | ||
|
|
99abe48192 | ||
|
|
db86bbc42b | ||
|
|
66b469bb31 | ||
|
|
f80b49a6f0 | ||
|
|
7fc17021a2 | ||
|
|
c4a47ea31d | ||
|
|
04a50f79ea | ||
|
|
fdee027b4a | ||
|
|
525269a0a1 | ||
|
|
eb862d7fd4 | ||
|
|
355b11ea25 | ||
|
|
f4b59a2163 | ||
|
|
5dd2098e00 | ||
|
|
12133416ac | ||
|
|
8784c8d637 | ||
|
|
740306291d | ||
|
|
8137241f12 | ||
|
|
e0c2578c37 | ||
|
|
ccdde858c7 | ||
|
|
d31676f6b7 | ||
|
|
e873f84a24 | ||
|
|
ba5b3eebef | ||
|
|
7b8313929e | ||
|
|
54461aa8da | ||
|
|
149ebd6a15 | ||
|
|
2534685fdc | ||
|
|
44e69a421f | ||
|
|
cd01c46046 | ||
|
|
2cbee12d11 | ||
|
|
c1936040c3 | ||
|
|
6201270029 | ||
|
|
d13a787049 | ||
|
|
19c6ae86eb | ||
|
|
6119ac46e1 | ||
|
|
0165e2ab1f | ||
|
|
8cbf57781b | ||
|
|
23785709a8 | ||
|
|
e37ee22a1b | ||
|
|
7461acb01a | ||
|
|
c4620963fa | ||
|
|
a26e66d0e2 | ||
|
|
b6b77411f0 | ||
|
|
cd4dc9528b | ||
|
|
8e4f19f3ea | ||
|
|
7ccae88e6f | ||
|
|
2234988b72 | ||
|
|
94cfd0a74b | ||
|
|
9c2b5133ab | ||
|
|
c1ce9260b7 | ||
|
|
b0f6968d5c | ||
|
|
64a1a6838e | ||
|
|
a917d116b5 | ||
|
|
4deaf8cb21 | ||
|
|
580c653704 | ||
|
|
ed6daffa0c |
@@ -525,4 +525,4 @@ workflows:
|
||||
tags:
|
||||
only: /^v(\d+\.)(\d+\.)(\d+)(.*)?$/
|
||||
branches:
|
||||
only: unsigned
|
||||
only: unsigned
|
||||
13
.github/codeql/codeql-config.yml
vendored
Normal file
13
.github/codeql/codeql-config.yml
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
name: "CodeQL config"
|
||||
|
||||
query-filters:
|
||||
- exclude:
|
||||
problem.severity:
|
||||
- warning
|
||||
- recommendation
|
||||
- exclude:
|
||||
id: js/insecure-randomness
|
||||
|
||||
paths-ignore:
|
||||
- test
|
||||
- '**/*.test.*'
|
||||
23
.github/workflows/codeql-analysis.yml
vendored
23
.github/workflows/codeql-analysis.yml
vendored
@@ -9,8 +9,13 @@ on:
|
||||
schedule:
|
||||
- cron: '0 0 * * 0'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
permissions:
|
||||
security-events: write
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
@@ -18,26 +23,20 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'javascript' ]
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||
config-file: ./.github/codeql/codeql-config.yml
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
# Autobuild attempts to build any compiled languages
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
||||
uses: github/codeql-action/analyze@v2
|
||||
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -42,6 +42,8 @@ ios/Pods
|
||||
.gradle
|
||||
local.properties
|
||||
*.iml
|
||||
*.hprof
|
||||
.cxx/
|
||||
android/app/bin
|
||||
android/app/build
|
||||
android/build
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
# Note: development on this repository has primarily moved to the `main` branch
|
||||
This `master`(now `v1`) branch is mostly in maintenance mode while we're working to getting our "v2" (code named "gekidou") to the GA stage. To contribute check out the [main](https://github.com/mattermost/mattermost-mobile/tree/main) branch in this repository.
|
||||
|
||||
# Mattermost Mobile App
|
||||
[](https://mattermost.com)
|
||||
|
||||
|
||||
@@ -131,8 +131,8 @@ android {
|
||||
applicationId "com.mattermost.rnbeta"
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 404
|
||||
versionName "1.53.0"
|
||||
versionCode 436
|
||||
versionName "1.56.0"
|
||||
multiDexEnabled = true
|
||||
testBuildType System.getProperty('testBuildType', 'debug')
|
||||
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
|
||||
|
||||
@@ -8,6 +8,6 @@
|
||||
android:usesCleartextTraffic="true"
|
||||
tools:targetApi="28"
|
||||
tools:ignore="GoogleAppIndexingWarning">
|
||||
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
|
||||
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" android:exported="false" />
|
||||
</application>
|
||||
</manifest>
|
||||
</manifest>
|
||||
@@ -33,10 +33,12 @@
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:label="@string/app_name"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
|
||||
android:windowSoftInputMode="adjustResize"
|
||||
android:launchMode="singleTask"
|
||||
android:taskAffinity="">
|
||||
android:taskAffinity=""
|
||||
android:exported="true"
|
||||
>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
@@ -72,7 +74,9 @@
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/AppTheme"
|
||||
android:taskAffinity="com.mattermost.share"
|
||||
android:launchMode="singleInstance">
|
||||
android:launchMode="singleInstance"
|
||||
android:exported="true"
|
||||
>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.SEND" />
|
||||
<action android:name="android.intent.action.SEND_MULTIPLE" />
|
||||
@@ -91,4 +95,4 @@
|
||||
<data android:mimeType="*/*" />
|
||||
</intent>
|
||||
</queries>
|
||||
</manifest>
|
||||
</manifest>
|
||||
@@ -22,6 +22,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.wix.reactnativenotifications.core.notification.PushNotification;
|
||||
import com.wix.reactnativenotifications.core.NotificationIntentAdapter;
|
||||
import com.wix.reactnativenotifications.core.AppLaunchHelper;
|
||||
import com.wix.reactnativenotifications.core.AppLifecycleFacade;
|
||||
import com.wix.reactnativenotifications.core.JsIOHelper;
|
||||
@@ -246,7 +247,7 @@ public class CustomPushNotification extends PushNotification {
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.mattermost.rnbeta;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
@@ -128,11 +129,20 @@ public class CustomPushNotificationHelper {
|
||||
replyIntent.putExtra(NOTIFICATION_ID, notificationId);
|
||||
replyIntent.putExtra("pushNotification", bundle);
|
||||
|
||||
PendingIntent replyPendingIntent = PendingIntent.getBroadcast(
|
||||
context,
|
||||
notificationId,
|
||||
replyIntent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
PendingIntent replyPendingIntent;
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||
replyPendingIntent = PendingIntent.getBroadcast(
|
||||
context,
|
||||
notificationId,
|
||||
replyIntent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);
|
||||
} else {
|
||||
replyPendingIntent = PendingIntent.getBroadcast(
|
||||
context,
|
||||
notificationId,
|
||||
replyIntent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
}
|
||||
|
||||
RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
|
||||
.setLabel("Reply")
|
||||
@@ -381,10 +391,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 | PendingIntent.FLAG_IMMUTABLE);
|
||||
notification.setDeleteIntent(deleteIntent);
|
||||
}
|
||||
|
||||
|
||||
@@ -129,9 +129,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);
|
||||
|
||||
@@ -167,6 +167,11 @@ public class ShareModule extends ReactContextBaseJavaModule {
|
||||
map.putString("type", type);
|
||||
map.putBoolean("isString", false);
|
||||
items.pushMap(map);
|
||||
|
||||
map = Arguments.createMap();
|
||||
map.putString("value", extra);
|
||||
map.putBoolean("isString", true);
|
||||
items.pushMap(map);
|
||||
}
|
||||
} else if (Intent.ACTION_SEND_MULTIPLE.equals(action)) {
|
||||
ArrayList<Uri> uris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
|
||||
|
||||
5
android/app/src/main/jni/CMakeLists.txt
Normal file
5
android/app/src/main/jni/CMakeLists.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
# Define the library name here.
|
||||
project(rndiffapp_appmodules)
|
||||
# This file includes all the necessary to let you build your application with the New Architecture.
|
||||
include(${REACT_ANDROID_DIR}/cmake-utils/ReactNative-application.cmake)
|
||||
32
android/app/src/main/jni/MainApplicationModuleProvider.cpp
Normal file
32
android/app/src/main/jni/MainApplicationModuleProvider.cpp
Normal file
@@ -0,0 +1,32 @@
|
||||
#include "MainApplicationModuleProvider.h"
|
||||
|
||||
#include <rncli.h>
|
||||
#include <rncore.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
std::shared_ptr<TurboModule> MainApplicationModuleProvider(
|
||||
const std::string &moduleName,
|
||||
const JavaTurboModule::InitParams ¶ms) {
|
||||
// Here you can provide your own module provider for TurboModules coming from
|
||||
// either your application or from external libraries. The approach to follow
|
||||
// is similar to the following (for a library called `samplelibrary`:
|
||||
//
|
||||
// auto module = samplelibrary_ModuleProvider(moduleName, params);
|
||||
// if (module != nullptr) {
|
||||
// return module;
|
||||
// }
|
||||
// return rncore_ModuleProvider(moduleName, params);
|
||||
|
||||
// Module providers autolinked by RN CLI
|
||||
auto rncli_module = rncli_ModuleProvider(moduleName, params);
|
||||
if (rncli_module != nullptr) {
|
||||
return rncli_module;
|
||||
}
|
||||
|
||||
return rncore_ModuleProvider(moduleName, params);
|
||||
}
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
||||
16
android/app/src/main/jni/MainApplicationModuleProvider.h
Normal file
16
android/app/src/main/jni/MainApplicationModuleProvider.h
Normal file
@@ -0,0 +1,16 @@
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include <ReactCommon/JavaTurboModule.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
std::shared_ptr<TurboModule> MainApplicationModuleProvider(
|
||||
const std::string &moduleName,
|
||||
const JavaTurboModule::InitParams ¶ms);
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
||||
@@ -0,0 +1,45 @@
|
||||
#include "MainApplicationTurboModuleManagerDelegate.h"
|
||||
#include "MainApplicationModuleProvider.h"
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
jni::local_ref<MainApplicationTurboModuleManagerDelegate::jhybriddata>
|
||||
MainApplicationTurboModuleManagerDelegate::initHybrid(
|
||||
jni::alias_ref<jhybridobject>) {
|
||||
return makeCxxInstance();
|
||||
}
|
||||
|
||||
void MainApplicationTurboModuleManagerDelegate::registerNatives() {
|
||||
registerHybrid({
|
||||
makeNativeMethod(
|
||||
"initHybrid", MainApplicationTurboModuleManagerDelegate::initHybrid),
|
||||
makeNativeMethod(
|
||||
"canCreateTurboModule",
|
||||
MainApplicationTurboModuleManagerDelegate::canCreateTurboModule),
|
||||
});
|
||||
}
|
||||
|
||||
std::shared_ptr<TurboModule>
|
||||
MainApplicationTurboModuleManagerDelegate::getTurboModule(
|
||||
const std::string &name,
|
||||
const std::shared_ptr<CallInvoker> &jsInvoker) {
|
||||
// Not implemented yet: provide pure-C++ NativeModules here.
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::shared_ptr<TurboModule>
|
||||
MainApplicationTurboModuleManagerDelegate::getTurboModule(
|
||||
const std::string &name,
|
||||
const JavaTurboModule::InitParams ¶ms) {
|
||||
return MainApplicationModuleProvider(name, params);
|
||||
}
|
||||
|
||||
bool MainApplicationTurboModuleManagerDelegate::canCreateTurboModule(
|
||||
const std::string &name) {
|
||||
return getTurboModule(name, nullptr) != nullptr ||
|
||||
getTurboModule(name, {.moduleName = name}) != nullptr;
|
||||
}
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
||||
@@ -0,0 +1,38 @@
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include <ReactCommon/TurboModuleManagerDelegate.h>
|
||||
#include <fbjni/fbjni.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
class MainApplicationTurboModuleManagerDelegate
|
||||
: public jni::HybridClass<
|
||||
MainApplicationTurboModuleManagerDelegate,
|
||||
TurboModuleManagerDelegate> {
|
||||
public:
|
||||
// Adapt it to the package you used for your Java class.
|
||||
static constexpr auto kJavaDescriptor =
|
||||
"Lcom/rndiffapp/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;";
|
||||
|
||||
static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject>);
|
||||
|
||||
static void registerNatives();
|
||||
|
||||
std::shared_ptr<TurboModule> getTurboModule(
|
||||
const std::string &name,
|
||||
const std::shared_ptr<CallInvoker> &jsInvoker) override;
|
||||
std::shared_ptr<TurboModule> getTurboModule(
|
||||
const std::string &name,
|
||||
const JavaTurboModule::InitParams ¶ms) override;
|
||||
|
||||
/**
|
||||
* Test-only method. Allows user to verify whether a TurboModule can be
|
||||
* created by instances of this class.
|
||||
*/
|
||||
bool canCreateTurboModule(const std::string &name);
|
||||
};
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
||||
65
android/app/src/main/jni/MainComponentsRegistry.cpp
Normal file
65
android/app/src/main/jni/MainComponentsRegistry.cpp
Normal file
@@ -0,0 +1,65 @@
|
||||
#include "MainComponentsRegistry.h"
|
||||
|
||||
#include <CoreComponentsRegistry.h>
|
||||
#include <fbjni/fbjni.h>
|
||||
#include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
|
||||
#include <react/renderer/components/rncore/ComponentDescriptors.h>
|
||||
#include <rncli.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
MainComponentsRegistry::MainComponentsRegistry(ComponentFactory *delegate) {}
|
||||
|
||||
std::shared_ptr<ComponentDescriptorProviderRegistry const>
|
||||
MainComponentsRegistry::sharedProviderRegistry() {
|
||||
auto providerRegistry = CoreComponentsRegistry::sharedProviderRegistry();
|
||||
|
||||
// Autolinked providers registered by RN CLI
|
||||
rncli_registerProviders(providerRegistry);
|
||||
|
||||
// Custom Fabric Components go here. You can register custom
|
||||
// components coming from your App or from 3rd party libraries here.
|
||||
//
|
||||
// providerRegistry->add(concreteComponentDescriptorProvider<
|
||||
// AocViewerComponentDescriptor>());
|
||||
return providerRegistry;
|
||||
}
|
||||
|
||||
jni::local_ref<MainComponentsRegistry::jhybriddata>
|
||||
MainComponentsRegistry::initHybrid(
|
||||
jni::alias_ref<jclass>,
|
||||
ComponentFactory *delegate) {
|
||||
auto instance = makeCxxInstance(delegate);
|
||||
|
||||
auto buildRegistryFunction =
|
||||
[](EventDispatcher::Weak const &eventDispatcher,
|
||||
ContextContainer::Shared const &contextContainer)
|
||||
-> ComponentDescriptorRegistry::Shared {
|
||||
auto registry = MainComponentsRegistry::sharedProviderRegistry()
|
||||
->createComponentDescriptorRegistry(
|
||||
{eventDispatcher, contextContainer});
|
||||
|
||||
auto mutableRegistry =
|
||||
std::const_pointer_cast<ComponentDescriptorRegistry>(registry);
|
||||
|
||||
mutableRegistry->setFallbackComponentDescriptor(
|
||||
std::make_shared<UnimplementedNativeViewComponentDescriptor>(
|
||||
ComponentDescriptorParameters{
|
||||
eventDispatcher, contextContainer, nullptr}));
|
||||
|
||||
return registry;
|
||||
};
|
||||
|
||||
delegate->buildRegistryFunction = buildRegistryFunction;
|
||||
return instance;
|
||||
}
|
||||
|
||||
void MainComponentsRegistry::registerNatives() {
|
||||
registerHybrid({
|
||||
makeNativeMethod("initHybrid", MainComponentsRegistry::initHybrid),
|
||||
});
|
||||
}
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
||||
@@ -2,11 +2,11 @@
|
||||
|
||||
buildscript {
|
||||
ext {
|
||||
buildToolsVersion = "30.0.2"
|
||||
buildToolsVersion = "31.0.0"
|
||||
minSdkVersion = 24
|
||||
compileSdkVersion = 30
|
||||
targetSdkVersion = 30
|
||||
supportLibVersion = "28.0.0"
|
||||
compileSdkVersion = 31
|
||||
targetSdkVersion = 31
|
||||
supportLibVersion = "31.0.0"
|
||||
kotlinVersion = "1.5.30"
|
||||
firebaseVersion = "21.0.0"
|
||||
RNNKotlinVersion = kotlinVersion
|
||||
|
||||
@@ -9,9 +9,8 @@
|
||||
|
||||
# Specifies the JVM arguments used for the daemon process.
|
||||
# The setting is particularly useful for tweaking memory settings.
|
||||
# Default value: -Xmx1024m -XX:MaxPermSize=256m
|
||||
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
|
||||
org.gradle.jvmargs=-Xmx2048M
|
||||
# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
|
||||
org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
|
||||
|
||||
# When configured, Gradle will run in incubating parallel mode.
|
||||
# This option should only be used with decoupled projects. More details, visit
|
||||
|
||||
BIN
android/gradle/wrapper/gradle-wrapper.jar
vendored
BIN
android/gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip
|
||||
|
||||
269
android/gradlew
vendored
269
android/gradlew
vendored
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env sh
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright 2015 the original author or authors.
|
||||
# Copyright © 2015-2021 the original authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
@@ -17,78 +17,113 @@
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
##
|
||||
#
|
||||
# Gradle start up script for POSIX generated by Gradle.
|
||||
#
|
||||
# Important for running:
|
||||
#
|
||||
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
|
||||
# noncompliant, but you have some other compliant shell such as ksh or
|
||||
# bash, then to run this script, type that shell name before the whole
|
||||
# command line, like:
|
||||
#
|
||||
# ksh Gradle
|
||||
#
|
||||
# Busybox and similar reduced shells will NOT work, because this script
|
||||
# requires all of these POSIX shell features:
|
||||
# * functions;
|
||||
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
|
||||
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
|
||||
# * compound commands having a testable exit status, especially «case»;
|
||||
# * various built-in commands including «command», «set», and «ulimit».
|
||||
#
|
||||
# Important for patching:
|
||||
#
|
||||
# (2) This script targets any POSIX shell, so it avoids extensions provided
|
||||
# by Bash, Ksh, etc; in particular arrays are avoided.
|
||||
#
|
||||
# The "traditional" practice of packing multiple parameters into a
|
||||
# space-separated string is a well documented source of bugs and security
|
||||
# problems, so this is (mostly) avoided, by progressively accumulating
|
||||
# options in "$@", and eventually passing that to Java.
|
||||
#
|
||||
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
|
||||
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
|
||||
# see the in-line comments for details.
|
||||
#
|
||||
# There are tweaks for specific operating systems such as AIX, CygWin,
|
||||
# Darwin, MinGW, and NonStop.
|
||||
#
|
||||
# (3) This script is generated from the Groovy template
|
||||
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||
# within the Gradle project.
|
||||
#
|
||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
# Need this for relative symlinks.
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG=`dirname "$PRG"`"/$link"
|
||||
fi
|
||||
app_path=$0
|
||||
|
||||
# Need this for daisy-chained symlinks.
|
||||
while
|
||||
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
|
||||
[ -h "$app_path" ]
|
||||
do
|
||||
ls=$( ls -ld "$app_path" )
|
||||
link=${ls#*' -> '}
|
||||
case $link in #(
|
||||
/*) app_path=$link ;; #(
|
||||
*) app_path=$APP_HOME$link ;;
|
||||
esac
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >/dev/null
|
||||
|
||||
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
APP_BASE_NAME=${0##*/}
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
MAX_FD=maximum
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
}
|
||||
} >&2
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
} >&2
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
NONSTOP* )
|
||||
nonstop=true
|
||||
;;
|
||||
case "$( uname )" in #(
|
||||
CYGWIN* ) cygwin=true ;; #(
|
||||
Darwin* ) darwin=true ;; #(
|
||||
MSYS* | MINGW* ) msys=true ;; #(
|
||||
NONSTOP* ) nonstop=true ;;
|
||||
esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
JAVACMD=$JAVA_HOME/jre/sh/java
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
JAVACMD=$JAVA_HOME/bin/java
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
@@ -97,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD="java"
|
||||
JAVACMD=java
|
||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
@@ -105,79 +140,95 @@ location of your Java installation."
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
MAX_FD="$MAX_FD_LIMIT"
|
||||
fi
|
||||
ulimit -n $MAX_FD
|
||||
if [ $? -ne 0 ] ; then
|
||||
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||
fi
|
||||
else
|
||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||
fi
|
||||
fi
|
||||
|
||||
# For Darwin, add options to specify how the application appears in the dock
|
||||
if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||
SEP=""
|
||||
for dir in $ROOTDIRSRAW ; do
|
||||
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||
SEP="|"
|
||||
done
|
||||
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||
# Add a user-defined pattern to the cygpath arguments
|
||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||
fi
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
i=0
|
||||
for arg in "$@" ; do
|
||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||
|
||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=`expr $i + 1`
|
||||
done
|
||||
case $i in
|
||||
0) set -- ;;
|
||||
1) set -- "$args0" ;;
|
||||
2) set -- "$args0" "$args1" ;;
|
||||
3) set -- "$args0" "$args1" "$args2" ;;
|
||||
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
||||
case $MAX_FD in #(
|
||||
max*)
|
||||
MAX_FD=$( ulimit -H -n ) ||
|
||||
warn "Could not query maximum file descriptor limit"
|
||||
esac
|
||||
case $MAX_FD in #(
|
||||
'' | soft) :;; #(
|
||||
*)
|
||||
ulimit -n "$MAX_FD" ||
|
||||
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
||||
esac
|
||||
fi
|
||||
|
||||
# Escape application args
|
||||
save () {
|
||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
}
|
||||
APP_ARGS=`save "$@"`
|
||||
# Collect all arguments for the java command, stacking in reverse order:
|
||||
# * args from the command line
|
||||
# * the main class name
|
||||
# * -classpath
|
||||
# * -D...appname settings
|
||||
# * --module-path (only if needed)
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
|
||||
|
||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if "$cygwin" || "$msys" ; then
|
||||
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
|
||||
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
|
||||
|
||||
JAVACMD=$( cygpath --unix "$JAVACMD" )
|
||||
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
for arg do
|
||||
if
|
||||
case $arg in #(
|
||||
-*) false ;; # don't mess with options #(
|
||||
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
|
||||
[ -e "$t" ] ;; #(
|
||||
*) false ;;
|
||||
esac
|
||||
then
|
||||
arg=$( cygpath --path --ignore --mixed "$arg" )
|
||||
fi
|
||||
# Roll the args list around exactly as many times as the number of
|
||||
# args, so each arg winds up back in the position where it started, but
|
||||
# possibly modified.
|
||||
#
|
||||
# NB: a `for` loop captures its iteration list before it begins, so
|
||||
# changing the positional parameters here affects neither the number of
|
||||
# iterations, nor the values presented in `arg`.
|
||||
shift # remove old arg
|
||||
set -- "$@" "$arg" # push replacement arg
|
||||
done
|
||||
fi
|
||||
|
||||
# Collect all arguments for the java command;
|
||||
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
|
||||
# shell script including quotes and variable substitutions, so put them in
|
||||
# double quotes to make sure that they get re-expanded; and
|
||||
# * put everything else in single quotes, so that it's not re-expanded.
|
||||
|
||||
set -- \
|
||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||
-classpath "$CLASSPATH" \
|
||||
org.gradle.wrapper.GradleWrapperMain \
|
||||
"$@"
|
||||
|
||||
# Use "xargs" to parse quoted args.
|
||||
#
|
||||
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
|
||||
#
|
||||
# In Bash we could simply go:
|
||||
#
|
||||
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
|
||||
# set -- "${ARGS[@]}" "$@"
|
||||
#
|
||||
# but POSIX shell has neither arrays nor command substitution, so instead we
|
||||
# post-process each arg (as a line of input to sed) to backslash-escape any
|
||||
# character that might be a shell metacharacter, then use eval to reverse
|
||||
# that process (while maintaining the separation between arguments), and wrap
|
||||
# the whole thing up as a single "set" statement.
|
||||
#
|
||||
# This will of course break if any of these variables contains a newline or
|
||||
# an unmatched quote.
|
||||
#
|
||||
|
||||
eval "set -- $(
|
||||
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
|
||||
xargs -n1 |
|
||||
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
|
||||
tr '\n' ' '
|
||||
)" '"$@"'
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
@@ -119,12 +119,7 @@ const ClientChannels = (superclass: any) => class extends superclass {
|
||||
};
|
||||
|
||||
convertChannelToPrivate = async (channelId: string) => {
|
||||
analytics.trackAPI('api_channels_convert_to_private', {channel_id: channelId});
|
||||
|
||||
return this.doFetch(
|
||||
`${this.getChannelRoute(channelId)}/convert`,
|
||||
{method: 'post'},
|
||||
);
|
||||
return this.updateChannelPrivacy(channelId, 'P');
|
||||
};
|
||||
|
||||
updateChannelPrivacy = async (channelId: string, privacy: any) => {
|
||||
|
||||
@@ -32,12 +32,13 @@ type Props = {
|
||||
placeholder?: string;
|
||||
dataSource?: string;
|
||||
options?: DialogOption[];
|
||||
selected?: DialogOption | DialogOption[];
|
||||
selected?: DialogOption | DialogOption[] | null;
|
||||
optional?: boolean;
|
||||
showRequiredAsterisk?: boolean;
|
||||
teammateNameDisplay?: string;
|
||||
theme: Theme;
|
||||
onSelected?: ((item: DialogOption) => void) | ((item: DialogOption[]) => void);
|
||||
onClear?: () => void;
|
||||
helpText?: string;
|
||||
errorText?: string;
|
||||
roundedBorders?: boolean;
|
||||
@@ -47,7 +48,7 @@ type Props = {
|
||||
|
||||
type State = {
|
||||
selectedText: string;
|
||||
selected?: DialogOption | DialogOption[];
|
||||
selected?: DialogOption | DialogOption[] | null;
|
||||
}
|
||||
|
||||
export default class AutocompleteSelector extends PureComponent<Props, State> {
|
||||
@@ -70,7 +71,15 @@ export default class AutocompleteSelector extends PureComponent<Props, State> {
|
||||
}
|
||||
|
||||
static getDerivedStateFromProps(props: Props, state: State) {
|
||||
if (!props.selected || props.selected === state.selected) {
|
||||
if (props.selected === state.selected) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!props.selected) {
|
||||
if (state.selected) {
|
||||
return {selected: props.selected};
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -99,6 +108,11 @@ export default class AutocompleteSelector extends PureComponent<Props, State> {
|
||||
};
|
||||
}
|
||||
|
||||
handleClear = () => {
|
||||
this.setState({selectedText: ''});
|
||||
this.props.onClear?.();
|
||||
};
|
||||
|
||||
handleSelect = (selected: Selection) => {
|
||||
if (!selected) {
|
||||
return;
|
||||
@@ -230,14 +244,14 @@ export default class AutocompleteSelector extends PureComponent<Props, State> {
|
||||
showRequiredAsterisk,
|
||||
roundedBorders,
|
||||
disabled,
|
||||
selected,
|
||||
onClear,
|
||||
} = this.props;
|
||||
const {selectedText} = this.state;
|
||||
const style = getStyleSheet(theme);
|
||||
const textStyles = getMarkdownTextStyles(theme);
|
||||
const blockStyles = getMarkdownBlockStyles(theme);
|
||||
|
||||
const chevron = Platform.select({ios: 'chevron-right', default: 'chevron-down'});
|
||||
|
||||
let text = placeholder || intl.formatMessage({id: 'mobile.action_menu.select', defaultMessage: 'Select an option'});
|
||||
let selectedStyle = style.dropdownPlaceholder;
|
||||
|
||||
@@ -326,11 +340,21 @@ export default class AutocompleteSelector extends PureComponent<Props, State> {
|
||||
>
|
||||
{text}
|
||||
</Text>
|
||||
<CompassIcon
|
||||
name={chevron}
|
||||
color={changeOpacity(theme.centerChannelColor, 0.32)}
|
||||
style={style.icon}
|
||||
/>
|
||||
{!disabled && onClear && selected && (
|
||||
<TouchableWithFeedback
|
||||
type={'opacity'}
|
||||
onPress={this.handleClear}
|
||||
disabled={disabled}
|
||||
style={style.clearx}
|
||||
hitSlop={clearXHitSlop}
|
||||
>
|
||||
<CompassIcon
|
||||
name='close-circle'
|
||||
color={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
size={20}
|
||||
/>
|
||||
</TouchableWithFeedback>
|
||||
)}
|
||||
</View>
|
||||
</TouchableWithFeedback>
|
||||
{helpTextContent}
|
||||
@@ -366,18 +390,21 @@ const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => {
|
||||
dropdownPlaceholder: {
|
||||
top: 3,
|
||||
marginLeft: 5,
|
||||
paddingRight: 55,
|
||||
color: changeOpacity(theme.centerChannelColor, 0.5),
|
||||
},
|
||||
dropdownSelected: {
|
||||
top: 3,
|
||||
marginLeft: 5,
|
||||
paddingRight: 55,
|
||||
color: theme.centerChannelColor,
|
||||
},
|
||||
icon: {
|
||||
clearx: {
|
||||
position: 'absolute',
|
||||
top: 6,
|
||||
right: 12,
|
||||
fontSize: 28,
|
||||
top: 1,
|
||||
right: 5,
|
||||
padding: 8,
|
||||
marginRight: 7,
|
||||
},
|
||||
labelContainer: {
|
||||
flexDirection: 'row',
|
||||
@@ -419,3 +446,10 @@ const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => {
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
const clearXHitSlop = {
|
||||
left: 30,
|
||||
right: 20,
|
||||
top: 20,
|
||||
bottom: 20,
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
import React from 'react';
|
||||
import React, {useCallback} from 'react';
|
||||
|
||||
import AutocompleteSelector from '@components/autocomplete_selector';
|
||||
import {PostActionOption} from '@mm-redux/types/integration_actions';
|
||||
@@ -28,13 +28,13 @@ const ActionMenu = ({dataSource, defaultOption, disabled, id, name, options, pos
|
||||
isSelected = selected;
|
||||
}
|
||||
|
||||
const handleSelect = (selectedItem?: PostActionOption) => {
|
||||
const handleSelect = useCallback((selectedItem?: PostActionOption) => {
|
||||
if (!selectedItem) {
|
||||
return;
|
||||
}
|
||||
|
||||
selectAttachmentMenuAction(postId, id, selectedItem.text, selectedItem.value);
|
||||
};
|
||||
}, [postId, id]);
|
||||
|
||||
return (
|
||||
<AutocompleteSelector
|
||||
|
||||
@@ -140,18 +140,16 @@ export function componentDidDisappearListener({componentId}) {
|
||||
|
||||
if (componentId === 'MainSidebar') {
|
||||
EventEmitter.emit(NavigationTypes.MAIN_SIDEBAR_DID_CLOSE);
|
||||
}
|
||||
|
||||
if (componentId === THREAD) {
|
||||
if (EphemeralStore.hasModalsOpened()) {
|
||||
for (const modal of EphemeralStore.navigationModalStack) {
|
||||
const enableSwipe = {
|
||||
modal: {
|
||||
swipeToDismiss: true,
|
||||
},
|
||||
};
|
||||
Navigation.mergeOptions(modal, enableSwipe);
|
||||
}
|
||||
} else if (componentId === 'SettingsSidebar') {
|
||||
EventEmitter.emit(NavigationTypes.CLOSE_SETTINGS_SIDEBAR);
|
||||
} else if (componentId === THREAD && EphemeralStore.hasModalsOpened()) {
|
||||
for (const modal of EphemeralStore.navigationModalStack) {
|
||||
const enableSwipe = {
|
||||
modal: {
|
||||
swipeToDismiss: true,
|
||||
},
|
||||
};
|
||||
Navigation.mergeOptions(modal, enableSwipe);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -277,7 +277,7 @@ describe('Actions.Channels', () => {
|
||||
it('convertChannelToPrivate', async () => {
|
||||
const publicChannel = TestHelper.basicChannel;
|
||||
nock(Client4.getChannelRoute(publicChannel.id)).
|
||||
post('/convert').
|
||||
put('/privacy').
|
||||
reply(200, {...TestHelper.basicChannel, type: General.PRIVATE_CHANNEL});
|
||||
|
||||
assert.equal(TestHelper.basicChannel.type, General.OPEN_CHANNEL);
|
||||
|
||||
@@ -150,7 +150,7 @@ export type AppForm = {
|
||||
depends_on?: string[];
|
||||
};
|
||||
|
||||
export type AppFormValue = string | AppSelectOption | boolean | null;
|
||||
export type AppFormValue = string | AppSelectOption | AppSelectOption[] | boolean | null;
|
||||
export type AppFormValues = {[name: string]: AppFormValue};
|
||||
|
||||
export type AppSelectOption = {
|
||||
|
||||
@@ -59,6 +59,13 @@ const ClientCalls = (superclass: any) => class extends superclass {
|
||||
{method: 'post'},
|
||||
);
|
||||
};
|
||||
|
||||
genTURNCredentials = async () => {
|
||||
return this.doFetch(
|
||||
`${this.getCallsRoute()}/turn-credentials`,
|
||||
{method: 'get'},
|
||||
);
|
||||
};
|
||||
};
|
||||
|
||||
export default ClientCalls;
|
||||
|
||||
@@ -17,7 +17,7 @@ import {WebsocketEvents} from '@constants';
|
||||
import {ICEServersConfigs} from '@mmproducts/calls/store/types/calls';
|
||||
|
||||
import Peer from './simple-peer';
|
||||
import WebSocketClient from './websocket';
|
||||
import {WebSocketClient, wsReconnectionTimeoutErr} from './websocket';
|
||||
|
||||
export let client: any = null;
|
||||
|
||||
@@ -47,10 +47,14 @@ export async function newClient(channelID: string, iceServers: ICEServersConfigs
|
||||
const ws = new WebSocketClient(Client4.getWebSocketUrl(), Client4.getToken());
|
||||
|
||||
const disconnect = () => {
|
||||
if (!isClosed) {
|
||||
ws.close();
|
||||
if (isClosed) {
|
||||
return;
|
||||
}
|
||||
|
||||
isClosed = true;
|
||||
ws.send('leave');
|
||||
ws.close();
|
||||
|
||||
if (onCallEnd) {
|
||||
onCallEnd.remove();
|
||||
onCallEnd = null;
|
||||
@@ -81,12 +85,19 @@ export async function newClient(channelID: string, iceServers: ICEServersConfigs
|
||||
});
|
||||
|
||||
const mute = () => {
|
||||
if (!peer) {
|
||||
if (!peer || peer.destroyed) {
|
||||
return;
|
||||
}
|
||||
if (voiceTrackAdded && voiceTrack) {
|
||||
peer.replaceTrack(voiceTrack, null, stream);
|
||||
|
||||
try {
|
||||
if (voiceTrackAdded && voiceTrack) {
|
||||
peer.replaceTrack(voiceTrack, null, stream);
|
||||
}
|
||||
} catch (e) {
|
||||
console.log('Error from simple-peer:', e); //eslint-disable-line no-console
|
||||
return;
|
||||
}
|
||||
|
||||
if (voiceTrack) {
|
||||
voiceTrack.enabled = false;
|
||||
}
|
||||
@@ -96,15 +107,22 @@ export async function newClient(channelID: string, iceServers: ICEServersConfigs
|
||||
};
|
||||
|
||||
const unmute = () => {
|
||||
if (!peer || !voiceTrack) {
|
||||
if (!peer || !voiceTrack || peer.destroyed) {
|
||||
return;
|
||||
}
|
||||
if (voiceTrackAdded) {
|
||||
peer.replaceTrack(voiceTrack, voiceTrack, stream);
|
||||
} else {
|
||||
peer.addStream(stream);
|
||||
voiceTrackAdded = true;
|
||||
|
||||
try {
|
||||
if (voiceTrackAdded) {
|
||||
peer.replaceTrack(voiceTrack, voiceTrack, stream);
|
||||
} else {
|
||||
peer.addStream(stream);
|
||||
voiceTrackAdded = true;
|
||||
}
|
||||
} catch (e) {
|
||||
console.log('Error from simple-peer:', e); //eslint-disable-line no-console
|
||||
return;
|
||||
}
|
||||
|
||||
voiceTrack.enabled = true;
|
||||
if (ws) {
|
||||
ws.send('unmute');
|
||||
@@ -124,13 +142,14 @@ export async function newClient(channelID: string, iceServers: ICEServersConfigs
|
||||
};
|
||||
|
||||
ws.on('error', (err) => {
|
||||
console.log('WS (CALLS) ERROR', err); // eslint-disable-line no-console
|
||||
ws.close();
|
||||
console.log('calls: ws error', err); // eslint-disable-line no-console
|
||||
if (err === wsReconnectionTimeoutErr) {
|
||||
disconnect();
|
||||
}
|
||||
});
|
||||
|
||||
ws.on('close', () => {
|
||||
isClosed = true;
|
||||
disconnect();
|
||||
console.log('calls: ws close'); // eslint-disable-line no-console
|
||||
});
|
||||
|
||||
ws.on('join', async () => {
|
||||
@@ -156,19 +175,35 @@ export async function newClient(channelID: string, iceServers: ICEServersConfigs
|
||||
});
|
||||
|
||||
peer.on('error', (err: any) => {
|
||||
console.log('PEER ERROR', err); // eslint-disable-line no-console
|
||||
console.log('calls: peer error', err); // eslint-disable-line no-console
|
||||
});
|
||||
|
||||
peer.on('close', () => {
|
||||
console.log('calls: peer closed'); // eslint-disable-line no-console
|
||||
if (!isClosed) {
|
||||
disconnect();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
ws.on('open', async () => {
|
||||
ws.send('join', {
|
||||
channelID,
|
||||
});
|
||||
ws.on('open', (originalConnID: string, prevConnID: string, isReconnect: boolean) => {
|
||||
if (isReconnect) {
|
||||
console.log('calls: ws reconnect, sending reconnect msg'); // eslint-disable-line no-console
|
||||
ws.send('reconnect', {
|
||||
channelID,
|
||||
originalConnID,
|
||||
prevConnID,
|
||||
});
|
||||
} else {
|
||||
ws.send('join', {
|
||||
channelID,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
ws.on('message', ({data}) => {
|
||||
const msg = JSON.parse(data);
|
||||
if (msg.type === 'answer' || msg.type === 'offer') {
|
||||
if (msg.type === 'answer' || msg.type === 'candidate' || msg.type === 'offer') {
|
||||
peer?.signal(data);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -202,7 +202,13 @@ export function joinCall(channelId: string, intl: typeof intlShape): ActionFunc
|
||||
dispatch(setSpeakerphoneOn(false));
|
||||
|
||||
try {
|
||||
ws = await newClient(channelId, getICEServersConfigs(getState()), () => {
|
||||
const state = getState();
|
||||
const iceConfigs = [...getICEServersConfigs(state)];
|
||||
if (getConfig(state).NeedsTURNCredentials) {
|
||||
iceConfigs.push(...await Client4.genTURNCredentials());
|
||||
}
|
||||
|
||||
ws = await newClient(channelId, iceConfigs, () => {
|
||||
dispatch(setSpeakerphoneOn(false));
|
||||
dispatch({type: CallsTypes.RECEIVED_MYSELF_LEFT_CALL});
|
||||
}, setScreenShareURL);
|
||||
|
||||
@@ -66,6 +66,7 @@ export type ServerConfig = {
|
||||
AllowEnableCalls: boolean;
|
||||
DefaultEnabled: boolean;
|
||||
MaxCallParticipants: number;
|
||||
NeedsTURNCredentials: boolean;
|
||||
sku_short_name: string;
|
||||
last_retrieved_at: number;
|
||||
}
|
||||
@@ -76,8 +77,9 @@ export const DefaultServerConfig = {
|
||||
AllowEnableCalls: false,
|
||||
DefaultEnabled: false,
|
||||
MaxCallParticipants: 0,
|
||||
NeedsTURNCredentials: false,
|
||||
sku_short_name: '',
|
||||
last_retrieved_at: 0,
|
||||
} as ServerConfig;
|
||||
|
||||
export type ICEServersConfigs = ConfigurationParamWithUrls[] | ConfigurationParamWithUrl[];
|
||||
export type ICEServersConfigs = Array<ConfigurationParamWithUrls | ConfigurationParamWithUrl>;
|
||||
|
||||
@@ -5,26 +5,55 @@ import {EventEmitter} from 'events';
|
||||
import Calls from '@constants/calls';
|
||||
import {encode} from '@msgpack/msgpack/dist';
|
||||
|
||||
export default class WebSocketClient extends EventEmitter {
|
||||
private ws: WebSocket | null;
|
||||
const wsMinReconnectRetryTimeMs = 1000; // 1 second
|
||||
const wsReconnectionTimeout = 30000; // 30 seconds
|
||||
const wsReconnectTimeIncrement = 500; // 0.5 seconds
|
||||
export const wsReconnectionTimeoutErr = new Error('max disconnected time reached');
|
||||
|
||||
export class WebSocketClient extends EventEmitter {
|
||||
private ws: WebSocket | null = null;
|
||||
private wsURL: string;
|
||||
private authToken: string;
|
||||
private seqNo = 1;
|
||||
private serverSeqNo = 0;
|
||||
private connID = '';
|
||||
private originalConnID = '';
|
||||
private eventPrefix = `custom_${Calls.PluginId}`;
|
||||
private lastDisconnect = 0;
|
||||
private reconnectRetryTime = wsMinReconnectRetryTimeMs;
|
||||
private closed = false;
|
||||
|
||||
constructor(connURL: string, authToken: string) {
|
||||
constructor(wsURL: string, authToken: string) {
|
||||
super();
|
||||
this.wsURL = wsURL;
|
||||
this.authToken = authToken;
|
||||
this.init(false);
|
||||
}
|
||||
|
||||
this.ws = new WebSocket(connURL, [], {headers: {authorization: `Bearer ${authToken}`}});
|
||||
private init(isReconnect: boolean) {
|
||||
if (this.closed) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.ws = new WebSocket(`${this.wsURL}?connection_id=${this.connID}&sequence_number=${this.serverSeqNo}`, [], {headers: {authorization: `Bearer ${this.authToken}`}});
|
||||
|
||||
if (isReconnect) {
|
||||
this.ws.onopen = () => {
|
||||
this.lastDisconnect = 0;
|
||||
this.reconnectRetryTime = wsMinReconnectRetryTimeMs;
|
||||
this.emit('open', this.originalConnID, this.connID, true);
|
||||
};
|
||||
}
|
||||
|
||||
this.ws.onerror = (err) => {
|
||||
this.emit('error', err);
|
||||
this.ws = null;
|
||||
this.close();
|
||||
};
|
||||
|
||||
this.ws.onclose = () => {
|
||||
this.ws = null;
|
||||
this.close();
|
||||
if (!this.closed) {
|
||||
this.close();
|
||||
}
|
||||
};
|
||||
|
||||
this.ws.onmessage = ({data}) => {
|
||||
@@ -35,7 +64,12 @@ export default class WebSocketClient extends EventEmitter {
|
||||
try {
|
||||
msg = JSON.parse(data);
|
||||
} catch (err) {
|
||||
console.log(err); // eslint-disable-line no-console
|
||||
console.log('calls: ws msg parse error', err); // eslint-disable-line no-console
|
||||
return;
|
||||
}
|
||||
|
||||
if (msg) {
|
||||
this.serverSeqNo = msg.seq + 1;
|
||||
}
|
||||
|
||||
if (!msg || !msg.event || !msg.data) {
|
||||
@@ -43,14 +77,22 @@ export default class WebSocketClient extends EventEmitter {
|
||||
}
|
||||
|
||||
if (msg.event === 'hello') {
|
||||
this.connID = msg.data.connection_id;
|
||||
this.emit('open');
|
||||
if (msg.data.connection_id !== this.connID) {
|
||||
this.connID = msg.data.connection_id;
|
||||
this.serverSeqNo = 0;
|
||||
if (this.originalConnID === '') {
|
||||
this.originalConnID = this.connID;
|
||||
}
|
||||
}
|
||||
if (!isReconnect) {
|
||||
this.emit('open', this.originalConnID, this.connID, false);
|
||||
}
|
||||
return;
|
||||
} else if (!this.connID) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (msg.data.connID !== this.connID) {
|
||||
if (msg.data.connID !== this.connID && msg.data.connID !== this.originalConnID) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -74,7 +116,6 @@ export default class WebSocketClient extends EventEmitter {
|
||||
seq: this.seqNo++,
|
||||
data,
|
||||
};
|
||||
|
||||
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
|
||||
if (binary) {
|
||||
this.ws.send(encode(msg));
|
||||
@@ -86,12 +127,35 @@ export default class WebSocketClient extends EventEmitter {
|
||||
|
||||
close() {
|
||||
if (this.ws) {
|
||||
this.closed = true;
|
||||
this.ws.close();
|
||||
this.ws = null;
|
||||
this.seqNo = 1;
|
||||
this.serverSeqNo = 0;
|
||||
this.connID = '';
|
||||
this.originalConnID = '';
|
||||
} else {
|
||||
this.emit('close');
|
||||
|
||||
const now = Date.now();
|
||||
if (this.lastDisconnect === 0) {
|
||||
this.lastDisconnect = now;
|
||||
}
|
||||
|
||||
if ((now - this.lastDisconnect) >= wsReconnectionTimeout) {
|
||||
this.closed = true;
|
||||
this.emit('error', wsReconnectionTimeoutErr);
|
||||
return;
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
if (!this.ws && !this.closed) {
|
||||
this.init(true);
|
||||
}
|
||||
}, this.reconnectRetryTime);
|
||||
|
||||
this.reconnectRetryTime += wsReconnectTimeIncrement;
|
||||
}
|
||||
this.seqNo = 1;
|
||||
this.connID = '';
|
||||
this.emit('close');
|
||||
}
|
||||
|
||||
state() {
|
||||
|
||||
@@ -26,12 +26,12 @@ export type Props = {
|
||||
theme: Theme;
|
||||
|
||||
value: AppFormValue;
|
||||
onChange: (name: string, value: string | AppSelectOption | AppSelectOption[] | boolean) => void;
|
||||
onChange: (name: string, value: AppFormValue) => void;
|
||||
performLookup: (name: string, userInput: string) => Promise<AppSelectOption[]>;
|
||||
}
|
||||
|
||||
type State = {
|
||||
selected?: DialogOption | DialogOption[];
|
||||
selected?: DialogOption | DialogOption[] | null;
|
||||
}
|
||||
|
||||
const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => {
|
||||
@@ -52,7 +52,34 @@ export default class AppsFormField extends React.PureComponent<Props, State> {
|
||||
constructor(props: Props) {
|
||||
super(props);
|
||||
|
||||
this.state = {};
|
||||
let selected;
|
||||
switch (props.field.type) {
|
||||
case AppFieldTypes.STATIC_SELECT:
|
||||
case AppFieldTypes.DYNAMIC_SELECT:
|
||||
case AppFieldTypes.USER:
|
||||
case AppFieldTypes.CHANNEL: {
|
||||
const value = props.value as AppSelectOption[] | AppSelectOption | null;
|
||||
if (value) {
|
||||
if (Array.isArray(value)) {
|
||||
selected = value.map((option) => {
|
||||
return {
|
||||
text: option.label,
|
||||
value: option.value,
|
||||
};
|
||||
});
|
||||
} else {
|
||||
selected = {
|
||||
text: value.label,
|
||||
value: value.value,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.state = {
|
||||
selected,
|
||||
};
|
||||
}
|
||||
|
||||
handleAutocompleteSelect = (selected: DialogOption) => {
|
||||
@@ -73,6 +100,15 @@ export default class AppsFormField extends React.PureComponent<Props, State> {
|
||||
this.props.onChange(field.name, selectedOption);
|
||||
};
|
||||
|
||||
handleClear = () => {
|
||||
const {field, onChange} = this.props;
|
||||
|
||||
const selected = null;
|
||||
|
||||
this.setState({selected});
|
||||
onChange(field.name, selected);
|
||||
};
|
||||
|
||||
handleMultioptionAutocompleteSelect = (selected: DialogOption[]) => {
|
||||
if (!selected) {
|
||||
return;
|
||||
@@ -210,6 +246,7 @@ export default class AppsFormField extends React.PureComponent<Props, State> {
|
||||
dataSource={dataSource}
|
||||
options={options}
|
||||
optional={!field.is_required}
|
||||
onClear={this.handleClear}
|
||||
onSelected={field.multiselect ? this.handleMultioptionAutocompleteSelect : this.handleAutocompleteSelect}
|
||||
getDynamicOptions={this.getDynamicOptions}
|
||||
helpText={field.description}
|
||||
|
||||
@@ -54,6 +54,13 @@ export default class DialogElement extends PureComponent {
|
||||
onChange(name, newValue);
|
||||
};
|
||||
|
||||
handleClear = () => {
|
||||
const {name, onChange} = this.props;
|
||||
|
||||
this.setState({selected: null});
|
||||
onChange(name, null);
|
||||
};
|
||||
|
||||
handleAutocompleteSelect = (selected) => {
|
||||
if (!selected) {
|
||||
return;
|
||||
@@ -134,6 +141,7 @@ export default class DialogElement extends PureComponent {
|
||||
options={options}
|
||||
optional={optional}
|
||||
onSelected={this.handleAutocompleteSelect}
|
||||
onClear={this.handleClear}
|
||||
helpText={helpText}
|
||||
errorText={errorText}
|
||||
placeholder={placeholder}
|
||||
|
||||
@@ -41,7 +41,7 @@ class EphemeralStore {
|
||||
|
||||
addToNavigationComponentIdStack = (componentId) => {
|
||||
const index = this.navigationComponentIdStack.indexOf(componentId);
|
||||
if (index > 0) {
|
||||
if (index >= 0) {
|
||||
this.navigationComponentIdStack.slice(index, 1);
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
import {Linking} from 'react-native';
|
||||
|
||||
import TestHelper from '@test/test_helper';
|
||||
import * as UrlUtils from '@utils/url';
|
||||
|
||||
/* eslint-disable max-nested-callbacks */
|
||||
@@ -152,7 +153,8 @@ describe('UrlUtils', () => {
|
||||
const onError = jest.fn();
|
||||
const onSuccess = jest.fn();
|
||||
|
||||
await UrlUtils.tryOpenURL(url, onError, onSuccess);
|
||||
UrlUtils.tryOpenURL(url, onError, onSuccess);
|
||||
await TestHelper.wait(200);
|
||||
expect(onError).toHaveBeenCalledTimes(1);
|
||||
expect(onSuccess).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
"channel_modal.headerHelp": "Der Text, der in der Kopfzeile des Kanals neben dem Namen steht. Zum Beispiel könntest Du häufig genutzte Links durch Hinzufügen von [Link Titel](http://example.de) anzeigen lassen.",
|
||||
"channel_modal.name": "Name",
|
||||
"channel_modal.nameEx": "Z.B.: \"Bugs\", \"Marketing\", \"客户支持\"",
|
||||
"channel_modal.optional": "(wahlweise)",
|
||||
"channel_modal.optional": "(optional)",
|
||||
"channel_modal.purpose": "Zweck",
|
||||
"channel_modal.purposeEx": "Z.B.: \"Ein Kanal um Fehler und Verbesserungsvorschläge abzulegen\"",
|
||||
"channel_modal.type.private": "Privater Kanal",
|
||||
@@ -115,7 +115,7 @@
|
||||
"combined_system_message.added_to_channel.two": "{firstUser} und {secondUser} wurden durch {actor} **zum Kanal hinzugefügt**.",
|
||||
"combined_system_message.added_to_team.many_expanded": "{users} und {lastUser} wurden durch {actor} **zum Team hinzugefügt**.",
|
||||
"combined_system_message.added_to_team.one": "{firstUser} wurde durch {actor} **zum Team hinzugefügt**.",
|
||||
"combined_system_message.added_to_team.one_you": "Du wurden durch {actor} **zum Team hinzugefügt**.",
|
||||
"combined_system_message.added_to_team.one_you": "Du wurdest durch {actor} **zum Team hinzugefügt**.",
|
||||
"combined_system_message.added_to_team.two": "{firstUser} und {secondUser} wurden durch {actor} **zum Team hinzugefügt**.",
|
||||
"combined_system_message.joined_channel.many_expanded": "{users} und {lastUser} **sind dem Kanal beigetreten**.",
|
||||
"combined_system_message.joined_channel.one": "{firstUser} **ist dem Kanal beigetreten**.",
|
||||
@@ -683,11 +683,11 @@
|
||||
"permalink.show_dialog_warn.description": "Du bist dabei, \"{channel}\" beizutreten ohne explizit durch den Kanaladministrator hinzugefügt worden zu sein. Bist Du sicher, dass du diesem privaten Kanal beitreten willst?",
|
||||
"permalink.show_dialog_warn.join": "Beitreten",
|
||||
"permalink.show_dialog_warn.title": "Privatem Kanal beitreten",
|
||||
"post_body.check_for_out_of_channel_groups_mentions.message": "wurde durch diese Erwähnung nicht benachrichtigt, da sich der Benutzer nicht im Kanal befindet. Er kann dem Kanal nicht hinzugefügt werden, da er nicht Mitglied der verknüpften Gruppen ist. Um ihn zu diesem Kanal hinzuzufügen, muss er zu den verknüpften Gruppen hinzugefügt werden.",
|
||||
"post_body.check_for_out_of_channel_groups_mentions.message": "wurde durch diese Erwähnung nicht benachrichtigt, da sie sich nicht im Kanal befinden. Sie sind auch keine Mitglieder der mit diesem Kanal verknüpften Gruppen.",
|
||||
"post_body.check_for_out_of_channel_mentions.link.and": " und ",
|
||||
"post_body.check_for_out_of_channel_mentions.link.private": "sie zu diesem privaten Kanal hinzufügen",
|
||||
"post_body.check_for_out_of_channel_mentions.link.public": "sie zu diesem Kanal hinzufügen",
|
||||
"post_body.check_for_out_of_channel_mentions.message.multiple": "wurde durch diese Erwähnung nicht benachrichtigt, da der Benutzer sich nicht im Kanal befindet. Möchtest Du ",
|
||||
"post_body.check_for_out_of_channel_mentions.link.public": "ihn/sie zu diesem Kanal hinzufügen",
|
||||
"post_body.check_for_out_of_channel_mentions.message.multiple": "wurden erwähnt, sind aber nicht im Kanal. Möchtest Du ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.one": "wurde durch diese Erwähnung nicht benachrichtigt, da der Benutzer sich nicht im Kanal befindet. Möchtest Du ",
|
||||
"post_body.check_for_out_of_channel_mentions.message_last": "? Sie werden Zugriff auf den Nachrichtenverlauf haben.",
|
||||
"post_body.commentedOn": "Kommentierte auf {name}{apostrophe} Nachricht: ",
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
"apps.error.form.no_lookup": "No se ha definido el término \"búsqueda\".",
|
||||
"apps.error.form.no_source": "La \"fuente\" no está definida.",
|
||||
"apps.error.form.no_submit": "`enviar` no está definido",
|
||||
"apps.error.form.refresh": "Se ha producido un error en la obtención de los campos seleccionados. Póngase en contacto con el desarrollador de la aplicación. Detalles: {detalles}",
|
||||
"apps.error.form.refresh": "Se ha producido un error en la obtención de los campos seleccionados. Póngase en contacto con el desarrollador de la aplicación. Detalles: {details}",
|
||||
"apps.error.form.refresh_no_refresh": "Llamada de refresco en un campo no refrescado.",
|
||||
"apps.error.form.submit.pretext": "Se ha producido un error al enviar el modal. Póngase en contacto con el desarrollador de la aplicación. Detalles: {details}",
|
||||
"apps.error.lookup.error_preparing_request": "Error al preparar la solicitud de búsqueda: {errorMessage}",
|
||||
@@ -276,7 +276,7 @@
|
||||
"mobile.alert_dialog.alertCancel": "Cancelar",
|
||||
"mobile.android.back_handler_exit": "Presione de nuevo para salir",
|
||||
"mobile.android.photos_permission_denied_description": "Para cargar imágenes desde tu biblioteca, por favor, cambia la configuración de permisos.",
|
||||
"mobile.android.photos_permission_denied_title": "Acceso a la biblioteca de fotos es necesario",
|
||||
"mobile.android.photos_permission_denied_title": "{applicationName} desea acceder a tus fotos",
|
||||
"mobile.android.videos_permission_denied_description": "Para subir los vídeos de tu biblioteca, por favor, cambia la configuración de permisos.",
|
||||
"mobile.android.videos_permission_denied_title": "Acceso a la biblioteca de vídeos es necesario",
|
||||
"mobile.announcement_banner.title": "Anuncio",
|
||||
@@ -388,7 +388,7 @@
|
||||
"mobile.intro_messages.default_message": "Es es el primer canal que tus compañeros ven cuando se registran - puedes utilizarlo para enviar mensajes que todos deben leer.",
|
||||
"mobile.intro_messages.default_welcome": "¡Bienvenido a {name}!",
|
||||
"mobile.ios.photos_permission_denied_description": "Para guardar imágenes y vídeos en tu librería, por favor, cambia la configuración de permisos.",
|
||||
"mobile.ios.photos_permission_denied_title": "Acceso a la biblioteca de fotos es necesario",
|
||||
"mobile.ios.photos_permission_denied_title": "{applicationName} desea acceder a tu librería de fotos",
|
||||
"mobile.join_channel.error": "No pudimos unirnos al canal {displayName}. Por favor revisa tu conexión e intenta de nuevo.",
|
||||
"mobile.link.error.text": "No se pudo abrir el enlace.",
|
||||
"mobile.link.error.title": "Error",
|
||||
@@ -510,10 +510,10 @@
|
||||
"mobile.post_textbox.entire_channel.cancel": "Cancelar",
|
||||
"mobile.post_textbox.entire_channel.confirm": "Confirmar",
|
||||
"mobile.post_textbox.entire_channel.message": "Al utilizar @all ó @channel estás a punto de enviar notificaciones a {totalMembers, number} {totalMembers, plural, one {persona} other {personas}}. ¿Estás seguro de querer hacer esto?",
|
||||
"mobile.post_textbox.entire_channel.message.with_timezones": "Al utilizar @all ó @channel estás a punto de enviar notificaciones a {totalMembers, number} {totalMembers, plural, one {persona} other {personas}} en {timezones, number} {zonas horarias, plural, one {zona horaria} other {zonas horarias}}. ¿Estás seguro de querer hacer esto?",
|
||||
"mobile.post_textbox.entire_channel.message.with_timezones": "Al utilizar @all ó @channel estás a punto de enviar notificaciones a {totalMembers, number} {totalMembers, plural, one {persona} other {personas}} en {timezones, number} {timezones, plural, one {zona horaria} other {zonas horarias}}. ¿Estás seguro de querer hacer esto?",
|
||||
"mobile.post_textbox.entire_channel.title": "Confirma el envío de notificaciones a todo el canal",
|
||||
"mobile.post_textbox.entire_channel_here.message": "Al utilizar @here estás a punto de enviar notificaciones a {totalMembers, number} {totalMembers, plural, one {persona} other {personas}}. ¿Estás seguro de querer hacer esto?",
|
||||
"mobile.post_textbox.entire_channel_here.message.with_timezones": "Al utilizar @here estás a punto de enviar notificaciones a {totalMembers, number} {totalMembers, plural, one {persona} other {personas}} en {timezones, number} {zonas horarias, plural, one {zona horaria} other {zonas horarias}}. ¿Estás seguro de querer hacer esto?",
|
||||
"mobile.post_textbox.entire_channel_here.message.with_timezones": "Al utilizar @here estás a punto de enviar notificaciones a {totalMembers, number} {totalMembers, plural, one {persona} other {personas}} en {timezones, number} {timezones, plural, one {zona horaria} other {zonas horarias}}. ¿Estás seguro de querer hacer esto?",
|
||||
"mobile.post_textbox.groups.title": "Confirma el envío de notificaciones a grupos",
|
||||
"mobile.post_textbox.multi_group.message.with_timezones": "Al utilizar {mentions} y {finalMention} estás a punto de enviar notificaciones al menos a {totalMembers} personas en {timezones, number} {timezones, plural, one {zona horaria} other {zonas horarias}}. ¿Estás seguro?",
|
||||
"mobile.post_textbox.multi_group.message.without_timezones": "Al utilizar {mentions} y {finalMention} estás a punto de enviar notificaciones al menos a {totalMembers} personas. ¿Estás seguro?",
|
||||
@@ -690,7 +690,7 @@
|
||||
"post_body.check_for_out_of_channel_mentions.message.multiple": "fueron mencionados pero no son parte de este canal. Quieres ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.one": "fue mencionado pero no es parte de este canal. Quieres ",
|
||||
"post_body.check_for_out_of_channel_mentions.message_last": "? Tendrán acceso al historial de mensajes.",
|
||||
"post_body.commentedOn": "Comento en el mensaje de {name}: ",
|
||||
"post_body.commentedOn": "Comentado en el mensaje de {name}{apostrophe}: ",
|
||||
"post_body.deleted": "(mensaje eliminado)",
|
||||
"post_info.auto_responder": "RESPUESTA AUTOMÁTICA",
|
||||
"post_info.bot": "BOT",
|
||||
@@ -702,8 +702,8 @@
|
||||
"posts_view.newMsg": "Nuevos Mensajes",
|
||||
"rhs_thread.rootPostDeletedMessage.body": "Parte de esta conversación ha sido eliminada debido a la política de retención de datos. No se puede seguir respondiendo a esta conversación.",
|
||||
"search_bar.search": "Buscar",
|
||||
"search_header.results": "Resultados de la Búsqueda",
|
||||
"search_header.title2": "Menciones Recientes",
|
||||
"search_header.results": "Resultados de búsqueda",
|
||||
"search_header.title2": "Mencines recientes",
|
||||
"search_header.title3": "Mensajes Guardados",
|
||||
"search_item.channelArchived": "Archivado",
|
||||
"sidebar.channels": "CANALES PÚBLICOS",
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
"apps.error.parser.missing_list_end": "Marqeur de fin de liste attendu.",
|
||||
"apps.error.parser.missing_quote": "Les doubles guillemets doivent être fermés avant la fin du champ de saisie.",
|
||||
"apps.error.parser.missing_source": "Le formulaire n'a ni `submit` ni `source`.",
|
||||
"apps.error.parser.missing_submit": "Aucun appel dans le lien ou le formulaire.",
|
||||
"apps.error.parser.missing_tick": "Une marqueur de citation correspondant est attendu avant la fin du champ de saisie.",
|
||||
"apps.error.parser.multiple_equal": "Les signes `=` multiples ne sont pas autorisés.",
|
||||
"apps.error.parser.no_argument_pos_x": "Impossible d'identifier l'argument.",
|
||||
|
||||
1
assets/base/i18n/hr.json
Normal file
1
assets/base/i18n/hr.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -201,7 +201,7 @@
|
||||
"gallery.open_file": "File megnyitása",
|
||||
"gallery.unsuppored": "Az előnézet nem elérhető ennél a file típusnál",
|
||||
"get_post_link_modal.title": "Link másolása",
|
||||
"global_threads.allThreads": "Összes üzenetszálad",
|
||||
"global_threads.allThreads": "Összes üzenetszál",
|
||||
"global_threads.emptyThreads.message": "Minden olyan üzenetszál, amiben részt vettél vagy említésre kerültél fel lesz itt tüntetve azokkal együtt, amiket követsz.",
|
||||
"global_threads.emptyThreads.title": "Nincsen követett üzenetszál",
|
||||
"global_threads.emptyUnreads.message": "Úgy néz ki, mindent elolvastál.",
|
||||
|
||||
@@ -690,7 +690,7 @@
|
||||
"post_body.check_for_out_of_channel_mentions.message.multiple": "がメンションされましたが、彼らはチャンネルにいません。 ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.one": "がメンションされましたが、彼はチャンネルにいません。 ",
|
||||
"post_body.check_for_out_of_channel_mentions.message_last": "? 彼らは全ての会話履歴にアクセスできます。",
|
||||
"post_body.commentedOn": "{name}のメッセージへのコメント: ",
|
||||
"post_body.commentedOn": "{name} {apostrophe} のメッセージへのコメント: ",
|
||||
"post_body.deleted": "(メッセージは削除されています)",
|
||||
"post_info.auto_responder": "自動返信",
|
||||
"post_info.bot": "BOT",
|
||||
@@ -748,7 +748,7 @@
|
||||
"threads.replies": "{count} {count, plural, one {返信} other {返信}}",
|
||||
"threads.unfollowMessage": "メッセージのフォローをやめる",
|
||||
"threads.unfollowThread": "スレッドのフォローをやめる",
|
||||
"user.settings.display.clockDisplay": "時計表示",
|
||||
"user.settings.display.clockDisplay": "時刻表示",
|
||||
"user.settings.display.custom_theme": "カスタムテーマ",
|
||||
"user.settings.display.militaryClock": "時計の24時間表示(例: 16:00)",
|
||||
"user.settings.display.normalClock": "時計の12時間表示(例: 4:00 PM)",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,8 +7,8 @@
|
||||
"about.hashee": "EE Compilatiehash:",
|
||||
"about.teamEditionLearn": "Word lid van de Mattermost-gemeenschap op ",
|
||||
"about.teamEditionSt": "Alle team-communicatie op één plaats, doorzoekbaar en van overal bereikbaar.",
|
||||
"about.teamEditiont0": "Team Editie",
|
||||
"about.teamEditiont1": "Enterprise Editie",
|
||||
"about.teamEditiont0": "Team-Editie",
|
||||
"about.teamEditiont1": "Enterprise-Editie",
|
||||
"about.title": "Info over {appTitle}",
|
||||
"announcment_banner.dont_show_again": "Niet opnieuw tonen",
|
||||
"api.channel.add_guest.added": "{addedUsername} werd toegevoegd aan het kanaal als gast door {username}.",
|
||||
@@ -141,7 +141,7 @@
|
||||
"combined_system_message.removed_from_team.one": "{firstUser} werd **verwijderd uit het team**.",
|
||||
"combined_system_message.removed_from_team.one_you": "Je werd **verwijderd uit het team**.",
|
||||
"combined_system_message.removed_from_team.two": "{firstUser} en {secondUser} werden **verwijderd van het team**.",
|
||||
"combined_system_message.you": "Jij",
|
||||
"combined_system_message.you": "jou",
|
||||
"create_comment.addComment": "Voeg commentaar toe...",
|
||||
"create_post.deactivated": "Je bekijkt een gearchiveerd kanaal met een gedeactiveerde gebruiker.",
|
||||
"create_post.write": "Schrijven naar {channelDisplayName}",
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
"combined_system_message.removed_from_team.one": "{firstUser} **togs bort från kanalen**.",
|
||||
"combined_system_message.removed_from_team.one_you": "Du **togs bort från teamet**.",
|
||||
"combined_system_message.removed_from_team.two": "{firstUser} och {secondUser} **togs bort från teamet**.",
|
||||
"combined_system_message.you": "Du",
|
||||
"combined_system_message.you": "dig",
|
||||
"create_comment.addComment": "Lägg till en kommentar...",
|
||||
"create_post.deactivated": "Du visar en arkiverad kanal med ett avstängt användarkonto.",
|
||||
"create_post.write": "Skriv i kanalen {channelDisplayName}",
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
{
|
||||
"about.date": "Yapım tarihi:",
|
||||
"about.enterpriseEditionLearn": "Enterprise sürüm hakkında şuradan ayrıntılı bilgi alabilirsiniz ",
|
||||
"about.enterpriseEditionLearn": "Enterprise paketi hakkında ayrıntılı bilgiyi şuradan alabilirsiniz ",
|
||||
"about.enterpriseEditionSt": "Güvenlik duvarının arkasından modern iletişim.",
|
||||
"about.enterpriseEditione1": "Enterprise sürümü",
|
||||
"about.enterpriseEditione1": "Enterprise paketi",
|
||||
"about.hash": "Yapım karması:",
|
||||
"about.hashee": "Enterprise sürüm yapım karması:",
|
||||
"about.hashee": "Enterprise tarifesi yapım karması:",
|
||||
"about.teamEditionLearn": "Mattermost topluluğuna katılın: ",
|
||||
"about.teamEditionSt": "Tüm takım iletişimi tek bir yerde, anında aranabilir ve her yerden erişilebilir.",
|
||||
"about.teamEditiont0": "Team sürümü",
|
||||
"about.teamEditiont1": "Enterprise sürümü",
|
||||
"about.teamEditiont0": "Team paketi",
|
||||
"about.teamEditiont1": "Enterprise paketi",
|
||||
"about.title": "{appTitle} hakkında",
|
||||
"announcment_banner.dont_show_again": "Yeniden görüntülenmesin",
|
||||
"api.channel.add_guest.added": "{addedUsername}, {username} tarafından konuk olarak kanala eklendi.",
|
||||
@@ -595,7 +595,7 @@
|
||||
"mobile.server_link.unreachable_user.error": "Bu bağlantı silinmiş bir kullanıcıya ait.",
|
||||
"mobile.server_ssl.error.text": "{host} sertifikası güvenilir değil.\n\nLütfen sertifika sorunlarını çözerek bu sunucu ile bağlantı kurulabilmesini sağlaması için sistem yöneticiniz ile görüşün.",
|
||||
"mobile.server_ssl.error.title": "Güvenli olmayan sertifika",
|
||||
"mobile.server_upgrade.alert_description": "Bu sunucu sürümü desteklenmediğinden, kullanıcılar uyumluluk sorunlarından kaynaklanan çökmeler ya da uygulamanın temel işlevselliğini bozan ciddi sorunlar ile karşılaşacak. Sunucu sürümünün {serverVersion} ya da üzerindeki bir sürüme yükseltilmesi gerekli.",
|
||||
"mobile.server_upgrade.alert_description": "Bu sunucu sürümü desteklenmediğinden, kullanıcılar uyumluluk sorunlarından kaynaklanan çökmeler ya da uygulamanın temel işlevselliğini bozan ciddi sorunlar ile karşılaşacak. Sunucunun {serverVersion} ya da üzerindeki bir sürüme güncellenmesi gerekli.",
|
||||
"mobile.server_upgrade.button": "Tamam",
|
||||
"mobile.server_upgrade.dismiss": "Kapat",
|
||||
"mobile.server_upgrade.learn_more": "Ayrıntılı bilgi alın",
|
||||
@@ -636,7 +636,7 @@
|
||||
"mobile.timezone_settings.manual": "Saat dilimini değiştir",
|
||||
"mobile.timezone_settings.select": "Saat dilimini seçin",
|
||||
"mobile.tos_link": "Hizmet koşulları",
|
||||
"mobile.unsupported_server.message": "Ek dosyalar, bağlantı ön izlemeleri, tepkiler ve gömülü veriler doğru görüntülenmeyebilir. Bu sorun sürerse sistem yöneticinize Mattermost sürümünü yükseltmesi gerektiğini bildirin.",
|
||||
"mobile.unsupported_server.message": "Ek dosyalar, bağlantı ön izlemeleri, tepkiler ve gömülü veriler doğru görüntülenmeyebilir. Bu sorun sürerse sistem yöneticinize Mattermost sunucusunu güncellemesi gerektiğini bildirin.",
|
||||
"mobile.unsupported_server.ok": "Tamam",
|
||||
"mobile.unsupported_server.title": "Sunucu sürümü desteklenmiyor",
|
||||
"mobile.user.settings.notifications.email.fifteenMinutes": "15 dakikada bir",
|
||||
|
||||
@@ -11,7 +11,15 @@
|
||||
"about.teamEditiont1": "Enterprise Edition",
|
||||
"about.title": "Про {appTitle}",
|
||||
"announcment_banner.dont_show_again": "Не показувати знову",
|
||||
"api.channel.add_guest.added": "{addedUsername} доданий до каналу під гостьовим ім'ям {username}.",
|
||||
"api.channel.add_member.added": "{addedUsername} додано до каналу за {username}.",
|
||||
"api.channel.guest_join_channel.post_and_forget": "{username} приєднався до каналу як гість.",
|
||||
"apps.error": "Помилка:{error}",
|
||||
"apps.error.command.field_missing": "Обов'язкові поля відсутні:`{fieldName}`.",
|
||||
"apps.error.command.same_channel": "Канал повторюється для поля `{fieldName}`: `{option}`.",
|
||||
"apps.error.command.same_option": "Опція повторюється для поля `{fieldName}`: `{option}`.",
|
||||
"apps.error.command.same_user": "Користувач повторюється для поля `{fieldName}`: `{option}`.",
|
||||
"apps.error.command.unknown_channel": "Невідомий канал для поля `{fieldName}`: `{option}`.",
|
||||
"archivedChannelMessage": "Ви переглядаєте **архівований канал**. Нові повідомлення не можуть бути опубліковані.",
|
||||
"center_panel.archived.closeChannel": "Закрити канал",
|
||||
"channel.channelHasGuests": "У цому каналі є гості",
|
||||
@@ -32,6 +40,7 @@
|
||||
"channel_loader.someone": "Хтось",
|
||||
"channel_members_modal.remove": "Видалити",
|
||||
"channel_modal.cancel": "Відміна",
|
||||
"channel_modal.channelType": "Тип",
|
||||
"channel_modal.descriptionHelp": "Опишіть, як слід використовувати цей канал.",
|
||||
"channel_modal.header": "Заголовок",
|
||||
"channel_modal.headerEx": "Наприклад: \"[Тема посилання](http://example.com)\"",
|
||||
@@ -70,7 +79,7 @@
|
||||
"combined_system_message.left_channel.one_you": "**залишив канал**.",
|
||||
"combined_system_message.left_channel.two": "{firstUser} і {secondUser} **залишив канал**. ",
|
||||
"combined_system_message.left_team.many_expanded": "{users} і {lastUser} **залишили команду**.",
|
||||
"combined_system_message.left_team.one": "{firstUser} **залишає команду**. ",
|
||||
"combined_system_message.left_team.one": "{firstUser} **залишає команду**.",
|
||||
"combined_system_message.left_team.one_you": "**залишив команду**.",
|
||||
"combined_system_message.left_team.two": "{firstUser} та {secondUser} **залишили команду**.",
|
||||
"combined_system_message.removed_from_channel.many_expanded": "{users} та {lastUser} **видалені з каналу**.",
|
||||
@@ -85,16 +94,26 @@
|
||||
"create_comment.addComment": "Додати коментар...",
|
||||
"create_post.deactivated": "Ви переглядаєте архівований канал з деактивованим користувачем.",
|
||||
"create_post.write": "Написати у {channelDisplayName}",
|
||||
"custom_status.expiry_dropdown.custom": "На вибір",
|
||||
"custom_status.expiry_dropdown.today": "Сьогодні",
|
||||
"custom_status.expiry_time.today": "Сьогодні",
|
||||
"date_separator.today": "Сьогодні",
|
||||
"date_separator.yesterday": "Вчора",
|
||||
"edit_post.editPost": "Редагувати повідомлення...",
|
||||
"edit_post.save": "Зберегти",
|
||||
"emoji_picker.custom": "На вибір",
|
||||
"emoji_picker.flags": "Прапори",
|
||||
"emoji_picker.objects": "Об'єкти",
|
||||
"emoji_picker.searchResults": "Результати пошуку",
|
||||
"emoji_picker.symbols": "Символи",
|
||||
"file_upload.fileAbove": "Не можна завантажити файл більше {max} МВ: {filename}",
|
||||
"friendly_date.yesterday": "Вчора",
|
||||
"gallery.download_file": "Завантажити файл",
|
||||
"gallery.footer.channel_name": "Поділилися в {channelName}",
|
||||
"gallery.open_file": "Відкрити файл",
|
||||
"gallery.unsuppored": "Попередній перегляд не підтримується для цього типу файлу",
|
||||
"get_post_link_modal.title": "Скопіювати посилання",
|
||||
"global_threads.markAllRead.cancel": "Відміна",
|
||||
"integrations.add": "Додати",
|
||||
"intro_messages.anyMember": "Будь-який учасник може зайти і читати цей канал.",
|
||||
"intro_messages.beginning": "Початок {name}",
|
||||
@@ -152,7 +171,7 @@
|
||||
"mobile.advanced_settings.delete_message": "\nДана дія приведе до очищення локальних даних і перезапуску програми.\n",
|
||||
"mobile.advanced_settings.delete_title": "Delete Documents & Data",
|
||||
"mobile.advanced_settings.timezone": "Часовий пояс ",
|
||||
"mobile.advanced_settings.title": "Додаткові параметри ",
|
||||
"mobile.advanced_settings.title": "Додаткові параметри",
|
||||
"mobile.alert_dialog.alertCancel": "Відміна",
|
||||
"mobile.android.back_handler_exit": "Повторно натисніть назад, щоб вийти",
|
||||
"mobile.android.photos_permission_denied_description": "Щоб завантажити зображення з вашої бібліотеки, будь-ласка, змініть налаштування вашого дозволу.",
|
||||
@@ -211,6 +230,7 @@
|
||||
"mobile.create_channel.public": "Новий публічний канал",
|
||||
"mobile.create_post.read_only": "Цей канал доступний лише для читання",
|
||||
"mobile.custom_list.no_results": "Немає результатів",
|
||||
"mobile.custom_status.modal_confirm": "Готово",
|
||||
"mobile.display_settings.sidebar": "Бічна панель ",
|
||||
"mobile.display_settings.theme": "Тема ",
|
||||
"mobile.document_preview.failed_description": "Під час відкриття документа сталася помилка. Будь-ласка, переконайтеся, що ви встановили програму перегляду {fileType} та повторіть спробу.\n",
|
||||
@@ -255,19 +275,24 @@
|
||||
"mobile.files_paste.error_title": "Не вдалося вставити",
|
||||
"mobile.flagged_posts.empty_description": "Збережені повідомлення бачите лише ви. Позначте повідомлення для подальших дій або збережіть на потім, довго натискаючи повідомлення та вибираючи Зберегти в меню.",
|
||||
"mobile.flagged_posts.empty_title": "Ще немає збережених повідомлень",
|
||||
"mobile.forms.select.done": "Готово",
|
||||
"mobile.gallery.title": "{index} з {total}",
|
||||
"mobile.general.error.title": "Помилка",
|
||||
"mobile.help.title": "Допомога ",
|
||||
"mobile.interactive_dialog.defaultSubmit": "Відправити",
|
||||
"mobile.intro_messages.DM": "Початок історії особистих повідомлень з {teammate}. Особисті повідомлення і файли доступні тут і не видно за межами цієї області.",
|
||||
"mobile.intro_messages.default_message": "Це перший канал, який бачить новий учасник групи - використовуйте його для направлення повідомлень, які повинні побачити всі.",
|
||||
"mobile.intro_messages.default_welcome": "Ласкаво просимо до {name}!",
|
||||
"mobile.ios.photos_permission_denied_description": "Щоб зберегти зображення та відео в бібліотеці, змініть налаштування вашого дозволу.",
|
||||
"mobile.ios.photos_permission_denied_title": "Потрібен доступ до фото-бібліотеки",
|
||||
"mobile.join_channel.error": "Ми не можемо підключитися до каналу {displayName}. Будь-ласка, перевірте підключення та спробуйте знову.",
|
||||
"mobile.link.error.title": "Помилка",
|
||||
"mobile.loading_channels": "Завантаження списку каналів...",
|
||||
"mobile.loading_members": "Завантаження списку учасників...",
|
||||
"mobile.loading_options": "Параметри завантаження...",
|
||||
"mobile.loading_posts": "Завантаження повідомлень...",
|
||||
"mobile.login_options.choose_title": "Виберіть спосіб входу",
|
||||
"mobile.mailTo.error.title": "Помилка",
|
||||
"mobile.managed.blocked_by": "Заблоковано {vendor}",
|
||||
"mobile.managed.exit": "Вхід",
|
||||
"mobile.managed.jailbreak": "Пристрої з Jailbroken не є довіреними {vendor}, вийдіть з програми.",
|
||||
@@ -333,6 +358,7 @@
|
||||
"mobile.open_dm.error": "Ми не можемо підключитися до каналу {displayName}. Будь-ласка, перевірте підключення та спробуйте знову.",
|
||||
"mobile.open_gm.error": "Помилка з'єднання із групи з цими користувачами. Будь-ласка, перевірте підключення та спробуйте заново.",
|
||||
"mobile.open_unknown_channel.error": "Не вдається приєднатися до каналу. Скиньте кеш і спробуйте ще раз.",
|
||||
"mobile.participants.you": "(Це ви)",
|
||||
"mobile.permission_denied_dismiss": "Не дозволяти",
|
||||
"mobile.permission_denied_retry": "Налаштування",
|
||||
"mobile.pinned_posts.empty_description": "Закріпіть важливі повідомлення, видимі для всього каналу. Довго натискайте повідомлення та виберіть Закріпити на каналі, щоб зберегти його тут.",
|
||||
@@ -362,7 +388,7 @@
|
||||
"mobile.post_textbox.entire_channel.title": "Підтвердьте надсилання повідомлень на весь канал",
|
||||
"mobile.post_textbox.groups.title": "Confirm sending notifications to groups",
|
||||
"mobile.post_textbox.one_group.message.without_timezones": "Використовуючи {mention}, ви збираєтеся надіслати сповіщення {totalMembers} людям. Ви впевнені, що хочете це зробити?",
|
||||
"mobile.post_textbox.uploadFailedDesc": "Деякі вкладення не змогли завантажити на сервер. Ви впевнені, що хочете опублікувати це повідомлення? ",
|
||||
"mobile.post_textbox.uploadFailedDesc": "Деякі вкладення не змогли завантажити на сервер. Ви впевнені, що хочете опублікувати це повідомлення?",
|
||||
"mobile.post_textbox.uploadFailedTitle": "Вкладення несправності",
|
||||
"mobile.posts_view.moreMsg": "Більше нових повідомлень ",
|
||||
"mobile.prepare_file.failed_description": "Під час підготовки файлу сталася помилка. Будь ласка спробуйте ще раз.\n",
|
||||
@@ -408,6 +434,7 @@
|
||||
"mobile.routes.sso": "Одиночна система входу",
|
||||
"mobile.routes.table": "Таблиця",
|
||||
"mobile.routes.thread": "{channelName} Деталі",
|
||||
"mobile.routes.thread_crt": "Thread",
|
||||
"mobile.routes.thread_dm": "Прямий потік повідомлень",
|
||||
"mobile.routes.user_profile": "Профіль ",
|
||||
"mobile.routes.user_profile.edit": "Редагувати",
|
||||
@@ -510,6 +537,7 @@
|
||||
"password_send.reset": "Скинути пароль ",
|
||||
"permalink.error.access": "Постійне посилання належить до видаленого повідомлення або до каналу, на який ви не маєте доступу.",
|
||||
"permalink.error.link_not_found": "Посилання не знайдено",
|
||||
"permalink.show_dialog_warn.cancel": "Відміна",
|
||||
"post_body.check_for_out_of_channel_groups_mentions.message": "did not get notified by this mention because they are not in the channel. They cannot be added to the channel because they are not a member of the linked groups. To add them to this channel, they must be added to the linked groups.",
|
||||
"post_body.check_for_out_of_channel_mentions.link.and": "і",
|
||||
"post_body.check_for_out_of_channel_mentions.link.private": "додайте їх до цього приватного каналу",
|
||||
@@ -578,9 +606,10 @@
|
||||
"user.settings.general.emailSamlCantUpdate": "Вхід здійснюється через GitLab. Електронна пошта не може бути оновлена. Електронна адреса, яку використовують для сповіщень, є {email}. ",
|
||||
"user.settings.general.field_handled_externally": "Це поле обробляється вашим провайдером входу. Якщо ви хочете це змінити,то потрібно це зробити через свого постачальника послуг входу.",
|
||||
"user.settings.general.firstName": "Ім'я ",
|
||||
"user.settings.general.lastName": "Прізвище ",
|
||||
"user.settings.general.lastName": "Прізвище",
|
||||
"user.settings.general.nickname": "Псевдонім",
|
||||
"user.settings.general.position": "Посада",
|
||||
"user.settings.general.status": "Статус",
|
||||
"user.settings.general.username": "Ім'я користувача",
|
||||
"user.settings.modal.display": "Вигляд",
|
||||
"user.settings.modal.notifications": "Сповіщення ",
|
||||
|
||||
24
detox/package-lock.json
generated
24
detox/package-lock.json
generated
@@ -6765,9 +6765,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/moment": {
|
||||
"version": "2.29.2",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz",
|
||||
"integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==",
|
||||
"version": "2.29.4",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
|
||||
"integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"engines": {
|
||||
@@ -7698,9 +7698,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/shell-quote": {
|
||||
"version": "1.7.2",
|
||||
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
|
||||
"integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==",
|
||||
"version": "1.7.3",
|
||||
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz",
|
||||
"integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/signal-exit": {
|
||||
@@ -13536,9 +13536,9 @@
|
||||
}
|
||||
},
|
||||
"moment": {
|
||||
"version": "2.29.2",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz",
|
||||
"integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==",
|
||||
"version": "2.29.4",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
|
||||
"integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
@@ -14258,9 +14258,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"shell-quote": {
|
||||
"version": "1.7.2",
|
||||
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
|
||||
"integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==",
|
||||
"version": "1.7.3",
|
||||
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz",
|
||||
"integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==",
|
||||
"dev": true
|
||||
},
|
||||
"signal-exit": {
|
||||
|
||||
@@ -661,14 +661,6 @@ platform :android do
|
||||
|
||||
beta_dir = './android/app/src/main/java/com/mattermost/rnbeta/'
|
||||
release_dir = "./android/app/src/main/java/#{package_id.gsub '.', '/'}/"
|
||||
if ENV['BUILD_FOR_RELEASE'] == 'true'
|
||||
find_replace_string(
|
||||
path_to_file: "#{beta_dir}MainApplication.java",
|
||||
old_string: 'return BuildConfig.DEBUG;',
|
||||
new_string: 'return false;'
|
||||
)
|
||||
end
|
||||
|
||||
if release_dir != beta_dir
|
||||
unless Dir.exist?(".#{release_dir}")
|
||||
FileUtils.mkdir_p ".#{release_dir}"
|
||||
@@ -689,6 +681,14 @@ platform :android do
|
||||
new_string: "package #{package_id};"
|
||||
)
|
||||
end
|
||||
|
||||
Dir.glob('../android/app/src/main/java/com/mattermost/newarchitecture/*.java') do |item|
|
||||
find_replace_string(
|
||||
path_to_file: item[1..-1],
|
||||
old_string: 'import com.mattermost.rnbeta.BuildConfig;',
|
||||
new_string: "import #{package_id}.BuildConfig;"
|
||||
)
|
||||
end
|
||||
|
||||
Dir.glob('../android/app/src/main/java/com/mattermost/share/*.java') do |item|
|
||||
find_replace_string(
|
||||
|
||||
@@ -3,25 +3,25 @@ GEM
|
||||
specs:
|
||||
CFPropertyList (3.0.5)
|
||||
rexml
|
||||
addressable (2.8.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
addressable (2.8.1)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
artifactory (3.0.15)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.2.0)
|
||||
aws-partitions (1.590.0)
|
||||
aws-sdk-core (3.131.1)
|
||||
aws-partitions (1.656.0)
|
||||
aws-sdk-core (3.166.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
aws-partitions (~> 1, >= 1.525.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-partitions (~> 1, >= 1.651.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
aws-sdk-kms (1.57.0)
|
||||
aws-sdk-core (~> 3, >= 3.127.0)
|
||||
aws-sdk-kms (1.59.0)
|
||||
aws-sdk-core (~> 3, >= 3.165.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-s3 (1.114.0)
|
||||
aws-sdk-core (~> 3, >= 3.127.0)
|
||||
aws-sdk-s3 (1.117.1)
|
||||
aws-sdk-core (~> 3, >= 3.165.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.4)
|
||||
aws-sigv4 (1.5.0)
|
||||
aws-sigv4 (1.5.2)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
claide (1.1.0)
|
||||
@@ -34,10 +34,10 @@ GEM
|
||||
rake (>= 12.0.0, < 14.0.0)
|
||||
domain_name (0.5.20190701)
|
||||
unf (>= 0.0.5, < 1.0.0)
|
||||
dotenv (2.7.6)
|
||||
dotenv (2.8.1)
|
||||
emoji_regex (3.2.3)
|
||||
excon (0.92.3)
|
||||
faraday (1.10.0)
|
||||
excon (0.93.1)
|
||||
faraday (1.10.2)
|
||||
faraday-em_http (~> 1.0)
|
||||
faraday-em_synchrony (~> 1.0)
|
||||
faraday-excon (~> 1.1)
|
||||
@@ -56,8 +56,8 @@ 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-multipart (1.0.4)
|
||||
multipart-post (~> 2)
|
||||
faraday-net_http (1.0.1)
|
||||
faraday-net_http_persistent (1.2.0)
|
||||
faraday-patron (1.0.0)
|
||||
@@ -66,7 +66,7 @@ GEM
|
||||
faraday_middleware (1.2.0)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.2.6)
|
||||
fastlane (2.206.1)
|
||||
fastlane (2.210.1)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
@@ -111,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.21.0)
|
||||
google-apis-core (>= 0.4, < 2.a)
|
||||
google-apis-core (0.5.0)
|
||||
google-apis-androidpublisher_v3 (0.31.0)
|
||||
google-apis-core (>= 0.9.1, < 2.a)
|
||||
google-apis-core (0.9.1)
|
||||
addressable (~> 2.5, >= 2.5.1)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
httpclient (>= 2.8.1, < 3.a)
|
||||
@@ -122,27 +122,27 @@ GEM
|
||||
retriable (>= 2.0, < 4.a)
|
||||
rexml
|
||||
webrick
|
||||
google-apis-iamcredentials_v1 (0.10.0)
|
||||
google-apis-core (>= 0.4, < 2.a)
|
||||
google-apis-playcustomapp_v1 (0.7.0)
|
||||
google-apis-core (>= 0.4, < 2.a)
|
||||
google-apis-storage_v1 (0.14.0)
|
||||
google-apis-core (>= 0.4, < 2.a)
|
||||
google-apis-iamcredentials_v1 (0.16.0)
|
||||
google-apis-core (>= 0.9.1, < 2.a)
|
||||
google-apis-playcustomapp_v1 (0.12.0)
|
||||
google-apis-core (>= 0.9.1, < 2.a)
|
||||
google-apis-storage_v1 (0.19.0)
|
||||
google-apis-core (>= 0.9.0, < 2.a)
|
||||
google-cloud-core (1.6.0)
|
||||
google-cloud-env (~> 1.0)
|
||||
google-cloud-errors (~> 1.0)
|
||||
google-cloud-env (1.6.0)
|
||||
faraday (>= 0.17.3, < 3.0)
|
||||
google-cloud-errors (1.2.0)
|
||||
google-cloud-storage (1.36.2)
|
||||
google-cloud-errors (1.3.0)
|
||||
google-cloud-storage (1.44.0)
|
||||
addressable (~> 2.8)
|
||||
digest-crc (~> 0.4)
|
||||
google-apis-iamcredentials_v1 (~> 0.1)
|
||||
google-apis-storage_v1 (~> 0.1)
|
||||
google-apis-storage_v1 (~> 0.19.0)
|
||||
google-cloud-core (~> 1.6)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
mini_mime (~> 1.0)
|
||||
googleauth (1.1.3)
|
||||
googleauth (1.3.0)
|
||||
faraday (>= 0.17.3, < 3.a)
|
||||
jwt (>= 1.4, < 3.0)
|
||||
memoist (~> 0.16)
|
||||
@@ -150,12 +150,12 @@ GEM
|
||||
os (>= 0.9, < 2.0)
|
||||
signet (>= 0.16, < 2.a)
|
||||
highline (2.0.3)
|
||||
http-cookie (1.0.4)
|
||||
http-cookie (1.0.5)
|
||||
domain_name (~> 0.5)
|
||||
httpclient (2.8.3)
|
||||
jmespath (1.6.1)
|
||||
json (2.6.2)
|
||||
jwt (2.3.0)
|
||||
jwt (2.5.0)
|
||||
memoist (0.16.2)
|
||||
mini_magick (4.11.0)
|
||||
mini_mime (1.1.2)
|
||||
@@ -164,13 +164,13 @@ GEM
|
||||
multipart-post (2.0.0)
|
||||
nanaimo (0.3.0)
|
||||
naturally (2.2.1)
|
||||
nokogiri (1.13.6)
|
||||
nokogiri (1.13.9)
|
||||
mini_portile2 (~> 2.8.0)
|
||||
racc (~> 1.4)
|
||||
optparse (0.1.1)
|
||||
os (1.1.4)
|
||||
plist (3.6.0)
|
||||
public_suffix (4.0.7)
|
||||
public_suffix (5.0.0)
|
||||
racc (1.6.0)
|
||||
rake (13.0.6)
|
||||
representable (3.2.0)
|
||||
@@ -183,9 +183,9 @@ GEM
|
||||
ruby2_keywords (0.0.5)
|
||||
rubyzip (2.3.2)
|
||||
security (0.1.3)
|
||||
signet (0.16.1)
|
||||
signet (0.17.0)
|
||||
addressable (~> 2.8)
|
||||
faraday (>= 0.17.5, < 3.0)
|
||||
faraday (>= 0.17.5, < 3.a)
|
||||
jwt (>= 1.5, < 3.0)
|
||||
multi_json (~> 1.10)
|
||||
simctl (1.6.8)
|
||||
@@ -203,11 +203,11 @@ GEM
|
||||
uber (0.1.0)
|
||||
unf (0.1.4)
|
||||
unf_ext
|
||||
unf_ext (0.0.8.1)
|
||||
unf_ext (0.0.8.2)
|
||||
unicode-display_width (1.8.0)
|
||||
webrick (1.7.0)
|
||||
word_wrap (1.0.0)
|
||||
xcodeproj (1.21.0)
|
||||
xcodeproj (1.22.0)
|
||||
CFPropertyList (>= 2.3.3, < 4.0)
|
||||
atomos (~> 0.1.3)
|
||||
claide (>= 1.0.2, < 2.0)
|
||||
|
||||
4
index.js
4
index.js
@@ -3,10 +3,14 @@
|
||||
|
||||
import 'react-native/Libraries/Core/InitializeCore';
|
||||
import {Platform, Text} from 'react-native';
|
||||
import ViewReactNativeStyleAttributes from 'react-native/Libraries/Components/View/ReactNativeStyleAttributes';
|
||||
import 'react-native-gesture-handler';
|
||||
|
||||
import 'app/mattermost';
|
||||
|
||||
// Add scaleY back to work around its removal in React Native 0.70.
|
||||
ViewReactNativeStyleAttributes.scaleY = true;
|
||||
|
||||
if (Platform.OS === 'android') {
|
||||
require('harmony-reflect');
|
||||
}
|
||||
|
||||
@@ -911,8 +911,8 @@
|
||||
CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CURRENT_PROJECT_VERSION = 404;
|
||||
DEAD_CODE_STRIPPING = NO;
|
||||
CURRENT_PROJECT_VERSION = 436;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = UQ8HT4Q2XM;
|
||||
ENABLE_BITCODE = NO;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
@@ -953,8 +953,8 @@
|
||||
CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CURRENT_PROJECT_VERSION = 404;
|
||||
DEAD_CODE_STRIPPING = NO;
|
||||
CURRENT_PROJECT_VERSION = 436;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = UQ8HT4Q2XM;
|
||||
ENABLE_BITCODE = NO;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.53.0</string>
|
||||
<string>1.56.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
@@ -37,7 +37,7 @@
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>404</string>
|
||||
<string>436</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
|
||||
@@ -19,9 +19,9 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>XPC!</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.53.0</string>
|
||||
<string>1.56.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>404</string>
|
||||
<string>436</string>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSAllowsArbitraryLoads</key>
|
||||
|
||||
@@ -19,9 +19,9 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>XPC!</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.53.0</string>
|
||||
<string>1.56.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>404</string>
|
||||
<string>436</string>
|
||||
<key>NSExtension</key>
|
||||
<dict>
|
||||
<key>NSExtensionPointIdentifier</key>
|
||||
|
||||
@@ -38,6 +38,11 @@ target 'Mattermost' do
|
||||
config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
|
||||
end
|
||||
end
|
||||
if target.respond_to?(:product_type) and target.product_type == "com.apple.product-type.bundle"
|
||||
target.build_configurations.each do |config|
|
||||
config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
420
ios/Podfile.lock
420
ios/Podfile.lock
@@ -3,14 +3,14 @@ PODS:
|
||||
- BVLinearGradient (2.5.6):
|
||||
- React
|
||||
- DoubleConversion (1.1.6)
|
||||
- FBLazyVector (0.67.2)
|
||||
- FBReactNativeSpec (0.67.2):
|
||||
- FBLazyVector (0.67.5)
|
||||
- FBReactNativeSpec (0.67.5):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTRequired (= 0.67.2)
|
||||
- RCTTypeSafety (= 0.67.2)
|
||||
- React-Core (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- ReactCommon/turbomodule/core (= 0.67.2)
|
||||
- RCTRequired (= 0.67.5)
|
||||
- RCTTypeSafety (= 0.67.5)
|
||||
- React-Core (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- ReactCommon/turbomodule/core (= 0.67.5)
|
||||
- fmt (6.2.1)
|
||||
- glog (0.3.5)
|
||||
- HMSegmentedControl (1.5.6)
|
||||
@@ -52,195 +52,195 @@ PODS:
|
||||
- DoubleConversion
|
||||
- fmt (~> 6.2.1)
|
||||
- glog
|
||||
- RCTRequired (0.67.2)
|
||||
- RCTTypeSafety (0.67.2):
|
||||
- FBLazyVector (= 0.67.2)
|
||||
- RCTRequired (0.67.5)
|
||||
- RCTTypeSafety (0.67.5):
|
||||
- FBLazyVector (= 0.67.5)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTRequired (= 0.67.2)
|
||||
- React-Core (= 0.67.2)
|
||||
- RCTRequired (= 0.67.5)
|
||||
- React-Core (= 0.67.5)
|
||||
- RCTYouTube (2.0.2):
|
||||
- React
|
||||
- YoutubePlayer-in-WKWebView (~> 0.3.1)
|
||||
- React (0.67.2):
|
||||
- React-Core (= 0.67.2)
|
||||
- React-Core/DevSupport (= 0.67.2)
|
||||
- React-Core/RCTWebSocket (= 0.67.2)
|
||||
- React-RCTActionSheet (= 0.67.2)
|
||||
- React-RCTAnimation (= 0.67.2)
|
||||
- React-RCTBlob (= 0.67.2)
|
||||
- React-RCTImage (= 0.67.2)
|
||||
- React-RCTLinking (= 0.67.2)
|
||||
- React-RCTNetwork (= 0.67.2)
|
||||
- React-RCTSettings (= 0.67.2)
|
||||
- React-RCTText (= 0.67.2)
|
||||
- React-RCTVibration (= 0.67.2)
|
||||
- React-callinvoker (0.67.2)
|
||||
- React-Core (0.67.2):
|
||||
- React (0.67.5):
|
||||
- React-Core (= 0.67.5)
|
||||
- React-Core/DevSupport (= 0.67.5)
|
||||
- React-Core/RCTWebSocket (= 0.67.5)
|
||||
- React-RCTActionSheet (= 0.67.5)
|
||||
- React-RCTAnimation (= 0.67.5)
|
||||
- React-RCTBlob (= 0.67.5)
|
||||
- React-RCTImage (= 0.67.5)
|
||||
- React-RCTLinking (= 0.67.5)
|
||||
- React-RCTNetwork (= 0.67.5)
|
||||
- React-RCTSettings (= 0.67.5)
|
||||
- React-RCTText (= 0.67.5)
|
||||
- React-RCTVibration (= 0.67.5)
|
||||
- React-callinvoker (0.67.5)
|
||||
- React-Core (0.67.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default (= 0.67.2)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- React-Core/Default (= 0.67.5)
|
||||
- React-cxxreact (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- React-jsiexecutor (= 0.67.5)
|
||||
- React-perflogger (= 0.67.5)
|
||||
- Yoga
|
||||
- React-Core/CoreModulesHeaders (0.67.2):
|
||||
- React-Core/CoreModulesHeaders (0.67.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- React-cxxreact (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- React-jsiexecutor (= 0.67.5)
|
||||
- React-perflogger (= 0.67.5)
|
||||
- Yoga
|
||||
- React-Core/Default (0.67.2):
|
||||
- React-Core/Default (0.67.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- React-cxxreact (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- React-jsiexecutor (= 0.67.5)
|
||||
- React-perflogger (= 0.67.5)
|
||||
- Yoga
|
||||
- React-Core/DevSupport (0.67.2):
|
||||
- React-Core/DevSupport (0.67.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default (= 0.67.2)
|
||||
- React-Core/RCTWebSocket (= 0.67.2)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-jsinspector (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- React-Core/Default (= 0.67.5)
|
||||
- React-Core/RCTWebSocket (= 0.67.5)
|
||||
- React-cxxreact (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- React-jsiexecutor (= 0.67.5)
|
||||
- React-jsinspector (= 0.67.5)
|
||||
- React-perflogger (= 0.67.5)
|
||||
- Yoga
|
||||
- React-Core/RCTActionSheetHeaders (0.67.2):
|
||||
- React-Core/RCTActionSheetHeaders (0.67.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- React-cxxreact (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- React-jsiexecutor (= 0.67.5)
|
||||
- React-perflogger (= 0.67.5)
|
||||
- Yoga
|
||||
- React-Core/RCTAnimationHeaders (0.67.2):
|
||||
- React-Core/RCTAnimationHeaders (0.67.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- React-cxxreact (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- React-jsiexecutor (= 0.67.5)
|
||||
- React-perflogger (= 0.67.5)
|
||||
- Yoga
|
||||
- React-Core/RCTBlobHeaders (0.67.2):
|
||||
- React-Core/RCTBlobHeaders (0.67.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- React-cxxreact (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- React-jsiexecutor (= 0.67.5)
|
||||
- React-perflogger (= 0.67.5)
|
||||
- Yoga
|
||||
- React-Core/RCTImageHeaders (0.67.2):
|
||||
- React-Core/RCTImageHeaders (0.67.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- React-cxxreact (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- React-jsiexecutor (= 0.67.5)
|
||||
- React-perflogger (= 0.67.5)
|
||||
- Yoga
|
||||
- React-Core/RCTLinkingHeaders (0.67.2):
|
||||
- React-Core/RCTLinkingHeaders (0.67.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- React-cxxreact (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- React-jsiexecutor (= 0.67.5)
|
||||
- React-perflogger (= 0.67.5)
|
||||
- Yoga
|
||||
- React-Core/RCTNetworkHeaders (0.67.2):
|
||||
- React-Core/RCTNetworkHeaders (0.67.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- React-cxxreact (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- React-jsiexecutor (= 0.67.5)
|
||||
- React-perflogger (= 0.67.5)
|
||||
- Yoga
|
||||
- React-Core/RCTSettingsHeaders (0.67.2):
|
||||
- React-Core/RCTSettingsHeaders (0.67.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- React-cxxreact (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- React-jsiexecutor (= 0.67.5)
|
||||
- React-perflogger (= 0.67.5)
|
||||
- Yoga
|
||||
- React-Core/RCTTextHeaders (0.67.2):
|
||||
- React-Core/RCTTextHeaders (0.67.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- React-cxxreact (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- React-jsiexecutor (= 0.67.5)
|
||||
- React-perflogger (= 0.67.5)
|
||||
- Yoga
|
||||
- React-Core/RCTVibrationHeaders (0.67.2):
|
||||
- React-Core/RCTVibrationHeaders (0.67.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- React-cxxreact (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- React-jsiexecutor (= 0.67.5)
|
||||
- React-perflogger (= 0.67.5)
|
||||
- Yoga
|
||||
- React-Core/RCTWebSocket (0.67.2):
|
||||
- React-Core/RCTWebSocket (0.67.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default (= 0.67.2)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsiexecutor (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- React-Core/Default (= 0.67.5)
|
||||
- React-cxxreact (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- React-jsiexecutor (= 0.67.5)
|
||||
- React-perflogger (= 0.67.5)
|
||||
- Yoga
|
||||
- React-CoreModules (0.67.2):
|
||||
- FBReactNativeSpec (= 0.67.2)
|
||||
- React-CoreModules (0.67.5):
|
||||
- FBReactNativeSpec (= 0.67.5)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.67.2)
|
||||
- React-Core/CoreModulesHeaders (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-RCTImage (= 0.67.2)
|
||||
- ReactCommon/turbomodule/core (= 0.67.2)
|
||||
- React-cxxreact (0.67.2):
|
||||
- RCTTypeSafety (= 0.67.5)
|
||||
- React-Core/CoreModulesHeaders (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- React-RCTImage (= 0.67.5)
|
||||
- ReactCommon/turbomodule/core (= 0.67.5)
|
||||
- React-cxxreact (0.67.5):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-callinvoker (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-jsinspector (= 0.67.2)
|
||||
- React-logger (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- React-runtimeexecutor (= 0.67.2)
|
||||
- React-jsi (0.67.2):
|
||||
- React-callinvoker (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- React-jsinspector (= 0.67.5)
|
||||
- React-logger (= 0.67.5)
|
||||
- React-perflogger (= 0.67.5)
|
||||
- React-runtimeexecutor (= 0.67.5)
|
||||
- React-jsi (0.67.5):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-jsi/Default (= 0.67.2)
|
||||
- React-jsi/Default (0.67.2):
|
||||
- React-jsi/Default (= 0.67.5)
|
||||
- React-jsi/Default (0.67.5):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-jsiexecutor (0.67.2):
|
||||
- React-jsiexecutor (0.67.5):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- React-jsinspector (0.67.2)
|
||||
- React-logger (0.67.2):
|
||||
- React-cxxreact (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- React-perflogger (= 0.67.5)
|
||||
- React-jsinspector (0.67.5)
|
||||
- React-logger (0.67.5):
|
||||
- glog
|
||||
- react-native-cameraroll (4.1.2):
|
||||
- React-Core
|
||||
@@ -259,7 +259,7 @@ PODS:
|
||||
- React-Core
|
||||
- react-native-netinfo (7.1.9):
|
||||
- React-Core
|
||||
- react-native-notifications (4.1.3):
|
||||
- react-native-notifications (4.3.1):
|
||||
- React-Core
|
||||
- react-native-passcode-status (1.1.2):
|
||||
- React
|
||||
@@ -281,71 +281,71 @@ PODS:
|
||||
- React
|
||||
- react-native-webview (11.17.1):
|
||||
- React-Core
|
||||
- React-perflogger (0.67.2)
|
||||
- React-RCTActionSheet (0.67.2):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.67.2)
|
||||
- React-RCTAnimation (0.67.2):
|
||||
- FBReactNativeSpec (= 0.67.2)
|
||||
- React-perflogger (0.67.5)
|
||||
- React-RCTActionSheet (0.67.5):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.67.5)
|
||||
- React-RCTAnimation (0.67.5):
|
||||
- FBReactNativeSpec (= 0.67.5)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.67.2)
|
||||
- React-Core/RCTAnimationHeaders (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- ReactCommon/turbomodule/core (= 0.67.2)
|
||||
- React-RCTBlob (0.67.2):
|
||||
- FBReactNativeSpec (= 0.67.2)
|
||||
- RCTTypeSafety (= 0.67.5)
|
||||
- React-Core/RCTAnimationHeaders (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- ReactCommon/turbomodule/core (= 0.67.5)
|
||||
- React-RCTBlob (0.67.5):
|
||||
- FBReactNativeSpec (= 0.67.5)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/RCTBlobHeaders (= 0.67.2)
|
||||
- React-Core/RCTWebSocket (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-RCTNetwork (= 0.67.2)
|
||||
- ReactCommon/turbomodule/core (= 0.67.2)
|
||||
- React-RCTImage (0.67.2):
|
||||
- FBReactNativeSpec (= 0.67.2)
|
||||
- React-Core/RCTBlobHeaders (= 0.67.5)
|
||||
- React-Core/RCTWebSocket (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- React-RCTNetwork (= 0.67.5)
|
||||
- ReactCommon/turbomodule/core (= 0.67.5)
|
||||
- React-RCTImage (0.67.5):
|
||||
- FBReactNativeSpec (= 0.67.5)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.67.2)
|
||||
- React-Core/RCTImageHeaders (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-RCTNetwork (= 0.67.2)
|
||||
- ReactCommon/turbomodule/core (= 0.67.2)
|
||||
- React-RCTLinking (0.67.2):
|
||||
- FBReactNativeSpec (= 0.67.2)
|
||||
- React-Core/RCTLinkingHeaders (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- ReactCommon/turbomodule/core (= 0.67.2)
|
||||
- React-RCTNetwork (0.67.2):
|
||||
- FBReactNativeSpec (= 0.67.2)
|
||||
- RCTTypeSafety (= 0.67.5)
|
||||
- React-Core/RCTImageHeaders (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- React-RCTNetwork (= 0.67.5)
|
||||
- ReactCommon/turbomodule/core (= 0.67.5)
|
||||
- React-RCTLinking (0.67.5):
|
||||
- FBReactNativeSpec (= 0.67.5)
|
||||
- React-Core/RCTLinkingHeaders (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- ReactCommon/turbomodule/core (= 0.67.5)
|
||||
- React-RCTNetwork (0.67.5):
|
||||
- FBReactNativeSpec (= 0.67.5)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.67.2)
|
||||
- React-Core/RCTNetworkHeaders (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- ReactCommon/turbomodule/core (= 0.67.2)
|
||||
- React-RCTSettings (0.67.2):
|
||||
- FBReactNativeSpec (= 0.67.2)
|
||||
- RCTTypeSafety (= 0.67.5)
|
||||
- React-Core/RCTNetworkHeaders (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- ReactCommon/turbomodule/core (= 0.67.5)
|
||||
- React-RCTSettings (0.67.5):
|
||||
- FBReactNativeSpec (= 0.67.5)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.67.2)
|
||||
- React-Core/RCTSettingsHeaders (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- ReactCommon/turbomodule/core (= 0.67.2)
|
||||
- React-RCTText (0.67.2):
|
||||
- React-Core/RCTTextHeaders (= 0.67.2)
|
||||
- React-RCTVibration (0.67.2):
|
||||
- FBReactNativeSpec (= 0.67.2)
|
||||
- RCTTypeSafety (= 0.67.5)
|
||||
- React-Core/RCTSettingsHeaders (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- ReactCommon/turbomodule/core (= 0.67.5)
|
||||
- React-RCTText (0.67.5):
|
||||
- React-Core/RCTTextHeaders (= 0.67.5)
|
||||
- React-RCTVibration (0.67.5):
|
||||
- FBReactNativeSpec (= 0.67.5)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/RCTVibrationHeaders (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- ReactCommon/turbomodule/core (= 0.67.2)
|
||||
- React-runtimeexecutor (0.67.2):
|
||||
- React-jsi (= 0.67.2)
|
||||
- ReactCommon/turbomodule/core (0.67.2):
|
||||
- React-Core/RCTVibrationHeaders (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- ReactCommon/turbomodule/core (= 0.67.5)
|
||||
- React-runtimeexecutor (0.67.5):
|
||||
- React-jsi (= 0.67.5)
|
||||
- ReactCommon/turbomodule/core (0.67.5):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-callinvoker (= 0.67.2)
|
||||
- React-Core (= 0.67.2)
|
||||
- React-cxxreact (= 0.67.2)
|
||||
- React-jsi (= 0.67.2)
|
||||
- React-logger (= 0.67.2)
|
||||
- React-perflogger (= 0.67.2)
|
||||
- React-callinvoker (= 0.67.5)
|
||||
- React-Core (= 0.67.5)
|
||||
- React-cxxreact (= 0.67.5)
|
||||
- React-jsi (= 0.67.5)
|
||||
- React-logger (= 0.67.5)
|
||||
- React-perflogger (= 0.67.5)
|
||||
- ReactNativeExceptionHandler (2.10.10):
|
||||
- React-Core
|
||||
- ReactNativeIncallManager (3.3.0):
|
||||
@@ -730,8 +730,8 @@ SPEC CHECKSUMS:
|
||||
boost: a7c83b31436843459a1961bfd74b96033dc77234
|
||||
BVLinearGradient: e3aad03778a456d77928f594a649e96995f1c872
|
||||
DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662
|
||||
FBLazyVector: 244195e30d63d7f564c55da4410b9a24e8fbceaa
|
||||
FBReactNativeSpec: c94002c1d93da3658f4d5119c6994d19961e3d52
|
||||
FBLazyVector: d2db9d00883282819d03bbd401b2ad4360d47580
|
||||
FBReactNativeSpec: 94da4d84ba3b1acf459103320882daa481a2b62d
|
||||
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
|
||||
glog: 85ecdd10ee8d8ec362ef519a6a45ff9aa27b2e85
|
||||
HMSegmentedControl: 34c1f54d822d8308e7b24f5d901ec674dfa31352
|
||||
@@ -747,18 +747,18 @@ SPEC CHECKSUMS:
|
||||
Permission-PhotoLibrary: 7bec836dcdd04a0bfb200c314f1aae06d4476357
|
||||
Permission-PhotoLibraryAddOnly: 06fb0cdb1d35683b235ad8c464ef0ecc88859ea3
|
||||
RCT-Folly: 803a9cfd78114b2ec0f140cfa6fa2a6bafb2d685
|
||||
RCTRequired: cd47794163052d2b8318c891a7a14fcfaccc75ab
|
||||
RCTTypeSafety: 393bb40b3e357b224cde53d3fec26813c52428b1
|
||||
RCTRequired: 412e994c1e570cf35378a32c18fd46e50634938b
|
||||
RCTTypeSafety: ef27340c728e6d673af345ed69e479a010c8a2d8
|
||||
RCTYouTube: a8bb45705622a6fc9decf64be04128d3658ed411
|
||||
React: dec6476bc27155b250eeadfc11ea779265f53ebf
|
||||
React-callinvoker: e5047929e80aea942e6fdd96482504ef0189ca63
|
||||
React-Core: e382655566b2b9a6e3b4f641d777b7bfdbe52358
|
||||
React-CoreModules: cf262e82fa101c0aee022b6f90d1a5b612038b64
|
||||
React-cxxreact: 69d53de3b30c7c161ba087ca1ecdffed9ccb1039
|
||||
React-jsi: ce9a2d804adf75809ce2fe2374ba3fbbf5d59b03
|
||||
React-jsiexecutor: 52beb652bbc61201bd70cbe4f0b8edb607e8da4f
|
||||
React-jsinspector: 595f76eba2176ebd8817a1fffd47b84fbdab9383
|
||||
React-logger: 23de8ea0f44fa00ee77e96060273225607fd4d78
|
||||
React: 36b9f5116572e5b80f01e562bb1f1451e8848e47
|
||||
React-callinvoker: 91e62870884d3db3a0db33bbb1ba4e53fa5210ca
|
||||
React-Core: 765ccc3861be1b93c7d5ca37f6b06e2efd6e7999
|
||||
React-CoreModules: da2ddff50a92576b6d58fbfc80a62ba3f81d8a4e
|
||||
React-cxxreact: b54cffd4feb550c3213cd38db4a2a4bdd896f715
|
||||
React-jsi: 103674913e4159a07df20ef214c6b563e90e7b2e
|
||||
React-jsiexecutor: e9895ccae253323ca70f693945fecbba091f0abd
|
||||
React-jsinspector: ec4fe4f65ccf9d67c8429dda955d3412db8a25ef
|
||||
React-logger: 85f4ef06b9723714b2dfa5b0e5502b673b271b58
|
||||
react-native-cameraroll: 2957f2bce63ae896a848fbe0d5352c1bd4d20866
|
||||
react-native-cookies: cd92f3824ed1e32a20802e8185101e14bb5b76da
|
||||
react-native-document-picker: 429972f7ece4463aa5bcdd789622b3a674a3c5d1
|
||||
@@ -767,7 +767,7 @@ SPEC CHECKSUMS:
|
||||
react-native-local-auth: 49d336dcf0cb0268a930100013a6525844093844
|
||||
react-native-mmkv-storage: 2b57ca101fae52428f6cef6552793f83c0cdbc46
|
||||
react-native-netinfo: 87e5bfaf21ea5c6c110941290aa481dd8e849f98
|
||||
react-native-notifications: 805108822ceff3440644d5701944f0cda35f5b4b
|
||||
react-native-notifications: 33ec77006f7987bb22de8f1665889abc633b9196
|
||||
react-native-passcode-status: e78f76b3c8db613e6ced6bd40b54aa4f53374173
|
||||
react-native-paste-input: 80c06e2c5c65afd696f9bd43cfd371141d8b3a1b
|
||||
react-native-safe-area: e8230b0017d76c00de6b01e2412dcf86b127c6a3
|
||||
@@ -776,18 +776,18 @@ SPEC CHECKSUMS:
|
||||
react-native-video: a4c2635d0802f983594b7057e1bce8f442f0ad28
|
||||
react-native-webrtc: 86d841823e66d68cc1f86712db1c2956056bf0c2
|
||||
react-native-webview: 162b6453d074e0b1c7025242bb7a939b6f72b9e7
|
||||
React-perflogger: 3c9bb7372493e49036f07a82c44c8cf65cbe88db
|
||||
React-RCTActionSheet: 052606483045a408693aa7e864410b4a052f541a
|
||||
React-RCTAnimation: 08d4cac13222bb1348c687a0158dfd3b577cdb63
|
||||
React-RCTBlob: 928ad1df65219c3d9e2ac80983b943a75b5c3629
|
||||
React-RCTImage: 524d7313b142a39ee0e20fa312b67277917fe076
|
||||
React-RCTLinking: 44036ea6f13a2e46238be07a67566247fee35244
|
||||
React-RCTNetwork: 9b6faacf1e0789253e319ca53b1f8d92c2ac5455
|
||||
React-RCTSettings: ecd8094f831130a49581d5112a8607220e5d12a5
|
||||
React-RCTText: 14ba976fb48ed283cfdb1a754a5d4276471e0152
|
||||
React-RCTVibration: 99c7f67fba7a5ade46e98e870c6ff2444484f995
|
||||
React-runtimeexecutor: 2450b43df7ffe8e805a0b3dcb2abd4282f1f1836
|
||||
ReactCommon: d98c6c96b567f9b3a15f9fd4cc302c1eda8e3cf2
|
||||
React-perflogger: d32ee13196f4ae2e4098fb7f8e7ed4f864c6fb0f
|
||||
React-RCTActionSheet: 81779c09e34a6a3d6b15783407ba9016a774f535
|
||||
React-RCTAnimation: b778eaaa42a884abcc5719035a7a0b2f54672658
|
||||
React-RCTBlob: 8edfc04c117decb0e7d4e6ab32bec91707e63ecb
|
||||
React-RCTImage: 2022097f1291bfebd0003e477318c72b07853578
|
||||
React-RCTLinking: bd8d889c65695181342541ce4420e9419845084c
|
||||
React-RCTNetwork: eae64b805d967bf3ece2cec3ad09218eeb32cb74
|
||||
React-RCTSettings: 0645af8aec5f40726e98d434a07ff58e75a81aa9
|
||||
React-RCTText: e55de507cda263ff58404c3e7d75bf76c2b80813
|
||||
React-RCTVibration: c3b8a3245267a3849b0c7cb91a37606bf5f3aa65
|
||||
React-runtimeexecutor: 434efc9e5b6d0f14f49867f130b39376c971c1aa
|
||||
ReactCommon: a30c2448e5a88bae6fcb0e3da124c14ae493dac1
|
||||
ReactNativeExceptionHandler: b11ff67c78802b2f62eed0e10e75cb1ef7947c60
|
||||
ReactNativeIncallManager: 642c22630caadff0a0619413aff4a9da08d63df9
|
||||
ReactNativeKeyboardTrackingView: 02137fac3b2ebd330d74fa54ead48b14750a2306
|
||||
@@ -819,9 +819,9 @@ SPEC CHECKSUMS:
|
||||
Sentry: 2f7e91f247cfb05b05bd01e0b5d0692557a7687b
|
||||
Swime: d7b2c277503b6cea317774aedc2dce05613f8b0b
|
||||
XCDYouTubeKit: b120aced3d8638ffb570c5450cddb5a1dac448c7
|
||||
Yoga: 9b6696970c3289e8dea34b3eda93f23e61fb8121
|
||||
Yoga: 099a946cbf84c9b32ffdc4278d72db26710ecf92
|
||||
YoutubePlayer-in-WKWebView: 4fca3b4f6f09940077bfbae7bddb771f2b43aacd
|
||||
|
||||
PODFILE CHECKSUM: 8214414d5676358401d8ad51dff19e7fd8c71b5c
|
||||
PODFILE CHECKSUM: f291d3248a7b8e74342008fb662bad0b0e1b7589
|
||||
|
||||
COCOAPODS: 1.11.3
|
||||
COCOAPODS: 1.11.2
|
||||
|
||||
346
package-lock.json
generated
346
package-lock.json
generated
@@ -1,11 +1,12 @@
|
||||
{
|
||||
"name": "mattermost-mobile",
|
||||
"version": "1.53.0",
|
||||
"version": "1.56.0",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"version": "1.51.0",
|
||||
"name": "mattermost-mobile",
|
||||
"version": "1.56.0",
|
||||
"hasInstallScript": true,
|
||||
"license": "Apache 2.0",
|
||||
"dependencies": {
|
||||
@@ -42,7 +43,7 @@
|
||||
"prop-types": "15.8.1",
|
||||
"react": "17.0.2",
|
||||
"react-intl": "2.8.0",
|
||||
"react-native": "0.67.2",
|
||||
"react-native": "0.67.5",
|
||||
"react-native-android-open-settings": "1.3.0",
|
||||
"react-native-animatable": "1.3.3",
|
||||
"react-native-button": "3.0.1",
|
||||
@@ -67,7 +68,7 @@
|
||||
"react-native-math-view": "3.9.5",
|
||||
"react-native-mmkv-storage": "0.6.11",
|
||||
"react-native-navigation": "7.25.1",
|
||||
"react-native-notifications": "4.1.3",
|
||||
"react-native-notifications": "4.3.1",
|
||||
"react-native-passcode-status": "1.1.2",
|
||||
"react-native-permissions": "3.2.0",
|
||||
"react-native-reanimated": "2.3.1",
|
||||
@@ -2862,6 +2863,70 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/gen-mapping": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
|
||||
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/set-array": "^1.0.1",
|
||||
"@jridgewell/sourcemap-codec": "^1.4.10",
|
||||
"@jridgewell/trace-mapping": "^0.3.9"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/resolve-uri": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
|
||||
"integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/set-array": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
|
||||
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/source-map": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
|
||||
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/gen-mapping": "^0.3.0",
|
||||
"@jridgewell/trace-mapping": "^0.3.9"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/sourcemap-codec": {
|
||||
"version": "1.4.14",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
|
||||
"integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
|
||||
"dev": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/@jridgewell/trace-mapping": {
|
||||
"version": "0.3.14",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
|
||||
"integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/resolve-uri": "^3.0.3",
|
||||
"@jridgewell/sourcemap-codec": "^1.4.10"
|
||||
}
|
||||
},
|
||||
"node_modules/@mattermost/react-native-paste-input": {
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmjs.org/@mattermost/react-native-paste-input/-/react-native-paste-input-0.3.6.tgz",
|
||||
@@ -17415,9 +17480,9 @@
|
||||
"integrity": "sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ=="
|
||||
},
|
||||
"node_modules/moment": {
|
||||
"version": "2.29.2",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz",
|
||||
"integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==",
|
||||
"version": "2.29.4",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
|
||||
"integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
@@ -19292,9 +19357,9 @@
|
||||
"integrity": "sha512-txfpPCQYiazVdcbMRhatqWKcAxJweUu2wDXvts5/7Wyp6+Y9cHojqXHsLPEckzutfHlxZhG8Oiundbmp8Fd6eQ=="
|
||||
},
|
||||
"node_modules/react-native": {
|
||||
"version": "0.67.2",
|
||||
"resolved": "https://registry.npmjs.org/react-native/-/react-native-0.67.2.tgz",
|
||||
"integrity": "sha512-grEtpOLLvtSg8Bivg0ffVRCjTkresqMt7Jdog/geF6VAYhb4RnLaaUCWvyrfyB9buf135FKnqg5BIuve/XQNXA==",
|
||||
"version": "0.67.5",
|
||||
"resolved": "https://registry.npmjs.org/react-native/-/react-native-0.67.5.tgz",
|
||||
"integrity": "sha512-/xEksthqImZGDfcqzEmbOw0KRkp9/x+cC8T8uTHhSKLLa8pOFLGdF190UOjnLammGmAmFy0+ZcJf0Ujm53IGeA==",
|
||||
"dependencies": {
|
||||
"@jest/create-cache-key-function": "^27.0.1",
|
||||
"@react-native-community/cli": "^6.0.0",
|
||||
@@ -19626,12 +19691,12 @@
|
||||
"integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ=="
|
||||
},
|
||||
"node_modules/react-native-notifications": {
|
||||
"version": "4.1.3",
|
||||
"resolved": "https://registry.npmjs.org/react-native-notifications/-/react-native-notifications-4.1.3.tgz",
|
||||
"integrity": "sha512-A4SmRyfh2OlkptlJQvcQKkfnBKO1toUShmFplTkLXPNCqfpm/i4Fz+Uv+LzHSvbsU5U7EYf3JX9sfuyR06ZGPg==",
|
||||
"version": "4.3.1",
|
||||
"resolved": "https://registry.npmjs.org/react-native-notifications/-/react-native-notifications-4.3.1.tgz",
|
||||
"integrity": "sha512-A668d+Q0/VQRjmrh+LvDpc/REA8GXgwCijXDCIlDHGMK8enmrtdxY5OANQf1VM3hecf+fD0wYFw2uqL/ZR8jgg==",
|
||||
"peerDependencies": {
|
||||
"react": ">=0.14.5",
|
||||
"react-native": ">=0.25.1"
|
||||
"react": "*",
|
||||
"react-native": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/react-native-passcode-status": {
|
||||
@@ -22515,14 +22580,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/terser": {
|
||||
"version": "5.10.0",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
|
||||
"integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
|
||||
"version": "5.14.2",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
|
||||
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/source-map": "^0.3.2",
|
||||
"acorn": "^8.5.0",
|
||||
"commander": "^2.20.0",
|
||||
"source-map": "~0.7.2",
|
||||
"source-map-support": "~0.5.20"
|
||||
},
|
||||
"bin": {
|
||||
@@ -22530,14 +22596,6 @@
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"acorn": "^8.5.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"acorn": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/terser-webpack-plugin": {
|
||||
@@ -22645,16 +22703,6 @@
|
||||
"dev": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/terser/node_modules/source-map": {
|
||||
"version": "0.7.3",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
|
||||
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">= 8"
|
||||
}
|
||||
},
|
||||
"node_modules/test-exclude": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
|
||||
@@ -26017,12 +26065,66 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"@jridgewell/gen-mapping": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
|
||||
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@jridgewell/set-array": "^1.0.1",
|
||||
"@jridgewell/sourcemap-codec": "^1.4.10",
|
||||
"@jridgewell/trace-mapping": "^0.3.9"
|
||||
}
|
||||
},
|
||||
"@jridgewell/resolve-uri": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
|
||||
"integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
|
||||
"dev": true,
|
||||
"peer": true
|
||||
},
|
||||
"@jridgewell/set-array": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
|
||||
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
|
||||
"dev": true,
|
||||
"peer": true
|
||||
},
|
||||
"@jridgewell/source-map": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
|
||||
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@jridgewell/gen-mapping": "^0.3.0",
|
||||
"@jridgewell/trace-mapping": "^0.3.9"
|
||||
}
|
||||
},
|
||||
"@jridgewell/sourcemap-codec": {
|
||||
"version": "1.4.14",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
|
||||
"integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
|
||||
"dev": true,
|
||||
"peer": true
|
||||
},
|
||||
"@jridgewell/trace-mapping": {
|
||||
"version": "0.3.14",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
|
||||
"integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@jridgewell/resolve-uri": "^3.0.3",
|
||||
"@jridgewell/sourcemap-codec": "^1.4.10"
|
||||
}
|
||||
},
|
||||
"@mattermost/react-native-paste-input": {
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmjs.org/@mattermost/react-native-paste-input/-/react-native-paste-input-0.3.6.tgz",
|
||||
"integrity": "sha512-/XwUkWfkXDPv1/N+3sILKRoqa4sElqN/fADQzkC2KHYxVKN72297vMm8s+X1n2l+y7phNQ8ZmhjjL0ghuz/1og==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@msgpack/msgpack": {
|
||||
"version": "2.7.1",
|
||||
@@ -26074,8 +26176,7 @@
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cameraroll/-/cameraroll-4.1.2.tgz",
|
||||
"integrity": "sha512-jkdhMByMKD2CZ/5MPeBieYn8vkCfC4MOTouPpBpps3I8N6HUYJk+1JnDdktVYl2WINnqXpQptDA2YptVyifYAg==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@react-native-community/cli": {
|
||||
"version": "6.4.0",
|
||||
@@ -26825,8 +26926,7 @@
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/clipboard/-/clipboard-1.5.1.tgz",
|
||||
"integrity": "sha512-AHAmrkLEH5UtPaDiRqoULERHh3oNv7Dgs0bTC0hO5Z2GdNokAMPT5w8ci8aMcRemcwbtdHjxChgtjbeA38GBdA==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@react-native-community/datetimepicker": {
|
||||
"version": "5.1.0",
|
||||
@@ -26931,8 +27031,7 @@
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-22.4.1.tgz",
|
||||
"integrity": "sha512-gcLfn6P2PrFAVx3AobaOzlIEevpAEf9chTpFZz7bYfc7pz8XRv7vuKTIE4hxPKZSha6XWKKplDQ0x9Pq8xX2mg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"eslint-plugin-react-native": {
|
||||
"version": "3.11.0",
|
||||
@@ -26962,15 +27061,13 @@
|
||||
"version": "0.1.11",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/masked-view/-/masked-view-0.1.11.tgz",
|
||||
"integrity": "sha512-rQfMIGSR/1r/SyN87+VD8xHHzDYeHaJq6elOSCAD+0iLagXkSI2pfA0LmSXP21uw5i3em7GkkRjfJ8wpqWXZNw==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@react-native-community/netinfo": {
|
||||
"version": "7.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-7.1.9.tgz",
|
||||
"integrity": "sha512-xxbxFherpOjQeJm3rIx6gmZNEEBqVDIcmBII5QVSN8zf3xAwmaT/RxT74ISYDkeSlZwv4eegpkD4QA1ky52CNg==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@react-native-cookies/cookies": {
|
||||
"version": "6.0.11",
|
||||
@@ -27011,8 +27108,7 @@
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.0.tgz",
|
||||
"integrity": "sha512-C0roIxajvleskEpeYYJ1+2XTg8UqZO6o/SyzqTRuEUVsVD8CbFzKSOfj9kpfzA7jbYNzZPbzUJcm9kIigY9kHg==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@react-navigation/native": {
|
||||
"version": "6.0.7",
|
||||
@@ -27962,8 +28058,7 @@
|
||||
"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz",
|
||||
"integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@webpack-cli/info": {
|
||||
"version": "1.4.1",
|
||||
@@ -27979,8 +28074,7 @@
|
||||
"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz",
|
||||
"integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@xtuc/ieee754": {
|
||||
"version": "1.2.0",
|
||||
@@ -28065,16 +28159,14 @@
|
||||
"integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"acorn-jsx": {
|
||||
"version": "5.3.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
|
||||
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"acorn-walk": {
|
||||
"version": "7.2.0",
|
||||
@@ -28462,8 +28554,7 @@
|
||||
"version": "7.0.0-bridge.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
|
||||
"integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"babel-eslint": {
|
||||
"version": "10.1.0",
|
||||
@@ -30771,8 +30862,7 @@
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz",
|
||||
"integrity": "sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"eslint-plugin-import": {
|
||||
"version": "2.25.4",
|
||||
@@ -30899,8 +30989,7 @@
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz",
|
||||
"integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"eslint-plugin-react-native-globals": {
|
||||
"version": "0.1.2",
|
||||
@@ -34542,8 +34631,7 @@
|
||||
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
|
||||
"integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"jest-regex-util": {
|
||||
"version": "27.4.0",
|
||||
@@ -35364,8 +35452,7 @@
|
||||
"integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -35374,8 +35461,7 @@
|
||||
"resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz",
|
||||
"integrity": "sha1-a9KZwTsMRiay2iwDk81DhdYGrLk=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"jsesc": {
|
||||
"version": "2.5.2",
|
||||
@@ -37378,9 +37464,9 @@
|
||||
"integrity": "sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ=="
|
||||
},
|
||||
"moment": {
|
||||
"version": "2.29.2",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz",
|
||||
"integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg=="
|
||||
"version": "2.29.4",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
|
||||
"integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
|
||||
},
|
||||
"moment-timezone": {
|
||||
"version": "0.5.34",
|
||||
@@ -38793,8 +38879,7 @@
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.0.tgz",
|
||||
"integrity": "sha512-yQaiOqDmoKqks56LN9MTgY06O0qQHgV4FUrikH357DydArSZHQhl0BJFqGKIZoTqi8JizF9Dxhuk1FIZD6qCaw==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-intl": {
|
||||
"version": "2.8.0",
|
||||
@@ -38826,9 +38911,9 @@
|
||||
"integrity": "sha512-txfpPCQYiazVdcbMRhatqWKcAxJweUu2wDXvts5/7Wyp6+Y9cHojqXHsLPEckzutfHlxZhG8Oiundbmp8Fd6eQ=="
|
||||
},
|
||||
"react-native": {
|
||||
"version": "0.67.2",
|
||||
"resolved": "https://registry.npmjs.org/react-native/-/react-native-0.67.2.tgz",
|
||||
"integrity": "sha512-grEtpOLLvtSg8Bivg0ffVRCjTkresqMt7Jdog/geF6VAYhb4RnLaaUCWvyrfyB9buf135FKnqg5BIuve/XQNXA==",
|
||||
"version": "0.67.5",
|
||||
"resolved": "https://registry.npmjs.org/react-native/-/react-native-0.67.5.tgz",
|
||||
"integrity": "sha512-/xEksthqImZGDfcqzEmbOw0KRkp9/x+cC8T8uTHhSKLLa8pOFLGdF190UOjnLammGmAmFy0+ZcJf0Ujm53IGeA==",
|
||||
"requires": {
|
||||
"@jest/create-cache-key-function": "^27.0.1",
|
||||
"@react-native-community/cli": "^6.0.0",
|
||||
@@ -39002,8 +39087,7 @@
|
||||
"version": "8.4.8",
|
||||
"resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-8.4.8.tgz",
|
||||
"integrity": "sha512-92676ZWHZHsPM/EW1ulgb2MuVfjYfMWRTWMbLcrCsipkcMaZ9Traz5mpsnCS7KZpsOksnvUinzDIjsct2XGc6Q==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-document-picker": {
|
||||
"version": "8.0.0",
|
||||
@@ -39041,22 +39125,19 @@
|
||||
"version": "2.10.10",
|
||||
"resolved": "https://registry.npmjs.org/react-native-exception-handler/-/react-native-exception-handler-2.10.10.tgz",
|
||||
"integrity": "sha512-otAXGoZDl1689OoUJWN/rXxVbdoZ3xcmyF1uq/CsizdLwwyZqVGd6d+p/vbYvnF996FfEyAEBnHrdFxulTn51w==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-fast-image": {
|
||||
"version": "8.5.11",
|
||||
"resolved": "https://registry.npmjs.org/react-native-fast-image/-/react-native-fast-image-8.5.11.tgz",
|
||||
"integrity": "sha512-cNW4bIJg3nvKaheG8vGMfqCt5LMWX9MS5+wMudgKIHbGO51spRr4sgnlhVgwHLcZ5aeNOVJ8CPRxDIWKRq/0QA==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-file-viewer": {
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/react-native-file-viewer/-/react-native-file-viewer-2.1.5.tgz",
|
||||
"integrity": "sha512-MGC6sx9jsqHdefhVQ6o0akdsPGpkXgiIbpygb2Sg4g4bh7v6K1cardLV1NwGB9A6u1yICOSDT/MOC//9Ez6EUg==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-gesture-handler": {
|
||||
"version": "2.2.0",
|
||||
@@ -39074,42 +39155,36 @@
|
||||
"version": "1.13.0",
|
||||
"resolved": "https://registry.npmjs.org/react-native-haptic-feedback/-/react-native-haptic-feedback-1.13.0.tgz",
|
||||
"integrity": "sha512-g8G5QURitDeC/zRlobDvUXLxKYfMlIM2HQNWJKbHPSu61qfs0djnK4s1NZuQzihkeAO0KJ4AS2XWvKBzUmlXtA==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-hw-keyboard-event": {
|
||||
"version": "0.0.4",
|
||||
"resolved": "https://registry.npmjs.org/react-native-hw-keyboard-event/-/react-native-hw-keyboard-event-0.0.4.tgz",
|
||||
"integrity": "sha512-G8qp0nm17PHigLb/axgdF9xg51BKCG2p1AGeq//J/luLp5zNczIcQJh+nm02R1MeEUE3e53wqO4LMe0MV3raZg==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-image-picker": {
|
||||
"version": "4.7.3",
|
||||
"resolved": "https://registry.npmjs.org/react-native-image-picker/-/react-native-image-picker-4.7.3.tgz",
|
||||
"integrity": "sha512-eRKm4wlsmZHmsWFyv77kYc2F+ZyEVqe0m7mqhsMzWk6TQT4FBDtEDxmRDDFq+ivCu/1QD+EPhmYcAIpeGr7Ekg==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-incall-manager": {
|
||||
"version": "git+ssh://git@github.com/cpoile/react-native-incall-manager.git#8c55b9dac0a2ab25d651fb54b504d384f9989b36",
|
||||
"from": "react-native-incall-manager@github:cpoile/react-native-incall-manager",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-keyboard-aware-scrollview": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/react-native-keyboard-aware-scrollview/-/react-native-keyboard-aware-scrollview-2.1.0.tgz",
|
||||
"integrity": "sha512-XfWozWFPhdecfxN+wuqERX3mCGDrAim5siC6TWg3Qw7wK/zlwIwe1UIsHDNOQCzf9oIh0SkZXvoOFsMrnyIVmQ==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-keyboard-tracking-view": {
|
||||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/react-native-keyboard-tracking-view/-/react-native-keyboard-tracking-view-5.7.0.tgz",
|
||||
"integrity": "sha512-MDeEwAbn9LJDOfHq0QLCGaZirVLk2X/tHqkAqz3y6uxryTRdSl9PwleOVar5Jx2oAPEg4J9BXbUD1wwOOi+5Kg==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-keychain": {
|
||||
"version": "8.0.0",
|
||||
@@ -39120,22 +39195,19 @@
|
||||
"version": "2.5.6",
|
||||
"resolved": "https://registry.npmjs.org/react-native-linear-gradient/-/react-native-linear-gradient-2.5.6.tgz",
|
||||
"integrity": "sha512-HDwEaXcQIuXXCV70O+bK1rizFong3wj+5Q/jSyifKFLg0VWF95xh8XQgfzXwtq0NggL9vNjPKXa016KuFu+VFg==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-local-auth": {
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/react-native-local-auth/-/react-native-local-auth-1.6.0.tgz",
|
||||
"integrity": "sha512-36cYGZGCG82pMiVJbQa5WMA93khP4v5JqLutFkMyB/eRpCULHmojNIBlbUPIY9SCeN4sg5VBRFTVGCtTg2r2kA==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-localize": {
|
||||
"version": "2.1.9",
|
||||
"resolved": "https://registry.npmjs.org/react-native-localize/-/react-native-localize-2.1.9.tgz",
|
||||
"integrity": "sha512-n2Bi5P0cII8BrnG23Fs9PmpYcufD3JRbr1IBn3ArIA3Z3cGWg4eebv6am+CgdFC4kTPWUlVzX9fEgEMA+X8d6w==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-math-view": {
|
||||
"version": "3.9.5",
|
||||
@@ -39152,8 +39224,7 @@
|
||||
"version": "0.6.11",
|
||||
"resolved": "https://registry.npmjs.org/react-native-mmkv-storage/-/react-native-mmkv-storage-0.6.11.tgz",
|
||||
"integrity": "sha512-PaxUxbTwr+PHfzoYt6E1Mds9/CjV5uOFVstuBW0laFUWlGrTHgiaLWR8VwJt0EPScSl5Lz4RM8IiqmXbIUSbbw==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-navigation": {
|
||||
"version": "7.25.1",
|
||||
@@ -39175,11 +39246,10 @@
|
||||
}
|
||||
},
|
||||
"react-native-notifications": {
|
||||
"version": "4.1.3",
|
||||
"resolved": "https://registry.npmjs.org/react-native-notifications/-/react-native-notifications-4.1.3.tgz",
|
||||
"integrity": "sha512-A4SmRyfh2OlkptlJQvcQKkfnBKO1toUShmFplTkLXPNCqfpm/i4Fz+Uv+LzHSvbsU5U7EYf3JX9sfuyR06ZGPg==",
|
||||
"requires": {
|
||||
}
|
||||
"version": "4.3.1",
|
||||
"resolved": "https://registry.npmjs.org/react-native-notifications/-/react-native-notifications-4.3.1.tgz",
|
||||
"integrity": "sha512-A668d+Q0/VQRjmrh+LvDpc/REA8GXgwCijXDCIlDHGMK8enmrtdxY5OANQf1VM3hecf+fD0wYFw2uqL/ZR8jgg==",
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-passcode-status": {
|
||||
"version": "1.1.2",
|
||||
@@ -39190,8 +39260,7 @@
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/react-native-permissions/-/react-native-permissions-3.2.0.tgz",
|
||||
"integrity": "sha512-UPXxf2twjYL9vPI4HP2kT15AOTY489MhsNuyAgp+wJM2IRkkSVW6rO3k4WuSRL9ZmPhwkWb9bYjf8EEwRzZcXg==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-ratings": {
|
||||
"version": "8.0.4",
|
||||
@@ -39249,8 +39318,7 @@
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-3.3.2.tgz",
|
||||
"integrity": "sha512-yOwiiPJ1rk+/nfK13eafbpW6sKW0jOnsRem2C1LPJjM3tfTof6hlvV5eWHATye3XOpu2cJ7N+HdkUvUDGwFD2Q==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-screens": {
|
||||
"version": "3.10.2",
|
||||
@@ -39275,8 +39343,7 @@
|
||||
"version": "0.3.1",
|
||||
"resolved": "https://registry.npmjs.org/react-native-size-matters/-/react-native-size-matters-0.3.1.tgz",
|
||||
"integrity": "sha512-mKOfBLIBFBcs9br1rlZDvxD5+mAl8Gfr5CounwJtxI6Z82rGrMO+Kgl9EIg3RMVf3G855a85YVqHJL2f5EDRlw==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-slider": {
|
||||
"version": "0.11.0",
|
||||
@@ -39290,8 +39357,7 @@
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/react-native-startup-time/-/react-native-startup-time-2.0.0.tgz",
|
||||
"integrity": "sha512-tYruEDvwoVEOf+FMTTqp3aHNfA5ARWXXV+ar4wJBIQBdIlPEYDQWaYljOAV2dITuTsKAyPY2Q/N58gkKvGWIrA==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-svg": {
|
||||
"version": "12.1.1",
|
||||
@@ -39656,8 +39722,7 @@
|
||||
"version": "0.5.0",
|
||||
"resolved": "https://registry.npmjs.org/redux-batched-actions/-/redux-batched-actions-0.5.0.tgz",
|
||||
"integrity": "sha512-6orZWyCnIQXMGY4DUGM0oj0L7oYnwTACsfsru/J7r94RM3P9eS7SORGpr3LCeRCMoIMQcpfKZ7X4NdyFHBS8Eg==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"redux-mock-store": {
|
||||
"version": "1.5.4",
|
||||
@@ -39672,8 +39737,7 @@
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz",
|
||||
"integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"redux-persist-node-storage": {
|
||||
"version": "2.0.0",
|
||||
@@ -39702,8 +39766,7 @@
|
||||
"version": "2.4.1",
|
||||
"resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz",
|
||||
"integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"reflect.ownkeys": {
|
||||
"version": "0.2.0",
|
||||
@@ -40046,8 +40109,7 @@
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/rn-placeholder/-/rn-placeholder-3.0.3.tgz",
|
||||
"integrity": "sha512-EmVeLT8zDcTPilQZ2OHO/IiYUy2gApKGgbshDZBX0C4qxsn0cFATwgwOwyz8O7Vwg1Hul97Ci95hu7d6Js6XMQ==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"rst-selector-parser": {
|
||||
"version": "2.2.3",
|
||||
@@ -40363,8 +40425,7 @@
|
||||
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
|
||||
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"json-schema-traverse": {
|
||||
"version": "0.4.1",
|
||||
@@ -41371,14 +41432,15 @@
|
||||
}
|
||||
},
|
||||
"terser": {
|
||||
"version": "5.10.0",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
|
||||
"integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
|
||||
"version": "5.14.2",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
|
||||
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@jridgewell/source-map": "^0.3.2",
|
||||
"acorn": "^8.5.0",
|
||||
"commander": "^2.20.0",
|
||||
"source-map": "~0.7.2",
|
||||
"source-map-support": "~0.5.20"
|
||||
},
|
||||
"dependencies": {
|
||||
@@ -41388,13 +41450,6 @@
|
||||
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
|
||||
"dev": true,
|
||||
"peer": true
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.7.3",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
|
||||
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
|
||||
"dev": true,
|
||||
"peer": true
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -41431,8 +41486,7 @@
|
||||
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"json-schema-traverse": {
|
||||
"version": "0.4.1",
|
||||
@@ -42160,8 +42214,7 @@
|
||||
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"json-schema-traverse": {
|
||||
"version": "0.4.1",
|
||||
@@ -42435,8 +42488,7 @@
|
||||
"version": "7.5.6",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz",
|
||||
"integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"xcode": {
|
||||
"version": "3.0.1",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "mattermost-mobile",
|
||||
"version": "1.53.0",
|
||||
"version": "1.56.0",
|
||||
"description": "Mattermost Mobile with React Native",
|
||||
"repository": "git@github.com:mattermost/mattermost-mobile.git",
|
||||
"author": "Mattermost, Inc.",
|
||||
@@ -40,7 +40,7 @@
|
||||
"prop-types": "15.8.1",
|
||||
"react": "17.0.2",
|
||||
"react-intl": "2.8.0",
|
||||
"react-native": "0.67.2",
|
||||
"react-native": "0.67.5",
|
||||
"react-native-android-open-settings": "1.3.0",
|
||||
"react-native-animatable": "1.3.3",
|
||||
"react-native-button": "3.0.1",
|
||||
@@ -65,7 +65,7 @@
|
||||
"react-native-math-view": "3.9.5",
|
||||
"react-native-mmkv-storage": "0.6.11",
|
||||
"react-native-navigation": "7.25.1",
|
||||
"react-native-notifications": "4.1.3",
|
||||
"react-native-notifications": "4.3.1",
|
||||
"react-native-passcode-status": "1.1.2",
|
||||
"react-native-permissions": "3.2.0",
|
||||
"react-native-reanimated": "2.3.1",
|
||||
|
||||
@@ -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" />
|
||||
@@ -21,10 +21,19 @@ index abd988a..4ac4725 100644
|
||||
|
||||
</manifest>
|
||||
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java
|
||||
index db9eaba..af65d0e 100644
|
||||
index 90969b2..36a9a84 100644
|
||||
--- a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java
|
||||
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java
|
||||
@@ -100,7 +100,12 @@ public class RNNotificationsModule extends ReactContextBaseJavaModule implements
|
||||
@@ -63,7 +63,7 @@ public class RNNotificationsModule extends ReactContextBaseJavaModule implements
|
||||
@Override
|
||||
public void onNewIntent(Intent intent) {
|
||||
if (NotificationIntentAdapter.canHandleIntent(intent)) {
|
||||
- Bundle notificationData = intent.getExtras();
|
||||
+ Bundle notificationData = NotificationIntentAdapter.extractPendingNotificationDataFromIntent(intent);
|
||||
final IPushNotification notification = PushNotification.get(getReactApplicationContext().getApplicationContext(), notificationData);
|
||||
if (notification != null) {
|
||||
notification.onOpened();
|
||||
@@ -102,7 +102,18 @@ public class RNNotificationsModule extends ReactContextBaseJavaModule implements
|
||||
if(BuildConfig.DEBUG) Log.d(LOGTAG, "Native method invocation: postLocalNotification");
|
||||
final Bundle notificationProps = Arguments.toBundle(notificationPropsMap);
|
||||
final IPushNotification pushNotification = PushNotification.get(getReactApplicationContext().getApplicationContext(), notificationProps);
|
||||
@@ -35,28 +44,82 @@ index db9eaba..af65d0e 100644
|
||||
+ } else {
|
||||
+ pushNotification.onScheduleRequest(notificationId);
|
||||
+ }
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
@@ -109,6 +114,12 @@ public class RNNotificationsModule extends ReactContextBaseJavaModule implements
|
||||
notificationsDrawer.onNotificationClearRequest(notificationId);
|
||||
}
|
||||
|
||||
+ }
|
||||
+
|
||||
+ @ReactMethod
|
||||
+ public void cancelAllLocalNotifications() {
|
||||
+ IPushNotificationsDrawer notificationDrawer = PushNotificationsDrawer.get(getReactApplicationContext().getApplicationContext());
|
||||
+ notificationDrawer.onCancelAllLocalNotifications();
|
||||
+ }
|
||||
+
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
public void setCategories(ReadableArray categories) {
|
||||
|
||||
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsPackage.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsPackage.java
|
||||
index eadf41e..3279431 100644
|
||||
--- a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsPackage.java
|
||||
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsPackage.java
|
||||
@@ -15,6 +15,7 @@ import com.wix.reactnativenotifications.core.AppLifecycleFacade;
|
||||
import com.wix.reactnativenotifications.core.AppLifecycleFacadeHolder;
|
||||
import com.wix.reactnativenotifications.core.InitialNotificationHolder;
|
||||
import com.wix.reactnativenotifications.core.NotificationIntentAdapter;
|
||||
+import com.wix.reactnativenotifications.core.ReactAppLifecycleFacade;
|
||||
import com.wix.reactnativenotifications.core.notification.IPushNotification;
|
||||
import com.wix.reactnativenotifications.core.notification.PushNotification;
|
||||
import com.wix.reactnativenotifications.core.notification.PushNotificationProps;
|
||||
@@ -67,7 +68,12 @@ public class RNNotificationsPackage implements ReactPackage, AppLifecycleFacade.
|
||||
|
||||
@Override
|
||||
public void onActivityStarted(Activity activity) {
|
||||
- if (InitialNotificationHolder.getInstance().get() == null) {
|
||||
+ boolean isInitialized = false;
|
||||
+ if (AppLifecycleFacadeHolder.get() instanceof ReactAppLifecycleFacade) {
|
||||
+ isInitialized = AppLifecycleFacadeHolder.get().isReactInitialized();
|
||||
+ }
|
||||
+
|
||||
+ if (!isInitialized && InitialNotificationHolder.getInstance().get() == null) {
|
||||
callOnOpenedIfNeed(activity);
|
||||
}
|
||||
}
|
||||
@@ -96,8 +102,7 @@ public class RNNotificationsPackage implements ReactPackage, AppLifecycleFacade.
|
||||
Intent intent = activity.getIntent();
|
||||
if (NotificationIntentAdapter.canHandleIntent(intent)) {
|
||||
Context appContext = mApplication.getApplicationContext();
|
||||
- Bundle notificationData = NotificationIntentAdapter.cannotHandleTrampolineActivity(appContext) ?
|
||||
- NotificationIntentAdapter.extractPendingNotificationDataFromIntent(intent) : intent.getExtras();
|
||||
+ Bundle notificationData = NotificationIntentAdapter.extractPendingNotificationDataFromIntent(intent);
|
||||
final IPushNotification pushNotification = PushNotification.get(appContext, notificationData);
|
||||
if (pushNotification != null) {
|
||||
pushNotification.onOpened();
|
||||
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/NotificationIntentAdapter.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/NotificationIntentAdapter.java
|
||||
index 41b4824..4285ac5 100644
|
||||
--- a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/NotificationIntentAdapter.java
|
||||
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/NotificationIntentAdapter.java
|
||||
@@ -14,17 +14,9 @@ public class NotificationIntentAdapter {
|
||||
|
||||
@SuppressLint("UnspecifiedImmutableFlag")
|
||||
public static PendingIntent createPendingNotificationIntent(Context appContext, PushNotificationProps notification) {
|
||||
- if (cannotHandleTrampolineActivity(appContext)) {
|
||||
- Intent mainActivityIntent = appContext.getPackageManager().getLaunchIntentForPackage(appContext.getPackageName());
|
||||
- mainActivityIntent.putExtra(PUSH_NOTIFICATION_EXTRA_NAME, notification.asBundle());
|
||||
- TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(appContext);
|
||||
- taskStackBuilder.addNextIntentWithParentStack(mainActivityIntent);
|
||||
- return taskStackBuilder.getPendingIntent((int) System.currentTimeMillis(), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE);
|
||||
- } else {
|
||||
- Intent intent = new Intent(appContext, ProxyService.class);
|
||||
- intent.putExtra(PUSH_NOTIFICATION_EXTRA_NAME, notification.asBundle());
|
||||
- return PendingIntent.getService(appContext, (int) System.currentTimeMillis(), intent, PendingIntent.FLAG_ONE_SHOT);
|
||||
- }
|
||||
+ Intent intent = appContext.getPackageManager().getLaunchIntentForPackage(appContext.getPackageName());
|
||||
+ intent.putExtra(PUSH_NOTIFICATION_EXTRA_NAME, notification.asBundle());
|
||||
+ return PendingIntent.getActivity(appContext, (int) System.currentTimeMillis(), intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE);
|
||||
}
|
||||
|
||||
public static boolean cannotHandleTrampolineActivity(Context appContext) {
|
||||
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/helpers/ScheduleNotificationHelper.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/helpers/ScheduleNotificationHelper.java
|
||||
new file mode 100644
|
||||
index 0000000..dde4a2c
|
||||
index 0000000..433c754
|
||||
--- /dev/null
|
||||
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/helpers/ScheduleNotificationHelper.java
|
||||
@@ -0,0 +1,89 @@
|
||||
@@ -0,0 +1,91 @@
|
||||
+package com.wix.reactnativenotifications.core.helpers;
|
||||
+
|
||||
+import android.app.AlarmManager;
|
||||
@@ -97,13 +160,15 @@ index 0000000..dde4a2c
|
||||
+ Intent notificationIntent = new Intent(mContext, PushNotificationPublisher.class);
|
||||
+ notificationIntent.putExtra(ScheduleNotificationHelper.NOTIFICATION_ID, notificationId);
|
||||
+ notificationIntent.putExtras(bundle);
|
||||
+ return PendingIntent.getBroadcast(mContext, notificationId, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
+ return PendingIntent.getBroadcast(mContext, notificationId, notificationIntent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
+ }
|
||||
+
|
||||
+ public void schedulePendingNotificationIntent(PendingIntent intent, long fireDate) {
|
||||
+ AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
|
||||
+
|
||||
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||
+ alarmManager.set(AlarmManager.RTC_WAKEUP, fireDate, intent);
|
||||
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
+ alarmManager.setExact(AlarmManager.RTC_WAKEUP, fireDate, intent);
|
||||
+ } else {
|
||||
+ alarmManager.set(AlarmManager.RTC_WAKEUP, fireDate, intent);
|
||||
@@ -173,7 +238,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 54a5fb8..f38881e 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 +252,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 +271,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 +280,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 +320,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 +343,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 +352,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 +361,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 +372,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 +403,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
|
||||
@@ -350,7 +414,7 @@ index e22cd62..48aa1cd 100644
|
||||
+ void onCancelAllLocalNotifications();
|
||||
}
|
||||
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawer.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawer.java
|
||||
index a14089f..1262e6d 100644
|
||||
index a14089f..7aedafc 100644
|
||||
--- a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawer.java
|
||||
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notificationdrawer/PushNotificationsDrawer.java
|
||||
@@ -2,9 +2,15 @@ package com.wix.reactnativenotifications.core.notificationdrawer;
|
||||
@@ -369,10 +433,26 @@ index a14089f..1262e6d 100644
|
||||
|
||||
public class PushNotificationsDrawer implements IPushNotificationsDrawer {
|
||||
|
||||
@@ -62,4 +68,37 @@ public class PushNotificationsDrawer implements IPushNotificationsDrawer {
|
||||
@@ -49,17 +55,56 @@ public class PushNotificationsDrawer implements IPushNotificationsDrawer {
|
||||
public void onNotificationClearRequest(int id) {
|
||||
final NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
notificationManager.cancel(id);
|
||||
+ cancelScheduledNotification(String.valueOf(id));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNotificationClearRequest(String tag, int id) {
|
||||
final NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
notificationManager.cancel(tag, id);
|
||||
+ cancelScheduledNotification(String.valueOf(id));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAllNotificationsClearRequest() {
|
||||
final NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
notificationManager.cancelAll();
|
||||
}
|
||||
+ cancelAllScheduledNotifications();
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void onCancelAllLocalNotifications() {
|
||||
@@ -393,6 +473,9 @@ index a14089f..1262e6d 100644
|
||||
+ Log.i(LOGTAG, "Cancelling scheduled notification: " + notificationId);
|
||||
+
|
||||
+ ScheduleNotificationHelper helper = ScheduleNotificationHelper.getInstance(mContext);
|
||||
+ if (!helper.getPreferencesKeys().contains(notificationId)) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ // Remove it from the alarm manger schedule
|
||||
+ Bundle bundle = new Bundle();
|
||||
@@ -405,7 +488,7 @@ index a14089f..1262e6d 100644
|
||||
+ // Remove it from the notification center
|
||||
+ final NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
+ notificationManager.cancel(Integer.parseInt(notificationId));
|
||||
+ }
|
||||
}
|
||||
}
|
||||
diff --git a/node_modules/react-native-notifications/lib/dist/DTO/Notification.d.ts b/node_modules/react-native-notifications/lib/dist/DTO/Notification.d.ts
|
||||
index 7b2b3b1..3a2f872 100644
|
||||
@@ -430,7 +513,7 @@ index ad7fc1a..a04ec6b 100644
|
||||
get title() {
|
||||
return this.payload.title;
|
||||
diff --git a/node_modules/react-native-notifications/lib/dist/Notifications.d.ts b/node_modules/react-native-notifications/lib/dist/Notifications.d.ts
|
||||
index 6e49fd4..1d94217 100644
|
||||
index 6e49fd4..7deeea8 100644
|
||||
--- a/node_modules/react-native-notifications/lib/dist/Notifications.d.ts
|
||||
+++ b/node_modules/react-native-notifications/lib/dist/Notifications.d.ts
|
||||
@@ -37,6 +37,10 @@ export declare class NotificationsRoot {
|
||||
@@ -439,13 +522,13 @@ index 6e49fd4..1d94217 100644
|
||||
cancelLocalNotification(notificationId: number): void;
|
||||
+ /**
|
||||
+ * cancelAllLocalNotifications
|
||||
+ */
|
||||
+ cancelAllLocalNotifications(): void;
|
||||
+ */
|
||||
+ cancelAllLocalNotifications(): void;
|
||||
/**
|
||||
* removeAllDeliveredNotifications
|
||||
*/
|
||||
diff --git a/node_modules/react-native-notifications/lib/dist/Notifications.js b/node_modules/react-native-notifications/lib/dist/Notifications.js
|
||||
index 44ab53f..8000701 100644
|
||||
index 44ab53f..4ff06a1 100644
|
||||
--- a/node_modules/react-native-notifications/lib/dist/Notifications.js
|
||||
+++ b/node_modules/react-native-notifications/lib/dist/Notifications.js
|
||||
@@ -55,6 +55,12 @@ class NotificationsRoot {
|
||||
@@ -454,29 +537,18 @@ index 44ab53f..8000701 100644
|
||||
}
|
||||
+ /**
|
||||
+ * cancelAllLocalNotifications
|
||||
+ */
|
||||
+ cancelAllLocalNotifications() {
|
||||
+ */
|
||||
+ cancelAllLocalNotifications() {
|
||||
+ this.commands.cancelAllLocalNotifications();
|
||||
+ }
|
||||
+ }
|
||||
/**
|
||||
* 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 afd5c73..6036dda 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 @@
|
||||
@@ -87,7 +87,7 @@
|
||||
for (UNNotification *notification in notifications) {
|
||||
[formattedNotifications addObject:[RCTConvert UNNotificationPayload:notification]];
|
||||
}
|
||||
@@ -485,8 +557,51 @@ index 7452523..a093262 100644
|
||||
}];
|
||||
}
|
||||
|
||||
diff --git a/node_modules/react-native-notifications/lib/ios/RNNotificationEventHandler.m b/node_modules/react-native-notifications/lib/ios/RNNotificationEventHandler.m
|
||||
index 5c8dd0b..1c7e575 100644
|
||||
--- a/node_modules/react-native-notifications/lib/ios/RNNotificationEventHandler.m
|
||||
+++ b/node_modules/react-native-notifications/lib/ios/RNNotificationEventHandler.m
|
||||
@@ -6,11 +6,13 @@
|
||||
|
||||
@implementation RNNotificationEventHandler {
|
||||
RNNotificationsStore* _store;
|
||||
+ NSDate* wakeTime;
|
||||
}
|
||||
|
||||
- (instancetype)initWithStore:(RNNotificationsStore *)store {
|
||||
self = [super init];
|
||||
_store = store;
|
||||
+ wakeTime = [[NSDate alloc] init];
|
||||
return self;
|
||||
}
|
||||
|
||||
@@ -31,6 +33,15 @@
|
||||
- (void)didReceiveNotificationResponse:(UNNotificationResponse *)response completionHandler:(void (^)(void))completionHandler {
|
||||
[_store setActionCompletionHandler:completionHandler withCompletionKey:response.notification.request.identifier];
|
||||
[RNEventEmitter sendEvent:RNNotificationOpened body:[RNNotificationParser parseNotificationResponse:response]];
|
||||
+ dispatch_async(dispatch_get_main_queue(), ^{
|
||||
+ NSDate* now = [[NSDate alloc] init];
|
||||
+ double interval = [now timeIntervalSinceDate:self->wakeTime];
|
||||
+ BOOL background = [[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground;
|
||||
+ NSDictionary* userInfo = response.notification.request.content.userInfo;
|
||||
+ if (interval < 1.0 && !background) {
|
||||
+ [self->_store setInitialNotification:userInfo];
|
||||
+ }
|
||||
+ });
|
||||
}
|
||||
|
||||
- (void)didReceiveBackgroundNotification:(NSDictionary *)userInfo withCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
|
||||
@@ -38,7 +49,7 @@
|
||||
NSString *uuid = [[NSUUID UUID] UUIDString];
|
||||
__block BOOL completionHandlerCalled = NO;
|
||||
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
|
||||
- [_store setBackgroundActionCompletionHandler:^(UIBackgroundFetchResult result) {
|
||||
+ [self->_store setBackgroundActionCompletionHandler:^(UIBackgroundFetchResult result) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
completionHandler(result);
|
||||
});
|
||||
diff --git a/node_modules/react-native-notifications/lib/src/Notifications.ts b/node_modules/react-native-notifications/lib/src/Notifications.ts
|
||||
index 0848f6d..ceb271d 100644
|
||||
index 0848f6d..1f945b7 100644
|
||||
--- a/node_modules/react-native-notifications/lib/src/Notifications.ts
|
||||
+++ b/node_modules/react-native-notifications/lib/src/Notifications.ts
|
||||
@@ -80,6 +80,13 @@ export class NotificationsRoot {
|
||||
@@ -495,10 +610,10 @@ index 0848f6d..ceb271d 100644
|
||||
|
||||
+ /**
|
||||
+ * cancelAllLocalNotifications
|
||||
+ */
|
||||
+ public cancelAllLocalNotifications() {
|
||||
+ */
|
||||
+ public cancelAllLocalNotifications() {
|
||||
+ this.commands.cancelAllLocalNotifications();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/**
|
||||
* removeAllDeliveredNotifications
|
||||
@@ -101,9 +101,7 @@ jest.doMock('react-native', () => {
|
||||
|
||||
const Linking = {
|
||||
...RNLinking,
|
||||
openURL: jest.fn().mockImplementation(
|
||||
() => Promise.resolve(''),
|
||||
),
|
||||
openURL: jest.fn(),
|
||||
};
|
||||
|
||||
return Object.setPrototypeOf({
|
||||
|
||||
2
types/modules/react-native-webrtc.d.ts
vendored
2
types/modules/react-native-webrtc.d.ts
vendored
@@ -168,7 +168,7 @@ declare module 'react-native-webrtc' {
|
||||
}
|
||||
|
||||
export interface RTCPeerConnectionConfiguration {
|
||||
iceServers: ConfigurationParamWithUrls[] | ConfigurationParamWithUrl[];
|
||||
iceServers: Array<ConfigurationParamWithUrls | ConfigurationParamWithUrl>;
|
||||
iceTransportPolicy?: 'all' | 'relay' | 'nohost' | 'none' | undefined;
|
||||
bundlePolicy?: 'balanced' | 'max-compat' | 'max-bundle' | undefined;
|
||||
rtcpMuxPolicy?: 'negotiate' | 'require' | undefined;
|
||||
|
||||
Reference in New Issue
Block a user