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

- Added `submissions` field to `ProblemState` and `ProblemStore` type
- Updated `createProblemStore` function to handle `submissions`
- Modified `ProblemStoreProvider` to pass `submissions` as a prop
- Updated `ProblemLayout` to fetch `submissions` from the database and pass to the provider
This commit is contained in:
cfngc4594 2025-04-11 17:42:52 +08:00
parent ad43eb9b0a
commit 82b0705bdb
3 changed files with 11 additions and 1 deletions

View File

@ -14,7 +14,7 @@ export default async function ProblemLayout({
}: ProblemProps) {
const { id } = await params;
const [problem, editorLanguageConfigs, languageServerConfigs] = await Promise.all([
const [problem, editorLanguageConfigs, languageServerConfigs, submissions] = await Promise.all([
prisma.problem.findUnique({
where: { id },
include: {
@ -28,6 +28,9 @@ export default async function ProblemLayout({
}),
prisma.editorLanguageConfig.findMany(),
prisma.languageServerConfig.findMany(),
prisma.submission.findMany({
where: { problemId: id },
})
]);
if (!problem) {
@ -41,6 +44,7 @@ export default async function ProblemLayout({
problem={problem}
editorLanguageConfigs={editorLanguageConfigs}
languageServerConfigs={languageServerConfigs}
submissions={submissions}
>
<PlaygroundHeader />
<main className="flex flex-grow overflow-y-hidden p-2.5 pt-0">

View File

@ -2,6 +2,7 @@
import {
EditorLanguage,
type Submission,
type EditorLanguageConfig,
type LanguageServerConfig,
} from "@/generated/client";
@ -20,6 +21,7 @@ export interface ProblemStoreProviderProps {
problem: ProblemWithDetails;
editorLanguageConfigs: EditorLanguageConfig[];
languageServerConfigs: LanguageServerConfig[];
submissions: Submission[];
}
export const ProblemStoreProvider = ({
@ -28,6 +30,7 @@ export const ProblemStoreProvider = ({
problem,
editorLanguageConfigs,
languageServerConfigs,
submissions,
}: ProblemStoreProviderProps) => {
const storeRef = useRef<ProblemStoreApi | null>(null);
@ -44,6 +47,7 @@ export const ProblemStoreProvider = ({
problem,
editorLanguageConfigs,
languageServerConfigs,
submissions,
});
}

View File

@ -2,6 +2,7 @@ import type {
EditorLanguage,
EditorLanguageConfig,
LanguageServerConfig,
Submission,
} from "@/generated/client";
import type { editor } from "monaco-editor";
import { createStore } from "zustand/vanilla";
@ -20,6 +21,7 @@ export type ProblemState = {
problem: ProblemWithDetails;
editorLanguageConfigs: EditorLanguageConfig[];
languageServerConfigs: LanguageServerConfig[];
submissions: Submission[];
};
export type ProblemActions = {