@itwin/grouping-mapping-widget 0.9.2 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/lib/cjs/grouping-mapping-widget.d.ts +11 -5
  2. package/lib/cjs/grouping-mapping-widget.js +21 -3
  3. package/lib/cjs/grouping-mapping-widget.js.map +1 -1
  4. package/lib/cjs/test/GroupingMappingCustomUI.test.js +49 -86
  5. package/lib/cjs/test/GroupingMappingCustomUI.test.js.map +1 -1
  6. package/lib/cjs/test/test-utils.d.ts +0 -6
  7. package/lib/cjs/test/test-utils.js +8 -24
  8. package/lib/cjs/test/test-utils.js.map +1 -1
  9. package/lib/cjs/widget/components/ActionPanel.d.ts +1 -1
  10. package/lib/cjs/widget/components/ActionPanel.js +1 -1
  11. package/lib/cjs/widget/components/ActionPanel.js.map +1 -1
  12. package/lib/cjs/widget/components/ConfirmMappingsImport.js +1 -4
  13. package/lib/cjs/widget/components/ConfirmMappingsImport.js.map +1 -1
  14. package/lib/cjs/widget/components/GroupAction.d.ts +13 -9
  15. package/lib/cjs/widget/components/GroupAction.js +56 -58
  16. package/lib/cjs/widget/components/GroupAction.js.map +1 -1
  17. package/lib/cjs/widget/components/GroupPropertyAction.d.ts +1 -1
  18. package/lib/cjs/widget/components/GroupPropertyAction.js.map +1 -1
  19. package/lib/cjs/widget/components/GroupPropertyUtils.js +4 -0
  20. package/lib/cjs/widget/components/GroupPropertyUtils.js.map +1 -1
  21. package/lib/cjs/widget/components/Grouping.d.ts +8 -9
  22. package/lib/cjs/widget/components/Grouping.js +118 -273
  23. package/lib/cjs/widget/components/Grouping.js.map +1 -1
  24. package/lib/cjs/widget/components/Grouping.scss +2 -2
  25. package/lib/cjs/widget/components/GroupingMapping.d.ts +28 -21
  26. package/lib/cjs/widget/components/GroupingMapping.js +59 -38
  27. package/lib/cjs/widget/components/GroupingMapping.js.map +1 -1
  28. package/lib/cjs/widget/components/GroupingMappingContent.d.ts +8 -0
  29. package/lib/cjs/widget/components/GroupingMappingContent.js +47 -0
  30. package/lib/cjs/widget/components/GroupingMappingContent.js.map +1 -0
  31. package/lib/cjs/widget/components/GroupingMappingContext.d.ts +31 -0
  32. package/lib/cjs/widget/components/GroupingMappingContext.js +84 -0
  33. package/lib/cjs/widget/components/GroupingMappingContext.js.map +1 -0
  34. package/lib/cjs/widget/components/GroupingMappingHeader.d.ts +8 -0
  35. package/lib/cjs/widget/components/GroupingMappingHeader.js +17 -0
  36. package/lib/cjs/widget/components/GroupingMappingHeader.js.map +1 -0
  37. package/lib/cjs/widget/components/GroupingMappingRouter.d.ts +8 -0
  38. package/lib/cjs/widget/components/GroupingMappingRouter.js +87 -0
  39. package/lib/cjs/widget/components/GroupingMappingRouter.js.map +1 -0
  40. package/lib/cjs/widget/components/Mapping.d.ts +7 -2
  41. package/lib/cjs/widget/components/Mapping.js +53 -84
  42. package/lib/cjs/widget/components/Mapping.js.map +1 -1
  43. package/lib/cjs/widget/components/MappingAction.d.ts +9 -5
  44. package/lib/cjs/widget/components/MappingAction.js +19 -8
  45. package/lib/cjs/widget/components/MappingAction.js.map +1 -1
  46. package/lib/cjs/widget/components/QueryBuilder.js +2 -7
  47. package/lib/cjs/widget/components/QueryBuilder.js.map +1 -1
  48. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.d.ts +15 -0
  49. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.js +45 -0
  50. package/lib/cjs/widget/components/context/GroupHilitedElementsContext.js.map +1 -0
  51. package/lib/cjs/widget/components/context/GroupingApiConfigContext.d.ts +1 -0
  52. package/lib/cjs/widget/components/context/GroupingApiConfigContext.js +1 -0
  53. package/lib/cjs/widget/components/context/GroupingApiConfigContext.js.map +1 -1
  54. package/lib/cjs/widget/components/context/GroupingMappingCustomUIContext.d.ts +6 -2
  55. package/lib/cjs/widget/components/context/GroupingMappingCustomUIContext.js +5 -5
  56. package/lib/cjs/widget/components/context/GroupingMappingCustomUIContext.js.map +1 -1
  57. package/lib/cjs/widget/components/customUI/DefaultGroupingUI.d.ts +3 -0
  58. package/lib/cjs/widget/components/customUI/DefaultGroupingUI.js +40 -0
  59. package/lib/cjs/widget/components/customUI/DefaultGroupingUI.js.map +1 -0
  60. package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.d.ts +5 -0
  61. package/lib/cjs/widget/components/{GroupQueryBuilderContainer.js → customUI/GroupQueryBuilderCustomUI.js} +36 -16
  62. package/lib/cjs/widget/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -0
  63. package/lib/cjs/widget/components/customUI/GroupingMappingCustomUI.d.ts +3 -2
  64. package/lib/cjs/widget/components/customUI/GroupingMappingCustomUI.js.map +1 -1
  65. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.d.ts +1 -2
  66. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.js +2 -1
  67. package/lib/cjs/widget/components/customUI/ManualGroupingCustomUI.js.map +1 -1
  68. package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.d.ts +1 -2
  69. package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.js +2 -1
  70. package/lib/cjs/widget/components/customUI/SearchGroupingCustomUI.js.map +1 -1
  71. package/lib/cjs/widget/components/groupsHelpers.d.ts +7 -0
  72. package/lib/cjs/widget/components/groupsHelpers.js +84 -0
  73. package/lib/cjs/widget/components/groupsHelpers.js.map +1 -0
  74. package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.d.ts +1 -1
  75. package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js +1 -1
  76. package/lib/cjs/widget/components/property-grid/PropertyGridWrapper.js.map +1 -1
  77. package/lib/cjs/widget/components/property-grid/PropertyView.js +29 -15
  78. package/lib/cjs/widget/components/property-grid/PropertyView.js.map +1 -1
  79. package/lib/cjs/widget/components/utils.d.ts +1 -3
  80. package/lib/cjs/widget/components/utils.js +1 -26
  81. package/lib/cjs/widget/components/utils.js.map +1 -1
  82. package/lib/esm/grouping-mapping-widget.d.ts +11 -5
  83. package/lib/esm/grouping-mapping-widget.js +9 -2
  84. package/lib/esm/grouping-mapping-widget.js.map +1 -1
  85. package/lib/esm/test/GroupingMappingCustomUI.test.js +46 -83
  86. package/lib/esm/test/GroupingMappingCustomUI.test.js.map +1 -1
  87. package/lib/esm/test/test-utils.d.ts +0 -6
  88. package/lib/esm/test/test-utils.js +7 -22
  89. package/lib/esm/test/test-utils.js.map +1 -1
  90. package/lib/esm/widget/components/ActionPanel.d.ts +1 -1
  91. package/lib/esm/widget/components/ActionPanel.js +1 -1
  92. package/lib/esm/widget/components/ActionPanel.js.map +1 -1
  93. package/lib/esm/widget/components/ConfirmMappingsImport.js +1 -4
  94. package/lib/esm/widget/components/ConfirmMappingsImport.js.map +1 -1
  95. package/lib/esm/widget/components/GroupAction.d.ts +13 -9
  96. package/lib/esm/widget/components/GroupAction.js +57 -61
  97. package/lib/esm/widget/components/GroupAction.js.map +1 -1
  98. package/lib/esm/widget/components/GroupPropertyAction.d.ts +1 -1
  99. package/lib/esm/widget/components/GroupPropertyAction.js.map +1 -1
  100. package/lib/esm/widget/components/GroupPropertyUtils.js +4 -0
  101. package/lib/esm/widget/components/GroupPropertyUtils.js.map +1 -1
  102. package/lib/esm/widget/components/Grouping.d.ts +8 -9
  103. package/lib/esm/widget/components/Grouping.js +122 -277
  104. package/lib/esm/widget/components/Grouping.js.map +1 -1
  105. package/lib/esm/widget/components/Grouping.scss +2 -2
  106. package/lib/esm/widget/components/GroupingMapping.d.ts +28 -21
  107. package/lib/esm/widget/components/GroupingMapping.js +59 -39
  108. package/lib/esm/widget/components/GroupingMapping.js.map +1 -1
  109. package/lib/esm/widget/components/GroupingMappingContent.d.ts +8 -0
  110. package/lib/esm/widget/components/GroupingMappingContent.js +24 -0
  111. package/lib/esm/widget/components/GroupingMappingContent.js.map +1 -0
  112. package/lib/esm/widget/components/GroupingMappingContext.d.ts +31 -0
  113. package/lib/esm/widget/components/GroupingMappingContext.js +61 -0
  114. package/lib/esm/widget/components/GroupingMappingContext.js.map +1 -0
  115. package/lib/esm/widget/components/GroupingMappingHeader.d.ts +8 -0
  116. package/lib/esm/widget/components/GroupingMappingHeader.js +10 -0
  117. package/lib/esm/widget/components/GroupingMappingHeader.js.map +1 -0
  118. package/lib/esm/widget/components/GroupingMappingRouter.d.ts +8 -0
  119. package/lib/esm/widget/components/GroupingMappingRouter.js +80 -0
  120. package/lib/esm/widget/components/GroupingMappingRouter.js.map +1 -0
  121. package/lib/esm/widget/components/Mapping.d.ts +7 -2
  122. package/lib/esm/widget/components/Mapping.js +55 -86
  123. package/lib/esm/widget/components/Mapping.js.map +1 -1
  124. package/lib/esm/widget/components/MappingAction.d.ts +9 -5
  125. package/lib/esm/widget/components/MappingAction.js +18 -9
  126. package/lib/esm/widget/components/MappingAction.js.map +1 -1
  127. package/lib/esm/widget/components/QueryBuilder.js +2 -7
  128. package/lib/esm/widget/components/QueryBuilder.js.map +1 -1
  129. package/lib/esm/widget/components/context/GroupHilitedElementsContext.d.ts +15 -0
  130. package/lib/esm/widget/components/context/GroupHilitedElementsContext.js +22 -0
  131. package/lib/esm/widget/components/context/GroupHilitedElementsContext.js.map +1 -0
  132. package/lib/esm/widget/components/context/GroupingApiConfigContext.d.ts +1 -0
  133. package/lib/esm/widget/components/context/GroupingApiConfigContext.js +1 -0
  134. package/lib/esm/widget/components/context/GroupingApiConfigContext.js.map +1 -1
  135. package/lib/esm/widget/components/context/GroupingMappingCustomUIContext.d.ts +6 -2
  136. package/lib/esm/widget/components/context/GroupingMappingCustomUIContext.js +5 -5
  137. package/lib/esm/widget/components/context/GroupingMappingCustomUIContext.js.map +1 -1
  138. package/lib/esm/widget/components/customUI/DefaultGroupingUI.d.ts +3 -0
  139. package/lib/esm/widget/components/customUI/DefaultGroupingUI.js +34 -0
  140. package/lib/esm/widget/components/customUI/DefaultGroupingUI.js.map +1 -0
  141. package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.d.ts +5 -0
  142. package/lib/esm/widget/components/{GroupQueryBuilderContainer.js → customUI/GroupQueryBuilderCustomUI.js} +11 -7
  143. package/lib/esm/widget/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -0
  144. package/lib/esm/widget/components/customUI/GroupingMappingCustomUI.d.ts +3 -2
  145. package/lib/esm/widget/components/customUI/GroupingMappingCustomUI.js.map +1 -1
  146. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.d.ts +1 -2
  147. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.js +1 -2
  148. package/lib/esm/widget/components/customUI/ManualGroupingCustomUI.js.map +1 -1
  149. package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.d.ts +1 -2
  150. package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.js +1 -2
  151. package/lib/esm/widget/components/customUI/SearchGroupingCustomUI.js.map +1 -1
  152. package/lib/esm/widget/components/groupsHelpers.d.ts +7 -0
  153. package/lib/esm/widget/components/groupsHelpers.js +77 -0
  154. package/lib/esm/widget/components/groupsHelpers.js.map +1 -0
  155. package/lib/esm/widget/components/property-grid/PropertyGridWrapper.d.ts +1 -1
  156. package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js +1 -1
  157. package/lib/esm/widget/components/property-grid/PropertyGridWrapper.js.map +1 -1
  158. package/lib/esm/widget/components/property-grid/PropertyView.js +1 -3
  159. package/lib/esm/widget/components/property-grid/PropertyView.js.map +1 -1
  160. package/lib/esm/widget/components/utils.d.ts +1 -3
  161. package/lib/esm/widget/components/utils.js +0 -24
  162. package/lib/esm/widget/components/utils.js.map +1 -1
  163. package/package.json +3 -3
  164. package/lib/cjs/widget/components/GroupQueryBuilderContainer.d.ts +0 -5
  165. package/lib/cjs/widget/components/GroupQueryBuilderContainer.js.map +0 -1
  166. package/lib/esm/widget/components/GroupQueryBuilderContainer.d.ts +0 -5
  167. package/lib/esm/widget/components/GroupQueryBuilderContainer.js.map +0 -1
  168. /package/lib/cjs/widget/components/{GroupQueryBuilder.scss → customUI/GroupQueryBuilderCustomUI.scss} +0 -0
  169. /package/lib/esm/widget/components/{GroupQueryBuilder.scss → customUI/GroupQueryBuilderCustomUI.scss} +0 -0
