@orjok/commons 1.0.2 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/amplify.cjs +30 -5
- package/dist/amplify.cjs.map +1 -1
- package/dist/amplify.d.cts +5 -2
- package/dist/amplify.d.ts +5 -2
- package/dist/amplify.js +30 -5
- package/dist/amplify.js.map +1 -1
- package/dist/chunk-B4UJE3F4.js +529 -0
- package/dist/chunk-B4UJE3F4.js.map +1 -0
- package/dist/chunk-ODXD2WJN.cjs +529 -0
- package/dist/chunk-ODXD2WJN.cjs.map +1 -0
- package/dist/hooks.cjs +639 -2
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.d.cts +162 -3
- package/dist/hooks.d.ts +162 -3
- package/dist/hooks.js +638 -1
- package/dist/hooks.js.map +1 -1
- package/dist/index.cjs +2454 -363
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +303 -15
- package/dist/index.d.ts +303 -15
- package/dist/index.js +2430 -339
- package/dist/index.js.map +1 -1
- package/dist/{client-BaOC79Nc.d.cts → notification-BoqtkNrc.d.ts} +392 -12
- package/dist/{client-Bm9aiyTx.d.ts → notification-Ctfy0m05.d.cts} +392 -12
- package/dist/{storage-DLqdJgQt.d.cts → storage-9pK8KwIM.d.cts} +4 -2
- package/dist/{storage-DLqdJgQt.d.ts → storage-9pK8KwIM.d.ts} +4 -2
- package/dist/testing.cjs +34 -3
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +9 -2
- package/dist/testing.d.ts +9 -2
- package/dist/testing.js +34 -3
- package/dist/testing.js.map +1 -1
- package/package.json +6 -3
package/dist/hooks.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/orjok/orjok/packages/commons/dist/hooks.cjs","../src/hooks/useOrjokClient.ts"],"names":[],"mappings":"AAAA;ACAA,8BAA0C;AAG1C,IAAM,aAAA,EAAe,kCAAA,IAAsC,CAAA;AAEpD,IAAM,cAAA,EAAgB,YAAA,CAAa,QAAA;AAEnC,SAAS,cAAA,CAAA,EAA8B;AAC5C,EAAA,MAAM,OAAA,EAAS,+BAAA,YAAuB,CAAA;AACtC,EAAA,GAAA,CAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,KAAA,CAAM,qDAAqD,CAAA;AAAA,EACvE;AACA,EAAA,OAAO,MAAA;AACT;ADFA;AACE;AACA;AACF,+EAAC","file":"/home/runner/work/orjok/orjok/packages/commons/dist/hooks.cjs","sourcesContent":[null,"import { createContext, useContext } from \"react\";\nimport type { OrjokClient } from \"../client\";\n\nconst OrjokContext = createContext<OrjokClient | null>(null);\n\nexport const OrjokProvider = OrjokContext.Provider;\n\nexport function useOrjokClient(): OrjokClient {\n const client = useContext(OrjokContext);\n if (!client) {\n throw new Error(\"useOrjokClient must be used within an OrjokProvider\");\n }\n return client;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/orjok/orjok/packages/commons/dist/hooks.cjs","../src/hooks/useOrjokClient.ts","../src/hooks/useMediaUrl.ts","../src/hooks/useCurriculum.ts","../src/hooks/useQuestions.ts","../src/hooks/usePacks.ts","../src/hooks/useContest.ts","../src/hooks/useCourse.ts","../src/hooks/useProgress.ts","../src/hooks/usePractice.ts","../src/hooks/useAvailablePublicExams.ts","../src/hooks/useNotifications.ts"],"names":["useQuery"],"mappings":"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","file":"/home/runner/work/orjok/orjok/packages/commons/dist/hooks.cjs","sourcesContent":[null,"import { createContext, useContext } from \"react\";\nimport type { OrjokClient } from \"../client\";\n\nconst OrjokContext = createContext<OrjokClient | null>(null);\n\nexport const OrjokProvider = OrjokContext.Provider;\n\nexport function useOrjokClient(): OrjokClient {\n const client = useContext(OrjokContext);\n if (!client) {\n throw new Error(\"useOrjokClient must be used within an OrjokProvider\");\n }\n return client;\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useOrjokClient } from \"./useOrjokClient\";\nimport { isStorageKey, resolveMediaUrl } from \"../logic/media-url\";\n\nexport function useMediaUrl(key: string | null | undefined): {\n url: string | null;\n isLoading: boolean;\n} {\n const client = useOrjokClient();\n\n const isResolvable = Boolean(key && isStorageKey(key));\n\n const query = useQuery({\n queryKey: [\"media-url\", key],\n queryFn: async () => {\n if (!key) return null;\n return resolveMediaUrl(key, client.storage);\n },\n enabled: isResolvable,\n staleTime: 50 * 60 * 1000, // 50 mins\n });\n\n if (!key) {\n return { url: null, isLoading: false };\n }\n\n if (!isStorageKey(key)) {\n return { url: key, isLoading: false };\n }\n\n return {\n url: query.data ?? null,\n isLoading: query.isLoading,\n };\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useOrjokClient } from \"./useOrjokClient\";\nimport type { Subject, Chapter, Topic } from \"../types/models\";\n\nexport interface UseCurriculumParams {\n level?: string;\n subjectId?: string;\n chapterId?: string;\n}\n\nexport function useCurriculum({ level, subjectId, chapterId }: UseCurriculumParams = {}): {\n subjects: Subject[];\n chapters: Chapter[];\n topics: Topic[];\n isLoadingSubjects: boolean;\n isLoadingChapters: boolean;\n isLoadingTopics: boolean;\n} {\n const client = useOrjokClient();\n\n const subjectsQuery = useQuery({\n queryKey: [\"curriculum-subjects\", level],\n queryFn: () => (level ? client.curriculum.getSubjects(level) : Promise.resolve([])),\n enabled: Boolean(level),\n });\n\n const chaptersQuery = useQuery({\n queryKey: [\"curriculum-chapters\", subjectId],\n queryFn: () => (subjectId ? client.curriculum.getChapters(subjectId) : Promise.resolve([])),\n enabled: Boolean(subjectId),\n });\n\n const topicsQuery = useQuery({\n queryKey: [\"curriculum-topics\", chapterId],\n queryFn: () => (chapterId ? client.curriculum.getTopics(chapterId) : Promise.resolve([])),\n enabled: Boolean(chapterId),\n });\n\n return {\n subjects: subjectsQuery.data ?? [],\n chapters: chaptersQuery.data ?? [],\n topics: topicsQuery.data ?? [],\n isLoadingSubjects: subjectsQuery.isLoading,\n isLoadingChapters: chaptersQuery.isLoading,\n isLoadingTopics: topicsQuery.isLoading,\n };\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useOrjokClient } from \"./useOrjokClient\";\nimport type { QuestionObject } from \"../types/models\";\nimport type { Difficulty, Language } from \"../types/enums\";\n\nexport interface UseQuestionsParams {\n subjectId?: string;\n chapterId?: string;\n topicId?: string;\n language?: Language | \"All\";\n difficulty?: Difficulty | \"All\";\n limit?: number;\n nextToken?: string | null;\n}\n\nexport function useQuestions({\n subjectId,\n chapterId,\n topicId,\n language,\n difficulty,\n limit = 20,\n nextToken,\n}: UseQuestionsParams = {}): {\n questions: QuestionObject[];\n nextToken: string | null;\n isLoading: boolean;\n refetch: () => Promise<unknown>;\n} {\n const client = useOrjokClient();\n\n const lang = language === \"All\" ? undefined : language;\n const diff = difficulty === \"All\" ? undefined : difficulty;\n\n const query = useQuery({\n queryKey: [\"questions\", { subjectId, chapterId, topicId, language, difficulty, limit, nextToken }],\n queryFn: async () => {\n if (topicId) {\n return client.questions.listByTopic({ id: topicId, language: lang, difficulty: diff, limit, nextToken: nextToken || undefined });\n }\n if (chapterId) {\n return client.questions.listByChapter({ id: chapterId, language: lang, difficulty: diff, limit, nextToken: nextToken || undefined });\n }\n if (subjectId) {\n return client.questions.listBySubject({ id: subjectId, language: lang, difficulty: diff, limit, nextToken: nextToken || undefined });\n }\n return { items: [], nextToken: null };\n },\n enabled: Boolean(subjectId || chapterId || topicId),\n });\n\n return {\n questions: query.data?.items ?? [],\n nextToken: query.data?.nextToken ?? null,\n isLoading: query.isLoading,\n refetch: query.refetch,\n };\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useOrjokClient } from \"./useOrjokClient\";\nimport type { Pack, QuestionObject } from \"../types/models\";\nimport type { Difficulty, Language } from \"../types/enums\";\n\nexport interface UsePacksParams {\n subjectId?: string;\n chapterId?: string;\n topicId?: string;\n language?: Language | \"All\";\n difficulty?: Difficulty | \"All\";\n limit?: number;\n nextToken?: string | null;\n}\n\nexport function usePacks({\n subjectId,\n chapterId,\n topicId,\n language,\n difficulty,\n limit = 20,\n nextToken,\n}: UsePacksParams = {}): {\n packs: Pack[];\n nextToken: string | null;\n isLoading: boolean;\n refetch: () => Promise<unknown>;\n} {\n const client = useOrjokClient();\n\n const lang = language === \"All\" ? undefined : language;\n const diff = difficulty === \"All\" ? undefined : difficulty;\n\n const query = useQuery({\n queryKey: [\"packs\", { subjectId, chapterId, topicId, language, difficulty, limit, nextToken }],\n queryFn: async () => {\n if (topicId) {\n return client.packs.listByTopic({ id: topicId, language: lang, difficulty: diff, limit, nextToken: nextToken || undefined });\n }\n if (chapterId) {\n return client.packs.listByChapter({ id: chapterId, language: lang, difficulty: diff, limit, nextToken: nextToken || undefined });\n }\n if (subjectId) {\n return client.packs.listBySubject({ id: subjectId, language: lang, difficulty: diff, limit, nextToken: nextToken || undefined });\n }\n return { items: [], nextToken: null };\n },\n enabled: Boolean(subjectId || chapterId || topicId),\n });\n\n return {\n packs: query.data?.items ?? [],\n nextToken: query.data?.nextToken ?? null,\n isLoading: query.isLoading,\n refetch: query.refetch,\n };\n}\n\nexport function usePackDetail(packId: string | undefined): {\n pack: Pack | null;\n questions: QuestionObject[];\n isLoading: boolean;\n refetch: () => Promise<unknown>;\n} {\n const client = useOrjokClient();\n\n const query = useQuery({\n queryKey: [\"pack-detail\", packId],\n queryFn: async () => {\n if (!packId) return null;\n return client.packs.getFull(packId);\n },\n enabled: Boolean(packId),\n });\n\n return {\n pack: query.data ?? null,\n questions: query.data?.questions?.items ?? [],\n isLoading: query.isLoading,\n refetch: query.refetch,\n };\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useOrjokClient } from \"./useOrjokClient\";\nimport type { Contest } from \"../types/models\";\nimport type { CheckParticipationResponse } from \"../types/responses\";\n\nexport function useContest(contestId: string | undefined, checkParticipation: boolean = false): {\n contest: Contest | null;\n participation: CheckParticipationResponse | null;\n isLoading: boolean;\n refetch: () => Promise<unknown>;\n} {\n const client = useOrjokClient();\n\n const contestQuery = useQuery({\n queryKey: [\"contest\", contestId],\n queryFn: async () => {\n if (!contestId) return null;\n return client.contests.get(contestId);\n },\n enabled: Boolean(contestId),\n });\n\n const partQuery = useQuery({\n queryKey: [\"contest-participation\", contestId],\n queryFn: async () => {\n if (!contestId || !checkParticipation) return null;\n return client.contests.checkParticipation(contestId);\n },\n enabled: Boolean(contestId && checkParticipation),\n });\n\n return {\n contest: contestQuery.data ?? null,\n participation: partQuery.data ?? null,\n isLoading: contestQuery.isLoading || (checkParticipation && partQuery.isLoading),\n refetch: async () => {\n await Promise.all([contestQuery.refetch(), partQuery.refetch()]);\n },\n };\n}\n\nexport function useContestsList({ level, nextToken }: { level?: string; nextToken?: string } = {}): {\n contests: Contest[];\n nextToken: string | null;\n isLoading: boolean;\n refetch: () => Promise<unknown>;\n} {\n const client = useOrjokClient();\n\n const query = useQuery({\n queryKey: [\"contests-list\", level, nextToken],\n queryFn: () => client.contests.list(nextToken, level),\n });\n\n return {\n contests: query.data?.items ?? [],\n nextToken: query.data?.nextToken ?? null,\n isLoading: query.isLoading,\n refetch: query.refetch,\n };\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useOrjokClient } from \"./useOrjokClient\";\nimport type { Course, CourseItem, CourseLiveExam } from \"../types/models\";\n\nexport function useCourse(courseId: string | undefined): {\n course: Course | null;\n isLoading: boolean;\n refetch: () => Promise<unknown>;\n} {\n const client = useOrjokClient();\n\n const query = useQuery({\n queryKey: [\"course\", courseId],\n queryFn: async () => {\n if (!courseId) return null;\n return client.courses.get(courseId);\n },\n enabled: Boolean(courseId),\n });\n\n return {\n course: query.data ?? null,\n isLoading: query.isLoading,\n refetch: query.refetch,\n };\n}\n\nexport function useCourseItems(courseId: string | undefined): {\n items: CourseItem[];\n isLoading: boolean;\n refetch: () => Promise<unknown>;\n} {\n const client = useOrjokClient();\n\n const query = useQuery({\n queryKey: [\"course-items\", courseId],\n queryFn: async () => {\n if (!courseId) return [];\n return client.courses.getItems(courseId);\n },\n enabled: Boolean(courseId),\n });\n\n return {\n items: query.data ?? [],\n isLoading: query.isLoading,\n refetch: query.refetch,\n };\n}\n\nexport function useCourseLiveExams(courseId: string | undefined): {\n exams: CourseLiveExam[];\n isLoading: boolean;\n refetch: () => Promise<unknown>;\n} {\n const client = useOrjokClient();\n\n const query = useQuery({\n queryKey: [\"course-live-exams\", courseId],\n queryFn: async () => {\n if (!courseId) return { items: [], nextToken: null };\n return client.courses.getLiveExams(courseId);\n },\n enabled: Boolean(courseId),\n });\n\n return {\n exams: query.data?.items ?? [],\n isLoading: query.isLoading,\n refetch: query.refetch,\n };\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useOrjokClient } from \"./useOrjokClient\";\nimport type { UserSubjectProgress, UserChapterProgress, UserTopicProgress } from \"../types/models\";\nimport { aggregateSubjectMetrics, type PracticeMetrics } from \"../logic/practice\";\n\nexport function useProgress(userId: string | undefined): {\n subjectsProgress: UserSubjectProgress[];\n chaptersProgress: UserChapterProgress[];\n topicsProgress: UserTopicProgress[];\n metrics: PracticeMetrics;\n isLoading: boolean;\n refetch: () => Promise<unknown>;\n} {\n const client = useOrjokClient();\n\n const subjectsQuery = useQuery({\n queryKey: [\"user-subject-progress\", userId],\n queryFn: () => (userId ? client.progress.getSubjectProgress(userId) : Promise.resolve([])),\n enabled: Boolean(userId),\n });\n\n const chaptersQuery = useQuery({\n queryKey: [\"user-chapter-progress\", userId],\n queryFn: () => (userId ? client.progress.getChapterProgress(userId) : Promise.resolve([])),\n enabled: Boolean(userId),\n });\n\n const topicsQuery = useQuery({\n queryKey: [\"user-topic-progress\", userId],\n queryFn: () => (userId ? client.progress.getTopicProgress(userId) : Promise.resolve([])),\n enabled: Boolean(userId),\n });\n\n const subjectsProgress = subjectsQuery.data ?? [];\n const chaptersProgress = chaptersQuery.data ?? [];\n const topicsProgress = topicsQuery.data ?? [];\n\n const metrics = aggregateSubjectMetrics(subjectsProgress);\n\n return {\n subjectsProgress,\n chaptersProgress,\n topicsProgress,\n metrics,\n isLoading: subjectsQuery.isLoading || chaptersQuery.isLoading || topicsQuery.isLoading,\n refetch: async () => {\n await Promise.all([\n subjectsQuery.refetch(),\n chaptersQuery.refetch(),\n topicsQuery.refetch(),\n ]);\n },\n };\n}\n","import { useState, useCallback } from \"react\";\nimport { useOrjokClient } from \"./useOrjokClient\";\nimport type { QuestionObject } from \"../types/models\";\nimport { isLanguageMatch, isDifficultyMatch, isValidMCQ } from \"../logic/practice\";\nimport { shuffle } from \"../utils/shuffle\";\n\nexport type PracticeMode = \"setup\" | \"practice\" | \"summary\";\n\nexport interface ItemBounds {\n id: string;\n type: \"topic\" | \"chapter\" | \"subject\";\n}\n\nexport interface UsePracticeProps {\n subjectId?: string;\n chapterIds?: string[];\n topicIds?: string[];\n language?: string;\n difficulty?: string;\n userId?: string;\n isCreator?: boolean;\n}\n\nexport function usePractice({\n subjectId,\n chapterIds = [],\n topicIds = [],\n language = \"Bangla\",\n difficulty = \"All\",\n userId,\n isCreator,\n}: UsePracticeProps = {}) {\n const client = useOrjokClient();\n\n const [mode, setMode] = useState<PracticeMode>(\"setup\");\n const [questions, setQuestions] = useState<QuestionObject[]>([]);\n const [currentIdx, setCurrentIdx] = useState<number>(0);\n const [selectedOption, setSelectedOption] = useState<string | null>(null);\n const [isAnswered, setIsAnswered] = useState<boolean>(false);\n const [isCorrect, setIsCorrect] = useState<boolean | null>(null);\n const [score, setScore] = useState<number>(0);\n const [totalPracticed, setTotalPracticed] = useState<number>(0);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isValidating, setIsValidating] = useState<boolean>(false);\n\n const fetchQuestionsPool = useCallback(async (): Promise<QuestionObject[]> => {\n const bounds: ItemBounds[] = [];\n if (topicIds.length > 0) {\n topicIds.forEach((tId) => bounds.push({ id: tId, type: \"topic\" }));\n } else if (chapterIds.length > 0) {\n chapterIds.forEach((cId) => bounds.push({ id: cId, type: \"chapter\" }));\n } else if (subjectId) {\n bounds.push({ id: subjectId, type: \"subject\" });\n }\n\n if (bounds.length === 0) return [];\n\n const queries = bounds.map(async (b) => {\n try {\n if (b.type === \"topic\") {\n return await client.questions.listByTopic({ id: b.id, limit: 50 });\n } else if (b.type === \"chapter\") {\n return await client.questions.listByChapter({ id: b.id, limit: 50 });\n } else {\n return await client.questions.listBySubject({ id: b.id, limit: 50 });\n }\n } catch (e) {\n console.error(\"Error fetching bounds query in practice:\", b, e);\n return { items: [] };\n }\n });\n\n const results = await Promise.all(queries);\n const uniqueMap = new Map<string, QuestionObject>();\n\n results.forEach((r) => {\n (r.items || []).forEach((q) => {\n if (q && q.id && !uniqueMap.has(q.id)) {\n uniqueMap.set(q.id, q);\n }\n });\n });\n\n let list = Array.from(uniqueMap.values()).filter((q) => {\n if (!isLanguageMatch(q.language, language)) return false;\n if (!isDifficultyMatch(q.difficulty, difficulty)) return false;\n return true;\n });\n\n // Fallback to parent subject if fewer than 5 matching questions\n if (list.length < 5 && subjectId && bounds.some((b) => b.type !== \"subject\")) {\n try {\n const subRes = await client.questions.listBySubject({ id: subjectId, limit: 50 });\n (subRes.items || []).forEach((q) => {\n if (q && q.id && !uniqueMap.has(q.id)) {\n if (isLanguageMatch(q.language, language) && isDifficultyMatch(q.difficulty, difficulty)) {\n list.push(q);\n uniqueMap.set(q.id, q);\n }\n }\n });\n } catch (e) {\n console.error(\"Error fetching subject fallback in practice:\", e);\n }\n }\n\n return list.filter(isValidMCQ);\n }, [client, subjectId, chapterIds, topicIds, language, difficulty]);\n\n const startPractice = useCallback(async () => {\n setIsLoading(true);\n setMode(\"practice\");\n setCurrentIdx(0);\n setScore(0);\n setTotalPracticed(0);\n setSelectedOption(null);\n setIsAnswered(false);\n setIsCorrect(null);\n\n try {\n const fetched = await fetchQuestionsPool();\n setQuestions(shuffle(fetched));\n } catch (e) {\n console.error(\"Error starting practice:\", e);\n setQuestions([]);\n } finally {\n setIsLoading(false);\n }\n }, [fetchQuestionsPool]);\n\n const selectOption = useCallback(\n async (optionId: string) => {\n if (isAnswered || isValidating || questions.length === 0) return;\n setSelectedOption(optionId);\n setIsValidating(true);\n const currentQ = questions[currentIdx];\n if (!currentQ) {\n setIsValidating(false);\n return;\n }\n\n try {\n const fullQ = await client.questions.get(currentQ.id);\n const ansVal = fullQ?.answer;\n const rawOpts = currentQ.options as unknown;\n const optsList = Array.isArray(rawOpts)\n ? rawOpts\n : (rawOpts && typeof rawOpts === \"object\" && Array.isArray((rawOpts as { items?: unknown[] }).items))\n ? (rawOpts as { items: Array<{ id?: string; content?: string }> }).items\n : [];\n\n const chosenOpt = optsList.find((o) => o?.id === optionId);\n const correct = Boolean(\n ansVal && (ansVal === optionId || (chosenOpt && ansVal === chosenOpt.content))\n );\n\n setIsCorrect(correct);\n setIsAnswered(true);\n setTotalPracticed((prev) => prev + 1);\n if (correct) setScore((prev) => prev + 1);\n\n if (userId && isCreator) {\n void client.progress\n .track({\n questionId: currentQ.id,\n isCorrect: correct,\n subjectId: currentQ.subjectId || subjectId,\n chapterId: currentQ.chapterId || (chapterIds.length === 1 ? chapterIds[0] : undefined),\n topicId: currentQ.topicId || (topicIds.length === 1 ? topicIds[0] : undefined),\n })\n .catch((e) => console.error(\"Tracking practice progress error:\", e));\n }\n } catch (err) {\n console.error(\"Error validating option in practice:\", err);\n } finally {\n setIsValidating(false);\n }\n },\n [client, isAnswered, isValidating, questions, currentIdx, userId, isCreator, subjectId, chapterIds, topicIds]\n );\n\n const nextQuestion = useCallback(() => {\n if (questions.length === 0) return;\n if (currentIdx + 1 < questions.length) {\n setCurrentIdx((prev) => prev + 1);\n setSelectedOption(null);\n setIsAnswered(false);\n setIsCorrect(null);\n } else {\n // Seamless reshuffle and continue\n setQuestions((prev) => shuffle(prev));\n setCurrentIdx(0);\n setSelectedOption(null);\n setIsAnswered(false);\n setIsCorrect(null);\n }\n }, [questions.length, currentIdx]);\n\n const finishPractice = useCallback(() => {\n setMode(\"summary\");\n }, []);\n\n const resetPractice = useCallback(() => {\n setMode(\"setup\");\n setQuestions([]);\n setCurrentIdx(0);\n setScore(0);\n setTotalPracticed(0);\n setSelectedOption(null);\n setIsAnswered(false);\n setIsCorrect(null);\n }, []);\n\n const accuracy = totalPracticed > 0 ? Math.round((score / totalPracticed) * 100) : 0;\n\n return {\n mode,\n questions,\n currentIdx,\n currentQuestion: questions[currentIdx] ?? null,\n selectedOption,\n isAnswered,\n isCorrect,\n score,\n totalPracticed,\n accuracy,\n isLoading,\n isValidating,\n startPractice,\n selectOption,\n nextQuestion,\n finishPractice,\n resetPractice,\n };\n}\n","import { useMemo } from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useOrjokClient } from \"./useOrjokClient\";\nimport { getPublicExamsByLevel, type PublicExamOption } from \"../types/select-options\";\n\nimport type { OrjokClient } from \"../client\";\n\nexport interface UseAvailablePublicExamsParams {\n level?: string | null;\n exploreType?: \"Question\" | \"Pack\";\n enabled?: boolean;\n client?: OrjokClient;\n}\n\n/**\n * Hook to dynamically filter public exams by querying the GSI for existing questions or packs.\n * Caches results via React Query to keep DynamoDB RCU negligible (< 9 RCUs per cold session, 0 RCU cached).\n * Can be disabled at any time by setting `enabled: false`.\n */\nexport function useAvailablePublicExams({\n level,\n exploreType = \"Question\",\n enabled = true,\n client: directClient,\n}: UseAvailablePublicExamsParams = {}): {\n availableExams: PublicExamOption[];\n isLoading: boolean;\n isSuccess: boolean;\n refetch: () => Promise<unknown>;\n} {\n let contextClient: OrjokClient | null = null;\n try {\n contextClient = useOrjokClient();\n } catch {\n // optional fallback if outside provider\n }\n const client = directClient ?? contextClient;\n\n const candidateExams = useMemo(() => getPublicExamsByLevel(level), [level]);\n\n const query = useQuery({\n queryKey: [\"availablePublicExams\", level, exploreType],\n queryFn: async (): Promise<PublicExamOption[]> => {\n if (!client || !level || candidateExams.length === 0) return candidateExams;\n\n const results = await Promise.all(\n candidateExams.map(async (exam) => {\n try {\n if (exploreType === \"Pack\") {\n const res = await client.packs.listByPublicExam({\n publicExam: exam.value,\n limit: 1,\n });\n return (res.items?.length ?? 0) > 0 ? exam : null;\n } else {\n const res = await client.questions.listByPublicExam({\n publicExam: exam.value,\n limit: 1,\n });\n return (res.items?.length ?? 0) > 0 ? exam : null;\n }\n } catch {\n return null;\n }\n })\n );\n\n return results.filter((e): e is PublicExamOption => e !== null);\n },\n enabled: Boolean(level) && enabled,\n staleTime: 10 * 60 * 1000,\n gcTime: 30 * 60 * 1000,\n });\n\n if (!enabled || !level) {\n return {\n availableExams: candidateExams,\n isLoading: false,\n isSuccess: true,\n refetch: async () => candidateExams,\n };\n }\n\n return {\n availableExams: query.data ?? [],\n isLoading: query.isLoading,\n isSuccess: query.isSuccess,\n refetch: query.refetch,\n };\n}\n","import { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useOrjokClient } from \"./useOrjokClient\";\nimport type { Announcement, UserNotification } from \"../types/models\";\nimport {\n mergeNotificationTimeline,\n calculateUnreadCount,\n type NotificationTimelineItem,\n} from \"../logic/notification\";\n\nexport type { NotificationTimelineItem };\n\nexport interface UseNotificationsResult {\n announcements: Announcement[];\n userNotifications: UserNotification[];\n timeline: NotificationTimelineItem[];\n unreadCount: number;\n isLoading: boolean;\n refetch: () => Promise<unknown>;\n markNotificationAsRead: (id: string) => Promise<unknown>;\n deleteAnnouncement: (id: string) => Promise<unknown>;\n deleteUserNotification: (id: string) => Promise<unknown>;\n}\n\nexport function useNotifications(\n userId: string | null | undefined,\n lastReadAnnouncementAt?: string | null\n): UseNotificationsResult {\n const client = useOrjokClient();\n const queryClient = useQueryClient();\n\n const announcementsQuery = useQuery({\n queryKey: [\"notifications-announcements\"],\n queryFn: async () => {\n const result = await client.notifications.listAnnouncements(50);\n return result.items || [];\n },\n enabled: Boolean(userId),\n refetchInterval: 30000, // Poll every 30s\n });\n\n const userNotificationsQuery = useQuery({\n queryKey: [\"notifications-user\", userId],\n queryFn: async () => {\n if (!userId) return [];\n const result = await client.notifications.listUserNotifications(userId, 50);\n return result.items || [];\n },\n enabled: Boolean(userId),\n refetchInterval: 30000,\n });\n\n const announcements = announcementsQuery.data ?? [];\n const userNotifications = userNotificationsQuery.data ?? [];\n\n const timeline = mergeNotificationTimeline({\n announcements,\n userNotifications,\n lastReadAnnouncementAt,\n });\n\n const unreadCount = calculateUnreadCount({\n announcements,\n userNotifications,\n lastReadAnnouncementAt,\n });\n\n const markAsReadMutation = useMutation({\n mutationFn: (id: string) => client.notifications.markNotificationAsRead(id),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"notifications-user\", userId] });\n },\n });\n\n const deleteAnnouncementMutation = useMutation({\n mutationFn: (id: string) => client.notifications.deleteAnnouncement(id),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"notifications-announcements\"] });\n },\n });\n\n const deleteUserNotificationMutation = useMutation({\n mutationFn: (id: string) => client.notifications.deleteUserNotification(id),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"notifications-user\", userId] });\n },\n });\n\n return {\n announcements,\n userNotifications,\n timeline,\n unreadCount,\n isLoading: announcementsQuery.isLoading || (Boolean(userId) && userNotificationsQuery.isLoading),\n refetch: async () => {\n await Promise.all([\n announcementsQuery.refetch(),\n userId ? userNotificationsQuery.refetch() : Promise.resolve(),\n ]);\n },\n markNotificationAsRead: async (id: string) => {\n return markAsReadMutation.mutateAsync(id);\n },\n deleteAnnouncement: async (id: string) => {\n return deleteAnnouncementMutation.mutateAsync(id);\n },\n deleteUserNotification: async (id: string) => {\n return deleteUserNotificationMutation.mutateAsync(id);\n },\n };\n}\n"]}
|
package/dist/hooks.d.cts
CHANGED
|
@@ -1,8 +1,167 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { O as OrjokClient } from './
|
|
3
|
-
import './storage-
|
|
2
|
+
import { O as OrjokClient, S as Subject, C as Chapter, T as Topic, L as Language, D as Difficulty, Q as QuestionObject, P as Pack, a as Contest, b as CheckParticipationResponse, c as Course, d as CourseItem, e as CourseLiveExam, U as UserSubjectProgress, f as UserChapterProgress, g as UserTopicProgress, h as PracticeMetrics, i as PublicExamOption, A as Announcement, j as UserNotification, N as NotificationTimelineItem } from './notification-Ctfy0m05.cjs';
|
|
3
|
+
import './storage-9pK8KwIM.cjs';
|
|
4
4
|
|
|
5
5
|
declare const OrjokProvider: react.Provider<OrjokClient | null>;
|
|
6
6
|
declare function useOrjokClient(): OrjokClient;
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
declare function useMediaUrl(key: string | null | undefined): {
|
|
9
|
+
url: string | null;
|
|
10
|
+
isLoading: boolean;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
interface UseCurriculumParams {
|
|
14
|
+
level?: string;
|
|
15
|
+
subjectId?: string;
|
|
16
|
+
chapterId?: string;
|
|
17
|
+
}
|
|
18
|
+
declare function useCurriculum({ level, subjectId, chapterId }?: UseCurriculumParams): {
|
|
19
|
+
subjects: Subject[];
|
|
20
|
+
chapters: Chapter[];
|
|
21
|
+
topics: Topic[];
|
|
22
|
+
isLoadingSubjects: boolean;
|
|
23
|
+
isLoadingChapters: boolean;
|
|
24
|
+
isLoadingTopics: boolean;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
interface UseQuestionsParams {
|
|
28
|
+
subjectId?: string;
|
|
29
|
+
chapterId?: string;
|
|
30
|
+
topicId?: string;
|
|
31
|
+
language?: Language | "All";
|
|
32
|
+
difficulty?: Difficulty | "All";
|
|
33
|
+
limit?: number;
|
|
34
|
+
nextToken?: string | null;
|
|
35
|
+
}
|
|
36
|
+
declare function useQuestions({ subjectId, chapterId, topicId, language, difficulty, limit, nextToken, }?: UseQuestionsParams): {
|
|
37
|
+
questions: QuestionObject[];
|
|
38
|
+
nextToken: string | null;
|
|
39
|
+
isLoading: boolean;
|
|
40
|
+
refetch: () => Promise<unknown>;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
interface UsePacksParams {
|
|
44
|
+
subjectId?: string;
|
|
45
|
+
chapterId?: string;
|
|
46
|
+
topicId?: string;
|
|
47
|
+
language?: Language | "All";
|
|
48
|
+
difficulty?: Difficulty | "All";
|
|
49
|
+
limit?: number;
|
|
50
|
+
nextToken?: string | null;
|
|
51
|
+
}
|
|
52
|
+
declare function usePacks({ subjectId, chapterId, topicId, language, difficulty, limit, nextToken, }?: UsePacksParams): {
|
|
53
|
+
packs: Pack[];
|
|
54
|
+
nextToken: string | null;
|
|
55
|
+
isLoading: boolean;
|
|
56
|
+
refetch: () => Promise<unknown>;
|
|
57
|
+
};
|
|
58
|
+
declare function usePackDetail(packId: string | undefined): {
|
|
59
|
+
pack: Pack | null;
|
|
60
|
+
questions: QuestionObject[];
|
|
61
|
+
isLoading: boolean;
|
|
62
|
+
refetch: () => Promise<unknown>;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
declare function useContest(contestId: string | undefined, checkParticipation?: boolean): {
|
|
66
|
+
contest: Contest | null;
|
|
67
|
+
participation: CheckParticipationResponse | null;
|
|
68
|
+
isLoading: boolean;
|
|
69
|
+
refetch: () => Promise<unknown>;
|
|
70
|
+
};
|
|
71
|
+
declare function useContestsList({ level, nextToken }?: {
|
|
72
|
+
level?: string;
|
|
73
|
+
nextToken?: string;
|
|
74
|
+
}): {
|
|
75
|
+
contests: Contest[];
|
|
76
|
+
nextToken: string | null;
|
|
77
|
+
isLoading: boolean;
|
|
78
|
+
refetch: () => Promise<unknown>;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
declare function useCourse(courseId: string | undefined): {
|
|
82
|
+
course: Course | null;
|
|
83
|
+
isLoading: boolean;
|
|
84
|
+
refetch: () => Promise<unknown>;
|
|
85
|
+
};
|
|
86
|
+
declare function useCourseItems(courseId: string | undefined): {
|
|
87
|
+
items: CourseItem[];
|
|
88
|
+
isLoading: boolean;
|
|
89
|
+
refetch: () => Promise<unknown>;
|
|
90
|
+
};
|
|
91
|
+
declare function useCourseLiveExams(courseId: string | undefined): {
|
|
92
|
+
exams: CourseLiveExam[];
|
|
93
|
+
isLoading: boolean;
|
|
94
|
+
refetch: () => Promise<unknown>;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
declare function useProgress(userId: string | undefined): {
|
|
98
|
+
subjectsProgress: UserSubjectProgress[];
|
|
99
|
+
chaptersProgress: UserChapterProgress[];
|
|
100
|
+
topicsProgress: UserTopicProgress[];
|
|
101
|
+
metrics: PracticeMetrics;
|
|
102
|
+
isLoading: boolean;
|
|
103
|
+
refetch: () => Promise<unknown>;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
type PracticeMode = "setup" | "practice" | "summary";
|
|
107
|
+
interface UsePracticeProps {
|
|
108
|
+
subjectId?: string;
|
|
109
|
+
chapterIds?: string[];
|
|
110
|
+
topicIds?: string[];
|
|
111
|
+
language?: string;
|
|
112
|
+
difficulty?: string;
|
|
113
|
+
userId?: string;
|
|
114
|
+
isCreator?: boolean;
|
|
115
|
+
}
|
|
116
|
+
declare function usePractice({ subjectId, chapterIds, topicIds, language, difficulty, userId, isCreator, }?: UsePracticeProps): {
|
|
117
|
+
mode: PracticeMode;
|
|
118
|
+
questions: QuestionObject[];
|
|
119
|
+
currentIdx: number;
|
|
120
|
+
currentQuestion: QuestionObject | null;
|
|
121
|
+
selectedOption: string | null;
|
|
122
|
+
isAnswered: boolean;
|
|
123
|
+
isCorrect: boolean | null;
|
|
124
|
+
score: number;
|
|
125
|
+
totalPracticed: number;
|
|
126
|
+
accuracy: number;
|
|
127
|
+
isLoading: boolean;
|
|
128
|
+
isValidating: boolean;
|
|
129
|
+
startPractice: () => Promise<void>;
|
|
130
|
+
selectOption: (optionId: string) => Promise<void>;
|
|
131
|
+
nextQuestion: () => void;
|
|
132
|
+
finishPractice: () => void;
|
|
133
|
+
resetPractice: () => void;
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
interface UseAvailablePublicExamsParams {
|
|
137
|
+
level?: string | null;
|
|
138
|
+
exploreType?: "Question" | "Pack";
|
|
139
|
+
enabled?: boolean;
|
|
140
|
+
client?: OrjokClient;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Hook to dynamically filter public exams by querying the GSI for existing questions or packs.
|
|
144
|
+
* Caches results via React Query to keep DynamoDB RCU negligible (< 9 RCUs per cold session, 0 RCU cached).
|
|
145
|
+
* Can be disabled at any time by setting `enabled: false`.
|
|
146
|
+
*/
|
|
147
|
+
declare function useAvailablePublicExams({ level, exploreType, enabled, client: directClient, }?: UseAvailablePublicExamsParams): {
|
|
148
|
+
availableExams: PublicExamOption[];
|
|
149
|
+
isLoading: boolean;
|
|
150
|
+
isSuccess: boolean;
|
|
151
|
+
refetch: () => Promise<unknown>;
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
interface UseNotificationsResult {
|
|
155
|
+
announcements: Announcement[];
|
|
156
|
+
userNotifications: UserNotification[];
|
|
157
|
+
timeline: NotificationTimelineItem[];
|
|
158
|
+
unreadCount: number;
|
|
159
|
+
isLoading: boolean;
|
|
160
|
+
refetch: () => Promise<unknown>;
|
|
161
|
+
markNotificationAsRead: (id: string) => Promise<unknown>;
|
|
162
|
+
deleteAnnouncement: (id: string) => Promise<unknown>;
|
|
163
|
+
deleteUserNotification: (id: string) => Promise<unknown>;
|
|
164
|
+
}
|
|
165
|
+
declare function useNotifications(userId: string | null | undefined, lastReadAnnouncementAt?: string | null): UseNotificationsResult;
|
|
166
|
+
|
|
167
|
+
export { NotificationTimelineItem, OrjokProvider, type UseNotificationsResult, useAvailablePublicExams, useContest, useContestsList, useCourse, useCourseItems, useCourseLiveExams, useCurriculum, useMediaUrl, useNotifications, useOrjokClient, usePackDetail, usePacks, usePractice, useProgress, useQuestions };
|
package/dist/hooks.d.ts
CHANGED
|
@@ -1,8 +1,167 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { O as OrjokClient } from './
|
|
3
|
-
import './storage-
|
|
2
|
+
import { O as OrjokClient, S as Subject, C as Chapter, T as Topic, L as Language, D as Difficulty, Q as QuestionObject, P as Pack, a as Contest, b as CheckParticipationResponse, c as Course, d as CourseItem, e as CourseLiveExam, U as UserSubjectProgress, f as UserChapterProgress, g as UserTopicProgress, h as PracticeMetrics, i as PublicExamOption, A as Announcement, j as UserNotification, N as NotificationTimelineItem } from './notification-BoqtkNrc.js';
|
|
3
|
+
import './storage-9pK8KwIM.js';
|
|
4
4
|
|
|
5
5
|
declare const OrjokProvider: react.Provider<OrjokClient | null>;
|
|
6
6
|
declare function useOrjokClient(): OrjokClient;
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
declare function useMediaUrl(key: string | null | undefined): {
|
|
9
|
+
url: string | null;
|
|
10
|
+
isLoading: boolean;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
interface UseCurriculumParams {
|
|
14
|
+
level?: string;
|
|
15
|
+
subjectId?: string;
|
|
16
|
+
chapterId?: string;
|
|
17
|
+
}
|
|
18
|
+
declare function useCurriculum({ level, subjectId, chapterId }?: UseCurriculumParams): {
|
|
19
|
+
subjects: Subject[];
|
|
20
|
+
chapters: Chapter[];
|
|
21
|
+
topics: Topic[];
|
|
22
|
+
isLoadingSubjects: boolean;
|
|
23
|
+
isLoadingChapters: boolean;
|
|
24
|
+
isLoadingTopics: boolean;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
interface UseQuestionsParams {
|
|
28
|
+
subjectId?: string;
|
|
29
|
+
chapterId?: string;
|
|
30
|
+
topicId?: string;
|
|
31
|
+
language?: Language | "All";
|
|
32
|
+
difficulty?: Difficulty | "All";
|
|
33
|
+
limit?: number;
|
|
34
|
+
nextToken?: string | null;
|
|
35
|
+
}
|
|
36
|
+
declare function useQuestions({ subjectId, chapterId, topicId, language, difficulty, limit, nextToken, }?: UseQuestionsParams): {
|
|
37
|
+
questions: QuestionObject[];
|
|
38
|
+
nextToken: string | null;
|
|
39
|
+
isLoading: boolean;
|
|
40
|
+
refetch: () => Promise<unknown>;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
interface UsePacksParams {
|
|
44
|
+
subjectId?: string;
|
|
45
|
+
chapterId?: string;
|
|
46
|
+
topicId?: string;
|
|
47
|
+
language?: Language | "All";
|
|
48
|
+
difficulty?: Difficulty | "All";
|
|
49
|
+
limit?: number;
|
|
50
|
+
nextToken?: string | null;
|
|
51
|
+
}
|
|
52
|
+
declare function usePacks({ subjectId, chapterId, topicId, language, difficulty, limit, nextToken, }?: UsePacksParams): {
|
|
53
|
+
packs: Pack[];
|
|
54
|
+
nextToken: string | null;
|
|
55
|
+
isLoading: boolean;
|
|
56
|
+
refetch: () => Promise<unknown>;
|
|
57
|
+
};
|
|
58
|
+
declare function usePackDetail(packId: string | undefined): {
|
|
59
|
+
pack: Pack | null;
|
|
60
|
+
questions: QuestionObject[];
|
|
61
|
+
isLoading: boolean;
|
|
62
|
+
refetch: () => Promise<unknown>;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
declare function useContest(contestId: string | undefined, checkParticipation?: boolean): {
|
|
66
|
+
contest: Contest | null;
|
|
67
|
+
participation: CheckParticipationResponse | null;
|
|
68
|
+
isLoading: boolean;
|
|
69
|
+
refetch: () => Promise<unknown>;
|
|
70
|
+
};
|
|
71
|
+
declare function useContestsList({ level, nextToken }?: {
|
|
72
|
+
level?: string;
|
|
73
|
+
nextToken?: string;
|
|
74
|
+
}): {
|
|
75
|
+
contests: Contest[];
|
|
76
|
+
nextToken: string | null;
|
|
77
|
+
isLoading: boolean;
|
|
78
|
+
refetch: () => Promise<unknown>;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
declare function useCourse(courseId: string | undefined): {
|
|
82
|
+
course: Course | null;
|
|
83
|
+
isLoading: boolean;
|
|
84
|
+
refetch: () => Promise<unknown>;
|
|
85
|
+
};
|
|
86
|
+
declare function useCourseItems(courseId: string | undefined): {
|
|
87
|
+
items: CourseItem[];
|
|
88
|
+
isLoading: boolean;
|
|
89
|
+
refetch: () => Promise<unknown>;
|
|
90
|
+
};
|
|
91
|
+
declare function useCourseLiveExams(courseId: string | undefined): {
|
|
92
|
+
exams: CourseLiveExam[];
|
|
93
|
+
isLoading: boolean;
|
|
94
|
+
refetch: () => Promise<unknown>;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
declare function useProgress(userId: string | undefined): {
|
|
98
|
+
subjectsProgress: UserSubjectProgress[];
|
|
99
|
+
chaptersProgress: UserChapterProgress[];
|
|
100
|
+
topicsProgress: UserTopicProgress[];
|
|
101
|
+
metrics: PracticeMetrics;
|
|
102
|
+
isLoading: boolean;
|
|
103
|
+
refetch: () => Promise<unknown>;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
type PracticeMode = "setup" | "practice" | "summary";
|
|
107
|
+
interface UsePracticeProps {
|
|
108
|
+
subjectId?: string;
|
|
109
|
+
chapterIds?: string[];
|
|
110
|
+
topicIds?: string[];
|
|
111
|
+
language?: string;
|
|
112
|
+
difficulty?: string;
|
|
113
|
+
userId?: string;
|
|
114
|
+
isCreator?: boolean;
|
|
115
|
+
}
|
|
116
|
+
declare function usePractice({ subjectId, chapterIds, topicIds, language, difficulty, userId, isCreator, }?: UsePracticeProps): {
|
|
117
|
+
mode: PracticeMode;
|
|
118
|
+
questions: QuestionObject[];
|
|
119
|
+
currentIdx: number;
|
|
120
|
+
currentQuestion: QuestionObject | null;
|
|
121
|
+
selectedOption: string | null;
|
|
122
|
+
isAnswered: boolean;
|
|
123
|
+
isCorrect: boolean | null;
|
|
124
|
+
score: number;
|
|
125
|
+
totalPracticed: number;
|
|
126
|
+
accuracy: number;
|
|
127
|
+
isLoading: boolean;
|
|
128
|
+
isValidating: boolean;
|
|
129
|
+
startPractice: () => Promise<void>;
|
|
130
|
+
selectOption: (optionId: string) => Promise<void>;
|
|
131
|
+
nextQuestion: () => void;
|
|
132
|
+
finishPractice: () => void;
|
|
133
|
+
resetPractice: () => void;
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
interface UseAvailablePublicExamsParams {
|
|
137
|
+
level?: string | null;
|
|
138
|
+
exploreType?: "Question" | "Pack";
|
|
139
|
+
enabled?: boolean;
|
|
140
|
+
client?: OrjokClient;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Hook to dynamically filter public exams by querying the GSI for existing questions or packs.
|
|
144
|
+
* Caches results via React Query to keep DynamoDB RCU negligible (< 9 RCUs per cold session, 0 RCU cached).
|
|
145
|
+
* Can be disabled at any time by setting `enabled: false`.
|
|
146
|
+
*/
|
|
147
|
+
declare function useAvailablePublicExams({ level, exploreType, enabled, client: directClient, }?: UseAvailablePublicExamsParams): {
|
|
148
|
+
availableExams: PublicExamOption[];
|
|
149
|
+
isLoading: boolean;
|
|
150
|
+
isSuccess: boolean;
|
|
151
|
+
refetch: () => Promise<unknown>;
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
interface UseNotificationsResult {
|
|
155
|
+
announcements: Announcement[];
|
|
156
|
+
userNotifications: UserNotification[];
|
|
157
|
+
timeline: NotificationTimelineItem[];
|
|
158
|
+
unreadCount: number;
|
|
159
|
+
isLoading: boolean;
|
|
160
|
+
refetch: () => Promise<unknown>;
|
|
161
|
+
markNotificationAsRead: (id: string) => Promise<unknown>;
|
|
162
|
+
deleteAnnouncement: (id: string) => Promise<unknown>;
|
|
163
|
+
deleteUserNotification: (id: string) => Promise<unknown>;
|
|
164
|
+
}
|
|
165
|
+
declare function useNotifications(userId: string | null | undefined, lastReadAnnouncementAt?: string | null): UseNotificationsResult;
|
|
166
|
+
|
|
167
|
+
export { NotificationTimelineItem, OrjokProvider, type UseNotificationsResult, useAvailablePublicExams, useContest, useContestsList, useCourse, useCourseItems, useCourseLiveExams, useCurriculum, useMediaUrl, useNotifications, useOrjokClient, usePackDetail, usePacks, usePractice, useProgress, useQuestions };
|