day of linting judgement

This commit is contained in:
2025-07-14 11:53:13 -06:00
parent a128107094
commit c39d7ca4d7
97 changed files with 1500 additions and 1130 deletions

View File

@@ -22,7 +22,7 @@ import { useQueryClient } from "@tanstack/react-query";
import Link from "next/link";
export function CourseNavigation() {
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const queryClient = useQueryClient();
const canvasAssignmentsQuery = useCanvasAssignmentsQuery();

View File

@@ -7,7 +7,7 @@ import { getCourseSettingsUrl } from "@/services/urlUtils";
export default function CourseSettingsLink() {
const { courseName } = useCourseContext();
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
return (
<div>
{settings.name}

View File

@@ -11,7 +11,7 @@ import DownChevron from "@/components/icons/DownChevron";
export const CalendarMonth = ({ month }: { month: CalendarMonthModel }) => {
// const weekInMilliseconds = 604_800_000;
const four_days_in_milliseconds = 345_600_000;
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const startDate = getDateFromStringOrThrow(
settings.startDate,
"week calculation start date"
@@ -50,7 +50,9 @@ export const CalendarMonth = ({ month }: { month: CalendarMonthModel }) => {
role="button"
>
{monthName}
<div className="my-auto">{isExpanded ? <UpChevron /> : <DownChevron />}</div>
<div className="my-auto">
{isExpanded ? <UpChevron /> : <DownChevron />}
</div>
</h3>
</div>
)}

View File

@@ -11,7 +11,7 @@ export function CalendarWeek({
week: string[]; //date strings
monthNumber: number;
}) {
const [settings]= useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const startDate = getDateFromStringOrThrow(
settings.startDate,
"week calculation start date"

View File

@@ -5,10 +5,9 @@ import { CalendarMonth } from "./CalendarMonth";
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
import { useEffect, useMemo, useRef } from "react";
import CalendarItemsContextProvider from "../context/CalendarItemsContextProvider";
import { SuspenseAndErrorHandling } from "@/components/SuspenseAndErrorHandling";
export default function CourseCalendar() {
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const startDateTime = useMemo(
() => getDateFromStringOrThrow(settings.startDate, "course start date"),

View File

@@ -19,7 +19,7 @@ export default function Day({ day, month }: { day: string; month: number }) {
getDateOnlyMarkdownString(new Date()) ===
getDateOnlyMarkdownString(dayAsDate);
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const { itemDropOnDay } = useDraggingContext();
const { todaysAssignments, todaysQuizzes, todaysPages } = useTodaysItems(day);

View File

@@ -13,7 +13,7 @@ import { useRef, useState } from "react";
export function DayTitle({ day, dayAsDate }: { day: string; dayAsDate: Date }) {
const { courseName } = useCourseContext();
const [weeks] = useLecturesSuspenseQuery();
const { data: weeks } = useLecturesSuspenseQuery();
const { setIsDragging } = useDragStyleContext();
const todaysLecture = getLectureForDay(weeks, dayAsDate);
const modal = useModal();

View File

@@ -35,7 +35,6 @@ export const getStatus = ({
if (type === "page") {
const canvasPage = canvasItem as CanvasPage;
const page = item as LocalCoursePage;
if (!canvasPage.published)
return { status: "incomplete", message: "canvas page not published" };

View File

@@ -15,7 +15,7 @@ import { getStatus } from "./getStatus";
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
export function useTodaysItems(day: string) {
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const dayAsDate = getDateFromStringOrThrow(
day,
"calculating same month in day items"

View File

@@ -35,10 +35,9 @@ export function useItemDropOnDay({
setIsLoading: Dispatch<SetStateAction<boolean>>;
modal: { isOpen: boolean; openModal: () => void; closeModal: () => void };
}) {
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const { courseName } = useCourseContext();
// const { data: weeks } = useLecturesByWeekQuery();
const [weeks] = useLecturesSuspenseQuery();
const { data: weeks } = useLecturesSuspenseQuery();
const updateQuizMutation = useUpdateQuizMutation();
const updateLectureMutation = useLectureUpdateMutation();
const updateAssignmentMutation = useUpdateAssignmentMutation();
@@ -72,7 +71,7 @@ export function useItemDropOnDay({
return dayAsDate;
}
function updateLecture(dayAsDate: Date) {
const { dueAt, ...lecture } = itemBeingDragged.item as Lecture & {
const { dueAt: _, ...lecture } = itemBeingDragged.item as Lecture & {
dueAt: string;
};
console.log("dropped lecture on day");

View File

@@ -19,9 +19,12 @@ import { useAuthoritativeUpdates } from "../../utils/useAuthoritativeUpdates";
export default function EditLecture({ lectureDay }: { lectureDay: string }) {
const { courseName } = useCourseContext();
const [settings] = useLocalCourseSettingsQuery();
const [weeks, { dataUpdatedAt: serverDataUpdatedAt, isFetching }] =
useLecturesSuspenseQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const {
data: weeks,
dataUpdatedAt: serverDataUpdatedAt,
isFetching,
} = useLecturesSuspenseQuery();
const updateLecture = useLectureUpdateMutation();
const lecture = weeks
@@ -63,6 +66,7 @@ export default function EditLecture({ lectureDay }: { lectureDay: string }) {
}
}
setError("");
// eslint-disable-next-line @typescript-eslint/no-explicit-any
} catch (e: any) {
setError(e.toString());
}

View File

@@ -11,7 +11,7 @@ export default function EditLectureTitle({
}: {
lectureDay: string;
}) {
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const { courseName } = useCourseContext();
const lectureDate = getDateFromString(lectureDay);
const lectureWeekName = getLectureWeekName(settings.startDate, lectureDay);

View File

@@ -12,7 +12,7 @@ import Link from "next/link";
export default function LectureButtons({ lectureDay }: { lectureDay: string }) {
const { courseName } = useCourseContext();
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const router = useRouter();
const [isLoading, setIsLoading] = useState(false);
const modal = useModal();

View File

@@ -1,11 +1,7 @@
import MarkdownDisplay from "@/components/MarkdownDisplay";
import { SuspenseAndErrorHandling } from "@/components/SuspenseAndErrorHandling";
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
import { Lecture } from "@/models/local/lecture";
import { markdownToHTMLSafe } from "@/services/htmlMarkdownUtils";
export default function LecturePreview({ lecture }: { lecture: Lecture }) {
const [settings] = useLocalCourseSettingsQuery();
return (
<>
<section className="border-b-slate-700 border-b-4">

View File

@@ -23,7 +23,7 @@ export default async function LectureLayout({
children: React.ReactNode;
params: Promise<{ courseName: string; lectureDay: string }>;
}) {
const { courseName, lectureDay } = await params;
const { courseName } = await params;
const decodedCourseName = decodeURIComponent(courseName);
if (courseName.includes(".js.map")) {
console.log("cannot load course that is .js.map " + decodedCourseName);

View File

@@ -12,7 +12,7 @@ export default function LecturePreviewPage({
lectureDay: string;
}) {
const { courseName } = useCourseContext();
const [weeks] = useLecturesSuspenseQuery();
const { data: weeks } = useLecturesSuspenseQuery();
const lecture = weeks
.flatMap(({ lectures }) => lectures.map((lecture) => lecture))
.find((l) => l.date === lectureDay);

View File

@@ -32,15 +32,15 @@ export default function ExpandableModule({
}) {
const { itemDropOnModule } = useDraggingContext();
const { courseName } = useCourseContext();
const [assignmentNames] = useAssignmentNamesQuery(moduleName);
const { data: assignmentNames } = useAssignmentNamesQuery(moduleName);
const [assignments] = trpc.useSuspenseQueries((t) =>
assignmentNames.map((assignmentName) =>
t.assignment.getAssignment({ courseName, moduleName, assignmentName })
)
);
const [quizzes] = useQuizzesQueries(moduleName);
const [pages] = usePagesQueries(moduleName);
const { data: quizzes } = useQuizzesQueries(moduleName);
const { data: pages } = usePagesQueries(moduleName);
const modal = useModal();
const moduleItems: {

View File

@@ -4,7 +4,7 @@ import ExpandableModule from "./ExpandableModule";
import CreateModule from "./CreateModule";
export default function ModuleList() {
const [moduleNames] = useModuleNamesQuery();
const { data: moduleNames } = useModuleNamesQuery();
return (
<div>
{moduleNames.map((m) => (

View File

@@ -27,9 +27,9 @@ export default function NewItemForm({
creationDate?: string;
onCreate?: () => void;
}) {
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const { courseName } = useCourseContext();
const [modules] = useModuleNamesQuery();
const { data: modules } = useModuleNamesQuery();
const [type, setType] = useState<"Assignment" | "Quiz" | "Page">(
"Assignment"
);

View File

@@ -29,10 +29,10 @@ export function AssignmentFooterButtons({
}) {
const router = useRouter();
const { courseName } = useCourseContext();
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const { data: canvasAssignments, isFetching: canvasIsFetching } =
useCanvasAssignmentsQuery();
const [assignment, { isFetching }] = useAssignmentQuery(
const { data: assignment, isFetching } = useAssignmentQuery(
moduleName,
assignmentName
);

View File

@@ -1,11 +1,7 @@
import ClientOnly from "@/components/ClientOnly";
import MarkdownDisplay from "@/components/MarkdownDisplay";
import { SuspenseAndErrorHandling } from "@/components/SuspenseAndErrorHandling";
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
import { LocalAssignment } from "@/models/local/assignment/localAssignment";
import { rubricItemIsExtraCredit } from "@/models/local/assignment/rubricItem";
import { assignmentPoints } from "@/models/local/assignment/utils/assignmentPointsUtils";
import { markdownToHTMLSafe } from "@/services/htmlMarkdownUtils";
import React, { Fragment } from "react";
export default function AssignmentPreview({
@@ -13,8 +9,7 @@ export default function AssignmentPreview({
}: {
assignment: LocalAssignment;
}) {
const [settings] = useLocalCourseSettingsQuery();
const totalPoints = assignmentPoints(assignment.rubric)
const totalPoints = assignmentPoints(assignment.rubric);
const extraPoints = assignment.rubric.reduce(
(sum, cur) => (rubricItemIsExtraCredit(cur) ? sum + cur.points : sum),
0

View File

@@ -31,11 +31,12 @@ export default function EditAssignment({
}) {
const router = useRouter();
const { courseName } = useCourseContext();
const [settings] = useLocalCourseSettingsQuery();
const [
assignment,
{ dataUpdatedAt: serverDataUpdatedAt, isFetching: assignmentIsFetching },
] = useAssignmentQuery(moduleName, assignmentName);
const { data: settings } = useLocalCourseSettingsQuery();
const {
data: assignment,
dataUpdatedAt: serverDataUpdatedAt,
isFetching: assignmentIsFetching,
} = useAssignmentQuery(moduleName, assignmentName);
const updateAssignment = useUpdateAssignmentMutation();
const { isPending: imageUpdateIsPending } =
useUpdateImageSettingsForAssignment({ moduleName, assignmentName });
@@ -94,6 +95,7 @@ export default function EditAssignment({
}
}
setError("");
// eslint-disable-next-line @typescript-eslint/no-explicit-any
} catch (e: any) {
setError(e.toString());
}

View File

@@ -20,11 +20,11 @@ export function UpdateAssignmentName({
const modal = useModal();
const { courseName } = useCourseContext();
const router = useRouter();
const [assignment] = useAssignmentQuery(moduleName, assignmentName);
const { data: assignment } = useAssignmentQuery(moduleName, assignmentName);
const updateAssignment = useUpdateAssignmentMutation();
const [name, setName] = useState(assignment.name);
const [isLoading, setIsLoading] = useState(false);
return (
<div>
<Modal

View File

@@ -24,10 +24,11 @@ export default function EditPage({
}) {
const router = useRouter();
const { courseName } = useCourseContext();
const [page, { dataUpdatedAt, isFetching }] = usePageQuery(
moduleName,
pageName
);
const {
data: page,
dataUpdatedAt,
isFetching,
} = usePageQuery(moduleName, pageName);
const updatePage = useUpdatePageMutation();
const { clientIsAuthoritative, text, textUpdate, monacoKey } =
@@ -37,7 +38,7 @@ export default function EditPage({
});
const [error, setError] = useState("");
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
useEffect(() => {
const delay = 500;
@@ -85,6 +86,7 @@ export default function EditPage({
}
}
setError("");
// eslint-disable-next-line @typescript-eslint/no-explicit-any
} catch (e: any) {
setError(e.toString());
}

View File

@@ -27,8 +27,8 @@ export default function EditPageButtons({
}) {
const router = useRouter();
const { courseName } = useCourseContext();
const [settings] = useLocalCourseSettingsQuery();
const [page] = usePageQuery(moduleName, pageName);
const { data: settings } = useLocalCourseSettingsQuery();
const { data: page } = usePageQuery(moduleName, pageName);
const { data: canvasPages } = useCanvasPagesQuery();
const createPageInCanvas = useCreateCanvasPageMutation();
const updatePageInCanvas = useUpdateCanvasPageMutation();

View File

@@ -1,7 +1,5 @@
import MarkdownDisplay from "@/components/MarkdownDisplay";
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
import { LocalCoursePage } from "@/models/local/page/localCoursePage";
import { markdownToHTMLSafe } from "@/services/htmlMarkdownUtils";
import React from "react";
export default function PagePreview({ page }: { page: LocalCoursePage }) {

View File

@@ -2,7 +2,10 @@ import { useCourseContext } from "@/app/course/[courseName]/context/courseContex
import TextInput from "@/components/form/TextInput";
import Modal, { useModal } from "@/components/Modal";
import { Spinner } from "@/components/Spinner";
import { usePageQuery, useUpdatePageMutation } from "@/hooks/localCourse/pageHooks";
import {
usePageQuery,
useUpdatePageMutation,
} from "@/hooks/localCourse/pageHooks";
import { getModuleItemUrl } from "@/services/urlUtils";
import { useRouter } from "next/navigation";
import { useState } from "react";
@@ -17,11 +20,11 @@ export function UpdatePageName({
const modal = useModal();
const { courseName } = useCourseContext();
const router = useRouter();
const [page] = usePageQuery(moduleName, pageName);
const { data: page } = usePageQuery(moduleName, pageName);
const updatePage = useUpdatePageMutation();
const [name, setName] = useState(page.name);
const [isLoading, setIsLoading] = useState(false);
return (
<div>
<Modal
@@ -53,11 +56,7 @@ export function UpdatePageName({
);
}}
>
<TextInput
value={name}
setValue={setName}
label={"Rename Page"}
/>
<TextInput value={name} setValue={setName} label={"Rename Page"} />
<button className="w-full my-3">Save New Name</button>
{isLoading && <Spinner />}
</form>

View File

@@ -75,10 +75,13 @@ export default function EditQuiz({
moduleName: string;
}) {
const router = useRouter();
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const { courseName } = useCourseContext();
const [quiz, { dataUpdatedAt: serverDataUpdatedAt, isFetching }] =
useQuizQuery(moduleName, quizName);
const {
data: quiz,
dataUpdatedAt: serverDataUpdatedAt,
isFetching,
} = useQuizQuery(moduleName, quizName);
const updateQuizMutation = useUpdateQuizMutation();
const { clientIsAuthoritative, text, textUpdate, monacoKey } =
useAuthoritativeUpdates({
@@ -122,6 +125,7 @@ export default function EditQuiz({
}
}
setError("");
// eslint-disable-next-line @typescript-eslint/no-explicit-any
} catch (e: any) {
setError(e.toString());
}

View File

@@ -27,10 +27,10 @@ export function QuizButtons({
}) {
const router = useRouter();
const { courseName } = useCourseContext();
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const { data: canvasQuizzes } = useCanvasQuizzesQuery();
const [quiz] = useQuizQuery(moduleName, quizName);
const { data: quiz } = useQuizQuery(moduleName, quizName);
const addToCanvas = useAddQuizToCanvasMutation();
const deleteFromCanvas = useDeleteQuizFromCanvasMutation();
const deleteLocal = useDeleteQuizMutation();
@@ -90,7 +90,11 @@ export function QuizButtons({
<div className="flex justify-around gap-3">
<button
onClick={async () => {
await deleteLocal.mutateAsync({ moduleName, quizName, courseName });
await deleteLocal.mutateAsync({
moduleName,
quizName,
courseName,
});
router.push(getCourseUrl(courseName));
}}
className="btn-danger"

View File

@@ -1,12 +1,10 @@
import CheckIcon from "@/components/icons/CheckIcon";
import MarkdownDisplay from "@/components/MarkdownDisplay";
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
import { useQuizQuery } from "@/hooks/localCourse/quizHooks";
import {
LocalQuizQuestion,
QuestionType,
} from "@/models/local/quiz/localQuizQuestion";
import { markdownToHTMLSafe } from "@/services/htmlMarkdownUtils";
import { escapeMatchingText } from "@/services/utils/questionHtmlUtils";
export default function QuizPreview({
@@ -16,8 +14,7 @@ export default function QuizPreview({
quizName: string;
moduleName: string;
}) {
const [quiz] = useQuizQuery(moduleName, quizName);
const [settings] = useLocalCourseSettingsQuery();
const { data: quiz } = useQuizQuery(moduleName, quizName);
return (
<div style={{ overflow: "scroll", height: "100%" }}>
<div className="columns-2">
@@ -74,8 +71,6 @@ export default function QuizPreview({
}
function QuizQuestionPreview({ question }: { question: LocalQuizQuestion }) {
const [settings] = useLocalCourseSettingsQuery();
return (
<div className="rounded bg-slate-900 px-2">
<div className="flex flex-row justify-between text-slate-400">
@@ -124,7 +119,10 @@ function QuizQuestionPreview({ question }: { question: LocalQuizQuestion }) {
<div></div>
)}
</div>
<MarkdownDisplay markdown={answer.text} className="markdownQuizAnswerPreview" />
<MarkdownDisplay
markdown={answer.text}
className="markdownQuizAnswerPreview"
/>
</div>
))}
</div>

View File

@@ -3,10 +3,9 @@ import TextInput from "@/components/form/TextInput";
import Modal, { useModal } from "@/components/Modal";
import { Spinner } from "@/components/Spinner";
import {
useAssignmentQuery,
useUpdateAssignmentMutation,
} from "@/hooks/localCourse/assignmentHooks";
import { useQuizQuery, useUpdateQuizMutation } from "@/hooks/localCourse/quizHooks";
useQuizQuery,
useUpdateQuizMutation,
} from "@/hooks/localCourse/quizHooks";
import { getModuleItemUrl } from "@/services/urlUtils";
import { useRouter } from "next/navigation";
import { useState } from "react";
@@ -21,11 +20,11 @@ export function UpdateQuizName({
const modal = useModal();
const { courseName } = useCourseContext();
const router = useRouter();
const [quiz] = useQuizQuery(moduleName, quizName);
const { data: quiz } = useQuizQuery(moduleName, quizName);
const updateQuiz = useUpdateQuizMutation();
const [name, setName] = useState(quiz.name);
const [isLoading, setIsLoading] = useState(false);
return (
<div>
<Modal
@@ -57,11 +56,7 @@ export function UpdateQuizName({
);
}}
>
<TextInput
value={name}
setValue={setName}
label={"Rename Quiz"}
/>
<TextInput value={name} setValue={setName} label={"Rename Quiz"} />
<button className="w-full my-3">Save New Name</button>
{isLoading && <Spinner />}
</form>

View File

@@ -5,7 +5,7 @@ import { DragStyleContextProvider } from "./context/drag/dragStyleContext";
import CollapsableSidebar from "./CollapsableSidebar";
export default async function CoursePage({}: {}) {
export default async function CoursePage() {
return (
<>
<div className="h-full flex flex-col">

View File

@@ -14,7 +14,7 @@ import { baseCanvasUrl } from "@/services/canvas/canvasServiceUtils";
import MeatballIcon from "./MeatballIcon";
export default function AssignmentGroupManagement() {
const [settings, { isPending }] = useLocalCourseSettingsQuery();
const { data: settings, isPending } = useLocalCourseSettingsQuery();
const updateSettings = useUpdateLocalCourseSettingsMutation();
const applyInCanvas = useSetAssignmentGroupsMutation(settings.canvasId);

View File

@@ -8,7 +8,7 @@ import {
import React from "react";
export default function DaysOfWeekSettings() {
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const updateSettings = useUpdateLocalCourseSettingsMutation();
return (

View File

@@ -10,7 +10,7 @@ import DefaultLockOffset from "./DefaultLockOffset";
import { settingsBox } from "./sharedSettings";
export default function DefaultDueTime() {
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const updateSettings = useUpdateLocalCourseSettingsMutation();
const [haveLockOffset, setHaveLockOffset] = useState(
typeof settings.defaultLockHoursOffset !== "undefined"

View File

@@ -8,7 +8,7 @@ import { useState, useEffect } from "react";
import { settingsBox } from "./sharedSettings";
export default function DefaultFileUploadTypes() {
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const [defaultFileUploadTypes, setDefaultFileUploadTypes] = useState<
string[]
>(settings.defaultFileUploadTypes);

View File

@@ -8,7 +8,7 @@ import {
import { useEffect, useState } from "react";
export default function DefaultLockOffset() {
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const updateSettings = useUpdateLocalCourseSettingsMutation();
const [hoursOffset, setHoursOffset] = useState(
settings.defaultLockHoursOffset?.toString() ?? "0"

View File

@@ -5,7 +5,7 @@ import { useCourseStudentsQuery } from "@/hooks/canvas/canvasCourseHooks";
import { Spinner } from "@/components/Spinner";
export default function GithubClassroomList() {
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const enrollmentsQuery = useCourseStudentsQuery(settings.canvasId);
if (enrollmentsQuery.isLoading)

View File

@@ -33,8 +33,12 @@ export const holidaysAreEqual = (
): boolean => {
if (holidays1.length !== holidays2.length) return false;
const sortedObj1 = [...holidays1].sort((a, b) => a.name.localeCompare(b.name));
const sortedObj2 = [...holidays2].sort((a, b) => a.name.localeCompare(b.name));
const sortedObj1 = [...holidays1].sort((a, b) =>
a.name.localeCompare(b.name)
);
const sortedObj2 = [...holidays2].sort((a, b) =>
a.name.localeCompare(b.name)
);
for (let i = 0; i < sortedObj1.length; i++) {
const holiday1 = sortedObj1[i];
@@ -63,7 +67,7 @@ export default function HolidayConfig() {
);
}
function InnerHolidayConfig() {
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const updateSettings = useUpdateLocalCourseSettingsMutation();
const [rawText, setRawText] = useState(holidaysToString(settings.holidays));
@@ -83,7 +87,7 @@ function InnerHolidayConfig() {
},
});
}
} catch (error: any) {}
} catch {}
}, 500);
return () => clearTimeout(id);
}, [rawText, settings.holidays, settings, updateSettings]);
@@ -127,7 +131,7 @@ function ParsedHolidaysDisplay({ value }: { value: string }) {
const parsed = parseHolidays(value);
setParsedHolidays(parsed);
setError("");
} catch (error: any) {
} catch (error) {
setError(error + "");
}
}, [value]);

View File

@@ -7,7 +7,7 @@ import { useCourseContext } from "../context/courseContext";
export default function SettingsHeader() {
const { courseName } = useCourseContext();
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
return (
<>
<div className="flex flex-row justify-between">

View File

@@ -5,7 +5,7 @@ import React from "react";
import { settingsBox } from "./sharedSettings";
export default function StartAndEndDate() {
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const startDate = new Date(settings.startDate);
const endDate = new Date(settings.endDate);
return (

View File

@@ -12,7 +12,7 @@ import React, { useEffect, useState } from "react";
import { settingsBox } from "./sharedSettings";
export default function SubmissionDefaults() {
const [settings] = useLocalCourseSettingsQuery();
const { data: settings } = useLocalCourseSettingsQuery();
const [defaultSubmissionTypes, setDefaultSubmissionTypes] = useState<
AssignmentSubmissionType[]
>(settings.defaultAssignmentSubmissionTypes);

View File

@@ -1,6 +1,5 @@
import React, { useState } from "react";
import { useCanvasTabsQuery } from "@/hooks/canvas/canvasNavigationHooks";
import { CanvasCourseTab } from "@/services/canvas/canvasNavigationService";
import { useUpdateCanvasTabMutation } from "@/hooks/canvas/canvasNavigationHooks";
import { Spinner } from "@/components/Spinner";
import { NavTabListItem } from "./NavTabListItem";

View File

@@ -9,7 +9,7 @@ export const NavTabListItem: FC<{
onDragStart: () => void;
onDragOver: (e: React.DragEvent) => void;
onDrop: () => void;
}> = ({ tab, idx, onDragStart, onDragOver, onDrop }) => {
}> = ({ tab, onDragStart, onDrop }) => {
const updateTab = useUpdateCanvasTabMutation();
const [isDragOver, setIsDragOver] = React.useState(false);
const handleToggleVisibility = () => {
@@ -32,7 +32,7 @@ export const NavTabListItem: FC<{
setIsDragOver(true);
}}
onDragLeave={() => setIsDragOver(false)}
onDrop={(e) => {
onDrop={() => {
setIsDragOver(false);
onDrop();
}}