Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/margo-yunanova/funzone
Профильное задание для стажировки в ВК Фронтенд-разработчик
https://github.com/margo-yunanova/funzone
react typescript vk vkui
Last synced: 5 days ago
JSON representation
Профильное задание для стажировки в ВК Фронтенд-разработчик
- Host: GitHub
- URL: https://github.com/margo-yunanova/funzone
- Owner: margo-yunanova
- Created: 2024-03-13T14:22:43.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-03-17T18:07:31.000Z (9 months ago)
- Last Synced: 2024-12-18T21:17:33.859Z (5 days ago)
- Topics: react, typescript, vk, vkui
- Language: TypeScript
- Homepage: https://margo-yunanova.github.io/funZone/
- Size: 415 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Тестовое задание VK
Данное приложение разработано в рамках выполнения профильного задания - Фронтенд-разработчик на
стажировку в VK## 🚀 Запуск мини приложения
Запустите ваш мини апп
```sh
npm run start
```
Откройте http://localhost:5173, чтобы посмотреть результат в браузере.## 🗂️ Используемые библиотеки
Мы подготовили для вас набор пакетов, с которыми вам будет легко начать разрабатывать мини аппы
| Пакет | Назначение |
| ------ | ------ |
| [VKUI](https://vkcom.github.io/VKUI/) | Библиотека React-компонентов для создания мини-приложений в стиле ВКонтакте. |
| [vk-mini-apps-router](https://dev.vk.com/ru/libraries/router) | Библиотека для маршрутизации и навигации в мини-приложениях, созданных с помощью VKUI. |## Основное задание: Разработка React-приложения
Приложение должно состоять из нескольких частей:
1. Блок с кнопкой и текстовым полем. По нажатию на кнопку выполнить запрос к [https://catfact.ninja/fact](https://vk.com/away.php?to=https%3A%2F%2Fcatfact.ninja%2Ffact&utf=1). Полученный факт нужно записать в текстовое поле и установить курсор после первого слова.
2. Форма с текстовым полем и кнопкой отправки. Пользователь вводит своё имя в текстовом поле. По истечении 3-х секунд после ввода имени или при отправке формы выполняется запрос к [https://api.agify.io/](https://vk.com/away.php?to=https%3A%2F%2Fapi.agify.io%2F&utf=1) с введенным именем в параметре _name_. Ответом будет возраст человека, определенный по имени. Этот ответ нужно отобразить под текстовым полем.
Особенности:
* Необходимо предотвращать дублирующие запросы (не отправлять запрос с таким же именем).
* Предусмотреть отправку следующего запроса до того, как текущий был обработан - прерывать запрос, чей ответ нам уже не нужен (частый кейс при медленном интернете).## Дополнительные задания:
1. Использовать при реализации библиотеку VKUI (можно вынести формы в разные страницы, используя компоненты View и Panel).
2. Реализовать валидацию поля ввода имени (имя может состоять только из букв).
3. Развернуть данное приложение в виде мини-приложения ВКонтакте. Для этого дополнительно понадобится установить пакет bridge.
4. Плюсом будет использование следующих библиотек и технологий, так как они активно применяются в проектах команды:
* Архитектурная методология Feature-Sliced Design
* TanStack Query для работы с запросами
* Typescript
* React Hook Form + Yup для работы с формами и их валидациейЗадание рассчитано на 3-4 часа, поэтому особое внимание следует уделить выполнению основного задания. Рекомендуется выполнять дополнительные задания, если есть опыт работы с данными библиотеками/технологиями, либо остался большой запас по времени.
Результатом выполнения задачи должен стать репозиторий на github/gitlab с инструкцией для запуска - в поле для ответа нужно вставить ссылку с открытым доступом для проверки (+ ссылка на мини-приложение, если оно было развернуто).## Полезные материалы:
* Документация VKUI [https://vkcom.github.io/VKUI/](https://vkcom.github.io/VKUI/)
* Как создать свое мини-приложение ВКонтакте [https://dev.vk.com/ru/mini-apps/getting-started](https://dev.vk.com/ru/mini-apps/getting-started)
* Документация Feature-Sliced Design [https://feature-sliced.design/ru/](https://feature-sliced.design/ru/)