feat(problem-store): add testcases to store state and provider

This commit is contained in:
cfngc4594 2025-04-09 19:41:55 +08:00
parent e6614a0aa2
commit a02335b255
3 changed files with 16 additions and 2 deletions

View File

@ -18,7 +18,14 @@ export default async function ProblemLayout({
await Promise.all([ await Promise.all([
prisma.problem.findUnique({ prisma.problem.findUnique({
where: { id }, where: { id },
include: { templates: true }, include: {
templates: true,
testcases: {
include: {
data: true,
},
},
},
}), }),
prisma.editorLanguageConfig.findMany(), prisma.editorLanguageConfig.findMany(),
prisma.languageServerConfig.findMany(), prisma.languageServerConfig.findMany(),
@ -28,7 +35,7 @@ export default async function ProblemLayout({
return notFound(); return notFound();
} }
const { templates, ...problemWithoutTemplates } = problemData; const { templates, testcases, ...problemWithoutTemplates } = problemData;
return ( return (
<div className="flex flex-col h-screen"> <div className="flex flex-col h-screen">
@ -36,6 +43,7 @@ export default async function ProblemLayout({
problemId={id} problemId={id}
problem={problemWithoutTemplates} problem={problemWithoutTemplates}
templates={templates} templates={templates}
testcases={testcases}
editorLanguageConfigs={editorLanguageConfigs} editorLanguageConfigs={editorLanguageConfigs}
languageServerConfigs={languageServerConfigs} languageServerConfigs={languageServerConfigs}
> >

View File

@ -8,6 +8,7 @@ import {
type Template, type Template,
} from "@/generated/client"; } from "@/generated/client";
import { useStore } from "zustand"; import { useStore } from "zustand";
import { TestcaseWithData } from "@/types/prisma";
import { type ReactNode, createContext, useRef, useContext } from "react"; import { type ReactNode, createContext, useRef, useContext } from "react";
import { type ProblemStore, createProblemStore } from "@/stores/problem-store"; import { type ProblemStore, createProblemStore } from "@/stores/problem-store";
@ -22,6 +23,7 @@ export interface ProblemStoreProviderProps {
problemId: string; problemId: string;
problem: Problem; problem: Problem;
templates: Template[]; templates: Template[];
testcases: TestcaseWithData;
editorLanguageConfigs: EditorLanguageConfig[]; editorLanguageConfigs: EditorLanguageConfig[];
languageServerConfigs: LanguageServerConfig[]; languageServerConfigs: LanguageServerConfig[];
} }
@ -31,6 +33,7 @@ export const ProblemStoreProvider = ({
problemId, problemId,
problem, problem,
templates, templates,
testcases,
editorLanguageConfigs, editorLanguageConfigs,
languageServerConfigs, languageServerConfigs,
}: ProblemStoreProviderProps) => { }: ProblemStoreProviderProps) => {
@ -48,6 +51,7 @@ export const ProblemStoreProvider = ({
problemId, problemId,
problem, problem,
templates, templates,
testcases,
editorLanguageConfigs, editorLanguageConfigs,
languageServerConfigs, languageServerConfigs,
}); });

View File

@ -7,6 +7,7 @@ import type {
} from "@/generated/client"; } from "@/generated/client";
import type { editor } from "monaco-editor"; import type { editor } from "monaco-editor";
import { createStore } from "zustand/vanilla"; import { createStore } from "zustand/vanilla";
import { TestcaseWithData } from "@/types/prisma";
import { createJSONStorage, persist } from "zustand/middleware"; import { createJSONStorage, persist } from "zustand/middleware";
export type ProblemState = { export type ProblemState = {
@ -20,6 +21,7 @@ export type ProblemState = {
problemId: string; problemId: string;
problem: Problem; problem: Problem;
templates: Template[]; templates: Template[];
testcases: TestcaseWithData;
editorLanguageConfigs: EditorLanguageConfig[]; editorLanguageConfigs: EditorLanguageConfig[];
languageServerConfigs: LanguageServerConfig[]; languageServerConfigs: LanguageServerConfig[];
}; };