mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-26 07:38:33 -06:00
consolodating types
This commit is contained in:
@@ -124,7 +124,11 @@ const hydrateModuleData = async (
|
||||
queryClient: QueryClient
|
||||
) => {
|
||||
await queryClient.prefetchQuery({
|
||||
queryKey: localCourseKeys.allAssignments(courseName, moduleName),
|
||||
queryKey: localCourseKeys.allItemsOfType(
|
||||
courseName,
|
||||
moduleName,
|
||||
"Assignment"
|
||||
),
|
||||
queryFn: () => assignments,
|
||||
});
|
||||
await queryClient.prefetchQuery({
|
||||
@@ -139,10 +143,11 @@ const hydrateModuleData = async (
|
||||
assignments.map(
|
||||
async (assignment) =>
|
||||
await queryClient.prefetchQuery({
|
||||
queryKey: localCourseKeys.assignment(
|
||||
queryKey: localCourseKeys.itemOfType(
|
||||
courseName,
|
||||
moduleName,
|
||||
assignment.name
|
||||
assignment.name,
|
||||
"Assignment"
|
||||
),
|
||||
queryFn: () => assignment,
|
||||
})
|
||||
|
||||
@@ -15,7 +15,7 @@ export const getAllAssignmentsQueryConfig = (
|
||||
courseName: string,
|
||||
moduleName: string
|
||||
) => ({
|
||||
queryKey: localCourseKeys.allAssignments(courseName, moduleName),
|
||||
queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, "Assignment"),
|
||||
queryFn: async (): Promise<LocalAssignment[]> => {
|
||||
const url =
|
||||
"/api/courses/" +
|
||||
@@ -39,10 +39,11 @@ export const getAssignmentQueryConfig = (
|
||||
assignmentName: string
|
||||
) => {
|
||||
return {
|
||||
queryKey: localCourseKeys.assignment(
|
||||
queryKey: localCourseKeys.itemOfType(
|
||||
courseName,
|
||||
moduleName,
|
||||
assignmentName
|
||||
assignmentName,
|
||||
"Assignment"
|
||||
),
|
||||
queryFn: async () => {
|
||||
const url =
|
||||
@@ -105,22 +106,29 @@ export const useUpdateAssignmentMutation = () => {
|
||||
previousModuleName !== moduleName
|
||||
) {
|
||||
queryClient.removeQueries({
|
||||
queryKey: localCourseKeys.assignment(
|
||||
queryKey: localCourseKeys.itemOfType(
|
||||
courseName,
|
||||
previousModuleName,
|
||||
previousAssignmentName
|
||||
previousAssignmentName,
|
||||
"Assignment"
|
||||
),
|
||||
});
|
||||
queryClient.removeQueries({
|
||||
queryKey: localCourseKeys.allAssignments(
|
||||
queryKey: localCourseKeys.allItemsOfType(
|
||||
courseName,
|
||||
previousModuleName
|
||||
previousModuleName,
|
||||
"Assignment"
|
||||
),
|
||||
});
|
||||
}
|
||||
|
||||
queryClient.setQueryData(
|
||||
localCourseKeys.assignment(courseName, moduleName, assignmentName),
|
||||
localCourseKeys.itemOfType(
|
||||
courseName,
|
||||
moduleName,
|
||||
assignmentName,
|
||||
"Assignment"
|
||||
),
|
||||
assignment
|
||||
);
|
||||
const url =
|
||||
@@ -138,13 +146,14 @@ export const useUpdateAssignmentMutation = () => {
|
||||
},
|
||||
onSuccess: async (_, { moduleName, assignmentName }) => {
|
||||
await queryClient.invalidateQueries({
|
||||
queryKey: localCourseKeys.allAssignments(courseName, moduleName),
|
||||
queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, "Assignment"),
|
||||
});
|
||||
await queryClient.invalidateQueries({
|
||||
queryKey: localCourseKeys.assignment(
|
||||
queryKey: localCourseKeys.itemOfType(
|
||||
courseName,
|
||||
moduleName,
|
||||
assignmentName
|
||||
assignmentName,
|
||||
"Assignment"
|
||||
),
|
||||
});
|
||||
},
|
||||
@@ -165,7 +174,12 @@ export const useCreateAssignmentMutation = () => {
|
||||
assignmentName: string;
|
||||
}) => {
|
||||
queryClient.setQueryData(
|
||||
localCourseKeys.assignment(courseName, moduleName, assignmentName),
|
||||
localCourseKeys.itemOfType(
|
||||
courseName,
|
||||
moduleName,
|
||||
assignmentName,
|
||||
"Assignment"
|
||||
),
|
||||
assignment
|
||||
);
|
||||
const url =
|
||||
@@ -179,13 +193,14 @@ export const useCreateAssignmentMutation = () => {
|
||||
},
|
||||
onSuccess: async (_, { moduleName, assignmentName }) => {
|
||||
await queryClient.invalidateQueries({
|
||||
queryKey: localCourseKeys.allAssignments(courseName, moduleName),
|
||||
queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, "Assignment"),
|
||||
});
|
||||
await queryClient.invalidateQueries({
|
||||
queryKey: localCourseKeys.assignment(
|
||||
queryKey: localCourseKeys.itemOfType(
|
||||
courseName,
|
||||
moduleName,
|
||||
assignmentName
|
||||
assignmentName,
|
||||
"Assignment"
|
||||
),
|
||||
});
|
||||
},
|
||||
@@ -204,14 +219,15 @@ export const useDeleteAssignmentMutation = () => {
|
||||
assignmentName: string;
|
||||
}) => {
|
||||
queryClient.removeQueries({
|
||||
queryKey: localCourseKeys.assignment(
|
||||
queryKey: localCourseKeys.itemOfType(
|
||||
courseName,
|
||||
moduleName,
|
||||
assignmentName
|
||||
assignmentName,
|
||||
"Assignment"
|
||||
),
|
||||
});
|
||||
queryClient.removeQueries({
|
||||
queryKey: localCourseKeys.allAssignments(courseName, moduleName),
|
||||
queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, "Assignment"),
|
||||
});
|
||||
const url =
|
||||
"/api/courses/" +
|
||||
@@ -224,7 +240,7 @@ export const useDeleteAssignmentMutation = () => {
|
||||
},
|
||||
onSuccess: async (_, { moduleName, assignmentName }) => {
|
||||
queryClient.invalidateQueries({
|
||||
queryKey: localCourseKeys.allAssignments(courseName, moduleName),
|
||||
queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, "Assignment"),
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { CourseItemType, typeToFolder } from "@/models/local/courseItemTypes";
|
||||
|
||||
export const localCourseKeys = {
|
||||
allCoursesSettings: ["all courses settings"] as const,
|
||||
allCoursesNames: ["all courses names"] as const,
|
||||
@@ -10,14 +12,32 @@ export const localCourseKeys = {
|
||||
"modules",
|
||||
{ type: "names" } as const,
|
||||
] as const,
|
||||
allAssignments: (courseName: string, moduleName: string) =>
|
||||
allItemsOfType: (
|
||||
courseName: string,
|
||||
moduleName: string,
|
||||
type: CourseItemType
|
||||
) =>
|
||||
[
|
||||
"course details",
|
||||
courseName,
|
||||
"modules",
|
||||
moduleName,
|
||||
"assignments",
|
||||
{ type: "all assignments" },
|
||||
typeToFolder[type],
|
||||
{ type: "all" },
|
||||
] as const,
|
||||
itemOfType: (
|
||||
courseName: string,
|
||||
moduleName: string,
|
||||
name: string,
|
||||
type: CourseItemType
|
||||
) =>
|
||||
[
|
||||
"course details",
|
||||
courseName,
|
||||
"modules",
|
||||
moduleName,
|
||||
typeToFolder[type],
|
||||
name,
|
||||
] as const,
|
||||
allQuizzes: (courseName: string, moduleName: string) =>
|
||||
[
|
||||
@@ -26,7 +46,7 @@ export const localCourseKeys = {
|
||||
"modules",
|
||||
moduleName,
|
||||
"quizzes",
|
||||
{ type: "all quizzes" },
|
||||
{ type: "all" },
|
||||
] as const,
|
||||
allPages: (courseName: string, moduleName: string) =>
|
||||
[
|
||||
@@ -35,20 +55,7 @@ export const localCourseKeys = {
|
||||
"modules",
|
||||
moduleName,
|
||||
"pages",
|
||||
{ type: "all pages" },
|
||||
] as const,
|
||||
assignment: (
|
||||
courseName: string,
|
||||
moduleName: string,
|
||||
assignmentName: string
|
||||
) =>
|
||||
[
|
||||
"course details",
|
||||
courseName,
|
||||
"modules",
|
||||
moduleName,
|
||||
"assignments",
|
||||
assignmentName,
|
||||
{ type: "all" },
|
||||
] as const,
|
||||
quiz: (courseName: string, moduleName: string, quizName: string) =>
|
||||
[
|
||||
|
||||
17
nextjs/src/models/local/courseItemTypes.ts
Normal file
17
nextjs/src/models/local/courseItemTypes.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import { LocalAssignment } from "./assignment/localAssignment";
|
||||
import { LocalCoursePage } from "./page/localCoursePage";
|
||||
import { LocalQuiz } from "./quiz/localQuiz";
|
||||
|
||||
export type CourseItemType = "Assignment" | "Quiz" | "Page";
|
||||
export type CourseItemReturnType<T extends CourseItemType> = T extends "Assignment"
|
||||
? LocalAssignment
|
||||
: T extends "Quiz"
|
||||
? LocalQuiz
|
||||
: LocalCoursePage;
|
||||
|
||||
|
||||
export const typeToFolder = {
|
||||
Assignment: "assignments",
|
||||
Quiz: "quizzes",
|
||||
Page: "pages",
|
||||
} as const;
|
||||
@@ -15,14 +15,11 @@ import {
|
||||
} from "@/models/local/page/localCoursePage";
|
||||
import { assignmentMarkdownSerializer } from "@/models/local/assignment/utils/assignmentMarkdownSerializer";
|
||||
import { quizMarkdownUtils } from "@/models/local/quiz/utils/quizMarkdownUtils";
|
||||
|
||||
const typeToFolder = {
|
||||
Assignment: "assignments",
|
||||
Quiz: "quizzes",
|
||||
Page: "pages",
|
||||
} as const;
|
||||
|
||||
export type CourseItemType = "Assignment" | "Quiz" | "Page";
|
||||
import {
|
||||
CourseItemReturnType,
|
||||
CourseItemType,
|
||||
typeToFolder,
|
||||
} from "@/models/local/courseItemTypes";
|
||||
|
||||
const getItemFileNames = async (
|
||||
courseName: string,
|
||||
@@ -41,11 +38,6 @@ const getItemFileNames = async (
|
||||
const itemFiles = await fs.readdir(filePath);
|
||||
return itemFiles.map((f) => f.replace(/\.md$/, ""));
|
||||
};
|
||||
type CourseItemReturnType<T extends CourseItemType> = T extends "Assignment"
|
||||
? LocalAssignment
|
||||
: T extends "Quiz"
|
||||
? LocalQuiz
|
||||
: LocalCoursePage;
|
||||
|
||||
const getItem = async <T extends CourseItemType>(
|
||||
courseName: string,
|
||||
@@ -129,7 +121,8 @@ export const courseItemFileStorageService = {
|
||||
const markdownDictionary: {
|
||||
[key in CourseItemType]: () => string;
|
||||
} = {
|
||||
Assignment: () => assignmentMarkdownSerializer.toMarkdown(item as LocalAssignment),
|
||||
Assignment: () =>
|
||||
assignmentMarkdownSerializer.toMarkdown(item as LocalAssignment),
|
||||
Quiz: () => quizMarkdownUtils.toMarkdown(item as LocalQuiz),
|
||||
Page: () => localPageMarkdownUtils.toMarkdown(item as LocalCoursePage),
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user