From 8d7d88511e6e0def948c468a052652905a6e6582 Mon Sep 17 00:00:00 2001 From: cfngc4594 Date: Sun, 6 Apr 2025 15:46:43 +0800 Subject: [PATCH] refactor(app/problems/[id]): restructure components into features directory with index exports --- src/app/(app)/problems/[id]/@Bot/layout.tsx | 15 --- src/app/(app)/problems/[id]/@Bot/page.tsx | 110 ---------------- src/app/(app)/problems/[id]/@Code/page.tsx | 9 -- .../problems/[id]/@Description/layout.tsx | 26 ---- .../(app)/problems/[id]/@Description/page.tsx | 23 ---- .../(app)/problems/[id]/@Solutions/layout.tsx | 28 ---- .../(app)/problems/[id]/@Solutions/page.tsx | 23 ---- src/app/(app)/problems/[id]/features/bot.tsx | 123 ++++++++++++++++++ .../{@Code/layout.tsx => features/code.tsx} | 11 +- .../problems/[id]/features/description.tsx | 29 +++++ src/app/(app)/problems/[id]/features/index.ts | 7 + .../problems/[id]/features/solutions.tsx | 29 +++++ .../page.tsx => features/submissions.tsx} | 2 +- .../page.tsx => features/test-result.tsx} | 2 +- .../page.tsx => features/testcase.tsx} | 2 +- 15 files changed, 196 insertions(+), 243 deletions(-) delete mode 100644 src/app/(app)/problems/[id]/@Bot/layout.tsx delete mode 100644 src/app/(app)/problems/[id]/@Bot/page.tsx delete mode 100644 src/app/(app)/problems/[id]/@Code/page.tsx delete mode 100644 src/app/(app)/problems/[id]/@Description/layout.tsx delete mode 100644 src/app/(app)/problems/[id]/@Description/page.tsx delete mode 100644 src/app/(app)/problems/[id]/@Solutions/layout.tsx delete mode 100644 src/app/(app)/problems/[id]/@Solutions/page.tsx create mode 100644 src/app/(app)/problems/[id]/features/bot.tsx rename src/app/(app)/problems/[id]/{@Code/layout.tsx => features/code.tsx} (72%) create mode 100644 src/app/(app)/problems/[id]/features/description.tsx create mode 100644 src/app/(app)/problems/[id]/features/index.ts create mode 100644 src/app/(app)/problems/[id]/features/solutions.tsx rename src/app/(app)/problems/[id]/{@Submissions/page.tsx => features/submissions.tsx} (57%) rename src/app/(app)/problems/[id]/{@TestResult/page.tsx => features/test-result.tsx} (57%) rename src/app/(app)/problems/[id]/{@Testcase/page.tsx => features/testcase.tsx} (57%) diff --git a/src/app/(app)/problems/[id]/@Bot/layout.tsx b/src/app/(app)/problems/[id]/@Bot/layout.tsx deleted file mode 100644 index 675be62..0000000 --- a/src/app/(app)/problems/[id]/@Bot/layout.tsx +++ /dev/null @@ -1,15 +0,0 @@ -interface BotLayoutProps { - children: React.ReactNode; -} - -export default function BotLayout({ - children, -}: BotLayoutProps) { - return ( -
-
- {children} -
-
- ); -} diff --git a/src/app/(app)/problems/[id]/@Bot/page.tsx b/src/app/(app)/problems/[id]/@Bot/page.tsx deleted file mode 100644 index 6f40c81..0000000 --- a/src/app/(app)/problems/[id]/@Bot/page.tsx +++ /dev/null @@ -1,110 +0,0 @@ -"use client"; - -import { toast } from "sonner"; -import { useCallback } from "react"; -import { useChat } from "@ai-sdk/react"; -import { Button } from "@/components/ui/button"; -import { useProblem } from "@/hooks/use-problem"; -import MdxPreview from "@/components/mdx-preview"; -import { Textarea } from "@/components/ui/textarea"; -import { BotIcon, SendHorizonal } from "lucide-react"; -import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"; -import { ChatMessageList } from "@/components/ui/chat/chat-message-list"; -import { ChatBubble, ChatBubbleMessage } from "@/components/ui/chat/chat-bubble"; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"; - -export default function AiBotPage() { - const { problemId, problem, currentLang, currentValue } = useProblem(); - const { messages, input, handleInputChange, setMessages, handleSubmit } = useChat({ - initialMessages: [ - { - id: problemId, - role: "system", - content: `Problem description:\n${problem.description}`, - }, - ], - }); - - const handleFormSubmit = useCallback( - (e: React.FormEvent) => { - e.preventDefault(); - if (!input.trim()) { - toast.error("Input cannot be empty"); - return; - } - - const currentCodeMessage = { - id: problemId, - role: "system" as const, - content: `Current code:\n\`\`\`${currentLang}\n${currentValue}\n\`\`\``, - }; - - setMessages((prev) => [...prev, currentCodeMessage]); - handleSubmit(); - }, - [currentLang, currentValue, handleSubmit, input, problemId, setMessages] - ); - - return ( -
-
- {!messages.some((message) => message.role === "user" || message.role === "assistant") && ( -
- - Ask Bot - Powered by Vercel Ai SDK -
- )} - - - {messages - .filter((message) => message.role === "user" || message.role === "assistant") - .map((message) => ( - - - - - - ))} - - - -
-