linting more trpc

This commit is contained in:
2024-11-11 13:20:08 -07:00
parent cc8d004aa4
commit 61359a5e7d
36 changed files with 1076 additions and 662 deletions

View File

@@ -1,13 +1,5 @@
"use client";
import { trpc } from "@/services/trpc/utils";
import {
getAllItemsQueryConfig,
getItemQueryConfig,
useDeleteItemMutation,
useItemQuery,
useItemsQueries,
useUpdateItemMutation,
} from "./courseItemHooks";
import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
// export const getAllAssignmentsQueryConfig = (
@@ -36,31 +28,31 @@ export const useAssignmentQuery = (
export const useAssignmentsQuery = (moduleName: string) => {
const { courseName } = useCourseContext();
console.log("rendering all assignments query");
return trpc.assignment.getAllAssignments.useQuery({
return trpc.assignment.getAllAssignments.useSuspenseQuery({
moduleName,
courseName,
});
};
// useItemsQueries(moduleName, "Assignment");
export const useUpdateAssignmentMutation = () =>
useUpdateItemMutation("Assignment");
export const useUpdateAssignmentMutation = () => {
return trpc.assignment.updateAssignment.useMutation();
};
export const useCreateAssignmentMutation = ({
courseName,
moduleName,
}: {
courseName: string;
moduleName: string;
}) => {
export const useCreateAssignmentMutation = () => {
const utils = trpc.useUtils();
return trpc.assignment.createAssignment.useMutation({
onSuccess: () => {
onSuccess: (_, { courseName, moduleName }) => {
utils.assignment.getAllAssignments.invalidate({ courseName, moduleName });
},
});
};
// useCreateItemMutation("Assignment");
export const useDeleteAssignmentMutation = () =>
useDeleteItemMutation("Assignment");
export const useDeleteAssignmentMutation = () => {
const utils = trpc.useUtils();
return trpc.assignment.deleteAssignment.useMutation({
onSuccess: (_, { courseName, moduleName }) => {
utils.assignment.getAllAssignments.invalidate({ courseName, moduleName });
},
});
};

View File

@@ -1,233 +1,233 @@
import { localCourseKeys } from "./localCourseKeys";
import {
CourseItemReturnType,
CourseItemType,
} from "@/models/local/courseItemTypes";
import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
import {
useMutation,
useQueryClient,
useSuspenseQueries,
useSuspenseQuery,
} from "@tanstack/react-query";
import {
createItemOnServer,
deleteItemOnServer,
getAllItemsFromServer,
getItemFromServer,
updateItemOnServer,
} from "./courseItemServerActions";
// import { localCourseKeys } from "./localCourseKeys";
// import {
// CourseItemReturnType,
// CourseItemType,
// } from "@/models/local/courseItemTypes";
// import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
// import {
// useMutation,
// useQueryClient,
// useSuspenseQueries,
// useSuspenseQuery,
// } from "@tanstack/react-query";
// // import {
// // createItemOnServer,
// // deleteItemOnServer,
// // getAllItemsFromServer,
// // getItemFromServer,
// // updateItemOnServer,
// // } from "./courseItemServerActions";
export const getAllItemsQueryConfig = <T extends CourseItemType>(
courseName: string,
moduleName: string,
type: T
) => ({
queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, type),
queryFn: async (): Promise<CourseItemReturnType<T>[]> => {
return await getAllItemsFromServer({
courseName,
moduleName,
type,
});
},
});
// export const getAllItemsQueryConfig = <T extends CourseItemType>(
// courseName: string,
// moduleName: string,
// type: T
// ) => ({
// queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, type),
// queryFn: async (): Promise<CourseItemReturnType<T>[]> => {
// return await getAllItemsFromServer({
// courseName,
// moduleName,
// type,
// });
// },
// });
export const getItemQueryConfig = <T extends CourseItemType>(
courseName: string,
moduleName: string,
name: string,
type: T
) => {
return {
queryKey: localCourseKeys.itemOfType(courseName, moduleName, name, type),
queryFn: async () => {
return await getItemFromServer({
moduleName,
courseName,
itemName: name,
type,
});
},
};
};
// export const getItemQueryConfig = <T extends CourseItemType>(
// courseName: string,
// moduleName: string,
// name: string,
// type: T
// ) => {
// return {
// queryKey: localCourseKeys.itemOfType(courseName, moduleName, name, type),
// queryFn: async () => {
// return await getItemFromServer({
// moduleName,
// courseName,
// itemName: name,
// type,
// });
// },
// };
// };
export const useItemQuery = <T extends CourseItemType>(
moduleName: string,
name: string,
type: T
) => {
const { courseName } = useCourseContext();
return useSuspenseQuery(
getItemQueryConfig(courseName, moduleName, name, type)
);
};
// export const useItemQuery = <T extends CourseItemType>(
// moduleName: string,
// name: string,
// type: T
// ) => {
// const { courseName } = useCourseContext();
// return useSuspenseQuery(
// getItemQueryConfig(courseName, moduleName, name, type)
// );
// };
const useAllItemsQuery = <T extends CourseItemType>(
moduleName: string,
type: T
) => {
const { courseName } = useCourseContext();
return useSuspenseQuery(getAllItemsQueryConfig(courseName, moduleName, type));
};
// const useAllItemsQuery = <T extends CourseItemType>(
// moduleName: string,
// type: T
// ) => {
// const { courseName } = useCourseContext();
// return useSuspenseQuery(getAllItemsQueryConfig(courseName, moduleName, type));
// };
export const useItemsQueries = <T extends CourseItemType>(
moduleName: string,
type: T
) => {
const { data: allItems } = useAllItemsQuery(moduleName, type);
const { courseName } = useCourseContext();
return useSuspenseQueries({
queries: allItems.map((item) => ({
...getItemQueryConfig(courseName, moduleName, item.name, type),
})),
combine: (results) => ({
data: results.map((r) => r.data),
pending: results.some((r) => r.isPending),
}),
});
};
// export const useItemsQueries = <T extends CourseItemType>(
// moduleName: string,
// type: T
// ) => {
// const { data: allItems } = useAllItemsQuery(moduleName, type);
// const { courseName } = useCourseContext();
// return useSuspenseQueries({
// queries: allItems.map((item) => ({
// ...getItemQueryConfig(courseName, moduleName, item.name, type),
// })),
// combine: (results) => ({
// data: results.map((r) => r.data),
// pending: results.some((r) => r.isPending),
// }),
// });
// };
export const useUpdateItemMutation = <T extends CourseItemType>(type: T) => {
const { courseName } = useCourseContext();
const queryClient = useQueryClient();
return useMutation({
mutationFn: async ({
item,
moduleName,
previousModuleName,
previousItemName,
itemName,
}: {
item: CourseItemReturnType<T>;
moduleName: string;
previousModuleName: string;
previousItemName: string;
itemName: string;
}) => {
if (previousItemName !== item.name || previousModuleName !== moduleName) {
queryClient.removeQueries({
queryKey: localCourseKeys.itemOfType(
courseName,
previousModuleName,
previousItemName,
type
),
});
queryClient.removeQueries({
queryKey: localCourseKeys.allItemsOfType(
courseName,
previousModuleName,
type
),
});
}
// export const useUpdateItemMutation = <T extends CourseItemType>(type: T) => {
// const { courseName } = useCourseContext();
// const queryClient = useQueryClient();
// return useMutation({
// mutationFn: async ({
// item,
// moduleName,
// previousModuleName,
// previousItemName,
// itemName,
// }: {
// item: CourseItemReturnType<T>;
// moduleName: string;
// previousModuleName: string;
// previousItemName: string;
// itemName: string;
// }) => {
// if (previousItemName !== item.name || previousModuleName !== moduleName) {
// queryClient.removeQueries({
// queryKey: localCourseKeys.itemOfType(
// courseName,
// previousModuleName,
// previousItemName,
// type
// ),
// });
// queryClient.removeQueries({
// queryKey: localCourseKeys.allItemsOfType(
// courseName,
// previousModuleName,
// type
// ),
// });
// }
queryClient.setQueryData(
localCourseKeys.itemOfType(courseName, moduleName, itemName, type),
item
);
await updateItemOnServer({
courseName,
moduleName,
item,
type,
previousItemName,
previousModuleName,
itemName,
});
},
onSuccess: async (_, { moduleName, itemName }) => {
await queryClient.invalidateQueries({
queryKey: localCourseKeys.itemOfType(
courseName,
moduleName,
itemName,
type
),
refetchType: "all",
});
await queryClient.invalidateQueries({
queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, type),
refetchType: "all",
});
},
});
};
// queryClient.setQueryData(
// localCourseKeys.itemOfType(courseName, moduleName, itemName, type),
// item
// );
// await updateItemOnServer({
// courseName,
// moduleName,
// item,
// type,
// previousItemName,
// previousModuleName,
// itemName,
// });
// },
// onSuccess: async (_, { moduleName, itemName }) => {
// await queryClient.invalidateQueries({
// queryKey: localCourseKeys.itemOfType(
// courseName,
// moduleName,
// itemName,
// type
// ),
// refetchType: "all",
// });
// await queryClient.invalidateQueries({
// queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, type),
// refetchType: "all",
// });
// },
// });
// };
export const useCreateItemMutation = <T extends CourseItemType>(type: T) => {
const { courseName } = useCourseContext();
const queryClient = useQueryClient();
return useMutation({
mutationFn: async ({
item,
moduleName,
itemName,
}: {
item: CourseItemReturnType<T>;
moduleName: string;
itemName: string;
}) => {
queryClient.setQueryData(
localCourseKeys.itemOfType(courseName, moduleName, itemName, type),
item
);
await createItemOnServer({
courseName,
moduleName,
item,
type,
itemName,
});
},
onSuccess: async (_, { moduleName, itemName }) => {
await queryClient.invalidateQueries({
queryKey: localCourseKeys.itemOfType(
courseName,
moduleName,
itemName,
type
),
});
await queryClient.invalidateQueries({
queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, type),
});
},
});
};
// export const useCreateItemMutation = <T extends CourseItemType>(type: T) => {
// const { courseName } = useCourseContext();
// const queryClient = useQueryClient();
// return useMutation({
// mutationFn: async ({
// item,
// moduleName,
// itemName,
// }: {
// item: CourseItemReturnType<T>;
// moduleName: string;
// itemName: string;
// }) => {
// queryClient.setQueryData(
// localCourseKeys.itemOfType(courseName, moduleName, itemName, type),
// item
// );
// await createItemOnServer({
// courseName,
// moduleName,
// item,
// type,
// itemName,
// });
// },
// onSuccess: async (_, { moduleName, itemName }) => {
// await queryClient.invalidateQueries({
// queryKey: localCourseKeys.itemOfType(
// courseName,
// moduleName,
// itemName,
// type
// ),
// });
// await queryClient.invalidateQueries({
// queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, type),
// });
// },
// });
// };
export const useDeleteItemMutation = <T extends CourseItemType>(type: T) => {
const { courseName } = useCourseContext();
const queryClient = useQueryClient();
return useMutation({
mutationFn: async ({
moduleName,
itemName,
}: {
moduleName: string;
itemName: string;
}) => {
await deleteItemOnServer({
courseName,
itemName,
moduleName,
type,
});
},
onSuccess: async (_, { moduleName, itemName }) => {
await queryClient.invalidateQueries({
queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, type),
// refetchType: "all",
});
await queryClient.invalidateQueries({
queryKey: localCourseKeys.itemOfType(
courseName,
moduleName,
itemName,
type
),
refetchType: "none",
});
},
});
};
// export const useDeleteItemMutation = <T extends CourseItemType>(type: T) => {
// const { courseName } = useCourseContext();
// const queryClient = useQueryClient();
// return useMutation({
// mutationFn: async ({
// moduleName,
// itemName,
// }: {
// moduleName: string;
// itemName: string;
// }) => {
// await deleteItemOnServer({
// courseName,
// itemName,
// moduleName,
// type,
// });
// },
// onSuccess: async (_, { moduleName, itemName }) => {
// await queryClient.invalidateQueries({
// queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, type),
// // refetchType: "all",
// });
// await queryClient.invalidateQueries({
// queryKey: localCourseKeys.itemOfType(
// courseName,
// moduleName,
// itemName,
// type
// ),
// refetchType: "none",
// });
// },
// });
// };

View File

@@ -1,237 +1,237 @@
"use server";
// "use server";
import { ItemInDay } from "@/app/course/[courseName]/calendar/day/ItemInDay";
import { LocalAssignment } from "@/models/local/assignment/localAssignment";
import {
CourseItemReturnType,
CourseItemType,
} from "@/models/local/courseItemTypes";
import { LocalCoursePage } from "@/models/local/page/localCoursePage";
import { LocalQuiz } from "@/models/local/quiz/localQuiz";
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
// import { ItemInDay } from "@/app/course/[courseName]/calendar/day/ItemInDay";
// import { LocalAssignment } from "@/models/local/assignment/localAssignment";
// import {
// CourseItemReturnType,
// CourseItemType,
// } from "@/models/local/courseItemTypes";
// import { LocalCoursePage } from "@/models/local/page/localCoursePage";
// import { LocalQuiz } from "@/models/local/quiz/localQuiz";
// import { fileStorageService } from "@/services/fileStorage/fileStorageService";
export async function getAllItemsFromServer<T extends CourseItemType>({
courseName,
moduleName,
type,
}: {
courseName: string;
moduleName: string;
type: T;
}): Promise<CourseItemReturnType<T>[]> {
if (type === "Assignment") {
const assignments = await fileStorageService.assignments.getAssignments(
courseName,
moduleName
);
return assignments as CourseItemReturnType<T>[];
}
if (type === "Quiz") {
const quizzes = await fileStorageService.quizzes.getQuizzes(
courseName,
moduleName
);
return quizzes as CourseItemReturnType<T>[];
}
if (type === "Page") {
const pages = await fileStorageService.pages.getPages(
courseName,
moduleName
);
return pages as CourseItemReturnType<T>[];
}
// export async function getAllItemsFromServer<T extends CourseItemType>({
// courseName,
// moduleName,
// type,
// }: {
// courseName: string;
// moduleName: string;
// type: T;
// }): Promise<CourseItemReturnType<T>[]> {
// if (type === "Assignment") {
// const assignments = await fileStorageService.assignments.getAssignments(
// courseName,
// moduleName
// );
// return assignments as CourseItemReturnType<T>[];
// }
// if (type === "Quiz") {
// const quizzes = await fileStorageService.quizzes.getQuizzes(
// courseName,
// moduleName
// );
// return quizzes as CourseItemReturnType<T>[];
// }
// if (type === "Page") {
// const pages = await fileStorageService.pages.getPages(
// courseName,
// moduleName
// );
// return pages as CourseItemReturnType<T>[];
// }
throw Error(`cannot get item from server, invalid type: ${type}`)
}
// throw Error(`cannot get item from server, invalid type: ${type}`)
// }
export async function getItemFromServer<T extends CourseItemType>({
courseName,
moduleName,
type,
itemName,
}: {
courseName: string;
moduleName: string;
type: T;
itemName: string;
}): Promise<CourseItemReturnType<T>> {
if (type === "Assignment") {
const assignment = await fileStorageService.assignments.getAssignment(
courseName,
moduleName,
itemName
);
return assignment as CourseItemReturnType<T>;
}
if (type === "Assignment") {
const quiz = await fileStorageService.quizzes.getQuiz(
courseName,
moduleName,
itemName
);
return quiz as CourseItemReturnType<T>;
}
const page = await fileStorageService.pages.getPage(
courseName,
moduleName,
itemName
);
return page as CourseItemReturnType<T>;
}
// export async function getItemFromServer<T extends CourseItemType>({
// courseName,
// moduleName,
// type,
// itemName,
// }: {
// courseName: string;
// moduleName: string;
// type: T;
// itemName: string;
// }): Promise<CourseItemReturnType<T>> {
// if (type === "Assignment") {
// const assignment = await fileStorageService.assignments.getAssignment(
// courseName,
// moduleName,
// itemName
// );
// return assignment as CourseItemReturnType<T>;
// }
// if (type === "Assignment") {
// const quiz = await fileStorageService.quizzes.getQuiz(
// courseName,
// moduleName,
// itemName
// );
// return quiz as CourseItemReturnType<T>;
// }
// const page = await fileStorageService.pages.getPage(
// courseName,
// moduleName,
// itemName
// );
// return page as CourseItemReturnType<T>;
// }
export async function createItemOnServer<T extends CourseItemType>({
courseName,
moduleName,
type,
item,
itemName,
}: {
courseName: string;
moduleName: string;
type: T;
item: CourseItemReturnType<T>;
itemName: string;
}) {
if (type === "Assignment") {
const assignment = item as LocalAssignment;
await fileStorageService.assignments.updateOrCreateAssignment({
courseName,
moduleName,
assignmentName: itemName,
assignment,
});
}
if (type === "Quiz") {
const quiz = item as LocalQuiz;
await fileStorageService.quizzes.updateQuiz(
courseName,
moduleName,
itemName,
quiz
);
}
if (type === "Page") {
const page = item as LocalCoursePage;
await fileStorageService.pages.updatePage(
courseName,
moduleName,
itemName,
page
);
}
}
// export async function createItemOnServer<T extends CourseItemType>({
// courseName,
// moduleName,
// type,
// item,
// itemName,
// }: {
// courseName: string;
// moduleName: string;
// type: T;
// item: CourseItemReturnType<T>;
// itemName: string;
// }) {
// if (type === "Assignment") {
// const assignment = item as LocalAssignment;
// await fileStorageService.assignments.updateOrCreateAssignment({
// courseName,
// moduleName,
// assignmentName: itemName,
// assignment,
// });
// }
// if (type === "Quiz") {
// const quiz = item as LocalQuiz;
// await fileStorageService.quizzes.updateQuiz(
// courseName,
// moduleName,
// itemName,
// quiz
// );
// }
// if (type === "Page") {
// const page = item as LocalCoursePage;
// await fileStorageService.pages.updatePage(
// courseName,
// moduleName,
// itemName,
// page
// );
// }
// }
export async function updateItemOnServer<T extends CourseItemType>({
item,
courseName,
moduleName,
previousModuleName,
previousItemName,
itemName,
type,
}: {
item: CourseItemReturnType<T>;
courseName: string;
moduleName: string;
previousModuleName: string;
previousItemName: string;
itemName: string;
type: T;
}) {
if (type === "Assignment") {
const assignment = item as LocalAssignment;
await fileStorageService.assignments.updateOrCreateAssignment({
courseName,
moduleName,
assignmentName: itemName,
assignment,
});
// export async function updateItemOnServer<T extends CourseItemType>({
// item,
// courseName,
// moduleName,
// previousModuleName,
// previousItemName,
// itemName,
// type,
// }: {
// item: CourseItemReturnType<T>;
// courseName: string;
// moduleName: string;
// previousModuleName: string;
// previousItemName: string;
// itemName: string;
// type: T;
// }) {
// if (type === "Assignment") {
// const assignment = item as LocalAssignment;
// await fileStorageService.assignments.updateOrCreateAssignment({
// courseName,
// moduleName,
// assignmentName: itemName,
// assignment,
// });
if (
assignment.name !== previousItemName ||
moduleName !== previousModuleName
) {
fileStorageService.assignments.delete({
courseName,
moduleName: previousModuleName,
assignmentName: previousItemName,
});
}
}
if (type === "Quiz") {
const quiz = item as LocalQuiz;
await fileStorageService.quizzes.updateQuiz(
courseName,
moduleName,
itemName,
quiz
);
// if (
// assignment.name !== previousItemName ||
// moduleName !== previousModuleName
// ) {
// fileStorageService.assignments.delete({
// courseName,
// moduleName: previousModuleName,
// assignmentName: previousItemName,
// });
// }
// }
// if (type === "Quiz") {
// const quiz = item as LocalQuiz;
// await fileStorageService.quizzes.updateQuiz(
// courseName,
// moduleName,
// itemName,
// quiz
// );
if (
previousModuleName &&
previousItemName &&
(quiz.name !== previousItemName || moduleName !== previousModuleName)
) {
fileStorageService.quizzes.delete({
courseName,
moduleName: previousModuleName,
quizName: previousItemName,
});
}
}
if (type === "Page") {
const page = item as LocalCoursePage;
await fileStorageService.pages.updatePage(
courseName,
moduleName,
itemName,
page
);
// if (
// previousModuleName &&
// previousItemName &&
// (quiz.name !== previousItemName || moduleName !== previousModuleName)
// ) {
// fileStorageService.quizzes.delete({
// courseName,
// moduleName: previousModuleName,
// quizName: previousItemName,
// });
// }
// }
// if (type === "Page") {
// const page = item as LocalCoursePage;
// await fileStorageService.pages.updatePage(
// courseName,
// moduleName,
// itemName,
// page
// );
if (
previousModuleName &&
previousItemName &&
(page.name !== previousItemName || moduleName !== previousModuleName)
) {
fileStorageService.pages.delete({
courseName,
moduleName: previousModuleName,
pageName: previousItemName,
});
}
}
}
// if (
// previousModuleName &&
// previousItemName &&
// (page.name !== previousItemName || moduleName !== previousModuleName)
// ) {
// fileStorageService.pages.delete({
// courseName,
// moduleName: previousModuleName,
// pageName: previousItemName,
// });
// }
// }
// }
export async function deleteItemOnServer<T extends CourseItemType>({
courseName,
moduleName,
itemName,
type,
}: {
courseName: string;
moduleName: string;
itemName: string;
type: T;
}) {
if (type === "Assignment") {
await fileStorageService.assignments.delete({
courseName,
moduleName,
assignmentName: itemName,
});
}
if (type === "Quiz") {
await fileStorageService.quizzes.delete({
courseName,
moduleName,
quizName: itemName,
});
}
if (type === "Page") {
await fileStorageService.pages.delete({
courseName,
moduleName,
pageName: itemName,
});
}
}
// export async function deleteItemOnServer<T extends CourseItemType>({
// courseName,
// moduleName,
// itemName,
// type,
// }: {
// courseName: string;
// moduleName: string;
// itemName: string;
// type: T;
// }) {
// if (type === "Assignment") {
// await fileStorageService.assignments.delete({
// courseName,
// moduleName,
// assignmentName: itemName,
// });
// }
// if (type === "Quiz") {
// await fileStorageService.quizzes.delete({
// courseName,
// moduleName,
// quizName: itemName,
// });
// }
// if (type === "Page") {
// await fileStorageService.pages.delete({
// courseName,
// moduleName,
// pageName: itemName,
// });
// }
// }

View File

@@ -2,11 +2,9 @@ import { useCourseContext } from "@/app/course/[courseName]/context/courseContex
import {
useMutation,
useQueryClient,
useSuspenseQueries,
useSuspenseQuery,
} from "@tanstack/react-query";
import { localCourseKeys } from "./localCourseKeys";
import { getAllItemsQueryConfig } from "./courseItemHooks";
import {
createModuleOnServer,
getModuleNamesFromServer,

View File

@@ -1,18 +1,48 @@
"use client";
import {
useCreateItemMutation,
useDeleteItemMutation,
useItemQuery,
useItemsQueries,
useUpdateItemMutation,
} from "./courseItemHooks";
export const usePageQuery = (moduleName: string, pageName: string) =>
useItemQuery(moduleName, pageName, "Page");
import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
import { trpc } from "@/services/trpc/utils";
export const usePagesQueries = (moduleName: string) =>
useItemsQueries(moduleName, "Page");
export const usePageQuery = (moduleName: string, pageName: string) => {
const { courseName } = useCourseContext();
return trpc.page.getPage.useSuspenseQuery({
courseName,
moduleName,
pageName,
});
};
export const useUpdatePageMutation = () => useUpdateItemMutation("Page");
export const useCreatePageMutation = () => useCreateItemMutation("Page");
export const useDeletePageMutation = () => useDeleteItemMutation("Page");
export const usePagesQueries = (moduleName: string) => {
const { courseName } = useCourseContext();
return trpc.page.getAllPages.useSuspenseQuery({
courseName,
moduleName,
});
};
export const useUpdatePageMutation = () => {
const utils = trpc.useUtils();
return trpc.page.updatePage.useMutation({
onSuccess: (_, { courseName, moduleName, pageName }) => {
utils.page.getAllPages.invalidate({ courseName, moduleName });
utils.page.getPage.invalidate({ courseName, moduleName, pageName });
},
});
};
export const useCreatePageMutation = () => {
const utils = trpc.useUtils();
return trpc.page.createPage.useMutation({
onSuccess: (_, { courseName, moduleName }) => {
utils.page.getAllPages.invalidate({ courseName, moduleName });
},
});
};
export const useDeletePageMutation = () => {
const utils = trpc.useUtils();
return trpc.page.deletePage.useMutation({
onSuccess: (_, { courseName, moduleName, pageName }) => {
utils.page.getAllPages.invalidate({ courseName, moduleName });
utils.page.getPage.invalidate({ courseName, moduleName, pageName });
},
});
};

View File

@@ -0,0 +1,48 @@
"use client";
import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
import { trpc } from "@/services/trpc/utils";
export const useQuizQuery = (moduleName: string, quizName: string) => {
const { courseName } = useCourseContext();
return trpc.quiz.getQuiz.useSuspenseQuery({
courseName,
moduleName,
quizName,
});
};
export const useQuizzesQueries = (moduleName: string) => {
const { courseName } = useCourseContext();
return trpc.quiz.getAllQuizzes.useSuspenseQuery({
courseName,
moduleName,
});
};
export const useUpdateQuizMutation = () => {
const utils = trpc.useUtils();
return trpc.quiz.updateQuiz.useMutation({
onSuccess: (_, { courseName, moduleName, quizName }) => {
utils.quiz.getAllQuizzes.invalidate({ courseName, moduleName });
utils.quiz.getQuiz.invalidate({ courseName, moduleName, quizName });
},
});
};
export const useCreateQuizMutation = () => {
const utils = trpc.useUtils();
return trpc.quiz.createQuiz.useMutation({
onSuccess: (_, { courseName, moduleName }) => {
utils.quiz.getAllQuizzes.invalidate({ courseName, moduleName });
},
});
};
export const useDeleteQuizMutation = () => {
const utils = trpc.useUtils();
return trpc.quiz.deleteQuiz.useMutation({
onSuccess: (_, { courseName, moduleName, quizName }) => {
utils.quiz.getAllQuizzes.invalidate({ courseName, moduleName });
utils.quiz.getQuiz.invalidate({ courseName, moduleName, quizName });
},
});
};