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,