diff --git a/frontend/src/queries/learning-objects.ts b/frontend/src/queries/learning-objects.ts new file mode 100644 index 00000000..5c71255e --- /dev/null +++ b/frontend/src/queries/learning-objects.ts @@ -0,0 +1,57 @@ +import {type MaybeRefOrGetter, toValue} from "vue"; +import type {Language} from "@/data-objects/language.ts"; +import {useQuery, type UseQueryReturnType} from "@tanstack/vue-query"; +import {getLearningObjectController} from "@/controllers/controllers.ts"; +import type {LearningObject} from "@/data-objects/learning-object.ts"; +import type {LearningPath} from "@/data-objects/learning-path.ts"; + +const LEARNING_OBJECT_KEY = "learningObject"; +const learningObjectController = getLearningObjectController(); + +export function useLearningObjectMetadataQuery( + hruid: MaybeRefOrGetter, + language: MaybeRefOrGetter, + version: MaybeRefOrGetter +): UseQueryReturnType { + return useQuery({ + queryKey: [LEARNING_OBJECT_KEY, "metadata", hruid, language, version], + queryFn: () => { + const [hruidVal, languageVal, versionVal] = [toValue(hruid), toValue(language), toValue(version)]; + return learningObjectController.getMetadata(hruidVal, languageVal, versionVal) + }, + enabled: () => Boolean(toValue(hruid)) && Boolean(toValue(language)) && Boolean(toValue(version)), + }); +} + +export function useLearningObjectHTMLQuery( + hruid: MaybeRefOrGetter, + language: MaybeRefOrGetter, + version: MaybeRefOrGetter +): UseQueryReturnType { + return useQuery({ + queryKey: [LEARNING_OBJECT_KEY, "html", hruid, language, version], + queryFn: () => { + const [hruidVal, languageVal, versionVal] = [toValue(hruid), toValue(language), toValue(version)]; + return learningObjectController.getHTML(hruidVal, languageVal, versionVal) + }, + enabled: () => Boolean(toValue(hruid)) && Boolean(toValue(language)) && Boolean(toValue(version)), + }); +} + +export function useLearningObjectListForPathQuery( + learningPath: MaybeRefOrGetter +): UseQueryReturnType { + return useQuery({ + queryKey: [LEARNING_OBJECT_KEY, "onPath", learningPath], + queryFn: () => { + let learningObjects = []; + for (let node of toValue(learningPath).nodesAsList) { + learningObjects.push( + learningObjectController.getHTML(node.learningobjectHruid, node.language, node.version) + ); + } + return learningObjects; + }, + enabled: () => Boolean(toValue(learningPath)), + }); +} diff --git a/frontend/src/queries/learning-paths.ts b/frontend/src/queries/learning-paths.ts new file mode 100644 index 00000000..56699d7a --- /dev/null +++ b/frontend/src/queries/learning-paths.ts @@ -0,0 +1,36 @@ +import {type MaybeRefOrGetter, toValue} from "vue"; +import type {Language} from "@/data-objects/language.ts"; +import {useQuery, type UseQueryReturnType} from "@tanstack/vue-query"; +import { getLearningPathController } from "@/controllers/controllers"; +import type {LearningPath} from "@/data-objects/learning-path.ts"; + +const LEARNING_PATH_KEY = "learningPath"; +const learningPathController = getLearningPathController(); + +export function useGetLearningPathQuery( + hruid: MaybeRefOrGetter, + language: MaybeRefOrGetter, + options?: MaybeRefOrGetter<{forGroup?: string, forStudent?: string}> +): UseQueryReturnType { + return useQuery({ + queryKey: [LEARNING_PATH_KEY, "get", hruid, language, options], + queryFn: () => { + const [hruidVal, languageVal, optionsVal] = [toValue(hruid), toValue(language), toValue(options)]; + return learningPathController.getBy(hruidVal, languageVal) + }, + enabled: () => Boolean(toValue(hruid)) && Boolean(toValue(language)), + }) +} + +export function useSearchLearningPathQuery( + query: MaybeRefOrGetter +): UseQueryReturnType { + return useQuery({ + queryKey: [LEARNING_PATH_KEY, "search", query], + queryFn: () => { + const queryVal = toValue(query); + return learningPathController.search(queryVal); + }, + enabled: () => Boolean(toValue(query)), + }) +}