import { getSubscription } from '@/services/user/portal'; import { useQuery } from '@tanstack/react-query'; import { Dialog, DialogContent, DialogTitle } from '@workspace/airo-ui/components/dialog'; import { forwardRef, useImperativeHandle, useRef, useState } from 'react'; import TabContent from '@/components/SubscribePlan/PlanContent/index'; import PlanTabs from '@/components/SubscribePlan/PlanTabs/PlanTabs'; import { useTranslations } from 'next-intl'; export interface OfferDialogRef { show: () => void; hide: () => void; } const OfferDialog = forwardRef((props, ref) => { const t = useTranslations('components.offerDialog'); const [open, setOpen] = useState(false); const [tabValue, setTabValue] = useState<'year' | 'month'>('year'); const dialogRef = useRef(null); // 使用 useQuery 来管理请求 const { data = [], isLoading, error, refetch, } = useQuery({ queryKey: ['subscription'], queryFn: async () => { try { const response = await getSubscription({ skipErrorHandler: true }); // 确保返回有效的数组,避免 undefined const list = response.data?.data?.list || []; return list.filter((v) => v.unit_time === 'Month') as API.Subscribe[]; } catch (err) { // 自定义错误处理 console.error('获取订阅数据失败:', err); // 返回空数组而不是抛出错误,避免 queryFn 返回 undefined return [] as API.Subscribe[]; } }, enabled: true, // 初始不执行,手动控制 retry: 1, // 失败时重试1次 }); useImperativeHandle(ref, () => ({ show: () => { refetch(); setOpen(true); }, hide: () => setOpen(false), })); return (
{t('selectPlan')}
{t('selectYourPlan')}
); }); export default OfferDialog;