0.3.2 • Published 3 years ago

react-drag-hierarchy-tree v0.3.2

Weekly downloads
-
License
MIT
Repository
github
Last release
3 years ago

React Drag Hierarchy Tree

NPM version NPM license PRs Welcome

A React component for Drag-and-drop hierarchy tree data.

Table of Contents

Gravação de Tela 2021-10-30 às 02 26 15

Getting started

Install react-drag-hierarchy-tree using npm.

# NPM
npm install react-drag-hierarchy-tree --save
# YARN
yarn add react-drag-hierarchy-tree

Usage

import * as React from 'react';
import * as ReactDOM from 'react-dom';

import OrgTreeComponent, { useTree } from 'react-drag-hierarchy-tree';

const data = {
  id: 1,
  label: "President",
  children: [
    {
      id: 2,
      label: "Administrative",
      children: [
        {
          id: 3,
          label: "Director",
          children: [],
        },
      ],
    },
    {
      id: 4,
      label: "Finances",
      children: [
        {
          id: 5,
          label: "Seller",
          children: [],
        },
      ],
    },
  ],
};

const App = () => {
  const { treeRef } = useTree();

  const onClick = () => {
    treeRef.current?.onExpandNodes();
  };

  return (
    <div>
      <button onClick={onClick}>close/open</button>
      <OrgTreeComponent data={data} ref={treeRef} horizontal />
    </div>
  );
};

ReactDOM.render(<App />, document.getElementById('root'));

Props

PropTypeDescription
data(required)object[]Tree data with the following keys: id is the primary and unique key.label is the primary label for the node.expand shows children of the node if true, or hides them if false. Defaults to false.style edit styles for the card container for each node.children is an array of child nodes belonging to the node.Example: [{id:'uui1', label: 'main'}, { id:'uui1', label: 'main' , expand: true, children: [] }] You can also add any key you what, thats is useful for the prop renderCard below, where tou can use to personalize your card component
ref(recommended)refIs the ref ussed to get all methods related to the component, you should use the treeRef exported form the useTree hook.
horizontalbooleanSet if tree should be horizontal or vertical (default: false)
renderCardfuncUssed to replace the card component. It returns from the function ({ isDragging: bool, label: string, item: {id:string, label:'string'}, isPreviewCard }) => JSX.Element
renderButtonfuncUssed to replace the button collapse component. It returns from the function. ({ onClick: (event: MouseEvent<any>) => void, isCollapsed: boolean | undefined }): JSX.ELlement
collapsableboolIf childrens should collapse or not.
expandAllboolIf the childrens should start expanded.
strokeColorcolorColor of line / stroke
strokeWidthstringLine width. 1px 2px 3px 4px 5px
cardStyleobjectCard inline styles CSSProperties`.
buttonBackgroundColorcolorCollapse button color.

UseTree Hook

This hooks returns a ref that can access many data and helpers by ussing treeRef.current.

  • data: Returns the actual hierarchy data.
  • onExpandNodes: Expands or collapse all node.
  • addChildrenById: Add a children node by id.
  • removeById: Remove a node by id.
  • editById: edit a node by id.
  • findById: Find and return node by id.
  • findParentByChildId: Return parent by child id.
  • nestedObjectToArray: Transform the nested object to an array.
  • arrayToNestedObject: Transform back the array to the nested object.

Pull requests are welcome!

License

MIT