diff --git a/src/hooks.ts b/src/hooks.ts index 71e2a36..b51a2a6 100644 --- a/src/hooks.ts +++ b/src/hooks.ts @@ -11,55 +11,83 @@ import { CardT, SubjectT, } from "./types/timetable"; -import { initialEventLessonsGenrator } from './utils/timetable' +import { initialEventLessonsGenrator } from "./utils/timetable"; export const useTimetable: UseTimetableHookFT = () => { - const [cardState, setCardState] = useState([]) - const [dayState, setDayState] = useState([]) - const [subjectState, setSubjectState] = useState([]) + const [cardState, setCardState] = useState([]); + const [dayState, setDayState] = useState([]); + const [subjectState, setSubjectState] = useState([]); // const [startDateState, setStartDateState] = useState(0) const createSubject: CreateSubjectFT = (title, teachers) => { - setSubjectState((prev) => ([...prev, { title, teachers }])) + setSubjectState(prev => [...prev, { title, teachers }]); }; const createCard: CreateCardFT = (subject, teacher, room) => { - setCardState((prev) => ([...prev, { subject, teacher, room }])) + setCardState(prev => [...prev, { subject, teacher, room }]); }; - const createDay: CreateDayFT = (date) => { - setDayState((prev) => [...prev, { date, events: [] }]) - } + const createDay: CreateDayFT = date => { + setDayState(prev => [...prev, { date, events: [] }]); + }; - const addEvent: AddEventFT = (dayId) => { - setDayState((days) => days.map((day, i) => (i == dayId) ? { ...day, events: [...day.events, { lessons: initialEventLessonsGenrator() }] } : day)) - } - - const addLesson: AddLessonFT = (dayId, eventId, groupId, isPair, lessonId, lessonNumber) => { - setDayState((days) => days.map( - (day, dayIndex) => ( - (dayIndex == dayId) ? { - ...day, - events: day.events.map( - (event, eventIndex) => ( - (eventIndex == eventId) ? { - lessons: event.lessons.map( - (lesson, lessonIndex) => ( - (lessonIndex == groupId) ? ( - (isPair) ? [lessonId, lessonId] : lesson.map((lessonElement, lessonElementIndex) => ( - (lessonElementIndex == lessonNumber) ? lessonId : lessonElement - )) - ) : lesson - ) - ) - } : event - ) - ) - } : day + const addEvent: AddEventFT = dayId => { + setDayState(days => + days.map((day, i) => + i == dayId + ? { + ...day, + events: [ + ...day.events, + { lessons: initialEventLessonsGenrator() }, + ], + } + : day ) - )) - } + ); + }; + const addLesson: AddLessonFT = ( + dayId, + eventId, + groupId, + isPair, + lessonId, + lessonNumber + ) => { + setDayState(days => + days.map((day, dayIndex) => + dayIndex == dayId + ? { + ...day, + events: day.events.map((event, eventIndex) => + eventIndex == eventId + ? { + lessons: event.lessons.map((lesson, lessonIndex) => + lessonIndex == groupId + ? isPair + ? [lessonId, lessonId] + : lesson.map((lessonElement, lessonElementIndex) => + lessonElementIndex == lessonNumber + ? lessonId + : lessonElement + ) + : lesson + ), + } + : event + ), + } + : day + ) + ); + }; - return { state: { cards: cardState, subjects: subjectState, days: dayState }, createCard, createSubject, createDay, addLesson }; + return { + state: { cards: cardState, subjects: subjectState, days: dayState }, + createCard, + createSubject, + createDay, + addLesson, + }; }; diff --git a/src/types/timetable.ts b/src/types/timetable.ts index 2b8d64d..b75e80f 100644 --- a/src/types/timetable.ts +++ b/src/types/timetable.ts @@ -36,7 +36,14 @@ export type CreateDayFT = (date: number) => void; export type AddEventFT = (dayId: number) => void; -export type AddLessonFT = (dayId: number, eventId: number, groupId:number, isPair: boolean, lessonId: number, lessonNumber?: number) => void; +export type AddLessonFT = ( + dayId: number, + eventId: number, + groupId: number, + isPair: boolean, + lessonId: number, + lessonNumber?: number +) => void; export type UseTimetableHookFT = () => { createSubject: CreateSubjectFT; diff --git a/src/utils/timetable.ts b/src/utils/timetable.ts index 97126ee..0c8d40e 100644 --- a/src/utils/timetable.ts +++ b/src/utils/timetable.ts @@ -1,2 +1,2 @@ export const initialEventLessonsGenrator = () => - Array(6).map(() => [0, 0]) \ No newline at end of file + Array(6).map(() => [0, 0]);