GH GambleHub

Многошаговые формы и сохранение контекста

1) Принципы

1. Одна цель — несколько естественных шагов. Делите не по таблицам БД, а по логике пользователя: «Данные → Подтверждение → Завершение».
2. Каждый шаг — завершенный смысл. Не дробите слишком мелко: 3–5 шагов оптимально.
3. Переход не должен сбрасывать контекст. Все поля, выборы и файлы сохраняются.
4. Разрешайте вернуться. Назад — без потери данных.
5. Отслеживайте прогресс. Прогресс-бар, заголовок шага и ясные CTA.
6. Пользователь может уйти и вернуться. Черновик — локально или на сервере.

2) Архитектура многошаговой формы

Клиентский стейт: локальный стор (например, React Context/Redux/Signal) или временное хранилище (`sessionStorage`, IndexedDB).
Серверный стейт: создайте черновик с `draft_id`, сохраняйте после каждого шага.
Безопасность: `draft_id` связан с пользователем и истекает через N часов; данные шифруются в покое.

Механика шагов:
  • `currentStep` — индекс текущего шага;
  • `completedSteps` — список завершенных;
  • `errors` — пер-шаговые ошибки;
  • `progress = current / total`.
js const formState = {
draftId: "d-84f...",
currentStep: 2,
steps: [ { id: "personal", completed: true }, { id: "kyc", completed: false } ],
data: { name:"", idPhoto:null },
lastSaved: Date. now()
}

3) Дизайн шагов и макета

Структура: вертикальная навигация (desktop) / прогресс-бар сверху (mobile).
Видимое название шага: «1. Личные данные», «2. Подтверждение личности».

CTA-кнопки:
  • Основная — «Далее»/«Продолжить».
  • Вторичная — «Назад».
  • На последнем шаге — «Завершить»/«Отправить».
Дизайн прогресса:
  • Используйте `aria-current="step"`.
  • Показывайте %, если шаги неравномерные.
  • Добавьте подсказку «Можно вернуться позже».

4) Сохранение контекста и данных

Автосохранение

Сохраняйте при:
  • изменении поля (с дебаунсом 500–1000 мс);
  • переходе на следующий шаг;
  • потере фокуса вкладки.
Хранилище:
  • локально (`localStorage`/IndexedDB) — если форма короткая;
  • сервер — для KYC/платежей/анкеты.
js const saveDraft = debounce(async (data) => {
await fetch('/api/draft', { method:'POST', body: JSON. stringify(data) });
}, 800);

Восстановление

При открытии формы ищите черновик (`draft_id` или локальный ключ).

Предложите восстановить:
💡 «Найден черновик от 12:42. Продолжить с сохраненного места?»
  • В случае конфликта (новые поля) — «обновить черновик» с подсветкой изменений.

5) UX паттерны переходов

Переход вперед только после локальной валидации шага.
Назад — без подтверждения, если нет потери данных.
При ошибке сети — сохраняем локально, показываем «Восстановим при следующем подключении».
Не меняйте URL произвольно: `/form/step/2` → удобен для навигации/восстановления.
Поддержите `Ctrl+Enter` для быстрого перехода на следующий шаг.

6) Состояния и визуальные подсказки

In progress: серый/активный индикатор, шаг кликабелен только если завершен предыдущий.
Completed: зеленая галочка/иконка; можно открыть для редактирования.
Error: красный контур, текст под полем и в прогресс-линии.
Disabled: шаги после текущего скрыты или недоступны.

Пример прогресс-бара:
html
<nav aria-label = "Progress">
<ol class="steps">
<li class = "done "> <span> 1 </span> Data </li>
<li class = "current" aria-current = "step "> <span> 2 </span> Documents </li>
<li> 3 Verification </li>
</ol>
</nav>

7) A11y и доступность

`aria-current="step"` для активного шага.
Смена шага озвучивается `aria-live="polite"`.
Сохраняйте фокус в пределах текущего шага; при переходе — перемещайте на заголовок.
Навигация Tab и Enter предсказуема; Esc не должен терять контекст.
Для пошаговых прогресс-баров используйте `role="list"`, `role="listitem"` и `aria-label` для шага.

8) Поведение при ошибках и прерываниях

Сбой сети: баннер «Соединение потеряно. Данные сохранятся локально».
Таймаут: повторить автоматически через 3–5 с; при неудаче — оффлайн-черновик.
Разрыв сессии: после логина → «Продолжить с последнего шага».
Ошибка шага: сохраняем частично заполненные поля, подсвечиваем проблемные.

9) Параллельные сессии и безопасность

