tweak to disable email verification reminder popup #19

merged
opened by daniela.lol targeting main

this also changes the popup a bit for more of a witchsky style, please read the code comments i left in src/alf/tokens.ts and src/components/dialogs/EmailDialog/screens/VerificationReminder.tsx

this does not bypass any feature on bluesky that is locked behind a email verification if the pds is setup that way, this only gets rid of the reminder so if ur using a bluesky pds that doesnt have email verification but fully functions without a verified email, u dont need to get a pointless reminder every day

praying nothing goes wrong, still cant fork the repo

Changed files
+105 -12
src
alf
components
dialogs
EmailDialog
screens
Settings
state
+4 -1
src/Navigation.tsx
···
import {bskyTitle} from '#/lib/strings/headings'
import {logger} from '#/logger'
import {isNative, isWeb} from '#/platform/detection'
+
import {useDisableVerifyEmailReminder} from '#/state/preferences/disable-verify-email-reminder'
import {useUnreadNotifications} from '#/state/queries/notifications/unread'
import {useSession} from '#/state/session'
import {
···
const emailDialogControl = useEmailDialogControl()
const closeAllActiveElements = useCloseAllActiveElements()
+
const disableVerifyEmailReminder = useDisableVerifyEmailReminder()
+
/**
* Handle navigation to a conversation, or prepares for account switch.
*
···
function onReady() {
prevLoggedRouteName.current = getCurrentRouteName()
-
if (currentAccount && shouldRequestEmailConfirmation(currentAccount)) {
+
if (currentAccount && shouldRequestEmailConfirmation(currentAccount) && !disableVerifyEmailReminder) {
emailDialogControl.open({
id: EmailDialogScreenID.VerificationReminder,
})
+2
src/alf/tokens.ts
···
temp_purple_dark: tokens.labelerColor.purple_dark,
} as const
+
// FIXME: some of these should probs be changed up for witchsky branding reasons, they should also work with all the other themes
+
export const gradients = {
primary: {
values: [
+7 -2
src/components/dialogs/EmailDialog/screens/VerificationReminder.tsx
···
const dialogPadding = gtMobile ? a.p_2xl.padding : a.p_xl.padding
+
// FIXME: the usage of "tokens.gradients.summer" here is temporary,
+
// its the closest thats built into bluesky that matches witchskys color scheme
+
// someone, preferbly xan, should edit src/alf/tokens.ts to have proper witchsky colors
+
// maybe even support all the other themes too?
+
return (
<View style={[a.gap_lg]}>
<View
···
borderTopRightRadius: a.rounded_md.borderRadius,
},
]}>
-
<GradientFill gradient={tokens.gradients.primary} />
+
<GradientFill gradient={tokens.gradients.summer} />
<ShieldIcon width={64} fill="white" style={[a.z_10]} />
</View>
</View>
···
<Text style={[a.text_sm, a.leading_snug, t.atoms.text_contrast_medium]}>
<Trans>
Your email has not yet been verified. Please verify your email in
-
order to enjoy all the features of Bluesky.
+
order to enjoy all the features of Witchsky.
</Trans>
</Text>
</View>
+34 -8
src/screens/Settings/DeerSettings.tsx
···
useDirectFetchRecords,
useSetDirectFetchRecords,
} from '#/state/preferences/direct-fetch-records'
+
import {
+
useDisableFollowedByMetrics,
+
useSetDisableFollowedByMetrics
+
} from '#/state/preferences/disable-followed-by-metrics'
import {
useDisableFollowersMetrics,
useSetDisableFollowersMetrics
···
useDisableFollowingMetrics,
useSetDisableFollowingMetrics
} from '#/state/preferences/disable-following-metrics'
-
import {
-
useDisableFollowedByMetrics,
-
useSetDisableFollowedByMetrics
-
} from '#/state/preferences/disable-followed-by-metrics'
import {
useDisableLikesMetrics,
useSetDisableLikesMetrics,
} from '#/state/preferences/disable-likes-metrics'
+
import {
+
useDisablePostsMetrics,
+
useSetDisablePostsMetrics,
+
} from '#/state/preferences/disable-posts-metrics'
import {
useDisableQuotesMetrics,
useSetDisableQuotesMetrics,
···
useDisableReplyMetrics,
useSetDisableReplyMetrics,
} from '#/state/preferences/disable-reply-metrics'
-
import {
-
useDisablePostsMetrics,
-
useSetDisablePostsMetrics,
-
} from '#/state/preferences/disable-posts-metrics'
import {
useDisableRepostsMetrics,
useSetDisableRepostsMetrics,
···
useDisableSavesMetrics,
useSetDisableSavesMetrics,
} from '#/state/preferences/disable-saves-metrics'
+
import {
+
useDisableVerifyEmailReminder,
+
useSetDisableVerifyEmailReminder,
+
} from '#/state/preferences/disable-verify-email-reminder'
import {
useDisableViaRepostNotification,
useSetDisableViaRepostNotification,
···
const enableSquareButtons = useEnableSquareButtons()
const setEnableSquareButtons = useSetEnableSquareButtons()
+
const disableVerifyEmailReminder = useDisableVerifyEmailReminder()
+
const setDisableVerifyEmailReminder = useSetDisableVerifyEmailReminder()
+
const constellationInstance = useConstellationInstance()
const setConstellationInstanceControl = Dialog.useDialogControl()
···
</Toggle.LabelText>
<Toggle.Platform />
</Toggle.Item>
+
+
<Toggle.Item
+
name="disable_verify_email_reminder"
+
label={_(msg`Disable verify email reminder`)}
+
value={disableVerifyEmailReminder}
+
onChange={value => setDisableVerifyEmailReminder(value)}
+
style={[a.w_full]}>
+
<Toggle.LabelText style={[a.flex_1]}>
+
<Trans>Disable verify email reminder</Trans>
+
</Toggle.LabelText>
+
<Toggle.Platform />
+
</Toggle.Item>
+
<Admonition type="warning" style={[a.flex_1]}>
+
<Trans>
+
This only gets rid of the reminder on app launch,
+
useful if your PDS does not have email verification setup.\nThis
+
does NOT give access to features locked behind email verification.
+
</Trans>
+
</Admonition>
</SettingsList.Group>
<SettingsList.Group contentContainerStyle={[a.gap_sm]}>
+2
src/state/persisted/schema.ts
···
hideSimilarAccountsRecomm: z.boolean().optional(),
enableSquareAvatars: z.boolean().optional(),
enableSquareButtons: z.boolean().optional(),
+
disableVerifyEmailReminder: z.boolean().optional(),
deerVerification: z
.object({
enabled: z.boolean(),
···
hideSimilarAccountsRecomm: true,
enableSquareAvatars: false,
enableSquareButtons: false,
+
disableVerifyEmailReminder: false,
deerVerification: {
enabled: false,
// https://witchsky.app/profile/did:plc:p2cp5gopk7mgjegy6wadk3ep/post/3lndyqyyr4k2k
+52
src/state/preferences/disable-verify-email-reminder.tsx
···
+
import React from 'react'
+
+
import * as persisted from '#/state/persisted'
+
+
// Preference: disableVerifyEmailReminder – when true, disables the "verify email" reminder that you get on boot on mobile, useful if you are on a PDS without any email verification setup
+
+
type StateContext = persisted.Schema['disableVerifyEmailReminder']
+
// Same setter signature used across other preference modules
+
type SetContext = (v: persisted.Schema['disableVerifyEmailReminder']) => void
+
+
const stateContext = React.createContext<StateContext>(
+
persisted.defaults.disableVerifyEmailReminder,
+
)
+
const setContext = React.createContext<SetContext>(
+
(_: persisted.Schema['disableVerifyEmailReminder']) => {},
+
)
+
+
export function Provider({children}: React.PropsWithChildren<{}>) {
+
const [state, setState] = React.useState(
+
persisted.get('disableVerifyEmailReminder'),
+
)
+
+
const setStateWrapped = React.useCallback(
+
(value: persisted.Schema['disableVerifyEmailReminder']) => {
+
setState(value)
+
persisted.write('disableVerifyEmailReminder', value)
+
},
+
[setState],
+
)
+
+
React.useEffect(() => {
+
return persisted.onUpdate('disableVerifyEmailReminder', next => {
+
setState(next)
+
})
+
}, [setStateWrapped])
+
+
return (
+
<stateContext.Provider value={state}>
+
<setContext.Provider value={setStateWrapped}>
+
{children}
+
</setContext.Provider>
+
</stateContext.Provider>
+
)
+
}
+
+
export function useDisableVerifyEmailReminder() {
+
return React.useContext(stateContext)
+
}
+
+
export function useSetDisableVerifyEmailReminder() {
+
return React.useContext(setContext)
+
}
+4 -1
src/state/preferences/index.tsx
···
import {Provider as DisableReplyMetricsProvider} from './disable-reply-metrics'
import {Provider as DisableRepostsMetricsProvider} from './disable-reposts-metrics'
import {Provider as DisableSavesMetricsProvider} from './disable-saves-metrics'
+
import {Provider as DisableVerifyEmailReminderProvider} from './disable-verify-email-reminder'
import {Provider as DisableViaRepostNotificationProvider} from './disable-via-repost-notification'
import {Provider as EnableSquareAvatarsProvider} from './enable-square-avatars'
import {Provider as EnableSquareButtonsProvider} from './enable-square-buttons'
···
<HideSimilarAccountsRecommProvider>
<EnableSquareAvatarsProvider>
<EnableSquareButtonsProvider>
-
{children}
+
<DisableVerifyEmailReminderProvider>
+
{children}
+
</DisableVerifyEmailReminderProvider>
</EnableSquareButtonsProvider>
</EnableSquareAvatarsProvider>
</HideSimilarAccountsRecommProvider>