Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
7f94c2e
init: init project
Aug 31, 2020
d730074
feat: S-2-serverCommunication
tritonJS826 Sep 2, 2020
75b29f7
feature/S-2-serverCommunication(handle errors)
tritonJS826 Sep 2, 2020
22649dd
Merge pull request #2 from not-SAINT/feature/S-2-serverCommunication
tritonJS826 Sep 2, 2020
8159693
feat: S-6-create-store
Sep 4, 2020
ca5557b
refactor:S-6-create-store
Sep 5, 2020
bc086ae
Merge pull request #4 from not-SAINT/feature/S-6-create-storee
ZhuchkouAA Sep 5, 2020
bbd1436
refactor: replace inject with hook useStores
Sep 5, 2020
d68ac6b
Merge pull request #6 from not-SAINT/feature/S-6-create-store
ZhuchkouAA Sep 5, 2020
f9b58a4
feature/S-2-serverCommunication(handle errors)
tritonJS826 Sep 2, 2020
2932887
feat: S-15-error-boundary-component
tritonJS826 Sep 2, 2020
4d3d421
Merge pull request #3 from not-SAINT/feature/S-15-error-boundary-comp…
tritonJS826 Sep 7, 2020
cc3f7ef
S-3: add ScheduleTable view
not-SAINT Sep 8, 2020
a0031ed
feat: S-16-exportComponentAsPdf
tritonJS826 Sep 7, 2020
d24955c
feat: S-16-exportComponentAsPdf
tritonJS826 Sep 8, 2020
c2d9c71
Merge branch 'schedule' of https://github.com/not-SAINT/schedule into…
not-SAINT Sep 9, 2020
452beb4
Merge pull request #7 from not-SAINT/feature/S-16-exportComponentAsPdf
tritonJS826 Sep 9, 2020
3e34918
feature/S-8-component-map add map
bahnovak Sep 9, 2020
dfe52d4
feature/S-8-component-map add search
bahnovak Sep 10, 2020
62bd1aa
feat: S-12-control-panel
Sep 8, 2020
feeb254
Merge pull request #8 from not-SAINT/feature/S-12-control-panel
ZhuchkouAA Sep 11, 2020
8737818
S-3: add colored tags
not-SAINT Sep 11, 2020
1b73dc5
S-3: add column filter
not-SAINT Sep 11, 2020
65f19d1
feat/S-6.1 add deadline virtual event
Sep 11, 2020
936cdc2
S-3: add control panel
not-SAINT Sep 11, 2020
b65713f
fix: S-2-serverCommunication add headers
tritonJS826 Sep 13, 2020
7859926
Merge pull request #11 from not-SAINT/fix/S-2-serverCommunicatio-add-…
tritonJS826 Sep 13, 2020
7bf3ccf
feature: S-22-add-router
not-SAINT Sep 11, 2020
e972e11
feature/S-8-component-map refactoring code
bahnovak Sep 14, 2020
6860b20
Merge pull request #9 from not-SAINT/feature/S-8-component-map
bahnovak Sep 14, 2020
7f685de
Merge pull request #12 from not-SAINT/feature/S-22-add-router
not-SAINT Sep 15, 2020
b0f462f
Merge pull request #10 from not-SAINT/feature/S-6.1-create-store
not-SAINT Sep 15, 2020
800ea34
S-3: add editOn filter
not-SAINT Sep 15, 2020
8a705cc
Merge branch 'schedule' into feature/S-3-schedule-as-table
not-SAINT Sep 15, 2020
602d72f
Merge pull request #14 from not-SAINT/feature/S-3-schedule-as-table
not-SAINT Sep 15, 2020
6a9cdd4
S-18: add prototype event page
not-SAINT Sep 16, 2020
959872c
Merge pull request #15 from not-SAINT/feature/S-18-Event-page
not-SAINT Sep 17, 2020
825dc07
S-12.1: add viewMode, task filter
not-SAINT Sep 17, 2020
4d32204
Merge pull request #16 from not-SAINT/feature/S-12.1-control-panel
not-SAINT Sep 17, 2020
ce9131f
add calendar
bahnovak Sep 19, 2020
1d0c0d4
use data
bahnovak Sep 19, 2020
fddaba0
server schedule
bahnovak Sep 20, 2020
b9b9bac
refactoring code, add tads and space
bahnovak Sep 22, 2020
5689f00
S-18.1: add editable for event page
not-SAINT Sep 22, 2020
94d6ce1
S-18.1: add work with server
not-SAINT Sep 22, 2020
7aaad35
Merge pull request #18 from not-SAINT/feature/S-18.1-Event-page-with-…
not-SAINT Sep 22, 2020
a3b9479
Merge pull request #17 from not-SAINT/ScheduleCalendar
not-SAINT Sep 22, 2020
c7d3853
S-5.1: edit calendar
not-SAINT Sep 22, 2020
de08697
Merge pull request #19 from not-SAINT/feature/S-5.1-calendar-edit
not-SAINT Sep 22, 2020
01d7abc
fix-13/fix bugs
Sep 23, 2020
e7e017a
S-14, 24:new date dormat, dropdawn timezone
tritonJS826 Sep 23, 2020
4c3f5a4
S-14, 24:new date format, dropdawn timezone
tritonJS826 Sep 23, 2020
fa2e88f
S-25: add delete button
not-SAINT Sep 23, 2020
5fa02de
S25: fix url
not-SAINT Sep 23, 2020
741b4bd
Merge pull request #21 from not-SAINT/feature/S25-add-delete-event-bu…
not-SAINT Sep 23, 2020
d0c1efc
Merge branch 'feature/S-24,S14-new-date-format' into feature/S-24,S14…
not-SAINT Sep 23, 2020
1095cd5
S-14, 24: fix date formats
not-SAINT Sep 23, 2020
82c3f7b
Merge branch 'schedule' into feature/S-24,S14-new-date-format
not-SAINT Sep 23, 2020
ad2af39
Merge pull request #20 from not-SAINT/feature/S-24,S14-new-date-format
not-SAINT Sep 23, 2020
8f40fa6
feat/S-4-schedule-as-list
Sep 11, 2020
a1eedc9
feat-4: add list
Sep 21, 2020
fcb56a6
feat-4: edit list
Sep 23, 2020
26723a3
S-26: update store
tritonJS826 Sep 24, 2020
ce33fe9
Merge pull request #22 from not-SAINT/feature/S-26-update-store
not-SAINT Sep 24, 2020
0b15611
S-4: fix style, refactor code
not-SAINT Sep 26, 2020
cb5f953
Merge pull request #23 from not-SAINT/feature/S-4-schedule-as-list
not-SAINT Sep 26, 2020
a910b72
S-17: add favicon
not-SAINT Sep 27, 2020
a2f1460
S-17: delete unused feature
not-SAINT Sep 27, 2020
c232561
Merge pull request #24 from not-SAINT/chore/S-17-add-favicon-clear-ga…
not-SAINT Sep 27, 2020
c3fcf58
Merge pull request #25 from not-SAINT/fix/F-13/fix-bugs
not-SAINT Sep 27, 2020
7ef686e
S-26: add documentation
not-SAINT Sep 27, 2020
4010719
Merge pull request #26 from not-SAINT/docs/S-26-documentation
not-SAINT Sep 27, 2020
72e6b8a
docs: update README.md - fix link to Documentation
not-SAINT Sep 27, 2020
68a0b3c
Merge pull request #28 from not-SAINT/S-26.1-Documentation
not-SAINT Sep 27, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@
[Task](https://github.com/rolling-scopes-school/tasks/blob/master/tasks/schedule.md)

[Schedule](https://schedule-team34.netlify.app)

[Documentation](./schedule/Documentation.md)
3 changes: 3 additions & 0 deletions schedule/.eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"ignorePatterns": ["temp.js", "**/vendor/*.js"],
}
29 changes: 29 additions & 0 deletions schedule/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
module.exports = {
parser: '@typescript-eslint/parser', // Specifies the ESLint parser
parserOptions: {
ecmaVersion: 2020, // Allows for the parsing of modern ECMAScript features
sourceType: 'module', // Allows for the use of imports
ecmaFeatures: {
jsx: true, // Allows for the parsing of JSX
},
project: './tsconfig.json',
},
settings: {
react: {
version: 'detect', // Tells eslint-plugin-react to automatically detect the version of React to use
},
},
extends: [
'plugin:react/recommended', // Uses the recommended rules from @eslint-plugin-react
'plugin:@typescript-eslint/recommended', // Uses the recommended rules from the @typescript-eslint/eslint-plugin
'prettier/@typescript-eslint', // Uses eslint-config-prettier to disable ESLint rules from @typescript-eslint/eslint-plugin that would conflict with prettier
'plugin:prettier/recommended', // Enables eslint-plugin-prettier and eslint-config-prettier. This will display prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array.
'airbnb-typescript',
'prettier',
],
rules: {
// Place to specify ESLint rules. Can be used to overwrite rules specified from the extended configs
// e.g. "@typescript-eslint/explicit-function-return-type": "off",
},
plugins: ['react', 'prettier'],
};
24 changes: 24 additions & 0 deletions schedule/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# production
/build

# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
.idea

npm-debug.log*
yarn-debug.log*
yarn-error.log*
7 changes: 7 additions & 0 deletions schedule/.prettierrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module.exports = {
semi: true,
trailingComma: 'all',
singleQuote: true,
printWidth: 120,
tabWidth: 2,
};
6 changes: 6 additions & 0 deletions schedule/.stylelintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"extends": "stylelint-config-sass-guidelines",
"rules": {
"selector-class-pattern": null
}
}
145 changes: 145 additions & 0 deletions schedule/Documentation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
# Schedule для RS School

