mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
more refactoring by feature
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { useLocalCoursesSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCoursesSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import {
|
import {
|
||||||
getDateKey,
|
getDateKey,
|
||||||
getTermName,
|
getTermName,
|
||||||
|
|||||||
@@ -11,17 +11,14 @@ import { useCanvasTermsQuery } from "@/hooks/canvas/canvasHooks";
|
|||||||
import {
|
import {
|
||||||
useCreateLocalCourseMutation,
|
useCreateLocalCourseMutation,
|
||||||
useLocalCoursesSettingsQuery,
|
useLocalCoursesSettingsQuery,
|
||||||
} from "@/hooks/localCourse/localCoursesHooks";
|
} from "@/features/local/course/localCoursesHooks";
|
||||||
import { CanvasCourseModel } from "@/models/canvas/courses/canvasCourseModel";
|
import { CanvasCourseModel } from "@/models/canvas/courses/canvasCourseModel";
|
||||||
import { CanvasEnrollmentTermModel } from "@/models/canvas/enrollmentTerms/canvasEnrollmentTermModel";
|
import { CanvasEnrollmentTermModel } from "@/models/canvas/enrollmentTerms/canvasEnrollmentTermModel";
|
||||||
import { AssignmentSubmissionType } from "@/features/local/assignments/models/assignmentSubmissionType";
|
import { AssignmentSubmissionType } from "@/features/local/assignments/models/assignmentSubmissionType";
|
||||||
import {
|
|
||||||
DayOfWeek,
|
|
||||||
LocalCourseSettings,
|
|
||||||
} from "@/models/local/localCourseSettings";
|
|
||||||
import { getCourseUrl } from "@/services/urlUtils";
|
import { getCourseUrl } from "@/services/urlUtils";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import React, { Dispatch, SetStateAction, useMemo, useState } from "react";
|
import React, { Dispatch, SetStateAction, useMemo, useState } from "react";
|
||||||
|
import { DayOfWeek, LocalCourseSettings } from "@/features/local/course/localCourseSettings";
|
||||||
|
|
||||||
const sampleCompose = `services:
|
const sampleCompose = `services:
|
||||||
canvas_manager:
|
canvas_manager:
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import {
|
|||||||
canvasQuizKeys,
|
canvasQuizKeys,
|
||||||
useCanvasQuizzesQuery,
|
useCanvasQuizzesQuery,
|
||||||
} from "@/hooks/canvas/canvasQuizHooks";
|
} from "@/hooks/canvas/canvasQuizHooks";
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import { useQueryClient } from "@tanstack/react-query";
|
import { useQueryClient } from "@tanstack/react-query";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { useCourseContext } from "./context/courseContext";
|
import { useCourseContext } from "./context/courseContext";
|
||||||
import { getCourseSettingsUrl } from "@/services/urlUtils";
|
import { getCourseSettingsUrl } from "@/services/urlUtils";
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { CalendarMonthModel, getWeekNumber } from "./calendarMonthUtils";
|
import { CalendarMonthModel, getWeekNumber } from "./calendarMonthUtils";
|
||||||
import { DayOfWeek } from "@/models/local/localCourseSettings";
|
|
||||||
import { Expandable } from "@/components/Expandable";
|
import { Expandable } from "@/components/Expandable";
|
||||||
import { CalendarWeek } from "./CalendarWeek";
|
import { CalendarWeek } from "./CalendarWeek";
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import { getDateFromStringOrThrow } from "@/models/local/utils/timeUtils";
|
import { getDateFromStringOrThrow } from "@/models/local/utils/timeUtils";
|
||||||
import UpChevron from "@/components/icons/UpChevron";
|
import UpChevron from "@/components/icons/UpChevron";
|
||||||
import DownChevron from "@/components/icons/DownChevron";
|
import DownChevron from "@/components/icons/DownChevron";
|
||||||
|
import { DayOfWeek } from "@/features/local/course/localCourseSettings";
|
||||||
|
|
||||||
export const CalendarMonth = ({ month }: { month: CalendarMonthModel }) => {
|
export const CalendarMonth = ({ month }: { month: CalendarMonthModel }) => {
|
||||||
// const weekInMilliseconds = 604_800_000;
|
// const weekInMilliseconds = 604_800_000;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import { getDateFromStringOrThrow } from "@/models/local/utils/timeUtils";
|
import { getDateFromStringOrThrow } from "@/models/local/utils/timeUtils";
|
||||||
import { getWeekNumber } from "./calendarMonthUtils";
|
import { getWeekNumber } from "./calendarMonthUtils";
|
||||||
import Day from "./day/Day";
|
import Day from "./day/Day";
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
import { getDateFromStringOrThrow } from "@/models/local/utils/timeUtils";
|
import { getDateFromStringOrThrow } from "@/models/local/utils/timeUtils";
|
||||||
import { getMonthsBetweenDates } from "./calendarMonthUtils";
|
import { getMonthsBetweenDates } from "./calendarMonthUtils";
|
||||||
import { CalendarMonth } from "./CalendarMonth";
|
import { CalendarMonth } from "./CalendarMonth";
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import { useEffect, useMemo, useRef } from "react";
|
import { useEffect, useMemo, useRef } from "react";
|
||||||
import CalendarItemsContextProvider from "../context/CalendarItemsContextProvider";
|
import CalendarItemsContextProvider from "../context/CalendarItemsContextProvider";
|
||||||
|
|
||||||
|
|||||||
@@ -4,11 +4,11 @@ import {
|
|||||||
getDateOnlyMarkdownString,
|
getDateOnlyMarkdownString,
|
||||||
} from "@/models/local/utils/timeUtils";
|
} from "@/models/local/utils/timeUtils";
|
||||||
import { useDraggingContext } from "../../context/drag/draggingContext";
|
import { useDraggingContext } from "../../context/drag/draggingContext";
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import { getDayOfWeek } from "@/models/local/localCourseSettings";
|
|
||||||
import { ItemInDay } from "./ItemInDay";
|
import { ItemInDay } from "./ItemInDay";
|
||||||
import { useTodaysItems } from "./useTodaysItems";
|
import { useTodaysItems } from "./useTodaysItems";
|
||||||
import { DayTitle } from "./DayTitle";
|
import { DayTitle } from "./DayTitle";
|
||||||
|
import { getDayOfWeek } from "@/features/local/course/localCourseSettings";
|
||||||
|
|
||||||
export default function Day({ day, month }: { day: string; month: number }) {
|
export default function Day({ day, month }: { day: string; month: number }) {
|
||||||
const dayAsDate = getDateFromStringOrThrow(
|
const dayAsDate = getDateFromStringOrThrow(
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import NewItemForm from "../../modules/NewItemForm";
|
|||||||
import { DraggableItem } from "../../context/drag/draggingContext";
|
import { DraggableItem } from "../../context/drag/draggingContext";
|
||||||
import { useDragStyleContext } from "../../context/drag/dragStyleContext";
|
import { useDragStyleContext } from "../../context/drag/dragStyleContext";
|
||||||
import { getLectureForDay } from "@/models/local/utils/lectureUtils";
|
import { getLectureForDay } from "@/models/local/utils/lectureUtils";
|
||||||
import { useLecturesSuspenseQuery } from "@/hooks/localCourse/lectureHooks";
|
import { useLecturesSuspenseQuery } from "@/features/local/lectures/lectureHooks";
|
||||||
import ClientOnly from "@/components/ClientOnly";
|
import ClientOnly from "@/components/ClientOnly";
|
||||||
import { Tooltip } from "@/components/Tooltip";
|
import { Tooltip } from "@/components/Tooltip";
|
||||||
import { useRef, useState } from "react";
|
import { useRef, useState } from "react";
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { IModuleItem } from "@/models/local/IModuleItem";
|
import { IModuleItem } from "@/features/local/modules/IModuleItem";
|
||||||
import { getModuleItemUrl } from "@/services/urlUtils";
|
import { getModuleItemUrl } from "@/services/urlUtils";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { ReactNode, useRef, useState } from "react";
|
import { ReactNode, useRef, useState } from "react";
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import { CanvasAssignment } from "@/models/canvas/assignments/canvasAssignment";
|
|||||||
import { CanvasPage } from "@/models/canvas/pages/canvasPageModel";
|
import { CanvasPage } from "@/models/canvas/pages/canvasPageModel";
|
||||||
import { CanvasQuiz } from "@/models/canvas/quizzes/canvasQuizModel";
|
import { CanvasQuiz } from "@/models/canvas/quizzes/canvasQuizModel";
|
||||||
import { LocalAssignment } from "@/features/local/assignments/models/localAssignment";
|
import { LocalAssignment } from "@/features/local/assignments/models/localAssignment";
|
||||||
import { LocalCourseSettings } from "@/models/local/localCourseSettings";
|
|
||||||
import {
|
import {
|
||||||
dateToMarkdownString,
|
dateToMarkdownString,
|
||||||
getDateFromStringOrThrow,
|
getDateFromStringOrThrow,
|
||||||
@@ -13,6 +12,7 @@ import { htmlIsCloseEnough } from "@/services/utils/htmlIsCloseEnough";
|
|||||||
import { ReactNode } from "react";
|
import { ReactNode } from "react";
|
||||||
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
||||||
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
||||||
|
import { LocalCourseSettings } from "@/features/local/course/localCourseSettings";
|
||||||
|
|
||||||
export const getStatus = ({
|
export const getStatus = ({
|
||||||
item,
|
item,
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import {
|
|||||||
import { ReactNode } from "react";
|
import { ReactNode } from "react";
|
||||||
import { useCalendarItemsContext } from "../../context/calendarItemsContext";
|
import { useCalendarItemsContext } from "../../context/calendarItemsContext";
|
||||||
import { getStatus } from "./getStatus";
|
import { getStatus } from "./getStatus";
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
||||||
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import {
|
|||||||
useCourseQuizzesByModuleByDateQuery,
|
useCourseQuizzesByModuleByDateQuery,
|
||||||
useCourseAssignmentsByModuleByDateQuery,
|
useCourseAssignmentsByModuleByDateQuery,
|
||||||
useCoursePagesByModuleByDateQuery,
|
useCoursePagesByModuleByDateQuery,
|
||||||
} from "@/hooks/localCourse/localCourseModuleHooks";
|
} from "@/features/local/modules/localCourseModuleHooks";
|
||||||
|
|
||||||
export default function CalendarItemsContextProvider({
|
export default function CalendarItemsContextProvider({
|
||||||
children,
|
children,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { IModuleItem } from "@/models/local/IModuleItem";
|
import { IModuleItem } from "@/features/local/modules/IModuleItem";
|
||||||
import { createContext, useContext, DragEvent } from "react";
|
import { createContext, useContext, DragEvent } from "react";
|
||||||
|
|
||||||
export interface DraggableItem {
|
export interface DraggableItem {
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
import {
|
import {
|
||||||
useLecturesSuspenseQuery,
|
useLecturesSuspenseQuery,
|
||||||
useLectureUpdateMutation,
|
useLectureUpdateMutation,
|
||||||
} from "@/hooks/localCourse/lectureHooks";
|
} from "@/features/local/lectures/lectureHooks";
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import { useUpdatePageMutation } from "@/features/local/pages/pageHooks";
|
import { useUpdatePageMutation } from "@/features/local/pages/pageHooks";
|
||||||
import { LocalAssignment } from "@/features/local/assignments/models/localAssignment";
|
import { LocalAssignment } from "@/features/local/assignments/models/localAssignment";
|
||||||
import { Lecture } from "@/models/local/lecture";
|
import { Lecture } from "@/features/local/lectures/lectureModel";
|
||||||
import { getLectureForDay } from "@/models/local/utils/lectureUtils";
|
import { getLectureForDay } from "@/models/local/utils/lectureUtils";
|
||||||
import {
|
import {
|
||||||
getDateFromStringOrThrow,
|
getDateFromStringOrThrow,
|
||||||
@@ -16,7 +16,7 @@ import {
|
|||||||
import { Dispatch, SetStateAction, useCallback, DragEvent } from "react";
|
import { Dispatch, SetStateAction, useCallback, DragEvent } from "react";
|
||||||
import { DraggableItem } from "./draggingContext";
|
import { DraggableItem } from "./draggingContext";
|
||||||
import { getNewLockDate } from "./getNewLockDate";
|
import { getNewLockDate } from "./getNewLockDate";
|
||||||
import { useUpdateQuizMutation } from "@/hooks/localCourse/quizHooks";
|
import { useUpdateQuizMutation } from "@/features/local/quizzes/quizHooks";
|
||||||
import { useCourseContext } from "../courseContext";
|
import { useCourseContext } from "../courseContext";
|
||||||
import { useUpdateAssignmentMutation } from "@/features/local/assignments/assignmentHooks";
|
import { useUpdateAssignmentMutation } from "@/features/local/assignments/assignmentHooks";
|
||||||
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { LocalAssignment } from "@/features/local/assignments/models/localAssign
|
|||||||
import { Dispatch, SetStateAction, useCallback, DragEvent } from "react";
|
import { Dispatch, SetStateAction, useCallback, DragEvent } from "react";
|
||||||
import { DraggableItem } from "./draggingContext";
|
import { DraggableItem } from "./draggingContext";
|
||||||
import { useCourseContext } from "../courseContext";
|
import { useCourseContext } from "../courseContext";
|
||||||
import { useUpdateQuizMutation } from "@/hooks/localCourse/quizHooks";
|
import { useUpdateQuizMutation } from "@/features/local/quizzes/quizHooks";
|
||||||
import { useUpdateAssignmentMutation } from "@/features/local/assignments/assignmentHooks";
|
import { useUpdateAssignmentMutation } from "@/features/local/assignments/assignmentHooks";
|
||||||
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
||||||
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { MonacoEditor } from "@/components/editor/MonacoEditor";
|
|||||||
import {
|
import {
|
||||||
useLecturesSuspenseQuery,
|
useLecturesSuspenseQuery,
|
||||||
useLectureUpdateMutation,
|
useLectureUpdateMutation,
|
||||||
} from "@/hooks/localCourse/lectureHooks";
|
} from "@/features/local/lectures/lectureHooks";
|
||||||
import {
|
import {
|
||||||
lectureToString,
|
lectureToString,
|
||||||
parseLecture,
|
parseLecture,
|
||||||
@@ -13,8 +13,8 @@ import LecturePreview from "./LecturePreview";
|
|||||||
import EditLectureTitle from "./EditLectureTitle";
|
import EditLectureTitle from "./EditLectureTitle";
|
||||||
import LectureButtons from "./LectureButtons";
|
import LectureButtons from "./LectureButtons";
|
||||||
import { useCourseContext } from "../../context/courseContext";
|
import { useCourseContext } from "../../context/courseContext";
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import { Lecture } from "@/models/local/lecture";
|
import { Lecture } from "@/features/local/lectures/lectureModel";
|
||||||
import { useAuthoritativeUpdates } from "../../utils/useAuthoritativeUpdates";
|
import { useAuthoritativeUpdates } from "../../utils/useAuthoritativeUpdates";
|
||||||
import { EditLayout } from "@/components/EditLayout";
|
import { EditLayout } from "@/components/EditLayout";
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import { getDayOfWeek } from "@/models/local/localCourseSettings";
|
|
||||||
import { getDateFromString } from "@/models/local/utils/timeUtils";
|
import { getDateFromString } from "@/models/local/utils/timeUtils";
|
||||||
import { getLectureWeekName } from "@/services/fileStorage/utils/lectureUtils";
|
import { getLectureWeekName } from "@/services/fileStorage/utils/lectureUtils";
|
||||||
import { getCourseUrl, getLecturePreviewUrl } from "@/services/urlUtils";
|
import { getCourseUrl, getLecturePreviewUrl } from "@/services/urlUtils";
|
||||||
import { useCourseContext } from "../../context/courseContext";
|
import { useCourseContext } from "../../context/courseContext";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
import { getDayOfWeek } from "@/features/local/course/localCourseSettings";
|
||||||
|
|
||||||
export default function EditLectureTitle({
|
export default function EditLectureTitle({
|
||||||
lectureDay,
|
lectureDay,
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import { getCourseUrl } from "@/services/urlUtils";
|
|||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import { useCourseContext } from "../../context/courseContext";
|
import { useCourseContext } from "../../context/courseContext";
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import { useDeleteLectureMutation } from "@/hooks/localCourse/lectureHooks";
|
import { useDeleteLectureMutation } from "@/features/local/lectures/lectureHooks";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
|
||||||
export default function LectureButtons({ lectureDay }: { lectureDay: string }) {
|
export default function LectureButtons({ lectureDay }: { lectureDay: string }) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import MarkdownDisplay from "@/components/MarkdownDisplay";
|
import MarkdownDisplay from "@/components/MarkdownDisplay";
|
||||||
import { Lecture } from "@/models/local/lecture";
|
import { Lecture } from "@/features/local/lectures/lectureModel";
|
||||||
|
|
||||||
export default function LecturePreview({ lecture }: { lecture: Lecture }) {
|
export default function LecturePreview({ lecture }: { lecture: Lecture }) {
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import LecturePreview from "../LecturePreview";
|
|||||||
import { getCourseUrl, getLectureUrl } from "@/services/urlUtils";
|
import { getCourseUrl, getLectureUrl } from "@/services/urlUtils";
|
||||||
import { useCourseContext } from "../../../context/courseContext";
|
import { useCourseContext } from "../../../context/courseContext";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { useLecturesSuspenseQuery } from "@/hooks/localCourse/lectureHooks";
|
import { useLecturesSuspenseQuery } from "@/features/local/lectures/lectureHooks";
|
||||||
|
|
||||||
export default function LecturePreviewPage({
|
export default function LecturePreviewPage({
|
||||||
lectureDay,
|
lectureDay,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Expandable } from "@/components/Expandable";
|
import { Expandable } from "@/components/Expandable";
|
||||||
import TextInput from "@/components/form/TextInput";
|
import TextInput from "@/components/form/TextInput";
|
||||||
import { useCreateModuleMutation } from "@/hooks/localCourse/localCourseModuleHooks";
|
import { useCreateModuleMutation } from "@/features/local/modules/localCourseModuleHooks";
|
||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
import { useCourseContext } from "../context/courseContext";
|
import { useCourseContext } from "../context/courseContext";
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { usePagesQueries } from "@/features/local/pages/pageHooks";
|
import { usePagesQueries } from "@/features/local/pages/pageHooks";
|
||||||
import { IModuleItem } from "@/models/local/IModuleItem";
|
import { IModuleItem } from "@/features/local/modules/IModuleItem";
|
||||||
import {
|
import {
|
||||||
getDateFromString,
|
getDateFromString,
|
||||||
getDateFromStringOrThrow,
|
getDateFromStringOrThrow,
|
||||||
@@ -21,7 +21,7 @@ import { getModuleItemUrl } from "@/services/urlUtils";
|
|||||||
import { useCourseContext } from "../context/courseContext";
|
import { useCourseContext } from "../context/courseContext";
|
||||||
import { Expandable } from "../../../../components/Expandable";
|
import { Expandable } from "../../../../components/Expandable";
|
||||||
import { useDragStyleContext } from "../context/drag/dragStyleContext";
|
import { useDragStyleContext } from "../context/drag/dragStyleContext";
|
||||||
import { useQuizzesQueries } from "@/hooks/localCourse/quizHooks";
|
import { useQuizzesQueries } from "@/features/local/quizzes/quizHooks";
|
||||||
import { useTRPC } from "@/services/serverFunctions/trpcClient";
|
import { useTRPC } from "@/services/serverFunctions/trpcClient";
|
||||||
import { useSuspenseQueries } from "@tanstack/react-query";
|
import { useSuspenseQueries } from "@tanstack/react-query";
|
||||||
import { useAssignmentNamesQuery } from "@/features/local/assignments/assignmentHooks";
|
import { useAssignmentNamesQuery } from "@/features/local/assignments/assignmentHooks";
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { useModuleNamesQuery } from "@/hooks/localCourse/localCourseModuleHooks";
|
import { useModuleNamesQuery } from "@/features/local/modules/localCourseModuleHooks";
|
||||||
import ExpandableModule from "./ExpandableModule";
|
import ExpandableModule from "./ExpandableModule";
|
||||||
import CreateModule from "./CreateModule";
|
import CreateModule from "./CreateModule";
|
||||||
|
|
||||||
|
|||||||
@@ -3,14 +3,14 @@ import ButtonSelect from "@/components/ButtonSelect";
|
|||||||
import SelectInput from "@/components/form/SelectInput";
|
import SelectInput from "@/components/form/SelectInput";
|
||||||
import TextInput from "@/components/form/TextInput";
|
import TextInput from "@/components/form/TextInput";
|
||||||
import { Spinner } from "@/components/Spinner";
|
import { Spinner } from "@/components/Spinner";
|
||||||
import { useModuleNamesQuery } from "@/hooks/localCourse/localCourseModuleHooks";
|
import { useModuleNamesQuery } from "@/features/local/modules/localCourseModuleHooks";
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import { useCreatePageMutation } from "@/features/local/pages/pageHooks";
|
import { useCreatePageMutation } from "@/features/local/pages/pageHooks";
|
||||||
import { LocalAssignmentGroup } from "@/features/local/assignments/models/localAssignmentGroup";
|
import { LocalAssignmentGroup } from "@/features/local/assignments/models/localAssignmentGroup";
|
||||||
|
|
||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
import { useCourseContext } from "../context/courseContext";
|
import { useCourseContext } from "../context/courseContext";
|
||||||
import { useCreateQuizMutation } from "@/hooks/localCourse/quizHooks";
|
import { useCreateQuizMutation } from "@/features/local/quizzes/quizHooks";
|
||||||
import {
|
import {
|
||||||
getDateFromString,
|
getDateFromString,
|
||||||
dateToMarkdownString,
|
dateToMarkdownString,
|
||||||
|
|||||||
@@ -1,14 +1,17 @@
|
|||||||
import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
|
import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
|
||||||
import Modal, { useModal } from "@/components/Modal";
|
import Modal, { useModal } from "@/components/Modal";
|
||||||
import { Spinner } from "@/components/Spinner";
|
import { Spinner } from "@/components/Spinner";
|
||||||
import { useAssignmentQuery, useDeleteAssignmentMutation } from "@/features/local/assignments/assignmentHooks";
|
import {
|
||||||
|
useAssignmentQuery,
|
||||||
|
useDeleteAssignmentMutation,
|
||||||
|
} from "@/features/local/assignments/assignmentHooks";
|
||||||
import {
|
import {
|
||||||
useCanvasAssignmentsQuery,
|
useCanvasAssignmentsQuery,
|
||||||
useAddAssignmentToCanvasMutation,
|
useAddAssignmentToCanvasMutation,
|
||||||
useDeleteAssignmentFromCanvasMutation,
|
useDeleteAssignmentFromCanvasMutation,
|
||||||
useUpdateAssignmentInCanvasMutation,
|
useUpdateAssignmentInCanvasMutation,
|
||||||
} from "@/hooks/canvas/canvasAssignmentHooks";
|
} from "@/hooks/canvas/canvasAssignmentHooks";
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import { baseCanvasUrl } from "@/services/canvas/canvasServiceUtils";
|
import { baseCanvasUrl } from "@/services/canvas/canvasServiceUtils";
|
||||||
import { getCourseUrl } from "@/services/urlUtils";
|
import { getCourseUrl } from "@/services/urlUtils";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import {
|
|||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import AssignmentPreview from "./AssignmentPreview";
|
import AssignmentPreview from "./AssignmentPreview";
|
||||||
import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
|
import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import ClientOnly from "@/components/ClientOnly";
|
import ClientOnly from "@/components/ClientOnly";
|
||||||
import { SuspenseAndErrorHandling } from "@/components/SuspenseAndErrorHandling";
|
import { SuspenseAndErrorHandling } from "@/components/SuspenseAndErrorHandling";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { AssignmentSubmissionType } from "@/features/local/assignments/models/assignmentSubmissionType";
|
import { AssignmentSubmissionType } from "@/features/local/assignments/models/assignmentSubmissionType";
|
||||||
import { LocalCourseSettings } from "@/models/local/localCourseSettings";
|
import { LocalCourseSettings } from "@/features/local/course/localCourseSettings";
|
||||||
|
|
||||||
export function getAssignmentHelpString(settings: LocalCourseSettings) {
|
export function getAssignmentHelpString(settings: LocalCourseSettings) {
|
||||||
const groupNames = settings.assignmentGroups.map((g) => g.name).join("\n- ");
|
const groupNames = settings.assignmentGroups.map((g) => g.name).join("\n- ");
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
import { MonacoEditor } from "@/components/editor/MonacoEditor";
|
import { MonacoEditor } from "@/components/editor/MonacoEditor";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import PagePreview from "./PagePreview";
|
import PagePreview from "./PagePreview";
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import EditPageButtons from "./EditPageButtons";
|
import EditPageButtons from "./EditPageButtons";
|
||||||
import ClientOnly from "@/components/ClientOnly";
|
import ClientOnly from "@/components/ClientOnly";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import {
|
|||||||
useDeleteCanvasPageMutation,
|
useDeleteCanvasPageMutation,
|
||||||
useUpdateCanvasPageMutation,
|
useUpdateCanvasPageMutation,
|
||||||
} from "@/hooks/canvas/canvasPageHooks";
|
} from "@/hooks/canvas/canvasPageHooks";
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import {
|
import {
|
||||||
useDeletePageMutation,
|
useDeletePageMutation,
|
||||||
usePageQuery,
|
usePageQuery,
|
||||||
|
|||||||
@@ -10,14 +10,14 @@ import { useCourseContext } from "@/app/course/[courseName]/context/courseContex
|
|||||||
import {
|
import {
|
||||||
useQuizQuery,
|
useQuizQuery,
|
||||||
useUpdateQuizMutation,
|
useUpdateQuizMutation,
|
||||||
} from "@/hooks/localCourse/quizHooks";
|
} from "@/features/local/quizzes/quizHooks";
|
||||||
import { useAuthoritativeUpdates } from "../../../../utils/useAuthoritativeUpdates";
|
import { useAuthoritativeUpdates } from "../../../../utils/useAuthoritativeUpdates";
|
||||||
import { extractLabelValue } from "@/features/local/assignments/models/utils/markdownUtils";
|
import { extractLabelValue } from "@/features/local/assignments/models/utils/markdownUtils";
|
||||||
import EditQuizHeader from "./EditQuizHeader";
|
import EditQuizHeader from "./EditQuizHeader";
|
||||||
import { LocalCourseSettings } from "@/models/local/localCourseSettings";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
|
||||||
import { EditLayout } from "@/components/EditLayout";
|
import { EditLayout } from "@/components/EditLayout";
|
||||||
import { quizMarkdownUtils } from "@/features/local/quizzes/models/utils/quizMarkdownUtils";
|
import { quizMarkdownUtils } from "@/features/local/quizzes/models/utils/quizMarkdownUtils";
|
||||||
|
import { LocalCourseSettings } from "@/features/local/course/localCourseSettings";
|
||||||
|
|
||||||
const helpString = (settings: LocalCourseSettings) => {
|
const helpString = (settings: LocalCourseSettings) => {
|
||||||
const groupNames = settings.assignmentGroups.map((g) => g.name).join("\n- ");
|
const groupNames = settings.assignmentGroups.map((g) => g.name).join("\n- ");
|
||||||
|
|||||||
@@ -6,11 +6,11 @@ import {
|
|||||||
useAddQuizToCanvasMutation,
|
useAddQuizToCanvasMutation,
|
||||||
useDeleteQuizFromCanvasMutation,
|
useDeleteQuizFromCanvasMutation,
|
||||||
} from "@/hooks/canvas/canvasQuizHooks";
|
} from "@/hooks/canvas/canvasQuizHooks";
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import {
|
import {
|
||||||
useDeleteQuizMutation,
|
useDeleteQuizMutation,
|
||||||
useQuizQuery,
|
useQuizQuery,
|
||||||
} from "@/hooks/localCourse/quizHooks";
|
} from "@/features/local/quizzes/quizHooks";
|
||||||
import { baseCanvasUrl } from "@/services/canvas/canvasServiceUtils";
|
import { baseCanvasUrl } from "@/services/canvas/canvasServiceUtils";
|
||||||
import { getCourseUrl } from "@/services/urlUtils";
|
import { getCourseUrl } from "@/services/urlUtils";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
import CheckIcon from "@/components/icons/CheckIcon";
|
import CheckIcon from "@/components/icons/CheckIcon";
|
||||||
import MarkdownDisplay from "@/components/MarkdownDisplay";
|
import MarkdownDisplay from "@/components/MarkdownDisplay";
|
||||||
import { LocalQuizQuestion, QuestionType } from "@/features/local/quizzes/models/localQuizQuestion";
|
import {
|
||||||
import { useQuizQuery } from "@/hooks/localCourse/quizHooks";
|
LocalQuizQuestion,
|
||||||
|
QuestionType,
|
||||||
|
} from "@/features/local/quizzes/models/localQuizQuestion";
|
||||||
|
import { useQuizQuery } from "@/features/local/quizzes/quizHooks";
|
||||||
import { escapeMatchingText } from "@/services/utils/questionHtmlUtils";
|
import { escapeMatchingText } from "@/services/utils/questionHtmlUtils";
|
||||||
|
|
||||||
export default function QuizPreview({
|
export default function QuizPreview({
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { Spinner } from "@/components/Spinner";
|
|||||||
import {
|
import {
|
||||||
useQuizQuery,
|
useQuizQuery,
|
||||||
useUpdateQuizMutation,
|
useUpdateQuizMutation,
|
||||||
} from "@/hooks/localCourse/quizHooks";
|
} from "@/features/local/quizzes/quizHooks";
|
||||||
import { getModuleItemUrl } from "@/services/urlUtils";
|
import { getModuleItemUrl } from "@/services/urlUtils";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
import {
|
import {
|
||||||
useLocalCourseSettingsQuery,
|
useLocalCourseSettingsQuery,
|
||||||
useUpdateLocalCourseSettingsMutation,
|
useUpdateLocalCourseSettingsMutation,
|
||||||
} from "@/hooks/localCourse/localCoursesHooks";
|
} from "@/features/local/course/localCoursesHooks";
|
||||||
import { LocalAssignmentGroup } from "@/features/local/assignments/models/localAssignmentGroup";
|
import { LocalAssignmentGroup } from "@/features/local/assignments/models/localAssignmentGroup";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import TextInput from "../../../../components/form/TextInput";
|
import TextInput from "../../../../components/form/TextInput";
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { Spinner } from "@/components/Spinner";
|
|||||||
import {
|
import {
|
||||||
useLocalCourseSettingsQuery,
|
useLocalCourseSettingsQuery,
|
||||||
useUpdateLocalCourseSettingsMutation,
|
useUpdateLocalCourseSettingsMutation,
|
||||||
} from "@/hooks/localCourse/localCoursesHooks";
|
} from "@/features/local/course/localCoursesHooks";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
export default function DaysOfWeekSettings() {
|
export default function DaysOfWeekSettings() {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
import {
|
import {
|
||||||
useLocalCourseSettingsQuery,
|
useLocalCourseSettingsQuery,
|
||||||
useUpdateLocalCourseSettingsMutation,
|
useUpdateLocalCourseSettingsMutation,
|
||||||
} from "@/hooks/localCourse/localCoursesHooks";
|
} from "@/features/local/course/localCoursesHooks";
|
||||||
import { TimePicker } from "../../../../components/TimePicker";
|
import { TimePicker } from "../../../../components/TimePicker";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import DefaultLockOffset from "./DefaultLockOffset";
|
import DefaultLockOffset from "./DefaultLockOffset";
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import TextInput from "@/components/form/TextInput";
|
|||||||
import {
|
import {
|
||||||
useLocalCourseSettingsQuery,
|
useLocalCourseSettingsQuery,
|
||||||
useUpdateLocalCourseSettingsMutation,
|
useUpdateLocalCourseSettingsMutation,
|
||||||
} from "@/hooks/localCourse/localCoursesHooks";
|
} from "@/features/local/course/localCoursesHooks";
|
||||||
import { useState, useEffect } from "react";
|
import { useState, useEffect } from "react";
|
||||||
import { settingsBox } from "./sharedSettings";
|
import { settingsBox } from "./sharedSettings";
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import TextInput from "@/components/form/TextInput";
|
|||||||
import {
|
import {
|
||||||
useLocalCourseSettingsQuery,
|
useLocalCourseSettingsQuery,
|
||||||
useUpdateLocalCourseSettingsMutation,
|
useUpdateLocalCourseSettingsMutation,
|
||||||
} from "@/hooks/localCourse/localCoursesHooks";
|
} from "@/features/local/course/localCoursesHooks";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
|
|
||||||
export default function DefaultLockOffset() {
|
export default function DefaultLockOffset() {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import { settingsBox } from "./sharedSettings";
|
import { settingsBox } from "./sharedSettings";
|
||||||
import { useCourseStudentsQuery } from "@/hooks/canvas/canvasCourseHooks";
|
import { useCourseStudentsQuery } from "@/hooks/canvas/canvasCourseHooks";
|
||||||
import { Spinner } from "@/components/Spinner";
|
import { Spinner } from "@/components/Spinner";
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { SuspenseAndErrorHandling } from "@/components/SuspenseAndErrorHandling"
|
|||||||
import {
|
import {
|
||||||
useLocalCourseSettingsQuery,
|
useLocalCourseSettingsQuery,
|
||||||
useUpdateLocalCourseSettingsMutation,
|
useUpdateLocalCourseSettingsMutation,
|
||||||
} from "@/hooks/localCourse/localCoursesHooks";
|
} from "@/features/local/course/localCoursesHooks";
|
||||||
import { getDateFromString } from "@/models/local/utils/timeUtils";
|
import { getDateFromString } from "@/models/local/utils/timeUtils";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import { getCourseUrl } from "@/services/urlUtils";
|
import { getCourseUrl } from "@/services/urlUtils";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import { getDateOnlyMarkdownString } from "@/models/local/utils/timeUtils";
|
import { getDateOnlyMarkdownString } from "@/models/local/utils/timeUtils";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { settingsBox } from "./sharedSettings";
|
import { settingsBox } from "./sharedSettings";
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import SelectInput from "@/components/form/SelectInput";
|
|||||||
import {
|
import {
|
||||||
useLocalCourseSettingsQuery,
|
useLocalCourseSettingsQuery,
|
||||||
useUpdateLocalCourseSettingsMutation,
|
useUpdateLocalCourseSettingsMutation,
|
||||||
} from "@/hooks/localCourse/localCoursesHooks";
|
} from "@/features/local/course/localCoursesHooks";
|
||||||
import {
|
import {
|
||||||
AssignmentSubmissionType,
|
AssignmentSubmissionType,
|
||||||
AssignmentSubmissionTypeList,
|
AssignmentSubmissionTypeList,
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
import { getLecturePreviewUrl } from "@/services/urlUtils";
|
import { getLecturePreviewUrl } from "@/services/urlUtils";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { useCourseContext } from "../course/[courseName]/context/courseContext";
|
import { useCourseContext } from "../course/[courseName]/context/courseContext";
|
||||||
import { useLecturesSuspenseQuery as useLecturesQuery } from "@/hooks/localCourse/lectureHooks";
|
import { useLecturesSuspenseQuery as useLecturesQuery } from "@/features/local/lectures/lectureHooks";
|
||||||
import { getLectureForDay } from "@/models/local/utils/lectureUtils";
|
import { getLectureForDay } from "@/models/local/utils/lectureUtils";
|
||||||
import { getDateOnlyMarkdownString } from "@/models/local/utils/timeUtils";
|
import { getDateOnlyMarkdownString } from "@/models/local/utils/timeUtils";
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { useLocalCoursesSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCoursesSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import OneCourseLectures from "./OneCourseLectures";
|
import OneCourseLectures from "./OneCourseLectures";
|
||||||
import { SuspenseAndErrorHandling } from "@/components/SuspenseAndErrorHandling";
|
import { SuspenseAndErrorHandling } from "@/components/SuspenseAndErrorHandling";
|
||||||
import CourseContextProvider from "../course/[courseName]/context/CourseContextProvider";
|
import CourseContextProvider from "../course/[courseName]/context/CourseContextProvider";
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import { SuspenseAndErrorHandling } from "./SuspenseAndErrorHandling";
|
import { SuspenseAndErrorHandling } from "./SuspenseAndErrorHandling";
|
||||||
import { markdownToHTMLSafe } from "@/services/htmlMarkdownUtils";
|
import { markdownToHTMLSafe } from "@/services/htmlMarkdownUtils";
|
||||||
import { LocalCourseSettings } from "@/models/local/localCourseSettings";
|
import { LocalCourseSettings } from "@/features/local/course/localCourseSettings";
|
||||||
|
|
||||||
export default function MarkdownDisplay({
|
export default function MarkdownDisplay({
|
||||||
markdown,
|
markdown,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { SimpleTimeOnly } from "@/models/local/localCourseSettings";
|
import { SimpleTimeOnly } from "@/features/local/course/localCourseSettings";
|
||||||
import { FC } from "react";
|
import { FC } from "react";
|
||||||
|
|
||||||
export const TimePicker: FC<{
|
export const TimePicker: FC<{
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { DayOfWeek } from "@/models/local/localCourseSettings";
|
import { DayOfWeek } from "@/features/local/course/localCourseSettings";
|
||||||
|
|
||||||
export function DayOfWeekInput({
|
export function DayOfWeekInput({
|
||||||
selectedDays,
|
selectedDays,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import {
|
|||||||
import {
|
import {
|
||||||
useLocalCourseSettingsQuery,
|
useLocalCourseSettingsQuery,
|
||||||
useUpdateLocalCourseSettingsMutation,
|
useUpdateLocalCourseSettingsMutation,
|
||||||
} from "@/hooks/localCourse/localCoursesHooks";
|
} from "@/features/local/course/localCoursesHooks";
|
||||||
|
|
||||||
export const useAssignmentQuery = (
|
export const useAssignmentQuery = (
|
||||||
moduleName: string,
|
moduleName: string,
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ import {
|
|||||||
} from "@/features/local/assignments/models/localAssignment";
|
} from "@/features/local/assignments/models/localAssignment";
|
||||||
import { assignmentMarkdownSerializer } from "@/features/local/assignments/models/utils/assignmentMarkdownSerializer";
|
import { assignmentMarkdownSerializer } from "@/features/local/assignments/models/utils/assignmentMarkdownSerializer";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import { directoryOrFileExists } from "./utils/fileSystemUtils";
|
|
||||||
import { promises as fs } from "fs";
|
import { promises as fs } from "fs";
|
||||||
import { courseItemFileStorageService } from "./courseItemFileStorageService";
|
import { courseItemFileStorageService } from "@/features/local/course/courseItemFileStorageService";
|
||||||
import { getCoursePathByName } from "./globalSettingsFileStorageService";
|
import { getCoursePathByName } from "@/services/fileStorage/globalSettingsFileStorageService";
|
||||||
|
import { directoryOrFileExists } from "@/services/fileStorage/utils/fileSystemUtils";
|
||||||
|
|
||||||
const getAssignmentNames = async (courseName: string, moduleName: string) => {
|
const getAssignmentNames = async (courseName: string, moduleName: string) => {
|
||||||
const courseDirectory = await getCoursePathByName(courseName);
|
const courseDirectory = await getCoursePathByName(courseName);
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { IModuleItem } from "../../../../models/local/IModuleItem";
|
import { IModuleItem } from "../../modules/IModuleItem";
|
||||||
import {
|
import {
|
||||||
AssignmentSubmissionType,
|
AssignmentSubmissionType,
|
||||||
zodAssignmentSubmissionType,
|
zodAssignmentSubmissionType,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import path from "path";
|
import path from "path";
|
||||||
import { directoryOrFileExists } from "./utils/fileSystemUtils";
|
import { directoryOrFileExists } from "../../../services/fileStorage/utils/fileSystemUtils";
|
||||||
import fs from "fs/promises";
|
import fs from "fs/promises";
|
||||||
import {
|
import {
|
||||||
LocalAssignment,
|
LocalAssignment,
|
||||||
@@ -10,13 +10,16 @@ import {
|
|||||||
CourseItemReturnType,
|
CourseItemReturnType,
|
||||||
CourseItemType,
|
CourseItemType,
|
||||||
typeToFolder,
|
typeToFolder,
|
||||||
} from "@/models/local/courseItemTypes";
|
} from "@/features/local/course/courseItemTypes";
|
||||||
import { getCoursePathByName } from "./globalSettingsFileStorageService";
|
import { getCoursePathByName } from "../../../services/fileStorage/globalSettingsFileStorageService";
|
||||||
import {
|
import {
|
||||||
localPageMarkdownUtils,
|
localPageMarkdownUtils,
|
||||||
LocalCoursePage,
|
LocalCoursePage,
|
||||||
} from "@/features/local/pages/localCoursePageModels";
|
} from "@/features/local/pages/localCoursePageModels";
|
||||||
import { LocalQuiz, localQuizMarkdownUtils } from "@/features/local/quizzes/models/localQuiz";
|
import {
|
||||||
|
LocalQuiz,
|
||||||
|
localQuizMarkdownUtils,
|
||||||
|
} from "@/features/local/quizzes/models/localQuiz";
|
||||||
import { quizMarkdownUtils } from "@/features/local/quizzes/models/utils/quizMarkdownUtils";
|
import { quizMarkdownUtils } from "@/features/local/quizzes/models/utils/quizMarkdownUtils";
|
||||||
|
|
||||||
const getItemFileNames = async (
|
const getItemFileNames = async (
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
||||||
import { LocalAssignment } from "../../features/local/assignments/models/localAssignment";
|
import { LocalAssignment } from "../assignments/models/localAssignment";
|
||||||
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
||||||
|
|
||||||
export type CourseItemType = "Assignment" | "Quiz" | "Page";
|
export type CourseItemType = "Assignment" | "Quiz" | "Page";
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
import { parse, stringify } from "yaml";
|
||||||
import {
|
import {
|
||||||
AssignmentSubmissionType,
|
AssignmentSubmissionType,
|
||||||
zodAssignmentSubmissionType,
|
zodAssignmentSubmissionType,
|
||||||
} from "../../features/local/assignments/models/assignmentSubmissionType";
|
} from "../assignments/models/assignmentSubmissionType";
|
||||||
import {
|
import {
|
||||||
LocalAssignmentGroup,
|
LocalAssignmentGroup,
|
||||||
zodLocalAssignmentGroup,
|
zodLocalAssignmentGroup,
|
||||||
} from "../../features/local/assignments/models/localAssignmentGroup";
|
} from "../assignments/models/localAssignmentGroup";
|
||||||
import { parse, stringify } from "yaml";
|
|
||||||
|
|
||||||
export interface SimpleTimeOnly {
|
export interface SimpleTimeOnly {
|
||||||
hour: number;
|
hour: number;
|
||||||
@@ -1,16 +1,19 @@
|
|||||||
import {
|
|
||||||
LocalCourseSettings,
|
|
||||||
localCourseYamlUtils,
|
|
||||||
} from "@/models/local/localCourseSettings";
|
|
||||||
import { promises as fs } from "fs";
|
import { promises as fs } from "fs";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import { basePath, directoryOrFileExists } from "./utils/fileSystemUtils";
|
import {
|
||||||
|
basePath,
|
||||||
|
directoryOrFileExists,
|
||||||
|
} from "../../../services/fileStorage/utils/fileSystemUtils";
|
||||||
import { AssignmentSubmissionType } from "@/features/local/assignments/models/assignmentSubmissionType";
|
import { AssignmentSubmissionType } from "@/features/local/assignments/models/assignmentSubmissionType";
|
||||||
import {
|
import {
|
||||||
getCoursePathByName,
|
getCoursePathByName,
|
||||||
getGlobalSettings,
|
getGlobalSettings,
|
||||||
} from "./globalSettingsFileStorageService";
|
} from "../../../services/fileStorage/globalSettingsFileStorageService";
|
||||||
import { GlobalSettingsCourse } from "@/models/local/globalSettings";
|
import { GlobalSettingsCourse } from "@/models/local/globalSettings";
|
||||||
|
import {
|
||||||
|
LocalCourseSettings,
|
||||||
|
localCourseYamlUtils,
|
||||||
|
} from "@/features/local/course/localCourseSettings";
|
||||||
|
|
||||||
const getCourseSettings = async (
|
const getCourseSettings = async (
|
||||||
course: GlobalSettingsCourse
|
course: GlobalSettingsCourse
|
||||||
@@ -1,19 +1,15 @@
|
|||||||
|
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import fs from "fs/promises";
|
import fs from "fs/promises";
|
||||||
import {
|
import { Lecture } from "@/features/local/lectures/lectureModel";
|
||||||
getLectureWeekName,
|
|
||||||
lectureFolderName,
|
|
||||||
lectureToString,
|
|
||||||
parseLecture,
|
|
||||||
} from "./utils/lectureUtils";
|
|
||||||
import { Lecture } from "@/models/local/lecture";
|
|
||||||
import {
|
|
||||||
getDayOfWeek,
|
|
||||||
LocalCourseSettings,
|
|
||||||
} from "@/models/local/localCourseSettings";
|
|
||||||
import { getDateFromStringOrThrow } from "@/models/local/utils/timeUtils";
|
import { getDateFromStringOrThrow } from "@/models/local/utils/timeUtils";
|
||||||
import { getCoursePathByName } from "./globalSettingsFileStorageService";
|
import { getCoursePathByName } from "@/services/fileStorage/globalSettingsFileStorageService";
|
||||||
|
import {
|
||||||
|
lectureFolderName,
|
||||||
|
parseLecture,
|
||||||
|
getLectureWeekName,
|
||||||
|
lectureToString,
|
||||||
|
} from "@/services/fileStorage/utils/lectureUtils";
|
||||||
|
import { LocalCourseSettings, getDayOfWeek } from "../course/localCourseSettings";
|
||||||
|
|
||||||
export async function getLectures(courseName: string) {
|
export async function getLectures(courseName: string) {
|
||||||
const courseDirectory = await getCoursePathByName(courseName);
|
const courseDirectory = await getCoursePathByName(courseName);
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import publicProcedure from "../procedures/public";
|
import publicProcedure from "../../../services/serverFunctions/procedures/public";
|
||||||
import { router } from "../trpcSetup";
|
import { router } from "../../../services/serverFunctions/trpcSetup";
|
||||||
|
import { zodLecture } from "@/features/local/lectures/lectureModel";
|
||||||
import {
|
import {
|
||||||
deleteLecture,
|
|
||||||
getLectures,
|
getLectures,
|
||||||
updateLecture,
|
updateLecture,
|
||||||
} from "@/services/fileStorage/lectureFileStorageService";
|
deleteLecture,
|
||||||
import { zodLecture } from "@/models/local/lecture";
|
} from "./lectureFileStorageService";
|
||||||
import { zodLocalCourseSettings } from "@/models/local/localCourseSettings";
|
import { zodLocalCourseSettings } from "../course/localCourseSettings";
|
||||||
|
|
||||||
export const lectureRouter = router({
|
export const lectureRouter = router({
|
||||||
getLectures: publicProcedure
|
getLectures: publicProcedure
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
||||||
import { LocalAssignment } from "../../features/local/assignments/models/localAssignment";
|
import { LocalAssignment } from "../assignments/models/localAssignment";
|
||||||
import { IModuleItem } from "./IModuleItem";
|
import { IModuleItem } from "./IModuleItem";
|
||||||
import { getDateFromString } from "./utils/timeUtils";
|
import { getDateFromString } from "../../../models/local/utils/timeUtils";
|
||||||
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
||||||
|
|
||||||
export interface LocalModule {
|
export interface LocalModule {
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { promises as fs } from "fs";
|
import { promises as fs } from "fs";
|
||||||
import { lectureFolderName } from "./utils/lectureUtils";
|
import { lectureFolderName } from "../../../services/fileStorage/utils/lectureUtils";
|
||||||
import { getCoursePathByName } from "./globalSettingsFileStorageService";
|
import { getCoursePathByName } from "../../../services/fileStorage/globalSettingsFileStorageService";
|
||||||
|
|
||||||
export const moduleFileStorageService = {
|
export const moduleFileStorageService = {
|
||||||
async getModuleNames(courseName: string) {
|
async getModuleNames(courseName: string) {
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import publicProcedure from "../procedures/public";
|
|
||||||
import { router } from "../trpcSetup";
|
|
||||||
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
||||||
|
import { router } from "@/services/serverFunctions/trpcSetup";
|
||||||
|
import publicProcedure from "@/services/serverFunctions/procedures/public";
|
||||||
|
|
||||||
export const moduleRouter = router({
|
export const moduleRouter = router({
|
||||||
getModuleNames: publicProcedure
|
getModuleNames: publicProcedure
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { IModuleItem } from "@/models/local/IModuleItem";
|
import { IModuleItem } from "@/features/local/modules/IModuleItem";
|
||||||
import { verifyDateOrThrow } from "@/models/local/utils/timeUtils";
|
import { verifyDateOrThrow } from "@/models/local/utils/timeUtils";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { extractLabelValue } from "../assignments/models/utils/markdownUtils";
|
import { extractLabelValue } from "../assignments/models/utils/markdownUtils";
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { promises as fs } from "fs";
|
import { promises as fs } from "fs";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import { courseItemFileStorageService } from "../../../services/fileStorage/courseItemFileStorageService";
|
import { courseItemFileStorageService } from "../course/courseItemFileStorageService";
|
||||||
import { getCoursePathByName } from "../../../services/fileStorage/globalSettingsFileStorageService";
|
import { getCoursePathByName } from "../../../services/fileStorage/globalSettingsFileStorageService";
|
||||||
import {
|
import {
|
||||||
LocalCoursePage,
|
LocalCoursePage,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { LocalQuizQuestion, zodLocalQuizQuestion } from "./localQuizQuestion";
|
import { LocalQuizQuestion, zodLocalQuizQuestion } from "./localQuizQuestion";
|
||||||
import { quizMarkdownUtils } from "./utils/quizMarkdownUtils";
|
import { quizMarkdownUtils } from "./utils/quizMarkdownUtils";
|
||||||
import { IModuleItem } from "@/models/local/IModuleItem";
|
import { IModuleItem } from "@/features/local/modules/IModuleItem";
|
||||||
|
|
||||||
export interface LocalQuiz extends IModuleItem {
|
export interface LocalQuiz extends IModuleItem {
|
||||||
name: string;
|
name: string;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import path from "path";
|
import path from "path";
|
||||||
import { promises as fs } from "fs";
|
import { promises as fs } from "fs";
|
||||||
import { courseItemFileStorageService } from "./courseItemFileStorageService";
|
import { courseItemFileStorageService } from "../course/courseItemFileStorageService";
|
||||||
import { getCoursePathByName } from "./globalSettingsFileStorageService";
|
import { getCoursePathByName } from "../../../services/fileStorage/globalSettingsFileStorageService";
|
||||||
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
||||||
import { quizMarkdownUtils } from "@/features/local/quizzes/models/utils/quizMarkdownUtils";
|
import { quizMarkdownUtils } from "@/features/local/quizzes/models/utils/quizMarkdownUtils";
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import publicProcedure from "../procedures/public";
|
import publicProcedure from "../../../services/serverFunctions/procedures/public";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { router } from "../trpcSetup";
|
import { router } from "../../../services/serverFunctions/trpcSetup";
|
||||||
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
||||||
import { zodLocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
import { zodLocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { canvasAssignmentService } from "@/services/canvas/canvasAssignmentService";
|
import { canvasAssignmentService } from "@/services/canvas/canvasAssignmentService";
|
||||||
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
||||||
import { useLocalCourseSettingsQuery } from "../localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "../../features/local/course/localCoursesHooks";
|
||||||
import { LocalAssignment } from "@/features/local/assignments/models/localAssignment";
|
import { LocalAssignment } from "@/features/local/assignments/models/localAssignment";
|
||||||
import { canvasModuleService } from "@/services/canvas/canvasModuleService";
|
import { canvasModuleService } from "@/services/canvas/canvasModuleService";
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
import { CanvasAssignmentGroup } from "@/models/canvas/assignments/canvasAssignmentGroup";
|
import { CanvasAssignmentGroup } from "@/models/canvas/assignments/canvasAssignmentGroup";
|
||||||
import { CanvasCourseModel } from "@/models/canvas/courses/canvasCourseModel";
|
import { CanvasCourseModel } from "@/models/canvas/courses/canvasCourseModel";
|
||||||
import { LocalAssignmentGroup } from "@/features/local/assignments/models/localAssignmentGroup";
|
import { LocalAssignmentGroup } from "@/features/local/assignments/models/localAssignmentGroup";
|
||||||
import { LocalCourseSettings } from "@/models/local/localCourseSettings";
|
|
||||||
import { canvasAssignmentGroupService } from "@/services/canvas/canvasAssignmentGroupService";
|
import { canvasAssignmentGroupService } from "@/services/canvas/canvasAssignmentGroupService";
|
||||||
import { canvasService } from "@/services/canvas/canvasService";
|
import { canvasService } from "@/services/canvas/canvasService";
|
||||||
import { useMutation, useQuery } from "@tanstack/react-query";
|
import { useMutation, useQuery } from "@tanstack/react-query";
|
||||||
import { useUpdateLocalCourseSettingsMutation } from "../localCourse/localCoursesHooks";
|
import { useUpdateLocalCourseSettingsMutation } from "../../features/local/course/localCoursesHooks";
|
||||||
|
import { LocalCourseSettings } from "@/features/local/course/localCourseSettings";
|
||||||
|
|
||||||
export const canvasCourseKeys = {
|
export const canvasCourseKeys = {
|
||||||
courseDetails: (canavasId: number) =>
|
courseDetails: (canavasId: number) =>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { canvasModuleService } from "@/services/canvas/canvasModuleService";
|
import { canvasModuleService } from "@/services/canvas/canvasModuleService";
|
||||||
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
||||||
import { useLocalCourseSettingsQuery } from "../localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "../../features/local/course/localCoursesHooks";
|
||||||
|
|
||||||
export const canvasCourseModuleKeys = {
|
export const canvasCourseModuleKeys = {
|
||||||
modules: (canvasId: number) => ["canvas", canvasId, "module list"] as const,
|
modules: (canvasId: number) => ["canvas", canvasId, "module list"] as const,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { useQuery, useQueryClient, useMutation } from "@tanstack/react-query";
|
import { useQuery, useQueryClient, useMutation } from "@tanstack/react-query";
|
||||||
import { useLocalCourseSettingsQuery } from "../localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "../../features/local/course/localCoursesHooks";
|
||||||
import { canvasNavigationService } from "@/services/canvas/canvasNavigationService";
|
import { canvasNavigationService } from "@/services/canvas/canvasNavigationService";
|
||||||
|
|
||||||
export const canvasCourseTabKeys = {
|
export const canvasCourseTabKeys = {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
||||||
import { canvasPageService } from "@/services/canvas/canvasPageService";
|
import { canvasPageService } from "@/services/canvas/canvasPageService";
|
||||||
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
||||||
import { useLocalCourseSettingsQuery } from "../localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "../../features/local/course/localCoursesHooks";
|
||||||
import { canvasModuleService } from "@/services/canvas/canvasModuleService";
|
import { canvasModuleService } from "@/services/canvas/canvasModuleService";
|
||||||
import {
|
import {
|
||||||
useCanvasModulesQuery,
|
useCanvasModulesQuery,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
||||||
import { useLocalCourseSettingsQuery } from "../localCourse/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "../../features/local/course/localCoursesHooks";
|
||||||
import { canvasQuizService } from "@/services/canvas/canvasQuizService";
|
import { canvasQuizService } from "@/services/canvas/canvasQuizService";
|
||||||
import {
|
import {
|
||||||
useAddCanvasModuleMutation,
|
useAddCanvasModuleMutation,
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import {
|
|||||||
prepPageForNewSemester,
|
prepPageForNewSemester,
|
||||||
prepQuizForNewSemester,
|
prepQuizForNewSemester,
|
||||||
} from "../utils/semesterTransferUtils";
|
} from "../utils/semesterTransferUtils";
|
||||||
import { Lecture } from "../lecture";
|
import { Lecture } from "../../../features/local/lectures/lectureModel";
|
||||||
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
||||||
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
import { Lecture } from "../lecture";
|
import { Lecture } from "../../../features/local/lectures/lectureModel";
|
||||||
import { getDateOnlyMarkdownString } from "./timeUtils";
|
import { getDateOnlyMarkdownString } from "./timeUtils";
|
||||||
|
|
||||||
export function getLectureForDay(weeks: { weekName: string; lectures: Lecture[]; }[], dayAsDate: Date) {
|
export function getLectureForDay(
|
||||||
|
weeks: { weekName: string; lectures: Lecture[] }[],
|
||||||
|
dayAsDate: Date
|
||||||
|
) {
|
||||||
return weeks
|
return weeks
|
||||||
.flatMap((w) => w.lectures)
|
.flatMap((w) => w.lectures)
|
||||||
.find((l) => l.date == getDateOnlyMarkdownString(dayAsDate));
|
.find((l) => l.date == getDateOnlyMarkdownString(dayAsDate));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
||||||
import { LocalAssignment } from "../../../features/local/assignments/models/localAssignment";
|
import { LocalAssignment } from "../../../features/local/assignments/models/localAssignment";
|
||||||
import { Lecture } from "../lecture";
|
import { Lecture } from "../../../features/local/lectures/lectureModel";
|
||||||
import { dateToMarkdownString, getDateFromStringOrThrow } from "./timeUtils";
|
import { dateToMarkdownString, getDateFromStringOrThrow } from "./timeUtils";
|
||||||
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { LocalCourseSettings } from "../localCourseSettings";
|
import { LocalCourseSettings } from "@/features/local/course/localCourseSettings";
|
||||||
|
|
||||||
const _getDateFromAMPM = (
|
const _getDateFromAMPM = (
|
||||||
datePart: string,
|
datePart: string,
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { CanvasRubricCreationResponse } from "@/models/canvas/assignments/canvas
|
|||||||
import { assignmentPoints } from "@/features/local/assignments/models/utils/assignmentPointsUtils";
|
import { assignmentPoints } from "@/features/local/assignments/models/utils/assignmentPointsUtils";
|
||||||
import { getDateFromString } from "@/models/local/utils/timeUtils";
|
import { getDateFromString } from "@/models/local/utils/timeUtils";
|
||||||
import { getRubricCriterion } from "./canvasRubricUtils";
|
import { getRubricCriterion } from "./canvasRubricUtils";
|
||||||
import { LocalCourseSettings } from "@/models/local/localCourseSettings";
|
import { LocalCourseSettings } from "@/features/local/course/localCourseSettings";
|
||||||
|
|
||||||
export const canvasAssignmentService = {
|
export const canvasAssignmentService = {
|
||||||
async getAll(courseId: number): Promise<CanvasAssignment[]> {
|
async getAll(courseId: number): Promise<CanvasAssignment[]> {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { canvasApi, paginatedRequest } from "./canvasServiceUtils";
|
|||||||
import { markdownToHTMLSafe } from "../htmlMarkdownUtils";
|
import { markdownToHTMLSafe } from "../htmlMarkdownUtils";
|
||||||
import { axiosClient } from "../axiosUtils";
|
import { axiosClient } from "../axiosUtils";
|
||||||
import { rateLimitAwareDelete } from "./canvasWebRequestor";
|
import { rateLimitAwareDelete } from "./canvasWebRequestor";
|
||||||
import { LocalCourseSettings } from "@/models/local/localCourseSettings";
|
import { LocalCourseSettings } from "@/features/local/course/localCourseSettings";
|
||||||
|
|
||||||
export const canvasPageService = {
|
export const canvasPageService = {
|
||||||
async getAll(courseId: number): Promise<CanvasPage[]> {
|
async getAll(courseId: number): Promise<CanvasPage[]> {
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ import { markdownToHTMLSafe } from "../htmlMarkdownUtils";
|
|||||||
import { getDateFromStringOrThrow } from "@/models/local/utils/timeUtils";
|
import { getDateFromStringOrThrow } from "@/models/local/utils/timeUtils";
|
||||||
import { canvasAssignmentService } from "./canvasAssignmentService";
|
import { canvasAssignmentService } from "./canvasAssignmentService";
|
||||||
import { CanvasQuizQuestion } from "@/models/canvas/quizzes/canvasQuizQuestionModel";
|
import { CanvasQuizQuestion } from "@/models/canvas/quizzes/canvasQuizQuestionModel";
|
||||||
import { LocalCourseSettings } from "@/models/local/localCourseSettings";
|
|
||||||
import { escapeMatchingText } from "../utils/questionHtmlUtils";
|
import { escapeMatchingText } from "../utils/questionHtmlUtils";
|
||||||
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
||||||
import { LocalQuizQuestion, QuestionType } from "@/features/local/quizzes/models/localQuizQuestion";
|
import { LocalQuizQuestion, QuestionType } from "@/features/local/quizzes/models/localQuizQuestion";
|
||||||
|
import { LocalCourseSettings } from "@/features/local/course/localCourseSettings";
|
||||||
|
|
||||||
export const getAnswers = (
|
export const getAnswers = (
|
||||||
question: LocalQuizQuestion,
|
question: LocalQuizQuestion,
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import { promises as fs } from "fs";
|
import { promises as fs } from "fs";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import { basePath, directoryOrFileExists } from "./utils/fileSystemUtils";
|
import { basePath, directoryOrFileExists } from "./utils/fileSystemUtils";
|
||||||
import { assignmentsFileStorageService } from "./assignmentsFileStorageService";
|
import { quizFileStorageService } from "../../features/local/quizzes/quizFileStorageService";
|
||||||
import { quizFileStorageService } from "./quizFileStorageService";
|
|
||||||
import { pageFileStorageService } from "../../features/local/pages/pageFileStorageService";
|
import { pageFileStorageService } from "../../features/local/pages/pageFileStorageService";
|
||||||
import { moduleFileStorageService } from "./moduleFileStorageService";
|
import { moduleFileStorageService } from "../../features/local/modules/moduleFileStorageService";
|
||||||
import { settingsFileStorageService } from "./settingsFileStorageService";
|
import { settingsFileStorageService } from "../../features/local/course/settingsFileStorageService";
|
||||||
import { getCoursePathByName } from "./globalSettingsFileStorageService";
|
import { getCoursePathByName } from "./globalSettingsFileStorageService";
|
||||||
|
import { assignmentsFileStorageService } from "@/features/local/assignments/assignmentsFileStorageService";
|
||||||
|
|
||||||
export const fileStorageService = {
|
export const fileStorageService = {
|
||||||
settings: settingsFileStorageService,
|
settings: settingsFileStorageService,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { getWeekNumber } from "@/app/course/[courseName]/calendar/calendarMonthUtils";
|
import { getWeekNumber } from "@/app/course/[courseName]/calendar/calendarMonthUtils";
|
||||||
import { extractLabelValue } from "@/features/local/assignments/models/utils/markdownUtils";
|
import { extractLabelValue } from "@/features/local/assignments/models/utils/markdownUtils";
|
||||||
import { Lecture } from "@/models/local/lecture";
|
import { Lecture } from "@/features/local/lectures/lectureModel";
|
||||||
import { getDateFromStringOrThrow } from "@/models/local/utils/timeUtils";
|
import { getDateFromStringOrThrow } from "@/models/local/utils/timeUtils";
|
||||||
|
|
||||||
export function parseLecture(fileContent: string): Lecture {
|
export function parseLecture(fileContent: string): Lecture {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { marked } from "marked";
|
import { marked } from "marked";
|
||||||
import DOMPurify from "isomorphic-dompurify";
|
import DOMPurify from "isomorphic-dompurify";
|
||||||
import { LocalCourseSettings } from "@/models/local/localCourseSettings";
|
|
||||||
import markedKatex from "marked-katex-extension";
|
import markedKatex from "marked-katex-extension";
|
||||||
|
import { LocalCourseSettings } from "@/features/local/course/localCourseSettings";
|
||||||
|
|
||||||
const mermaidExtension = {
|
const mermaidExtension = {
|
||||||
name: "mermaid",
|
name: "mermaid",
|
||||||
|
|||||||
@@ -4,11 +4,11 @@ import { assignmentRouter } from "../../../features/local/assignments/assignment
|
|||||||
import { canvasFileRouter } from "./canvasFileRouter";
|
import { canvasFileRouter } from "./canvasFileRouter";
|
||||||
import { directoriesRouter } from "./directoriesRouter";
|
import { directoriesRouter } from "./directoriesRouter";
|
||||||
import { globalSettingsRouter } from "./globalSettingsRouter";
|
import { globalSettingsRouter } from "./globalSettingsRouter";
|
||||||
import { lectureRouter } from "./lectureRouter";
|
import { lectureRouter } from "../../../features/local/lectures/lectureRouter";
|
||||||
import { moduleRouter } from "./moduleRouter";
|
|
||||||
import { pageRouter } from "../../../features/local/pages/pageRouter";
|
import { pageRouter } from "../../../features/local/pages/pageRouter";
|
||||||
import { quizRouter } from "./quizRouter";
|
import { quizRouter } from "../../../features/local/quizzes/quizRouter";
|
||||||
import { settingsRouter } from "./settingsRouter";
|
import { settingsRouter } from "./settingsRouter";
|
||||||
|
import { moduleRouter } from "@/features/local/modules/moduleRouter";
|
||||||
|
|
||||||
export const trpcAppRouter = router({
|
export const trpcAppRouter = router({
|
||||||
assignment: assignmentRouter,
|
assignment: assignmentRouter,
|
||||||
|
|||||||
@@ -2,11 +2,6 @@ import publicProcedure from "../procedures/public";
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { router } from "../trpcSetup";
|
import { router } from "../trpcSetup";
|
||||||
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
||||||
import { zodLocalCourseSettings } from "@/models/local/localCourseSettings";
|
|
||||||
import {
|
|
||||||
getLectures,
|
|
||||||
updateLecture,
|
|
||||||
} from "@/services/fileStorage/lectureFileStorageService";
|
|
||||||
import {
|
import {
|
||||||
prepAssignmentForNewSemester,
|
prepAssignmentForNewSemester,
|
||||||
prepLectureForNewSemester,
|
prepLectureForNewSemester,
|
||||||
@@ -17,6 +12,8 @@ import {
|
|||||||
getGlobalSettings,
|
getGlobalSettings,
|
||||||
updateGlobalSettings,
|
updateGlobalSettings,
|
||||||
} from "@/services/fileStorage/globalSettingsFileStorageService";
|
} from "@/services/fileStorage/globalSettingsFileStorageService";
|
||||||
|
import { getLectures, updateLecture } from "@/features/local/lectures/lectureFileStorageService";
|
||||||
|
import { zodLocalCourseSettings } from "@/features/local/course/localCourseSettings";
|
||||||
|
|
||||||
export const settingsRouter = router({
|
export const settingsRouter = router({
|
||||||
allCoursesSettings: publicProcedure.query(async () => {
|
allCoursesSettings: publicProcedure.query(async () => {
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
import { describe, it, expect, beforeEach } from "vitest";
|
import { describe, it, expect, beforeEach } from "vitest";
|
||||||
import { promises as fs } from "fs";
|
import { promises as fs } from "fs";
|
||||||
import {
|
|
||||||
DayOfWeek,
|
|
||||||
LocalCourseSettings,
|
|
||||||
} from "@/models/local/localCourseSettings";
|
|
||||||
import { fileStorageService } from "../fileStorage/fileStorageService";
|
import { fileStorageService } from "../fileStorage/fileStorageService";
|
||||||
|
import { LocalCourseSettings, DayOfWeek } from "@/features/local/course/localCourseSettings";
|
||||||
|
|
||||||
describe("FileStorageTests", () => {
|
describe("FileStorageTests", () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { describe, expect, it } from "vitest";
|
import { describe, expect, it } from "vitest";
|
||||||
import { lectureToString } from "../fileStorage/utils/lectureUtils";
|
import { lectureToString } from "../fileStorage/utils/lectureUtils";
|
||||||
import { parseLecture } from "../fileStorage/utils/lectureUtils";
|
import { parseLecture } from "../fileStorage/utils/lectureUtils";
|
||||||
import { Lecture } from "@/models/local/lecture";
|
import { Lecture } from "@/features/local/lectures/lectureModel";
|
||||||
|
|
||||||
describe("can parse and stringify lectures", () => {
|
describe("can parse and stringify lectures", () => {
|
||||||
it("can parse lecture", () => {
|
it("can parse lecture", () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user