From 82b0705bdbf00e5b3da16a7cb930f81b4a493d29 Mon Sep 17 00:00:00 2001 From: cfngc4594 Date: Fri, 11 Apr 2025 17:42:52 +0800 Subject: [PATCH] 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 --- src/app/(app)/problems/[id]/layout.tsx | 6 +++++- src/providers/problem-store-provider.tsx | 4 ++++ src/stores/problem-store.ts | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/app/(app)/problems/[id]/layout.tsx b/src/app/(app)/problems/[id]/layout.tsx index e7fbc5f..e6b339d 100644 --- a/src/app/(app)/problems/[id]/layout.tsx +++ b/src/app/(app)/problems/[id]/layout.tsx @@ -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} >
diff --git a/src/providers/problem-store-provider.tsx b/src/providers/problem-store-provider.tsx index 222da37..cdb9b01 100644 --- a/src/providers/problem-store-provider.tsx +++ b/src/providers/problem-store-provider.tsx @@ -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(null); @@ -44,6 +47,7 @@ export const ProblemStoreProvider = ({ problem, editorLanguageConfigs, languageServerConfigs, + submissions, }); } diff --git a/src/stores/problem-store.ts b/src/stores/problem-store.ts index ca56545..f2290b6 100644 --- a/src/stores/problem-store.ts +++ b/src/stores/problem-store.ts @@ -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 = {