import { createWorkspaceModel, foldersAtom, patchModel } from "@yaakapp-internal/models"; import { useAtomValue } from "jotai"; import { Fragment, useMemo } from "react"; import { useAuthTab } from "../hooks/useAuthTab"; import { useEnvironmentsBreakdown } from "../hooks/useEnvironmentsBreakdown"; import { useHeadersTab } from "../hooks/useHeadersTab"; import { useInheritedHeaders } from "../hooks/useInheritedHeaders"; import { useModelAncestors } from "../hooks/useModelAncestors"; import { deleteModelWithConfirm } from "../lib/deleteModelWithConfirm"; import { hideDialog } from "../lib/dialog"; import { CopyIconButton } from "./CopyIconButton"; import { Button } from "./core/Button"; import { CountBadge } from "./core/CountBadge"; import { Icon } from "./core/Icon"; import { InlineCode } from "./core/InlineCode"; import { Input } from "./core/Input"; import { Link } from "./core/Link"; import { HStack, VStack } from "./core/Stacks"; import type { TabItem } from "./core/Tabs/Tabs"; import { TabContent, Tabs } from "./core/Tabs/Tabs"; import { EmptyStateText } from "./EmptyStateText"; import { EnvironmentEditor } from "./EnvironmentEditor"; import { HeadersEditor } from "./HeadersEditor"; import { HttpAuthenticationEditor } from "./HttpAuthenticationEditor"; import { MarkdownEditor } from "./MarkdownEditor"; interface Props { folderId: string | null; tab?: FolderSettingsTab; } const TAB_AUTH = "auth"; const TAB_HEADERS = "headers"; const TAB_VARIABLES = "variables"; const TAB_GENERAL = "general"; export type FolderSettingsTab = | typeof TAB_AUTH | typeof TAB_HEADERS | typeof TAB_GENERAL | typeof TAB_VARIABLES; export function FolderSettingsDialog({ folderId, tab }: Props) { const folders = useAtomValue(foldersAtom); const folder = folders.find((f) => f.id === folderId) ?? null; const ancestors = useModelAncestors(folder); const breadcrumbs = useMemo(() => ancestors.toReversed(), [ancestors]); const authTab = useAuthTab(TAB_AUTH, folder); const headersTab = useHeadersTab(TAB_HEADERS, folder); const inheritedHeaders = useInheritedHeaders(folder); const environments = useEnvironmentsBreakdown(); const folderEnvironment = environments.allEnvironments.find( (e) => e.parentModel === "folder" && e.parentId === folderId, ); const numVars = (folderEnvironment?.variables ?? []).filter((v) => v.name).length; const tabs = useMemo(() => { if (folder == null) return []; return [ { value: TAB_GENERAL, label: "General", }, ...headersTab, ...authTab, { value: TAB_VARIABLES, label: "Variables", rightSlot: numVars > 0 ? : null, }, ]; }, [authTab, folder, headersTab, numVars]); if (folder == null) return null; return (
{breadcrumbs.map((item, index) => ( {index > 0 && ( )} {item.name} ))} {breadcrumbs.length > 0 && ( )} {folder.name}
patchModel(folder, { name })} stateKey={`name.${folder.id}`} /> patchModel(folder, { description })} /> {folder.id}
patchModel(folder, { headers })} stateKey={`headers.${folder.id}`} /> {folderEnvironment == null ? (

Override{" "} Variables {" "} for requests within this folder.

) : ( )}
); }