Followers/following exact count (#7057)
* followers exact count in heading * exact count for following * move files to new dir * use <Plural>
This commit is contained in:
+2
-2
@@ -57,8 +57,6 @@ import {PrivacyPolicyScreen} from '#/view/screens/PrivacyPolicy'
|
|||||||
import {ProfileScreen} from '#/view/screens/Profile'
|
import {ProfileScreen} from '#/view/screens/Profile'
|
||||||
import {ProfileFeedScreen} from '#/view/screens/ProfileFeed'
|
import {ProfileFeedScreen} from '#/view/screens/ProfileFeed'
|
||||||
import {ProfileFeedLikedByScreen} from '#/view/screens/ProfileFeedLikedBy'
|
import {ProfileFeedLikedByScreen} from '#/view/screens/ProfileFeedLikedBy'
|
||||||
import {ProfileFollowersScreen} from '#/view/screens/ProfileFollowers'
|
|
||||||
import {ProfileFollowsScreen} from '#/view/screens/ProfileFollows'
|
|
||||||
import {ProfileListScreen} from '#/view/screens/ProfileList'
|
import {ProfileListScreen} from '#/view/screens/ProfileList'
|
||||||
import {SavedFeeds} from '#/view/screens/SavedFeeds'
|
import {SavedFeeds} from '#/view/screens/SavedFeeds'
|
||||||
import {SearchScreen} from '#/view/screens/Search'
|
import {SearchScreen} from '#/view/screens/Search'
|
||||||
@@ -77,6 +75,8 @@ import {PostLikedByScreen} from '#/screens/Post/PostLikedBy'
|
|||||||
import {PostQuotesScreen} from '#/screens/Post/PostQuotes'
|
import {PostQuotesScreen} from '#/screens/Post/PostQuotes'
|
||||||
import {PostRepostedByScreen} from '#/screens/Post/PostRepostedBy'
|
import {PostRepostedByScreen} from '#/screens/Post/PostRepostedBy'
|
||||||
import {ProfileKnownFollowersScreen} from '#/screens/Profile/KnownFollowers'
|
import {ProfileKnownFollowersScreen} from '#/screens/Profile/KnownFollowers'
|
||||||
|
import {ProfileFollowersScreen} from '#/screens/Profile/ProfileFollowers'
|
||||||
|
import {ProfileFollowsScreen} from '#/screens/Profile/ProfileFollows'
|
||||||
import {ProfileLabelerLikedByScreen} from '#/screens/Profile/ProfileLabelerLikedBy'
|
import {ProfileLabelerLikedByScreen} from '#/screens/Profile/ProfileLabelerLikedBy'
|
||||||
import {AppearanceSettingsScreen} from '#/screens/Settings/AppearanceSettings'
|
import {AppearanceSettingsScreen} from '#/screens/Settings/AppearanceSettings'
|
||||||
import {AppIconSettingsScreen} from '#/screens/Settings/AppIconSettings'
|
import {AppIconSettingsScreen} from '#/screens/Settings/AppIconSettings'
|
||||||
|
|||||||
@@ -0,0 +1,56 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import {Plural} from '@lingui/macro'
|
||||||
|
import {useFocusEffect} from '@react-navigation/native'
|
||||||
|
|
||||||
|
import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
|
||||||
|
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
||||||
|
import {useProfileQuery} from '#/state/queries/profile'
|
||||||
|
import {useResolveDidQuery} from '#/state/queries/resolve-uri'
|
||||||
|
import {useSetMinimalShellMode} from '#/state/shell'
|
||||||
|
import {ProfileFollowers as ProfileFollowersComponent} from '#/view/com/profile/ProfileFollowers'
|
||||||
|
import * as Layout from '#/components/Layout'
|
||||||
|
|
||||||
|
type Props = NativeStackScreenProps<CommonNavigatorParams, 'ProfileFollowers'>
|
||||||
|
export const ProfileFollowersScreen = ({route}: Props) => {
|
||||||
|
const {name} = route.params
|
||||||
|
const setMinimalShellMode = useSetMinimalShellMode()
|
||||||
|
|
||||||
|
const {data: resolvedDid} = useResolveDidQuery(name)
|
||||||
|
const {data: profile} = useProfileQuery({
|
||||||
|
did: resolvedDid,
|
||||||
|
})
|
||||||
|
|
||||||
|
useFocusEffect(
|
||||||
|
React.useCallback(() => {
|
||||||
|
setMinimalShellMode(false)
|
||||||
|
}, [setMinimalShellMode]),
|
||||||
|
)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Layout.Screen testID="profileFollowersScreen">
|
||||||
|
<Layout.Header.Outer>
|
||||||
|
<Layout.Header.BackButton />
|
||||||
|
<Layout.Header.Content>
|
||||||
|
{profile && (
|
||||||
|
<>
|
||||||
|
<Layout.Header.TitleText>
|
||||||
|
{sanitizeDisplayName(profile.displayName || profile.handle)}
|
||||||
|
</Layout.Header.TitleText>
|
||||||
|
<Layout.Header.SubtitleText>
|
||||||
|
<Plural
|
||||||
|
value={profile.followersCount ?? 0}
|
||||||
|
one="# follower"
|
||||||
|
other="# followers"
|
||||||
|
/>
|
||||||
|
</Layout.Header.SubtitleText>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</Layout.Header.Content>
|
||||||
|
<Layout.Header.Slot />
|
||||||
|
</Layout.Header.Outer>
|
||||||
|
<Layout.Center>
|
||||||
|
<ProfileFollowersComponent name={name} />
|
||||||
|
</Layout.Center>
|
||||||
|
</Layout.Screen>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import {Plural} from '@lingui/macro'
|
||||||
|
import {useFocusEffect} from '@react-navigation/native'
|
||||||
|
|
||||||
|
import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
|
||||||
|
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
||||||
|
import {useProfileQuery} from '#/state/queries/profile'
|
||||||
|
import {useResolveDidQuery} from '#/state/queries/resolve-uri'
|
||||||
|
import {useSetMinimalShellMode} from '#/state/shell'
|
||||||
|
import {ProfileFollows as ProfileFollowsComponent} from '#/view/com/profile/ProfileFollows'
|
||||||
|
import * as Layout from '#/components/Layout'
|
||||||
|
|
||||||
|
type Props = NativeStackScreenProps<CommonNavigatorParams, 'ProfileFollows'>
|
||||||
|
export const ProfileFollowsScreen = ({route}: Props) => {
|
||||||
|
const {name} = route.params
|
||||||
|
const setMinimalShellMode = useSetMinimalShellMode()
|
||||||
|
|
||||||
|
const {data: resolvedDid} = useResolveDidQuery(name)
|
||||||
|
const {data: profile} = useProfileQuery({
|
||||||
|
did: resolvedDid,
|
||||||
|
})
|
||||||
|
|
||||||
|
useFocusEffect(
|
||||||
|
React.useCallback(() => {
|
||||||
|
setMinimalShellMode(false)
|
||||||
|
}, [setMinimalShellMode]),
|
||||||
|
)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Layout.Screen testID="profileFollowsScreen">
|
||||||
|
<Layout.Header.Outer>
|
||||||
|
<Layout.Header.BackButton />
|
||||||
|
<Layout.Header.Content>
|
||||||
|
{profile && (
|
||||||
|
<>
|
||||||
|
<Layout.Header.TitleText>
|
||||||
|
{sanitizeDisplayName(profile.displayName || profile.handle)}
|
||||||
|
</Layout.Header.TitleText>
|
||||||
|
<Layout.Header.SubtitleText>
|
||||||
|
<Plural
|
||||||
|
value={profile.followersCount ?? 0}
|
||||||
|
one="# following"
|
||||||
|
other="# following"
|
||||||
|
/>
|
||||||
|
</Layout.Header.SubtitleText>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</Layout.Header.Content>
|
||||||
|
<Layout.Header.Slot />
|
||||||
|
</Layout.Header.Outer>
|
||||||
|
<Layout.Center>
|
||||||
|
<ProfileFollowsComponent name={name} />
|
||||||
|
</Layout.Center>
|
||||||
|
</Layout.Screen>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
import React from 'react'
|
|
||||||
import {msg} from '@lingui/macro'
|
|
||||||
import {useLingui} from '@lingui/react'
|
|
||||||
import {useFocusEffect} from '@react-navigation/native'
|
|
||||||
|
|
||||||
import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
|
|
||||||
import {isWeb} from '#/platform/detection'
|
|
||||||
import {useSetMinimalShellMode} from '#/state/shell'
|
|
||||||
import {ProfileFollowers as ProfileFollowersComponent} from '#/view/com/profile/ProfileFollowers'
|
|
||||||
import {ViewHeader} from '#/view/com/util/ViewHeader'
|
|
||||||
import {CenteredView} from '#/view/com/util/Views'
|
|
||||||
import * as Layout from '#/components/Layout'
|
|
||||||
|
|
||||||
type Props = NativeStackScreenProps<CommonNavigatorParams, 'ProfileFollowers'>
|
|
||||||
export const ProfileFollowersScreen = ({route}: Props) => {
|
|
||||||
const {name} = route.params
|
|
||||||
const setMinimalShellMode = useSetMinimalShellMode()
|
|
||||||
const {_} = useLingui()
|
|
||||||
|
|
||||||
useFocusEffect(
|
|
||||||
React.useCallback(() => {
|
|
||||||
setMinimalShellMode(false)
|
|
||||||
}, [setMinimalShellMode]),
|
|
||||||
)
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Layout.Screen testID="profileFollowersScreen">
|
|
||||||
<CenteredView sideBorders={true}>
|
|
||||||
<ViewHeader title={_(msg`Followers`)} showBorder={!isWeb} />
|
|
||||||
<ProfileFollowersComponent name={name} />
|
|
||||||
</CenteredView>
|
|
||||||
</Layout.Screen>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
import React from 'react'
|
|
||||||
import {msg} from '@lingui/macro'
|
|
||||||
import {useLingui} from '@lingui/react'
|
|
||||||
import {useFocusEffect} from '@react-navigation/native'
|
|
||||||
|
|
||||||
import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
|
|
||||||
import {isWeb} from '#/platform/detection'
|
|
||||||
import {useSetMinimalShellMode} from '#/state/shell'
|
|
||||||
import {ProfileFollows as ProfileFollowsComponent} from '#/view/com/profile/ProfileFollows'
|
|
||||||
import {ViewHeader} from '#/view/com/util/ViewHeader'
|
|
||||||
import {CenteredView} from '#/view/com/util/Views'
|
|
||||||
import * as Layout from '#/components/Layout'
|
|
||||||
|
|
||||||
type Props = NativeStackScreenProps<CommonNavigatorParams, 'ProfileFollows'>
|
|
||||||
export const ProfileFollowsScreen = ({route}: Props) => {
|
|
||||||
const {name} = route.params
|
|
||||||
const setMinimalShellMode = useSetMinimalShellMode()
|
|
||||||
const {_} = useLingui()
|
|
||||||
|
|
||||||
useFocusEffect(
|
|
||||||
React.useCallback(() => {
|
|
||||||
setMinimalShellMode(false)
|
|
||||||
}, [setMinimalShellMode]),
|
|
||||||
)
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Layout.Screen testID="profileFollowsScreen">
|
|
||||||
<CenteredView sideBorders={true}>
|
|
||||||
<ViewHeader title={_(msg`Following`)} showBorder={!isWeb} />
|
|
||||||
<ProfileFollowsComponent name={name} />
|
|
||||||
</CenteredView>
|
|
||||||
</Layout.Screen>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user