diff --git a/src/screens/Settings/DeerSettings.tsx b/src/screens/Settings/DeerSettings.tsx index 3ca3c2c65..1fd62164d 100644 --- a/src/screens/Settings/DeerSettings.tsx +++ b/src/screens/Settings/DeerSettings.tsx @@ -22,6 +22,10 @@ import { useDirectFetchRecords, useSetDirectFetchRecords, } from '#/state/preferences/direct-fetch-records' +import { + useDisableComposerPrompt, + useSetDisableComposerPrompt, +} from '#/state/preferences/disable-composer-prompt' import { useDisableFollowedByMetrics, useSetDisableFollowedByMetrics, @@ -282,6 +286,9 @@ export function DeerSettingsScreen({}: Props) { const disableViaRepostNotification = useDisableViaRepostNotification() const setDisableViaRepostNotification = useSetDisableViaRepostNotification() + const disableComposerPrompt = useDisableComposerPrompt() + const setDisableComposerPrompt = useSetDisableComposerPrompt() + const disableLikesMetrics = useDisableLikesMetrics() const setDisableLikesMetrics = useSetDisableLikesMetrics() @@ -604,6 +611,18 @@ export function DeerSettingsScreen({}: Props) { + setDisableComposerPrompt(value)} + style={[a.w_full]}> + + Disable composer prompt + + + + void + +const stateContext = React.createContext( + persisted.defaults.disableComposerPrompt, +) +const setContext = React.createContext( + (_: persisted.Schema['disableComposerPrompt']) => {}, +) + +export function Provider({children}: React.PropsWithChildren<{}>) { + const [state, setState] = React.useState( + persisted.get('disableComposerPrompt'), + ) + + const setStateWrapped = React.useCallback( + (disableComposerPrompt: persisted.Schema['disableComposerPrompt']) => { + setState(disableComposerPrompt) + persisted.write('disableComposerPrompt', disableComposerPrompt) + }, + [setState], + ) + + React.useEffect(() => { + return persisted.onUpdate( + 'disableComposerPrompt', + nextDisableComposerPrompt => { + setState(nextDisableComposerPrompt) + }, + ) + }, [setStateWrapped]) + + return ( + + + {children} + + + ) +} + +export function useDisableComposerPrompt() { + return React.useContext(stateContext) +} + +export function useSetDisableComposerPrompt() { + return React.useContext(setContext) +} diff --git a/src/state/preferences/index.tsx b/src/state/preferences/index.tsx index 218ab99e3..ccd158542 100644 --- a/src/state/preferences/index.tsx +++ b/src/state/preferences/index.tsx @@ -6,6 +6,7 @@ import {Provider as ConstellationProvider} from './constellation-enabled' import {Provider as ConstellationInstanceProvider} from './constellation-instance' import {Provider as DeerVerificationProvider} from './deer-verification' import {Provider as DirectFetchRecordsProvider} from './direct-fetch-records' +import {Provider as DisableComposerPromptProvider} from './disable-composer-prompt' import {Provider as DisableFollowedByMetricsProvider} from './disable-followed-by-metrics' import {Provider as DisableFollowersMetricsProvider} from './disable-followers-metrics' import {Provider as DisableFollowingMetricsProvider} from './disable-following-metrics' @@ -46,6 +47,10 @@ export { useSetRequireAltTextEnabled, } from './alt-text-required' export {useAutoplayDisabled, useSetAutoplayDisabled} from './autoplay' +export { + useDisableComposerPrompt, + useSetDisableComposerPrompt, +} from './disable-composer-prompt' export {useHapticsDisabled, useSetHapticsDisabled} from './disable-haptics' export { useExternalEmbedsPrefs, @@ -107,9 +112,11 @@ export function Provider({children}: React.PropsWithChildren<{}>) { - { - children - } + + { + children + } + diff --git a/src/view/com/posts/PostFeed.tsx b/src/view/com/posts/PostFeed.tsx index a47f37df9..453dcdd3e 100644 --- a/src/view/com/posts/PostFeed.tsx +++ b/src/view/com/posts/PostFeed.tsx @@ -36,6 +36,7 @@ import {logger} from '#/logger' import {usePostAuthorShadowFilter} from '#/state/cache/profile-shadow' import {listenPostCreated} from '#/state/events' import {useFeedFeedbackContext} from '#/state/feed-feedback' +import {useDisableComposerPrompt} from '#/state/preferences/disable-composer-prompt' import {useHideUnreplyablePosts} from '#/state/preferences/hide-unreplyable-posts' import {useRepostCarouselEnabled} from '#/state/preferences/repost-carousel-enabled' import {useTrendingSettings} from '#/state/preferences/trending' @@ -441,6 +442,7 @@ let PostFeed = ({ const repostCarouselEnabled = useRepostCarouselEnabled() const hideUnreplyablePosts = useHideUnreplyablePosts() + const disableComposerPrompt = useDisableComposerPrompt() if (feedType === 'following') { useRepostCarousel = repostCarouselEnabled @@ -624,6 +626,7 @@ let PostFeed = ({ // Show composer prompt for Discover and Following feeds if ( hasSession && + !disableComposerPrompt && (feedUriOrActorDid === DISCOVER_FEED_URI || feed === 'following') ) { @@ -648,7 +651,7 @@ let PostFeed = ({ } else if (feedKind === 'following') { if (sliceIndex === 0) { // Show composer prompt for Following feed - if (hasSession) { + if (hasSession && !disableComposerPrompt) { arr.push({ type: 'composerPrompt', key: 'composerPrompt-' + sliceIndex,