import React from "react"; import { Box, Text, useInput } from "ink"; import { Header } from "../parts/Header.js"; import { Footer } from "../parts/Footer.js"; import { MergeStatusList } from "../parts/MergeStatusList.js"; import { useTerminalSize } from "../../hooks/useTerminalSize.js"; import type { BatchMergeResult } from "../../types.js"; export interface BatchMergeResultScreenProps { result: BatchMergeResult; onBack?: () => void; onQuit?: () => void; } /** * BatchMergeResultScreen - Final result summary for batch merge * Layout: Header + Summary + Status List + Footer * @see specs/SPEC-ee33ca26/spec.md - FR-010 */ export function BatchMergeResultScreen({ result, onBack, onQuit, }: BatchMergeResultScreenProps) { const { rows } = useTerminalSize(); // Handle keyboard input useInput((input, key) => { if (input === "q" && onQuit) { onQuit(); } else if (key.escape && onBack) { onBack(); } }); const { summary, totalDurationSeconds, cancelled } = result; return (
{/* Summary Statistics */} Summary: ✓ Success: {summary.successCount} | ⊘ Skipped: {summary.skippedCount} | ✗ Failed: {summary.failedCount} | Total: {totalDurationSeconds.toFixed(1)}s {summary.pushedCount > 0 && ( ↑ Pushed: {summary.pushedCount} {summary.pushFailedCount > 0 && ( <> | Push Failed: {summary.pushFailedCount} )} )} {/* Detailed Status List */} Branch Details: {/* Messages for next actions */} {summary.skippedCount > 0 && ( Note: {summary.skippedCount} branch {summary.skippedCount > 1 ? "es" : ""} skipped due to conflicts. Please resolve manually. )}