diff --git a/src-web/commands/openFolderSettings.tsx b/src-web/commands/openFolderSettings.tsx index 4271aa4b..28576ffc 100644 --- a/src-web/commands/openFolderSettings.tsx +++ b/src-web/commands/openFolderSettings.tsx @@ -1,21 +1,14 @@ import { getModel } from '@yaakapp-internal/models'; -import { Icon } from '../components/core/Icon'; -import { HStack } from '../components/core/Stacks'; import type { FolderSettingsTab } from '../components/FolderSettingsDialog'; import { FolderSettingsDialog } from '../components/FolderSettingsDialog'; import { showDialog } from '../lib/dialog'; -import { resolvedModelName } from '../lib/resolvedModelName'; export function openFolderSettings(folderId: string, tab?: FolderSettingsTab) { const folder = getModel('folder', folderId); + if (folder == null) return; showDialog({ id: 'folder-settings', - title: ( - - - {resolvedModelName(folder)} - - ), + title: null, size: 'lg', className: 'h-[50rem]', noPadding: true, diff --git a/src-web/components/FolderSettingsDialog.tsx b/src-web/components/FolderSettingsDialog.tsx index 40b6526a..334e1f2b 100644 --- a/src-web/components/FolderSettingsDialog.tsx +++ b/src-web/components/FolderSettingsDialog.tsx @@ -1,12 +1,18 @@ -import { createWorkspaceModel, foldersAtom, patchModel } from '@yaakapp-internal/models'; +import { + createWorkspaceModel, + foldersAtom, + patchModel, +} from '@yaakapp-internal/models'; import { useAtomValue } from 'jotai'; -import { useMemo } from 'react'; +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 { Button } from './core/Button'; import { CountBadge } from './core/CountBadge'; +import { Icon } from './core/Icon'; import { Input } from './core/Input'; import { Link } from './core/Link'; import { VStack } from './core/Stacks'; @@ -37,6 +43,8 @@ export type FolderSettingsTab = 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); @@ -67,76 +75,107 @@ export function FolderSettingsDialog({ folderId, tab }: Props) { if (folder == null) return null; return ( - - - - - - - patchModel(folder, { name })} - stateKey={`name.${folder.id}`} +
+
+ +
+ {breadcrumbs.map((item, index) => ( + + {index > 0 && ( + + )} + + {item.name} + + + ))} + {breadcrumbs.length > 0 && ( + + )} + + {folder.name} + +
+
+ + + + + + + + patchModel(folder, { name })} + stateKey={`name.${folder.id}`} + /> + patchModel(folder, { description })} + /> + + + + patchModel(folder, { headers })} + stateKey={`headers.${folder.id}`} /> - patchModel(folder, { description })} - /> - - - - patchModel(folder, { headers })} - stateKey={`headers.${folder.id}`} - /> - - - {folderEnvironment == null ? ( - - -

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

- -
-
- ) : ( - - )} -
-
+ + + {folderEnvironment == null ? ( + + +

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

+ +
+
+ ) : ( + + )} +
+ +
); } diff --git a/src-web/components/Workspace.tsx b/src-web/components/Workspace.tsx index d8ed7590..f44975fa 100644 --- a/src-web/components/Workspace.tsx +++ b/src-web/components/Workspace.tsx @@ -135,6 +135,7 @@ export function Workspace() { open={!floatingSidebarHidden} portalName="sidebar" onClose={() => setFloatingSidebarHidden(true)} + zIndex={20} >