${htmlFromTiptapJSON(child)}
`; - break; - case 'variable': - const label = child?.attrs?.label || ''; - text += `${label}`; - break; - default: - break; - } - } - - return text; -} diff --git a/src/hooks/use-roadmap-ai-chat.tsx b/src/hooks/use-roadmap-ai-chat.tsx new file mode 100644 index 000000000..db9612fff --- /dev/null +++ b/src/hooks/use-roadmap-ai-chat.tsx @@ -0,0 +1,224 @@ +import { useCallback, useMemo, useRef, useState } from 'react'; +import type { JSONContent } from '@tiptap/core'; +import { flushSync } from 'react-dom'; +import { removeAuthToken } from '../lib/jwt'; +import { readStream } from '../lib/ai'; +import { useToast } from './use-toast'; +import { getAiCourseLimitOptions } from '../queries/ai-course'; +import { queryClient } from '../stores/query-client'; +import { + renderMessage, + type MessagePartRenderer, +} from '../lib/render-chat-message'; +import { UserProgressList } from '../components/RoadmapAIChat/UserProgressList'; +import { UserProgressActionList } from '../components/RoadmapAIChat/UserProgressActionList'; +import { RoadmapTopicList } from '../components/RoadmapAIChat/RoadmapTopicList'; +import { ShareResourceLink } from '../components/RoadmapAIChat/ShareResourceLink'; +import { RoadmapRecommendations } from '../components/RoadmapAIChat/RoadmapRecommendations'; +import type { AllowedAIChatRole } from '../components/GenerateCourse/AICourseLessonChat'; + +export type RoadmapAIChatHistoryType = { + role: AllowedAIChatRole; + isDefault?: boolean; + content?: string; + json?: JSONContent; + html?: string; + jsx?: React.ReactNode; +}; + +type Options = { + roadmapId: string; + totalTopicCount: number; + scrollareaRef: React.RefObject${htmlFromTiptapJSON(child)}
`; + break; + case 'variable': + const label = child?.attrs?.label || ''; + text += `${label}`; + break; + } + } + return text; +}