InteractiveDemo.tsx

Обзор

InteractiveDemo.tsx — это React-компонент, реализующий интерактивный демонстрационный тур по функциональности игрового приложения с разными сценариями для различных типов пользователей (персон). Цель файла — провести пользователя по последовательности шагов с подсказками, выделением элементов интерфейса и возможностью управления процессом показа (старт, пауза, сброс). Также компонент генерирует QR-код и мобильную ссылку для доступа к демо на мобильных устройствах, предоставляет режим самостоятельного изучения и отображает советы по использованию демо.


Основные сущности

Интерфейсы

interface DemoStep {
  id: string;             // Уникальный идентификатор шага
  title: string;          // Заголовок шага
  description: string;    // Описание шага
  action: string;         // Рекомендованное действие пользователя
  highlight: string;      // CSS-селектор для подсветки элемента интерфейса
  duration: number;       // Предполагаемая длительность шага в секундах
}

interface InteractiveDemoProps {
  onStepComplete: (stepId: string) => void; // Коллбек при завершении шага
  currentPersona: string;                    // Текущая персона (типа пользователя)
}

Компонент InteractiveDemo

Назначение

Главный React-компонент, управляющий логикой и отображением интерактивного демо-тура. В зависимости от переданной персоны, показывает соответствующий набор шагов, позволяет запускать, ставить на паузу, сбрасывать демонстрацию, отображает прогресс, подсвечивает интерфейс и генерирует QR-код для мобильного доступа.

Параметры

Состояния (State)


Внутренние данные

demoSteps

Объект, где ключ — персона, а значение — массив шагов DemoStep, описывающих последовательность действий демо.

Пример шага для casual_gamer:

{
  "id": "craft_sword",
  "title": "Craft Your First Weapon",
  "description": "Click 'Craft Sword' - notice how instant it is!",
  "action": "Click the Craft button",
  "highlight": "[data-action=\"craft\"]",
  "duration": 10
}

Методы и основные функции

startDemo() : void

Запускает демонстрацию, устанавливая isPlaying в true и currentStep в 0.

Использование:

<button onClick={startDemo}>Start Guided Tour</button>

pauseDemo() : void

Останавливает демонстрацию, устанавливая isPlaying в false.


resetDemo() : void

Сбрасывает демонстрацию: останавливает и возвращает шаг к первому.


nextStep() : void

Переходит к следующему шагу демо. Если текущий шаг не последний — вызывает onStepComplete с id текущего шага и увеличивает currentStep. Если последний — останавливает демонстрацию и вызывает onStepComplete('demo_complete').


highlightElement(selector: string) : void

Подсвечивает элемент интерфейса, указанный CSS-селектором, добавляя класс demo-highlight. Перед этим убирает подсветку со всех элементов с этим классом.


Используемые хуки React


Взаимодействия с другими частями системы


Особенности реализации и алгоритмы


Использование

<InteractiveDemo
  currentPersona="casual_gamer"
  onStepComplete={(stepId) => console.log(`Step completed: ${stepId}`)}
/>

Визуальная структура компонента

componentDiagram
    InteractiveDemo <|-- DemoHeader
    InteractiveDemo <|-- CurrentStepDisplay
    InteractiveDemo <|-- DemoControls
    InteractiveDemo <|-- ProgressBar
    InteractiveDemo <|-- DemoStepsList
    InteractiveDemo <|-- MobileAccess
    InteractiveDemo <|-- TryItYourselfMode
    InteractiveDemo <|-- DemoTips

    DemoHeader : отображение заголовка и кнопка переключения подсказок
    CurrentStepDisplay : показывает текущий шаг, описание и кнопки "Complete Step" / "Pause"
    DemoControls : кнопки управления туром (старт, пауза, сброс)
    ProgressBar : визуализация прогресса демо
    DemoStepsList : список всех шагов с подсветкой текущего и выполненных
    MobileAccess : QR-код и мобильный URL для доступа к демо
    TryItYourselfMode : режим свободного изучения с рекомендациями
    DemoTips : блок с подсказками при включенном отображении

Итог

Компонент InteractiveDemo.tsx предоставляет комплексный, ориентированный на пользователя интерактивный тур с поддержкой нескольких пользовательских персон, позволяя последовательно демонстрировать функционал игрового приложения с подсветкой интерфейса, управлением прогрессом, мобильным доступом и советами. Его архитектура основана на управлении состоянием React с использованием хуков и динамической генерации шагов и QR-кодов, что обеспечивает удобство и гибкость интеграции в систему.