diff --git a/src/Navigation.tsx b/src/Navigation.tsx index 181a847a9..f434cb9b1 100644 --- a/src/Navigation.tsx +++ b/src/Navigation.tsx @@ -133,6 +133,7 @@ import {RunesDisplayAlsoLikedSettingsScreen} from '#/screens/Settings/RunesSetti import {RunesBadgesSettingsScreen} from '#/screens/Settings/RunesSettings/BadgesSettings' import {RunesDisplaySettingsScreen} from '#/screens/Settings/RunesSettings/DisplaySettings' import {RunesExtraSettingsScreen} from '#/screens/Settings/RunesSettings/ExtraSettings' +import {RunesUsabilityFeedSettingsScreen} from '#/screens/Settings/RunesSettings/FeedSettings' import {RunesImpressionsSettingsScreen} from '#/screens/Settings/RunesSettings/ImpressionsSettings' import {RunesInfrastructureSettingsScreen} from '#/screens/Settings/RunesSettings/InfrastructureSettings' import {RunesMenusSettingsScreen} from '#/screens/Settings/RunesSettings/MenusSettings' @@ -453,6 +454,11 @@ function commonScreens(Stack: typeof Flat, unreadCountLabel?: string) { getComponent={() => RunesUsabilitySettingsScreen} options={{title: title(msg`Usability`), requireAuth: true}} /> + RunesUsabilityFeedSettingsScreen} + options={{title: title(msg`Feeds`), requireAuth: true}} + /> RunesDisplaySettingsScreen} diff --git a/src/lib/routes/types.ts b/src/lib/routes/types.ts index 2bf070425..ca79856cd 100644 --- a/src/lib/routes/types.ts +++ b/src/lib/routes/types.ts @@ -56,6 +56,7 @@ export type CommonNavigatorParams = { RunesBadgesSettings: undefined RunesImpressionsSettings: undefined RunesUsabilitySettings: undefined + RunesUsabilityFeedSettings: undefined RunesDisplaySettings: undefined RunesDisplayAlsoLikedSettings: undefined RunesInfrastructureSettings: undefined diff --git a/src/routes.ts b/src/routes.ts index d870851f0..65743c3ac 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -53,6 +53,7 @@ export const router = new Router({ RunesBadgesSettings: '/settings/runes/badges', RunesImpressionsSettings: '/settings/runes/impressions', RunesUsabilitySettings: '/settings/runes/usability', + RunesUsabilityFeedSettings: '/settings/runes/usability/feeds', RunesDisplaySettings: '/settings/runes/display', RunesDisplayAlsoLikedSettings: '/settings/runes/display/also-liked', RunesInfrastructureSettings: '/settings/runes/infrastructure', diff --git a/src/screens/Settings/RunesSettings/FeedSettings.tsx b/src/screens/Settings/RunesSettings/FeedSettings.tsx new file mode 100644 index 000000000..d9237393b --- /dev/null +++ b/src/screens/Settings/RunesSettings/FeedSettings.tsx @@ -0,0 +1,129 @@ +import {Trans, useLingui} from '@lingui/react/macro' + +import { + useDisableComposerPrompt, + useSetDisableComposerPrompt, +} from '#/state/preferences/disable-composer-prompt' +import { + useDisableTopOfFeedButton, + useSetDisableTopOfFeedButton, +} from '#/state/preferences/disable-top-of-feed-button' +import { + useHideFeedsPromoTab, + useSetHideFeedsPromoTab, +} from '#/state/preferences/hide-feeds-promo-tab' +import { + useHideUnreplyablePosts, + useSetHideUnreplyablePosts, +} from '#/state/preferences/hide-unreplyable-posts' +import { + useNoDiscoverFallback, + useSetNoDiscoverFallback, +} from '#/state/preferences/no-discover-fallback' +import * as SettingsList from '#/screens/Settings/components/SettingsList' +import {atoms as a} from '#/alf' +import {Admonition} from '#/components/Admonition' +import * as Toggle from '#/components/forms/Toggle' +import {ArrowTopCircle_Stroke2_Corner0_Rounded as ArrowTopIcon} from '#/components/icons/ArrowTopCircle' +import {Eye_Stroke2_Corner2_Rounded as EyeIcon} from '#/components/icons/Eye' +import {EyeSlash_Stroke2_Corner0_Rounded as EyeSlashIcon} from '#/components/icons/EyeSlash' +import {PencilLine_Stroke2_Corner2_Rounded as PencilIcon} from '#/components/icons/Pencil' +import {Reply as ReplyIcon} from '#/components/icons/Reply' +import {RunesScreenLayout} from './components/RunesScreenLayout' + +export function RunesUsabilityFeedSettingsScreen() { + const {t: l} = useLingui() + + const noDiscoverFallback = useNoDiscoverFallback() + const setNoDiscoverFallback = useSetNoDiscoverFallback() + + const hideFeedsPromoTab = useHideFeedsPromoTab() + const setHideFeedsPromoTab = useSetHideFeedsPromoTab() + + const disableComposerPrompt = useDisableComposerPrompt() + const setDisableComposerPrompt = useSetDisableComposerPrompt() + + const disableTopOfFeedButton = useDisableTopOfFeedButton() + const setDisableTopOfFeedButton = useSetDisableTopOfFeedButton() + + const hideUnreplyablePosts = useHideUnreplyablePosts() + const setHideUnreplyablePosts = useSetHideUnreplyablePosts() + + return ( + + setNoDiscoverFallback(value)}> + + + + Do not fall back to discover feed + + + + + setHideFeedsPromoTab(value)}> + + + + Hide "Feeds ✨" tab when only one feed is selected + + + + + setDisableComposerPrompt(value)}> + + + + Disable composer prompt + + + + + setDisableTopOfFeedButton(value)}> + + + + Disable top-of-feed button + + + + + setHideUnreplyablePosts(value)}> + + + + Hide posts that cannot be replied to from feeds + + + + + + + + Hides posts from feeds where replies are disabled (e.g. due to + postgates or other restrictions). Does not affect thread views. + + + + + ) +} diff --git a/src/screens/Settings/RunesSettings/UsabilitySettings.tsx b/src/screens/Settings/RunesSettings/UsabilitySettings.tsx index d13ceb022..4a0fccce6 100644 --- a/src/screens/Settings/RunesSettings/UsabilitySettings.tsx +++ b/src/screens/Settings/RunesSettings/UsabilitySettings.tsx @@ -1,22 +1,10 @@ import {Trans, useLingui} from '@lingui/react/macro' import {useGoLinksEnabled, useSetGoLinksEnabled} from '#/state/preferences' -import { - useDisableComposerPrompt, - useSetDisableComposerPrompt, -} from '#/state/preferences/disable-composer-prompt' -import { - useDisableTopOfFeedButton, - useSetDisableTopOfFeedButton, -} from '#/state/preferences/disable-top-of-feed-button' import { useDisableVerifyEmailReminder, useSetDisableVerifyEmailReminder, } from '#/state/preferences/disable-verify-email-reminder' -import { - useHideFeedsPromoTab, - useSetHideFeedsPromoTab, -} from '#/state/preferences/hide-feeds-promo-tab' import { useHideScaryFollowButtons, useSetHideScaryFollowButtons, @@ -25,27 +13,15 @@ import { useHideSimilarAccountsRecomm, useSetHideSimilarAccountsRecomm, } from '#/state/preferences/hide-similar-accounts-recommendations' -import { - useHideUnreplyablePosts, - useSetHideUnreplyablePosts, -} from '#/state/preferences/hide-unreplyable-posts' -import { - useNoDiscoverFallback, - useSetNoDiscoverFallback, -} from '#/state/preferences/no-discover-fallback' import * as SettingsList from '#/screens/Settings/components/SettingsList' import {atoms as a} from '#/alf' import {Admonition} from '#/components/Admonition' import * as Toggle from '#/components/forms/Toggle' import {ArrowShareRight_Stroke2_Corner2_Rounded as ArrowShareRightIcon} from '#/components/icons/ArrowShareRight' -import {ArrowTopCircle_Stroke2_Corner0_Rounded as ArrowTopIcon} from '#/components/icons/ArrowTopCircle' import {Envelope_Stroke2_Corner2_Rounded as EnvelopeIcon} from '#/components/icons/Envelope' -import {Eye_Stroke2_Corner2_Rounded as EyeIcon} from '#/components/icons/Eye' -import {EyeSlash_Stroke2_Corner0_Rounded as EyeSlashIcon} from '#/components/icons/EyeSlash' -import {PencilLine_Stroke2_Corner2_Rounded as PencilIcon} from '#/components/icons/Pencil' +import {Newspaper_Stroke2_Corner2_Rounded as NewspaperIcon} from '#/components/icons/Newspaper' import {PersonGroup_Stroke2_Corner2_Rounded as PersonGroupIcon} from '#/components/icons/Person' import {PlusLarge_Stroke2_Corner0_Rounded as PlusIcon} from '#/components/icons/Plus' -import {Reply as ReplyIcon} from '#/components/icons/Reply' import {RunesScreenLayout} from './components/RunesScreenLayout' export function RunesUsabilitySettingsScreen() { @@ -54,32 +30,25 @@ export function RunesUsabilitySettingsScreen() { const goLinksEnabled = useGoLinksEnabled() const setGoLinksEnabled = useSetGoLinksEnabled() - const noDiscoverFallback = useNoDiscoverFallback() - const setNoDiscoverFallback = useSetNoDiscoverFallback() - - const hideFeedsPromoTab = useHideFeedsPromoTab() - const setHideFeedsPromoTab = useSetHideFeedsPromoTab() - const hideSimilarAccountsRecomm = useHideSimilarAccountsRecomm() const setHideSimilarAccountsRecomm = useSetHideSimilarAccountsRecomm() - const hideUnreplyablePosts = useHideUnreplyablePosts() - const setHideUnreplyablePosts = useSetHideUnreplyablePosts() - const hideScaryFollowButtons = useHideScaryFollowButtons() const setHideScaryFollowButtons = useSetHideScaryFollowButtons() - const disableComposerPrompt = useDisableComposerPrompt() - const setDisableComposerPrompt = useSetDisableComposerPrompt() - - const disableTopOfFeedButton = useDisableTopOfFeedButton() - const setDisableTopOfFeedButton = useSetDisableTopOfFeedButton() - const disableVerifyEmailReminder = useDisableVerifyEmailReminder() const setDisableVerifyEmailReminder = useSetDisableVerifyEmailReminder() return ( + + + + Feeds + + - setNoDiscoverFallback(value)}> - - - - Do not fall back to discover feed - - - - - setHideFeedsPromoTab(value)}> - - - - Hide "Feeds ✨" tab when only one feed is selected - - - - - setDisableComposerPrompt(value)}> - - - - Disable composer prompt - - - - - setDisableTopOfFeedButton(value)}> - - - - Disable top-of-feed button - - - - - setHideUnreplyablePosts(value)}> - - - - Hide posts that cannot be replied to from feeds - - - - - - - - Hides posts from feeds where replies are disabled (e.g. due to - postgates or other restrictions). Does not affect thread views. - - -