| | |
| | | import { useRouter, useSearchParams } from 'next/navigation' |
| | | import { useTranslation } from 'react-i18next' |
| | | import useSWR from 'swr' |
| | | import { useContext } from 'use-context-selector' |
| | | import I18n from '@/context/i18n' |
| | | import { |
| | | fetchDataSourceNotionBinding, |
| | | fetchFreeQuotaVerify, |
| | | } from '@/service/common' |
| | | import type { IConfirm } from '@/app/components/base/confirm' |
| | | import Confirm from '@/app/components/base/confirm' |
| | |
| | | return confirm |
| | | } |
| | | |
| | | const QUOTA_RECEIVE_STATUS: Record<string, any> = { |
| | | spark: { |
| | | success: { |
| | | 'en': 'Successful collection, the quota will be automatically increased after 5 minutes.', |
| | | 'zh-Hans': '领取成功,将在 5 分钟后自动增加配额', |
| | | }, |
| | | fail: { |
| | | 'en': 'Failure to collect', |
| | | 'zh-Hans': '领取失败', |
| | | }, |
| | | }, |
| | | zhipuai: { |
| | | success: { |
| | | 'en': 'Successful collection', |
| | | 'zh-Hans': '领取成功', |
| | | }, |
| | | fail: { |
| | | 'en': 'Failure to collect', |
| | | 'zh-Hans': '领取失败', |
| | | }, |
| | | }, |
| | | } |
| | | |
| | | const FREE_CHECK_PROVIDER = ['spark', 'zhipuai'] |
| | | export const useCheckFreeQuota = () => { |
| | | const { locale } = useContext(I18n) |
| | | const router = useRouter() |
| | | const [shouldVerify, setShouldVerify] = useState(false) |
| | | const searchParams = useSearchParams() |
| | | const type = searchParams.get('type') |
| | | const provider = searchParams.get('provider') |
| | | const result = searchParams.get('result') |
| | | const token = searchParams.get('token') |
| | | |
| | | const { data, error } = useSWR( |
| | | shouldVerify |
| | | ? `/workspaces/current/model-providers/${provider}/free-quota-qualification-verify?token=${token}` |
| | | : null, |
| | | fetchFreeQuotaVerify, |
| | | ) |
| | | |
| | | useEffect(() => { |
| | | if (error) |
| | | router.replace('/') |
| | | }, [error, router]) |
| | | |
| | | useEffect(() => { |
| | | if (type === 'provider_apply_callback' && FREE_CHECK_PROVIDER.includes(provider as string) && result === 'success') |
| | | setShouldVerify(true) |
| | | }, [type, provider, result]) |
| | | |
| | | return (data && provider) |
| | | ? { |
| | | type: data.flag ? 'info' : 'warning', |
| | | title: data.flag ? QUOTA_RECEIVE_STATUS[provider as string].success[locale] : QUOTA_RECEIVE_STATUS[provider].fail[locale], |
| | | desc: !data.flag ? data.reason : undefined, |
| | | } |
| | | : null |
| | | } |
| | | |
| | | export const useCheckNotion = () => { |
| | | const router = useRouter() |
| | | const [confirm, setConfirm] = useState<ConfirmType | null>(null) |
| | |
| | | const { t } = useTranslation() |
| | | const [showPayStatusModal, setShowPayStatusModal] = useState(true) |
| | | const anthropicConfirmInfo = useAnthropicCheckPay() |
| | | const freeQuotaConfirmInfo = useCheckFreeQuota() |
| | | const notionConfirmInfo = useCheckNotion() |
| | | const billingConfirmInfo = useBillingPay() |
| | | |
| | |
| | | router.replace('/') |
| | | }, [router]) |
| | | |
| | | const confirmInfo = anthropicConfirmInfo || notionConfirmInfo || billingConfirmInfo |
| | | const confirmInfo = anthropicConfirmInfo || freeQuotaConfirmInfo || notionConfirmInfo || billingConfirmInfo |
| | | |
| | | if (!confirmInfo || !showPayStatusModal) |
| | | return null |
| | |
| | | showCancel={false} |
| | | type={confirmInfo.type === 'info' ? 'info' : 'warning' } |
| | | title={confirmInfo.title} |
| | | content={(confirmInfo as unknown as { desc: string }).desc || ''} |
| | | content={(confirmInfo as { desc: string }).desc || ''} |
| | | confirmText={(confirmInfo.type === 'info' && t('common.operation.ok')) || ''} |
| | | /> |
| | | ) |