diff --git a/src/screens/Profile/Header/ProfileHeaderStandard.tsx b/src/screens/Profile/Header/ProfileHeaderStandard.tsx index 22f0cb8a1..4242689d5 100644 --- a/src/screens/Profile/Header/ProfileHeaderStandard.tsx +++ b/src/screens/Profile/Header/ProfileHeaderStandard.tsx @@ -21,6 +21,7 @@ import { } from '#/lib/strings/website' import {logger} from '#/logger' import {type Shadow, useProfileShadow} from '#/state/cache/profile-shadow' +import {useShowGermDmButton} from '#/state/preferences' import {useConfirmFollowUnfollow} from '#/state/preferences/confirm-follow-unfollow' import {useDisableFollowedByMetrics} from '#/state/preferences/disable-followed-by-metrics' import {useHideScaryFollowButtons} from '#/state/preferences/hide-scary-follow-buttons' @@ -97,6 +98,7 @@ let ProfileHeaderStandard = ({ useProfileShadow(profileUnshadowed) const {currentAccount} = useSession() const {_, i18n} = useLingui() + const showGermDmButton = useShowGermDmButton() const moderation = useMemo( () => moderateProfile(profile, moderationOpts), [profile, moderationOpts], @@ -236,7 +238,7 @@ let ProfileHeaderStandard = ({ ) : undefined} - {profile.associated?.germ && ( + {showGermDmButton && profile.associated?.germ && ( )} @@ -342,8 +344,9 @@ export function HeaderStandardButtons({ const hideScaryFollowButtons = useHideScaryFollowButtons() const confirmFollowUnfollow = useConfirmFollowUnfollow() const followPromptControl = Prompt.usePromptControl() - const [confirmationAction, setConfirmationAction] = - useState<'follow' | 'unfollow'>('follow') + const [confirmationAction, setConfirmationAction] = useState< + 'follow' | 'unfollow' + >('follow') const [pendingEphemeralAccount, setPendingEphemeralAccount] = useState(null) diff --git a/src/screens/Settings/RunesSettings/UsabilitySettings.tsx b/src/screens/Settings/RunesSettings/UsabilitySettings.tsx index d6b78d507..e41c8972a 100644 --- a/src/screens/Settings/RunesSettings/UsabilitySettings.tsx +++ b/src/screens/Settings/RunesSettings/UsabilitySettings.tsx @@ -1,6 +1,11 @@ import {Trans, useLingui} from '@lingui/react/macro' -import {useGoLinksEnabled, useSetGoLinksEnabled} from '#/state/preferences' +import { + useGoLinksEnabled, + useSetGoLinksEnabled, + useSetShowGermDmButton, + useShowGermDmButton, +} from '#/state/preferences' import { useConfirmFollowUnfollow, useSetConfirmFollowUnfollow, @@ -24,6 +29,7 @@ import * as Toggle from '#/components/forms/Toggle' import {ArrowShareRight_Stroke2_Corner2_Rounded as ArrowShareRightIcon} from '#/components/icons/ArrowShareRight' import {Check_Stroke2_Corner0_Rounded as CheckIcon} from '#/components/icons/Check' import {Envelope_Stroke2_Corner2_Rounded as EnvelopeIcon} from '#/components/icons/Envelope' +import {Message_Stroke2_Corner0_Rounded as MessageIcon} from '#/components/icons/Message' 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' @@ -41,6 +47,9 @@ export function RunesUsabilitySettingsScreen() { const hideScaryFollowButtons = useHideScaryFollowButtons() const setHideScaryFollowButtons = useSetHideScaryFollowButtons() + const showGermDmButton = useShowGermDmButton() + const setShowGermDmButton = useSetShowGermDmButton() + const confirmFollowUnfollow = useConfirmFollowUnfollow() const setConfirmFollowUnfollow = useSetConfirmFollowUnfollow() @@ -98,6 +107,19 @@ export function RunesUsabilitySettingsScreen() { + setShowGermDmButton(value)}> + + + + Show Germ DM button on profiles + + + + ) { - - - - - - - - - - - - - - - - - - - { - children - } - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + { + children + } + + + + + + + + + + + + + + + + + + + diff --git a/src/state/preferences/settings-sync.tsx b/src/state/preferences/settings-sync.tsx index 6f1379670..7d8ec8303 100644 --- a/src/state/preferences/settings-sync.tsx +++ b/src/state/preferences/settings-sync.tsx @@ -63,6 +63,7 @@ export const SYNCED_PREFS_KEYS = [ 'showFollowsYouBadge', 'hideSimilarAccountsRecomm', 'hideScaryFollowButtons', + 'showGermDmButton', 'confirmFollowUnfollow', 'discoverContextEnabled', 'compactPosts', diff --git a/src/state/preferences/show-germ-dm-button.tsx b/src/state/preferences/show-germ-dm-button.tsx new file mode 100644 index 000000000..5dc44e95b --- /dev/null +++ b/src/state/preferences/show-germ-dm-button.tsx @@ -0,0 +1,54 @@ +import { + createContext, + type PropsWithChildren, + useCallback, + useContext, + useEffect, + useState, +} from 'react' + +import * as persisted from '#/state/persisted' + +type StateContext = persisted.Schema['showGermDmButton'] +type SetContext = (v: persisted.Schema['showGermDmButton']) => void + +const stateContext = createContext( + persisted.defaults.showGermDmButton, +) +const setContext = createContext( + (_: persisted.Schema['showGermDmButton']) => {}, +) + +export function Provider({children}: PropsWithChildren<{}>) { + const [state, setState] = useState(persisted.get('showGermDmButton')) + + const setStateWrapped = useCallback( + (showGermDmButton: persisted.Schema['showGermDmButton']) => { + setState(showGermDmButton) + persisted.write('showGermDmButton', showGermDmButton) + }, + [setState], + ) + + useEffect(() => { + return persisted.onUpdate('showGermDmButton', nextValue => { + setState(nextValue) + }) + }, [setStateWrapped]) + + return ( + + + {children} + + + ) +} + +export function useShowGermDmButton() { + return useContext(stateContext) ?? persisted.defaults.showGermDmButton +} + +export function useSetShowGermDmButton() { + return useContext(setContext) +}