Home

Awesome

@widgetjs/tree

Version Downloads Total Downloads Monthly gzip size gzip size

A lightweight flexible tree widget.

Features

Demo

Online Demo

demo.gif

Install

npm i -S @widgetjs/tree

Usage

React/Vue usage

import Tree from '@widgetjs/tree';

VanillaJS usage

<script src="path/to/tree.min.js"></script>

Initialize

new Tree(treeContainer, parameters), returns initialized Tree instance.

Basic Node Format

{
  "id": "unique_ID",
  "text": "node-0",
  "attributes": {},
  "children": [],
  "checked": true
}
NameTypeDescriptionRequired
idanyunique idRequired
textstringtree node labelRequired
attributesobjectcustom attributes of the nodeOptional
childrenarraychildren of current nodeOptional
checkedbooleanwhether the node is selected or notOptional

Example

const myTree = new Tree('#container', {
  url: '/api/treeJson',
});

Parameters

NameTypeDescription
urlstringa URL to retrieve remote data,or use data
methodstringhttp method(GET/POST), default 'GET'
dataarraythe json tree data
valuesarrayids which you want to check
closeDepthintegerexpand level
beforeLoadfunctioninvoke before the tree load data. Format raw data in this function.
loadedfunctioninvoke after the tree load data
onChangefunctioninvoke when the node status change

Example

const treeData = [
  {
    id: '0',
    text: 'node-0',
    children: [
      {
        id: '0-0',
        text: 'node-0-0',
        children: [
          {id: '0-0-0', text: 'node-0-0-0'},
          {id: '0-0-1', text: 'node-0-0-1'},
          {id: '0-0-2', text: 'node-0-0-2'},
        ],
      },
      {id: '0-1', text: 'node-0-1'},
    ],
  },
  {
    id: '1',
    text: 'node-1',
    children: [{id: '1-0', text: 'node-1-0'}, {id: '1-1', text: 'node-1-1'}],
  },
];

const myTree = new Tree('#container', {
  data: treeData,
});
const myTree = new Tree('#container', {
  url: '/api/treeJson',
  method: 'GET',

  values: ['1', '2', '3'],

  // only expand level 1 node
  closeDepth: 1,

  beforeLoad: function(rawData) {
    function formatData() {
      // do some format
    }
    return formatData(rawData);
  },

  loaded: function() {
    // do something or set values after Tree loaded callback
    // do not use arrow function `()=>` , if you use `this`, use function instead.
    // this context bind current tree instance
    this.values = ['0-1'];
  },

  onChange: function() {
    console.log(this.values);
  },
});

Properties

PropertyTypeOperationDescription
valuesarrayget/setselected values.
selectedNodesarraygetselected nodes data with attributes.
disablesarrayget/setget disabled values, or set disable nodes.
disabledNodesarraygetdisabled nodes data with attributes.

myTree.values

// get
const values = myTree.values;

// set
tree.values = ['0-1'];

myTree.selectedNodes

// get
const selectedNodes = myTree.selectedNodes;

myTree.disables

// get
const disables = myTree.disables;

// set
tree.disables = ['0-1'];

myTree.disabledNodes

// get
const disabledNodes = myTree.disabledNodes;

Events

EventParametersDescription
beforeLoadcurrent datainvoke before the tree load data
loadednullinvoke after the tree load data
onChangenullinvoke when the node status change

Methods

MethodParametersDescription
expandAllnullexpand all tree nodes
collapseAllnullcollapse all tree nodes

License

MIT


Like @widgetjs/tree? just 🌟 star the project! Create issues if you find bug.