Тестовое задание

Исходные задачи

Реализовать приложение на React.

  1. Приложение должно отображать список постов.
  2. ТакжеТакже необходимо отображать выпадающий список пользователей. При выборе пользователя должны отображаться только его посты (фильтрация должна быть реализована на стороне сервера).
  3. При клике на пост должна открываться страница с информацией о посте, авторе и комментариях к нему.

Для данных использовать API: https://jsonplaceholder.typicode.com:

Дополнительно:

  1. Реализовать возможность добавления комментария с отправкой на сервер (запрос post на https://jsonplaceholder.typicode.com/comments).
  2. Реализовать вывод уведомлений при различных действиях (например, при отправке комментариев / при переходе между роутами).
  3. Использование ui библиотек приветствуется. Использовать React Router для перехода по страницам.

Результат

  1. На главной странице загружается 10 постов. При прокрутке вниз до определенного момента происходит дополнительная подгрузка постов: каждый раз +10 постов. Во время загрузки постов пользователь видит анимацию скелета.
  2. Реализован выпадающий список для выбора пользователя. При вводе имени начинается поиск совпадающих имен на сервере (реализовано с помощью debounce). Если найдены совпадения, отображается список имен. Если совпадений не найдено, отображается сообщение о отсутствии результатов. При выборе имени из списка автоматически происходит подгрузка новых постов с фильтром по выбранному пользователю.
  3. При клике на заголовок поста открывается страница с полной информацией о посте, включая информацию об авторе и комментарии к посту.
  4. Пользователь может оставлять комментарии. Для этого необходимо ввести имя и текст комментария (не менее 3 символов). Сам инпут для текста сделал с хуком на автоматическое увеличение высоты инпута (что бы инпут был высотой текста, без вертикального скроля внутри) После отправки комментария происходит перерендер страницы, и список комментариев обновляется, включая новый комментарий.
  5. Хотя я хотел загрузить готовый проект на GitHub, понял, что json-server работает только локально, поэтому некоторые функции не будут доступны.

Инструменты

  1. react/react-dom
  2. redux toolkit
  3. react-router-dom
  4. axios
  5. json-server
  6. react-loading-skeleto
  7. classnames

Запуск

Для инициализации приложения выполните следующую команду:

npm i

Для просмотра самого приложения выполните следующую команду:

npm run start

Для запуска сервера и получения данных выполните следующую команду:

npm run server