mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-15 17:12:59 -04:00
regressing rn
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
// Main Application Shell
|
||||
// Purpose: Composes the primary rover control interface and page-level layout. Scope: Orchestrates high-level panels, overlays, and feature modules for the default route.
|
||||
import { useCallback, useEffect, useMemo, useState } from 'react';
|
||||
import TelemetryPanel from './components/TelemetryPanel/index.jsx';
|
||||
import ReplaySourcesPanel from './components/ReplaySourcesPanel/index.jsx';
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Chat Context Provider
|
||||
// Purpose: Maintains global chat message state, posting helpers, and typing indicators. Scope: Provides chat event subscriptions and mutation actions for chat-capable components.
|
||||
/* eslint-disable react-refresh/only-export-components */
|
||||
|
||||
import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Session Context Provider
|
||||
// Purpose: Tracks user session identity, roles, queue state, and control assignment data. Scope: Supplies synchronized session state and update hooks to the UI tree.
|
||||
/* eslint-disable react-refresh/only-export-components */
|
||||
|
||||
import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Socket Context Provider
|
||||
// Purpose: Creates React context for shared socket lifecycle and connection state. Scope: Owns socket initialization, reconnect behavior, and consumer hooks.
|
||||
/* eslint-disable react-refresh/only-export-components */
|
||||
|
||||
// src/context/SocketContext.jsx
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Telemetry Context Provider
|
||||
// Purpose: Maintains shared telemetry snapshots and rover status streams for UI consumers. Scope: Subscribes to telemetry events and exposes normalized read APIs to components.
|
||||
/* eslint-disable react-refresh/only-export-components */
|
||||
|
||||
import { createContext, useContext, useMemo, useState, useEffect } from 'react';
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Control Context Provider
|
||||
// Purpose: Exposes control-system state/actions to control-capable components. Scope: Owns reducer wiring, pipeline integration, and top-level provider hooks.
|
||||
import { createContext, useCallback, useContext, useEffect, useMemo, useReducer, useRef } from 'react';
|
||||
import { controlReducer, initialControlState } from './controlReducer.js';
|
||||
import { computeDifferentialSpeeds, clamp } from './controlMath.js';
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Control Command Pipeline
|
||||
// Purpose: Converts normalized inputs into command packets sent to the server. Scope: Applies throttling/coalescing/safety filters before socket command emission.
|
||||
import { useCallback, useMemo } from 'react';
|
||||
import { useSocket } from '../context/SocketContext.jsx';
|
||||
import { useSessionSelector } from '../context/SessionContext.jsx';
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Control System Constants
|
||||
// Purpose: Defines immutable control tuning and command constants for input pipelines. Scope: Central source of truth for movement scaling, deadzones, and timing values.
|
||||
export const AUX_LIMITS = {
|
||||
main: [-127, 127],
|
||||
side: [-127, 127],
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Control Math Utilities
|
||||
// Purpose: Contains numeric transforms for joystick/keyboard input normalization and shaping. Scope: Implements deadzone, clamp, and mixing math used by control dispatch logic.
|
||||
/* global Buffer */
|
||||
|
||||
import { DRIVE_LIMITS } from './constants.js';
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Control State Reducer
|
||||
// Purpose: Implements reducer transitions for control-system runtime state. Scope: Centralizes deterministic state updates for input, mode, and dispatch events.
|
||||
import { DEFAULT_KEYMAP, DEFAULT_MACROS, SONG_DEFAULT_NOTE } from './constants.js';
|
||||
|
||||
function createDriveState() {
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Control Module Exports
|
||||
// Purpose: Re-exports control context/providers and input managers from one entrypoint. Scope: Keeps control imports stable and concise for app/module consumers.
|
||||
export { ControlSystemProvider, useControlSystem } from './ControlContext.jsx';
|
||||
export { default as KeyboardInputManager } from './inputs/KeyboardInputManager.jsx';
|
||||
export { default as GamepadInputManager } from './inputs/GamepadInputManager.jsx';
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Gamepad Input Manager
|
||||
// Purpose: Converts polled gamepad state into normalized control actions/commands. Scope: Integrates bindings, deadzone math, and dispatch callbacks for driving.
|
||||
import { useCallback, useEffect, useMemo, useRef } from 'react';
|
||||
import { useControlSystem } from '../ControlContext.jsx';
|
||||
import { useSettingsNamespace } from '../../settings/index.js';
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Keyboard Input Manager
|
||||
// Purpose: Captures and translates keyboard events into normalized control intents. Scope: Owns keydown/keyup listeners and dispatch coordination for drive controls.
|
||||
import { useCallback, useEffect, useMemo, useRef } from 'react';
|
||||
import { useControlSystem } from '../ControlContext.jsx';
|
||||
import { useChat } from '../../context/ChatContext.jsx';
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Gamepad Bindings
|
||||
// Purpose: Defines default gamepad axis/button-to-action mappings and lookup helpers. Scope: Supplies binding metadata for gamepad input manager and settings UI.
|
||||
const CURVE_EXPO = 1.6;
|
||||
|
||||
export function getPadSignature(pad) {
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Gamepad Hub Runtime
|
||||
// Purpose: Tracks connected gamepads and polls input state for downstream handlers. Scope: Encapsulates browser Gamepad API access and per-frame update orchestration.
|
||||
import { useEffect, useState } from 'react';
|
||||
import { getPadSignature } from './gamepadBindings.js';
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Input Focus Utilities
|
||||
// Purpose: Handles focus/blur guards so controls only capture input when appropriate. Scope: Prevents accidental command capture while typing or using form elements.
|
||||
const TEXT_INPUT_TYPES = new Set([
|
||||
'',
|
||||
'text',
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Keyboard Capture Lock Helper
|
||||
// Purpose: Coordinates global keyboard-capture lock state across UI regions. Scope: Ensures only intended surfaces receive keyboard control events at runtime.
|
||||
let keyboardCaptureLocked = false;
|
||||
|
||||
export function setKeyboardCaptureLocked(value) {
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Keymap Utilities
|
||||
// Purpose: Normalizes key binding definitions and lookup behavior for control settings. Scope: Provides conversion/validation helpers for keyboard mapping workflows.
|
||||
const KEY_ALIASES = {
|
||||
'{': '[',
|
||||
'}': ']',
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Overcurrent Limiter Hook/Utility
|
||||
// Purpose: Applies client-side overcurrent guard logic to reduce harmful command spikes. Scope: Tracks limiter state and exposes gated dispatch behavior to controls.
|
||||
import { useEffect, useMemo, useRef, useState } from 'react';
|
||||
import { useTelemetryFrame } from '../context/TelemetryContext.jsx';
|
||||
import { useSessionSelector } from '../context/SessionContext.jsx';
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Help Content Definitions
|
||||
// Purpose: Stores static/dynamic help text content displayed by help UI components. Scope: Central content source for onboarding instructions and control references.
|
||||
export const HELP_LAYOUTS = ['desktop', 'mobile-portrait', 'mobile-landscape'];
|
||||
|
||||
// Block-based help content; each layout defines a hero plus main/aside blocks.
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Hook: useDefaultNickname
|
||||
// Purpose: Computes and applies fallback nickname behavior for unauthenticated/new sessions. Scope: Wraps nickname initialization policy and side effects.
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { useSettingsNamespace } from '../settings/index.js';
|
||||
import { useSessionActions } from '../context/SessionContext.jsx';
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Hook: useDockIr
|
||||
// Purpose: Tracks dock IR telemetry/status values for docking-related UI indicators. Scope: Converts telemetry feed updates into component-friendly reactive state.
|
||||
import { useEffect, useMemo, useState } from 'react';
|
||||
|
||||
const HOLD_MS = 650;
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Hook: useFullscreenPrompt
|
||||
// Purpose: Manages fullscreen prompt visibility and dismissal logic across screen sizes/devices. Scope: Provides reusable fullscreen UX state and action handlers.
|
||||
import { useCallback, useEffect, useMemo, useState } from 'react';
|
||||
|
||||
const SESSION_KEY = 'fullscreenPromptDismissed';
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Hook: useHudMapSetting
|
||||
// Purpose: Reads and persists HUD map visibility/preferences via settings namespaces. Scope: Exposes a small stateful API for map toggle interactions.
|
||||
import { useSettingsNamespace } from '../settings/index.js';
|
||||
|
||||
export function useHudMapSetting() {
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Hook: useRoomCameraSnapshots
|
||||
// Purpose: Subscribes to room camera snapshot updates and tracks latest image payloads. Scope: Normalizes snapshot event handling for room camera display components.
|
||||
import { useEffect, useMemo, useRef, useState } from 'react';
|
||||
import { useSocket } from '../context/SocketContext.jsx';
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Hook: useRoverSnapshots
|
||||
// Purpose: Subscribes to rover snapshot streams and stores latest per-rover image states. Scope: Manages socket request/subscription lifecycle and data normalization.
|
||||
import { useEffect, useMemo, useRef, useState } from 'react';
|
||||
import { useSocket } from '../context/SocketContext.jsx';
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Hook: useSpectatorMode
|
||||
// Purpose: Encapsulates spectator mode detection and toggle behavior for controls/UI gating. Scope: Derives spectator-specific flags from session and route state.
|
||||
import { useEffect, useState } from 'react';
|
||||
import { useSession } from '../context/SessionContext.jsx';
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Hook: useUserIdentitySync
|
||||
// Purpose: Keeps local identity state synchronized with server session/auth updates. Scope: Handles identity hydration, change propagation, and persistence touch points.
|
||||
import { useCallback, useEffect, useRef } from 'react';
|
||||
import { useSessionActions, useSessionSelector } from '../context/SessionContext.jsx';
|
||||
import { useSocket } from '../context/SocketContext.jsx';
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Hook: useVideoRequests
|
||||
// Purpose: Coordinates client-side video stream request intents and authorization timing. Scope: Provides reusable request helpers for rover and room video consumers.
|
||||
import { useEffect, useMemo, useRef, useState } from 'react';
|
||||
import { useSocket } from '../context/SocketContext.jsx';
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Battery Utility Library
|
||||
// Purpose: Provides battery normalization, threshold classification, and display helpers. Scope: Keeps battery rendering/math consistent across UI components.
|
||||
export const WARN_DISPLAY_PERCENT = 10;
|
||||
|
||||
export function buildBatteryVisual({ batteryState = null, charge = null, config = null }) {
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Rover Color Utility
|
||||
// Purpose: Maps rover identity/state to deterministic UI color choices. Scope: Supplies shared color resolution helpers for lists, badges, and overlays.
|
||||
const HEX_RE = /^#[0-9A-Fa-f]{6}$/;
|
||||
|
||||
export function normalizeRoverColor(value) {
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Socket Library Helper
|
||||
// Purpose: Builds and exports the browser Socket.IO client with shared defaults. Scope: Centralizes connection URL/options so all modules use consistent socket behavior.
|
||||
import { io } from 'socket.io-client';
|
||||
import { loadSettings } from '../settings/persistence.js';
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// WHEP Player Helper
|
||||
// Purpose: Implements browser playback utilities for WHEP/WebRTC media streams. Scope: Manages stream attach/detach, lifecycle cleanup, and error handling hooks.
|
||||
/* global Buffer */
|
||||
|
||||
const RTC_CONFIG = {
|
||||
|
||||
+4
-2
@@ -1,3 +1,5 @@
|
||||
// WebUI Bootstrap Entry
|
||||
// Purpose: Boots the React application and mounts global providers/router roots. Scope: Defines top-level route wiring and root render lifecycle for the browser app.
|
||||
import { StrictMode } from 'react'
|
||||
import { createRoot } from 'react-dom/client'
|
||||
import { BrowserRouter, Route, Routes } from 'react-router-dom'
|
||||
@@ -7,8 +9,8 @@ import { SocketProvider } from './context/SocketContext.jsx'
|
||||
import { SessionProvider } from './context/SessionContext.jsx'
|
||||
import { TelemetryProvider } from './context/TelemetryContext.jsx'
|
||||
import { ChatProvider } from './context/ChatContext.jsx'
|
||||
import SpectatorApp from './spectate/SpectatorApp.jsx'
|
||||
import MiniSummaryApp from './mini/MiniSummaryApp.jsx'
|
||||
import SpectatorApp from './spectate/SpectatorApp/SpectatorAppRoot.jsx'
|
||||
import MiniSummaryApp from './mini/MiniSummaryApp/MiniSummaryAppRoot.jsx'
|
||||
import { SettingsProvider } from './settings/index.js'
|
||||
import DeterrenceChaos from './components/DeterrenceChaos/index.jsx'
|
||||
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
import MiniSummaryAppRoot from './MiniSummaryApp/MiniSummaryAppRoot.jsx';
|
||||
|
||||
export default MiniSummaryAppRoot;
|
||||
@@ -1,3 +1,5 @@
|
||||
// Settings Provider
|
||||
// Purpose: Supplies app-wide settings state and namespace-scoped update APIs. Scope: Bridges persistence helpers with React context for consistent settings access.
|
||||
import { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';
|
||||
import { loadSettings, saveSettings } from './persistence.js';
|
||||
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
// Settings Constants
|
||||
// Purpose: Defines keys/defaults used by the persisted settings subsystem. Scope: Centralizes stable identifiers and fallback values for settings storage.
|
||||
export const SETTINGS_COOKIE = 'roverSettings';
|
||||
export const SETTINGS_MAX_AGE = 60 * 60 * 24 * 365; // 1 year
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
// Settings Module Exports
|
||||
// Purpose: Re-exports settings provider and hooks from a single import path. Scope: Keeps settings consumers decoupled from internal file layout.
|
||||
export { SettingsProvider, useSettings, useSettingsNamespace } from './SettingsProvider.jsx';
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Settings Namespaces
|
||||
// Purpose: Defines namespace identifiers used to segment persisted settings data. Scope: Prevents key collisions and standardizes settings lookup domains.
|
||||
export const INPUT_SETTINGS_DEFAULTS = {
|
||||
keyboard: {
|
||||
baseSpeed: 250,
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Settings Persistence
|
||||
// Purpose: Implements local persistence read/write behavior for settings namespaces. Scope: Encapsulates storage IO, parsing guards, and migration-safe defaults.
|
||||
import { SETTINGS_COOKIE, SETTINGS_MAX_AGE } from './constants.js';
|
||||
|
||||
function parseCookieValue(raw) {
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
import SpectatorAppRoot from './SpectatorApp/SpectatorAppRoot.jsx';
|
||||
|
||||
export default SpectatorAppRoot;
|
||||
Reference in New Issue
Block a user