@itwin/components-react 4.8.1 → 4.9.0-dev.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.
Files changed (144) hide show
  1. package/CHANGELOG.md +6 -6
  2. package/lib/cjs/components-react/UiComponents.d.ts.map +1 -1
  3. package/lib/cjs/components-react/UiComponents.js +1 -0
  4. package/lib/cjs/components-react/UiComponents.js.map +1 -1
  5. package/lib/cjs/components-react/common/DelayedSpinner.d.ts +3 -2
  6. package/lib/cjs/components-react/common/DelayedSpinner.d.ts.map +1 -1
  7. package/lib/cjs/components-react/common/DelayedSpinner.js +1 -1
  8. package/lib/cjs/components-react/common/DelayedSpinner.js.map +1 -1
  9. package/lib/cjs/components-react/common/ImageRenderer.d.ts.map +1 -1
  10. package/lib/cjs/components-react/common/ImageRenderer.js +3 -4
  11. package/lib/cjs/components-react/common/ImageRenderer.js.map +1 -1
  12. package/lib/cjs/components-react/common/UseContextWithMandatoryProvider.d.ts.map +1 -1
  13. package/lib/cjs/components-react/common/UseContextWithMandatoryProvider.js +1 -0
  14. package/lib/cjs/components-react/common/UseContextWithMandatoryProvider.js.map +1 -1
  15. package/lib/cjs/components-react/datepicker/DateField.scss +2 -5
  16. package/lib/cjs/components-react/datepicker/TimeField.d.ts.map +1 -1
  17. package/lib/cjs/components-react/datepicker/TimeField.js +8 -4
  18. package/lib/cjs/components-react/datepicker/TimeField.js.map +1 -1
  19. package/lib/cjs/components-react/datepicker/TimeField.scss +3 -6
  20. package/lib/cjs/components-react/editors/BooleanEditor.js +1 -1
  21. package/lib/cjs/components-react/editors/BooleanEditor.js.map +1 -1
  22. package/lib/cjs/components-react/editors/CustomNumberEditor.d.ts.map +1 -1
  23. package/lib/cjs/components-react/editors/CustomNumberEditor.js +1 -1
  24. package/lib/cjs/components-react/editors/CustomNumberEditor.js.map +1 -1
  25. package/lib/cjs/components-react/editors/CustomNumberEditor.scss +3 -5
  26. package/lib/cjs/components-react/editors/EnumEditor.d.ts.map +1 -1
  27. package/lib/cjs/components-react/editors/EnumEditor.js +8 -1
  28. package/lib/cjs/components-react/editors/EnumEditor.js.map +1 -1
  29. package/lib/cjs/components-react/editors/EnumEditor.scss +4 -6
  30. package/lib/cjs/components-react/editors/NumericInputEditor.js +1 -1
  31. package/lib/cjs/components-react/editors/NumericInputEditor.js.map +1 -1
  32. package/lib/cjs/components-react/editors/NumericInputEditor.scss +3 -5
  33. package/lib/cjs/components-react/editors/SliderEditor.d.ts.map +1 -1
  34. package/lib/cjs/components-react/editors/SliderEditor.js +5 -2
  35. package/lib/cjs/components-react/editors/SliderEditor.js.map +1 -1
  36. package/lib/cjs/components-react/editors/TextEditor.d.ts.map +1 -1
  37. package/lib/cjs/components-react/editors/TextEditor.js +1 -1
  38. package/lib/cjs/components-react/editors/TextEditor.js.map +1 -1
  39. package/lib/cjs/components-react/editors/TextEditor.scss +3 -5
  40. package/lib/cjs/components-react/editors/TextareaEditor.d.ts +1 -0
  41. package/lib/cjs/components-react/editors/TextareaEditor.d.ts.map +1 -1
  42. package/lib/cjs/components-react/editors/TextareaEditor.js +4 -3
  43. package/lib/cjs/components-react/editors/TextareaEditor.js.map +1 -1
  44. package/lib/cjs/components-react/editors/ToggleEditor.js +1 -1
  45. package/lib/cjs/components-react/editors/ToggleEditor.js.map +1 -1
  46. package/lib/cjs/components-react/editors/ToggleEditor.scss +2 -8
  47. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -1
  48. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js +3 -5
  49. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
  50. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.scss +0 -6
  51. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -1
  52. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js +2 -2
  53. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
  54. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.scss +1 -1
  55. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.d.ts.map +1 -1
  56. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.js.map +1 -1
  57. package/lib/cjs/components-react/filtering/ResultSelector.scss +1 -1
  58. package/lib/cjs/components-react/inputs/ParsedInput.scss +1 -4
  59. package/lib/cjs/components-react/propertygrid/component/PropertyCategoryBlock.d.ts.map +1 -1
  60. package/lib/cjs/components-react/propertygrid/component/PropertyCategoryBlock.js +4 -2
  61. package/lib/cjs/components-react/propertygrid/component/PropertyCategoryBlock.js.map +1 -1
  62. package/lib/cjs/components-react/propertygrid/component/PropertyGrid.scss +0 -17
  63. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGrid.scss +2 -3
  64. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts.map +1 -1
  65. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js +42 -10
  66. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js.map +1 -1
  67. package/lib/cjs/components-react/propertygrid/internal/PropertyGridHooks.d.ts +12 -0
  68. package/lib/cjs/components-react/propertygrid/internal/PropertyGridHooks.d.ts.map +1 -1
  69. package/lib/cjs/components-react/propertygrid/internal/PropertyGridHooks.js +22 -1
  70. package/lib/cjs/components-react/propertygrid/internal/PropertyGridHooks.js.map +1 -1
  71. package/lib/cjs/components-react/tree/controlled/TreeNodeLoader.js +1 -0
  72. package/lib/cjs/components-react/tree/controlled/TreeNodeLoader.js.map +1 -1
  73. package/lib/esm/components-react/UiComponents.d.ts.map +1 -1
  74. package/lib/esm/components-react/UiComponents.js +1 -0
  75. package/lib/esm/components-react/UiComponents.js.map +1 -1
  76. package/lib/esm/components-react/common/DelayedSpinner.d.ts +3 -2
  77. package/lib/esm/components-react/common/DelayedSpinner.d.ts.map +1 -1
  78. package/lib/esm/components-react/common/DelayedSpinner.js +1 -1
  79. package/lib/esm/components-react/common/DelayedSpinner.js.map +1 -1
  80. package/lib/esm/components-react/common/ImageRenderer.d.ts.map +1 -1
  81. package/lib/esm/components-react/common/ImageRenderer.js +3 -4
  82. package/lib/esm/components-react/common/ImageRenderer.js.map +1 -1
  83. package/lib/esm/components-react/common/UseContextWithMandatoryProvider.d.ts.map +1 -1
  84. package/lib/esm/components-react/common/UseContextWithMandatoryProvider.js +1 -0
  85. package/lib/esm/components-react/common/UseContextWithMandatoryProvider.js.map +1 -1
  86. package/lib/esm/components-react/datepicker/DateField.scss +2 -5
  87. package/lib/esm/components-react/datepicker/TimeField.d.ts.map +1 -1
  88. package/lib/esm/components-react/datepicker/TimeField.js +5 -4
  89. package/lib/esm/components-react/datepicker/TimeField.js.map +1 -1
  90. package/lib/esm/components-react/datepicker/TimeField.scss +3 -6
  91. package/lib/esm/components-react/editors/BooleanEditor.js +1 -1
  92. package/lib/esm/components-react/editors/BooleanEditor.js.map +1 -1
  93. package/lib/esm/components-react/editors/CustomNumberEditor.d.ts.map +1 -1
  94. package/lib/esm/components-react/editors/CustomNumberEditor.js +1 -1
  95. package/lib/esm/components-react/editors/CustomNumberEditor.js.map +1 -1
  96. package/lib/esm/components-react/editors/CustomNumberEditor.scss +3 -5
  97. package/lib/esm/components-react/editors/EnumEditor.d.ts.map +1 -1
  98. package/lib/esm/components-react/editors/EnumEditor.js +8 -1
  99. package/lib/esm/components-react/editors/EnumEditor.js.map +1 -1
  100. package/lib/esm/components-react/editors/EnumEditor.scss +4 -6
  101. package/lib/esm/components-react/editors/NumericInputEditor.js +1 -1
  102. package/lib/esm/components-react/editors/NumericInputEditor.js.map +1 -1
  103. package/lib/esm/components-react/editors/NumericInputEditor.scss +3 -5
  104. package/lib/esm/components-react/editors/SliderEditor.d.ts.map +1 -1
  105. package/lib/esm/components-react/editors/SliderEditor.js +5 -2
  106. package/lib/esm/components-react/editors/SliderEditor.js.map +1 -1
  107. package/lib/esm/components-react/editors/TextEditor.d.ts.map +1 -1
  108. package/lib/esm/components-react/editors/TextEditor.js +1 -1
  109. package/lib/esm/components-react/editors/TextEditor.js.map +1 -1
  110. package/lib/esm/components-react/editors/TextEditor.scss +3 -5
  111. package/lib/esm/components-react/editors/TextareaEditor.d.ts +1 -0
  112. package/lib/esm/components-react/editors/TextareaEditor.d.ts.map +1 -1
  113. package/lib/esm/components-react/editors/TextareaEditor.js +4 -3
  114. package/lib/esm/components-react/editors/TextareaEditor.js.map +1 -1
  115. package/lib/esm/components-react/editors/ToggleEditor.js +1 -1
  116. package/lib/esm/components-react/editors/ToggleEditor.js.map +1 -1
  117. package/lib/esm/components-react/editors/ToggleEditor.scss +2 -8
  118. package/lib/esm/components-react/filter-builder/FilterBuilderRule.d.ts.map +1 -1
  119. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js +4 -6
  120. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
  121. package/lib/esm/components-react/filter-builder/FilterBuilderRule.scss +0 -6
  122. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.d.ts.map +1 -1
  123. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js +2 -2
  124. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
  125. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.scss +1 -1
  126. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.d.ts.map +1 -1
  127. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.js.map +1 -1
  128. package/lib/esm/components-react/filtering/ResultSelector.scss +1 -1
  129. package/lib/esm/components-react/inputs/ParsedInput.scss +1 -4
  130. package/lib/esm/components-react/propertygrid/component/PropertyCategoryBlock.d.ts.map +1 -1
  131. package/lib/esm/components-react/propertygrid/component/PropertyCategoryBlock.js +4 -2
  132. package/lib/esm/components-react/propertygrid/component/PropertyCategoryBlock.js.map +1 -1
  133. package/lib/esm/components-react/propertygrid/component/PropertyGrid.scss +0 -17
  134. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGrid.scss +2 -3
  135. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.d.ts.map +1 -1
  136. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js +21 -9
  137. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js.map +1 -1
  138. package/lib/esm/components-react/propertygrid/internal/PropertyGridHooks.d.ts +12 -0
  139. package/lib/esm/components-react/propertygrid/internal/PropertyGridHooks.d.ts.map +1 -1
  140. package/lib/esm/components-react/propertygrid/internal/PropertyGridHooks.js +20 -0
  141. package/lib/esm/components-react/propertygrid/internal/PropertyGridHooks.js.map +1 -1
  142. package/lib/esm/components-react/tree/controlled/TreeNodeLoader.js +1 -0
  143. package/lib/esm/components-react/tree/controlled/TreeNodeLoader.js.map +1 -1
  144. package/package.json +8 -7
