import React from 'react' import {Pressable, View} from 'react-native' import {InterprettedLabelValueDefinition, 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 * as Dialog from '#/components/Dialog' import {Button, ButtonText, ButtonIcon} from '#/components/Button' import {ArrowTriangleBottom_Stroke2_Corner1_Rounded as ArrowTriangleBottom} from '../icons/ArrowTriangle' import {Check_Stroke2_Corner0_Rounded as Check} from '../icons/Check' export function ModerationLabelPref({ labelValueDefinition, labelerDid, disabled, }: { labelValueDefinition: InterprettedLabelValueDefinition labelerDid: string | undefined disabled?: boolean }) { const {_, i18n} = useLingui() const t = useTheme() const control = Dialog.useDialogControl() const {identifier} = labelValueDefinition const {data: preferences} = usePreferencesQuery() const {mutate, variables} = usePreferencesSetContentLabelMutation() const savedPref = labelerDid ? preferences?.moderationPrefs.mods.find(m => m.did === labelerDid)?.labels[ identifier ] : preferences?.moderationPrefs.labels[identifier] const pref = variables?.visibility ?? savedPref ?? '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 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} )} )} {labelStrings.name} {labelStrings.description} {disabled ? ( ) : ( <> {canWarn && ( )} )} ) }