import React, {ComponentProps} from 'react' import {Pressable, StyleProp, StyleSheet, View, ViewStyle} from 'react-native' import {AppBskyActorDefs, ModerationUI} from '@atproto/api' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useQueryClient} from '@tanstack/react-query' import {useModerationCauseDescription} from '#/lib/moderation/useModerationCauseDescription' import {addStyle} from 'lib/styles' import {precacheProfile} from 'state/queries/profile' // import {Link} from '#/components/Link' TODO this imposes some styles that screw things up import {Link} from '#/view/com/util/Link' import {atoms as a, useTheme} from '#/alf' import { ModerationDetailsDialog, useModerationDetailsDialogControl, } from '#/components/moderation/ModerationDetailsDialog' import {Text} from '#/components/Typography' interface Props extends ComponentProps { disabled: boolean iconSize: number iconStyles: StyleProp modui: ModerationUI profile: AppBskyActorDefs.ProfileViewBasic interpretFilterAsBlur?: boolean } export function PostHider({ testID, href, disabled, modui, style, children, iconSize, iconStyles, profile, interpretFilterAsBlur, ...props }: Props) { const queryClient = useQueryClient() const t = useTheme() const {_} = useLingui() const [override, setOverride] = React.useState(false) const control = useModerationDetailsDialogControl() const blur = modui.blurs[0] || (interpretFilterAsBlur ? modui.filters[0] : undefined) const desc = useModerationCauseDescription(blur) const onBeforePress = React.useCallback(() => { precacheProfile(queryClient, profile) }, [queryClient, profile]) if (!blur || (disabled && !modui.noOverride)) { return ( {children} ) } return !override ? ( { if (!modui.noOverride) { setOverride(v => !v) } }} accessibilityRole="button" accessibilityHint={ override ? _(msg`Hide the content`) : _(msg`Show the content`) } accessibilityLabel="" style={[ a.flex_row, a.align_center, a.gap_sm, a.py_md, { paddingLeft: 6, paddingRight: 18, }, override ? {paddingBottom: 0} : undefined, t.atoms.bg, ]}> { control.open() }} accessibilityRole="button" accessibilityLabel={_(msg`Learn more about this warning`)} accessibilityHint=""> {desc.name} {!modui.noOverride && ( {override ? Hide : Show} )} ) : ( {children} ) } const styles = StyleSheet.create({ child: { borderWidth: 0, borderTopWidth: 0, borderRadius: 8, }, })