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