Compare commits

..

No commits in common. "main" and "pdf" have entirely different histories.
main ... pdf

9 changed files with 1 additions and 357 deletions

View File

@ -1,2 +1 @@
## Application for sheduling classes in UPML
# Not finished: switched to [organization repository](https://github.com/SSH-KK/timetable-generator)
# Application for sheduling classes in UPML

View File

@ -1,36 +0,0 @@
{
"days": [
{
"events": [
{
"lessons": [0, 1, 2, 3, 4, 5]
},
{
"lessons": [0, 1, 2, 3, 4, 5]
}
],
"date": 5467546
},
{
"events": [
{
"lessons": [0, 1, 2, 3, 4, 5]
}
],
"date": 5467546
}
],
"cards": [
{
"subject": 3,
"room": 505,
"teacher": 1
}
],
"subjects": [
{
"title": "Math",
"teachers": ["Popov", "somebody"]
}
]
}

View File

@ -42,7 +42,6 @@
},
"dependencies": {
"@types/pdfmake": "^0.1.16",
"bootstrap-icons": "^1.2.1",
"pdfmake": "^0.1.68",
"react": "^15.0.0 || ^16.0.0 || ^17.0.0 ",
"react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 "

View File

@ -1,128 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
<link rel="stylesheet" href="test_html.css">
<title>Document</title>
</head>
<body>
<div class="wrapper">
<nav id="sidebar" class="active me-3">
<div class="sidebar-header">
<h3>Bootstrap Sidebar</h3>
</div>
<button type="button" id="sidebar-toggle" class="btn btn-secondary rounded-end">X</button>
</nav>
<div id="content" class="container mt-3">
<!-- <nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<button type="button" id="sidebarCollapse" class="btn btn-info">
<i class="fas fa-align-left"></i>
<span>Toggle Sidebar</span>
</button>
</div>
</nav> -->
<div class="row text-center">
<div class="col-md-4 rounded-2 shadow-sm">11</div>
<div class="col-md-4 rounded-2 shadow-sm">11</div>
<div class="col-md-4 rounded-2 shadow-sm">11</div>
</div>
<div class="row text-center border-bottom border-3">
<div class="col-md-2 rounded-2 shadow-sm">91</div>
<div class="col-md-2 rounded-2 shadow-sm">91</div>
<div class="col-md-2 rounded-2 shadow-sm">91</div>
<div class="col-md-2 rounded-2 shadow-sm">91</div>
<div class="col-md-2 rounded-2 shadow-sm">91</div>
<div class="col-md-2 rounded-2 shadow-sm">91</div>
</div>
<div class="row">
<div class="col-md-4 rounded-2 shadow-sm">
<div class="row">
<div class="col-md-6 text-center border-bottom border-start border-3">
<h6>Физика</h6>
<h6>505</h6>
<h6>Попов</h6>
</div>
<div class="col-md-6 d-flex align-items-center justify-content-center text-center border-bottom border-end border-start border-3">
<div class="dropdown">
<button class="btn btn-sm btn-success dropdown-toggle" type="button" id="dropdownMenuButton" data-bs-toggle="dropdown" aria-expanded="false">
Выберите пару
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
</ul>
</div>
</div>
</div>
<div class="d-grid gap-2 my-2">
<button class="btn btn-outline-primary btn-sm" type="button">Новые Пары</button>
</div>
</div>
<div class="col-md-4 rounded-2 shadow-sm">
<div class="row">
<div class="col-md-6 text-center border-bottom border-3">
<h6>Физика</h6>
<h6>505</h6>
<h6>Попов</h6>
</div>
<div class="col-md-6 d-flex align-items-center justify-content-center text-center border-bottom border-end border-start border-3">
<div class="dropdown">
<button class="btn btn-sm btn-success dropdown-toggle" type="button" id="dropdownMenuButton" data-bs-toggle="dropdown" aria-expanded="false">
Выберите пару
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
</ul>
</div>
</div>
</div>
<div class="d-grid gap-2 my-2">
<button class="btn btn-outline-primary btn-sm" type="button">Новые Пары</button>
</div>
</div>
<div class="col-md-4 rounded-2 shadow-sm">
<div class="row">
<div class="col-md-6 text-center border-bottom border-3">
<h6>Физика</h6>
<h6>505</h6>
<h6>Попов</h6>
</div>
<div class="col-md-6 d-flex align-items-center justify-content-center text-center border-bottom border-end border-start border-3">
<div class="dropdown">
<button class="btn btn-sm btn-success dropdown-toggle" type="button" id="dropdownMenuButton" data-bs-toggle="dropdown" aria-expanded="false">
Выберите пару
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
</ul>
</div>
</div>
</div>
<div class="d-grid gap-2 my-2">
<button class="btn btn-outline-primary btn-sm" type="button">Новые Пары</button>
</div>
</div>
<!-- <div class="col-md-4 rounded-2 shadow-sm">dfsfsfesfs</div>
<div class="col-md-4 rounded-2 shadow-sm">dfsfsfesfs</div> -->
</div>
<div class="d-grid gap-2 my-2">
<button class="btn btn-outline-primary btn-sm" type="button">Новый День</button>
</div>
</div>
</div>
<script type="text/javascript">
document.querySelector('#sidebar-toggle').addEventListener('click', ()=>{
document.querySelector('#sidebar').classList.toggle('active')
})
</script>
</body>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-ygbV9kiqUc6oa4msXn9868pTtWMgiQaeYH7/t7LECLbyPA2x65Kgf80OJFdroafW" crossorigin="anonymous"></script>
</html>

View File

@ -1,93 +0,0 @@
import { useState } from "react";
import {
TimetableT,
UseTimetableHookFT,
CreateCardFT,
CreateSubjectFT,
CreateDayFT,
AddEventFT,
AddLessonFT,
DayT,
CardT,
SubjectT,
} from "./types/timetable";
import { initialEventLessonsGenrator } from "./utils/timetable";
export const useTimetable: UseTimetableHookFT = () => {
const [cardState, setCardState] = useState<CardT[]>([]);
const [dayState, setDayState] = useState<DayT[]>([]);
const [subjectState, setSubjectState] = useState<SubjectT[]>([]);
// const [startDateState, setStartDateState] = useState<number>(0)
const createSubject: CreateSubjectFT = (title, teachers) => {
setSubjectState(prev => [...prev, { title, teachers }]);
};
const createCard: CreateCardFT = (subject, teacher, room) => {
setCardState(prev => [...prev, { subject, teacher, room }]);
};
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,
};
};

