[Gekidou] update dependencies & use node 16 with npm 7 (#5475)

* [Gekidou] update dependencies & use node 16 with npm 7

* add npm7 circleCI changes

* use react-intl 5.17.7

* fix migration error type
This commit is contained in:
Elias Nahum 2021-06-22 18:52:58 -04:00 committed by GitHub
parent 3b9fd5c03a
commit 10bfc9d604
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
21 changed files with 51914 additions and 12854 deletions

View file

@ -1,6 +1,7 @@
version: 2.1
orbs:
owasp: entur/owasp@0.0.10
node: circleci/node@4.5.1
executors:
android:
@ -23,7 +24,7 @@ executors:
NODE_ENV: production
BABEL_ENV: production
macos:
xcode: "12.0.0"
xcode: "12.1.0"
working_directory: ~/mattermost-mobile
shell: /bin/bash --login -o pipefail
@ -91,12 +92,15 @@ commands:
npm-dependencies:
description: "Get JavaScript dependencies"
steps:
- node/install:
node-version: '16.2.0'
install-npm: false
- restore_cache:
name: Restore npm cache
key: v2-npm-{{ checksum "package.json" }}-{{ arch }}
- run:
name: Getting JavaScript dependencies
command: NODE_ENV=development npm install --ignore-scripts
command: NODE_ENV=development npm ci --ignore-scripts
- save_cache:
name: Save npm cache
key: v2-npm-{{ checksum "package.json" }}-{{ arch }}
@ -255,7 +259,7 @@ jobs:
steps:
# Taken from https://github.com/entur/owasp-orb/blob/master/src/%40orb.yml#L349-L361
- owasp/generate_cache_keys:
cache_key: commmandline-default-cache-key-v6
cache_key: commmandline-default-cache-key-v7
- owasp/restore_owasp_cache
- run:
name: Update OWASP Dependency-Check Database
@ -455,6 +459,10 @@ workflows:
build:
jobs:
- test
# - check-deps:
# context: sast-webhook
# requires:
# - test
- build-android-release:
context: mattermost-mobile-android-release
@ -546,14 +554,14 @@ workflows:
- test
filters:
branches:
only: /^build-pr-.*/
only: /^(build|android)-pr-.*/
- build-ios-pr:
context: mattermost-mobile-ios-pr
requires:
- test
filters:
branches:
only: /^build-pr-.*/
only: /^(build|ios)-pr-.*/
- build-android-unsigned:
context: mattermost-mobile-unsigned
@ -583,6 +591,7 @@ workflows:
- /^build-\d+$/
- /^build-ios-\d+$/
- /^build-ios-beta-\d+$/
- /^build-ios-sim-\d+$/
- github-release:
context: mattermost-mobile-unsigned

View file

@ -26,7 +26,8 @@ import {getActiveServer, getServer} from '@queries/app/servers';
import {deleteIOSDatabase} from '@utils/mattermost_managed';
import {hashCode} from '@utils/security';
import type {AppDatabase, CreateServerDatabaseArgs, MigrationEvents, Models, RegisterServerDatabaseArgs, ServerDatabase, ServerDatabases} from '@typings/database/database';
import type {MigrationEvents} from '@nozbe/watermelondb/adapters/sqlite';
import type {AppDatabase, CreateServerDatabaseArgs, Models, RegisterServerDatabaseArgs, ServerDatabase, ServerDatabases} from '@typings/database/database';
import {DatabaseType} from '@typings/database/enums';
import type IServers from '@typings/database/models/app/servers';
@ -300,12 +301,12 @@ class DatabaseManager {
dbName,
});
},
onStarted: () => {
onStart: () => {
return DeviceEventEmitter.emit(MIGRATION_EVENTS.MIGRATION_STARTED, {
dbName,
});
},
onFailure: (error) => {
onError: (error) => {
return DeviceEventEmitter.emit(MIGRATION_EVENTS.MIGRATION_ERROR, {
dbName,
error,

View file

@ -2,7 +2,7 @@
// See LICENSE.txt for license information.
import {Database, Q} from '@nozbe/watermelondb';
import SQLiteAdapter from '@nozbe/watermelondb/adapters/sqlite';
import SQLiteAdapter, {MigrationEvents} from '@nozbe/watermelondb/adapters/sqlite';
import logger from '@nozbe/watermelondb/utils/common/logger';
import {DeviceEventEmitter, Platform} from 'react-native';
import {FileSystem} from 'react-native-unimodules';
@ -25,7 +25,7 @@ import {getActiveServer, getServer} from '@queries/app/servers';
import {deleteIOSDatabase, getIOSAppGroupDetails} from '@utils/mattermost_managed';
import {hashCode} from '@utils/security';
import type {AppDatabase, CreateServerDatabaseArgs, RegisterServerDatabaseArgs, MigrationEvents, Models, ServerDatabase, ServerDatabases} from '@typings/database/database';
import type {AppDatabase, CreateServerDatabaseArgs, RegisterServerDatabaseArgs, Models, ServerDatabase, ServerDatabases} from '@typings/database/database';
import {DatabaseType} from '@typings/database/enums';
import type IServers from '@typings/database/models/app/servers';
@ -362,12 +362,12 @@ class DatabaseManager {
dbName,
});
},
onStarted: () => {
onStart: () => {
return DeviceEventEmitter.emit(MIGRATION_EVENTS.MIGRATION_STARTED, {
dbName,
});
},
onFailure: (error) => {
onError: (error: Error) => {
return DeviceEventEmitter.emit(MIGRATION_EVENTS.MIGRATION_ERROR, {
dbName,
error,

View file

@ -7,7 +7,9 @@ import {getLocales} from 'react-native-localize';
import en from '@assets/i18n/en.json';
const deviceLocale = getLocales()[0].languageCode;
import availableLanguages from './languages';
const deviceLocale = getLocales()[0].languageTag;
export const DEFAULT_LOCALE = deviceLocale;
function loadTranslation(locale?: string) {
@ -26,6 +28,16 @@ function loadTranslation(locale?: string) {
translations = require('@assets/i18n/de.json');
momentData = require('moment/locale/de');
break;
case 'en-AU':
if (Platform.OS === 'android') {
require('@formatjs/intl-pluralrules/locale-data/en');
require('@formatjs/intl-numberformat/locale-data/en');
require('@formatjs/intl-datetimeformat/locale-data/en');
}
translations = require('@assets/i18n/en_AU.json');
momentData = require('moment/locale/en-au');
break;
case 'es':
if (Platform.OS === 'android') {
require('@formatjs/intl-pluralrules/locale-data/es');
@ -187,6 +199,12 @@ function loadChinesePolyfills() {
}
}
export function getLocaleFromLanguage(lang: string) {
const languageCode = lang.split('-')[0];
const locale = availableLanguages[lang] || languageCode;
return locale;
}
export function resetMomentLocale() {
moment.locale(DEFAULT_LOCALE);
}
@ -195,7 +213,8 @@ export function getTranslations(locale?: string) {
return loadTranslation(locale);
}
export function getLocalizedMessage(locale: string, id: string) {
export function getLocalizedMessage(lang: string, id: string) {
const locale = getLocaleFromLanguage(lang);
const translations = getTranslations(locale);
return translations[id];

29
app/i18n/languages.ts Normal file
View file

@ -0,0 +1,29 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import keyMirror from '@utils/key_mirror';
const languages: Record<string, string> = keyMirror({
bg: null,
de: null,
en: null,
'en-AU': null,
es: null,
fr: null,
hu: null,
it: null,
ja: null,
ko: null,
nl: null,
pl: null,
'pt-BR': null,
ro: null,
ru: null,
sv: null,
tr: null,
uk: null,
'zh-CN': null,
'zh-TW': null,
});
export default languages;

View file

@ -1,12 +1,12 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {useManagedConfig} from '@mattermost/react-native-emm';
import React, {useState} from 'react';
import {useIntl} from 'react-intl';
import {Client4} from '@client/rest';
import {SSO as SSOEnum} from '@constants';
import {useManagedConfig} from '@mattermost/react-native-emm';
import {scheduleExpiredNotification} from '@requests/remote/push_notification';
import {ssoLogin} from '@requests/remote/user';
import {resetToChannel} from '@screens/navigation';

700
assets/base/i18n/en_AU.json Normal file
View file

@ -0,0 +1,700 @@
{
"about.date": "Build Date:",
"about.enterpriseEditionLearn": "Learn more about Enterprise Edition at ",
"about.enterpriseEditionSt": "Modern communication from behind your firewall.",
"about.enterpriseEditione1": "Enterprise Edition",
"about.hash": "Build Hash:",
"about.hashee": "EE Build Hash:",
"about.teamEditionLearn": "Join the Mattermost community at ",
"about.teamEditionSt": "All your team communication in one place, instantly searchable and accessible anywhere.",
"about.teamEditiont0": "Team Edition",
"about.teamEditiont1": "Enterprise Edition",
"about.title": "About {appTitle}",
"announcment_banner.dont_show_again": "Don't show again",
"api.channel.add_member.added": "{addedUsername} added to the channel by {username}.",
"apps.error": "Error: {error}",
"apps.error.command.field_missing": "Required fields missing: `{fieldName}`.",
"apps.error.command.unknown_channel": "Unknown channel for field `{fieldName}`: `{option}`.",
"apps.error.command.unknown_option": "Unknown option for field `{fieldName}`: `{option}`.",
"apps.error.command.unknown_user": "Unknown user for field `{fieldName}`: `{option}`.",
"apps.error.form.no_call": "`call` is not defined.",
"apps.error.form.no_form": "`form` is not defined.",
"apps.error.form.no_lookup_call": "performLookupCall props.call is not defined",
"apps.error.form.refresh": "There has been an error fetching the select fields. Contact the app developer. Details: {details}",
"apps.error.form.refresh_no_refresh": "Called refresh on no refresh field.",
"apps.error.form.submit.pretext": "There has been an error submitting the modal. Contact the app developer. Details: {details}",
"apps.error.lookup.error_preparing_request": "Error preparing lookup request: {errorMessage}",
"apps.error.parser": "Parsing error: {error}",
"apps.error.parser.empty_value": "empty values are not allowed",
"apps.error.parser.missing_binding": "Missing command bindings.",
"apps.error.parser.missing_call": "Missing binding call.",
"apps.error.parser.missing_field_value": "Field value is missing.",
"apps.error.parser.missing_quote": "Matching double quote expected before end of input.",
"apps.error.parser.missing_tick": "Matching tick quote expected before end of input.",
"apps.error.parser.multiple_equal": "Multiple `=` signs are not allowed.",
"apps.error.parser.no_argument_pos_x": "Unable to identify argument.",
"apps.error.parser.no_bindings": "No command bindings.",
"apps.error.parser.no_match": "`{command}`: No matching command found in this workspace.",
"apps.error.parser.no_slash_start": "Command must start with a `/`.",
"apps.error.parser.unexpected_error": "Unexpected error.",
"apps.error.parser.unexpected_flag": "Command does not accept flag `{flagName}`.",
"apps.error.parser.unexpected_state": "Unreachable: Unexpected state in matchBinding: `{state}`.",
"apps.error.parser.unexpected_whitespace": "Unreachable: unexpected whitespace.",
"apps.error.responses.form.no_form": "Response type is `form`, but no form was included in response.",
"apps.error.responses.navigate.no_submit": "Response type is `navigate`, but the call was not a submission.",
"apps.error.responses.navigate.no_url": "Response type is `navigate`, but no URL was included in response.",
"apps.error.responses.unexpected_error": "Received an unexpected error.",
"apps.error.responses.unexpected_type": "App response type was not expected. Response type: {type}.",
"apps.error.responses.unknown_type": "App response type not supported. Response type: {type}.",
"apps.error.unknown": "An unknown error occurred.",
"apps.suggestion.dynamic.error": "Dynamic select error",
"apps.suggestion.errors.parser_error": "Parsing error",
"apps.suggestion.no_dynamic": "No data was returned for dynamic suggestions",
"apps.suggestion.no_static": "No matching options.",
"apps.suggestion.no_suggestion": "No matching suggestions.",
"archivedChannelMessage": "You are viewing an **archived channel**. New messages cannot be posted.",
"center_panel.archived.closeChannel": "Close Channel",
"channel.channelHasGuests": "This channel has guests",
"channel.hasGuests": "This group message has guests",
"channel.isGuest": "This person is a guest",
"channel_header.addMembers": "Add Members",
"channel_header.directchannel.you": "{displayname} (you) ",
"channel_header.manageMembers": "Manage Members",
"channel_header.notificationPreference": "Mobile Notifications",
"channel_header.notificationPreference.all": "All",
"channel_header.notificationPreference.default": "Default",
"channel_header.notificationPreference.mention": "Mentions",
"channel_header.notificationPreference.none": "Never",
"channel_header.pinnedPosts": "Pinned Messages",
"channel_header.viewMembers": "View Members",
"channel_info.header": "Header:",
"channel_info.purpose": "Purpose:",
"channel_loader.someone": "Someone",
"channel_members_modal.remove": "Remove",
"channel_modal.cancel": "Cancel",
"channel_modal.descriptionHelp": "Describe how this channel should be used.",
"channel_modal.header": "Header",
"channel_modal.headerEx": "E.g.: '[Link Title](https://example.com)'",
"channel_modal.headerHelp": "Set text that will appear in the header of the channel beside the channel name. For example, include frequently used links by typing [Link Title](http://example.com).",
"channel_modal.name": "Name",
"channel_modal.nameEx": "E.g.: 'Bugs', 'Marketing', 'Customer Support'",
"channel_modal.optional": "(optional)",
"channel_modal.purpose": "Purpose",
"channel_modal.purposeEx": "E.g.: 'A channel to file bugs and improvements'",
"channel_notifications.ignoreChannelMentions.settings": "Ignore @channel, @here, @all",
"channel_notifications.muteChannel.settings": "Mute channel",
"channel_notifications.preference.all_activity": "For all activity",
"channel_notifications.preference.global_default": "Global default ({notifyLevel})",
"channel_notifications.preference.header": "Send Notifications",
"channel_notifications.preference.never": "Never",
"channel_notifications.preference.only_mentions": "Only mentions and direct messages",
"channel_notifications.preference.save_error": "Notification preference could not be saved. Please check your connection and try again.",
"combined_system_message.added_to_channel.many_expanded": "{users} and {lastUser} were **added to the channel** by {actor}.",
"combined_system_message.added_to_channel.one": "{firstUser} **added to the channel** by {actor}.",
"combined_system_message.added_to_channel.one_you": "You were **added to the channel** by {actor}.",
"combined_system_message.added_to_channel.two": "{firstUser} and {secondUser} **added to the channel** by {actor}.",
"combined_system_message.added_to_team.many_expanded": "{users} and {lastUser} were **added to the team** by {actor}.",
"combined_system_message.added_to_team.one": "{firstUser} **added to the team** by {actor}.",
"combined_system_message.added_to_team.one_you": "You were **added to the team** by {actor}.",
"combined_system_message.added_to_team.two": "{firstUser} and {secondUser} **added to the team** by {actor}.",
"combined_system_message.joined_channel.many_expanded": "{users} and {lastUser} **joined the channel**.",
"combined_system_message.joined_channel.one": "{firstUser} **joined the channel**.",
"combined_system_message.joined_channel.one_you": "You **joined the channel**.",
"combined_system_message.joined_channel.two": "{firstUser} and {secondUser} **joined the channel**.",
"combined_system_message.joined_team.many_expanded": "{users} and {lastUser} **joined the team**.",
"combined_system_message.joined_team.one": "{firstUser} **joined the team**.",
"combined_system_message.joined_team.one_you": "You **joined the team**.",
"combined_system_message.joined_team.two": "{firstUser} and {secondUser} **joined the team**.",
"combined_system_message.left_channel.many_expanded": "{users} and {lastUser} **left the channel**.",
"combined_system_message.left_channel.one": "{firstUser} **left the channel**.",
"combined_system_message.left_channel.one_you": "You **left the channel**.",
"combined_system_message.left_channel.two": "{firstUser} and {secondUser} **left the channel**.",
"combined_system_message.left_team.many_expanded": "{users} and {lastUser} **left the team**.",
"combined_system_message.left_team.one": "{firstUser} **left the team**.",
"combined_system_message.left_team.one_you": "You **left the team**.",
"combined_system_message.left_team.two": "{firstUser} and {secondUser} **left the team**.",
"combined_system_message.removed_from_channel.many_expanded": "{users} and {lastUser} were **removed from the channel**.",
"combined_system_message.removed_from_channel.one": "{firstUser} was **removed from the channel**.",
"combined_system_message.removed_from_channel.one_you": "You were **removed from the channel**.",
"combined_system_message.removed_from_channel.two": "{firstUser} and {secondUser} were **removed from the channel**.",
"combined_system_message.removed_from_team.many_expanded": "{users} and {lastUser} were **removed from the team**.",
"combined_system_message.removed_from_team.one": "{firstUser} was **removed from the team**.",
"combined_system_message.removed_from_team.one_you": "You were **removed from the team**.",
"combined_system_message.removed_from_team.two": "{firstUser} and {secondUser} were **removed from the team**.",
"combined_system_message.you": "You",
"create_comment.addComment": "Add a comment...",
"create_post.deactivated": "You are viewing an archived channel with a deactivated user.",
"create_post.write": "Write to {channelDisplayName}",
"custom_status.failure_message": "Failed to update status. Try again",
"custom_status.set_status": "Set a status",
"custom_status.suggestions.in_a_meeting": "In a meeting",
"custom_status.suggestions.on_a_vacation": "Away on holiday",
"custom_status.suggestions.out_for_lunch": "Out for lunch",
"custom_status.suggestions.out_sick": "Out sick",
"custom_status.suggestions.recent_title": "RECENT",
"custom_status.suggestions.title": "SUGGESTIONS",
"custom_status.suggestions.working_from_home": "Working from home",
"date_separator.today": "Today",
"date_separator.yesterday": "Yesterday",
"edit_post.editPost": "Edit the post...",
"edit_post.save": "Save",
"file_upload.fileAbove": "Files must be less than {max}",
"gallery.download_file": "Download file",
"gallery.footer.channel_name": "Shared in {channelName}",
"gallery.open_file": "Open file",
"gallery.unsuppored": "Preview is not supported for this file type",
"get_post_link_modal.title": "Copy Link",
"integrations.add": "Add",
"intro_messages.anyMember": " Any member can join and read this channel.",
"intro_messages.beginning": "Beginning of {name}",
"intro_messages.creator": "This is the start of the {name} channel, created by {creator} on {date}.",
"intro_messages.creatorPrivate": "This is the start of the {name} private channel, created by {creator} on {date}.",
"intro_messages.group_message": "This is the start of your group message history with these teammates. Messages and files shared here are not shown to people outside this area.",
"intro_messages.noCreator": "This is the start of the {name} channel, created on {date}.",
"intro_messages.onlyInvited": " Only invited members can see this private channel.",
"last_users_message.added_to_channel.type": "were **added to the channel** by {actor}.",
"last_users_message.added_to_team.type": "were **added to the team** by {actor}.",
"last_users_message.first": "{firstUser} and ",
"last_users_message.joined_channel.type": "**joined the channel**.",
"last_users_message.joined_team.type": "**joined the team**.",
"last_users_message.left_channel.type": "**left the channel**.",
"last_users_message.left_team.type": "**left the team**.",
"last_users_message.others": "{numOthers} others ",
"last_users_message.removed_from_channel.type": "were **removed from the channel**.",
"last_users_message.removed_from_team.type": "were **removed from the team**.",
"login.email": "Email",
"login.forgot": "I forgot my password",
"login.invalidPassword": "Your password is incorrect.",
"login.ldapUsername": "AD/LDAP Username",
"login.ldapUsernameLower": "AD/LDAP username",
"login.noEmail": "Please enter your email",
"login.noEmailLdapUsername": "Please enter your email or {ldapUsername}",
"login.noEmailUsername": "Please enter your email or username",
"login.noEmailUsernameLdapUsername": "Please enter your email, username or {ldapUsername}",
"login.noLdapUsername": "Please enter your {ldapUsername}",
"login.noPassword": "Please enter your password",
"login.noUsername": "Please enter your username",
"login.noUsernameLdapUsername": "Please enter your username or {ldapUsername}",
"login.or": "or",
"login.password": "Password",
"login.signIn": "Sign in",
"login.userNotFound": "An account matching your login credentials could not be found.",
"login.username": "Username",
"login_mfa.enterToken": "To complete the sign in process, please enter a token from your smartphone's authenticator",
"login_mfa.token": "MFA Token",
"login_mfa.tokenReq": "Please enter an MFA token",
"mobile.about.appVersion": "App Version: {version} (Build {number})",
"mobile.about.copyright": "Copyright 2015-{currentYear} Mattermost, Inc. All rights reserved",
"mobile.about.database": "Database: {type}",
"mobile.about.licensed": "Licensed to: {company}",
"mobile.about.powered_by": "{site} is powered by Mattermost",
"mobile.about.serverVersion": "Server Version: {version} (Build {number})",
"mobile.about.serverVersionNoBuild": "Server Version: {version}",
"mobile.account.settings.save": "Save",
"mobile.account_notifications.reply.header": "SEND REPLY NOTIFICATIONS FOR",
"mobile.account_notifications.threads_mentions": "Mentions in threads",
"mobile.account_notifications.threads_start": "Threads that I start",
"mobile.account_notifications.threads_start_participate": "Threads that I start or participate in",
"mobile.action_menu.select": "Select an option",
"mobile.advanced_settings.clockDisplay": "Clock display",
"mobile.advanced_settings.delete": "Delete",
"mobile.advanced_settings.delete_message": "\nThis will reset all offline data and restart the app. You will be automatically logged back in once the app restarts.\n",
"mobile.advanced_settings.delete_title": "Delete Documents & Data",
"mobile.advanced_settings.timezone": "Timezone",
"mobile.advanced_settings.title": "Advanced Settings",
"mobile.alert_dialog.alertCancel": "Cancel",
"mobile.android.back_handler_exit": "Press back again to exit",
"mobile.android.photos_permission_denied_description": "Upload photos to your Mattermost instance or save them to your device. Open Settings to grant Mattermost Read and Write access to your photo library.",
"mobile.android.photos_permission_denied_title": "{applicationName} would like to access your photos",
"mobile.android.videos_permission_denied_description": "Upload videos to your Mattermost instance or save them to your device. Open Settings to grant Mattermost Read and Write access to your video library.",
"mobile.android.videos_permission_denied_title": "{applicationName} would like to access your videos",
"mobile.announcement_banner.title": "Announcement",
"mobile.calendar.dayNames": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday",
"mobile.calendar.dayNamesShort": "Sun,Mon,Tue,Wed,Thu,Fri,Sat",
"mobile.calendar.monthNames": "January,February,March,April,May,June,July,August,September,October,November,December",
"mobile.calendar.monthNamesShort": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",
"mobile.camera_photo_permission_denied_description": "Take photos and upload them to your Mattermost instance or save them to your device. Open Settings to grant Mattermost Read and Write access to your camera.",
"mobile.camera_photo_permission_denied_title": "{applicationName} would like to access your camera",
"mobile.camera_video_permission_denied_description": "Take videos and upload them to your Mattermost instance or save them to your device. Open Settings to grant Mattermost Read and Write access to your camera.",
"mobile.camera_video_permission_denied_title": "{applicationName} would like to access your camera",
"mobile.channel_drawer.search": "Jump to...",
"mobile.channel_info.alertMessageConvertChannel": "When you convert {displayName} to a private channel, history and membership are preserved. Publicly shared files remain accessible to anyone with the link. Membership in a private channel is by invitation only.\n\nThe change is permanent and cannot be undone.\n\nAre you sure you want to convert {displayName} to a private channel?",
"mobile.channel_info.alertMessageDeleteChannel": "Are you sure you want to archive the {term} {name}?",
"mobile.channel_info.alertMessageLeaveChannel": "Are you sure you want to leave the {term} {name}?",
"mobile.channel_info.alertMessageUnarchiveChannel": "Are you sure you want to unarchive the {term} {name}?",
"mobile.channel_info.alertNo": "No",
"mobile.channel_info.alertTitleConvertChannel": "Convert {displayName} to a private channel?",
"mobile.channel_info.alertTitleDeleteChannel": "Archive {term}",
"mobile.channel_info.alertTitleLeaveChannel": "Leave {term}",
"mobile.channel_info.alertTitleUnarchiveChannel": "Unarchive {term}",
"mobile.channel_info.alertYes": "Yes",
"mobile.channel_info.convert": "Convert to Private Channel",
"mobile.channel_info.convert_failed": "Unable to convert {displayName} to a private channel.",
"mobile.channel_info.convert_success": "{displayName} is now a private channel.",
"mobile.channel_info.copy_header": "Copy Header",
"mobile.channel_info.copy_purpose": "Copy Purpose",
"mobile.channel_info.delete_failed": "The channel {displayName} could not be archived. Please check your connection and try again.",
"mobile.channel_info.edit": "Edit Channel",
"mobile.channel_info.privateChannel": "Private Channel",
"mobile.channel_info.publicChannel": "Public Channel",
"mobile.channel_info.unarchive_failed": "The channel {displayName} could not be unarchived. Please check your connection and try again.",
"mobile.channel_list.alertNo": "No",
"mobile.channel_list.alertYes": "Yes",
"mobile.channel_list.archived": "ARCHIVED",
"mobile.channel_list.channels": "CHANNELS",
"mobile.channel_list.closeDM": "Close Direct Message",
"mobile.channel_list.closeGM": "Close Group Message",
"mobile.channel_list.members": "MEMBERS",
"mobile.channel_list.not_member": "NOT A MEMBER",
"mobile.channel_list.unreads": "UNREADS",
"mobile.channel_loader.still_loading": "Still trying to load your content...",
"mobile.channel_members.add_members_alert": "You must select at least one member to add to the channel.",
"mobile.commands.error_title": "Error Executing Command",
"mobile.components.error_list.dismiss_all": "Dismiss All",
"mobile.components.select_server_view.connect": "Connect",
"mobile.components.select_server_view.connecting": "Connecting...",
"mobile.components.select_server_view.enterServerUrl": "Enter Server URL",
"mobile.components.select_server_view.proceed": "Proceed",
"mobile.components.select_server_view.siteUrlPlaceholder": "https://mattermost.example.com",
"mobile.create_channel": "Create",
"mobile.create_channel.private": "New Private Channel",
"mobile.create_channel.public": "New Public Channel",
"mobile.create_post.read_only": "This channel is read-only",
"mobile.custom_list.no_results": "No Results",
"mobile.custom_status.choose_emoji": "Choose an emoji",
"mobile.custom_status.modal_confirm": "Done",
"mobile.display_settings.sidebar": "Sidebar",
"mobile.display_settings.theme": "Theme",
"mobile.document_preview.failed_description": "An error occurred while opening the document. Please make sure you have a {fileType} viewer installed and try again.\n",
"mobile.document_preview.failed_title": "Open Document failed",
"mobile.downloader.disabled_description": "File downloads are disabled on this server. Please contact your System Admin for more details.\n",
"mobile.downloader.disabled_title": "Download disabled",
"mobile.downloader.failed_description": "An error occurred while downloading the file. Please check your internet connection and try again.\n",
"mobile.downloader.failed_title": "Download failed",
"mobile.drawer.teamsTitle": "Teams",
"mobile.edit_channel": "Save",
"mobile.edit_post.title": "Editing Message",
"mobile.edit_profile.remove_profile_photo": "Remove Photo",
"mobile.emoji_picker.activity": "ACTIVITY",
"mobile.emoji_picker.custom": "CUSTOM",
"mobile.emoji_picker.flags": "FLAGS",
"mobile.emoji_picker.foods": "FOODS",
"mobile.emoji_picker.nature": "NATURE",
"mobile.emoji_picker.objects": "OBJECTS",
"mobile.emoji_picker.people": "PEOPLE",
"mobile.emoji_picker.places": "PLACES",
"mobile.emoji_picker.recent": "RECENTLY USED",
"mobile.emoji_picker.search.not_found_description": "Check the spelling or try another search.",
"mobile.emoji_picker.search.not_found_title": "No results found for '{searchTerm}'",
"mobile.emoji_picker.symbols": "SYMBOLS",
"mobile.error_handler.button": "Relaunch",
"mobile.error_handler.description": "\nTap relaunch to open the app again. After restart, you can report the problem from the settings menu.\n",
"mobile.error_handler.title": "Unexpected error occurred",
"mobile.extension.authentication_required": "Authentication required: Please first login using the app.",
"mobile.extension.file_error": "There was an error reading the file to be shared.\nPlease try again.",
"mobile.extension.file_limit": "Sharing is limited to a maximum of 5 files.",
"mobile.extension.max_file_size": "File attachments shared in Mattermost must be less than {size}.",
"mobile.extension.permission": "Mattermost needs access to the device storage to share files.",
"mobile.extension.team_required": "You must belong to a team before you can share files.",
"mobile.extension.title": "Share in Mattermost",
"mobile.failed_network_action.retry": "Try again",
"mobile.failed_network_action.shortDescription": "Messages will load when you have an internet connection.",
"mobile.failed_network_action.teams_channel_description": "Channels could not be loaded for {teamName}.",
"mobile.failed_network_action.teams_description": "Teams could not be loaded.",
"mobile.failed_network_action.teams_title": "An error occurred",
"mobile.failed_network_action.title": "No internet connection",
"mobile.file_upload.browse": "Browse Files",
"mobile.file_upload.camera_photo": "Take Photo",
"mobile.file_upload.camera_video": "Take Video",
"mobile.file_upload.disabled": "File uploads from mobile are disabled. Please contact your System Admin for more details.",
"mobile.file_upload.disabled2": "File uploads from mobile are disabled.",
"mobile.file_upload.library": "Photo Library",
"mobile.file_upload.max_warning": "Uploads limited to 5 files maximum.",
"mobile.file_upload.unsupportedMimeType": "Only BMP, JPG or PNG images may be used for profile pictures.",
"mobile.file_upload.video": "Video Library",
"mobile.files_paste.error_description": "An error occurred while pasting the file(s). Please try again.",
"mobile.files_paste.error_dismiss": "Dismiss",
"mobile.files_paste.error_title": "Paste failed",
"mobile.flagged_posts.empty_description": "Saved messages are only visible to you. Mark messages for follow-up or save something for later by long-pressing a message and choosing Save from the menu.",
"mobile.flagged_posts.empty_title": "No Saved messages yet",
"mobile.gallery.title": "{index} of {total}",
"mobile.general.error.title": "Error",
"mobile.help.title": "Help",
"mobile.intro_messages.DM": "This is the start of your direct message history with {teammate}. Direct messages and files shared here are not shown to people outside this area.",
"mobile.intro_messages.default_message": "This is the first channel teammates see when they sign up - use it for posting updates everyone needs to know.",
"mobile.intro_messages.default_welcome": "Welcome to {name}!",
"mobile.ios.photos_permission_denied_description": "Upload photos and videos to your Mattermost instance or save them to your device. Open Settings to grant Mattermost Read and Write access to your photo and video library.",
"mobile.ios.photos_permission_denied_title": "{applicationName} would like to access your photos",
"mobile.join_channel.error": "An error occurred while attempting to join the channel {displayName}. Please check your connection and try again.",
"mobile.link.error.text": "Unable to open the link.",
"mobile.link.error.title": "Error",
"mobile.loading_channels": "Loading Channels...",
"mobile.loading_members": "Loading Members...",
"mobile.loading_options": "Loading Options...",
"mobile.loading_posts": "Loading messages...",
"mobile.login_options.choose_title": "Choose your login method",
"mobile.mailTo.error.text": "Unable to open an email client.",
"mobile.mailTo.error.title": "Error",
"mobile.managed.blocked_by": "Blocked by {vendor}",
"mobile.managed.exit": "Exit",
"mobile.managed.jailbreak": "Jailbroken devices are not trusted by {vendor}, please exit the app.",
"mobile.managed.not_secured.android": "This device must be secured with a screen lock to use Mattermost.",
"mobile.managed.not_secured.ios": "This device must be secured with a passcode to use Mattermost.\n\nGo to Settings > Face ID & Passcode.",
"mobile.managed.not_secured.ios.touchId": "This device must be secured with a passcode to use Mattermost.\n\nGo to Settings > Touch ID & Passcode.",
"mobile.managed.secured_by": "Secured by {vendor}",
"mobile.managed.settings": "Go to settings",
"mobile.markdown.code.copy_code": "Copy Code",
"mobile.markdown.code.plusMoreLines": "+{count, number} more {count, plural, one {line} other {lines}}",
"mobile.markdown.image.too_large": "Image exceeds max dimensions of {maxWidth} by {maxHeight}:",
"mobile.markdown.link.copy_url": "Copy URL",
"mobile.mention.copy_mention": "Copy Mention",
"mobile.message_length.message": "Your current message is too long. Current character count: {count}/{max}",
"mobile.message_length.message_split_left": "Message exceeds the character limit",
"mobile.message_length.title": "Message Length",
"mobile.more_dms.add_more": "You can add {remaining, number} more users",
"mobile.more_dms.cannot_add_more": "You cannot add more users",
"mobile.more_dms.one_more": "You can add 1 more user",
"mobile.more_dms.start": "Start",
"mobile.more_dms.title": "New Conversation",
"mobile.more_dms.you": "@{username} - you",
"mobile.more_messages_button.text": "{count} {isInitialMessage, select, true {new} other {more new}} {count, plural, one {message} other {messages}}",
"mobile.notice_mobile_link": "mobile apps",
"mobile.notice_platform_link": "server",
"mobile.notice_text": "Mattermost is made possible by the open source software used in our {platform} and {mobile}.",
"mobile.notification_settings.auto_responder.default_message": "Hello, I am out of office and unable to respond to messages.",
"mobile.notification_settings.auto_responder.enabled": "Enabled",
"mobile.notification_settings.auto_responder.footer_message": "Set a custom message that will be automatically sent in response to Direct Messages. Mentions in Public and Private Channels will not trigger the automated reply. Enabling Automatic Replies sets your status to Out of Office and disables email and push notifications.",
"mobile.notification_settings.auto_responder.message_placeholder": "Message",
"mobile.notification_settings.auto_responder.message_title": "CUSTOM MESSAGE",
"mobile.notification_settings.auto_responder_short": "Automatic Replies",
"mobile.notification_settings.email": "Email",
"mobile.notification_settings.email.send": "SEND EMAIL NOTIFICATIONS",
"mobile.notification_settings.email_title": "Email Notifications",
"mobile.notification_settings.mentions.channelWide": "Channel-wide mentions",
"mobile.notification_settings.mentions.reply_title": "Send Reply notifications for",
"mobile.notification_settings.mentions.sensitiveName": "Your case sensitive first name",
"mobile.notification_settings.mentions.sensitiveUsername": "Your non-case sensitive username",
"mobile.notification_settings.mentions_replies": "Mentions and Replies",
"mobile.notification_settings.mobile": "Mobile",
"mobile.notification_settings.mobile_title": "Mobile Notifications",
"mobile.notification_settings.modal_cancel": "CANCEL",
"mobile.notification_settings.modal_save": "SAVE",
"mobile.notification_settings.ooo_auto_responder": "Automatic Direct Message Replies",
"mobile.notification_settings.save_failed_description": "The notification settings failed to save due to a connection issue. Please try again.",
"mobile.notification_settings.save_failed_title": "Connection issue",
"mobile.notification_settings_mentions.keywords": "Keywords",
"mobile.notification_settings_mentions.keywordsDescription": "Other words that trigger a mention",
"mobile.notification_settings_mentions.keywordsHelp": "Keywords are non-case sensitive and should be separated by a comma.",
"mobile.notification_settings_mentions.wordsTrigger": "WORDS THAT TRIGGER MENTIONS",
"mobile.notification_settings_mobile.default_sound": "Default ({sound})",
"mobile.notification_settings_mobile.light": "Light",
"mobile.notification_settings_mobile.no_sound": "None",
"mobile.notification_settings_mobile.push_activity": "SEND NOTIFICATIONS",
"mobile.notification_settings_mobile.push_activity_android": "Send notifications",
"mobile.notification_settings_mobile.push_status": "TRIGGER PUSH NOTIFICATIONS WHEN",
"mobile.notification_settings_mobile.push_status_android": "Trigger push notifications when",
"mobile.notification_settings_mobile.sound": "Sound",
"mobile.notification_settings_mobile.sounds_title": "Notification sound",
"mobile.notification_settings_mobile.test": "Send me a test notification",
"mobile.notification_settings_mobile.test_push": "This is a test push notification",
"mobile.notification_settings_mobile.vibrate": "Vibrate",
"mobile.oauth.failed_to_login": "Your login attempt failed. Please try again.",
"mobile.oauth.failed_to_open_link": "The link failed to open. Please try again.",
"mobile.oauth.failed_to_open_link_no_browser": "The link failed to open. Please verify if a browser is installed in the current space.",
"mobile.oauth.restart_login": "Restart login",
"mobile.oauth.something_wrong": "An error occurred",
"mobile.oauth.something_wrong.okButon": "OK",
"mobile.oauth.switch_to_browser": "Please use your browser to complete the login process.",
"mobile.oauth.try_again": "Try again",
"mobile.offlineIndicator.connected": "Connected",
"mobile.offlineIndicator.connecting": "Connecting...",
"mobile.offlineIndicator.offline": "No internet connection",
"mobile.open_dm.error": "A direct message with {displayName} could not be opened. Please check your connection and try again.",
"mobile.open_gm.error": "A group message with those users could not be opened. Please check your connection and try again.",
"mobile.open_unknown_channel.error": "Unable to join the channel. Please reset the cache and try again.",
"mobile.permission_denied_dismiss": "Don't Allow",
"mobile.permission_denied_retry": "Settings",
"mobile.pinned_posts.empty_description": "Pin important messages which are visible to the whole channel. Long press on a message and choose Pin to Channel to save it here.",
"mobile.pinned_posts.empty_title": "No Pinned messages yet",
"mobile.post.cancel": "Cancel",
"mobile.post.delete_question": "Are you sure you want to delete this post?",
"mobile.post.delete_title": "Delete Post",
"mobile.post.failed_delete": "Delete Message",
"mobile.post.failed_retry": "Try Again",
"mobile.post.failed_title": "Unable to send your message",
"mobile.post.retry": "Refresh",
"mobile.post_info.add_reaction": "Add Reaction",
"mobile.post_info.copy_text": "Copy Text",
"mobile.post_info.flag": "Save",
"mobile.post_info.mark_unread": "Mark as Unread",
"mobile.post_info.pin": "Pin to Channel",
"mobile.post_info.reply": "Reply",
"mobile.post_info.unflag": "Unsave",
"mobile.post_info.unpin": "Unpin from Channel",
"mobile.post_pre_header.flagged": "Saved",
"mobile.post_pre_header.pinned": "Pinned",
"mobile.post_pre_header.pinned_flagged": "Pinned and Saved",
"mobile.post_textbox.entire_channel.cancel": "Cancel",
"mobile.post_textbox.entire_channel.confirm": "Confirm",
"mobile.post_textbox.entire_channel.message": "By using @all or @channel you are about to send notifications to {totalMembers, number} {totalMembers, plural, one {person} other {people}}. Are you sure you want to do this?",
"mobile.post_textbox.entire_channel.message.with_timezones": "By using @all or @channel you are about to send notifications to {totalMembers, number} {totalMembers, plural, one {person} other {people}} in {timezones, number} {timezones, plural, one {timezone} other {timezones}}. Are you sure you want to do this?",
"mobile.post_textbox.entire_channel.title": "Confirm sending notifications to entire channel",
"mobile.post_textbox.groups.title": "Confirm sending notifications to groups",
"mobile.post_textbox.multi_group.message.with_timezones": "By using {mentions} and {finalMention} you are about to send notifications to at least {totalMembers} people in {timezones, number} {timezones, plural, one {timezone} other {timezones}}. Are you sure you want to do this?",
"mobile.post_textbox.multi_group.message.without_timezones": "By using {mentions} and {finalMention} you are about to send notifications to at least {totalMembers} people. Are you sure you want to do this?",
"mobile.post_textbox.one_group.message.with_timezones": "By using {mention} you are about to send notifications to {totalMembers} people in {timezones, number} {timezones, plural, one {timezone} other {timezones}}. Are you sure you want to do this?",
"mobile.post_textbox.one_group.message.without_timezones": "By using {mention} you are about to send notifications to {totalMembers} people. Are you sure you want to do this?",
"mobile.post_textbox.uploadFailedDesc": "Some attachments failed to upload to the server. Are you sure you want to post the message?",
"mobile.post_textbox.uploadFailedTitle": "Attachment failure",
"mobile.posts_view.moreMsg": "More New Messages Above",
"mobile.prepare_file.failed_description": "An error occurred while preparing the file. Please try again.\n",
"mobile.prepare_file.failed_title": "Preparing failed",
"mobile.prepare_file.text": "Preparing",
"mobile.privacy_link": "Privacy Policy",
"mobile.public_link.copied": "Public link copied",
"mobile.push_notification_reply.button": "Send",
"mobile.push_notification_reply.placeholder": "Write a reply...",
"mobile.push_notification_reply.title": "Reply",
"mobile.reaction_header.all_emojis": "All",
"mobile.recent_mentions.empty_description": "Messages where someone mentions you or includes your trigger words are saved here.",
"mobile.recent_mentions.empty_title": "No Mentions yet",
"mobile.rename_channel.display_name_maxLength": "Channel name must be less than {maxLength, number} characters",
"mobile.rename_channel.display_name_minLength": "Channel name must be {minLength, number} or more characters",
"mobile.rename_channel.display_name_required": "Channel name is required",
"mobile.rename_channel.name_lowercase": "URL must be lowercase alphanumeric characters",
"mobile.rename_channel.name_maxLength": "URL must be less than {maxLength, number} characters",
"mobile.rename_channel.name_minLength": "URL must be {minLength, number} or more characters",
"mobile.rename_channel.name_required": "URL is required",
"mobile.request.invalid_response": "Received invalid response from the server.",
"mobile.reset_status.alert_cancel": "Cancel",
"mobile.reset_status.alert_ok": "Ok",
"mobile.reset_status.title_ooo": "Disable 'Out Of Office'?",
"mobile.retry_message": "Fetching messages failed. Tap here to try again.",
"mobile.routes.channelInfo": "Info",
"mobile.routes.channelInfo.createdBy": "Created by {creator} on ",
"mobile.routes.channelInfo.delete_channel": "Archive Channel",
"mobile.routes.channelInfo.favorite": "Favourite",
"mobile.routes.channelInfo.groupManaged": "Members are managed by linked groups",
"mobile.routes.channelInfo.unarchive_channel": "Unarchive Channel",
"mobile.routes.channel_members.action": "Remove Members",
"mobile.routes.channel_members.action_message": "You must select at least one member to remove from the channel.",
"mobile.routes.channel_members.action_message_confirm": "Are you sure you want to remove the selected members from the channel?",
"mobile.routes.code": "{language} Code",
"mobile.routes.code.noLanguage": "Code",
"mobile.routes.custom_status": "Set a Status",
"mobile.routes.edit_profile": "Edit Profile",
"mobile.routes.login": "Login",
"mobile.routes.loginOptions": "Login Chooser",
"mobile.routes.mfa": "Multi-factor Authentication",
"mobile.routes.selectChannel": "Select Channel",
"mobile.routes.selectTeam": "Select Team",
"mobile.routes.settings": "Settings",
"mobile.routes.sso": "Single Sign-On",
"mobile.routes.table": "Table",
"mobile.routes.thread": "{channelName} Thread",
"mobile.routes.thread_dm": "Direct Message Thread",
"mobile.routes.user_profile": "Profile",
"mobile.routes.user_profile.edit": "Edit",
"mobile.routes.user_profile.local_time": "LOCAL TIME",
"mobile.routes.user_profile.organization": "ORGANISATION",
"mobile.routes.user_profile.send_message": "Send Message",
"mobile.search.after_modifier_description": "to find posts after a specific date",
"mobile.search.before_modifier_description": "to find posts before a specific date",
"mobile.search.from_modifier_description": "to find posts from specific users",
"mobile.search.from_modifier_title": "username",
"mobile.search.in_modifier_description": "to find posts in specific channels",
"mobile.search.in_modifier_title": "channel-name",
"mobile.search.jump": "Jump to recent messages",
"mobile.search.no_results": "No Results Found",
"mobile.search.on_modifier_description": "to find posts on a specific date",
"mobile.search.recent_title": "Recent Searches",
"mobile.select_team.guest_cant_join_team": "Your guest account has no teams or channels assigned. Please contact an administrator.",
"mobile.select_team.join_open": "Open teams you can join",
"mobile.select_team.no_teams": "There are no available teams for you to join.",
"mobile.server_link.error.text": "The link could not be found on this server.",
"mobile.server_link.error.title": "Link Error",
"mobile.server_link.unreachable_channel.error": "This link belongs to a deleted channel or to a channel to which you do not have access.",
"mobile.server_link.unreachable_team.error": "This link belongs to a deleted team or to a team to which you do not have access.",
"mobile.server_link.unreachable_user.error": "This link belongs to a deleted user.",
"mobile.server_ssl.error.text": "The certificate from {host} is not trusted.\n\nPlease contact your System Administrator to resolve the certificate issues and allow connections to this server.",
"mobile.server_ssl.error.title": "Untrusted Certificate",
"mobile.server_upgrade.alert_description": "This server version is unsupported and users will be exposed to compatibility issues that cause crashes or severe bugs breaking core functionality of the app. Upgrading to server version {serverVersion} or later is required.",
"mobile.server_upgrade.button": "OK",
"mobile.server_upgrade.dismiss": "Dismiss",
"mobile.server_upgrade.learn_more": "Learn More",
"mobile.server_upgrade.title": "Server upgrade required",
"mobile.server_url.empty": "Please enter a valid server URL",
"mobile.server_url.invalid_format": "URL must start with http:// or https://",
"mobile.session_expired": "Session Expired: Please log in to continue receiving notifications. Sessions for {siteName} are configured to expire every {daysCount, number} {daysCount, plural, one {day} other {days}}.",
"mobile.set_status.away": "Away",
"mobile.set_status.dnd": "Do Not Disturb",
"mobile.set_status.offline": "Offline",
"mobile.set_status.online": "Online",
"mobile.share_extension.channel": "Channel",
"mobile.share_extension.error_close": "Close",
"mobile.share_extension.error_message": "An error has occurred while using the share extension.",
"mobile.share_extension.error_title": "Extension Error",
"mobile.share_extension.team": "Team",
"mobile.share_extension.too_long_message": "Character count: {count}/{max}",
"mobile.share_extension.too_long_title": "Message is too long",
"mobile.sidebar_settings.permanent": "Permanent Sidebar",
"mobile.sidebar_settings.permanent_description": "Keep the sidebar open permanently",
"mobile.storage_permission_denied_description": "Upload files to your Mattermost instance. Open Settings to grant Mattermost Read and Write access to files on this device.",
"mobile.storage_permission_denied_title": "{applicationName} would like to access your files",
"mobile.suggestion.members": "Members",
"mobile.system_message.channel_archived_message": "{username} archived the channel",
"mobile.system_message.channel_unarchived_message": "{username} unarchived the channel",
"mobile.system_message.update_channel_displayname_message_and_forget.updated_from": "{username} updated the channel display name from: {oldDisplayName} to: {newDisplayName}",
"mobile.system_message.update_channel_header_message_and_forget.removed": "{username} removed the channel header (was: {oldHeader})",
"mobile.system_message.update_channel_header_message_and_forget.updated_from": "{username} updated the channel header from: {oldHeader} to: {newHeader}",
"mobile.system_message.update_channel_header_message_and_forget.updated_to": "{username} updated the channel header to: {newHeader}",
"mobile.system_message.update_channel_purpose_message.removed": "{username} removed the channel purpose (was: {oldPurpose})",
"mobile.system_message.update_channel_purpose_message.updated_from": "{username} updated the channel purpose from: {oldPurpose} to: {newPurpose}",
"mobile.system_message.update_channel_purpose_message.updated_to": "{username} updated the channel purpose to: {newPurpose}",
"mobile.terms_of_service.alert_cancel": "Cancel",
"mobile.terms_of_service.alert_ok": "OK",
"mobile.terms_of_service.alert_retry": "Try Again",
"mobile.terms_of_service.terms_rejected": "You must agree to the terms of service before accessing {siteName}. Please contact your System Administrator for more details.",
"mobile.timezone_settings.automatically": "Set automatically",
"mobile.timezone_settings.manual": "Change timezone",
"mobile.timezone_settings.select": "Select Timezone",
"mobile.tos_link": "Terms of Service",
"mobile.unsupported_server.message": "Attachments, link previews, reactions and embed data may not be displayed correctly. If this issue persists contact your System Administrator to upgrade your Mattermost server.",
"mobile.unsupported_server.ok": "OK",
"mobile.unsupported_server.title": "Unsupported server version",
"mobile.user.settings.notifications.email.fifteenMinutes": "Every 15 minutes",
"mobile.user_list.deactivated": "Deactivated",
"mobile.user_removed.message": "You were removed from the channel.",
"mobile.user_removed.title": "Removed from {channelName}",
"mobile.video_playback.failed_description": "An error occurred while trying to play the video.\n",
"mobile.video_playback.failed_title": "Video playback failed",
"mobile.youtube_playback_error.description": "An error occurred while trying to play the YouTube video.\nDetails: {details}",
"mobile.youtube_playback_error.title": "YouTube playback error",
"modal.manual_status.auto_responder.message_": "Would you like to switch your status to '{status}' and disable Automatic Replies?",
"modal.manual_status.auto_responder.message_away": "Would you like to switch your status to 'Away' and disable Automatic Replies?",
"modal.manual_status.auto_responder.message_dnd": "Would you like to switch your status to 'Do Not Disturb' and disable Automatic Replies?",
"modal.manual_status.auto_responder.message_offline": "Would you like to switch your status to 'Offline' and disable Automatic Replies?",
"modal.manual_status.auto_responder.message_online": "Would you like to switch your status to 'Online' and disable Automatic Replies?",
"more_channels.archivedChannels": "Archived Channels",
"more_channels.dropdownTitle": "Show",
"more_channels.noMore": "No more channels to join",
"more_channels.publicChannels": "Public Channels",
"more_channels.sharedChannels": "Shared Channels",
"more_channels.showArchivedChannels": "Show: Archived Channels",
"more_channels.showPublicChannels": "Show: Public Channels",
"more_channels.showSharedChannels": "Show: Shared Channels",
"more_channels.title": "More Channels",
"msg_typing.areTyping": "{users} and {last} are typing...",
"msg_typing.isTyping": "{user} is typing...",
"navbar.channel_drawer.button": "Channels and Teams",
"navbar.channel_drawer.hint": "Opens the Channels and Teams drawer",
"navbar.leave": "Leave Channel",
"navbar.more_options.button": "More Options",
"navbar.more_options.hint": "Opens the more options right hand sidebar",
"navbar.search.button": "Channel Search",
"navbar.search.hint": "Opens the channel search modal",
"password_form.title": "Password Reset",
"password_send.checkInbox": "Please check your inbox.",
"password_send.description": "To reset your password, enter the email address you used to sign up",
"password_send.error": "Please enter a valid email address.",
"password_send.link": "If the account exists, a password reset email will be sent to:",
"password_send.reset": "Reset my password",
"permalink.error.access": "Permalink belongs to a deleted message or to a channel to which you do not have access.",
"permalink.error.link_not_found": "Link Not Found",
"permalink.show_dialog_warn.cancel": "Cancel",
"permalink.show_dialog_warn.description": "You are about to join '{channel}' without explicitly being added by the channel admin. Are you sure you wish to join this private channel?",
"permalink.show_dialog_warn.join": "Join",
"permalink.show_dialog_warn.title": "Join private channel",
"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 are also not a member of the groups linked to this channel.",
"post_body.check_for_out_of_channel_mentions.link.and": " and ",
"post_body.check_for_out_of_channel_mentions.link.private": "add them to this private channel",
"post_body.check_for_out_of_channel_mentions.link.public": "add them to the channel",
"post_body.check_for_out_of_channel_mentions.message.multiple": "were mentioned but they are not in the channel. Would you like to ",
"post_body.check_for_out_of_channel_mentions.message.one": "was mentioned but is not in the channel. Would you like to ",
"post_body.check_for_out_of_channel_mentions.message_last": "? They will have access to all message history.",
"post_body.commentedOn": "Commented on {name}{apostrophe} message: ",
"post_body.deleted": "(message deleted)",
"post_info.auto_responder": "AUTOMATIC REPLY",
"post_info.bot": "BOT",
"post_info.del": "Delete",
"post_info.edit": "Edit",
"post_info.guest": "GUEST",
"post_info.system": "System",
"post_message_view.edited": "(edited)",
"posts_view.newMsg": "New Messages",
"rhs_thread.rootPostDeletedMessage.body": "Part of this thread has been deleted due to a data retention policy. You can no longer reply to this thread.",
"search_bar.search": "Search",
"search_header.results": "Search Results",
"search_header.title2": "Recent Mentions",
"search_header.title3": "Saved Messages",
"search_item.channelArchived": "Archived",
"sidebar.channels": "PUBLIC CHANNELS",
"sidebar.direct": "DIRECT MESSAGES",
"sidebar.favorite": "FAVOURITE CHANNELS",
"sidebar.pg": "PRIVATE CHANNELS",
"sidebar.types.recent": "RECENT ACTIVITY",
"sidebar.unreads": "More unreads",
"sidebar_right_menu.logout": "Logout",
"sidebar_right_menu.report": "Report a Problem",
"signup.email": "Email and Password",
"signup.google": "Google Apps",
"signup.office365": "Office 365",
"status_dropdown.set_away": "Away",
"status_dropdown.set_dnd": "Do Not Disturb",
"status_dropdown.set_offline": "Offline",
"status_dropdown.set_online": "Online",
"status_dropdown.set_ooo": "Out of Office",
"suggestion.mention.all": "Notifies everyone in this channel",
"suggestion.mention.channel": "Notifies everyone in this channel",
"suggestion.mention.channels": "My Channels",
"suggestion.mention.groups": "Group Mentions",
"suggestion.mention.here": "Notifies everyone online in this channel",
"suggestion.mention.members": "Channel Members",
"suggestion.mention.morechannels": "Other Channels",
"suggestion.mention.nonmembers": "Not in Channel",
"suggestion.mention.special": "Special Mentions",
"suggestion.mention.you": "(you)",
"suggestion.search.direct": "Direct Messages",
"suggestion.search.private": "Private Channels",
"suggestion.search.public": "Public Channels",
"terms_of_service.agreeButton": "I Agree",
"terms_of_service.api_error": "Unable to complete the request. If this issue persists, contact your System Administrator.",
"user.settings.display.clockDisplay": "Clock Display",
"user.settings.display.custom_theme": "Custom Theme",
"user.settings.display.militaryClock": "24-hour clock (example: 16:00)",
"user.settings.display.normalClock": "12-hour clock (example: 4:00 PM)",
"user.settings.display.preferTime": "Select how you prefer time displayed.",
"user.settings.general.email": "Email",
"user.settings.general.emailCantUpdate": "Email must be updated using a web client or desktop application.",
"user.settings.general.emailGitlabCantUpdate": "Login occurs through GitLab. Email cannot be updated. Email address used for notifications is {email}.",
"user.settings.general.emailGoogleCantUpdate": "Login occurs through Google. Email cannot be updated. Email address used for notifications is {email}.",
"user.settings.general.emailHelp2": "Email has been disabled by your System Administrator. No notification emails will be sent until it is enabled.",
"user.settings.general.emailLdapCantUpdate": "Login occurs through AD/LDAP. Email cannot be updated. Email address used for notifications is {email}.",
"user.settings.general.emailOffice365CantUpdate": "Login occurs through Office 365. Email cannot be updated. Email address used for notifications is {email}.",
"user.settings.general.emailSamlCantUpdate": "Login occurs through SAML. Email cannot be updated. Email address used for notifications is {email}.",
"user.settings.general.field_handled_externally": "This field is handled through your login provider. If you want to change it, you need to do so through your login provider.",
"user.settings.general.firstName": "First Name",
"user.settings.general.lastName": "Last Name",
"user.settings.general.nickname": "Nickname",
"user.settings.general.position": "Position",
"user.settings.general.status": "Status",
"user.settings.general.username": "Username",
"user.settings.modal.display": "Display",
"user.settings.modal.notifications": "Notifications",
"user.settings.notifications.allActivity": "For all activity",
"user.settings.notifications.comments": "Reply notifications",
"user.settings.notifications.email.disabled": "Email notifications are not enabled",
"user.settings.notifications.email.everyHour": "Every hour",
"user.settings.notifications.email.immediately": "Immediately",
"user.settings.notifications.email.never": "Never",
"user.settings.notifications.email.send": "Send email notifications",
"user.settings.notifications.emailInfo": "Email notifications are sent for mentions and direct messages when you are offline or away for more than 5 minutes.",
"user.settings.notifications.never": "Never",
"user.settings.notifications.onlyMentions": "Only for mentions and direct messages",
"user.settings.push_notification.away": "Away or offline",
"user.settings.push_notification.disabled": "Push notifications are not enabled",
"user.settings.push_notification.disabled_long": "Push notifications have not been enabled by your System Administrator.",
"user.settings.push_notification.offline": "Offline",
"user.settings.push_notification.online": "Online, away or offline",
"web.root.signup_info": "All team communication in one place, searchable and accessible anywhere"
}

15741
detox/package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -4,21 +4,21 @@
"repository": "git@github.com:mattermost/mattermost-mobile.git",
"author": "Mattermost, Inc.",
"devDependencies": {
"@babel/plugin-proposal-class-properties": "7.13.0",
"@babel/plugin-transform-modules-commonjs": "7.13.8",
"@babel/plugin-transform-runtime": "7.13.15",
"@babel/preset-env": "7.13.15",
"@babel/plugin-proposal-class-properties": "7.14.5",
"@babel/plugin-transform-modules-commonjs": "7.14.5",
"@babel/plugin-transform-runtime": "7.14.5",
"@babel/preset-env": "7.14.5",
"axios": "0.21.1",
"babel-jest": "26.6.3",
"babel-jest": "27.0.2",
"babel-plugin-module-resolver": "4.1.0",
"deepmerge": "4.2.2",
"detox": "18.11.1",
"detox": "18.18.1",
"form-data": "4.0.0",
"jest": "26.6.3",
"jest-circus": "26.6.3",
"jest-cli": "26.6.3",
"jest-html-reporters": "2.1.3",
"jest-junit": "12.0.0",
"jest": "27.0.4",
"jest-circus": "27.0.4",
"jest-cli": "27.0.4",
"jest-html-reporters": "2.1.6",
"jest-junit": "12.2.0",
"sanitize-filename": "1.6.3",
"uuid": "8.3.2"
},

View file

@ -21,6 +21,7 @@ if (__DEV__) {
const LogBox = require('react-native/Libraries/LogBox/LogBox');
LogBox.ignoreLogs([
'`-[RCTRootView cancelTouches]`',
'scaleY',
]);
require('storybook/mattermost_storybook.ts');
}

View file

@ -9,17 +9,17 @@ PODS:
- EXFileSystem (11.0.2):
- UMCore
- UMFileSystemInterface
- FBLazyVector (0.64.0)
- FBReactNativeSpec (0.64.0):
- FBLazyVector (0.64.2)
- FBReactNativeSpec (0.64.2):
- RCT-Folly (= 2020.01.13.00)
- RCTRequired (= 0.64.0)
- RCTTypeSafety (= 0.64.0)
- React-Core (= 0.64.0)
- React-jsi (= 0.64.0)
- ReactCommon/turbomodule/core (= 0.64.0)
- RCTRequired (= 0.64.2)
- RCTTypeSafety (= 0.64.2)
- React-Core (= 0.64.2)
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- glog (0.3.5)
- jail-monkey (2.3.3):
- React
- jail-monkey (2.4.0):
- React-Core
- libwebp (1.2.0):
- libwebp/demux (= 1.2.0)
- libwebp/mux (= 1.2.0)
@ -29,9 +29,9 @@ PODS:
- libwebp/mux (1.2.0):
- libwebp/demux
- libwebp/webp (1.2.0)
- Permission-Camera (3.0.2):
- Permission-Camera (3.0.4):
- RNPermissions
- Permission-PhotoLibrary (3.0.2):
- Permission-PhotoLibrary (3.0.4):
- RNPermissions
- RCT-Folly (2020.01.13.00):
- boost-for-react-native
@ -42,206 +42,206 @@ PODS:
- boost-for-react-native
- DoubleConversion
- glog
- RCTRequired (0.64.0)
- RCTTypeSafety (0.64.0):
- FBLazyVector (= 0.64.0)
- RCTRequired (0.64.2)
- RCTTypeSafety (0.64.2):
- FBLazyVector (= 0.64.2)
- RCT-Folly (= 2020.01.13.00)
- RCTRequired (= 0.64.0)
- React-Core (= 0.64.0)
- RCTYouTube (2.0.1):
- RCTRequired (= 0.64.2)
- React-Core (= 0.64.2)
- RCTYouTube (2.0.2):
- React
- YoutubePlayer-in-WKWebView (~> 0.3.1)
- React (0.64.0):
- React-Core (= 0.64.0)
- React-Core/DevSupport (= 0.64.0)
- React-Core/RCTWebSocket (= 0.64.0)
- React-RCTActionSheet (= 0.64.0)
- React-RCTAnimation (= 0.64.0)
- React-RCTBlob (= 0.64.0)
- React-RCTImage (= 0.64.0)
- React-RCTLinking (= 0.64.0)
- React-RCTNetwork (= 0.64.0)
- React-RCTSettings (= 0.64.0)
- React-RCTText (= 0.64.0)
- React-RCTVibration (= 0.64.0)
- React-callinvoker (0.64.0)
- React-Core (0.64.0):
- React (0.64.2):
- React-Core (= 0.64.2)
- React-Core/DevSupport (= 0.64.2)
- React-Core/RCTWebSocket (= 0.64.2)
- React-RCTActionSheet (= 0.64.2)
- React-RCTAnimation (= 0.64.2)
- React-RCTBlob (= 0.64.2)
- React-RCTImage (= 0.64.2)
- React-RCTLinking (= 0.64.2)
- React-RCTNetwork (= 0.64.2)
- React-RCTSettings (= 0.64.2)
- React-RCTText (= 0.64.2)
- React-RCTVibration (= 0.64.2)
- React-callinvoker (0.64.2)
- React-Core (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default (= 0.64.0)
- React-cxxreact (= 0.64.0)
- React-jsi (= 0.64.0)
- React-jsiexecutor (= 0.64.0)
- React-perflogger (= 0.64.0)
- React-Core/Default (= 0.64.2)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/CoreModulesHeaders (0.64.0):
- React-Core/CoreModulesHeaders (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.0)
- React-jsi (= 0.64.0)
- React-jsiexecutor (= 0.64.0)
- React-perflogger (= 0.64.0)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/Default (0.64.0):
- React-Core/Default (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-cxxreact (= 0.64.0)
- React-jsi (= 0.64.0)
- React-jsiexecutor (= 0.64.0)
- React-perflogger (= 0.64.0)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/DevSupport (0.64.0):
- React-Core/DevSupport (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default (= 0.64.0)
- React-Core/RCTWebSocket (= 0.64.0)
- React-cxxreact (= 0.64.0)
- React-jsi (= 0.64.0)
- React-jsiexecutor (= 0.64.0)
- React-jsinspector (= 0.64.0)
- React-perflogger (= 0.64.0)
- React-Core/Default (= 0.64.2)
- React-Core/RCTWebSocket (= 0.64.2)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-jsinspector (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/RCTActionSheetHeaders (0.64.0):
- React-Core/RCTActionSheetHeaders (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.0)
- React-jsi (= 0.64.0)
- React-jsiexecutor (= 0.64.0)
- React-perflogger (= 0.64.0)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/RCTAnimationHeaders (0.64.0):
- React-Core/RCTAnimationHeaders (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.0)
- React-jsi (= 0.64.0)
- React-jsiexecutor (= 0.64.0)
- React-perflogger (= 0.64.0)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/RCTBlobHeaders (0.64.0):
- React-Core/RCTBlobHeaders (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.0)
- React-jsi (= 0.64.0)
- React-jsiexecutor (= 0.64.0)
- React-perflogger (= 0.64.0)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/RCTImageHeaders (0.64.0):
- React-Core/RCTImageHeaders (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.0)
- React-jsi (= 0.64.0)
- React-jsiexecutor (= 0.64.0)
- React-perflogger (= 0.64.0)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/RCTLinkingHeaders (0.64.0):
- React-Core/RCTLinkingHeaders (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.0)
- React-jsi (= 0.64.0)
- React-jsiexecutor (= 0.64.0)
- React-perflogger (= 0.64.0)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/RCTNetworkHeaders (0.64.0):
- React-Core/RCTNetworkHeaders (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.0)
- React-jsi (= 0.64.0)
- React-jsiexecutor (= 0.64.0)
- React-perflogger (= 0.64.0)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/RCTSettingsHeaders (0.64.0):
- React-Core/RCTSettingsHeaders (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.0)
- React-jsi (= 0.64.0)
- React-jsiexecutor (= 0.64.0)
- React-perflogger (= 0.64.0)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/RCTTextHeaders (0.64.0):
- React-Core/RCTTextHeaders (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.0)
- React-jsi (= 0.64.0)
- React-jsiexecutor (= 0.64.0)
- React-perflogger (= 0.64.0)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/RCTVibrationHeaders (0.64.0):
- React-Core/RCTVibrationHeaders (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.0)
- React-jsi (= 0.64.0)
- React-jsiexecutor (= 0.64.0)
- React-perflogger (= 0.64.0)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/RCTWebSocket (0.64.0):
- React-Core/RCTWebSocket (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default (= 0.64.0)
- React-cxxreact (= 0.64.0)
- React-jsi (= 0.64.0)
- React-jsiexecutor (= 0.64.0)
- React-perflogger (= 0.64.0)
- React-Core/Default (= 0.64.2)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-CoreModules (0.64.0):
- FBReactNativeSpec (= 0.64.0)
- React-CoreModules (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- RCT-Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.64.0)
- React-Core/CoreModulesHeaders (= 0.64.0)
- React-jsi (= 0.64.0)
- React-RCTImage (= 0.64.0)
- ReactCommon/turbomodule/core (= 0.64.0)
- React-cxxreact (0.64.0):
- RCTTypeSafety (= 0.64.2)
- React-Core/CoreModulesHeaders (= 0.64.2)
- React-jsi (= 0.64.2)
- React-RCTImage (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-cxxreact (0.64.2):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- glog
- RCT-Folly (= 2020.01.13.00)
- React-callinvoker (= 0.64.0)
- React-jsi (= 0.64.0)
- React-jsinspector (= 0.64.0)
- React-perflogger (= 0.64.0)
- React-runtimeexecutor (= 0.64.0)
- React-jsi (0.64.0):
- React-callinvoker (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsinspector (= 0.64.2)
- React-perflogger (= 0.64.2)
- React-runtimeexecutor (= 0.64.2)
- React-jsi (0.64.2):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- glog
- RCT-Folly (= 2020.01.13.00)
- React-jsi/Default (= 0.64.0)
- React-jsi/Default (0.64.0):
- React-jsi/Default (= 0.64.2)
- React-jsi/Default (0.64.2):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- glog
- RCT-Folly (= 2020.01.13.00)
- React-jsiexecutor (0.64.0):
- React-jsiexecutor (0.64.2):
- DoubleConversion
- glog
- RCT-Folly (= 2020.01.13.00)
- React-cxxreact (= 0.64.0)
- React-jsi (= 0.64.0)
- React-perflogger (= 0.64.0)
- React-jsinspector (0.64.0)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-perflogger (= 0.64.2)
- React-jsinspector (0.64.2)
- react-native-cameraroll (4.0.4):
- React-Core
- react-native-cookies (5.0.1):
- React-Core
- react-native-document-picker (5.0.3):
- react-native-document-picker (5.2.0):
- React-Core
- react-native-emm (1.1.1):
- react-native-emm (1.1.3):
- React-Core
- react-native-hw-keyboard-event (0.0.4):
- React
- react-native-netinfo (6.0.0):
- React-Core
- react-native-notifications (3.4.2):
- react-native-notifications (3.5.0):
- React-Core
- react-native-paste-input (0.1.3):
- React-Core
@ -253,72 +253,72 @@ PODS:
- react-native-video/Video (= 5.1.1)
- react-native-video/Video (5.1.1):
- React-Core
- react-native-webview (11.6.2):
- react-native-webview (11.6.4):
- React-Core
- React-perflogger (0.64.0)
- React-RCTActionSheet (0.64.0):
- React-Core/RCTActionSheetHeaders (= 0.64.0)
- React-RCTAnimation (0.64.0):
- FBReactNativeSpec (= 0.64.0)
- React-perflogger (0.64.2)
- React-RCTActionSheet (0.64.2):
- React-Core/RCTActionSheetHeaders (= 0.64.2)
- React-RCTAnimation (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- RCT-Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.64.0)
- React-Core/RCTAnimationHeaders (= 0.64.0)
- React-jsi (= 0.64.0)
- ReactCommon/turbomodule/core (= 0.64.0)
- React-RCTBlob (0.64.0):
- FBReactNativeSpec (= 0.64.0)
- RCTTypeSafety (= 0.64.2)
- React-Core/RCTAnimationHeaders (= 0.64.2)
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-RCTBlob (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- RCT-Folly (= 2020.01.13.00)
- React-Core/RCTBlobHeaders (= 0.64.0)
- React-Core/RCTWebSocket (= 0.64.0)
- React-jsi (= 0.64.0)
- React-RCTNetwork (= 0.64.0)
- ReactCommon/turbomodule/core (= 0.64.0)
- React-RCTImage (0.64.0):
- FBReactNativeSpec (= 0.64.0)
- React-Core/RCTBlobHeaders (= 0.64.2)
- React-Core/RCTWebSocket (= 0.64.2)
- React-jsi (= 0.64.2)
- React-RCTNetwork (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-RCTImage (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- RCT-Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.64.0)
- React-Core/RCTImageHeaders (= 0.64.0)
- React-jsi (= 0.64.0)
- React-RCTNetwork (= 0.64.0)
- ReactCommon/turbomodule/core (= 0.64.0)
- React-RCTLinking (0.64.0):
- FBReactNativeSpec (= 0.64.0)
- React-Core/RCTLinkingHeaders (= 0.64.0)
- React-jsi (= 0.64.0)
- ReactCommon/turbomodule/core (= 0.64.0)
- React-RCTNetwork (0.64.0):
- FBReactNativeSpec (= 0.64.0)
- RCTTypeSafety (= 0.64.2)
- React-Core/RCTImageHeaders (= 0.64.2)
- React-jsi (= 0.64.2)
- React-RCTNetwork (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-RCTLinking (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- React-Core/RCTLinkingHeaders (= 0.64.2)
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-RCTNetwork (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- RCT-Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.64.0)
- React-Core/RCTNetworkHeaders (= 0.64.0)
- React-jsi (= 0.64.0)
- ReactCommon/turbomodule/core (= 0.64.0)
- React-RCTSettings (0.64.0):
- FBReactNativeSpec (= 0.64.0)
- RCTTypeSafety (= 0.64.2)
- React-Core/RCTNetworkHeaders (= 0.64.2)
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-RCTSettings (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- RCT-Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.64.0)
- React-Core/RCTSettingsHeaders (= 0.64.0)
- React-jsi (= 0.64.0)
- ReactCommon/turbomodule/core (= 0.64.0)
- React-RCTText (0.64.0):
- React-Core/RCTTextHeaders (= 0.64.0)
- React-RCTVibration (0.64.0):
- FBReactNativeSpec (= 0.64.0)
- RCTTypeSafety (= 0.64.2)
- React-Core/RCTSettingsHeaders (= 0.64.2)
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-RCTText (0.64.2):
- React-Core/RCTTextHeaders (= 0.64.2)
- React-RCTVibration (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- RCT-Folly (= 2020.01.13.00)
- React-Core/RCTVibrationHeaders (= 0.64.0)
- React-jsi (= 0.64.0)
- ReactCommon/turbomodule/core (= 0.64.0)
- React-runtimeexecutor (0.64.0):
- React-jsi (= 0.64.0)
- ReactCommon/turbomodule/core (0.64.0):
- React-Core/RCTVibrationHeaders (= 0.64.2)
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-runtimeexecutor (0.64.2):
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (0.64.2):
- DoubleConversion
- glog
- RCT-Folly (= 2020.01.13.00)
- React-callinvoker (= 0.64.0)
- React-Core (= 0.64.0)
- React-cxxreact (= 0.64.0)
- React-jsi (= 0.64.0)
- React-perflogger (= 0.64.0)
- React-callinvoker (= 0.64.2)
- React-Core (= 0.64.2)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-perflogger (= 0.64.2)
- ReactNativeExceptionHandler (2.10.10):
- React-Core
- ReactNativeKeyboardTrackingView (5.7.0):
@ -338,9 +338,9 @@ PODS:
- React-Core
- RNCClipboard (1.5.1):
- React-Core
- RNCMaskedView (0.1.10):
- RNCMaskedView (0.1.11):
- React
- RNDeviceInfo (8.1.2):
- RNDeviceInfo (8.1.3):
- React-Core
- RNDevMenu (4.0.2):
- React-Core
@ -356,13 +356,13 @@ PODS:
- React-Core
- RNKeychain (7.0.0):
- React-Core
- RNLocalize (2.0.3):
- RNLocalize (2.1.1):
- React-Core
- RNPermissions (3.0.2):
- RNPermissions (3.0.4):
- React-Core
- RNReactNativeHapticFeedback (1.11.0):
- React-Core
- RNReanimated (2.1.0):
- RNReanimated (2.2.0):
- DoubleConversion
- FBLazyVector
- FBReactNativeSpec
@ -394,25 +394,25 @@ PODS:
- RNRudderSdk (1.0.0):
- React
- Rudder
- RNSentry (2.4.1):
- RNSentry (2.5.2):
- React-Core
- Sentry (= 6.1.4)
- RNShare (6.0.0):
- Sentry (= 7.0.0)
- RNShare (6.2.1):
- React-Core
- RNSVG (12.1.1):
- React
- RNVectorIcons (8.1.0):
- React-Core
- Rudder (1.0.14)
- Rudder (1.0.18)
- SDWebImage (5.11.1):
- SDWebImage/Core (= 5.11.1)
- SDWebImage/Core (5.11.1)
- SDWebImageWebPCoder (0.6.1):
- libwebp (~> 1.0)
- SDWebImage/Core (~> 5.7)
- Sentry (6.1.4):
- Sentry/Core (= 6.1.4)
- Sentry/Core (6.1.4)
- Sentry (7.0.0):
- Sentry/Core (= 7.0.0)
- Sentry/Core (7.0.0)
- Swime (3.0.6)
- UMAppLoader (2.1.0)
- UMBarCodeScannerInterface (6.1.0):
@ -436,7 +436,7 @@ PODS:
- UMCore
- UMTaskManagerInterface (6.1.0):
- UMCore
- WatermelonDB (0.21.0):
- WatermelonDB (0.22.0):
- React
- React-jsi
- XCDYouTubeKit (2.8.2)
@ -713,93 +713,93 @@ SPEC CHECKSUMS:
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
BVLinearGradient: e3aad03778a456d77928f594a649e96995f1c872
DoubleConversion: cf9b38bf0b2d048436d9a82ad2abe1404f11e7de
EXConstants: c00cd53a17a65b2e53ddb3890e4e74d3418e406e
EXFileSystem: 35769beb727d5341d1276fd222710f9704f7164e
FBLazyVector: 49cbe4b43e445b06bf29199b6ad2057649e4c8f5
FBReactNativeSpec: 0eb0a77cec90f681f2a6e58baba2224a1597e3ed
EXConstants: c4dd28acc12039c999612507a5f935556f2c86ce
EXFileSystem: dcf2273f49431e5037347c733a2dc5d08e0d0a9e
FBLazyVector: e686045572151edef46010a6f819ade377dfeb4b
FBReactNativeSpec: cef0cc6d50abc92e8cf52f140aa22b5371cfec0b
glog: 73c2498ac6884b13ede40eda8228cb1eee9d9d62
jail-monkey: 80c9e34da2cd54023e5ad08bf7051ec75bd43d5b
jail-monkey: 01cd0a75aa1034d08fd851869e6e6c3b063242d7
libwebp: e90b9c01d99205d03b6bb8f2c8c415e5a4ef66f0
Permission-Camera: 4eb4a67be32698c5927cb12313c3c1f23ee5b7b2
Permission-PhotoLibrary: 5b198e177c0bc5c91c20e66ae7202d0183c78b87
Permission-Camera: 74dc395c37a06ebe915069c5dca954c7a2a5a2e3
Permission-PhotoLibrary: 440f206f0d36e5951c4c9b28567f60471fdddfb5
RCT-Folly: ec7a233ccc97cc556cf7237f0db1ff65b986f27c
RCTRequired: 2f8cb5b7533219bf4218a045f92768129cf7050a
RCTTypeSafety: 512728b73549e72ad7330b92f3d42936f2a4de5b
RCTYouTube: 7ff7d42f5ed42d185198681e967fd2c2b661375d
React: 98eac01574128a790f0bbbafe2d1a8607291ac24
React-callinvoker: def3f7fae16192df68d9b69fd4bbb59092ee36bc
React-Core: 70a52aa5dbe9b83befae82038451a7df9fd54c5a
React-CoreModules: 052edef46117862e2570eb3a0f06d81c61d2c4b8
React-cxxreact: c1dc71b30653cfb4770efdafcbdc0ad6d388baab
React-jsi: 74341196d9547cbcbcfa4b3bbbf03af56431d5a1
React-jsiexecutor: 06a9c77b56902ae7ffcdd7a4905f664adc5d237b
React-jsinspector: 0ae35a37b20d5e031eb020a69cc5afdbd6406301
react-native-cameraroll: 7c6c7ca84844f93b3dac9a87670bbad6541684ec
RCTRequired: 6d3e854f0e7260a648badd0d44fc364bc9da9728
RCTTypeSafety: c1f31d19349c6b53085766359caac425926fafaa
RCTYouTube: a8bb45705622a6fc9decf64be04128d3658ed411
React: bda6b6d7ae912de97d7a61aa5c160db24aa2ad69
React-callinvoker: 9840ea7e8e88ed73d438edb725574820b29b5baa
React-Core: b5e385da7ce5f16a220fc60fd0749eae2c6120f0
React-CoreModules: 17071a4e2c5239b01585f4aa8070141168ab298f
React-cxxreact: 9be7b6340ed9f7c53e53deca7779f07cd66525ba
React-jsi: 67747b9722f6dab2ffe15b011bcf6b3f2c3f1427
React-jsiexecutor: 80c46bd381fd06e418e0d4f53672dc1d1945c4c3
React-jsinspector: cc614ec18a9ca96fd275100c16d74d62ee11f0ae
react-native-cameraroll: 88f4e62d9ecd0e1f253abe4f685474f2ea14bfa2
react-native-cookies: ce50e42ace7cf0dd47769260ca5bbe8eee607e4e
react-native-document-picker: d2b8fa4d9b268a316515b1f631236f7a87813df6
react-native-emm: 480fc1cf19a8f3cd2b7e96d15ae3a238307bd534
react-native-document-picker: f1b5398801b332c77bc62ae0eae2116f49bdff26
react-native-emm: 1652c0f3ebc39ca0cb57a43f60b96f932b7b7f19
react-native-hw-keyboard-event: b517cefb8d5c659a38049c582de85ff43337dc53
react-native-netinfo: 34f4d7a42f49157f3b45c14217d256bce7dc9682
react-native-notifications: e914ff49de3b2268cfa1b5e2ad21fd27c36d5b7b
react-native-paste-input: 003693cff6fcea476066172e66901beb7ef25670
react-native-safe-area-context: e471852c5ed67eea4b10c5d9d43c1cebae3b231d
react-native-video: 1574074179ecaf6a9dd067116c8f31bf9fec15c8
react-native-webview: 1f56115845c98f0a59dfbbac685797c014a821be
React-perflogger: 9c547d8f06b9bf00cb447f2b75e8d7f19b7e02af
React-RCTActionSheet: 3080b6e12e0e1a5b313c8c0050699b5c794a1b11
React-RCTAnimation: 3f96f21a497ae7dabf4d2f150ee43f906aaf516f
React-RCTBlob: 283b8e5025e7f954176bc48164f846909002f3ed
React-RCTImage: 5088a484faac78f2d877e1b79125d3bb1ea94a16
React-RCTLinking: 5e8fbb3e9a8bc2e4e3eb15b1eb8bda5fcac27b8c
React-RCTNetwork: 38ec277217b1e841d5e6a1fa78da65b9212ccb28
React-RCTSettings: 242d6e692108c3de4f3bb74b7586a8799e9ab070
React-RCTText: 8746736ac8eb5a4a74719aa695b7a236a93a83d2
React-RCTVibration: 0fd6b21751a33cb72fce1a4a33ab9678416d307a
React-runtimeexecutor: cad74a1eaa53ee6e7a3620231939d8fe2c6afcf0
ReactCommon: cfe2b7fd20e0dbd2d1185cd7d8f99633fbc5ff05
react-native-netinfo: e849fc21ca2f4128a5726c801a82fc6f4a6db50d
react-native-notifications: 89a73cd2cd2648e1734fa10e3507681c9e4f14de
react-native-paste-input: dbf0099efd191ddf53e55a4a454bea0783ce4e1d
react-native-safe-area-context: f0906bf8bc9835ac9a9d3f97e8bde2a997d8da79
react-native-video: 0bb76b6d6b77da3009611586c7dbf817b947f30e
react-native-webview: 1a19adb5578cdf7f005b7961dcc50c1c6b70f41b
React-perflogger: 25373e382fed75ce768a443822f07098a15ab737
React-RCTActionSheet: af7796ba49ffe4ca92e7277a5d992d37203f7da5
React-RCTAnimation: 6a2e76ab50c6f25b428d81b76a5a45351c4d77aa
React-RCTBlob: 02a2887023e0eed99391b6445b2e23a2a6f9226d
React-RCTImage: ce5bf8e7438f2286d9b646a05d6ab11f38b0323d
React-RCTLinking: ccd20742de14e020cb5f99d5c7e0bf0383aefbd9
React-RCTNetwork: dfb9d089ab0753e5e5f55fc4b1210858f7245647
React-RCTSettings: b14aef2d83699e48b410fb7c3ba5b66cd3291ae2
React-RCTText: 41a2e952dd9adc5caf6fb68ed46b275194d5da5f
React-RCTVibration: 24600e3b1aaa77126989bc58b6747509a1ba14f3
React-runtimeexecutor: a9904c6d0218fb9f8b19d6dd88607225927668f9
ReactCommon: 149906e01aa51142707a10665185db879898e966
ReactNativeExceptionHandler: b11ff67c78802b2f62eed0e10e75cb1ef7947c60
ReactNativeKeyboardTrackingView: 02137fac3b2ebd330d74fa54ead48b14750a2306
ReactNativeNavigation: 4c4ca87edc0da4ee818158a62cb6188088454e5c
rn-fetch-blob: 17961aec08caae68bb8fc0e5b40f93b3acfa6932
RNCAsyncStorage: cb9a623793918c6699586281f0b51cbc38f046f9
RNCClipboard: 5e299c6df8e0c98f3d7416b86ae563d3a9f768a3
RNCMaskedView: f5c7d14d6847b7b44853f7acb6284c1da30a3459
RNDeviceInfo: 4f480456c7ac8c9919448375399c1a6f14479549
RNDevMenu: 9f80d65b80ba1fa84e5361d017b8c854a2f05005
RNCAsyncStorage: b03032fdbdb725bea0bd9e5ec5a7272865ae7398
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
RNCMaskedView: 0e1bc4bfa8365eba5fbbb71e07fbdc0555249489
RNDeviceInfo: 8d3a29207835f972bce883723882980143270d55
RNDevMenu: fd325b5554b61fe7f48d9205a3877cf5ee88cd7c
RNFastImage: d4870d58f5936111c56218dbd7fcfc18e65b58ff
RNFileViewer: 83cc066ad795b1f986791d03b56fe0ee14b6a69f
RNGestureHandler: a479ebd5ed4221a810967000735517df0d2db211
RNKeychain: f75b8c8b2f17d3b2aa1f25b4a0ac5b83d947ff8f
RNLocalize: 29e84ea169d3bca6c3b83584536c7f586a07fb98
RNPermissions: 84ffe5ee7d608e037d9ed1db846ffb1d5d4e1dba
RNLocalize: 82a569022724d35461e2dc5b5d015a13c3ca995b
RNPermissions: c46788f4cd402287425983e04a4c9bb4356036eb
RNReactNativeHapticFeedback: 653a8c126a0f5e88ce15ffe280b3ff37e1fbb285
RNReanimated: b8c8004b43446e3c2709fe64b2b41072f87428ad
RNReanimated: 9c13c86454bfd54dab7505c1a054470bfecd2563
RNRudderSdk: 5d99b1a5a582ab55d6213b38018d35e98818af63
RNSentry: 824a6a0ec885428163fe6827aa08014f9962f223
RNShare: 31fa0cedbd06c2744a78e0d2b7ba364778aa3506
RNSentry: bfa1e2776c7413570e790cbbf79d2060dd0a565b
RNShare: 5ac8f6532ca4cd80fc71caef1cfbba1854a6a045
RNSVG: 551acb6562324b1d52a4e0758f7ca0ec234e278f
RNVectorIcons: 31cebfcf94e8cf8686eb5303ae0357da64d7a5a4
Rudder: 40f3a255fab3f8bbe120e496f90019de68c1aca1
Rudder: 2a70cad66a3f5f3f6be056bf1ce0ce8d10b5ca67
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
SDWebImageWebPCoder: d0dac55073088d24b2ac1b191a71a8f8d0adac21
Sentry: 9d055e2de30a77685e86b219acf02e59b82091fc
Sentry: 89d26e036063b9cb9caa59b6951dd2f8277aa13b
Swime: d7b2c277503b6cea317774aedc2dce05613f8b0b
UMAppLoader: aae896b81e3fcaa6528992e2e19ec8db38c2cedd
UMBarCodeScannerInterface: 96a01d81ff0c7febbfefc2d7396db9e7462d8c68
UMCameraInterface: 8ad433fdadca22703ebeb614d42b814092d38d69
UMConstantsInterface: 55c79ca258a3ede70480fed85e3843899cd47ea3
UMCore: 0da048c9753abcea0042258e6ad0fed77811f7e1
UMFaceDetectorInterface: 4db950a25e785796a237bcebb8fff05078c4fb61
UMFileSystemInterface: 4a92ee36e6c2757833031718f8496690fa931280
UMFontInterface: 81a951117d03f57aa636fba3992adefd0191f200
UMImageLoaderInterface: 5cd09b41630dc8aef7619fabc497c01c0f6b715c
UMPermissionsInterface: 4351145563e703c521fe2299e08227bc3584b94a
UMReactNativeAdapter: 7b458ca3d4497b5114e6bb766b223432bad22d8a
UMSensorsInterface: 50439b47826e716a514cbd7384aebe9ab4fde5f4
UMTaskManagerInterface: 482155764886069beb1bc7fcf6036f12e4ad0751
WatermelonDB: e6706a0fac2221e2be4bdc93ff0e3990231d91bd
UMAppLoader: fe2708bb0ac5cd70052bc207d06aa3b7e72b9e97
UMBarCodeScannerInterface: 79f92bea5f7af39b381a4c82298105ceb537408a
UMCameraInterface: 81ff46700da88435f17afedfc88915eaede7e6a6
UMConstantsInterface: bb94dd46039dcde276ed50225b29e22785e604bf
UMCore: 60b35f4d217461f7b54934b0c5be67442871f01f
UMFaceDetectorInterface: 791eec55ffca1171992976b7eceb73e69e391c58
UMFileSystemInterface: f72245e90ce78fa6427180ff0b0904ead13d8161
UMFontInterface: 5843cff7db85a42ba629aaac53d33091c35524d3
UMImageLoaderInterface: 9ddffeb644b3f45d4eb0c2f51a2fd95fd5c8d1a4
UMPermissionsInterface: 40b72935a7d12a3f60dc6b7bb99ce47908380cb1
UMReactNativeAdapter: 65ada852a648fcb6674acfbfe72ccb095f2f5b75
UMSensorsInterface: a5e9db661e5d9ae214762033d725989880ae6993
UMTaskManagerInterface: 203c11259d2699b5b3a4eda4adbc466f5cb5c561
WatermelonDB: 1da309a2b3fe35360e92f5a6bda2156543447955
XCDYouTubeKit: 79baadb0560673a67c771eba45f83e353fd12c1f
Yoga: 8c8436d4171c87504c648ae23b1d81242bdf3bbf
Yoga: 575c581c63e0d35c9a83f4b46d01d63abc1100ac
YoutubePlayer-in-WKWebView: cfbf46da51d7370662a695a8f351e5fa1d3e1008
PODFILE CHECKSUM: 34335a8d329b001fdfa695c4fb3c8928db80f375

47380
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -7,45 +7,45 @@
"license": "Apache 2.0",
"private": true,
"dependencies": {
"@babel/runtime": "7.13.16",
"@formatjs/intl-datetimeformat": "3.3.5",
"@formatjs/intl-getcanonicallocales": "1.5.10",
"@formatjs/intl-locale": "2.4.24",
"@formatjs/intl-numberformat": "6.2.10",
"@formatjs/intl-pluralrules": "4.0.18",
"@formatjs/intl-relativetimeformat": "8.1.8",
"@mattermost/react-native-emm": "1.1.1",
"@babel/runtime": "7.14.6",
"@formatjs/intl-datetimeformat": "4.1.5",
"@formatjs/intl-getcanonicallocales": "1.7.0",
"@formatjs/intl-locale": "2.4.32",
"@formatjs/intl-numberformat": "7.1.4",
"@formatjs/intl-pluralrules": "4.0.27",
"@formatjs/intl-relativetimeformat": "9.1.6",
"@mattermost/react-native-emm": "1.1.3",
"@mattermost/react-native-paste-input": "0.1.3",
"@nozbe/watermelondb": "0.21.0",
"@nozbe/watermelondb": "0.22.0",
"@nozbe/with-observables": "1.3.0",
"@react-native-community/async-storage": "1.12.1",
"@react-native-community/cameraroll": "4.0.4",
"@react-native-community/clipboard": "1.5.1",
"@react-native-community/cookies": "5.0.1",
"@react-native-community/masked-view": "0.1.10",
"@react-native-community/masked-view": "0.1.11",
"@react-native-community/netinfo": "6.0.0",
"@rudderstack/rudder-sdk-react-native": "1.0.6",
"@sentry/react-native": "2.4.1",
"@rudderstack/rudder-sdk-react-native": "1.0.10",
"@sentry/react-native": "2.5.2",
"commonmark": "github:mattermost/commonmark.js#f6ab98dede6ce4b4e7adea140ac77249bfb2d6ce",
"commonmark-react-renderer": "github:mattermost/commonmark-react-renderer#3a2ac19cab725ad28b170fdc1d397dddedcf87eb",
"deep-equal": "2.0.5",
"deepmerge": "4.2.2",
"emoji-regex": "9.2.2",
"fuse.js": "6.4.6",
"jail-monkey": "2.3.3",
"mime-db": "1.47.0",
"jail-monkey": "2.4.0",
"mime-db": "1.48.0",
"moment-timezone": "0.5.33",
"nock": "13.1.0",
"prop-types": "15.7.2",
"react": "17.0.2",
"react-intl": "5.15.8",
"react-native": "0.64.0",
"react-intl": "5.17.7",
"react-native": "0.64.2",
"react-native-android-open-settings": "1.3.0",
"react-native-button": "3.0.1",
"react-native-calendars": "1.1257.0",
"react-native-device-info": "8.1.2",
"react-native-document-picker": "5.0.3",
"react-native-elements": "3.3.2",
"react-native-calendars": "1.1263.0",
"react-native-device-info": "8.1.3",
"react-native-document-picker": "5.2.0",
"react-native-elements": "3.4.2",
"react-native-exception-handler": "2.10.10",
"react-native-fast-image": "8.3.4",
"react-native-file-viewer": "2.1.4",
@ -56,21 +56,21 @@
"react-native-keyboard-tracking-view": "5.7.0",
"react-native-keychain": "7.0.0",
"react-native-linear-gradient": "2.5.6",
"react-native-localize": "2.0.3",
"react-native-localize": "2.1.1",
"react-native-navigation": "7.13.0",
"react-native-notifications": "3.4.2",
"react-native-permissions": "3.0.2",
"react-native-reanimated": "2.1.0",
"react-native-notifications": "3.5.0",
"react-native-permissions": "3.0.4",
"react-native-reanimated": "2.2.0",
"react-native-redash": "16.0.11",
"react-native-safe-area-context": "3.2.0",
"react-native-share": "6.0.0",
"react-native-share": "6.2.1",
"react-native-slider": "0.11.0",
"react-native-svg": "12.1.1",
"react-native-unimodules": "0.13.3",
"react-native-vector-icons": "8.1.0",
"react-native-video": "5.1.1",
"react-native-webview": "11.6.2",
"react-native-youtube": "2.0.1",
"react-native-webview": "11.6.4",
"react-native-youtube": "2.0.2",
"rn-fetch-blob": "0.12.0",
"rn-placeholder": "3.0.3",
"semver": "7.3.5",
@ -80,65 +80,65 @@
"url-parse": "1.5.1"
},
"devDependencies": {
"@babel/cli": "7.13.16",
"@babel/core": "7.13.16",
"@babel/plugin-proposal-class-properties": "7.13.0",
"@babel/plugin-proposal-decorators": "7.13.15",
"@babel/plugin-transform-flow-strip-types": "7.13.0",
"@babel/plugin-transform-runtime": "7.13.15",
"@babel/preset-env": "7.13.15",
"@babel/preset-typescript": "7.13.0",
"@babel/register": "7.13.14",
"@react-native-community/eslint-config": "2.0.0",
"@storybook/addon-knobs": "6.2.8",
"@babel/cli": "7.14.5",
"@babel/core": "7.14.6",
"@babel/plugin-proposal-class-properties": "7.14.5",
"@babel/plugin-proposal-decorators": "7.14.5",
"@babel/plugin-transform-flow-strip-types": "7.14.5",
"@babel/plugin-transform-runtime": "7.14.5",
"@babel/preset-env": "7.14.5",
"@babel/preset-typescript": "7.14.5",
"@babel/register": "7.14.5",
"@react-native-community/eslint-config": "3.0.0",
"@storybook/addon-knobs": "6.2.9",
"@storybook/addon-ondevice-knobs": "5.3.25",
"@storybook/react-native": "5.3.25",
"@storybook/react-native-server": "5.3.23",
"@testing-library/react-native": "7.2.0",
"@types/jest": "26.0.22",
"@types/react": "17.0.3",
"@types/jest": "26.0.23",
"@types/react": "17.0.11",
"@types/react-intl": "3.0.0",
"@types/react-native": "0.64.4",
"@types/react-native": "0.64.10",
"@types/react-native-button": "3.0.0",
"@types/react-native-share": "3.3.2",
"@types/react-native-video": "5.0.4",
"@types/react-native-video": "5.0.6",
"@types/react-test-renderer": "17.0.1",
"@types/semver": "7.3.4",
"@types/semver": "7.3.6",
"@types/shallow-equals": "1.0.0",
"@types/tinycolor2": "1.4.2",
"@types/url-parse": "1.4.3",
"@typescript-eslint/eslint-plugin": "4.22.0",
"@typescript-eslint/parser": "4.22.0",
"@typescript-eslint/eslint-plugin": "4.28.0",
"@typescript-eslint/parser": "4.28.0",
"babel-eslint": "10.1.0",
"babel-jest": "26.6.3",
"babel-loader": "8.2.2",
"babel-plugin-module-resolver": "4.1.0",
"babel-plugin-transform-remove-console": "6.9.4",
"deep-freeze": "0.0.1",
"detox": "18.12.0",
"eslint": "7.24.0",
"detox": "18.18.1",
"eslint": "7.29.0",
"eslint-plugin-header": "3.1.1",
"eslint-plugin-jest": "24.3.5",
"eslint-plugin-jest": "24.3.6",
"eslint-plugin-mattermost": "github:mattermost/eslint-plugin-mattermost#070ce792d105482ffb2b27cfc0b7e78b3d20acee",
"eslint-plugin-react": "7.23.2",
"eslint-plugin-react": "7.24.0",
"eslint-plugin-react-hooks": "4.2.0",
"husky": "6.0.0",
"isomorphic-fetch": "3.0.0",
"jest": "26.6.3",
"jest-cli": "26.6.3",
"jetifier": "1.6.6",
"jetifier": "2.0.0",
"metro-react-native-babel-preset": "0.66.0",
"mmjstool": "github:mattermost/mattermost-utilities#519b99a4e51e6c67a0dbd46a6efdff27dc835aaa",
"mock-async-storage": "2.2.0",
"patch-package": "6.4.7",
"react-native-dev-menu": "4.0.2",
"react-native-dotenv": "2.5.5",
"react-native-storybook-loader": "2.0.2",
"react-native-storybook-loader": "2.0.4",
"react-test-renderer": "17.0.2",
"ts-jest": "26.5.5",
"typescript": "4.2.4",
"ts-jest": "27.0.3",
"typescript": "4.3.4",
"underscore": "1.13.1",
"util": "0.12.3"
"util": "0.12.4"
},
"scripts": {
"android": "react-native run-android",

View file

@ -1,111 +0,0 @@
diff --git a/node_modules/@nozbe/watermelondb/adapters/sqlite/index.d.ts b/node_modules/@nozbe/watermelondb/adapters/sqlite/index.d.ts
index 380f9c7..4302827 100644
--- a/node_modules/@nozbe/watermelondb/adapters/sqlite/index.d.ts
+++ b/node_modules/@nozbe/watermelondb/adapters/sqlite/index.d.ts
@@ -20,12 +20,19 @@ declare module '@nozbe/watermelondb/adapters/sqlite' {
export type SQLiteQuery = [SQL, SQLiteArg[]]
+ export type MigrationEvents = {
+ onSuccess?: () => void,
+ onStarted?: () => void,
+ onFailure?: (error: string) => void,
+ }
+
export interface SQLiteAdapterOptions {
dbName?: string
migrations?: SchemaMigrations
schema: AppSchema
synchronous?: boolean
experimentalUseJSI?: boolean
+ migrationEvents?: MigrationEvents
}
export default class SQLiteAdapter implements DatabaseAdapter {
diff --git a/node_modules/@nozbe/watermelondb/adapters/sqlite/index.js b/node_modules/@nozbe/watermelondb/adapters/sqlite/index.js
index 54fe949..f32d308 100644
--- a/node_modules/@nozbe/watermelondb/adapters/sqlite/index.js
+++ b/node_modules/@nozbe/watermelondb/adapters/sqlite/index.js
@@ -35,10 +35,12 @@ function () {
var {
dbName: dbName,
schema: schema,
- migrations: migrations
+ migrations: migrations,
+ migrationEvents: migrationEvents
} = options;
this.schema = schema;
this.migrations = migrations;
+ this._migrationEvents = migrationEvents;
this._dbName = this._getName(dbName);
this._dispatcherType = (0, _makeDispatcher.getDispatcherType)(options);
this._dispatcher = (0, _makeDispatcher.makeDispatcher)(this._dispatcherType, this._tag, this._dbName);
@@ -160,6 +162,10 @@ function () {
if (migrationSteps) {
_common.logger.log("[WatermelonDB][SQLite] Migrating from version ".concat(databaseVersion, " to ").concat(this.schema.version, "..."));
+ if (this._migrationEvents && this._migrationEvents.onStarted) {
+ this._migrationEvents.onStarted();
+ }
+
var $Try_1_Post = function () {
try {
return $If_4.call(this);
@@ -172,11 +178,15 @@ function () {
try {
_common.logger.error('[WatermelonDB][SQLite] Migration failed', error);
+ if (this._migrationEvents && this._migrationEvents.onFailure) {
+ this._migrationEvents.onFailure();
+ }
+
throw error;
} catch ($boundEx) {
return $error($boundEx);
}
- };
+ }.bind(this);
try {
return Promise.resolve((0, _Result.toPromise)(function (callback) {
@@ -185,11 +195,15 @@ function () {
try {
_common.logger.log('[WatermelonDB][SQLite] Migration successful');
+ if (this._migrationEvents && this._migrationEvents.onSuccess) {
+ this._migrationEvents.onSuccess();
+ }
+
return $Try_1_Post();
} catch ($boundEx) {
return $Try_1_Catch($boundEx);
}
- }, $Try_1_Catch);
+ }.bind(this), $Try_1_Catch);
} catch (error) {
$Try_1_Catch(error)
}
diff --git a/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/Database.kt b/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/Database.kt
index 2217222..afde44a 100644
--- a/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/Database.kt
+++ b/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/Database.kt
@@ -15,6 +15,19 @@ class Database(private val name: String, private val context: Context) {
if (name == ":memory:" || name.contains("mode=memory")) {
context.cacheDir.delete()
File(context.cacheDir, name).path
+ } else if (name.contains("/") || name.contains("file")) {
+ // Extracts the database name from the path
+ val dbName = name.substringAfterLast("/")
+
+ // Extracts the real path where the *.db file will be created
+ val truePath = name.substringAfterLast("file://").substringBeforeLast("/")
+
+ // Creates the directory
+ val fileObj = File(truePath, "databases")
+ fileObj.mkdir()
+
+
+ File("${truePath}/databases", dbName).path
} else
// On some systems there is some kind of lock on `/databases` folder ¯\_(ツ)_/¯
context.getDatabasePath("$name.db").path.replace("/databases", ""),

View file

@ -0,0 +1,44 @@
diff --git a/node_modules/@nozbe/watermelondb/adapters/sqlite/index.d.ts b/node_modules/@nozbe/watermelondb/adapters/sqlite/index.d.ts
index 4b67b51..6eaa23a 100644
--- a/node_modules/@nozbe/watermelondb/adapters/sqlite/index.d.ts
+++ b/node_modules/@nozbe/watermelondb/adapters/sqlite/index.d.ts
@@ -20,9 +20,16 @@ declare module '@nozbe/watermelondb/adapters/sqlite' {
export type SQLiteQuery = [SQL, SQLiteArg[]]
+ export type MigrationEvents = {
+ onSuccess: () => void,
+ onStart: () => void,
+ onError: (error: Error) => void,
+ }
+
export interface SQLiteAdapterOptions {
dbName?: string
migrations?: SchemaMigrations
+ migrationEvents?: MigrationEvents
schema: AppSchema
synchronous?: boolean
jsi?: boolean
diff --git a/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/Database.kt b/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/Database.kt
index 2217222..49a6ff7 100644
--- a/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/Database.kt
+++ b/node_modules/@nozbe/watermelondb/native/android/src/main/java/com/nozbe/watermelondb/Database.kt
@@ -15,6 +15,18 @@ class Database(private val name: String, private val context: Context) {
if (name == ":memory:" || name.contains("mode=memory")) {
context.cacheDir.delete()
File(context.cacheDir, name).path
+ } else if (name.contains("/") || name.contains("file")) {
+ // Extracts the database name from the path
+ val dbName = name.substringAfterLast("/")
+
+ // Extracts the real path where the *.db file will be created
+ val truePath = name.substringAfterLast("file://").substringBeforeLast("/")
+
+ // Creates the directory
+ val fileObj = File(truePath, "databases")
+ fileObj.mkdir()
+
+ File("${truePath}/databases", dbName).path
} else
// On some systems there is some kind of lock on `/databases` folder ¯\_(ツ)_/¯
context.getDatabasePath("$name.db").path.replace("/databases", ""),

View file

@ -1,5 +1,5 @@
diff --git a/node_modules/react-native/Libraries/Lists/VirtualizedList.js b/node_modules/react-native/Libraries/Lists/VirtualizedList.js
index 2249d54..d26452a 100644
index 2249d54..cc303b3 100644
--- a/node_modules/react-native/Libraries/Lists/VirtualizedList.js
+++ b/node_modules/react-native/Libraries/Lists/VirtualizedList.js
@@ -18,6 +18,7 @@ const ScrollView = require('../Components/ScrollView/ScrollView');
@ -10,12 +10,19 @@ index 2249d54..d26452a 100644
const flattenStyle = require('../StyleSheet/flattenStyle');
const infoLog = require('../Utilities/infoLog');
@@ -2061,7 +2062,7 @@ function describeNestedLists(childList: {
@@ -2061,7 +2062,14 @@ function describeNestedLists(childList: {
const styles = StyleSheet.create({
verticallyInverted: {
- transform: [{scaleY: -1}],
+ ...Platform.select({android: {transform: [{perspective: 1}, {scaleY: -1}]}, ios: {transform: [{scaleY: -1}]}}),
+ ...Platform.select({
+ android: {
+ scaleY: -1,
+ },
+ ios: {
+ transform: [{scaleY: -1}],
+ },
+ }),
},
horizontallyInverted: {
transform: [{scaleX: -1}],

View file

@ -1,5 +1,5 @@
diff --git a/node_modules/react-native-elements/dist/searchbar/SearchBar-android.js b/node_modules/react-native-elements/dist/searchbar/SearchBar-android.js
index 4261cea..183bde1 100644
index 1bfd2b4..820ccbc 100644
--- a/node_modules/react-native-elements/dist/searchbar/SearchBar-android.js
+++ b/node_modules/react-native-elements/dist/searchbar/SearchBar-android.js
@@ -10,7 +10,7 @@ var __rest = (this && this.__rest) || function (s, e) {
@ -11,7 +11,7 @@ index 4261cea..183bde1 100644
import { renderNode } from '../helpers';
import Input from '../input/Input';
import Icon from '../icons/Icon';
@@ -65,18 +65,16 @@ class SearchBar extends Component {
@@ -74,18 +74,11 @@ class SearchBar extends Component {
this.props.onChangeText(text);
this.setState({ isEmpty: text === '' });
};
@ -24,21 +24,17 @@ index 4261cea..183bde1 100644
isEmpty: value ? value === '' : true,
};
- Keyboard.addListener('keyboardDidHide', this._keyboardDidHide);
}
- }
- componentWillUnmount() {
- Keyboard.removeListener('keyboardDidHide', this._keyboardDidHide);
+ componentDidUpdate(prevProps) {
+ if (this.props.value !== prevProps.value) {
+ this.setState({isEmpty: this.props.value === ''});
+ }
}
render() {
const _a = this.props, { theme, clearIcon = { name: 'clear' }, containerStyle, leftIconContainerStyle, rightIconContainerStyle, inputContainerStyle, inputStyle, searchIcon = { name: 'search' }, cancelIcon = { name: 'arrow-back' }, showLoading = false, loadingProps = {} } = _a, attributes = __rest(_a, ["theme", "clearIcon", "containerStyle", "leftIconContainerStyle", "rightIconContainerStyle", "inputContainerStyle", "inputStyle", "searchIcon", "cancelIcon", "showLoading", "loadingProps"]);
var _a;
diff --git a/node_modules/react-native-elements/dist/searchbar/SearchBar-ios.js b/node_modules/react-native-elements/dist/searchbar/SearchBar-ios.js
index b0761ab..4fa5e83 100644
index 8fe90be..bb0e071 100644
--- a/node_modules/react-native-elements/dist/searchbar/SearchBar-ios.js
+++ b/node_modules/react-native-elements/dist/searchbar/SearchBar-ios.js
@@ -82,6 +82,11 @@ class SearchBar extends Component {
@@ -85,6 +85,11 @@ class SearchBar extends Component {
cancelButtonWidth: null,
};
}
@ -48,9 +44,9 @@ index b0761ab..4fa5e83 100644
+ }
+ }
render() {
const _a = this.props, { theme, cancelButtonProps, cancelButtonTitle, clearIcon, containerStyle, leftIconContainerStyle, rightIconContainerStyle, inputContainerStyle, inputStyle, placeholderTextColor, showLoading, loadingProps, searchIcon, showCancel } = _a, attributes = __rest(_a, ["theme", "cancelButtonProps", "cancelButtonTitle", "clearIcon", "containerStyle", "leftIconContainerStyle", "rightIconContainerStyle", "inputContainerStyle", "inputStyle", "placeholderTextColor", "showLoading", "loadingProps", "searchIcon", "showCancel"]);
const { hasFocus, isEmpty } = this.state;
@@ -159,7 +164,6 @@ const styles = StyleSheet.create({
var _a, _b, _c, _d, _e, _f, _g;
const _h = this.props, { theme, cancelButtonProps, cancelButtonTitle, clearIcon, containerStyle, leftIconContainerStyle, rightIconContainerStyle, inputContainerStyle, inputStyle, placeholderTextColor, showLoading, loadingProps, searchIcon, showCancel } = _h, attributes = __rest(_h, ["theme", "cancelButtonProps", "cancelButtonTitle", "clearIcon", "containerStyle", "leftIconContainerStyle", "rightIconContainerStyle", "inputContainerStyle", "inputStyle", "placeholderTextColor", "showLoading", "loadingProps", "searchIcon", "showCancel"]);
@@ -167,7 +172,6 @@ const styles = StyleSheet.create({
paddingBottom: 13,
paddingTop: 13,
flexDirection: 'row',
@ -58,7 +54,7 @@ index b0761ab..4fa5e83 100644
alignItems: 'center',
},
input: {
@@ -169,7 +173,7 @@ const styles = StyleSheet.create({
@@ -177,7 +181,7 @@ const styles = StyleSheet.create({
inputContainer: {
borderBottomWidth: 0,
borderRadius: 9,

View file

@ -16,12 +16,6 @@ import type System from '@typings/database/models/servers/system';
import {DatabaseType} from './enums';
export type MigrationEvents = {
onSuccess: () => void;
onStarted: () => void;
onFailure: (error: string) => void;
};
export type CreateServerDatabaseConfig = {
dbName: string;
dbType?: DatabaseType.DEFAULT | DatabaseType.SERVER;