diff --git a/frontend/app/[locale]/admin/quiz/[id]/page.tsx b/frontend/app/[locale]/admin/quiz/[id]/page.tsx index 57b7e3f8..216c88d2 100644 --- a/frontend/app/[locale]/admin/quiz/[id]/page.tsx +++ b/frontend/app/[locale]/admin/quiz/[id]/page.tsx @@ -2,6 +2,9 @@ import { Metadata } from 'next'; import { notFound } from 'next/navigation'; import { QuizEditorList } from '@/components/admin/quiz/QuizEditorList'; +import { UploadMoreQuestions } from '@/components/admin/quiz/UploadMoreQuestions'; +import { QuizStatusControls } from '@/components/admin/quiz/QuizStatusControls'; +import { QuizMetadataEditor } from '@/components/admin/quiz/QuizMetadataEditor'; import { getAdminQuizFull } from '@/db/queries/quizzes/admin-quiz'; import { Link } from '@/i18n/routing'; import { issueCsrfToken } from '@/lib/security/csrf'; @@ -23,7 +26,17 @@ export default async function AdminQuizEditPage({ const title = quiz.translations.en?.title ?? quiz.translations.uk?.title ?? quiz.slug; + const isDraft = quiz.status === 'draft'; + const csrfToken = issueCsrfToken('admin:quiz:question:update'); + const csrfTokenDelete = isDraft + ? issueCsrfToken('admin:quiz:question:delete') + : undefined; + const csrfTokenAddQuestions = isDraft + ? issueCsrfToken('admin:quiz:questions:add') + : undefined; + const csrfTokenUpdate = issueCsrfToken('admin:quiz:update'); + return (
- {quiz.questions.length} questions · slug: {quiz.slug} -
+- Manage quiz content, questions, and answers -
++ Manage quiz content, questions, and answers +
+New Category
+ +{error}
} + ++ Click to upload .json files +
++ Each file must contain {`{ "questions": [...] }`} +
+| Title | Category | Questions | Attempts | +Status | Active | Created | Actions | @@ -122,6 +151,9 @@ export function QuizListTable({ quizzes }: QuizListTableProps) {{quiz.attemptCount} | +
+ |
|
@@ -129,12 +161,17 @@ export function QuizListTable({ quizzes }: QuizListTableProps) {
{formatDate(quiz.createdAt)}
-
- Edit
-
+
+
+ Edit
+
+ {canDelete(quiz) && (
+
|
|---|