From eb0c5f57f17731929c4888db7b77731f8584cf80 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Mon, 7 Jul 2025 13:18:03 -0500 Subject: [PATCH] Use real endpoints, optimistic state --- .../ageAssurance/useInitAgeAssurance.ts | 40 ++++++++++--------- src/state/age-assurance/index.tsx | 9 +---- 2 files changed, 23 insertions(+), 26 deletions(-) diff --git a/src/components/ageAssurance/useInitAgeAssurance.ts b/src/components/ageAssurance/useInitAgeAssurance.ts index 9d79ca31c8..3d68836bf2 100644 --- a/src/components/ageAssurance/useInitAgeAssurance.ts +++ b/src/components/ageAssurance/useInitAgeAssurance.ts @@ -1,30 +1,32 @@ -import {useMutation} from '@tanstack/react-query' +import { + type AppBskyUnspeccedDefs, + type AppBskyUnspeccedInitAgeAssurance, +} from '@atproto/api' +import {useMutation, useQueryClient} from '@tanstack/react-query' import {wait} from '#/lib/async/wait' import {isNetworkError} from '#/lib/hooks/useCleanError' import {logger} from '#/logger' -// import {useAgent} from '#/state/session'; - -type TempInputSchema = { - email: string - language: string -} +import {createAgeAssuranceQueryKey} from '#/state/age-assurance' +import {useAgent} from '#/state/session' export function useInitAgeAssurance() { - // const agent = useAgent() + const qc = useQueryClient() + const agent = useAgent() return useMutation({ - async mutationFn(_props: TempInputSchema) { - // 2s wait is good actually, email sending takes a hot sec - // const {data} = await wait(2e3, agent.app.bsky.unspecced.initAgeAssurance(props)) - await wait( + async mutationFn(props: AppBskyUnspeccedInitAgeAssurance.InputSchema) { + /* + * 2s wait is good actually. Email sending takes a hot sec and this helps + * ensure the email is ready for the user once they open their inbox. + */ + const {data} = await wait( 2e3, - (() => ({ - data: { - $type: 'app.bsky.unspecced.defs#ageAssuranceState', - lastInitiatedAt: new Date().toISOString(), - status: 'pending', - }, - }))(), + agent.app.bsky.unspecced.initAgeAssurance(props), + ) + + qc.setQueryData( + createAgeAssuranceQueryKey(agent.session?.did ?? 'never'), + () => data, ) }, onError(e) { diff --git a/src/state/age-assurance/index.tsx b/src/state/age-assurance/index.tsx index 225f5c6a11..730788996e 100644 --- a/src/state/age-assurance/index.tsx +++ b/src/state/age-assurance/index.tsx @@ -14,7 +14,7 @@ import {preferencesQueryKey} from '#/state/queries/preferences' import {useAgent} from '#/state/session' const logger = Logger.create(Logger.Context.AgeAssurance) -const createAgeAssuranceQueryKey = (did: string) => +export const createAgeAssuranceQueryKey = (did: string) => ['ageAssurance', did] as const const DEFAULT_AGE_ASSURANCE_STATE: AppBskyUnspeccedDefs.AgeAssuranceState = { lastInitiatedAt: undefined, @@ -44,12 +44,7 @@ export function Provider({children}: {children: React.ReactNode}) { try { const {data} = await wait( 1e3, - (() => ({ - data: { - lastInitiatedAt: undefined, - status: 'unknown', - } as AppBskyUnspeccedDefs.AgeAssuranceState, - }))(), + agent.app.bsky.unspecced.getAgeAssuranceState(), ) logger.debug(`fetch`, {