1.0.0 • Published 4 years ago

react-tree-select-hook v1.0.0

Weekly downloads
4
License
MIT
Repository
github
Last release
4 years ago

react-tree-select-hook

A headless tree select utility using hooks.

NPM JavaScript Style Guide

Install

npm install --save react-tree-select-hook

Usage

import React from 'react'
import { useTreeSelect } from 'react-tree-select-hook'

const drinksAndSnacksNodes = [
  {
    label: 'Drinks',
    children: [
      {
        label: 'Coke'
      },
      {
        label: 'Water'
      }
    ]
  },
  {
    label: 'Snacks',
    children: [
      {
        label: 'Cookies'
      }
    ]
  }
]

export const Standard = () => {
  const {
    nodes,
    getCheckboxProps,
    getExpandButtonProps,
    isExpanded,
    simplifiedSelection
  } = useTreeSelect(drinksAndSnacksNodes)

  // Since the tree can have a variable number of levels, let's define a component that renders
  // in a recursive way
  const TreeSelectNode = ({ node }) => {
    return (
      <li>
        <label>
          <input {...getCheckboxProps(node.id)} />
          {node.label}
          {node.children && (
            <button {...getExpandButtonProps(node.id)} type='button'>
              {isExpanded(node.id) ? '-' : '+'}
            </button>
          )}
        </label>
        {node.children && isExpanded(node.id) && (
          <ul>
            {node.children.map((node) => (
              <TreeSelectNode key={node.id} node={node} />
            ))}
          </ul>
        )}
      </li>
    )
  }

  return (
    <div>
      <span>{simplifiedSelection.map((el) => el.label).join(', ')}</span>
      <ul>
        {nodes.map((node) => {
          return <TreeSelectNode key={node.id} node={node} />
        })}
      </ul>
    </div>
  )
}

License

MIT © Björn Wahle