From fbfc126148a31beacd4416e36f0e6c12031bd3a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Csaba=20T=C3=B3th=20//=20BDSC=20Business=20Digitalisation?= =?UTF-8?q?=20Kft?= Date: Tue, 27 Dec 2022 15:57:19 +0000 Subject: [PATCH 01/47] Translated using Weblate (Hungarian) Currently translated at 41.0% (385 of 939 strings) Translation: mattermost-languages-shipped/mattermost-mobile-v2 Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile-v2/hu/ --- assets/base/i18n/hu.json | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/assets/base/i18n/hu.json b/assets/base/i18n/hu.json index 071a2dda3..1a6eebbba 100644 --- a/assets/base/i18n/hu.json +++ b/assets/base/i18n/hu.json @@ -366,5 +366,23 @@ "user.settings.general.lastName": "Vezetéknév", "user.settings.general.nickname": "Becenév", "user.settings.general.position": "Beosztás", - "user.settings.general.username": "Felhasználónév" + "user.settings.general.username": "Felhasználónév", + "apps.error.parser.empty_value": "Üres értékek nem megengedettek.", + "announcment_banner.okay": "Rendben", + "alert.push_proxy.button": "Rendben", + "account.your_profile": "Profilom", + "account.settings": "Beállítások", + "account.logout_from": "Kilépés a {serverName} szerverről", + "account.logout": "Kijelentkezés", + "announcment_banner.dismiss": "Értesítés elrejtése", + "alert.removed_from_team.title": "Eltávolítva a csapatból", + "alert.removed_from_team.description": "Önt eltávolították a {displayName} csapatból.", + "alert.removed_from_channel.title": "Eltávolítva a csatornából", + "alert.removed_from_channel.description": "Önt eltávolították a {displayName} csatornából.", + "alert.push_proxy_unknown.title": "Nem sikerült értesítést fogadni erről a szerverről", + "alert.push_proxy_unknown.description": "Ez a kiszolgáló ismeretlen okból nem tudott push-értesítéseket fogadni. A következő csatlakozáskor újra megkíséreljük.", + "alert.push_proxy_error.title": "Erről a szerverről nem lehet értesítéseket fogadni", + "alert.push_proxy_error.description": "A szerver konfigurációja miatt a mobilalkalmazás nem fogadhat értesítéseket. További információkért forduljon a rendszeradminisztrátorhoz.", + "alert.channel_deleted.title": "Archivált csatorna", + "alert.channel_deleted.description": "A {displayName} csatorna archiválva lett." } From 43d151f0afff275acc340c34468bf30ec4a81e59 Mon Sep 17 00:00:00 2001 From: MArtin Johnson Date: Wed, 28 Dec 2022 14:12:49 +0000 Subject: [PATCH 02/47] Translated using Weblate (Swedish) Currently translated at 98.8% (928 of 939 strings) Translation: mattermost-languages-shipped/mattermost-mobile-v2 Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile-v2/sv/ --- assets/base/i18n/sv.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/assets/base/i18n/sv.json b/assets/base/i18n/sv.json index 76e7803c9..9f2816417 100644 --- a/assets/base/i18n/sv.json +++ b/assets/base/i18n/sv.json @@ -604,7 +604,7 @@ "display_settings.clock.military": "24-timmars", "custom_status.suggestions.title": "Förslag", "custom_status.suggestions.recent_title": "Nyligen", - "custom_status.set_status": "Ange status", + "custom_status.set_status": "Ange egen status", "create_post.thread_reply": "Svara på tråden...", "create_direct_message.title": "Skapa ett direktmeddelande", "channel_modal.purposeEx": "En kanal att rapportera buggar och förbättringar", @@ -925,5 +925,7 @@ "connection_banner.not_connected": "Ingen internetåtkomst", "connection_banner.connected": "Anslutningen är återställd", "thread.loadingReplies": "Laddar svar..", - "mobile.calls_open_channel": "Öppen kanal" + "mobile.calls_open_channel": "Öppen kanal", + "join_team.error.group_error": "Du behöver vara medlem i en länkad grupp för att gå med i teamet.", + "connection_banner.connecting": "Ansluter..." } From 1a551c2104bec4191cbf14119b33604219a5c7dc Mon Sep 17 00:00:00 2001 From: MArtin Johnson Date: Wed, 28 Dec 2022 14:14:59 +0000 Subject: [PATCH 03/47] Translated using Weblate (Swedish) Currently translated at 100.0% (939 of 939 strings) Translation: mattermost-languages-shipped/mattermost-mobile-v2 Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile-v2/sv/ --- assets/base/i18n/sv.json | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/assets/base/i18n/sv.json b/assets/base/i18n/sv.json index 9f2816417..afb0a52e3 100644 --- a/assets/base/i18n/sv.json +++ b/assets/base/i18n/sv.json @@ -280,7 +280,7 @@ "mobile.reset_status.title_ooo": "Inaktivera \"Ej på kontoret\"?", "mobile.routes.code": "{language} kod", "mobile.routes.code.noLanguage": "Kod", - "mobile.routes.custom_status": "Ange status", + "mobile.routes.custom_status": "Ange egen status", "mobile.routes.table": "Tabell", "mobile.routes.user_profile": "Profil", "mobile.search.jump": "Hoppa till senaste meddelanden", @@ -927,5 +927,15 @@ "thread.loadingReplies": "Laddar svar..", "mobile.calls_open_channel": "Öppen kanal", "join_team.error.group_error": "Du behöver vara medlem i en länkad grupp för att gå med i teamet.", - "connection_banner.connecting": "Ansluter..." + "connection_banner.connecting": "Ansluter...", + "video.download_description": "Denna video måste laddas ner för att kunna spelas upp.", + "user.edit_profile.profile_photo.change_photo": "Ändra profilbild", + "user_status.title": "Status", + "user_status.online": "Ansluten", + "user_status.offline": "Offline", + "user_status.dnd": "Stör ej", + "user_status.away": "Tillfälligt borta", + "mobile.camera_type.title": "Alternativ för kameran", + "join_team.error.title": "Fel vid anslutning till teamet", + "join_team.error.message": "Det har uppstått ett fel när du skulle anslutas till teamet" } From 62a07e606ff213701db9c8f625c431880037da33 Mon Sep 17 00:00:00 2001 From: Tom De Moor Date: Thu, 29 Dec 2022 07:52:25 +0000 Subject: [PATCH 04/47] Translated using Weblate (Dutch) Currently translated at 100.0% (939 of 939 strings) Translation: mattermost-languages-shipped/mattermost-mobile-v2 Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile-v2/nl/ --- assets/base/i18n/nl.json | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/assets/base/i18n/nl.json b/assets/base/i18n/nl.json index 4fd5753d7..6029d0d00 100644 --- a/assets/base/i18n/nl.json +++ b/assets/base/i18n/nl.json @@ -280,7 +280,7 @@ "mobile.reset_status.title_ooo": "\"Out of Office\" Uitschakelen?", "mobile.routes.code": "{language} Code", "mobile.routes.code.noLanguage": "Code", - "mobile.routes.custom_status": "Een status instellen", + "mobile.routes.custom_status": "Een aangepaste status instellen", "mobile.routes.table": "Tabel", "mobile.routes.user_profile": "Profiel", "mobile.search.jump": "Naar recente berichten gaan", @@ -926,5 +926,16 @@ "post_priority.picker.label.important": "Belangrijk", "post_priority.picker.beta": "BETA", "mobile.open_dm.error": "We konden geen direct bericht openen met {displayName} . Controleer jouw verbinding en probeer het opnieuw.", - "connection_banner.connecting": "Bezig met verbinden..." + "connection_banner.connecting": "Bezig met verbinden...", + "video.download_description": "Deze video moet worden gedownload om deze af te spelen.", + "user.edit_profile.profile_photo.change_photo": "Profielfoto wijzigen", + "user_status.title": "Status", + "user_status.online": "Online", + "user_status.offline": "Offline", + "user_status.dnd": "Niet Storen", + "user_status.away": "Afwezig", + "mobile.camera_type.title": "Camera-opties", + "join_team.error.title": "Fout bij het lid worden van een team", + "join_team.error.message": "Er is een fout opgetreden bij het lid worden van het team", + "join_team.error.group_error": "Je moet lid zijn van een gekoppelde groep om deel te nemen aan dit team." } From 3fe3d09b040e7f7ace531ec1e6f457db45b9a8e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=EC=84=B1=EA=B7=BC?= Date: Mon, 2 Jan 2023 04:22:17 +0000 Subject: [PATCH 05/47] Translated using Weblate (Korean) Currently translated at 58.8% (553 of 939 strings) Translation: mattermost-languages-shipped/mattermost-mobile-v2 Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile-v2/ko/ --- assets/base/i18n/ko.json | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/assets/base/i18n/ko.json b/assets/base/i18n/ko.json index 67b34f366..964d6dfb5 100644 --- a/assets/base/i18n/ko.json +++ b/assets/base/i18n/ko.json @@ -157,11 +157,11 @@ "gallery.footer.channel_name": "{channelName}에서 공유", "gallery.open_file": "파일 열기", "get_post_link_modal.title": "링크 복사", - "global_threads.allThreads": "모든 스레드", - "global_threads.emptyThreads.message": "멘션되거나 참여한 모든 스레드가 팔로우하는 스레드와 함께 표시됩니다.", - "global_threads.emptyThreads.title": "아직 팔로우하는 스레드가 없습니다", + "global_threads.allThreads": "모든 글타레", + "global_threads.emptyThreads.message": "언급되거나 참여한 모든 글타래가 여기에 지켜보는 글타래와 함께 표시됩니다.", + "global_threads.emptyThreads.title": "아직 지켜보는 글타래가 없습니다", "global_threads.emptyUnreads.message": "볼 건 다 본 것 같네요.", - "global_threads.emptyUnreads.title": "읽지 않은 스레드 없음", + "global_threads.emptyUnreads.title": "읽지 않은 글타래 없음", "global_threads.markAllRead.cancel": "취소", "global_threads.markAllRead.markRead": "읽음으로 표시", "global_threads.markAllRead.message": "여기에 표시된 모든 글타래를 읽음으로 표시", @@ -551,5 +551,6 @@ "channel_info.favorite": "즐겨찾기", "channel_info.edit_header": "제목글 편집", "channel_info.custom_status": "사용자 정의 상태:", - "channel_info.copy_link": "링크 복사" + "channel_info.copy_link": "링크 복사", + "general_settings.display": "화면" } From bdf5ad87c33065abdc7c8a26ec149de69e266f2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=EC=84=B1=EA=B7=BC?= Date: Mon, 2 Jan 2023 19:13:47 +0000 Subject: [PATCH 06/47] Translated using Weblate (Korean) Currently translated at 58.8% (553 of 939 strings) Translation: mattermost-languages-shipped/mattermost-mobile-v2 Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile-v2/ko/ --- assets/base/i18n/ko.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/base/i18n/ko.json b/assets/base/i18n/ko.json index 964d6dfb5..0ff9e558e 100644 --- a/assets/base/i18n/ko.json +++ b/assets/base/i18n/ko.json @@ -158,7 +158,7 @@ "gallery.open_file": "파일 열기", "get_post_link_modal.title": "링크 복사", "global_threads.allThreads": "모든 글타레", - "global_threads.emptyThreads.message": "언급되거나 참여한 모든 글타래가 여기에 지켜보는 글타래와 함께 표시됩니다.", + "global_threads.emptyThreads.message": "언급되거나 참여한 모든 글타래는 여기에 지켜보는 중인 글타래와 함께 표시됩니다.\n멘션되거나 참여한 모든 스레드가 팔로우 중인 스레드와 함께 표시됩니다.", "global_threads.emptyThreads.title": "아직 지켜보는 글타래가 없습니다", "global_threads.emptyUnreads.message": "볼 건 다 본 것 같네요.", "global_threads.emptyUnreads.title": "읽지 않은 글타래 없음", From 7df9801cdceedfc6d3cf37355812bf0ecf992a7c Mon Sep 17 00:00:00 2001 From: Ji-Hyeon Gim Date: Mon, 2 Jan 2023 19:14:47 +0000 Subject: [PATCH 07/47] Translated using Weblate (Korean) Currently translated at 58.9% (554 of 939 strings) Translation: mattermost-languages-shipped/mattermost-mobile-v2 Translate-URL: https://translate.mattermost.com/projects/mattermost/mattermost-mobile-v2/ko/ --- assets/base/i18n/ko.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/base/i18n/ko.json b/assets/base/i18n/ko.json index 0ff9e558e..1d01b2acb 100644 --- a/assets/base/i18n/ko.json +++ b/assets/base/i18n/ko.json @@ -158,7 +158,7 @@ "gallery.open_file": "파일 열기", "get_post_link_modal.title": "링크 복사", "global_threads.allThreads": "모든 글타레", - "global_threads.emptyThreads.message": "언급되거나 참여한 모든 글타래는 여기에 지켜보는 중인 글타래와 함께 표시됩니다.\n멘션되거나 참여한 모든 스레드가 팔로우 중인 스레드와 함께 표시됩니다.", + "global_threads.emptyThreads.message": "언급되거나 참여한 모든 글타래는 여기에 지켜보는 중인 글타래와 함께 표시됩니다.", "global_threads.emptyThreads.title": "아직 지켜보는 글타래가 없습니다", "global_threads.emptyUnreads.message": "볼 건 다 본 것 같네요.", "global_threads.emptyUnreads.title": "읽지 않은 글타래 없음", @@ -280,7 +280,7 @@ "mobile.reset_status.title_ooo": "\"부재 중\" 상태를 비활성화 하시겠어요?", "mobile.routes.code": "{language} 코드", "mobile.routes.code.noLanguage": "코드", - "mobile.routes.custom_status": "상태 설정하기", + "mobile.routes.custom_status": "사용자 정의 상태 설정하기", "mobile.routes.table": "표", "mobile.routes.user_profile": "프로필", "mobile.search.jump": "최근 메시지로 이동", From 411a7e22a20040c4cbeafbfbefcf6e1d20f47fbb Mon Sep 17 00:00:00 2001 From: Elias Nahum Date: Tue, 3 Jan 2023 23:36:31 +0200 Subject: [PATCH 08/47] Reduce the amount of queries to display the PostList (#6927) --- app/components/post_list/index.ts | 12 +- .../post_list/more_messages/more_messages.tsx | 6 +- .../post_list/new_message_line/index.tsx | 30 +--- app/components/post_list/post/index.ts | 66 +++------ app/components/post_list/post/post.tsx | 13 +- app/components/post_list/post_list.tsx | 139 ++++++------------ .../post_with_channel_info/index.ts | 6 +- .../post_with_channel_info.tsx | 6 +- app/queries/servers/post.ts | 17 ++- .../threads_list/threads_list.tsx | 1 + app/screens/home/recent_mentions/index.ts | 6 + .../home/recent_mentions/recent_mentions.tsx | 42 +++--- app/screens/home/saved_messages/index.ts | 5 + .../home/saved_messages/saved_messages.tsx | 42 +++--- .../home/search/results/file_results.tsx | 1 + app/screens/home/search/results/index.tsx | 6 + .../home/search/results/post_results.tsx | 44 +++--- app/screens/home/search/results/results.tsx | 6 + app/screens/pinned_messages/index.ts | 6 + .../pinned_messages/pinned_messages.tsx | 58 ++++---- app/utils/emoji/helpers.ts | 4 + app/utils/post_list/index.ts | 91 ++++++------ types/components/post_list.ts | 15 ++ 23 files changed, 324 insertions(+), 298 deletions(-) diff --git a/app/components/post_list/index.ts b/app/components/post_list/index.ts index 601a478ad..bcb76e3cd 100644 --- a/app/components/post_list/index.ts +++ b/app/components/post_list/index.ts @@ -7,22 +7,32 @@ import React from 'react'; import {of as of$} from 'rxjs'; import {switchMap} from 'rxjs/operators'; +import {queryAllCustomEmojis} from '@queries/servers/custom_emoji'; +import {observeSavedPostsByIds} from '@queries/servers/post'; import {observeConfigBooleanValue} from '@queries/servers/system'; import {observeCurrentUser} from '@queries/servers/user'; +import {mapCustomEmojiNames} from '@utils/emoji/helpers'; import {getTimezone} from '@utils/user'; import PostList from './post_list'; import type {WithDatabaseArgs} from '@typings/database/database'; +import type PostModel from '@typings/database/models/servers/post'; -const enhanced = withObservables([], ({database}: WithDatabaseArgs) => { +const enhanced = withObservables(['posts'], ({database, posts}: {posts: PostModel[]} & WithDatabaseArgs) => { const currentUser = observeCurrentUser(database); + const postIds = posts.map((p) => p.id); return { + appsEnabled: observeConfigBooleanValue(database, 'FeatureFlagAppsEnabled'), isTimezoneEnabled: observeConfigBooleanValue(database, 'ExperimentalTimezone'), currentTimezone: currentUser.pipe((switchMap((user) => of$(getTimezone(user?.timezone || null))))), currentUserId: currentUser.pipe((switchMap((user) => of$(user?.id)))), currentUsername: currentUser.pipe((switchMap((user) => of$(user?.username)))), + savedPostIds: observeSavedPostsByIds(database, postIds), + customEmojiNames: queryAllCustomEmojis(database).observe().pipe( + switchMap((customEmojis) => of$(mapCustomEmojiNames(customEmojis))), + ), }; }); diff --git a/app/components/post_list/more_messages/more_messages.tsx b/app/components/post_list/more_messages/more_messages.tsx index cd99bc1c2..835ce0c6b 100644 --- a/app/components/post_list/more_messages/more_messages.tsx +++ b/app/components/post_list/more_messages/more_messages.tsx @@ -17,14 +17,14 @@ import {useIsTablet} from '@hooks/device'; import {makeStyleSheetFromTheme, hexToHue} from '@utils/theme'; import {typography} from '@utils/typography'; -import type PostModel from '@typings/database/models/servers/post'; +import type {PostList} from '@typings/components/post_list'; type Props = { channelId: string; isCRTEnabled?: boolean; isManualUnread?: boolean; newMessageLineIndex: number; - posts: Array; + posts: PostList; registerScrollEndIndexListener: (fn: (endIndex: number) => void) => () => void; registerViewableItemsListener: (fn: (viewableItems: ViewToken[]) => void) => () => void; rootId?: string; @@ -188,7 +188,7 @@ const MoreMessages = ({ return; } - const readCount = posts.slice(0, lastViewableIndex).filter((v) => typeof v !== 'string').length; + const readCount = posts.slice(0, lastViewableIndex).filter((v) => v.type === 'post').length; const totalUnread = localUnreadCount.current - readCount; if (lastViewableIndex >= newMessageLineIndex) { resetCount(); diff --git a/app/components/post_list/new_message_line/index.tsx b/app/components/post_list/new_message_line/index.tsx index 496f5b65c..1ce138d0a 100644 --- a/app/components/post_list/new_message_line/index.tsx +++ b/app/components/post_list/new_message_line/index.tsx @@ -9,7 +9,6 @@ import {makeStyleSheetFromTheme} from '@utils/theme'; import {typography} from '@utils/typography'; type NewMessagesLineProps = { - moreMessages: boolean; style?: StyleProp; theme: Theme; testID?: string; @@ -39,34 +38,19 @@ const getStyleFromTheme = makeStyleSheetFromTheme((theme: Theme) => { }; }); -function NewMessagesLine({moreMessages, style, testID, theme}: NewMessagesLineProps) { +function NewMessagesLine({style, testID, theme}: NewMessagesLineProps) { const styles = getStyleFromTheme(theme); - let text = ( - - ); - - if (moreMessages) { - text = ( - - ); - } - return ( - {text} + diff --git a/app/components/post_list/post/index.ts b/app/components/post_list/post/index.ts index 88883ca94..5c47d4ab3 100644 --- a/app/components/post_list/post/index.ts +++ b/app/components/post_list/post/index.ts @@ -4,36 +4,32 @@ import {withDatabase} from '@nozbe/watermelondb/DatabaseProvider'; import withObservables from '@nozbe/with-observables'; import React from 'react'; -import {of as of$, combineLatest, Observable} from 'rxjs'; +import {of as of$, combineLatest} from 'rxjs'; import {switchMap, distinctUntilChanged} from 'rxjs/operators'; -import {Permissions, Preferences} from '@constants'; -import {queryAllCustomEmojis} from '@queries/servers/custom_emoji'; +import {Permissions, Preferences, Screens} from '@constants'; import {observePostAuthor, queryPostsBetween} from '@queries/servers/post'; -import {queryPreferencesByCategoryAndName} from '@queries/servers/preference'; import {observeCanManageChannelMembers, observePermissionForPost} from '@queries/servers/role'; -import {observeIsPostPriorityEnabled, observeConfigBooleanValue} from '@queries/servers/system'; +import {observeIsPostPriorityEnabled} from '@queries/servers/system'; import {observeThreadById} from '@queries/servers/thread'; import {observeCurrentUser} from '@queries/servers/user'; -import {hasJumboEmojiOnly} from '@utils/emoji/helpers'; import {areConsecutivePosts, isPostEphemeral} from '@utils/post'; import Post from './post'; import type {Database} from '@nozbe/watermelondb'; import type {WithDatabaseArgs} from '@typings/database/database'; -import type CustomEmojiModel from '@typings/database/models/servers/custom_emoji'; import type PostModel from '@typings/database/models/servers/post'; import type PostsInThreadModel from '@typings/database/models/servers/posts_in_thread'; import type UserModel from '@typings/database/models/servers/user'; type PropsInput = WithDatabaseArgs & { - appsEnabled: boolean; currentUser: UserModel; isCRTEnabled?: boolean; nextPost: PostModel | undefined; post: PostModel; previousPost: PostModel | undefined; + location: string; } function observeShouldHighlightReplyBar(database: Database, currentUser: UserModel, post: PostModel, postsInThread: PostsInThreadModel) { @@ -90,39 +86,35 @@ function isFirstReply(post: PostModel, previousPost?: PostModel) { } const withSystem = withObservables([], ({database}: WithDatabaseArgs) => ({ - appsEnabled: observeConfigBooleanValue(database, 'FeatureFlagAppsEnabled'), currentUser: observeCurrentUser(database), })); const withPost = withObservables( ['currentUser', 'isCRTEnabled', 'post', 'previousPost', 'nextPost'], - ({currentUser, database, isCRTEnabled, post, previousPost, nextPost}: PropsInput) => { - let isJumboEmoji = of$(false); + ({currentUser, database, isCRTEnabled, post, previousPost, nextPost, location}: PropsInput) => { let isLastReply = of$(true); let isPostAddChannelMember = of$(false); const isOwner = currentUser.id === post.userId; - const author: Observable = observePostAuthor(database, post); + const author = post.userId ? observePostAuthor(database, post) : of$(undefined); const canDelete = observePermissionForPost(database, post, currentUser, isOwner ? Permissions.DELETE_POST : Permissions.DELETE_OTHERS_POSTS, false); const isEphemeral = of$(isPostEphemeral(post)); - const isSaved = queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_SAVED_POST, post.id). - observeWithColumns(['value']).pipe( - switchMap((pref) => of$(Boolean(pref.length))), - distinctUntilChanged(), - ); if (post.props?.add_channel_member && isPostEphemeral(post)) { isPostAddChannelMember = observeCanManageChannelMembers(database, post, currentUser); } - const highlightReplyBar = post.postsInThread.observe().pipe( - switchMap((postsInThreads: PostsInThreadModel[]) => { - if (postsInThreads.length) { - return observeShouldHighlightReplyBar(database, currentUser, post, postsInThreads[0]); - } - return of$(false); - }), - distinctUntilChanged(), - ); + let highlightReplyBar = of$(false); + if (!isCRTEnabled && location === Screens.CHANNEL) { + highlightReplyBar = post.postsInThread.observe().pipe( + switchMap((postsInThreads: PostsInThreadModel[]) => { + if (postsInThreads.length) { + return observeShouldHighlightReplyBar(database, currentUser, post, postsInThreads[0]); + } + return of$(false); + }), + distinctUntilChanged(), + ); + } let differentThreadSequence = true; if (post.rootId) { @@ -130,28 +122,20 @@ const withPost = withObservables( isLastReply = of$(!(nextPost?.rootId === post.rootId)); } - if (post.message.length && !(/^\s{4}/).test(post.message)) { - isJumboEmoji = queryAllCustomEmojis(database).observe().pipe( - switchMap( - // eslint-disable-next-line max-nested-callbacks - (customEmojis: CustomEmojiModel[]) => of$(hasJumboEmojiOnly(post.message, customEmojis.map((c) => c.name))), - ), - distinctUntilChanged(), - ); - } - const hasReplies = observeHasReplies(post); + const hasReplies = observeHasReplies(post);//Need to review and understand + const isConsecutivePost = author.pipe( switchMap((user) => of$(Boolean(post && previousPost && !user?.isBot && areConsecutivePosts(post, previousPost)))), distinctUntilChanged(), ); - const hasFiles = post.files.observe().pipe( - switchMap((ff) => of$(Boolean(ff.length))), + const hasFiles = post.files.observeCount().pipe( + switchMap((c) => of$(c > 0)), distinctUntilChanged(), ); - const hasReactions = post.reactions.observe().pipe( - switchMap((rr) => of$(Boolean(rr.length))), + const hasReactions = post.reactions.observeCount().pipe( + switchMap((c) => of$(c > 0)), distinctUntilChanged(), ); @@ -164,8 +148,6 @@ const withPost = withObservables( isConsecutivePost, isEphemeral, isFirstReply: of$(isFirstReply(post, previousPost)), - isSaved, - isJumboEmoji, isLastReply, isPostAddChannelMember, isPostPriorityEnabled: observeIsPostPriorityEnabled(database), diff --git a/app/components/post_list/post/post.tsx b/app/components/post_list/post/post.tsx index a17781668..4186340ba 100644 --- a/app/components/post_list/post/post.tsx +++ b/app/components/post_list/post/post.tsx @@ -18,6 +18,7 @@ import {useServerUrl} from '@context/server'; import {useTheme} from '@context/theme'; import {useIsTablet} from '@hooks/device'; import {bottomSheetModalOptions, showModal, showModalOverCurrentContext} from '@screens/navigation'; +import {hasJumboEmojiOnly} from '@utils/emoji/helpers'; import {fromAutoResponder, isFromWebhook, isPostFailed, isPostPendingOrFailed, isSystemMessage} from '@utils/post'; import {preventDoubleTap} from '@utils/tap'; import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; @@ -39,6 +40,7 @@ type PostProps = { appsEnabled: boolean; canDelete: boolean; currentUser: UserModel; + customEmojiNames: string[]; differentThreadSequence: boolean; hasFiles: boolean; hasReplies: boolean; @@ -50,7 +52,6 @@ type PostProps = { isEphemeral: boolean; isFirstReply?: boolean; isSaved?: boolean; - isJumboEmoji: boolean; isLastReply?: boolean; isPostAddChannelMember: boolean; isPostPriorityEnabled: boolean; @@ -107,8 +108,8 @@ const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => { }); const Post = ({ - appsEnabled, canDelete, currentUser, differentThreadSequence, hasFiles, hasReplies, highlight, highlightPinnedOrSaved = true, highlightReplyBar, - isCRTEnabled, isConsecutivePost, isEphemeral, isFirstReply, isSaved, isJumboEmoji, isLastReply, isPostAddChannelMember, isPostPriorityEnabled, + appsEnabled, canDelete, currentUser, customEmojiNames, differentThreadSequence, hasFiles, hasReplies, highlight, highlightPinnedOrSaved = true, highlightReplyBar, + isCRTEnabled, isConsecutivePost, isEphemeral, isFirstReply, isSaved, isLastReply, isPostAddChannelMember, isPostPriorityEnabled, location, post, rootId, hasReactions, searchPatterns, shouldRenderReplyButton, skipSavedHeader, skipPinnedHeader, showAddReaction = true, style, testID, thread, previousPost, }: PostProps) => { @@ -136,6 +137,12 @@ const Post = ({ return false; }, [isConsecutivePost, post, previousPost, isFirstReply]); + const isJumboEmoji = useMemo(() => { + if (post.message.length && !(/^\s{4}/).test(post.message)) { + return hasJumboEmojiOnly(post.message, customEmojiNames); + } + return false; + }, [customEmojiNames, post.message]); const handlePostPress = () => { if ([Screens.SAVED_MESSAGES, Screens.MENTIONS, Screens.SEARCH, Screens.PINNED_MESSAGES].includes(location)) { diff --git a/app/components/post_list/post_list.tsx b/app/components/post_list/post_list.tsx index 003529fcb..2c9e91138 100644 --- a/app/components/post_list/post_list.tsx +++ b/app/components/post_list/post_list.tsx @@ -15,21 +15,23 @@ import ThreadOverview from '@components/post_list/thread_overview'; import {Events, Screens} from '@constants'; import {useServerUrl} from '@context/server'; import {useTheme} from '@context/theme'; -import {getDateForDateLine, isCombinedUserActivityPost, isDateLine, isStartOfNewMessages, isThreadOverview, preparePostList, START_OF_NEW_MESSAGES} from '@utils/post_list'; +import {getDateForDateLine, preparePostList} from '@utils/post_list'; import {INITIAL_BATCH_TO_RENDER, SCROLL_POSITION_CONFIG, VIEWABILITY_CONFIG} from './config'; import MoreMessages from './more_messages'; import PostListRefreshControl from './refresh_control'; -import type {ViewableItemsChanged, ViewableItemsChangedListenerEvent} from '@typings/components/post_list'; +import type {PostListItem, PostListOtherItem, ViewableItemsChanged, ViewableItemsChangedListenerEvent} from '@typings/components/post_list'; import type PostModel from '@typings/database/models/servers/post'; type Props = { + appsEnabled: boolean; channelId: string; contentContainerStyle?: StyleProp; currentTimezone: string | null; currentUserId: string; currentUsername: string; + customEmojiNames: string[]; disablePullToRefresh?: boolean; highlightedId?: PostModel['id']; highlightPinnedOrSaved?: boolean; @@ -50,6 +52,7 @@ type Props = { testID: string; currentCallBarVisible?: boolean; joinCallBannerVisible?: boolean; + savedPostIds: Set; } type onScrollEndIndexListenerEvent = (endIndex: number) => void; @@ -61,7 +64,7 @@ type ScrollIndexFailed = { }; const AnimatedFlatList = Animated.createAnimatedComponent(FlatList); -const keyExtractor = (item: string | PostModel) => (typeof item === 'string' ? item : item.id); +const keyExtractor = (item: PostListItem | PostListOtherItem) => (item.type === 'post' ? item.value.id : item.value); const styles = StyleSheet.create({ flex: { @@ -81,11 +84,13 @@ const styles = StyleSheet.create({ }); const PostList = ({ + appsEnabled, channelId, contentContainerStyle, currentTimezone, currentUserId, currentUsername, + customEmojiNames, disablePullToRefresh, footer, header, @@ -106,6 +111,7 @@ const PostList = ({ testID, currentCallBarVisible, joinCallBannerVisible, + savedPostIds, }: Props) => { const listRef = useRef>(null); const onScrollEndIndexListener = useRef(); @@ -116,11 +122,11 @@ const PostList = ({ const theme = useTheme(); const serverUrl = useServerUrl(); const orderedPosts = useMemo(() => { - return preparePostList(posts, lastViewedAt, showNewMessageLine, currentUserId, currentUsername, shouldShowJoinLeaveMessages, isTimezoneEnabled, currentTimezone, location === Screens.THREAD); - }, [posts, lastViewedAt, showNewMessageLine, currentTimezone, currentUsername, shouldShowJoinLeaveMessages, isTimezoneEnabled, location]); + return preparePostList(posts, lastViewedAt, showNewMessageLine, currentUserId, currentUsername, shouldShowJoinLeaveMessages, isTimezoneEnabled, currentTimezone, location === Screens.THREAD, savedPostIds); + }, [posts, lastViewedAt, showNewMessageLine, currentTimezone, currentUsername, shouldShowJoinLeaveMessages, isTimezoneEnabled, location, savedPostIds]); const initialIndex = useMemo(() => { - return orderedPosts.indexOf(START_OF_NEW_MESSAGES); + return orderedPosts.findIndex((i) => i.type === 'start-of-new-messages'); }, [orderedPosts]); useEffect(() => { @@ -220,48 +226,40 @@ const PostList = ({ return removeListener; }, []); - const renderItem = useCallback(({item, index}: ListRenderItemInfo) => { - if (typeof item === 'string') { - if (isStartOfNewMessages(item)) { - // postIds includes a date item after the new message indicator so 2 - // needs to be added to the index for the length check to be correct. - const moreNewMessages = orderedPosts.length === index + 2; - - // The date line and new message line each count for a line. So the - // goal of this is to check for the 3rd previous, which for the start - // of a thread would be null as it doesn't exist. - const checkForPostId = index < orderedPosts.length - 3; - + const renderItem = useCallback(({item}: ListRenderItemInfo) => { + switch (item.type) { + case 'start-of-new-messages': return ( ); - } else if (isDateLine(item)) { + case 'date': return ( ); - } else if (isThreadOverview(item)) { + case 'thread-overview': return ( ); - } - - if (isCombinedUserActivityPost(item)) { + case 'user-activity': { const postProps = { currentUsername, - postId: item, + key: item.value, + postId: item.value, location, style: Platform.OS === 'ios' ? styles.scale : styles.container, testID: `${testID}.combined_user_activity`, @@ -271,71 +269,32 @@ const PostList = ({ return (); } + default: { + const post = item.value; + const skipSaveddHeader = (location === Screens.THREAD && post.id === rootId); + const postProps = { + appsEnabled, + customEmojiNames, + isCRTEnabled, + highlight: highlightedId === post.id, + highlightPinnedOrSaved, + isSaved: post.isSaved, + key: post.id, + location, + nextPost: post.nextPost, + post, + previousPost: post.previousPost, + rootId, + shouldRenderReplyButton, + skipSaveddHeader, + style: styles.scale, + testID: `${testID}.post`, + }; - return null; - } - - let previousPost: PostModel|undefined; - let nextPost: PostModel|undefined; - - const lastPosts = orderedPosts.slice(index + 1); - const immediateLastPost = lastPosts[0]; - - // Post after `Thread Overview` should show user avatar irrespective of being the consecutive post - // So we skip sending previous post to avoid the check for consecutive post - const skipFindingPreviousPost = ( - location === Screens.THREAD && - typeof immediateLastPost === 'string' && - isThreadOverview(immediateLastPost) - ); - - if (!skipFindingPreviousPost) { - const prev = lastPosts.find((v) => typeof v !== 'string'); - if (prev) { - previousPost = prev as PostModel; + return (); } } - - if (index > 0) { - const next = orderedPosts.slice(0, index); - for (let i = next.length - 1; i >= 0; i--) { - const v = next[i]; - if (typeof v !== 'string') { - nextPost = v; - break; - } - } - } - - // Skip rendering Flag for the root post in the thread as it is visible in the `Thread Overview` - const post = item; - const skipSaveddHeader = ( - location === Screens.THREAD && - post.id === rootId - ); - - const postProps = { - highlight: highlightedId === post.id, - highlightPinnedOrSaved, - location, - nextPost, - previousPost, - shouldRenderReplyButton, - skipSaveddHeader, - }; - - return ( - - ); - }, [currentTimezone, highlightPinnedOrSaved, isCRTEnabled, isTimezoneEnabled, orderedPosts, shouldRenderReplyButton, theme]); + }, [appsEnabled, currentTimezone, customEmojiNames, highlightPinnedOrSaved, isCRTEnabled, isTimezoneEnabled, shouldRenderReplyButton, theme]); const scrollToIndex = useCallback((index: number, animated = true, applyOffset = true) => { listRef.current?.scrollToIndex({ @@ -351,7 +310,7 @@ const PostList = ({ if (highlightedId && orderedPosts && !scrolledToHighlighted.current) { scrolledToHighlighted.current = true; // eslint-disable-next-line max-nested-callbacks - const index = orderedPosts.findIndex((p) => typeof p !== 'string' && p.id === highlightedId); + const index = orderedPosts.findIndex((p) => p.type === 'post' && p.value.id === highlightedId); if (index >= 0 && listRef.current) { listRef.current?.scrollToIndex({ animated: true, @@ -387,7 +346,7 @@ const PostList = ({ maxToRenderPerBatch={10} nativeID={nativeID} onEndReached={onEndReached} - onEndReachedThreshold={2} + onEndReachedThreshold={0.9} onScroll={onScroll} onScrollToIndexFailed={onScrollToIndexFailed} onViewableItemsChanged={onViewableItemsChanged} diff --git a/app/components/post_with_channel_info/index.ts b/app/components/post_with_channel_info/index.ts index 22297ee0a..ac36a6f99 100644 --- a/app/components/post_with_channel_info/index.ts +++ b/app/components/post_with_channel_info/index.ts @@ -3,7 +3,6 @@ import {withDatabase} from '@nozbe/watermelondb/DatabaseProvider'; import withObservables from '@nozbe/with-observables'; -import compose from 'lodash/fp/compose'; import {observeIsCRTEnabled} from '@queries/servers/thread'; @@ -17,7 +16,4 @@ const enhance = withObservables([], ({database}: WithDatabaseArgs) => { }; }); -export default compose( - withDatabase, - enhance, -)(PostWithChannelInfo); +export default withDatabase(enhance(PostWithChannelInfo)); diff --git a/app/components/post_with_channel_info/post_with_channel_info.tsx b/app/components/post_with_channel_info/post_with_channel_info.tsx index 2ed512527..a4da4b84b 100644 --- a/app/components/post_with_channel_info/post_with_channel_info.tsx +++ b/app/components/post_with_channel_info/post_with_channel_info.tsx @@ -11,6 +11,8 @@ import ChannelInfo from './channel_info'; import type PostModel from '@typings/database/models/servers/post'; type Props = { + appsEnabled: boolean; + customEmojiNames: string[]; isCRTEnabled: boolean; post: PostModel; location: string; @@ -28,7 +30,7 @@ const styles = StyleSheet.create({ }, }); -function PostWithChannelInfo({isCRTEnabled, post, location, testID}: Props) { +function PostWithChannelInfo({appsEnabled, customEmojiNames, isCRTEnabled, post, location, testID}: Props) { return ( => { const preparedModels: Model[] = [post.prepareDestroyPermanently()]; @@ -74,7 +75,7 @@ export const observePost = (database: Database, postId: string) => { }; export const observePostAuthor = (database: Database, post: PostModel) => { - return post.userId ? observeUser(database, post.userId) : of$(null); + return observeUser(database, post.userId); }; export const observePostSaved = (database: Database, postId: string) => { @@ -216,3 +217,15 @@ export const queryPinnedPostsInChannel = (database: Database, channelId: string) export const observePinnedPostsInChannel = (database: Database, channelId: string) => { return queryPinnedPostsInChannel(database, channelId).observe(); }; + +export const observeSavedPostsByIds = (database: Database, postIds: string[]) => { + return database.get(PREFERENCE). + query( + Q.and( + Q.where('category', Preferences.CATEGORY_SAVED_POST), + Q.where('name', Q.oneOf(postIds)), + ), + ).observeWithColumns(['name']).pipe( + switchMap((prefs) => of$(new Set(prefs.map((p) => p.name)))), + ); +}; diff --git a/app/screens/global_threads/threads_list/threads_list.tsx b/app/screens/global_threads/threads_list/threads_list.tsx index dda1999a9..d905e3e04 100644 --- a/app/screens/global_threads/threads_list/threads_list.tsx +++ b/app/screens/global_threads/threads_list/threads_list.tsx @@ -149,6 +149,7 @@ const ThreadsList = ({ const renderItem = useCallback(({item}: ListRenderItemInfo) => ( { const currentUser = observeCurrentUser(database); return { + appsEnabled: observeConfigBooleanValue(database, 'FeatureFlagAppsEnabled'), mentions: observeRecentMentions(database).pipe( switchMap((recentMentions) => { if (!recentMentions.length) { @@ -31,6 +34,9 @@ const enhance = withObservables([], ({database}: WithDatabaseArgs) => { ), currentUser, currentTimezone: currentUser.pipe((switchMap((user) => of$(getTimezone(user?.timezone || null))))), + customEmojiNames: queryAllCustomEmojis(database).observe().pipe( + switchMap((customEmojis) => of$(mapCustomEmojiNames(customEmojis))), + ), isTimezoneEnabled: observeConfigBooleanValue(database, 'ExperimentalTimezone'), }; }); diff --git a/app/screens/home/recent_mentions/recent_mentions.tsx b/app/screens/home/recent_mentions/recent_mentions.tsx index 24f5a5f8f..b6c89c207 100644 --- a/app/screens/home/recent_mentions/recent_mentions.tsx +++ b/app/screens/home/recent_mentions/recent_mentions.tsx @@ -17,17 +17,19 @@ import {Events, Screens} from '@constants'; import {useServerUrl} from '@context/server'; import {useTheme} from '@context/theme'; import {useCollapsibleHeader} from '@hooks/header'; -import {getDateForDateLine, isDateLine, selectOrderedPosts} from '@utils/post_list'; +import {getDateForDateLine, selectOrderedPosts} from '@utils/post_list'; import EmptyState from './components/empty'; -import type {ViewableItemsChanged} from '@typings/components/post_list'; +import type {PostListItem, PostListOtherItem, ViewableItemsChanged} from '@typings/components/post_list'; import type PostModel from '@typings/database/models/servers/post'; const AnimatedFlatList = Animated.createAnimatedComponent(FlatList); const EDGES: Edge[] = ['bottom', 'left', 'right']; type Props = { + appsEnabled: boolean; + customEmojiNames: string[]; currentTimezone: string | null; isTimezoneEnabled: boolean; mentions: PostModel[]; @@ -47,7 +49,7 @@ const styles = StyleSheet.create({ }, }); -const RecentMentionsScreen = ({mentions, currentTimezone, isTimezoneEnabled}: Props) => { +const RecentMentionsScreen = ({appsEnabled, customEmojiNames, mentions, currentTimezone, isTimezoneEnabled}: Props) => { const theme = useTheme(); const route = useRoute(); const isFocused = useIsFocused(); @@ -134,27 +136,31 @@ const RecentMentionsScreen = ({mentions, currentTimezone, isTimezoneEnabled}: Pr ), [loading, theme, paddingTop]); - const renderItem = useCallback(({item}: ListRenderItemInfo) => { - if (typeof item === 'string') { - if (isDateLine(item)) { + const renderItem = useCallback(({item}: ListRenderItemInfo) => { + switch (item.type) { + case 'date': return ( ); - } - return null; + case 'post': + return ( + + ); + default: + return null; } - - return ( - - ); - }, []); + }, [appsEnabled, customEmojiNames]); return ( <> diff --git a/app/screens/home/saved_messages/index.ts b/app/screens/home/saved_messages/index.ts index b37970dee..03d3ca1bb 100644 --- a/app/screens/home/saved_messages/index.ts +++ b/app/screens/home/saved_messages/index.ts @@ -9,10 +9,12 @@ import {switchMap} from 'rxjs/operators'; import {Preferences} from '@constants'; import {PreferenceModel} from '@database/models/server'; +import {queryAllCustomEmojis} from '@queries/servers/custom_emoji'; import {queryPostsById} from '@queries/servers/post'; import {queryPreferencesByCategoryAndName} from '@queries/servers/preference'; import {observeConfigBooleanValue} from '@queries/servers/system'; import {observeCurrentUser} from '@queries/servers/user'; +import {mapCustomEmojiNames} from '@utils/emoji/helpers'; import {getTimezone} from '@utils/user'; import SavedMessagesScreen from './saved_messages'; @@ -39,6 +41,9 @@ const enhance = withObservables([], ({database}: WithDatabaseArgs) => { }), ), currentTimezone: currentUser.pipe((switchMap((user) => of$(getTimezone(user?.timezone || null))))), + customEmojiNames: queryAllCustomEmojis(database).observe().pipe( + switchMap((customEmojis) => of$(mapCustomEmojiNames(customEmojis))), + ), isTimezoneEnabled: observeConfigBooleanValue(database, 'ExperimentalTimezone'), }; }); diff --git a/app/screens/home/saved_messages/saved_messages.tsx b/app/screens/home/saved_messages/saved_messages.tsx index 9572b678f..92120f9d0 100644 --- a/app/screens/home/saved_messages/saved_messages.tsx +++ b/app/screens/home/saved_messages/saved_messages.tsx @@ -18,15 +18,17 @@ import {Events, Screens} from '@constants'; import {useServerUrl} from '@context/server'; import {useTheme} from '@context/theme'; import {useCollapsibleHeader} from '@hooks/header'; -import {isDateLine, getDateForDateLine, selectOrderedPosts} from '@utils/post_list'; +import {getDateForDateLine, selectOrderedPosts} from '@utils/post_list'; import EmptyState from './components/empty'; -import type {ViewableItemsChanged} from '@typings/components/post_list'; +import type {PostListItem, PostListOtherItem, ViewableItemsChanged} from '@typings/components/post_list'; import type PostModel from '@typings/database/models/servers/post'; type Props = { + appsEnabled: boolean; currentTimezone: string | null; + customEmojiNames: string[]; isTimezoneEnabled: boolean; posts: PostModel[]; } @@ -48,7 +50,7 @@ const styles = StyleSheet.create({ }, }); -function SavedMessages({posts, currentTimezone, isTimezoneEnabled}: Props) { +function SavedMessages({appsEnabled, posts, currentTimezone, customEmojiNames, isTimezoneEnabled}: Props) { const intl = useIntl(); const [loading, setLoading] = useState(!posts.length); const [refreshing, setRefreshing] = useState(false); @@ -135,27 +137,31 @@ function SavedMessages({posts, currentTimezone, isTimezoneEnabled}: Props) { ), [loading, theme.buttonBg]); - const renderItem = useCallback(({item}: ListRenderItemInfo) => { - if (typeof item === 'string') { - if (isDateLine(item)) { + const renderItem = useCallback(({item}: ListRenderItemInfo) => { + switch (item.type) { + case 'date': return ( ); - } - return null; + case 'post': + return ( + + ); + default: + return null; } - - return ( - - ); - }, [currentTimezone, isTimezoneEnabled, theme]); + }, [appsEnabled, currentTimezone, customEmojiNames, isTimezoneEnabled, theme]); return ( <> diff --git a/app/screens/home/search/results/file_results.tsx b/app/screens/home/search/results/file_results.tsx index fdf6950fb..d1e2aa08c 100644 --- a/app/screens/home/search/results/file_results.tsx +++ b/app/screens/home/search/results/file_results.tsx @@ -94,6 +94,7 @@ const FileResults = ({ channelName={channelNames[item.channel_id!]} fileInfo={item} index={fileInfosIndexes[item.id!] || 0} + key={`${item.id}-${item.name}`} numOptions={numOptions} onOptionsPress={onOptionsPress} onPress={onPreviewPress} diff --git a/app/screens/home/search/results/index.tsx b/app/screens/home/search/results/index.tsx index 9605a13f6..2e0a9167c 100644 --- a/app/screens/home/search/results/index.tsx +++ b/app/screens/home/search/results/index.tsx @@ -8,8 +8,10 @@ import {combineLatest, of as of$} from 'rxjs'; import {map, switchMap} from 'rxjs/operators'; import {queryChannelsById} from '@queries/servers/channel'; +import {queryAllCustomEmojis} from '@queries/servers/custom_emoji'; import {observeLicense, observeConfigBooleanValue} from '@queries/servers/system'; import {observeCurrentUser} from '@queries/servers/user'; +import {mapCustomEmojiNames} from '@utils/emoji/helpers'; import {getTimezone} from '@utils/user'; import Results from './results'; @@ -35,7 +37,11 @@ const enhance = withObservables(['fileChannelIds'], ({database, fileChannelIds}: ); return { + appsEnabled: observeConfigBooleanValue(database, 'FeatureFlagAppsEnabled'), currentTimezone: currentUser.pipe((switchMap((user) => of$(getTimezone(user?.timezone))))), + customEmojiNames: queryAllCustomEmojis(database).observe().pipe( + switchMap((customEmojis) => of$(mapCustomEmojiNames(customEmojis))), + ), isTimezoneEnabled: observeConfigBooleanValue(database, 'ExperimentalTimezone'), fileChannels, canDownloadFiles, diff --git a/app/screens/home/search/results/post_results.tsx b/app/screens/home/search/results/post_results.tsx index 8e6b457a5..1d92d16ab 100644 --- a/app/screens/home/search/results/post_results.tsx +++ b/app/screens/home/search/results/post_results.tsx @@ -8,12 +8,15 @@ import NoResultsWithTerm from '@components/no_results_with_term'; import DateSeparator from '@components/post_list/date_separator'; import PostWithChannelInfo from '@components/post_with_channel_info'; import {Screens} from '@constants'; -import {getDateForDateLine, isDateLine, selectOrderedPosts} from '@utils/post_list'; +import {getDateForDateLine, selectOrderedPosts} from '@utils/post_list'; import {TabTypes} from '@utils/search'; +import type {PostListItem, PostListOtherItem} from '@typings/components/post_list'; import type PostModel from '@typings/database/models/servers/post'; type Props = { + appsEnabled: boolean; + customEmojiNames: string[]; currentTimezone: string; isTimezoneEnabled: boolean; posts: PostModel[]; @@ -22,7 +25,9 @@ type Props = { } const PostResults = ({ + appsEnabled, currentTimezone, + customEmojiNames, isTimezoneEnabled, posts, paddingTop, @@ -31,30 +36,31 @@ const PostResults = ({ const orderedPosts = useMemo(() => selectOrderedPosts(posts, 0, false, '', '', false, isTimezoneEnabled, currentTimezone, false).reverse(), [posts]); const containerStyle = useMemo(() => ({top: posts.length ? 4 : 8}), [posts]); - const renderItem = useCallback(({item}: ListRenderItemInfo) => { - if (typeof item === 'string') { - if (isDateLine(item)) { + const renderItem = useCallback(({item}: ListRenderItemInfo) => { + switch (item.type) { + case 'date': return ( ); - } - return null; + case 'post': + return ( + + ); + default: + return null; } - - if ('message' in item) { - return ( - - ); - } - return null; - }, []); + }, [appsEnabled, customEmojiNames]); const noResults = useMemo(() => ( { }; type Props = { + appsEnabled: boolean; canDownloadFiles: boolean; currentTimezone: string; + customEmojiNames: string[]; fileChannels: ChannelModel[]; fileInfos: FileInfo[]; isTimezoneEnabled: boolean; @@ -51,8 +53,10 @@ type Props = { } const Results = ({ + appsEnabled, canDownloadFiles, currentTimezone, + customEmojiNames, fileChannels, fileInfos, isTimezoneEnabled, @@ -96,7 +100,9 @@ const Results = ({ const posts = observePinnedPostsInChannel(database, channelId); return { + appsEnabled: observeConfigBooleanValue(database, 'FeatureFlagAppsEnabled'), currentTimezone: currentUser.pipe((switchMap((user) => of$(getTimezone(user?.timezone || null))))), + customEmojiNames: queryAllCustomEmojis(database).observe().pipe( + switchMap((customEmojis) => of$(mapCustomEmojiNames(customEmojis))), + ), isCRTEnabled: observeIsCRTEnabled(database), isTimezoneEnabled: observeConfigBooleanValue(database, 'ExperimentalTimezone'), posts, diff --git a/app/screens/pinned_messages/pinned_messages.tsx b/app/screens/pinned_messages/pinned_messages.tsx index f4b46d74a..291d24170 100644 --- a/app/screens/pinned_messages/pinned_messages.tsx +++ b/app/screens/pinned_messages/pinned_messages.tsx @@ -14,17 +14,19 @@ import {useServerUrl} from '@context/server'; import {useTheme} from '@context/theme'; import useAndroidHardwareBackHandler from '@hooks/android_back_handler'; import {popTopScreen} from '@screens/navigation'; -import {getDateForDateLine, isDateLine, selectOrderedPosts} from '@utils/post_list'; +import {getDateForDateLine, selectOrderedPosts} from '@utils/post_list'; import EmptyState from './empty'; -import type {ViewableItemsChanged} from '@typings/components/post_list'; +import type {PostListItem, PostListOtherItem, ViewableItemsChanged} from '@typings/components/post_list'; import type PostModel from '@typings/database/models/servers/post'; type Props = { + appsEnabled: boolean; channelId: string; componentId: string; currentTimezone: string | null; + customEmojiNames: string[]; isCRTEnabled: boolean; isTimezoneEnabled: boolean; posts: PostModel[]; @@ -47,9 +49,11 @@ const styles = StyleSheet.create({ }); function SavedMessages({ + appsEnabled, channelId, componentId, currentTimezone, + customEmojiNames, isCRTEnabled, isTimezoneEnabled, posts, @@ -109,35 +113,39 @@ function SavedMessages({ ), [loading, theme.buttonBg]); - const renderItem = useCallback(({item}: ListRenderItemInfo) => { - if (typeof item === 'string') { - if (isDateLine(item)) { + const renderItem = useCallback(({item}: ListRenderItemInfo) => { + switch (item.type) { + case 'date': return ( ); - } - return null; + case 'post': + return ( + + ); + default: + return null; } - - return ( - - ); - }, [currentTimezone, isTimezoneEnabled, theme]); + }, [appsEnabled, currentTimezone, customEmojiNames, isTimezoneEnabled, theme]); return ( e.name === emojiName); } +export function mapCustomEmojiNames(customEmois: CustomEmojiModel[]) { + return customEmois.map((c) => c.name); +} + // Since there is no shared logic between the web and mobile app // this is copied from the webapp as custom sorting logic for emojis diff --git a/app/utils/post_list/index.ts b/app/utils/post_list/index.ts index c2f7be437..86e2f8ab7 100644 --- a/app/utils/post_list/index.ts +++ b/app/utils/post_list/index.ts @@ -7,6 +7,7 @@ import {Post} from '@constants'; import {toMilliseconds} from '@utils/datetime'; import {isFromWebhook} from '@utils/post'; +import type {PostList, PostWithPrevAndNext} from '@typings/components/post_list'; import type PostModel from '@typings/database/models/servers/post'; const joinLeavePostTypes = [ @@ -49,44 +50,37 @@ export const START_OF_NEW_MESSAGES = 'start-of-new-messages'; export const THREAD_OVERVIEW = 'thread-overview'; export const MAX_COMBINED_SYSTEM_POSTS = 100; -function combineUserActivityPosts(orderedPosts: Array) { +function combineUserActivityPosts(orderedPosts: PostList) { let lastPostIsUserActivity = false; let combinedCount = 0; - const out: Array = []; + const out: PostList = []; let changed = false; for (let i = 0; i < orderedPosts.length; i++) { - const post = orderedPosts[i]; + const item = orderedPosts[i]; + if (item.type === 'start-of-new-messages' || item.type === 'date' || item.type === 'thread-overview') { + // Not a post, so it won't be combined + out.push(item); - if (typeof post === 'string') { - if (post === START_OF_NEW_MESSAGES || post.startsWith(DATE_LINE)) { - // Not a post, so it won't be combined - out.push(post); + lastPostIsUserActivity = false; + combinedCount = 0; - lastPostIsUserActivity = false; - combinedCount = 0; - - continue; - } - } else if (post.deleteAt) { - out.push(post); + continue; + } else if (item.type === 'post' && item.value.deleteAt) { + out.push(item); lastPostIsUserActivity = false; combinedCount = 0; } else { - const postIsUserActivity = Post.USER_ACTIVITY_POST_TYPES.includes(post.type); + const postIsUserActivity = item.type === 'post' && Post.USER_ACTIVITY_POST_TYPES.includes(item.value.type); if (postIsUserActivity && lastPostIsUserActivity && combinedCount < MAX_COMBINED_SYSTEM_POSTS) { - // Add the ID to the previous combined post - out[out.length - 1] += '_' + post.id; - combinedCount += 1; - changed = true; + out[out.length - 1].value += '_' + item.value.id; } else if (postIsUserActivity) { - // Start a new combined post, even if the "combined" post is only a single post - out.push(COMBINED_USER_ACTIVITY + post.id); + out.push({type: 'user-activity', value: `${COMBINED_USER_ACTIVITY}${item.value.id}`}); combinedCount = 1; changed = true; } else { - out.push(post); + out.push(item); combinedCount = 0; } @@ -175,21 +169,38 @@ function isJoinLeavePostForUsername(post: PostModel, currentUsername: string): b post.props.removedUsername === currentUsername; } -// are we going to do something with selectedPostId as in v1? +export function selectOrderedPostsWithPrevAndNext( + posts: PostModel[], lastViewedAt: number, indicateNewMessages: boolean, currentUserId: string, currentUsername: string, showJoinLeave: boolean, + timezoneEnabled: boolean, currentTimezone: string | null, isThreadScreen = false, savedPostIds = new Set(), +): PostList { + return selectOrderedPosts( + posts, lastViewedAt, indicateNewMessages, + currentUserId, currentUsername, showJoinLeave, + timezoneEnabled, currentTimezone, isThreadScreen, savedPostIds, true, + ); +} + export function selectOrderedPosts( posts: PostModel[], lastViewedAt: number, indicateNewMessages: boolean, currentUserId: string, currentUsername: string, showJoinLeave: boolean, - timezoneEnabled: boolean, currentTimezone: string | null, isThreadScreen = false) { + timezoneEnabled: boolean, currentTimezone: string | null, isThreadScreen = false, savedPostIds = new Set(), includePrevNext = false) { if (posts.length === 0) { return []; } - const out: Array = []; + const out: PostList = []; let lastDate; let addedNewMessagesIndicator = false; // Iterating through the posts from oldest to newest for (let i = posts.length - 1; i >= 0; i--) { - const post = posts[i]; + const post: PostWithPrevAndNext = posts[i]; + post.isSaved = savedPostIds.has(post.id); + if (includePrevNext) { + post.nextPost = posts[i - 1]; + if (!isThreadScreen || out[out.length - 1]?.type !== 'thread-overview') { + post.previousPost = posts[i + 1]; + } + } if ( !post || @@ -217,7 +228,7 @@ export function selectOrderedPosts( } if (!lastDate || lastDate.toDateString() !== postDate.toDateString()) { - out.push(DATE_LINE + postDate.getTime()); + out.push({type: 'date', value: DATE_LINE + postDate.getTime()}); lastDate = postDate; } @@ -229,14 +240,14 @@ export function selectOrderedPosts( !addedNewMessagesIndicator && indicateNewMessages ) { - out.push(START_OF_NEW_MESSAGES); + out.push({type: 'start-of-new-messages', value: START_OF_NEW_MESSAGES}); addedNewMessagesIndicator = true; } - out.push(post); + out.push({type: 'post', value: post}); if (isThreadScreen && i === posts.length - 1) { - out.push(THREAD_OVERVIEW); + out.push({type: 'thread-overview', value: THREAD_OVERVIEW}); } } @@ -350,26 +361,10 @@ export function getPostIdsForCombinedUserActivityPost(item: string) { return item.substring(COMBINED_USER_ACTIVITY.length).split('_'); } -export function isCombinedUserActivityPost(item: string) { - return (/^user-activity-(?:[^_]+_)*[^_]+$/).test(item); -} - -export function isDateLine(item: string) { - return Boolean(item?.startsWith(DATE_LINE)); -} - -export function isStartOfNewMessages(item: string) { - return item === START_OF_NEW_MESSAGES; -} - -export function isThreadOverview(item: string) { - return item === THREAD_OVERVIEW; -} - export function preparePostList( posts: PostModel[], lastViewedAt: number, indicateNewMessages: boolean, currentUserId: string, currentUsername: string, showJoinLeave: boolean, - timezoneEnabled: boolean, currentTimezone: string | null, isThreadScreen = false) { - const orderedPosts = selectOrderedPosts(posts, lastViewedAt, indicateNewMessages, currentUserId, currentUsername, showJoinLeave, timezoneEnabled, currentTimezone, isThreadScreen); + timezoneEnabled: boolean, currentTimezone: string | null, isThreadScreen = false, savedPostIds = new Set()) { + const orderedPosts = selectOrderedPostsWithPrevAndNext(posts, lastViewedAt, indicateNewMessages, currentUserId, currentUsername, showJoinLeave, timezoneEnabled, currentTimezone, isThreadScreen, savedPostIds); return combineUserActivityPosts(orderedPosts); } diff --git a/types/components/post_list.ts b/types/components/post_list.ts index 99c5344c3..0415faf7d 100644 --- a/types/components/post_list.ts +++ b/types/components/post_list.ts @@ -1,6 +1,7 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import type PostModel from '@typings/database/models/servers/post'; import type {ViewToken} from 'react-native'; export type ViewableItemsChanged = { @@ -12,3 +13,17 @@ export type ViewableItemsChangedListenerEvent = (viewableItms: ViewToken[]) => v export type ScrollEndIndexListener = (fn: (endIndex: number) => void) => () => void; export type ViewableItemsListener = (fn: (viewableItems: ViewToken[]) => void) => () => void; + +export type PostWithPrevAndNext = PostModel & {nextPost?: PostModel; previousPost?: PostModel; isSaved?: boolean}; + +export type PostListItem = { + type: 'post'; + value: PostWithPrevAndNext; +} + +export type PostListOtherItem = { + type: 'date' | 'thread-overview' | 'start-of-new-messages' | 'user-activity'; + value: string; +} + +export type PostList = Array; From 0c4e554534881ef527baf818859859de5c8d2731 Mon Sep 17 00:00:00 2001 From: Elias Nahum Date: Tue, 3 Jan 2023 23:45:50 +0200 Subject: [PATCH 09/47] Use Promise.allSettle when fetching emojis (#6921) --- app/actions/remote/custom_emoji.ts | 13 ++++++++++--- app/components/emoji/emoji.tsx | 2 +- app/init/app.ts | 14 ++++++++++++++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/app/actions/remote/custom_emoji.ts b/app/actions/remote/custom_emoji.ts index 1bdb6312d..cd034828b 100644 --- a/app/actions/remote/custom_emoji.ts +++ b/app/actions/remote/custom_emoji.ts @@ -87,10 +87,17 @@ const debouncedFetchEmojiByNames = debounce(async (serverUrl: string) => { promises.push(client.getCustomEmojiByName(name)); } - const emojis = await Promise.all(promises); - try { - await operator.handleCustomEmojis({emojis, prepareRecordsOnly: false}); + const emojisResult = await Promise.allSettled(promises); + const emojis = emojisResult.reduce((result, e) => { + if (e.status === 'fulfilled') { + result.push(e.value); + } + return result; + }, []); + if (emojis.length) { + await operator.handleCustomEmojis({emojis, prepareRecordsOnly: false}); + } return {error: undefined}; } catch (error) { return {error}; diff --git a/app/components/emoji/emoji.tsx b/app/components/emoji/emoji.tsx index 8334aea4d..299821355 100644 --- a/app/components/emoji/emoji.tsx +++ b/app/components/emoji/emoji.tsx @@ -57,7 +57,7 @@ const Emoji = (props: EmojiProps) => { } catch { // do nothing } - } else if (name && !isUnicodeEmoji(name)) { + } else if (name && (name.length > 1 || !isUnicodeEmoji(name))) { fetchCustomEmojiInBatch(serverUrl, name); } } diff --git a/app/init/app.ts b/app/init/app.ts index 76d6dd0ae..aeacf945c 100644 --- a/app/init/app.ts +++ b/app/init/app.ts @@ -16,6 +16,20 @@ import {registerNavigationListeners} from '@screens/navigation'; let alreadyInitialized = false; let serverCredentials: ServerCredential[]; +// Fallback Polyfill for Promise.allSettle +Promise.allSettled = Promise.allSettled || ((promises: Array>) => Promise.all( + promises.map((p) => p. + then((value) => ({ + status: 'fulfilled', + value, + })). + catch((reason) => ({ + status: 'rejected', + reason, + })), + ), +)); + export async function initialize() { if (!alreadyInitialized) { alreadyInitialized = true; From 5ff22953abd8ccbfdab8871dc1b2e7c798baa891 Mon Sep 17 00:00:00 2001 From: Elias Nahum Date: Tue, 3 Jan 2023 23:58:57 +0200 Subject: [PATCH 10/47] update dependencies (#6923) --- detox/package-lock.json | 234 ++--- detox/package.json | 12 +- ios/Podfile.lock | 4 +- package-lock.json | 839 +++++++++--------- package.json | 34 +- ...atch => react-native-elements+3.4.3.patch} | 0 6 files changed, 580 insertions(+), 543 deletions(-) rename patches/{react-native-elements+3.4.2.patch => react-native-elements+3.4.3.patch} (100%) diff --git a/detox/package-lock.json b/detox/package-lock.json index ec4d8af13..e61e8d934 100644 --- a/detox/package-lock.json +++ b/detox/package-lock.json @@ -7,21 +7,21 @@ "name": "mattermost-mobile-e2e", "devDependencies": { "@babel/plugin-proposal-class-properties": "7.18.6", - "@babel/plugin-transform-modules-commonjs": "7.19.6", + "@babel/plugin-transform-modules-commonjs": "7.20.11", "@babel/plugin-transform-runtime": "7.19.6", "@babel/preset-env": "7.20.2", "@jest/test-sequencer": "29.3.1", - "@types/jest": "29.2.4", + "@types/jest": "29.2.5", "@types/tough-cookie": "4.0.2", "@types/uuid": "9.0.0", - "aws-sdk": "2.1278.0", - "axios": "1.2.1", - "axios-cookiejar-support": "4.0.3", + "aws-sdk": "2.1286.0", + "axios": "1.2.2", + "axios-cookiejar-support": "4.0.6", "babel-jest": "29.3.1", "babel-plugin-module-resolver": "4.1.0", "client-oauth2": "4.3.3", "deepmerge": "4.2.2", - "detox": "20.1.0", + "detox": "20.1.1", "form-data": "4.0.0", "jest": "29.3.1", "jest-circus": "29.3.1", @@ -107,12 +107,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", - "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", + "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", "dev": true, "dependencies": { - "@babel/types": "^7.20.2", + "@babel/types": "^7.20.7", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -302,9 +302,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", + "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", @@ -312,9 +312,9 @@ "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -482,9 +482,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", + "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -1261,14 +1261,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", + "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1664,33 +1664,33 @@ } }, "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "version": "7.20.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.10.tgz", + "integrity": "sha512-oSf1juCgymrSez8NI4A2sr4+uB/mFd9MXplYGPEBnfAuWmmyeVcHa6xLPiaRBcXkcb/28bgxmQLTVwFKE1yfsg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", + "@babel/generator": "^7.20.7", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1699,9 +1699,9 @@ } }, "node_modules/@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.19.4", @@ -2612,9 +2612,9 @@ } }, "node_modules/@types/jest": { - "version": "29.2.4", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.4.tgz", - "integrity": "sha512-PipFB04k2qTRPePduVLTRiPzQfvMeLwUN3Z21hsAKaB/W9IIzgB2pizCL466ftJlcyZqnHoC9ZHpxLGl3fS86A==", + "version": "29.2.5", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.5.tgz", + "integrity": "sha512-H2cSxkKgVmqNHXP7TC2L/WUorrZu8ZigyRywfVzv6EyBlxj39n4C00hjXYQWsbwqgElaj/CiAeSRmk5GoaKTgw==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -2792,9 +2792,9 @@ } }, "node_modules/aws-sdk": { - "version": "2.1278.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1278.0.tgz", - "integrity": "sha512-keh0FXU6kP5j5vkWDgizZCSggmRfyRLUxmDKDVuiWb64H9FHIgoDBTMnYzKnQr6trHdBMopQdQ7RxnjYZ3BblA==", + "version": "2.1286.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1286.0.tgz", + "integrity": "sha512-CvkCD1+NSk2MPOutD2hEPhXDET/79w/gd9a359QWb9Ja0Fd4vVFXPkhlm1DTGzuwqFKGinpCMxDP4md7QPsVvw==", "dev": true, "dependencies": { "buffer": "4.9.2", @@ -2841,9 +2841,9 @@ } }, "node_modules/axios": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.1.tgz", - "integrity": "sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz", + "integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==", "dev": true, "dependencies": { "follow-redirects": "^1.15.0", @@ -2852,16 +2852,19 @@ } }, "node_modules/axios-cookiejar-support": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-4.0.3.tgz", - "integrity": "sha512-fMQc0mPR1CikWZEwVC6Av+sD4cJuV2eo06HFA+DfhY54uRcO43ILGxaq7YAMTiM0V0SdJCV4NhE1bOsQYlfSkg==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-4.0.6.tgz", + "integrity": "sha512-lWDhgM6bc2xYAsHkXEhceLpTu9ytAeIz1VSuL5FoUgGx2lqcMNbNxTD9Hm4x5c8JF5Me0HfNrb06fhEGMC30mQ==", "dev": true, "dependencies": { - "http-cookie-agent": "^4.0.2" + "http-cookie-agent": "^5.0.2" }, "engines": { "node": ">=14.18.0 <15.0.0 || >=16.0.0" }, + "funding": { + "url": "https://github.com/sponsors/3846masa" + }, "peerDependencies": { "axios": ">=0.20.0", "tough-cookie": ">=4.0.0" @@ -3648,9 +3651,9 @@ } }, "node_modules/detox": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/detox/-/detox-20.1.0.tgz", - "integrity": "sha512-9VUAAZRDBFcH+9SndbXY/2f0mBcQPDmsJPbanJ7QFHag0MHpaDgpurahDXC5lmbIxHSj9AFE42SGMyH2RANtJA==", + "version": "20.1.1", + "resolved": "https://registry.npmjs.org/detox/-/detox-20.1.1.tgz", + "integrity": "sha512-0ieeWAyo2f3YKeFwm7KCz4lBkCJIydyqzCQVN1sw/ZU9x9Qc8kz+itKAEiH4DHUlLkb4YLzfEbAXfO09wvrQ3w==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -3667,7 +3670,6 @@ "ini": "^1.3.4", "json-cycle": "^1.3.0", "lodash": "^4.17.5", - "minimist": "^1.2.0", "multi-sort-stream": "^1.0.3", "multipipe": "^4.0.0", "node-ipc": "^9.2.1", @@ -4560,9 +4562,9 @@ "dev": true }, "node_modules/http-cookie-agent": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-4.0.2.tgz", - "integrity": "sha512-noTmxdH5CuytTnLj/Qv3Z84e/YFq8yLXAw3pqIYZ25Edhb9pQErIAC+ednw40Cic6Le/h9ryph5/TqsvkOaUCw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-5.0.2.tgz", + "integrity": "sha512-BiBmZyIMGl5mLKmY7KH2uCVlcNUl1jexjdtWXFCUF4DFOrNZg1c5iPPTzWDzU7Ngfb6fB03DPpJQ80KQWmycsg==", "dev": true, "dependencies": { "agent-base": "^6.0.2" @@ -4570,10 +4572,13 @@ "engines": { "node": ">=14.18.0 <15.0.0 || >=16.0.0" }, + "funding": { + "url": "https://github.com/sponsors/3846masa" + }, "peerDependencies": { "deasync": "^0.1.26", "tough-cookie": "^4.0.0", - "undici": "^5.1.1" + "undici": "^5.11.0" }, "peerDependenciesMeta": { "deasync": { @@ -7656,6 +7661,7 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "dev": true, + "optional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9848,12 +9854,12 @@ } }, "@babel/generator": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", - "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", + "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", "dev": true, "requires": { - "@babel/types": "^7.20.2", + "@babel/types": "^7.20.7", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -9994,9 +10000,9 @@ } }, "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", + "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", @@ -10004,9 +10010,9 @@ "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" } }, "@babel/helper-optimise-call-expression": { @@ -10129,9 +10135,9 @@ } }, "@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", + "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -10635,14 +10641,14 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", + "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" } }, "@babel/plugin-transform-modules-systemjs": { @@ -10918,38 +10924,38 @@ } }, "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "version": "7.20.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.10.tgz", + "integrity": "sha512-oSf1juCgymrSez8NI4A2sr4+uB/mFd9MXplYGPEBnfAuWmmyeVcHa6xLPiaRBcXkcb/28bgxmQLTVwFKE1yfsg==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", + "@babel/generator": "^7.20.7", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", "dev": true, "requires": { "@babel/helper-string-parser": "^7.19.4", @@ -11668,9 +11674,9 @@ } }, "@types/jest": { - "version": "29.2.4", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.4.tgz", - "integrity": "sha512-PipFB04k2qTRPePduVLTRiPzQfvMeLwUN3Z21hsAKaB/W9IIzgB2pizCL466ftJlcyZqnHoC9ZHpxLGl3fS86A==", + "version": "29.2.5", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.5.tgz", + "integrity": "sha512-H2cSxkKgVmqNHXP7TC2L/WUorrZu8ZigyRywfVzv6EyBlxj39n4C00hjXYQWsbwqgElaj/CiAeSRmk5GoaKTgw==", "dev": true, "requires": { "expect": "^29.0.0", @@ -11817,9 +11823,9 @@ "dev": true }, "aws-sdk": { - "version": "2.1278.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1278.0.tgz", - "integrity": "sha512-keh0FXU6kP5j5vkWDgizZCSggmRfyRLUxmDKDVuiWb64H9FHIgoDBTMnYzKnQr6trHdBMopQdQ7RxnjYZ3BblA==", + "version": "2.1286.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1286.0.tgz", + "integrity": "sha512-CvkCD1+NSk2MPOutD2hEPhXDET/79w/gd9a359QWb9Ja0Fd4vVFXPkhlm1DTGzuwqFKGinpCMxDP4md7QPsVvw==", "dev": true, "requires": { "buffer": "4.9.2", @@ -11859,9 +11865,9 @@ } }, "axios": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.1.tgz", - "integrity": "sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz", + "integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==", "dev": true, "requires": { "follow-redirects": "^1.15.0", @@ -11870,12 +11876,12 @@ } }, "axios-cookiejar-support": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-4.0.3.tgz", - "integrity": "sha512-fMQc0mPR1CikWZEwVC6Av+sD4cJuV2eo06HFA+DfhY54uRcO43ILGxaq7YAMTiM0V0SdJCV4NhE1bOsQYlfSkg==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-4.0.6.tgz", + "integrity": "sha512-lWDhgM6bc2xYAsHkXEhceLpTu9ytAeIz1VSuL5FoUgGx2lqcMNbNxTD9Hm4x5c8JF5Me0HfNrb06fhEGMC30mQ==", "dev": true, "requires": { - "http-cookie-agent": "^4.0.2" + "http-cookie-agent": "^5.0.2" } }, "babel-jest": { @@ -12453,9 +12459,9 @@ "dev": true }, "detox": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/detox/-/detox-20.1.0.tgz", - "integrity": "sha512-9VUAAZRDBFcH+9SndbXY/2f0mBcQPDmsJPbanJ7QFHag0MHpaDgpurahDXC5lmbIxHSj9AFE42SGMyH2RANtJA==", + "version": "20.1.1", + "resolved": "https://registry.npmjs.org/detox/-/detox-20.1.1.tgz", + "integrity": "sha512-0ieeWAyo2f3YKeFwm7KCz4lBkCJIydyqzCQVN1sw/ZU9x9Qc8kz+itKAEiH4DHUlLkb4YLzfEbAXfO09wvrQ3w==", "dev": true, "requires": { "ajv": "^8.6.3", @@ -12471,7 +12477,6 @@ "ini": "^1.3.4", "json-cycle": "^1.3.0", "lodash": "^4.17.5", - "minimist": "^1.2.0", "multi-sort-stream": "^1.0.3", "multipipe": "^4.0.0", "node-ipc": "^9.2.1", @@ -13138,9 +13143,9 @@ "dev": true }, "http-cookie-agent": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-4.0.2.tgz", - "integrity": "sha512-noTmxdH5CuytTnLj/Qv3Z84e/YFq8yLXAw3pqIYZ25Edhb9pQErIAC+ednw40Cic6Le/h9ryph5/TqsvkOaUCw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-5.0.2.tgz", + "integrity": "sha512-BiBmZyIMGl5mLKmY7KH2uCVlcNUl1jexjdtWXFCUF4DFOrNZg1c5iPPTzWDzU7Ngfb6fB03DPpJQ80KQWmycsg==", "dev": true, "requires": { "agent-base": "^6.0.2" @@ -15449,7 +15454,8 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true + "dev": true, + "optional": true }, "mkdirp": { "version": "1.0.4", diff --git a/detox/package.json b/detox/package.json index 46deacbd2..e91b12207 100644 --- a/detox/package.json +++ b/detox/package.json @@ -5,21 +5,21 @@ "author": "Mattermost, Inc.", "devDependencies": { "@babel/plugin-proposal-class-properties": "7.18.6", - "@babel/plugin-transform-modules-commonjs": "7.19.6", + "@babel/plugin-transform-modules-commonjs": "7.20.11", "@babel/plugin-transform-runtime": "7.19.6", "@babel/preset-env": "7.20.2", "@jest/test-sequencer": "29.3.1", - "@types/jest": "29.2.4", + "@types/jest": "29.2.5", "@types/tough-cookie": "4.0.2", "@types/uuid": "9.0.0", - "aws-sdk": "2.1278.0", - "axios": "1.2.1", - "axios-cookiejar-support": "4.0.3", + "aws-sdk": "2.1286.0", + "axios": "1.2.2", + "axios-cookiejar-support": "4.0.6", "babel-jest": "29.3.1", "babel-plugin-module-resolver": "4.1.0", "client-oauth2": "4.3.3", "deepmerge": "4.2.2", - "detox": "20.1.0", + "detox": "20.1.1", "form-data": "4.0.0", "jest": "29.3.1", "jest-circus": "29.3.1", diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 8978fc28a..2fb3694ee 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -337,7 +337,7 @@ PODS: - React-Core - react-native-cookies (6.2.1): - React-Core - - react-native-create-thumbnail (1.6.3): + - react-native-create-thumbnail (1.6.4): - React-Core - react-native-document-picker (8.1.3): - React-Core @@ -911,7 +911,7 @@ SPEC CHECKSUMS: react-native-background-timer: 17ea5e06803401a379ebf1f20505b793ac44d0fe react-native-cameraroll: 0ff04cc4e0ff5f19a94ff4313e5c8bc4503cd86d react-native-cookies: f54fcded06bb0cda05c11d86788020b43528a26c - react-native-create-thumbnail: 94e68f6cc050a870f830352d1a924c1e8d38b52f + react-native-create-thumbnail: e022bcdcba8a0b4529a50d3fa1a832ec921be39d react-native-document-picker: 958e2bc82e128be69055be261aeac8d872c8d34c react-native-emm: c5b7dcffde34ce345fd0c16d66b587e611a3d31f react-native-hw-keyboard-event: b517cefb8d5c659a38049c582de85ff43337dc53 diff --git a/package-lock.json b/package-lock.json index 5c69cd3ee..4dc877e32 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "@formatjs/intl-numberformat": "8.3.3", "@formatjs/intl-pluralrules": "5.1.8", "@formatjs/intl-relativetimeformat": "11.1.8", - "@mattermost/compass-icons": "0.1.34", + "@mattermost/compass-icons": "0.1.35", "@mattermost/react-native-emm": "1.3.3", "@mattermost/react-native-network-client": "1.0.2", "@mattermost/react-native-paste-input": "0.5.2", @@ -56,12 +56,12 @@ "react-native-animated-numbers": "0.4.1", "react-native-background-timer": "2.4.1", "react-native-button": "3.0.1", - "react-native-calendars": "1.1292.0", - "react-native-create-thumbnail": "1.6.3", + "react-native-calendars": "1.1293.0", + "react-native-create-thumbnail": "1.6.4", "react-native-device-info": "10.3.0", "react-native-document-picker": "8.1.3", "react-native-dotenv": "3.4.6", - "react-native-elements": "3.4.2", + "react-native-elements": "3.4.3", "react-native-exception-handler": "2.10.10", "react-native-fast-image": "8.6.3", "react-native-file-viewer": "2.1.5", @@ -98,21 +98,21 @@ "semver": "7.3.8", "serialize-error": "11.0.0", "shallow-equals": "1.0.0", - "tinycolor2": "1.4.2", + "tinycolor2": "1.5.2", "url-parse": "1.5.10" }, "devDependencies": { - "@babel/cli": "7.19.3", - "@babel/core": "7.20.5", + "@babel/cli": "7.20.7", + "@babel/core": "7.20.7", "@babel/eslint-parser": "7.19.1", "@babel/plugin-proposal-class-properties": "7.18.6", - "@babel/plugin-proposal-decorators": "7.20.5", + "@babel/plugin-proposal-decorators": "7.20.7", "@babel/plugin-transform-flow-strip-types": "7.19.0", "@babel/plugin-transform-runtime": "7.19.6", "@babel/preset-env": "7.20.2", "@babel/preset-typescript": "7.18.6", "@babel/register": "7.18.9", - "@babel/runtime": "7.20.6", + "@babel/runtime": "7.20.7", "@react-native-community/eslint-config": "3.2.0", "@testing-library/react-hooks": "8.0.1", "@testing-library/react-native": "11.5.0", @@ -120,7 +120,7 @@ "@types/commonmark": "0.27.5", "@types/commonmark-react-renderer": "4.3.1", "@types/deep-equal": "1.0.1", - "@types/jest": "29.2.4", + "@types/jest": "29.2.5", "@types/lodash": "4.14.191", "@types/mime-db": "1.43.1", "@types/querystringify": "2.0.0", @@ -140,19 +140,19 @@ "@types/tough-cookie": "4.0.2", "@types/url-parse": "1.4.8", "@types/uuid": "9.0.0", - "@typescript-eslint/eslint-plugin": "5.47.0", - "@typescript-eslint/parser": "5.47.0", - "axios": "1.2.1", - "axios-cookiejar-support": "4.0.3", + "@typescript-eslint/eslint-plugin": "5.48.0", + "@typescript-eslint/parser": "5.48.0", + "axios": "1.2.2", + "axios-cookiejar-support": "4.0.6", "babel-jest": "29.3.1", "babel-loader": "9.1.0", "babel-plugin-module-resolver": "4.1.0", "deep-freeze": "0.0.1", - "detox": "20.1.0", - "eslint": "8.30.0", + "detox": "20.1.1", + "eslint": "8.31.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.26.0", - "eslint-plugin-jest": "27.1.7", + "eslint-plugin-jest": "27.2.0", "eslint-plugin-react": "7.31.11", "eslint-plugin-react-hooks": "4.6.0", "husky": "8.0.2", @@ -188,9 +188,9 @@ } }, "node_modules/@babel/cli": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.19.3.tgz", - "integrity": "sha512-643/TybmaCAe101m2tSVHi9UKpETXP9c/Ff4mD2tAwkdP6esKIfaauZFc67vGEM6r9fekbEGid+sZhbEnSe3dg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.20.7.tgz", + "integrity": "sha512-WylgcELHB66WwQqItxNILsMlaTd8/SO6SgTTjMp4uCI7P4QyH1r3nqgFmO3BfM4AtfniHgFMH3EpYFj/zynBkQ==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.8", @@ -228,28 +228,28 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "version": "7.20.10", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", + "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", - "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.7.tgz", + "integrity": "sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw==", "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.5", - "@babel/parser": "^7.20.5", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/generator": "^7.20.7", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.20.7", + "@babel/helpers": "^7.20.7", + "@babel/parser": "^7.20.7", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -300,11 +300,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", - "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", + "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", "dependencies": { - "@babel/types": "^7.20.5", + "@babel/types": "^7.20.7", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -336,13 +336,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "dependencies": { - "@babel/compat-data": "^7.20.0", + "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "engines": { @@ -352,6 +353,14 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -360,17 +369,22 @@ "semver": "bin/semver.js" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz", - "integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.7.tgz", + "integrity": "sha512-LtoWbDXOaidEf50hmdDqn9g8VEzsorMexoWMQdQODbvmqYmaF23pBP5VNPAGIFHsFQCIeKokDiz3CH5Y2jlY6w==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-replace-supers": "^7.20.7", "@babel/helper-split-export-declaration": "^7.18.6" }, "engines": { @@ -462,11 +476,11 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz", + "integrity": "sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==", "dependencies": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -484,18 +498,18 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", + "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -538,15 +552,16 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -624,13 +639,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", - "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz", + "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==", "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -650,9 +665,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", + "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -739,14 +754,14 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.5.tgz", - "integrity": "sha512-Lac7PpRJXcC3s9cKsBfl+uc+DYXU5FD06BrTFunQO6QIQT+DwyzDPURAowI3bcvD1dZF/ank1Z5rstUJn3Hn4Q==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.7.tgz", + "integrity": "sha512-JB45hbUweYpwAGjkiM7uCyXMENH2lG+9r3G2E+ttc2PRXAoEkpfd/KW5jDg4j8RS6tLtTG1jZi9LbHZVSfs1/A==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.5", + "@babel/helper-create-class-features-plugin": "^7.20.7", "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-replace-supers": "^7.20.7", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/plugin-syntax-decorators": "^7.19.0" }, @@ -2028,9 +2043,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.6.tgz", - "integrity": "sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz", + "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==", "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -2051,31 +2066,31 @@ } }, "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", - "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", + "version": "7.20.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.10.tgz", + "integrity": "sha512-oSf1juCgymrSez8NI4A2sr4+uB/mFd9MXplYGPEBnfAuWmmyeVcHa6xLPiaRBcXkcb/28bgxmQLTVwFKE1yfsg==", "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", + "@babel/generator": "^7.20.7", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2084,9 +2099,9 @@ } }, "node_modules/@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", "dependencies": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -2123,9 +2138,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.0.tgz", - "integrity": "sha512-7yfvXy6MWLgWSFsLhz5yH3iQ52St8cdUY6FoGieKkRDVxuxmrNuUetIuu6cmjNWwniUHiWXjxCr5tTXDrbYS5A==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -3283,9 +3298,9 @@ } }, "node_modules/@mattermost/compass-icons": { - "version": "0.1.34", - "resolved": "https://registry.npmjs.org/@mattermost/compass-icons/-/compass-icons-0.1.34.tgz", - "integrity": "sha512-g1V2DMQlfFOPZiMODJCm2jByg3HosjUP0OJk/zg3lj85PAmYb0rUvmGB9TBfuP7+mVZbmaYVGE1BoJy7Vb2BKw==" + "version": "0.1.35", + "resolved": "https://registry.npmjs.org/@mattermost/compass-icons/-/compass-icons-0.1.35.tgz", + "integrity": "sha512-qCZjvU6Vsl7cg/0urrq8ItK5CXnt3DqjFq/w9mBpWuem/YhMWLMVBoSuASAx9S2HV7Vr/iMdsMGWH/4qXkXCBg==" }, "node_modules/@mattermost/react-native-emm": { "version": "1.3.3", @@ -5876,9 +5891,9 @@ } }, "node_modules/@types/jest": { - "version": "29.2.4", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.4.tgz", - "integrity": "sha512-PipFB04k2qTRPePduVLTRiPzQfvMeLwUN3Z21hsAKaB/W9IIzgB2pizCL466ftJlcyZqnHoC9ZHpxLGl3fS86A==", + "version": "29.2.5", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.5.tgz", + "integrity": "sha512-H2cSxkKgVmqNHXP7TC2L/WUorrZu8ZigyRywfVzv6EyBlxj39n4C00hjXYQWsbwqgElaj/CiAeSRmk5GoaKTgw==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -6101,14 +6116,14 @@ "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.47.0.tgz", - "integrity": "sha512-AHZtlXAMGkDmyLuLZsRpH3p4G/1iARIwc/T0vIem2YB+xW6pZaXYXzCBnZSF/5fdM97R9QqZWZ+h3iW10XgevQ==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.0.tgz", + "integrity": "sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.47.0", - "@typescript-eslint/type-utils": "5.47.0", - "@typescript-eslint/utils": "5.47.0", + "@typescript-eslint/scope-manager": "5.48.0", + "@typescript-eslint/type-utils": "5.48.0", + "@typescript-eslint/utils": "5.48.0", "debug": "^4.3.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", @@ -6134,14 +6149,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.47.0.tgz", - "integrity": "sha512-udPU4ckK+R1JWCGdQC4Qa27NtBg7w020ffHqGyAK8pAgOVuNw7YaKXGChk+udh+iiGIJf6/E/0xhVXyPAbsczw==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.0.tgz", + "integrity": "sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.47.0", - "@typescript-eslint/types": "5.47.0", - "@typescript-eslint/typescript-estree": "5.47.0", + "@typescript-eslint/scope-manager": "5.48.0", + "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/typescript-estree": "5.48.0", "debug": "^4.3.4" }, "engines": { @@ -6161,9 +6176,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.47.0.tgz", - "integrity": "sha512-eslFG0Qy8wpGzDdYKu58CEr3WLkjwC5Usa6XbuV89ce/yN5RITLe1O8e+WFEuxnfftHiJImkkOBADj58ahRxSg==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.0.tgz", + "integrity": "sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -6174,13 +6189,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.47.0.tgz", - "integrity": "sha512-LxfKCG4bsRGq60Sqqu+34QT5qT2TEAHvSCCJ321uBWywgE2dS0LKcu5u+3sMGo+Vy9UmLOhdTw5JHzePV/1y4Q==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.0.tgz", + "integrity": "sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.47.0", - "@typescript-eslint/visitor-keys": "5.47.0", + "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/visitor-keys": "5.48.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -6201,12 +6216,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.47.0.tgz", - "integrity": "sha512-ByPi5iMa6QqDXe/GmT/hR6MZtVPi0SqMQPDx15FczCBXJo/7M8T88xReOALAfpBLm+zxpPfmhuEvPb577JRAEg==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.0.tgz", + "integrity": "sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.47.0", + "@typescript-eslint/types": "5.48.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -6227,13 +6242,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.47.0.tgz", - "integrity": "sha512-dvJab4bFf7JVvjPuh3sfBUWsiD73aiftKBpWSfi3sUkysDQ4W8x+ZcFpNp7Kgv0weldhpmMOZBjx1wKN8uWvAw==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.0.tgz", + "integrity": "sha512-0AA4LviDtVtZqlyUQnZMVHydDATpD9SAX/RC5qh6cBd3xmyWvmXYF+WT1oOmxkeMnWDlUVTwdODeucUnjz3gow==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.47.0", - "@typescript-eslint/visitor-keys": "5.47.0" + "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/visitor-keys": "5.48.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -6244,9 +6259,9 @@ } }, "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.47.0.tgz", - "integrity": "sha512-eslFG0Qy8wpGzDdYKu58CEr3WLkjwC5Usa6XbuV89ce/yN5RITLe1O8e+WFEuxnfftHiJImkkOBADj58ahRxSg==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.0.tgz", + "integrity": "sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -6257,12 +6272,12 @@ } }, "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.47.0.tgz", - "integrity": "sha512-ByPi5iMa6QqDXe/GmT/hR6MZtVPi0SqMQPDx15FczCBXJo/7M8T88xReOALAfpBLm+zxpPfmhuEvPb577JRAEg==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.0.tgz", + "integrity": "sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.47.0", + "@typescript-eslint/types": "5.48.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -6283,13 +6298,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.47.0.tgz", - "integrity": "sha512-1J+DFFrYoDUXQE1b7QjrNGARZE6uVhBqIvdaXTe5IN+NmEyD68qXR1qX1g2u4voA+nCaelQyG8w30SAOihhEYg==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.0.tgz", + "integrity": "sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.47.0", - "@typescript-eslint/utils": "5.47.0", + "@typescript-eslint/typescript-estree": "5.48.0", + "@typescript-eslint/utils": "5.48.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -6310,9 +6325,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.47.0.tgz", - "integrity": "sha512-eslFG0Qy8wpGzDdYKu58CEr3WLkjwC5Usa6XbuV89ce/yN5RITLe1O8e+WFEuxnfftHiJImkkOBADj58ahRxSg==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.0.tgz", + "integrity": "sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -6323,13 +6338,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.47.0.tgz", - "integrity": "sha512-LxfKCG4bsRGq60Sqqu+34QT5qT2TEAHvSCCJ321uBWywgE2dS0LKcu5u+3sMGo+Vy9UmLOhdTw5JHzePV/1y4Q==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.0.tgz", + "integrity": "sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.47.0", - "@typescript-eslint/visitor-keys": "5.47.0", + "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/visitor-keys": "5.48.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -6350,12 +6365,12 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.47.0.tgz", - "integrity": "sha512-ByPi5iMa6QqDXe/GmT/hR6MZtVPi0SqMQPDx15FczCBXJo/7M8T88xReOALAfpBLm+zxpPfmhuEvPb577JRAEg==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.0.tgz", + "integrity": "sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.47.0", + "@typescript-eslint/types": "5.48.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -6416,16 +6431,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.47.0.tgz", - "integrity": "sha512-U9xcc0N7xINrCdGVPwABjbAKqx4GK67xuMV87toI+HUqgXj26m6RBp9UshEXcTrgCkdGYFzgKLt8kxu49RilDw==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.0.tgz", + "integrity": "sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.47.0", - "@typescript-eslint/types": "5.47.0", - "@typescript-eslint/typescript-estree": "5.47.0", + "@typescript-eslint/scope-manager": "5.48.0", + "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/typescript-estree": "5.48.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" @@ -6442,9 +6457,9 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.47.0.tgz", - "integrity": "sha512-eslFG0Qy8wpGzDdYKu58CEr3WLkjwC5Usa6XbuV89ce/yN5RITLe1O8e+WFEuxnfftHiJImkkOBADj58ahRxSg==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.0.tgz", + "integrity": "sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -6455,13 +6470,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.47.0.tgz", - "integrity": "sha512-LxfKCG4bsRGq60Sqqu+34QT5qT2TEAHvSCCJ321uBWywgE2dS0LKcu5u+3sMGo+Vy9UmLOhdTw5JHzePV/1y4Q==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.0.tgz", + "integrity": "sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.47.0", - "@typescript-eslint/visitor-keys": "5.47.0", + "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/visitor-keys": "5.48.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -6482,12 +6497,12 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.47.0.tgz", - "integrity": "sha512-ByPi5iMa6QqDXe/GmT/hR6MZtVPi0SqMQPDx15FczCBXJo/7M8T88xReOALAfpBLm+zxpPfmhuEvPb577JRAEg==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.0.tgz", + "integrity": "sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.47.0", + "@typescript-eslint/types": "5.48.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -7188,9 +7203,9 @@ } }, "node_modules/axios": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.1.tgz", - "integrity": "sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz", + "integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==", "dev": true, "dependencies": { "follow-redirects": "^1.15.0", @@ -7199,16 +7214,19 @@ } }, "node_modules/axios-cookiejar-support": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-4.0.3.tgz", - "integrity": "sha512-fMQc0mPR1CikWZEwVC6Av+sD4cJuV2eo06HFA+DfhY54uRcO43ILGxaq7YAMTiM0V0SdJCV4NhE1bOsQYlfSkg==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-4.0.6.tgz", + "integrity": "sha512-lWDhgM6bc2xYAsHkXEhceLpTu9ytAeIz1VSuL5FoUgGx2lqcMNbNxTD9Hm4x5c8JF5Me0HfNrb06fhEGMC30mQ==", "dev": true, "dependencies": { - "http-cookie-agent": "^4.0.2" + "http-cookie-agent": "^5.0.2" }, "engines": { "node": ">=14.18.0 <15.0.0 || >=16.0.0" }, + "funding": { + "url": "https://github.com/sponsors/3846masa" + }, "peerDependencies": { "axios": ">=0.20.0", "tough-cookie": ">=4.0.0" @@ -8899,9 +8917,9 @@ } }, "node_modules/detox": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/detox/-/detox-20.1.0.tgz", - "integrity": "sha512-9VUAAZRDBFcH+9SndbXY/2f0mBcQPDmsJPbanJ7QFHag0MHpaDgpurahDXC5lmbIxHSj9AFE42SGMyH2RANtJA==", + "version": "20.1.1", + "resolved": "https://registry.npmjs.org/detox/-/detox-20.1.1.tgz", + "integrity": "sha512-0ieeWAyo2f3YKeFwm7KCz4lBkCJIydyqzCQVN1sw/ZU9x9Qc8kz+itKAEiH4DHUlLkb4YLzfEbAXfO09wvrQ3w==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -8918,7 +8936,6 @@ "ini": "^1.3.4", "json-cycle": "^1.3.0", "lodash": "^4.17.5", - "minimist": "^1.2.0", "multi-sort-stream": "^1.0.3", "multipipe": "^4.0.0", "node-ipc": "^9.2.1", @@ -9440,12 +9457,12 @@ } }, "node_modules/eslint": { - "version": "8.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.30.0.tgz", - "integrity": "sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ==", + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz", + "integrity": "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.4.0", + "@eslint/eslintrc": "^1.4.1", "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -9715,9 +9732,9 @@ "dev": true }, "node_modules/eslint-plugin-jest": { - "version": "27.1.7", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.1.7.tgz", - "integrity": "sha512-0QVzf+og4YI1Qr3UoprkqqhezAZjFffdi62b0IurkCXMqPtRW84/UT4CKsYT80h/D82LA9avjO/80Ou1LdgbaQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.2.0.tgz", + "integrity": "sha512-KGIYtelk4rIhKocxRKUEeX+kJ0ZCab/CiSgS8BMcKD7AY7YxXhlg/d51oF5jq2rOrtuJEDYWRwXD95l6l2vtrA==", "dev": true, "dependencies": { "@typescript-eslint/utils": "^5.10.0" @@ -11648,9 +11665,9 @@ "dev": true }, "node_modules/http-cookie-agent": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-4.0.2.tgz", - "integrity": "sha512-noTmxdH5CuytTnLj/Qv3Z84e/YFq8yLXAw3pqIYZ25Edhb9pQErIAC+ednw40Cic6Le/h9ryph5/TqsvkOaUCw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-5.0.2.tgz", + "integrity": "sha512-BiBmZyIMGl5mLKmY7KH2uCVlcNUl1jexjdtWXFCUF4DFOrNZg1c5iPPTzWDzU7Ngfb6fB03DPpJQ80KQWmycsg==", "dev": true, "dependencies": { "agent-base": "^6.0.2" @@ -11658,10 +11675,13 @@ "engines": { "node": ">=14.18.0 <15.0.0 || >=16.0.0" }, + "funding": { + "url": "https://github.com/sponsors/3846masa" + }, "peerDependencies": { "deasync": "^0.1.26", "tough-cookie": "^4.0.0", - "undici": "^5.1.1" + "undici": "^5.11.0" }, "peerDependenciesMeta": { "deasync": { @@ -18210,9 +18230,9 @@ } }, "node_modules/react-native-calendars": { - "version": "1.1292.0", - "resolved": "https://registry.npmjs.org/react-native-calendars/-/react-native-calendars-1.1292.0.tgz", - "integrity": "sha512-4TjLEg/aIC6ohD7K1MkUedkcw8eNzsWS56abPonkXHxzO+zBpY5beKpwrmFZwlq4ZRadMv8Dp2TsW2Nld6JONg==", + "version": "1.1293.0", + "resolved": "https://registry.npmjs.org/react-native-calendars/-/react-native-calendars-1.1293.0.tgz", + "integrity": "sha512-/wWBlNOooHAVTCDhZptdeZEa1+DTUW1E3cI9auEPblJ56t1TXqe0gVK1UTchPDsA5d2eIXxdhTThpFD846yq7g==", "dependencies": { "hoist-non-react-statics": "^3.3.1", "immutable": "^4.0.0-rc.12", @@ -18224,7 +18244,7 @@ "xdate": "^0.8.0" }, "optionalDependencies": { - "moment": "^2.24.0" + "moment": "^2.29.4" } }, "node_modules/react-native-codegen": { @@ -18239,9 +18259,9 @@ } }, "node_modules/react-native-create-thumbnail": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/react-native-create-thumbnail/-/react-native-create-thumbnail-1.6.3.tgz", - "integrity": "sha512-QsIhUBAefXBYq808KUMe0MnvgIokO4ULM43X1jJ2N9xzQX6Zyu/D1VhlE0LjGL0jHoiULmIRa05QdJgnq/2zBA==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/react-native-create-thumbnail/-/react-native-create-thumbnail-1.6.4.tgz", + "integrity": "sha512-JWuKXswDXtqUPfuqh6rjCVMvTSSG3kUtwvSK/YdaNU0i+nZKxeqHmt/CO2+TyI/WSUFynGVmWT1xOHhCZAFsRQ==", "peerDependencies": { "react-native": ">=0.59.0" } @@ -18285,9 +18305,9 @@ } }, "node_modules/react-native-elements": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/react-native-elements/-/react-native-elements-3.4.2.tgz", - "integrity": "sha512-m0eAWOn7JuR1wNTNY0WHuaqst4LI/gFE4N5Bbyfsc4DiryWsMST7aAg5w/Gos4IexWIzhLKCIkPxthND1m/8Xg==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/react-native-elements/-/react-native-elements-3.4.3.tgz", + "integrity": "sha512-VtZc25EecPZyUBER85zFK9ZbY6kkUdcm1ZwJ9hdoGSCr1R/GFgxor4jngOcSYeMvQ+qimd5No44OVJW3rSJECA==", "hasInstallScript": true, "dependencies": { "@types/react-native-vector-icons": "^6.4.6", @@ -18300,7 +18320,7 @@ "react-native-size-matters": "^0.3.1" }, "peerDependencies": { - "react-native-safe-area-context": "^3.1.9", + "react-native-safe-area-context": ">= 3.0.0", "react-native-vector-icons": ">7.0.0" } }, @@ -20844,12 +20864,9 @@ } }, "node_modules/tinycolor2": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", - "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", - "engines": { - "node": "*" - } + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.5.2.tgz", + "integrity": "sha512-h80m9GPFGbcLzZByXlNSEhp1gf8Dy+VX/2JCGUZsWLo7lV1mnE/XlxGYgRBoMLJh1lIDXP0EMC4RPTjlRaV+Bg==" }, "node_modules/tmp": { "version": "0.0.33", @@ -22088,9 +22105,9 @@ } }, "@babel/cli": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.19.3.tgz", - "integrity": "sha512-643/TybmaCAe101m2tSVHi9UKpETXP9c/Ff4mD2tAwkdP6esKIfaauZFc67vGEM6r9fekbEGid+sZhbEnSe3dg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.20.7.tgz", + "integrity": "sha512-WylgcELHB66WwQqItxNILsMlaTd8/SO6SgTTjMp4uCI7P4QyH1r3nqgFmO3BfM4AtfniHgFMH3EpYFj/zynBkQ==", "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.8", @@ -22113,25 +22130,25 @@ } }, "@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==" + "version": "7.20.10", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", + "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==" }, "@babel/core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", - "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.7.tgz", + "integrity": "sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw==", "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.5", - "@babel/parser": "^7.20.5", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/generator": "^7.20.7", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.20.7", + "@babel/helpers": "^7.20.7", + "@babel/parser": "^7.20.7", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -22166,11 +22183,11 @@ } }, "@babel/generator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", - "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", + "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", "requires": { - "@babel/types": "^7.20.5", + "@babel/types": "^7.20.7", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" } @@ -22193,34 +22210,48 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "requires": { - "@babel/compat-data": "^7.20.0", + "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" } } }, "@babel/helper-create-class-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz", - "integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.7.tgz", + "integrity": "sha512-LtoWbDXOaidEf50hmdDqn9g8VEzsorMexoWMQdQODbvmqYmaF23pBP5VNPAGIFHsFQCIeKokDiz3CH5Y2jlY6w==", "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-replace-supers": "^7.20.7", "@babel/helper-split-export-declaration": "^7.18.6" } }, @@ -22284,11 +22315,11 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz", + "integrity": "sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==", "requires": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.20.7" } }, "@babel/helper-module-imports": { @@ -22300,18 +22331,18 @@ } }, "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", + "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" } }, "@babel/helper-optimise-call-expression": { @@ -22339,15 +22370,16 @@ } }, "@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "requires": { "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/helper-simple-access": { @@ -22401,13 +22433,13 @@ } }, "@babel/helpers": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", - "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz", + "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==", "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/highlight": { @@ -22421,9 +22453,9 @@ } }, "@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==" + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", + "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", @@ -22474,14 +22506,14 @@ } }, "@babel/plugin-proposal-decorators": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.5.tgz", - "integrity": "sha512-Lac7PpRJXcC3s9cKsBfl+uc+DYXU5FD06BrTFunQO6QIQT+DwyzDPURAowI3bcvD1dZF/ank1Z5rstUJn3Hn4Q==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.7.tgz", + "integrity": "sha512-JB45hbUweYpwAGjkiM7uCyXMENH2lG+9r3G2E+ttc2PRXAoEkpfd/KW5jDg4j8RS6tLtTG1jZi9LbHZVSfs1/A==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.5", + "@babel/helper-create-class-features-plugin": "^7.20.7", "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-replace-supers": "^7.20.7", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/plugin-syntax-decorators": "^7.19.0" } @@ -23305,9 +23337,9 @@ } }, "@babel/runtime": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.6.tgz", - "integrity": "sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz", + "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==", "requires": { "regenerator-runtime": "^0.13.11" } @@ -23322,36 +23354,36 @@ } }, "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "requires": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", - "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", + "version": "7.20.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.10.tgz", + "integrity": "sha512-oSf1juCgymrSez8NI4A2sr4+uB/mFd9MXplYGPEBnfAuWmmyeVcHa6xLPiaRBcXkcb/28bgxmQLTVwFKE1yfsg==", "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", + "@babel/generator": "^7.20.7", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", "requires": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -23379,9 +23411,9 @@ } }, "@eslint/eslintrc": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.0.tgz", - "integrity": "sha512-7yfvXy6MWLgWSFsLhz5yH3iQ52St8cdUY6FoGieKkRDVxuxmrNuUetIuu6cmjNWwniUHiWXjxCr5tTXDrbYS5A==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -24280,9 +24312,9 @@ } }, "@mattermost/compass-icons": { - "version": "0.1.34", - "resolved": "https://registry.npmjs.org/@mattermost/compass-icons/-/compass-icons-0.1.34.tgz", - "integrity": "sha512-g1V2DMQlfFOPZiMODJCm2jByg3HosjUP0OJk/zg3lj85PAmYb0rUvmGB9TBfuP7+mVZbmaYVGE1BoJy7Vb2BKw==" + "version": "0.1.35", + "resolved": "https://registry.npmjs.org/@mattermost/compass-icons/-/compass-icons-0.1.35.tgz", + "integrity": "sha512-qCZjvU6Vsl7cg/0urrq8ItK5CXnt3DqjFq/w9mBpWuem/YhMWLMVBoSuASAx9S2HV7Vr/iMdsMGWH/4qXkXCBg==" }, "@mattermost/react-native-emm": { "version": "1.3.3", @@ -26224,9 +26256,9 @@ } }, "@types/jest": { - "version": "29.2.4", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.4.tgz", - "integrity": "sha512-PipFB04k2qTRPePduVLTRiPzQfvMeLwUN3Z21hsAKaB/W9IIzgB2pizCL466ftJlcyZqnHoC9ZHpxLGl3fS86A==", + "version": "29.2.5", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.5.tgz", + "integrity": "sha512-H2cSxkKgVmqNHXP7TC2L/WUorrZu8ZigyRywfVzv6EyBlxj39n4C00hjXYQWsbwqgElaj/CiAeSRmk5GoaKTgw==", "dev": true, "requires": { "expect": "^29.0.0", @@ -26449,14 +26481,14 @@ "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" }, "@typescript-eslint/eslint-plugin": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.47.0.tgz", - "integrity": "sha512-AHZtlXAMGkDmyLuLZsRpH3p4G/1iARIwc/T0vIem2YB+xW6pZaXYXzCBnZSF/5fdM97R9QqZWZ+h3iW10XgevQ==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.0.tgz", + "integrity": "sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.47.0", - "@typescript-eslint/type-utils": "5.47.0", - "@typescript-eslint/utils": "5.47.0", + "@typescript-eslint/scope-manager": "5.48.0", + "@typescript-eslint/type-utils": "5.48.0", + "@typescript-eslint/utils": "5.48.0", "debug": "^4.3.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", @@ -26466,31 +26498,31 @@ } }, "@typescript-eslint/parser": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.47.0.tgz", - "integrity": "sha512-udPU4ckK+R1JWCGdQC4Qa27NtBg7w020ffHqGyAK8pAgOVuNw7YaKXGChk+udh+iiGIJf6/E/0xhVXyPAbsczw==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.0.tgz", + "integrity": "sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.47.0", - "@typescript-eslint/types": "5.47.0", - "@typescript-eslint/typescript-estree": "5.47.0", + "@typescript-eslint/scope-manager": "5.48.0", + "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/typescript-estree": "5.48.0", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/types": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.47.0.tgz", - "integrity": "sha512-eslFG0Qy8wpGzDdYKu58CEr3WLkjwC5Usa6XbuV89ce/yN5RITLe1O8e+WFEuxnfftHiJImkkOBADj58ahRxSg==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.0.tgz", + "integrity": "sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.47.0.tgz", - "integrity": "sha512-LxfKCG4bsRGq60Sqqu+34QT5qT2TEAHvSCCJ321uBWywgE2dS0LKcu5u+3sMGo+Vy9UmLOhdTw5JHzePV/1y4Q==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.0.tgz", + "integrity": "sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.47.0", - "@typescript-eslint/visitor-keys": "5.47.0", + "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/visitor-keys": "5.48.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -26499,12 +26531,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.47.0.tgz", - "integrity": "sha512-ByPi5iMa6QqDXe/GmT/hR6MZtVPi0SqMQPDx15FczCBXJo/7M8T88xReOALAfpBLm+zxpPfmhuEvPb577JRAEg==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.0.tgz", + "integrity": "sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==", "dev": true, "requires": { - "@typescript-eslint/types": "5.47.0", + "@typescript-eslint/types": "5.48.0", "eslint-visitor-keys": "^3.3.0" } }, @@ -26517,28 +26549,28 @@ } }, "@typescript-eslint/scope-manager": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.47.0.tgz", - "integrity": "sha512-dvJab4bFf7JVvjPuh3sfBUWsiD73aiftKBpWSfi3sUkysDQ4W8x+ZcFpNp7Kgv0weldhpmMOZBjx1wKN8uWvAw==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.0.tgz", + "integrity": "sha512-0AA4LviDtVtZqlyUQnZMVHydDATpD9SAX/RC5qh6cBd3xmyWvmXYF+WT1oOmxkeMnWDlUVTwdODeucUnjz3gow==", "dev": true, "requires": { - "@typescript-eslint/types": "5.47.0", - "@typescript-eslint/visitor-keys": "5.47.0" + "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/visitor-keys": "5.48.0" }, "dependencies": { "@typescript-eslint/types": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.47.0.tgz", - "integrity": "sha512-eslFG0Qy8wpGzDdYKu58CEr3WLkjwC5Usa6XbuV89ce/yN5RITLe1O8e+WFEuxnfftHiJImkkOBADj58ahRxSg==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.0.tgz", + "integrity": "sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==", "dev": true }, "@typescript-eslint/visitor-keys": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.47.0.tgz", - "integrity": "sha512-ByPi5iMa6QqDXe/GmT/hR6MZtVPi0SqMQPDx15FczCBXJo/7M8T88xReOALAfpBLm+zxpPfmhuEvPb577JRAEg==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.0.tgz", + "integrity": "sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==", "dev": true, "requires": { - "@typescript-eslint/types": "5.47.0", + "@typescript-eslint/types": "5.48.0", "eslint-visitor-keys": "^3.3.0" } }, @@ -26551,31 +26583,31 @@ } }, "@typescript-eslint/type-utils": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.47.0.tgz", - "integrity": "sha512-1J+DFFrYoDUXQE1b7QjrNGARZE6uVhBqIvdaXTe5IN+NmEyD68qXR1qX1g2u4voA+nCaelQyG8w30SAOihhEYg==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.0.tgz", + "integrity": "sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.47.0", - "@typescript-eslint/utils": "5.47.0", + "@typescript-eslint/typescript-estree": "5.48.0", + "@typescript-eslint/utils": "5.48.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, "dependencies": { "@typescript-eslint/types": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.47.0.tgz", - "integrity": "sha512-eslFG0Qy8wpGzDdYKu58CEr3WLkjwC5Usa6XbuV89ce/yN5RITLe1O8e+WFEuxnfftHiJImkkOBADj58ahRxSg==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.0.tgz", + "integrity": "sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.47.0.tgz", - "integrity": "sha512-LxfKCG4bsRGq60Sqqu+34QT5qT2TEAHvSCCJ321uBWywgE2dS0LKcu5u+3sMGo+Vy9UmLOhdTw5JHzePV/1y4Q==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.0.tgz", + "integrity": "sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.47.0", - "@typescript-eslint/visitor-keys": "5.47.0", + "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/visitor-keys": "5.48.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -26584,12 +26616,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.47.0.tgz", - "integrity": "sha512-ByPi5iMa6QqDXe/GmT/hR6MZtVPi0SqMQPDx15FczCBXJo/7M8T88xReOALAfpBLm+zxpPfmhuEvPb577JRAEg==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.0.tgz", + "integrity": "sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==", "dev": true, "requires": { - "@typescript-eslint/types": "5.47.0", + "@typescript-eslint/types": "5.48.0", "eslint-visitor-keys": "^3.3.0" } }, @@ -26623,35 +26655,35 @@ } }, "@typescript-eslint/utils": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.47.0.tgz", - "integrity": "sha512-U9xcc0N7xINrCdGVPwABjbAKqx4GK67xuMV87toI+HUqgXj26m6RBp9UshEXcTrgCkdGYFzgKLt8kxu49RilDw==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.0.tgz", + "integrity": "sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.47.0", - "@typescript-eslint/types": "5.47.0", - "@typescript-eslint/typescript-estree": "5.47.0", + "@typescript-eslint/scope-manager": "5.48.0", + "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/typescript-estree": "5.48.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" }, "dependencies": { "@typescript-eslint/types": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.47.0.tgz", - "integrity": "sha512-eslFG0Qy8wpGzDdYKu58CEr3WLkjwC5Usa6XbuV89ce/yN5RITLe1O8e+WFEuxnfftHiJImkkOBADj58ahRxSg==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.0.tgz", + "integrity": "sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.47.0.tgz", - "integrity": "sha512-LxfKCG4bsRGq60Sqqu+34QT5qT2TEAHvSCCJ321uBWywgE2dS0LKcu5u+3sMGo+Vy9UmLOhdTw5JHzePV/1y4Q==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.0.tgz", + "integrity": "sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.47.0", - "@typescript-eslint/visitor-keys": "5.47.0", + "@typescript-eslint/types": "5.48.0", + "@typescript-eslint/visitor-keys": "5.48.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -26660,12 +26692,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.47.0.tgz", - "integrity": "sha512-ByPi5iMa6QqDXe/GmT/hR6MZtVPi0SqMQPDx15FczCBXJo/7M8T88xReOALAfpBLm+zxpPfmhuEvPb577JRAEg==", + "version": "5.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.0.tgz", + "integrity": "sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==", "dev": true, "requires": { - "@typescript-eslint/types": "5.47.0", + "@typescript-eslint/types": "5.48.0", "eslint-visitor-keys": "^3.3.0" } }, @@ -27234,9 +27266,9 @@ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" }, "axios": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.1.tgz", - "integrity": "sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz", + "integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==", "dev": true, "requires": { "follow-redirects": "^1.15.0", @@ -27245,12 +27277,12 @@ } }, "axios-cookiejar-support": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-4.0.3.tgz", - "integrity": "sha512-fMQc0mPR1CikWZEwVC6Av+sD4cJuV2eo06HFA+DfhY54uRcO43ILGxaq7YAMTiM0V0SdJCV4NhE1bOsQYlfSkg==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-4.0.6.tgz", + "integrity": "sha512-lWDhgM6bc2xYAsHkXEhceLpTu9ytAeIz1VSuL5FoUgGx2lqcMNbNxTD9Hm4x5c8JF5Me0HfNrb06fhEGMC30mQ==", "dev": true, "requires": { - "http-cookie-agent": "^4.0.2" + "http-cookie-agent": "^5.0.2" } }, "babel-core": { @@ -28528,9 +28560,9 @@ "dev": true }, "detox": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/detox/-/detox-20.1.0.tgz", - "integrity": "sha512-9VUAAZRDBFcH+9SndbXY/2f0mBcQPDmsJPbanJ7QFHag0MHpaDgpurahDXC5lmbIxHSj9AFE42SGMyH2RANtJA==", + "version": "20.1.1", + "resolved": "https://registry.npmjs.org/detox/-/detox-20.1.1.tgz", + "integrity": "sha512-0ieeWAyo2f3YKeFwm7KCz4lBkCJIydyqzCQVN1sw/ZU9x9Qc8kz+itKAEiH4DHUlLkb4YLzfEbAXfO09wvrQ3w==", "dev": true, "requires": { "ajv": "^8.6.3", @@ -28546,7 +28578,6 @@ "ini": "^1.3.4", "json-cycle": "^1.3.0", "lodash": "^4.17.5", - "minimist": "^1.2.0", "multi-sort-stream": "^1.0.3", "multipipe": "^4.0.0", "node-ipc": "^9.2.1", @@ -28950,12 +28981,12 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "eslint": { - "version": "8.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.30.0.tgz", - "integrity": "sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ==", + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz", + "integrity": "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.4.0", + "@eslint/eslintrc": "^1.4.1", "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -29355,9 +29386,9 @@ } }, "eslint-plugin-jest": { - "version": "27.1.7", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.1.7.tgz", - "integrity": "sha512-0QVzf+og4YI1Qr3UoprkqqhezAZjFffdi62b0IurkCXMqPtRW84/UT4CKsYT80h/D82LA9avjO/80Ou1LdgbaQ==", + "version": "27.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.2.0.tgz", + "integrity": "sha512-KGIYtelk4rIhKocxRKUEeX+kJ0ZCab/CiSgS8BMcKD7AY7YxXhlg/d51oF5jq2rOrtuJEDYWRwXD95l6l2vtrA==", "dev": true, "requires": { "@typescript-eslint/utils": "^5.10.0" @@ -30614,9 +30645,9 @@ "dev": true }, "http-cookie-agent": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-4.0.2.tgz", - "integrity": "sha512-noTmxdH5CuytTnLj/Qv3Z84e/YFq8yLXAw3pqIYZ25Edhb9pQErIAC+ednw40Cic6Le/h9ryph5/TqsvkOaUCw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-5.0.2.tgz", + "integrity": "sha512-BiBmZyIMGl5mLKmY7KH2uCVlcNUl1jexjdtWXFCUF4DFOrNZg1c5iPPTzWDzU7Ngfb6fB03DPpJQ80KQWmycsg==", "dev": true, "requires": { "agent-base": "^6.0.2" @@ -35708,15 +35739,15 @@ } }, "react-native-calendars": { - "version": "1.1292.0", - "resolved": "https://registry.npmjs.org/react-native-calendars/-/react-native-calendars-1.1292.0.tgz", - "integrity": "sha512-4TjLEg/aIC6ohD7K1MkUedkcw8eNzsWS56abPonkXHxzO+zBpY5beKpwrmFZwlq4ZRadMv8Dp2TsW2Nld6JONg==", + "version": "1.1293.0", + "resolved": "https://registry.npmjs.org/react-native-calendars/-/react-native-calendars-1.1293.0.tgz", + "integrity": "sha512-/wWBlNOooHAVTCDhZptdeZEa1+DTUW1E3cI9auEPblJ56t1TXqe0gVK1UTchPDsA5d2eIXxdhTThpFD846yq7g==", "requires": { "hoist-non-react-statics": "^3.3.1", "immutable": "^4.0.0-rc.12", "lodash": "^4.17.15", "memoize-one": "^5.2.1", - "moment": "^2.24.0", + "moment": "^2.29.4", "prop-types": "^15.5.10", "react-native-swipe-gestures": "^1.0.5", "recyclerlistview": "^3.0.5", @@ -35735,9 +35766,9 @@ } }, "react-native-create-thumbnail": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/react-native-create-thumbnail/-/react-native-create-thumbnail-1.6.3.tgz", - "integrity": "sha512-QsIhUBAefXBYq808KUMe0MnvgIokO4ULM43X1jJ2N9xzQX6Zyu/D1VhlE0LjGL0jHoiULmIRa05QdJgnq/2zBA==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/react-native-create-thumbnail/-/react-native-create-thumbnail-1.6.4.tgz", + "integrity": "sha512-JWuKXswDXtqUPfuqh6rjCVMvTSSG3kUtwvSK/YdaNU0i+nZKxeqHmt/CO2+TyI/WSUFynGVmWT1xOHhCZAFsRQ==", "requires": {} }, "react-native-device-info": { @@ -35763,9 +35794,9 @@ } }, "react-native-elements": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/react-native-elements/-/react-native-elements-3.4.2.tgz", - "integrity": "sha512-m0eAWOn7JuR1wNTNY0WHuaqst4LI/gFE4N5Bbyfsc4DiryWsMST7aAg5w/Gos4IexWIzhLKCIkPxthND1m/8Xg==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/react-native-elements/-/react-native-elements-3.4.3.tgz", + "integrity": "sha512-VtZc25EecPZyUBER85zFK9ZbY6kkUdcm1ZwJ9hdoGSCr1R/GFgxor4jngOcSYeMvQ+qimd5No44OVJW3rSJECA==", "requires": { "@types/react-native-vector-icons": "^6.4.6", "color": "^3.1.2", @@ -37623,9 +37654,9 @@ } }, "tinycolor2": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", - "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.5.2.tgz", + "integrity": "sha512-h80m9GPFGbcLzZByXlNSEhp1gf8Dy+VX/2JCGUZsWLo7lV1mnE/XlxGYgRBoMLJh1lIDXP0EMC4RPTjlRaV+Bg==" }, "tmp": { "version": "0.0.33", diff --git a/package.json b/package.json index c12d59d30..aa07ea7dd 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "@formatjs/intl-numberformat": "8.3.3", "@formatjs/intl-pluralrules": "5.1.8", "@formatjs/intl-relativetimeformat": "11.1.8", - "@mattermost/compass-icons": "0.1.34", + "@mattermost/compass-icons": "0.1.35", "@mattermost/react-native-emm": "1.3.3", "@mattermost/react-native-network-client": "1.0.2", "@mattermost/react-native-paste-input": "0.5.2", @@ -53,12 +53,12 @@ "react-native-animated-numbers": "0.4.1", "react-native-background-timer": "2.4.1", "react-native-button": "3.0.1", - "react-native-calendars": "1.1292.0", - "react-native-create-thumbnail": "1.6.3", + "react-native-calendars": "1.1293.0", + "react-native-create-thumbnail": "1.6.4", "react-native-device-info": "10.3.0", "react-native-document-picker": "8.1.3", "react-native-dotenv": "3.4.6", - "react-native-elements": "3.4.2", + "react-native-elements": "3.4.3", "react-native-exception-handler": "2.10.10", "react-native-fast-image": "8.6.3", "react-native-file-viewer": "2.1.5", @@ -95,21 +95,21 @@ "semver": "7.3.8", "serialize-error": "11.0.0", "shallow-equals": "1.0.0", - "tinycolor2": "1.4.2", + "tinycolor2": "1.5.2", "url-parse": "1.5.10" }, "devDependencies": { - "@babel/cli": "7.19.3", - "@babel/core": "7.20.5", + "@babel/cli": "7.20.7", + "@babel/core": "7.20.7", "@babel/eslint-parser": "7.19.1", "@babel/plugin-proposal-class-properties": "7.18.6", - "@babel/plugin-proposal-decorators": "7.20.5", + "@babel/plugin-proposal-decorators": "7.20.7", "@babel/plugin-transform-flow-strip-types": "7.19.0", "@babel/plugin-transform-runtime": "7.19.6", "@babel/preset-env": "7.20.2", "@babel/preset-typescript": "7.18.6", "@babel/register": "7.18.9", - "@babel/runtime": "7.20.6", + "@babel/runtime": "7.20.7", "@react-native-community/eslint-config": "3.2.0", "@testing-library/react-hooks": "8.0.1", "@testing-library/react-native": "11.5.0", @@ -117,7 +117,7 @@ "@types/commonmark": "0.27.5", "@types/commonmark-react-renderer": "4.3.1", "@types/deep-equal": "1.0.1", - "@types/jest": "29.2.4", + "@types/jest": "29.2.5", "@types/lodash": "4.14.191", "@types/mime-db": "1.43.1", "@types/querystringify": "2.0.0", @@ -137,19 +137,19 @@ "@types/tough-cookie": "4.0.2", "@types/url-parse": "1.4.8", "@types/uuid": "9.0.0", - "@typescript-eslint/eslint-plugin": "5.47.0", - "@typescript-eslint/parser": "5.47.0", - "axios": "1.2.1", - "axios-cookiejar-support": "4.0.3", + "@typescript-eslint/eslint-plugin": "5.48.0", + "@typescript-eslint/parser": "5.48.0", + "axios": "1.2.2", + "axios-cookiejar-support": "4.0.6", "babel-jest": "29.3.1", "babel-loader": "9.1.0", "babel-plugin-module-resolver": "4.1.0", "deep-freeze": "0.0.1", - "detox": "20.1.0", - "eslint": "8.30.0", + "detox": "20.1.1", + "eslint": "8.31.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.26.0", - "eslint-plugin-jest": "27.1.7", + "eslint-plugin-jest": "27.2.0", "eslint-plugin-react": "7.31.11", "eslint-plugin-react-hooks": "4.6.0", "husky": "8.0.2", diff --git a/patches/react-native-elements+3.4.2.patch b/patches/react-native-elements+3.4.3.patch similarity index 100% rename from patches/react-native-elements+3.4.2.patch rename to patches/react-native-elements+3.4.3.patch From ed69eacbe7b03ca6dcddea1520639a98f596eb76 Mon Sep 17 00:00:00 2001 From: Anurag Shivarathri Date: Wed, 4 Jan 2023 03:30:23 +0530 Subject: [PATCH 11/47] Count fix (#6926) --- app/database/models/server/my_channel.ts | 1 + app/queries/servers/channel.ts | 1 + app/screens/home/channel_list/servers/index.tsx | 2 +- .../servers/servers_list/server_item/server_item.tsx | 2 +- app/screens/home/tab_bar/home.tsx | 2 +- ios/Gekidou/Sources/Gekidou/Storage/Database+Mentions.swift | 3 ++- 6 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/database/models/server/my_channel.ts b/app/database/models/server/my_channel.ts index 21ad87db9..ea01dfa3c 100644 --- a/app/database/models/server/my_channel.ts +++ b/app/database/models/server/my_channel.ts @@ -23,6 +23,7 @@ export default class MyChannelModel extends Model implements MyChannelModelInter static associations: Associations = { [CHANNEL]: {type: 'belongs_to', key: 'id'}, [CATEGORY_CHANNEL]: {type: 'has_many', foreignKey: 'channel_id'}, + [MY_CHANNEL_SETTINGS]: {type: 'has_many', foreignKey: 'id'}, }; /** last_post_at : The timestamp for any last post on this channel */ diff --git a/app/queries/servers/channel.ts b/app/queries/servers/channel.ts index a10f5e689..12e332dc6 100644 --- a/app/queries/servers/channel.ts +++ b/app/queries/servers/channel.ts @@ -465,6 +465,7 @@ export function observeMyChannelMentionCount(database: Database, teamId?: string Q.on(CHANNEL, Q.and( ...conditions, )), + Q.on(MY_CHANNEL_SETTINGS, Q.where('notify_props', Q.notLike('%"mark_unread":"mention"%'))), ). observeWithColumns(columns). pipe( diff --git a/app/screens/home/channel_list/servers/index.tsx b/app/screens/home/channel_list/servers/index.tsx index 6712fddd4..2a29d3ff5 100644 --- a/app/screens/home/channel_list/servers/index.tsx +++ b/app/screens/home/channel_list/servers/index.tsx @@ -63,7 +63,7 @@ const Servers = React.forwardRef((props, ref) => { let unread = Boolean(threadUnreads); for (const myChannel of myChannels) { const isMuted = settings?.[myChannel.id]?.mark_unread === 'mention'; - mentions += myChannel.mentionsCount; + mentions += isMuted ? 0 : myChannel.mentionsCount; unread = unread || (myChannel.isUnread && !isMuted); } diff --git a/app/screens/home/channel_list/servers/servers_list/server_item/server_item.tsx b/app/screens/home/channel_list/servers/servers_list/server_item/server_item.tsx index 30139a6f6..687a0fe36 100644 --- a/app/screens/home/channel_list/servers/servers_list/server_item/server_item.tsx +++ b/app/screens/home/channel_list/servers/servers_list/server_item/server_item.tsx @@ -171,7 +171,7 @@ const ServerItem = ({ let isUnread = Boolean(threadUnreads); for (const myChannel of myChannels) { const isMuted = settings?.[myChannel.id]?.mark_unread === 'mention'; - mentions += myChannel.mentionsCount; + mentions += isMuted ? 0 : myChannel.mentionsCount; isUnread = isUnread || (myChannel.isUnread && !isMuted); } mentions += threadMentionCount; diff --git a/app/screens/home/tab_bar/home.tsx b/app/screens/home/tab_bar/home.tsx index c029a53e4..5ba2e5c50 100644 --- a/app/screens/home/tab_bar/home.tsx +++ b/app/screens/home/tab_bar/home.tsx @@ -71,7 +71,7 @@ const Home = ({isFocused, theme}: Props) => { let unread = false; for (const myChannel of myChannels) { const isMuted = settings?.[myChannel.id]?.mark_unread === 'mention'; - mentions += myChannel.mentionsCount; + mentions += isMuted ? 0 : myChannel.mentionsCount; unread = unread || (myChannel.isUnread && !isMuted); } diff --git a/ios/Gekidou/Sources/Gekidou/Storage/Database+Mentions.swift b/ios/Gekidou/Sources/Gekidou/Storage/Database+Mentions.swift index 1b5cd500c..dc77d6b6f 100644 --- a/ios/Gekidou/Sources/Gekidou/Storage/Database+Mentions.swift +++ b/ios/Gekidou/Sources/Gekidou/Storage/Database+Mentions.swift @@ -38,8 +38,9 @@ extension Database { let stmtString = """ SELECT SUM(my.mentions_count) \ FROM MyChannel my \ + INNER JOIN MyChannelSettings mys ON mys.id=my.id \ INNER JOIN Channel c ON c.id=my.id \ - WHERE c.delete_at = 0 + WHERE c.delete_at = 0 AND mys.notify_props NOT LIKE '%"mark_unread":"mention"%' """ let mentions = try? db.prepare(stmtString).scalar() as? Double return Int(mentions ?? 0) From 2ba7bda0b98bf21052822722f7ab456cdd60162f Mon Sep 17 00:00:00 2001 From: Joseph Baylon Date: Tue, 3 Jan 2023 19:38:27 -0800 Subject: [PATCH 12/47] Detox Report: Add commit hash to report (#6929) --- detox/save_report.js | 1 + detox/utils/artifacts.js | 3 ++- detox/utils/report.js | 3 ++- detox/utils/test_cases.js | 3 ++- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/detox/save_report.js b/detox/save_report.js index 58e10680f..e8269d241 100644 --- a/detox/save_report.js +++ b/detox/save_report.js @@ -12,6 +12,7 @@ * Environment variables: * BRANCH=[branch] : Branch identifier from CI * BUILD_ID=[build_id] : Build identifier from CI + * COMMIT_HASH=[commit_hash] : Commit hash from repo * DEVICE_NAME=[device_name] : Name of the device used for testing * DEVICE_OS_NAME=[device_os_name] : OS of the device used for testing * HEADLESS=[boolean] : Headed by default (false) or headless (true) diff --git a/detox/utils/artifacts.js b/detox/utils/artifacts.js index 980bd7637..b2b70d29e 100644 --- a/detox/utils/artifacts.js +++ b/detox/utils/artifacts.js @@ -18,6 +18,7 @@ require('dotenv').config(); const { BRANCH, BUILD_ID, + COMMIT_HASH, DETOX_AWS_S3_BUCKET, DETOX_AWS_ACCESS_KEY_ID, DETOX_AWS_SECRET_ACCESS_KEY, @@ -42,7 +43,7 @@ async function saveArtifacts() { return; } - const s3Folder = `${BUILD_ID}-${BRANCH}`.replace(/\./g, '-'); + const s3Folder = `${BUILD_ID}-${COMMIT_HASH}-${BRANCH}`.replace(/\./g, '-'); const uploadPath = path.resolve(__dirname, `../${ARTIFACTS_DIR}`); const filesToUpload = await getFiles(uploadPath); diff --git a/detox/utils/report.js b/detox/utils/report.js index ac90f1016..5f3ab3567 100644 --- a/detox/utils/report.js +++ b/detox/utils/report.js @@ -308,6 +308,7 @@ function generateTestReport(summary, isUploadedToS3, reportLink, environment, te function generateTitle() { const { BRANCH, + COMMIT_HASH, IOS, PULL_REQUEST, RELEASE_BUILD_NUMBER, @@ -320,7 +321,7 @@ function generateTitle() { const lane = `${platform} Build`; const appExtension = IOS === 'true' ? 'ipa' : 'apk'; const appFileName = TYPE === 'GEKIDOU' ? `Mattermost_Beta.${appExtension}` : `Mattermost.${appExtension}`; - let buildLink = ` with [${lane}](https://pr-builds.mattermost.com/mattermost-mobile/${BRANCH}/${appFileName})`; + let buildLink = ` with [${lane}:${COMMIT_HASH}](https://pr-builds.mattermost.com/mattermost-mobile/${BRANCH}-${COMMIT_HASH}/${appFileName})`; if (RELEASE_VERSION && RELEASE_BUILD_NUMBER) { const releaseType = TYPE === 'GEKIDOU' ? 'mattermost-mobile-beta' : 'mattermost-mobile'; buildLink = ` with [${RELEASE_VERSION}:${RELEASE_BUILD_NUMBER}](https://releases.mattermost.com/${releaseType}/${RELEASE_VERSION}/${RELEASE_BUILD_NUMBER}/${appFileName})`; diff --git a/detox/utils/test_cases.js b/detox/utils/test_cases.js index 4be1c3118..d43107f5c 100644 --- a/detox/utils/test_cases.js +++ b/detox/utils/test_cases.js @@ -80,6 +80,7 @@ async function createTestCycle(startDate, endDate) { const { BRANCH, BUILD_ID, + COMMIT_HASH, JIRA_PROJECT_KEY, ZEPHYR_CYCLE_NAME, ZEPHYR_FOLDER_ID, @@ -87,7 +88,7 @@ async function createTestCycle(startDate, endDate) { const testCycle = { projectKey: JIRA_PROJECT_KEY, - name: ZEPHYR_CYCLE_NAME ? `${ZEPHYR_CYCLE_NAME} (${BUILD_ID}-${BRANCH})` : `${BUILD_ID}-${BRANCH}`, + name: ZEPHYR_CYCLE_NAME ? `${ZEPHYR_CYCLE_NAME} (${BUILD_ID}-${COMMIT_HASH}-${BRANCH})` : `${BUILD_ID}-${COMMIT_HASH}-${BRANCH}`, description: `Detox automated test with ${BRANCH}`, plannedStartDate: startDate, plannedEndDate: endDate, From 03dd4477da271c947b54812aa67ee16d60f4edd8 Mon Sep 17 00:00:00 2001 From: Elias Nahum Date: Wed, 4 Jan 2023 14:42:43 +0200 Subject: [PATCH 13/47] Fix onViewableItemsChanged --- app/components/post_list/post_list.tsx | 4 ++-- app/screens/home/recent_mentions/recent_mentions.tsx | 4 ++-- app/screens/home/saved_messages/saved_messages.tsx | 4 ++-- app/screens/pinned_messages/pinned_messages.tsx | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/components/post_list/post_list.tsx b/app/components/post_list/post_list.tsx index 2c9e91138..f0d49f1c3 100644 --- a/app/components/post_list/post_list.tsx +++ b/app/components/post_list/post_list.tsx @@ -195,8 +195,8 @@ const PostList = ({ } const viewableItemsMap = viewableItems.reduce((acc: Record, {item, isViewable}) => { - if (isViewable) { - acc[`${location}-${item.id}`] = true; + if (isViewable && item.type === 'post') { + acc[`${location}-${item.value.id}`] = true; } return acc; }, {}); diff --git a/app/screens/home/recent_mentions/recent_mentions.tsx b/app/screens/home/recent_mentions/recent_mentions.tsx index b6c89c207..7c59be08e 100644 --- a/app/screens/home/recent_mentions/recent_mentions.tsx +++ b/app/screens/home/recent_mentions/recent_mentions.tsx @@ -114,8 +114,8 @@ const RecentMentionsScreen = ({appsEnabled, customEmojiNames, mentions, currentT } const viewableItemsMap = viewableItems.reduce((acc: Record, {item, isViewable}) => { - if (isViewable) { - acc[`${Screens.MENTIONS}-${item.id}`] = true; + if (isViewable && item.type === 'post') { + acc[`${Screens.MENTIONS}-${item.value.id}`] = true; } return acc; }, {}); diff --git a/app/screens/home/saved_messages/saved_messages.tsx b/app/screens/home/saved_messages/saved_messages.tsx index 92120f9d0..1a37ef6a6 100644 --- a/app/screens/home/saved_messages/saved_messages.tsx +++ b/app/screens/home/saved_messages/saved_messages.tsx @@ -109,8 +109,8 @@ function SavedMessages({appsEnabled, posts, currentTimezone, customEmojiNames, i } const viewableItemsMap = viewableItems.reduce((acc: Record, {item, isViewable}) => { - if (isViewable) { - acc[`${Screens.SAVED_MESSAGES}-${item.id}`] = true; + if (isViewable && item.type === 'post') { + acc[`${Screens.SAVED_MESSAGES}-${item.value.id}`] = true; } return acc; }, {}); diff --git a/app/screens/pinned_messages/pinned_messages.tsx b/app/screens/pinned_messages/pinned_messages.tsx index 291d24170..8ba8b63e9 100644 --- a/app/screens/pinned_messages/pinned_messages.tsx +++ b/app/screens/pinned_messages/pinned_messages.tsx @@ -85,8 +85,8 @@ function SavedMessages({ } const viewableItemsMap = viewableItems.reduce((acc: Record, {item, isViewable}) => { - if (isViewable) { - acc[`${Screens.PINNED_MESSAGES}-${item.id}`] = true; + if (isViewable && item.type === 'post') { + acc[`${Screens.PINNED_MESSAGES}-${item.value.id}`] = true; } return acc; }, {}); From 3b289c306ec3f94f5987b64d61d05b6e06fd2a0f Mon Sep 17 00:00:00 2001 From: Elias Nahum Date: Wed, 4 Jan 2023 15:28:16 +0200 Subject: [PATCH 14/47] Display own DM avatar in channel intro (#6924) --- .../intro/direct_channel/direct_channel.tsx | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/app/screens/channel/channel_post_list/intro/direct_channel/direct_channel.tsx b/app/screens/channel/channel_post_list/intro/direct_channel/direct_channel.tsx index 1ca2637b6..895b4cc56 100644 --- a/app/screens/channel/channel_post_list/intro/direct_channel/direct_channel.tsx +++ b/app/screens/channel/channel_post_list/intro/direct_channel/direct_channel.tsx @@ -11,6 +11,7 @@ import {General} from '@constants'; import {useServerUrl} from '@context/server'; import {makeStyleSheetFromTheme} from '@utils/theme'; import {typography} from '@utils/typography'; +import {getUserIdFromChannelName} from '@utils/user'; import IntroOptions from '../options'; @@ -98,23 +99,28 @@ const DirectChannel = ({channel, currentUserId, isBot, members, theme}: Props) = }, [channel.displayName, theme]); const profiles = useMemo(() => { - const channelMembers = members?.filter((m) => m.userId !== currentUserId); - if (!channelMembers?.length) { - return null; - } - if (channel.type === General.DM_CHANNEL) { + const teammateId = getUserIdFromChannelName(currentUserId, channel.name); + const teammate = members?.find((m) => m.userId === teammateId); + if (!teammate) { + return null; + } + return ( ); } + const channelMembers = members?.filter((m) => m.userId !== currentUserId); + if (!channelMembers?.length) { + return null; + } return ( Date: Wed, 4 Jan 2023 18:46:31 -0800 Subject: [PATCH 15/47] Detox Reporting: Prepare for release and main (#6930) * Detox Reporting: Prepare for release and main * Fix lint in switch Co-authored-by: Mattermod --- detox/utils/report.js | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/detox/utils/report.js b/detox/utils/report.js index 5f3ab3567..23b27637b 100644 --- a/detox/utils/report.js +++ b/detox/utils/report.js @@ -320,32 +320,30 @@ function generateTitle() { const platform = IOS === 'true' ? 'iOS' : 'Android'; const lane = `${platform} Build`; const appExtension = IOS === 'true' ? 'ipa' : 'apk'; - const appFileName = TYPE === 'GEKIDOU' ? `Mattermost_Beta.${appExtension}` : `Mattermost.${appExtension}`; - let buildLink = ` with [${lane}:${COMMIT_HASH}](https://pr-builds.mattermost.com/mattermost-mobile/${BRANCH}-${COMMIT_HASH}/${appFileName})`; - if (RELEASE_VERSION && RELEASE_BUILD_NUMBER) { - const releaseType = TYPE === 'GEKIDOU' ? 'mattermost-mobile-beta' : 'mattermost-mobile'; - buildLink = ` with [${RELEASE_VERSION}:${RELEASE_BUILD_NUMBER}](https://releases.mattermost.com/${releaseType}/${RELEASE_VERSION}/${RELEASE_BUILD_NUMBER}/${appFileName})`; - } - + const appFileName = `Mattermost_Beta.${appExtension}`; + const appBuildType = 'mattermost-mobile-beta'; + let buildLink = ''; let releaseDate = ''; - if (RELEASE_DATE) { - releaseDate = ` for ${RELEASE_DATE}`; - } - let title; switch (TYPE) { case 'PR': + buildLink = ` with [${lane}:${COMMIT_HASH}](https://pr-builds.mattermost.com/${appBuildType}/${BRANCH}-${COMMIT_HASH}/${appFileName})`; title = `${platform} E2E for Pull Request Build: [${BRANCH}](${PULL_REQUEST})${buildLink}`; break; case 'RELEASE': + if (RELEASE_VERSION && RELEASE_BUILD_NUMBER) { + buildLink = ` with [${RELEASE_VERSION}:${RELEASE_BUILD_NUMBER}](https://releases.mattermost.com/${appBuildType}/${RELEASE_VERSION}/${RELEASE_BUILD_NUMBER}/${appFileName})`; + } + + if (RELEASE_DATE) { + releaseDate = ` for ${RELEASE_DATE}`; + } + title = `${platform} E2E for Release Build${buildLink}${releaseDate}`; break; - case 'MASTER': - title = `${platform} E2E for Master Nightly Build (Prod tests)${buildLink}`; - break; - case 'GEKIDOU': - title = `${platform} E2E for Gekidou Nightly Build (Prod tests)${buildLink}`; + case 'MAIN': + title = `${platform} E2E for Main Nightly Build (Prod tests)${buildLink}`; break; default: title = `${platform} E2E for Build${buildLink}`; From dbe565319d9edd4016b7bdd97923e475095a13c7 Mon Sep 17 00:00:00 2001 From: Elias Nahum Date: Thu, 5 Jan 2023 09:51:51 +0200 Subject: [PATCH 16/47] BottomSheet migration to react-native-bottom-sheet (#6907) * BottomSheet migration to react-native-bottom-sheet * Use correct scroll view for announcement bottom sheet * ux review * Fix post options bottom sheet snap point * feedback review --- NOTICE.txt | 22 -- .../announcement_banner.tsx | 16 +- .../expanded_announcement_banner.tsx | 10 +- .../channel_actions/channel_actions.tsx | 4 +- .../markdown/at_mention/at_mention.tsx | 7 +- .../markdown/markdown_code_block/index.tsx | 6 +- .../markdown/markdown_image/index.tsx | 6 +- .../markdown/markdown_latex_block/index.tsx | 6 +- .../markdown/markdown_link/markdown_link.tsx | 6 +- .../camera_quick_action/index.tsx | 3 +- .../post_priority_action/index.tsx | 9 +- .../post_list/post/body/failed/index.tsx | 6 +- .../post_priority_picker/index.tsx | 2 + app/components/team_list/index.tsx | 37 +++- app/components/user_avatars_stack/index.tsx | 10 +- .../user_avatars_stack/users_list/index.tsx | 16 +- app/constants/reaction_picker.ts | 2 + app/constants/view.ts | 7 +- .../calls/screens/call_screen/call_screen.tsx | 6 +- app/screens/bottom_sheet/button.tsx | 102 ++++++--- app/screens/bottom_sheet/content.tsx | 25 +-- app/screens/bottom_sheet/index.tsx | 205 +++++++++--------- app/screens/bottom_sheet/indicator.tsx | 2 +- .../browse_channels/channel_dropdown.tsx | 6 +- app/screens/channel/header/header.tsx | 14 +- .../channel/header/quick_actions/index.tsx | 12 +- .../components/profile_image_picker.tsx | 6 +- .../options/user_presence/index.tsx | 2 +- .../categories_list/header/header.tsx | 6 +- .../home/channel_list/servers/index.tsx | 30 ++- .../servers_list/add_server_button.tsx | 32 +++ .../servers/servers_list/index.tsx | 16 +- ...slideup.tsx => bottom_sheet_team_list.tsx} | 3 +- .../results/file_options/mobile_options.tsx | 3 +- app/screens/home/search/results/header.tsx | 3 +- app/screens/home/search/team_picker_icon.tsx | 30 ++- app/screens/navigation.ts | 6 +- app/screens/post_options/post_options.tsx | 57 +++-- app/screens/reactions/reactions.tsx | 6 +- app/screens/reactions/reactors_list/index.tsx | 15 +- app/screens/thread_options/thread_options.tsx | 4 +- app/screens/user_profile/user_profile.tsx | 68 +++--- app/utils/helpers.ts | 11 +- app/utils/team_list/index.ts | 32 --- package-lock.json | 63 ++++-- package.json | 2 +- types/components/bottom_sheet.d.ts | 4 + 47 files changed, 547 insertions(+), 399 deletions(-) create mode 100644 app/screens/home/channel_list/servers/servers_list/add_server_button.tsx rename app/screens/home/search/{select_team_slideup.tsx => bottom_sheet_team_list.tsx} (88%) delete mode 100644 app/utils/team_list/index.ts create mode 100644 types/components/bottom_sheet.d.ts diff --git a/NOTICE.txt b/NOTICE.txt index 8453b77d5..c4a1b9f94 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -2962,28 +2962,6 @@ IN THE SOFTWARE. """ ---- - -## reanimated-bottom-sheet - -This product contains a modified version of 'reanimated-bottom-sheet' by Michał Osadnik. - -Highly configurable component imitating native bottom sheet behavior, with fully native 60 FPS animations! - -* HOMEPAGE: - * https://github.com/osdnk/react-native-reanimated-bottom-sheet - -* LICENSE: MIT - -Copyright 2019 – present Michał Osadnik - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - --- ## semver diff --git a/app/components/announcement_banner/announcement_banner.tsx b/app/components/announcement_banner/announcement_banner.tsx index 4008b5c86..08f4bcd17 100644 --- a/app/components/announcement_banner/announcement_banner.tsx +++ b/app/components/announcement_banner/announcement_banner.tsx @@ -9,6 +9,7 @@ import { View, } from 'react-native'; import Animated, {useAnimatedStyle, useSharedValue, withTiming} from 'react-native-reanimated'; +import {useSafeAreaInsets} from 'react-native-safe-area-context'; import {dismissAnnouncement} from '@actions/local/systems'; import CompassIcon from '@components/compass_icon'; @@ -17,6 +18,7 @@ import {ANNOUNCEMENT_BAR_HEIGHT} from '@constants/view'; import {useServerUrl} from '@context/server'; import {useTheme} from '@context/theme'; import {bottomSheet} from '@screens/navigation'; +import {bottomSheetSnapPoint} from '@utils/helpers'; import {getMarkdownTextStyles} from '@utils/markdown'; import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; import {typography} from '@utils/typography'; @@ -82,6 +84,7 @@ const AnnouncementBanner = ({ const intl = useIntl(); const serverUrl = useServerUrl(); const height = useSharedValue(0); + const {bottom} = useSafeAreaInsets(); const theme = useTheme(); const [visible, setVisible] = useState(false); const style = getStyle(theme); @@ -100,19 +103,20 @@ const AnnouncementBanner = ({ defaultMessage: 'Announcement', }); - let snapPoint = SNAP_POINT_WITHOUT_DISMISS; - if (allowDismissal) { - snapPoint += DISMISS_BUTTON_HEIGHT; - } + const snapPoint = bottomSheetSnapPoint( + 1, + SNAP_POINT_WITHOUT_DISMISS + (allowDismissal ? DISMISS_BUTTON_HEIGHT : 0), + bottom, + ); bottomSheet({ closeButtonId: CLOSE_BUTTON_ID, title, renderContent, - snapPoints: [snapPoint, 10], + snapPoints: [1, snapPoint], theme, }); - }, [theme.sidebarHeaderTextColor, intl.locale, renderContent, allowDismissal]); + }, [theme.sidebarHeaderTextColor, intl.locale, renderContent, allowDismissal, bottom]); const handleDismiss = useCallback(() => { dismissAnnouncement(serverUrl, bannerText); diff --git a/app/components/announcement_banner/expanded_announcement_banner.tsx b/app/components/announcement_banner/expanded_announcement_banner.tsx index 22de72d02..a34938b3c 100644 --- a/app/components/announcement_banner/expanded_announcement_banner.tsx +++ b/app/components/announcement_banner/expanded_announcement_banner.tsx @@ -1,11 +1,11 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import {BottomSheetScrollView} from '@gorhom/bottom-sheet'; import React, {useCallback, useMemo} from 'react'; import {useIntl} from 'react-intl'; -import {Text, View} from 'react-native'; +import {ScrollView, Text, View} from 'react-native'; import Button from 'react-native-button'; -import {ScrollView} from 'react-native-gesture-handler'; import {useSafeAreaInsets} from 'react-native-safe-area-context'; import {dismissAnnouncement} from '@actions/local/systems'; @@ -84,6 +84,8 @@ const ExpandedAnnouncementBanner = ({ return [style.container, {marginBottom: insets.bottom + 10}]; }, [style, insets.bottom]); + const Scroll = useMemo(() => (isTablet ? ScrollView : BottomSheetScrollView), [isTablet]); + return ( {!isTablet && ( @@ -94,7 +96,7 @@ const ExpandedAnnouncementBanner = ({ })} )} - - +