import { formatSize } from "@yaakapp-internal/lib/formatSize"; import { Banner, EmptyStateText, LoadingIcon } from "@yaakapp-internal/ui"; import type { HttpBodyResult } from "@yaakapp-internal/ui/httpTypes"; import type { ReactNode } from "react"; import type { FlowBodyData } from "../lib/flowViews"; interface Props { /** The request body as the engine's body RPC returned it */ body: HttpBodyResult; /** The shared editor for the body's type */ editor: ReactNode; /** The proxy's own viewer, for a body that isn't text; null for one that is */ binaryViewer: ReactNode | null; /** Bytes of the request body on the wire */ requestSize: number; } /** * The request half's Body tab: the body in its editor, or why it isn't there yet. A body that * failed to load says why, as the response's viewer does, rather than reading as no body. */ export function FlowRequestBody({ body, editor, binaryViewer, requestSize }: Props) { if (body.error != null) { return ( {body.error.message} ); } if (body.isLoading) { return ( ); } if (binaryViewer != null) return binaryViewer; if (body.data?.truncated) { return (
First {formatSize(body.data.storedSize)} of {formatSize(requestSize)} kept
{editor}
); } return editor; }