import type { components } from '@pipu/api-client'; import { AGE_GROUPS, GENDERS, unwrap } from '@pipu/core'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { useState, type ReactNode } from 'react'; import { useTranslation } from 'react-i18next'; import { ActivityIndicator, Pressable, ScrollView, Text, View } from 'react-native'; import { useSession, useSessionCtx, useUser } from '../lib/session'; import { useColors } from '../theme'; import { Button, ErrorBox, H1, Muted, Screen, useErrorText } from './kit'; type Options = components['schemas']['Onboarding']; type Choice = components['schemas']['OnboardingChoice']; function useOnboarding() { const session = useSession(); const user = useUser(); const { server } = useSessionCtx(); return useQuery({ queryKey: ['onboarding', server, user.id], queryFn: async () => unwrap(await session.client.GET('/api/v1/onboarding')), staleTime: 0, refetchInterval: 30_000 }); } export function OnboardingGate({ children }: { children: ReactNode }) { const query = useOnboarding(); const client = useQueryClient(); if (query.isPending) return ; if (!query.data?.required) return <>{children}; return void client.invalidateQueries({ queryKey: ['onboarding'] })} /> ; } export function RecommendationSettings() { const { t } = useTranslation(); const query = useOnboarding(); const client = useQueryClient(); const [editing, setEditing] = useState(false); const errorText = useErrorText(); return {editing && query.data ? { setEditing(false); void client.invalidateQueries({ queryKey: ['onboarding'] }); }} /> :