[SDK] Swap moderation to @bsky.app/sdk and move labeler config to Client statics (#11383)
This commit is contained in:
@@ -4,8 +4,8 @@ import {
|
|||||||
AppBskyAgeassuranceDefs,
|
AppBskyAgeassuranceDefs,
|
||||||
computeAgeAssuranceRegionAccess,
|
computeAgeAssuranceRegionAccess,
|
||||||
getAgeAssuranceRegionConfig,
|
getAgeAssuranceRegionConfig,
|
||||||
type ModerationPrefs,
|
|
||||||
} from '@atproto/api'
|
} from '@atproto/api'
|
||||||
|
import {type ModerationPrefs} from '@bsky.app/sdk/moderation'
|
||||||
|
|
||||||
import {getAge} from '#/lib/strings/time'
|
import {getAge} from '#/lib/strings/time'
|
||||||
import {regionName} from '#/locale/helpers'
|
import {regionName} from '#/locale/helpers'
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
import {useCallback, useMemo} from 'react'
|
import {useCallback, useMemo} from 'react'
|
||||||
import {moderateProfile, type ModerationOpts} from '@atproto/api'
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {keepPreviousData, useQuery} from '@tanstack/react-query'
|
import {keepPreviousData, useQuery} from '@tanstack/react-query'
|
||||||
|
|
||||||
import {isJustAMute, moduiContainsHideableOffense} from '#/lib/moderation'
|
import {isJustAMute, moduiContainsHideableOffense} from '#/lib/moderation'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
||||||
import {STALE} from '#/state/queries'
|
import {STALE} from '#/state/queries'
|
||||||
import {DEFAULT_LOGGED_OUT_PREFERENCES} from '#/state/queries/preferences'
|
import {DEFAULT_LOGGED_OUT_PREFERENCES} from '#/state/queries/preferences'
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ import Animated, {
|
|||||||
withDelay,
|
withDelay,
|
||||||
withTiming,
|
withTiming,
|
||||||
} from 'react-native-reanimated'
|
} from 'react-native-reanimated'
|
||||||
import {moderateProfile} from '@atproto/api'
|
|
||||||
|
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {useMaybeProfileShadow} from '#/state/cache/profile-shadow'
|
import {useMaybeProfileShadow} from '#/state/cache/profile-shadow'
|
||||||
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
||||||
import {useSession} from '#/state/session'
|
import {useSession} from '#/state/session'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {moderateProfile} from '@atproto/api'
|
|
||||||
|
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {logger} from '#/logger'
|
import {logger} from '#/logger'
|
||||||
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
||||||
import {useProfilesQuery} from '#/state/queries/profile'
|
import {useProfilesQuery} from '#/state/queries/profile'
|
||||||
|
|||||||
@@ -1,12 +1,10 @@
|
|||||||
import {useRef} from 'react'
|
import {useRef} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {
|
import {type AppBskyActorDefs} from '@atproto/api'
|
||||||
type AppBskyActorDefs,
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
moderateProfile,
|
|
||||||
type ModerationOpts,
|
|
||||||
} from '@atproto/api'
|
|
||||||
import {Plural, Trans, useLingui} from '@lingui/react/macro'
|
import {Plural, Trans, useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {makeProfileLink} from '#/lib/routes/links'
|
import {makeProfileLink} from '#/lib/routes/links'
|
||||||
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
||||||
import {UserAvatar} from '#/view/com/util/UserAvatar'
|
import {UserAvatar} from '#/view/com/util/UserAvatar'
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {type AppBskyLabelerDefs} from '@atproto/api'
|
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Plural, Trans} from '@lingui/react/macro'
|
import {Plural, Trans} from '@lingui/react/macro'
|
||||||
@@ -13,10 +12,11 @@ import {Flag_Stroke2_Corner0_Rounded as Flag} from '#/components/icons/Flag'
|
|||||||
import {Link as InternalLink, type LinkProps} from '#/components/Link'
|
import {Link as InternalLink, type LinkProps} from '#/components/Link'
|
||||||
import {RichText} from '#/components/RichText'
|
import {RichText} from '#/components/RichText'
|
||||||
import {Text} from '#/components/Typography'
|
import {Text} from '#/components/Typography'
|
||||||
|
import {type app} from '#/lexicons'
|
||||||
import {ChevronRight_Stroke2_Corner0_Rounded as ChevronRight} from '../icons/Chevron'
|
import {ChevronRight_Stroke2_Corner0_Rounded as ChevronRight} from '../icons/Chevron'
|
||||||
|
|
||||||
type LabelingServiceProps = {
|
type LabelingServiceProps = {
|
||||||
labeler: AppBskyLabelerDefs.LabelerViewDetailed
|
labeler: app.bsky.labeler.defs.LabelerViewDetailed
|
||||||
}
|
}
|
||||||
|
|
||||||
export function Outer({
|
export function Outer({
|
||||||
@@ -187,7 +187,7 @@ export function Loader({
|
|||||||
loading?: React.ComponentType<{}>
|
loading?: React.ComponentType<{}>
|
||||||
error?: React.ComponentType<{error: string}>
|
error?: React.ComponentType<{error: string}>
|
||||||
component: React.ComponentType<{
|
component: React.ComponentType<{
|
||||||
labeler: AppBskyLabelerDefs.LabelerViewDetailed
|
labeler: app.bsky.labeler.defs.LabelerViewDetailed
|
||||||
}>
|
}>
|
||||||
}) {
|
}) {
|
||||||
const {isLoading, data, error} = useLabelerInfoQuery({did})
|
const {isLoading, data, error} = useLabelerInfoQuery({did})
|
||||||
|
|||||||
@@ -1,16 +1,13 @@
|
|||||||
import {useEffect, useMemo} from 'react'
|
import {useEffect, useMemo} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {
|
import {type AppBskyGraphDefs, AtUri} from '@atproto/api'
|
||||||
type AppBskyGraphDefs,
|
import {type ModerationUI} from '@bsky.app/sdk/moderation'
|
||||||
AtUri,
|
|
||||||
moderateUserList,
|
|
||||||
type ModerationUI,
|
|
||||||
} from '@atproto/api'
|
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
import {useQueryClient} from '@tanstack/react-query'
|
import {useQueryClient} from '@tanstack/react-query'
|
||||||
|
|
||||||
|
import {moderateUserList} from '#/lib/moderation/subjects'
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
||||||
import {precacheList} from '#/state/queries/feed'
|
import {precacheList} from '#/state/queries/feed'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import {useMemo, useState} from 'react'
|
import {useMemo, useState} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {type AppBskyActorDefs, moderateProfile} from '@atproto/api'
|
import {type AppBskyActorDefs} from '@atproto/api'
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
@@ -8,6 +8,7 @@ import {differenceInSeconds} from 'date-fns'
|
|||||||
|
|
||||||
import {HITSLOP_10} from '#/lib/constants'
|
import {HITSLOP_10} from '#/lib/constants'
|
||||||
import {useGetTimeAgo} from '#/lib/hooks/useTimeAgo'
|
import {useGetTimeAgo} from '#/lib/hooks/useTimeAgo'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
||||||
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
||||||
import {useSession} from '#/state/session'
|
import {useSession} from '#/state/session'
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import {useMemo} from 'react'
|
import {useMemo} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {BSKY_LABELER_DID, type ModerationCause} from '@atproto/api'
|
import {BSKY_LABELER_DID} from '@atproto/api'
|
||||||
|
import {type ModerationCause} from '@bsky.app/sdk/moderation'
|
||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {Trans, useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {useModerationCauseDescription} from '#/lib/moderation/useModerationCauseDescription'
|
import {useModerationCauseDescription} from '#/lib/moderation/useModerationCauseDescription'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import {useMemo} from 'react'
|
import {useMemo} from 'react'
|
||||||
import {moderateFeedGenerator} from '@atproto/api'
|
|
||||||
|
|
||||||
|
import {moderateFeedGenerator} from '#/lib/moderation/subjects'
|
||||||
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
||||||
import {atoms as a, useTheme} from '#/alf'
|
import {atoms as a, useTheme} from '#/alf'
|
||||||
import * as FeedCard from '#/components/FeedCard'
|
import * as FeedCard from '#/components/FeedCard'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import {useMemo} from 'react'
|
import {useMemo} from 'react'
|
||||||
import {moderateUserList} from '@atproto/api'
|
|
||||||
|
|
||||||
|
import {moderateUserList} from '#/lib/moderation/subjects'
|
||||||
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
||||||
import {atoms as a, useTheme} from '#/alf'
|
import {atoms as a, useTheme} from '#/alf'
|
||||||
import * as ListCard from '#/components/ListCard'
|
import * as ListCard from '#/components/ListCard'
|
||||||
|
|||||||
@@ -5,12 +5,12 @@ import {
|
|||||||
type AppBskyFeedDefs,
|
type AppBskyFeedDefs,
|
||||||
AppBskyFeedPost,
|
AppBskyFeedPost,
|
||||||
AtUri,
|
AtUri,
|
||||||
moderatePost,
|
|
||||||
} from '@atproto/api'
|
} from '@atproto/api'
|
||||||
import {RichText as RichTextAPI} from '@bsky.app/sdk/richtext'
|
import {RichText as RichTextAPI} from '@bsky.app/sdk/richtext'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
import {useQueryClient} from '@tanstack/react-query'
|
import {useQueryClient} from '@tanstack/react-query'
|
||||||
|
|
||||||
|
import {moderatePost} from '#/lib/moderation/subjects'
|
||||||
import {makeProfileLink} from '#/lib/routes/links'
|
import {makeProfileLink} from '#/lib/routes/links'
|
||||||
import {asSdkFacets} from '#/lib/strings/rich-text-helpers'
|
import {asSdkFacets} from '#/lib/strings/rich-text-helpers'
|
||||||
import {getChatInviteCodeFromUrl} from '#/lib/strings/url-helpers'
|
import {getChatInviteCodeFromUrl} from '#/lib/strings/url-helpers'
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import {type StyleProp, type ViewStyle} from 'react-native'
|
import {type StyleProp, type ViewStyle} from 'react-native'
|
||||||
import {type AppBskyFeedDefs, type ModerationDecision} from '@atproto/api'
|
import {type AppBskyFeedDefs} from '@atproto/api'
|
||||||
|
import {type ModerationDecision} from '@bsky.app/sdk/moderation'
|
||||||
|
|
||||||
export enum PostEmbedViewContext {
|
export enum PostEmbedViewContext {
|
||||||
ThreadHighlighted = 'ThreadHighlighted',
|
ThreadHighlighted = 'ThreadHighlighted',
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
import {ScrollView, View} from 'react-native'
|
import {ScrollView, View} from 'react-native'
|
||||||
import {
|
import {type ChatBskyActorDefs} from '@atproto/api'
|
||||||
type ChatBskyActorDefs,
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
moderateProfile,
|
|
||||||
type ModerationOpts,
|
|
||||||
} from '@atproto/api'
|
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
@@ -11,6 +8,7 @@ import {useNavigation} from '@react-navigation/native'
|
|||||||
|
|
||||||
import {isBlockedOrBlocking, isMuted} from '#/lib/moderation/blocked-and-muted'
|
import {isBlockedOrBlocking, isMuted} from '#/lib/moderation/blocked-and-muted'
|
||||||
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {type NavigationProp} from '#/lib/routes/types'
|
import {type NavigationProp} from '#/lib/routes/types'
|
||||||
import {useProfileShadow} from '#/state/cache/profile-shadow'
|
import {useProfileShadow} from '#/state/cache/profile-shadow'
|
||||||
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
||||||
|
|||||||
@@ -6,11 +6,12 @@ import {
|
|||||||
View,
|
View,
|
||||||
type ViewStyle,
|
type ViewStyle,
|
||||||
} from 'react-native'
|
} from 'react-native'
|
||||||
import {moderateProfile, type ModerationOpts} from '@atproto/api'
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {RichText as RichTextApi} from '@bsky.app/sdk/richtext'
|
import {RichText as RichTextApi} from '@bsky.app/sdk/richtext'
|
||||||
import {useLingui} from '@lingui/react/macro'
|
import {useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {getModerationCauseKey} from '#/lib/moderation'
|
import {getModerationCauseKey} from '#/lib/moderation'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {makeProfileLink} from '#/lib/routes/links'
|
import {makeProfileLink} from '#/lib/routes/links'
|
||||||
import {forceLTR} from '#/lib/strings/bidi'
|
import {forceLTR} from '#/lib/strings/bidi'
|
||||||
import {NON_BREAKING_SPACE} from '#/lib/strings/constants'
|
import {NON_BREAKING_SPACE} from '#/lib/strings/constants'
|
||||||
|
|||||||
@@ -1,16 +1,14 @@
|
|||||||
import {memo, useCallback, useEffect, useMemo, useReducer, useRef} from 'react'
|
import {memo, useCallback, useEffect, useMemo, useReducer, useRef} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {
|
import {type AppBskyActorDefs} from '@atproto/api'
|
||||||
type AppBskyActorDefs,
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
moderateProfile,
|
|
||||||
type ModerationOpts,
|
|
||||||
} from '@atproto/api'
|
|
||||||
import {flip, offset, shift, size, useFloating} from '@floating-ui/react-dom'
|
import {flip, offset, shift, size, useFloating} from '@floating-ui/react-dom'
|
||||||
import {msg, plural} from '@lingui/core/macro'
|
import {msg, plural} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {useNavigation} from '@react-navigation/native'
|
import {useNavigation} from '@react-navigation/native'
|
||||||
|
|
||||||
import {getModerationCauseKey} from '#/lib/moderation'
|
import {getModerationCauseKey} from '#/lib/moderation'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {makeProfileLink} from '#/lib/routes/links'
|
import {makeProfileLink} from '#/lib/routes/links'
|
||||||
import {type NavigationProp} from '#/lib/routes/types'
|
import {type NavigationProp} from '#/lib/routes/types'
|
||||||
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import {memo, useCallback, useEffect, useMemo, useRef, useState} from 'react'
|
import {memo, useCallback, useEffect, useMemo, useRef, useState} from 'react'
|
||||||
import {TextInput, View, type ViewToken} from 'react-native'
|
import {TextInput, View, type ViewToken} from 'react-native'
|
||||||
import {type ModerationOpts} from '@atproto/api'
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {Trans, useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback'
|
import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback'
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ import {
|
|||||||
type AppBskyActorDefs,
|
type AppBskyActorDefs,
|
||||||
type AppBskyGraphGetList,
|
type AppBskyGraphGetList,
|
||||||
AtUri,
|
AtUri,
|
||||||
type ModerationOpts,
|
|
||||||
} from '@atproto/api'
|
} from '@atproto/api'
|
||||||
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {
|
import {
|
||||||
type InfiniteData,
|
type InfiniteData,
|
||||||
type UseInfiniteQueryResult,
|
type UseInfiniteQueryResult,
|
||||||
|
|||||||
@@ -1,11 +1,8 @@
|
|||||||
import {useRef} from 'react'
|
import {useRef} from 'react'
|
||||||
import {type ListRenderItemInfo} from 'react-native'
|
import {type ListRenderItemInfo} from 'react-native'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {
|
import {type AppBskyActorDefs, type AppBskyFeedDefs} from '@atproto/api'
|
||||||
type AppBskyActorDefs,
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
type AppBskyFeedDefs,
|
|
||||||
type ModerationOpts,
|
|
||||||
} from '@atproto/api'
|
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
|
|||||||
@@ -1,17 +1,12 @@
|
|||||||
import {Keyboard, View} from 'react-native'
|
import {Keyboard, View} from 'react-native'
|
||||||
import {
|
import {type AppBskyActorDefs, type AppBskyFeedDefs} from '@atproto/api'
|
||||||
type AppBskyActorDefs,
|
import {type ModerationOpts, type ModerationUI} from '@bsky.app/sdk/moderation'
|
||||||
type AppBskyFeedDefs,
|
|
||||||
moderateFeedGenerator,
|
|
||||||
moderateProfile,
|
|
||||||
type ModerationOpts,
|
|
||||||
type ModerationUI,
|
|
||||||
} from '@atproto/api'
|
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {DISCOVER_FEED_URI, STARTER_PACK_MAX_SIZE} from '#/lib/constants'
|
import {DISCOVER_FEED_URI, STARTER_PACK_MAX_SIZE} from '#/lib/constants'
|
||||||
|
import {moderateFeedGenerator, moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
import {useSession} from '#/state/session'
|
import {useSession} from '#/state/session'
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import {
|
|||||||
AppBskyEmbedVideo,
|
AppBskyEmbedVideo,
|
||||||
type AppBskyFeedDefs,
|
type AppBskyFeedDefs,
|
||||||
AppBskyFeedPost,
|
AppBskyFeedPost,
|
||||||
type ModerationDecision,
|
|
||||||
} from '@atproto/api'
|
} from '@atproto/api'
|
||||||
|
import {type ModerationDecision} from '@bsky.app/sdk/moderation'
|
||||||
import {useLingui} from '@lingui/react/macro'
|
import {useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import {useCallback, useEffect, useState} from 'react'
|
import {useCallback, useEffect, useState} from 'react'
|
||||||
import {type ModerationOpts} from '@atproto/api'
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {Trans, useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {useRequireEmailVerification} from '#/lib/hooks/useRequireEmailVerification'
|
import {useRequireEmailVerification} from '#/lib/hooks/useRequireEmailVerification'
|
||||||
|
|||||||
@@ -1,11 +1,8 @@
|
|||||||
import {useMemo, useState} from 'react'
|
import {useMemo, useState} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {
|
import {type AppBskyNotificationDefs, type Un$Typed} from '@atproto/api'
|
||||||
type AppBskyNotificationDefs,
|
|
||||||
type ModerationOpts,
|
|
||||||
type Un$Typed,
|
|
||||||
} from '@atproto/api'
|
|
||||||
import {type DidString} from '@atproto/syntax'
|
import {type DidString} from '@atproto/syntax'
|
||||||
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ import {useCallback, useMemo, useRef, useState} from 'react'
|
|||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {useSafeAreaInsets} from 'react-native-safe-area-context'
|
import {useSafeAreaInsets} from 'react-native-safe-area-context'
|
||||||
import * as SMS from 'expo-sms'
|
import * as SMS from 'expo-sms'
|
||||||
import {type ModerationOpts} from '@atproto/api'
|
|
||||||
import {type DidString} from '@atproto/syntax'
|
import {type DidString} from '@atproto/syntax'
|
||||||
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Plural, Trans} from '@lingui/react/macro'
|
import {Plural, Trans} from '@lingui/react/macro'
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import {useCallback, useState} from 'react'
|
import {useCallback, useState} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {type AppBskyActorDefs, sanitizeMutedWordValue} from '@atproto/api'
|
import {type DatetimeString, toDatetimeString} from '@atproto/syntax'
|
||||||
|
import {sanitizeMutedWordValue} from '@bsky.app/sdk/utils'
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
@@ -35,6 +36,7 @@ import * as Menu from '#/components/Menu'
|
|||||||
import * as Prompt from '#/components/Prompt'
|
import * as Prompt from '#/components/Prompt'
|
||||||
import {Text} from '#/components/Typography'
|
import {Text} from '#/components/Typography'
|
||||||
import {IS_NATIVE} from '#/env'
|
import {IS_NATIVE} from '#/env'
|
||||||
|
import {type app} from '#/lexicons'
|
||||||
|
|
||||||
const ONE_DAY = 24 * 60 * 60 * 1000
|
const ONE_DAY = 24 * 60 * 60 * 1000
|
||||||
|
|
||||||
@@ -68,20 +70,20 @@ function MutedWordsInner() {
|
|||||||
const sanitizedValue = sanitizeMutedWordValue(field)
|
const sanitizedValue = sanitizeMutedWordValue(field)
|
||||||
const surfaces = ['tag', targets.includes('content') && 'content'].filter(
|
const surfaces = ['tag', targets.includes('content') && 'content'].filter(
|
||||||
Boolean,
|
Boolean,
|
||||||
) as AppBskyActorDefs.MutedWord['targets']
|
) as app.bsky.actor.defs.MutedWord['targets']
|
||||||
const actorTarget = excludeFollowing ? 'exclude-following' : 'all'
|
const actorTarget = excludeFollowing ? 'exclude-following' : 'all'
|
||||||
|
|
||||||
const now = Date.now()
|
const now = Date.now()
|
||||||
const rawDuration = durations.at(0)
|
const rawDuration = durations.at(0)
|
||||||
// undefined evaluates to 'forever'
|
// undefined evaluates to 'forever'
|
||||||
let duration: string | undefined
|
let duration: DatetimeString | undefined
|
||||||
|
|
||||||
if (rawDuration === '24_hours') {
|
if (rawDuration === '24_hours') {
|
||||||
duration = new Date(now + ONE_DAY).toISOString()
|
duration = toDatetimeString(new Date(now + ONE_DAY))
|
||||||
} else if (rawDuration === '7_days') {
|
} else if (rawDuration === '7_days') {
|
||||||
duration = new Date(now + 7 * ONE_DAY).toISOString()
|
duration = toDatetimeString(new Date(now + 7 * ONE_DAY))
|
||||||
} else if (rawDuration === '30_days') {
|
} else if (rawDuration === '30_days') {
|
||||||
duration = new Date(now + 30 * ONE_DAY).toISOString()
|
duration = toDatetimeString(new Date(now + 30 * ONE_DAY))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!sanitizedValue || !surfaces.length) {
|
if (!sanitizedValue || !surfaces.length) {
|
||||||
@@ -421,7 +423,7 @@ function MutedWordsInner() {
|
|||||||
function MutedWordRow({
|
function MutedWordRow({
|
||||||
style,
|
style,
|
||||||
word,
|
word,
|
||||||
}: ViewStyleProp & {word: AppBskyActorDefs.MutedWord}) {
|
}: ViewStyleProp & {word: app.bsky.actor.defs.MutedWord}) {
|
||||||
const t = useTheme()
|
const t = useTheme()
|
||||||
const {_} = useLingui()
|
const {_} = useLingui()
|
||||||
const {isPending, mutateAsync: removeMutedWord} = useRemoveMutedWordMutation()
|
const {isPending, mutateAsync: removeMutedWord} = useRemoveMutedWordMutation()
|
||||||
@@ -440,7 +442,7 @@ function MutedWordRow({
|
|||||||
updateMutedWord({
|
updateMutedWord({
|
||||||
...word,
|
...word,
|
||||||
expiresAt: days
|
expiresAt: days
|
||||||
? new Date(Date.now() + days * ONE_DAY).toISOString()
|
? toDatetimeString(new Date(Date.now() + days * ONE_DAY))
|
||||||
: undefined,
|
: undefined,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,10 +7,11 @@ import {
|
|||||||
useState,
|
useState,
|
||||||
} from 'react'
|
} from 'react'
|
||||||
import {TextInput, View} from 'react-native'
|
import {TextInput, View} from 'react-native'
|
||||||
import {moderateProfile, type ModerationOpts} from '@atproto/api'
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {Plural, Trans, useLingui} from '@lingui/react/macro'
|
import {Plural, Trans, useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
||||||
import {useActorAutocompleteQuery} from '#/state/queries/actor-autocomplete'
|
import {useActorAutocompleteQuery} from '#/state/queries/actor-autocomplete'
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import {useCallback, useMemo} from 'react'
|
import {useCallback, useMemo} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {type AppBskyGraphDefs, type ModerationOpts} from '@atproto/api'
|
import {type AppBskyGraphDefs} from '@atproto/api'
|
||||||
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {type ChatBskyConvoDefs, type ModerationOpts} from '@atproto/api'
|
import {type ChatBskyConvoDefs} from '@atproto/api'
|
||||||
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {useLingui} from '@lingui/react/macro'
|
import {useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {MessageContextMenu} from '#/components/dms/MessageContextMenu'
|
import {MessageContextMenu} from '#/components/dms/MessageContextMenu'
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import {useCallback, useRef, useState} from 'react'
|
import {useCallback, useRef, useState} from 'react'
|
||||||
import {Pressable, View} from 'react-native'
|
import {Pressable, View} from 'react-native'
|
||||||
import {type ChatBskyConvoDefs, type ModerationOpts} from '@atproto/api'
|
import {type ChatBskyConvoDefs} from '@atproto/api'
|
||||||
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {plural} from '@lingui/core/macro'
|
import {plural} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react/macro'
|
import {useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import {Fragment} from 'react'
|
import {Fragment} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {type ModerationCause} from '@atproto/api'
|
import {type ModerationCause} from '@bsky.app/sdk/moderation'
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import {useCallback, useEffect} from 'react'
|
import {useCallback, useEffect} from 'react'
|
||||||
import {type ScrollView, View} from 'react-native'
|
import {type ScrollView, View} from 'react-native'
|
||||||
import Animated, {useAnimatedRef, useSharedValue} from 'react-native-reanimated'
|
import Animated, {useAnimatedRef, useSharedValue} from 'react-native-reanimated'
|
||||||
import {moderateProfile} from '@atproto/api'
|
|
||||||
import {useLingui} from '@lingui/react/macro'
|
import {useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {HITSLOP_10} from '#/lib/constants'
|
import {HITSLOP_10} from '#/lib/constants'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import {memo, useCallback} from 'react'
|
import {memo, useCallback} from 'react'
|
||||||
import {Keyboard, View} from 'react-native'
|
import {Keyboard, View} from 'react-native'
|
||||||
import {type ModerationCause} from '@atproto/api'
|
import {type ModerationCause} from '@bsky.app/sdk/moderation'
|
||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {Trans, useLingui} from '@lingui/react/macro'
|
||||||
import {useNavigation} from '@react-navigation/native'
|
import {useNavigation} from '@react-navigation/native'
|
||||||
import {useQueryClient} from '@tanstack/react-query'
|
import {useQueryClient} from '@tanstack/react-query'
|
||||||
|
|||||||
@@ -7,11 +7,12 @@ import {
|
|||||||
useState,
|
useState,
|
||||||
} from 'react'
|
} from 'react'
|
||||||
import {LayoutAnimation, type TextInput, View} from 'react-native'
|
import {LayoutAnimation, type TextInput, View} from 'react-native'
|
||||||
import {moderateProfile, type ModerationOpts} from '@atproto/api'
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {Plural, Trans, useLingui} from '@lingui/react/macro'
|
import {Plural, Trans, useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {MAX_GROUP_NAME_GRAPHEME_LENGTH} from '#/lib/constants'
|
import {MAX_GROUP_NAME_GRAPHEME_LENGTH} from '#/lib/constants'
|
||||||
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
import {isOverMaxGraphemeCount} from '#/lib/strings/helpers'
|
import {isOverMaxGraphemeCount} from '#/lib/strings/helpers'
|
||||||
|
|||||||
@@ -2,7 +2,8 @@ import {memo, useCallback} from 'react'
|
|||||||
import {Platform} from 'react-native'
|
import {Platform} from 'react-native'
|
||||||
import {type GestureType} from 'react-native-gesture-handler'
|
import {type GestureType} from 'react-native-gesture-handler'
|
||||||
import * as Clipboard from 'expo-clipboard'
|
import * as Clipboard from 'expo-clipboard'
|
||||||
import {type ChatBskyConvoDefs, type ModerationOpts} from '@atproto/api'
|
import {type ChatBskyConvoDefs} from '@atproto/api'
|
||||||
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {RichText} from '@bsky.app/sdk/richtext'
|
import {RichText} from '@bsky.app/sdk/richtext'
|
||||||
import {plural} from '@lingui/core/macro'
|
import {plural} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react/macro'
|
import {useLingui} from '@lingui/react/macro'
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ import {
|
|||||||
type ChatBskyActorDefs,
|
type ChatBskyActorDefs,
|
||||||
ChatBskyConvoDefs,
|
ChatBskyConvoDefs,
|
||||||
ChatBskyEmbedJoinLink,
|
ChatBskyEmbedJoinLink,
|
||||||
moderateProfile,
|
|
||||||
} from '@atproto/api'
|
} from '@atproto/api'
|
||||||
import {RichText as RichTextAPI} from '@bsky.app/sdk/richtext'
|
import {RichText as RichTextAPI} from '@bsky.app/sdk/richtext'
|
||||||
import {plural} from '@lingui/core/macro'
|
import {plural} from '@lingui/core/macro'
|
||||||
@@ -36,6 +35,7 @@ import {useQueryClient} from '@tanstack/react-query'
|
|||||||
|
|
||||||
import {isBlockedOrBlocking} from '#/lib/moderation/blocked-and-muted'
|
import {isBlockedOrBlocking} from '#/lib/moderation/blocked-and-muted'
|
||||||
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
import {asSdkFacets} from '#/lib/strings/rich-text-helpers'
|
import {asSdkFacets} from '#/lib/strings/rich-text-helpers'
|
||||||
import {useMaybeProfileShadow} from '#/state/cache/profile-shadow'
|
import {useMaybeProfileShadow} from '#/state/cache/profile-shadow'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import {useCallback, useMemo} from 'react'
|
import {useCallback, useMemo} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {type ModerationDecision} from '@atproto/api'
|
import {type ModerationDecision} from '@bsky.app/sdk/moderation'
|
||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {Trans, useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {useProfileShadow} from '#/state/cache/profile-shadow'
|
import {useProfileShadow} from '#/state/cache/profile-shadow'
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
import {useMemo} from 'react'
|
import {useMemo} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {moderateProfile, type ModerationOpts} from '@atproto/api'
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {useLingui} from '@lingui/react/macro'
|
import {useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {makeProfileLink} from '#/lib/routes/links'
|
import {makeProfileLink} from '#/lib/routes/links'
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
import {useProfileShadow} from '#/state/cache/profile-shadow'
|
import {useProfileShadow} from '#/state/cache/profile-shadow'
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {moderateProfile, type ModerationOpts} from '@atproto/api'
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
|
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
import {atoms as a, useTheme} from '#/alf'
|
import {atoms as a, useTheme} from '#/alf'
|
||||||
|
|||||||
@@ -1,13 +1,9 @@
|
|||||||
import {
|
import {type $Typed, ChatBskyActorDefs, ChatBskyConvoDefs} from '@atproto/api'
|
||||||
type $Typed,
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
ChatBskyActorDefs,
|
|
||||||
ChatBskyConvoDefs,
|
|
||||||
moderateProfile,
|
|
||||||
type ModerationOpts,
|
|
||||||
} from '@atproto/api'
|
|
||||||
|
|
||||||
import {EMOJI_REACTION_LIMIT} from '#/lib/constants'
|
import {EMOJI_REACTION_LIMIT} from '#/lib/constants'
|
||||||
import {isBlockedOrBlocking} from '#/lib/moderation/blocked-and-muted'
|
import {isBlockedOrBlocking} from '#/lib/moderation/blocked-and-muted'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {logger} from '#/logger'
|
import {logger} from '#/logger'
|
||||||
import {type Shadow} from '#/state/cache/profile-shadow'
|
import {type Shadow} from '#/state/cache/profile-shadow'
|
||||||
import {type ConvoState, ConvoStatus} from '#/state/messages/convo/types'
|
import {type ConvoState, ConvoStatus} from '#/state/messages/convo/types'
|
||||||
|
|||||||
@@ -4,9 +4,8 @@ import {
|
|||||||
AppBskyEmbedRecordWithMedia,
|
AppBskyEmbedRecordWithMedia,
|
||||||
type AppBskyFeedDefs,
|
type AppBskyFeedDefs,
|
||||||
AppBskyFeedPost,
|
AppBskyFeedPost,
|
||||||
type ModerationCause,
|
|
||||||
type ModerationUI,
|
|
||||||
} from '@atproto/api'
|
} from '@atproto/api'
|
||||||
|
import {type ModerationCause, type ModerationUI} from '@bsky.app/sdk/moderation'
|
||||||
|
|
||||||
import {unique} from '#/lib/moderation'
|
import {unique} from '#/lib/moderation'
|
||||||
import {type AppModerationCause} from '#/components/Pills'
|
import {type AppModerationCause} from '#/components/Pills'
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
import {useEffect} from 'react'
|
import {useEffect} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {ChatBskyGroupDefs, moderateProfile} from '@atproto/api'
|
import {ChatBskyGroupDefs} from '@atproto/api'
|
||||||
import {Plural, Trans, useLingui} from '@lingui/react/macro'
|
import {Plural, Trans, useLingui} from '@lingui/react/macro'
|
||||||
import {useNavigation} from '@react-navigation/native'
|
import {useNavigation} from '@react-navigation/native'
|
||||||
import {useQueryClient} from '@tanstack/react-query'
|
import {useQueryClient} from '@tanstack/react-query'
|
||||||
|
|
||||||
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {useCallOnce} from '#/lib/once'
|
import {useCallOnce} from '#/lib/once'
|
||||||
import {makeProfileLink} from '#/lib/routes/links'
|
import {makeProfileLink} from '#/lib/routes/links'
|
||||||
import {type NavigationProp} from '#/lib/routes/types'
|
import {type NavigationProp} from '#/lib/routes/types'
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
import {useMemo} from 'react'
|
import {useMemo} from 'react'
|
||||||
import {Pressable, View} from 'react-native'
|
import {Pressable, View} from 'react-native'
|
||||||
import {type AppBskyUnspeccedDefs, moderateProfile} from '@atproto/api'
|
import {type AppBskyUnspeccedDefs} from '@atproto/api'
|
||||||
import {Plural, Trans, useLingui} from '@lingui/react/macro'
|
import {Plural, Trans, useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
||||||
import {
|
import {
|
||||||
useTrendingSettings,
|
useTrendingSettings,
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import {
|
|||||||
View,
|
View,
|
||||||
type ViewStyle,
|
type ViewStyle,
|
||||||
} from 'react-native'
|
} from 'react-native'
|
||||||
import {type ModerationUI} from '@atproto/api'
|
import {type ModerationUI} from '@bsky.app/sdk/moderation'
|
||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {Trans, useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import {createContext, useContext, useState} from 'react'
|
import {createContext, useContext, useState} from 'react'
|
||||||
import {type ModerationUI} from '@atproto/api'
|
import {type ModerationUI} from '@bsky.app/sdk/moderation'
|
||||||
|
|
||||||
import {
|
import {
|
||||||
type ModerationCauseDescription,
|
type ModerationCauseDescription,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import {View} from 'react-native'
|
|||||||
import {
|
import {
|
||||||
type InterpretedLabelValueDefinition,
|
type InterpretedLabelValueDefinition,
|
||||||
type LabelPreference,
|
type LabelPreference,
|
||||||
} from '@atproto/api'
|
} from '@bsky.app/sdk/moderation'
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import {useState} from 'react'
|
import {useState} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {type ModerationCause} from '@atproto/api'
|
import {type ModerationCause} from '@bsky.app/sdk/moderation'
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
|
|||||||
@@ -1,10 +1,6 @@
|
|||||||
import {type StyleProp, View, type ViewStyle} from 'react-native'
|
import {type StyleProp, View, type ViewStyle} from 'react-native'
|
||||||
import {
|
import {type AppBskyFeedDefs, type ComAtprotoLabelDefs} from '@atproto/api'
|
||||||
type AppBskyFeedDefs,
|
import {type ModerationCause, type ModerationUI} from '@bsky.app/sdk/moderation'
|
||||||
type ComAtprotoLabelDefs,
|
|
||||||
type ModerationCause,
|
|
||||||
type ModerationUI,
|
|
||||||
} from '@atproto/api'
|
|
||||||
import {plural} from '@lingui/core/macro'
|
import {plural} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react/macro'
|
import {useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
|
|||||||
@@ -7,11 +7,8 @@ import {
|
|||||||
View,
|
View,
|
||||||
type ViewStyle,
|
type ViewStyle,
|
||||||
} from 'react-native'
|
} from 'react-native'
|
||||||
import {
|
import {type AppBskyActorDefs} from '@atproto/api'
|
||||||
type AppBskyActorDefs,
|
import {type ModerationCause, type ModerationUI} from '@bsky.app/sdk/moderation'
|
||||||
type ModerationCause,
|
|
||||||
type ModerationUI,
|
|
||||||
} from '@atproto/api'
|
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import {type StyleProp, type ViewStyle} from 'react-native'
|
import {type StyleProp, type ViewStyle} from 'react-native'
|
||||||
import {type ModerationDecision} from '@atproto/api'
|
import {type ModerationDecision} from '@bsky.app/sdk/moderation'
|
||||||
|
|
||||||
import {getModerationCauseKey, unique} from '#/lib/moderation'
|
import {getModerationCauseKey, unique} from '#/lib/moderation'
|
||||||
import * as Pills from '#/components/Pills'
|
import * as Pills from '#/components/Pills'
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ export function useSubmitReportMutation() {
|
|||||||
* the proxy target is built per call from that labeler's creator did.
|
* the proxy target is built per call from that labeler's creator did.
|
||||||
*/
|
*/
|
||||||
await client.call(com.atproto.moderation.createReport, report, {
|
await client.call(com.atproto.moderation.createReport, report, {
|
||||||
service: `${labeler.creator.did as DidString}#atproto_labeler`,
|
service: `${labeler.creator.did}#atproto_labeler`,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import {
|
|||||||
useState,
|
useState,
|
||||||
} from 'react'
|
} from 'react'
|
||||||
import {Pressable, type ScrollView, View} from 'react-native'
|
import {Pressable, type ScrollView, View} from 'react-native'
|
||||||
import {type AppBskyLabelerDefs, BSKY_LABELER_DID} from '@atproto/api'
|
import {BSKY_LABELER_DID} from '@atproto/api'
|
||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {Trans, useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {wait} from '#/lib/async/wait'
|
import {wait} from '#/lib/async/wait'
|
||||||
@@ -38,6 +38,7 @@ import {Loader} from '#/components/Loader'
|
|||||||
import {Text} from '#/components/Typography'
|
import {Text} from '#/components/Typography'
|
||||||
import {useAnalytics} from '#/analytics'
|
import {useAnalytics} from '#/analytics'
|
||||||
import {IS_NATIVE} from '#/env'
|
import {IS_NATIVE} from '#/env'
|
||||||
|
import {type app} from '#/lexicons'
|
||||||
import {useSubmitReportMutation} from './action'
|
import {useSubmitReportMutation} from './action'
|
||||||
import {
|
import {
|
||||||
BSKY_LABELER_ONLY_REPORT_REASONS,
|
BSKY_LABELER_ONLY_REPORT_REASONS,
|
||||||
@@ -1045,8 +1046,8 @@ function LabelerCard({
|
|||||||
labeler,
|
labeler,
|
||||||
onSelect,
|
onSelect,
|
||||||
}: {
|
}: {
|
||||||
labeler: AppBskyLabelerDefs.LabelerViewDetailed
|
labeler: app.bsky.labeler.defs.LabelerViewDetailed
|
||||||
onSelect?: (option: AppBskyLabelerDefs.LabelerViewDetailed) => void
|
onSelect?: (option: app.bsky.labeler.defs.LabelerViewDetailed) => void
|
||||||
}) {
|
}) {
|
||||||
const t = useTheme()
|
const t = useTheme()
|
||||||
const {t: l} = useLingui()
|
const {t: l} = useLingui()
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
import {
|
import {ToolsOzoneReportDefs as OzoneReportDefs} from '@atproto/api'
|
||||||
type AppBskyLabelerDefs,
|
|
||||||
ToolsOzoneReportDefs as OzoneReportDefs,
|
|
||||||
} from '@atproto/api'
|
|
||||||
|
|
||||||
|
import {type app} from '#/lexicons'
|
||||||
import {
|
import {
|
||||||
getNciiQualificationOutcome,
|
getNciiQualificationOutcome,
|
||||||
initialState,
|
initialState,
|
||||||
@@ -83,7 +81,7 @@ describe('reducer NCII qualification', () => {
|
|||||||
let state = selectNciiOption()
|
let state = selectNciiOption()
|
||||||
state = reducer(state, {
|
state = reducer(state, {
|
||||||
type: 'selectLabeler',
|
type: 'selectLabeler',
|
||||||
labeler: {} as AppBskyLabelerDefs.LabelerViewDetailed,
|
labeler: {} as app.bsky.labeler.defs.LabelerViewDetailed,
|
||||||
})
|
})
|
||||||
expect(state.activeStepIndex1).toBe(2)
|
expect(state.activeStepIndex1).toBe(2)
|
||||||
})
|
})
|
||||||
@@ -92,7 +90,7 @@ describe('reducer NCII qualification', () => {
|
|||||||
let state = selectNciiOption()
|
let state = selectNciiOption()
|
||||||
state = reducer(state, {
|
state = reducer(state, {
|
||||||
type: 'selectLabeler',
|
type: 'selectLabeler',
|
||||||
labeler: {} as AppBskyLabelerDefs.LabelerViewDetailed,
|
labeler: {} as app.bsky.labeler.defs.LabelerViewDetailed,
|
||||||
})
|
})
|
||||||
state = reducer(state, {
|
state = reducer(state, {
|
||||||
type: 'answerNciiQuestion',
|
type: 'answerNciiQuestion',
|
||||||
@@ -110,7 +108,7 @@ describe('reducer NCII qualification', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
describe('reducer video timestamp', () => {
|
describe('reducer video timestamp', () => {
|
||||||
const labeler = {} as AppBskyLabelerDefs.LabelerViewDetailed
|
const labeler = {} as app.bsky.labeler.defs.LabelerViewDetailed
|
||||||
const opted: ReportState = {...initialState, includeVideoTimestamp: true}
|
const opted: ReportState = {...initialState, includeVideoTimestamp: true}
|
||||||
|
|
||||||
it('is off by default', () => {
|
it('is off by default', () => {
|
||||||
|
|||||||
@@ -1,13 +1,11 @@
|
|||||||
import {
|
import {ToolsOzoneReportDefs as OzoneReportDefs} from '@atproto/api'
|
||||||
type AppBskyLabelerDefs,
|
|
||||||
ToolsOzoneReportDefs as OzoneReportDefs,
|
|
||||||
} from '@atproto/api'
|
|
||||||
|
|
||||||
import {OTHER_REPORT_REASONS} from '#/components/moderation/ReportDialog/const'
|
import {OTHER_REPORT_REASONS} from '#/components/moderation/ReportDialog/const'
|
||||||
import {
|
import {
|
||||||
type ReportCategoryConfig,
|
type ReportCategoryConfig,
|
||||||
type ReportOption,
|
type ReportOption,
|
||||||
} from '#/components/moderation/ReportDialog/utils/useReportOptions'
|
} from '#/components/moderation/ReportDialog/utils/useReportOptions'
|
||||||
|
import {type app} from '#/lexicons'
|
||||||
|
|
||||||
export type NciiQualification = {
|
export type NciiQualification = {
|
||||||
isDepicted?: boolean
|
isDepicted?: boolean
|
||||||
@@ -16,7 +14,7 @@ export type NciiQualification = {
|
|||||||
export type ReportState = {
|
export type ReportState = {
|
||||||
selectedCategory?: ReportCategoryConfig
|
selectedCategory?: ReportCategoryConfig
|
||||||
selectedOption?: ReportOption
|
selectedOption?: ReportOption
|
||||||
selectedLabeler?: AppBskyLabelerDefs.LabelerViewDetailed
|
selectedLabeler?: app.bsky.labeler.defs.LabelerViewDetailed
|
||||||
details?: string
|
details?: string
|
||||||
detailsOpen: boolean
|
detailsOpen: boolean
|
||||||
activeStepIndex1: number
|
activeStepIndex1: number
|
||||||
@@ -71,7 +69,7 @@ export type ReportAction =
|
|||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
type: 'selectLabeler'
|
type: 'selectLabeler'
|
||||||
labeler: AppBskyLabelerDefs.LabelerViewDetailed
|
labeler: app.bsky.labeler.defs.LabelerViewDetailed
|
||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
type: 'clearLabeler'
|
type: 'clearLabeler'
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import {
|
|||||||
View,
|
View,
|
||||||
type ViewStyle,
|
type ViewStyle,
|
||||||
} from 'react-native'
|
} from 'react-native'
|
||||||
import {type ModerationUI} from '@atproto/api'
|
import {type ModerationUI} from '@bsky.app/sdk/moderation'
|
||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {Trans, useLingui} from '@lingui/react/macro'
|
||||||
import {useNavigation} from '@react-navigation/native'
|
import {useNavigation} from '@react-navigation/native'
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import {createContext, useContext, useMemo} from 'react'
|
import {createContext, useContext, useMemo} from 'react'
|
||||||
import {hasMutedWord} from '@atproto/api'
|
import {hasMutedWord} from '@bsky.app/sdk/moderation'
|
||||||
import {QueryClient, useQuery} from '@tanstack/react-query'
|
import {QueryClient, useQuery} from '@tanstack/react-query'
|
||||||
|
|
||||||
import {useOnAppStateChange} from '#/lib/appState'
|
import {useOnAppStateChange} from '#/lib/appState'
|
||||||
|
|||||||
@@ -1,16 +1,13 @@
|
|||||||
import {useCallback, useMemo} from 'react'
|
import {useCallback, useMemo} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {Image} from 'expo-image'
|
import {Image} from 'expo-image'
|
||||||
import {
|
import {type AppBskyActorDefs, type AppBskyEmbedExternal} from '@atproto/api'
|
||||||
type AppBskyActorDefs,
|
|
||||||
type AppBskyEmbedExternal,
|
|
||||||
moderateStatus,
|
|
||||||
} from '@atproto/api'
|
|
||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {Trans, useLingui} from '@lingui/react/macro'
|
||||||
import {useNavigation} from '@react-navigation/native'
|
import {useNavigation} from '@react-navigation/native'
|
||||||
import {useQueryClient} from '@tanstack/react-query'
|
import {useQueryClient} from '@tanstack/react-query'
|
||||||
|
|
||||||
import {useOpenLink} from '#/lib/hooks/useOpenLink'
|
import {useOpenLink} from '#/lib/hooks/useOpenLink'
|
||||||
|
import {moderateStatus} from '#/lib/moderation/subjects'
|
||||||
import {type NavigationProp} from '#/lib/routes/types'
|
import {type NavigationProp} from '#/lib/routes/types'
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
import {toNiceDomain} from '#/lib/strings/url-helpers'
|
import {toNiceDomain} from '#/lib/strings/url-helpers'
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import {
|
|||||||
type $Typed,
|
type $Typed,
|
||||||
type AppBskyActorDefs,
|
type AppBskyActorDefs,
|
||||||
AppBskyEmbedExternal,
|
AppBskyEmbedExternal,
|
||||||
moderateStatus,
|
|
||||||
} from '@atproto/api'
|
} from '@atproto/api'
|
||||||
import {retry} from '@atproto/common-web'
|
import {retry} from '@atproto/common-web'
|
||||||
import {type l} from '@atproto/lex'
|
import {type l} from '@atproto/lex'
|
||||||
@@ -16,6 +15,7 @@ import {isAfter, parseISO} from 'date-fns'
|
|||||||
import {uploadBlob} from '#/lib/api'
|
import {uploadBlob} from '#/lib/api'
|
||||||
import {imageToThumb} from '#/lib/api/resolve'
|
import {imageToThumb} from '#/lib/api/resolve'
|
||||||
import {getLinkMeta, type LinkMeta} from '#/lib/link-meta/link-meta'
|
import {getLinkMeta, type LinkMeta} from '#/lib/link-meta/link-meta'
|
||||||
|
import {moderateStatus} from '#/lib/moderation/subjects'
|
||||||
import {matchXrpcError} from '#/lib/xrpc-error'
|
import {matchXrpcError} from '#/lib/xrpc-error'
|
||||||
import {useAppConfig} from '#/state/appConfig'
|
import {useAppConfig} from '#/state/appConfig'
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -1,18 +1,17 @@
|
|||||||
import {useMemo} from 'react'
|
import {useMemo} from 'react'
|
||||||
|
import {AtpAgent, type ComAtprotoLabelDefs} from '@atproto/api'
|
||||||
import {
|
import {
|
||||||
type AppBskyLabelerDefs,
|
|
||||||
AtpAgent,
|
|
||||||
type ComAtprotoLabelDefs,
|
|
||||||
type InterpretedLabelValueDefinition,
|
type InterpretedLabelValueDefinition,
|
||||||
LABELS,
|
LABELS,
|
||||||
type ModerationCause,
|
type ModerationCause,
|
||||||
type ModerationOpts,
|
type ModerationOpts,
|
||||||
type ModerationUI,
|
type ModerationUI,
|
||||||
} from '@atproto/api'
|
} from '@bsky.app/sdk/moderation'
|
||||||
|
|
||||||
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
import {type AppModerationCause} from '#/components/Pills'
|
import {type AppModerationCause} from '#/components/Pills'
|
||||||
|
import {type app} from '#/lexicons'
|
||||||
|
|
||||||
export const ADULT_CONTENT_LABELS = ['sexual', 'nudity', 'porn'] as const
|
export const ADULT_CONTENT_LABELS = ['sexual', 'nudity', 'porn'] as const
|
||||||
export const OTHER_SELF_LABELS = ['graphic-media'] as const
|
export const OTHER_SELF_LABELS = ['graphic-media'] as const
|
||||||
@@ -102,8 +101,8 @@ export function lookupLabelValueDefinition(
|
|||||||
export function isAppLabeler(
|
export function isAppLabeler(
|
||||||
labeler:
|
labeler:
|
||||||
| string
|
| string
|
||||||
| AppBskyLabelerDefs.LabelerView
|
| app.bsky.labeler.defs.LabelerView
|
||||||
| AppBskyLabelerDefs.LabelerViewDetailed,
|
| app.bsky.labeler.defs.LabelerViewDetailed,
|
||||||
): boolean {
|
): boolean {
|
||||||
if (typeof labeler === 'string') {
|
if (typeof labeler === 'string') {
|
||||||
return AtpAgent.appLabelers.includes(labeler)
|
return AtpAgent.appLabelers.includes(labeler)
|
||||||
@@ -114,8 +113,8 @@ export function isAppLabeler(
|
|||||||
export function isLabelerSubscribed(
|
export function isLabelerSubscribed(
|
||||||
labeler:
|
labeler:
|
||||||
| string
|
| string
|
||||||
| AppBskyLabelerDefs.LabelerView
|
| app.bsky.labeler.defs.LabelerView
|
||||||
| AppBskyLabelerDefs.LabelerViewDetailed,
|
| app.bsky.labeler.defs.LabelerViewDetailed,
|
||||||
modOpts: ModerationOpts,
|
modOpts: ModerationOpts,
|
||||||
) {
|
) {
|
||||||
labeler = typeof labeler === 'string' ? labeler : labeler.creator.did
|
labeler = typeof labeler === 'string' ? labeler : labeler.creator.did
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import {type ModerationUI} from '@atproto/api'
|
import {type ModerationUI} from '@bsky.app/sdk/moderation'
|
||||||
|
|
||||||
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
|
|||||||
@@ -0,0 +1,133 @@
|
|||||||
|
import {
|
||||||
|
type AppBskyActorDefs,
|
||||||
|
type AppBskyFeedDefs,
|
||||||
|
type AppBskyGraphDefs,
|
||||||
|
type AppBskyNotificationListNotifications,
|
||||||
|
type AppBskyRichtextFacet,
|
||||||
|
type ChatBskyActorDefs,
|
||||||
|
} from '@atproto/api'
|
||||||
|
import {
|
||||||
|
hasMutedWord as sdkHasMutedWord,
|
||||||
|
moderateFeedGenerator as sdkModerateFeedGenerator,
|
||||||
|
moderateNotification as sdkModerateNotification,
|
||||||
|
moderatePost as sdkModeratePost,
|
||||||
|
moderateProfile as sdkModerateProfile,
|
||||||
|
moderateStatus as sdkModerateStatus,
|
||||||
|
moderateUserList as sdkModerateUserList,
|
||||||
|
type ModerationDecision,
|
||||||
|
type ModerationOpts,
|
||||||
|
} from '@bsky.app/sdk/moderation'
|
||||||
|
|
||||||
|
import {type app, type chat} from '#/lexicons'
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TRANSITIONAL. The moderation implementation now comes from
|
||||||
|
* `@bsky.app/sdk/moderation`, whose subject types are the generated
|
||||||
|
* `#/lexicons` views - so their `did`/`uri`/`cid` fields are branded
|
||||||
|
* (`DidString`, `AtUriString`). Many read paths still emit the identically
|
||||||
|
* shaped `@atproto/api` views, whose same fields are plain `string`.
|
||||||
|
*
|
||||||
|
* A plain `string` is not assignable to a branded template-literal type, so
|
||||||
|
* every `moderate*` call taking an unmigrated view fails to typecheck even
|
||||||
|
* though the value is byte-identical - the runtime only ever reads `.did`,
|
||||||
|
* `.labels` and `.viewer`, none of which the brand affects.
|
||||||
|
*
|
||||||
|
* These wrappers widen each subject parameter to accept a view from either
|
||||||
|
* world and drop the brand on the way in. Delete this module once every
|
||||||
|
* producer emits `#/lexicons` views (the `@atproto/api` removal pass) and point
|
||||||
|
* callers back at `@bsky.app/sdk/moderation` directly.
|
||||||
|
*/
|
||||||
|
|
||||||
|
type AnyProfileSubject =
|
||||||
|
| app.bsky.actor.defs.ProfileViewBasic
|
||||||
|
| app.bsky.actor.defs.ProfileView
|
||||||
|
| app.bsky.actor.defs.ProfileViewDetailed
|
||||||
|
| chat.bsky.actor.defs.ProfileViewBasic
|
||||||
|
| AppBskyActorDefs.ProfileViewBasic
|
||||||
|
| AppBskyActorDefs.ProfileView
|
||||||
|
| AppBskyActorDefs.ProfileViewDetailed
|
||||||
|
| ChatBskyActorDefs.ProfileViewBasic
|
||||||
|
|
||||||
|
type AnyPostSubject = app.bsky.feed.defs.PostView | AppBskyFeedDefs.PostView
|
||||||
|
|
||||||
|
type AnyUserListSubject =
|
||||||
|
| app.bsky.graph.defs.ListViewBasic
|
||||||
|
| app.bsky.graph.defs.ListView
|
||||||
|
| AppBskyGraphDefs.ListViewBasic
|
||||||
|
| AppBskyGraphDefs.ListView
|
||||||
|
|
||||||
|
type AnyFeedGeneratorSubject =
|
||||||
|
| app.bsky.feed.defs.GeneratorView
|
||||||
|
| AppBskyFeedDefs.GeneratorView
|
||||||
|
|
||||||
|
type AnyNotificationSubject =
|
||||||
|
| app.bsky.notification.listNotifications.Notification
|
||||||
|
| AppBskyNotificationListNotifications.Notification
|
||||||
|
|
||||||
|
export function moderateProfile(
|
||||||
|
subject: AnyProfileSubject,
|
||||||
|
opts: ModerationOpts,
|
||||||
|
): ModerationDecision {
|
||||||
|
return sdkModerateProfile(subject as app.bsky.actor.defs.ProfileView, opts)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function moderateStatus(
|
||||||
|
subject: AnyProfileSubject,
|
||||||
|
opts: ModerationOpts,
|
||||||
|
): ModerationDecision {
|
||||||
|
return sdkModerateStatus(subject as app.bsky.actor.defs.ProfileView, opts)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function moderatePost(
|
||||||
|
subject: AnyPostSubject,
|
||||||
|
opts: ModerationOpts,
|
||||||
|
): ModerationDecision {
|
||||||
|
return sdkModeratePost(subject as app.bsky.feed.defs.PostView, opts)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function moderateUserList(
|
||||||
|
subject: AnyUserListSubject,
|
||||||
|
opts: ModerationOpts,
|
||||||
|
): ModerationDecision {
|
||||||
|
return sdkModerateUserList(subject as app.bsky.graph.defs.ListView, opts)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function moderateFeedGenerator(
|
||||||
|
subject: AnyFeedGeneratorSubject,
|
||||||
|
opts: ModerationOpts,
|
||||||
|
): ModerationDecision {
|
||||||
|
return sdkModerateFeedGenerator(
|
||||||
|
subject as app.bsky.feed.defs.GeneratorView,
|
||||||
|
opts,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function moderateNotification(
|
||||||
|
subject: AnyNotificationSubject,
|
||||||
|
opts: ModerationOpts,
|
||||||
|
): ModerationDecision {
|
||||||
|
return sdkModerateNotification(
|
||||||
|
subject as app.bsky.notification.listNotifications.Notification,
|
||||||
|
opts,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Widens `facets`/`actor` for the same reason the `moderate*` wrappers widen
|
||||||
|
* their subjects: mute-word matching reads only `text`/`features`/`langs`, none
|
||||||
|
* of which the brand affects.
|
||||||
|
*/
|
||||||
|
export function hasMutedWord(params: {
|
||||||
|
mutedWords: app.bsky.actor.defs.MutedWord[]
|
||||||
|
text: string
|
||||||
|
facets?: app.bsky.richtext.facet.Main[] | AppBskyRichtextFacet.Main[]
|
||||||
|
outlineTags?: string[]
|
||||||
|
languages?: string[]
|
||||||
|
actor?: AnyProfileSubject
|
||||||
|
}): boolean {
|
||||||
|
return sdkHasMutedWord({
|
||||||
|
...params,
|
||||||
|
facets: params.facets as app.bsky.richtext.facet.Main[] | undefined,
|
||||||
|
actor: params.actor as app.bsky.actor.defs.ProfileView | undefined,
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import {
|
import {
|
||||||
type InterpretedLabelValueDefinition,
|
type InterpretedLabelValueDefinition,
|
||||||
type LabelPreference,
|
type LabelPreference,
|
||||||
} from '@atproto/api'
|
} from '@bsky.app/sdk/moderation'
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
|
import {type ComAtprotoLabelDefs} from '@atproto/api'
|
||||||
import {
|
import {
|
||||||
type AppBskyLabelerDefs,
|
|
||||||
type ComAtprotoLabelDefs,
|
|
||||||
type InterpretedLabelValueDefinition,
|
type InterpretedLabelValueDefinition,
|
||||||
interpretLabelValueDefinition,
|
interpretLabelValueDefinition,
|
||||||
LABELS,
|
LABELS,
|
||||||
} from '@atproto/api'
|
} from '@bsky.app/sdk/moderation'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import * as bcp47Match from 'bcp-47-match'
|
import * as bcp47Match from 'bcp-47-match'
|
||||||
|
|
||||||
@@ -13,12 +12,13 @@ import {
|
|||||||
useGlobalLabelStrings,
|
useGlobalLabelStrings,
|
||||||
} from '#/lib/moderation/useGlobalLabelStrings'
|
} from '#/lib/moderation/useGlobalLabelStrings'
|
||||||
import {useLabelDefinitions} from '#/state/preferences'
|
import {useLabelDefinitions} from '#/state/preferences'
|
||||||
|
import {type app} from '#/lexicons'
|
||||||
|
|
||||||
export interface LabelInfo {
|
export interface LabelInfo {
|
||||||
label: ComAtprotoLabelDefs.Label
|
label: ComAtprotoLabelDefs.Label
|
||||||
def: InterpretedLabelValueDefinition
|
def: InterpretedLabelValueDefinition
|
||||||
strings: ComAtprotoLabelDefs.LabelValueDefinitionStrings
|
strings: ComAtprotoLabelDefs.LabelValueDefinitionStrings
|
||||||
labeler: AppBskyLabelerDefs.LabelerViewDetailed | undefined
|
labeler: app.bsky.labeler.defs.LabelerViewDetailed | undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
export function useLabelInfo(label: ComAtprotoLabelDefs.Label): LabelInfo {
|
export function useLabelInfo(label: ComAtprotoLabelDefs.Label): LabelInfo {
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
import {useMemo} from 'react'
|
import {useMemo} from 'react'
|
||||||
import {
|
import {BSKY_LABELER_DID} from '@atproto/api'
|
||||||
BSKY_LABELER_DID,
|
import {type ModerationCause} from '@bsky.app/sdk/moderation'
|
||||||
type ModerationCause,
|
|
||||||
type ModerationCauseSource,
|
|
||||||
} from '@atproto/api'
|
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
|
|
||||||
@@ -25,7 +22,7 @@ export interface ModerationCauseDescription {
|
|||||||
description: string
|
description: string
|
||||||
source?: string
|
source?: string
|
||||||
sourceDisplayName?: string
|
sourceDisplayName?: string
|
||||||
sourceType?: ModerationCauseSource['type']
|
sourceType?: ModerationCause['source']['type']
|
||||||
sourceAvi?: string
|
sourceAvi?: string
|
||||||
sourceDid?: string
|
sourceDid?: string
|
||||||
isSubjectAccount?: boolean
|
isSubjectAccount?: boolean
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import {type ModerationUI} from '@atproto/api'
|
import {type ModerationUI} from '@bsky.app/sdk/moderation'
|
||||||
|
|
||||||
// \u2705 = ✅
|
// \u2705 = ✅
|
||||||
// \u2713 = ✓
|
// \u2713 = ✓
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import {useCallback, useEffect, useMemo, useState} from 'react'
|
import {useCallback, useEffect, useMemo, useState} from 'react'
|
||||||
import {type LayoutChangeEvent, View} from 'react-native'
|
import {type LayoutChangeEvent, View} from 'react-native'
|
||||||
import {useSafeAreaInsets} from 'react-native-safe-area-context'
|
import {useSafeAreaInsets} from 'react-native-safe-area-context'
|
||||||
import {ChatBskyConvoDefs, moderateProfile} from '@atproto/api'
|
import {ChatBskyConvoDefs} from '@atproto/api'
|
||||||
import {
|
import {
|
||||||
ScrollEdgeEffect,
|
ScrollEdgeEffect,
|
||||||
ScrollEdgeEffectProvider,
|
ScrollEdgeEffectProvider,
|
||||||
@@ -18,6 +18,7 @@ import {type NativeStackScreenProps} from '@react-navigation/native-stack'
|
|||||||
|
|
||||||
import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback'
|
import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback'
|
||||||
import {useViewportZoomLock} from '#/lib/hooks/useViewportZoomLock'
|
import {useViewportZoomLock} from '#/lib/hooks/useViewportZoomLock'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {
|
import {
|
||||||
type CommonNavigatorParams,
|
type CommonNavigatorParams,
|
||||||
type NavigationProp,
|
type NavigationProp,
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {moderateProfile} from '@atproto/api'
|
|
||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {Trans, useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {isBlockedOrBlocking} from '#/lib/moderation/blocked-and-muted'
|
import {isBlockedOrBlocking} from '#/lib/moderation/blocked-and-muted'
|
||||||
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {logger} from '#/logger'
|
import {logger} from '#/logger'
|
||||||
import {useProfileShadow} from '#/state/cache/profile-shadow'
|
import {useProfileShadow} from '#/state/cache/profile-shadow'
|
||||||
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
import {useEffect, useState} from 'react'
|
import {useEffect, useState} from 'react'
|
||||||
import {Pressable, View} from 'react-native'
|
import {Pressable, View} from 'react-native'
|
||||||
import {
|
import {ChatBskyActorDefs, ChatBskyConvoDefs} from '@atproto/api'
|
||||||
ChatBskyActorDefs,
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
ChatBskyConvoDefs,
|
|
||||||
type ModerationOpts,
|
|
||||||
} from '@atproto/api'
|
|
||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {Trans, useLingui} from '@lingui/react/macro'
|
||||||
import {useNavigation} from '@react-navigation/native'
|
import {useNavigation} from '@react-navigation/native'
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
import {useEffect} from 'react'
|
import {useEffect} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {ImageBackground} from 'expo-image'
|
import {ImageBackground} from 'expo-image'
|
||||||
import {ChatBskyGroupDefs, moderateProfile} from '@atproto/api'
|
import {ChatBskyGroupDefs} from '@atproto/api'
|
||||||
import {type ThemeName} from '@bsky.app/alf'
|
import {type ThemeName} from '@bsky.app/alf'
|
||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {Trans, useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
||||||
import {useJoinLinkPreviewsQuery} from '#/state/queries/join-links'
|
import {useJoinLinkPreviewsQuery} from '#/state/queries/join-links'
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
import {useCallback, useMemo, useState} from 'react'
|
import {useCallback, useMemo, useState} from 'react'
|
||||||
import {type GestureResponderEvent, View} from 'react-native'
|
import {type GestureResponderEvent, View} from 'react-native'
|
||||||
|
import {ChatBskyConvoDefs} from '@atproto/api'
|
||||||
import {
|
import {
|
||||||
ChatBskyConvoDefs,
|
|
||||||
moderateProfile,
|
|
||||||
type ModerationDecision,
|
type ModerationDecision,
|
||||||
type ModerationOpts,
|
type ModerationOpts,
|
||||||
} from '@atproto/api'
|
} from '@bsky.app/sdk/moderation'
|
||||||
import {plural} from '@lingui/core/macro'
|
import {plural} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react/macro'
|
import {useLingui} from '@lingui/react/macro'
|
||||||
import {useQueryClient} from '@tanstack/react-query'
|
import {useQueryClient} from '@tanstack/react-query'
|
||||||
@@ -13,6 +12,7 @@ import {useQueryClient} from '@tanstack/react-query'
|
|||||||
import {GestureActionView} from '#/lib/custom-animations/GestureActionView'
|
import {GestureActionView} from '#/lib/custom-animations/GestureActionView'
|
||||||
import {useHaptics} from '#/lib/haptics'
|
import {useHaptics} from '#/lib/haptics'
|
||||||
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {decrementBadgeCount} from '#/lib/notifications/notifications'
|
import {decrementBadgeCount} from '#/lib/notifications/notifications'
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import {useCallback, useMemo} from 'react'
|
import {useCallback, useMemo} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {LinearGradient} from 'expo-linear-gradient'
|
import {LinearGradient} from 'expo-linear-gradient'
|
||||||
import {moderateProfile} from '@atproto/api'
|
|
||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {Trans, useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
import {useProfileShadow} from '#/state/cache/profile-shadow'
|
import {useProfileShadow} from '#/state/cache/profile-shadow'
|
||||||
import {type ActiveConvoStates} from '#/state/messages/convo'
|
import {type ActiveConvoStates} from '#/state/messages/convo'
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
import {useState} from 'react'
|
import {useState} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {Image} from 'expo-image'
|
import {Image} from 'expo-image'
|
||||||
import {
|
import {type ChatBskyGroupDefs} from '@atproto/api'
|
||||||
type ChatBskyGroupDefs,
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
moderateProfile,
|
|
||||||
type ModerationOpts,
|
|
||||||
} from '@atproto/api'
|
|
||||||
import {Plural, Trans, useLingui} from '@lingui/react/macro'
|
import {Plural, Trans, useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {useOpenComposer} from '#/lib/hooks/useOpenComposer'
|
import {useOpenComposer} from '#/lib/hooks/useOpenComposer'
|
||||||
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {shareUrl} from '#/lib/sharing'
|
import {shareUrl} from '#/lib/sharing'
|
||||||
import {useCreateJoinLink} from '#/state/queries/messages/create-join-link'
|
import {useCreateJoinLink} from '#/state/queries/messages/create-join-link'
|
||||||
import {useDisableJoinLink} from '#/state/queries/messages/disable-join-link'
|
import {useDisableJoinLink} from '#/state/queries/messages/disable-join-link'
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
import {useCallback, useEffect, useMemo, useState} from 'react'
|
import {useCallback, useEffect, useMemo, useState} from 'react'
|
||||||
import {LayoutAnimation, View} from 'react-native'
|
import {LayoutAnimation, View} from 'react-native'
|
||||||
import {AppBskyFeedPost, AtUri, moderatePost} from '@atproto/api'
|
import {AppBskyFeedPost, AtUri} from '@atproto/api'
|
||||||
import {RichText as RichTextAPI} from '@bsky.app/sdk/richtext'
|
import {RichText as RichTextAPI} from '@bsky.app/sdk/richtext'
|
||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {Trans, useLingui} from '@lingui/react/macro'
|
||||||
import {type RouteProp, useNavigation, useRoute} from '@react-navigation/native'
|
import {type RouteProp, useNavigation, useRoute} from '@react-navigation/native'
|
||||||
|
|
||||||
import {HITSLOP_20} from '#/lib/constants'
|
import {HITSLOP_20} from '#/lib/constants'
|
||||||
|
import {moderatePost} from '#/lib/moderation/subjects'
|
||||||
import {makeProfileLink} from '#/lib/routes/links'
|
import {makeProfileLink} from '#/lib/routes/links'
|
||||||
import {
|
import {
|
||||||
type CommonNavigatorParams,
|
type CommonNavigatorParams,
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {moderateProfile} from '@atproto/api'
|
|
||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {Trans, useLingui} from '@lingui/react/macro'
|
||||||
import {useNavigation} from '@react-navigation/native'
|
import {useNavigation} from '@react-navigation/native'
|
||||||
|
|
||||||
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {type NavigationProp} from '#/lib/routes/types'
|
import {type NavigationProp} from '#/lib/routes/types'
|
||||||
import {isInvalidHandle, sanitizeHandle} from '#/lib/strings/handles'
|
import {isInvalidHandle, sanitizeHandle} from '#/lib/strings/handles'
|
||||||
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import {Fragment, useCallback} from 'react'
|
import {Fragment, useCallback} from 'react'
|
||||||
import {Linking, View} from 'react-native'
|
import {Linking, View} from 'react-native'
|
||||||
import {LABELS} from '@atproto/api'
|
import {LABELS} from '@bsky.app/sdk/moderation'
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import {PostInteractionSettingsForm} from '#/components/dialogs/PostInteractionS
|
|||||||
import * as Layout from '#/components/Layout'
|
import * as Layout from '#/components/Layout'
|
||||||
import {Loader} from '#/components/Loader'
|
import {Loader} from '#/components/Loader'
|
||||||
import * as Toast from '#/components/Toast'
|
import * as Toast from '#/components/Toast'
|
||||||
import {type app} from '#/lexicons'
|
|
||||||
|
|
||||||
export function Screen() {
|
export function Screen() {
|
||||||
const gutters = useGutters(['base'])
|
const gutters = useGutters(['base'])
|
||||||
@@ -76,15 +75,14 @@ function Inner({preferences}: {preferences: UsePreferencesQueryResponse}) {
|
|||||||
* Preferences are still typed against the legacy client, so the stored
|
* Preferences are still typed against the legacy client, so the stored
|
||||||
* rules arrive unbranded. Wave B migrates `getPreferences`.
|
* rules arrive unbranded. Wave B migrates `getPreferences`.
|
||||||
*/
|
*/
|
||||||
allow: preferences.postInteractionSettings
|
allow: preferences.postInteractionSettings.threadgateAllowRules,
|
||||||
.threadgateAllowRules as app.bsky.feed.threadgate.Main['allow'],
|
|
||||||
})
|
})
|
||||||
}, [preferences.postInteractionSettings.threadgateAllowRules])
|
}, [preferences.postInteractionSettings.threadgateAllowRules])
|
||||||
const postgate = useMemo(() => {
|
const postgate = useMemo(() => {
|
||||||
return createPostgateRecord({
|
return createPostgateRecord({
|
||||||
post: '',
|
post: '',
|
||||||
embeddingRules: preferences.postInteractionSettings
|
embeddingRules:
|
||||||
.postgateEmbeddingRules as app.bsky.feed.postgate.Main['embeddingRules'],
|
preferences.postInteractionSettings.postgateEmbeddingRules,
|
||||||
})
|
})
|
||||||
}, [preferences.postInteractionSettings.postgateEmbeddingRules])
|
}, [preferences.postInteractionSettings.postgateEmbeddingRules])
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import {useCallback, useEffect, useMemo, useRef, useState} from 'react'
|
import {useCallback, useEffect, useMemo, useRef, useState} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {type ModerationOpts} from '@atproto/api'
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {type AppBskyFeedDefs, AtUri, moderateProfile} from '@atproto/api'
|
import {type AppBskyFeedDefs, AtUri} from '@atproto/api'
|
||||||
import {Plural, Trans, useLingui} from '@lingui/react/macro'
|
import {Plural, Trans, useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {makeProfileLink} from '#/lib/routes/links'
|
import {makeProfileLink} from '#/lib/routes/links'
|
||||||
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
||||||
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {type AppBskyActorDefs, type ModerationDecision} from '@atproto/api'
|
import {type AppBskyActorDefs} from '@atproto/api'
|
||||||
|
import {type ModerationDecision} from '@bsky.app/sdk/moderation'
|
||||||
|
|
||||||
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
import {memo, useCallback, useMemo, useState} from 'react'
|
import {memo, useCallback, useMemo, useState} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {
|
import {type AppBskyActorDefs} from '@atproto/api'
|
||||||
type AppBskyActorDefs,
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
type AppBskyLabelerDefs,
|
|
||||||
moderateProfile,
|
|
||||||
type ModerationOpts,
|
|
||||||
} from '@atproto/api'
|
|
||||||
import {type RichText as RichTextAPI} from '@bsky.app/sdk/richtext'
|
import {type RichText as RichTextAPI} from '@bsky.app/sdk/richtext'
|
||||||
import {msg, plural} from '@lingui/core/macro'
|
import {msg, plural} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
@@ -15,6 +11,7 @@ import {Plural, Trans} from '@lingui/react/macro'
|
|||||||
import {MAX_LABELERS} from '#/lib/constants'
|
import {MAX_LABELERS} from '#/lib/constants'
|
||||||
import {useHaptics} from '#/lib/haptics'
|
import {useHaptics} from '#/lib/haptics'
|
||||||
import {isAppLabeler} from '#/lib/moderation'
|
import {isAppLabeler} from '#/lib/moderation'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {useProfileShadow} from '#/state/cache/profile-shadow'
|
import {useProfileShadow} from '#/state/cache/profile-shadow'
|
||||||
import {type Shadow} from '#/state/cache/types'
|
import {type Shadow} from '#/state/cache/types'
|
||||||
import {useLabelerSubscriptionMutation} from '#/state/queries/labeler'
|
import {useLabelerSubscriptionMutation} from '#/state/queries/labeler'
|
||||||
@@ -37,6 +34,7 @@ import * as Toast from '#/components/Toast'
|
|||||||
import {Text} from '#/components/Typography'
|
import {Text} from '#/components/Typography'
|
||||||
import {useAnalytics} from '#/analytics'
|
import {useAnalytics} from '#/analytics'
|
||||||
import {IS_IOS} from '#/env'
|
import {IS_IOS} from '#/env'
|
||||||
|
import {type app} from '#/lexicons'
|
||||||
import {ProfileHeaderDisplayName} from './DisplayName'
|
import {ProfileHeaderDisplayName} from './DisplayName'
|
||||||
import {EditProfileDialog} from './EditProfileDialog'
|
import {EditProfileDialog} from './EditProfileDialog'
|
||||||
import {ProfileHeaderHandle} from './Handle'
|
import {ProfileHeaderHandle} from './Handle'
|
||||||
@@ -45,7 +43,7 @@ import {ProfileHeaderShell} from './Shell'
|
|||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
profile: AppBskyActorDefs.ProfileViewDetailed
|
profile: AppBskyActorDefs.ProfileViewDetailed
|
||||||
labeler: AppBskyLabelerDefs.LabelerViewDetailed
|
labeler: app.bsky.labeler.defs.LabelerViewDetailed
|
||||||
descriptionRT: RichTextAPI | null
|
descriptionRT: RichTextAPI | null
|
||||||
moderationOpts: ModerationOpts
|
moderationOpts: ModerationOpts
|
||||||
hideBackButton?: boolean
|
hideBackButton?: boolean
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
import {memo, useMemo, useState} from 'react'
|
import {memo, useMemo, useState} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
|
import {type AppBskyActorDefs} from '@atproto/api'
|
||||||
import {
|
import {
|
||||||
type AppBskyActorDefs,
|
|
||||||
moderateProfile,
|
|
||||||
type ModerationDecision,
|
type ModerationDecision,
|
||||||
type ModerationOpts,
|
type ModerationOpts,
|
||||||
} from '@atproto/api'
|
} from '@bsky.app/sdk/moderation'
|
||||||
import {type RichText as RichTextAPI} from '@bsky.app/sdk/richtext'
|
import {type RichText as RichTextAPI} from '@bsky.app/sdk/richtext'
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {useHaptics} from '#/lib/haptics'
|
import {useHaptics} from '#/lib/haptics'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
||||||
import {logger} from '#/logger'
|
import {logger} from '#/logger'
|
||||||
import {type Shadow, useProfileShadow} from '#/state/cache/profile-shadow'
|
import {type Shadow, useProfileShadow} from '#/state/cache/profile-shadow'
|
||||||
|
|||||||
@@ -5,8 +5,9 @@ import Animated, {
|
|||||||
useAnimatedRef,
|
useAnimatedRef,
|
||||||
} from 'react-native-reanimated'
|
} from 'react-native-reanimated'
|
||||||
import {useSafeAreaInsets} from 'react-native-safe-area-context'
|
import {useSafeAreaInsets} from 'react-native-safe-area-context'
|
||||||
import {type AppBskyActorDefs, type ModerationDecision} from '@atproto/api'
|
import {type AppBskyActorDefs} from '@atproto/api'
|
||||||
import {utils} from '@bsky.app/alf'
|
import {utils} from '@bsky.app/alf'
|
||||||
|
import {type ModerationDecision} from '@bsky.app/sdk/moderation'
|
||||||
import {useLingui} from '@lingui/react/macro'
|
import {useLingui} from '@lingui/react/macro'
|
||||||
import {useNavigation} from '@react-navigation/native'
|
import {useNavigation} from '@react-navigation/native'
|
||||||
|
|
||||||
|
|||||||
@@ -7,15 +7,12 @@ import Animated, {
|
|||||||
} from 'react-native-reanimated'
|
} from 'react-native-reanimated'
|
||||||
import {useSafeAreaInsets} from 'react-native-safe-area-context'
|
import {useSafeAreaInsets} from 'react-native-safe-area-context'
|
||||||
import {scheduleOnRN} from 'react-native-worklets'
|
import {scheduleOnRN} from 'react-native-worklets'
|
||||||
import {
|
import {type AppBskyActorDefs} from '@atproto/api'
|
||||||
type AppBskyActorDefs,
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
type AppBskyLabelerDefs,
|
|
||||||
moderateProfile,
|
|
||||||
type ModerationOpts,
|
|
||||||
} from '@atproto/api'
|
|
||||||
import {type RichText as RichTextAPI} from '@bsky.app/sdk/richtext'
|
import {type RichText as RichTextAPI} from '@bsky.app/sdk/richtext'
|
||||||
import {useIsFocused} from '@react-navigation/native'
|
import {useIsFocused} from '@react-navigation/native'
|
||||||
|
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
import {useProfileShadow} from '#/state/cache/profile-shadow'
|
import {useProfileShadow} from '#/state/cache/profile-shadow'
|
||||||
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
||||||
@@ -26,6 +23,7 @@ import {atoms as a, useTheme} from '#/alf'
|
|||||||
import {Header} from '#/components/Layout'
|
import {Header} from '#/components/Layout'
|
||||||
import * as ProfileCard from '#/components/ProfileCard'
|
import * as ProfileCard from '#/components/ProfileCard'
|
||||||
import {IS_NATIVE} from '#/env'
|
import {IS_NATIVE} from '#/env'
|
||||||
|
import {type app} from '#/lexicons'
|
||||||
import {
|
import {
|
||||||
HeaderLabelerButtons,
|
HeaderLabelerButtons,
|
||||||
ProfileHeaderLabeler,
|
ProfileHeaderLabeler,
|
||||||
@@ -61,7 +59,7 @@ export {ProfileHeaderLoading}
|
|||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
profile: AppBskyActorDefs.ProfileViewDetailed
|
profile: AppBskyActorDefs.ProfileViewDetailed
|
||||||
labeler: AppBskyLabelerDefs.LabelerViewDetailed | undefined
|
labeler: app.bsky.labeler.defs.LabelerViewDetailed | undefined
|
||||||
descriptionRT: RichTextAPI | null
|
descriptionRT: RichTextAPI | null
|
||||||
moderationOpts: ModerationOpts
|
moderationOpts: ModerationOpts
|
||||||
hideBackButton?: boolean
|
hideBackButton?: boolean
|
||||||
@@ -106,7 +104,7 @@ const MinimalHeader = memo(function MinimalHeader({
|
|||||||
}: {
|
}: {
|
||||||
onLayout: (e: LayoutChangeEvent) => void
|
onLayout: (e: LayoutChangeEvent) => void
|
||||||
profile: AppBskyActorDefs.ProfileViewDetailed
|
profile: AppBskyActorDefs.ProfileViewDetailed
|
||||||
labeler?: AppBskyLabelerDefs.LabelerViewDetailed
|
labeler?: app.bsky.labeler.defs.LabelerViewDetailed
|
||||||
hideBackButton?: boolean
|
hideBackButton?: boolean
|
||||||
}) {
|
}) {
|
||||||
const t = useTheme()
|
const t = useTheme()
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
import {useCallback, useEffect, useImperativeHandle, useMemo} from 'react'
|
import {useCallback, useEffect, useImperativeHandle, useMemo} from 'react'
|
||||||
import {type ListRenderItemInfo, View} from 'react-native'
|
import {type ListRenderItemInfo, View} from 'react-native'
|
||||||
import {
|
import {
|
||||||
type AppBskyLabelerDefs,
|
|
||||||
type InterpretedLabelValueDefinition,
|
type InterpretedLabelValueDefinition,
|
||||||
interpretLabelValueDefinitions,
|
interpretLabelValueDefinitions,
|
||||||
type ModerationOpts,
|
type ModerationOpts,
|
||||||
} from '@atproto/api'
|
} from '@bsky.app/sdk/moderation'
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
@@ -21,13 +20,14 @@ import {Loader} from '#/components/Loader'
|
|||||||
import {LabelerLabelPreference} from '#/components/moderation/LabelPreference'
|
import {LabelerLabelPreference} from '#/components/moderation/LabelPreference'
|
||||||
import {Text} from '#/components/Typography'
|
import {Text} from '#/components/Typography'
|
||||||
import {IS_IOS, IS_NATIVE} from '#/env'
|
import {IS_IOS, IS_NATIVE} from '#/env'
|
||||||
|
import {type app} from '#/lexicons'
|
||||||
import {ErrorState} from '../ErrorState'
|
import {ErrorState} from '../ErrorState'
|
||||||
import {type SectionRef} from './types'
|
import {type SectionRef} from './types'
|
||||||
|
|
||||||
interface LabelsSectionProps {
|
interface LabelsSectionProps {
|
||||||
ref: React.Ref<SectionRef>
|
ref: React.Ref<SectionRef>
|
||||||
isLabelerLoading: boolean
|
isLabelerLoading: boolean
|
||||||
labelerInfo: AppBskyLabelerDefs.LabelerViewDetailed | undefined
|
labelerInfo: app.bsky.labeler.defs.LabelerViewDetailed | undefined
|
||||||
labelerError: Error | null
|
labelerError: Error | null
|
||||||
moderationOpts: ModerationOpts
|
moderationOpts: ModerationOpts
|
||||||
scrollElRef: ListRef
|
scrollElRef: ListRef
|
||||||
@@ -161,7 +161,7 @@ export function LabelerListHeader({
|
|||||||
}: {
|
}: {
|
||||||
isLabelerLoading: boolean
|
isLabelerLoading: boolean
|
||||||
labelerError?: Error | null
|
labelerError?: Error | null
|
||||||
labelerInfo?: AppBskyLabelerDefs.LabelerViewDetailed
|
labelerInfo?: app.bsky.labeler.defs.LabelerViewDetailed
|
||||||
hasValues: boolean
|
hasValues: boolean
|
||||||
isSubscribed: boolean
|
isSubscribed: boolean
|
||||||
}) {
|
}) {
|
||||||
|
|||||||
@@ -1,12 +1,8 @@
|
|||||||
import {useCallback, useMemo, useRef, useState} from 'react'
|
import {useCallback, useMemo, useRef, useState} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {useAnimatedRef} from 'react-native-reanimated'
|
import {useAnimatedRef} from 'react-native-reanimated'
|
||||||
import {
|
import {AppBskyGraphDefs, AtUri} from '@atproto/api'
|
||||||
AppBskyGraphDefs,
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
AtUri,
|
|
||||||
moderateUserList,
|
|
||||||
type ModerationOpts,
|
|
||||||
} from '@atproto/api'
|
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
@@ -15,6 +11,7 @@ import {useQueryClient} from '@tanstack/react-query'
|
|||||||
|
|
||||||
import {useOpenComposer} from '#/lib/hooks/useOpenComposer'
|
import {useOpenComposer} from '#/lib/hooks/useOpenComposer'
|
||||||
import {useSetTitle} from '#/lib/hooks/useSetTitle'
|
import {useSetTitle} from '#/lib/hooks/useSetTitle'
|
||||||
|
import {moderateUserList} from '#/lib/moderation/subjects'
|
||||||
import {
|
import {
|
||||||
type CommonNavigatorParams,
|
type CommonNavigatorParams,
|
||||||
type NativeStackScreenProps,
|
type NativeStackScreenProps,
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
import {ScrollView, View} from 'react-native'
|
import {ScrollView, View} from 'react-native'
|
||||||
import {moderateProfile, type ModerationOpts} from '@atproto/api'
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {Plural, Trans, useLingui} from '@lingui/react/macro'
|
import {Plural, Trans, useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {createHitslop} from '#/lib/constants'
|
import {createHitslop} from '#/lib/constants'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {makeProfileLink} from '#/lib/routes/links'
|
import {makeProfileLink} from '#/lib/routes/links'
|
||||||
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
import {sanitizeDisplayName} from '#/lib/strings/display-names'
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import {useCallback} from 'react'
|
import {useCallback} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {type ModerationOpts} from '@atproto/api'
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {useQueryClient} from '@tanstack/react-query'
|
import {useQueryClient} from '@tanstack/react-query'
|
||||||
|
|||||||
@@ -1,14 +1,11 @@
|
|||||||
import {useState} from 'react'
|
import {useState} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {
|
import {type AppBskyGraphDefs, AppBskyGraphStarterpack} from '@atproto/api'
|
||||||
type AppBskyGraphDefs,
|
|
||||||
AppBskyGraphStarterpack,
|
|
||||||
moderateProfile,
|
|
||||||
} from '@atproto/api'
|
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
|
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {sanitizeHandle} from '#/lib/strings/handles'
|
import {sanitizeHandle} from '#/lib/strings/handles'
|
||||||
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
||||||
import {useSession} from '#/state/session'
|
import {useSession} from '#/state/session'
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import {memo, useEffect} from 'react'
|
import {memo, useEffect} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {type AppBskyActorSearchActors, type ModerationOpts} from '@atproto/api'
|
import {type AppBskyActorSearchActors} from '@atproto/api'
|
||||||
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {type InfiniteData} from '@tanstack/react-query'
|
import {type InfiniteData} from '@tanstack/react-query'
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
import {useMemo} from 'react'
|
import {useMemo} from 'react'
|
||||||
import {Pressable, View} from 'react-native'
|
import {Pressable, View} from 'react-native'
|
||||||
import {Image} from 'expo-image'
|
import {Image} from 'expo-image'
|
||||||
import {type AppBskyUnspeccedDefs, moderateProfile} from '@atproto/api'
|
import {type AppBskyUnspeccedDefs} from '@atproto/api'
|
||||||
import {RichText as RichTextApi} from '@bsky.app/sdk/richtext'
|
import {RichText as RichTextApi} from '@bsky.app/sdk/richtext'
|
||||||
import {Plural, Trans, useLingui} from '@lingui/react/macro'
|
import {Plural, Trans, useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
import {useModerationOpts} from '#/state/preferences/moderation-opts'
|
||||||
import {
|
import {
|
||||||
useTrendingSettings,
|
useTrendingSettings,
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
import {useCallback, useEffect, useState} from 'react'
|
import {useCallback, useEffect, useState} from 'react'
|
||||||
import {type ListRenderItemInfo, View} from 'react-native'
|
import {type ListRenderItemInfo, View} from 'react-native'
|
||||||
import * as Contacts from 'expo-contacts'
|
import * as Contacts from 'expo-contacts'
|
||||||
import {type AppBskyContactDefs, type ModerationOpts} from '@atproto/api'
|
import {type AppBskyContactDefs} from '@atproto/api'
|
||||||
import {type DidString} from '@atproto/syntax'
|
import {type DidString} from '@atproto/syntax'
|
||||||
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Plural, Trans} from '@lingui/react/macro'
|
import {Plural, Trans} from '@lingui/react/macro'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import {useCallback, useMemo} from 'react'
|
import {useCallback, useMemo} from 'react'
|
||||||
import {type ListRenderItemInfo, Text as RNText, View} from 'react-native'
|
import {type ListRenderItemInfo, Text as RNText, View} from 'react-native'
|
||||||
import {type ModerationOpts} from '@atproto/api'
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {Trans, useLingui} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
import {createSanitizedDisplayName} from '#/lib/moderation/create-sanitized-display-name'
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import {useState} from 'react'
|
import {useState} from 'react'
|
||||||
import {Alert, LayoutAnimation, Linking, Pressable, View} from 'react-native'
|
import {Alert, LayoutAnimation, Linking, Pressable, View} from 'react-native'
|
||||||
import {useReducedMotion} from 'react-native-reanimated'
|
import {useReducedMotion} from 'react-native-reanimated'
|
||||||
import {type AppBskyActorDefs, moderateProfile} from '@atproto/api'
|
import {type AppBskyActorDefs} from '@atproto/api'
|
||||||
import {removeNuxs} from '@bsky.app/sdk'
|
import {removeNuxs} from '@bsky.app/sdk'
|
||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {Trans, useLingui} from '@lingui/react/macro'
|
||||||
import {useNavigation} from '@react-navigation/native'
|
import {useNavigation} from '@react-navigation/native'
|
||||||
@@ -10,6 +10,7 @@ import {type NativeStackScreenProps} from '@react-navigation/native-stack'
|
|||||||
import {HELP_DESK_URL, HITSLOP_10} from '#/lib/constants'
|
import {HELP_DESK_URL, HITSLOP_10} from '#/lib/constants'
|
||||||
import {useAccountSwitcher} from '#/lib/hooks/useAccountSwitcher'
|
import {useAccountSwitcher} from '#/lib/hooks/useAccountSwitcher'
|
||||||
import {useApplyPullRequestOTAUpdate} from '#/lib/hooks/useOTAUpdates'
|
import {useApplyPullRequestOTAUpdate} from '#/lib/hooks/useOTAUpdates'
|
||||||
|
import {moderateProfile} from '#/lib/moderation/subjects'
|
||||||
import {
|
import {
|
||||||
type CommonNavigatorParams,
|
type CommonNavigatorParams,
|
||||||
type NavigationProp,
|
type NavigationProp,
|
||||||
|
|||||||
@@ -1,12 +1,8 @@
|
|||||||
import {useEffect, useState} from 'react'
|
import {useEffect, useState} from 'react'
|
||||||
import {Pressable, View} from 'react-native'
|
import {Pressable, View} from 'react-native'
|
||||||
import Animated, {FadeIn, FadeOut} from 'react-native-reanimated'
|
import Animated, {FadeIn, FadeOut} from 'react-native-reanimated'
|
||||||
import {
|
import {AppBskyGraphDefs, AppBskyGraphStarterpack, AtUri} from '@atproto/api'
|
||||||
AppBskyGraphDefs,
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
AppBskyGraphStarterpack,
|
|
||||||
AtUri,
|
|
||||||
type ModerationOpts,
|
|
||||||
} from '@atproto/api'
|
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
|
|||||||
@@ -1,13 +1,9 @@
|
|||||||
import {useCallback, useEffect, useState} from 'react'
|
import {useCallback, useEffect, useState} from 'react'
|
||||||
import {View} from 'react-native'
|
import {View} from 'react-native'
|
||||||
import {Image} from 'expo-image'
|
import {Image} from 'expo-image'
|
||||||
import {
|
import {AppBskyGraphDefs, AppBskyGraphStarterpack, AtUri} from '@atproto/api'
|
||||||
AppBskyGraphDefs,
|
|
||||||
AppBskyGraphStarterpack,
|
|
||||||
AtUri,
|
|
||||||
type ModerationOpts,
|
|
||||||
} from '@atproto/api'
|
|
||||||
import {type AtUriString} from '@atproto/syntax'
|
import {type AtUriString} from '@atproto/syntax'
|
||||||
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {RichText as RichTextAPI} from '@bsky.app/sdk/richtext'
|
import {RichText as RichTextAPI} from '@bsky.app/sdk/richtext'
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import {useState} from 'react'
|
import {useState} from 'react'
|
||||||
import {type ListRenderItemInfo, View} from 'react-native'
|
import {type ListRenderItemInfo, View} from 'react-native'
|
||||||
import {KeyboardAwareScrollView} from 'react-native-keyboard-controller'
|
import {KeyboardAwareScrollView} from 'react-native-keyboard-controller'
|
||||||
import {type AppBskyFeedDefs, type ModerationOpts} from '@atproto/api'
|
import {type AppBskyFeedDefs} from '@atproto/api'
|
||||||
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {DISCOVER_FEED_URI} from '#/lib/constants'
|
import {DISCOVER_FEED_URI} from '#/lib/constants'
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import {useState} from 'react'
|
import {useState} from 'react'
|
||||||
import {type ListRenderItemInfo, View} from 'react-native'
|
import {type ListRenderItemInfo, View} from 'react-native'
|
||||||
import {KeyboardAwareScrollView} from 'react-native-keyboard-controller'
|
import {KeyboardAwareScrollView} from 'react-native-keyboard-controller'
|
||||||
import {type ModerationOpts} from '@atproto/api'
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {Trans} from '@lingui/react/macro'
|
import {Trans} from '@lingui/react/macro'
|
||||||
|
|
||||||
import {useA11y} from '#/state/a11y'
|
import {useA11y} from '#/state/a11y'
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ import {
|
|||||||
type AppBskyFeedDefs,
|
type AppBskyFeedDefs,
|
||||||
type AppBskyGraphDefs,
|
type AppBskyGraphDefs,
|
||||||
AtUri,
|
AtUri,
|
||||||
type ModerationOpts,
|
|
||||||
} from '@atproto/api'
|
} from '@atproto/api'
|
||||||
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
import {msg} from '@lingui/core/macro'
|
import {msg} from '@lingui/core/macro'
|
||||||
import {useLingui} from '@lingui/react'
|
import {useLingui} from '@lingui/react'
|
||||||
import {Plural, Trans} from '@lingui/react/macro'
|
import {Plural, Trans} from '@lingui/react/macro'
|
||||||
|
|||||||
@@ -30,8 +30,8 @@ import {
|
|||||||
type AppBskyFeedDefs,
|
type AppBskyFeedDefs,
|
||||||
AppBskyFeedPost,
|
AppBskyFeedPost,
|
||||||
AtUri,
|
AtUri,
|
||||||
type ModerationDecision,
|
|
||||||
} from '@atproto/api'
|
} from '@atproto/api'
|
||||||
|
import {type ModerationDecision} from '@bsky.app/sdk/moderation'
|
||||||
import {RichText as RichTextAPI} from '@bsky.app/sdk/richtext'
|
import {RichText as RichTextAPI} from '@bsky.app/sdk/richtext'
|
||||||
import {Trans, useLingui} from '@lingui/react/macro'
|
import {Trans, useLingui} from '@lingui/react/macro'
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
import {createContext, useContext} from 'react'
|
import {createContext, useContext} from 'react'
|
||||||
import {
|
import {type InterpretedLabelValueDefinition} from '@bsky.app/sdk/moderation'
|
||||||
type AppBskyLabelerDefs,
|
|
||||||
type InterpretedLabelValueDefinition,
|
|
||||||
} from '@atproto/api'
|
|
||||||
|
|
||||||
|
import {type app} from '#/lexicons'
|
||||||
import {useLabelDefinitionsQuery} from '../queries/preferences'
|
import {useLabelDefinitionsQuery} from '../queries/preferences'
|
||||||
|
|
||||||
interface StateContext {
|
interface StateContext {
|
||||||
labelDefs: Record<string, InterpretedLabelValueDefinition[]>
|
labelDefs: Record<string, InterpretedLabelValueDefinition[]>
|
||||||
labelers: AppBskyLabelerDefs.LabelerViewDetailed[]
|
labelers: app.bsky.labeler.defs.LabelerViewDetailed[]
|
||||||
}
|
}
|
||||||
|
|
||||||
const stateContext = createContext<StateContext>({
|
const stateContext = createContext<StateContext>({
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import {createContext, useContext, useMemo} from 'react'
|
import {createContext, useContext, useMemo} from 'react'
|
||||||
import {AtpAgent, type ModerationOpts} from '@atproto/api'
|
import {Client} from '@atproto/lex'
|
||||||
|
import {type ModerationOpts} from '@bsky.app/sdk/moderation'
|
||||||
|
|
||||||
import {useHiddenPosts, useLabelDefinitions} from '#/state/preferences'
|
import {useHiddenPosts, useLabelDefinitions} from '#/state/preferences'
|
||||||
import {DEFAULT_LOGGED_OUT_LABEL_PREFERENCES} from '#/state/queries/preferences/const'
|
import {DEFAULT_LOGGED_OUT_LABEL_PREFERENCES} from '#/state/queries/preferences/const'
|
||||||
@@ -38,16 +39,21 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
|
|||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
userDid,
|
/*
|
||||||
|
* `did`/`hiddenPosts` come from persisted storage typed as plain
|
||||||
|
* `string`, so brand them to the SDK's `DidString`/`AtUriString` slots.
|
||||||
|
*/
|
||||||
|
userDid: userDid as ModerationOpts['userDid'],
|
||||||
prefs: {
|
prefs: {
|
||||||
...moderationPrefs,
|
...moderationPrefs,
|
||||||
labelers: moderationPrefs.labelers.length
|
labelers: moderationPrefs.labelers.length
|
||||||
? moderationPrefs.labelers
|
? moderationPrefs.labelers
|
||||||
: AtpAgent.appLabelers.map(did => ({
|
: Client.appLabelers.map(did => ({
|
||||||
did,
|
did,
|
||||||
labels: DEFAULT_LOGGED_OUT_LABEL_PREFERENCES,
|
labels: DEFAULT_LOGGED_OUT_LABEL_PREFERENCES,
|
||||||
})),
|
})),
|
||||||
hiddenPosts: hiddenPosts || [],
|
hiddenPosts: (hiddenPosts ||
|
||||||
|
[]) as ModerationOpts['prefs']['hiddenPosts'],
|
||||||
},
|
},
|
||||||
labelDefs,
|
labelDefs,
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user