NetworkSelector.tsx

Обзор

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

Компонент поддерживает два режима отображения: компактный (compact) и расширенный, что позволяет интегрировать его как в ограниченный интерфейс (например, панель инструментов), так и в полноценное окно выбора.


Описание содержимого файла

Интерфейс NetworkInfo

interface NetworkInfo {
  id: number;
  name: string;
  symbol: string;
  color: string;
  rpcUrl: string;
  explorerUrl: string;
  status: 'connected' | 'connecting' | 'disconnected' | 'error';
  blockHeight?: number;
  latency?: number;
  manaBalance?: number;
}

Определяет структуру данных для одной сети блокчейна.


Константа SUPPORTED_NETWORKS

Массив из нескольких объектов типа NetworkInfo, содержащий предопределённый список популярных сетей:

Каждая сеть имеет предустановленные параметры и начальный статус подключения.


Интерфейс NetworkSelectorProps

interface NetworkSelectorProps {
  selectedNetwork?: NetworkInfo;
  onNetworkChange?: (network: NetworkInfo) => void;
  showBalances?: boolean;
  compact?: boolean;
}

Параметры компонента NetworkSelector:


Компонент NetworkSelector

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

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

Эффект (useEffect)

Основные функции


Рендеринг

Компонент рендерит два варианта интерфейса:

Компактный режим (compact === true)

Расширенный режим (compact === false)


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

import { NetworkSelector } from './NetworkSelector';

function App() {
  const handleChange = (network) => {
    console.log('Selected network:', network.name);
  };

  return (
    <div>
      <NetworkSelector 
        onNetworkChange={handleChange} 
        showBalances={true} 
        compact={false} 
      />
    </div>
  );
}

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


Взаимодействие с остальной системой


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

componentDiagram
    component NetworkSelector {
      +props: NetworkSelectorProps
      +state: networks: NetworkInfo[]
      +state: isOpen: boolean
      +state: currentNetwork: NetworkInfo
      +useEffect: обновление параметров сетей
      +handleNetworkSelect(network: NetworkInfo): void
      +getStatusIcon(status): JSX.Element
      +getStatusColor(status): string
      +render(): JSX.Element
    }
    NetworkSelector --> NetworkInfo
    NetworkSelector ..> lucide-react-icons

Итог

Файл NetworkSelector.tsx — это полностью функциональный React-компонент для выбора и мониторинга состояния нескольких блокчейн-сетей с поддержкой имитации динамики их параметров. Он легко интегрируется в различные интерфейсы и предоставляет гибкие настройки отображения.