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