bookshelf-hierarchy

0.0.7 • Public • Published

Hierarchical Data plugin for Bookshelf.js (WIP)

Example

Example data from test-data.sql:

mysql> source show-tree.sql;
+----+------------------------+
| id | name                   |
+----+------------------------+
|  1 | ELECTRONICS            |
|  2 |   TELEVISIONS          |
|  3 |     TUBE               |
|  4 |     LCD                |
|  5 |     PLASMA             |
|  6 |   PORTABLE ELECTRONICS |
|  7 |     MP3 PLAYERS        |
|  8 |       FLASH            |
|  9 |     CD PLAYERS         |
| 10 |     2 WAY RADIOS       |
+----+------------------------+

Model definition

var Category = ORM.Model.extend({
  tableName: 'nested_category',
  nestedSet: true,
});

You can configure the default configuration in the nestedSet key:

{
  fields: {
    left: 'lft',
    right: 'rgt',
    parentId: 'parent_id',
  }
}

Insert and delete node

// load the plugin
ORM.plugin(require('bookshelf-hierarchy').NestedSetModel);
 
// wrap in transaction
ORM.transaction(t => {
 
  // save a new child node under TELEVISIONS
  new Category().save({name: '3D TV', parent_id: 2}, {transacting: t})
  .then(category => {
 
    // removes FLASH from under MP3 PLAYERS
    new Category().removeFromTree({id: 8}, {transacting: t}).then(res => {
      t.commit();
    });
 
  });
})

findChildren

// get children of PORTABLE ELECTRONICS
Category.forge().fetchAll({
  findChildren: {
    for: 6,
    direct: false, // set true to retrieve direct nodes
  }
})

findPath

// get nodes leading to 3D TV (id 11)
Category.forge().fetchAll({
  findPath: {
    for: 11
  },
  transacting: t,
})

setParent

// move TELEVISIONS (2) under PORTABLE ELECTRONICS (6)
new Category().setParent(2, 6, {transacting: t}).then(() => {
  console.log('node moved')
});

Scope

// Configuring scope for a model instance with `section_id` = 2:
new Category({}, {scope: {section_id: 2}}).fetchAll({
})

Running tests

```mysql < test-data.sql ; npm test``

Todo

  • transaction support
  • findPath
  • findChildren
  • findTreeList
  • formatTreeList
  • removeFromTree
  • setParent
  • moveUp
  • moveDown
  • recover

Readme

Keywords

Package Sidebar

Install

npm i bookshelf-hierarchy

Weekly Downloads

2

Version

0.0.7

License

MIT

Last publish

Collaborators

  • rchavik