import type { Meta, StoryObj } from '@storybook/react' import { useState } from 'react' import type { Selection } from 'react-stately' import { Tree, type TreeItemType } from './Tree' const meta = { title: 'Components/Tree', component: Tree, args: { items: [], }, argTypes: { selectionMode: { control: 'select', options: ['single', 'multiple', 'none'], }, enableDragAndDrop: { control: 'boolean', }, }, } satisfies Meta export default meta type Story = StoryObj const sampleItems: TreeItemType[] = [ { id: 1, title: '프로젝트 A', type: 'directory', children: [ { id: 11, title: '문서 1', type: 'file' }, { id: 12, title: '문서 2', type: 'file' }, { id: 13, title: '문서 3', type: 'file' }, ], }, { id: 2, title: '프로젝트 B', type: 'directory', children: [ { id: 21, title: '파일 1', type: 'file' }, { id: 22, title: '파일 2', type: 'file' }, ], }, { id: 3, title: '프로젝트 C', type: 'directory', children: [ { id: 31, title: '항목 1', type: 'file' }, { id: 32, title: '항목 2', type: 'file' }, { id: 33, title: '항목 3', type: 'file' }, { id: 34, title: '항목 4', type: 'file' }, ], }, ] export const Default: Story = { args: { items: sampleItems, selectionMode: 'single', }, } export const SingleSelection: Story = { render: function Render() { const [selectedKeys, setSelectedKeys] = useState(new Set()) return (
} onSelectionChange={setSelectedKeys} />
) }, } export const MultipleSelection: Story = { render: function Render() { const [selectedKeys, setSelectedKeys] = useState(new Set()) return (
} onSelectionChange={setSelectedKeys} />
) }, } export const WithDragAndDrop: Story = { render: function Render() { const [selectedKeys, setSelectedKeys] = useState(new Set()) return (
} onSelectionChange={setSelectedKeys} enableDragAndDrop={true} onReorder={(sourceKey, targetKey, dropPosition, parentKey) => { console.log('Reorder:', { sourceKey, targetKey, dropPosition, parentKey }) }} />
) }, } export const WithoutDragAndDrop: Story = { args: { items: sampleItems, selectionMode: 'single', enableDragAndDrop: false, }, } export const NestedTree: Story = { args: { items: [ { id: 1, title: '루트 폴더', type: 'directory', children: [ { id: 11, title: '하위 폴더 1', type: 'directory', children: [ { id: 111, title: '파일 A', type: 'file' }, { id: 112, title: '파일 B', type: 'file' }, ], }, { id: 12, title: '하위 폴더 2', type: 'directory', children: [ { id: 121, title: '파일 C', type: 'file' }, ], }, ], }, ], selectionMode: 'single', }, }