TutorialTooltip.tsx


Обзор

Файл TutorialTooltip.tsx реализует React-компонент, предназначенный для отображения простого пошагового учебного всплывающего окна (tooltip) с описанием и навигацией между шагами. Этот компонент служит для проведения базового интерактивного обучения пользователя без сложной логики подсветки элементов интерфейса.

Основное назначение — показать серию информационных подсказок с заголовками и описаниями, сопровождающих обучение в различных разделах приложения (например, битвы или коллекции элементалей). Компонент поддерживает переходы «вперед», «назад», а также возможность пропуска всего туториала.


Составные части файла

Интерфейсы

TutorialStep

Определяет структуру одного шага туториала.

Свойство

Тип

Описание

id

string

Уникальный идентификатор шага

title

string

Заголовок подсказки

description

string

Текст описания шага

targetSelector?

'string' (опционально)

CSS-селектор целевого элемента (не используется для позиционирования в этом компоненте)

position?

`'top'

'bottom'

action?

`'click'

'hover'


TutorialTooltipProps

Определяет свойства, которые принимает компонент TutorialTooltip.

Свойство

Тип

Описание

steps

TutorialStep[]

Массив шагов туториала

isActive

boolean

Флаг активности туториала (отображать или нет)

onComplete

() => void

Коллбэк, вызываемый по завершении всех шагов туториала

onSkip

() => void

Коллбэк, вызываемый при пропуске всего туториала


Основной компонент: TutorialTooltip

const TutorialTooltip: React.FC<TutorialTooltipProps> = ({
  steps,
  isActive,
  onComplete,
  onSkip,
}) => { ... }

Описание

React-функциональный компонент, реализующий модальное окно с подсказкой для текущего шага из переданного массива steps. Поддерживает навигацию между шагами, отображение прогресса, кнопки управления ("пропустить", "следующий", "предыдущий") и корректно скрывается при завершении или пропуске.


Локальное состояние и эффекты

При изменении пропсов isActive и steps происходит эффект:


Методы компонента


Рендеринг


Параметры и возвращаемые значения


Пример использования

import TutorialTooltip, { BATTLE_TUTORIAL_STEPS } from './TutorialTooltip';

const MyComponent = () => {
  const [tutorialActive, setTutorialActive] = React.useState(true);

  const handleComplete = () => {
    console.log('Tutorial completed');
    setTutorialActive(false);
  };

  const handleSkip = () => {
    console.log('Tutorial skipped');
    setTutorialActive(false);
  };

  return (
    <>
      <button onClick={() => setTutorialActive(true)}>Start Tutorial</button>
      <TutorialTooltip
        steps={BATTLE_TUTORIAL_STEPS}
        isActive={tutorialActive}
        onComplete={handleComplete}
        onSkip={handleSkip}
      />
    </>
  );
};

Предопределённые наборы шагов

В файле экспортируются две константы — массивы шагов для различных разделов приложения.

BATTLE_TUTORIAL_STEPS

Массив шагов для обучения в разделе "Битвы". Содержит базовую информацию о выборе локации, элемента, элементаля и навигации по клавиатуре. Пример шага:

{
  id: 'welcome',
  title: '🎮 Welcome to Elemental Arena!',
  description: 'Learn how to battle with elemental forces! This tutorial will guide you through the battle process step by step.',
}

COLLECTION_TUTORIAL_STEPS

Массив шагов для обучения в разделе "Коллекция". Объясняет работу с коллекцией элементалей, фильтрацию, просмотр карт и улучшение.


Важные подробности реализации


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


Диаграмма структуры компонента

classDiagram
    class TutorialTooltip {
        - currentStep: number
        - isVisible: boolean
        + handleNext(): void
        + handlePrevious(): void
        + handleSkip(): void
        + render(): ReactElement | null
    }

    class TutorialStep {
        + id: string
        + title: string
        + description: string
        + targetSelector?: string
        + position?: 'top' | 'bottom' | 'left' | 'right'
        + action?: 'click' | 'hover' | 'focus'
    }

    class TutorialTooltipProps {
        + steps: TutorialStep[]
        + isActive: boolean
        + onComplete(): void
        + onSkip(): void
    }

    TutorialTooltip "1" o-- "*" TutorialStep : steps
    TutorialTooltip "1" -- TutorialTooltipProps : props

Итог

Компонент TutorialTooltip.tsx предоставляет базовую функциональность для отображения пошаговых учебных подсказок в приложении. Он ориентирован на простоту и универсальность, без сложной логики взаимодействия с DOM-элементами и позиционирования. Это позволяет быстро встроить обучающие сообщения в различные части интерфейса, дополняя более сложные модули обучения.

В связке с предопределёнными наборами шагов и коллбэками на завершение или пропуск, данный компонент помогает организовать удобное и понятное обучение пользователей.