1
0
mirror of https://github.com/tooot-app/app synced 2025-04-23 22:57:23 +02:00

Use native loading spinner

The lib is not being maintained and the animation quality is bad
This commit is contained in:
xmflsct 2023-01-15 20:34:22 +01:00
parent 86c3e91439
commit f10d52cebc
17 changed files with 69 additions and 80 deletions

View File

@ -70,7 +70,6 @@
"react-i18next": "^12.1.4", "react-i18next": "^12.1.4",
"react-intl": "^6.2.5", "react-intl": "^6.2.5",
"react-native": "^0.70.6", "react-native": "^0.70.6",
"react-native-animated-spinkit": "^1.5.2",
"react-native-blurhash": "^1.1.10", "react-native-blurhash": "^1.1.10",
"react-native-fast-image": "^8.6.3", "react-native-fast-image": "^8.6.3",
"react-native-feather": "^1.1.2", "react-native-feather": "^1.1.2",

View File

@ -3,7 +3,7 @@ import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager' import { useTheme } from '@utils/styles/ThemeManager'
import React, { useState } from 'react' import React, { useState } from 'react'
import { AccessibilityProps, Pressable, StyleProp, View, ViewStyle } from 'react-native' import { AccessibilityProps, Pressable, StyleProp, View, ViewStyle } from 'react-native'
import { Flow } from 'react-native-animated-spinkit' import { Loading } from './Loading'
import CustomText from './Text' import CustomText from './Text'
export interface Props { export interface Props {
@ -53,7 +53,7 @@ const Button: React.FC<Props> = ({
const loadingSpinkit = () => const loadingSpinkit = () =>
loading ? ( loading ? (
<View style={{ position: 'absolute' }}> <View style={{ position: 'absolute' }}>
<Flow size={StyleConstants.Font.Size[size]} color={colors.secondary} /> <Loading />
</View> </View>
) : null ) : null

View File

@ -1,10 +1,10 @@
import Icon from '@components/Icon' import Icon from '@components/Icon'
import { Loading } from '@components/Loading'
import CustomText from '@components/Text' import CustomText from '@components/Text'
import { StyleConstants } from '@utils/styles/constants' import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager' import { useTheme } from '@utils/styles/ThemeManager'
import React from 'react' import React from 'react'
import { AccessibilityProps, Pressable, View } from 'react-native' import { AccessibilityProps, Pressable, View } from 'react-native'
import { Flow } from 'react-native-animated-spinkit'
export interface Props { export interface Props {
accessibilityLabel?: string accessibilityLabel?: string
@ -43,7 +43,7 @@ const HeaderRight: React.FC<Props> = ({
const loadingSpinkit = () => const loadingSpinkit = () =>
loading ? ( loading ? (
<View style={{ position: 'absolute' }}> <View style={{ position: 'absolute' }}>
<Flow size={StyleConstants.Font.Size.M * 1.25} color={colors.secondary} /> <Loading />
</View> </View>
) : null ) : null

View File

@ -0,0 +1,12 @@
import { useTheme } from '@utils/styles/ThemeManager'
import { ActivityIndicator, ViewProps } from 'react-native'
export type Props = {
size?: 'small' | 'large'
} & ViewProps
export const Loading: React.FC<Props> = ({ size = 'small', ...rest }) => {
const { colors } = useTheme()
return <ActivityIndicator size={size} color={colors.secondary} {...rest} />
}

View File

@ -1,4 +1,5 @@
import Icon from '@components/Icon' import Icon from '@components/Icon'
import { Loading } from '@components/Loading'
import CustomText from '@components/Text' import CustomText from '@components/Text'
import { useAccessibility } from '@utils/accessibility/AccessibilityManager' import { useAccessibility } from '@utils/accessibility/AccessibilityManager'
import { StyleConstants } from '@utils/styles/constants' import { StyleConstants } from '@utils/styles/constants'
@ -6,7 +7,6 @@ import { useTheme } from '@utils/styles/ThemeManager'
import { ColorDefinitions } from '@utils/styles/themes' import { ColorDefinitions } from '@utils/styles/themes'
import React from 'react' import React from 'react'
import { View } from 'react-native' import { View } from 'react-native'
import { Flow } from 'react-native-animated-spinkit'
import { State, Switch, TapGestureHandler } from 'react-native-gesture-handler' import { State, Switch, TapGestureHandler } from 'react-native-gesture-handler'
export interface Props { export interface Props {
@ -150,7 +150,7 @@ const MenuRow: React.FC<Props> = ({
) : null} ) : null}
{loading ? ( {loading ? (
<View style={{ position: 'absolute' }}> <View style={{ position: 'absolute' }}>
<Flow size={StyleConstants.Font.Size.M * 1.25} color={colors.secondary} /> <Loading />
</View> </View>
) : null} ) : null}
</View> </View>

View File

@ -1,5 +1,6 @@
import Button from '@components/Button' import Button from '@components/Button'
import Icon from '@components/Icon' import Icon from '@components/Icon'
import { Loading } from '@components/Loading'
import CustomText from '@components/Text' import CustomText from '@components/Text'
import { QueryKeyTimeline, useTimelineQuery } from '@utils/queryHooks/timeline' import { QueryKeyTimeline, useTimelineQuery } from '@utils/queryHooks/timeline'
import { StyleConstants } from '@utils/styles/constants' import { StyleConstants } from '@utils/styles/constants'
@ -7,7 +8,6 @@ import { useTheme } from '@utils/styles/ThemeManager'
import React from 'react' import React from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { View } from 'react-native' import { View } from 'react-native'
import { Circle } from 'react-native-animated-spinkit'
export interface Props { export interface Props {
queryKey: QueryKeyTimeline queryKey: QueryKeyTimeline
@ -25,7 +25,7 @@ const TimelineEmpty: React.FC<Props> = ({ queryKey }) => {
const children = () => { const children = () => {
switch (status) { switch (status) {
case 'loading': case 'loading':
return <Circle size={StyleConstants.Font.Size.L} color={colors.secondary} /> return <Loading />
case 'error': case 'error':
return ( return (
<> <>

View File

@ -1,4 +1,5 @@
import Icon from '@components/Icon' import Icon from '@components/Icon'
import { Loading } from '@components/Loading'
import CustomText from '@components/Text' import CustomText from '@components/Text'
import { QueryKeyTimeline, useTimelineQuery } from '@utils/queryHooks/timeline' import { QueryKeyTimeline, useTimelineQuery } from '@utils/queryHooks/timeline'
import { StyleConstants } from '@utils/styles/constants' import { StyleConstants } from '@utils/styles/constants'
@ -6,7 +7,6 @@ import { useTheme } from '@utils/styles/ThemeManager'
import React from 'react' import React from 'react'
import { Trans } from 'react-i18next' import { Trans } from 'react-i18next'
import { View } from 'react-native' import { View } from 'react-native'
import { Circle } from 'react-native-animated-spinkit'
export interface Props { export interface Props {
queryKey: QueryKeyTimeline queryKey: QueryKeyTimeline
@ -31,7 +31,7 @@ const TimelineFooter: React.FC<Props> = ({ queryKey, disableInfinity }) => {
}} }}
> >
{!disableInfinity && hasNextPage ? ( {!disableInfinity && hasNextPage ? (
<Circle size={StyleConstants.Font.Size.L} color={colors.secondary} /> <Loading />
) : ( ) : (
<CustomText fontStyle='S' style={{ color: colors.secondary }}> <CustomText fontStyle='S' style={{ color: colors.secondary }}>
<Trans <Trans

View File

@ -1,3 +1,4 @@
import { Loading } from '@components/Loading'
import { ParseHTML } from '@components/Parse' import { ParseHTML } from '@components/Parse'
import CustomText from '@components/Text' import CustomText from '@components/Text'
import detectLanguage from '@utils/helpers/detectLanguage' import detectLanguage from '@utils/helpers/detectLanguage'
@ -9,7 +10,6 @@ import * as Localization from 'expo-localization'
import React, { useContext, useEffect, useState } from 'react' import React, { useContext, useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { Platform, Pressable } from 'react-native' import { Platform, Pressable } from 'react-native'
import { Circle } from 'react-native-animated-spinkit'
import StatusContext from './Context' import StatusContext from './Context'
const TimelineTranslate = () => { const TimelineTranslate = () => {
@ -111,13 +111,7 @@ const TimelineTranslate = () => {
}) })
: t('componentTimeline:shared.translate.default')} : t('componentTimeline:shared.translate.default')}
</CustomText> </CustomText>
{isFetching ? ( {isFetching ? <Loading style={{ marginLeft: StyleConstants.Spacing.S }} /> : null}
<Circle
size={StyleConstants.Font.Size.M}
color={colors.disabled}
style={{ marginLeft: StyleConstants.Spacing.S }}
/>
) : null}
</Pressable> </Pressable>
{devView()} {devView()}
{data && data.error === undefined {data && data.error === undefined

View File

@ -373,7 +373,8 @@
"hashtags": "Hashtag", "hashtags": "Hashtag",
"statuses": "Toot" "statuses": "Toot"
}, },
"notFound": "Cannot find <bold>{{searchTerm}}</bold> related {{type}}" "notFound": "Cannot find <bold>{{searchTerm}}</bold> related {{type}}",
"noResult": "Cannot find anything, please try a different term"
}, },
"toot": { "toot": {
"name": "Discussions", "name": "Discussions",

View File

@ -1,5 +1,6 @@
import Button from '@components/Button' import Button from '@components/Button'
import haptics from '@components/haptics' import haptics from '@components/haptics'
import { Loading } from '@components/Loading'
import { ParseHTML } from '@components/Parse' import { ParseHTML } from '@components/Parse'
import RelativeTime from '@components/RelativeTime' import RelativeTime from '@components/RelativeTime'
import CustomText from '@components/Text' import CustomText from '@components/Text'
@ -20,7 +21,6 @@ import {
StyleSheet, StyleSheet,
View View
} from 'react-native' } from 'react-native'
import { Circle } from 'react-native-animated-spinkit'
import FastImage from 'react-native-fast-image' import FastImage from 'react-native-fast-image'
import { FlatList, ScrollView } from 'react-native-gesture-handler' import { FlatList, ScrollView } from 'react-native-gesture-handler'
import { SafeAreaView } from 'react-native-safe-area-context' import { SafeAreaView } from 'react-native-safe-area-context'
@ -191,14 +191,8 @@ const ScreenAnnouncements: React.FC<RootStackScreenProps<'Screen-Announcements'>
const ListEmptyComponent = () => { const ListEmptyComponent = () => {
return ( return (
<View <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
style={{ <Loading />
width: Dimensions.get('window').width,
justifyContent: 'center',
alignItems: 'center'
}}
>
<Circle size={StyleConstants.Font.Size.L} color={colors.secondary} />
</View> </View>
) )
} }

View File

@ -1,6 +1,7 @@
import Button from '@components/Button' import Button from '@components/Button'
import haptics from '@components/haptics' import haptics from '@components/haptics'
import Icon from '@components/Icon' import Icon from '@components/Icon'
import { Loading } from '@components/Loading'
import { MAX_MEDIA_ATTACHMENTS } from '@components/mediaSelector' import { MAX_MEDIA_ATTACHMENTS } from '@components/mediaSelector'
import CustomText from '@components/Text' import CustomText from '@components/Text'
import { useActionSheet } from '@expo/react-native-action-sheet' import { useActionSheet } from '@expo/react-native-action-sheet'
@ -11,7 +12,6 @@ import { useTheme } from '@utils/styles/ThemeManager'
import React, { RefObject, useContext, useEffect, useRef } from 'react' import React, { RefObject, useContext, useEffect, useRef } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { FlatList, Pressable, StyleSheet, View } from 'react-native' import { FlatList, Pressable, StyleSheet, View } from 'react-native'
import { Circle } from 'react-native-animated-spinkit'
import FastImage from 'react-native-fast-image' import FastImage from 'react-native-fast-image'
import ComposeContext from '../../utils/createContext' import ComposeContext from '../../utils/createContext'
import { ExtendedAttachment } from '../../utils/types' import { ExtendedAttachment } from '../../utils/types'
@ -135,7 +135,7 @@ const ComposeAttachments: React.FC<Props> = ({ accessibleRefAttachments }) => {
backgroundColor: colors.backgroundOverlayInvert backgroundColor: colors.backgroundOverlayInvert
}} }}
> >
<Circle size={StyleConstants.Font.Size.L} color={colors.primaryOverlay} /> <Loading />
</View> </View>
) : ( ) : (
<View <View

View File

@ -2,13 +2,13 @@ import ComponentAccount from '@components/Account'
import haptics from '@components/haptics' import haptics from '@components/haptics'
import ComponentHashtag from '@components/Hashtag' import ComponentHashtag from '@components/Hashtag'
import Icon from '@components/Icon' import Icon from '@components/Icon'
import { Loading } from '@components/Loading'
import ComponentSeparator from '@components/Separator' import ComponentSeparator from '@components/Separator'
import { useSearchQuery } from '@utils/queryHooks/search' import { useSearchQuery } from '@utils/queryHooks/search'
import { StyleConstants } from '@utils/styles/constants' import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager' import { useTheme } from '@utils/styles/ThemeManager'
import React, { Fragment, useContext, useEffect } from 'react' import React, { Fragment, useContext, useEffect } from 'react'
import { View } from 'react-native' import { View } from 'react-native'
import { Circle } from 'react-native-animated-spinkit'
import ComposeContext from '../utils/createContext' import ComposeContext from '../utils/createContext'
import { formatText } from '../utils/processText' import { formatText } from '../utils/processText'
@ -125,7 +125,7 @@ const ComposeRootSuggestions: React.FC = () => {
key='listEmpty' key='listEmpty'
style={{ flex: 1, alignItems: 'center', marginVertical: StyleConstants.Spacing.M }} style={{ flex: 1, alignItems: 'center', marginVertical: StyleConstants.Spacing.M }}
> >
<Circle size={StyleConstants.Font.Size.M * 1.25} color={colors.secondary} /> <Loading />
</View> </View>
) : ( ) : (
<>{main()}</> <>{main()}</>

View File

@ -1,4 +1,5 @@
import ComponentHashtag from '@components/Hashtag' import ComponentHashtag from '@components/Hashtag'
import { Loading } from '@components/Loading'
import ComponentSeparator from '@components/Separator' import ComponentSeparator from '@components/Separator'
import CustomText from '@components/Text' import CustomText from '@components/Text'
import { useTrendsQuery } from '@utils/queryHooks/trends' import { useTrendsQuery } from '@utils/queryHooks/trends'
@ -6,26 +7,37 @@ import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager' import { useTheme } from '@utils/styles/ThemeManager'
import React from 'react' import React from 'react'
import { Trans, useTranslation } from 'react-i18next' import { Trans, useTranslation } from 'react-i18next'
import { StyleSheet, TextInput, View } from 'react-native' import { StyleSheet, View } from 'react-native'
import { Circle } from 'react-native-animated-spinkit'
export interface Props { export interface Props {
isFetching: boolean isFetching: boolean
inputRef: React.RefObject<TextInput> searchTerm: string
setSearchTerm: React.Dispatch<React.SetStateAction<string>>
} }
const SearchEmpty: React.FC<Props> = ({ isFetching, inputRef, setSearchTerm }) => { const SearchEmpty: React.FC<Props> = ({ isFetching, searchTerm }) => {
const { colors } = useTheme() const { colors } = useTheme()
const { t } = useTranslation('screenTabs') const { t } = useTranslation('screenTabs')
const trendsTags = useTrendsQuery({ type: 'tags' }) const trendsTags = useTrendsQuery({ type: 'tags' })
return ( return (
<View style={{ paddingVertical: StyleConstants.Spacing.Global.PagePadding }}> <View
style={{
flex: 1,
minHeight: '100%',
paddingVertical: StyleConstants.Spacing.Global.PagePadding
}}
>
{isFetching ? ( {isFetching ? (
<View style={{ flex: 1, alignItems: 'center' }}> <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Circle size={StyleConstants.Font.Size.M * 1.25} color={colors.secondary} /> <Loading />
</View>
) : searchTerm.length ? (
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<CustomText
style={{ color: colors.primaryDefault }}
children={t('shared.search.noResult')}
/>
</View> </View>
) : ( ) : (
<> <>

View File

@ -131,7 +131,6 @@ const TabSharedSearch: React.FC<TabSharedStackScreenProps<'Tab-Shared-Search'>>
style={{ flex: 1 }} style={{ flex: 1 }}
> >
<SectionList <SectionList
style={{ minHeight: '100%' }}
sections={data || []} sections={data || []}
renderItem={({ item, section }: { item: any; section: any }) => { renderItem={({ item, section }: { item: any; section: any }) => {
switch (section.title) { switch (section.title) {
@ -146,9 +145,7 @@ const TabSharedSearch: React.FC<TabSharedStackScreenProps<'Tab-Shared-Search'>>
} }
}} }}
stickySectionHeadersEnabled stickySectionHeadersEnabled
ListEmptyComponent={ ListEmptyComponent={<SearchEmpty isFetching={isFetching} searchTerm={searchTerm} />}
<SearchEmpty isFetching={isFetching} inputRef={inputRef} setSearchTerm={setSearchTerm} />
}
keyboardShouldPersistTaps='always' keyboardShouldPersistTaps='always'
renderSectionHeader={({ section: { translation } }) => ( renderSectionHeader={({ section: { translation } }) => (
<View <View

View File

@ -1,5 +1,6 @@
import { HeaderLeft } from '@components/Header' import { HeaderLeft } from '@components/Header'
import Icon from '@components/Icon' import Icon from '@components/Icon'
import { Loading } from '@components/Loading'
import ComponentSeparator from '@components/Separator' import ComponentSeparator from '@components/Separator'
import CustomText from '@components/Text' import CustomText from '@components/Text'
import TimelineDefault from '@components/Timeline/Default' import TimelineDefault from '@components/Timeline/Default'
@ -16,7 +17,6 @@ import { useTheme } from '@utils/styles/ThemeManager'
import React, { useEffect, useRef, useState } from 'react' import React, { useEffect, useRef, useState } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { Alert, FlatList, Platform, Pressable, View } from 'react-native' import { Alert, FlatList, Platform, Pressable, View } from 'react-native'
import { Circle } from 'react-native-animated-spinkit'
import { Path, Svg } from 'react-native-svg' import { Path, Svg } from 'react-native-svg'
const TabSharedToot: React.FC<TabSharedStackScreenProps<'Tab-Shared-Toot'>> = ({ const TabSharedToot: React.FC<TabSharedStackScreenProps<'Tab-Shared-Toot'>> = ({
@ -109,7 +109,7 @@ const TabSharedToot: React.FC<TabSharedStackScreenProps<'Tab-Shared-Toot'>> = ({
} }
}, },
{ {
placeholderData: { pages: [{ body: [toot] }] }, placeholderData: { pages: [{ body: [{ ...toot, _level: 0 }] }] },
enabled: !toot._remote, enabled: !toot._remote,
staleTime: 0, staleTime: 0,
refetchOnMount: true, refetchOnMount: true,
@ -121,7 +121,7 @@ const TabSharedToot: React.FC<TabSharedStackScreenProps<'Tab-Shared-Toot'>> = ({
} }
} }
) )
useQuery<Mastodon.Status[]>( const remoteQuery = useQuery<Mastodon.Status[]>(
queryKey.remote, queryKey.remote,
async () => { async () => {
const domain = match?.domain const domain = match?.domain
@ -446,18 +446,9 @@ const TabSharedToot: React.FC<TabSharedStackScreenProps<'Tab-Shared-Toot'>> = ({
) )
}} }}
ListFooterComponent={ ListFooterComponent={
<View query.isFetching || remoteQuery.isFetching ? (
style={{ <View style={{ flex: 1, alignItems: 'center' }} children={<Loading />} />
flex: 1, ) : null
alignItems: 'center',
backgroundColor: colors.backgroundDefault,
marginHorizontal: StyleConstants.Spacing.M
}}
>
{query.isLoading ? (
<Circle size={StyleConstants.Font.Size.L} color={colors.secondary} />
) : null}
</View>
} }
{...(loaded.current && { maintainVisibleContentPosition: { minIndexForVisible: 0 } })} {...(loaded.current && { maintainVisibleContentPosition: { minIndexForVisible: 0 } })}
{...(Platform.OS !== 'ios' && { {...(Platform.OS !== 'ios' && {

View File

@ -1,6 +1,7 @@
import ComponentAccount from '@components/Account' import ComponentAccount from '@components/Account'
import { HeaderLeft } from '@components/Header' import { HeaderLeft } from '@components/Header'
import Icon from '@components/Icon' import Icon from '@components/Icon'
import { Loading } from '@components/Loading'
import ComponentSeparator from '@components/Separator' import ComponentSeparator from '@components/Separator'
import CustomText from '@components/Text' import CustomText from '@components/Text'
import apiInstance from '@utils/api/instance' import apiInstance from '@utils/api/instance'
@ -13,7 +14,6 @@ import { useTheme } from '@utils/styles/ThemeManager'
import React, { useEffect, useState } from 'react' import React, { useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { View } from 'react-native' import { View } from 'react-native'
import { Circle, Flow } from 'react-native-animated-spinkit'
import { FlatList } from 'react-native-gesture-handler' import { FlatList } from 'react-native-gesture-handler'
const TabSharedUsers: React.FC<TabSharedStackScreenProps<'Tab-Shared-Users'>> = ({ const TabSharedUsers: React.FC<TabSharedStackScreenProps<'Tab-Shared-Users'>> = ({
@ -36,7 +36,7 @@ const TabSharedUsers: React.FC<TabSharedStackScreenProps<'Tab-Shared-Users'>> =
...queryKey[1] ...queryKey[1]
}) })
const [isSearching, setIsSearching] = useState(false) const [isSearching, setIsSearching] = useState<number | null>(null)
return ( return (
<FlatList <FlatList
@ -46,14 +46,14 @@ const TabSharedUsers: React.FC<TabSharedStackScreenProps<'Tab-Shared-Users'>> =
minHeight: '100%', minHeight: '100%',
paddingVertical: StyleConstants.Spacing.Global.PagePadding paddingVertical: StyleConstants.Spacing.Global.PagePadding
}} }}
renderItem={({ item }) => ( renderItem={({ item, index }) => (
<ComponentAccount <ComponentAccount
account={item} account={item}
props={{ props={{
disabled: isSearching, disabled: isSearching === index,
onPress: () => { onPress: () => {
if (data?.pages[0]?.remoteData) { if (data?.pages[0]?.remoteData) {
setIsSearching(true) setIsSearching(index)
apiInstance<SearchResult>({ apiInstance<SearchResult>({
version: 'v2', version: 'v2',
method: 'get', method: 'get',
@ -66,18 +66,18 @@ const TabSharedUsers: React.FC<TabSharedStackScreenProps<'Tab-Shared-Users'>> =
} }
}) })
.then(res => { .then(res => {
setIsSearching(false) setIsSearching(null)
if (res.body.accounts[0]) { if (res.body.accounts[0]) {
navigation.push('Tab-Shared-Account', { account: res.body.accounts[0] }) navigation.push('Tab-Shared-Account', { account: res.body.accounts[0] })
} }
}) })
.catch(() => setIsSearching(false)) .catch(() => setIsSearching(null))
} else { } else {
navigation.push('Tab-Shared-Account', { account: item }) navigation.push('Tab-Shared-Account', { account: item })
} }
} }
}} }}
children={<Flow size={StyleConstants.Font.Size.L} color={colors.secondary} />} children={<Loading />}
/> />
)} )}
onEndReached={() => hasNextPage && !isFetchingNextPage && fetchNextPage()} onEndReached={() => hasNextPage && !isFetchingNextPage && fetchNextPage()}
@ -93,7 +93,7 @@ const TabSharedUsers: React.FC<TabSharedStackScreenProps<'Tab-Shared-Users'>> =
alignItems: 'center' alignItems: 'center'
}} }}
> >
<Circle size={StyleConstants.Font.Size.L} color={colors.secondary} /> <Loading />
</View> </View>
) : null ) : null
} }

View File

@ -9549,16 +9549,6 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"react-native-animated-spinkit@npm:^1.5.2":
version: 1.5.2
resolution: "react-native-animated-spinkit@npm:1.5.2"
peerDependencies:
react: "*"
react-native: "*"
checksum: 5d84b0958b3f9db5223d7c2af242eae45f133cf50715be56f1e266d7c04fe5ecdbd7e01b08146748b06daaf914fe8bc64f13df7faaee98bc687094ca10cae61e
languageName: node
linkType: hard
"react-native-blurhash@npm:^1.1.10": "react-native-blurhash@npm:^1.1.10":
version: 1.1.10 version: 1.1.10
resolution: "react-native-blurhash@npm:1.1.10" resolution: "react-native-blurhash@npm:1.1.10"
@ -11412,7 +11402,6 @@ __metadata:
react-i18next: ^12.1.4 react-i18next: ^12.1.4
react-intl: ^6.2.5 react-intl: ^6.2.5
react-native: ^0.70.6 react-native: ^0.70.6
react-native-animated-spinkit: ^1.5.2
react-native-blurhash: ^1.1.10 react-native-blurhash: ^1.1.10
react-native-clean-project: ^4.0.1 react-native-clean-project: ^4.0.1
react-native-fast-image: ^8.6.3 react-native-fast-image: ^8.6.3