@itwin/components-react 3.3.0-dev.9 → 3.3.0

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.
Files changed (135) hide show
  1. package/CHANGELOG.md +58 -1
  2. package/lib/cjs/components-react/common/DateUtils.d.ts +12 -2
  3. package/lib/cjs/components-react/common/DateUtils.d.ts.map +1 -1
  4. package/lib/cjs/components-react/common/DateUtils.js +14 -4
  5. package/lib/cjs/components-react/common/DateUtils.js.map +1 -1
  6. package/lib/cjs/components-react/common/SubscriptionScheduler.d.ts +6 -8
  7. package/lib/cjs/components-react/common/SubscriptionScheduler.d.ts.map +1 -1
  8. package/lib/cjs/components-react/common/SubscriptionScheduler.js +18 -52
  9. package/lib/cjs/components-react/common/SubscriptionScheduler.js.map +1 -1
  10. package/lib/cjs/components-react/editors/DateTimeEditor.d.ts.map +1 -1
  11. package/lib/cjs/components-react/editors/DateTimeEditor.js +2 -0
  12. package/lib/cjs/components-react/editors/DateTimeEditor.js.map +1 -1
  13. package/lib/cjs/components-react/filter-builder/FilterBuilder.d.ts +36 -0
  14. package/lib/cjs/components-react/filter-builder/FilterBuilder.d.ts.map +1 -0
  15. package/lib/cjs/components-react/filter-builder/FilterBuilder.js +118 -0
  16. package/lib/cjs/components-react/filter-builder/FilterBuilder.js.map +1 -0
  17. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts +11 -0
  18. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -0
  19. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js +76 -0
  20. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js.map +1 -0
  21. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.scss +41 -0
  22. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts +29 -0
  23. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -0
  24. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js +79 -0
  25. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -0
  26. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.scss +73 -0
  27. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.d.ts +12 -0
  28. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.d.ts.map +1 -0
  29. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.js +47 -0
  30. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -0
  31. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.d.ts +11 -0
  32. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.d.ts.map +1 -0
  33. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.js +52 -0
  34. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.js.map +1 -0
  35. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.d.ts +11 -0
  36. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.d.ts.map +1 -0
  37. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.js +43 -0
  38. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.js.map +1 -0
  39. package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts +43 -0
  40. package/lib/cjs/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -0
  41. package/lib/cjs/components-react/filter-builder/FilterBuilderState.js +152 -0
  42. package/lib/cjs/components-react/filter-builder/FilterBuilderState.js.map +1 -0
  43. package/lib/cjs/components-react/filter-builder/Operators.d.ts +27 -0
  44. package/lib/cjs/components-react/filter-builder/Operators.d.ts.map +1 -0
  45. package/lib/cjs/components-react/filter-builder/Operators.js +113 -0
  46. package/lib/cjs/components-react/filter-builder/Operators.js.map +1 -0
  47. package/lib/cjs/components-react/filter-builder/Types.d.ts +18 -0
  48. package/lib/cjs/components-react/filter-builder/Types.d.ts.map +1 -0
  49. package/lib/cjs/components-react/filter-builder/Types.js +9 -0
  50. package/lib/cjs/components-react/filter-builder/Types.js.map +1 -0
  51. package/lib/cjs/components-react/toolbar/Overflow.scss +3 -2
  52. package/lib/cjs/components-react/toolbar/PopupItem.scss +4 -5
  53. package/lib/cjs/components-react/tree/controlled/TreeHooks.d.ts.map +1 -1
  54. package/lib/cjs/components-react/tree/controlled/TreeHooks.js +5 -8
  55. package/lib/cjs/components-react/tree/controlled/TreeHooks.js.map +1 -1
  56. package/lib/cjs/components-react/tree/controlled/TreeNodeLoader.d.ts +8 -4
  57. package/lib/cjs/components-react/tree/controlled/TreeNodeLoader.d.ts.map +1 -1
  58. package/lib/cjs/components-react/tree/controlled/TreeNodeLoader.js +54 -45
  59. package/lib/cjs/components-react/tree/controlled/TreeNodeLoader.js.map +1 -1
  60. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.d.ts +2 -0
  61. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.d.ts.map +1 -1
  62. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.js +1 -1
  63. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.js.map +1 -1
  64. package/lib/cjs/components-react.d.ts +9 -0
  65. package/lib/cjs/components-react.d.ts.map +1 -1
  66. package/lib/cjs/components-react.js +9 -0
  67. package/lib/cjs/components-react.js.map +1 -1
  68. package/lib/esm/components-react/common/DateUtils.d.ts +12 -2
  69. package/lib/esm/components-react/common/DateUtils.d.ts.map +1 -1
  70. package/lib/esm/components-react/common/DateUtils.js +12 -2
  71. package/lib/esm/components-react/common/DateUtils.js.map +1 -1
  72. package/lib/esm/components-react/common/SubscriptionScheduler.d.ts +6 -8
  73. package/lib/esm/components-react/common/SubscriptionScheduler.d.ts.map +1 -1
  74. package/lib/esm/components-react/common/SubscriptionScheduler.js +18 -52
  75. package/lib/esm/components-react/common/SubscriptionScheduler.js.map +1 -1
  76. package/lib/esm/components-react/editors/DateTimeEditor.d.ts.map +1 -1
  77. package/lib/esm/components-react/editors/DateTimeEditor.js +2 -0
  78. package/lib/esm/components-react/editors/DateTimeEditor.js.map +1 -1
  79. package/lib/esm/components-react/filter-builder/FilterBuilder.d.ts +36 -0
  80. package/lib/esm/components-react/filter-builder/FilterBuilder.d.ts.map +1 -0
  81. package/lib/esm/components-react/filter-builder/FilterBuilder.js +94 -0
  82. package/lib/esm/components-react/filter-builder/FilterBuilder.js.map +1 -0
  83. package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts +11 -0
  84. package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -0
  85. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js +53 -0
  86. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js.map +1 -0
  87. package/lib/esm/components-react/filter-builder/FilterBuilderRule.scss +41 -0
  88. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts +29 -0
  89. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -0
  90. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js +55 -0
  91. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -0
  92. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.scss +73 -0
  93. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.d.ts +12 -0
  94. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.d.ts.map +1 -0
  95. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.js +24 -0
  96. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -0
  97. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.d.ts +11 -0
  98. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.d.ts.map +1 -0
  99. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.js +29 -0
  100. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.js.map +1 -0
  101. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.d.ts +11 -0
  102. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.d.ts.map +1 -0
  103. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.js +20 -0
  104. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.js.map +1 -0
  105. package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts +43 -0
  106. package/lib/esm/components-react/filter-builder/FilterBuilderState.d.ts.map +1 -0
  107. package/lib/esm/components-react/filter-builder/FilterBuilderState.js +127 -0
  108. package/lib/esm/components-react/filter-builder/FilterBuilderState.js.map +1 -0
  109. package/lib/esm/components-react/filter-builder/Operators.d.ts +27 -0
  110. package/lib/esm/components-react/filter-builder/Operators.d.ts.map +1 -0
  111. package/lib/esm/components-react/filter-builder/Operators.js +107 -0
  112. package/lib/esm/components-react/filter-builder/Operators.js.map +1 -0
  113. package/lib/esm/components-react/filter-builder/Types.d.ts +18 -0
  114. package/lib/esm/components-react/filter-builder/Types.d.ts.map +1 -0
  115. package/lib/esm/components-react/filter-builder/Types.js +5 -0
  116. package/lib/esm/components-react/filter-builder/Types.js.map +1 -0
  117. package/lib/esm/components-react/toolbar/Overflow.scss +3 -2
  118. package/lib/esm/components-react/toolbar/PopupItem.scss +4 -5
  119. package/lib/esm/components-react/tree/controlled/TreeHooks.d.ts.map +1 -1
  120. package/lib/esm/components-react/tree/controlled/TreeHooks.js +6 -9
  121. package/lib/esm/components-react/tree/controlled/TreeHooks.js.map +1 -1
  122. package/lib/esm/components-react/tree/controlled/TreeNodeLoader.d.ts +8 -4
  123. package/lib/esm/components-react/tree/controlled/TreeNodeLoader.d.ts.map +1 -1
  124. package/lib/esm/components-react/tree/controlled/TreeNodeLoader.js +53 -44
  125. package/lib/esm/components-react/tree/controlled/TreeNodeLoader.js.map +1 -1
  126. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.d.ts +2 -0
  127. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.d.ts.map +1 -1
  128. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.js +1 -1
  129. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.js.map +1 -1
  130. package/lib/esm/components-react.d.ts +9 -0
  131. package/lib/esm/components-react.d.ts.map +1 -1
  132. package/lib/esm/components-react.js +9 -0
  133. package/lib/esm/components-react.js.map +1 -1
  134. package/lib/public/locales/en/UiComponents.json +16 -0
  135. package/package.json +19 -16
@@ -10,6 +10,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.useTreeEventsHandler = exports.useTreeModelSource = exports.usePagedTreeNodeLoader = exports.useTreeNodeLoader = exports.useTreeModel = void 0;
11
11
  const react_1 = require("react");
12
12
  const core_react_1 = require("@itwin/core-react");
13
+ const UseRerender_1 = require("../../common/UseRerender");
13
14
  const TreeEventHandler_1 = require("./TreeEventHandler");
14
15
  const TreeModelSource_1 = require("./TreeModelSource");
15
16
  const TreeNodeLoader_1 = require("./TreeNodeLoader");
@@ -20,15 +21,11 @@ const TreeNodeLoader_1 = require("./TreeNodeLoader");
20
21
  * @public
21
22
  */
22
23
  function useTreeModel(modelSource) {
23
- const [model, setModel] = (0, react_1.useState)(modelSource.getModel());
24
+ const { rerender } = (0, UseRerender_1.useRerender)();
24
25
  (0, react_1.useEffect)(() => {
25
- const onModelChanged = () => {
26
- setModel(modelSource.getModel());
27
- };
28
- onModelChanged();
29
- return modelSource.onModelChanged.addListener(onModelChanged);
30
- }, [modelSource]);
31
- return model;
26
+ return modelSource.onModelChanged.addListener(rerender);
27
+ }, [modelSource, rerender]);
28
+ return modelSource.getModel();
32
29
  }
33
30
  exports.useTreeModel = useTreeModel;
