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)}