diff --git a/nextjs/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/EditAssignment.tsx b/nextjs/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/EditAssignment.tsx
index eec6780..ff461d2 100644
--- a/nextjs/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/EditAssignment.tsx
+++ b/nextjs/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/EditAssignment.tsx
@@ -20,6 +20,7 @@ import {
import { Spinner } from "@/components/Spinner";
import { baseCanvasUrl } from "@/services/canvas/canvasServiceUtils";
import ClientOnly from "@/components/ClientOnly";
+import { SuspenseAndErrorHandling } from "@/components/SuspenseAndErrorHandling";
export default function EditAssignment({
moduleName,
@@ -82,10 +83,12 @@ export default function EditAssignment({
-
+
+
+
);
diff --git a/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPage.tsx b/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPage.tsx
index 824a018..91ae978 100644
--- a/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPage.tsx
+++ b/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPage.tsx
@@ -14,6 +14,7 @@ import {
useCreateCanvasPageMutation,
} from "@/hooks/canvas/canvasPageHooks";
import EditPageButtons from "./EditPageButtons";
+import ClientOnly from "@/components/ClientOnly";
export default function EditPage({
moduleName,
@@ -73,11 +74,13 @@ export default function EditPage({
{settings.canvasId && (
-
+
+
+
)}
);
diff --git a/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPageButtons.tsx b/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPageButtons.tsx
index d954532..7e8d960 100644
--- a/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPageButtons.tsx
+++ b/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPageButtons.tsx
@@ -1,3 +1,4 @@
+import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
import { Spinner } from "@/components/Spinner";
import {
useCanvasPagesQuery,
@@ -5,7 +6,11 @@ import {
useDeleteCanvasPageMutation,
useUpdateCanvasPageMutation,
} from "@/hooks/canvas/canvasPageHooks";
+import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
import { usePageQuery } from "@/hooks/localCourse/pageHooks";
+import { baseCanvasUrl } from "@/services/canvas/canvasServiceUtils";
+import { getCourseUrl } from "@/services/urlUtils";
+import Link from "next/link";
import React from "react";
export default function EditPageButtons({
@@ -17,6 +22,8 @@ export default function EditPageButtons({
moduleName: string;
courseCanvasId: number;
}) {
+ const { courseName } = useCourseContext();
+ const { data: settings } = useLocalCourseSettingsQuery();
const { data: page } = usePageQuery(moduleName, pageName);
const { data: canvasPages } = useCanvasPagesQuery(courseCanvasId);
const createPageInCanvas = useCreateCanvasPageMutation(courseCanvasId);
@@ -31,15 +38,8 @@ export default function EditPageButtons({
deletePageInCanvas.isPending;
return (
-
- {pageInCanvas && (
-
- View Page In Canvas
-
- )}
+
+ {requestIsPending &&
}
{!pageInCanvas && (
)}
+ {pageInCanvas && (
+
+ View in Canvas
+
+ )}
{pageInCanvas && (
)}
- {requestIsPending &&
}
+
+ Go Back
+
);
}
diff --git a/nextjs/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/EditQuiz.tsx b/nextjs/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/EditQuiz.tsx
index 6df3cf3..10b7fdb 100644
--- a/nextjs/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/EditQuiz.tsx
+++ b/nextjs/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/EditQuiz.tsx
@@ -7,17 +7,7 @@ import {
import { quizMarkdownUtils } from "@/models/local/quiz/utils/quizMarkdownUtils";
import { useEffect, useState } from "react";
import QuizPreview from "./QuizPreview";
-import {
- useAddQuizToCanvasMutation,
- useCanvasQuizzesQuery,
- useDeleteQuizFromCanvasMutation,
-} from "@/hooks/canvas/canvasQuizHooks";
-import { Spinner } from "@/components/Spinner";
-import { baseCanvasUrl, canvasApi } from "@/services/canvas/canvasServiceUtils";
-import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
-import { getCourseUrl } from "@/services/urlUtils";
-import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
-import Link from "next/link";
+import { QuizButtons } from "./QuizButton";
const helpString = `QUESTION REFERENCE
---
@@ -60,6 +50,7 @@ this is a matching question
^ left answer - right dropdown
^ other thing - another option`;
+
export default function EditQuiz({
moduleName,
quizName,
@@ -125,66 +116,3 @@ export default function EditQuiz({
);
}
-
-function QuizButtons({
- moduleName,
- quizName,
- toggleHelp,
-}: {
- quizName: string;
- moduleName: string;
- toggleHelp: () => void;
-}) {
- const { courseName } = useCourseContext();
- const { data: settings } = useLocalCourseSettingsQuery();
- const { data: canvasQuizzes } = useCanvasQuizzesQuery();
- const { data: quiz } = useQuizQuery(moduleName, quizName);
- const addToCanvas = useAddQuizToCanvasMutation();
- const deleteFromCanvas = useDeleteQuizFromCanvasMutation();
-
- const quizInCanvas = canvasQuizzes.find((c) => c.title === quizName);
-
- return (
-
-
-
-
-
- {(addToCanvas.isPending || deleteFromCanvas.isPending) &&
}
- {quizInCanvas && !quizInCanvas.published && (
-
Not Published
- )}
- {!quizInCanvas && (
-
- )}
- {quizInCanvas && (
-
- View in Canvas
-
- )}
- {quizInCanvas && (
-
- )}
-
-
- Go Back
-
-
-
- );
-}
diff --git a/nextjs/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/QuizButton.tsx b/nextjs/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/QuizButton.tsx
new file mode 100644
index 0000000..142fc32
--- /dev/null
+++ b/nextjs/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/QuizButton.tsx
@@ -0,0 +1,71 @@
+import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
+import { Spinner } from "@/components/Spinner";
+import { useCanvasQuizzesQuery, useAddQuizToCanvasMutation, useDeleteQuizFromCanvasMutation } from "@/hooks/canvas/canvasQuizHooks";
+import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
+import { useQuizQuery } from "@/hooks/localCourse/quizHooks";
+import { baseCanvasUrl } from "@/services/canvas/canvasServiceUtils";
+import { getCourseUrl } from "@/services/urlUtils";
+import Link from "next/link";
+
+export function QuizButtons({
+ moduleName,
+ quizName,
+ toggleHelp,
+}: {
+ quizName: string;
+ moduleName: string;
+ toggleHelp: () => void;
+}) {
+ const { courseName } = useCourseContext();
+ const { data: settings } = useLocalCourseSettingsQuery();
+ const { data: canvasQuizzes } = useCanvasQuizzesQuery();
+ const { data: quiz } = useQuizQuery(moduleName, quizName);
+ const addToCanvas = useAddQuizToCanvasMutation();
+ const deleteFromCanvas = useDeleteQuizFromCanvasMutation();
+
+ const quizInCanvas = canvasQuizzes.find((c) => c.title === quizName);
+
+ return (
+
+
+
+
+
+ {(addToCanvas.isPending || deleteFromCanvas.isPending) &&
}
+ {quizInCanvas && !quizInCanvas.published && (
+
Not Published
+ )}
+ {!quizInCanvas && (
+
+ )}
+ {quizInCanvas && (
+
+ View in Canvas
+
+ )}
+ {quizInCanvas && (
+
+ )}
+
+
+ Go Back
+
+
+
+ );
+}
diff --git a/nextjs/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/QuizPreview.tsx b/nextjs/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/QuizPreview.tsx
index d398ac3..57368ca 100644
--- a/nextjs/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/QuizPreview.tsx
+++ b/nextjs/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/QuizPreview.tsx
@@ -8,7 +8,7 @@ import { markdownToHTMLSafe } from "@/services/htmlMarkdownUtils";
export default function QuizPreview({ quiz }: { quiz: LocalQuiz }) {
return (
-
+
Name
{quiz.name}
@@ -41,12 +41,14 @@ export default function QuizPreview({ quiz }: { quiz: LocalQuiz }) {
{quiz.description}
- {quiz.questions.map((question, i) => (
-
- ))}
+
+ {quiz.questions.map((question, i) => (
+
+ ))}
+
@@ -62,10 +64,16 @@ export default function QuizPreview({ quiz }: { quiz: LocalQuiz }) {
function QuizQuestionPreview({ question }: { question: LocalQuizQuestion }) {
return (
-
-
Points: {question.points}
-
Type: {question.questionType}
+
+
+
{question.questionType}
+
+ {question.points} {question.points === 1 ? " Point" : " Points"}
+
+
+
{question.questionType === QuestionType.MATCHING && (
@@ -73,10 +81,10 @@ function QuizQuestionPreview({ question }: { question: LocalQuizQuestion }) {
{question.answers.map((answer) => (
-
{answer.text} -
-
{answer.matchedText}
+
{answer.text} -
+
{answer.matchedText}
))}
{question.matchDistractors.map((distractor) => (
@@ -94,32 +102,27 @@ function QuizQuestionPreview({ question }: { question: LocalQuizQuestion }) {
{question.answers.map((answer) => (
- {answer.correct ? (
-
- ) : (
-
- {question.questionType === QuestionType.MULTIPLE_ANSWERS && (
- [ ]
- )}
-
- )}
+
+ {answer.correct ? (
+
+ ) : question.questionType === QuestionType.MULTIPLE_ANSWERS ? (
+
{"[ ]"}
+ ) : (
+
+ )}
+
= ({
{
- toast.error(getErrorMessage(props.error))
+ toast.error(getErrorMessage(props.error));
return (
{getErrorMessage(props.error)}