mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
refactoring canvas files
This commit is contained in:
@@ -6,14 +6,12 @@ import { StoragePathSelector } from "@/components/form/StoragePathSelector";
|
|||||||
import TextInput from "@/components/form/TextInput";
|
import TextInput from "@/components/form/TextInput";
|
||||||
import { Spinner } from "@/components/Spinner";
|
import { Spinner } from "@/components/Spinner";
|
||||||
import { SuspenseAndErrorHandling } from "@/components/SuspenseAndErrorHandling";
|
import { SuspenseAndErrorHandling } from "@/components/SuspenseAndErrorHandling";
|
||||||
import { useCourseListInTermQuery } from "@/hooks/canvas/canvasCourseHooks";
|
|
||||||
import { useCanvasTermsQuery } from "@/hooks/canvas/canvasHooks";
|
|
||||||
import {
|
import {
|
||||||
useCreateLocalCourseMutation,
|
useCreateLocalCourseMutation,
|
||||||
useLocalCoursesSettingsQuery,
|
useLocalCoursesSettingsQuery,
|
||||||
} from "@/features/local/course/localCoursesHooks";
|
} from "@/features/local/course/localCoursesHooks";
|
||||||
import { CanvasCourseModel } from "@/models/canvas/courses/canvasCourseModel";
|
import { CanvasCourseModel } from "@/features/canvas/models/courses/canvasCourseModel";
|
||||||
import { CanvasEnrollmentTermModel } from "@/models/canvas/enrollmentTerms/canvasEnrollmentTermModel";
|
import { CanvasEnrollmentTermModel } from "@/features/canvas/models/enrollmentTerms/canvasEnrollmentTermModel";
|
||||||
import { AssignmentSubmissionType } from "@/features/local/assignments/models/assignmentSubmissionType";
|
import { AssignmentSubmissionType } from "@/features/local/assignments/models/assignmentSubmissionType";
|
||||||
import { getCourseUrl } from "@/services/urlUtils";
|
import { getCourseUrl } from "@/services/urlUtils";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
@@ -22,6 +20,8 @@ import {
|
|||||||
DayOfWeek,
|
DayOfWeek,
|
||||||
LocalCourseSettings,
|
LocalCourseSettings,
|
||||||
} from "@/features/local/course/localCourseSettings";
|
} from "@/features/local/course/localCourseSettings";
|
||||||
|
import { useCourseListInTermQuery } from "@/features/canvas/hooks/canvasCourseHooks";
|
||||||
|
import { useCanvasTermsQuery } from "@/features/canvas/hooks/canvasHooks";
|
||||||
|
|
||||||
const sampleCompose = `services:
|
const sampleCompose = `services:
|
||||||
canvas_manager:
|
canvas_manager:
|
||||||
|
|||||||
@@ -1,22 +1,10 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { Spinner } from "@/components/Spinner";
|
import { Spinner } from "@/components/Spinner";
|
||||||
import {
|
import { useCanvasAssignmentsQuery, canvasAssignmentKeys } from "@/features/canvas/hooks/canvasAssignmentHooks";
|
||||||
canvasAssignmentKeys,
|
import { canvasCourseKeys } from "@/features/canvas/hooks/canvasCourseHooks";
|
||||||
useCanvasAssignmentsQuery,
|
import { useCanvasModulesQuery, canvasCourseModuleKeys } from "@/features/canvas/hooks/canvasModuleHooks";
|
||||||
} from "@/hooks/canvas/canvasAssignmentHooks";
|
import { useCanvasPagesQuery, canvasPageKeys } from "@/features/canvas/hooks/canvasPageHooks";
|
||||||
import { canvasCourseKeys } from "@/hooks/canvas/canvasCourseHooks";
|
import { useCanvasQuizzesQuery, canvasQuizKeys } from "@/features/canvas/hooks/canvasQuizHooks";
|
||||||
import {
|
|
||||||
canvasCourseModuleKeys,
|
|
||||||
useCanvasModulesQuery,
|
|
||||||
} from "@/hooks/canvas/canvasModuleHooks";
|
|
||||||
import {
|
|
||||||
canvasPageKeys,
|
|
||||||
useCanvasPagesQuery,
|
|
||||||
} from "@/hooks/canvas/canvasPageHooks";
|
|
||||||
import {
|
|
||||||
canvasQuizKeys,
|
|
||||||
useCanvasQuizzesQuery,
|
|
||||||
} from "@/hooks/canvas/canvasQuizHooks";
|
|
||||||
import { useLocalCourseSettingsQuery } from "@/features/local/course/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,7 +1,7 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { CanvasAssignment } from "@/models/canvas/assignments/canvasAssignment";
|
import { CanvasAssignment } from "@/features/canvas/models/assignments/canvasAssignment";
|
||||||
import { CanvasPage } from "@/models/canvas/pages/canvasPageModel";
|
import { CanvasPage } from "@/features/canvas/models/pages/canvasPageModel";
|
||||||
import { CanvasQuiz } from "@/models/canvas/quizzes/canvasQuizModel";
|
import { CanvasQuiz } from "@/features/canvas/models/quizzes/canvasQuizModel";
|
||||||
import { LocalAssignment } from "@/features/local/assignments/models/localAssignment";
|
import { LocalAssignment } from "@/features/local/assignments/models/localAssignment";
|
||||||
import {
|
import {
|
||||||
dateToMarkdownString,
|
dateToMarkdownString,
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { useCanvasAssignmentsQuery } from "@/hooks/canvas/canvasAssignmentHooks";
|
|
||||||
import { useCanvasPagesQuery } from "@/hooks/canvas/canvasPageHooks";
|
|
||||||
import { useCanvasQuizzesQuery } from "@/hooks/canvas/canvasQuizHooks";
|
|
||||||
import { LocalAssignment } from "@/features/local/assignments/models/localAssignment";
|
import { LocalAssignment } from "@/features/local/assignments/models/localAssignment";
|
||||||
import {
|
import {
|
||||||
getDateFromStringOrThrow,
|
getDateFromStringOrThrow,
|
||||||
@@ -13,6 +11,9 @@ import { getStatus } from "./getStatus";
|
|||||||
import { useLocalCourseSettingsQuery } from "@/features/local/course/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";
|
||||||
|
import { useCanvasAssignmentsQuery } from "@/features/canvas/hooks/canvasAssignmentHooks";
|
||||||
|
import { useCanvasPagesQuery } from "@/features/canvas/hooks/canvasPageHooks";
|
||||||
|
import { useCanvasQuizzesQuery } from "@/features/canvas/hooks/canvasQuizHooks";
|
||||||
|
|
||||||
export function useTodaysItems(day: string) {
|
export function useTodaysItems(day: string) {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const { data: settings } = useLocalCourseSettingsQuery();
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
import CheckIcon from "@/components/icons/CheckIcon";
|
import CheckIcon from "@/components/icons/CheckIcon";
|
||||||
import { Spinner } from "@/components/Spinner";
|
import { Spinner } from "@/components/Spinner";
|
||||||
import {
|
import {
|
||||||
useAddCanvasModuleMutation,
|
|
||||||
useCanvasModulesQuery,
|
useCanvasModulesQuery,
|
||||||
} from "@/hooks/canvas/canvasModuleHooks";
|
useAddCanvasModuleMutation,
|
||||||
|
} from "@/features/canvas/hooks/canvasModuleHooks";
|
||||||
|
|
||||||
export function ModuleCanvasStatus({ moduleName }: { moduleName: string }) {
|
export function ModuleCanvasStatus({ moduleName }: { moduleName: string }) {
|
||||||
const { data: canvasModules } = useCanvasModulesQuery();
|
const { data: canvasModules } = useCanvasModulesQuery();
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
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 {
|
import {
|
||||||
useCanvasAssignmentsQuery,
|
useCanvasAssignmentsQuery,
|
||||||
useAddAssignmentToCanvasMutation,
|
useAddAssignmentToCanvasMutation,
|
||||||
useDeleteAssignmentFromCanvasMutation,
|
useDeleteAssignmentFromCanvasMutation,
|
||||||
useUpdateAssignmentInCanvasMutation,
|
useUpdateAssignmentInCanvasMutation,
|
||||||
} from "@/hooks/canvas/canvasAssignmentHooks";
|
} from "@/features/canvas/hooks/canvasAssignmentHooks";
|
||||||
|
import { baseCanvasUrl } from "@/features/canvas/services/canvasServiceUtils";
|
||||||
|
import {
|
||||||
|
useAssignmentQuery,
|
||||||
|
useDeleteAssignmentMutation,
|
||||||
|
} from "@/features/local/assignments/assignmentHooks";
|
||||||
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
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";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
|
|||||||
@@ -4,15 +4,15 @@ import { Spinner } from "@/components/Spinner";
|
|||||||
import {
|
import {
|
||||||
useCanvasPagesQuery,
|
useCanvasPagesQuery,
|
||||||
useCreateCanvasPageMutation,
|
useCreateCanvasPageMutation,
|
||||||
useDeleteCanvasPageMutation,
|
|
||||||
useUpdateCanvasPageMutation,
|
useUpdateCanvasPageMutation,
|
||||||
} from "@/hooks/canvas/canvasPageHooks";
|
useDeleteCanvasPageMutation,
|
||||||
|
} from "@/features/canvas/hooks/canvasPageHooks";
|
||||||
|
import { baseCanvasUrl } from "@/features/canvas/services/canvasServiceUtils";
|
||||||
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import {
|
import {
|
||||||
useDeletePageMutation,
|
useDeletePageMutation,
|
||||||
usePageQuery,
|
usePageQuery,
|
||||||
} from "@/features/local/pages/pageHooks";
|
} from "@/features/local/pages/pageHooks";
|
||||||
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";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
|
|||||||
@@ -5,13 +5,13 @@ import {
|
|||||||
useCanvasQuizzesQuery,
|
useCanvasQuizzesQuery,
|
||||||
useAddQuizToCanvasMutation,
|
useAddQuizToCanvasMutation,
|
||||||
useDeleteQuizFromCanvasMutation,
|
useDeleteQuizFromCanvasMutation,
|
||||||
} from "@/hooks/canvas/canvasQuizHooks";
|
} from "@/features/canvas/hooks/canvasQuizHooks";
|
||||||
|
import { baseCanvasUrl } from "@/features/canvas/services/canvasServiceUtils";
|
||||||
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import {
|
import {
|
||||||
useDeleteQuizMutation,
|
useDeleteQuizMutation,
|
||||||
useQuizQuery,
|
useQuizQuery,
|
||||||
} from "@/features/local/quizzes/quizHooks";
|
} from "@/features/local/quizzes/quizHooks";
|
||||||
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";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
|
|||||||
@@ -7,11 +7,11 @@ import {
|
|||||||
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";
|
||||||
import { useSetAssignmentGroupsMutation } from "@/hooks/canvas/canvasCourseHooks";
|
|
||||||
import { settingsBox } from "./sharedSettings";
|
import { settingsBox } from "./sharedSettings";
|
||||||
import { Spinner } from "@/components/Spinner";
|
import { Spinner } from "@/components/Spinner";
|
||||||
import { baseCanvasUrl } from "@/services/canvas/canvasServiceUtils";
|
|
||||||
import MeatballIcon from "./MeatballIcon";
|
import MeatballIcon from "./MeatballIcon";
|
||||||
|
import { useSetAssignmentGroupsMutation } from "@/features/canvas/hooks/canvasCourseHooks";
|
||||||
|
import { baseCanvasUrl } from "@/features/canvas/services/canvasServiceUtils";
|
||||||
|
|
||||||
export default function AssignmentGroupManagement() {
|
export default function AssignmentGroupManagement() {
|
||||||
const { data: settings, isPending } = useLocalCourseSettingsQuery();
|
const { data: settings, isPending } = useLocalCourseSettingsQuery();
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
"use client";
|
"use client";
|
||||||
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import { settingsBox } from "./sharedSettings";
|
import { settingsBox } from "./sharedSettings";
|
||||||
import { useCourseStudentsQuery } from "@/hooks/canvas/canvasCourseHooks";
|
|
||||||
import { Spinner } from "@/components/Spinner";
|
import { Spinner } from "@/components/Spinner";
|
||||||
|
import { useCourseStudentsQuery } from "@/features/canvas/hooks/canvasCourseHooks";
|
||||||
|
|
||||||
export default function GithubClassroomList() {
|
export default function GithubClassroomList() {
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const { data: settings } = useLocalCourseSettingsQuery();
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
import { useCanvasTabsQuery } from "@/hooks/canvas/canvasNavigationHooks";
|
|
||||||
import { useUpdateCanvasTabMutation } from "@/hooks/canvas/canvasNavigationHooks";
|
|
||||||
import { Spinner } from "@/components/Spinner";
|
import { Spinner } from "@/components/Spinner";
|
||||||
import { NavTabListItem } from "./NavTabListItem";
|
import { NavTabListItem } from "./NavTabListItem";
|
||||||
|
import {
|
||||||
|
useCanvasTabsQuery,
|
||||||
|
useUpdateCanvasTabMutation,
|
||||||
|
} from "@/features/canvas/hooks/canvasNavigationHooks";
|
||||||
|
|
||||||
export const CanvasNavigationManagement = () => {
|
export const CanvasNavigationManagement = () => {
|
||||||
const { data: tabs, isLoading, isError } = useCanvasTabsQuery();
|
const { data: tabs, isLoading, isError } = useCanvasTabsQuery();
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Spinner } from "@/components/Spinner";
|
import { Spinner } from "@/components/Spinner";
|
||||||
import { useUpdateCanvasTabMutation } from "@/hooks/canvas/canvasNavigationHooks";
|
import { useUpdateCanvasTabMutation } from "@/features/canvas/hooks/canvasNavigationHooks";
|
||||||
import { CanvasCourseTab } from "@/services/canvas/canvasNavigationService";
|
import { CanvasCourseTab } from "@/features/canvas/services/canvasNavigationService";
|
||||||
import React, { FC } from "react";
|
import React, { FC } from "react";
|
||||||
|
|
||||||
export const NavTabListItem: FC<{
|
export const NavTabListItem: FC<{
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
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 "../../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 {
|
import {
|
||||||
useAddCanvasModuleMutation,
|
useAddCanvasModuleMutation,
|
||||||
useCanvasModulesQuery,
|
useCanvasModulesQuery,
|
||||||
} from "./canvasModuleHooks";
|
} from "./canvasModuleHooks";
|
||||||
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
|
import { canvasModuleService } from "../services/canvasModuleService";
|
||||||
|
import { canvasAssignmentService } from "../services/canvasAssignmentService";
|
||||||
|
|
||||||
export const canvasAssignmentKeys = {
|
export const canvasAssignmentKeys = {
|
||||||
assignments: (canvasCourseId: number) =>
|
assignments: (canvasCourseId: number) =>
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
import { CanvasAssignmentGroup } from "@/models/canvas/assignments/canvasAssignmentGroup";
|
import { CanvasAssignmentGroup } from "@/features/canvas/models/assignments/canvasAssignmentGroup";
|
||||||
import { CanvasCourseModel } from "@/models/canvas/courses/canvasCourseModel";
|
import { CanvasCourseModel } from "@/features/canvas/models/courses/canvasCourseModel";
|
||||||
import { LocalAssignmentGroup } from "@/features/local/assignments/models/localAssignmentGroup";
|
import { LocalAssignmentGroup } from "@/features/local/assignments/models/localAssignmentGroup";
|
||||||
import { canvasAssignmentGroupService } from "@/services/canvas/canvasAssignmentGroupService";
|
|
||||||
import { canvasService } from "@/services/canvas/canvasService";
|
|
||||||
import { useMutation, useQuery } from "@tanstack/react-query";
|
import { useMutation, useQuery } from "@tanstack/react-query";
|
||||||
import { useUpdateLocalCourseSettingsMutation } from "../../features/local/course/localCoursesHooks";
|
|
||||||
import { LocalCourseSettings } from "@/features/local/course/localCourseSettings";
|
import { LocalCourseSettings } from "@/features/local/course/localCourseSettings";
|
||||||
|
import { useUpdateLocalCourseSettingsMutation } from "@/features/local/course/localCoursesHooks";
|
||||||
|
import { canvasAssignmentGroupService } from "../services/canvasAssignmentGroupService";
|
||||||
|
import { canvasService } from "../services/canvasService";
|
||||||
|
|
||||||
export const canvasCourseKeys = {
|
export const canvasCourseKeys = {
|
||||||
courseDetails: (canavasId: number) =>
|
courseDetails: (canavasId: number) =>
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { canvasService } from "@/services/canvas/canvasService";
|
|
||||||
import { useSuspenseQuery } from "@tanstack/react-query";
|
import { useSuspenseQuery } from "@tanstack/react-query";
|
||||||
|
import { canvasService } from "../services/canvasService";
|
||||||
|
|
||||||
export const canvasKeys = {
|
export const canvasKeys = {
|
||||||
allTerms: ["all canvas terms"] as const,
|
allTerms: ["all canvas terms"] as const,
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { canvasModuleService } from "@/services/canvas/canvasModuleService";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
||||||
import { useLocalCourseSettingsQuery } from "../../features/local/course/localCoursesHooks";
|
import { canvasModuleService } from "../services/canvasModuleService";
|
||||||
|
|
||||||
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,6 +1,6 @@
|
|||||||
import { useQuery, useQueryClient, useMutation } from "@tanstack/react-query";
|
import { useQuery, useQueryClient, useMutation } from "@tanstack/react-query";
|
||||||
import { useLocalCourseSettingsQuery } from "../../features/local/course/localCoursesHooks";
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
import { canvasNavigationService } from "@/services/canvas/canvasNavigationService";
|
import { canvasNavigationService } from "../services/canvasNavigationService";
|
||||||
|
|
||||||
export const canvasCourseTabKeys = {
|
export const canvasCourseTabKeys = {
|
||||||
tabs: (canvasId: number) => ["canvas", canvasId, "tabs list"] as const,
|
tabs: (canvasId: number) => ["canvas", canvasId, "tabs list"] as const,
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
||||||
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 "../../features/local/course/localCoursesHooks";
|
|
||||||
import { canvasModuleService } from "@/services/canvas/canvasModuleService";
|
|
||||||
import {
|
import {
|
||||||
useCanvasModulesQuery,
|
useCanvasModulesQuery,
|
||||||
useAddCanvasModuleMutation,
|
useAddCanvasModuleMutation,
|
||||||
} from "./canvasModuleHooks";
|
} from "./canvasModuleHooks";
|
||||||
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
|
import { canvasModuleService } from "../services/canvasModuleService";
|
||||||
|
import { canvasPageService } from "../services/canvasPageService";
|
||||||
|
|
||||||
export const canvasPageKeys = {
|
export const canvasPageKeys = {
|
||||||
pagesInCourse: (courseCanvasId: number) => [
|
pagesInCourse: (courseCanvasId: number) => [
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
||||||
import { useLocalCourseSettingsQuery } from "../../features/local/course/localCoursesHooks";
|
|
||||||
import { canvasQuizService } from "@/services/canvas/canvasQuizService";
|
|
||||||
import {
|
import {
|
||||||
useAddCanvasModuleMutation,
|
useAddCanvasModuleMutation,
|
||||||
useCanvasModulesQuery,
|
useCanvasModulesQuery,
|
||||||
} from "./canvasModuleHooks";
|
} from "./canvasModuleHooks";
|
||||||
import { canvasModuleService } from "@/services/canvas/canvasModuleService";
|
|
||||||
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
||||||
|
import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks";
|
||||||
|
import { canvasModuleService } from "../services/canvasModuleService";
|
||||||
|
import { canvasQuizService } from "../services/canvasQuizService";
|
||||||
|
|
||||||
export const canvasQuizKeys = {
|
export const canvasQuizKeys = {
|
||||||
quizzes: (canvasCourseId: number) =>
|
quizzes: (canvasCourseId: number) =>
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import { canvasApi, paginatedRequest } from "./canvasServiceUtils";
|
import { canvasApi, paginatedRequest } from "./canvasServiceUtils";
|
||||||
import { axiosClient } from "../axiosUtils";
|
import { CanvasAssignmentGroup } from "@/features/canvas/models/assignments/canvasAssignmentGroup";
|
||||||
import { CanvasAssignmentGroup } from "@/models/canvas/assignments/canvasAssignmentGroup";
|
|
||||||
import { LocalAssignmentGroup } from "@/features/local/assignments/models/localAssignmentGroup";
|
import { LocalAssignmentGroup } from "@/features/local/assignments/models/localAssignmentGroup";
|
||||||
import { rateLimitAwareDelete } from "./canvasWebRequestor";
|
import { rateLimitAwareDelete } from "./canvasWebRequestor";
|
||||||
|
import { axiosClient } from "@/services/axiosUtils";
|
||||||
|
|
||||||
export const canvasAssignmentGroupService = {
|
export const canvasAssignmentGroupService = {
|
||||||
async getAll(courseId: number): Promise<CanvasAssignmentGroup[]> {
|
async getAll(courseId: number): Promise<CanvasAssignmentGroup[]> {
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
import { CanvasAssignment } from "@/models/canvas/assignments/canvasAssignment";
|
import { CanvasAssignment } from "@/features/canvas/models/assignments/canvasAssignment";
|
||||||
import { canvasApi, paginatedRequest } from "./canvasServiceUtils";
|
import { canvasApi, paginatedRequest } from "./canvasServiceUtils";
|
||||||
import { LocalAssignment } from "@/features/local/assignments/models/localAssignment";
|
import { LocalAssignment } from "@/features/local/assignments/models/localAssignment";
|
||||||
import { axiosClient } from "../axiosUtils";
|
import { CanvasRubricCreationResponse } from "@/features/canvas/models/assignments/canvasRubricCreationResponse";
|
||||||
import { markdownToHTMLSafe } from "../htmlMarkdownUtils";
|
|
||||||
import { CanvasRubricCreationResponse } from "@/models/canvas/assignments/canvasRubricCreationResponse";
|
|
||||||
import { assignmentPoints } from "@/features/local/assignments/models/utils/assignmentPointsUtils";
|
import { assignmentPoints } from "@/features/local/assignments/models/utils/assignmentPointsUtils";
|
||||||
import { getDateFromString } from "@/features/local/utils/timeUtils";
|
import { getDateFromString } from "@/features/local/utils/timeUtils";
|
||||||
import { getRubricCriterion } from "./canvasRubricUtils";
|
import { getRubricCriterion } from "./canvasRubricUtils";
|
||||||
import { LocalCourseSettings } from "@/features/local/course/localCourseSettings";
|
import { LocalCourseSettings } from "@/features/local/course/localCourseSettings";
|
||||||
|
import { axiosClient } from "@/services/axiosUtils";
|
||||||
|
import { markdownToHTMLSafe } from "@/services/htmlMarkdownUtils";
|
||||||
|
|
||||||
export const canvasAssignmentService = {
|
export const canvasAssignmentService = {
|
||||||
async getAll(courseId: number): Promise<CanvasAssignment[]> {
|
async getAll(courseId: number): Promise<CanvasAssignment[]> {
|
||||||
@@ -1,12 +1,7 @@
|
|||||||
|
import publicProcedure from "@/services/serverFunctions/publicProcedure";
|
||||||
|
import { router } from "@/services/serverFunctions/trpcSetup";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import {
|
import { downloadUrlToTempDirectory, uploadToCanvasPart1, uploadToCanvasPart2 } from "./files/canvasFileService";
|
||||||
downloadUrlToTempDirectory,
|
|
||||||
uploadToCanvasPart1,
|
|
||||||
uploadToCanvasPart2,
|
|
||||||
} from "@/services/canvas/files/canvasFileService";
|
|
||||||
import { router } from "../serverFunctions/trpcSetup";
|
|
||||||
import publicProcedure from "../serverFunctions/publicProcedure";
|
|
||||||
|
|
||||||
const fileStorageLocation = process.env.FILE_STORAGE_LOCATION ?? "/app/public";
|
const fileStorageLocation = process.env.FILE_STORAGE_LOCATION ?? "/app/public";
|
||||||
|
|
||||||
export const canvasFileRouter = router({
|
export const canvasFileRouter = router({
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import { CanvasModuleItem } from "@/models/canvas/modules/canvasModuleItems";
|
import { CanvasModuleItem } from "@/features/canvas/models/modules/canvasModuleItems";
|
||||||
import { CanvasPage } from "@/models/canvas/pages/canvasPageModel";
|
import { CanvasPage } from "@/features/canvas/models/pages/canvasPageModel";
|
||||||
import { axiosClient } from "../axiosUtils";
|
|
||||||
import { canvasApi, paginatedRequest } from "./canvasServiceUtils";
|
import { canvasApi, paginatedRequest } from "./canvasServiceUtils";
|
||||||
import { CanvasModule } from "@/models/canvas/modules/canvasModule";
|
import { CanvasModule } from "@/features/canvas/models/modules/canvasModule";
|
||||||
|
import { axiosClient } from "@/services/axiosUtils";
|
||||||
|
|
||||||
export const canvasModuleService = {
|
export const canvasModuleService = {
|
||||||
async updateModuleItem(
|
async updateModuleItem(
|
||||||
@@ -63,5 +63,4 @@ export const canvasModuleService = {
|
|||||||
const response = await axiosClient.post<CanvasModule>(url, body);
|
const response = await axiosClient.post<CanvasModule>(url, body);
|
||||||
return response.data.id;
|
return response.data.id;
|
||||||
},
|
},
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { axiosClient } from "../axiosUtils";
|
import { axiosClient } from "@/services/axiosUtils";
|
||||||
import { canvasApi } from "./canvasServiceUtils";
|
import { canvasApi } from "./canvasServiceUtils";
|
||||||
|
|
||||||
export interface CanvasCourseTab {
|
export interface CanvasCourseTab {
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
import { CanvasPage } from "@/models/canvas/pages/canvasPageModel";
|
import { CanvasPage } from "@/features/canvas/models/pages/canvasPageModel";
|
||||||
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
import { LocalCoursePage } from "@/features/local/pages/localCoursePageModels";
|
||||||
import { canvasApi, paginatedRequest } from "./canvasServiceUtils";
|
import { canvasApi, paginatedRequest } from "./canvasServiceUtils";
|
||||||
import { markdownToHTMLSafe } from "../htmlMarkdownUtils";
|
|
||||||
import { axiosClient } from "../axiosUtils";
|
|
||||||
import { rateLimitAwareDelete } from "./canvasWebRequestor";
|
import { rateLimitAwareDelete } from "./canvasWebRequestor";
|
||||||
import { LocalCourseSettings } from "@/features/local/course/localCourseSettings";
|
import { LocalCourseSettings } from "@/features/local/course/localCourseSettings";
|
||||||
|
import { axiosClient } from "@/services/axiosUtils";
|
||||||
|
import { markdownToHTMLSafe } from "@/services/htmlMarkdownUtils";
|
||||||
|
|
||||||
export const canvasPageService = {
|
export const canvasPageService = {
|
||||||
async getAll(courseId: number): Promise<CanvasPage[]> {
|
async getAll(courseId: number): Promise<CanvasPage[]> {
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
import { CanvasQuiz } from "@/models/canvas/quizzes/canvasQuizModel";
|
import { CanvasQuiz } from "@/features/canvas/models/quizzes/canvasQuizModel";
|
||||||
import { axiosClient } from "../axiosUtils";
|
|
||||||
import { canvasApi, paginatedRequest } from "./canvasServiceUtils";
|
import { canvasApi, paginatedRequest } from "./canvasServiceUtils";
|
||||||
import { markdownToHTMLSafe } from "../htmlMarkdownUtils";
|
|
||||||
import { getDateFromStringOrThrow } from "@/features/local/utils/timeUtils";
|
import { getDateFromStringOrThrow } from "@/features/local/utils/timeUtils";
|
||||||
import { canvasAssignmentService } from "./canvasAssignmentService";
|
import { canvasAssignmentService } from "./canvasAssignmentService";
|
||||||
import { CanvasQuizQuestion } from "@/models/canvas/quizzes/canvasQuizQuestionModel";
|
import { CanvasQuizQuestion } from "@/features/canvas/models/quizzes/canvasQuizQuestionModel";
|
||||||
import { escapeMatchingText } from "../utils/questionHtmlUtils";
|
|
||||||
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
import { LocalQuiz } from "@/features/local/quizzes/models/localQuiz";
|
||||||
import {
|
import {
|
||||||
LocalQuizQuestion,
|
LocalQuizQuestion,
|
||||||
QuestionType,
|
QuestionType,
|
||||||
} from "@/features/local/quizzes/models/localQuizQuestion";
|
} from "@/features/local/quizzes/models/localQuizQuestion";
|
||||||
import { LocalCourseSettings } from "@/features/local/course/localCourseSettings";
|
import { LocalCourseSettings } from "@/features/local/course/localCourseSettings";
|
||||||
|
import { axiosClient } from "@/services/axiosUtils";
|
||||||
|
import { markdownToHTMLSafe } from "@/services/htmlMarkdownUtils";
|
||||||
|
import { escapeMatchingText } from "@/services/utils/questionHtmlUtils";
|
||||||
|
|
||||||
export const getAnswers = (
|
export const getAnswers = (
|
||||||
question: LocalQuizQuestion,
|
question: LocalQuizQuestion,
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import { CanvasEnrollmentTermModel } from "@/models/canvas/enrollmentTerms/canvasEnrollmentTermModel";
|
import { CanvasEnrollmentTermModel } from "@/features/canvas/models/enrollmentTerms/canvasEnrollmentTermModel";
|
||||||
import { canvasApi, paginatedRequest } from "./canvasServiceUtils";
|
import { canvasApi, paginatedRequest } from "./canvasServiceUtils";
|
||||||
import { CanvasCourseModel } from "@/models/canvas/courses/canvasCourseModel";
|
import { CanvasCourseModel } from "@/features/canvas/models/courses/canvasCourseModel";
|
||||||
import { axiosClient } from "../axiosUtils";
|
import { CanvasCourseStudentModel } from "@/features/canvas/models/courses/canvasCourseStudentModel";
|
||||||
import { CanvasCourseStudentModel } from "@/models/canvas/courses/canvasCourseStudentModel";
|
import { axiosClient } from "@/services/axiosUtils";
|
||||||
|
|
||||||
const getAllTerms = async () => {
|
const getAllTerms = async () => {
|
||||||
const url = `${canvasApi}/accounts/10/terms?per_page=100`;
|
const url = `${canvasApi}/accounts/10/terms?per_page=100`;
|
||||||
@@ -55,7 +55,7 @@ export const canvasService = {
|
|||||||
async getEnrolledStudents(canvasCourseId: number) {
|
async getEnrolledStudents(canvasCourseId: number) {
|
||||||
console.log(`Getting students for course ${canvasCourseId}`);
|
console.log(`Getting students for course ${canvasCourseId}`);
|
||||||
const url = `${canvasApi}/courses/${canvasCourseId}/users?enrollment_type=student`;
|
const url = `${canvasApi}/courses/${canvasCourseId}/users?enrollment_type=student`;
|
||||||
const data = await paginatedRequest<CanvasCourseStudentModel[]>({url});
|
const data = await paginatedRequest<CanvasCourseStudentModel[]>({ url });
|
||||||
|
|
||||||
if (!data)
|
if (!data)
|
||||||
throw new Error(
|
throw new Error(
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
// services/canvasServiceUtils.ts
|
// services/canvasServiceUtils.ts
|
||||||
|
|
||||||
|
import { axiosClient } from "@/services/axiosUtils";
|
||||||
import { AxiosResponseHeaders, RawAxiosResponseHeaders } from "axios";
|
import { AxiosResponseHeaders, RawAxiosResponseHeaders } from "axios";
|
||||||
import { axiosClient } from "../axiosUtils";
|
|
||||||
|
|
||||||
export const baseCanvasUrl = "https://snow.instructure.com";
|
export const baseCanvasUrl = "https://snow.instructure.com";
|
||||||
export const canvasApi = baseCanvasUrl + "/api/v1";
|
export const canvasApi = baseCanvasUrl + "/api/v1";
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
|
import { axiosClient } from "@/services/axiosUtils";
|
||||||
import { AxiosResponse } from "axios";
|
import { AxiosResponse } from "axios";
|
||||||
import { axiosClient } from "../axiosUtils";
|
|
||||||
|
|
||||||
const rateLimitRetryCount = 6;
|
const rateLimitRetryCount = 6;
|
||||||
const rateLimitSleepInterval = 1000;
|
const rateLimitSleepInterval = 1000;
|
||||||
@@ -1,10 +1,11 @@
|
|||||||
import { QuestionType, zodQuestionType } from "@/features/local/quizzes/models/localQuizQuestion";
|
import { getQuestionType, getAnswers } from "@/features/canvas/services/canvasQuizService";
|
||||||
|
import {
|
||||||
|
QuestionType,
|
||||||
|
zodQuestionType,
|
||||||
|
} from "@/features/local/quizzes/models/localQuizQuestion";
|
||||||
import { quizMarkdownUtils } from "@/features/local/quizzes/models/utils/quizMarkdownUtils";
|
import { quizMarkdownUtils } from "@/features/local/quizzes/models/utils/quizMarkdownUtils";
|
||||||
import { quizQuestionMarkdownUtils } from "@/features/local/quizzes/models/utils/quizQuestionMarkdownUtils";
|
import { quizQuestionMarkdownUtils } from "@/features/local/quizzes/models/utils/quizQuestionMarkdownUtils";
|
||||||
import {
|
|
||||||
getAnswers,
|
|
||||||
getQuestionType,
|
|
||||||
} from "@/services/canvas/canvasQuizService";
|
|
||||||
import { describe, it, expect } from "vitest";
|
import { describe, it, expect } from "vitest";
|
||||||
|
|
||||||
describe("TextAnswerTests", () => {
|
describe("TextAnswerTests", () => {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
import { baseCanvasUrl } from "@/features/canvas/services/canvasServiceUtils";
|
||||||
import { isServer } from "@tanstack/react-query";
|
import { isServer } from "@tanstack/react-query";
|
||||||
import axios, { AxiosInstance, AxiosError } from "axios";
|
import axios, { AxiosInstance, AxiosError } from "axios";
|
||||||
import toast from "react-hot-toast";
|
import toast from "react-hot-toast";
|
||||||
import { baseCanvasUrl } from "./canvas/canvasServiceUtils";
|
|
||||||
|
|
||||||
const canvasBaseUrl = "https://snow.instructure.com/api/v1/";
|
const canvasBaseUrl = "https://snow.instructure.com/api/v1/";
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import { pageRouter } from "../../features/local/pages/pageRouter";
|
|||||||
import { quizRouter } from "../../features/local/quizzes/quizRouter";
|
import { quizRouter } from "../../features/local/quizzes/quizRouter";
|
||||||
import { settingsRouter } from "../../features/local/course/settingsRouter";
|
import { settingsRouter } from "../../features/local/course/settingsRouter";
|
||||||
import { moduleRouter } from "@/features/local/modules/moduleRouter";
|
import { moduleRouter } from "@/features/local/modules/moduleRouter";
|
||||||
import { canvasFileRouter } from "../canvas/canvasFileRouter";
|
import { canvasFileRouter } from "@/features/canvas/services/canvasFileRouter";
|
||||||
|
|
||||||
export const trpcAppRouter = router({
|
export const trpcAppRouter = router({
|
||||||
assignment: assignmentRouter,
|
assignment: assignmentRouter,
|
||||||
|
|||||||
Reference in New Issue
Block a user