1.8.0 • Published 5 years ago

@machinek56/tree v1.8.0

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

@widgetjs/tree

NPM version David deps npm downloads gzip size

A lightweight tree widget.

Features

  • Compatible with VanillaJS / React / Vue
  • Tiny size after gzip
  • Zero dependence

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.

  • treeContainer - string - css selector of the tree container(document.querySelector inside).
  • parameters - object - options of the tree.

For example:

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

Basic Node Format

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

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

var 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
var values = myTree.values;

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

myTree.selectedNodes

// get
var selectedNodes = myTree.selectedNodes;

myTree.disables

// get
var disables = myTree.disables;

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

myTree.disabledNodes

// get
var disabledNodes = myTree.disabledNodes;

Events

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

Examples

var 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'}],
  },
];

var myTree = new Tree('#container', {
  data: treeData,
});

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

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