Skip to content

A general tree support tree operation.

License

Notifications You must be signed in to change notification settings

gxsshallot/general-tree

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

general-tree

npm version Build Status

A general tree support tree operation.

Install

Install by Yarn:

yarn add general-tree

Install by NPM:

npm install --save general-tree

Usage

Import the module in file:

import Tree from 'general-tree';

Construct

You can convert a javascript object to a tree. It will use several key to identify id and children.

Constructor declaration is:

constructor(
    root,
    parent = undefined,
    childrenKey = 'children',
    idKey = 'id',
    onStatusChange = undefined
)
  • root: Object to be converted.
  • parent: A Tree object to be parent node.
  • childrenKey: root[childrenKey] will be used to generate children Tree node. root[childrenKey] === undefined means it is a leaf node.
  • idKey: root[idKey] is an identifier of node, and will be used when initialization. It will be converted to a string when used.
  • onStatusChange: When a tree node's selection status change, it will be called with current node.

Example:

const node = {
    code: 1,
    label: 'Hello',
    childs: [
        {code: 2, label: 'aaa', childs: []}, // not a leaf
        {code: 3, label: 'bbb'}, // a leaf
    ]
};
const tree = new Tree(node, null, 'childs', 'code', null);

Selection Status

A tree node have a selection status.

export const NotSelect = 0;
export const IncompleteSelect = 0.5;
export const FullSelect = 1;

A leaf node only have two status: NotSelect or FullSelect.

A not leaf node have all three status. IncompleteSelect means its children is not all selected.

The selection status will be initialized in constructor with NotSelect. And you can use setInitialState to set a initial selection state of a tree.

Then you can call update method to change a tree node selection status automatically.

Interface

  • isLeaf(): boolean
  • isEqual(treeNode: Tree): boolean
  • selectStatus(cascade: boolean): 0 | 0.5 | 1
  • isFullSelect(cascade: boolean): boolean
  • isNotSelect(cascade: boolean): boolean
  • isIncompleteSelect(cascade: boolean): boolean
  • getLeafCount(): number
  • getSelectedLeafCount(): number
  • getDeepth(): number
  • getInfo(): object
  • getId(): any
  • getStringId(): string
  • getParent(): Tree?
  • getChildren(): Tree[]?
  • getLeafChildren(): Tree[]
  • getLeafChildrenCount(): number
  • getSelectedLeafChildrenCount(): number
  • getPath(): string
  • setInitialState(selectedIds: any[], cascade: boolean): Tree[]
  • update(cascade: boolean): void
  • search(text: string, keys: string[], multiselect: boolean, exactly: boolean, canSearch: boolean): Tree[]
  • hasAncestor(ancestor: Tree): boolean
  • findById(childId: any): Tree[]