Increase email reminder period to once per day

This commit is contained in:
Eric Bailey
2024-06-13 14:10:17 -05:00
parent e28125c126
commit fcc87bddab
3 changed files with 46 additions and 28 deletions
+1 -5
View File
@@ -53,10 +53,7 @@ import {MessagesSettingsScreen} from './screens/Messages/Settings'
import {useModalControls} from './state/modals' import {useModalControls} from './state/modals'
import {useUnreadNotifications} from './state/queries/notifications/unread' import {useUnreadNotifications} from './state/queries/notifications/unread'
import {useSession} from './state/session' import {useSession} from './state/session'
import { import {shouldRequestEmailConfirmation} from './state/shell/reminders'
setEmailConfirmationRequested,
shouldRequestEmailConfirmation,
} from './state/shell/reminders'
import {AccessibilitySettingsScreen} from './view/screens/AccessibilitySettings' import {AccessibilitySettingsScreen} from './view/screens/AccessibilitySettings'
import {CommunityGuidelinesScreen} from './view/screens/CommunityGuidelines' import {CommunityGuidelinesScreen} from './view/screens/CommunityGuidelines'
import {CopyrightPolicyScreen} from './view/screens/CopyrightPolicy' import {CopyrightPolicyScreen} from './view/screens/CopyrightPolicy'
@@ -585,7 +582,6 @@ function RoutesContainer({children}: React.PropsWithChildren<{}>) {
if (currentAccount && shouldRequestEmailConfirmation(currentAccount)) { if (currentAccount && shouldRequestEmailConfirmation(currentAccount)) {
openModal({name: 'verify-email', showReminder: true}) openModal({name: 'verify-email', showReminder: true})
setEmailConfirmationRequested()
} }
} }
+7
View File
@@ -61,3 +61,10 @@ export function getAge(birthDate: Date): number {
} }
return age return age
} }
export function toSimpleDateString(date: Date) {
const mm = date.getMonth() + 1 // 0-indexed
const dd = date.getDate()
const yyyy = date.getFullYear()
return `${yyyy}-${mm}-${dd}`
}
+41 -26
View File
@@ -1,38 +1,53 @@
import {toSimpleDateString} from '#/lib/strings/time'
import {logger} from '#/logger'
import * as persisted from '#/state/persisted' import * as persisted from '#/state/persisted'
import {toHashCode} from 'lib/strings/helpers'
import {SessionAccount} from '../session' import {SessionAccount} from '../session'
import {isOnboardingActive} from './onboarding' import {isOnboardingActive} from './onboarding'
export function shouldRequestEmailConfirmation(account: SessionAccount) { export function shouldRequestEmailConfirmation(account: SessionAccount) {
if (!account) { // ignore logged out
return false if (!account) return false
} // ignore confirmed accounts, this is the success state of this reminder
if (account.emailConfirmed) { if (account.emailConfirmed) return false
return false // wait for onboarding to complete
} if (isOnboardingActive()) return false
if (isOnboardingActive()) {
return false const stored = persisted.get('reminders').lastEmailConfirm
} const today = toSimpleDateString(new Date())
// only prompt once const snoozedAt = stored ? toSimpleDateString(new Date(stored)) : undefined
if (persisted.get('reminders').lastEmailConfirm) {
return false logger.debug('Checking email confirmation reminder', {
} today,
const now = new Date() snoozedAt,
const today = now.getDay() })
const tomorrow = (today + 1) % 7
// shard the users into 2 day of the week buckets // never been snoozed, new account
// (this is to avoid a sudden influx of email updates when if (!snoozedAt) {
// this feature rolls out) snooze()
const day = toHashCode(account.did) % 7
if (day !== today && day !== tomorrow) {
return false
}
return true return true
} }
export function setEmailConfirmationRequested() { // already snoozed today
if (snoozedAt === today) {
return false
}
// snoozed recently
if (snoozedAt !== today) {
snooze()
return true
}
return true
}
export function snooze() {
const lastEmailConfirm = new Date().toISOString()
logger.debug('Snoozing email confirmation reminder', {
snoozedAt: lastEmailConfirm,
})
persisted.write('reminders', { persisted.write('reminders', {
...persisted.get('reminders'), ...persisted.get('reminders'),
lastEmailConfirm: new Date().toISOString(), lastEmailConfirm,
}) })
} }