@kcuf/helper-data 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 0.3.1 2025/12/18 @驳是
4
+
5
+ * FEAT `normalizeTreeList` 带过滤功能
6
+
3
7
  ## 0.3.0 2025/12/18 @驳是
4
8
 
5
9
  * FEAT 新增 `normalizeTreeList`
@@ -9,17 +9,14 @@ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/obje
9
9
  /**
10
10
  * 将平铺的数据转成树节点列表
11
11
  */
12
- function normalizeTreeList(list) {
12
+ function normalizeTreeList(list, filter) {
13
13
  var nodeMap = new Map();
14
- var treeList = list.map(function (v) {
14
+ var listClone = list.map(function (v) {
15
15
  var treeItem = (0, _objectSpread2.default)({}, v);
16
16
  nodeMap.set(treeItem.id, treeItem);
17
17
  return treeItem;
18
18
  });
19
19
  function putToParent(o) {
20
- if (!o.parentId) {
21
- return;
22
- }
23
20
  var parentNode = nodeMap.get(o.parentId);
24
21
  if (parentNode) {
25
22
  var _parentNode$children;
@@ -29,10 +26,21 @@ function normalizeTreeList(list) {
29
26
  o.parentId = ''; // wrong parent
30
27
  }
31
28
  }
32
- treeList.forEach(function (v) {
33
- return putToParent(v);
29
+ listClone.forEach(function (v) {
30
+ if (v.parentId && (!filter || filter(v))) {
31
+ putToParent(v);
32
+ }
34
33
  });
35
- return treeList.filter(function (v) {
34
+ var treeItems = listClone.filter(function (v) {
36
35
  return !v.parentId;
37
36
  }); // all top-level nodes
37
+
38
+ return filter ? treeItems.filter(function (v) {
39
+ var _v$children;
40
+ // filter top-level nodes again
41
+ if ((_v$children = v.children) !== null && _v$children !== void 0 && _v$children.length) {
42
+ return true;
43
+ }
44
+ return filter(v);
45
+ }) : treeItems;
38
46
  }
@@ -2,17 +2,14 @@ import _objectSpread from "@babel/runtime/helpers/objectSpread2";
2
2
  /**
3
3
  * 将平铺的数据转成树节点列表
4
4
  */
5
- export default function normalizeTreeList(list) {
5
+ export default function normalizeTreeList(list, filter) {
6
6
  var nodeMap = new Map();
7
- var treeList = list.map(function (v) {
7
+ var listClone = list.map(function (v) {
8
8
  var treeItem = _objectSpread({}, v);
9
9
  nodeMap.set(treeItem.id, treeItem);
10
10
  return treeItem;
11
11
  });
12
12
  function putToParent(o) {
13
- if (!o.parentId) {
14
- return;
15
- }
16
13
  var parentNode = nodeMap.get(o.parentId);
17
14
  if (parentNode) {
18
15
  var _parentNode$children;
@@ -22,11 +19,22 @@ export default function normalizeTreeList(list) {
22
19
  o.parentId = ''; // wrong parent
23
20
  }
24
21
  }
25
- treeList.forEach(function (v) {
26
- return putToParent(v);
22
+ listClone.forEach(function (v) {
23
+ if (v.parentId && (!filter || filter(v))) {
24
+ putToParent(v);
25
+ }
27
26
  });
28
- return treeList.filter(function (v) {
27
+ var treeItems = listClone.filter(function (v) {
29
28
  return !v.parentId;
30
29
  }); // all top-level nodes
30
+
31
+ return filter ? treeItems.filter(function (v) {
32
+ var _v$children;
33
+ // filter top-level nodes again
34
+ if ((_v$children = v.children) !== null && _v$children !== void 0 && _v$children.length) {
35
+ return true;
36
+ }
37
+ return filter(v);
38
+ }) : treeItems;
31
39
  }
32
40
  //# sourceMappingURL=normalize-tree-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"normalize-tree-list.js","names":["normalizeTreeList","list","nodeMap","Map","treeList","map","v","treeItem","_objectSpread","set","id","putToParent","o","parentId","parentNode","get","_parentNode$children","children","push","forEach","filter"],"sources":["../../../src/helper/normalize-tree-list.ts"],"sourcesContent":["import {\n IBaseDataId,\n IBaseDataParentId\n} from '../types';\n\ninterface IBaseItem extends IBaseDataId, IBaseDataParentId {}\n\ntype TTreeItem<T extends IBaseItem> = T & {\n children?: TTreeItem<T>[];\n};\n\n/**\n * 将平铺的数据转成树节点列表\n */\nexport default function normalizeTreeList<T extends IBaseItem>(list: T[]): TTreeItem<T>[] {\n const nodeMap = new Map<string, TTreeItem<T>>();\n const treeList: TTreeItem<T>[] = list.map((v: T) => {\n const treeItem: TTreeItem<T> = { // shallow clone\n ...v\n };\n \n nodeMap.set(treeItem.id, treeItem);\n \n return treeItem;\n });\n \n function putToParent(o: TTreeItem<T>): void {\n if (!o.parentId) {\n return;\n }\n \n const parentNode = nodeMap.get(o.parentId);\n \n if (parentNode) {\n parentNode.children ??= [];\n \n parentNode.children.push(o);\n } else {\n o.parentId = ''; // wrong parent\n }\n }\n \n treeList.forEach(v => putToParent(v));\n \n return treeList.filter(v => !v.parentId); // all top-level nodes\n}\n"],"mappings":";AAWA;AACA;AACA;AACA,eAAe,SAASA,iBAAiBA,CAAsBC,IAAS,EAAkB;EACxF,IAAMC,OAAO,GAAG,IAAIC,GAAG,CAAuB,CAAC;EAC/C,IAAMC,QAAwB,GAAGH,IAAI,CAACI,GAAG,CAAC,UAACC,CAAI,EAAK;IAClD,IAAMC,QAAsB,GAAAC,aAAA,KACvBF,CAAC,CACL;IAEDJ,OAAO,CAACO,GAAG,CAACF,QAAQ,CAACG,EAAE,EAAEH,QAAQ,CAAC;IAElC,OAAOA,QAAQ;EACjB,CAAC,CAAC;EAEF,SAASI,WAAWA,CAACC,CAAe,EAAQ;IAC1C,IAAI,CAACA,CAAC,CAACC,QAAQ,EAAE;MACf;IACF;IAEA,IAAMC,UAAU,GAAGZ,OAAO,CAACa,GAAG,CAACH,CAAC,CAACC,QAAQ,CAAC;IAE1C,IAAIC,UAAU,EAAE;MAAA,IAAAE,oBAAA;MACd,CAAAA,oBAAA,GAAAF,UAAU,CAACG,QAAQ,cAAAD,oBAAA,cAAAA,oBAAA,GAAnBF,UAAU,CAACG,QAAQ,GAAK,EAAE;MAE1BH,UAAU,CAACG,QAAQ,CAACC,IAAI,CAACN,CAAC,CAAC;IAC7B,CAAC,MAAM;MACLA,CAAC,CAACC,QAAQ,GAAG,EAAE,CAAC,CAAC;IACnB;EACF;EAEAT,QAAQ,CAACe,OAAO,CAAC,UAAAb,CAAC;IAAA,OAAIK,WAAW,CAACL,CAAC,CAAC;EAAA,EAAC;EAErC,OAAOF,QAAQ,CAACgB,MAAM,CAAC,UAAAd,CAAC;IAAA,OAAI,CAACA,CAAC,CAACO,QAAQ;EAAA,EAAC,CAAC,CAAC;AAC5C","ignoreList":[]}
1
+ {"version":3,"file":"normalize-tree-list.js","names":["normalizeTreeList","list","filter","nodeMap","Map","listClone","map","v","treeItem","_objectSpread","set","id","putToParent","o","parentNode","get","parentId","_parentNode$children","children","push","forEach","treeItems","_v$children","length"],"sources":["../../../src/helper/normalize-tree-list.ts"],"sourcesContent":["import {\n IBaseDataId,\n IBaseDataParentId\n} from '../types';\n\ninterface IBaseItem extends IBaseDataId, IBaseDataParentId {}\n\ntype TTreeItem<T extends IBaseItem> = T & {\n children?: TTreeItem<T>[];\n};\n\n/**\n * 将平铺的数据转成树节点列表\n */\nexport default function normalizeTreeList<T extends IBaseItem>(list: T[], filter?: (o: T) => boolean): TTreeItem<T>[] {\n const nodeMap = new Map<string, TTreeItem<T>>();\n const listClone: TTreeItem<T>[] = list.map((v: T) => {\n const treeItem: TTreeItem<T> = { // shallow clone\n ...v\n };\n \n nodeMap.set(treeItem.id, treeItem);\n \n return treeItem;\n });\n \n function putToParent(o: TTreeItem<T>): void {\n const parentNode = nodeMap.get(o.parentId);\n \n if (parentNode) {\n parentNode.children ??= [];\n \n parentNode.children.push(o);\n } else {\n o.parentId = ''; // wrong parent\n }\n }\n \n listClone.forEach(v => {\n if (v.parentId && (!filter || filter(v))) {\n putToParent(v);\n }\n });\n \n const treeItems: TTreeItem<T>[] = listClone.filter(v => !v.parentId); // all top-level nodes\n \n return filter ? treeItems.filter(v => { // filter top-level nodes again\n if (v.children?.length) {\n return true;\n }\n \n return filter(v);\n }) : treeItems;\n}\n"],"mappings":";AAWA;AACA;AACA;AACA,eAAe,SAASA,iBAAiBA,CAAsBC,IAAS,EAAEC,MAA0B,EAAkB;EACpH,IAAMC,OAAO,GAAG,IAAIC,GAAG,CAAuB,CAAC;EAC/C,IAAMC,SAAyB,GAAGJ,IAAI,CAACK,GAAG,CAAC,UAACC,CAAI,EAAK;IACnD,IAAMC,QAAsB,GAAAC,aAAA,KACvBF,CAAC,CACL;IAEDJ,OAAO,CAACO,GAAG,CAACF,QAAQ,CAACG,EAAE,EAAEH,QAAQ,CAAC;IAElC,OAAOA,QAAQ;EACjB,CAAC,CAAC;EAEF,SAASI,WAAWA,CAACC,CAAe,EAAQ;IAC1C,IAAMC,UAAU,GAAGX,OAAO,CAACY,GAAG,CAACF,CAAC,CAACG,QAAQ,CAAC;IAE1C,IAAIF,UAAU,EAAE;MAAA,IAAAG,oBAAA;MACd,CAAAA,oBAAA,GAAAH,UAAU,CAACI,QAAQ,cAAAD,oBAAA,cAAAA,oBAAA,GAAnBH,UAAU,CAACI,QAAQ,GAAK,EAAE;MAE1BJ,UAAU,CAACI,QAAQ,CAACC,IAAI,CAACN,CAAC,CAAC;IAC7B,CAAC,MAAM;MACLA,CAAC,CAACG,QAAQ,GAAG,EAAE,CAAC,CAAC;IACnB;EACF;EAEAX,SAAS,CAACe,OAAO,CAAC,UAAAb,CAAC,EAAI;IACrB,IAAIA,CAAC,CAACS,QAAQ,KAAK,CAACd,MAAM,IAAIA,MAAM,CAACK,CAAC,CAAC,CAAC,EAAE;MACxCK,WAAW,CAACL,CAAC,CAAC;IAChB;EACF,CAAC,CAAC;EAEF,IAAMc,SAAyB,GAAGhB,SAAS,CAACH,MAAM,CAAC,UAAAK,CAAC;IAAA,OAAI,CAACA,CAAC,CAACS,QAAQ;EAAA,EAAC,CAAC,CAAC;;EAEtE,OAAOd,MAAM,GAAGmB,SAAS,CAACnB,MAAM,CAAC,UAAAK,CAAC,EAAI;IAAA,IAAAe,WAAA;IAAE;IACtC,KAAAA,WAAA,GAAIf,CAAC,CAACW,QAAQ,cAAAI,WAAA,eAAVA,WAAA,CAAYC,MAAM,EAAE;MACtB,OAAO,IAAI;IACb;IAEA,OAAOrB,MAAM,CAACK,CAAC,CAAC;EAClB,CAAC,CAAC,GAAGc,SAAS;AAChB","ignoreList":[]}
@@ -7,5 +7,5 @@ type TTreeItem<T extends IBaseItem> = T & {
7
7
  /**
8
8
  * 将平铺的数据转成树节点列表
9
9
  */
10
- export default function normalizeTreeList<T extends IBaseItem>(list: T[]): TTreeItem<T>[];
10
+ export default function normalizeTreeList<T extends IBaseItem>(list: T[], filter?: (o: T) => boolean): TTreeItem<T>[];
11
11
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kcuf/helper-data",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Data normalizer helpers and loading stuff to make all frontend data processing sane.",
5
5
  "keywords": [],
6
6
  "license": "MIT",