diff --git a/src/screens/Settings/DeerSettings.tsx b/src/screens/Settings/DeerSettings.tsx
index f04cb5955..fde918990 100644
--- a/src/screens/Settings/DeerSettings.tsx
+++ b/src/screens/Settings/DeerSettings.tsx
@@ -34,6 +34,10 @@ import {
useDirectFetchRecords,
useSetDirectFetchRecords,
} from '#/state/preferences/direct-fetch-records'
+import {
+ useHideFeedsPromoTab,
+ useSetHideFeedsPromoTab,
+} from '#/state/preferences/hide-feeds-promo-tab'
import {
useHideFollowNotifications,
useSetHideFollowNotifications,
@@ -263,6 +267,9 @@ export function DeerSettingsScreen({}: Props) {
const hideFollowNotifications = useHideFollowNotifications()
const setHideFollowNotifications = useSetHideFollowNotifications()
+ const hideFeedsPromoTab = useHideFeedsPromoTab()
+ const setHideFeedsPromoTab = useSetHideFeedsPromoTab()
+
const location = useGeolocation()
const setLocationControl = Dialog.useDialogControl()
@@ -521,6 +528,19 @@ export function DeerSettingsScreen({}: Props) {
+ setHideFeedsPromoTab(value)}
+ style={[a.w_full]}>
+
+ Hide "Feeds ✨" tab when only one feed is selected
+
+
+
diff --git a/src/state/persisted/schema.ts b/src/state/persisted/schema.ts
index df03cfd73..afc497d9b 100644
--- a/src/state/persisted/schema.ts
+++ b/src/state/persisted/schema.ts
@@ -134,6 +134,7 @@ const schema = z.object({
hideFollowNotifications: z.boolean().optional(),
constellationInstance: z.string().optional(),
showLinkInHandle: z.boolean().optional(),
+ hideFeedsPromoTab: z.boolean().optional(),
deerVerification: z
.object({
enabled: z.boolean(),
@@ -203,6 +204,7 @@ export const defaults: Schema = {
hideFollowNotifications: false,
constellationInstance: 'https://constellation.microcosm.blue/',
showLinkInHandle: false,
+ hideFeedsPromoTab: false,
deerVerification: {
enabled: false,
// https://deer.social/profile/did:plc:p2cp5gopk7mgjegy6wadk3ep/post/3lndyqyyr4k2k
diff --git a/src/state/preferences/hide-feeds-promo-tab.tsx b/src/state/preferences/hide-feeds-promo-tab.tsx
new file mode 100644
index 000000000..4479c1842
--- /dev/null
+++ b/src/state/preferences/hide-feeds-promo-tab.tsx
@@ -0,0 +1,50 @@
+import React from 'react'
+
+import * as persisted from '#/state/persisted'
+
+// Preference: hideFeedsPromoTab – when true, suppress the "Feeds ✨" promotional tab in HomeHeader.
+
+type StateContext = persisted.Schema['hideFeedsPromoTab']
+// Same setter signature used across other preference modules
+type SetContext = (v: persisted.Schema['hideFeedsPromoTab']) => void
+
+const stateContext = React.createContext(
+ persisted.defaults.hideFeedsPromoTab,
+)
+const setContext = React.createContext(
+ (_: persisted.Schema['hideFeedsPromoTab']) => {},
+)
+
+export function Provider({children}: React.PropsWithChildren<{}>) {
+ const [state, setState] = React.useState(persisted.get('hideFeedsPromoTab'))
+
+ const setStateWrapped = React.useCallback(
+ (value: persisted.Schema['hideFeedsPromoTab']) => {
+ setState(value)
+ persisted.write('hideFeedsPromoTab', value)
+ },
+ [setState],
+ )
+
+ React.useEffect(() => {
+ return persisted.onUpdate('hideFeedsPromoTab', next => {
+ setState(next)
+ })
+ }, [setStateWrapped])
+
+ return (
+
+
+ {children}
+
+
+ )
+}
+
+export function useHideFeedsPromoTab() {
+ return React.useContext(stateContext)
+}
+
+export function useSetHideFeedsPromoTab() {
+ return React.useContext(setContext)
+}
\ No newline at end of file
diff --git a/src/state/preferences/index.tsx b/src/state/preferences/index.tsx
index f7a00d62e..9f4188729 100644
--- a/src/state/preferences/index.tsx
+++ b/src/state/preferences/index.tsx
@@ -8,9 +8,10 @@ import {Provider as DeerVerificationProvider} from './deer-verification'
import {Provider as DirectFetchRecordsProvider} from './direct-fetch-records'
import {Provider as DisableHapticsProvider} from './disable-haptics'
import {Provider as ExternalEmbedsProvider} from './external-embeds-prefs'
+import {Provider as FollowNotificationsProvider} from './hide-follow-notifications'
import {Provider as GoLinksProvider} from './go-links-enabled'
import {Provider as HiddenPostsProvider} from './hidden-posts'
-import {Provider as FollowNotificationsProvider} from './hide-follow-notifications'
+import {Provider as HideFeedsPromoTabProvider} from './hide-feeds-promo-tab'
import {Provider as InAppBrowserProvider} from './in-app-browser'
import {Provider as KawaiiProvider} from './kawaii'
import {Provider as LanguagesProvider} from './languages'
@@ -35,6 +36,7 @@ export {
} from './external-embeds-prefs'
export {useGoLinksEnabled, useSetGoLinksEnabled} from './go-links-enabled'
export * from './hidden-posts'
+export {useHideFeedsPromoTab, useSetHideFeedsPromoTab} from './hide-feeds-promo-tab'
export {useLabelDefinitions} from './label-defs'
export {useLanguagePrefs, useLanguagePrefsApi} from './languages'
export {useSetSubtitlesEnabled, useSubtitlesEnabled} from './subtitles'
@@ -63,7 +65,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
- {children}
+
+ {children}
+
diff --git a/src/view/com/home/HomeHeader.tsx b/src/view/com/home/HomeHeader.tsx
index 0ec9ac753..9c647c8ee 100644
--- a/src/view/com/home/HomeHeader.tsx
+++ b/src/view/com/home/HomeHeader.tsx
@@ -1,5 +1,6 @@
import React from 'react'
import {useNavigation} from '@react-navigation/native'
+import {useHideFeedsPromoTab} from '#/state/preferences/hide-feeds-promo-tab'
import {NavigationProp} from '#/lib/routes/types'
import {FeedSourceInfo} from '#/state/queries/feed'
@@ -17,6 +18,7 @@ export function HomeHeader(
) {
const {feeds} = props
const {hasSession} = useSession()
+ const hideFeedsPromoTab = useHideFeedsPromoTab()
const navigation = useNavigation()
const hasPinnedCustom = React.useMemo(() => {
@@ -29,11 +31,11 @@ export function HomeHeader(
const items = React.useMemo(() => {
const pinnedNames = feeds.map(f => f.displayName)
- if (!hasPinnedCustom) {
+ if (!hasPinnedCustom && !hideFeedsPromoTab) {
return pinnedNames.concat('Feeds ✨')
}
return pinnedNames
- }, [hasPinnedCustom, feeds])
+ }, [hasPinnedCustom, hideFeedsPromoTab, feeds])
const onPressFeedsLink = React.useCallback(() => {
navigation.navigate('Feeds')
@@ -41,13 +43,13 @@ export function HomeHeader(
const onSelect = React.useCallback(
(index: number) => {
- if (!hasPinnedCustom && index === items.length - 1) {
+ if (!hasPinnedCustom && !hideFeedsPromoTab && index === items.length - 1) {
onPressFeedsLink()
} else if (props.onSelect) {
props.onSelect(index)
}
},
- [items.length, onPressFeedsLink, props, hasPinnedCustom],
+ [items.length, onPressFeedsLink, props, hasPinnedCustom, hideFeedsPromoTab],
)
return (