Skip to content

Tree with Checkboxes & Drag-and-Drop

Checkboxes for multi-selection and drag-and-drop to reorder nodes.

tsx
import { useState } from 'react'
import { Tree } from '@itsmemyk/react-tree-grid/tree'
import { ThemeProvider } from '@itsmemyk/react-tree-grid'
import type { TreeNode } from '@itsmemyk/react-tree-grid/tree'

const initialData: TreeNode[] = [
  {
    id: 'fruits',
    value: 'Fruits',
    $opened: true,
    items: [
      { id: 'apple', value: 'Apple' },
      { id: 'banana', value: 'Banana' },
      { id: 'cherry', value: 'Cherry' },
    ],
  },
  {
    id: 'veggies',
    value: 'Vegetables',
    $opened: true,
    items: [
      { id: 'carrot', value: 'Carrot' },
      { id: 'pea', value: 'Pea' },
    ],
  },
]

export function CheckboxDragTree() {
  const [checked, setChecked] = useState<string[]>([])

  return (
    <ThemeProvider>
      <p>Checked: {checked.join(', ') || 'none'}</p>
      <Tree
        data={initialData}
        checkbox
        dragItem="both"
        checked={checked}
        onCheck={setChecked}
        onDrop={(dragId, targetId, position) => {
          console.log(`Move ${dragId} ${position} ${targetId}`)
          // Update your data state here to persist the reorder
        }}
      />
    </ThemeProvider>
  )
}

Released under the MIT License.