34
31
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"TreeHooks.js","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeHooks.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,iCAAkE;AAClE,kDAAkD;AAElD,yDAA8E;AAE9E,uDAAoD;AACpD,qDAAuE;AAEvE;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,WAA4B;IACvD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE3D,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,cAAc,GAAG,GAAG,EAAE;YAC1B,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnC,CAAC,CAAC;QACF,cAAc,EAAE,CAAC;QACjB,OAAO,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAChE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,OAAO,KAAK,CAAC;AACf,CAAC;AAZD,oCAYC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAyC,YAA2B,EAAE,WAA4B;IACjI,MAAM,YAAY,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE,CAAC,IAAI,+BAAc,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC;IACnH,OAAO,IAAA,0BAAa,EAAC,YAAY,CAAC,CAAC;AACrC,CAAC;AAHD,8CAGC;AAED;;;;GAIG;AACH,SAAgB,sBAAsB,CAAyC,YAA2B,EAAE,QAAgB,EAAE,WAA4B;IACxJ,MAAM,YAAY,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE,CAAC,IAAI,oCAAmB,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5I,OAAO,IAAA,0BAAa,EAAC,YAAY,CAAC,CAAC;AACrC,CAAC;AAHD,wDAGC;AAED;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAAC,YAA8B;IAC/D,0HAA0H;IAC1H,OAAO,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,IAAI,iCAAe,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,kDAAkD;AACjH,CAAC;AAHD,gDAGC;AAED;;;;;;;;GAQG;AACH,SAAgB,oBAAoB,CAA0C,eAAgE;IAC5I,MAAM,OAAO,GAAG,IAAA,mBAAW,EAAC,GAAqB,EAAE;QACjD,IAAI,OAAO,eAAe,KAAK,UAAU;YACvC,OAAO,eAAe,EAAE,CAAC;QAC3B,OAAO,IAAI,mCAAgB,CAAC,eAAe,CAAC,CAAC;IAC/C,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IACtB,OAAO,IAAA,0BAAa,EAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAPD,oDAOC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tree\r\n */\r\n\r\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport { useDisposable } from \"@itwin/core-react\";\r\nimport { TreeDataProvider } from \"../TreeDataProvider\";\r\nimport { TreeEventHandler, TreeEventHandlerParams } from \"./TreeEventHandler\";\r\nimport { TreeModel } from \"./TreeModel\";\r\nimport { TreeModelSource } from \"./TreeModelSource\";\r\nimport { PagedTreeNodeLoader, TreeNodeLoader } from \"./TreeNodeLoader\";\r\n\r\n/**\r\n * React hook that returns an immutable `TreeModel` whenever it changes in the given\r\n * `TreeModelSource`.\r\n *\r\n * @public\r\n */\r\nexport function useTreeModel(modelSource: TreeModelSource): TreeModel {\r\n const [model, setModel] = useState(modelSource.getModel());\r\n\r\n useEffect(() => {\r\n const onModelChanged = () => {\r\n setModel(modelSource.getModel());\r\n };\r\n onModelChanged();\r\n return modelSource.onModelChanged.addListener(onModelChanged);\r\n }, [modelSource]);\r\n\r\n return model;\r\n}\r\n\r\n/**\r\n * Custom hook which creates a nodes' loader using the supplied data provider and model source. The\r\n * loader pulls nodes from the data provider and puts them into the model source.\r\n *\r\n * @public\r\n */\r\nexport function useTreeNodeLoader<TDataProvider extends TreeDataProvider>(dataProvider: TDataProvider, modelSource: TreeModelSource) {\r\n const createLoader = useCallback(() => new TreeNodeLoader(dataProvider, modelSource), [dataProvider, modelSource]);\r\n return useDisposable(createLoader);\r\n}\r\n\r\n/**\r\n * Custom hook which creates a paging nodes' loader using the supplied data provider and model source. The loader pulls\r\n * nodes from the data provider and puts them into the model source.\r\n * @public\r\n */\r\nexport function usePagedTreeNodeLoader<TDataProvider extends TreeDataProvider>(dataProvider: TDataProvider, pageSize: number, modelSource: TreeModelSource) {\r\n const createLoader = useCallback(() => new PagedTreeNodeLoader(dataProvider, modelSource, pageSize), [dataProvider, modelSource, pageSize]);\r\n return useDisposable(createLoader);\r\n}\r\n\r\n/**\r\n * Custom hook which creates a `TreeModelSource`.\r\n *\r\n * @note The model source has no direct dependency on the data provider, but we want a fresh model\r\n * source whenever the data provider changes - that's the reason the hook takes a data provider.\r\n *\r\n * @public\r\n */\r\nexport function useTreeModelSource(dataProvider: TreeDataProvider) {\r\n // need to create new model source every time data provider changes although it does not need data provider to be created.\r\n return useMemo(() => new TreeModelSource(), [dataProvider]); // eslint-disable-line react-hooks/exhaustive-deps\r\n}\r\n\r\n/**\r\n * Custom hook which creates and takes care of disposing a TreeEventsHandler. The input is either a factory method\r\n * for a custom `TreeEventHandler` implementation or parameters for the default implementation.\r\n *\r\n * @note Caller must ensure `factoryOrParams` changes only when a new handler needs to be created. `useCallback` or `useMemo` can\r\n * be used for that purpose based on whether the input is a factory function or params object.\r\n *\r\n * @public\r\n */\r\nexport function useTreeEventsHandler<TEventsHandler extends TreeEventHandler>(factoryOrParams: (() => TEventsHandler) | TreeEventHandlerParams) {\r\n const factory = useCallback((): TreeEventHandler => {\r\n if (typeof factoryOrParams === \"function\")\r\n return factoryOrParams();\r\n return new TreeEventHandler(factoryOrParams);\r\n }, [factoryOrParams]);\r\n return useDisposable(factory);\r\n}\r\n"]}
1
+ {"version":3,"file":"TreeHooks.js","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeHooks.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,iCAAwD;AACxD,kDAAkD;AAClD,0DAAuD;AAEvD,yDAA8E;AAE9E,uDAAoD;AACpD,qDAAuE;AAEvE;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,WAA4B;IACvD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,yBAAW,GAAE,CAAC;IACnC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,OAAO,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5B,OAAO,WAAW,CAAC,QAAQ,EAAE,CAAC;AAChC,CAAC;AAND,oCAMC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAyC,YAA2B,EAAE,WAA4B;IACjI,MAAM,YAAY,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE,CAAC,IAAI,+BAAc,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC;IACnH,OAAO,IAAA,0BAAa,EAAC,YAAY,CAAC,CAAC;AACrC,CAAC;AAHD,8CAGC;AAED;;;;GAIG;AACH,SAAgB,sBAAsB,CAAyC,YAA2B,EAAE,QAAgB,EAAE,WAA4B;IACxJ,MAAM,YAAY,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE,CAAC,IAAI,oCAAmB,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5I,OAAO,IAAA,0BAAa,EAAC,YAAY,CAAC,CAAC;AACrC,CAAC;AAHD,wDAGC;AAED;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAAC,YAA8B;IAC/D,0HAA0H;IAC1H,OAAO,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,IAAI,iCAAe,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,kDAAkD;AACjH,CAAC;AAHD,gDAGC;AAED;;;;;;;;GAQG;AACH,SAAgB,oBAAoB,CAA0C,eAAgE;IAC5I,MAAM,OAAO,GAAG,IAAA,mBAAW,EAAC,GAAqB,EAAE;QACjD,IAAI,OAAO,eAAe,KAAK,UAAU;YACvC,OAAO,eAAe,EAAE,CAAC;QAC3B,OAAO,IAAI,mCAAgB,CAAC,eAAe,CAAC,CAAC;IAC/C,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IACtB,OAAO,IAAA,0BAAa,EAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAPD,oDAOC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tree\r\n */\r\n\r\nimport { useCallback, useEffect, useMemo } from \"react\";\r\nimport { useDisposable } from \"@itwin/core-react\";\r\nimport { useRerender } from \"../../common/UseRerender\";\r\nimport { TreeDataProvider } from \"../TreeDataProvider\";\r\nimport { TreeEventHandler, TreeEventHandlerParams } from \"./TreeEventHandler\";\r\nimport { TreeModel } from \"./TreeModel\";\r\nimport { TreeModelSource } from \"./TreeModelSource\";\r\nimport { PagedTreeNodeLoader, TreeNodeLoader } from \"./TreeNodeLoader\";\r\n\r\n/**\r\n * React hook that returns an immutable `TreeModel` whenever it changes in the given\r\n * `TreeModelSource`.\r\n *\r\n * @public\r\n */\r\nexport function useTreeModel(modelSource: TreeModelSource): TreeModel {\r\n const { rerender } = useRerender();\r\n useEffect(() => {\r\n return modelSource.onModelChanged.addListener(rerender);\r\n }, [modelSource, rerender]);\r\n return modelSource.getModel();\r\n}\r\n\r\n/**\r\n * Custom hook which creates a nodes' loader using the supplied data provider and model source. The\r\n * loader pulls nodes from the data provider and puts them into the model source.\r\n *\r\n * @public\r\n */\r\nexport function useTreeNodeLoader<TDataProvider extends TreeDataProvider>(dataProvider: TDataProvider, modelSource: TreeModelSource) {\r\n const createLoader = useCallback(() => new TreeNodeLoader(dataProvider, modelSource), [dataProvider, modelSource]);\r\n return useDisposable(createLoader);\r\n}\r\n\r\n/**\r\n * Custom hook which creates a paging nodes' loader using the supplied data provider and model source. The loader pulls\r\n * nodes from the data provider and puts them into the model source.\r\n * @public\r\n */\r\nexport function usePagedTreeNodeLoader<TDataProvider extends TreeDataProvider>(dataProvider: TDataProvider, pageSize: number, modelSource: TreeModelSource) {\r\n const createLoader = useCallback(() => new PagedTreeNodeLoader(dataProvider, modelSource, pageSize), [dataProvider, modelSource, pageSize]);\r\n return useDisposable(createLoader);\r\n}\r\n\r\n/**\r\n * Custom hook which creates a `TreeModelSource`.\r\n *\r\n * @note The model source has no direct dependency on the data provider, but we want a fresh model\r\n * source whenever the data provider changes - that's the reason the hook takes a data provider.\r\n *\r\n * @public\r\n */\r\nexport function useTreeModelSource(dataProvider: TreeDataProvider) {\r\n // need to create new model source every time data provider changes although it does not need data provider to be created.\r\n return useMemo(() => new TreeModelSource(), [dataProvider]); // eslint-disable-line react-hooks/exhaustive-deps\r\n}\r\n\r\n/**\r\n * Custom hook which creates and takes care of disposing a TreeEventsHandler. The input is either a factory method\r\n * for a custom `TreeEventHandler` implementation or parameters for the default implementation.\r\n *\r\n * @note Caller must ensure `factoryOrParams` changes only when a new handler needs to be created. `useCallback` or `useMemo` can\r\n * be used for that purpose based on whether the input is a factory function or params object.\r\n *\r\n * @public\r\n */\r\nexport function useTreeEventsHandler<TEventsHandler extends TreeEventHandler>(factoryOrParams: (() => TEventsHandler) | TreeEventHandlerParams) {\r\n const factory = useCallback((): TreeEventHandler => {\r\n if (typeof factoryOrParams === \"function\")\r\n return factoryOrParams();\r\n return new TreeEventHandler(factoryOrParams);\r\n }, [factoryOrParams]);\r\n return useDisposable(factory);\r\n}\r\n"]}
@@ -71,6 +71,7 @@ export declare abstract class AbstractTreeNodeLoaderWithProvider<TDataProvider e
71
71
  export declare class TreeNodeLoader<TDataProvider extends TreeDataProvider> extends AbstractTreeNodeLoaderWithProvider<TDataProvider> implements IDisposable {
72
72
  private _treeDataSource;
73
73
  private _activeRequests;
74
+ private _scheduler;
74
75
  constructor(dataProvider: TDataProvider, modelSource: TreeModelSource);
75
76
  /** Disposes data source */
76
77
  dispose(): void;
@@ -78,16 +79,18 @@ export declare class TreeNodeLoader<TDataProvider extends TreeDataProvider> exte
78
79
  * Schedules to load children of node and returns an Observable.
79
80
  * @note It does not start loading node until '.subscribe()' is called on returned Observable.
80
81
  */
81
- protected load(parentNode: TreeModelNode | TreeModelRootNode): Observable<LoadedNodeHierarchy>;
82
- private loadForParent;
82
+ loadNode(parent: TreeModelNode | TreeModelRootNode, _childIndex?: number): Observable<TreeNodeLoadResult>;
83
+ protected load(): Observable<LoadedNodeHierarchy>;
83
84
  }
84
85
  /**
85
86
  * Default paged tree node loader with `TreeDataProvider` implementation.
86
87
  * @public
87
88
  */
