import type { Folder, GrpcRequest, HttpRequest, WebsocketRequest } from "@yaakapp-internal/models"; import { foldersAtom } from "@yaakapp-internal/models"; import classNames from "classnames"; import { useAtomValue } from "jotai"; import type { CSSProperties, ReactNode } from "react"; import { useCallback, useMemo } from "react"; import { allRequestsAtom } from "../hooks/useAllRequests"; import { useFolderActions } from "../hooks/useFolderActions"; import { useLatestHttpResponse } from "../hooks/useLatestHttpResponse"; import { sendAnyHttpRequest } from "../hooks/useSendAnyHttpRequest"; import { fireAndForget } from "../lib/fireAndForget"; import { showDialog } from "../lib/dialog"; import { resolvedModelName } from "../lib/resolvedModelName"; import { router } from "../lib/router"; import { Button } from "./core/Button"; import { Heading } from "./core/Heading"; import { HttpResponseDurationTag } from "./core/HttpResponseDurationTag"; import { HttpStatusTag } from "./core/HttpStatusTag"; import { Icon } from "./core/Icon"; import { IconButton } from "./core/IconButton"; import { LoadingIcon } from "./core/LoadingIcon"; import { Separator } from "./core/Separator"; import { SizeTag } from "./core/SizeTag"; import { HStack } from "./core/Stacks"; import { HttpResponsePane } from "./HttpResponsePane"; interface Props { folder: Folder; style: CSSProperties; } export function FolderLayout({ folder, style }: Props) { const folders = useAtomValue(foldersAtom); const requests = useAtomValue(allRequestsAtom); const folderActions = useFolderActions(); const sendAllAction = useMemo( () => folderActions.find((a) => a.label === "Send All"), [folderActions], ); const children = useMemo(() => { return [ ...folders.filter((f) => f.folderId === folder.id), ...requests.filter((r) => r.folderId === folder.id), ]; }, [folder.id, folders, requests]); const handleSendAll = useCallback(() => { if (sendAllAction) fireAndForget(sendAllAction.call(folder)); }, [sendAllAction, folder]); return (
{request.method} {request.url}
{latestResponse ? (
) : (