@@ -0,0 +1,80 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import React from "react";
6
+ import { useGroupingMappingApiConfig } from "./context/GroupingApiConfigContext";
7
+ import { GroupAction } from "./GroupAction";
8
+ import { Groupings } from "./Grouping";
9
+ import { RouteStep } from "./GroupingMapping";
10
+ import { Mappings } from "./Mapping";
11
+ import { MappingAction } from "./MappingAction";
12
+ import { PropertyMenu } from "./PropertyMenu";
13
+ export const GroupingMappingRouter = ({ currentRoute, navigateTo, goBack, }) => {
14
+ const { iModelId } = useGroupingMappingApiConfig();
15
+ const { mapping, group, groupContextCustomUI, queryGenerationType } = currentRoute.groupingRouteFields;
16
+ switch (currentRoute.step) {
17
+ case RouteStep.Mappings:
18
+ return (React.createElement(Mappings, { onClickAddMapping: () => navigateTo(() => ({ step: RouteStep.MappingsAction, title: "Add Mapping", groupingRouteFields: {} })), onClickMappingTitle: (mapping) => {
19
+ navigateTo(() => ({
20
+ step: RouteStep.Groups,
21
+ groupingRouteFields: { mapping },
22
+ title: mapping.mappingName,
23
+ }));
24
+ }, onClickMappingModify: (mapping) => {
25
+ navigateTo(() => ({
26
+ step: RouteStep.MappingsAction,
27
+ groupingRouteFields: { mapping },
28
+ title: mapping.mappingName,
29
+ }));
30
+ } }));
31
+ case RouteStep.MappingsAction:
32
+ return (React.createElement(MappingAction, { mapping: mapping, onClickCancel: goBack, onSaveSuccess: goBack }));
33
+ case RouteStep.Groups:
34
+ if (mapping) {
35
+ return (React.createElement(Groupings, { mapping: mapping, onClickAddGroup: (qType) => navigateTo((prev) => ({
36
+ step: RouteStep.GroupAction,
37
+ groupingRouteFields: { ...prev === null || prev === void 0 ? void 0 : prev.groupingRouteFields, queryGenerationType: qType },
38
+ title: "Add Group",
39
+ })), onClickGroupTitle: (g) => navigateTo((prev) => ({
40
+ step: RouteStep.Properties,
41
+ title: g.groupName,
42
+ groupingRouteFields: { ...prev === null || prev === void 0 ? void 0 : prev.groupingRouteFields, group: g },
43
+ })), onClickGroupModify: (g, qType) => navigateTo((prev) => ({
44
+ step: RouteStep.GroupAction,
45
+ title: g.groupName,
46
+ groupingRouteFields: { ...prev === null || prev === void 0 ? void 0 : prev.groupingRouteFields, group: g, queryGenerationType: qType },
47
+ })), onClickRenderContextCustomUI: (ccUI, g) => navigateTo((prev) => {
48
+ var _a;
49
+ return ({
50
+ step: RouteStep.GroupAction,
51
+ title: (_a = ccUI.displayName) !== null && _a !== void 0 ? _a : "",
52
+ groupingRouteFields: { ...prev === null || prev === void 0 ? void 0 : prev.groupingRouteFields, group: g, groupContextCustomUI: ccUI },
53
+ });
54
+ }) }));
55
+ }
56
+ return null;
57
+ case RouteStep.GroupAction:
58
+ if (mapping) {
59
+ if (queryGenerationType) {
60
+ return (React.createElement(GroupAction, { mappingId: mapping.id, group: group, onClickCancel: goBack, onSaveSuccess: goBack, queryGenerationType: queryGenerationType }));
61
+ }
62
+ else if (group && groupContextCustomUI) {
63
+ return (React.createElement(groupContextCustomUI, {
64
+ iModelId,
65
+ mappingId: mapping.id,
66
+ groupId: group.id,
67
+ }));
68
+ }
69
+ }
70
+ return null;
71
+ case RouteStep.Properties:
72
+ if (mapping && group) {
73
+ return (React.createElement(PropertyMenu, { iModelId: iModelId, mappingId: mapping.id, group: group, goBack: async () => goBack() }));
74
+ }
75
+ return null;
76
+ default:
77
+ return null;
78
+ }
79
+ };
80
+ //# sourceMappingURL=GroupingMappingRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupingMappingRouter.js","sourceRoot":"","sources":["../../../../src/widget/components/GroupingMappingRouter.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EACpC,YAAY,EACZ,UAAU,EACV,MAAM,GAKP,EAAE,EAAE;IACH,MAAM,EAAE,QAAQ,EAAE,GAAG,2BAA2B,EAAE,CAAC;IACnD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,GAAG,YAAY,CAAC,mBAAmB,CAAC;IAEvG,QAAQ,YAAY,CAAC,IAAI,EAAE;QACzB,KAAK,SAAS,CAAC,QAAQ;YACrB,OAAO,CACL,oBAAC,QAAQ,IACP,iBAAiB,EAAE,GAAG,EAAE,CACtB,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,EAAE,EAAE,CAAC,CAAC,EAEvG,mBAAmB,EAAE,CAAC,OAAO,EAAE,EAAE;oBAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;wBAChB,IAAI,EAAE,SAAS,CAAC,MAAM;wBACtB,mBAAmB,EAAE,EAAE,OAAO,EAAE;wBAChC,KAAK,EAAE,OAAO,CAAC,WAAW;qBAC3B,CAAC,CAAC,CAAC;gBACN,CAAC,EACD,oBAAoB,EAAE,CAAC,OAAO,EAAE,EAAE;oBAChC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;wBAChB,IAAI,EAAE,SAAS,CAAC,cAAc;wBAC9B,mBAAmB,EAAE,EAAE,OAAO,EAAE;wBAChC,KAAK,EAAE,OAAO,CAAC,WAAW;qBAC3B,CAAC,CAAC,CAAC;gBACN,CAAC,GACD,CAAC,CAAC;QACR,KAAK,SAAS,CAAC,cAAc;YAC3B,OAAO,CAAC,oBAAC,aAAa,IAAC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAI,CAAC,CAAC;QAC7F,KAAK,SAAS,CAAC,MAAM;YACnB,IAAI,OAAO,EAAE;gBACX,OAAO,CACL,oBAAC,SAAS,IACR,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CACzB,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;wBACpB,IAAI,EAAE,SAAS,CAAC,WAAW;wBAC3B,mBAAmB,EAAE,EAAE,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,mBAAmB,EAAE,mBAAmB,EAAE,KAAK,EAAE;wBACjF,KAAK,EAAE,WAAW;qBACnB,CAAC,CAAC,EAEL,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CACvB,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;wBACpB,IAAI,EAAE,SAAS,CAAC,UAAU;wBAC1B,KAAK,EAAE,CAAC,CAAC,SAAS;wBAClB,mBAAmB,EAAE,EAAE,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE;qBAChE,CAAC,CAAC,EAEL,kBAAkB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAC/B,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;wBACpB,IAAI,EAAE,SAAS,CAAC,WAAW;wBAC3B,KAAK,EAAE,CAAC,CAAC,SAAS;wBAClB,mBAAmB,EAAE,EAAE,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,mBAAmB,EAAE,KAAK,EAAE;qBAC5F,CAAC,CAAC,EAEL,4BAA4B,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CACxC,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE;;wBAAC,OAAA,CAAC;4BACpB,IAAI,EAAE,SAAS,CAAC,WAAW;4BAC3B,KAAK,EAAE,MAAA,IAAI,CAAC,WAAW,mCAAI,EAAE;4BAC7B,mBAAmB,EAAE,EAAE,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE;yBAC5F,CAAC,CAAA;qBAAA,CAAC,GAEL,CACH,CAAC;aACH;YACD,OAAO,IAAI,CAAC;QACd,KAAK,SAAS,CAAC,WAAW;YACxB,IAAI,OAAO,EAAE;gBACX,IAAI,mBAAmB,EAAE;oBACvB,OAAO,CACL,oBAAC,WAAW,IACV,SAAS,EAAE,OAAO,CAAC,EAAE,EACrB,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,mBAAmB,EAAE,mBAAmB,GACxC,CACH,CAAC;iBACH;qBAAM,IAAI,KAAK,IAAI,oBAAoB,EAAE;oBACxC,OAAO,CACL,KAAK,CAAC,aAAa,CAAC,oBAAoB,EAAE;wBACxC,QAAQ;wBACR,SAAS,EAAE,OAAO,CAAC,EAAE;wBACrB,OAAO,EAAE,KAAK,CAAC,EAAE;qBAClB,CAAC,CACH,CAAC;iBACH;aACF;YACD,OAAO,IAAI,CAAC;QACd,KAAK,SAAS,CAAC,UAAU;YACvB,IAAI,OAAO,IAAI,KAAK,EAAE;gBACpB,OAAO,CACL,oBAAC,YAAY,IACX,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,OAAO,CAAC,EAAE,EACrB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,EAAE,GAC5B,CACH,CAAC;aACH;YACD,OAAO,IAAI,CAAC;QACd;YACE,OAAO,IAAI,CAAC;KACf;AACH,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*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport { GroupAction } from \"./GroupAction\";\nimport { Groupings } from \"./Grouping\";\nimport type { Route } from \"./GroupingMapping\";\nimport { RouteStep } from \"./GroupingMapping\";\nimport { Mappings } from \"./Mapping\";\nimport { MappingAction } from \"./MappingAction\";\nimport { PropertyMenu } from \"./PropertyMenu\";\n\nexport const GroupingMappingRouter = ({\n currentRoute,\n navigateTo,\n goBack,\n}: {\n currentRoute: Route;\n navigateTo: (toRoute: (prev: Route | undefined) => Route) => void;\n goBack: () => void;\n}) => {\n const { iModelId } = useGroupingMappingApiConfig();\n const { mapping, group, groupContextCustomUI, queryGenerationType } = currentRoute.groupingRouteFields;\n\n switch (currentRoute.step) {\n case RouteStep.Mappings:\n return (\n <Mappings\n onClickAddMapping={() =>\n navigateTo(() => ({ step: RouteStep.MappingsAction, title: \"Add Mapping\", groupingRouteFields: {} }))\n }\n onClickMappingTitle={(mapping) => {\n navigateTo(() => ({\n step: RouteStep.Groups,\n groupingRouteFields: { mapping },\n title: mapping.mappingName,\n }));\n }}\n onClickMappingModify={(mapping) => {\n navigateTo(() => ({\n step: RouteStep.MappingsAction,\n groupingRouteFields: { mapping },\n title: mapping.mappingName,\n }));\n }}\n />);\n case RouteStep.MappingsAction:\n return (<MappingAction mapping={mapping} onClickCancel={goBack} onSaveSuccess={goBack} />);\n case RouteStep.Groups:\n if (mapping) {\n return (\n <Groupings\n mapping={mapping}\n onClickAddGroup={(qType) =>\n navigateTo((prev) => ({\n step: RouteStep.GroupAction,\n groupingRouteFields: { ...prev?.groupingRouteFields, queryGenerationType: qType },\n title: \"Add Group\",\n }))\n }\n onClickGroupTitle={(g) =>\n navigateTo((prev) => ({\n step: RouteStep.Properties,\n title: g.groupName,\n groupingRouteFields: { ...prev?.groupingRouteFields, group: g },\n }))\n }\n onClickGroupModify={(g, qType) =>\n navigateTo((prev) => ({\n step: RouteStep.GroupAction,\n title: g.groupName,\n groupingRouteFields: { ...prev?.groupingRouteFields, group: g, queryGenerationType: qType },\n }))\n }\n onClickRenderContextCustomUI={(ccUI, g) =>\n navigateTo((prev) => ({\n step: RouteStep.GroupAction,\n title: ccUI.displayName ?? \"\",\n groupingRouteFields: { ...prev?.groupingRouteFields, group: g, groupContextCustomUI: ccUI },\n }))\n }\n />\n );\n }\n return null;\n case RouteStep.GroupAction:\n if (mapping) {\n if (queryGenerationType) {\n return (\n <GroupAction\n mappingId={mapping.id}\n group={group}\n onClickCancel={goBack}\n onSaveSuccess={goBack}\n queryGenerationType={queryGenerationType}\n />\n );\n } else if (group && groupContextCustomUI) {\n return (\n React.createElement(groupContextCustomUI, {\n iModelId,\n mappingId: mapping.id,\n groupId: group.id,\n })\n );\n }\n }\n return null;\n case RouteStep.Properties:\n if (mapping && group) {\n return (\n <PropertyMenu\n iModelId={iModelId}\n mappingId={mapping.id}\n group={group}\n goBack={async () => goBack()}\n />\n );\n }\n return null;\n default:\n return null;\n }\n};\n"]}
@@ -1,7 +1,12 @@
1
1
  /// <reference types="react" />
