import React from 'react' import {Pressable, View} from 'react-native' import {InterpretedLabelValueDefinition, LabelPreference} from '@atproto/api' import {useLingui} from '@lingui/react' import {msg, Trans} from '@lingui/macro' import {useGlobalLabelStrings} from '#/lib/moderation/useGlobalLabelStrings' import { useLabelBehaviorDescription, useLabelLongBehaviorDescription, } from '#/lib/moderation/useLabelBehaviorDescription' import { usePreferencesQuery, usePreferencesSetContentLabelMutation, } from '#/state/queries/preferences' import {getLabelStrings} from '#/lib/moderation/useLabelInfo' import {useTheme, atoms as a} from '#/alf' import {Text} from '#/components/Typography' import {InlineLink} from '#/components/Link' import * as Dialog from '#/components/Dialog' import {Button, ButtonText, ButtonIcon} from '#/components/Button' import {ArrowTriangleBottom_Stroke2_Corner1_Rounded as ArrowTriangleBottom} from '../icons/ArrowTriangle' import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '../icons/CircleInfo' import {Check_Stroke2_Corner0_Rounded as Check} from '../icons/Check' export function ModerationLabelPref({ labelValueDefinition, labelerDid, disabled, }: { labelValueDefinition: InterpretedLabelValueDefinition labelerDid: string | undefined disabled?: boolean }) { const {_, i18n} = useLingui() const t = useTheme() const control = Dialog.useDialogControl() const isGlobalLabel = !labelValueDefinition.definedBy const {identifier} = labelValueDefinition const {data: preferences} = usePreferencesQuery() const {mutate, variables} = usePreferencesSetContentLabelMutation() const savedPref = labelerDid && !isGlobalLabel ? preferences?.moderationPrefs.labelers.find(l => l.did === labelerDid) ?.labels[identifier] : preferences?.moderationPrefs.labels[identifier] const pref = variables?.visibility ?? savedPref ?? labelValueDefinition.defaultSetting ?? 'warn' const settingDesc = useLabelBehaviorDescription(labelValueDefinition, pref) const hideLabel = useLabelLongBehaviorDescription( labelValueDefinition, 'hide', ) const warnLabel = useLabelLongBehaviorDescription( labelValueDefinition, 'warn', ) const ignoreLabel = useLabelLongBehaviorDescription( labelValueDefinition, 'ignore', ) const globalLabelStrings = useGlobalLabelStrings() const labelStrings = getLabelStrings( i18n.locale, globalLabelStrings, labelValueDefinition, ) const canWarn = !( labelValueDefinition.blurs === 'none' && labelValueDefinition.severity === 'none' ) const adultOnly = labelValueDefinition.flags.includes('adult') const adultDisabled = adultOnly && !preferences?.moderationPrefs.adultContentEnabled const cantConfigure = isGlobalLabel || adultDisabled const onSelectPref = (newPref: LabelPreference) => mutate({label: identifier, visibility: newPref, labelerDid}) return ( <> control.open()} accessibilityLabel={settingDesc} accessibilityHint="" style={[ a.flex_row, a.justify_between, a.gap_sm, a.align_center, t.atoms.bg_contrast_25, a.px_lg, a.py_lg, a.rounded_sm, ]}> {labelStrings.name} {labelStrings.description} {!disabled && ( {!disabled && ( {settingDesc} )} {!cantConfigure && ( )} )} {labelStrings.name} {labelStrings.description} {cantConfigure && ( {adultDisabled ? ( Adult content must be enabled to configure this label. ) : isGlobalLabel ? ( {labelStrings.name} is configured in your{' '} control.close()} style={a.text_md}> global moderation settings . ) : null} )} {disabled || cantConfigure ? ( ) : ( <> {canWarn && ( )} )} ) }