import type { HttpResponse } from "@yaakapp-internal/models"; import { type ReactNode, useMemo } from "react"; import { getRequestBodyText as getHttpResponseRequestBodyText } from "../hooks/useHttpRequestBody"; import { useToggle } from "../hooks/useToggle"; import { isProbablyTextContentType } from "../lib/contentType"; import { getContentTypeFromHeaders } from "../lib/model_util"; import { CopyButton } from "./CopyButton"; import { Banner } from "./core/Banner"; import { Button } from "./core/Button"; import { InlineCode } from "./core/InlineCode"; import { SizeTag } from "./core/SizeTag"; import { HStack } from "./core/Stacks"; interface Props { children: ReactNode; response: HttpResponse; } const LARGE_BYTES = 2 * 1000 * 1000; export function ConfirmLargeResponseRequest({ children, response }: Props) { const [showLargeResponse, toggleShowLargeResponse] = useToggle(); const isProbablyText = useMemo(() => { const contentType = getContentTypeFromHeaders(response.headers); return isProbablyTextContentType(contentType); }, [response.headers]); const contentLength = response.requestContentLength ?? 0; const isLarge = contentLength > LARGE_BYTES; if (!showLargeResponse && isLarge) { return (

Showing content over{" "} {" "} may impact performance

{isProbablyText && ( getHttpResponseRequestBodyText(response).then((d) => d?.bodyText ?? "")} /> )}
); } return <>{children}; }