2
- import type { CreateTypeFromInterface } from "../utils";
3
2
  import "./Mapping.scss";
4
3
  import type { Mapping } from "@itwin/insights-client";
4
+ import type { CreateTypeFromInterface } from "../utils";
5
5
  export declare type IMappingTyped = CreateTypeFromInterface<Mapping>;
6
- export declare const Mappings: () => JSX.Element;
6
+ export interface MappingsProps {
7
+ onClickAddMapping?: () => void;
8
+ onClickMappingTitle?: (mapping: Mapping) => void;
9
+ onClickMappingModify?: (mapping: Mapping) => void;
10
+ }
11
+ export declare const Mappings: ({ onClickAddMapping, onClickMappingTitle, onClickMappingModify, }: MappingsProps) => JSX.Element;
7
12
  //# sourceMappingURL=Mapping.d.ts.map
@@ -2,30 +2,18 @@
2
2
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
- import { Presentation } from "@itwin/presentation-frontend";
6
- import { useActiveIModelConnection } from "@itwin/appui-react";
7
- import { SvgAdd, SvgDelete, SvgEdit, SvgImport, SvgMore, SvgProcess, } from "@itwin/itwinui-icons-react";
5
+ import { SvgAdd, SvgDelete, SvgEdit, SvgImport, SvgMore, SvgProcess, SvgRefresh, } from "@itwin/itwinui-icons-react";
8
6
  import { Button, DropdownMenu, IconButton, MenuItem, Surface, } from "@itwin/itwinui-react";
