created Timetable state logic
This commit is contained in:
parent
d008eedce0
commit
adaf786ddd
@ -3,11 +3,9 @@
|
||||
{
|
||||
"events": [
|
||||
{
|
||||
"time": 0,
|
||||
"lessons": [0, 1, 2, 3, 4, 5]
|
||||
},
|
||||
{
|
||||
"time": 1,
|
||||
"lessons": [0, 1, 2, 3, 4, 5]
|
||||
}
|
||||
],
|
||||
|
60
src/hooks.ts
60
src/hooks.ts
@ -4,22 +4,62 @@ import {
|
||||
UseTimetableHookFT,
|
||||
CreateCardFT,
|
||||
CreateSubjectFT,
|
||||
CreateDayFT,
|
||||
AddEventFT,
|
||||
AddLessonFT,
|
||||
DayT,
|
||||
CardT,
|
||||
SubjectT,
|
||||
} from "./types/timetable";
|
||||
import { initialEventLessonsGenrator } from './utils/timetable'
|
||||
|
||||
export const useTimetable: UseTimetableHookFT = () => {
|
||||
const [state, setState] = useState<TimetableT>({
|
||||
cards: [],
|
||||
days: [],
|
||||
subjects: [],
|
||||
});
|
||||
const [cardState, setCardState] = useState<CardT[]>([])
|
||||
const [dayState, setDayState] = useState<DayT[]>([])
|
||||
const [subjectState, setSubjectState] = useState<SubjectT[]>([])
|
||||
// const [startDateState, setStartDateState] = useState<number>(0)
|
||||
|
||||
const createSubject: CreateSubjectFT = () => {
|
||||
console.log();
|
||||
const createSubject: CreateSubjectFT = (title, teachers) => {
|
||||
setSubjectState((prev) => ([...prev, { title, teachers }]))
|
||||
};
|
||||
|
||||
const createCard: CreateCardFT = () => {
|
||||
console.log();
|
||||
const createCard: CreateCardFT = (subject, teacher, room) => {
|
||||
setCardState((prev) => ([...prev, { subject, teacher, room }]))
|
||||
};
|
||||
|
||||
return { state, createCard, createSubject };
|
||||
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
|
||||
)
|
||||
))
|
||||
}
|
||||
|
||||
|
||||
return { state: { cards: cardState, subjects: subjectState, days: dayState }, createCard, createSubject, createDay, addLesson };
|
||||
};
|
||||
|
@ -4,22 +4,22 @@ export type TimetableT = {
|
||||
subjects: SubjectT[];
|
||||
};
|
||||
|
||||
type DayT = {
|
||||
export type DayT = {
|
||||
events: EventT[];
|
||||
date: number; // epoch time
|
||||
};
|
||||
|
||||
type EventT = {
|
||||
lessons: number[]; // IDs
|
||||
lessons: number[][]; // IDs
|
||||
};
|
||||
|
||||
type CardT = {
|
||||
export type CardT = {
|
||||
subject: number; // ID
|
||||
room: number; // Number
|
||||
teacher: number; // ID in subject
|
||||
};
|
||||
|
||||
type SubjectT = {
|
||||
export type SubjectT = {
|
||||
title: string;
|
||||
teachers: string[]; // teachers allowed for this subject
|
||||
};
|
||||
@ -27,13 +27,20 @@ type SubjectT = {
|
||||
export type CreateSubjectFT = (title: string, teachers: string[]) => void;
|
||||
|
||||
export type CreateCardFT = (
|
||||
subjectID: number,
|
||||
teacherID: number,
|
||||
subject: number,
|
||||
teacher: number,
|
||||
room: number
|
||||
) => void;
|
||||
|
||||
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 UseTimetableHookFT = () => {
|
||||
createSubject: CreateSubjectFT;
|
||||
createCard: CreateCardFT;
|
||||
createDay: CreateCardFT;
|
||||
state: TimetableT;
|
||||
};
|
||||
|
2
src/utils/timetable.ts
Normal file
2
src/utils/timetable.ts
Normal file
@ -0,0 +1,2 @@
|
||||
export const initialEventLessonsGenrator = () =>
|
||||
Array(6).map<number[]>(() => [0, 0])
|
Loading…
x
Reference in New Issue
Block a user