import { foldersAtom, patchModel } from '@yaakapp-internal/models'; import { useAtomValue } from 'jotai'; import { useMemo, useState } from 'react'; import { useAuthTab } from '../hooks/useAuthTab'; import { useHeadersTab } from '../hooks/useHeadersTab'; import { useInheritedHeaders } from '../hooks/useInheritedHeaders'; import { Input } from './core/Input'; import { VStack } from './core/Stacks'; import type { TabItem } from './core/Tabs/Tabs'; import { TabContent, Tabs } from './core/Tabs/Tabs'; 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_GENERAL = 'general'; export type FolderSettingsTab = typeof TAB_AUTH | typeof TAB_HEADERS | typeof TAB_GENERAL; export function FolderSettingsDialog({ folderId, tab }: Props) { const folders = useAtomValue(foldersAtom); const folder = folders.find((f) => f.id === folderId) ?? null; const [activeTab, setActiveTab] = useState(tab ?? TAB_GENERAL); const authTab = useAuthTab(TAB_AUTH, folder); const headersTab = useHeadersTab(TAB_HEADERS, folder); const inheritedHeaders = useInheritedHeaders(folder); const tabs = useMemo(() => { if (folder == null) return []; return [ { value: TAB_GENERAL, label: 'General', }, ...authTab, ...headersTab, ]; }, [authTab, folder, headersTab]); if (folder == null) return null; return ( patchModel(folder, { name })} stateKey={`name.${folder.id}`} /> patchModel(folder, { description })} /> patchModel(folder, { headers })} stateKey={`headers.${folder.id}`} /> ); }