View File

@ -1,7 +1,3 @@
.title {
color: red;
}
/*just test sunlime merge*/
body {
background-color: blue;
}

View File

@ -1,38 +0,0 @@
.wrapper {
display: flex;
width: 100%;
align-items: stretch;
}
#sidebar {
min-width: 18%;
max-width: 18%;
min-height: 100vh;
position: relative;
background-color: #adb5bd;
transition: all 0.3s;
}
#sidebar {
margin-left: -18%;
}
#sidebar.active {
margin-left: 0px;
}
#sidebar-toggle {
position: absolute;
border-radius: 0;
top: 0;
left: 100%;
}
@media (max-width: 768px) {
#sidebar {
margin-left: -250px;
}
#sidebar.active {
margin-left: 0;
}
}

View File

@ -1,53 +0,0 @@
export type TimetableT = {
days: DayT[];
cards: CardT[];
subjects: SubjectT[];
};
export type DayT = {
events: EventT[];
date: number; // epoch time
};
type EventT = {
lessons: number[][]; // IDs
};
export type CardT = {
subject: number; // ID
room: number; // Number
teacher: number; // ID in subject
};
export type SubjectT = {
title: string;
teachers: string[]; // teachers allowed for this subject
};
export type CreateSubjectFT = (title: string, teachers: string[]) => void;
export type CreateCardFT = (
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;
};

View File

@ -1,2 +0,0 @@
export const initialEventLessonsGenrator = () =>
Array(6).map<number[]>(() => [0, 0]);