All files / client/src/components/features/simulator SimulatorSidebar.tsx

100% Statements 2/2
60% Branches 3/5
100% Functions 1/1
100% Lines 2/2

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62                                                                    5x   5x                                                  
import { PinMonitor } from "@/components/features/pin-monitor";
import { ArduinoBoard } from "@/components/features/arduino-board";
import type { PinState, BatchStats } from "@/hooks/use-simulation-store";
 
type SimulationStatus = "running" | "stopped" | "paused";
 
type SimulatorSidebarProps = {
  readonly pinMonitorVisible: boolean;
  readonly pinStates: PinState[];
  readonly batchStats: BatchStats;
  readonly simulationStatus: SimulationStatus | undefined;
  readonly txActivity: number;
  readonly rxActivity: number;
  readonly onReset: () => void;
  readonly onPinToggle: (pin: number, newValue: number) => void;
  readonly analogPins: number[];
  readonly onAnalogChange: (pin: number, newValue: number) => void;
  readonly isMobile?: boolean;
};
 
export default function SimulatorSidebar({
  pinMonitorVisible,
  pinStates,
  batchStats,
  simulationStatus,
  txActivity,
  rxActivity,
  onReset,
  onPinToggle,
  analogPins,
  onAnalogChange,
  isMobile = false,
}: SimulatorSidebarProps) {
  // Pure UI/presentation component — receives data + callbacks from parent hooks.
  const isRunning = simulationStatus !== "stopped";
 
  return (
    <div className={isMobile ? "h-full w-full" : "h-full w-full flex flex-col gap-3 p-2 overflow-y-auto"}>
      {pinMonitorVisible && (
        <div>
          <PinMonitor pinStates={pinStates} batchStats={batchStats} />
      {/* telemetry display could be added here if desired */}
        </div>
      )}
 
      <div className="flex-1 min-h-0">
        <ArduinoBoard
          pinStates={pinStates}
          isSimulationRunning={isRunning}
          simulationStatus={simulationStatus}
          txActive={txActivity}
          rxActive={rxActivity}
          onReset={onReset}
          onPinToggle={onPinToggle}
          analogPins={analogPins}
          onAnalogChange={onAnalogChange}
        />
      </div>
    </div>
  );
}