From 6534421733a427adc5e2a5233db4c7ba06729d86 Mon Sep 17 00:00:00 2001 From: Gregory Schier Date: Sun, 8 Mar 2026 16:37:25 -0700 Subject: [PATCH] Start extracting Tree component --- .../components/EnvironmentEditDialog.tsx | 17 +++ apps/yaak-client/components/Sidebar.tsx | 21 ++- .../components/core/PairEditor.tsx | 3 +- .../yaak-client/components/core/Tabs/Tabs.tsx | 3 +- .../yaak-client/components/core/tree/Tree.tsx | 140 +++++++++--------- .../components/core/tree/TreeDropMarker.tsx | 8 +- .../components/core/tree/TreeItem.tsx | 59 ++++---- .../components/core/tree/TreeItemList.tsx | 2 +- .../yaak-client/components/core/tree/atoms.ts | 26 ---- .../components/core/tree/common.ts | 26 +++- .../components/core/tree/context.ts | 60 ++++++++ apps/yaak-proxy/main.tsx | 9 +- apps/yaak-proxy/store.ts | 2 +- .../yaak-proxy-lib/bindings/gen_rpc.ts | 8 +- crates-proxy/yaak-proxy-lib/src/lib.rs | 21 +++ packages/model-store/src/index.ts | 15 +- packages/ui/src/components/DropMarker.tsx | 34 +++++ packages/ui/src/index.ts | 2 + packages/ui/src/lib/dnd.ts | 39 +++++ 19 files changed, 344 insertions(+), 151 deletions(-) create mode 100644 apps/yaak-client/components/core/tree/context.ts create mode 100644 packages/ui/src/components/DropMarker.tsx create mode 100644 packages/ui/src/lib/dnd.ts diff --git a/apps/yaak-client/components/EnvironmentEditDialog.tsx b/apps/yaak-client/components/EnvironmentEditDialog.tsx index f7faf6f8..ddce40b6 100644 --- a/apps/yaak-client/components/EnvironmentEditDialog.tsx +++ b/apps/yaak-client/components/EnvironmentEditDialog.tsx @@ -15,12 +15,15 @@ import { resolvedModelName } from '../lib/resolvedModelName'; import { showColorPicker } from '../lib/showColorPicker'; import { Banner } from './core/Banner'; import type { ContextMenuProps, DropdownItem } from './core/Dropdown'; +import { ContextMenu } from './core/Dropdown'; import { Icon } from '@yaakapp-internal/ui'; import { IconButton } from './core/IconButton'; import { IconTooltip } from './core/IconTooltip'; import { InlineCode } from './core/InlineCode'; import type { PairEditorHandle } from './core/PairEditor'; import { SplitLayout } from './core/SplitLayout'; +import { atomFamily } from 'jotai/utils'; +import { atomWithKVStorage } from '../lib/atoms/atomWithKVStorage'; import type { TreeNode } from './core/tree/common'; import type { TreeHandle, TreeProps } from './core/tree/Tree'; import { Tree } from './core/tree/Tree'; @@ -28,6 +31,11 @@ import { EnvironmentColorIndicator } from './EnvironmentColorIndicator'; import { EnvironmentEditor } from './EnvironmentEditor'; import { EnvironmentSharableTooltip } from './EnvironmentSharableTooltip'; +const collapsedFamily = atomFamily((treeId: string) => { + const key = ['env_collapsed', treeId ?? 'n/a']; + return atomWithKVStorage>(key, {}); +}); + interface Props { initialEnvironmentId: string | null; setRef?: (ref: PairEditorHandle | null) => void; @@ -292,6 +300,13 @@ function EnvironmentEditDialogSidebar({ [setSelectedEnvironmentId], ); + const renderContextMenuFn = useCallback['renderContextMenu']>>( + ({ items, position, onClose }) => ( + + ), + [], + ); + const tree = useAtomValue(treeAtom); return (