Это тестовое задание на стажировку в KODE. Набор на стажировку уже закончился, но сделать приложение в качестве практики для своего GitHub всё ещё можно.
Удачи!
В качестве тестового задания мы предлагаем тебе реализовать небольшое приложение, в котором есть всего по чуть-чуть: вёрстки, работы с API, преобразования данных и т. д.
Первое, что нужно сделать — это прочитать и разобраться во всех требованиях, дизайне и API, указанных в этом документе. Затем разбить проект на отдельные задачи, то есть декомпозировать. После планирования можно переходить к программированию. Двигаясь по собственному плану, реализуй тестовое задание.
- Create React App
- React Router
- Axios
- Typescript
- Effector \ redux
- styled-components
- Рекомендованный стэк не ограничивает тебя по применению других технологий и библиотек.
Хороший дизайн для клиентского разработчика — отличный способ быстро понять, что предстоит сделать. Не забываем, что вёрстка должна быть адаптивной!
https://www.figma.com/file/GRRKONipVClULsfdCAuVs1/KODE-Trainee-Dev-Осень'21?node-id=11%3A14414
Спецификация метода API - https://kode-frontend-team.stoplight.io/docs/koder-stoplight/e981f97438300-get-users-list
const options = {
method: "GET",
headers: { "Content-Type": "application/json" },
};
fetch(
"https://stoplight.io/mocks/kode-frontend-team/koder-stoplight/86566464/users?__example=all",
options
)
.then((response) => response.json())
.then((response) => console.log(response))
.catch((err) => console.error(err));
const options = {
method: "GET",
headers: { "Content-Type": "application/json" },
};
fetch(
"https://stoplight.io/mocks/kode-frontend-team/koder-stoplight/86566464/users?__example=frontend",
options
)
.then((response) => response.json())
.then((response) => console.log(response))
.catch((err) => console.error(err));
Параметр
__example
может принимать одно из значений:android
ios
design
management
qa
back_office
frontend
hr
pr
backend
support
analytics
const options = {
method: "GET",
headers: { "Content-Type": "application/json" },
};
fetch(
"https://stoplight.io/mocks/kode-frontend-team/koder-stoplight/86566464/users?__dynamic=true",
options
)
.then((response) => response.json())
.then((response) => console.log(response))
.catch((err) => console.error(err));
const options = {
method: "GET",
headers: { "Content-Type": "application/json" },
};
fetch(
"https://stoplight.io/mocks/kode-frontend-team/koder-stoplight/86566464/users?__code=500&__dynamic=true",
options
)
.then((response) => response.json())
.then((response) => console.log(response))
.catch((err) => console.error(err));
Когда пользователь открывает сайт, необходимо загрузить актуальный список всех работников компании.
При входе в приложение необходимо отобразить экран 2.0.0. Изначально он должен быть в состоянии загрузки, экран 1.0.0. Если при загрузке произошла ошибка, отсутствует интернет-соединение или API вернул ошибку, необходимо отобразить экран «Критическая ошибка». В случае успеха необходимо отобразить Top App Bar и список людей.
Компонент находится вверху экрана и представляет собой поле для поиска с иконкой «Поиск», кнопкой «Сортировка» и панелью вкладок. При переключении между вкладками на главном экране список работников фильтруется и отображаются только люди, работающие в выбранном департаменте, либо все, если выбрана вкладка «Все».
- Простая. Использовать фильтрацию пользователей на клиенте.
- Чуть сложнее. Использовать серверную фильтрацию по параметру
__example
Рассказать о преимуществах и недостатках способов реализации.
android -> Android
ios -> iOS
design -> Дизайн
management -> Менеджмент
qa -> QA
back_office -> Бэк-офис
frontend -> Frontend
hr -> HR
pr -> PR
backend -> Backend
support -> Техподдержка
analytics -> Аналитика
При нажатии на кнопку «Фильтр» открывается модальное окно с вариантами сортировки списка работников. Есть два варианта сортировки: «По алфавиту» (по умолчанию), «По дню рождения». При переключении варианта сортировки модальное окно должно закрываться, а список на главной странице должен обновиться.
Когда пользователь вводит текст в поисковое поле, необходимо фильтровать список на главном экране и отображать только работников, соответствующих параметрам поиска. Поиск может осуществляться по имени, фамилии или никнейму, состоящему из двух символов.
В случае отсутствия результатов поиска необходимо отобразить информацию о том, что ничего не было найдено. Экран "2.0.2Г Люди (Ошибка поиска)"
На странице должна быть расположена верхняя панель приложения, на которой должны находиться:
- поле для поиска;
- панель вкладок для группировки загруженного списка пользователей;
- список работников.
Список должен обновляться каждый раз, когда меняются параметры поиска, обновляется вариант сортировки или пользователь переключает вкладки департаментов.
Пользователь имеет возможность скроллить список работников.
В режиме сортировки «По алфавиту» для каждого работника отображается его фотография, имя, никнейм и департамент.
В режиме сортировки «По дню рождения» список отображается от ближайшей даты дня рождения вниз. Если день рождения следующего работника будет только в следующем году, то необходимо отобразить блок с годом, экран 2.0.1.
Когда пользователь кликнет на человека, необходимо открыть экран информации о человеке (экран «детали»).
Поиск, обновление списка должно происходить только после того, как пользователь закончил печатать.
Должна быть реализована как отдельный роут в приложении.
Должна быть возможность попасть на страницу по ссылке.
Вверху экрана деталей должна отображаться кнопка назад для навигации на главный экран. Также можно вернуться на главный экран, если нажать кнопку назад в браузере.
В шапке экрана должна отображаться аватарка пользователя, имя, никнейм и название департамента. Ниже находится дата рождения и номер телефона. При нажатии на номер телефона необходимо открыть приложение для звонка по номеру.
Дополнительные задания не обязательны для выполнения, но очень желательны. Если ты не успеваешь — лучше сделать хорошо основную часть. Но если время осталось...
При отключении устройства от сети, верхняя панель приложения должна измениться на сообщение об ошибке сети, экран 2.0.0.А — Люди (Ошибка). При этом должна остаться возможность пользоваться приложением в offline, теми данными, которые успели загрузится до отключения сети.
При восстановлении доступа к сети:
- Верхняя панель приложения должна измениться на сообщение о загрузке, экран 2.0.0.А — Люди (Загрузка).
- Список на активной вкладке должен обновиться.
Ожидаемый результат:
- На главном экране выбрана сортировка «по дню рождения».
- Введена строка поиска.
- Отображается несколько результатов поиска.
- Пользователь переходит на экран «детали».
- Возвращается назад.
- Состояние поиска и сортировки сохранено.
Для запроса пользователей с параметром фильтра результат должен кэшироваться на клиенте на 5 минут.
Ожидаемый результат:
- Переход на вкладку «Все»
- Выполняется запрос без фильтрации.
- Переход на вкладку «Дизайн»
- Выполняется запрос с фильтрацией по полю department.
- Переход на вкладку «Все»
- До истечения 5 минут запрос не выполняется, данные отображаются из кэша.
- После истечения 5 минут запрос выполняется, отображаются свежие данные.
- Повторный переход на вкладку «Дизайн»
- До истечения 5 минут запрос не выполняется, данные отображаются из кэша.
- После истечения 5 минут запрос выполняется, отображаются свежие данные.