import { fetchState } from '@mui-toolpad-extended-tuni/main'; export type courseRole = "student" | "teacher" | "guest"; export type visibilityMode = "public" | "enrolled" | "private"; export type courseEventType = "lecture" | "exercise" | "exam" | "deadline" | "other"; export type courseEventFrequency = "daily" | "weekly" | "biweekly"; export type legalBasis = "consent" | "contract" | "legal_obligation" | "legitimate_interests"; export type enrollmentStatus = "enrolled" | "pending" | "rejected"; export interface EnrollmentData { courseId: string; userId: string; name: string; email: string; role: courseRole; status: enrollmentStatus; } interface CourseEvent { id: string; type: courseEventType; title: string; description?: string; startTime: string; endTime?: string; location?: string; teachers?: EnrollmentData[]; recurring?: { frequency: courseEventFrequency; until: string; exceptions?: string[]; }; maxParticipants?: number; requiresRegistration?: boolean; } export type courseRelationType = "prerequisite" | "recommended" | "parallel" | "continues_from" | "alternative_to" | "part_of" | "prepares_for"; export type courseLevel = "basic" | "intermediate" | "advanced"; export interface CourseRelation { code: string; type: courseRelationType; description?: string; required?: boolean; } export interface CourseRaw { title: string; description: string; code: string; instance: string; ltiLoginUrl?: string; services?: string[]; image?: { large: string; medium: string; thumbnail: string; }; startDate: string | null; endDate: string | null; visibility: { mode: visibilityMode; startDate: string | null; endDate: string | null; }; events: { [key in courseEventType]: CourseEvent[]; }; tags?: string[]; language?: string; dataProcessing: { purposes: string[]; retention: number; thirdPartyProcessors: { name: string; purpose: string; dataShared: string[]; }[]; specialCategories: boolean; legalBasis: legalBasis; }; enrollment?: { startDate: string | null; endDate: string | null; status: { open: boolean; maxStudents?: number; }; }; data?: { myData?: { role: courseRole; status: enrollmentStatus; }; enrollmentData?: EnrollmentData[]; }; relationships?: { prerequisites: CourseRelation[]; continuations: CourseRelation[]; alternatives: CourseRelation[]; related: CourseRelation[]; }; studyModule?: { name: string; order?: number; credits: number; level: courseLevel; }; } export interface Course extends CourseRaw { id: string; createdAt: string; updatedAt: string; } export declare const courseTemplate: CourseRaw; interface CourseStore { fetchState: fetchState; currentCourseUrl: string; currentCourse: Course | null; courseToUpdate: Course | null; courses: Course[]; currentCourseCode: string | null; setCourseToUpdate: (course: Course | null) => void; setCurrentCourseUrl: (url: string) => void; setCurrentCourse: (course: Course | null) => void; setCurrentCourseCode: (code: string | null) => void; updateStateCourse: (course: Course) => Promise; getCourseByUrl: (url: string) => void; getCourses: () => void; learningCourses: Course[]; learningCoursesOld: Course[]; teachingCourses: Course[]; teachingCoursesOld: Course[]; availableCourses: Course[]; } /** * Course management store with enhanced instance handling. * * @version 2.1.0 * @updates * - Added support for course codes and instances * - Enhanced course filtering capabilities * - Added currentCourseCode state * - Updated Course interface with new fields * - Added instance-specific state management * * @breaking-changes * - Updated Course interface requires code and instance fields * - Changed course identification logic to use code + instance */ declare const useCourseStore: import('zustand/traditional').UseBoundStoreWithEqualityFn>; export default useCourseStore;