88
89
  export declare class PagedTreeNodeLoader<TDataProvider extends TreeDataProvider> extends AbstractTreeNodeLoaderWithProvider<TDataProvider> implements IDisposable {
89
- private _pageLoader;
90
+ private _treeDataSource;
90
91
  private _pageSize;
92
+ private _activePageRequests;
93
+ private _scheduler;
91
94
  constructor(dataProvider: TDataProvider, modelSource: TreeModelSource, pageSize: number);
92
95
  /** Disposes data source */
93
96
  dispose(): void;
@@ -97,7 +100,8 @@ export declare class PagedTreeNodeLoader<TDataProvider extends TreeDataProvider>
97
100
  * Schedules to load one page of node children and returns an Observable.
98
101
  * @note It does not start loading node page until '.subscribe()' is called on returned Observable.
99
102
  */
100
- protected load(parentNode: TreeModelNode | TreeModelRootNode, childIndex: number): Observable<LoadedNodeHierarchy>;
103
+ loadNode(parent: TreeModelNode | TreeModelRootNode, childIndex: number): Observable<TreeNodeLoadResult>;
104
+ protected load(): Observable<LoadedNodeHierarchy>;
101
105
  }
102
106
  /**
103
107
  * Data structure that describes hierarchy loaded for parent node.
@@ -1 +1 @@
1
- {"version":3,"file":"TreeNodeLoader.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeNodeLoader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TreeNodeLoader.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeNodeLoader.ts"],"names":[],"mappings":"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"}
@@ -73,6 +73,7 @@ class TreeNodeLoader extends AbstractTreeNodeLoaderWithProvider {
73
73
  constructor(dataProvider, modelSource) {
74
74
  super(modelSource, dataProvider);
75
75
  this._activeRequests = new Map();
76
+ this._scheduler = new SubscriptionScheduler_1.SubscriptionScheduler();
76
77
  this._treeDataSource = new TreeDataSource(dataProvider);
77
78
  }
78
79
  /** Disposes data source */
@@ -81,19 +82,26 @@ class TreeNodeLoader extends AbstractTreeNodeLoaderWithProvider {
81
82
  * Schedules to load children of node and returns an Observable.
82
83
  * @note It does not start loading node until '.subscribe()' is called on returned Observable.
83
84
  */
84
- load(parentNode) {
85
- const parentItem = (0, TreeModel_1.isTreeModelNode)(parentNode) ? parentNode.item : undefined;
86
- return this.loadForParent(parentItem, parentNode.numChildren === undefined);
85
+ loadNode(parent, _childIndex) {
86
+ return (0, defer_1.defer)(() => {
87
+ const parentItem = (0, TreeModel_1.isTreeModelNode)(parent) ? parent.item : undefined;
88
+ const parentId = parentItem === null || parentItem === void 0 ? void 0 : parentItem.id;
89
+ const activeRequest = this._activeRequests.get(parentId);
90
+ if (activeRequest) {
91
+ return activeRequest;
92
+ }
93
+ const newRequest = requestLoadedHierarchy(parentItem, this._treeDataSource, 0, 0, parent.numChildren === undefined)
94
+ .pipe((0, map_1.map)((loadedHierarchy) => {
95
+ this.updateModel(loadedHierarchy);
96
+ return { loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems) };
97
+ }), (0, SubscriptionScheduler_1.scheduleSubscription)(this._scheduler), (0, finalize_1.finalize)(() => this._activeRequests.delete(parentId)));
98
+ this._activeRequests.set(parentId, newRequest);
99
+ return newRequest;
100
+ });
87
101
  }
88
- loadForParent(parentItem, requestNumChildren) {
89
- const parentId = parentItem && parentItem.id;
90
- const activeRequest = this._activeRequests.get(parentId);
91
- if (activeRequest) {
92
- return activeRequest;
93
- }
94
- const newRequest = requestLoadedHierarchy(parentItem, this._treeDataSource, 0, 0, requestNumChildren, () => { this._activeRequests.delete(parentId); });
95
- this._activeRequests.set(parentId, newRequest);
96
- return newRequest;
102
+ // istanbul ignore next
103
+ load() {
104
+ throw new Error("Method not implemented.");
97
105
  }
98
106
  }
99
107
  exports.TreeNodeLoader = TreeNodeLoader;
@@ -104,51 +112,52 @@ exports.TreeNodeLoader = TreeNodeLoader;
104
112
  class PagedTreeNodeLoader extends AbstractTreeNodeLoaderWithProvider {
105
113
  constructor(dataProvider, modelSource, pageSize) {
106
114
  super(modelSource, dataProvider);
107
- this._pageLoader = new PageLoader(new TreeDataSource(dataProvider), pageSize);
115
+ this._treeDataSource = new TreeDataSource(dataProvider);
108
116
  this._pageSize = pageSize;
117
+ this._activePageRequests = new Map();
118
+ this._scheduler = new SubscriptionScheduler_1.SubscriptionScheduler();
109
119
  }
110
120
  /** Disposes data source */
111
- dispose() { this._pageLoader.dispose(); }
121
+ dispose() { this._treeDataSource.dispose(); }
112
122
  /** Returns page size used by tree node loader. */
113
123
  get pageSize() { return this._pageSize; }
114
124
  /**
115
125
  * Schedules to load one page of node children and returns an Observable.
116
126
  * @note It does not start loading node page until '.subscribe()' is called on returned Observable.
117
127
  */
118
- load(parentNode, childIndex) {
119
- const parentItem = (0, TreeModel_1.isTreeModelNode)(parentNode) ? parentNode.item : undefined;
120
- return this._pageLoader.loadPageWithItem(parentItem, childIndex, parentNode.numChildren === undefined);
121
- }
122
- }
123
- exports.PagedTreeNodeLoader = PagedTreeNodeLoader;
124
- class PageLoader {
125
- constructor(dataSource, pageSize) {
126
- this._activePageRequests = new Map();
127
- this._dataSource = dataSource;
128
- this._pageSize = pageSize;
129
- }
130
- dispose() { this._dataSource.dispose(); }
131
- loadPageWithItem(parentItem, itemIndex, requestNumChildren) {
132
- const parentId = parentItem && parentItem.id;
133
- const parentPageRequests = this._activePageRequests.get(parentId) || new Map();
134
- const page = Math.trunc(itemIndex / this._pageSize);
135
- const activeRequest = parentPageRequests.get(page);
136
- if (activeRequest) {
137
- return activeRequest;
138
- }
139
- const startIndex = page * this._pageSize;
140
- const newRequest = requestLoadedHierarchy(parentItem, this._dataSource, startIndex, this._pageSize, requestNumChildren, () => {
141
- parentPageRequests.delete(page);
142
- if (parentPageRequests.size === 0) {
143
- this._activePageRequests.delete(parentId);
128
+ loadNode(parent, childIndex) {
129
+ return (0, defer_1.defer)(() => {
130
+ var _a;
131
+ const parentItem = (0, TreeModel_1.isTreeModelNode)(parent) ? parent.item : undefined;
132
+ const parentId = parentItem === null || parentItem === void 0 ? void 0 : parentItem.id;
133
+ const parentPageRequests = (_a = this._activePageRequests.get(parentId)) !== null && _a !== void 0 ? _a : new Map();
134
+ const page = Math.trunc(childIndex / this._pageSize);
135
+ const activeRequest = parentPageRequests.get(page);
136
+ if (activeRequest) {
137
+ return activeRequest;
144
138
  }
139
+ const startIndex = page * this._pageSize;
140
+ const newRequest = requestLoadedHierarchy(parentItem, this._treeDataSource, startIndex, this._pageSize, parent.numChildren === undefined).pipe((0, map_1.map)((loadedHierarchy) => {
141
+ this.updateModel(loadedHierarchy);
142
+ return { loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems) };
143
+ }), (0, SubscriptionScheduler_1.scheduleSubscription)(this._scheduler), (0, finalize_1.finalize)(() => {
144
+ parentPageRequests.delete(page);
145
+ if (parentPageRequests.size === 0) {
146
+ this._activePageRequests.delete(parentId);
147
+ }
148
+ }));
149
+ parentPageRequests.set(page, newRequest);
150
+ this._activePageRequests.set(parentId, parentPageRequests);
151
+ return newRequest;
145
152
  });
146
- parentPageRequests.set(page, newRequest);
147
- this._activePageRequests.set(parentId, parentPageRequests);
148
- return newRequest;
153
+ }
154
+ // istanbul ignore next
155
+ load() {
156
+ throw new Error("Method not implemented.");
149
157
  }
150
158
  }
151
- function requestLoadedHierarchy(parentItem, dataSource, start, take, requestNumChildren, finalizeCallback) {
159
+ exports.PagedTreeNodeLoader = PagedTreeNodeLoader;
160
+ function requestLoadedHierarchy(parentItem, dataSource, start, take, requestNumChildren) {
152
161
  const parentId = parentItem && parentItem.id;
153
162
  return dataSource.requestItems(parentItem, start, take, requestNumChildren)
154
163
  .pipe((0, concatMap_1.concatMap)(({ numChildren, loadedItems }) => loadHierarchy(loadedItems, dataSource, take)
@@ -157,7 +166,7 @@ function requestLoadedHierarchy(parentItem, dataSource, start, take, requestNumC
157
166
  offset: start,
158
167
  hierarchyItems,
159
168
  numChildren,
160
- })))), (0, finalize_1.finalize)(finalizeCallback), (0, publish_1.publish)(), (0, refCount_1.refCount)());
169
+ })))));
161
170
  }
