import {View} from 'react-native' import {type ModerationCause} from '@atproto/api' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useGetTimeAgo} from '#/lib/hooks/useTimeAgo' import {useModerationCauseDescription} from '#/lib/moderation/useModerationCauseDescription' import {makeProfileLink} from '#/lib/routes/links' import {listUriToHref} from '#/lib/strings/url-helpers' import {isNative} from '#/platform/detection' import {useSession} from '#/state/session' import {atoms as a, useGutters, useTheme} from '#/alf' import * as Dialog from '#/components/Dialog' import {InlineLinkText} from '#/components/Link' import {type AppModerationCause} from '#/components/Pills' import {Text} from '#/components/Typography' export {useDialogControl as useModerationDetailsDialogControl} from '#/components/Dialog' export interface ModerationDetailsDialogProps { control: Dialog.DialogOuterProps['control'] modcause?: ModerationCause | AppModerationCause } export function ModerationDetailsDialog(props: ModerationDetailsDialogProps) { return ( ) } function ModerationDetailsDialogInner({ modcause, control, }: ModerationDetailsDialogProps & { control: Dialog.DialogOuterProps['control'] }) { const t = useTheme() const xGutters = useGutters([0, 'base']) const {_} = useLingui() const desc = useModerationCauseDescription(modcause) const {currentAccount} = useSession() const timeDiff = useGetTimeAgo({future: true}) let name let description if (!modcause) { name = _(msg`Content Warning`) description = _( msg`Moderator has chosen to set a general warning on the content.`, ) } else if (modcause.type === 'blocking') { if (modcause.source.type === 'list') { const list = modcause.source.list name = _(msg`User Blocked by List`) description = ( This user is included in the{' '} {list.name} {' '} list which you have blocked. ) } else { name = _(msg`User Blocked`) description = _( msg`You have blocked this user. You cannot view their content.`, ) } } else if (modcause.type === 'blocked-by') { name = _(msg`User Blocks You`) description = _( msg`This user has blocked you. You cannot view their content.`, ) } else if (modcause.type === 'block-other') { name = _(msg`Content Not Available`) description = _( msg`This content is not available because one of the users involved has blocked the other.`, ) } else if (modcause.type === 'muted') { if (modcause.source.type === 'list') { const list = modcause.source.list name = _(msg`Account Muted by List`) description = ( This user is included in the{' '} {list.name} {' '} list which you have muted. ) } else { name = _(msg`Account Muted`) description = _(msg`You have muted this account.`) } } else if (modcause.type === 'mute-word') { name = _(msg`Post Hidden by Muted Word`) description = _(msg`You've chosen to hide a word or tag within this post.`) } else if (modcause.type === 'hidden') { name = _(msg`Post Hidden by You`) description = _(msg`You have hidden this post.`) } else if (modcause.type === 'reply-hidden') { const isYou = currentAccount?.did === modcause.source.did name = isYou ? _(msg`Reply Hidden by You`) : _(msg`Reply Hidden by Thread Author`) description = isYou ? _(msg`You hid this reply.`) : _(msg`The author of this thread has hidden this reply.`) } else if (modcause.type === 'label') { name = desc.name description = ( {desc.description} ) } else { // should never happen name = '' description = '' } const sourceName = desc.source || desc.sourceDisplayName || _(msg`an unknown labeler`) return ( {name} {description} {modcause?.type === 'label' && ( {modcause.source.type === 'user' ? ( This label was applied by the author. ) : ( <> Source:{' '} control.close()}> {sourceName} {modcause.label.exp && ( Expires in {timeDiff(Date.now(), modcause.label.exp)} )} )} )} {isNative && } ) }