9
7
  import React, { useCallback, useEffect, useState } from "react";
10
- import { EmptyMessage, handleError, LoadingOverlay, onSelectionChanged, WidgetHeader } from "./utils";
8
+ import { EmptyMessage, handleError, LoadingOverlay, } from "./utils";
11
9
  import "./Mapping.scss";
12
10
  import DeleteModal from "./DeleteModal";
13
- import { Groupings } from "./Grouping";
14
- import MappingAction from "./MappingAction";
15
11
  import { MappingImportWizardModal } from "./MappingImportWizardModal";
16
12
  import { useMappingClient } from "./context/MappingClientContext";
17
13
  import { BlockingOverlay } from "./BlockingOverlay";
18
14
  import { HorizontalTile } from "./HorizontalTile";
19
15
  import { clearAll } from "./viewerUtils";
20
16
  import { useGroupingMappingApiConfig } from "./context/GroupingApiConfigContext";
21
- var MappingView;
22
- (function (MappingView) {
23
- MappingView["MAPPINGS"] = "mappings";
24
- MappingView["GROUPS"] = "groups";
25
- MappingView["ADDING"] = "adding";
26
- MappingView["MODIFYING"] = "modifying";
27
- MappingView["IMPORT"] = "import";
28
- })(MappingView || (MappingView = {}));
29
17
  const fetchMappings = async (setMappings, iModelId, setIsLoading, getAccessToken, mappingsClient) => {
30
18
  try {
31
19
  setIsLoading(true);
@@ -44,98 +32,79 @@ const toggleExtraction = async (getAccessToken, mappingsClient, iModelId, mappin
44
32
  try {
45
33
  const newState = mapping.extractionEnabled;
46
34
  const accessToken = await getAccessToken();
47
- await mappingsClient.updateMapping(accessToken, iModelId, mapping.id, { extractionEnabled: newState });
35
+ await mappingsClient.updateMapping(accessToken, iModelId, mapping.id, {
36
+ extractionEnabled: newState,
37
+ });
48
38
  }
49
39
  catch (error) {
50
40
  handleError(error.status);
51
41
  }
52
42
  };
53
- export const Mappings = () => {
54
- var _a, _b;
55
- const { getAccessToken } = useGroupingMappingApiConfig();
43
+ export const Mappings = ({ onClickAddMapping, onClickMappingTitle, onClickMappingModify, }) => {
44
+ var _a;
45
+ const { getAccessToken, iModelId } = useGroupingMappingApiConfig();
56
46
  const mappingClient = useMappingClient();
57
- const iModelId = (_a = useActiveIModelConnection()) === null || _a === void 0 ? void 0 : _a.iModelId;
58
47
  const [showDeleteModal, setShowDeleteModal] = useState(false);
59
48
  const [showImportModal, setShowImportModal] = useState(false);
60
49
  const [showBlockingOverlay, setShowBlockingOverlay] = useState(false);
61
- const [mappingView, setMappingView] = useState(MappingView.MAPPINGS);
62
50
  const [selectedMapping, setSelectedMapping] = useState(undefined);
63
51
  const [isLoading, setIsLoading] = useState(true);
64
52
  const [mappings, setMappings] = useState([]);
65
53
  useEffect(() => {
66
54
  void fetchMappings(setMappings, iModelId, setIsLoading, getAccessToken, mappingClient);
67
55
  }, [getAccessToken, mappingClient, iModelId, setIsLoading]);
68
- useEffect(() => {
69
- const removeListener = Presentation.selection.selectionChange.addListener(onSelectionChanged);
70
- return () => {
71
- removeListener();
72
- };
73
- }, []);
74
56
  const refresh = useCallback(async () => {
75
57
  clearAll();
76
- setMappingView(MappingView.MAPPINGS);
77
58
  setSelectedMapping(undefined);
78
59
  setMappings([]);
79
60
  await fetchMappings(setMappings, iModelId, setIsLoading, getAccessToken, mappingClient);
80
61
  }, [getAccessToken, mappingClient, iModelId, setMappings]);
81
- const addMapping = async () => {
82
- setMappingView(MappingView.ADDING);
83
- };
84
- switch (mappingView) {
85
- case MappingView.ADDING:
86
- return React.createElement(MappingAction, { iModelId: iModelId, returnFn: refresh });
87
- case MappingView.MODIFYING:
88
- return (React.createElement(MappingAction, { iModelId: iModelId, mapping: selectedMapping, returnFn: refresh }));
89
- case MappingView.GROUPS:
90
- return (React.createElement(Groupings, { mapping: selectedMapping, goBack: refresh }));
91
- default:
92
- return (React.createElement(React.Fragment, null,
93
- React.createElement(BlockingOverlay, { isVisible: showBlockingOverlay }),
94
- React.createElement(WidgetHeader, { title: "Mappings" }),
95
- React.createElement(Surface, { className: "gmw-mappings-container" },
96
- React.createElement("div", { className: "gmw-table-toolbar" },
97
- React.createElement("div", { className: "gmw-button-spacing" },
98
- React.createElement(Button, { startIcon: React.createElement(SvgAdd, null), onClick: async () => addMapping(), styleType: "high-visibility" }, "New"),
99
- React.createElement(IconButton, { title: "Import Mappings", onClick: () => setShowImportModal(true) },
100
- React.createElement(SvgImport, null)))),
101
- isLoading ? (React.createElement(LoadingOverlay, null)) : mappings.length === 0 ? (React.createElement(EmptyMessage, { message: "No Mappings available." })) : (React.createElement("div", { className: "gmw-mappings-list" }, mappings
102
- .sort((a, b) => { var _a; return (_a = a.mappingName.localeCompare(b.mappingName)) !== null && _a !== void 0 ? _a : 1; })
103
- .map((mapping) => {
104
- var _a, _b;
105
- return (React.createElement(HorizontalTile, { key: mapping.id, title: mapping.mappingName ? mapping.mappingName : "Untitled", subText: (_a = mapping.description) !== null && _a !== void 0 ? _a : "", subtextToolTip: (_b = mapping.description) !== null && _b !== void 0 ? _b : "", titleTooltip: mapping.mappingName, onClickTitle: () => {
106
- setSelectedMapping(mapping);
107
- setMappingView(MappingView.GROUPS);
108
- }, actionGroup: React.createElement(DropdownMenu, { menuItems: (close) => [
109
- React.createElement(MenuItem, { key: 0, onClick: () => {
110
- setSelectedMapping(mapping);
111
- setMappingView(MappingView.MODIFYING);
112
- }, icon: React.createElement(SvgEdit, null) }, "Modify"),
113
- React.createElement(MenuItem, { key: 1, onClick: async () => {
114
- setSelectedMapping(mapping);
115
- setShowBlockingOverlay(true);
116
- close();
117
- await toggleExtraction(getAccessToken, mappingClient, iModelId, mapping);
118
- await refresh();
119
- setShowBlockingOverlay(false);
120
- }, icon: React.createElement(SvgProcess, null) }, mapping.extractionEnabled ? "Disable extraction" : "Enable extraction"),
121
- React.createElement(MenuItem, { key: 2, onClick: () => {
122
- setSelectedMapping(mapping);
123
- setShowDeleteModal(true);
124
- close();
125
- }, icon: React.createElement(SvgDelete, null) }, "Remove"),
126
- ] },
127
- React.createElement(IconButton, { styleType: "borderless" },
128
- React.createElement(SvgMore, { style: {
129
- width: "16px",
130
- height: "16px",
131
- } }))) }));
132
- })))),
133
- React.createElement(DeleteModal, { entityName: (_b = selectedMapping === null || selectedMapping === void 0 ? void 0 : selectedMapping.mappingName) !== null && _b !== void 0 ? _b : "", show: showDeleteModal, setShow: setShowDeleteModal, onDelete: async () => {
134
- var _a;
135
- const accessToken = await getAccessToken();
136
- await mappingClient.deleteMapping(accessToken, iModelId, (_a = selectedMapping === null || selectedMapping === void 0 ? void 0 : selectedMapping.id) !== null && _a !== void 0 ? _a : "");
137
- }, refresh: refresh }),
138
- React.createElement(MappingImportWizardModal, { show: showImportModal, setShow: setShowImportModal, onFinish: refresh })));
139
- }
62
+ return (React.createElement(React.Fragment, null,
63
+ React.createElement(BlockingOverlay, { isVisible: showBlockingOverlay }),
64
+ React.createElement(Surface, { className: "gmw-mappings-container" },
65
+ React.createElement("div", { className: "gmw-table-toolbar" },
66
+ React.createElement("div", { className: "gmw-button-spacing" },
67
+ onClickAddMapping &&
68
+ React.createElement(Button, { startIcon: React.createElement(SvgAdd, null), onClick: onClickAddMapping, styleType: "high-visibility" }, "New"),
69
+ React.createElement(IconButton, { title: "Import Mappings", onClick: () => setShowImportModal(true) },
70
+ React.createElement(SvgImport, null))),
71
+ React.createElement(IconButton, { title: "Refresh", onClick: refresh, disabled: isLoading, styleType: 'borderless' },
72
+ React.createElement(SvgRefresh, null))),
73
+ isLoading ? (React.createElement(LoadingOverlay, null)) : mappings.length === 0 ? (React.createElement(EmptyMessage, { message: "No Mappings available." })) : (React.createElement("div", { className: "gmw-mappings-list" }, mappings
74
+ .sort((a, b) => { var _a; return (_a = a.mappingName.localeCompare(b.mappingName)) !== null && _a !== void 0 ? _a : 1; })
75
+ .map((mapping) => {
76
+ var _a, _b;
77
+ return (React.createElement(HorizontalTile, { key: mapping.id, title: mapping.mappingName ? mapping.mappingName : "Untitled", subText: (_a = mapping.description) !== null && _a !== void 0 ? _a : "", subtextToolTip: (_b = mapping.description) !== null && _b !== void 0 ? _b : "", titleTooltip: mapping.mappingName, onClickTitle: () => onClickMappingTitle ? onClickMappingTitle(mapping) : undefined, actionGroup: React.createElement(DropdownMenu, { menuItems: (close) => [
78
+ onClickMappingModify ? (React.createElement(MenuItem, { key: 0, onClick: () => {
79
+ onClickMappingModify(mapping);
80
+ }, icon: React.createElement(SvgEdit, null) }, "Modify")) : [],
81
+ React.createElement(MenuItem, { key: 1, onClick: async () => {
82
+ setSelectedMapping(mapping);
83
+ setShowBlockingOverlay(true);
84
+ close();
85
+ await toggleExtraction(getAccessToken, mappingClient, iModelId, mapping);
86
+ await refresh();
87
+ setShowBlockingOverlay(false);
88
+ }, icon: React.createElement(SvgProcess, null) }, mapping.extractionEnabled
89
+ ? "Disable extraction"
90
+ : "Enable extraction"),
91
+ React.createElement(MenuItem, { key: 2, onClick: () => {
92
+ setSelectedMapping(mapping);
93
+ setShowDeleteModal(true);
94
+ close();
95
+ }, icon: React.createElement(SvgDelete, null) }, "Remove"),
96
+ ].flatMap((m) => m) },
97
+ React.createElement(IconButton, { styleType: "borderless" },
98
+ React.createElement(SvgMore, { style: {
99
+ width: "16px",
100
+ height: "16px",
101
+ } }))) }));
102
+ })))),
103
+ React.createElement(DeleteModal, { entityName: (_a = selectedMapping === null || selectedMapping === void 0 ? void 0 : selectedMapping.mappingName) !== null && _a !== void 0 ? _a : "", show: showDeleteModal, setShow: setShowDeleteModal, onDelete: async () => {
104
+ var _a;
105
+ const accessToken = await getAccessToken();
106
+ await mappingClient.deleteMapping(accessToken, iModelId, (_a = selectedMapping === null || selectedMapping === void 0 ? void 0 : selectedMapping.id) !== null && _a !== void 0 ? _a : "");
107
+ }, refresh: refresh }),
108
+ React.createElement(MappingImportWizardModal, { show: showImportModal, setShow: setShowImportModal, onFinish: refresh })));
140
109
  };
141
110
  //# sourceMappingURL=Mapping.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Mapping.js","sourceRoot":"","sources":["../../../../src/widget/components/Mapping.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*--------------------------------------------------------------------------------------------*/\nimport { Presentation } from \"@itwin/presentation-frontend\";\nimport { useActiveIModelConnection } from \"@itwin/appui-react\";\nimport {\n SvgAdd,\n SvgDelete,\n SvgEdit,\n SvgImport,\n SvgMore,\n SvgProcess,\n} from \"@itwin/itwinui-icons-react\";\nimport {\n Button,\n DropdownMenu,\n IconButton,\n MenuItem,\n Surface,\n} from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport type { CreateTypeFromInterface } from \"../utils\";\nimport { EmptyMessage, handleError, LoadingOverlay, onSelectionChanged, WidgetHeader } from \"./utils\";\nimport \"./Mapping.scss\";\nimport DeleteModal from \"./DeleteModal\";\nimport { Groupings } from \"./Grouping\";\nimport MappingAction from \"./MappingAction\";\nimport { MappingImportWizardModal } from \"./MappingImportWizardModal\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport type { IMappingsClient, Mapping } from \"@itwin/insights-client\";\nimport { BlockingOverlay } from \"./BlockingOverlay\";\nimport { HorizontalTile } from \"./HorizontalTile\";\nimport { clearAll } from \"./viewerUtils\";\nimport type { GetAccessTokenFn } from \"./context/GroupingApiConfigContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\n\nexport type IMappingTyped = CreateTypeFromInterface<Mapping>;\n\nenum MappingView {\n MAPPINGS = \"mappings\",\n GROUPS = \"groups\",\n ADDING = \"adding\",\n MODIFYING = \"modifying\",\n IMPORT = \"import\",\n}\n\nconst fetchMappings = async (\n setMappings: React.Dispatch<React.SetStateAction<Mapping[]>>,\n iModelId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n getAccessToken: GetAccessTokenFn,\n mappingsClient: IMappingsClient,\n) => {\n try {\n setIsLoading(true);\n const accessToken = await getAccessToken();\n const mappings = await mappingsClient.getMappings(accessToken, iModelId);\n setMappings(mappings);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n};\n\nconst toggleExtraction = async (\n getAccessToken: GetAccessTokenFn,\n mappingsClient: IMappingsClient,\n iModelId: string,\n mapping: Mapping\n) => {\n try {\n const newState = mapping.extractionEnabled;\n const accessToken = await getAccessToken();\n await mappingsClient.updateMapping(\n accessToken,\n iModelId,\n mapping.id,\n { extractionEnabled: newState }\n );\n } catch (error: any) {\n handleError(error.status);\n }\n};\n\nexport const Mappings = () => {\n const { getAccessToken } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const iModelId = useActiveIModelConnection()?.iModelId as string;\n const [showDeleteModal, setShowDeleteModal] = useState<boolean>(false);\n const [showImportModal, setShowImportModal] = useState<boolean>(false);\n const [showBlockingOverlay, setShowBlockingOverlay] = useState<boolean>(false);\n const [mappingView, setMappingView] = useState<MappingView>(\n MappingView.MAPPINGS\n );\n const [selectedMapping, setSelectedMapping] = useState<Mapping | undefined>(undefined);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [mappings, setMappings] = useState<Mapping[]>([]);\n\n useEffect(() => {\n void fetchMappings(setMappings, iModelId, setIsLoading, getAccessToken, mappingClient);\n }, [getAccessToken, mappingClient, iModelId, setIsLoading]);\n\n useEffect(() => {\n const removeListener =\n Presentation.selection.selectionChange.addListener(onSelectionChanged);\n return () => {\n removeListener();\n };\n }, []);\n\n const refresh = useCallback(async () => {\n clearAll();\n setMappingView(MappingView.MAPPINGS);\n setSelectedMapping(undefined);\n setMappings([]);\n await fetchMappings(setMappings, iModelId, setIsLoading, getAccessToken, mappingClient);\n }, [getAccessToken, mappingClient, iModelId, setMappings]);\n\n const addMapping = async () => {\n setMappingView(MappingView.ADDING);\n };\n\n switch (mappingView) {\n case MappingView.ADDING:\n return <MappingAction iModelId={iModelId} returnFn={refresh} />;\n case MappingView.MODIFYING:\n return (\n <MappingAction\n iModelId={iModelId}\n mapping={selectedMapping}\n returnFn={refresh}\n />\n );\n case MappingView.GROUPS:\n return (\n <Groupings\n mapping={selectedMapping as Mapping}\n goBack={refresh}\n />\n );\n default:\n return (\n <>\n <BlockingOverlay isVisible={showBlockingOverlay} />\n <WidgetHeader title=\"Mappings\" />\n <Surface className=\"gmw-mappings-container\">\n <div className=\"gmw-table-toolbar\">\n <div className=\"gmw-button-spacing\">\n <Button\n startIcon={<SvgAdd />}\n onClick={async () => addMapping()}\n styleType=\"high-visibility\"\n >\n New\n </Button>\n <IconButton title=\"Import Mappings\"\n onClick={() => setShowImportModal(true)}>\n <SvgImport />\n </IconButton>\n </div>\n </div>\n {isLoading ? (\n <LoadingOverlay />\n ) : mappings.length === 0 ? (\n <EmptyMessage message=\"No Mappings available.\" />\n ) : (\n <div className=\"gmw-mappings-list\">\n {mappings\n .sort((a, b) => a.mappingName.localeCompare(b.mappingName) ?? 1)\n .map((mapping) => (\n <HorizontalTile\n key={mapping.id}\n title={mapping.mappingName ? mapping.mappingName : \"Untitled\"}\n subText={mapping.description ?? \"\"}\n subtextToolTip={mapping.description ?? \"\"}\n titleTooltip={mapping.mappingName}\n onClickTitle={() => {\n setSelectedMapping(mapping);\n setMappingView(MappingView.GROUPS);\n }}\n actionGroup={\n <DropdownMenu\n menuItems={(close: () => void) => [\n <MenuItem\n key={0}\n onClick={() => {\n setSelectedMapping(mapping);\n setMappingView(MappingView.MODIFYING);\n }}\n icon={<SvgEdit />}\n >\n Modify\n </MenuItem>,\n <MenuItem\n key={1}\n onClick={async () => {\n setSelectedMapping(mapping);\n setShowBlockingOverlay(true);\n close();\n await toggleExtraction(getAccessToken, mappingClient, iModelId, mapping);\n await refresh();\n setShowBlockingOverlay(false);\n }}\n icon={<SvgProcess />}\n >\n {mapping.extractionEnabled ? \"Disable extraction\" : \"Enable extraction\"}\n </MenuItem>,\n <MenuItem\n key={2}\n onClick={() => {\n setSelectedMapping(mapping);\n setShowDeleteModal(true);\n close();\n }}\n icon={<SvgDelete />}\n >\n Remove\n </MenuItem>,\n ]}\n >\n <IconButton styleType=\"borderless\">\n <SvgMore\n style={{\n width: \"16px\",\n height: \"16px\",\n }}\n />\n </IconButton>\n </DropdownMenu>\n }\n />\n ))}\n </div>\n )}\n </Surface>\n <DeleteModal\n entityName={selectedMapping?.mappingName ?? \"\"}\n show={showDeleteModal}\n setShow={setShowDeleteModal}\n onDelete={async () => {\n const accessToken = await getAccessToken();\n await mappingClient.deleteMapping(\n accessToken,\n iModelId,\n selectedMapping?.id ?? \"\"\n );\n }}\n refresh={refresh}\n />\n <MappingImportWizardModal\n show={showImportModal}\n setShow={setShowImportModal}\n onFinish={refresh}\n />\n </>\n );\n }\n};\n"]}
1
+ {"version":3,"file":"Mapping.js","sourceRoot":"","sources":["../../../../src/widget/components/Mapping.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*--------------------------------------------------------------------------------------------*/\nimport {\n SvgAdd,\n SvgDelete,\n SvgEdit,\n SvgImport,\n SvgMore,\n SvgProcess,\n SvgRefresh,\n} from \"@itwin/itwinui-icons-react\";\nimport {\n Button,\n DropdownMenu,\n IconButton,\n MenuItem,\n Surface,\n} from \"@itwin/itwinui-react\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport {\n EmptyMessage,\n handleError,\n LoadingOverlay,\n} from \"./utils\";\nimport \"./Mapping.scss\";\nimport DeleteModal from \"./DeleteModal\";\nimport { MappingImportWizardModal } from \"./MappingImportWizardModal\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport type { IMappingsClient, Mapping } from \"@itwin/insights-client\";\nimport { BlockingOverlay } from \"./BlockingOverlay\";\nimport { HorizontalTile } from \"./HorizontalTile\";\nimport { clearAll } from \"./viewerUtils\";\nimport type { GetAccessTokenFn } from \"./context/GroupingApiConfigContext\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\nimport type { CreateTypeFromInterface } from \"../utils\";\n\nexport type IMappingTyped = CreateTypeFromInterface<Mapping>;\n\nexport interface MappingsProps {\n onClickAddMapping?: () => void;\n onClickMappingTitle?: (mapping: Mapping) => void;\n onClickMappingModify?: (mapping: Mapping) => void;\n}\n\nconst fetchMappings = async (\n setMappings: React.Dispatch<React.SetStateAction<Mapping[]>>,\n iModelId: string,\n setIsLoading: React.Dispatch<React.SetStateAction<boolean>>,\n getAccessToken: GetAccessTokenFn,\n mappingsClient: IMappingsClient\n) => {\n try {\n setIsLoading(true);\n const accessToken = await getAccessToken();\n const mappings = await mappingsClient.getMappings(accessToken, iModelId);\n setMappings(mappings);\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n};\n\nconst toggleExtraction = async (\n getAccessToken: GetAccessTokenFn,\n mappingsClient: IMappingsClient,\n iModelId: string,\n mapping: Mapping\n) => {\n try {\n const newState = mapping.extractionEnabled;\n const accessToken = await getAccessToken();\n await mappingsClient.updateMapping(accessToken, iModelId, mapping.id, {\n extractionEnabled: newState,\n });\n } catch (error: any) {\n handleError(error.status);\n }\n};\n\nexport const Mappings = ({\n onClickAddMapping,\n onClickMappingTitle,\n onClickMappingModify,\n}: MappingsProps) => {\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [showDeleteModal, setShowDeleteModal] = useState<boolean>(false);\n const [showImportModal, setShowImportModal] = useState<boolean>(false);\n const [showBlockingOverlay, setShowBlockingOverlay] =\n useState<boolean>(false);\n const [selectedMapping, setSelectedMapping] = useState<Mapping | undefined>(\n undefined\n );\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [mappings, setMappings] = useState<Mapping[]>([]);\n\n useEffect(() => {\n void fetchMappings(\n setMappings,\n iModelId,\n setIsLoading,\n getAccessToken,\n mappingClient\n );\n }, [getAccessToken, mappingClient, iModelId, setIsLoading]);\n\n const refresh = useCallback(async () => {\n clearAll();\n setSelectedMapping(undefined);\n setMappings([]);\n await fetchMappings(\n setMappings,\n iModelId,\n setIsLoading,\n getAccessToken,\n mappingClient\n );\n }, [getAccessToken, mappingClient, iModelId, setMappings]);\n\n return (\n <>\n <BlockingOverlay isVisible={showBlockingOverlay} />\n <Surface className=\"gmw-mappings-container\">\n <div className=\"gmw-table-toolbar\">\n <div className=\"gmw-button-spacing\">\n {onClickAddMapping &&\n <Button\n startIcon={<SvgAdd />}\n onClick={onClickAddMapping}\n styleType=\"high-visibility\"\n >\n New\n </Button>\n }\n <IconButton\n title=\"Import Mappings\"\n onClick={() => setShowImportModal(true)}\n >\n <SvgImport />\n </IconButton>\n </div>\n <IconButton\n title=\"Refresh\"\n onClick={refresh}\n disabled={isLoading}\n styleType='borderless'\n >\n <SvgRefresh />\n </IconButton>\n </div>\n {isLoading ? (\n <LoadingOverlay />\n ) : mappings.length === 0 ? (\n <EmptyMessage message=\"No Mappings available.\" />\n ) : (\n <div className=\"gmw-mappings-list\">\n {mappings\n .sort(\n (a, b) => a.mappingName.localeCompare(b.mappingName) ?? 1\n )\n .map((mapping) => (\n <HorizontalTile\n key={mapping.id}\n title={\n mapping.mappingName ? mapping.mappingName : \"Untitled\"\n }\n subText={mapping.description ?? \"\"}\n subtextToolTip={mapping.description ?? \"\"}\n titleTooltip={mapping.mappingName}\n onClickTitle={() => onClickMappingTitle ? onClickMappingTitle(mapping) : undefined}\n actionGroup={\n <DropdownMenu\n menuItems={(close: () => void) => [\n onClickMappingModify ? (\n <MenuItem\n key={0}\n onClick={() => {\n onClickMappingModify(mapping);\n }}\n icon={<SvgEdit />}\n >\n Modify\n </MenuItem>\n ) : [],\n <MenuItem\n key={1}\n onClick={async () => {\n setSelectedMapping(mapping);\n setShowBlockingOverlay(true);\n close();\n await toggleExtraction(\n getAccessToken,\n mappingClient,\n iModelId,\n mapping\n );\n await refresh();\n setShowBlockingOverlay(false);\n }}\n icon={<SvgProcess />}\n >\n {mapping.extractionEnabled\n ? \"Disable extraction\"\n : \"Enable extraction\"}\n </MenuItem>,\n <MenuItem\n key={2}\n onClick={() => {\n setSelectedMapping(mapping);\n setShowDeleteModal(true);\n close();\n }}\n icon={<SvgDelete />}\n >\n Remove\n </MenuItem>,\n ].flatMap((m) => m)}\n >\n <IconButton styleType=\"borderless\">\n <SvgMore\n style={{\n width: \"16px\",\n height: \"16px\",\n }}\n />\n </IconButton>\n </DropdownMenu>\n }\n />\n ))}\n </div>\n )}\n </Surface>\n <DeleteModal\n entityName={selectedMapping?.mappingName ?? \"\"}\n show={showDeleteModal}\n setShow={setShowDeleteModal}\n onDelete={async () => {\n const accessToken = await getAccessToken();\n await mappingClient.deleteMapping(\n accessToken,\n iModelId,\n selectedMapping?.id ?? \"\"\n );\n }}\n refresh={refresh}\n />\n <MappingImportWizardModal\n show={showImportModal}\n setShow={setShowImportModal}\n onFinish={refresh}\n />\n </>\n );\n};\n"]}
@@ -1,11 +1,15 @@
1
1
  /// <reference types="react" />
2
2
  import "./MappingAction.scss";
3
3
  import type { Mapping } from "@itwin/insights-client";
4
- interface MappingActionProps {
5
- iModelId: string;
4
+ declare const defaultDisplayStrings: {
5
+ mappingDetails: string;
6
+ };
7
+ export interface MappingActionProps {
6
8
  mapping?: Mapping;
7
- returnFn: () => Promise<void>;
9
+ onSaveSuccess: () => void;
10
+ onClickCancel?: () => void;
11
+ displayStrings?: Partial<typeof defaultDisplayStrings>;
8
12
  }
9
- declare const MappingAction: ({ iModelId, mapping, returnFn }: MappingActionProps) => JSX.Element;
10
- export default MappingAction;
13
+ export declare const MappingAction: ({ mapping, onSaveSuccess, onClickCancel, displayStrings: userDisplayStrings }: MappingActionProps) => JSX.Element;
14
+ export {};
11
15
  //# sourceMappingURL=MappingAction.d.ts.map
@@ -6,13 +6,16 @@ import { Fieldset, LabeledInput, Small, ToggleSwitch } from "@itwin/itwinui-reac
6
6
  import React, { useState } from "react";
7
7
  import ActionPanel from "./ActionPanel";
8
8
  import useValidator, { NAME_REQUIREMENTS } from "../hooks/useValidator";
9
- import { handleError, handleInputChange, WidgetHeader } from "./utils";
9
+ import { handleError, handleInputChange } from "./utils";
10
10
  import "./MappingAction.scss";
11
11
  import { useMappingClient } from "./context/MappingClientContext";
12
12
  import { useGroupingMappingApiConfig } from "./context/GroupingApiConfigContext";
13
- const MappingAction = ({ iModelId, mapping, returnFn }) => {
13
+ const defaultDisplayStrings = {
14
+ mappingDetails: "Mapping Details",
15
+ };
16
+ export const MappingAction = ({ mapping, onSaveSuccess, onClickCancel, displayStrings: userDisplayStrings }) => {
14
17
  var _a, _b, _c;
15
- const { getAccessToken } = useGroupingMappingApiConfig();
18
+ const { getAccessToken, iModelId } = useGroupingMappingApiConfig();
16
19
  const mappingClient = useMappingClient();
17
20
  const [values, setValues] = useState({
18
21
  name: (_a = mapping === null || mapping === void 0 ? void 0 : mapping.mappingName) !== null && _a !== void 0 ? _a : "",
@@ -21,8 +24,9 @@ const MappingAction = ({ iModelId, mapping, returnFn }) => {
21
24
  });
22
25
  const [validator, showValidationMessage] = useValidator();
23
26
  const [isLoading, setIsLoading] = useState(false);
24
- // TODO ERRORED STATE
27
+ const displayStrings = { ...defaultDisplayStrings, ...userDisplayStrings };
25
28
  const onSave = async () => {
29
+ var _a, _b, _c;
26
30
  try {
27
31
  if (!validator.allValid()) {
28
32
  showValidationMessage(true);
@@ -41,17 +45,23 @@ const MappingAction = ({ iModelId, mapping, returnFn }) => {
41
45
  description: values.description,
42
46
  extractionEnabled: values.extractionEnabled,
43
47
  });
44
- await returnFn();
48
+ setValues({
49
+ name: (_a = mapping === null || mapping === void 0 ? void 0 : mapping.mappingName) !== null && _a !== void 0 ? _a : "",
50
+ description: (_b = mapping === null || mapping === void 0 ? void 0 : mapping.description) !== null && _b !== void 0 ? _b : "",
51
+ extractionEnabled: (_c = mapping === null || mapping === void 0 ? void 0 : mapping.extractionEnabled) !== null && _c !== void 0 ? _c : true,
52
+ });
53
+ onSaveSuccess();
45
54
  }
46
55
  catch (error) {
47
56
  handleError(error.status);
57
+ }
58
+ finally {
48
59
  setIsLoading(false);
49
60
  }
50
61
  };
51
62
  return (React.createElement(React.Fragment, null,
52
- React.createElement(WidgetHeader, { title: mapping ? "Modify Mapping" : "Add Mapping", returnFn: returnFn }),
53
63
  React.createElement("div", { className: 'gmw-details-form-container' },
54
- React.createElement(Fieldset, { legend: 'Mapping Details', className: 'gmw-details-form' },
64
+ React.createElement(Fieldset, { legend: displayStrings.mappingDetails, className: 'gmw-details-form' },
55
65
  React.createElement(Small, { className: 'gmw-field-legend' }, "Asterisk * indicates mandatory fields."),
56
66
  React.createElement(LabeledInput, { id: 'name', name: 'name', label: 'Name', value: values.name, required: true, onChange: (event) => {
57
67
  handleInputChange(event, values, setValues);
@@ -70,7 +80,6 @@ const MappingAction = ({ iModelId, mapping, returnFn }) => {
70
80
  React.createElement(ToggleSwitch, { id: 'extractionEnabled', name: 'extractionEnabled', label: 'Extract data from iModel', labelPosition: "right", checked: values.extractionEnabled, onChange: (event) => {
71
81
  setValues({ ...values, extractionEnabled: event.currentTarget.checked });
72
82
  } }))),
73
- React.createElement(ActionPanel, { onSave: onSave, onCancel: returnFn, isSavingDisabled: !values.name, isLoading: isLoading })));
83
+ React.createElement(ActionPanel, { onSave: onSave, onCancel: onClickCancel, isSavingDisabled: !values.name, isLoading: isLoading })));
74
84
  };
75
- export default MappingAction;
76
85
  //# sourceMappingURL=MappingAction.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MappingAction.js","sourceRoot":"","sources":["../../../../src/widget/components/MappingAction.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*--------------------------------------------------------------------------------------------*/\nimport { Fieldset, LabeledInput, Small, ToggleSwitch } from \"@itwin/itwinui-react\";\nimport React, { useState } from \"react\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { handleError, handleInputChange, WidgetHeader } from \"./utils\";\nimport \"./MappingAction.scss\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport type { Mapping } from \"@itwin/insights-client\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\n\ninterface MappingActionProps {\n iModelId: string;\n mapping?: Mapping;\n returnFn: () => Promise<void>;\n}\n\nconst MappingAction = ({ iModelId, mapping, returnFn }: MappingActionProps) => {\n const { getAccessToken } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [values, setValues] = useState({\n name: mapping?.mappingName ?? \"\",\n description: mapping?.description ?? \"\",\n extractionEnabled: mapping?.extractionEnabled ?? true,\n });\n const [validator, showValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n // TODO ERRORED STATE\n const onSave = async () => {\n try {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n setIsLoading(true);\n const accessToken = await getAccessToken();\n mapping\n ? await mappingClient.updateMapping(accessToken, iModelId, mapping.id, {\n mappingName: values.name,\n description: values.description,\n extractionEnabled: values.extractionEnabled,\n })\n : await mappingClient.createMapping(accessToken, iModelId, {\n mappingName: values.name,\n description: values.description,\n extractionEnabled: values.extractionEnabled,\n });\n await returnFn();\n } catch (error: any) {\n handleError(error.status);\n setIsLoading(false);\n }\n };\n\n return (\n <>\n <WidgetHeader\n title={mapping ? \"Modify Mapping\" : \"Add Mapping\"}\n returnFn={returnFn}\n />\n <div className='gmw-details-form-container'>\n <Fieldset legend='Mapping Details' className='gmw-details-form'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n id='name'\n name='name'\n label='Name'\n value={values.name}\n required\n onChange={(event) => {\n handleInputChange(event, values, setValues);\n validator.showMessageFor(\"name\");\n }}\n message={validator.message(\"name\", values.name, NAME_REQUIREMENTS)}\n status={\n validator.message(\"name\", values.name, NAME_REQUIREMENTS)\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"name\");\n }}\n onBlurCapture={(event) => {\n handleInputChange(event, values, setValues);\n validator.showMessageFor(\"name\");\n }}\n />\n <LabeledInput\n id='description'\n name='description'\n label='Description'\n value={values.description}\n onChange={(event) => {\n handleInputChange(event, values, setValues);\n }}\n />\n <ToggleSwitch\n id='extractionEnabled'\n name='extractionEnabled'\n label='Extract data from iModel'\n labelPosition=\"right\"\n checked={values.extractionEnabled}\n onChange={(event) => {\n setValues({ ...values, extractionEnabled: event.currentTarget.checked });\n }}\n />\n </Fieldset>\n </div>\n <ActionPanel\n onSave={onSave}\n onCancel={returnFn}\n isSavingDisabled={!values.name}\n isLoading={isLoading}\n />\n </>\n );\n};\n\nexport default MappingAction;\n"]}
1
+ {"version":3,"file":"MappingAction.js","sourceRoot":"","sources":["../../../../src/widget/components/MappingAction.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*--------------------------------------------------------------------------------------------*/\nimport { Fieldset, LabeledInput, Small, ToggleSwitch } from \"@itwin/itwinui-react\";\nimport React, { useState } from \"react\";\nimport ActionPanel from \"./ActionPanel\";\nimport useValidator, { NAME_REQUIREMENTS } from \"../hooks/useValidator\";\nimport { handleError, handleInputChange } from \"./utils\";\nimport \"./MappingAction.scss\";\nimport { useMappingClient } from \"./context/MappingClientContext\";\nimport type { Mapping } from \"@itwin/insights-client\";\nimport { useGroupingMappingApiConfig } from \"./context/GroupingApiConfigContext\";\n\nconst defaultDisplayStrings = {\n mappingDetails: \"Mapping Details\",\n};\n\nexport interface MappingActionProps {\n mapping?: Mapping;\n onSaveSuccess: () => void;\n onClickCancel?: () => void;\n displayStrings?: Partial<typeof defaultDisplayStrings>;\n}\n\nexport const MappingAction = ({ mapping, onSaveSuccess, onClickCancel, displayStrings: userDisplayStrings }: MappingActionProps) => {\n const { getAccessToken, iModelId } = useGroupingMappingApiConfig();\n const mappingClient = useMappingClient();\n const [values, setValues] = useState({\n name: mapping?.mappingName ?? \"\",\n description: mapping?.description ?? \"\",\n extractionEnabled: mapping?.extractionEnabled ?? true,\n });\n const [validator, showValidationMessage] = useValidator();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n const displayStrings = { ...defaultDisplayStrings, ...userDisplayStrings };\n\n const onSave = async () => {\n try {\n if (!validator.allValid()) {\n showValidationMessage(true);\n return;\n }\n setIsLoading(true);\n const accessToken = await getAccessToken();\n mapping\n ? await mappingClient.updateMapping(accessToken, iModelId, mapping.id, {\n mappingName: values.name,\n description: values.description,\n extractionEnabled: values.extractionEnabled,\n })\n : await mappingClient.createMapping(accessToken, iModelId, {\n mappingName: values.name,\n description: values.description,\n extractionEnabled: values.extractionEnabled,\n });\n setValues({\n name: mapping?.mappingName ?? \"\",\n description: mapping?.description ?? \"\",\n extractionEnabled: mapping?.extractionEnabled ?? true,\n });\n onSaveSuccess();\n } catch (error: any) {\n handleError(error.status);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <>\n <div className='gmw-details-form-container'>\n <Fieldset legend={displayStrings.mappingDetails} className='gmw-details-form'>\n <Small className='gmw-field-legend'>\n Asterisk * indicates mandatory fields.\n </Small>\n <LabeledInput\n id='name'\n name='name'\n label='Name'\n value={values.name}\n required\n onChange={(event) => {\n handleInputChange(event, values, setValues);\n validator.showMessageFor(\"name\");\n }}\n message={validator.message(\"name\", values.name, NAME_REQUIREMENTS)}\n status={\n validator.message(\"name\", values.name, NAME_REQUIREMENTS)\n ? \"negative\"\n : undefined\n }\n onBlur={() => {\n validator.showMessageFor(\"name\");\n }}\n onBlurCapture={(event) => {\n handleInputChange(event, values, setValues);\n validator.showMessageFor(\"name\");\n }}\n />\n <LabeledInput\n id='description'\n name='description'\n label='Description'\n value={values.description}\n onChange={(event) => {\n handleInputChange(event, values, setValues);\n }}\n />\n <ToggleSwitch\n id='extractionEnabled'\n name='extractionEnabled'\n label='Extract data from iModel'\n labelPosition=\"right\"\n checked={values.extractionEnabled}\n onChange={(event) => {\n setValues({ ...values, extractionEnabled: event.currentTarget.checked });\n }}\n />\n </Fieldset>\n </div>\n <ActionPanel\n onSave={onSave}\n onCancel={onClickCancel}\n isSavingDisabled={!values.name}\n isLoading={isLoading}\n />\n </>\n );\n};\n"]}
@@ -114,13 +114,8 @@ export class QueryBuilder {
114
114
  }
115
115
  needsQuote(propertyField) {
116
116
  // list of property types that need quote around property value
117
- if (propertyField.type.typeName.toLowerCase() === "string") {
118
- return true;
119
- }
120
- if (propertyField.type.typeName.toLowerCase() === "uri") {
121
- return true;
122
- }
123
- return false;
117
+ const typeName = propertyField.type.typeName.toLowerCase();
118
+ return "string" === typeName || "uri" === typeName;
124
119
  }
125
120
  addRelatedToQuery(unionIndex, propertyField, propertyName, propertyValue) {
126
121
  var _a, _b;