'use client' import { useState } from 'react' import { useTheme } from '@/lib/ThemeContext' import { TeacherUnavailableDayEditor } from './TeacherUnavailableDayEditor' import { TeacherUnavailableWindowEditor } from './TeacherUnavailableWindowEditor' import { TeacherMaxHoursDayEditor, TeacherMaxHoursWeekEditor } from './TeacherMaxHoursEditors' import { TeacherExcludedSubjectEditor, TeacherExcludedRoomEditor } from './TeacherExclusionEditors' import { SubjectMaxConsecutiveEditor } from './SubjectMaxConsecutiveEditor' import { SubjectPreferredPeriodEditor } from './SubjectPreferredPeriodEditor' import { SubjectMinDayGapEditor, SubjectContiguousWhenRepeatedEditor, SubjectDoubleLessonEditor, } from './SubjectSimpleEditors' import { ClassMaxHoursDayEditor, ClassNoGapsEditor } from './ClassEditors' import { RoomRequiresTypeEditor, RoomUnavailableEditor } from './RoomEditors' type RuleType = | 'teacher-unavailable-day' | 'teacher-unavailable-window' | 'teacher-max-hours-day' | 'teacher-max-hours-week' | 'teacher-excluded-subject' | 'teacher-excluded-room' | 'subject-min-day-gap' | 'subject-max-consecutive' | 'subject-contiguous-when-repeated' | 'subject-preferred-period' | 'subject-double-lesson' | 'class-max-hours-day' | 'class-no-gaps' | 'room-requires-type' | 'room-unavailable' interface RuleGroup { group: string rules: { id: RuleType; label: string }[] } const RULE_GROUPS: RuleGroup[] = [ { group: 'Lehrer', rules: [ { id: 'teacher-unavailable-day', label: 'Tag nicht verfuegbar' }, { id: 'teacher-unavailable-window', label: 'Zeitfenster nicht verfuegbar' }, { id: 'teacher-max-hours-day', label: 'Max. Stunden / Tag' }, { id: 'teacher-max-hours-week', label: 'Max. Stunden / Woche' }, { id: 'teacher-excluded-subject', label: 'Fach ausgeschlossen' }, { id: 'teacher-excluded-room', label: 'Raum ausgeschlossen' }, ], }, { group: 'Fach', rules: [ { id: 'subject-max-consecutive', label: 'Max. Stunden am Stueck' }, { id: 'subject-preferred-period', label: 'Bevorzugter Stunden-Bereich' }, { id: 'subject-min-day-gap', label: 'Min. Tagesabstand' }, { id: 'subject-contiguous-when-repeated', label: 'Bei Mehrfach: zusammenhaengend' }, { id: 'subject-double-lesson', label: 'Doppelstunde bevorzugt' }, ], }, { group: 'Klasse', rules: [ { id: 'class-max-hours-day', label: 'Max. Stunden / Tag' }, { id: 'class-no-gaps', label: 'Keine Freistunden' }, ], }, { group: 'Raum', rules: [ { id: 'room-requires-type', label: 'Fach benoetigt Raumtyp' }, { id: 'room-unavailable', label: 'Raum nicht verfuegbar' }, ], }, ] const EDITORS: Record = { 'teacher-unavailable-day': TeacherUnavailableDayEditor, 'teacher-unavailable-window': TeacherUnavailableWindowEditor, 'teacher-max-hours-day': TeacherMaxHoursDayEditor, 'teacher-max-hours-week': TeacherMaxHoursWeekEditor, 'teacher-excluded-subject': TeacherExcludedSubjectEditor, 'teacher-excluded-room': TeacherExcludedRoomEditor, 'subject-min-day-gap': SubjectMinDayGapEditor, 'subject-max-consecutive': SubjectMaxConsecutiveEditor, 'subject-contiguous-when-repeated': SubjectContiguousWhenRepeatedEditor, 'subject-preferred-period': SubjectPreferredPeriodEditor, 'subject-double-lesson': SubjectDoubleLessonEditor, 'class-max-hours-day': ClassMaxHoursDayEditor, 'class-no-gaps': ClassNoGapsEditor, 'room-requires-type': RoomRequiresTypeEditor, 'room-unavailable': RoomUnavailableEditor, } export function RegelnHub() { const { isDark } = useTheme() const [active, setActive] = useState('teacher-unavailable-day') const Editor = EDITORS[active] return (
) }