162
171
  function loadHierarchy(rootItems, dataSource, take) {
163
172
  return (0, from_1.from)(rootItems)
@@ -1 +1 @@
1
- {"version":3,"file":"TreeNodeLoader.js","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeNodeLoader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tree\r\n */\r\n\r\nimport { Observable as RxjsObservable } from \"rxjs/internal/Observable\";\r\nimport { defer } from \"rxjs/internal/observable/defer\";\r\nimport { from } from \"rxjs/internal/observable/from\";\r\nimport { of } from \"rxjs/internal/observable/of\";\r\nimport { concatAll } from \"rxjs/internal/operators/concatAll\";\r\nimport { concatMap } from \"rxjs/internal/operators/concatMap\";\r\nimport { finalize } from \"rxjs/internal/operators/finalize\";\r\nimport { map } from \"rxjs/internal/operators/map\";\r\nimport { publish } from \"rxjs/internal/operators/publish\";\r\nimport { refCount } from \"rxjs/internal/operators/refCount\";\r\nimport { toArray } from \"rxjs/internal/operators/toArray\";\r\nimport { BeEvent, IDisposable } from \"@itwin/core-bentley\";\r\nimport { UiError } from \"@itwin/appui-abstract\";\r\nimport { scheduleSubscription, SubscriptionScheduler } from \"../../common/SubscriptionScheduler\";\r\nimport { UiComponents } from \"../../UiComponents\";\r\nimport {\r\n ImmediatelyLoadedTreeNodeItem, isTreeDataProviderInterface, isTreeDataProviderMethod, isTreeDataProviderPromise, isTreeDataProviderRaw,\r\n TreeDataChangesListener, TreeDataProvider, TreeDataProviderRaw, TreeNodeItem,\r\n} from \"../TreeDataProvider\";\r\nimport { Observable, toRxjsObservable } from \"./Observable\";\r\nimport { isTreeModelNode, MutableTreeModel, TreeModelNode, TreeModelNodeInput, TreeModelRootNode, TreeNodeItemData } from \"./TreeModel\";\r\nimport { TreeModelSource } from \"./TreeModelSource\";\r\n\r\n/**\r\n * Data structure that describes node load result\r\n * @public\r\n */\r\nexport interface TreeNodeLoadResult {\r\n loadedNodes: TreeNodeItem[];\r\n}\r\n\r\n/**\r\n * Tree node loader which is used to load tree nodes.\r\n * @public\r\n */\r\nexport interface ITreeNodeLoader {\r\n /**\r\n * Loads node at specified place in tree.\r\n * @param parentId specifies tree branch\r\n * @param childIndex specifies offset in the branch.\r\n */\r\n loadNode(parentId: TreeModelNode | TreeModelRootNode, childIndex: number): Observable<TreeNodeLoadResult>;\r\n}\r\n\r\n/**\r\n * Tree node loader which uses `TreeDataProvider` to load nodes.\r\n * @public\r\n */\r\nexport interface ITreeNodeLoaderWithProvider<TDataProvider extends TreeDataProvider> extends ITreeNodeLoader {\r\n /** Returns `TreeDataProvider` used to load nodes. */\r\n readonly dataProvider: TDataProvider;\r\n}\r\n\r\n/**\r\n * Abstract node loader implementation which loads nodes into provided model source.\r\n * @public\r\n */\r\nexport abstract class AbstractTreeNodeLoader implements ITreeNodeLoader {\r\n private _treeModelSource: TreeModelSource;\r\n private _loadScheduler = new SubscriptionScheduler<TreeNodeLoadResult>();\r\n\r\n protected constructor(modelSource: TreeModelSource) {\r\n this._treeModelSource = modelSource;\r\n }\r\n\r\n public get modelSource() { return this._treeModelSource; }\r\n\r\n /** Do not override this method. @see `load` */\r\n public loadNode(parent: TreeModelNode | TreeModelRootNode, childIndex: number): Observable<TreeNodeLoadResult> {\r\n return toRxjsObservable(this.load(parent, childIndex)).pipe(\r\n map((loadedHierarchy) => {\r\n this.updateModel(loadedHierarchy);\r\n return { loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems) };\r\n }),\r\n scheduleSubscription(this._loadScheduler),\r\n );\r\n }\r\n\r\n /**\r\n * A method that's called when `load` loads some nodes and we need to put them into model source. The\r\n * default implementation simply puts loaded child nodes under their parent at correct positions. Concrete\r\n * implementation may override this method to handle loaded nodes in a a custom way (put them at custom locations\r\n * in the hierarchy, etc.)\r\n */\r\n protected updateModel(loadedHierarchy: LoadedNodeHierarchy): void {\r\n handleLoadedNodeHierarchy(this._treeModelSource, loadedHierarchy);\r\n }\r\n\r\n /** An abstract method to load a node at the specific index for the specified parent. */\r\n protected abstract load(parent: TreeModelNode | TreeModelRootNode, childIndex: number): Observable<LoadedNodeHierarchy>;\r\n}\r\n\r\n/**\r\n * Abstract node loader with tree data provider which loads nodes into provided model source.\r\n * @public\r\n */\r\nexport abstract class AbstractTreeNodeLoaderWithProvider<TDataProvider extends TreeDataProvider> extends AbstractTreeNodeLoader implements ITreeNodeLoaderWithProvider<TDataProvider> {\r\n private _dataProvider: TDataProvider;\r\n\r\n protected constructor(modelSource: TreeModelSource, dataProvider: TDataProvider) {\r\n super(modelSource);\r\n this._dataProvider = dataProvider;\r\n }\r\n\r\n public get dataProvider() { return this._dataProvider; }\r\n}\r\n\r\n/**\r\n * Default tree node loader with `TreeDataProvider` implementation.\r\n * @public\r\n */\r\nexport class TreeNodeLoader<TDataProvider extends TreeDataProvider> extends AbstractTreeNodeLoaderWithProvider<TDataProvider> implements IDisposable {\r\n private _treeDataSource: TreeDataSource;\r\n private _activeRequests = new Map<string | undefined, RxjsObservable<LoadedNodeHierarchy>>();\r\n\r\n constructor(dataProvider: TDataProvider, modelSource: TreeModelSource) {\r\n super(modelSource, dataProvider);\r\n this._treeDataSource = new TreeDataSource(dataProvider);\r\n }\r\n\r\n /** Disposes data source */\r\n public dispose() { this._treeDataSource.dispose(); }\r\n\r\n /**\r\n * Schedules to load children of node and returns an Observable.\r\n * @note It does not start loading node until '.subscribe()' is called on returned Observable.\r\n */\r\n protected load(parentNode: TreeModelNode | TreeModelRootNode): Observable<LoadedNodeHierarchy> {\r\n const parentItem = isTreeModelNode(parentNode) ? parentNode.item : undefined;\r\n return this.loadForParent(parentItem, parentNode.numChildren === undefined);\r\n }\r\n\r\n private loadForParent(parentItem: TreeNodeItem | undefined, requestNumChildren: boolean): RxjsObservable<LoadedNodeHierarchy> {\r\n const parentId = parentItem && parentItem.id;\r\n const activeRequest = this._activeRequests.get(parentId);\r\n if (activeRequest) {\r\n return activeRequest;\r\n }\r\n\r\n const newRequest = requestLoadedHierarchy(parentItem, this._treeDataSource, 0, 0, requestNumChildren,\r\n () => { this._activeRequests.delete(parentId); },\r\n );\r\n\r\n this._activeRequests.set(parentId, newRequest);\r\n return newRequest;\r\n }\r\n}\r\n\r\n/**\r\n * Default paged tree node loader with `TreeDataProvider` implementation.\r\n * @public\r\n */\r\nexport class PagedTreeNodeLoader<TDataProvider extends TreeDataProvider> extends AbstractTreeNodeLoaderWithProvider<TDataProvider> implements IDisposable {\r\n private _pageLoader: PageLoader;\r\n private _pageSize: number;\r\n\r\n constructor(dataProvider: TDataProvider, modelSource: TreeModelSource, pageSize: number) {\r\n super(modelSource, dataProvider);\r\n this._pageLoader = new PageLoader(new TreeDataSource(dataProvider), pageSize);\r\n this._pageSize = pageSize;\r\n }\r\n\r\n /** Disposes data source */\r\n public dispose() { this._pageLoader.dispose(); }\r\n\r\n /** Returns page size used by tree node loader. */\r\n public get pageSize(): number { return this._pageSize; }\r\n\r\n /**\r\n * Schedules to load one page of node children and returns an Observable.\r\n * @note It does not start loading node page until '.subscribe()' is called on returned Observable.\r\n */\r\n protected load(parentNode: TreeModelNode | TreeModelRootNode, childIndex: number): Observable<LoadedNodeHierarchy> {\r\n const parentItem = isTreeModelNode(parentNode) ? parentNode.item : undefined;\r\n return this._pageLoader.loadPageWithItem(parentItem, childIndex, parentNode.numChildren === undefined);\r\n }\r\n}\r\n\r\n/**\r\n * Data structure that describes hierarchy loaded for parent node.\r\n * @public\r\n */\r\nexport interface LoadedNodeHierarchy {\r\n /** Node id of the parent node for loaded hierarchy. */\r\n parentId: string | undefined;\r\n /** Hierarchy items offset in parent node children array. */\r\n offset: number;\r\n /** Loaded hierarchy items. */\r\n hierarchyItems: LoadedNodeHierarchyItem[];\r\n /** Number of children parent node has. */\r\n numChildren?: number;\r\n}\r\n\r\n/**\r\n * Data structure that describes one loaded hierarchy item.\r\n * @public\r\n */\r\nexport interface LoadedNodeHierarchyItem {\r\n /** Loaded tree node item. */\r\n item: TreeNodeItemData;\r\n /** Children of loaded tree node item. */\r\n children?: LoadedNodeHierarchyItem[];\r\n /** Number of children tree node item has. */\r\n numChildren?: number;\r\n}\r\n\r\nclass PageLoader implements IDisposable {\r\n private _dataSource: TreeDataSource;\r\n private _pageSize: number;\r\n private _activePageRequests = new Map<string | undefined, Map<number, RxjsObservable<LoadedNodeHierarchy>>>();\r\n\r\n constructor(\r\n dataSource: TreeDataSource,\r\n pageSize: number,\r\n ) {\r\n this._dataSource = dataSource;\r\n this._pageSize = pageSize;\r\n }\r\n\r\n public dispose() { this._dataSource.dispose(); }\r\n\r\n public loadPageWithItem(\r\n parentItem: TreeNodeItem | undefined,\r\n itemIndex: number,\r\n requestNumChildren: boolean,\r\n ): RxjsObservable<LoadedNodeHierarchy> {\r\n const parentId = parentItem && parentItem.id;\r\n const parentPageRequests = this._activePageRequests.get(parentId) || new Map<number, RxjsObservable<LoadedNodeHierarchy>>();\r\n const page = Math.trunc(itemIndex / this._pageSize);\r\n const activeRequest = parentPageRequests.get(page);\r\n if (activeRequest) {\r\n return activeRequest;\r\n }\r\n\r\n const startIndex = page * this._pageSize;\r\n const newRequest = requestLoadedHierarchy(parentItem, this._dataSource, startIndex, this._pageSize, requestNumChildren,\r\n () => {\r\n parentPageRequests.delete(page);\r\n if (parentPageRequests.size === 0) {\r\n this._activePageRequests.delete(parentId);\r\n }\r\n },\r\n );\r\n\r\n parentPageRequests.set(page, newRequest);\r\n this._activePageRequests.set(parentId, parentPageRequests);\r\n return newRequest;\r\n }\r\n}\r\n\r\nfunction requestLoadedHierarchy(\r\n parentItem: TreeNodeItem | undefined,\r\n dataSource: TreeDataSource,\r\n start: number,\r\n take: number,\r\n requestNumChildren: boolean,\r\n finalizeCallback: () => void,\r\n) {\r\n const parentId = parentItem && parentItem.id;\r\n return dataSource.requestItems(parentItem, start, take, requestNumChildren)\r\n .pipe(\r\n concatMap(({ numChildren, loadedItems }) => loadHierarchy(loadedItems, dataSource, take)\r\n .pipe(\r\n map((hierarchyItems) => ({\r\n parentId,\r\n offset: start,\r\n hierarchyItems,\r\n numChildren,\r\n })),\r\n ),\r\n ),\r\n finalize(finalizeCallback),\r\n publish(),\r\n refCount(),\r\n );\r\n}\r\n\r\nfunction loadHierarchy(rootItems: TreeNodeItemData[], dataSource: TreeDataSource, take: number): RxjsObservable<LoadedNodeHierarchyItem[]> {\r\n return from(rootItems)\r\n .pipe(\r\n concatMap((item) => {\r\n if (!item.autoExpand || item.children) {\r\n return of(convertToLoadedNodeHierarchyItem(item));\r\n }\r\n\r\n return dataSource.requestItems(item, 0, take, true)\r\n .pipe(\r\n concatMap(({ numChildren, loadedItems }) => loadHierarchy(loadedItems, dataSource, take)\r\n .pipe(\r\n map((children) => ({ item, children, numChildren })),\r\n ),\r\n ),\r\n );\r\n }),\r\n toArray(),\r\n );\r\n}\r\n\r\nfunction convertToLoadedNodeHierarchyItem(item: TreeNodeItemData): LoadedNodeHierarchyItem {\r\n return {\r\n item,\r\n children: item.children ? item.children.map((child) => convertToLoadedNodeHierarchyItem(child)) : undefined,\r\n numChildren: item.children ? item.children.length : undefined,\r\n };\r\n}\r\n\r\nfunction collectTreeNodeItems(hierarchyItems: LoadedNodeHierarchyItem[], result: TreeNodeItem[] = []) {\r\n for (const hierarchyItem of hierarchyItems) {\r\n result.push(hierarchyItem.item);\r\n if (hierarchyItem.children)\r\n collectTreeNodeItems(hierarchyItem.children, result);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/** @internal */\r\nexport function handleLoadedNodeHierarchy(modelSource: TreeModelSource, loadedHierarchy: LoadedNodeHierarchy) {\r\n modelSource.modifyModel((model) => {\r\n if (loadedHierarchy.parentId !== undefined) {\r\n // Make sure the model sill contains the parent node\r\n /* istanbul ignore if */\r\n if (model.getNode(loadedHierarchy.parentId) === undefined)\r\n return;\r\n }\r\n\r\n updateChildren(model, loadedHierarchy.parentId, loadedHierarchy.hierarchyItems, loadedHierarchy.offset, loadedHierarchy.numChildren);\r\n if (loadedHierarchy.parentId !== undefined) {\r\n const parentNode = model.getNode(loadedHierarchy.parentId);\r\n /* istanbul ignore else */\r\n if (parentNode && parentNode.isLoading && parentNode.numChildren !== undefined) {\r\n parentNode.isLoading = false;\r\n }\r\n }\r\n });\r\n}\r\n\r\nfunction updateChildren(\r\n model: MutableTreeModel,\r\n parentId: string | undefined,\r\n hierarchyItems: LoadedNodeHierarchyItem[],\r\n startIndex: number,\r\n numChildren?: number,\r\n) {\r\n // numChildren set to undefined indicates that this is not the first request for children\r\n if (numChildren !== undefined) {\r\n model.setNumChildren(parentId, numChildren);\r\n }\r\n\r\n // if children array is undefined do not add children as they should be disposed\r\n if (model.getChildren(parentId) === undefined) {\r\n return;\r\n }\r\n\r\n let offset = startIndex;\r\n for (const hierarchyItem of hierarchyItems) {\r\n const nodeInput = convertToTreeModelNodeInput(hierarchyItem.item);\r\n const existingNode = model.getNode(hierarchyItem.item.id);\r\n\r\n // if same item exists in the same position and is expanded update it without removing it's subtree\r\n if (!existingNode || !existingNode.isExpanded || model.getChildOffset(parentId, existingNode.id) !== offset || nodeInput.numChildren === 0) {\r\n model.setChildren(parentId, [nodeInput], offset);\r\n } else {\r\n existingNode.label = nodeInput.label;\r\n existingNode.description = nodeInput.description ?? \"\";\r\n existingNode.item = nodeInput.item;\r\n }\r\n\r\n if (hierarchyItem.children) {\r\n updateChildren(model, hierarchyItem.item.id, hierarchyItem.children, 0, hierarchyItem.numChildren);\r\n }\r\n offset++;\r\n }\r\n}\r\n\r\nfunction convertToTreeModelNodeInput(item: TreeNodeItemData): TreeModelNodeInput {\r\n let numChildren: number | undefined;\r\n if (item.children) {\r\n numChildren = item.children.length;\r\n } else if (!item.hasChildren) {\r\n numChildren = 0;\r\n }\r\n\r\n return {\r\n description: item.description,\r\n isExpanded: !!item.autoExpand,\r\n id: item.id,\r\n item,\r\n label: item.label,\r\n isLoading: false,\r\n numChildren,\r\n isSelected: false,\r\n };\r\n}\r\n\r\ninterface TreeDataSourceResult {\r\n loadedItems: TreeNodeItemData[];\r\n numChildren?: number;\r\n}\r\n\r\n/**\r\n * Wrapper to handle different types of `TreeDataProvider`. Provides one method\r\n * to request items from `TreeDataProviderRaw`, `TreeDataProviderMethod`,\r\n * `TreeDataProviderPromise` or `TreeDataProviderInterface`.\r\n *\r\n * @internal\r\n */\r\nexport class TreeDataSource implements IDisposable {\r\n private _dataProvider: TreeDataProvider;\r\n private _disposeTreeNodesChangedListener?: () => void;\r\n\r\n public readonly onItemsChanged = new BeEvent<TreeDataChangesListener>();\r\n\r\n constructor(dataProvider: TreeDataProvider) {\r\n this._dataProvider = dataProvider;\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n if (isTreeDataProviderInterface(this._dataProvider) && this._dataProvider.onTreeNodeChanged) {\r\n // eslint-disable-next-line deprecation/deprecation\r\n this._disposeTreeNodesChangedListener = this._dataProvider.onTreeNodeChanged.addListener(\r\n (changedItems) => this.onItemsChanged.raiseEvent(changedItems),\r\n );\r\n }\r\n }\r\n\r\n public dispose() {\r\n this._disposeTreeNodesChangedListener && this._disposeTreeNodesChangedListener();\r\n }\r\n\r\n public requestItems(\r\n parent: TreeNodeItem | undefined,\r\n firstItemIndex: number,\r\n numItems: number,\r\n requestNumChildren: boolean,\r\n ): RxjsObservable<TreeDataSourceResult> {\r\n // During each async operation there is a chance that data provider will become stale. Create an opportunity to\r\n // unsubscribe after each async operation so that we stop interacting with the stale data provider immediately.\r\n return defer(async () => {\r\n if (isTreeDataProviderInterface(this._dataProvider)) {\r\n const dataProvider = this._dataProvider;\r\n return from(requestNumChildren ? dataProvider.getNodesCount(parent) : [undefined])\r\n .pipe(\r\n concatMap(async (numChildren) => {\r\n const pageOptions = numItems !== 0 ? { size: numItems, start: firstItemIndex } : undefined;\r\n return {\r\n loadedItems: await dataProvider.getNodes(parent, pageOptions),\r\n numChildren,\r\n };\r\n }),\r\n );\r\n }\r\n\r\n return from(this.getItems(parent))\r\n .pipe(\r\n map((loadedItems) => ({\r\n loadedItems: numItems !== 0 ? loadedItems.slice(firstItemIndex, firstItemIndex + numItems) : loadedItems,\r\n numChildren: loadedItems.length,\r\n })),\r\n );\r\n })\r\n .pipe(\r\n concatAll(),\r\n publish(),\r\n refCount(),\r\n );\r\n }\r\n\r\n private async getItems(parent: TreeNodeItem | undefined): Promise<TreeNodeItemData[]> {\r\n if (isTreeDataProviderRaw(this._dataProvider)) {\r\n return this.getChildren(this._dataProvider, parent);\r\n }\r\n\r\n if (isTreeDataProviderMethod(this._dataProvider)) {\r\n return this._dataProvider(parent);\r\n }\r\n\r\n if (isTreeDataProviderPromise(this._dataProvider)) {\r\n this._dataProvider = await this._dataProvider;\r\n return this.getChildren(this._dataProvider, parent);\r\n }\r\n\r\n throw new UiError(UiComponents.loggerCategory(this), \"Unsupported TreeDataProvider.\");\r\n }\r\n\r\n private getChildren(rawProvider: TreeDataProviderRaw, parent: TreeNodeItem | undefined): TreeNodeItemData[] {\r\n if (parent === undefined)\r\n return rawProvider;\r\n\r\n return (parent as ImmediatelyLoadedTreeNodeItem).children ?? [];\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"TreeNodeLoader.js","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeNodeLoader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tree\r\n */\r\n\r\nimport { Observable as RxjsObservable } from \"rxjs/internal/Observable\";\r\nimport { defer } from \"rxjs/internal/observable/defer\";\r\nimport { from } from \"rxjs/internal/observable/from\";\r\nimport { of } from \"rxjs/internal/observable/of\";\r\nimport { concatAll } from \"rxjs/internal/operators/concatAll\";\r\nimport { concatMap } from \"rxjs/internal/operators/concatMap\";\r\nimport { finalize } from \"rxjs/internal/operators/finalize\";\r\nimport { map } from \"rxjs/internal/operators/map\";\r\nimport { publish } from \"rxjs/internal/operators/publish\";\r\nimport { refCount } from \"rxjs/internal/operators/refCount\";\r\nimport { toArray } from \"rxjs/internal/operators/toArray\";\r\nimport { BeEvent, IDisposable } from \"@itwin/core-bentley\";\r\nimport { UiError } from \"@itwin/appui-abstract\";\r\nimport { scheduleSubscription, SubscriptionScheduler } from \"../../common/SubscriptionScheduler\";\r\nimport { UiComponents } from \"../../UiComponents\";\r\nimport {\r\n ImmediatelyLoadedTreeNodeItem, isTreeDataProviderInterface, isTreeDataProviderMethod, isTreeDataProviderPromise, isTreeDataProviderRaw,\r\n TreeDataChangesListener, TreeDataProvider, TreeDataProviderRaw, TreeNodeItem,\r\n} from \"../TreeDataProvider\";\r\nimport { Observable, toRxjsObservable } from \"./Observable\";\r\nimport { isTreeModelNode, MutableTreeModel, TreeModelNode, TreeModelNodeInput, TreeModelRootNode, TreeNodeItemData } from \"./TreeModel\";\r\nimport { TreeModelSource } from \"./TreeModelSource\";\r\n\r\n/**\r\n * Data structure that describes node load result\r\n * @public\r\n */\r\nexport interface TreeNodeLoadResult {\r\n loadedNodes: TreeNodeItem[];\r\n}\r\n\r\n/**\r\n * Tree node loader which is used to load tree nodes.\r\n * @public\r\n */\r\nexport interface ITreeNodeLoader {\r\n /**\r\n * Loads node at specified place in tree.\r\n * @param parentId specifies tree branch\r\n * @param childIndex specifies offset in the branch.\r\n */\r\n loadNode(parentId: TreeModelNode | TreeModelRootNode, childIndex: number): Observable<TreeNodeLoadResult>;\r\n}\r\n\r\n/**\r\n * Tree node loader which uses `TreeDataProvider` to load nodes.\r\n * @public\r\n */\r\nexport interface ITreeNodeLoaderWithProvider<TDataProvider extends TreeDataProvider> extends ITreeNodeLoader {\r\n /** Returns `TreeDataProvider` used to load nodes. */\r\n readonly dataProvider: TDataProvider;\r\n}\r\n\r\n/**\r\n * Abstract node loader implementation which loads nodes into provided model source.\r\n * @public\r\n */\r\nexport abstract class AbstractTreeNodeLoader implements ITreeNodeLoader {\r\n private _treeModelSource: TreeModelSource;\r\n private _loadScheduler = new SubscriptionScheduler<TreeNodeLoadResult>();\r\n\r\n protected constructor(modelSource: TreeModelSource) {\r\n this._treeModelSource = modelSource;\r\n }\r\n\r\n public get modelSource() { return this._treeModelSource; }\r\n\r\n /** Do not override this method. @see `load` */\r\n public loadNode(parent: TreeModelNode | TreeModelRootNode, childIndex: number): Observable<TreeNodeLoadResult> {\r\n return toRxjsObservable(this.load(parent, childIndex)).pipe(\r\n map((loadedHierarchy) => {\r\n this.updateModel(loadedHierarchy);\r\n return { loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems) };\r\n }),\r\n scheduleSubscription(this._loadScheduler),\r\n );\r\n }\r\n\r\n /**\r\n * A method that's called when `load` loads some nodes and we need to put them into model source. The\r\n * default implementation simply puts loaded child nodes under their parent at correct positions. Concrete\r\n * implementation may override this method to handle loaded nodes in a a custom way (put them at custom locations\r\n * in the hierarchy, etc.)\r\n */\r\n protected updateModel(loadedHierarchy: LoadedNodeHierarchy): void {\r\n handleLoadedNodeHierarchy(this._treeModelSource, loadedHierarchy);\r\n }\r\n\r\n /** An abstract method to load a node at the specific index for the specified parent. */\r\n protected abstract load(parent: TreeModelNode | TreeModelRootNode, childIndex: number): Observable<LoadedNodeHierarchy>;\r\n}\r\n\r\n/**\r\n * Abstract node loader with tree data provider which loads nodes into provided model source.\r\n * @public\r\n */\r\nexport abstract class AbstractTreeNodeLoaderWithProvider<TDataProvider extends TreeDataProvider> extends AbstractTreeNodeLoader implements ITreeNodeLoaderWithProvider<TDataProvider> {\r\n private _dataProvider: TDataProvider;\r\n\r\n protected constructor(modelSource: TreeModelSource, dataProvider: TDataProvider) {\r\n super(modelSource);\r\n this._dataProvider = dataProvider;\r\n }\r\n\r\n public get dataProvider() { return this._dataProvider; }\r\n}\r\n\r\n/**\r\n * Default tree node loader with `TreeDataProvider` implementation.\r\n * @public\r\n */\r\nexport class TreeNodeLoader<TDataProvider extends TreeDataProvider> extends AbstractTreeNodeLoaderWithProvider<TDataProvider> implements IDisposable {\r\n private _treeDataSource: TreeDataSource;\r\n private _activeRequests = new Map<string | undefined, RxjsObservable<TreeNodeLoadResult>>();\r\n private _scheduler = new SubscriptionScheduler<TreeNodeLoadResult>();\r\n\r\n constructor(dataProvider: TDataProvider, modelSource: TreeModelSource) {\r\n super(modelSource, dataProvider);\r\n this._treeDataSource = new TreeDataSource(dataProvider);\r\n }\r\n\r\n /** Disposes data source */\r\n public dispose() { this._treeDataSource.dispose(); }\r\n\r\n /**\r\n * Schedules to load children of node and returns an Observable.\r\n * @note It does not start loading node until '.subscribe()' is called on returned Observable.\r\n */\r\n public override loadNode(parent: TreeModelNode | TreeModelRootNode, _childIndex?: number): Observable<TreeNodeLoadResult> {\r\n return defer(() => {\r\n const parentItem = isTreeModelNode(parent) ? parent.item : undefined;\r\n const parentId = parentItem?.id;\r\n const activeRequest = this._activeRequests.get(parentId);\r\n if (activeRequest) {\r\n return activeRequest;\r\n }\r\n\r\n const newRequest = requestLoadedHierarchy(parentItem, this._treeDataSource, 0, 0, parent.numChildren === undefined)\r\n .pipe(\r\n map((loadedHierarchy) => {\r\n this.updateModel(loadedHierarchy);\r\n return { loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems) };\r\n }),\r\n scheduleSubscription(this._scheduler),\r\n finalize(() => this._activeRequests.delete(parentId))\r\n );\r\n this._activeRequests.set(parentId, newRequest);\r\n return newRequest;\r\n });\r\n }\r\n\r\n // istanbul ignore next\r\n protected load(): Observable<LoadedNodeHierarchy> {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n}\r\n\r\n/**\r\n * Default paged tree node loader with `TreeDataProvider` implementation.\r\n * @public\r\n */\r\nexport class PagedTreeNodeLoader<TDataProvider extends TreeDataProvider> extends AbstractTreeNodeLoaderWithProvider<TDataProvider> implements IDisposable {\r\n private _treeDataSource: TreeDataSource;\r\n private _pageSize: number;\r\n private _activePageRequests: Map<string | undefined, Map<number, Observable<TreeNodeLoadResult>>>;\r\n private _scheduler: SubscriptionScheduler<TreeNodeLoadResult>;\r\n\r\n constructor(dataProvider: TDataProvider, modelSource: TreeModelSource, pageSize: number) {\r\n super(modelSource, dataProvider);\r\n this._treeDataSource = new TreeDataSource(dataProvider);\r\n this._pageSize = pageSize;\r\n this._activePageRequests = new Map();\r\n this._scheduler = new SubscriptionScheduler();\r\n }\r\n\r\n /** Disposes data source */\r\n public dispose() { this._treeDataSource.dispose(); }\r\n\r\n /** Returns page size used by tree node loader. */\r\n public get pageSize(): number { return this._pageSize; }\r\n\r\n /**\r\n * Schedules to load one page of node children and returns an Observable.\r\n * @note It does not start loading node page until '.subscribe()' is called on returned Observable.\r\n */\r\n public override loadNode(parent: TreeModelNode | TreeModelRootNode, childIndex: number): Observable<TreeNodeLoadResult> {\r\n return defer(() => {\r\n const parentItem = isTreeModelNode(parent) ? parent.item : undefined;\r\n const parentId = parentItem?.id;\r\n const parentPageRequests = this._activePageRequests.get(parentId)\r\n ?? new Map<number, Observable<TreeNodeLoadResult>>();\r\n const page = Math.trunc(childIndex / this._pageSize);\r\n const activeRequest = parentPageRequests.get(page);\r\n if (activeRequest) {\r\n return activeRequest;\r\n }\r\n\r\n const startIndex = page * this._pageSize;\r\n const newRequest = requestLoadedHierarchy(\r\n parentItem,\r\n this._treeDataSource,\r\n startIndex,\r\n this._pageSize,\r\n parent.numChildren === undefined,\r\n ).pipe(\r\n map((loadedHierarchy) => {\r\n this.updateModel(loadedHierarchy);\r\n return { loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems) };\r\n }),\r\n scheduleSubscription(this._scheduler),\r\n finalize(() => {\r\n parentPageRequests.delete(page);\r\n if (parentPageRequests.size === 0) {\r\n this._activePageRequests.delete(parentId);\r\n }\r\n }),\r\n );\r\n\r\n parentPageRequests.set(page, newRequest);\r\n this._activePageRequests.set(parentId, parentPageRequests);\r\n return newRequest;\r\n });\r\n }\r\n\r\n // istanbul ignore next\r\n protected load(): Observable<LoadedNodeHierarchy> {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n}\r\n\r\n/**\r\n * Data structure that describes hierarchy loaded for parent node.\r\n * @public\r\n */\r\nexport interface LoadedNodeHierarchy {\r\n /** Node id of the parent node for loaded hierarchy. */\r\n parentId: string | undefined;\r\n /** Hierarchy items offset in parent node children array. */\r\n offset: number;\r\n /** Loaded hierarchy items. */\r\n hierarchyItems: LoadedNodeHierarchyItem[];\r\n /** Number of children parent node has. */\r\n numChildren?: number;\r\n}\r\n\r\n/**\r\n * Data structure that describes one loaded hierarchy item.\r\n * @public\r\n */\r\nexport interface LoadedNodeHierarchyItem {\r\n /** Loaded tree node item. */\r\n item: TreeNodeItemData;\r\n /** Children of loaded tree node item. */\r\n children?: LoadedNodeHierarchyItem[];\r\n /** Number of children tree node item has. */\r\n numChildren?: number;\r\n}\r\n\r\nfunction requestLoadedHierarchy(\r\n parentItem: TreeNodeItem | undefined,\r\n dataSource: TreeDataSource,\r\n start: number,\r\n take: number,\r\n requestNumChildren: boolean,\r\n) {\r\n const parentId = parentItem && parentItem.id;\r\n return dataSource.requestItems(parentItem, start, take, requestNumChildren)\r\n .pipe(\r\n concatMap(({ numChildren, loadedItems }) => loadHierarchy(loadedItems, dataSource, take)\r\n .pipe(\r\n map((hierarchyItems) => ({\r\n parentId,\r\n offset: start,\r\n hierarchyItems,\r\n numChildren,\r\n })),\r\n ),\r\n ),\r\n );\r\n}\r\n\r\nfunction loadHierarchy(rootItems: TreeNodeItemData[], dataSource: TreeDataSource, take: number): RxjsObservable<LoadedNodeHierarchyItem[]> {\r\n return from(rootItems)\r\n .pipe(\r\n concatMap((item) => {\r\n if (!item.autoExpand || item.children) {\r\n return of(convertToLoadedNodeHierarchyItem(item));\r\n }\r\n\r\n return dataSource.requestItems(item, 0, take, true)\r\n .pipe(\r\n concatMap(({ numChildren, loadedItems }) => loadHierarchy(loadedItems, dataSource, take)\r\n .pipe(\r\n map((children) => ({ item, children, numChildren })),\r\n ),\r\n ),\r\n );\r\n }),\r\n toArray(),\r\n );\r\n}\r\n\r\nfunction convertToLoadedNodeHierarchyItem(item: TreeNodeItemData): LoadedNodeHierarchyItem {\r\n return {\r\n item,\r\n children: item.children ? item.children.map((child) => convertToLoadedNodeHierarchyItem(child)) : undefined,\r\n numChildren: item.children ? item.children.length : undefined,\r\n };\r\n}\r\n\r\nfunction collectTreeNodeItems(hierarchyItems: LoadedNodeHierarchyItem[], result: TreeNodeItem[] = []) {\r\n for (const hierarchyItem of hierarchyItems) {\r\n result.push(hierarchyItem.item);\r\n if (hierarchyItem.children)\r\n collectTreeNodeItems(hierarchyItem.children, result);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/** @internal */\r\nexport function handleLoadedNodeHierarchy(modelSource: TreeModelSource, loadedHierarchy: LoadedNodeHierarchy) {\r\n modelSource.modifyModel((model) => {\r\n if (loadedHierarchy.parentId !== undefined) {\r\n // Make sure the model sill contains the parent node\r\n /* istanbul ignore if */\r\n if (model.getNode(loadedHierarchy.parentId) === undefined)\r\n return;\r\n }\r\n\r\n updateChildren(model, loadedHierarchy.parentId, loadedHierarchy.hierarchyItems, loadedHierarchy.offset, loadedHierarchy.numChildren);\r\n if (loadedHierarchy.parentId !== undefined) {\r\n const parentNode = model.getNode(loadedHierarchy.parentId);\r\n /* istanbul ignore else */\r\n if (parentNode && parentNode.isLoading && parentNode.numChildren !== undefined) {\r\n parentNode.isLoading = false;\r\n }\r\n }\r\n });\r\n}\r\n\r\nfunction updateChildren(\r\n model: MutableTreeModel,\r\n parentId: string | undefined,\r\n hierarchyItems: LoadedNodeHierarchyItem[],\r\n startIndex: number,\r\n numChildren?: number,\r\n) {\r\n // numChildren set to undefined indicates that this is not the first request for children\r\n if (numChildren !== undefined) {\r\n model.setNumChildren(parentId, numChildren);\r\n }\r\n\r\n // if children array is undefined do not add children as they should be disposed\r\n if (model.getChildren(parentId) === undefined) {\r\n return;\r\n }\r\n\r\n let offset = startIndex;\r\n for (const hierarchyItem of hierarchyItems) {\r\n const nodeInput = convertToTreeModelNodeInput(hierarchyItem.item);\r\n const existingNode = model.getNode(hierarchyItem.item.id);\r\n\r\n // if same item exists in the same position and is expanded update it without removing it's subtree\r\n if (!existingNode || !existingNode.isExpanded || model.getChildOffset(parentId, existingNode.id) !== offset || nodeInput.numChildren === 0) {\r\n model.setChildren(parentId, [nodeInput], offset);\r\n } else {\r\n existingNode.label = nodeInput.label;\r\n existingNode.description = nodeInput.description ?? \"\";\r\n existingNode.item = nodeInput.item;\r\n }\r\n\r\n if (hierarchyItem.children) {\r\n updateChildren(model, hierarchyItem.item.id, hierarchyItem.children, 0, hierarchyItem.numChildren);\r\n }\r\n offset++;\r\n }\r\n}\r\n\r\nfunction convertToTreeModelNodeInput(item: TreeNodeItemData): TreeModelNodeInput {\r\n let numChildren: number | undefined;\r\n if (item.children) {\r\n numChildren = item.children.length;\r\n } else if (!item.hasChildren) {\r\n numChildren = 0;\r\n }\r\n\r\n return {\r\n description: item.description,\r\n isExpanded: !!item.autoExpand,\r\n id: item.id,\r\n item,\r\n label: item.label,\r\n isLoading: false,\r\n numChildren,\r\n isSelected: false,\r\n };\r\n}\r\n\r\ninterface TreeDataSourceResult {\r\n loadedItems: TreeNodeItemData[];\r\n numChildren?: number;\r\n}\r\n\r\n/**\r\n * Wrapper to handle different types of `TreeDataProvider`. Provides one method\r\n * to request items from `TreeDataProviderRaw`, `TreeDataProviderMethod`,\r\n * `TreeDataProviderPromise` or `TreeDataProviderInterface`.\r\n *\r\n * @internal\r\n */\r\nexport class TreeDataSource implements IDisposable {\r\n private _dataProvider: TreeDataProvider;\r\n private _disposeTreeNodesChangedListener?: () => void;\r\n\r\n public readonly onItemsChanged = new BeEvent<TreeDataChangesListener>();\r\n\r\n constructor(dataProvider: TreeDataProvider) {\r\n this._dataProvider = dataProvider;\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n if (isTreeDataProviderInterface(this._dataProvider) && this._dataProvider.onTreeNodeChanged) {\r\n // eslint-disable-next-line deprecation/deprecation\r\n this._disposeTreeNodesChangedListener = this._dataProvider.onTreeNodeChanged.addListener(\r\n (changedItems) => this.onItemsChanged.raiseEvent(changedItems),\r\n );\r\n }\r\n }\r\n\r\n public dispose() {\r\n this._disposeTreeNodesChangedListener && this._disposeTreeNodesChangedListener();\r\n }\r\n\r\n public requestItems(\r\n parent: TreeNodeItem | undefined,\r\n firstItemIndex: number,\r\n numItems: number,\r\n requestNumChildren: boolean,\r\n ): RxjsObservable<TreeDataSourceResult> {\r\n // During each async operation there is a chance that data provider will become stale. Create an opportunity to\r\n // unsubscribe after each async operation so that we stop interacting with the stale data provider immediately.\r\n return defer(async () => {\r\n if (isTreeDataProviderInterface(this._dataProvider)) {\r\n const dataProvider = this._dataProvider;\r\n return from(requestNumChildren ? dataProvider.getNodesCount(parent) : [undefined])\r\n .pipe(\r\n concatMap(async (numChildren) => {\r\n const pageOptions = numItems !== 0 ? { size: numItems, start: firstItemIndex } : undefined;\r\n return {\r\n loadedItems: await dataProvider.getNodes(parent, pageOptions),\r\n numChildren,\r\n };\r\n }),\r\n );\r\n }\r\n\r\n return from(this.getItems(parent))\r\n .pipe(\r\n map((loadedItems) => ({\r\n loadedItems: numItems !== 0 ? loadedItems.slice(firstItemIndex, firstItemIndex + numItems) : loadedItems,\r\n numChildren: loadedItems.length,\r\n })),\r\n );\r\n })\r\n .pipe(\r\n concatAll(),\r\n publish(),\r\n refCount(),\r\n );\r\n }\r\n\r\n private async getItems(parent: TreeNodeItem | undefined): Promise<TreeNodeItemData[]> {\r\n if (isTreeDataProviderRaw(this._dataProvider)) {\r\n return this.getChildren(this._dataProvider, parent);\r\n }\r\n\r\n if (isTreeDataProviderMethod(this._dataProvider)) {\r\n return this._dataProvider(parent);\r\n }\r\n\r\n if (isTreeDataProviderPromise(this._dataProvider)) {\r\n this._dataProvider = await this._dataProvider;\r\n return this.getChildren(this._dataProvider, parent);\r\n }\r\n\r\n throw new UiError(UiComponents.loggerCategory(this), \"Unsupported TreeDataProvider.\");\r\n }\r\n\r\n private getChildren(rawProvider: TreeDataProviderRaw, parent: TreeNodeItem | undefined): TreeNodeItemData[] {\r\n if (parent === undefined)\r\n return rawProvider;\r\n\r\n return (parent as ImmediatelyLoadedTreeNodeItem).children ?? [];\r\n }\r\n}\r\n"]}
@@ -32,6 +32,8 @@ export interface TreeNodeRendererProps extends CommonProps {
32
32
  * @internal
33
33
  */
34
34
  onLabelRendered?: (node: TreeModelNode) => void;
35
+ /** Child components to render inside the node.*/
36
+ children?: React.ReactNode;
35
37
  }
