/liga-traineeship-project

Лига Цифровой Экономики_Стажировка_Итоговый проект

Primary LanguageTypeScript

React todo project

Николай Сосин

Лига Цифровой экономики

npm run dev - запустить проект

Пример итогового проекта

https://todo-liga-internship.vercel.app/

Деплой на GitHub Pages

gh-pages

Технологии и инструменты, которые используются в проекте

  • Языки/фреймворки/библиотеки: Typescript, React, React-router-dom, Redux
  • API: Axios, Swagger, Postman
  • Работа с формами: React Hook Form, Yup
  • Сборка: Webpack
  • Code-style: Eslint, Prettier

Структура шаблона

.
├── .vscode                                  # конфигурация под vs-code
├── dist                                     # папка для билда (появится после npm run build)
├── config
│   ├── constants.js                           # константные пути к файлам и папкам
│   ├── css.modules.config.js                   # конфигурация css modules
│   ├── jest.config.js                          # конфигурация jest
│   ├── postcss.config.js                       # конфигурация postcss
│   ├── svgo.config.js                          # конфигурация обработки svg
│   ├── test.config.js                          # конфигурация окружения Jest, React Testing Library
│   ├── webpack.config.cache.js                 # конфигурация кеширования окружения webpack
│   ├── webpack.config.dev.js                   # конфигурация dev окружения webpack
│   ├── webpack.config.env.js                   # парсинг .env и проброс переменных в webpack
│   ├── webpack.config.https.js                 # конфигурация dev сервера с https
│   ├── webpack.config.js                       # базовый конфиг webpack
│   ├── webpack.config.modules.js               # обработка путей к папкам из tsconfig для webpack
│   ├── webpack.config.prod.js                  # конфигурация сборки
│   └── webpack.config.styles.js                # конфигурация обработчиков css
├── src
|   ├── api                                    # папка для работы с сетью, создаются файлы под каждую сущность
│   ├── app                                    # основные компоненты с бизнес-логикой
│       ├── taskList                             # например, папка taskList, в которой содержится компонент страницы списка задач
│           ├── components                         # внутренние компоненты
│           ├── integration                        # файлы для redux
|           ├── task-list.tsx                       # корневой файл компонента
|           ├── TaskList.types.ts                  # типы для компонента, например интерфейс пропсов TaskListProps
│   ├── components                             # папка для компонентов без бизнес-логики (dumb components)
│   ├── constants                              # общие константы разбитые по файлам
│   ├── mocks                                  # папка для всех моков
│   ├── types                                  # интерфейсы для сущностей, например для Task
│   ├── utils                                  # вспомогательные функции, также разбиваем по файлам. Например, delay.ts
│   ├── index.html                             # корневой html
│   ├── index.tsx                              # точка входа в приложение для webpack
│   ├── App.tsx                                # точка входа в приложение, роутер
│   ├── react-app-env.d.ts                     # декларация модулей и переменных
├── .browserlistsrc                          # список браузеров для autoprefixer
├── .editorconfig                             # настройки для редакторов
├── .eslintignore                            # игнорирование eslint
├── .eslintrc                                # Конфиг Eslint
├── .gitignore                               # Игнор файл для гита
├── .prettierrc                              # Конфиг prettier
├── package.json
├── tsconfig.json                             # Конфиг тайпскрипта
└── README.md

Правила по проекту

  1. Один файл – один компонент
  2. Импорты должны быть абсолютными
  3. Типы (types), константы (constants), вспомогательные функции (utils), редьюсеры (reducers), экшены (actions) в отдельных файлах

Критерии оценки

  1. Чистота кода (сильно строго судить не будем, но хотя бы без явной жести)
  2. Не должно быть никаких дизейблов линтеров
  3. Все пути импортов должны быть абсолютными
  4. Все типизировано, вообще все! (если тип подтягивается автоматически, тоже считается). Расшифровка: если мы увидим где-то тип any или unknown, критерий не засчитывается
  5. Добавлены и сверстаны три страницы: список задач, добавление задачи, редактирование задачи (не обязательно три страницы, главное чтобы была реализована функциональность)
  6. На странице списка задач без ошибок (в интерфейсе и консоли) отображается список задач
  7. На странице списка задач есть корректно работающие поиск по имени задачи и фильтр по признакам важности и готовности задач
  8. На странице редактировании задачи id задачи передается через параметр роута
  9. Работает основная функциональность добавления и редактирования задачи, есть возможность пометить задачу готовой и важной
  10. В redux добавлена миддлвара для логирования
  11. У всех запросов есть обработка ошибок и загрузки и они отображаются в интерфейсе
  12. Запросы типизированы с помощью openapi-typescript
  13. Запросы реализованы с помощью redux-thunk и axios
  14. Формы сделаны с использованием react-hook-forms и yap (формы поиска, редактирования и добавления задач)
  15. На формах есть валидация (все поля обязательные, чекбоксы не обязательны, на форме редактирования нельзя выбрать чекбокс important, если выбран чекбокс completed)

Критерии со звездочкой:

  1. Приятный дизайн
  2. Реализована пагинация на фронте
  3. Добавлять параметры поиска и фильтра в роут (учитывая один нюанс)
  4. Правильно использованная мемоизация
  5. Структура проекта (тут не четкий критерий, но засчитаем, если не будет сильных недочетов)
  6. Прохождение «проверки на дурака»
  7. Использование MUI по правилам из презентации