Thread crash fix and other UI fixes (#7342)
* center align channel name in intro * align custom status in channel header * wrap long custom status on profile bottom sheet * Fix LaTex render clipped on Android * Add margin for users displayed in a list * show user profile when tapping on self on channel members * Fix Thread screen when rootId prop is undefined * update snapshots * fix server / login screen on small devices
This commit is contained in:
parent
c99861d728
commit
5e9de9f4a2
16 changed files with 125 additions and 130 deletions
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
import React from 'react';
|
||||
import {useIntl} from 'react-intl';
|
||||
import {Platform, Text, View} from 'react-native';
|
||||
import {Text, View} from 'react-native';
|
||||
import MathView from 'react-native-math-view';
|
||||
|
||||
import ErrorBoundary from '@components/markdown/error_boundary';
|
||||
|
|
@ -23,7 +23,7 @@ type MathViewErrorProps = {
|
|||
const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => {
|
||||
return {
|
||||
mathStyle: {
|
||||
marginBottom: Platform.select({default: -10, ios: 2.5}),
|
||||
marginVertical: 3,
|
||||
color: theme.centerChannelColor,
|
||||
},
|
||||
viewStyle: {
|
||||
|
|
|
|||
|
|
@ -123,6 +123,7 @@ export default function ServerUserList({
|
|||
term={term}
|
||||
testID={testID}
|
||||
tutorialWatched={tutorialWatched}
|
||||
includeUserMargin={true}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ type AtMentionItemProps = {
|
|||
user: UserProfile | UserModel;
|
||||
containerStyle?: StyleProp<ViewStyle>;
|
||||
currentUserId: string;
|
||||
includeMargin?: boolean;
|
||||
size?: number;
|
||||
testID?: string;
|
||||
isCustomStatusEnabled: boolean;
|
||||
|
|
@ -61,11 +62,12 @@ const getThemedStyles = makeStyleSheetFromTheme((theme: Theme) => {
|
|||
const nonThemedStyles = StyleSheet.create({
|
||||
row: {
|
||||
height: 40,
|
||||
paddingVertical: 8,
|
||||
paddingBottom: 8,
|
||||
paddingTop: 4,
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
},
|
||||
margin: {marginVertical: 8},
|
||||
rowInfoBaseContainer: {
|
||||
flex: 1,
|
||||
},
|
||||
|
|
@ -104,6 +106,7 @@ const UserItem = ({
|
|||
disabled = false,
|
||||
viewRef,
|
||||
padding,
|
||||
includeMargin,
|
||||
}: AtMentionItemProps) => {
|
||||
const theme = useTheme();
|
||||
const style = getThemedStyles(theme);
|
||||
|
|
@ -134,8 +137,9 @@ const UserItem = ({
|
|||
opacity: disabled ? 0.32 : 1,
|
||||
paddingHorizontal: padding || undefined,
|
||||
},
|
||||
includeMargin && nonThemedStyles.margin,
|
||||
];
|
||||
}, [disabled, padding]);
|
||||
}, [disabled, padding, includeMargin]);
|
||||
|
||||
const onPress = useCallback(() => {
|
||||
onUserPress?.(user);
|
||||
|
|
|
|||
|
|
@ -158,13 +158,14 @@ exports[`components/channel_list_row should show no results 1`] = `
|
|||
"alignItems": "center",
|
||||
"flexDirection": "row",
|
||||
"height": 40,
|
||||
"paddingBottom": 8,
|
||||
"paddingTop": 4,
|
||||
"paddingVertical": 8,
|
||||
},
|
||||
{
|
||||
"opacity": 1,
|
||||
"paddingHorizontal": 20,
|
||||
},
|
||||
undefined,
|
||||
],
|
||||
undefined,
|
||||
]
|
||||
|
|
@ -443,13 +444,14 @@ exports[`components/channel_list_row should show results and tutorial 1`] = `
|
|||
"alignItems": "center",
|
||||
"flexDirection": "row",
|
||||
"height": 40,
|
||||
"paddingBottom": 8,
|
||||
"paddingTop": 4,
|
||||
"paddingVertical": 8,
|
||||
},
|
||||
{
|
||||
"opacity": 1,
|
||||
"paddingHorizontal": 20,
|
||||
},
|
||||
undefined,
|
||||
],
|
||||
undefined,
|
||||
]
|
||||
|
|
@ -808,13 +810,14 @@ exports[`components/channel_list_row should show results no tutorial 1`] = `
|
|||
"alignItems": "center",
|
||||
"flexDirection": "row",
|
||||
"height": 40,
|
||||
"paddingBottom": 8,
|
||||
"paddingTop": 4,
|
||||
"paddingVertical": 8,
|
||||
},
|
||||
{
|
||||
"opacity": 1,
|
||||
"paddingHorizontal": 20,
|
||||
},
|
||||
undefined,
|
||||
],
|
||||
undefined,
|
||||
]
|
||||
|
|
@ -1125,13 +1128,14 @@ exports[`components/channel_list_row should show results no tutorial 2 users 1`]
|
|||
"alignItems": "center",
|
||||
"flexDirection": "row",
|
||||
"height": 40,
|
||||
"paddingBottom": 8,
|
||||
"paddingTop": 4,
|
||||
"paddingVertical": 8,
|
||||
},
|
||||
{
|
||||
"opacity": 1,
|
||||
"paddingHorizontal": 20,
|
||||
},
|
||||
undefined,
|
||||
],
|
||||
undefined,
|
||||
]
|
||||
|
|
@ -1315,13 +1319,14 @@ exports[`components/channel_list_row should show results no tutorial 2 users 1`]
|
|||
"alignItems": "center",
|
||||
"flexDirection": "row",
|
||||
"height": 40,
|
||||
"paddingBottom": 8,
|
||||
"paddingTop": 4,
|
||||
"paddingVertical": 8,
|
||||
},
|
||||
{
|
||||
"opacity": 1,
|
||||
"paddingHorizontal": 20,
|
||||
},
|
||||
undefined,
|
||||
],
|
||||
undefined,
|
||||
]
|
||||
|
|
|
|||
|
|
@ -100,12 +100,14 @@ export function createProfilesSections(intl: IntlShape, profiles: UserProfile[],
|
|||
const results = [];
|
||||
let index = 0;
|
||||
for (const [k, v] of sections) {
|
||||
results.push({
|
||||
first: index === 0,
|
||||
id: k,
|
||||
data: v,
|
||||
});
|
||||
index++;
|
||||
if (v.length) {
|
||||
results.push({
|
||||
first: index === 0,
|
||||
id: k,
|
||||
data: v,
|
||||
});
|
||||
index++;
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
|
@ -159,6 +161,7 @@ type Props = {
|
|||
testID?: string;
|
||||
term?: string;
|
||||
tutorialWatched: boolean;
|
||||
includeUserMargin?: boolean;
|
||||
}
|
||||
|
||||
export default function UserList({
|
||||
|
|
@ -175,6 +178,7 @@ export default function UserList({
|
|||
term,
|
||||
testID,
|
||||
tutorialWatched,
|
||||
includeUserMargin,
|
||||
}: Props) {
|
||||
const intl = useIntl();
|
||||
const theme = useTheme();
|
||||
|
|
@ -247,9 +251,10 @@ export default function UserList({
|
|||
testID='create_direct_message.user_list.user_item'
|
||||
tutorialWatched={tutorialWatched}
|
||||
user={item}
|
||||
includeMargin={includeUserMargin}
|
||||
/>
|
||||
);
|
||||
}, [selectedIds, handleSelectProfile, showManageMode, manageMode, tutorialWatched]);
|
||||
}, [selectedIds, handleSelectProfile, showManageMode, manageMode, tutorialWatched, includeUserMargin]);
|
||||
|
||||
const renderLoading = useCallback(() => {
|
||||
if (!loading) {
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import type UserModel from '@typings/database/models/servers/user';
|
|||
type Props = {
|
||||
highlight?: boolean;
|
||||
id: string;
|
||||
includeMargin?: boolean;
|
||||
isMyUser: boolean;
|
||||
isChannelAdmin: boolean;
|
||||
manageMode: boolean;
|
||||
|
|
@ -70,6 +71,7 @@ const DEFAULT_ICON_OPACITY = 0.32;
|
|||
|
||||
function UserListRow({
|
||||
id,
|
||||
includeMargin,
|
||||
isMyUser,
|
||||
highlight,
|
||||
isChannelAdmin,
|
||||
|
|
@ -124,11 +126,8 @@ function UserListRow({
|
|||
}, [highlight, tutorialWatched, isTablet]);
|
||||
|
||||
const handlePress = useCallback((u: UserModel | UserProfile) => {
|
||||
if (isMyUser && manageMode) {
|
||||
return;
|
||||
}
|
||||
onPress?.(u);
|
||||
}, [onPress, isMyUser, manageMode]);
|
||||
}, [onPress]);
|
||||
|
||||
const manageModeIcon = useMemo(() => {
|
||||
if (!showManageMode || isMyUser) {
|
||||
|
|
@ -190,6 +189,7 @@ function UserListRow({
|
|||
disabled={!(selectable || selected || !disabled)}
|
||||
viewRef={viewRef}
|
||||
padding={20}
|
||||
includeMargin={includeMargin}
|
||||
/>
|
||||
{showTutorial &&
|
||||
<TutorialHighlight
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => ({
|
|||
color: theme.centerChannelColor,
|
||||
marginTop: 8,
|
||||
marginBottom: 8,
|
||||
textAlign: 'center',
|
||||
...typography('Heading', 700, 'SemiBold'),
|
||||
},
|
||||
}));
|
||||
|
|
|
|||
|
|
@ -48,14 +48,17 @@ type ChannelProps = {
|
|||
const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => ({
|
||||
customStatusContainer: {
|
||||
flexDirection: 'row',
|
||||
height: 13,
|
||||
height: 15,
|
||||
left: Platform.select({ios: undefined, default: -2}),
|
||||
marginTop: Platform.select({ios: undefined, default: 1}),
|
||||
},
|
||||
customStatusEmoji: {marginRight: 5},
|
||||
customStatusEmoji: {
|
||||
marginRight: 5,
|
||||
marginTop: Platform.select({ios: undefined, default: -2}),
|
||||
},
|
||||
customStatusText: {
|
||||
alignItems: 'center',
|
||||
height: 13,
|
||||
height: 15,
|
||||
},
|
||||
subtitle: {
|
||||
color: changeOpacity(theme.sidebarHeaderTextColor, 0.72),
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => ({
|
|||
},
|
||||
forgotPasswordBtn: {
|
||||
borderColor: 'transparent',
|
||||
width: '50%',
|
||||
width: '60%',
|
||||
},
|
||||
forgotPasswordError: {
|
||||
marginTop: 30,
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
import React, {useEffect, useMemo, useRef} from 'react';
|
||||
import {Platform, useWindowDimensions, View} from 'react-native';
|
||||
import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react';
|
||||
import {Platform, useWindowDimensions, View, type LayoutChangeEvent} from 'react-native';
|
||||
import {KeyboardAwareScrollView} from 'react-native-keyboard-aware-scroll-view';
|
||||
import {Navigation} from 'react-native-navigation';
|
||||
import Animated, {useAnimatedStyle, useSharedValue, withTiming} from 'react-native-reanimated';
|
||||
|
|
@ -12,6 +12,7 @@ import FormattedText from '@components/formatted_text';
|
|||
import {Screens} from '@constants';
|
||||
import useAndroidHardwareBackHandler from '@hooks/android_back_handler';
|
||||
import {useIsTablet} from '@hooks/device';
|
||||
import {useDefaultHeaderHeight} from '@hooks/header';
|
||||
import useNavButtonPressed from '@hooks/navigation_button_pressed';
|
||||
import NetworkManager from '@managers/network_manager';
|
||||
import Background from '@screens/background';
|
||||
|
|
@ -82,8 +83,10 @@ const LoginOptions = ({
|
|||
const styles = getStyles(theme);
|
||||
const keyboardAwareRef = useRef<KeyboardAwareScrollView>(null);
|
||||
const dimensions = useWindowDimensions();
|
||||
const defaultHeaderHeight = useDefaultHeaderHeight();
|
||||
const isTablet = useIsTablet();
|
||||
const translateX = useSharedValue(dimensions.width);
|
||||
const [contentFillScreen, setContentFillScreen] = useState(false);
|
||||
const numberSSOs = useMemo(() => {
|
||||
return Object.values(ssoOptions).filter((v) => v.enabled).length;
|
||||
}, [ssoOptions]);
|
||||
|
|
@ -143,6 +146,11 @@ const LoginOptions = ({
|
|||
popTopScreen(componentId);
|
||||
};
|
||||
|
||||
const onLayout = useCallback((e: LayoutChangeEvent) => {
|
||||
const {height} = e.nativeEvent.layout;
|
||||
setContentFillScreen(dimensions.height < height + defaultHeaderHeight);
|
||||
}, [dimensions.height, defaultHeaderHeight]);
|
||||
|
||||
useEffect(() => {
|
||||
const navigationEvents = Navigation.events().registerNavigationButtonPressedListener(({buttonId}) => {
|
||||
if (closeButtonId && buttonId === closeButtonId) {
|
||||
|
|
@ -176,7 +184,7 @@ const LoginOptions = ({
|
|||
useAndroidHardwareBackHandler(componentId, pop);
|
||||
|
||||
let additionalContainerStyle;
|
||||
if (numberSSOs < 3 || !hasLoginForm || (isTablet && dimensions.height > dimensions.width)) {
|
||||
if (!contentFillScreen && (numberSSOs < 3 || !hasLoginForm || (isTablet && dimensions.height > dimensions.width))) {
|
||||
additionalContainerStyle = styles.flex;
|
||||
}
|
||||
|
||||
|
|
@ -221,7 +229,10 @@ const LoginOptions = ({
|
|||
scrollToOverflowEnabled={true}
|
||||
style={styles.flex}
|
||||
>
|
||||
<View style={styles.centered}>
|
||||
<View
|
||||
onLayout={onLayout}
|
||||
style={styles.centered}
|
||||
>
|
||||
{title}
|
||||
{description}
|
||||
{hasLoginForm &&
|
||||
|
|
|
|||
|
|
@ -111,7 +111,14 @@ export default function ManageChannelMembers({
|
|||
}, 100), [channelId, loading, serverUrl, term]);
|
||||
|
||||
const handleSelectProfile = useCallback(async (profile: UserProfile) => {
|
||||
await fetchUsersByIds(serverUrl, [profile.id]);
|
||||
if (profile.id === currentUserId && isManageMode) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (profile.id !== currentUserId) {
|
||||
await fetchUsersByIds(serverUrl, [profile.id]);
|
||||
}
|
||||
|
||||
const title = formatMessage({id: 'mobile.routes.user_profile', defaultMessage: 'Profile'});
|
||||
const props = {
|
||||
channelId,
|
||||
|
|
@ -124,7 +131,7 @@ export default function ManageChannelMembers({
|
|||
|
||||
Keyboard.dismiss();
|
||||
openAsBottomSheet({screen: USER_PROFILE, title, theme, closeButtonId: CLOSE_BUTTON_ID, props});
|
||||
}, [canManageAndRemoveMembers, channelId, isManageMode]);
|
||||
}, [canManageAndRemoveMembers, channelId, isManageMode, currentUserId]);
|
||||
|
||||
const searchUsers = useCallback(async (searchTerm: string) => {
|
||||
const lowerCasedTerm = searchTerm.toLowerCase();
|
||||
|
|
@ -256,9 +263,6 @@ export default function ManageChannelMembers({
|
|||
value={term}
|
||||
/>
|
||||
</View>
|
||||
|
||||
{/* TODO: https://mattermost.atlassian.net/browse/MM-48830 */}
|
||||
{/* fix flashing No Results page when results are present */}
|
||||
<UserList
|
||||
currentUserId={currentUserId}
|
||||
handleSelectProfile={handleSelectProfile}
|
||||
|
|
@ -272,6 +276,7 @@ export default function ManageChannelMembers({
|
|||
term={term}
|
||||
testID='manage_members.user_list'
|
||||
tutorialWatched={tutorialWatched}
|
||||
includeUserMargin={true}
|
||||
/>
|
||||
</SafeAreaView>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => ({
|
|||
...typography('Heading', 400, 'SemiBold'),
|
||||
},
|
||||
connect: {
|
||||
width: 320,
|
||||
width: 300,
|
||||
letterSpacing: -1,
|
||||
color: theme.centerChannelColor,
|
||||
marginVertical: 12,
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import {observeChannelsWithCalls, observeCurrentCall} from '@calls/state';
|
|||
import {withServerUrl} from '@context/server';
|
||||
import {observePost} from '@queries/servers/post';
|
||||
import {observeIsCRTEnabled} from '@queries/servers/thread';
|
||||
import EphemeralStore from '@store/ephemeral_store';
|
||||
|
||||
import Thread from './thread';
|
||||
|
||||
|
|
@ -20,7 +21,8 @@ type EnhanceProps = WithDatabaseArgs & {
|
|||
}
|
||||
|
||||
const enhanced = withObservables(['rootId'], ({database, serverUrl, rootId}: EnhanceProps) => {
|
||||
const rootPost = observePost(database, rootId);
|
||||
const rId = rootId || EphemeralStore.getCurrentThreadId();
|
||||
const rootPost = observePost(database, rId);
|
||||
|
||||
const channelId = rootPost.pipe(
|
||||
switchMap((r) => of$(r?.channelId || '')),
|
||||
|
|
@ -49,6 +51,7 @@ const enhanced = withObservables(['rootId'], ({database, serverUrl, rootId}: Enh
|
|||
isCallInCurrentChannel,
|
||||
isInACall,
|
||||
isInCurrentChannelCall,
|
||||
rootId: of$(rId),
|
||||
rootPost,
|
||||
};
|
||||
});
|
||||
|
|
|
|||
|
|
@ -81,10 +81,12 @@ const Thread = ({
|
|||
|
||||
useEffect(() => {
|
||||
return () => {
|
||||
EphemeralStore.setCurrentThreadId('');
|
||||
if (rootId === EphemeralStore.getCurrentThreadId()) {
|
||||
EphemeralStore.setCurrentThreadId('');
|
||||
}
|
||||
setButtons(componentId, {rightButtons: []});
|
||||
};
|
||||
}, []);
|
||||
}, [rootId]);
|
||||
|
||||
useDidUpdate(() => {
|
||||
if (!rootPost) {
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ const getStyleSheet = makeStyleSheetFromTheme((theme: Theme) => ({
|
|||
},
|
||||
description: {
|
||||
color: theme.centerChannelColor,
|
||||
flex: 1,
|
||||
...typography('Body', 200),
|
||||
},
|
||||
title: {
|
||||
|
|
|
|||
140
package-lock.json
generated
140
package-lock.json
generated
|
|
@ -6,7 +6,7 @@
|
|||
"packages": {
|
||||
"": {
|
||||
"name": "mattermost-mobile",
|
||||
"version": "2.3.0",
|
||||
"version": "2.4.0",
|
||||
"hasInstallScript": true,
|
||||
"license": "Apache 2.0",
|
||||
"dependencies": {
|
||||
|
|
@ -24281,8 +24281,7 @@
|
|||
"version": "1.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@mattermost/react-native-emm/-/react-native-emm-1.3.5.tgz",
|
||||
"integrity": "sha512-REdUEsm/RA6lI1Rt4b009jvWn28f7H+e27gd4hlNk6zesIh/dlfiHwYfInW/vwbNFBdSPpvHy7Qi2mdcvrNqhg==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@mattermost/react-native-network-client": {
|
||||
"version": "1.3.3",
|
||||
|
|
@ -24328,8 +24327,7 @@
|
|||
"version": "0.2.3",
|
||||
"resolved": "https://registry.npmjs.org/@mattermost/react-native-turbo-log/-/react-native-turbo-log-0.2.3.tgz",
|
||||
"integrity": "sha512-usWyD8zVAHzrYqgPH1ne5I14gCOkhS2mefK58g5v4DewZfCm0/Uc0w8MRuPS/9jyOPPq1rUZj8U1AqKgEne9tQ==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@msgpack/msgpack": {
|
||||
"version": "2.8.0",
|
||||
|
|
@ -24415,15 +24413,13 @@
|
|||
"version": "5.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-camera-roll/camera-roll/-/camera-roll-5.3.1.tgz",
|
||||
"integrity": "sha512-2XKMkb/pLBC6vYkNh+bJ4UEj49V2ZSyWFHmaxsUJU9beLo1QbM3XJnySV6F1uv7aC+I2RBlDuAusCqNiTQiCOw==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@react-native-clipboard/clipboard": {
|
||||
"version": "1.11.2",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-clipboard/clipboard/-/clipboard-1.11.2.tgz",
|
||||
"integrity": "sha512-bHyZVW62TuleiZsXNHS1Pv16fWc0fh8O9WvBzl4h2fykqZRW9a+Pv/RGTH56E3X2PqzHP38K5go8zmCZUoIsoQ==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@react-native-community/cli": {
|
||||
"version": "10.2.2",
|
||||
|
|
@ -25580,8 +25576,7 @@
|
|||
"version": "9.3.9",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-9.3.9.tgz",
|
||||
"integrity": "sha512-L9f8OjX5Fwh5CdP4ygDPa6iQCJJ4tAtXiFuQp6EG4/sdSXDqOXaehAhJrZAN8P8Lztnf8YN8p836GmZuBCrY+A==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@react-native-cookies/cookies": {
|
||||
"version": "6.2.1",
|
||||
|
|
@ -25657,8 +25652,7 @@
|
|||
"version": "1.3.17",
|
||||
"resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.17.tgz",
|
||||
"integrity": "sha512-sui8AzHm6TxeEvWT/NEXlz3egYvCUog4tlXA4Xlb2Vxvy3purVXDq/XsM56lJl344U5Aj/jDzkVanOTMWyk4UA==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@react-navigation/native": {
|
||||
"version": "6.1.6",
|
||||
|
|
@ -25943,72 +25937,63 @@
|
|||
"version": "0.10.2",
|
||||
"resolved": "https://registry.npmjs.org/@stream-io/flat-list-mvcp/-/flat-list-mvcp-0.10.2.tgz",
|
||||
"integrity": "sha512-jebEKP7pfRF8/tVSqNM6qdvisfOtMnMlzGYTWldoOnIq9/6DS1BU4ilzBuH6O7iBUu4bDokrMCNJgA2b2EKW/A==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@svgr/babel-plugin-add-jsx-attribute": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.0.0.tgz",
|
||||
"integrity": "sha512-MdPdhdWLtQsjd29Wa4pABdhWbaRMACdM1h31BY+c6FghTZqNGT7pEYdBoaGeKtdTOBC/XNFQaKVj+r/Ei2ryWA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@svgr/babel-plugin-remove-jsx-attribute": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.0.0.tgz",
|
||||
"integrity": "sha512-aVdtfx9jlaaxc3unA6l+M9YRnKIZjOhQPthLKqmTXC8UVkBLDRGwPKo+r8n3VZN8B34+yVajzPTZ+ptTSuZZCw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@svgr/babel-plugin-remove-jsx-empty-expression": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.0.0.tgz",
|
||||
"integrity": "sha512-Ccj42ApsePD451AZJJf1QzTD1B/BOU392URJTeXFxSK709i0KUsGtbwyiqsKu7vsYxpTM0IA5clAKDyf9RCZyA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@svgr/babel-plugin-replace-jsx-attribute-value": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.0.0.tgz",
|
||||
"integrity": "sha512-88V26WGyt1Sfd1emBYmBJRWMmgarrExpKNVmI9vVozha4kqs6FzQJ/Kp5+EYli1apgX44518/0+t9+NU36lThQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@svgr/babel-plugin-svg-dynamic-title": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.0.0.tgz",
|
||||
"integrity": "sha512-F7YXNLfGze+xv0KMQxrl2vkNbI9kzT9oDK55/kUuymh1ACyXkMV+VZWX1zEhSTfEKh7VkHVZGmVtHg8eTZ6PRg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@svgr/babel-plugin-svg-em-dimensions": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.0.0.tgz",
|
||||
"integrity": "sha512-+rghFXxdIqJNLQK08kwPBD3Z22/0b2tEZ9lKiL/yTfuyj1wW8HUXu4bo/XkogATIYuXSghVQOOCwURXzHGKyZA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@svgr/babel-plugin-transform-react-native-svg": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.0.0.tgz",
|
||||
"integrity": "sha512-VaphyHZ+xIKv5v0K0HCzyfAaLhPGJXSk2HkpYfXIOKb7DjLBv0soHDxNv6X0vr2titsxE7klb++u7iOf7TSrFQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@svgr/babel-plugin-transform-svg-component": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.1.0.tgz",
|
||||
"integrity": "sha512-1zacrn08K5RyV2NtXahOZ5Im/+aB1Y0LVh6QpzwgQV05sY7H5Npq+OcW/UqXbfB2Ua/WnHsFossFQqigCjarYg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@svgr/babel-preset": {
|
||||
"version": "6.1.0",
|
||||
|
|
@ -26932,8 +26917,7 @@
|
|||
"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz",
|
||||
"integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@webpack-cli/info": {
|
||||
"version": "1.4.0",
|
||||
|
|
@ -26949,8 +26933,7 @@
|
|||
"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz",
|
||||
"integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"@xtuc/ieee754": {
|
||||
"version": "1.2.0",
|
||||
|
|
@ -27005,16 +26988,14 @@
|
|||
"integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"acorn-jsx": {
|
||||
"version": "5.3.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
|
||||
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"adm-zip": {
|
||||
"version": "0.5.9",
|
||||
|
|
@ -27076,8 +27057,7 @@
|
|||
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"anser": {
|
||||
"version": "1.4.10",
|
||||
|
|
@ -27304,8 +27284,7 @@
|
|||
"version": "7.0.0-bridge.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
|
||||
"integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"babel-jest": {
|
||||
"version": "29.5.0",
|
||||
|
|
@ -29272,8 +29251,7 @@
|
|||
"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz",
|
||||
"integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"eslint-import-resolver-node": {
|
||||
"version": "0.3.7",
|
||||
|
|
@ -29361,8 +29339,7 @@
|
|||
"resolved": "https://registry.npmjs.org/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz",
|
||||
"integrity": "sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"eslint-plugin-import": {
|
||||
"version": "2.27.5",
|
||||
|
|
@ -29498,8 +29475,7 @@
|
|||
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
|
||||
"integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"eslint-plugin-react-native": {
|
||||
"version": "4.0.0",
|
||||
|
|
@ -31917,8 +31893,7 @@
|
|||
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
|
||||
"integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"jest-regex-util": {
|
||||
"version": "29.4.3",
|
||||
|
|
@ -35376,8 +35351,7 @@
|
|||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.3.tgz",
|
||||
"integrity": "sha512-ZnXwLQnGzrDpHBHiC56TXFXvmolPeMjTn1UOm610M4EXGzbEDR7oOIyS2ZiItgbs6eZc4oU/a0hpk8PrcKvv5g==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-intl": {
|
||||
"version": "6.4.1",
|
||||
|
|
@ -35555,8 +35529,7 @@
|
|||
"version": "2.4.1",
|
||||
"resolved": "https://registry.npmjs.org/react-native-background-timer/-/react-native-background-timer-2.4.1.tgz",
|
||||
"integrity": "sha512-TE4Kiy7jUyv+hugxDxitzu38sW1NqjCk4uE5IgU2WevLv7sZacaBc6PZKOShNRPGirLl1NWkaG3LDEkdb9Um5g==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-button": {
|
||||
"version": "3.0.1",
|
||||
|
|
@ -35596,15 +35569,13 @@
|
|||
"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": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-device-info": {
|
||||
"version": "10.6.0",
|
||||
"resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-10.6.0.tgz",
|
||||
"integrity": "sha512-/MmINdojWdw2/9rwYpH/dX+1gFP0o78p8yYPjwxiPhoySSL2rZaNi+Mq9VwC+zFi/yQmJUvHntkKSw2KUc7rFw==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-document-picker": {
|
||||
"version": "8.2.0",
|
||||
|
|
@ -35641,22 +35612,19 @@
|
|||
"version": "2.10.10",
|
||||
"resolved": "https://registry.npmjs.org/react-native-exception-handler/-/react-native-exception-handler-2.10.10.tgz",
|
||||
"integrity": "sha512-otAXGoZDl1689OoUJWN/rXxVbdoZ3xcmyF1uq/CsizdLwwyZqVGd6d+p/vbYvnF996FfEyAEBnHrdFxulTn51w==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-fast-image": {
|
||||
"version": "8.6.3",
|
||||
"resolved": "https://registry.npmjs.org/react-native-fast-image/-/react-native-fast-image-8.6.3.tgz",
|
||||
"integrity": "sha512-Sdw4ESidXCXOmQ9EcYguNY2swyoWmx53kym2zRsvi+VeFCHEdkO+WG1DK+6W81juot40bbfLNhkc63QnWtesNg==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-file-viewer": {
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/react-native-file-viewer/-/react-native-file-viewer-2.1.5.tgz",
|
||||
"integrity": "sha512-MGC6sx9jsqHdefhVQ6o0akdsPGpkXgiIbpygb2Sg4g4bh7v6K1cardLV1NwGB9A6u1yICOSDT/MOC//9Ez6EUg==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-fs": {
|
||||
"version": "2.20.0",
|
||||
|
|
@ -35695,22 +35663,19 @@
|
|||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/react-native-haptic-feedback/-/react-native-haptic-feedback-2.0.3.tgz",
|
||||
"integrity": "sha512-7+qvcxXZts/hA+HOOIFyM1x9m9fn/TJVSTgXaoQ8uT4gLc97IMvqHQ559tDmnlth+hHMzd3HRMpmRLWoKPL0DA==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-hw-keyboard-event": {
|
||||
"version": "0.0.4",
|
||||
"resolved": "https://registry.npmjs.org/react-native-hw-keyboard-event/-/react-native-hw-keyboard-event-0.0.4.tgz",
|
||||
"integrity": "sha512-G8qp0nm17PHigLb/axgdF9xg51BKCG2p1AGeq//J/luLp5zNczIcQJh+nm02R1MeEUE3e53wqO4LMe0MV3raZg==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-image-picker": {
|
||||
"version": "5.3.1",
|
||||
"resolved": "https://registry.npmjs.org/react-native-image-picker/-/react-native-image-picker-5.3.1.tgz",
|
||||
"integrity": "sha512-zRCjtlE3KOeaWDM8gXzTwXfvo3ZeF2XMkHceU7CVCtKRleKxna/E4XWIPu/lXO2qlMdnSx1WvfPSbqzAX0qxpA==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-in-app-review": {
|
||||
"version": "4.3.3",
|
||||
|
|
@ -35720,15 +35685,13 @@
|
|||
"react-native-incall-manager": {
|
||||
"version": "git+ssh://git@github.com/react-native-webrtc/react-native-incall-manager.git#6d927ef24c6e47c6134177a4bb14a71054f85b65",
|
||||
"from": "react-native-incall-manager@4.0.1",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-iphone-x-helper": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz",
|
||||
"integrity": "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-keyboard-aware-scroll-view": {
|
||||
"version": "0.9.5",
|
||||
|
|
@ -35743,8 +35706,7 @@
|
|||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/react-native-keyboard-tracking-view/-/react-native-keyboard-tracking-view-5.7.0.tgz",
|
||||
"integrity": "sha512-MDeEwAbn9LJDOfHq0QLCGaZirVLk2X/tHqkAqz3y6uxryTRdSl9PwleOVar5Jx2oAPEg4J9BXbUD1wwOOi+5Kg==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-keychain": {
|
||||
"version": "8.1.1",
|
||||
|
|
@ -35755,15 +35717,13 @@
|
|||
"version": "2.6.2",
|
||||
"resolved": "https://registry.npmjs.org/react-native-linear-gradient/-/react-native-linear-gradient-2.6.2.tgz",
|
||||
"integrity": "sha512-Z8Xxvupsex+9BBFoSYS87bilNPWcRfRsGC0cpJk72Nxb5p2nEkGSBv73xZbEHnW2mUFvP+huYxrVvjZkr/gRjQ==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-localize": {
|
||||
"version": "2.2.6",
|
||||
"resolved": "https://registry.npmjs.org/react-native-localize/-/react-native-localize-2.2.6.tgz",
|
||||
"integrity": "sha512-EZETlC1ZlW/4g6xfsNCwAkAw5BDL2A6zk/08JjFR/GRGxYuKRD7iP1hHn1+h6DEu+xROjPpoNeXfMER2vkTVIQ==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-math-view": {
|
||||
"version": "3.9.5",
|
||||
|
|
@ -35799,8 +35759,7 @@
|
|||
"version": "4.3.3",
|
||||
"resolved": "https://registry.npmjs.org/react-native-notifications/-/react-native-notifications-4.3.3.tgz",
|
||||
"integrity": "sha512-t7uPgpC93A4L41Jea2zet3BUqgh45gpN/ATS9gxejNH3r6kWgMdGeeZJhuMpl1gSXw1gcvgzdjzIjN7YZSOP0A==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-permissions": {
|
||||
"version": "3.8.0",
|
||||
|
|
@ -35841,8 +35800,7 @@
|
|||
"version": "4.5.1",
|
||||
"resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.5.1.tgz",
|
||||
"integrity": "sha512-bKcwk6zZvyz+VLoG6Uia1oiYU1jSbv1ysjEKSRLsLtPcDsbixsTc0UgfrPqjZxNTPzvYLMcr8ufA90UQauN4mw==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-screens": {
|
||||
"version": "3.20.0",
|
||||
|
|
@ -35875,8 +35833,7 @@
|
|||
"version": "0.3.1",
|
||||
"resolved": "https://registry.npmjs.org/react-native-size-matters/-/react-native-size-matters-0.3.1.tgz",
|
||||
"integrity": "sha512-mKOfBLIBFBcs9br1rlZDvxD5+mAl8Gfr5CounwJtxI6Z82rGrMO+Kgl9EIg3RMVf3G855a85YVqHJL2f5EDRlw==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"react-native-svg": {
|
||||
"version": "13.9.0",
|
||||
|
|
@ -37812,15 +37769,13 @@
|
|||
"version": "0.1.6",
|
||||
"resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.6.tgz",
|
||||
"integrity": "sha512-VO/P91A/PmKH9bcN9a7O3duSuxe6M14ZoYXgA6a8dab8doWNdhiIHzEkX/jFeTTRBsX0Ubk6nG4q2NIjNsj+bg==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"use-sync-external-store": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
|
||||
"integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"utf8": {
|
||||
"version": "3.0.0",
|
||||
|
|
@ -38161,8 +38116,7 @@
|
|||
"version": "7.5.5",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz",
|
||||
"integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==",
|
||||
"requires": {
|
||||
}
|
||||
"requires": {}
|
||||
},
|
||||
"xdate": {
|
||||
"version": "0.8.2",
|
||||
|
|
|
|||
Loading…
Reference in a new issue