import { createWorkspaceModel, foldersAtom, patchModel } from '@yaakapp-internal/models'; import { useAtomValue } from 'jotai'; import { useMemo } from 'react'; import { useAuthTab } from '../hooks/useAuthTab'; import { useEnvironmentsBreakdown } from '../hooks/useEnvironmentsBreakdown'; import { useHeadersTab } from '../hooks/useHeadersTab'; import { useInheritedHeaders } from '../hooks/useInheritedHeaders'; import { Button } from './core/Button'; import { CountBadge } from './core/CountBadge'; import { Input } from './core/Input'; import { Link } from './core/Link'; import { 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 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 ( patchModel(folder, { name })} stateKey={`name.${folder.id}`} /> patchModel(folder, { description })} /> patchModel(folder, { headers })} stateKey={`headers.${folder.id}`} /> {folderEnvironment == null ? (

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

) : ( )}
); }