diff --git a/src/components/AIQuiz/AIQuiz.tsx b/src/components/AIQuiz/AIQuiz.tsx index 0613377de..bd2c778b3 100644 --- a/src/components/AIQuiz/AIQuiz.tsx +++ b/src/components/AIQuiz/AIQuiz.tsx @@ -1,18 +1,15 @@ import { useQuery } from '@tanstack/react-query'; import { useState } from 'react'; -import { flushSync } from 'react-dom'; -import { useToast } from '../../hooks/use-toast'; import { queryClient } from '../../stores/query-client'; import { UpgradeAccountModal } from '../Billing/UpgradeAccountModal'; import { AlertCircleIcon } from 'lucide-react'; -import { isLoggedIn } from '../../lib/jwt'; -import { showLoginPopup } from '../../lib/popup'; import { getAiCourseLimitOptions } from '../../queries/ai-course'; import { billingDetailsOptions } from '../../queries/billing'; import { AIQuizLayout } from './AIQuizLayout'; import { GenerateAIQuiz } from './GenerateAIQuiz'; import { aiQuizOptions, generateAIQuiz } from '../../queries/ai-quiz'; import { AIQuizContent } from './AIQuizContent'; +import { LoadingChip } from '../LoadingChip'; type AIQuizProps = { quizSlug?: string; @@ -54,18 +51,24 @@ export function AIQuiz(props: AIQuizProps) { setShowUpgradeModal(false)} /> )} - {!isLoading && aiQuizError && ( -
-
- -

- {aiQuizError?.message || 'Something went wrong'} -

+
+ {isLoading && ( +
+
-
- )} + )} + + {!isLoading && aiQuizError && ( +
+
+ +

+ {aiQuizError?.message || 'Something went wrong'} +

+
+
+ )} -
{quizSlug && !aiQuizError && ( ('mcq'); - // question answer chat options const [showFineTuneOptions, setShowFineTuneOptions] = useState(false); const [questionAnswerChatMessages, setQuestionAnswerChatMessages] = useState< QuestionAnswerChatMessage[] >([]); + const { + data: tokenUsage, + isLoading: isTokenUsageLoading, + refetch: refetchTokenUsage, + } = useQuery(getAiCourseLimitOptions(), queryClient); + + const { data: userBillingDetails, isLoading: isBillingDetailsLoading } = + useQuery(billingDetailsOptions(), queryClient); + + const isLimitExceeded = (tokenUsage?.used || 0) >= (tokenUsage?.limit || 0); + const isPaidUser = userBillingDetails?.status === 'active'; + const titleFieldId = useId(); const fineTuneOptionsId = useId(); @@ -88,6 +101,11 @@ export function AIQuizGenerator() { return; } + if (!isPaidUser && isLimitExceeded) { + setIsUpgradeModalOpen(true); + return; + } + let sessionId = ''; if (showFineTuneOptions) { clearQuestionAnswerChatMessages(); @@ -117,7 +135,8 @@ export function AIQuizGenerator() { {isUpgradeModalOpen && ( setIsUpgradeModalOpen(false)} /> )} - {!isPaidUser && !isPaidUserLoading && isLoggedIn() && ( + + {!isPaidUser && !isBillingDetailsLoading && isLoggedIn() && (
You are on the free plan