start alfing
This commit is contained in:
@@ -1,27 +1,24 @@
|
|||||||
import React, {useCallback} from 'react'
|
import {useMemo} from 'react'
|
||||||
import {TouchableOpacity, View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {
|
import {
|
||||||
type AppBskyActorDefs,
|
type AppBskyActorDefs,
|
||||||
type ModerationCause,
|
type ModerationCause,
|
||||||
type ModerationDecision,
|
type ModerationDecision,
|
||||||
} from '@atproto/api'
|
} from '@atproto/api'
|
||||||
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
|
|
||||||
import {msg} from '@lingui/macro'
|
import {msg} from '@lingui/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {useNavigation} from '@react-navigation/native'
|
|
||||||
|
|
||||||
import {BACK_HITSLOP} from '#/lib/constants'
|
|
||||||
import {makeProfileLink} from '#/lib/routes/links'
|
import {makeProfileLink} from '#/lib/routes/links'
|
||||||
import {type NavigationProp} from '#/lib/routes/types'
|
|
||||||
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
||||||
import {isWeb} from '#/platform/detection'
|
import {isWeb} from '#/platform/detection'
|
||||||
import {type Shadow} from '#/state/cache/profile-shadow'
|
import {type Shadow} from '#/state/cache/profile-shadow'
|
||||||
import {isConvoActive, useConvo} from '#/state/messages/convo'
|
import {isConvoActive, useConvo} from '#/state/messages/convo'
|
||||||
import {type ConvoItem} from '#/state/messages/convo/types'
|
import {type ConvoItem} from '#/state/messages/convo/types'
|
||||||
import {PreviewableUserAvatar} from '#/view/com/util/UserAvatar'
|
import {PreviewableUserAvatar} from '#/view/com/util/UserAvatar'
|
||||||
import {atoms as a, useBreakpoints, useTheme, web} from '#/alf'
|
import {atoms as a, useTheme, web} from '#/alf'
|
||||||
import {ConvoMenu} from '#/components/dms/ConvoMenu'
|
import {ConvoMenu} from '#/components/dms/ConvoMenu'
|
||||||
import {Bell2Off_Filled_Corner0_Rounded as BellStroke} from '#/components/icons/Bell2'
|
import {Bell2Off_Filled_Corner0_Rounded as BellStroke} from '#/components/icons/Bell2'
|
||||||
|
import * as Layout from '#/components/Layout'
|
||||||
import {Link} from '#/components/Link'
|
import {Link} from '#/components/Link'
|
||||||
import {PostAlerts} from '#/components/moderation/PostAlerts'
|
import {PostAlerts} from '#/components/moderation/PostAlerts'
|
||||||
import {Text} from '#/components/Typography'
|
import {Text} from '#/components/Typography'
|
||||||
@@ -30,19 +27,16 @@ import {VerificationCheck} from '#/components/verification/VerificationCheck'
|
|||||||
|
|
||||||
const PFP_SIZE = isWeb ? 40 : 34
|
const PFP_SIZE = isWeb ? 40 : 34
|
||||||
|
|
||||||
export let MessagesListHeader = ({
|
export function MessagesListHeader({
|
||||||
profile,
|
profile,
|
||||||
moderation,
|
moderation,
|
||||||
}: {
|
}: {
|
||||||
profile?: Shadow<AppBskyActorDefs.ProfileViewDetailed>
|
profile?: Shadow<AppBskyActorDefs.ProfileViewDetailed>
|
||||||
moderation?: ModerationDecision
|
moderation?: ModerationDecision
|
||||||
}): React.ReactNode => {
|
}) {
|
||||||
const t = useTheme()
|
const t = useTheme()
|
||||||
const {_} = useLingui()
|
|
||||||
const {gtTablet} = useBreakpoints()
|
|
||||||
const navigation = useNavigation<NavigationProp>()
|
|
||||||
|
|
||||||
const blockInfo = React.useMemo(() => {
|
const blockInfo = useMemo(() => {
|
||||||
if (!moderation) return
|
if (!moderation) return
|
||||||
const modui = moderation.ui('profileView')
|
const modui = moderation.ui('profileView')
|
||||||
const blocks = modui.alerts.filter(alert => alert.type === 'blocking')
|
const blocks = modui.alerts.filter(alert => alert.type === 'blocking')
|
||||||
@@ -54,44 +48,9 @@ export let MessagesListHeader = ({
|
|||||||
}
|
}
|
||||||
}, [moderation])
|
}, [moderation])
|
||||||
|
|
||||||
const onPressBack = useCallback(() => {
|
|
||||||
if (navigation.canGoBack()) {
|
|
||||||
navigation.goBack()
|
|
||||||
} else {
|
|
||||||
navigation.navigate('Messages', {})
|
|
||||||
}
|
|
||||||
}, [navigation])
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View
|
<Layout.Header.Outer>
|
||||||
style={[
|
<Layout.Header.BackButton />
|
||||||
t.atoms.bg,
|
|
||||||
t.atoms.border_contrast_low,
|
|
||||||
a.border_b,
|
|
||||||
a.flex_row,
|
|
||||||
a.align_start,
|
|
||||||
a.gap_sm,
|
|
||||||
gtTablet ? a.pl_lg : a.pl_xl,
|
|
||||||
a.pr_lg,
|
|
||||||
a.py_sm,
|
|
||||||
]}>
|
|
||||||
<TouchableOpacity
|
|
||||||
testID="conversationHeaderBackBtn"
|
|
||||||
onPress={onPressBack}
|
|
||||||
hitSlop={BACK_HITSLOP}
|
|
||||||
style={{width: 30, height: 30, marginTop: isWeb ? 6 : 4}}
|
|
||||||
accessibilityRole="button"
|
|
||||||
accessibilityLabel={_(msg`Back`)}
|
|
||||||
accessibilityHint="">
|
|
||||||
<FontAwesomeIcon
|
|
||||||
size={18}
|
|
||||||
icon="angle-left"
|
|
||||||
style={{
|
|
||||||
marginTop: 6,
|
|
||||||
}}
|
|
||||||
color={t.atoms.text.color}
|
|
||||||
/>
|
|
||||||
</TouchableOpacity>
|
|
||||||
|
|
||||||
{profile && moderation && blockInfo ? (
|
{profile && moderation && blockInfo ? (
|
||||||
<HeaderReady
|
<HeaderReady
|
||||||
@@ -131,10 +90,9 @@ export let MessagesListHeader = ({
|
|||||||
<View style={{width: 30}} />
|
<View style={{width: 30}} />
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</View>
|
</Layout.Header.Outer>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
MessagesListHeader = React.memo(MessagesListHeader)
|
|
||||||
|
|
||||||
function HeaderReady({
|
function HeaderReady({
|
||||||
profile,
|
profile,
|
||||||
|
|||||||
Reference in New Issue
Block a user