`draft_id` уникален на пользователя.
При открытии новой вкладки — предложить «Открыт другой сеанс. Обновить или продолжить здесь».
Для KYC/финансовых форм — данные шифруются на клиенте (AES/GCM) перед сохранением черновика.
Удаление черновиков по TTL (например, 7 дней неактивности).

10) Примеры сценариев iGaming

10.1 KYC/верификация

1. Личные данные → 2. Документы → 3. Проверка → 4. Завершение.

Автосейв после загрузки фото.
Восстановление с шага проверки после перерыва.
Состояние «ожидание подтверждения» с индикатором.

10.2 Платеж/депозит

Шаги: 1. Сумма → 2. Метод → 3. Подтверждение.
Данные о методе сохраняются между сессиями.
Возможен возврат к выбору метода без сброса суммы.

10.3 Установка лимитов

Шаги: тип лимита → значение → подтверждение.
Прогресс показывает оставшиеся шаги.
После завершения — экран «Вступит в силу через…».

11) Метрики и контроль

Completion rate: % пользователей, завершивших все шаги.
Drop-off per step: на каком шаге уходят.
Average time per step и Time-to-Complete.
Auto-save success rate (сколько черновиков восстановлено).
Error recovery rate: доля успешно продолженных после сбоя.

12) Антипаттерны

Жесткая навигация без «Назад».
Потеря введенных данных при перезагрузке.
Перепрыгивание через шаги без контекста.
Один общий submit на 10 экранов.
Ошибка на шаге — и «Начните заново».
Пустой экран после сбоя сети.
Прогресс-бар без смысловых названий («1/4/7…»).

13) Токены дизайн-системы (пример)

json
{
"steps": {
"radius": 10,
"gap": 8,
"barHeight": 4,
"activeColor": "#2B9F5E",
"inactiveColor": "#E0E0E0"
},
"autosave": {
"debounceMs": 800,
"retryMs": 3000,
"ttlDays": 7
},
"a11y": {
"ariaLive": "polite",
"focusBehavior": "scrollToTitle"
}
}

CSS-пресеты

css
.steps { display:flex; gap:8px; list-style:none; counter-reset:step; }
.steps li { position:relative; flex:1; text-align:center; }
.steps li::before { counter-increment:step; content:counter(step); display:block; width:24px; height:24px; line-height:24px; margin:0 auto 4px; border-radius:50%; background:var(--inactive); color:#fff; }
.steps li. done::before { background:var(--success); }
.steps li[aria-current="step"]::before { background:var(--primary); }

14) QA-чек-лист

Сохранение и восстановление

  • Черновик создается и обновляется при каждом шаге.
  • При перезагрузке восстановление доступно и корректно.
  • Конфликт версий обрабатывается (старый/новый формат).

Навигация

  • «Назад» не теряет данные.
  • URL соответствует текущему шагу.
  • Прогресс-бар синхронизирован с состоянием.

Сеть и оффлайн

  • Оффлайн сохраняет локально и восстанавливает при онлайне.
  • Сообщения о сбое понятны и недеструктивны.

A11y

  • `aria-current="step"`, `aria-live="polite"` работают.
  • Фокус переносится на заголовок шага.

Перформанс

  • Переходы мгновенные (≤ 100 мс).
  • Асинхронные сохранения не блокируют UI.

15) Документация в дизайн-системе

Компоненты: `StepIndicator`, `MultiStepForm`, `AutosaveBanner`, `DraftRecoveryModal`.
Гайды по хранению контекста (local vs server), A11y и ARIA-атрибутам.
UX-шаблоны: KYC, депозиты, лимиты, анкеты, возврат после ошибки.
Do/Don’t с примерами сбоя сети и успешного восстановления.

Краткое резюме

Многошаговая форма должна ощущаться непрерывным процессом, даже если пользователь отвлекся, перезагрузил страницу или потерял сеть. Автосохранение, восстановление, видимый прогресс и безопасные ретраи превращают сложные сценарии (KYC, платежи, лимиты) в предсказуемый и доверенный опыт.

Contact

Свяжитесь с нами

Обращайтесь по любым вопросам или за поддержкой.Мы всегда готовы помочь!

Начать интеграцию

Email — обязателен. Telegram или WhatsApp — по желанию.

Ваше имя необязательно
Email необязательно
Тема необязательно
Сообщение необязательно
Telegram необязательно
@
Если укажете Telegram — мы ответим и там, в дополнение к Email.
WhatsApp необязательно
Формат: +код страны и номер (например, +380XXXXXXXXX).

Нажимая кнопку, вы соглашаетесь на обработку данных.