Hotels searher app
Поисковик отелей через Travelpayouts API
Экосистема
JS ES6
Vue3 CLI
,Vue Router
Vuex
,vuex-persist
, LocalStorage – стейт-менеджмент и кеширование данныхvuelidate
– валидация полейvue-datepicker
– кастомный дейтпикер для выбора датswiper
– свайпер картинокuniqid
– для уникальных айдиsass
,scoped
– стили: переменные, миксины, вложенность и переиспользование стилейESlint
– линтингVercel
– деплой
Какие задачи сделал:
-
Вход по логину-паролю
свалидацией полей
-
Кеширование состояния
пользователя в localstorage -
Получение отелей по API
из формы (город, дата, дни) -
Отрисовка списков
найденных / избранных отелей - Сохранение в избранное / удаление отелей
-
Сортировка по цене, по рейтингу
избранных отелей -
Анимации блоков с меняющейся шириной
-
UI-состояния
: hover, active, disabled и т.д. -
Адаптивная верстка
с flex - Кастомные utils для
работы с датами
исклонениями слов
Подробнее:
Роутинг
- 3 страницы: Login, Hotels, ErrorPage
- Hotels –
protected route
: доступ только после логина
Формы
-
Валидация формы логина
через Vuelidate - Логин – любая почта
- Пароль – без кириллицы, минимум 8 символов
- Кнопка submit: disabled, если поля невалидны
- Кастомный
datepicker
Redux Store
- Разбит на логические слайсы
- Асинхронные запросы к API через
vuex
- Стейт логина кешируется в
LocalStorage
Обработка асинхронных состояний запросов к серверу
- Состояние до запроса – выводом полей “нет данных” в блоки
- Состояние ожидания – через попап и спиннер
- Состояние ошибки – через попап с выводом ошибки
Верстка
-
Адаптивная верстка
320px => 1440px -
Резиновые размеры шрифтов
-
Раскрытие блоков по кнопке
на планшетных и мобильных разрешениях - Состояния
hover
иactive
у UI-компонентов -
Анимации блоков
с изменяющейся шириной (блоки “избранное” и “найденные отели”) - Блоки с ограничениями по высоте и
скроллбарами
Reference
Команды:
- clone branch with
[email protected]:proehavshiy/hotel-searcher-app-vue.git
npm run build
– build final versionnpm run serve
– start dev modenpm run lint
– lints and fixes files