@@ -1 +1 @@
1
- {"version":3,"file":"VirtualizedPropertyGridWithDataProvider.js","sourceRoot":"","sources":["../../../../../src/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;;;;;;AAEhG;;GAEG;AAEH,kDAA0B;AAC1B,gEAA6D;AAC7D,qEAIuC;AAOvC,uEAAoE;AAmBpE;;;;GAIG;AACH,SAAgB,uCAAuC,CACrD,KAAmD;IAEnD,MAAM,WAAW,GAAG,IAAA,8CAA0B,EAAC;QAC7C,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,IAAA,wCAAoB,EAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,IAAA,+CAA2B,EAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAElE,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,CACL,uCAAK,SAAS,EAAC,6CAA6C;YAC1D,8BAAC,+BAAc,IAAC,IAAI,EAAC,OAAO,GAAG,CAC3B,CACP,CAAC;KACH;IAED,OAAO,CACL,8BAAC,iDAAuB,OAClB,KAAK,EACT,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,YAAY,GAC1B,CACH,CAAC;AACJ,CAAC;AAxBD,0FAwBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module PropertyGrid\n */\n\nimport React from \"react\";\nimport { DelayedSpinner } from \"../../common/DelayedSpinner\";\nimport {\n usePropertyGridEventHandler,\n usePropertyGridModel,\n usePropertyGridModelSource,\n} from \"../internal/PropertyGridHooks\";\nimport type { PropertyCategoryRendererManager } from \"../PropertyCategoryRendererManager\";\nimport type { IPropertyDataProvider } from \"../PropertyDataProvider\";\nimport type {\n CommonPropertyGridProps,\n PropertyGridContentHighlightProps,\n} from \"./PropertyGridCommons\";\nimport { VirtualizedPropertyGrid } from \"./VirtualizedPropertyGrid\";\n\n/** Properties for [[VirtualizedPropertyGridWithDataProvider]] React component\n * @public\n */\nexport interface VirtualizedPropertyGridWithDataProviderProps\n extends CommonPropertyGridProps {\n /** Property data provider used by the property grid */\n dataProvider: IPropertyDataProvider;\n /** Properties for highlighting property data in the grid. */\n highlight?: PropertyGridContentHighlightProps;\n /** Custom property category renderer manager. Defaults to [[PropertyCategoryRendererManager.defaultManager]]. */\n propertyCategoryRendererManager?: PropertyCategoryRendererManager;\n /** Width of the property grid component. */\n width: number;\n /** Height of the property grid component. */\n height: number;\n}\n\n/**\n * [[VirtualizedPropertyGrid]] React Component which takes a data provider and\n * sets up default implementations for [[IPropertyGridModelSource]] and [[IPropertyGridEventHandler]]\n * @public\n */\nexport function VirtualizedPropertyGridWithDataProvider(\n props: VirtualizedPropertyGridWithDataProviderProps\n) {\n const modelSource = usePropertyGridModelSource({\n dataProvider: props.dataProvider,\n });\n const model = usePropertyGridModel({ modelSource });\n const eventHandler = usePropertyGridEventHandler({ modelSource });\n\n if (!model) {\n return (\n <div className=\"components-virtualized-property-grid-loader\">\n <DelayedSpinner size=\"large\" />\n </div>\n );\n }\n\n return (\n <VirtualizedPropertyGrid\n {...props}\n model={model}\n eventHandler={eventHandler}\n />\n );\n}\n"]}
1
+ {"version":3,"file":"VirtualizedPropertyGridWithDataProvider.js","sourceRoot":"","sources":["../../../../../src/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEhG;;GAEG;AAEH,+CAAmD;AACnD,qEAIuC;AAOvC,uEAAoE;AACpE,wDAAsD;AAmBtD;;;;GAIG;AACH,SAAgB,uCAAuC,CACrD,KAAmD;IAEnD,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,IAAA,qDAAiC,EAAC;QACpE,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,IAAA,wCAAoB,EAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,IAAA,+CAA2B,EAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAElE,OAAO,CACL,8BAAC,qBAAqB,IAAC,kBAAkB,EAAE,UAAU,IAAI,CAAC,KAAK,IAC5D,KAAK,IAAI,CACR,8BAAC,iDAAuB,OAClB,KAAK,EACT,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,YAAY,GAC1B,CACH,CACqB,CACzB,CAAC;AACJ,CAAC;AArBD,0FAqBC;AAMD,SAAS,qBAAqB,CAAC,EAC7B,QAAQ,EACR,kBAAkB,GACkC;IACpD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAC,kBAAkB,CAAC,CAAC;IACnE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,kBAAkB,EAAE;YACvB,cAAc,CAAC,kBAAkB,CAAC,CAAC;YACnC,OAAO;SACR;QAED,8DAA8D;QAC9D,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,cAAc,CAAC,kBAAkB,CAAC,CAAC;QACrC,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEzB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CACpB,8DAAG,QAAQ,CAAI,CAChB,CAAC,CAAC,CAAC,CACF,uCAAK,SAAS,EAAC,6CAA6C;QAC1D,8BAAC,8BAAc,IAAC,aAAa,QAAC,IAAI,EAAE,OAAO,GAAI,CAC3C,CACP,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module PropertyGrid\n */\n\nimport React, { useEffect, useState } from \"react\";\nimport {\n usePropertyGridEventHandler,\n usePropertyGridModel,\n useTrackedPropertyGridModelSource,\n} from \"../internal/PropertyGridHooks\";\nimport type { PropertyCategoryRendererManager } from \"../PropertyCategoryRendererManager\";\nimport type { IPropertyDataProvider } from \"../PropertyDataProvider\";\nimport type {\n CommonPropertyGridProps,\n PropertyGridContentHighlightProps,\n} from \"./PropertyGridCommons\";\nimport { VirtualizedPropertyGrid } from \"./VirtualizedPropertyGrid\";\nimport { ProgressRadial } from \"@itwin/itwinui-react\";\n\n/** Properties for [[VirtualizedPropertyGridWithDataProvider]] React component\n * @public\n */\nexport interface VirtualizedPropertyGridWithDataProviderProps\n extends CommonPropertyGridProps {\n /** Property data provider used by the property grid */\n dataProvider: IPropertyDataProvider;\n /** Properties for highlighting property data in the grid. */\n highlight?: PropertyGridContentHighlightProps;\n /** Custom property category renderer manager. Defaults to [[PropertyCategoryRendererManager.defaultManager]]. */\n propertyCategoryRendererManager?: PropertyCategoryRendererManager;\n /** Width of the property grid component. */\n width: number;\n /** Height of the property grid component. */\n height: number;\n}\n\n/**\n * [[VirtualizedPropertyGrid]] React Component which takes a data provider and\n * sets up default implementations for [[IPropertyGridModelSource]] and [[IPropertyGridEventHandler]]\n * @public\n */\nexport function VirtualizedPropertyGridWithDataProvider(\n props: VirtualizedPropertyGridWithDataProviderProps\n) {\n const { modelSource, inProgress } = useTrackedPropertyGridModelSource({\n dataProvider: props.dataProvider,\n });\n\n const model = usePropertyGridModel({ modelSource });\n const eventHandler = usePropertyGridEventHandler({ modelSource });\n\n return (\n <DelayedLoaderRenderer shouldRenderLoader={inProgress || !model}>\n {model && (\n <VirtualizedPropertyGrid\n {...props}\n model={model}\n eventHandler={eventHandler}\n />\n )}\n </DelayedLoaderRenderer>\n );\n}\n\ninterface DelayedLoaderRendererProps {\n shouldRenderLoader: boolean;\n}\n\nfunction DelayedLoaderRenderer({\n children,\n shouldRenderLoader,\n}: React.PropsWithChildren<DelayedLoaderRendererProps>) {\n const [showSpinner, setShowSpinner] = useState(shouldRenderLoader);\n useEffect(() => {\n if (!shouldRenderLoader) {\n setShowSpinner(shouldRenderLoader);\n return;\n }\n\n // only set a timeout when shouldRenderLoader is set to `true`\n const timeout = setTimeout(() => {\n setShowSpinner(shouldRenderLoader);\n }, 250);\n\n return () => clearTimeout(timeout);\n }, [shouldRenderLoader]);\n\n return !showSpinner ? (\n <>{children}</>\n ) : (\n <div className=\"components-virtualized-property-grid-loader\">\n <ProgressRadial indeterminate size={\"large\"} />\n </div>\n );\n}\n"]}
@@ -21,10 +21,22 @@ export declare function usePropertyData(props: {
21
21
  * Custom hook that creates a [[PropertyGridModelSource]] and subscribes it to data updates from the data provider.
22
22
  * @throws if/when `IPropertyDataProvider.getData()` promise is rejected. The error is thrown in the React's render loop, so it can be caught using an error boundary.
23
23
  * @public
24
+ * @deprecated in 4.9.0. Use `useTrackedPropertyGridModelSource` instead.
24
25
  */
25
26
  export declare function usePropertyGridModelSource(props: {
26
27
  dataProvider: IPropertyDataProvider;
27
28
  }): PropertyGridModelSource;
29
+ /**
30
+ * Custom hook that creates a [[PropertyGridModelSource]] and subscribes it to data updates from the data provider while also providing information on data update progress.
31
+ * @throws if/when `IPropertyDataProvider.getData()` promise is rejected. The error is thrown in the React's render loop, so it can be caught using an error boundary.
32
+ * @public
33
+ */
34
+ export declare function useTrackedPropertyGridModelSource(props: {
35
+ dataProvider: IPropertyDataProvider;
36
+ }): {
37
+ modelSource: PropertyGridModelSource;
38
+ inProgress: boolean;
39
+ };
28
40
  /**
29
41
  * Custom hook that creates memoized version of [[PropertyGridEventHandler]] that modifies given modelSource
30
42
  * @public
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyGridHooks.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/propertygrid/internal/PropertyGridHooks.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,YAAY,EAAE,qBAAqB,CAAC;CACrC;;;EAkBA;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,YAAY,EAAE,qBAAqB,CAAC;CACrC,2BAgBA;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,WAAW,EAAE,wBAAwB,CAAC;CACvC,4BAKA;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,WAAW,EAAE,wBAAwB,CAAC;CACvC,kCAaA"}
1
+ {"version":3,"file":"PropertyGridHooks.d.ts","sourceRoot":"","sources":["../../../../../src/components-react/propertygrid/internal/PropertyGridHooks.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,YAAY,EAAE,qBAAqB,CAAC;CACrC;;;EAkBA;AAED;;;;;GAKG;AAEH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,YAAY,EAAE,qBAAqB,CAAC;CACrC,2BAgBA;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IACvD,YAAY,EAAE,qBAAqB,CAAC;CACrC;;;EAgBA;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,WAAW,EAAE,wBAAwB,CAAC;CACvC,4BAKA;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,WAAW,EAAE,wBAAwB,CAAC;CACvC,kCAaA"}
@@ -7,7 +7,7 @@
7
7
  * @module PropertyGrid
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.usePropertyGridModel = exports.usePropertyGridEventHandler = exports.usePropertyGridModelSource = exports.usePropertyData = void 0;
10
+ exports.usePropertyGridModel = exports.usePropertyGridEventHandler = exports.useTrackedPropertyGridModelSource = exports.usePropertyGridModelSource = exports.usePropertyData = void 0;
11
11
  const react_1 = require("react");
12
12
  const UseDebouncedAsyncValue_1 = require("../../common/UseDebouncedAsyncValue");
13
13
  const MutableGridItemFactory_1 = require("./flat-items/MutableGridItemFactory");
@@ -36,7 +36,9 @@ exports.usePropertyData = usePropertyData;
36
36
  * Custom hook that creates a [[PropertyGridModelSource]] and subscribes it to data updates from the data provider.
37
37
  * @throws if/when `IPropertyDataProvider.getData()` promise is rejected. The error is thrown in the React's render loop, so it can be caught using an error boundary.
38
38
  * @public
39
+ * @deprecated in 4.9.0. Use `useTrackedPropertyGridModelSource` instead.
39
40
  */
41
+ // istanbul ignore next: 'useTrackedPropertyGridModelSource' is almost identical.
40
42
  function usePropertyGridModelSource(props) {
41
43
  const { value: propertyData } = usePropertyData(props);
42
44
  const { dataProvider } = { ...props };
@@ -51,6 +53,25 @@ function usePropertyGridModelSource(props) {
51
53
  return modelSource;
52
54
  }
53
55
  exports.usePropertyGridModelSource = usePropertyGridModelSource;
56
+ /**
57
+ * Custom hook that creates a [[PropertyGridModelSource]] and subscribes it to data updates from the data provider while also providing information on data update progress.
58
+ * @throws if/when `IPropertyDataProvider.getData()` promise is rejected. The error is thrown in the React's render loop, so it can be caught using an error boundary.
59
+ * @public
60
+ */
61
+ function useTrackedPropertyGridModelSource(props) {
62
+ const { value: propertyData, inProgress } = usePropertyData(props);
63
+ const { dataProvider } = { ...props };
64
+ // Model source needs to be recreated if data provider changes
65
+ const modelSource = (0, react_1.useMemo)(() => new PropertyGridModelSource_1.PropertyGridModelSource(new MutableGridItemFactory_1.MutableGridItemFactory()),
66
+ // eslint-disable-next-line react-hooks/exhaustive-deps
67
+ [dataProvider]);
68
+ (0, react_1.useEffect)(() => {
69
+ if (propertyData)
70
+ modelSource.setPropertyData(propertyData);
71
+ }, [modelSource, propertyData]);
72
+ return { modelSource, inProgress };
73
+ }
74
+ exports.useTrackedPropertyGridModelSource = useTrackedPropertyGridModelSource;
54
75
  /**
55
76
  * Custom hook that creates memoized version of [[PropertyGridEventHandler]] that modifies given modelSource
56
77
  * @public
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyGridHooks.js","sourceRoot":"","sources":["../../../../../src/components-react/propertygrid/internal/PropertyGridHooks.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAEH,iCAA8E;AAC9E,gFAA6E;AAE7E,gFAA6E;AAC7E,yEAAsE;AAGtE,uEAAoE;AAEpE;;;;GAIG;AACH,SAAgB,eAAe,CAAC,KAE/B;IACC,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAE/B,MAAM,CAAC,YAAY,EAAE,mBAAmB,CAAC,GAAG,IAAA,kBAAU,EAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACvE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,OAAO,YAAY,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,EAAE;YACjD,mBAAmB,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,yGAAyG;IACzG,OAAO,IAAA,+CAAsB,EAC3B,IAAA,mBAAW,EACT,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE;IAClC,uDAAuD;IACvD,CAAC,YAAY,EAAE,YAAY,CAAC,CAC7B,CACF,CAAC;AACJ,CAAC;AApBD,0CAoBC;AAED;;;;GAIG;AACH,SAAgB,0BAA0B,CAAC,KAE1C;IACC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAEtC,8DAA8D;IAC9D,MAAM,WAAW,GAAG,IAAA,eAAO,EACzB,GAAG,EAAE,CAAC,IAAI,iDAAuB,CAAC,IAAI,+CAAsB,EAAE,CAAC;IAC/D,uDAAuD;IACvD,CAAC,YAAY,CAAC,CACf,CAAC;IAEF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,YAAY;YAAE,WAAW,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IAC9D,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAEhC,OAAO,WAAW,CAAC;AACrB,CAAC;AAlBD,gEAkBC;AAED;;;GAGG;AACH,SAAgB,2BAA2B,CAAC,KAE3C;IACC,OAAO,IAAA,eAAO,EACZ,GAAG,EAAE,CAAC,IAAI,mDAAwB,CAAC,KAAK,CAAC,WAAW,CAAC,EACrD,CAAC,KAAK,CAAC,WAAW,CAAC,CACpB,CAAC;AACJ,CAAC;AAPD,kEAOC;AAED;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,KAEpC;IACC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IACrC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,GAAsB,CAAC;IAEzD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnC,CAAC,CAAC;QACF,YAAY,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAC9D,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,OAAO,KAAK,CAAC;AACf,CAAC;AAfD,oDAeC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module PropertyGrid\n */\n\nimport { useCallback, useEffect, useMemo, useReducer, useState } from \"react\";\nimport { useDebouncedAsyncValue } from \"../../common/UseDebouncedAsyncValue\";\nimport type { IPropertyDataProvider } from \"../PropertyDataProvider\";\nimport { MutableGridItemFactory } from \"./flat-items/MutableGridItemFactory\";\nimport { PropertyGridEventHandler } from \"./PropertyGridEventHandler\";\nimport type { IPropertyGridModel } from \"./PropertyGridModel\";\nimport type { IPropertyGridModelSource } from \"./PropertyGridModelSource\";\nimport { PropertyGridModelSource } from \"./PropertyGridModelSource\";\n\n/**\n * Custom hook that gets [[PropertyData]] from given [[IPropertyDataProvider]] and subscribes to further data changes.\n * @throws if/when `IPropertyDataProvider.getData()` promise is rejected. The error is thrown in the React's render loop, so it can be caught using an error boundary.\n * @public\n */\nexport function usePropertyData(props: {\n dataProvider: IPropertyDataProvider;\n}) {\n const { dataProvider } = props;\n\n const [forcedUpdate, triggerForcedUpdate] = useReducer(() => ({}), {});\n useEffect(() => {\n return dataProvider.onDataChanged.addListener(() => {\n triggerForcedUpdate();\n });\n }, [dataProvider]);\n\n // forcedUpdate is added to dependency list to re-memo getData promise when onDataChanged emits an event.\n return useDebouncedAsyncValue(\n useCallback(\n async () => dataProvider.getData(),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dataProvider, forcedUpdate]\n )\n );\n}\n\n/**\n * Custom hook that creates a [[PropertyGridModelSource]] and subscribes it to data updates from the data provider.\n * @throws if/when `IPropertyDataProvider.getData()` promise is rejected. The error is thrown in the React's render loop, so it can be caught using an error boundary.\n * @public\n */\nexport function usePropertyGridModelSource(props: {\n dataProvider: IPropertyDataProvider;\n}) {\n const { value: propertyData } = usePropertyData(props);\n const { dataProvider } = { ...props };\n\n // Model source needs to be recreated if data provider changes\n const modelSource = useMemo(\n () => new PropertyGridModelSource(new MutableGridItemFactory()),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dataProvider]\n );\n\n useEffect(() => {\n if (propertyData) modelSource.setPropertyData(propertyData);\n }, [modelSource, propertyData]);\n\n return modelSource;\n}\n\n/**\n * Custom hook that creates memoized version of [[PropertyGridEventHandler]] that modifies given modelSource\n * @public\n */\nexport function usePropertyGridEventHandler(props: {\n modelSource: IPropertyGridModelSource;\n}) {\n return useMemo(\n () => new PropertyGridEventHandler(props.modelSource),\n [props.modelSource]\n );\n}\n\n/**\n * Custom hook that automatically listens and retrieves latest model from model source\n * @public\n */\nexport function usePropertyGridModel(props: {\n modelSource: IPropertyGridModelSource;\n}) {\n const { modelSource } = { ...props };\n const [model, setModel] = useState<IPropertyGridModel>();\n\n useEffect(() => {\n const modelChanged = () => {\n setModel(modelSource.getModel());\n };\n modelChanged();\n return modelSource.onModelChanged.addListener(modelChanged);\n }, [modelSource]);\n\n return model;\n}\n"]}
1
+ {"version":3,"file":"PropertyGridHooks.js","sourceRoot":"","sources":["../../../../../src/components-react/propertygrid/internal/PropertyGridHooks.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module PropertyGrid\n */\n\nimport { useCallback, useEffect, useMemo, useReducer, useState } from \"react\";\nimport { useDebouncedAsyncValue } from \"../../common/UseDebouncedAsyncValue\";\nimport type { IPropertyDataProvider } from \"../PropertyDataProvider\";\nimport { MutableGridItemFactory } from \"./flat-items/MutableGridItemFactory\";\nimport { PropertyGridEventHandler } from \"./PropertyGridEventHandler\";\nimport type { IPropertyGridModel } from \"./PropertyGridModel\";\nimport type { IPropertyGridModelSource } from \"./PropertyGridModelSource\";\nimport { PropertyGridModelSource } from \"./PropertyGridModelSource\";\n\n/**\n * Custom hook that gets [[PropertyData]] from given [[IPropertyDataProvider]] and subscribes to further data changes.\n * @throws if/when `IPropertyDataProvider.getData()` promise is rejected. The error is thrown in the React's render loop, so it can be caught using an error boundary.\n * @public\n */\nexport function usePropertyData(props: {\n dataProvider: IPropertyDataProvider;\n}) {\n const { dataProvider } = props;\n\n const [forcedUpdate, triggerForcedUpdate] = useReducer(() => ({}), {});\n useEffect(() => {\n return dataProvider.onDataChanged.addListener(() => {\n triggerForcedUpdate();\n });\n }, [dataProvider]);\n\n // forcedUpdate is added to dependency list to re-memo getData promise when onDataChanged emits an event.\n return useDebouncedAsyncValue(\n useCallback(\n async () => dataProvider.getData(),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dataProvider, forcedUpdate]\n )\n );\n}\n\n/**\n * Custom hook that creates a [[PropertyGridModelSource]] and subscribes it to data updates from the data provider.\n * @throws if/when `IPropertyDataProvider.getData()` promise is rejected. The error is thrown in the React's render loop, so it can be caught using an error boundary.\n * @public\n * @deprecated in 4.9.0. Use `useTrackedPropertyGridModelSource` instead.\n */\n// istanbul ignore next: 'useTrackedPropertyGridModelSource' is almost identical.\nexport function usePropertyGridModelSource(props: {\n dataProvider: IPropertyDataProvider;\n}) {\n const { value: propertyData } = usePropertyData(props);\n const { dataProvider } = { ...props };\n\n // Model source needs to be recreated if data provider changes\n const modelSource = useMemo(\n () => new PropertyGridModelSource(new MutableGridItemFactory()),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dataProvider]\n );\n\n useEffect(() => {\n if (propertyData) modelSource.setPropertyData(propertyData);\n }, [modelSource, propertyData]);\n\n return modelSource;\n}\n\n/**\n * Custom hook that creates a [[PropertyGridModelSource]] and subscribes it to data updates from the data provider while also providing information on data update progress.\n * @throws if/when `IPropertyDataProvider.getData()` promise is rejected. The error is thrown in the React's render loop, so it can be caught using an error boundary.\n * @public\n */\nexport function useTrackedPropertyGridModelSource(props: {\n dataProvider: IPropertyDataProvider;\n}) {\n const { value: propertyData, inProgress } = usePropertyData(props);\n const { dataProvider } = { ...props };\n\n // Model source needs to be recreated if data provider changes\n const modelSource = useMemo(\n () => new PropertyGridModelSource(new MutableGridItemFactory()),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dataProvider]\n );\n\n useEffect(() => {\n if (propertyData) modelSource.setPropertyData(propertyData);\n }, [modelSource, propertyData]);\n\n return { modelSource, inProgress };\n}\n\n/**\n * Custom hook that creates memoized version of [[PropertyGridEventHandler]] that modifies given modelSource\n * @public\n */\nexport function usePropertyGridEventHandler(props: {\n modelSource: IPropertyGridModelSource;\n}) {\n return useMemo(\n () => new PropertyGridEventHandler(props.modelSource),\n [props.modelSource]\n );\n}\n\n/**\n * Custom hook that automatically listens and retrieves latest model from model source\n * @public\n */\nexport function usePropertyGridModel(props: {\n modelSource: IPropertyGridModelSource;\n}) {\n const { modelSource } = { ...props };\n const [model, setModel] = useState<IPropertyGridModel>();\n\n useEffect(() => {\n const modelChanged = () => {\n setModel(modelSource.getModel());\n };\n modelChanged();\n return modelSource.onModelChanged.addListener(modelChanged);\n }, [modelSource]);\n\n return model;\n}\n"]}
@@ -315,6 +315,7 @@ class TreeDataSource {
315
315
  this._dataProvider = await this._dataProvider;
316
316
  return this.getChildren(this._dataProvider, parent);
317
317
  }
318
+ // eslint-disable-next-line deprecation/deprecation
318
319
  throw new appui_abstract_1.UiError(UiComponents_1.UiComponents.loggerCategory(this), "Unsupported TreeDataProvider.");
319
320
  }