36
38
  /**
37
39
  * Default component for rendering tree node.
@@ -1 +1 @@
1
- {"version":3,"file":"TreeNodeRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/components-react/tree/controlled/component/TreeNodeRenderer.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAqB,oBAAoB,EAAY,MAAM,mBAAmB,CAAC;AAGnG,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAgB,aAAa,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD,2BAA2B;IAC3B,IAAI,EAAE,aAAa,CAAC;IAEpB,sBAAsB;IACtB,WAAW,EAAE,WAAW,CAAC;IAEzB,kEAAkE;IAClE,kBAAkB,CAAC,EAAE,0BAA0B,CAAC;IAEhD,qDAAqD;IACrD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,mCAAmC;IACnC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAE/B,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IAExC,0EAA0E;IAC1E,kBAAkB,CAAC,EAAE,sBAAsB,CAAC;IAE5C;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;CACjD;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,oCAAsB,qBAAqB,iBA+CtE,CAAC"}
1
+ {"version":3,"file":"TreeNodeRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/components-react/tree/controlled/component/TreeNodeRenderer.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAqB,oBAAoB,EAAY,MAAM,mBAAmB,CAAC;AAGnG,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAgB,aAAa,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD,2BAA2B;IAC3B,IAAI,EAAE,aAAa,CAAC;IAEpB,sBAAsB;IACtB,WAAW,EAAE,WAAW,CAAC;IAEzB,kEAAkE;IAClE,kBAAkB,CAAC,EAAE,0BAA0B,CAAC;IAEhD,qDAAqD;IACrD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,mCAAmC;IACnC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAE/B,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IAExC,0EAA0E;IAC1E,kBAAkB,CAAC,EAAE,sBAAsB,CAAC;IAE5C;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IAEhD,iDAAiD;IACjD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,oCAAsB,qBAAqB,iBAiDtE,CAAC"}
@@ -51,7 +51,7 @@ exports.TreeNodeRenderer = React.memo((props) => {
51
51
  isDisabled: checkboxInfo.isDisabled,
52
52
  onClick: (newState) => props.treeActions.onNodeCheckboxClicked(props.node.id, newState),
53
53
  });
54
- return (React.createElement(core_react_1.TreeNode, { "data-testid": TreeComponentTestId_1.TreeComponentTestId.Node, className: props.className, checkboxProps: props.node.checkbox.isVisible ? createCheckboxProps(props.node.checkbox) : undefined, style: props.style, isExpanded: props.node.isExpanded, isSelected: props.node.isSelected, isLoading: props.node.isLoading, isLeaf: props.node.numChildren === 0, icon: props.imageLoader ? React.createElement(TreeNodeIcon, { node: props.node, imageLoader: props.imageLoader }) : undefined, label: label, level: props.node.depth, onClick: (event) => props.treeActions.onNodeClicked(props.node.id, event), onMouseDown: () => props.treeActions.onNodeMouseDown(props.node.id), onMouseMove: () => props.treeActions.onNodeMouseMove(props.node.id), onClickExpansionToggle: onExpansionToggle, renderOverrides: { renderCheckbox: props.checkboxRenderer } }));
54
+ return (React.createElement(core_react_1.TreeNode, { "data-testid": TreeComponentTestId_1.TreeComponentTestId.Node, className: props.className, checkboxProps: props.node.checkbox.isVisible ? createCheckboxProps(props.node.checkbox) : undefined, style: props.style, isExpanded: props.node.isExpanded, isSelected: props.node.isSelected, isLoading: props.node.isLoading, isLeaf: props.node.numChildren === 0, icon: props.imageLoader ? React.createElement(TreeNodeIcon, { node: props.node, imageLoader: props.imageLoader }) : undefined, label: label, level: props.node.depth, onClick: (event) => props.treeActions.onNodeClicked(props.node.id, event), onMouseDown: () => props.treeActions.onNodeMouseDown(props.node.id), onMouseMove: () => props.treeActions.onNodeMouseMove(props.node.id), onClickExpansionToggle: onExpansionToggle, renderOverrides: { renderCheckbox: props.checkboxRenderer } }, props.children));
55
55
  });
56
56
  function TreeNodeIcon(props) {
57
57
  const { imageLoader, node } = props;
@@ -1 +1 @@
1
- {"version":3,"file":"TreeNodeRenderer.js","sourceRoot":"","sources":["../../../../../../src/components-react/tree/controlled/component/TreeNodeRenderer.tsx"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;;;;;;;;;;;;;;;;;;;;AAEH,6CAA+B;AAC/B,kDAAmG;AACnG,iEAA8D;AAC9D,mFAAwF;AAGxF,mEAAgE;AAGhE,+CAAgD;AAoChD;;;GAGG;AACU,QAAA,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,KAA4B,EAAE,EAAE;IAC1E,MAAM,KAAK,GAAG,CACZ,oBAAC,6BAAe,IACd,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAClB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,eAAe,EAAE,KAAK,CAAC,kBAAkB,EACzC,oBAAoB,EAAE,mDAA4B,CAAC,cAAc,EACjE,cAAc,EAAE,KAAK,CAAC,kBAAkB,EACxC,eAAe,EAAE,KAAK,CAAC,eAAe,EACtC,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,GAC5C,CACH,CAAC;IAEF,SAAS,iBAAiB;QACxB,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU;YACvB,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;YAEjD,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,mBAAmB,GAAG,CAAC,YAA0B,EAAqB,EAAE,CAAC,CAAC;QAC9E,KAAK,EAAE,YAAY,CAAC,KAAK;QACzB,OAAO,EAAE,YAAY,CAAC,OAAO;QAC7B,UAAU,EAAE,YAAY,CAAC,UAAU;QACnC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC;KACxF,CAAC,CAAC;IAEH,OAAO,CACL,oBAAC,qBAAQ,mBACM,yCAAmB,CAAC,IAAI,EACrC,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,EACnG,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,EACjC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,EACjC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,EAC/B,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,EACpC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,oBAAC,YAAY,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,GAAI,CAAC,CAAC,CAAC,SAAS,EACxG,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,EACvB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,EACzE,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EACnE,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EACnE,sBAAsB,EAAE,iBAAiB,EACzC,eAAe,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,gBAAgB,EAAE,GAC3D,CACH,CAAC;AACJ,CAAC,CAAC,CAAC;AAOH,SAAS,YAAY,CAAC,KAAwB;IAC5C,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IACpC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE1C,IAAI,CAAC,KAAK;QACR,OAAO,IAAI,CAAC;IAEd,MAAM,QAAQ,GAAG,IAAI,6BAAa,EAAE,CAAC;IACrC,OAAO,0CAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAI,CAAC;AACvC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tree\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { CommonProps, NodeCheckboxProps, NodeCheckboxRenderer, TreeNode } from \"@itwin/core-react\";\r\nimport { ImageRenderer } from \"../../../common/ImageRenderer\";\r\nimport { PropertyValueRendererManager } from \"../../../properties/ValueRendererManager\";\r\nimport { HighlightableTreeNodeProps } from \"../../HighlightingEngine\";\r\nimport { ITreeImageLoader } from \"../../ImageLoader\";\r\nimport { TreeComponentTestId } from \"../../TreeComponentTestId\";\r\nimport { TreeActions } from \"../TreeActions\";\r\nimport { CheckBoxInfo, TreeModelNode } from \"../TreeModel\";\r\nimport { TreeNodeContent } from \"./NodeContent\";\r\nimport { TreeNodeEditorRenderer } from \"./TreeNodeEditor\";\r\n\r\n/**\r\n * Properties for [[TreeNodeRenderer]].\r\n * @public\r\n */\r\nexport interface TreeNodeRendererProps extends CommonProps {\r\n /** Tree node to render. */\r\n node: TreeModelNode;\r\n\r\n /** Action handler. */\r\n treeActions: TreeActions;\r\n\r\n /** Properties used to highlight matches when tree is filtered. */\r\n nodeHighlightProps?: HighlightableTreeNodeProps;\r\n\r\n /** Specifies whether to show descriptions or not. */\r\n descriptionEnabled?: boolean;\r\n\r\n /** Image loader for node icons. */\r\n imageLoader?: ITreeImageLoader;\r\n\r\n /** Callback to render custom checkbox. */\r\n checkboxRenderer?: NodeCheckboxRenderer;\r\n\r\n /** Callback to render custom node editor when node is in editing mode. */\r\n nodeEditorRenderer?: TreeNodeEditorRenderer;\r\n\r\n /**\r\n * Callback used to detect when label is rendered. It is used by TreeRenderer for scrolling to active match.\r\n * @internal\r\n */\r\n onLabelRendered?: (node: TreeModelNode) => void;\r\n}\r\n\r\n/**\r\n * Default component for rendering tree node.\r\n * @public\r\n */\r\nexport const TreeNodeRenderer = React.memo((props: TreeNodeRendererProps) => {\r\n const label = (\r\n <TreeNodeContent\r\n key={props.node.id}\r\n node={props.node}\r\n showDescription={props.descriptionEnabled}\r\n valueRendererManager={PropertyValueRendererManager.defaultManager}\r\n highlightProps={props.nodeHighlightProps}\r\n onLabelRendered={props.onLabelRendered}\r\n nodeEditorRenderer={props.nodeEditorRenderer}\r\n />\r\n );\r\n\r\n function onExpansionToggle() {\r\n if (props.node.isExpanded)\r\n props.treeActions.onNodeCollapsed(props.node.id);\r\n else\r\n props.treeActions.onNodeExpanded(props.node.id);\r\n }\r\n\r\n const createCheckboxProps = (checkboxInfo: CheckBoxInfo): NodeCheckboxProps => ({\r\n state: checkboxInfo.state,\r\n tooltip: checkboxInfo.tooltip,\r\n isDisabled: checkboxInfo.isDisabled,\r\n onClick: (newState) => props.treeActions.onNodeCheckboxClicked(props.node.id, newState),\r\n });\r\n\r\n return (\r\n <TreeNode\r\n data-testid={TreeComponentTestId.Node}\r\n className={props.className}\r\n checkboxProps={props.node.checkbox.isVisible ? createCheckboxProps(props.node.checkbox) : undefined}\r\n style={props.style}\r\n isExpanded={props.node.isExpanded}\r\n isSelected={props.node.isSelected}\r\n isLoading={props.node.isLoading}\r\n isLeaf={props.node.numChildren === 0}\r\n icon={props.imageLoader ? <TreeNodeIcon node={props.node} imageLoader={props.imageLoader} /> : undefined}\r\n label={label}\r\n level={props.node.depth}\r\n onClick={(event) => props.treeActions.onNodeClicked(props.node.id, event)}\r\n onMouseDown={() => props.treeActions.onNodeMouseDown(props.node.id)}\r\n onMouseMove={() => props.treeActions.onNodeMouseMove(props.node.id)}\r\n onClickExpansionToggle={onExpansionToggle}\r\n renderOverrides={{ renderCheckbox: props.checkboxRenderer }}\r\n />\r\n );\r\n});\r\n\r\ninterface TreeNodeIconProps {\r\n node: TreeModelNode;\r\n imageLoader: ITreeImageLoader;\r\n}\r\n\r\nfunction TreeNodeIcon(props: TreeNodeIconProps) {\r\n const { imageLoader, node } = props;\r\n const image = imageLoader.load(node.item);\r\n\r\n if (!image)\r\n return null;\r\n\r\n const renderer = new ImageRenderer();\r\n return <>{renderer.render(image)}</>;\r\n}\r\n"]}
1
+ {"version":3,"file":"TreeNodeRenderer.js","sourceRoot":"","sources":["../../../../../../src/components-react/tree/controlled/component/TreeNodeRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tree\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { CommonProps, NodeCheckboxProps, NodeCheckboxRenderer, TreeNode } from \"@itwin/core-react\";\r\nimport { ImageRenderer } from \"../../../common/ImageRenderer\";\r\nimport { PropertyValueRendererManager } from \"../../../properties/ValueRendererManager\";\r\nimport { HighlightableTreeNodeProps } from \"../../HighlightingEngine\";\r\nimport { ITreeImageLoader } from \"../../ImageLoader\";\r\nimport { TreeComponentTestId } from \"../../TreeComponentTestId\";\r\nimport { TreeActions } from \"../TreeActions\";\r\nimport { CheckBoxInfo, TreeModelNode } from \"../TreeModel\";\r\nimport { TreeNodeContent } from \"./NodeContent\";\r\nimport { TreeNodeEditorRenderer } from \"./TreeNodeEditor\";\r\n\r\n/**\r\n * Properties for [[TreeNodeRenderer]].\r\n * @public\r\n */\r\nexport interface TreeNodeRendererProps extends CommonProps {\r\n /** Tree node to render. */\r\n node: TreeModelNode;\r\n\r\n /** Action handler. */\r\n treeActions: TreeActions;\r\n\r\n /** Properties used to highlight matches when tree is filtered. */\r\n nodeHighlightProps?: HighlightableTreeNodeProps;\r\n\r\n /** Specifies whether to show descriptions or not. */\r\n descriptionEnabled?: boolean;\r\n\r\n /** Image loader for node icons. */\r\n imageLoader?: ITreeImageLoader;\r\n\r\n /** Callback to render custom checkbox. */\r\n checkboxRenderer?: NodeCheckboxRenderer;\r\n\r\n /** Callback to render custom node editor when node is in editing mode. */\r\n nodeEditorRenderer?: TreeNodeEditorRenderer;\r\n\r\n /**\r\n * Callback used to detect when label is rendered. It is used by TreeRenderer for scrolling to active match.\r\n * @internal\r\n */\r\n onLabelRendered?: (node: TreeModelNode) => void;\r\n\r\n /** Child components to render inside the node.*/\r\n children?: React.ReactNode;\r\n}\r\n\r\n/**\r\n * Default component for rendering tree node.\r\n * @public\r\n */\r\nexport const TreeNodeRenderer = React.memo((props: TreeNodeRendererProps) => {\r\n const label = (\r\n <TreeNodeContent\r\n key={props.node.id}\r\n node={props.node}\r\n showDescription={props.descriptionEnabled}\r\n valueRendererManager={PropertyValueRendererManager.defaultManager}\r\n highlightProps={props.nodeHighlightProps}\r\n onLabelRendered={props.onLabelRendered}\r\n nodeEditorRenderer={props.nodeEditorRenderer}\r\n />\r\n );\r\n\r\n function onExpansionToggle() {\r\n if (props.node.isExpanded)\r\n props.treeActions.onNodeCollapsed(props.node.id);\r\n else\r\n props.treeActions.onNodeExpanded(props.node.id);\r\n }\r\n\r\n const createCheckboxProps = (checkboxInfo: CheckBoxInfo): NodeCheckboxProps => ({\r\n state: checkboxInfo.state,\r\n tooltip: checkboxInfo.tooltip,\r\n isDisabled: checkboxInfo.isDisabled,\r\n onClick: (newState) => props.treeActions.onNodeCheckboxClicked(props.node.id, newState),\r\n });\r\n\r\n return (\r\n <TreeNode\r\n data-testid={TreeComponentTestId.Node}\r\n className={props.className}\r\n checkboxProps={props.node.checkbox.isVisible ? createCheckboxProps(props.node.checkbox) : undefined}\r\n style={props.style}\r\n isExpanded={props.node.isExpanded}\r\n isSelected={props.node.isSelected}\r\n isLoading={props.node.isLoading}\r\n isLeaf={props.node.numChildren === 0}\r\n icon={props.imageLoader ? <TreeNodeIcon node={props.node} imageLoader={props.imageLoader} /> : undefined}\r\n label={label}\r\n level={props.node.depth}\r\n onClick={(event) => props.treeActions.onNodeClicked(props.node.id, event)}\r\n onMouseDown={() => props.treeActions.onNodeMouseDown(props.node.id)}\r\n onMouseMove={() => props.treeActions.onNodeMouseMove(props.node.id)}\r\n onClickExpansionToggle={onExpansionToggle}\r\n renderOverrides={{ renderCheckbox: props.checkboxRenderer }}\r\n >\r\n {props.children}\r\n </TreeNode>\r\n );\r\n});\r\n\r\ninterface TreeNodeIconProps {\r\n node: TreeModelNode;\r\n imageLoader: ITreeImageLoader;\r\n}\r\n\r\nfunction TreeNodeIcon(props: TreeNodeIconProps) {\r\n const { imageLoader, node } = props;\r\n const image = imageLoader.load(node.item);\r\n\r\n if (!image)\r\n return null;\r\n\r\n const renderer = new ImageRenderer();\r\n return <>{renderer.render(image)}</>;\r\n}\r\n"]}
@@ -66,6 +66,15 @@ export * from "./components-react/properties/renderers/value/MergedPropertyValue
66
66
  export * from "./components-react/properties/renderers/value/MultilineTextPropertyValueRenderer";
