Compare commits

...

57 Commits
v1.54.0 ... v1

Author SHA1 Message Date
Guillermo Vayá
11be4d2b28 Update branches names in v1 (#6773) 2022-11-17 19:36:18 +02:00
Amy Blais
90323ee4a0 Revert "Update ESR version (#6701)" (#6757) 2022-11-11 05:58:50 +02:00
Elias Nahum
99abe48192 reset version number to 1.56.0 and build to 436 2022-11-08 13:42:35 +02:00
Elias Nahum
db86bbc42b Bump build to 436 (#6746)
* Revert "Downgrade mmkv and bump to 435 (#6742)"

This reverts commit 66b469bb31.

* Revert "Bump Version to 1.56.0 and build to 431 (#6723)"

This reverts commit fdee027b4a.

* Revert "[V1] update deps (#6666)"

This reverts commit 8137241f12.

* bump build to 436

* update snapshots
2022-11-08 10:19:25 +02:00
Elias Nahum
66b469bb31 Downgrade mmkv and bump to 435 (#6742) 2022-11-07 13:00:58 +02:00
Elias Nahum
f80b49a6f0 v1 Bump build to 344 (#6740) 2022-11-07 10:50:02 +02:00
Elias Nahum
7fc17021a2 Bump app build number to 433 (#6736) 2022-11-05 23:29:23 +02:00
Elias Nahum
c4a47ea31d fix v1 builds 2022-11-05 23:19:34 +02:00
Elias Nahum
04a50f79ea [v1] fix Fastfile for android release (#6725)
* fix Fastfile for android release

* bump gradle heap memory
2022-11-02 12:20:41 +02:00
Elias Nahum
fdee027b4a Bump Version to 1.56.0 and build to 431 (#6723)
* Bump app version number to  1.56.0

* Bump app build number to  431
2022-11-02 09:49:48 +02:00
Amy Blais
525269a0a1 Update ESR version (#6701) 2022-11-02 09:34:12 +02:00
Weblate
eb862d7fd4 Added translation using Weblate (Croatian) 2022-10-27 13:26:48 +03:00
kaakaa
355b11ea25 Translated using Weblate (Japanese)
Currently translated at 100.0% (791 of 791 strings)

Translation: mattermost-languages-shipped/mattermost-mobile
Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile_master/ja/
2022-10-27 13:26:48 +03:00
Angel Mendez Cano
f4b59a2163 Translated using Weblate (Spanish)
Currently translated at 100.0% (791 of 791 strings)

Translation: mattermost-languages-shipped/mattermost-mobile
Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile_master/es/

Translated using Weblate (Spanish)

Currently translated at 100.0% (791 of 791 strings)

Translation: mattermost-languages-shipped/mattermost-mobile
Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile_master/es/
2022-10-27 13:26:48 +03:00
Elias Nahum
5dd2098e00 Translated using Weblate (Spanish)
Currently translated at 100.0% (791 of 791 strings)

Translation: mattermost-languages-shipped/mattermost-mobile
Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile_master/es/
2022-10-27 13:26:48 +03:00
Tom De Moor
12133416ac Translated using Weblate (Dutch)
Currently translated at 100.0% (791 of 791 strings)

Translation: mattermost-languages-shipped/mattermost-mobile
Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile_master/nl/
2022-10-27 13:26:48 +03:00
Rohitesh Gupta
8784c8d637 Updated CodeQL to use latest version (#6687)
* Created CodeQL config

* Updated CodeQL to use latest version
2022-10-18 09:59:39 -03:00
Zef Hemel
740306291d Merge pull request #6679 from weblate/weblate-mattermost-mattermost-mobile_master
Translations update from Mattermost Weblate
2022-10-14 10:22:30 +02:00
Elias Nahum
8137241f12 [V1] update deps (#6666)
* v1 update dependencies

* fix eslint

* update ci node version

* Fix detox and jest expect imports

* update gradle memory settings

* QA feedback

* android executor xlarge

Co-authored-by: Joseph Baylon <joseph.baylon@mattermost.com>
2022-10-13 08:40:43 -03:00
Dmitriy Danilov
e0c2578c37 Translated using Weblate (Ukrainian)
Currently translated at 78.8% (624 of 791 strings)

Translation: mattermost-languages-shipped/mattermost-mobile
Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile_master/uk/
2022-10-04 01:48:02 +02:00
Christopher Poile
ccdde858c7 handle candidate message (#6662) 2022-10-03 13:10:23 -04:00
Zef Hemel
d31676f6b7 Merge pull request #6649 from weblate/weblate-mattermost-mattermost-mobile_master
Translations update from Mattermost Weblate
2022-09-21 11:47:18 +02:00
Ji-Hyeon Gim
e873f84a24 Translated using Weblate (Korean)
Currently translated at 99.8% (790 of 791 strings)

Translation: mattermost-languages-shipped/mattermost-mobile
Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile_master/ko/
2022-09-19 18:03:36 +02:00
Zef Hemel
ba5b3eebef Merge pull request #6640 from weblate/weblate-mattermost-mattermost-mobile_master
Translations update from Mattermost Weblate
2022-09-13 10:39:27 +02:00
MArtin Johnson
7b8313929e Translated using Weblate (Swedish)
Currently translated at 100.0% (791 of 791 strings)

Translation: mattermost-languages-shipped/mattermost-mobile
Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile_master/sv/
2022-09-10 01:41:58 +02:00
Zef Hemel
54461aa8da Merge pull request #6602 from weblate/weblate-mattermost-mattermost-mobile_master
Translations update from Mattermost Weblate
2022-09-08 08:42:53 +02:00
Elias Nahum
149ebd6a15 Bump version to 1.55.1 build 423 (#6625)
* Bump app version number to  1.55.1

* Bump app build number to  423
2022-09-07 09:09:03 -03:00
Tom De Moor
2534685fdc Translated using Weblate (Dutch)
Currently translated at 100.0% (791 of 791 strings)

Translation: mattermost-languages-shipped/mattermost-mobile
Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile_master/nl/
2022-09-05 18:03:29 +02:00
jprusch
44e69a421f Translated using Weblate (German)
Currently translated at 99.8% (790 of 791 strings)

Translation: mattermost-languages-shipped/mattermost-mobile
Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile_master/de/

Translated using Weblate (German)

Currently translated at 100.0% (791 of 791 strings)

Translation: mattermost-languages-shipped/mattermost-mobile
Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile_master/de/

Translated using Weblate (German)

Currently translated at 100.0% (791 of 791 strings)

Translation: mattermost-languages-shipped/mattermost-mobile
Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile_master/de/
2022-09-05 18:03:28 +02:00
Kaya Zeren
cd01c46046 Translated using Weblate (Turkish)
Currently translated at 100.0% (791 of 791 strings)

Translation: mattermost-languages-shipped/mattermost-mobile
Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile_master/tr/

Translated using Weblate (Turkish)

Currently translated at 100.0% (791 of 791 strings)

Translation: mattermost-languages-shipped/mattermost-mobile
Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile_master/tr/
2022-09-05 18:03:28 +02:00
Євгеній Янчевський
2cbee12d11 Translated using Weblate (Ukrainian)
Currently translated at 76.3% (604 of 791 strings)

Translation: mattermost-languages-shipped/mattermost-mobile
Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile_master/uk/
2022-09-05 18:03:28 +02:00
Michael Kochell
c1936040c3 MM-33993 Allow apps form and interactive dialogs to clear select fields (#5398)
* allow apps form and int dialogs to clear select fields

* don't show x if the field is disabled

* change down chevron to right chevron

* increase padding around close x to increase touch area

* positioning

* remove chevron and divider

* use hitSlop instead of padding. fix position of x

* lint

* types

* update type

* lint

* make onClear optional

* optional chaining

* set multiselect value to empty array on clear

* include null in type

* useCallback improvement

* fix clearing multi-selected items state issue

* fix clearing multi-selected items state issue

* lint

Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
2022-08-23 12:33:48 -04:00
Guillermo Vayá
6201270029 Merge pull request #6577 from weblate/weblate-mattermost-mattermost-mobile_master
Translations update from Mattermost Weblate
2022-08-17 17:59:26 +02:00
Carrie Warner
d13a787049 Deleted translation using Weblate (Catalan) 2022-08-12 23:09:28 +02:00
Daniel Espino García
19c6ae86eb Fix convert channel to private (#6568) 2022-08-12 17:09:23 -04:00
Elias Nahum
6119ac46e1 Bump app build number to 418 (#6564) 2022-08-11 08:52:15 -04:00
Jason Frerich
0165e2ab1f [MM-38103] initialize select fields with the value (#5640)
Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
2022-08-04 14:28:27 -05:00
Jean-Paul Manuel
8cbf57781b [MM-41749] Fixed SettingsSidebar component added back to navigation stack (#6503)
Co-authored-by: Jean-Paul Manuel <jean-paulm@yoyowallet.com>
2022-08-04 09:30:06 -04:00
dependabot[bot]
23785709a8 Bump terser from 5.10.0 to 5.14.2 (#6492) 2022-08-03 23:09:55 -04:00
dependabot[bot]
e37ee22a1b Bump moment from 2.29.2 to 2.29.4 (#6541)
Bumps [moment](https://github.com/moment/moment) from 2.29.2 to 2.29.4.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.29.2...2.29.4)

---
updated-dependencies:
- dependency-name: moment
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-03 14:01:28 -04:00
dependabot[bot]
7461acb01a Bump moment from 2.29.2 to 2.29.4 in /detox (#6540)
Bumps [moment](https://github.com/moment/moment) from 2.29.2 to 2.29.4.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.29.2...2.29.4)

---
updated-dependencies:
- dependency-name: moment
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-03 14:00:48 -04:00
Elias Nahum
c4620963fa Bump version to 1.55.0 and build to 416 (#6538)
* Bump app version number to  1.55.0

* Bump app build number to  416
2022-08-03 13:53:01 -04:00
Zef Hemel
a26e66d0e2 Merge pull request #6527 from weblate/weblate-mattermost-mattermost-mobile_master
Translations update from Mattermost Weblate
2022-08-02 14:52:44 +02:00
Weblate
b6b77411f0 Added translation using Weblate (Catalan) 2022-07-29 19:41:53 +02:00
t0mm0
cd4dc9528b Accept text shared with image on Android (#6324) 2022-07-29 19:41:48 +02:00
Zef Hemel
8e4f19f3ea Update README to point to gekidou (#6509)
* Update README to point to gekidou

Few people realize that active development moved to that branch, so let's but a giant notice at the top of the readme.

* Update README.md

Co-authored-by: Elias Nahum <nahumhbl@gmail.com>

Co-authored-by: Elias Nahum <nahumhbl@gmail.com>
2022-07-26 08:53:27 -04:00
Pierre JENICOT
7ccae88e6f Translated using Weblate (French)
Currently translated at 100.0% (791 of 791 strings)

Translation: mattermost-languages-shipped/mattermost-mobile
Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile_master/fr/
2022-07-26 15:53:15 +03:00
Tom De Moor
2234988b72 Deleted translation using Weblate (Vietnamese) 2022-07-26 15:53:15 +03:00
Weblate
94cfd0a74b Added translation using Weblate (Vietnamese) 2022-07-26 15:53:15 +03:00
Claudio Costa
9c2b5133ab [MM-43838] Calls: WebSocket reconnection support (#6497)
* WebSocket reconnection support

* Simplify

* Reposition code

* Return early if already closed
2022-07-25 18:19:55 +02:00
Christopher Poile
c1ce9260b7 handle peer destroyed error gracefully (#6479) 2022-07-21 10:49:10 -04:00
Zef Hemel
b0f6968d5c Merge pull request #6467 from weblate/weblate-mattermost-mattermost-mobile_master
Translations update from Mattermost Weblate
2022-07-12 11:41:43 +02:00
Tóth Csaba // Online ERP Hungary Kft
64a1a6838e Translated using Weblate (Hungarian)
Currently translated at 100.0% (791 of 791 strings)

Translation: mattermost-languages-shipped/mattermost-mobile
Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile_master/hu/
2022-07-11 12:03:16 +02:00
Ji-Hyeon Gim
a917d116b5 Translated using Weblate (Korean)
Currently translated at 100.0% (791 of 791 strings)

Translation: mattermost-languages-shipped/mattermost-mobile
Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile_master/ko/
2022-07-11 13:03:12 +03:00
dependabot[bot]
4deaf8cb21 Bump shell-quote from 1.7.2 to 1.7.3 in /detox (#6445)
Bumps [shell-quote](https://github.com/substack/node-shell-quote) from 1.7.2 to 1.7.3.
- [Release notes](https://github.com/substack/node-shell-quote/releases)
- [Changelog](https://github.com/substack/node-shell-quote/blob/master/CHANGELOG.md)
- [Commits](https://github.com/substack/node-shell-quote/compare/v1.7.2...1.7.3)

---
updated-dependencies:
- dependency-name: shell-quote
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-30 09:15:00 -04:00
Elias Nahum
580c653704 Bump app version to 1.54.0 build 410 (#6444)
* Bump app version number to  1.54.0

* Bump app build number to  410
2022-06-30 09:06:20 -04:00
Claudio Costa
ed6daffa0c [MM-45001] Add support for generating short-lived TURN credentials (#6404)
* Generate TURN credentials if needed

* Reduce calls to getState
2022-06-30 10:06:21 +02:00
65 changed files with 1789 additions and 1107 deletions

View File

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

@@ -0,0 +1,13 @@
name: "CodeQL config"
query-filters:
- exclude:
problem.severity:
- warning
- recommendation
- exclude:
id: js/insecure-randomness
paths-ignore:
- test
- '**/*.test.*'

View File

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

@@ -42,6 +42,8 @@ ios/Pods
.gradle
local.properties
*.iml
*.hprof
.cxx/
android/app/bin
android/app/build
android/build

View File

@@ -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
[![Mattermost](https://user-images.githubusercontent.com/7205829/136108314-75cd2e1f-4147-4cfa-a16c-9b3b0313ea25.png)](https://mattermost.com)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

View 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 &params) {
// 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

View 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 &params);
} // namespace react
} // namespace facebook

View File

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

View File

@@ -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 &params) 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

View 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

View File

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

View File

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

Binary file not shown.

View File

@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip

269
android/gradlew vendored
View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

@@ -0,0 +1 @@
{}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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": "Сповіщення ",

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

View File

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

View File

@@ -1,5 +1,5 @@
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/AndroidManifest.xml b/node_modules/react-native-notifications/lib/android/app/src/main/AndroidManifest.xml
index abd988a..4ac4725 100644
index 24cd226..4bfacba 100644
--- a/node_modules/react-native-notifications/lib/android/app/src/main/AndroidManifest.xml
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
@@ -10,7 +10,7 @@ index abd988a..4ac4725 100644
<application>
<!--
@@ -22,6 +23,9 @@
@@ -23,6 +24,9 @@
android:name=".fcm.FcmInstanceIdRefreshHandlerService"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE" />
@@ -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

View File

@@ -101,9 +101,7 @@ jest.doMock('react-native', () => {
const Linking = {
...RNLinking,
openURL: jest.fn().mockImplementation(
() => Promise.resolve(''),
),
openURL: jest.fn(),
};
return Object.setPrototypeOf({

View File

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