项目作者: mizchi

项目描述 :
Tree structure controller for drag and drop
高级语言: TypeScript
项目地址: git://github.com/mizchi/tree-utils.git
创建时间: 2019-01-08T16:07:05Z
项目社区:https://github.com/mizchi/tree-utils

开源协议:

下载


@mizchi/tree-utils

Non-destructive tree utils.

  1. yarn add @mizchi/test-utils

Example

  1. import { moveNode, Node } from "@mizchi/tree-utils";
  2. const sampleTree: Node<number> = {
  3. id: "root",
  4. data: 1,
  5. children: [
  6. {
  7. id: "c0",
  8. data: 2,
  9. children: [
  10. {
  11. id: "c0-0",
  12. data: 3,
  13. children: []
  14. }
  15. ]
  16. },
  17. {
  18. id: "c1",
  19. data: 4,
  20. children: [
  21. {
  22. id: "c1-0",
  23. data: 5,
  24. children: []
  25. },
  26. {
  27. id: "c1-1",
  28. data: 6,
  29. children: []
  30. }
  31. ]
  32. }
  33. ]
  34. };
  35. import assert from "assert";
  36. // move c0-0 under c1 with index 1
  37. const r0 = moveNode(sampleTree, "c0-0", "c1", 1);
  38. assert.deepEqual(r0.children[0].children.length, 0);
  39. assert.deepEqual(r0.children[1].children.length, 3);
  40. assert.deepEqual(r0.children[1].children.map(i => i.id), [
  41. "c1-0",
  42. "c0-0",
  43. "c1-1"
  44. ]);
  45. // move c1-0 under c0 with index 0
  46. const r1 = moveNode(sampleTree, "c1-0", "c0", 0);
  47. assert.deepEqual(r1.children[0].children.map(i => i.id), ["c1-0", "c0-0"]);
  48. assert.deepEqual(r1.children[1].children.map(i => i.id), ["c1-1"]);

See detail index.d.ts and __tests__/index.test.ts

Inverted

Performant inverted version

  1. import * as treeUtils from "@mizchi/tree-utils/inverted";
  2. const inv = treeUtils.toInvertedTree({ id: "1", data: 1, children: [] });
  3. const inv2 = treeUtils.appendNode(
  4. inv,
  5. {
  6. id: "2",
  7. data: 2,
  8. children: [
  9. {
  10. id: "3",
  11. data: 3,
  12. children: []
  13. }
  14. ]
  15. },
  16. "1"
  17. );
  18. assert.deepEqual(inv2, {
  19. childrenMap: {
  20. "1": ["2"],
  21. "2": ["3"],
  22. "3": []
  23. },
  24. dataMap: {
  25. "1": 1,
  26. "2": 2,
  27. "3": 3
  28. },
  29. parentMap: {
  30. "1": null,
  31. "2": "1",
  32. "3": "2"
  33. }
  34. });
  35. // convert to node tree
  36. const node = treeUtils.toNode(inv2);

See detail inverted.ts and __tests__/inverted.d.ts

LICENSE

MIT