From ee4020f50fc47d334c39e4fa18db4458d151cb90 Mon Sep 17 00:00:00 2001 From: cfngc4594 Date: Sun, 16 Mar 2025 14:18:14 +0800 Subject: [PATCH] feat(workspace): pass editorLanguageConfigs to LanguageSelector and WorkspaceEditorHeader --- .../problems/[id]/@workspace/@editor/page.tsx | 17 +++++++++++------ .../workspace/editor/components/header.tsx | 6 ++++-- .../editor/components/language-selector.tsx | 19 ++++++++++++------- 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/app/(app)/problems/[id]/@workspace/@editor/page.tsx b/src/app/(app)/problems/[id]/@workspace/@editor/page.tsx index a1ca844..b687044 100644 --- a/src/app/(app)/problems/[id]/@workspace/@editor/page.tsx +++ b/src/app/(app)/problems/[id]/@workspace/@editor/page.tsx @@ -4,7 +4,7 @@ import WorkspaceEditorHeader from "@/components/features/playground/workspace/ed import WorkspaceEditorFooter from "@/components/features/playground/workspace/editor/components/footer"; interface WorkspaceEditorProps { - params: Promise<{ id: string }> + params: Promise<{ id: string }>; } export default async function WorkspaceEditorPage({ @@ -19,20 +19,25 @@ export default async function WorkspaceEditorPage({ select: { language: true, template: true, - } - } - } + }, + }, + }, }); + const editorLanguageConfigs = await prisma.editorLanguageConfig.findMany(); + const templates = problem?.templates ?? []; return ( <> - +
- ) + ); } diff --git a/src/components/features/playground/workspace/editor/components/header.tsx b/src/components/features/playground/workspace/editor/components/header.tsx index 39e0396..d531e30 100644 --- a/src/components/features/playground/workspace/editor/components/header.tsx +++ b/src/components/features/playground/workspace/editor/components/header.tsx @@ -1,19 +1,21 @@ import { cn } from "@/lib/utils"; -import { EditorLanguage } from "@prisma/client"; import CopyButton from "./copy-button"; import RedoButton from "./redo-button"; import UndoButton from "./undo-button"; import ResetButton from "./reset-button"; import FormatButton from "./format-button"; import LanguageSelector from "./language-selector"; +import { EditorLanguage, EditorLanguageConfig } from "@prisma/client"; interface WorkspaceEditorHeaderProps { templates: { language: EditorLanguage; template: string }[]; + editorLanguageConfigs: EditorLanguageConfig[]; className?: string; } export default function WorkspaceEditorHeader({ templates, + editorLanguageConfigs, className, ...props }: WorkspaceEditorHeaderProps) { @@ -24,7 +26,7 @@ export default function WorkspaceEditorHeader({ >
- +
diff --git a/src/components/features/playground/workspace/editor/components/language-selector.tsx b/src/components/features/playground/workspace/editor/components/language-selector.tsx index aedf180..1a6861d 100644 --- a/src/components/features/playground/workspace/editor/components/language-selector.tsx +++ b/src/components/features/playground/workspace/editor/components/language-selector.tsx @@ -8,14 +8,19 @@ import { SelectValue, } from "@/components/ui/select"; import { getPath } from "@/lib/utils"; -import { EditorLanguage } from "@prisma/client"; import { Skeleton } from "@/components/ui/skeleton"; import LanguageServerConfig from "@/config/language-server"; -import { EditorLanguageConfig } from "@/config/editor-language"; import { useCodeEditorStore } from "@/store/useCodeEditorStore"; import { EditorLanguageIcons } from "@/config/editor-language-icons"; +import { EditorLanguage, EditorLanguageConfig } from "@prisma/client"; -export default function LanguageSelector() { +interface LanguageSelectorProps { + editorLanguageConfigs: EditorLanguageConfig[]; +} + +export default function LanguageSelector({ + editorLanguageConfigs, +}: LanguageSelectorProps) { const { hydrated, language, setLanguage, setPath, setLspConfig } = useCodeEditorStore(); @@ -35,13 +40,13 @@ export default function LanguageSelector() { - {Object.values(EditorLanguageConfig).map((langConfig) => { - const Icon = EditorLanguageIcons[langConfig.id]; + {editorLanguageConfigs.map((config) => { + const Icon = EditorLanguageIcons[config.language]; return ( - + );