NetworkSwitcher.tsx

Обзор

NetworkSwitcher.tsx — это React-компонент, предназначенный для отображения и управления переключением между различными блокчейн-сетями в приложении. Компонент позволяет пользователю просматривать список поддерживаемых сетей, видеть их статус подключения, текущие параметры (такие как задержка, баланс токенов MANA и цена газа), а также переключаться между ними. Визуально реализован выпадающий список с подробной информацией и таблица сравнения сетей. Компонент интегрируется с игровым провайдером (GameProvider), чтобы выполнять действия переключения сети в рамках игрового процесса.


Подробное описание

Интерфейсы и типы

NetworkInfo

Определяет структуру объекта, описывающего параметры сети.

Свойство

Тип

Описание

id

number

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

name

string

Название сети

symbol

string

Символ криптовалюты сети

color

string

Цвет для визуального отображения сети (HEX)

rpcUrl

string

RPC-URL для подключения к сети

explorerUrl

string

URL обозревателя блоков сети

status

`'connected'

'connecting'

blockHeight?

number

Текущая высота блока (опционально)

latency?

number

Время задержки сети в миллисекундах (опционально)

manaBalance?

number

Баланс токенов MANA на сети (опционально)

gasPrice?

string

Текущая цена газа (опционально)

isTestnet?

boolean

Флаг тестовой сети


Константы

SUPPORTED_NETWORKS

Массив объектов NetworkInfo, представляющий список поддерживаемых сетей с предзаполненными значениями параметров. Включает основные сети Ethereum, Polygon, Arbitrum, Optimism, Base и тестовую сеть Sepolia.


Компонент: NetworkSwitcher

Описание

Основной React-компонент, реализующий интерфейс для просмотра информации о текущей сети, переключения между сетями, а также сравнения их параметров. Поддерживает отображение тестовых сетей, если включена соответствующая опция.

Пропсы

Имя

Тип

Значение по умолчанию

Описание

onNetworkSwitch

(network: NetworkInfo) => void

undefined

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

showTestnets

boolean

false

Показывать ли тестовые сети в списке

Хуки состояния

Взаимодействие с провайдером

Используется хук useGame() для получения объекта player и метода performAction. При переключении сети вызывается performAction с типом действия 'NETWORK_SWITCH', что позволяет интегрировать смену сети в игровой процесс.


Основные методы и функции внутри компонента

handleNetworkSwitch(network: NetworkInfo): Promise<void>

Асинхронная функция, обрабатывающая логику переключения на выбранную сеть.

await handleNetworkSwitch(selectedNetwork);

getStatusIcon(network: NetworkInfo): JSX.Element

Возвращает иконку статуса сети в зависимости от текущего статуса и процесса переключения.


getStatusColor(status: NetworkInfo['status']): string

Возвращает CSS-класс с цветом текста для отображения статуса.


UI компоненты


Важные детали реализации


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


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

import { NetworkSwitcher } from './NetworkSwitcher';

function App() {
  const handleNetworkChange = (network) => {
    console.log('Выбранная сеть:', network.name);
  };

  return (
    <div>
      <NetworkSwitcher onNetworkSwitch={handleNetworkChange} showTestnets={true} />
    </div>
  );
}

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

componentDiagram
    component NetworkSwitcher {
      +props: { onNetworkSwitch?: (NetworkInfo) => void, showTestnets?: boolean }
      -state: networks: NetworkInfo[]
      -state: currentNetwork: NetworkInfo
      -state: isDropdownOpen: boolean
      -state: isSwitching: boolean
      -state: switchingTo: number | null
      +handleNetworkSwitch(network: NetworkInfo): Promise<void>
      +getStatusIcon(network: NetworkInfo): JSX.Element
      +getStatusColor(status: string): string
      +render()
    }
    component GameProvider
    component lucide-react Icons
    NetworkSwitcher --> GameProvider : useGame()
    NetworkSwitcher --> "lucide-react Icons" : Status icons

Итог

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