320
321
  getChildren(rawProvider, parent) {
@@ -1 +1 @@
1
- {"version":3,"file":"TreeNodeLoader.js","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeNodeLoader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tree\n */\n\nimport type { Observable as RxjsObservable } from \"rxjs\";\nimport {\n concatAll,\n concatMap,\n defer,\n finalize,\n from,\n map,\n of,\n share,\n toArray,\n} from \"rxjs\";\nimport { UiError } from \"@itwin/appui-abstract\";\nimport {\n scheduleSubscription,\n SubscriptionScheduler,\n} from \"../../common/SubscriptionScheduler\";\nimport { UiComponents } from \"../../UiComponents\";\nimport type {\n ImmediatelyLoadedTreeNodeItem,\n TreeDataProvider,\n TreeDataProviderRaw,\n TreeNodeItem,\n} from \"../TreeDataProvider\";\nimport {\n isTreeDataProviderInterface,\n isTreeDataProviderMethod,\n isTreeDataProviderPromise,\n isTreeDataProviderRaw,\n} from \"../TreeDataProvider\";\nimport type { Observable } from \"./Observable\";\nimport { toRxjsObservable } from \"./Observable\";\nimport type {\n MutableTreeModel,\n TreeModelNode,\n TreeModelNodeInput,\n TreeModelRootNode,\n TreeNodeItemData,\n} from \"./TreeModel\";\nimport { isTreeModelNode } from \"./TreeModel\";\nimport type { TreeModelSource } from \"./TreeModelSource\";\n\n/**\n * Data structure that describes node load result\n * @public\n */\nexport interface TreeNodeLoadResult {\n loadedNodes: TreeNodeItem[];\n}\n\n/**\n * Tree node loader which is used to load tree nodes.\n * @public\n */\nexport interface ITreeNodeLoader {\n /**\n * Loads node at specified place in tree.\n * @param parentId specifies tree branch\n * @param childIndex specifies offset in the branch.\n */\n loadNode(\n parentId: TreeModelNode | TreeModelRootNode,\n childIndex: number\n ): Observable<TreeNodeLoadResult>;\n}\n\n/**\n * Tree node loader which uses `TreeDataProvider` to load nodes.\n * @public\n */\nexport interface ITreeNodeLoaderWithProvider<\n TDataProvider extends TreeDataProvider\n> extends ITreeNodeLoader {\n /** Returns `TreeDataProvider` used to load nodes. */\n readonly dataProvider: TDataProvider;\n}\n\n/**\n * Abstract node loader implementation which loads nodes into provided model source.\n * @public\n */\nexport abstract class AbstractTreeNodeLoader implements ITreeNodeLoader {\n private _treeModelSource: TreeModelSource;\n private _loadScheduler = new SubscriptionScheduler<LoadedNodeHierarchy>();\n\n protected constructor(modelSource: TreeModelSource) {\n this._treeModelSource = modelSource;\n }\n\n public get modelSource() {\n return this._treeModelSource;\n }\n\n /** Do not override this method. @see `load` */\n public loadNode(\n parent: TreeModelNode | TreeModelRootNode,\n childIndex: number\n ): Observable<TreeNodeLoadResult> {\n return toRxjsObservable(this.load(parent, childIndex)).pipe(\n scheduleSubscription(this._loadScheduler),\n map((loadedHierarchy) => {\n this.updateModel(loadedHierarchy);\n return {\n loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems),\n };\n })\n );\n }\n\n /**\n * A method that's called when `load` loads some nodes and we need to put them into model source. The\n * default implementation simply puts loaded child nodes under their parent at correct positions. Concrete\n * implementation may override this method to handle loaded nodes in a a custom way (put them at custom locations\n * in the hierarchy, etc.)\n */\n protected updateModel(loadedHierarchy: LoadedNodeHierarchy): void {\n handleLoadedNodeHierarchy(this._treeModelSource, loadedHierarchy);\n }\n\n /** An abstract method to load a node at the specific index for the specified parent. */\n protected abstract load(\n parent: TreeModelNode | TreeModelRootNode,\n childIndex: number\n ): Observable<LoadedNodeHierarchy>;\n}\n\n/**\n * Abstract node loader with tree data provider which loads nodes into provided model source.\n * @public\n */\nexport abstract class AbstractTreeNodeLoaderWithProvider<\n TDataProvider extends TreeDataProvider\n >\n extends AbstractTreeNodeLoader\n implements ITreeNodeLoaderWithProvider<TDataProvider>\n{\n private _dataProvider: TDataProvider;\n\n protected constructor(\n modelSource: TreeModelSource,\n dataProvider: TDataProvider\n ) {\n super(modelSource);\n this._dataProvider = dataProvider;\n }\n\n public get dataProvider() {\n return this._dataProvider;\n }\n}\n\n/**\n * Default tree node loader with `TreeDataProvider` implementation.\n * @public\n */\nexport class TreeNodeLoader<\n TDataProvider extends TreeDataProvider\n> extends AbstractTreeNodeLoaderWithProvider<TDataProvider> {\n private _treeDataSource: TreeDataSource;\n private _activeRequests = new Map<\n string | undefined,\n RxjsObservable<TreeNodeLoadResult>\n >();\n private _scheduler = new SubscriptionScheduler<LoadedNodeHierarchy>();\n\n constructor(dataProvider: TDataProvider, modelSource: TreeModelSource) {\n super(modelSource, dataProvider);\n this._treeDataSource = new TreeDataSource(dataProvider);\n }\n\n /**\n * Schedules to load children of node and returns an Observable.\n * @note It does not start loading node until '.subscribe()' is called on returned Observable.\n */\n public override loadNode(\n parent: TreeModelNode | TreeModelRootNode,\n _childIndex?: number\n ): Observable<TreeNodeLoadResult> {\n return defer(() => {\n const parentItem = isTreeModelNode(parent) ? parent.item : undefined;\n const parentId = parentItem?.id;\n const activeRequest = this._activeRequests.get(parentId);\n if (activeRequest) {\n return activeRequest;\n }\n\n const newRequest = requestLoadedHierarchy(\n parentItem,\n this._treeDataSource,\n 0,\n 0,\n parent.numChildren === undefined\n ).pipe(\n scheduleSubscription(this._scheduler),\n map((loadedHierarchy) => {\n this.updateModel(loadedHierarchy);\n return {\n loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems),\n };\n }),\n finalize(() => this._activeRequests.delete(parentId))\n );\n this._activeRequests.set(parentId, newRequest);\n return newRequest;\n });\n }\n\n // istanbul ignore next\n protected load(): Observable<LoadedNodeHierarchy> {\n throw new Error(\"Method not implemented.\");\n }\n}\n\n/**\n * Default paged tree node loader with `TreeDataProvider` implementation.\n * @public\n */\nexport class PagedTreeNodeLoader<\n TDataProvider extends TreeDataProvider\n> extends AbstractTreeNodeLoaderWithProvider<TDataProvider> {\n private _treeDataSource: TreeDataSource;\n private _pageSize: number;\n private _activePageRequests: Map<\n string | undefined,\n Map<number, RxjsObservable<TreeNodeLoadResult>>\n >;\n private _scheduler: SubscriptionScheduler<LoadedNodeHierarchy>;\n\n constructor(\n dataProvider: TDataProvider,\n modelSource: TreeModelSource,\n pageSize: number\n ) {\n super(modelSource, dataProvider);\n this._treeDataSource = new TreeDataSource(dataProvider);\n this._pageSize = pageSize;\n this._activePageRequests = new Map();\n this._scheduler = new SubscriptionScheduler();\n }\n\n /** Returns page size used by tree node loader. */\n public get pageSize(): number {\n return this._pageSize;\n }\n\n /**\n * Schedules to load one page of node children and returns an Observable.\n * @note It does not start loading node page until '.subscribe()' is called on returned Observable.\n */\n public override loadNode(\n parent: TreeModelNode | TreeModelRootNode,\n childIndex: number\n ): Observable<TreeNodeLoadResult> {\n return defer(() => {\n const parentItem = isTreeModelNode(parent) ? parent.item : undefined;\n const parentId = parentItem?.id;\n const parentPageRequests =\n this._activePageRequests.get(parentId) ??\n new Map<number, RxjsObservable<TreeNodeLoadResult>>();\n const page = Math.trunc(childIndex / this._pageSize);\n const activeRequest = parentPageRequests.get(page);\n if (activeRequest) {\n return activeRequest;\n }\n\n const startIndex = page * this._pageSize;\n const newRequest = requestLoadedHierarchy(\n parentItem,\n this._treeDataSource,\n startIndex,\n this._pageSize,\n parent.numChildren === undefined\n ).pipe(\n scheduleSubscription(this._scheduler),\n map((loadedHierarchy) => {\n this.updateModel(loadedHierarchy);\n return {\n loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems),\n };\n }),\n finalize(() => {\n parentPageRequests.delete(page);\n if (parentPageRequests.size === 0) {\n this._activePageRequests.delete(parentId);\n }\n })\n );\n\n parentPageRequests.set(page, newRequest);\n this._activePageRequests.set(parentId, parentPageRequests);\n return newRequest;\n });\n }\n\n // istanbul ignore next\n protected load(): Observable<LoadedNodeHierarchy> {\n throw new Error(\"Method not implemented.\");\n }\n}\n\n/**\n * Data structure that describes hierarchy loaded for parent node.\n * @public\n */\nexport interface LoadedNodeHierarchy {\n /** Node id of the parent node for loaded hierarchy. */\n parentId: string | undefined;\n /** Hierarchy items offset in parent node children array. */\n offset: number;\n /** Loaded hierarchy items. */\n hierarchyItems: LoadedNodeHierarchyItem[];\n /** Number of children parent node has. */\n numChildren?: number;\n}\n\n/**\n * Data structure that describes one loaded hierarchy item.\n * @public\n */\nexport interface LoadedNodeHierarchyItem {\n /** Loaded tree node item. */\n item: TreeNodeItemData;\n /** Children of loaded tree node item. */\n children?: LoadedNodeHierarchyItem[];\n /** Number of children tree node item has. */\n numChildren?: number;\n}\n\nfunction requestLoadedHierarchy(\n parentItem: TreeNodeItem | undefined,\n dataSource: TreeDataSource,\n start: number,\n take: number,\n requestNumChildren: boolean\n) {\n const parentId = parentItem && parentItem.id;\n return dataSource\n .requestItems(parentItem, start, take, requestNumChildren)\n .pipe(\n concatMap(({ numChildren, loadedItems }) =>\n loadHierarchy(loadedItems, dataSource, take).pipe(\n map((hierarchyItems) => ({\n parentId,\n offset: start,\n hierarchyItems,\n numChildren,\n }))\n )\n )\n );\n}\n\nfunction loadHierarchy(\n rootItems: TreeNodeItemData[],\n dataSource: TreeDataSource,\n take: number\n): RxjsObservable<LoadedNodeHierarchyItem[]> {\n return from(rootItems).pipe(\n concatMap((item) => {\n if (!item.autoExpand || item.children) {\n return of(convertToLoadedNodeHierarchyItem(item));\n }\n\n return dataSource\n .requestItems(item, 0, take, true)\n .pipe(\n concatMap(({ numChildren, loadedItems }) =>\n loadHierarchy(loadedItems, dataSource, take).pipe(\n map((children) => ({ item, children, numChildren }))\n )\n )\n );\n }),\n toArray()\n );\n}\n\nfunction convertToLoadedNodeHierarchyItem(\n item: TreeNodeItemData\n): LoadedNodeHierarchyItem {\n return {\n item,\n children: item.children\n ? item.children.map((child) => convertToLoadedNodeHierarchyItem(child))\n : undefined,\n numChildren: item.children ? item.children.length : undefined,\n };\n}\n\nfunction collectTreeNodeItems(\n hierarchyItems: LoadedNodeHierarchyItem[],\n result: TreeNodeItem[] = []\n) {\n for (const hierarchyItem of hierarchyItems) {\n result.push(hierarchyItem.item);\n if (hierarchyItem.children)\n collectTreeNodeItems(hierarchyItem.children, result);\n }\n\n return result;\n}\n\n/** @internal */\nexport function handleLoadedNodeHierarchy(\n modelSource: TreeModelSource,\n loadedHierarchy: LoadedNodeHierarchy\n) {\n modelSource.modifyModel((model) => {\n if (loadedHierarchy.parentId !== undefined) {\n // Make sure the model sill contains the parent node\n /* istanbul ignore if */\n if (model.getNode(loadedHierarchy.parentId) === undefined) return;\n }\n\n updateChildren(\n model,\n loadedHierarchy.parentId,\n loadedHierarchy.hierarchyItems,\n loadedHierarchy.offset,\n loadedHierarchy.numChildren\n );\n if (loadedHierarchy.parentId !== undefined) {\n const parentNode = model.getNode(loadedHierarchy.parentId);\n /* istanbul ignore else */\n if (\n parentNode &&\n parentNode.isLoading &&\n parentNode.numChildren !== undefined\n ) {\n parentNode.isLoading = false;\n }\n }\n });\n}\n\nfunction updateChildren(\n model: MutableTreeModel,\n parentId: string | undefined,\n hierarchyItems: LoadedNodeHierarchyItem[],\n startIndex: number,\n numChildren?: number\n) {\n // numChildren set to undefined indicates that this is not the first request for children\n if (numChildren !== undefined) {\n model.setNumChildren(parentId, numChildren);\n }\n\n // if children array is undefined do not add children as they should be disposed\n if (model.getChildren(parentId) === undefined) {\n return;\n }\n\n let offset = startIndex;\n for (const hierarchyItem of hierarchyItems) {\n const nodeInput = convertToTreeModelNodeInput(hierarchyItem.item);\n const existingNode = model.getNode(hierarchyItem.item.id);\n\n // if same item exists in the same position and is expanded update it without removing it's subtree\n if (\n !existingNode ||\n !existingNode.isExpanded ||\n model.getChildOffset(parentId, existingNode.id) !== offset ||\n nodeInput.numChildren === 0\n ) {\n model.setChildren(parentId, [nodeInput], offset);\n } else {\n existingNode.label = nodeInput.label;\n existingNode.description = nodeInput.description ?? \"\";\n existingNode.item = nodeInput.item;\n }\n\n if (hierarchyItem.children) {\n updateChildren(\n model,\n hierarchyItem.item.id,\n hierarchyItem.children,\n 0,\n hierarchyItem.numChildren\n );\n }\n offset++;\n }\n}\n\nfunction convertToTreeModelNodeInput(\n item: TreeNodeItemData\n): TreeModelNodeInput {\n let numChildren: number | undefined;\n if (item.children) {\n numChildren = item.children.length;\n } else if (!item.hasChildren) {\n numChildren = 0;\n }\n\n return {\n description: item.description,\n isExpanded: !!item.autoExpand,\n id: item.id,\n item,\n label: item.label,\n isLoading: false,\n numChildren,\n isSelected: false,\n };\n}\n\ninterface TreeDataSourceResult {\n loadedItems: TreeNodeItemData[];\n numChildren?: number;\n}\n\n/**\n * Wrapper to handle different types of `TreeDataProvider`. Provides one method\n * to request items from `TreeDataProviderRaw`, `TreeDataProviderMethod`,\n * `TreeDataProviderPromise` or `TreeDataProviderInterface`.\n *\n * @internal\n */\nexport class TreeDataSource {\n private _dataProvider: TreeDataProvider;\n\n constructor(dataProvider: TreeDataProvider) {\n this._dataProvider = dataProvider;\n }\n\n public requestItems(\n parent: TreeNodeItem | undefined,\n firstItemIndex: number,\n numItems: number,\n requestNumChildren: boolean\n ): RxjsObservable<TreeDataSourceResult> {\n // During each async operation there is a chance that data provider will become stale. Create an opportunity to\n // unsubscribe after each async operation so that we stop interacting with the stale data provider immediately.\n return defer(async () => {\n if (isTreeDataProviderInterface(this._dataProvider)) {\n const dataProvider = this._dataProvider;\n return from(\n requestNumChildren ? dataProvider.getNodesCount(parent) : [undefined]\n ).pipe(\n concatMap(async (numChildren) => {\n const pageOptions =\n numItems !== 0\n ? { size: numItems, start: firstItemIndex }\n : undefined;\n return {\n loadedItems: await dataProvider.getNodes(parent, pageOptions),\n numChildren,\n };\n })\n );\n }\n\n return from(this.getItems(parent)).pipe(\n map((loadedItems) => ({\n loadedItems:\n numItems !== 0\n ? loadedItems.slice(firstItemIndex, firstItemIndex + numItems)\n : loadedItems,\n numChildren: loadedItems.length,\n }))\n );\n }).pipe(\n concatAll(),\n share({\n resetOnError: false,\n resetOnComplete: false,\n resetOnRefCountZero: true,\n })\n );\n }\n\n private async getItems(\n parent: TreeNodeItem | undefined\n ): Promise<TreeNodeItemData[]> {\n if (isTreeDataProviderRaw(this._dataProvider)) {\n return this.getChildren(this._dataProvider, parent);\n }\n\n if (isTreeDataProviderMethod(this._dataProvider)) {\n return this._dataProvider(parent);\n }\n\n if (isTreeDataProviderPromise(this._dataProvider)) {\n this._dataProvider = await this._dataProvider;\n return this.getChildren(this._dataProvider, parent);\n }\n\n throw new UiError(\n UiComponents.loggerCategory(this),\n \"Unsupported TreeDataProvider.\"\n );\n }\n\n private getChildren(\n rawProvider: TreeDataProviderRaw,\n parent: TreeNodeItem | undefined\n ): TreeNodeItemData[] {\n if (parent === undefined) return rawProvider;\n\n return (parent as ImmediatelyLoadedTreeNodeItem).children ?? [];\n }\n}\n"]}
1
+ {"version":3,"file":"TreeNodeLoader.js","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeNodeLoader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tree\n */\n\nimport type { Observable as RxjsObservable } from \"rxjs\";\nimport {\n concatAll,\n concatMap,\n defer,\n finalize,\n from,\n map,\n of,\n share,\n toArray,\n} from \"rxjs\";\nimport { UiError } from \"@itwin/appui-abstract\";\nimport {\n scheduleSubscription,\n SubscriptionScheduler,\n} from \"../../common/SubscriptionScheduler\";\nimport { UiComponents } from \"../../UiComponents\";\nimport type {\n ImmediatelyLoadedTreeNodeItem,\n TreeDataProvider,\n TreeDataProviderRaw,\n TreeNodeItem,\n} from \"../TreeDataProvider\";\nimport {\n isTreeDataProviderInterface,\n isTreeDataProviderMethod,\n isTreeDataProviderPromise,\n isTreeDataProviderRaw,\n} from \"../TreeDataProvider\";\nimport type { Observable } from \"./Observable\";\nimport { toRxjsObservable } from \"./Observable\";\nimport type {\n MutableTreeModel,\n TreeModelNode,\n TreeModelNodeInput,\n TreeModelRootNode,\n TreeNodeItemData,\n} from \"./TreeModel\";\nimport { isTreeModelNode } from \"./TreeModel\";\nimport type { TreeModelSource } from \"./TreeModelSource\";\n\n/**\n * Data structure that describes node load result\n * @public\n */\nexport interface TreeNodeLoadResult {\n loadedNodes: TreeNodeItem[];\n}\n\n/**\n * Tree node loader which is used to load tree nodes.\n * @public\n */\nexport interface ITreeNodeLoader {\n /**\n * Loads node at specified place in tree.\n * @param parentId specifies tree branch\n * @param childIndex specifies offset in the branch.\n */\n loadNode(\n parentId: TreeModelNode | TreeModelRootNode,\n childIndex: number\n ): Observable<TreeNodeLoadResult>;\n}\n\n/**\n * Tree node loader which uses `TreeDataProvider` to load nodes.\n * @public\n */\nexport interface ITreeNodeLoaderWithProvider<\n TDataProvider extends TreeDataProvider\n> extends ITreeNodeLoader {\n /** Returns `TreeDataProvider` used to load nodes. */\n readonly dataProvider: TDataProvider;\n}\n\n/**\n * Abstract node loader implementation which loads nodes into provided model source.\n * @public\n */\nexport abstract class AbstractTreeNodeLoader implements ITreeNodeLoader {\n private _treeModelSource: TreeModelSource;\n private _loadScheduler = new SubscriptionScheduler<LoadedNodeHierarchy>();\n\n protected constructor(modelSource: TreeModelSource) {\n this._treeModelSource = modelSource;\n }\n\n public get modelSource() {\n return this._treeModelSource;\n }\n\n /** Do not override this method. @see `load` */\n public loadNode(\n parent: TreeModelNode | TreeModelRootNode,\n childIndex: number\n ): Observable<TreeNodeLoadResult> {\n return toRxjsObservable(this.load(parent, childIndex)).pipe(\n scheduleSubscription(this._loadScheduler),\n map((loadedHierarchy) => {\n this.updateModel(loadedHierarchy);\n return {\n loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems),\n };\n })\n );\n }\n\n /**\n * A method that's called when `load` loads some nodes and we need to put them into model source. The\n * default implementation simply puts loaded child nodes under their parent at correct positions. Concrete\n * implementation may override this method to handle loaded nodes in a a custom way (put them at custom locations\n * in the hierarchy, etc.)\n */\n protected updateModel(loadedHierarchy: LoadedNodeHierarchy): void {\n handleLoadedNodeHierarchy(this._treeModelSource, loadedHierarchy);\n }\n\n /** An abstract method to load a node at the specific index for the specified parent. */\n protected abstract load(\n parent: TreeModelNode | TreeModelRootNode,\n childIndex: number\n ): Observable<LoadedNodeHierarchy>;\n}\n\n/**\n * Abstract node loader with tree data provider which loads nodes into provided model source.\n * @public\n */\nexport abstract class AbstractTreeNodeLoaderWithProvider<\n TDataProvider extends TreeDataProvider\n >\n extends AbstractTreeNodeLoader\n implements ITreeNodeLoaderWithProvider<TDataProvider>\n{\n private _dataProvider: TDataProvider;\n\n protected constructor(\n modelSource: TreeModelSource,\n dataProvider: TDataProvider\n ) {\n super(modelSource);\n this._dataProvider = dataProvider;\n }\n\n public get dataProvider() {\n return this._dataProvider;\n }\n}\n\n/**\n * Default tree node loader with `TreeDataProvider` implementation.\n * @public\n */\nexport class TreeNodeLoader<\n TDataProvider extends TreeDataProvider\n> extends AbstractTreeNodeLoaderWithProvider<TDataProvider> {\n private _treeDataSource: TreeDataSource;\n private _activeRequests = new Map<\n string | undefined,\n RxjsObservable<TreeNodeLoadResult>\n >();\n private _scheduler = new SubscriptionScheduler<LoadedNodeHierarchy>();\n\n constructor(dataProvider: TDataProvider, modelSource: TreeModelSource) {\n super(modelSource, dataProvider);\n this._treeDataSource = new TreeDataSource(dataProvider);\n }\n\n /**\n * Schedules to load children of node and returns an Observable.\n * @note It does not start loading node until '.subscribe()' is called on returned Observable.\n */\n public override loadNode(\n parent: TreeModelNode | TreeModelRootNode,\n _childIndex?: number\n ): Observable<TreeNodeLoadResult> {\n return defer(() => {\n const parentItem = isTreeModelNode(parent) ? parent.item : undefined;\n const parentId = parentItem?.id;\n const activeRequest = this._activeRequests.get(parentId);\n if (activeRequest) {\n return activeRequest;\n }\n\n const newRequest = requestLoadedHierarchy(\n parentItem,\n this._treeDataSource,\n 0,\n 0,\n parent.numChildren === undefined\n ).pipe(\n scheduleSubscription(this._scheduler),\n map((loadedHierarchy) => {\n this.updateModel(loadedHierarchy);\n return {\n loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems),\n };\n }),\n finalize(() => this._activeRequests.delete(parentId))\n );\n this._activeRequests.set(parentId, newRequest);\n return newRequest;\n });\n }\n\n // istanbul ignore next\n protected load(): Observable<LoadedNodeHierarchy> {\n throw new Error(\"Method not implemented.\");\n }\n}\n\n/**\n * Default paged tree node loader with `TreeDataProvider` implementation.\n * @public\n */\nexport class PagedTreeNodeLoader<\n TDataProvider extends TreeDataProvider\n> extends AbstractTreeNodeLoaderWithProvider<TDataProvider> {\n private _treeDataSource: TreeDataSource;\n private _pageSize: number;\n private _activePageRequests: Map<\n string | undefined,\n Map<number, RxjsObservable<TreeNodeLoadResult>>\n >;\n private _scheduler: SubscriptionScheduler<LoadedNodeHierarchy>;\n\n constructor(\n dataProvider: TDataProvider,\n modelSource: TreeModelSource,\n pageSize: number\n ) {\n super(modelSource, dataProvider);\n this._treeDataSource = new TreeDataSource(dataProvider);\n this._pageSize = pageSize;\n this._activePageRequests = new Map();\n this._scheduler = new SubscriptionScheduler();\n }\n\n /** Returns page size used by tree node loader. */\n public get pageSize(): number {\n return this._pageSize;\n }\n\n /**\n * Schedules to load one page of node children and returns an Observable.\n * @note It does not start loading node page until '.subscribe()' is called on returned Observable.\n */\n public override loadNode(\n parent: TreeModelNode | TreeModelRootNode,\n childIndex: number\n ): Observable<TreeNodeLoadResult> {\n return defer(() => {\n const parentItem = isTreeModelNode(parent) ? parent.item : undefined;\n const parentId = parentItem?.id;\n const parentPageRequests =\n this._activePageRequests.get(parentId) ??\n new Map<number, RxjsObservable<TreeNodeLoadResult>>();\n const page = Math.trunc(childIndex / this._pageSize);\n const activeRequest = parentPageRequests.get(page);\n if (activeRequest) {\n return activeRequest;\n }\n\n const startIndex = page * this._pageSize;\n const newRequest = requestLoadedHierarchy(\n parentItem,\n this._treeDataSource,\n startIndex,\n this._pageSize,\n parent.numChildren === undefined\n ).pipe(\n scheduleSubscription(this._scheduler),\n map((loadedHierarchy) => {\n this.updateModel(loadedHierarchy);\n return {\n loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems),\n };\n }),\n finalize(() => {\n parentPageRequests.delete(page);\n if (parentPageRequests.size === 0) {\n this._activePageRequests.delete(parentId);\n }\n })\n );\n\n parentPageRequests.set(page, newRequest);\n this._activePageRequests.set(parentId, parentPageRequests);\n return newRequest;\n });\n }\n\n // istanbul ignore next\n protected load(): Observable<LoadedNodeHierarchy> {\n throw new Error(\"Method not implemented.\");\n }\n}\n\n/**\n * Data structure that describes hierarchy loaded for parent node.\n * @public\n */\nexport interface LoadedNodeHierarchy {\n /** Node id of the parent node for loaded hierarchy. */\n parentId: string | undefined;\n /** Hierarchy items offset in parent node children array. */\n offset: number;\n /** Loaded hierarchy items. */\n hierarchyItems: LoadedNodeHierarchyItem[];\n /** Number of children parent node has. */\n numChildren?: number;\n}\n\n/**\n * Data structure that describes one loaded hierarchy item.\n * @public\n */\nexport interface LoadedNodeHierarchyItem {\n /** Loaded tree node item. */\n item: TreeNodeItemData;\n /** Children of loaded tree node item. */\n children?: LoadedNodeHierarchyItem[];\n /** Number of children tree node item has. */\n numChildren?: number;\n}\n\nfunction requestLoadedHierarchy(\n parentItem: TreeNodeItem | undefined,\n dataSource: TreeDataSource,\n start: number,\n take: number,\n requestNumChildren: boolean\n) {\n const parentId = parentItem && parentItem.id;\n return dataSource\n .requestItems(parentItem, start, take, requestNumChildren)\n .pipe(\n concatMap(({ numChildren, loadedItems }) =>\n loadHierarchy(loadedItems, dataSource, take).pipe(\n map((hierarchyItems) => ({\n parentId,\n offset: start,\n hierarchyItems,\n numChildren,\n }))\n )\n )\n );\n}\n\nfunction loadHierarchy(\n rootItems: TreeNodeItemData[],\n dataSource: TreeDataSource,\n take: number\n): RxjsObservable<LoadedNodeHierarchyItem[]> {\n return from(rootItems).pipe(\n concatMap((item) => {\n if (!item.autoExpand || item.children) {\n return of(convertToLoadedNodeHierarchyItem(item));\n }\n\n return dataSource\n .requestItems(item, 0, take, true)\n .pipe(\n concatMap(({ numChildren, loadedItems }) =>\n loadHierarchy(loadedItems, dataSource, take).pipe(\n map((children) => ({ item, children, numChildren }))\n )\n )\n );\n }),\n toArray()\n );\n}\n\nfunction convertToLoadedNodeHierarchyItem(\n item: TreeNodeItemData\n): LoadedNodeHierarchyItem {\n return {\n item,\n children: item.children\n ? item.children.map((child) => convertToLoadedNodeHierarchyItem(child))\n : undefined,\n numChildren: item.children ? item.children.length : undefined,\n };\n}\n\nfunction collectTreeNodeItems(\n hierarchyItems: LoadedNodeHierarchyItem[],\n result: TreeNodeItem[] = []\n) {\n for (const hierarchyItem of hierarchyItems) {\n result.push(hierarchyItem.item);\n if (hierarchyItem.children)\n collectTreeNodeItems(hierarchyItem.children, result);\n }\n\n return result;\n}\n\n/** @internal */\nexport function handleLoadedNodeHierarchy(\n modelSource: TreeModelSource,\n loadedHierarchy: LoadedNodeHierarchy\n) {\n modelSource.modifyModel((model) => {\n if (loadedHierarchy.parentId !== undefined) {\n // Make sure the model sill contains the parent node\n /* istanbul ignore if */\n if (model.getNode(loadedHierarchy.parentId) === undefined) return;\n }\n\n updateChildren(\n model,\n loadedHierarchy.parentId,\n loadedHierarchy.hierarchyItems,\n loadedHierarchy.offset,\n loadedHierarchy.numChildren\n );\n if (loadedHierarchy.parentId !== undefined) {\n const parentNode = model.getNode(loadedHierarchy.parentId);\n /* istanbul ignore else */\n if (\n parentNode &&\n parentNode.isLoading &&\n parentNode.numChildren !== undefined\n ) {\n parentNode.isLoading = false;\n }\n }\n });\n}\n\nfunction updateChildren(\n model: MutableTreeModel,\n parentId: string | undefined,\n hierarchyItems: LoadedNodeHierarchyItem[],\n startIndex: number,\n numChildren?: number\n) {\n // numChildren set to undefined indicates that this is not the first request for children\n if (numChildren !== undefined) {\n model.setNumChildren(parentId, numChildren);\n }\n\n // if children array is undefined do not add children as they should be disposed\n if (model.getChildren(parentId) === undefined) {\n return;\n }\n\n let offset = startIndex;\n for (const hierarchyItem of hierarchyItems) {\n const nodeInput = convertToTreeModelNodeInput(hierarchyItem.item);\n const existingNode = model.getNode(hierarchyItem.item.id);\n\n // if same item exists in the same position and is expanded update it without removing it's subtree\n if (\n !existingNode ||\n !existingNode.isExpanded ||\n model.getChildOffset(parentId, existingNode.id) !== offset ||\n nodeInput.numChildren === 0\n ) {\n model.setChildren(parentId, [nodeInput], offset);\n } else {\n existingNode.label = nodeInput.label;\n existingNode.description = nodeInput.description ?? \"\";\n existingNode.item = nodeInput.item;\n }\n\n if (hierarchyItem.children) {\n updateChildren(\n model,\n hierarchyItem.item.id,\n hierarchyItem.children,\n 0,\n hierarchyItem.numChildren\n );\n }\n offset++;\n }\n}\n\nfunction convertToTreeModelNodeInput(\n item: TreeNodeItemData\n): TreeModelNodeInput {\n let numChildren: number | undefined;\n if (item.children) {\n numChildren = item.children.length;\n } else if (!item.hasChildren) {\n numChildren = 0;\n }\n\n return {\n description: item.description,\n isExpanded: !!item.autoExpand,\n id: item.id,\n item,\n label: item.label,\n isLoading: false,\n numChildren,\n isSelected: false,\n };\n}\n\ninterface TreeDataSourceResult {\n loadedItems: TreeNodeItemData[];\n numChildren?: number;\n}\n\n/**\n * Wrapper to handle different types of `TreeDataProvider`. Provides one method\n * to request items from `TreeDataProviderRaw`, `TreeDataProviderMethod`,\n * `TreeDataProviderPromise` or `TreeDataProviderInterface`.\n *\n * @internal\n */\nexport class TreeDataSource {\n private _dataProvider: TreeDataProvider;\n\n constructor(dataProvider: TreeDataProvider) {\n this._dataProvider = dataProvider;\n }\n\n public requestItems(\n parent: TreeNodeItem | undefined,\n firstItemIndex: number,\n numItems: number,\n requestNumChildren: boolean\n ): RxjsObservable<TreeDataSourceResult> {\n // During each async operation there is a chance that data provider will become stale. Create an opportunity to\n // unsubscribe after each async operation so that we stop interacting with the stale data provider immediately.\n return defer(async () => {\n if (isTreeDataProviderInterface(this._dataProvider)) {\n const dataProvider = this._dataProvider;\n return from(\n requestNumChildren ? dataProvider.getNodesCount(parent) : [undefined]\n ).pipe(\n concatMap(async (numChildren) => {\n const pageOptions =\n numItems !== 0\n ? { size: numItems, start: firstItemIndex }\n : undefined;\n return {\n loadedItems: await dataProvider.getNodes(parent, pageOptions),\n numChildren,\n };\n })\n );\n }\n\n return from(this.getItems(parent)).pipe(\n map((loadedItems) => ({\n loadedItems:\n numItems !== 0\n ? loadedItems.slice(firstItemIndex, firstItemIndex + numItems)\n : loadedItems,\n numChildren: loadedItems.length,\n }))\n );\n }).pipe(\n concatAll(),\n share({\n resetOnError: false,\n resetOnComplete: false,\n resetOnRefCountZero: true,\n })\n );\n }\n\n private async getItems(\n parent: TreeNodeItem | undefined\n ): Promise<TreeNodeItemData[]> {\n if (isTreeDataProviderRaw(this._dataProvider)) {\n return this.getChildren(this._dataProvider, parent);\n }\n\n if (isTreeDataProviderMethod(this._dataProvider)) {\n return this._dataProvider(parent);\n }\n\n if (isTreeDataProviderPromise(this._dataProvider)) {\n this._dataProvider = await this._dataProvider;\n return this.getChildren(this._dataProvider, parent);\n }\n // eslint-disable-next-line deprecation/deprecation\n throw new UiError(\n UiComponents.loggerCategory(this),\n \"Unsupported TreeDataProvider.\"\n );\n }\n\n private getChildren(\n rawProvider: TreeDataProviderRaw,\n parent: TreeNodeItem | undefined\n ): TreeNodeItemData[] {\n if (parent === undefined) return rawProvider;\n\n return (parent as ImmediatelyLoadedTreeNodeItem).children ?? [];\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"UiComponents.d.ts","sourceRoot":"","sources":["../../../src/components-react/UiComponents.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKvD;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;IACpC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAe;IAE5C;;;OAGG;WACiB,UAAU,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBzE,0DAA0D;WAC5C,SAAS;IAWvB,sDAAsD;IACtD,WAAkB,WAAW,IAAI,OAAO,CAEvC;IAED;;OAEG;IACH,WAAkB,YAAY,IAAI,YAAY,CAO7C;IAED,kDAAkD;IAClD,WAAkB,qBAAqB,IAAI,MAAM,CAEhD;IAED,gBAAgB;IAChB,WAAkB,WAAW,IAAI,MAAM,CAEtC;IAED;;OAEG;WACW,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM;IAavD,gBAAgB;WACF,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM;CAM/C"}
1
+ {"version":3,"file":"UiComponents.d.ts","sourceRoot":"","sources":["../../../src/components-react/UiComponents.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKvD;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;IACpC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAe;IAE5C;;;OAGG;WACiB,UAAU,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBzE,0DAA0D;WAC5C,SAAS;IAWvB,sDAAsD;IACtD,WAAkB,WAAW,IAAI,OAAO,CAEvC;IAED;;OAEG;IACH,WAAkB,YAAY,IAAI,YAAY,CAQ7C;IAED,kDAAkD;IAClD,WAAkB,qBAAqB,IAAI,MAAM,CAEhD;IAED,gBAAgB;IAChB,WAAkB,WAAW,IAAI,MAAM,CAEtC;IAED;;OAEG;WACW,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM;IAavD,gBAAgB;WACF,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM;CAM/C"}
@@ -47,6 +47,7 @@ class UiComponents {
47
47
  */
48
48
  static get localization() {
49
49
  if (!UiComponents._localization)
50
+ // eslint-disable-next-line deprecation/deprecation
50
51
  throw new UiError(UiComponents.loggerCategory(this), "_localization: UiComponents.initialize has not been called. Unable to return Localization object.");
51
52
  return UiComponents._localization;
52
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"UiComponents.js","sourceRoot":"","sources":["../../../src/components-react/UiComponents.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD;;;GAGG;AACH,MAAa,YAAY;IAIvB;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,YAA0B;QACvD,IAAI,YAAY,CAAC,YAAY,EAAE;YAC7B,MAAM,CAAC,OAAO,CACZ,YAAY,CAAC,cAAc,CAAC,YAAY,CAAC,EACzC,wCAAwC,CACzC,CAAC;YACF,OAAO;SACR;QAED,aAAa,EAAE,CAAC;QAChB,YAAY,CAAC,aAAa,GAAG,YAAY,CAAC;QAC1C,MAAM,YAAY,CAAC,aAAa,CAAC,iBAAiB,CAChD,YAAY,CAAC,qBAAqB,CACnC,CAAC;QAEF,MAAM,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QACpD,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC;IACnC,CAAC;IAED,0DAA0D;IACnD,MAAM,CAAC,SAAS;QACrB,IAAI,YAAY,CAAC,aAAa;YAC5B,YAAY,CAAC,aAAa,CAAC,mBAAmB,CAC5C,YAAY,CAAC,qBAAqB,CACnC,CAAC;QACJ,YAAY,CAAC,aAAa,GAAG,SAAS,CAAC;QAEvC,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,YAAY,CAAC,YAAY,GAAG,KAAK,CAAC;IACpC,CAAC;IAED,sDAAsD;IAC/C,MAAM,KAAK,WAAW;QAC3B,OAAO,YAAY,CAAC,YAAY,CAAC;IACnC,CAAC;IAED;;OAEG;IACI,MAAM,KAAK,YAAY;QAC5B,IAAI,CAAC,YAAY,CAAC,aAAa;YAC7B,MAAM,IAAI,OAAO,CACf,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,EACjC,mGAAmG,CACpG,CAAC;QACJ,OAAO,YAAY,CAAC,aAAa,CAAC;IACpC,CAAC;IAED,kDAAkD;IAC3C,MAAM,KAAK,qBAAqB;QACrC,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,gBAAgB;IACT,MAAM,KAAK,WAAW;QAC3B,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,SAAS,CAAC,GAAsB;QAC5C,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;YAC7B,MAAM,CAAC,QAAQ,CACb,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,EACjC,iFAAiF,CAClF,CAAC;YACF,OAAO,EAAE,CAAC;SACX;QACD,OAAO,YAAY,CAAC,YAAY,CAAC,kBAAkB,CAAC,GAAG,EAAE;YACvD,EAAE,EAAE,YAAY,CAAC,qBAAqB;SACvC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB;IACT,MAAM,CAAC,cAAc,CAAC,GAAQ;QACnC,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,QAAQ,GACZ,YAAY,CAAC,WAAW,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChE,OAAO,QAAQ,CAAC;IAClB,CAAC;;AAvFc,yBAAY,GAAG,KAAK,CAAC;SADzB,YAAY","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Common\n */\n\nimport { enablePatches } from \"immer\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport type { Localization } from \"@itwin/core-common\";\nimport { UiCore } from \"@itwin/core-react\";\nimport { getObjectClassName } from \"@itwin/core-react\";\nimport { UiError } from \"@itwin/appui-abstract\";\n\n/**\n * Manages the localization service for the components-react package.\n * @public\n */\nexport class UiComponents {\n private static _initialized = false;\n private static _localization?: Localization;\n\n /**\n * Registers the localization service namespace for UiComponents. Also initializes UiCore.\n * @param localization The internationalization service created by the host application.\n */\n public static async initialize(localization: Localization): Promise<void> {\n if (UiComponents._initialized) {\n Logger.logInfo(\n UiComponents.loggerCategory(UiComponents),\n `UiComponents.initialize already called`\n );\n return;\n }\n\n enablePatches();\n UiComponents._localization = localization;\n await UiComponents._localization.registerNamespace(\n UiComponents.localizationNamespace\n );\n\n await UiCore.initialize(UiComponents._localization);\n UiComponents._initialized = true;\n }\n\n /** Unregisters the UiComponents localization namespace */\n public static terminate() {\n if (UiComponents._localization)\n UiComponents._localization.unregisterNamespace(\n UiComponents.localizationNamespace\n );\n UiComponents._localization = undefined;\n\n UiCore.terminate();\n UiComponents._initialized = false;\n }\n\n /** Determines if UiComponents has been initialized */\n public static get initialized(): boolean {\n return UiComponents._initialized;\n }\n\n /** The internationalization service created by the host application.\n * @internal\n */\n public static get localization(): Localization {\n if (!UiComponents._localization)\n throw new UiError(\n UiComponents.loggerCategory(this),\n \"_localization: UiComponents.initialize has not been called. Unable to return Localization object.\"\n );\n return UiComponents._localization;\n }\n\n /** The internationalization service namespace. */\n public static get localizationNamespace(): string {\n return \"UiComponents\";\n }\n\n /** @internal */\n public static get packageName(): string {\n return \"components-react\";\n }\n\n /** Calls localization.getLocalizedStringWithNamespace with the \"UiComponents\" namespace. Do NOT include the namespace in the key.\n * @internal\n */\n public static translate(key: string | string[]): string {\n if (!UiComponents.initialized) {\n Logger.logError(\n UiComponents.loggerCategory(this),\n `translate: UiComponents.initialize has not been called. Returning blank string.`\n );\n return \"\";\n }\n return UiComponents.localization.getLocalizedString(key, {\n ns: UiComponents.localizationNamespace,\n });\n }\n\n /** @internal */\n public static loggerCategory(obj: any): string {\n const className = getObjectClassName(obj);\n const category =\n UiComponents.packageName + (className ? `.${className}` : \"\");\n return category;\n }\n}\n"]}
1
+ {"version":3,"file":"UiComponents.js","sourceRoot":"","sources":["../../../src/components-react/UiComponents.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD;;;GAGG;AACH,MAAa,YAAY;IAIvB;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,YAA0B;QACvD,IAAI,YAAY,CAAC,YAAY,EAAE;YAC7B,MAAM,CAAC,OAAO,CACZ,YAAY,CAAC,cAAc,CAAC,YAAY,CAAC,EACzC,wCAAwC,CACzC,CAAC;YACF,OAAO;SACR;QAED,aAAa,EAAE,CAAC;QAChB,YAAY,CAAC,aAAa,GAAG,YAAY,CAAC;QAC1C,MAAM,YAAY,CAAC,aAAa,CAAC,iBAAiB,CAChD,YAAY,CAAC,qBAAqB,CACnC,CAAC;QAEF,MAAM,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QACpD,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC;IACnC,CAAC;IAED,0DAA0D;IACnD,MAAM,CAAC,SAAS;QACrB,IAAI,YAAY,CAAC,aAAa;YAC5B,YAAY,CAAC,aAAa,CAAC,mBAAmB,CAC5C,YAAY,CAAC,qBAAqB,CACnC,CAAC;QACJ,YAAY,CAAC,aAAa,GAAG,SAAS,CAAC;QAEvC,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,YAAY,CAAC,YAAY,GAAG,KAAK,CAAC;IACpC,CAAC;IAED,sDAAsD;IAC/C,MAAM,KAAK,WAAW;QAC3B,OAAO,YAAY,CAAC,YAAY,CAAC;IACnC,CAAC;IAED;;OAEG;IACI,MAAM,KAAK,YAAY;QAC5B,IAAI,CAAC,YAAY,CAAC,aAAa;YAC7B,mDAAmD;YACnD,MAAM,IAAI,OAAO,CACf,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,EACjC,mGAAmG,CACpG,CAAC;QACJ,OAAO,YAAY,CAAC,aAAa,CAAC;IACpC,CAAC;IAED,kDAAkD;IAC3C,MAAM,KAAK,qBAAqB;QACrC,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,gBAAgB;IACT,MAAM,KAAK,WAAW;QAC3B,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,SAAS,CAAC,GAAsB;QAC5C,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;YAC7B,MAAM,CAAC,QAAQ,CACb,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,EACjC,iFAAiF,CAClF,CAAC;YACF,OAAO,EAAE,CAAC;SACX;QACD,OAAO,YAAY,CAAC,YAAY,CAAC,kBAAkB,CAAC,GAAG,EAAE;YACvD,EAAE,EAAE,YAAY,CAAC,qBAAqB;SACvC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB;IACT,MAAM,CAAC,cAAc,CAAC,GAAQ;QACnC,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,QAAQ,GACZ,YAAY,CAAC,WAAW,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChE,OAAO,QAAQ,CAAC;IAClB,CAAC;;AAxFc,yBAAY,GAAG,KAAK,CAAC;SADzB,YAAY","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Common\n */\n\nimport { enablePatches } from \"immer\";\nimport { Logger } from \"@itwin/core-bentley\";\nimport type { Localization } from \"@itwin/core-common\";\nimport { UiCore } from \"@itwin/core-react\";\nimport { getObjectClassName } from \"@itwin/core-react\";\nimport { UiError } from \"@itwin/appui-abstract\";\n\n/**\n * Manages the localization service for the components-react package.\n * @public\n */\nexport class UiComponents {\n private static _initialized = false;\n private static _localization?: Localization;\n\n /**\n * Registers the localization service namespace for UiComponents. Also initializes UiCore.\n * @param localization The internationalization service created by the host application.\n */\n public static async initialize(localization: Localization): Promise<void> {\n if (UiComponents._initialized) {\n Logger.logInfo(\n UiComponents.loggerCategory(UiComponents),\n `UiComponents.initialize already called`\n );\n return;\n }\n\n enablePatches();\n UiComponents._localization = localization;\n await UiComponents._localization.registerNamespace(\n UiComponents.localizationNamespace\n );\n\n await UiCore.initialize(UiComponents._localization);\n UiComponents._initialized = true;\n }\n\n /** Unregisters the UiComponents localization namespace */\n public static terminate() {\n if (UiComponents._localization)\n UiComponents._localization.unregisterNamespace(\n UiComponents.localizationNamespace\n );\n UiComponents._localization = undefined;\n\n UiCore.terminate();\n UiComponents._initialized = false;\n }\n\n /** Determines if UiComponents has been initialized */\n public static get initialized(): boolean {\n return UiComponents._initialized;\n }\n\n /** The internationalization service created by the host application.\n * @internal\n */\n public static get localization(): Localization {\n if (!UiComponents._localization)\n // eslint-disable-next-line deprecation/deprecation\n throw new UiError(\n UiComponents.loggerCategory(this),\n \"_localization: UiComponents.initialize has not been called. Unable to return Localization object.\"\n );\n return UiComponents._localization;\n }\n\n /** The internationalization service namespace. */\n public static get localizationNamespace(): string {\n return \"UiComponents\";\n }\n\n /** @internal */\n public static get packageName(): string {\n return \"components-react\";\n }\n\n /** Calls localization.getLocalizedStringWithNamespace with the \"UiComponents\" namespace. Do NOT include the namespace in the key.\n * @internal\n */\n public static translate(key: string | string[]): string {\n if (!UiComponents.initialized) {\n Logger.logError(\n UiComponents.loggerCategory(this),\n `translate: UiComponents.initialize has not been called. Returning blank string.`\n );\n return \"\";\n }\n return UiComponents.localization.getLocalizedString(key, {\n ns: UiComponents.localizationNamespace,\n });\n }\n\n /** @internal */\n public static loggerCategory(obj: any): string {\n const className = getObjectClassName(obj);\n const category =\n UiComponents.packageName + (className ? `.${className}` : \"\");\n return category;\n }\n}\n"]}
@@ -1,8 +1,9 @@
1
1
  /** @packageDocumentation
2
2
  * @module Common
3
3
  */
4
- /// <reference types="react" />
5
- import type { ProgressRadialProps } from "@itwin/itwinui-react";
4
+ import * as React from "react";
5
+ import { ProgressRadial } from "@itwin/itwinui-react";
6
+ type ProgressRadialProps = React.ComponentPropsWithoutRef<typeof ProgressRadial>;
6
7
  /** Type for ProgressRadialProps.size */
7
8
  type RadialSizeType = ProgressRadialProps["size"];
8
9
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"DelayedSpinner.d.ts","sourceRoot":"","sources":["../../../../src/components-react/common/DelayedSpinner.tsx"],"names":[],"mappings":"AAIA;;GAEG;;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGhE,wCAAwC;AACxC,KAAK,cAAc,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAElD;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,sBAiBxD"}
1
+ {"version":3,"file":"DelayedSpinner.d.ts","sourceRoot":"","sources":["../../../../src/components-react/common/DelayedSpinner.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,KAAK,mBAAmB,GAAG,KAAK,CAAC,wBAAwB,CACvD,OAAO,cAAc,CACtB,CAAC;AAEF,wCAAwC;AACxC,KAAK,cAAc,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAElD;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,sBAuBxD"}
@@ -26,7 +26,7 @@ export function DelayedSpinner(props) {
26
26
  });
27
27
  if (diff < delay)
28
28
  return null;
29
- return React.createElement(ProgressRadial, { indeterminate: true, size: (_b = props.size) !== null && _b !== void 0 ? _b : "large" });
29
+ return (React.createElement(ProgressRadial, { "data-testid": "components-delayed-spinner", indeterminate: true, size: (_b = props.size) !== null && _b !== void 0 ? _b : "large" }));
30
30
  }
31
31
  const useForceUpdate = () => {
32
32
  const [value, set] = React.useState(true);
@@ -1 +1 @@
1
- {"version":3,"file":"DelayedSpinner.js","sourceRoot":"","sources":["../../../../src/components-react/common/DelayedSpinner.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAetD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B;;IACvD,MAAM,KAAK,GAAG,MAAA,KAAK,CAAC,KAAK,mCAAI,GAAG,CAAC;IACjC,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;IAElE,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;IAEtD,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,IAAI,IAAI,KAAK;YAAE,OAAO;QAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;QAC/C,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,IAAI,IAAI,GAAG,KAAK;QAAE,OAAO,IAAI,CAAC;IAE9B,OAAO,oBAAC,cAAc,IAAC,aAAa,QAAC,IAAI,EAAE,MAAA,KAAK,CAAC,IAAI,mCAAI,OAAO,GAAI,CAAC;AACvE,CAAC;AAED,MAAM,cAAc,GAAG,GAAG,EAAE;IAC1B,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1C,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Common\n */\n\nimport * as React from \"react\";\nimport type { ProgressRadialProps } from \"@itwin/itwinui-react\";\nimport { ProgressRadial } from \"@itwin/itwinui-react\";\n\n/** Type for ProgressRadialProps.size */\ntype RadialSizeType = ProgressRadialProps[\"size\"];\n\n/**\n * Props for [[DelayedSpinner]] component.\n * @internal\n */\nexport interface DelayedSpinnerProps {\n loadStart?: Date;\n delay?: number;\n size?: RadialSizeType;\n}\n\n/**\n * Spinner that is rendered with delay.\n * @internal\n */\nexport function DelayedSpinner(props: DelayedSpinnerProps) {\n const delay = props.delay ?? 500;\n const [loadStart] = React.useState(props.loadStart || new Date());\n\n const currTime = new Date();\n const diff = currTime.getTime() - loadStart.getTime();\n\n const update = useForceUpdate();\n React.useEffect(() => {\n if (diff >= delay) return;\n const timer = setTimeout(update, delay - diff);\n return () => clearTimeout(timer);\n });\n\n if (diff < delay) return null;\n\n return <ProgressRadial indeterminate size={props.size ?? \"large\"} />;\n}\n\nconst useForceUpdate = () => {\n const [value, set] = React.useState(true);\n return () => set(!value);\n};\n"]}
1
+ {"version":3,"file":"DelayedSpinner.js","sourceRoot":"","sources":["../../../../src/components-react/common/DelayedSpinner.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAmBtD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B;;IACvD,MAAM,KAAK,GAAG,MAAA,KAAK,CAAC,KAAK,mCAAI,GAAG,CAAC;IACjC,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;IAElE,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;IAEtD,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,IAAI,IAAI,KAAK;YAAE,OAAO;QAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;QAC/C,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,IAAI,IAAI,GAAG,KAAK;QAAE,OAAO,IAAI,CAAC;IAE9B,OAAO,CACL,oBAAC,cAAc,mBACD,4BAA4B,EACxC,aAAa,QACb,IAAI,EAAE,MAAA,KAAK,CAAC,IAAI,mCAAI,OAAO,GAC3B,CACH,CAAC;AACJ,CAAC;AAED,MAAM,cAAc,GAAG,GAAG,EAAE;IAC1B,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1C,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Common\n */\n\nimport * as React from \"react\";\nimport { ProgressRadial } from \"@itwin/itwinui-react\";\n\ntype ProgressRadialProps = React.ComponentPropsWithoutRef<\n typeof ProgressRadial\n>;\n\n/** Type for ProgressRadialProps.size */\ntype RadialSizeType = ProgressRadialProps[\"size\"];\n\n/**\n * Props for [[DelayedSpinner]] component.\n * @internal\n */\nexport interface DelayedSpinnerProps {\n loadStart?: Date;\n delay?: number;\n size?: RadialSizeType;\n}\n\n/**\n * Spinner that is rendered with delay.\n * @internal\n */\nexport function DelayedSpinner(props: DelayedSpinnerProps) {\n const delay = props.delay ?? 500;\n const [loadStart] = React.useState(props.loadStart || new Date());\n\n const currTime = new Date();\n const diff = currTime.getTime() - loadStart.getTime();\n\n const update = useForceUpdate();\n React.useEffect(() => {\n if (diff >= delay) return;\n const timer = setTimeout(update, delay - diff);\n return () => clearTimeout(timer);\n });\n\n if (diff < delay) return null;\n\n return (\n <ProgressRadial\n data-testid=\"components-delayed-spinner\"\n indeterminate\n size={props.size ?? \"large\"}\n />\n );\n}\n\nconst useForceUpdate = () => {\n const [value, set] = React.useState(true);\n return () => set(!value);\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ImageRenderer.d.ts","sourceRoot":"","sources":["../../../../src/components-react/common/ImageRenderer.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EACV,KAAK,EAIN,MAAM,gBAAgB,CAAC;AAGxB;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAkC;IAE1D,OAAO,CAAC,WAAW;IAenB,8BAA8B;IAC9B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,KAAK;IAcb,OAAO,CAAC,mBAAmB;IAW3B,iCAAiC;IACjC,OAAO,CAAC,SAAS;IAejB,+BAA+B;IAC/B,OAAO,CAAC,SAAS;IAIjB,sCAAsC;IACtC,OAAO,CAAC,cAAc;IAItB,sDAAsD;IACtD,OAAO,CAAC,0BAA0B;IAIlC;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAKzB,yDAAyD;IAClD,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,KAAK,CAAC,SAAS;CA0BnD"}
1
+ {"version":3,"file":"ImageRenderer.d.ts","sourceRoot":"","sources":["../../../../src/components-react/common/ImageRenderer.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EACV,KAAK,EAIN,MAAM,gBAAgB,CAAC;AAGxB;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAkC;IAE1D,OAAO,CAAC,WAAW;IAcnB,8BAA8B;IAC9B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,KAAK;IAcb,OAAO,CAAC,mBAAmB;IAU3B,iCAAiC;IACjC,OAAO,CAAC,SAAS;IAejB,+BAA+B;IAC/B,OAAO,CAAC,SAAS;IAIjB,sCAAsC;IACtC,OAAO,CAAC,cAAc;IAItB,sDAAsD;IACtD,OAAO,CAAC,0BAA0B;IAIlC;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAKzB,yDAAyD;IAClD,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,KAAK,CAAC,SAAS;CA2BnD"}
@@ -18,8 +18,7 @@ class ImageRenderer {
18
18
  // istanbul ignore next
19
19
  if (!match)
20
20
  return "";
21
- // eslint-disable-next-line deprecation/deprecation
22
- return btoa(match
21
+ return window.btoa(match
23
22
  .map((a) => {
24
23
  return String.fromCharCode(parseInt(a, 16));
25
24
  })
@@ -47,8 +46,7 @@ class ImageRenderer {
47
46
  if (!this.isSvg(svg)) {
48
47
  return "";
49
48
  }
50
- // eslint-disable-next-line deprecation/deprecation
51
- const svgAsBase64 = btoa(svg);
49
+ const svgAsBase64 = window.btoa(svg);
52
50
  return `data:image/svg+xml;base64,${svgAsBase64}`;
53
51
  }
54
52
  /** Render svg string into JSX */
@@ -114,6 +112,7 @@ class ImageRenderer {
114
112
  return this.renderWebfontIcon(loadedImage.value);
115
113
  default:
116
114
  const unhandledSourceType = loadedImage.sourceType; // Compile time check that all cases are handled
115
+ // eslint-disable-next-line deprecation/deprecation
117
116
  throw new UiError(UiComponents.loggerCategory(this), `Can't handle sourceType: "${unhandledSourceType}"`);
118
117
  }
119
118
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ImageRenderer.js","sourceRoot":"","sources":["../../../../src/components-react/common/ImageRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Common\n */\n\nimport * as React from \"react\";\nimport type { WebFontIconProps } from \"@itwin/core-react\";\nimport { Icon, WebFontIcon } from \"@itwin/core-react\";\nimport { UiComponents } from \"../UiComponents\";\nimport type {\n Image,\n ImageFileFormat,\n LoadedBinaryImage,\n LoadedImage,\n} from \"./IImageLoader\";\nimport { UiError } from \"@itwin/appui-abstract\";\n\n/** A class that renders images from data provided by an image loader\n * @internal\n */\nexport class ImageRenderer {\n private static _svgCache: Map<string, string> = new Map();\n\n private hexToBase64(hexstring: string) {\n const match = hexstring.match(/\\w{2}/g);\n // istanbul ignore next\n if (!match) return \"\";\n\n // eslint-disable-next-line deprecation/deprecation\n return btoa(\n match\n .map((a) => {\n return String.fromCharCode(parseInt(a, 16));\n })\n .join(\"\")\n );\n }\n\n /** Render raw binary image */\n private renderBinary(data: string, format: ImageFileFormat) {\n // Convert binary to base64\n const dataAsBase64 = this.hexToBase64(data);\n return <img src={`data:image/${format};base64,${dataAsBase64}`} alt=\"\" />;\n }\n\n private isSvg(input: string): boolean {\n const parser = new DOMParser();\n const doc = parser.parseFromString(input, \"application/xml\");\n\n const errorNode = doc.querySelector(\"parsererror\");\n // istanbul ignore if\n if (errorNode) {\n return false;\n }\n\n const rootNode = doc.documentElement.nodeName.toLowerCase();\n return \"svg\" === rootNode;\n }\n\n private convertSvgToDataUri(svg: string) {\n // istanbul ignore if\n if (!this.isSvg(svg)) {\n return \"\";\n }\n\n // eslint-disable-next-line deprecation/deprecation\n const svgAsBase64 = btoa(svg);\n return `data:image/svg+xml;base64,${svgAsBase64}`;\n }\n\n /** Render svg string into JSX */\n private renderSvg(svg: string) {\n let svgAsDataUri = ImageRenderer._svgCache.get(svg);\n // istanbul ignore else\n if (undefined === svgAsDataUri) {\n svgAsDataUri = this.convertSvgToDataUri(svg.trim());\n ImageRenderer._svgCache.set(svg, svgAsDataUri);\n }\n\n return (\n <div>\n <Icon iconSpec={svgAsDataUri} />\n </div>\n );\n }\n\n /** Render image from an url */\n private renderUrl(url: string) {\n return <img src={url} alt=\"\" />;\n }\n\n /** Render image as core-react icon */\n private renderCoreIcon(iconName: string) {\n return <WebFontIcon iconName={iconName} />;\n }\n\n /** Replaces the escaped instances of \"\\:\" with \":\" */\n private normalizeEscapedIconString(escapedIconString: string) {\n return escapedIconString.replace(/\\\\:/g, \":\");\n }\n\n /**\n * Extract class and name from icon name, if the name follows format \"{className}:{fontName}\".\n * className and fontName can be escaped using \\ if : is needed.\n */\n private extractIconClassAndName(\n iconName: string\n ): Pick<WebFontIconProps, \"iconClassName\" | \"iconName\"> {\n const matches = iconName.match(/(\\\\.|[^:])+/g);\n if (!matches || matches.length !== 2)\n return {\n iconClassName: undefined,\n iconName,\n };\n\n return {\n iconClassName: this.normalizeEscapedIconString(matches[0]),\n iconName: this.normalizeEscapedIconString(matches[1]),\n };\n }\n\n /**\n * Render image as provided webfont icon.\n * Defaults to core-react icon if iconName does not contain className.\n */\n private renderWebfontIcon(iconName: string) {\n const iconInfo = this.extractIconClassAndName(iconName);\n return <WebFontIcon {...iconInfo} />;\n }\n\n /** Render image from data provided by an image loader */\n public render(loadedImage: Image): React.ReactNode {\n switch (loadedImage.sourceType) {\n case \"binary\":\n const image = loadedImage as LoadedBinaryImage;\n return this.renderBinary(image.value, image.fileFormat);\n\n case \"url\":\n return this.renderUrl((loadedImage as LoadedImage).value);\n\n case \"svg\":\n return this.renderSvg((loadedImage as LoadedImage).value);\n\n case \"core-icon\":\n return this.renderCoreIcon((loadedImage as LoadedImage).value);\n\n case \"webfont-icon\":\n return this.renderWebfontIcon((loadedImage as LoadedImage).value);\n\n default:\n const unhandledSourceType: never = loadedImage.sourceType; // Compile time check that all cases are handled\n throw new UiError(\n UiComponents.loggerCategory(this),\n `Can't handle sourceType: \"${unhandledSourceType}\"`\n );\n }\n }\n}\n"]}
1
+ {"version":3,"file":"ImageRenderer.js","sourceRoot":"","sources":["../../../../src/components-react/common/ImageRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Common\n */\n\nimport * as React from \"react\";\nimport type { WebFontIconProps } from \"@itwin/core-react\";\nimport { Icon, WebFontIcon } from \"@itwin/core-react\";\nimport { UiComponents } from \"../UiComponents\";\nimport type {\n Image,\n ImageFileFormat,\n LoadedBinaryImage,\n LoadedImage,\n} from \"./IImageLoader\";\nimport { UiError } from \"@itwin/appui-abstract\";\n\n/** A class that renders images from data provided by an image loader\n * @internal\n */\nexport class ImageRenderer {\n private static _svgCache: Map<string, string> = new Map();\n\n private hexToBase64(hexstring: string) {\n const match = hexstring.match(/\\w{2}/g);\n // istanbul ignore next\n if (!match) return \"\";\n\n return window.btoa(\n match\n .map((a) => {\n return String.fromCharCode(parseInt(a, 16));\n })\n .join(\"\")\n );\n }\n\n /** Render raw binary image */\n private renderBinary(data: string, format: ImageFileFormat) {\n // Convert binary to base64\n const dataAsBase64 = this.hexToBase64(data);\n return <img src={`data:image/${format};base64,${dataAsBase64}`} alt=\"\" />;\n }\n\n private isSvg(input: string): boolean {\n const parser = new DOMParser();\n const doc = parser.parseFromString(input, \"application/xml\");\n\n const errorNode = doc.querySelector(\"parsererror\");\n // istanbul ignore if\n if (errorNode) {\n return false;\n }\n\n const rootNode = doc.documentElement.nodeName.toLowerCase();\n return \"svg\" === rootNode;\n }\n\n private convertSvgToDataUri(svg: string) {\n // istanbul ignore if\n if (!this.isSvg(svg)) {\n return \"\";\n }\n\n const svgAsBase64 = window.btoa(svg);\n return `data:image/svg+xml;base64,${svgAsBase64}`;\n }\n\n /** Render svg string into JSX */\n private renderSvg(svg: string) {\n let svgAsDataUri = ImageRenderer._svgCache.get(svg);\n // istanbul ignore else\n if (undefined === svgAsDataUri) {\n svgAsDataUri = this.convertSvgToDataUri(svg.trim());\n ImageRenderer._svgCache.set(svg, svgAsDataUri);\n }\n\n return (\n <div>\n <Icon iconSpec={svgAsDataUri} />\n </div>\n );\n }\n\n /** Render image from an url */\n private renderUrl(url: string) {\n return <img src={url} alt=\"\" />;\n }\n\n /** Render image as core-react icon */\n private renderCoreIcon(iconName: string) {\n return <WebFontIcon iconName={iconName} />;\n }\n\n /** Replaces the escaped instances of \"\\:\" with \":\" */\n private normalizeEscapedIconString(escapedIconString: string) {\n return escapedIconString.replace(/\\\\:/g, \":\");\n }\n\n /**\n * Extract class and name from icon name, if the name follows format \"{className}:{fontName}\".\n * className and fontName can be escaped using \\ if : is needed.\n */\n private extractIconClassAndName(\n iconName: string\n ): Pick<WebFontIconProps, \"iconClassName\" | \"iconName\"> {\n const matches = iconName.match(/(\\\\.|[^:])+/g);\n if (!matches || matches.length !== 2)\n return {\n iconClassName: undefined,\n iconName,\n };\n\n return {\n iconClassName: this.normalizeEscapedIconString(matches[0]),\n iconName: this.normalizeEscapedIconString(matches[1]),\n };\n }\n\n /**\n * Render image as provided webfont icon.\n * Defaults to core-react icon if iconName does not contain className.\n */\n private renderWebfontIcon(iconName: string) {\n const iconInfo = this.extractIconClassAndName(iconName);\n return <WebFontIcon {...iconInfo} />;\n }\n\n /** Render image from data provided by an image loader */\n public render(loadedImage: Image): React.ReactNode {\n switch (loadedImage.sourceType) {\n case \"binary\":\n const image = loadedImage as LoadedBinaryImage;\n return this.renderBinary(image.value, image.fileFormat);\n\n case \"url\":\n return this.renderUrl((loadedImage as LoadedImage).value);\n\n case \"svg\":\n return this.renderSvg((loadedImage as LoadedImage).value);\n\n case \"core-icon\":\n return this.renderCoreIcon((loadedImage as LoadedImage).value);\n\n case \"webfont-icon\":\n return this.renderWebfontIcon((loadedImage as LoadedImage).value);\n\n default:\n const unhandledSourceType: never = loadedImage.sourceType; // Compile time check that all cases are handled\n // eslint-disable-next-line deprecation/deprecation\n throw new UiError(\n UiComponents.loggerCategory(this),\n `Can't handle sourceType: \"${unhandledSourceType}\"`\n );\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"UseContextWithMandatoryProvider.d.ts","sourceRoot":"","sources":["../../../../src/components-react/common/UseContextWithMandatoryProvider.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,gBAAgB;AAChB,wBAAgB,kCAAkC,CAAC,CAAC,EAClD,WAAW,EAAE,MAAM,GAClB;IACD,KAAK,CAAC,uBAAuB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACrD,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC;CAC5C,CAkBA"}
1
+ {"version":3,"file":"UseContextWithMandatoryProvider.d.ts","sourceRoot":"","sources":["../../../../src/components-react/common/UseContextWithMandatoryProvider.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,gBAAgB;AAChB,wBAAgB,kCAAkC,CAAC,CAAC,EAClD,WAAW,EAAE,MAAM,GAClB;IACD,KAAK,CAAC,uBAAuB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACrD,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC;CAC5C,CAmBA"}
@@ -13,6 +13,7 @@ export function createContextWithMandatoryProvider(contextName) {
13
13
  const value = React.useContext(context);
14
14
  /* istanbul ignore if */
15
15
  if (value === undefined) {
16
+ // eslint-disable-next-line deprecation/deprecation
16
17
  throw new UiError(UiComponents.loggerCategory(ConsumingComponent), `'${getObjectClassName(ConsumingComponent)}' expects to be wrapped by a '${contextName}' provider.`);
17
18
  }
18
19
  return value;
@@ -1 +1 @@
1
- {"version":3,"file":"UseContextWithMandatoryProvider.js","sourceRoot":"","sources":["../../../../src/components-react/common/UseContextWithMandatoryProvider.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,gBAAgB;AAChB,MAAM,UAAU,kCAAkC,CAChD,WAAmB;IAMnB,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAI,SAAqB,CAAC,CAAC;IAC9D,SAAS,6BAA6B,CACpC,kBAA0C;QAE1C,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxC,wBAAwB;QACxB,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,MAAM,IAAI,OAAO,CACf,YAAY,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAC/C,IAAI,kBAAkB,CACpB,kBAAkB,CACnB,iCAAiC,WAAW,aAAa,CAC3D,CAAC;SACH;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,6BAA6B,CAAC,CAAC;AAC7E,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { UiError } from \"@itwin/appui-abstract\";\nimport { getObjectClassName } from \"@itwin/core-react\";\nimport { UiComponents } from \"../UiComponents\";\nimport React from \"react\";\n\n/** @internal */\nexport function createContextWithMandatoryProvider<T>(\n contextName: string\n): [\n React.ProviderExoticComponent<React.ProviderProps<T>>,\n React.ExoticComponent<React.ConsumerProps<T>>,\n <P>(component: React.ComponentType<P>) => T\n] {\n const context = React.createContext<T>(undefined as any as T);\n function useContextWithoutDefaultValue<P>(\n ConsumingComponent: React.ComponentType<P>\n ) {\n const value = React.useContext(context);\n /* istanbul ignore if */\n if (value === undefined) {\n throw new UiError(\n UiComponents.loggerCategory(ConsumingComponent),\n `'${getObjectClassName(\n ConsumingComponent\n )}' expects to be wrapped by a '${contextName}' provider.`\n );\n }\n return value;\n }\n return [context.Provider, context.Consumer, useContextWithoutDefaultValue];\n}\n"]}
1
+ {"version":3,"file":"UseContextWithMandatoryProvider.js","sourceRoot":"","sources":["../../../../src/components-react/common/UseContextWithMandatoryProvider.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,gBAAgB;AAChB,MAAM,UAAU,kCAAkC,CAChD,WAAmB;IAMnB,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAI,SAAqB,CAAC,CAAC;IAC9D,SAAS,6BAA6B,CACpC,kBAA0C;QAE1C,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxC,wBAAwB;QACxB,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,mDAAmD;YACnD,MAAM,IAAI,OAAO,CACf,YAAY,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAC/C,IAAI,kBAAkB,CACpB,kBAAkB,CACnB,iCAAiC,WAAW,aAAa,CAC3D,CAAC;SACH;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,6BAA6B,CAAC,CAAC;AAC7E,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { UiError } from \"@itwin/appui-abstract\";\nimport { getObjectClassName } from \"@itwin/core-react\";\nimport { UiComponents } from \"../UiComponents\";\nimport React from \"react\";\n\n/** @internal */\nexport function createContextWithMandatoryProvider<T>(\n contextName: string\n): [\n React.ProviderExoticComponent<React.ProviderProps<T>>,\n React.ExoticComponent<React.ConsumerProps<T>>,\n <P>(component: React.ComponentType<P>) => T\n] {\n const context = React.createContext<T>(undefined as any as T);\n function useContextWithoutDefaultValue<P>(\n ConsumingComponent: React.ComponentType<P>\n ) {\n const value = React.useContext(context);\n /* istanbul ignore if */\n if (value === undefined) {\n // eslint-disable-next-line deprecation/deprecation\n throw new UiError(\n UiComponents.loggerCategory(ConsumingComponent),\n `'${getObjectClassName(\n ConsumingComponent\n )}' expects to be wrapped by a '${contextName}' provider.`\n );\n }\n return value;\n }\n return [context.Provider, context.Consumer, useContextWithoutDefaultValue];\n}\n"]}
@@ -7,16 +7,13 @@
7
7
 
8
8
  .components-date-input {
9
9
  width: auto;
10
+ padding: $uicore-iui-input-padding;
10
11
 
11
12
  &.components-date-has-error {
12
13
  color: var(--iui-color-text-negative);
13
14
  }
14
15
 
15
- &.iui-input {
16
- padding: $uicore-iui-input-padding;
17
- }
18
-
19
- &.iui-input[disabled] {
16
+ &[disabled] {
20
17
  color: var(--buic-foreground-body);
21
18
  opacity: 0.65;
22
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TimeField.d.ts","sourceRoot":"","sources":["../../../../src/components-react/datepicker/TimeField.tsx"],"names":[],"mappings":"AAIA;;GAEG;;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,kBAAkB,CAAC;AAE1B;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAwBD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,YAAY,GACb,EAAE,cAAc,eAgVhB"}
1
+ {"version":3,"file":"TimeField.d.ts","sourceRoot":"","sources":["../../../../src/components-react/datepicker/TimeField.tsx"],"names":[],"mappings":"AAIA;;GAEG;;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,kBAAkB,CAAC;AAE1B;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAwBD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,YAAY,GACb,EAAE,cAAc,eAmVhB"}
@@ -6,6 +6,7 @@
6
6
  * @module Date
7
7
  */
8
8
  import * as React from "react";
9
+ import classnames from "classnames";
9
10
  import { Key } from "ts-key-enum";
10
11
  import { Input } from "@itwin/itwinui-react";
11
12
  import { UiComponents } from "../UiComponents";
@@ -253,12 +254,12 @@ export function TimeField({ time, timeDisplay, readOnly, onTimeChange, }) {
253
254
  }, [dayPeriodText, hours, timeSpec, updateTimeSpec]);
254
255
  const showSeconds = -1 !== timeDisplay.search(":ss");
255
256
  return (React.createElement("div", { "data-testid": "components-time-input", className: "components-time" },
256
- React.createElement(Input, { className: "components-time-input", onKeyDown: handleHoursOnKeyDown, onBlur: handleHoursOnBlur, onChange: handleHoursChange, value: hoursText, disabled: readOnly, size: "small" }),
257
+ React.createElement(Input, { className: classnames("components-time-input", "components-input"), onKeyDown: handleHoursOnKeyDown, onBlur: handleHoursOnBlur, onChange: handleHoursChange, value: hoursText, disabled: readOnly, size: "small" }),
257
258
  React.createElement("span", { className: "component-time-separator" }, ":"),
258
- React.createElement(Input, { className: "components-time-input", onKeyDown: handleMinutesOnKeyDown, onBlur: handleMinutesOnBlur, onChange: handleMinutesChange, value: minutesText, disabled: readOnly, size: "small" }),
259
+ React.createElement(Input, { className: classnames("components-time-input", "components-input"), onKeyDown: handleMinutesOnKeyDown, onBlur: handleMinutesOnBlur, onChange: handleMinutesChange, value: minutesText, disabled: readOnly, size: "small" }),
259
260
  showSeconds && (React.createElement(React.Fragment, null,
260
261
  React.createElement("span", { className: "component-time-separator" }, ":"),
261
- React.createElement(Input, { className: "components-time-input", onKeyDown: handleSecondsOnKeyDown, onBlur: handleSecondsOnBlur, onChange: handleSecondsChange, value: secondsText, disabled: readOnly, size: "small" }))),
262
- dayPeriodText && (React.createElement(Input, { className: "components-time-period-input", onKeyDown: handleDayPeriodOnKeyDown, onBlur: handleDayPeriodOnBlur, onChange: handleDayPeriodChange, value: dayPeriodText, disabled: readOnly, size: "small" }))));
262
+ React.createElement(Input, { className: classnames("components-time-input", "components-input"), onKeyDown: handleSecondsOnKeyDown, onBlur: handleSecondsOnBlur, onChange: handleSecondsChange, value: secondsText, disabled: readOnly, size: "small" }))),
263
+ dayPeriodText && (React.createElement(Input, { className: classnames("components-time-period-input", "components-input"), onKeyDown: handleDayPeriodOnKeyDown, onBlur: handleDayPeriodOnBlur, onChange: handleDayPeriodChange, value: dayPeriodText, disabled: readOnly, size: "small" }))));
263
264
  }
264
265
  //# sourceMappingURL=TimeField.js.map