67
67
  export * from "./components-react/properties/renderers/value/UrlPropertyValueRenderer";
68
68
  export * from "./components-react/properties/renderers/value/WithContextStyle";
69
+ export * from "./components-react/filter-builder/FilterBuilder";
70
+ export * from "./components-react/filter-builder/FilterBuilderRule";
71
+ export * from "./components-react/filter-builder/FilterBuilderRuleGroup";
72
+ export * from "./components-react/filter-builder/FilterBuilderRuleOperator";
73
+ export * from "./components-react/filter-builder/FilterBuilderRuleProperty";
74
+ export * from "./components-react/filter-builder/FilterBuilderRuleValue";
75
+ export * from "./components-react/filter-builder/FilterBuilderState";
76
+ export * from "./components-react/filter-builder/Operators";
77
+ export * from "./components-react/filter-builder/Types";
69
78
  export * from "./components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer";
70
79
  export * from "./components-react/properties/renderers/label/PrimitivePropertyLabelRenderer";
71
80
  export * from "./components-react/properties/renderers/label/PropertyLabelRenderer";
@@ -1 +1 @@
1
- {"version":3,"file":"components-react.d.ts","sourceRoot":"","sources":["../../src/components-react.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"components-react.d.ts","sourceRoot":"","sources":["../../src/components-react.ts"],"names":[],"mappings":"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"}
@@ -85,6 +85,15 @@ __exportStar(require("./components-react/properties/renderers/value/MergedProper
85
85
  __exportStar(require("./components-react/properties/renderers/value/MultilineTextPropertyValueRenderer"), exports);
86
86
  __exportStar(require("./components-react/properties/renderers/value/UrlPropertyValueRenderer"), exports);
87
87
  __exportStar(require("./components-react/properties/renderers/value/WithContextStyle"), exports);
88
+ __exportStar(require("./components-react/filter-builder/FilterBuilder"), exports);
89
+ __exportStar(require("./components-react/filter-builder/FilterBuilderRule"), exports);
90
+ __exportStar(require("./components-react/filter-builder/FilterBuilderRuleGroup"), exports);
91
+ __exportStar(require("./components-react/filter-builder/FilterBuilderRuleOperator"), exports);
92
+ __exportStar(require("./components-react/filter-builder/FilterBuilderRuleProperty"), exports);
93
+ __exportStar(require("./components-react/filter-builder/FilterBuilderRuleValue"), exports);
94
+ __exportStar(require("./components-react/filter-builder/FilterBuilderState"), exports);
95
+ __exportStar(require("./components-react/filter-builder/Operators"), exports);
96
+ __exportStar(require("./components-react/filter-builder/Types"), exports);
88
97
  __exportStar(require("./components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer"), exports);
89
98
  __exportStar(require("./components-react/properties/renderers/label/PrimitivePropertyLabelRenderer"), exports);
90
99
  __exportStar(require("./components-react/properties/renderers/label/PropertyLabelRenderer"), exports);