Skip to content

Repository files navigation

Благотворительный хакатон Для организации "Старость в радость" 2024 от Наташи Давыдовой

Team 8

Участники

Иван и Анна

Капитан

Женя

Что сделано

Вход в систему

  • авторизация в приложение подключена
  • неавторизованные пользователи автоматически перенаправляются на страницу логина
  • при вводе неверных данных отображаются подсказки с ошибкой
  • при ошибке авторизации показывается тост
  • при успешной авторизации пользователь перенаправляется на страницу запросов
  • токен сохраняется в LocalStorage и не теряется при перезагрузке страницы
  • при проверке авторизации юзера для доступа к авторизованным страницам, делается ретрай запроса в случае ошибки - но ретрай не производится, если токена нет или с бэка пришел ответ что токен не валидный. в остальных случаях делается ретрай чтобы не показывать пользователю будто он не авторизован при случайх ошибках соединения

Список запросов

  • загружается список запросов - список кешируется на 60 секунд
  • в случае ошибки загрузки, отображается ошибка
  • реализован просмотр запросов в виде сетки и списка
  • отображается число найденных запросов
  • отображается пагинация
  • пагинация сохраняется в серч параметр в ссылке и таким образом сохраняется и при смене между списком и сеткой и перезагрузке страницы
  • состояние интерфейса фильтров и поиска не сбрасывается при смене между списком и сеткой
  • пагинация сбрасывается до 1й страницы при любой смене фильтра, чтобы не путать пользователя

Фильтры

  • подключено управление фильтрами
  • клик по выбранному чекбоксу отключает его
  • фильтры применяются моментально
  • если по фильтрам ничего не найдено - отображается экран не найдено
  • кнопка сбросить отключена при пустом фильтре
  • кнопка сбросить сбрасывает все фильтры
  • все фильтры сохраняются в серч параметры в ссылке и таким образом сохраняются и при смене между списком и сеткой и перезагрузке страницы
  • реализован ряд оптимизаций для ускорения работы фильтра:
    • фильтрация происходит асинхронно с разбиением на чанки по 300 элементов - таким образом даже на очень больших списка на медленных устройствах, UI не блочится фильтрацией и продолжает работать
    • если во время фильтрации списка, сменить фильтры - текущий процесс фильтрация будет отменена через AbortController, чтобы не выполнять лишнюю работу
    • если новый фильтр является подфильтром прошлого - вместо фильтрации снова по всему списку запросов, фильтрация производится по результатам прошлого фильтра. например, если был фильтр на только запросы для пенсионеров, а после добавился еще фильтр на только запросы с помощью вещами - то тк мы знаем, что все результаты этого фильтра находятся в прошлом результате. таким образом мы экономим работу и проверяем меньшее количество элементов
    • для проверки оптимизаций, рекомендуется в девтулах во вкладке performance выставить замедление процессора на максимум и при возможности возвращать более длинный список элементов с бэкенда. Влияние оптимизаций сложно заметить на быстрых устройствах и небольших списках(до 50_000 элементов)
    • оптимизации можно отключить добавив в URL параметр "deopt" - т.е. https://example.com/request/search&deopt.
    • также для теста оптимизаций, можно добавить параметр "mult", чтобы отрендерить больше запросов, чем вернул бэкенд - т.е. https://example.com/request/search&mult=5.

Поиск

  • подключен поиск
  • поиск синхронизируется к серч параметру
  • смена поиска не затрагивает фильтры
  • поиск применяется моментально
  • при смене поиска
  • для поиска реализованы те же оптимизации, что и для фильтра
  • при смене страницы в пагинации - повторная фильтрация не производится, чтобы не делать лишнюю работу

Карточка запроса

  • подключен вызов API по кнопке помочь
  • при ошибке и успехе выводится тост

About

Team 8 - react hackathon 2024 hosted by @nat-davydova

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages