From c8ca880b08dc2a76cd6c7e10045dc2ca72373203 Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Tue, 23 Sep 2025 15:24:52 +0100 Subject: [PATCH] feat: make AI courses/guides look like courses/guides --- src/components/TopicDetail/TopicDetail.tsx | 94 ++++++++----------- .../TopicDetail/TopicDetailLink.tsx | 2 +- 2 files changed, 42 insertions(+), 54 deletions(-) diff --git a/src/components/TopicDetail/TopicDetail.tsx b/src/components/TopicDetail/TopicDetail.tsx index d8fcdda8d..98798efed 100644 --- a/src/components/TopicDetail/TopicDetail.tsx +++ b/src/components/TopicDetail/TopicDetail.tsx @@ -1,11 +1,27 @@ import { useEffect, useMemo, useRef, useState } from 'react'; +import { useChat } from '@ai-sdk/react'; +import { useQuery } from '@tanstack/react-query'; +import { + Ban, + FileText, HeartHandshake, + Star, + X, + Zap +} from 'lucide-react'; import { useKeydown } from '../../hooks/use-keydown'; import { useLoadTopic } from '../../hooks/use-load-topic'; import { useOutsideClick } from '../../hooks/use-outside-click'; +import { useToast } from '../../hooks/use-toast'; import { useToggleTopic } from '../../hooks/use-toggle-topic'; +import { topicDetailAiChatTransport } from '../../lib/ai.ts'; +import { getUrlParams, parseUrl } from '../../lib/browser'; +import { cn } from '../../lib/classname.ts'; +import { lockBodyScroll } from '../../lib/dom.ts'; import { httpGet } from '../../lib/http'; import { isLoggedIn } from '../../lib/jwt'; +import { markdownToHtml, sanitizeMarkdown } from '../../lib/markdown'; +import { showLoginPopup } from '../../lib/popup'; import type { ResourceType } from '../../lib/resource-progress'; import { isTopicDone, @@ -13,50 +29,30 @@ import { renderTopicProgress, updateResourceProgress as updateResourceProgressApi, } from '../../lib/resource-progress'; +import { type AllowedRoadmapRenderer } from '../../lib/roadmap.ts'; +import { aiLimitOptions } from '../../queries/ai-course.ts'; +import { billingDetailsOptions } from '../../queries/billing.ts'; +import { roadmapTreeMappingOptions } from '../../queries/roadmap-tree.ts'; import { pageProgressMessage } from '../../stores/page'; -import { showLoginPopup } from '../../lib/popup'; -import { useToast } from '../../hooks/use-toast'; +import { queryClient } from '../../stores/query-client.ts'; +import { UpgradeAccountModal } from '../Billing/UpgradeAccountModal.tsx'; import type { AllowedLinkTypes, RoadmapContentDocument, } from '../CustomRoadmap/CustomRoadmap'; -import { markdownToHtml, sanitizeMarkdown } from '../../lib/markdown'; -import { - Ban, - BookOpen, - BookOpenIcon, - BotIcon, - FileText, - FileTextIcon, - HeartHandshake, - Star, - X, -} from 'lucide-react'; -import { getUrlParams, parseUrl } from '../../lib/browser'; -import { Spinner } from '../ReactIcons/Spinner'; +import type { AIChatHistoryType } from '../GenerateCourse/AICourseLessonChat.tsx'; import { GitHubIcon } from '../ReactIcons/GitHubIcon.tsx'; -import { type AllowedRoadmapRenderer } from '../../lib/roadmap.ts'; -import { lockBodyScroll } from '../../lib/dom.ts'; -import { TopicDetailLink } from './TopicDetailLink.tsx'; -import { ResourceListSeparator } from './ResourceListSeparator.tsx'; +import { Spinner } from '../ReactIcons/Spinner'; +import { CreateCourseModal } from './CreateCourseModal.tsx'; import { PaidResourceDisclaimer } from './PaidResourceDisclaimer.tsx'; +import { ResourceListSeparator } from './ResourceListSeparator.tsx'; +import { TopicDetailAI } from './TopicDetailAI.tsx'; +import { TopicDetailLink } from './TopicDetailLink.tsx'; import { TopicDetailsTabs, type AllowedTopicDetailsTabs, } from './TopicDetailsTabs.tsx'; -import { TopicDetailAI } from './TopicDetailAI.tsx'; -import { cn } from '../../lib/classname.ts'; -import type { AIChatHistoryType } from '../GenerateCourse/AICourseLessonChat.tsx'; -import { UpgradeAccountModal } from '../Billing/UpgradeAccountModal.tsx'; import { TopicProgressButton } from './TopicProgressButton.tsx'; -import { CreateCourseModal } from './CreateCourseModal.tsx'; -import { useChat } from '@ai-sdk/react'; -import { topicDetailAiChatTransport } from '../../lib/ai.ts'; -import { useQuery } from '@tanstack/react-query'; -import { queryClient } from '../../stores/query-client.ts'; -import { roadmapTreeMappingOptions } from '../../queries/roadmap-tree.ts'; -import { aiLimitOptions } from '../../queries/ai-course.ts'; -import { billingDetailsOptions } from '../../queries/billing.ts'; type PaidResourceType = { _id?: string; @@ -664,17 +660,18 @@ export function TopicDetail(props: TopicDetailProps) { {(hasSubjects || hasGuides) && ( <> -