Данный репозиторий содержит возможную реализацию новой версии расписания для приложения [The Rolling Scopes](https://app.rs.school/). Ниже подробно расписаны основные элементы реализации и логика работы расписания.

## Основные компоненты

#### Панель управления - ControlPanel

Панель управления содержит основные элементы управления внешним видом расписания.

- Кнопка смены режима вида распиания меняет иконку на выбранный вид.
- Выбор часового пояса учитывается при любом виде расписания.
- Есть возможность сохранить выбранные данные расписания в файл в формате pdf.
- Hide old events прячет неактуальные события, которые уже прошли.
- Переключение в ролей студент/ментор
- Кнопка добавления нового события, при активной роли **ментор**.

#### Вид расписания: таблица - ScheduleTable

Самый информативный вид расписания. Содержит максимальную информацию о событиях расписания. Имеется возможность настроить показываемые колонки, за исключением основных: **Date % time**, **Type**, **Name**.

###### Данные колонок:

- информация о недавних правках события (lastUpdatedDate). Для обращения внимания на те события, где что-то изменилось с возможного последнего просмотра студентом
- Date % time - дата и время начала события
- Time left - для событий с дедлайном считается количество дней/часов до наступления дедлайна
- Type - тип события, выбирается из подобранного списка основных видов заданий, для которых также определены цвета из палитры antd
- code jam': 'lime'
- codewars: 'magenta'
- cross-check: 'blue'
- deadline: 'red'
- interview: 'orange'
- review: 'yellow'
- self education: 'cyan'
- special: 'gold'
- task: 'green'
- test: 'volcano'
- webinar: 'purple'
- Special - дополнительные теги для уточнения типа задания. Для удобства есть подобранный список самых популярных вариантов **'optional', 'live', 'record', 'js', 'node.js', 'react', 'angular', 'css', 'html', 'git', 'markdown', 'task'**. Но ментор может добавить и недостающие при редактировании события.
- Name - Название события и ссылка на страницу события.
- Url - основная ссылка события. Если это ссылка на github или youtube, то иконка будет соответствующая
- Приблизительное время в часах, которое будет длиться событие. Или сколько времени может потребоваться на выполнение задания.
- Organizer - имя на github организатора события
- Place - место проведения события. Заполнено, если событие офлайн и организатор заполнил данные в специальном поле.

#### Вид расписания: список - ScheduleList

Сокращенный вид расписания в виде списка по неделям. Удобен при просмотре расписания с мобильных устройств. Отображаются только основные данные - дата, тип и название события. Так же отменяется количество событий в день.

#### Вид расписания: календарь - ScheduleCalendar

Еще один вид расписания - календарь. Позволяет наглядно оценить ожидающие в ближайшее время события.

#### Страница задания - EventPage

Страница расписания. Отображает всю имеющуюся информацию по заданию. Отличается по виду для ролей студент/ментор.

###### Роль - студент

Для пользователя как студент страница проста - отображаются только те поля, которые содержат данные, заполненные организатором.

###### Роль - ментор

В роли _ментор_ страница превращается в конструктор. Все доступные для заполнения поля отображаются в зависимости от выбранных контролей. И при заполнении их, они станут видны в роли _студент_.

##### Контроли

- Event visible - добавляемое событие можно сделать невидимым для студентов. Сохраняется в поле (isOpen)
- Event offline - если событие оффлан, появляются поля для внесение адреса места и координат события. Без точных координат карта будет указывать на дефолтное место (г. Минск).
- Disable feedback - Доступность поля отзыва для студентов. В роли ментора это поле отображается сохранненные фидбеки по событию (функция в разработке)
- With deadline - если событие с дедлайном, переключатель нужно поставить в верную позицию.
- Update - если обновилось что-то в задании и нужно сохранить изменения
- Create new as copy - для быстрого добавления похожего задания или копии с прошлого набора - можно редактировать старое задание и сразу создать новое.
- Delete - все просто - удаляем событие.

##### Поля для редактирования

- Имя события - все просто, указывается название события.
- Дата начала и конца (при наличии включенного дедлайна). Внимание - необходимо подтверждать выбор каждой даты кнопкой **Ok**.
- Выбор курса - можно выбрать из списка доступных курсов.
- Тип события - выбирается из заранее подобранного списка.
- Специальные теги события - кастомизируем событие уточняющими тегами.
- Organizer - заполняется Имя пользователя на github.
- Hours - оценочная длительность события или необходимое время на выполнение
- Days(Hours) left: - автоматически вычисляемое поле, сколько времени будет до дедлайна для событий с дедлайном.
- Event main link - основвная ссылка на событие. Если это будет ссылка на описание задания с github, то все описание задания будет загружено и отобразится на странице события в секции Event detailed description. Это избавляет от необходимости повторно описывать задание.
- Event description - описание задания. Поддерживается и рекомендуется **markdown**.
- Event detailed description - при основной ссылке события с описанием на github.
- Location - поля для заполнение места оффлайн события. Координаты места вводятся через запятую в формате "широта","долгота".

## Детали реализации

##### Основные используемые библиотеки и технологии

- react
- mobx
- antd
- typescript

##### Вспомогательные используемые библиотеки и технологии

- html2canvas
- jspdf
- react-yandex-maps
- classnames
- moment

### Общие принципы работы

Все данные расписания представляет собой массив объектов событий вида:

```javascript
interface IEvent {
id: string;
name: string;
description: string;
descriptionUrl: string;
type: string;
specialTags?: string;
timeZone: string;
dateTime: number;
place: string;
comment: string;
deadline: number;
hours?: string;
lastUpdatedDate?: number;
isOpen: boolean;
isVisible?: boolean;
isFeedbackEnabled?: boolean;
organizerId?: string;
course?: string;
}
```

При запуске приложения все данные расписаний разных курсов загружаются в стор приложения. Так же при запуске читается локальное хранилище браузера пользователя на предмет наличия настроек приложения. С учетом настроек применяются фильтры для отображения только выбранных событий. Также генерируются события - **deadline** на основании наличия даты дедлайна (deadline > 0). Отдельно события этого типа не хранятся.

Дальнейшая работа приложения зависит от действий пользователя и роли пользователя.

###### Роль - студент

В данном режиме пользователю доступны только настройки внешнего вида приложения. Просмотр событий по выбранным фильтрам. Все изменения настроек сохраняются в стор и локальное хранилище браузера пользователя. Допольнительного обмена данными с сервером нет.

###### Роль - ментор

В этом режиме появляются инструмены для внесения изменений в расписание. Все изменения вносятся со страницы события - **EventPage**. При внесении изменений данные по редактируемому событию обновляются сразу в и на сервер, и в стор, что позволяется не перегружать все данные заново и не отнимать время пользователя.
44 changes: 44 additions & 0 deletions schedule/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).

## Available Scripts

In the project directory, you can run:

### `yarn start`

Runs the app in the development mode.<br />
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.

The page will reload if you make edits.<br />
You will also see any lint errors in the console.

### `yarn test`

Launches the test runner in the interactive watch mode.<br />
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.

### `yarn build`

Builds the app for production to the `build` folder.<br />
It correctly bundles React in production mode and optimizes the build for the best performance.

The build is minified and the filenames include the hashes.<br />
Your app is ready to be deployed!

See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.

### `yarn eject`

**Note: this is a one-way operation. Once you `eject`, you can’t go back!**

If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.

Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.

You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.

## Learn More

You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).

To learn React, check out the [React documentation](https://reactjs.org/).
Loading