You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
неавторизованные пользователи автоматически перенаправляются на страницу логина
при вводе неверных данных отображаются подсказки с ошибкой
при ошибке авторизации показывается тост
при успешной авторизации пользователь перенаправляется на страницу запросов
токен сохраняется в 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